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

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

所属変更のお知らせ

2024年6月1日より下記の通り所属が変更されます。旧: SB Intuitions株式会社(ソフトバンク株式会社からの100%出向) 新: 株式会社スマートバンク前回の所属変更からわずか2ヶ月しか経っておらず非常に気まずい状況ですが解雇ではありません。色々ありました…

所属変更のお知らせ

2024年4月1日より id:moznion の所属が以下の通り変更となります。旧: 株式会社ソラコム 新: ソフトバンク株式会社 (SB Intuitions株式会社出向)以上となります。 引き続きよろしくお願い申し上げます。 ソラコムには大体6年半くらいいて、実際数えきれない…

GitHub Actionsで複数のworkflowを連携する時にハマったあれこれ

GitHub Actionsで或るworkflowが終わったら別のworkflowを動かす、みたいなことをやりたくなった時にちまちまハマったのでメモとして残します。 workflow_run で呼び出されたworkflowで前workflowのステータスを取る これはハマったことというか「こうやれば…

Linuxでdocker loginした際、passを使ってcredentialsを管理することで情報をファイルに残さないようにする

docker login するとデフォルトの状態では $HOME/.docker/config.json の .auths にcredentialsが保存されます。credentialsが平文で保存されるというのもナンなのでこれをパスワードマネージャを介すように変更しましょう。パスワードマネージャには手っ取…

NetworkManager 1.36においてL2TP/IPSecのトンネルが上手く張れない問題

NetworkManagerのversion 1.36においてL2TP/IPSecのトンネルを張ろうとすると上手く張れないという問題があります。 自分が使用しているUbuntu 22.04ではL2TP接続は標準では提供されていないのでnetwork-manager-l2tpパッケージをapt等でインストールする必…

Linux DesktopでIntelliJ IDEA 2023.1を4Kディスプレイ上で表示すると色々デカくなって困る

IntelliJ IDEAを2023.1にアップグレードして4Kディスプレイ上で起動したところ、スケールの設定がおかしいのかすべてがデカくなり、相対的に作業領域が狭くなって困っています。たぶんLinux Desktopでだけ発生している問題のようで、同じような症状が既にレ…

#yapcjapan YAPC::Kyoto 2023に行ってきた・喋ってきた

yapcjapan.org2023年3月19日に開催されたYAPC::Kyoto 2023に参加してきました。もう2週間も前の話になるんですね......USに戻ってきてから色々あり、すっかりブログを書くのが遅くなってしまいました。YAPC::Kyotoの様々な感想については「にゃんこ酒場.fm」…

地獄! YYYYMMDDだと思っていたらYYYYMDとして扱われていた情景

たとえば 2023111 という日付が登場した時、これは 20230111 とも 20231101 とも解釈がされうるということです。 にわかには信じがたい出来事ですが太古のコードを眺めているとそういうことがあります。大変ですね。これが生きるということと言うこともでき…

YAPC::Kyoto 2023で話します! そしてチケットを今すぐに購入しましょう!!

YAPC::Kyoto 2023の採択トークが決まったようですね。面白そうなトークが沢山あってすごいですね。blog.yapcjapan.org僕のトークが採択されていない......というのはトリックで、今回は畏れ多くもゲストスピーカーとして招待されましたので、そちらの枠でお…

GoのHTTPクライアントがAWS NLB配下にあるコンポーネントと通信するときに5-tupleが分散しないので特定のインスタンスにしか負荷分散されないという話題

Microservicesのようなものを考えた際、Goで書かれたコンポーネントがHTTP(S)を使って他のコンポーネントと通信するという場合があると思います。 その「他のコンポーネント」がAWS NLBの配下にある時、GoのHTTPクライアントがTCPコネクションを使い回す場合…

IP Routing TableのGo実装 "go-iprtb" 書いた

GoのIP Routing Tableの実装について調べてみたところ、だいたいOSのRouting Tableを操作する系のライブラリがヒットし *1、そうではなくユーザー側コードでRouting Table相当の実装・処理をしたい時に使えそうなライブラリがパッと見当たらなかったのでそれ…

CのShared LibraryにしたGoのコードで簡単にダングリングポインタを発生させる

例えば以下のようなGoのコードを書き、 package main import "C" import ( "fmt" ) //export DoSomething func DoSomething(cstr *C.char) { fmt.Printf("Go: %s\n", C.GoString(cstr)) } func main() { } go build -buildmode c-shared -o libdosomething.s…

ts-dynamodb-attributes-transformer - TypeScriptオブジェクト向けDynamoDB Attributes変換器

TypeScriptのオブジェクトをAmazon DynamoDB Attributes (正確には aws-sdk-js-v3 がサポートする Record<string, AttributeValue>) に自動変換するTypeScript Transformer Pluginであるts-dynamodb-attributes-transformerをリリースしました。npmからもご利用いただけます。これはT</string,>…

docker composeでワンショットタスクを実行する

TL;DR docker compose up --abort-on-container-exit[追記]docker compose run だとredis serviceがstopしないからダメ的な話?— r7kamura (@r7kamura) 2022年9月19日 docker compose run --rm ${service_name} で良かった...... [追記ここまで] 例えばなん…

特定のユーザーのイベントによるGitHub ActionsのActionを保留状態にしておき、後で手動実行できるようにする

dependabotだとかrenovateだとかを使ってライブラリのバージョンアップのpull requestを自動的に送ってもらう、というような機構を利用されている方が多いと思います。 常にこれらのpull requestに目を光らせておいて常に取り込み続けるというのが理想的な形…

zigコードから生成したdynamic libraryおよびstatic libraryをCでコンパイルして使う

zig

TL;DR zig ccを使うと色々と簡単、特にstatic linkをする場合はハマりにくく楽なので、使える場合は使うと良さそうです。 zig cc自体、gccやclangのdrop-in replacementを目的として出来たCコンパイラなので多くの場合はそのままポンと乗せ替えができそうで…

令和最新! Linux Desktop環境上の tmux (3.3a) でOSのクリップボードとtmuxのコピペバッファを直結する

Linux Desktop上でterminalを使っている時にOSのクリップボードとtmuxのコピペバッファを直結させたいという話です。 つまり Prefix + [ 等でtmux上で範囲選択してEnterを叩いた時にその内容がOSのクリップボードに格納され、Prefix + ]でペーストする時はOS…

S3にホストされているMaven RepositoryをMaven (pom.xml) から参照する

S3にホストされているprivateなMaven Repositoryというものがあり、それをMaven (pom.xml) から参照する必要があったのでの方法についてのメモ。Gradleとかsbtとかからは割と使ったことはあったのだけれど、Mavenからは無かったので…… <project> ... <repositories> <repository> <id>your-repositor</id></repository></repositories></project>…

Zigのビットシフト演算がちょっと面白い

zig

なんとなくZigを触っているのですが、ビットシフト演算が独特の挙動で面白かったです。 const n: u8 = 0b00000001; const shifted: u8 = n << 1; std.debug.print("{b}\n", .{shifted}); // => 0b00000010 これは直感的なコードでしょう。n が1バイト左にシ…

書評: ISUCONを「ゴール」で終わらせない。『達人が教えるWebパフォーマンスチューニング ~ISUCONから学ぶ高速化の実践』

達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践作者:藤原 俊一郎,馬場 俊彰,中西 建登,長野 雅広,金子 達哉,草野 翔技術評論社Amazon著者のid:catatsuyさんよりご恵投いただきました。ありがとうございます。実は著者の方から本を…

protoc-gen-java-dynamodb書いた / protoc pluginはじめて書いた

protobufでスキーマを書いて protoc-gen-java-dynamodb に食わせると、そのスキーマのJavaの生成コードに「生成されたDynamoDBのエンティティクラスのコード」を良い感じにねじ込んでくれるというprotocプラグインを書きました。 syntax = "proto3"; package…

一定のインターバル期間中に stdin に何かが来る、あるいは来ない時に任意のコマンドを実行するツール "conk" を書いてた

github.comこれ去年書いたツールなのでいつの話をしておるのかという感じですけれども、一定のインターバルの間に stdin 経由で何かデータが来た時あるいは来なかった時に任意のコマンドを実行するツールを書いていました。使い方の例としては $ ./do_someth…

openapi-generator を使って go のファイルを生成した時に出てくる `var _ context.Context` の謎

openapi-generator を使って go のコード生成をすると、 // Linger please var ( _ context.Context ) という一見不要そうな変数宣言がコード中に出てきます。これはなんなのでしょうか? 「残しておいてね」とは書いてありますが…… TL;DR たぶんこれ過去の…

API越しでタイムスタンプをやりとりする時のフォーマットをどうするべきか

APIのリクエストにせよレスポンスにせよ、タイムスタンプを利用するというのはよくある話です。 この時、そのタイムスタンプのフォーマットをどうするのが良いのかという話題です。IDLを使って縛るというというのは良い考えだと思いますが、IDLを使うにせよ…

実行中のシェルスクリプトをchattr(1)を使ってimmutableにするというのはどうか

[追記] 実行中のシェルスクリプトをchattr(1)を使ってimmutableにするというのはどうか - その手の平は尻もつかめるさ調べてみたけどこれが良さそう <a href="https://stackoverflow.com/a/3399850/1921216" target="_blank" rel="noopener nofollow">https://stackoverflow.com/a/3399850/1921216</a>2022/01/02 17:02b.hatena.ne.jp このブックマークコメントで…

古いaws/aws-lambda-goでAWS Lambdaのcontainer image runtimeを使うと刺さる

具体的に言うと、aws/aws-lambda-go@v1.18.0よりも前のバージョンでAWS Lambdaのcontainer image runtimeを使うとハンドラが呼び出されず、タイムアウトするまで刺さります。例えば以下のような非常に簡単なLambda Functionをデプロイした時、 package main …

テクノブレーン被害者アドベントカレンダー Day 19

この記事はテクノブレーン被害者アドベントカレンダーの19日目として書かれています。このアドベントカレンダーは今まさに作りましたから、参加者は自分しかいません。他に被害者がいたら続きを書いておいてください。 この記事は特定の企業に対する苦情およ…

SORACOM ArcをESP32のArduinoで動かすsoracom-arc-esp32-arduinoのご紹介

こんにちは、株式会社ソラコムでソフトウェア等のエンジニアをやっているmoznionです。 普段ブログには書かない所属を宣言するのはなぜか。それはこれが株式会社ソラコム Advent Calendar 2021 17日目の記事だからです。というわけで記事が書かれます。前日…

Go Genericsを使ってgo-optionalを書いた / Go Generics感想

Go Genericsがどんなもんか試してみたかったので、これを使ってOptionの実装を書いてみました。github.com基本的な使い方としてはSynopsisを読んでもらえばわかると思いますが、ユーティリティとしては IsSome() IsNone() Take() TakeOr() TakeOrElse() Filt…

MySQLのJSON Data Typeの値に対し、明示的なキャスト無しに `BETWEEN`, `IN()`, `GREATEST()`, `LEAST()` を使ってはならない

表題の通り、MySQLのJSON Data Typeの値に対しては、明示的なキャスト無しに BETWEEN, IN(), GREATEST() そして LEAST() を使ってはいけません。MySQLむずかしい pic.twitter.com/YKoadLbaG2— すぎゃーん (@sugyan) 2021年9月7日 本記事はこれに係る話題で、…