ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

BCCでTCにアタッチし、egressのIPを表示する

サーバではいろいろな通信があるけれど、実際どんな通信が行われているか全貌を確認するのはなかなか難しい。 blog.ssrf.in 上記のソリューションはかっこいいが、KRSIなんで、「うちの環境のカーネルじゃちょっと...」となりがち。BPFあるあるだと思う。 一…

RustによるRubyアプリケーションサーバー Flamboyant: version 0.1.0.rc

「なんとか動かせた」という世界の話なんですが、途中経過をメモしておきます。 先日Rustでgemをなるべくイマい形で書く方法をメモっていたんですが、一つは実用的なものを作ろうと思ってサーバを書いています。 udzura.hatenablog.jp Flamboyant という名前…

Fukuoka.rb #256 LTの補足: RustでRubyGemを書く話

fukuokarb.connpass.com docs.google.com キリがいい回で話しました。およそLTで収まる話ではなかった(5分、一番難しい)ため、最も肝心の「どうやってコードを書くか」の部分を全部端折ってこのブログで補足することにしました。 サンプルプロジェクト git…

archof: リモートのままイメージのarchitectureを確認するコマンド

背景 Apple SiliconのMacが販売されてそれなりの時間も経ち、エコシステムもできてきてお仕事の開発に使っている人も増えてきたように思う。 ところで、colimaのようなツールを使い、Docker環境をMacに作成した時、Apple Silicon上ではデフォルトで arm64 版…

How to build ruby.wasm on Apple Silicon Mac

ここまでのあらすじ <読み飛ばし推奨> 子どもたちのためにJava版マインクラフトを買い、よーしパパ*1MOD作って「威厳*2」を見せちゃうぞ〜 と思ったが全くやる気配がない。 一方で、子どもは無限の時間をScratchに費やしていた。Scratch 3.0はReactで作ら…

Apple Silicon上でx86_64のDockerを使う

Apple Silicon上でLinux向けx86_64の環境が欲しくなったり、x86_64向けのバイナリやイメージを作らないといけなくなる事態は、稀に良くあると思う。 colimaを使うと、Aarch64なMac上であっても、かなり楽にx86_64のLinux環境とDocker環境が手に入る。 最近の…

Notion の使い方、私見など

1月がまるっとスキップされている... だと...。 hisaichi5518.hatenablog.jp id:hisaichi5518 さんがこういうことを書いていて、非常にわかりみがあった。 一方で、Notionというツールはそこまですごい銀の弾丸ではないというか、得意な分野と無理に使っても…

プラグインを書いて学ぶGNU NSS

Linuxアドベントカレンダー13日目の月曜日の記事です。 qiita.com 今日は以前から気になっていたNSS pluginの仕様について調べてまとめ、簡単なものを書いてみようと思います。というのも、実は 同僚が 二人も NSS pluginを開発して公開しており、ずっと負け…

やわらかFFI 〜fiddle.gem 入門〜

Rubyアドベントカレンダー(その1)10日目の記事です。 qiita.com 技術アドベントカレンダーの原点?に立ち返り、自分の書いたものではなくTipsの話をします。 今回はここ数年よく使うようになったgem、fiddleの紹介をしようと思います*1。 fiddleとは/FFIと…

Crafting Interpretersの言語実装をRustで進めている話

Rustアドベントカレンダー(その1)3日目の記事です。 qiita.com id:udzura と申します。Rustは2021年になると同時に始めたので、いまだ経験1年未満ですが、僭越ながらも今回アドベントカレンダーに参加いたします。 今回はタイトルの通り、RustでCrafting I…

RubyKaigi takeoutでRuby to BPF compilerの話をした話

Rubyアドベントカレンダー(カレンダー2)の2日目です。 qiita.com 今見たらカレンダー2も半分以上埋まってて嬉しい... Ruby is alive now!!! ということで、RubyKaigi takeout 2021の振り返りも兼ねて作ったものの話です。 rubykaigi.org Rucy: A Ruby Comp…

型付きRubyでパーサを書く(後編)

今までのあらすじとして、ここまでで、Rubyでパーサを書き、めでたくRBSで型を付けました。 udzura.hatenablog.jp udzura.hatenablog.jp github.com 本エントリでは簡単にふりかえってみます。 大前提として、個人の感想で、皆様の今後の型ライフにほんのち…

型付きRubyでパーサを書く(中編)

前編はこちら。 udzura.hatenablog.jp ここまででスキャナまでは実装し、大体動いたようです(型もちゃんとついたようです)ので、続きの実装をします。

型付きRubyでパーサを書く(前編)

K-Ruby という鹿児島のRubyコミュニティの忘年LT大会でRBSを使ってみた話をします。オンラインですが、九州盛り上げていきましょう! k-ruby.connpass.com それはそれとしてRBSというものに今回ちゃんと触れるので、触れた記録を雑にでも残していこうと思い…

自分の中で大切に思ってる本の話

hiboma.hatenadiary.jp またhibomaさんのブログの言及で恐縮なのだが、このブログを読んで、そういえば僕のキャリアの中で重要だった本って何かな〜というのを考えていた。 前提として僕は本を読むのが苦手で(やっと最近気づいた)、めっちゃ遅くしか読めな…

CoWはコウ可視化するんやで (aka. Rubyなどがforkした後のCoWを可視化してみる)

同僚の皆さんへのアンサーソングです。 hiboma.hatenadiary.jp ryuichi1208.hateblo.jp RubyKaigi やらですっかり遅く... と思ったがRubyKaigi takeoutの振り返りも書いてない... タイトルの通り(通り?)、forkしたプロセスがCoWをどれくらい起こしている…

libc同梱のPOSIX regexpを使うmgemを公開した

こちらです。 github.com とにかくカジュアルに、簡単でもいいので正規表現を使いたい場面にマッチすると思う。 簡単なベンチを取った。

BPFバイナリはどのようなELF形式か(2) - mrubyのDSLを書いたらELFを吐く

あらすじ udzura.hatenablog.jp 前回の記事で、以下のような構成要素がBPFプログラムに最低限必要な情報だと結論づけました。 必要なセクション strtab BPFプログラムセクション with 正しい名前 ライセンス symtab 必要なシンボルテーブル BPFプログラムの…

メモリの上に置かれているRubyの文字列を覗く

これもフィヨルドブートキャンプの生徒さんの質問からふと思いついた、ちょっとした遊びですが。 (そして、書いてある内容に誤解があったら優しく教えてください)

BPFバイナリはどのようなELF形式か(1) - 最低限の情報とは?

主に9月に開かれる某Kaigiの関係とか、色々があり、C言語以外の言語でBPFバイナリを作ることができないか模索しています*1。某Slackなどで相談させてもらっていますが、こんな感じ(資料後半)。 docs.google.com その予備調査として、BPFバイナリとしてlibb…

cgroup v2の、BPFによるデバイスアクセス制御を試す

RubyKaigiも近付いたしeBPFの機運を高めようとしている。 タイトルですが、そういうことができます。 www.kernel.org このドキュメントにも「どうすればできる」と言うところが書いておらず、最終的にカーネルのサンプルを眺めることになる。 elixir.bootlin…

GWなのでRustでLuaを実装し(ようとし)た話

GWは、ゲートウェイじゃなくゴールデンウィークです。 タイトルの通り、連休の多くの空き時間を言語実装に費やしてしまった...。 github.com とにかく、スターがついて承認されたいという気持ちが強いです(結論ファースト)。 今のところ、この辺りの機能は…

Rubyのptyライブラリで標準入力を渡す

すごく昔こういう記事を書いたんだけれど。 udzura.hatenablog.jp 某フィヨルド方面より、まさかのこの記事に関する質問が来て、さらに「入力を渡すにはどうすればいいか」という追加質問がきたのであった。 試した感じ、なんとも素直に動かなかったので、ど…

eBPF的な意味で使えるcgroup idを取る方法

メモ程度に。 追記 @ 2021/04/20 12:41 inode番号と同じになるようになっているらしい。なので、 cgpath = ARGV[0] puts File::Stat.new(cgpath).ino これだけでいいです... 以下は、構造体キャストの例として残す。 github.com この実装によると name_to_ha…

Rustでもunshare(というか、Linux Namespaceの分離)したい!

あらかじめ宣言しますが、タイトルでunshare(2)と言いながらclone(2)を使います。 コンテナを自作する のが趣味だったので、Rustでもコンテナの基本的な機能であるLinux Namespace周りのコーディングをしてみた。

Rustでsocketpairを使ってIPCしようとしてみたが...

タイトルの通りなんだけど、おそらくはTwitterで教えてもらった github.com このあたりを使って、Channelのようなインタフェースでプロセス間通信を行ったほうが良いのだろう、と思いつつ、なるべく生システムコールで実装してみるテスト。

Rust で基本的なプロセス作成

Rustでプロセスを作りたくなったので試した。変なとこがあれば教えてください。

BPF CO-RE バイナリはどのようにビルドされるか

そろそろBPFのことを思い出そうと思って記事を書く。 シリーズです: udzura.hatenablog.jp udzura.hatenablog.jp

2021年にmrubyを始める皆さまへ

2021年3月5日に、mruby 3.0.0 のリリースがされました。おめでとうございます! mruby.org これに関連してなのか、mrubyをこれから始めようとか、ここのところどうなっていますかという質問をちょくちょく受けたり、ツイートを拝見したりするようになりまし…

Ruby (MRI) に新しい Probe を定義する

Rubyで利用できるUSDTは probes.d というファイルに定義されている。 USDTとは: udzura.hatenablog.jp 以下の記事はbpftraceとUSDTを理解している前提で書いていきます。