右上↗

プログラミングに関するメモをのこしていきます

我を通すことと全体最適を一致させる

2024年が終わる。実は今年のテーマは「意志を持って仕事をすること」だった。自分の強みはカバー範囲が広いことにあると思っていて、結果として穴埋めに走りやすく、大きな成果を生めていないという2023の反省からきたテーマだった。 ふりかえると、まぁなん…

簡単そうな小粒の開発が連打する機能こそ難しい

長くサービス開発をしていると、機能領域ごとに開発する内容に特色が見えてくる。ある領域は深く難しい開発が求められ、ある領域は簡単な変更を大量にやる開発が求められる。 前者の方が分かりやすく難しいので注目を集めやすいが、実は後者の方が本当は難し…

他人の仕事への許容度はどうあるべきか

人と仕事をすると、自分の思ってた感じじゃないやり方や成果物が出てくることがある。そういう時にどこまでを許容するか。いろんな観点があると思うので考えてみたい。 大前提だが、そもそも共同で仕事をする上で、やりかたや成果物についての期待値を揃える…

プレイングできるマネージャーだからこそできる攻め方がある

と思うのだけど、どうだろうか。 プレイングマネージャーってあんまり認められないというか、基本的には良くないこととされていると思う。 自分は、別にいいんじゃないかなと思っているので、なんでそう思っているのか書いてみたい。 まず前提として、マネジ…

サーバーサイドKotlinのエコシステムって意外と多様性がないなと思った話

なんでだろうね。 お前が作るんだよって話もあると思うのだけど、それにしても極端に少ない印象を受けている。 たとえば Go や Python, TypeScript, Rust あたりは、雨後の筍のように HTTP Server を書くためのライブラリが乱立している。それぞれに特徴があ…

エンジニアの個人技でチーム開発を加速する

ひとりひとりのソフトウェアエンジニアの生産性には顕著な差があり、いわゆるスーパーハッカーはひとより100倍生産性が高いみたいな話は世にありふれている。 個人的な実感としても正直これはそうかなと思う。自分と比較して、圧倒的な生産性を発揮するソフ…

はやく開発するためにできること

ってなんだろう、というのを考えている。 プロジェクトが肥大化・遅延して、もっと早くリリースするためにできることを探しているシチュエーション。 まず前提として、作るもののスコープを絞るというのがある。これは意識しているところが多いのではないか…

いろんな問題を「意思の問題」と捉えない方がいい

チームで働いていると、いろんな問題が起きる。 いろんな問題が起きると、原因を特定して対処する必要がある。 ここで、意思が原因であると捉えてしまうといろいろと辛くなる。 自分自身に対して、意思が原因であると内省するのは構わないと思う。自分は割と…

フレームワークを作れる人に憧れながら、ユーティリティを作る

エンジニアとして働くにあたって、無意識に気をつけていたことを自覚するたびに、言語化しておきたいなと思うようになりました。 今日はフレームワークを作らないようにしている話を書いてみます。 (個人ブログを育てていたのですが、なんとなくはてなブロ…

2023年ふりかえり

2023年が終わるので、ふりかえり。 仕事 株式会社ヘンリーで引き続きエンジニアをしている。今年もやることがちらほらかわって飽きない良い環境だった。 ロール ヘンリーに入社して2年が経ちました で書いた通り、チームリードをやっていました。 今年は、チ…

PostgreSQLでカラムの型や制約を取得する方法

jooq のように、RDBのスキーマからコードを生成するツールをほしいシーンがあった。 「こういうテーブルがあって、そこにはこういう名前のカラムがあって、そのカラムの型はこうで、制約はこうだ」という情報をつかってコードを生成したい。 DDLをパースする…

ISUCON13に「都営三田線」で参加して 227,377 → failしました!

ISUCON13 お疲れ様でした! 今年も「都営三田線東急目黒線直通急行日吉行」というチームで参加しました。 チーム編成は 7 年連続(?)同じメンバーで、0gajun と izumin の 3 人チームでした。 最終スコア 227,377 点からの fail という猛烈に悔しい結果に終わ…

Nord Theme を使い始めた

Nord を使い始めた。 昔は color scheme を変えて気分転換する、というのはとても頻繁にやっていて、自分の中ではお手軽リフレッシュのネタだった。 が、iTerm2, VSCode, Vim, IntelliJ, etc... と、いろんなツールを使っていると、色が揃わない気持ち悪さが…

ヘンリーに入社して2年が経ちました

株式会社ヘンリー(レセコン一体型クラウド電子カルテサービスを主力として医療 DX に取り組んでいるスタートアップ)に転職して早くも 2 年が経過しました。 当初は、入社エントリー記事を書くつもりでしたが、あっという間に 2 年が過ぎてしまったため、こ…

Zig Snippets: string to enum

Zig で []const u8 から enum に変換する たぶん builtin にも存在しない気がする?のですが、逆 (enum → string) は @tagName で可能なので、 @typeInfo や inline for をくみあわせて以下のように書くことができます。 const std = @import("std"); const …

Zig Patterns: Diagnostics

最近流行りの zig について、どうやら self-hosting compiler がデフォルトになったという話を聞いて興味を持ち、ちょっと実装を読んだりしながら遊んでみています。 いろいろと特徴的な言語なのですが、今回は error の話です。 前提: Zig の error handlin…

maturin でさくっと Rust 製 Python 拡張を書く

機械学習やデータ処理をやっていると、一部だけ Python では遅すぎるので C, C++, Rust のような高速な言語で処理を書きたくなることがまれによくあります。 C++ なら pybind11、Rust なら PyO3 が非常に有名で、これらをつかえばかなり簡単に Python <-> C+…

ISUCON11予選に「都営三田線」で参加して予選2位で本戦出場きまりました!!

ISUCON11 予選お疲れ様でした! 「都営三田線東急目黒線直通急行日吉行」というチームで参加し、予選 2 位で通過することができました。 チーム編成は 5 年連続同じメンバーで、0gajun と izumin の 3 人チームでした。 記念スクショ ISUCON11 Portal ISUCON…

pgjdbc の SQLException.getErrorCode() は常に 0 を返す

最近になって仕事で初めて JVM 上で動く言語を書いています。 そこでちょっとハマったことがあり、色々調べて解決したのでメモがてら共有しようと思い、記事にすることにしました。 もっと遭遇している人多そうなんですが、パッとググった限り日本語でこの問…

RecSys Challenge 2020 に "Team Wantedly" で参加し3位に入賞しました!

Wantedly の同僚二名とチームを組んで、国際学会 RecSys 2020 の併設コンペである RecSys Challenge 2020 に参加しました。 最終的に 賞金圏内である 3 位 を獲得し、RecSys 併設 Workshop への論文投稿と口頭発表をすることも決定しました!!! RecSys は…

atmaCup #5 に参加してきて Private 29 位(Public 27 位)でした!

atmaCup #5 に参加してきました! atma.connpass.com Kaggle 以外のコンペに参加したのは初めてだったのですが、お祭り感があってとても楽しかったです! 参加者・運営全体で盛り上げていく雰囲気があったので、初参加でしたが最後までモチベーション高く取…

"Applying Deep Learning To Airbnb Search" を読んだ

[1810.09591] Applying Deep Learning To Airbnb Search を読んだときのメモをそのまま出してみます。面白かった。 本当にメモなので、詳細は原文を読んでください。 airbnb の search ranking に deep learning を導入していく過程を論文っぽくしたもの。 …

golang でテストのために時間を操作するライブラリ timejump

現在時刻に依存するコードをテストするとき,golang で time.Now を普通に使っているとモックできずうまくテストが書けないという問題があります. 時間の操作は time パッケージをそのまま使えば良いのですが,time.Now だけはモックできるようにしたいとこ…

ISUCON 7 本戦出場してきました 「都営三田線東急目黒線直通急行日吉行」

ISUCON 7 お疲れ様でした! 僕らのチーム,「都営三田線東急目黒線直通急行日吉行」は学生枠 2 位,全体で 10 位という結果でした. 予選の結果が異常によかったので完全に調子に乗っていたんですが,本戦はやっぱり難しかったですね... 本戦でも社会人上位…

ISUCON7予選1日目に「都営三田線」で参加して通過できた話

ISUCON7 予選お疲れ様でした! タイトルどおりですが,「都営三田線東急目黒線直通急行日吉行」という学生チームで参加し,1日目3位枠で通過することができました. チーム編成は,去年2人チームで参加したときの相方である 0gajun と,僕の内定先の同期の i…

go generate する時のバイナリのバージョンを固定したい

https://github.com/golang/mock は mockgen というコマンドを提供しています. これは,interface から mock を自動生成するコマンドで go generate と合わせて使うと interface に追従する mock がとても簡単に作れます. 他にも yacc とかリソースをバイ…

Rust で Unix のシグナルを channel 経由でキャッチする

Rust でシグナルハンドリングをする必要があったのですが,あまり自分の用途にあるライブラリがなかったので作りました. 僕が Windows のことをほとんどわからないので,Windows 未対応です. github.com docs.rs https://crates.io/crates/signal-notify g…

BK-tree を golang で実装した

先日はてぶに 興味深いデータ構造:BK木 | プログラミング | POSTD という翻訳記事 ( 元記事 http://signal-to-noise.xyz/post/bk-tree/) があがっているのをみて初めて BK-tree というものを知ったので,golang で実装してみました. github.com BK-tree と…

Rust でグラフ構造や木構造を作る

プログラムを書いていると何かしら木構造っぽいものやグラフっぽいものを作りたい場面が多々あると思います. Rust は所有権や Size の都合で,これらを作ろうと思うと地味にハマるのでまとめておきます. Rust で木構造 最も単純な木構造は Rust だと enum …

mio で echo サーバメモ

Rust の非同期 IO ライブラリのなかでももっとも低レベルなレイヤーを担っている mio を使ってecho サーバを書いた。 echo サーバばっかり書いているような気がするけど,echo サーバやっておくと簡単な割にライブラリの使い方とかがちゃんと分かる気がする…