サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブラックフライデー
udzura.hatenablog.jp
Ruby/Rails Advent Calendar 2025 22日目の記事です。 qiita.com RubyKaigi 2024 で発表した mruby/edge の進捗をつらつら書きます。 udzura.jp 最近実装した内容 去年末も頑張って機能を追加してたんですが: udzura.hatenablog.jp それに加えて、今年末も重要そうな機能を実装しました。師走の恒例行事か? CLIを mrbedge にした github.com mecはもう更新しません。今後は以下でインストールしてください。 cargo install mrubyedge-cli サブコマンドとして以下が用意されています。 run Rubyファイルやmrbファイルを直接実行する compile-mrb Rubyファイルをmrbにコンパイルする(ここまで2コマンド、mruby-compiler2 使わせてい
RubyKaigi 2025、お疲れ様でした。 今年も発表者の末席を務めさせていただきました。 rubykaigi.org 資料は以下です。 udzura.jp 今年も英語での発表をしたわけですが、英語での登壇準備は年を追うごとにツールのノウハウが積み重なっていくのを感じ、特に今年は英語化自体は*1楽になったなあと思っています。どういう感じのことをしたか後学のため記事を置いておこうと思います。 全体にMacOSのツールを使っています。真似する際は環境によって適宜置き換えてください。 全体のフロー 日本語で箇条書きで資料を用意する 一度、その内容で日本語で発表練習をする その内容を録音して文字起こしする 文字起こしした内容を英訳する 同時に、箇条書きの日本語資料を英訳する あとは微調整 長さが適切になるようスクリプトを say コマンドに噛ませる スライドと資料がアラインするように相互の内容
WebAssembly Advent Calendar 2024の18日目の記事です。 qiita.com @udzura です。趣味でPure RubyのWASM Runtimeを作ったり、mrubyをベースにRubyスクリプトをWASMバイナリに固めるくんのPoCを作ったりしています(なおいわゆるruby.wasmにはほとんど関わっていません)。 今日は、Component Modelについて何もわからなかったので、素人なりに手を動かしてわかったことのメモをしていこうと思います。Component Modelの肌感覚を身につける上で、本記事が少しでも助けになれば幸甚です。 Component ModelでWASMバイナリを「リンク」する Component Modelの学習コンテンツの一つとして、「Building a Calculator of Wasm Components」という
SmartHR Advent Calendar 2024、14日目の記事です。昨日のご担当は tnagatomi さんでした! qiita.com 株式会社SmartHRのプロダクトエンジニア @udzura です。労務基本機能を開発するチームで働いています。 今日は最近知った JXA で、Macのちょっとしたブラウザ操作を自動化する例をご紹介します。 JXA とは? Macにはマシン上の操作を自動化するためのフレームワークが同梱されています。 例えばAutomatorのようなアプリを使って仕事を自動化するのですが、 AppleScript という言語もよく知られていました。このスクリプト言語を用いて特定のアプリケーションやウィンドウを操作したり、システム設定などの変更を記述することができます。 以下は開いているFinderの最初のウィンドウをドックに格納するスクリプトです。 tell a
Wardite というWASM Runtimeを作っていました。 github.com 今の所、「RustでWasm Runtimeを実装する」の内容を一通り実装した段階です。 zenn.dev fibまで動くようになったので、ゴリラさんのコースの範囲は一旦完成 あとはwasm坂を登り続けるだけだ... pic.twitter.com/65m8qbSvap— Uchio Kondo💥 (@udzura) 2024年10月28日 以下のようなwasmプログラムを動かせます。 (module (func $fib (export "fib") (param $n i32) (result i32) (if (i32.lt_s (local.get $n) (i32.const 2)) (then (return (i32.const 1))) ) (return (i32.add (call
A: 動きます。 mruby/edge 0.1.4/mec 0.2.3 では、 --no-wasi というオプションをサポートしたので、とりあえずwasiに関わらないコードであれば(fibとか、フィボナッチ数の計算とか)ブラウザでも動かしやすくなりました。 いつものfib置いときます。 def fib(n) # fib.rb if n < 2 return 1 else return fib(n-1)+fib(n-2) end end # fib.export.rbs def fib: (Integer) -> Integer これをコンパイルしますよと。 $ cargo install --version 0.2.3 mec $ mec --no-wasi fib.rb $ file fib.wasm fib.wasm: WebAssembly (wasm) binary module
なんとなくバイナリを解析してえ〜と思ったので、mruby 3.2.0 (最新stable?)の .mrb ファイルのフォーマットを眺めることにした。 Rustでパースしました!だとかっこいい、ナウだなと思ったけれど、動的型育ちな自分をどうしても甘やかしてしまい、 Ruby の unpack を軸に解析した。いやほんと、今やRubyで一番使うメソッドでは。 こういう感じのRubyスクリプトがある。 puts "Hello" mrbファイルにコンパイルするとこうなるらしい。この際、デバッグセクションとLVセクションは無かったことにする。今度ね。 $ ./bin/mrbc --remove-lv tmp/hello.rb $ xxd tmp/hello.mrb 00000000: 5249 5445 3033 3030 0000 0056 4d41 545a RITE0300...VMATZ 0
皆さんは公開情報ですか?(挨拶) 初めに言いたいこと タイトルの通りのワークショップを始めます。最初は福岡市内でオンサイトで、エンジニアカフェ[PR]でやっていくので、まずはぜひ福岡近辺のソフトウェアに関わるエンジニアに届いてほしい。 engineercafe.connpass.com OSS Halfway とは? 以下、OSS Halfwayを始めるにあたって考えたことをつらつらと書いてみます。何かの参考になるかは分かりません。とにかく届いてほしい、来てくれ。 常々、ソフトウェアに関わっている限り、OSSはある意味日常だよなっち(北九州風)思っています。業務ドメインによりあまりOSSご近所感がない場合もあるでしょうが、まあ徐々に日常になっているでしょう。 少なくとも特別なことではないというか、ソフトウェアに関する仕事というのは要するに、ソフトウェアの課題を見つけ、解決し、使っていき、ま
本日RubyKaigiでお話ししてきました。BPFのObservability関連の機能を紹介しながら実際にサンプルをRubyで書いていくみたいな流れでした。以下に資料を。 docs.google.com 一番見せたかった「RubyのGC関係USDTを用いてレイテンシを可視化する」というツールのデモが...流せなかったので*1、心残りを洗い流すべく補足記事を書きます。 USDT? Rubyを特定のオプション --enable-dtrace でconfigureしてビルドすると、USDTと呼ばれる情報がRubyのバイナリに付与されます。この情報を使うとRubyの生きているプログラムに対して、さまざまな細かい情報を取得できるようになります。例えば以下のタイミングでイベントがフックされます。 オブジェクト一般、シンボル、文字列、配列、ハッシュの作成 C定義のメソッドの呼び出し、リターン GCの開
背景 Apple SiliconのMacが販売されてそれなりの時間も経ち、エコシステムもできてきてお仕事の開発に使っている人も増えてきたように思う。 ところで、colimaのようなツールを使い、Docker環境をMacに作成した時、Apple Silicon上ではデフォルトで arm64 版のDocker*1がインストールされる。 $ docker info | grep Archi Architecture: aarch64 この上で何も考えずにイメージをビルドしたら arm64 のイメージができる。 この時、このイメージをリモートのレジストリ(GCR、GHCRなどを想像してほしい)にpushにしたら、もちろん arm64 のイメージがpushされる。 ここで、このイメージをx86_64の本番サーバにpullして走らせるような運用だったら、困ったことになるだろう...。 このような違うア
ここまでのあらすじ <読み飛ばし推奨> 子どもたちのためにJava版マインクラフトを買い、よーしパパ*1MOD作って「威厳*2」を見せちゃうぞ〜 と思ったが全くやる気配がない。 一方で、子どもは無限の時間をScratchに費やしていた。Scratch 3.0はReactで作られていることが知られており、いわゆるSPA(もしかして、この用語もう古い?)であり、基本的にはGitHub Pagesのようなバックエンドレスな環境にもデプロイできる。 また、TypeScript/JavaScript+Reactで拡張を書くことが出来る。自作の拡張は残念ながら公式のScratchでは利用できないが、自分でビルドしてデプロイしたScratchインスタンスで使うことができる。一種のMODである。例えば機械学習に触れることが出来る拡張を有効にしたMODが知られている。 champierre.github.i
Apple Silicon上でLinux向けx86_64の環境が欲しくなったり、x86_64向けのバイナリやイメージを作らないといけなくなる事態は、稀に良くあると思う。 colimaを使うと、Aarch64なMac上であっても、かなり楽にx86_64のLinux環境とDocker環境が手に入る。 最近のcolimaには実は --arch というオプションがあり、x86_64又はaarch64であればあっさりと環境を作ることができるようになっている。 デフォルトで入ってくる環境と区別するため --profile オプションを明示する必要がある。 $ colima --profile colima-x64 start --arch x86_64 colimaの作ったDockerインスタンスは colima list で一覧できる。 $ colima list PROFILE STATUS AR
1月がまるっとスキップされている... だと...。 hisaichi5518.hatenablog.jp id:hisaichi5518 さんがこういうことを書いていて、非常にわかりみがあった。 一方で、Notionというツールはそこまですごい銀の弾丸ではないというか、得意な分野と無理に使っても旨味がない分野/工夫しないと使えない分野が結構極端にあるような気がしていて、とりあえず僕は僕で雑な感想を残しておこうと思った。 個人の日記レベルですが。 今までの経験で、 Notion が効果を発揮する箇所 日記、日報 雑に書き始める、更新できる、コメントできるのがいい。リストとの相性もいい timesチャンネルみたいなやつはNotionで運用した方が本当はいいのかも 物理的なカンバンの代わり 融通無碍に書き込める、メタ情報を融通無碍に追加できる、というのは、物理的な看板を融通無碍にレイアウトした
Rubyアドベントカレンダー(その1)10日目の記事です。 qiita.com 技術アドベントカレンダーの原点?に立ち返り、自分の書いたものではなくTipsの話をします。 今回はここ数年よく使うようになったgem、fiddleの紹介をしようと思います*1。 fiddleとは/FFIとは fiddleとはRubyにおいて、FFI(Foreign Function Interface)をするためのgemです。 github.com そのものずばり ffi というgemがあるためそちらを使う方も多いようですが、fiddleは現在標準ライブラリであるので、Rubyをインストールしたらそのまま含まれており、またRubyコアチームによりメンテナンスされているようです。 さて、ではそのFFIとは何かという話になります。「あるプログラミング言語から他のプログラミング言語で定義された関数などを利用するための
Rustアドベントカレンダー(その1)3日目の記事です。 qiita.com id:udzura と申します。Rustは2021年になると同時に始めたので、いまだ経験1年未満ですが、僭越ながらも今回アドベントカレンダーに参加いたします。 今回はタイトルの通り、RustでCrafting Interpretersを進めている話です。Crafting Interpretersとは、Loxと名付けられたインタプリタ言語をJavaやCで実装していき、その過程で言語実装の肝要を学ぶことができるという書籍です。Web版は無料で閲覧できます。 craftinginterpreters.com 現在II章まで終わり、実装はGitHubにアップしています。 Lox本体のソースコード部分 と同じMITライセンスにしています。 github.com この記事では、進めた上で工夫した点、頑張った点を小学生の日記の
Rubyアドベントカレンダー(カレンダー2)の2日目です。 qiita.com 今見たらカレンダー2も半分以上埋まってて嬉しい... Ruby is alive now!!! ということで、RubyKaigi takeout 2021の振り返りも兼ねて作ったものの話です。 rubykaigi.org Rucy: A Ruby Compiler github.com RucyはRubyのスクリプトをコンパイルして直接特定のフォーマットのバイナリを吐き出すツールです。今のところBPFのバイナリにのみ対応しています。 ちなみに "Ru"by "C"ompiler -> RuC -> Rucy という経緯で、Rucyという綴りがそれなりにRubyと空目する点含めて(?) 気に入った名付けです。 Rucyについて把握する前にBPFの説明からしないといけないのですが、要するにLinuxの機能の一つで、
前編はこちら。 udzura.hatenablog.jp ここまででスキャナまでは実装し、大体動いたようです(型もちゃんとついたようです)ので、続きの実装をします。 閑話: エディタの型支援を受ける 当方はEmacsなので読者の参考にならないかもしれませんが...。 といっても以下を有効にしたぐらい。 rbs-mode lsp-mode 同梱になった lsp-steep どちらも @ybiquitous さんの力なので、神と崇める他ない。 さらに、RBS有効のプロジェクトだけlspをsteepが用意したものに変えるため、プロジェクトのルートに以下のような .dir-locals.el を用意する。この内容は とんさんのブログ記事 のものを参考にしている。 ((ruby-mode . ((lsp-enabled-clients . (steep-ls))))) これでlspとlsp-uiを有
K-Ruby という鹿児島のRubyコミュニティの忘年LT大会でRBSを使ってみた話をします。オンラインですが、九州盛り上げていきましょう! k-ruby.connpass.com それはそれとしてRBSというものに今回ちゃんと触れるので、触れた記録を雑にでも残していこうと思い、ブログを書きます。どれくらい後学のためになるのかならないのかわかりませんが、触ってみたライブな感想をなるべく残しておくのは意味があるでしょう、と。 @yoshikouki さんには「RailsにRBSを入れる方法を教えてください!」って言われてて、俺にRailsの話を聞くのか... って思ったんですけど、 まあその辺の面白そうなトピックは @yoshikouki さんのために取っておこうと思うので、僕はもうちょっと簡単なプログラム、そう、 プログラミング言語のパーサ をRubyで、型付きで書こうと思いました。 最初
hiboma.hatenadiary.jp またhibomaさんのブログの言及で恐縮なのだが、このブログを読んで、そういえば僕のキャリアの中で重要だった本って何かな〜というのを考えていた。 前提として僕は本を読むのが苦手で(やっと最近気づいた)、めっちゃ遅くしか読めないし、量を読めないのだが、それでもポイントポイントで読んでおいて良かったという本はある。というより、割と一冊の本から受ける影響が人より大きいような気がするし、「僕にめっちゃ影響を与えてくれそう」という勘が働かないと読まない。 なので - でもないけれど、ここにあげている本の話題はただの思い出話で、必ずしも人に薦める意図はない。 アジャイルな見積りと計画づくり book.mynavi.jp この本は某F社にいるときに、とにかく周りの仕事が進まない、優先順位がつかない、今でいうトイルで運用が忙殺される、みたいな不満の塊の只中にいる
同僚の皆さんへのアンサーソングです。 hiboma.hatenadiary.jp ryuichi1208.hateblo.jp RubyKaigi やらですっかり遅く... と思ったがRubyKaigi takeoutの振り返りも書いてない... タイトルの通り(通り?)、forkしたプロセスがCoWをどれくらい起こしているか可視化するツールを作りました。 github.com まだ私の理解が浅いところもあるのですが、いったん動作例などを掲示してみます。 hiboma.c の場合 上のhibomaさんのCoWのサンプルプログラムの例です。プロジェクトのmiscというディレクトリ の下に exec_waiter.rb という補助スクリプトを置いてあります。それを経由してプログラムを起動すると、親のPIDを表示して実行が停止します。 cowsnoop/misc$ ruby exec_waite
こちらです。 github.com とにかくカジュアルに、簡単でもいいので正規表現を使いたい場面にマッチすると思う。 簡単なベンチを取った。 他の主要な3つのmgem(mruby-onig-regexp/mruby-regexp-pre/mruby-pure-regexp)と比較して、結果的に mruby-posix-regexp が一番ビルド時間、バイナリサイズともに小さくなるという結果になった。 ベンチの内容 まず、 mruby 3.0.0 において、以下ような最小限の build_config.rb を用いた。 MRuby::Build.new do |conf| conf.toolchain conf.gem mgem: 'mruby-onig-regexp' #conf.gem mgem: 'mruby-regexp-pcre' #conf.gem mgem: 'mruby-pu
これもフィヨルドブートキャンプの生徒さんの質問からふと思いついた、ちょっとした遊びですが。 (そして、書いてある内容に誤解があったら優しく教えてください) p Object.new => #<Object:0x000055959ddf1910> Rubyのオブジェクトのinspect表示のデフォルトで出てくる、この16進数は、このオブジェクトが置かれているメモリアドレスのことだと知られている。 では、実際にこのメモリアドレスにオブジェクトが置かれていることを確かめるには? さて、以下のコードはLinuxで動かすことにする。 String オブジェクトで試してみる。と言っても、StringのinspectはObjectに定義されたものではなく、自分のクラスで定義しているので、まずはそれを「無効にする」。以下のような方法で Object#inspect を呼ぶように変更できる。 class S
そろそろBPFのことを思い出そうと思って記事を書く。 シリーズです: udzura.hatenablog.jp udzura.hatenablog.jp 前回まででRustでのBPF CO-REバイナリの作成方法をまとめたが、C言語などで使う場合の細かい手順を追ってみる。 ちゃんとドキュメントを追い切れていないところがあり、今回は、iovisor/bccのlibbpf-toolsにあるMakefileなどを参照したことは了解願いたい。 github.com さて、利用するBPFプログラムは以下のようにする。 vfs_read をトレースして、読み込みに成功いたバイト数を、log2をbinとするヒストグラムにする。 #include "vmlinux.h" #include <bpf/bpf_helpers.h> #include <bpf/bpf_tracing.h> #include <
RubyKaigiも近付いたしeBPFの機運を高めようとしている。 タイトルですが、そういうことができます。 www.kernel.org このドキュメントにも「どうすればできる」と言うところが書いておらず、最終的にカーネルのサンプルを眺めることになる。 elixir.bootlin.com elixir.bootlin.com 下準備 まず、cgroup v2が有効なカーネルを使う必要がある。いったん。Ubuntu Groovy(5.8.0-53-generic)を使う。 その上で、cgroup v1のdevicesコントローラを一応umountしておいいた。必要なのかはわからないが...。 $ sudo umount -l /sys/fs/cgroup/devices その上で cgroup v2のグループを作成。 $ sudo mkdir /sys/fs/cgroup/unified
GWは、ゲートウェイじゃなくゴールデンウィークです。 タイトルの通り、連休の多くの空き時間を言語実装に費やしてしまった...。 github.com とにかく、スターがついて承認されたいという気持ちが強いです(結論ファースト)。 今のところ、この辺りの機能はできている。 四則演算 Rustでの/Luaでのグローバル関数定義 関数内ローカル変数 if/then/else文 配列ベースの繰り返し(ただ、配列操作ができない) フィボナッチ数を求めるとこんな感じ。 2.4 GHz / 8コア Intel Core i9 のMacで実行した。といってもシングルコアしか使わないのだが。 function dofib(n) if n < 2 then return 1 else return dofib(n-1) + dofib(n-2) end print("Unreachable!\n") end
メモ程度に。 追記 @ 2021/04/20 12:41 inode番号と同じになるようになっているらしい。なので、 cgpath = ARGV[0] puts File::Stat.new(cgpath).ino これだけでいいです... 以下は、構造体キャストの例として残す。 github.com この実装によると name_to_handle_at をつかってcgroupを表すディレクトリ のファイルハンドルを取る ファイルハンドルを以下の構造体にキャストする struct cgid_file_handle { unsigned int handle_bytes; int handle_type; uint64_t cgid; }; そうすると handle->cgid に入ってる という感じっぽい。なので言語を選ばず実装できる。Rubyのようなスクリプト言語ならffi(fiddle
2021年3月5日に、mruby 3.0.0 のリリースがされました。おめでとうございます! mruby.org これに関連してなのか、mrubyをこれから始めようとか、ここのところどうなっていますかという質問をちょくちょく受けたり、ツイートを拝見したりするようになりました。 一方で、どうしても情報が古い、あるいは多くのmgemのメンテナンス状況が悪いように見える、などの初学者にとっては難しい状況が広がっており、厳しい気持ちになったり、厳しい感想を述べたりされている方もいるように思います。そして、その感想中には誤解も含まれているようです。 ここでいったん、少しでも「心構え」ができるように、これから触ってみる方々に対しての自分の考えをまとめておこうと思いました。 (さらにいうと、基本的に本原稿はいちユーザ、それもWebインフラに関わるユーザとしての解釈なので、Matzをはじめとした他のmru
まだまだ消費増税に対抗するため、無理やりネタを紡ぎ出す。 named pipe、「名前付きパイプ」の簡単な使い方を残しておく。 プロセス間通信 プロセスの間でなにかしらのデータのやり取りをすることをプロセス間通信(Inter Process Communication)と呼ぶ。たとえばLinuxでは以下のような方法がある。 シグナル パイプ、FIFO SysV IPC(メッセージキュー、セマフォ、共有メモリ) POSIX IPC(同上) UNIXドメインソケット インターネットドメインソケット(いわゆるTCP/UDPなどのソケット) この分類は「Linuxプログラミングインターフェース」を参考にした。 www.oreilly.co.jp IPCで最も手軽なのはパイプの作成で、fork元でpipe()などを用いて読み出し専用/書き込み専用の1組のパイプを作り、fork先でもそのfile de
2020年は色々やったんですが、不甲斐なさも残りました。2021年も頑張ります(1行で去年の総括と今年の抱負)。 で、RustとBPF CO-RE、2つのsota(2020年末に覚えた言葉の一つ) をブログに書いて気炎を上げていきたい。 (はじめに: 半分自分メモのつもりなんです! という言い訳をしておきます。認識や用語など間違いがあれば突っ込んで...) BPF CO-RE、コレってなんですか itiskj.hatenablog.com 上記記事に書いてある通り(さらに言えば Why We Switched from BCC to libbpf for Linux BPF Performance Analysis | PingCAP の通り)、BCCのプロダクション利用には、コンパイラやヘッダファイルなどたくさんの依存、実行時にコンパイルをすることによるオーバヘッドなど多くの問題があった
次のページ
このページを最初にブックマークしてみませんか?
『ローファイ日記』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く