右上↗

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

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

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

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

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

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 サーバやっておくと簡単な割にライブラリの使い方とかがちゃんと分かる気がする…

NCurses の Crystal binding を作った

この記事は、 Crystal Advent Calendar 2016 の8日目の記事です。 qiita.com ncurses という CUI を作るためにスクリーンやキー入力を扱う有名なライブラリの Crystal binding を作りました。 github.com ほとんど C の ncurses と同じ感じで使えるようにな…

Rust で Box に包まれた構造体の所有権分解

ちょっとはまったのでメモ struct A { foo: Vec<i32>, bar: Vec<bool>, } こんな構造体があったとする。 普通、A の所有権を分解して foo と bar にしたいときは fn xxx(x: A) -> (Vec<i32>, Vec<bool>) { let A { foo, bar } = x; (foo, bar) } とやれば良い(この例だともっと簡</bool></i32></bool></i32>…

日本語の改行を適当にいい感じにするツールを作りました

必要に迫られて、HTML ページ内の改行位置をいい感じにするツールを作ってみました。 github.com HTMLに長文を書くと、親 DOM のサイズの制約上、適宜改行がぶちこまれます。 しかし、改行位置は文節を考慮などせずにごりっと挿入されるので、多くの問題が生…

Rust の Result と Iterator

Rust には失敗するかもしれない値を表す Result<T, E> という型があります。 std::result::Result そして iterate できることを表す Iterator という trait があります。 std::iter::Iterator また、Iterator trait は要素型を表す関連型を持ちます。例えば String</t,>…

値と参照について

「値」と「参照」という言葉があります。 このへんの言葉について、今の理解をまとめておこうと思います。 言葉の定義や理解が誤っている部分があればご指摘ください。 まず、前提として以下では、「値」ベースの言語として C, C++, Rust などを、「参照」ベ…

再帰的 grep ツール crepe を作っています

再帰的にパスをたどりながらパターンにマッチする行を検索する grep 系のツールを作っています。 agatan/crepe 有名どころとしては、ack とか ggreer/the_silver_searcher(ag) とか monochromegane/the_platinum_searcher とか tkengo/highway なんかがあり…

C++ で result 型を作る

Haskell や Rust など多くの強力な型システムを持つプログラミング言語は、Either とか Result といった「失敗するかもしれない」計算の値を示す型を持っています。 現在の C++ の標準ライブラリにはこのような型はありませんので、それを自作してみようとい…