kawasin73のブログ

技術記事とかいろんなことをかくブログです

Rust で SQLite を再実装した 2023

気合いで実装、どうもかわしんです。 この記事は Rust Advent Calendar 2023 の6日目 兼 情報検索・検索技術 Advent Calendar 2023 の 6 日目です。 Rust で SQLite をフルスクラッチで実装しています。 github.com なぜ SQLite を Rust で再実装しようと思…

SQLite のおもしろ仕様 (2) : ファイルフォーマット

後方互換性って辛いね、どうもかわしんです。 最近 Rust で SQLite をフルスクラッチで再実装しています。 github.com 再実装するために SQLite の公式ドキュメントやソースコードを読み込んでいるわけですが、その過程で気付いたおもしろポイントを共有しよ…

天下一 Game Battle Contest 2023 に参加した

予習は大切、どうもかわしんです。 「天下一 Game Battle Contest 2023」に参加しました。4位でした。 tenka1.klab.jp 去年このコンテストの存在をちょうど終了した時に知ってやりたいなと思い、Twitter アカウントをフォローして1年待ってました。今回の大…

SQLite のおもしろ仕様 (1) : データ型

型は型、どうもかわしんです。SQLite では型は絶対ではなく、あくまでも尊重です。信用しすぎると裏切られます。 最近 Rust で SQLite をフルスクラッチで再実装しています。 github.com なるべく本家の SQLite と compatible にするために SQLite のドキュ…

SQLite を再実装する時に役にたつドキュメント

困った時はドキュメント、どうもかわしんです。最近、諸事情で SQLite のドキュメントを読んでいます。 前回の記事 で紹介した通り SQLite を Rust で再実装しています。おかげさまで 300 を超える Github Star もいただき嬉しいです。 github.com SQLite は…

Rust で SQLite を再実装している

セキュリティを盾に一点突破。どうもかわしんです。最近 Rust で SQLite を実装してます。 以前の記事で HTTP Parser を Rust で実装しようとしたものの、すでに実装されていたので断念しましたが、いい題材を見つけました。SQLite です。開発中のリポジトリ…

AI とソフトウェアエンジニアの未来予想

キャリアの危機。どうもかわしんです。 この記事の内容は全て僕個人の意見であり、所属する組織を代表するものではありません。 最近周りで ChatGPT が話題です。特に GPT-4 が出てきたあたりからの Twitter で観測する人々の騒ぎ方をみるにこれまでとは何か…

The fastest HTTP parser of Rust

速さは正義。どうも、かわしんです。 Rust で一番速い HTTP パーサーは C で書かれた picohttpparser の Rust バインディング、picohttpparser-sys です。ガハハ。 $ RUSTFLAGS="-C target-feature=+sse4.2" cargo +nightly bench Finished bench [optimized…

SIGSTOP シグナルは EINTR を発生させるのか

エラーハンドリングはヌケモレなく、どうもかわしんです。ちゃんとエラーハンドリングしてますか? 以前のブログでも書いた通り、プログラミングする以上発生しうるエラーのうち回復可能なエラーは必ずハンドリングするべきです。 kawasin73.hatenablog.com …

OS はキャッシュのライトスルーを選ぶのか

メモリとキャッシュと整合性。どうも、かわしんです。 最近「詳解 LINUX カーネル」という分厚い本を読んでいるのですが、割と序盤の第 2 章で気になったことがあったので調べてみました。 ライトスルーとライトバック ご存知の通り、CPU にはキャッシュがあ…

新しい技術を追わない

時代はワークライフバランス。どうもかわしんです。 新しい技術は追わない。これは僕の個人的な方針です。別に最先端を追い続けることを否定するわけではありません。 ここでいう新しい技術は、web 界隈の新しいフレームワークとかライブラリとか SaaS とか…

新卒で入社して1年が経った

お久しぶりです。どうも、かわしんです。前回の投稿から丸々1年が経ったのでブログを投稿したいと思います。 1 年間何をしてたのか 1 年前、新卒として某外資系 IT 企業にソフトウェアエンジニアとして就職し、それから某 Android アプリを開発するソフトウ…

原因不明のエラーなどない

お前のいう想定外はただの調査不足。どうも、かわしんです。新年度が始まり周りのみんなは働き始めているのを感じますが、僕は4月6日入社なのでもう少しモラトリアムを満喫します。 さて、去年開催された GoCon 2019 Spring で「エラー設計について / Design…

失敗した AWS Batch ジョブを Slack に通知する (Terraform を使って)

サーバーレスでピタゴラスイッチ。どうも、かわしんです。イベントをサーバレスで繋げてピタゴラスイッチを作るのって案外楽しいもんですね、GUI コンソールで作ってる限りは。 さて、今回は AWS Batch のジョブ実行が失敗した時に Slack に通知する機能を作…

SQS を使った Python の非同期ワーカーは ndkale しかない

誰一人見捨てない!!! どうも、かわしんです。Celery は見捨てるんです。 この記事は Pythonその2 Advent Calendar 2019 の 15 日目の記事です。 やや強めのタイトルですが、AWS SQS を使った非同期ワーカーでまともな実装は ndkale しかないという内容です。…

golang.tokyo #28 で登壇して賞品をいただきました

限りある時間を大切に。どうも、かわしんです。情報洪水の現世をスマートに生きていきましょう。 さて、去る 12 月 4 日に開催された 「golang.tokyo #28 ~年末だよ!Go大忘年会&LT大会!~」 で LT をしてきました。 golangtokyo.connpass.com 発表資料はこ…

Go でトランザクションをフルスクラッチで実装した

一歩ずつ一歩ずつ前へ進んでいく、確実に。どうも、かわしんです。 到底 1 記事に収まるような内容ではなく長いので、トランザクションの作り方に興味のない方は途中の「なぜ Go なのか」まで読んでいただければ嬉しいです。 この記事は、Go2 Advent Calenda…

Go で昇格可能な RWMutex を実装した

順番は守りましょう。どうも、かわしんです。トランザクションを実装中です。 さて、先日トランザクションの並行制御アルゴリズムである「S2PL (Strict Two Phase Lock)」を実装した 1 のですが、Read オペレーションでは Read Lock を取った後にすぐに解放…

Go : Mutex は channel の 4 倍速い

Go

速ければ速いほど良い。どうもかわしんです。トランザクションを実装中です。 トランザクションの並行処理で S2PL (Strict Two Phase Lock) を Go で実装しようとしているのですが、どうしても昇格可能な Reader Writer Mutex が必要になり、Github にいい実…

MySQL は Rigorous ではない

トランザクションは慎重に。どうも、かわしんです。今トランザクションを実装しています。 タイトルは釣りです。MySQL のデフォルトのトランザクション分離レベルである REPEATABLE READ での話です。後、確かめた訳ではないですが MySQL に限った話ではない…

WEBエンジニア勉強会 #15 で登壇しました

プログラマーあるある、なにかと独自のミニ言語を作りがち。どうも、かわしんです。 昨日、11 月 16 日に開催された WEBエンジニア勉強会 #15 の LT 10 分枠で「ネストした JSON を CSV に自動変換する Python ライブラリを作った」というタイトルで登壇して…

メモリアロケーションに対する罪悪感

いつも心に省メモリ。どうも、かわしんです。今日はメモリアロケーションについてのポエムを綴ります。さらっと流してください。 ちなみに、ここでいう省メモリとはメモリサイズだけの話ではありません。 メモリをアロケート(確保)するとき、あなたはどん…

ネストした JSON を CSV に自動変換する Python ライブラリを作った

プログラマーあるある、なにかと独自のミニ言語を作りがち。どうも、かわしんです。どうしても簡潔にやりたいことを表現するためにミニ言語つくりがちですよね。JSON で構文作ると長いし。 さて、ACES Inc. という東大の松尾研究室発の AI ベンチャーがある…

GitHub Actions Meetup Tokyo β で登壇しました。

先頭を 駆くる者には 落とし穴 ハマっては埋め ハマっては埋め どうも、かわしんです。昨日サイボウズ株式会社で開催された「GitHub Actions Meetup Tokyo β」という非公式の Github Actions の勉強会で LT をしてきました。 gaugt.connpass.com 発表スライ…

Github Actions でハマった点と解決方法

先頭を 歩く者には 落とし穴 ハマっては埋め ハマっては埋め どうも、かわしんです。先駆者ってのはかっこいいとは思いますが、僕自身は新しい技術は流行り始めてから少し待って、落とし穴が一通り埋め尽くされたあたりで使い始めて爆速で開発するのが好きで…

Pipenv と Docker を使った開発環境のベストプラクティス

イテレーションの速さがあなたの生産性を左右する。どうも、かわしんです。生産性の高いプログラマって1つ1つの試行が素早い(自動化しているかツールを使っている)ためにものすごいスピードで開発できていると思うんですよね。 さて、最近 Python で開発…

UDP の Length はなんのためにあるのか?

1 バイトの無駄も許さない。どうも、かわしんです。1024 回繰り返すと 1 KB の無駄になります。 先週 TCP/IP スタックを自作した 1 のですが、その講義中ずっと気になっていたことがあったのでそれを深掘りします。 TCP / IP スタックを自作した人なら誰でも…

FIN -> FIN/ACK -> ACK という TCP の幻想

掴んで離さぬコネクション。どうも、かわしんです。しがみつかずに適切なタイミングで離しましょう。 この1週間で RFC を読みながら TCP/IP プロトコルスタックを自作した 1 のですが、その時にコネクションの終了処理でハマったので後学のために書き残して…

TCP/IP プロトコルスタックを自作した

RFC は裏切らない。どうも、かわしんです。僕は RFC に裏切られました。 さて、今週の頭から4日間開催された KLab Expert Camp に参加して、TCP/IP プロトコルスタックを実装してきました。今回はその体験記を書いていこうと思います。 成果物ですが、こちら…

ロバストなプロトコルを設計して実装した

どうも、ロバストと愉快な仲間たちのロバストこと、かわしんです。そうです、私がロバストです。 さて、8 月 13 日から 8 月 17 日までの 4 泊 5 日で セキュリティネクストキャンプ に参加してきました。 セキュリティネクストキャンプとは、セキュリティ・…