その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

pprof を使って nodejs アプリケーションのプロファイルを取る

pprof って go のやつでしょ? node のプロファイルが取れるわけ無いやろ,と僕も思っていたんですが以下のライブラリを使うことで取れることがわかりました.github.com使い方については Using the Profiler に書いてあるとおりで,アプリケーション側に co…

ISUCON 9 決勝を AWS 環境に本番さながらに構築するメモ

github.com今日 (2020-09-24) の時点では「ローカル環境」で動かす方法については記載がある一方で,何らかのリモートの環境に「本番」っぽく動かす方法についての記載が無いので,それを AWS 上に構築するためのメモを記します. 競技用 application のデプ…

Jenkins + AWS CodeBuildという構成をやめました

かつて Kyoto.なんか #4 で発表した話題ですけれども:moznion.hatenadiary.comこれはもうやってません!!!(正確に言うと運用している組織内ではリタイアメントの段階に入っています) 今はCodeBuildを単体で使っています. かつての AWS CodeBuild は ビ…

GitHub Packagesにホストされたprivate packageをsbtから使う

表題のとおりです. GitHubのオフィシャルドキュメントを読むとmavenで使う方法やgradleで使う方法は紹介されているのですがsbtで使う方法が調べてもシュッと出てこなかったのでメモとして記す次第. 基本的には以下のようにmavenやgradleと同様にbuild.sbt…

いい感じにPHP Runtimeのdebパッケージを作る

PHPのエッジなバージョン (例えば今の時点だと 8.0.0alpha3) を使いたい場合,多くの場合はソースコードからビルドする必要があります.その他にもランタイムのオプションをいじりたいだとか,そういった様々な理由からPHPをソースコードからビルドしなけれ…

The Perl Foundationに寄付した

本質の話をしました pic.twitter.com/8fCYIbH6Av— moznion (@moznion) 2020年6月24日 perl,やはり心のふるさとという感じがある……(流石に全盛期と比較して手のスピードは落ちたけど 大きな問題は他の人にとってふるさとではないということです とりたてて…

Javaの非同期アプリケーションのflame graph profileを取る

netty を使うような非同期 Java のアプリケーション (例えば Play2 Web アプリ) の flame graph profile を取るという話題です.色々な方法が考えられますが,jvm-profiling-tools/async-profiler を利用するのが最も手っ取り早そうな感じがしたので,その方…

tinygo 向けの JSON marshaler: go-json-ice を書いた

English article is here: Released go-json-ice: a code generator of JSON marshaler for tinygo - moznion's tech blog tinygo では encoding/json を import するとコンパイルできなくなるという問題があり *1,なんらかの struct を JSON に marshal し…

td-agent-gem で `google-protobuf requires Ruby version < 2.8.dev, >= 2.5.` みたいなエラーが出るって時

td-agent-gem を利用している時に google-protobuf requires Ruby version = 2.5. というエラーがでて困るという事がありました.support.treasuredata.comtd-agent の ChangeLog を見た感じ,この記事を書いている時点での td-agent の最新バージョン v3.7.…

Email::MIME::ContentType が build_content_type と build_content_disposition を提供するようになっていた

Perl の話です.metacpan.orgEmail::MIME::ContentType 1.023 (なお本バージョンは TRIAL Release となっています) 以降から build_content_type と build_content_disposition という関数が追加されています.それぞれ名前の通り Content-Type と Content-D…

Redis の Slave (Replica) の Expire は 4.0 RC3 以降信用して良くなっている

maedama.hatenablog.com trapezoid.hatenablog.com上記のブログには今から6年ほど前の当時の情報が記されていますが,Redis 4.0 RC3 以降の Slave (replica) の Expire は信用して良くなっているようです. Redis の公式ドキュメント (Replication – Redis) …

Spotless を sbt から利用するための plugin: sbt-spotless をリリースしました

sbt

github.comSpotless を sbt から利用するためのプラグインであるところの sbt-spotless をリリースしました.Spotless は意欲的に開発されている Java (JDK 言語) のプロジェクト向けのコードフォーマッターで,実に様々なフォーマットに対応しています *1.…

zabbix-internal-checks-exporterをリリースしました

github.com表題の通りリリースいたしました. これはなに Zabbix internal checks と呼ばれる Zabbix プロセスの状態を表現するメトリクスを定期的に収集し,Prometheus のメトリクスフォーマット (i.e. OpenMetrics) で export する Prometheus exporter で…

jackson-databind で int の取りうる値を超えた場合の挙動

Javaの話題です.jackson-databind を使って JSON のデシリアライズを行っていて,数値を int にマッピングしている場合,その値が int (32bit) の取りうる値を超えた時の挙動が「バージョンによって異なって」います. 以下に挙げる挙動は 2.9.3 から 2.9.4…

pcapng ファイルを pcap ファイルに変換する

基本的に Wireshark を使うことで得られるパケットキャプチャファイルは pcapng と呼ばれるフォーマットになっており,これは pcap フォーマットとは異なります.例えば複数のパケットキャプチャファイルを時系列に従ってマージできるコマンドラインツールで…

AWS CodeBuild で AWS CDK を実行する時に IAM Role に S3 の権限を与えないとハマる

AWS CodeBuild から AWS CDK を呼び出し,いい感じで継続的に構成を更新し続けるパイプラインのようなものを作っておくと何かと便利です. さてこの時,AWS CodeBuild を実行する IAM Role の権限がそのまま AWS CDK の実行に影響するので,その IAM には Cl…

シェルスクリプトで空きポートを取ってきたいという時

kazuho さんのこれをシェルスクリプトでやりたいというお話です.kazuhooku.hatenadiary.orgこんな感じ: nc -l 0 & NC_PID=$! lsof -n -P -p $NC_PID | grep TCP | awk '{print $9}' | awk -F ':' '{print $2}' kill $NC_PID nc で ephemeral port を listen…

macOS 上で pythonz を使って python をインストールする時に openssl 周りをいい感じにする

macOS 上で pythonz を使って素朴に python をビルドしてインストールすると SSL/TLS 周りでずっこけて基本的に使えないものがインストールされる (そもそも pip とかが動かないので). brew で openssl を入れている場合は以下のように pythonz install す…

Raspberry Pi を Read-Only Root-FS にする & メモリがいっぱいになったらどうなるのか

Raspberry Pi を Read-Only Root-FS にしておくと急にマシンがダウンした時でもファイルシステムが破損しにくくなります. もちろん書き込み内容は永続化されなくなりますが (書き込み内容は tmpfs にストアされるので rebootで揮発する),得てして電プチな…

Zabbix 4.x で API を使って Active な Problem だけを引っ張ってくる方法

要旨 どうやれば Zabbix API を使って所望の機能を実現できるかを調査する際には Zabbix が実際に呼んでいる SQL クエリを tcpdump で抜き出すと手っ取り早い. 内容 色々あってZabbixを使っているわけですが,この手のものを使っているとAPIを介して Active…

AWSでMFAを利用しつつセッショントークンをいい感じで取ってくるツール "sesstok" を書いた

github.com書いたと言っても書いたのは3ヶ月近く前でした.リリース告知をしていないことに気づき,本記事にしている次第です。何をやるツールかというと,以下の記事に書かれていることをいい感じにやるツールでして,aws.amazon.com1. Userの accessKeyID,…

golangのstructに対してコンストラクタを自動生成するCLIツール "gonstructor" を書いた

github.com表題の通りです.出オチのような名前です.使い方やどういう挙動をするかという話題についてはREADME.mdのSynopsisをご覧いただければと思います.Javaのlombokをご存知の方はlombokの@Valueのような挙動をする,と言えばイメージしやすいでしょう…

TypeScriptのMap<K, V>をJSON.stringify()に食わせると空のオブジェクトになって困るんですけどって時

(TypeScriptに限らずJavaScriptでもだいたいこのような感じだと思いますが)例えば以下のようなコードを書くと,出力としては {"body":{}} が得られます. const body = new Map<string, string>().set("foo", "bar"); console.log(JSON.stringify({body})); 本当は {"body"</string,>…

バイナリぽん置きでGPG passphraseベースの暗号化・復号化を行うツールを書いた

表題のとおりです.github.com名前は出オチです (ref: エニグマ (暗号機) - Wikipedia)色々あってgpgコマンドが無い (入れられない) ような環境でもバイト列を暗号化・復号化したいということがあり (あと脳が悪くてgpgコマンドのオプションを覚えられない)…

CompletionStage<T>な変数を同期的に処理したいんですけど〜ってとき

Javaの話です.CompletionStage<T>を返却するようなメソッドがあって,それを同期的に処理したい (単体テストを書くというシーンが最も多いでしょう) ということが生きているとあります.しかしCompletionStageはget()のようなメソッドが生えていないので同期的</t>…

技術書典7 (く39D) にて「ATコマンドかるた」を頒布します!!!

技術書典7,SORAZINE技術組(く39D)*1 にて「ATコマンドかるた」を頒布いたします.techbookfest.org「ATコマンドとはなにか?」という疑問については同時に頒布される SORAZINE 技術組 Vol.2019F 中の,おそらく今のところ日本で最も詳しいATコマンドの解…

Kyoto.なんか #5で「AWS上に構築する メンテ容易なElasticsearch System」というタイトルで話してきました

表題の通りKyoto.なんか #5で話してきました.もうかれこれ3週くらい前の話なのですね……筆不精がたたっております.kyoto-nanka.connpass.com内容としてはここ数年ElasticsearchをAWS上で運用しているのでそのアーキテクチャのご紹介という感じの発表をした…

builderscon 2019見本市 (土曜12時から) で自作ガジェット展示します

id:uzulla, id:mackee_wらと共に自作のE-バッジを展示します! というかこのブログの内容ママです!!ここには本物があります. ぜひお立ち寄りください!!!ところでチップのデータシートを見ながらあれこれコードを書いて試しているんですが,どうやって…

tcpdumpで今すぐキャプチャ内容を全部ファイルにflushしてくれ!! というとき

tcpdumpはキャプチャした内容をバッファに蓄積してバッチ的にflushするので,うっかりプロセスを即断するとキャプチャしていた内容をdrainできないことがままあります.困りますね.www.tcpdump.org Using the SIGUSR2 signal along with the -w flag will f…

TypeScriptを使ってアプリケーションの設定ファイルを書く

アプリケーションの設定ファイルと言えばjsonやyamlなんかで書くことが多いと思うんですが,最近はTypeScriptで設定ファイルを書いております.このような感じ: export interface ApplicationConfig { readonly listenPort: number; readonly timeout: numbe…