サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16e
blog.64p.org
転職前にこのブログを Sveltekit で書き直したのだが、転職したら golang で仕事をすることになり、golang に慣れる必要性を感じた。 というわけで自分のブログを golang でちまちまと書き直すことにした。 書き換え自体はギョームで使ってるのに近い構成にすることにして ogen sqlc とかを作って書いた。 ルータは chi を採用してみる。 で、さくらの AppRun へのデプロイは apprun-cli を使おうかなぁと思ったものの、結局 curl で叩くことに。 https://github.com/tokuhirom/blog4/blob/main/deploy.sh apprun を独自ドメインでアクセスさせるためには何らかのリバースプロキシが必要になる。 今のところ、何かしら入れないと 独自ドメインでの TLS 終端ができないので。 さくらのクラウドで、S
brew list すると、homebrew でインストールしたアプリを取得することが可能だが、依存で入ってきたアプリもリストアップされてしまう。 そんなときは brew leaves を使う。brew leaves ならば依存で入ったものはリストアップされない。 ただ、この方法だと cask はリストアップされない。 cask をリストアップするには以下のようにする。 brew list --cask -1
昨年の 10月ごろに X こと twitter で @tagomoris から DM が来て誘われたので、2025年1月からさくらインターネットに入社しました。 転職エントリーってあんま書く気なかったんだけど、sugyan が書けって圧をかけてくるので。。 長らくプライベートクラウドの環境で働いていたので Public cloud を使う会社で働くのは大変そうなので、Public cloud を作ることにしました。 という冗談はともかくとして、なんか普通のウェブシステム作るのまぁまぁ飽きたなーというのがあってですね。。 13年も前職に勤めてたので飽きてきてはいたのでちょこちょこと他社の話を聞いたりはしてたんですよね。他社の B2B サービスとかを中心に見てたんだけども日本国内でいうと 前職を超える魅力とか規模感を持ってるサービスってあんまなくて、転職にいたらかったんですねえ(お時間取ってい
BOOX Palma2 6.13インチ 電子ペーパータブレット Android13 指紋認証付 アップグレード8コアCPU RAM6GB ROM128GB (ブラック) 2024年12月28日に到着。SKT の公式ストアで購入しました。 一言でいうと ポケットに入る電子ペーパー端末。 BOOX Palma 2 をなんで買ったかというと、夜寝る前にスマホ見たりとか、夜中に目がさめたときにスマホ見たりすると目が冴えちゃうみたいなのがあるんで。。 というのと、普通に読書時間を確保しようと思うとスキマ時間を活用したいわけだけど、現実的には Kindle Paperwhite とかだと常に携行するのは難しいという問題があり。その点、BOOX Palma 2 であれば、ポケットに常に入れておけるので良い。普通に文庫をポケットにいれてる感覚に近いです。値段はちょっと高めだけど、スキマ時間での読書が捗ると
なんかいろいろ似たようなのはあるんだけど、ncdu がわりと良さそうだった。 https://dev.yorhel.nl/ncdu `brew install ncdu` で入る。子ディレクトリのファイル容量多いやつを探してくれる。
KeyScripten.app:マクロの未来を切り開くプログラマブルキーボードシステム QMK で増井さんの Dynamic Macro を実装してみた のだが、Mac のレイヤーで普通にやりゃいいんじゃないかという話になったので、やってみた。 rust で実装できないかなぁと思って調べてみたところ rdev を使えば良さそうだということがわかった。が、rdev は Mac, Windows, Linux をサポートしていて抽象化レイヤーとなっていて、要件を満たせないということがわかった。 rdev を見ていると、CGEventTap というAPIがあることがわかって、これをベースにやれば良さそうだった。 CGEventTap を使うと、マウスとキーボードのイベントを取れる。CGEventCreateKeyboardEvent, CGEventCreate とかして CGEventPost
最近またLinux用の日本語IMEを作っている 本件は mozc の ut がどうこうとかは関係なくて、ふと linux desktop を使おうと昨年末に思いまして、昨年末からちまちまやってます https://github.com/tokuhirom/akaza かな漢字変換って作るの難しいのかなぁ、と思ったので作ってみている。これはまさに Just for Fun でやっている。 わりと普通に自分で常用してる分には困らないかな、というところまできている。 以下は、思ってることの垂れ流しという感じで、まとまってないですが。 「日本語入力を支える技術」という本が 2018年に出ていて、この本の内容を読めば、だいたいエンジン部分は実装できる。Amazon のレビューではこの本よんでも実装できないって書いてあるけど、変換エンジン自体は実装できます。 UI が辛い。けど。 エンジンは、ビタビア
Tomcat の session id の生成がめちゃくちゃ遅いとき Sep 27 23:41:00 dev3 docker[56810]: 2021-09-27 23:41:00.043 WARN 1 --- [nio-8080-exec-1] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [140,998] milliseconds. というようなエラーが起きるときがある(VPS などで /dev/random の entropy が十分ではない場合)。 https://newbedev.com/what-exactly-does-djava-security-egd-file-dev-urando
pytest.ini に以下のように記述すればよい。 [pytest] disable_test_id_escaping_and_forfeit_all_rights_to_community_support = true https://github.com/pytest-dev/pytest/pull/4995
-s, --silent Silent or quiet mode. Don't show progress meter or error messages. Makes Curl mute. で silence できるが、これを入れると、error message も抑制されてしまう。 -S, --show-error When used with -s it makes curl show an error message if it fails. -S を追加で入れると、エラーは stderr に出るようになるのでちょうどいい感じになる。
昔の gradle には dependency locking 機能がなかった。ビルドするタイミングによって、別の依存モジュールが利用されたりしていた。。 最近、gradle に dependency locking 機能がついたので試してみた。 carton.lock とか package-lock.json とか、そういうのと同じようなことができるようになる。 同じレポジトリからビルドしたら同じ jar が生成されるようになる。便利。 dependency locking を利用すると gradle.lockfile というファイルが生成される。 デフォルトだとフェーズ単位でファイルが生成されるから enableFeaturePreview('ONE_LOCKFILE_PER_PROJECT') を settings.gradle に書いて1ファイルにまとめるようにしたほうが良い。gr
MEMBER; added in 8.0.17 (reserved); became nonreserved in 8.0.19
ivy が最近は良いらしい https://twitter.com/typester/status/1089932791150592001 最近はhelmやめてivyつかってますよ! とのこと。僕も変えてみた。 Published: 2019-01-29 08:02:01 Updated: 2019-01-29 08:02:01
あるプロジェクトを Gradle kotlin DSL に移行した お仕事プロジェクトの一つを gradle kotlin dsl に移行させてみた。 理由としては以下。 gradle kotlin dsl を利用すると、人によるブレが少ない parenthesis の省略などができないので gradle 5.0 がリリースされると kotlin dsl が正式版となる。 実際に触ってみたい といったところで、デメリットとしてはとりあえず以下がある。 git clone して ./gradlew build したときの速度が groovy 使ってる場合よりもやや遅いらしい で、実際に触ってみた感じの感想は以下。 ドキュメントが少ない(公式ドキュメントは現状 groovy で書かれているし) プラグインごとに github.com を検索して回らないと書き方がよくわからない 現状では無理して
gRPC-WEB がもたらす我々の生活への変化 gRPC-WEB が GA となった。これが我々の生活にどのような変化をもたらすのかについて考える。 従来の gRPC の課題 gRPC は google が公開している RPC 方式であり、java, golang などの言語で利用可能になっている。 gRPC は protocol buffers over HTTP/2 を基本としているため、通信が multiplexing されるし、schema 定義がきっちりされるのでクライアント側とのコミュニケーションがしやすい。 一方、protocol buffers はbinary であるためにbinaryの取扱が苦手な Browser JavaScript からのアクセスが難しいという問題があった。 grpc-gateway grpc-gateway という実装があって、これを利用すれば Br
Re: Java 7 時代の String#split() 事情 http://blog.k11i.biz/2013/05/java-7-stringsplit.html http://d.hatena.ne.jp/chiheisen/20110801/1312119289 Java 7 以後では String#split(String) で、引数が1文字の場合は最適化が効いて、高速になるという話。 社内でなんか話題になってたので最近の JVM だとどうなのかなーと調べてみた(元エントリは5年前のもの)。 (Pattern#split にもいずれ同様の最適化が入る可能性はあるので、このベンチマークの傾向は今でも一緒なのかなーと気になったため) https://travis-ci.org/tokuhirom/java-string-splitting-benchmark 元のコードは手でベン
MySQL の X Protocol/X DevAPI 周りについて調査したのをまとめたののメモ MySQL 8 以後では X Protocol がサポートされている(5.7 系では部分的なサポートであり、X Protocol を本格的に利用する場合には 8 を利用することが推奨されているようだ) 通信は従来の MySQL Protocol と異なり、Protocol Buffers Based となっていて、各言語のドライバの実装が簡単になっている(protocol buffers がその言語でサポートされていれば、だが) これにより今後 libmysqlclient に依存せずに各言語のドライバが実装されるようになって運用管理が簡単になるんじゃないかと私は考えています。 実際に、mysql-connector-nodejsは X Protocol のみをサポートしていて、libmysq
OWASP dependency-check を利用して脆弱性のある Java ライブラリに依存していないか確認する 依存しているライブラリに脆弱性がある場合、それを検出できると嬉しい。 OWASP dependency-check の gradle プラグインを入れると、簡単に検出が可能となる。 設定は以下のようであり、非常に容易である。 buildscript { repositories { mavenCentral() } dependencies { classpath('org.owasp:dependency-check-gradle:3.2.1') } } apply plugin: 'org.owasp.dependencycheck' check.dependsOn dependencyCheckAnalyze // https://jeremylong.github.
このブログについて まあなんか、そんなにブログに書くこともないというか、うーん。 このブログ、Ruby で書かれているんですが、Ruby で書かれていると、変更しづらくて。。 いずれ Ruby 以外の言語で書き直したいと思ってて時々ちょいちょい書き直してるけど、リリースまでは至らずに消してる。 そんな日々です。
GraalVM の native-image で HelloWorld してみる 目的 https://medium.com/graalvm/instant-netty-startup-using-graalvm-native-image-generation-ed6f14ff7692 によると、graalvm を利用すると Java Application の起動が圧倒的に高速になるようだ。実際にどの程度高速化されるのかを Hello World Application を手元で実行してみることにより体感する。 実験 $ javac Hello.java $ java Hello Hello $ time java Hello Hello java Hello 0.08s user 0.02s system 102% cpu 0.097 total $ ~/Downloads/graal
lombok 1.16.20 以後で @lombok.Value された値を Jackson で deserialize しようとするとエラーになる @lombok.Value された bean に対して ObjectMapper で deserialize した場合、以下のようなエラーがある。 com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `MyGreatResponse` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (Stri
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin16] require 'msgpack' require 'benchmark' require 'json' # https://github.com/fluent/fluentd/blob/master/lib/fluent/plugin/parser_ltsv.rb class LTSV def self.parse(text) r = {} text.split("\t").each do |pair| key, value = pair.split(":", 2) r[key] = value end r end def self.generate(data) data.map {|k,v| k+":"+v }.join("\t") end end src = Ha
[package] name = "hello_world" version = "0.1.0" authors = ["Your Name <[email protected]>"] [dependencies] futures = "0.1.14" hyper = "0.11" で extern crate hyper; extern crate futures; use futures::future::Future; use hyper::header::ContentLength; use hyper::server::{Http, Request, Response, Service}; struct HelloWorld; const PHRASE: &'static str = "Hello, World!"; impl Service for HelloWorld { t
jvm はデフォルトで DNS cache が 30sec かかっている。これはやや長過ぎると web service では判断されるケースが多い。 そこで、通常ではこれを短く設定して本番環境のデプロイをしている場合が多い。 手元のあるコードでは -Dsun.net.inetaddr.ttl=1 が指定されていたが、現在では -Dnetworkaddress.cache.ttl=1 を利用すべき。 https://www.glamenv-septzen.net/view/1346 このページが挙動について詳しい。 基本的に sun.net.inetaddr.ttl は歴史的経緯で指定されている名称であり、現代では networkaddress.cache.ttl を利用する方が良い。
本文書について 本文書では Perl における Data::UUID での UUID 生成について議論する。 特に、Linux 環境に於ける Data::UUID->new->create_str の挙動について考察する。 Data::UUID について Data::UUID は Alexander Golomshtok 氏が開発したモジュールで、メンテナンスされなくなった結果として、現在は rjbs 氏がパッチの適用などの消極的なメンテナンスを実施している。 このモジュールは以下の文言からドキュメントが開始されている。 This module provides a framework for generating v3 UUIDs しかし、期待に反して、実際にはほとんどのユーザーは v1 UUID を生成している。 Data::UUID->new->create_str を利用するのが一
tokuhirom /dev/urandom って開いたまま fork して読み込んだらまずいんですっけ? 親 process で /dev/urandom 開いたまま、fork してそれぞれの子プロセスで読んだら同じの取れる? kazuho 同じの取れないですね 一般論なファイルについてもそう つまり、open file descriptionは同一なので、readしたらその中にあるfile offsetは進むので (edited)
僕が最近主に見ているブログについて以下に述べさせていただきます。 以下にあげたやつ以外に1000ぐらい購読してるけどそのへんのはあんま実用的というよりは趣味に近い感じです。 idea blog https://blog.jetbrains.com/idea/ IDEA の最新機能とかがわかって便利。 Java Annotated Monthly ってのが毎月このブログにのるので、コレだけ読んでおけばJava界隈のトピックに乗り遅れることはない。 Reddit の /r/java https://www.reddit.com/r/java/ なんだかんだ情報集めるのに便利なのは reddit。 spring blog https://spring.io/blog spring 関連のアプデ情報が集まるぞ! github blog https://github.com/blog github
DBIx::Sunny と DBIx::Class の組み合わせでコメント自動挿入機能が微妙なことになっていたのを直した https://github.com/kazeburo/DBIx-Sunny/issues/8 DBIx::Sunny は自動的にクエリ呼び出し元の位置をコメントに入れる機能がある。 しかし、DBIx::Class は Try::Tiny, Context::Preserve の内側でクエリ生成を行うため、Try::Tiny が呼び出し元として記録されてしまう。 つまり、以下のようなクエリが発行されてしまう。 SELECT /* /Users/tokuhirom/.plenv/versions/5.26.0-RC1/lib/perl5/site_perl/5.26.0/Try/Tiny.pm line 99 */ me.id, me.e FROM foo me これは不
[python] IDEA で `if __name__=='__main__':` って簡単に入力したい main って入力して補完すれば、java でいう psvm みたいなことができるとのこと。 "main"+Enterでいけると思いますよ。 — かしゅーなっつ (@kashew_nuts) August 22, 2017
次のページ
このページを最初にブックマークしてみませんか?
『TokuLog 改めB日記』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く