タグ

ブックマーク / udzura.hatenablog.jp (60)

  • mruby/edge ってブラウザで動くんですか? - ローファイ日記

    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/edge ってブラウザで動くんですか? - ローファイ日記
    udzura
    udzura 2024/04/23
    そういえば、書いた
  • RubyKaigi 後日譚: GC のレイテンシを可視化する人の補足 - ローファイ日記

    RubyKaigiでお話ししてきました。BPFのObservability関連の機能を紹介しながら実際にサンプルをRubyで書いていくみたいな流れでした。以下に資料を。 docs.google.com 一番見せたかった「RubyのGC関係USDTを用いてレイテンシを可視化する」というツールのデモが...流せなかったので*1、心残りを洗い流すべく補足記事を書きます。 USDT? Rubyを特定のオプション --enable-dtrace でconfigureしてビルドすると、USDTと呼ばれる情報がRubyのバイナリに付与されます。この情報を使うとRubyの生きているプログラムに対して、さまざまな細かい情報を取得できるようになります。例えば以下のタイミングでイベントがフックされます。 オブジェクト一般、シンボル、文字列、配列、ハッシュの作成 C定義のメソッドの呼び出し、リターン GCの開

    RubyKaigi 後日譚: GC のレイテンシを可視化する人の補足 - ローファイ日記
    udzura
    udzura 2022/09/09
    一番出したかったデモを出せず、当日に後日談を書くという技を使いました:
  • Apple Silicon上でx86_64のDockerを使う - ローファイ日記

    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

    Apple Silicon上でx86_64のDockerを使う - ローファイ日記
    udzura
    udzura 2022/04/06
    調べた
  • やわらかFFI 〜fiddle.gem 入門〜 - ローファイ日記

    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とは何かという話になります。「あるプログラミング言語から他のプログラミング言語で定義された関数などを利用するための

    やわらかFFI 〜fiddle.gem 入門〜 - ローファイ日記
    udzura
    udzura 2021/12/10
    self.bookmark!
  • 型付きRubyでパーサを書く(前編) - ローファイ日記

    K-Ruby という鹿児島のRubyコミュニティの忘年LT大会でRBSを使ってみた話をします。オンラインですが、九州盛り上げていきましょう! k-ruby.connpass.com それはそれとしてRBSというものに今回ちゃんと触れるので、触れた記録を雑にでも残していこうと思い、ブログを書きます。どれくらい後学のためになるのかならないのかわかりませんが、触ってみたライブな感想をなるべく残しておくのは意味があるでしょう、と。 @yoshikouki さんには「RailsにRBSを入れる方法を教えてください!」って言われてて、俺にRailsの話を聞くのか... って思ったんですけど、 まあその辺の面白そうなトピックは @yoshikouki さんのために取っておこうと思うので、僕はもうちょっと簡単なプログラム、そう、 プログラミング言語のパーサ をRubyで、型付きで書こうと思いました。 最初

    型付きRubyでパーサを書く(前編) - ローファイ日記
    udzura
    udzura 2021/11/01
    そういえば週末に書いてた。今日、中編を出したいな
  • 自分の中で大切に思ってる本の話 - ローファイ日記

    hiboma.hatenadiary.jp またhibomaさんのブログの言及で恐縮なのだが、このブログを読んで、そういえば僕のキャリアの中で重要だったって何かな〜というのを考えていた。 前提として僕はを読むのが苦手で(やっと最近気づいた)、めっちゃ遅くしか読めないし、量を読めないのだが、それでもポイントポイントで読んでおいて良かったというはある。というより、割と一冊のから受ける影響が人より大きいような気がするし、「僕にめっちゃ影響を与えてくれそう」という勘が働かないと読まない。 なので - でもないけれど、ここにあげているの話題はただの思い出話で、必ずしも人に薦める意図はない。 アジャイルな見積りと計画づくり book.mynavi.jp このは某F社にいるときに、とにかく周りの仕事が進まない、優先順位がつかない、今でいうトイルで運用が忙殺される、みたいな不満の塊の只中にいる

    自分の中で大切に思ってる本の話 - ローファイ日記
    udzura
    udzura 2021/10/18
    そういえば書いていた
  • libc同梱のPOSIX regexpを使うmgemを公開した - ローファイ日記

    こちらです。 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

    libc同梱のPOSIX regexpを使うmgemを公開した - ローファイ日記
    udzura
    udzura 2021/09/24
  • Rubyで構造体を扱う(ただし、Cの)。あとELFの話。 - ローファイ日記

    飛び入りです。Rubyアドベントカレンダーその2 17日目の記事です。昨日はなんとなく似たような(?)、 Rubyの8進数と2進数の構文エラー文の違い の話です。 qiita.com 今日はRubyで構造体、と言うか、バイナリパックされた構造体を扱う話の触りをします。class Structの話はしない。 さてみなさんは String#unpack/Array#pack を使ってますか? docs.ruby-lang.org すこく正直な話をすると、おそらく多くの方は使っていなくて、使っている方も大半はbase64文字列を生成する m フォーマットぐらいしか使っていないのではないかと推測しています。 ["Hello World"].pack('m') #=> "SGVsbG8gV29ybGQ=\n" ぼくも今まではそうだったのですが、最近は他のフォーマットも急に使うようになりました。という

    Rubyで構造体を扱う(ただし、Cの)。あとELFの話。 - ローファイ日記
    udzura
    udzura 2020/12/17
    今度こそ今年最後のアドカレです...
  • eBPF for Rubyist 現状確認(2) - BPFQL の紹介 - ローファイ日記

    udzura.hatenablog.jp こちらの続きです。第2回は拙作「BPFQL」を紹介したく。RbBCCの実例として2つのプロトタイプを作ったうちの1つです。 まず、汎用トレースツール bpftrace の話 前回RbBCCを紹介しましたが、一般にRbBCCやBCCは「サーバの特定の状況をトレースするために」使われます。たとえばdisk I/Oのレイテンシが知りたい、ページフォールトの状況が知りたい、TCPパケットの受信状況は、などなど...。 go-vargo.hatenablog.com 「どういう状況の時に」BCC製の「どのツールが」使われるかは上記のvargoさんの記事にも一部紹介されています。 一方で、私たちの運用しているサーバはどういう状況に遭遇するか簡単には予測できない面もあります。そういう場合に、初動などで様々な値を汎用的に取れるようにしているツールとしてbpftra

    eBPF for Rubyist 現状確認(2) - BPFQL の紹介 - ローファイ日記
    udzura
    udzura 2020/03/31
    そういえば書いてたので見てください。(3) は... ちょっと待って...
  • CRIUをラップしてより簡単にプロセスのチェックポイント/リストアをするツールを作った話 - ローファイ日記

    Linux Advent Calendar 2019 12日目の記事です。 qiita.com 今日はCRIUに関わる自作ツールの話をします。 CRIU って? Checkpoint and Restore In Userspace の略で、プロセス(や特殊なプロセスであるところのコンテナ)の動いているメモリ状態などをイメージにダンプし、またそのイメージからのリストア起動を実現するLinux向けのツールです。 詳細は、 TenForward さんの記事が詳しいです。 gihyo.jp 任意の状態のプロセスのセーブポイントや、 kvm などでいうライブマイグレーションのような用途での利用を想定しているようです。 で、この技術、やれることはとても魅力的なのですが、使い方がかなり難しいことでも有名です。 雑にプロセスを立ち上げてそのPIDをダンプしようとしてもエラーが出たり、 $ sudo cr

    CRIUをラップしてより簡単にプロセスのチェックポイント/リストアをするツールを作った話 - ローファイ日記
    udzura
    udzura 2019/12/13
    昨日書いてて思ったんだけどCRIUやっぱり面白いので、Grenadine育てつつ色々試そうtoiukimoti
  • Linuxでスレッドごとに固有のIDを発行できないか - ローファイ日記

    なるべく簡単なロジックで、おおむね被らないようなIDをスレッドごとに吐けないだろうか、それも同じスレッドなら何度呼び出しても同じIDになるやつ(=キャッシュが要らない)、と思ってこういうのを考えた。 とりあえずコード: #define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/syscall.h> pid_t gettid(void) { return syscall(SYS_gettid); } unsigned long long getthreadseq(void) { pid_t tid = gettid(); char fmt[] = "/proc/self/task/%d/stat"; char statpath[sizeof(fmt)+10]; un

    Linuxでスレッドごとに固有のIDを発行できないか - ローファイ日記
    udzura
    udzura 2019/12/04
    これ頑張って考えてる感あるな
  • Nginxをbpftraceで追いかける - ローファイ日記

    このブログは、昨日の分です。だめですかね... カーネルトレーシングシリーズです。今日は、Nginxを、追ってみます。 まず、 uprobe が見えるnginxバイナリを用意する 大抵の場合、パッケージのnginxバイナリはシンボルがstripされていて、uprobeが見えない。 nginx-build などで自分でビルドする。 github.com トレーシングの都合上、 --with-debug でビルドするといいらしい( ngx_request_t * などがトレーサから見えるようになる)。 $ nginx-build -d src/nginx-build -v 1.15.12 \ --with-debug uprobeは以下の通り確認できる。 $ sudo bpftrace -l 'uprobe:/usr/local/nginx/sbin/nginx' | head uprobe:

    Nginxをbpftraceで追いかける - ローファイ日記
    udzura
    udzura 2019/10/17
    昨日のブログが遅延しました。そういうことにしてください。
  • Linux上のRubyのUSDT - ローファイ日記

    Rubyは 2.0 から --enable-dtrace オプションでコンパイルが可能になったんですが、 magazine.rubyist.net 一方で現代のLinuxとしてはこれらのトレースポイントは USDT としてトレースできます。今日はその手順など。 --enable-dtrace で作ったRubyをコンパイル rbenv なら CONFIGURE_OPTS='--enable-dtrace' という環境変数で渡せばOK。 $ CONFIGURE_OPTS='--enable-dtrace' rbenv install 2.6.4 ... $ ruby -r rbconfig -e 'puts RbConfig::CONFIG["configure_args"]' '--prefix=/home/vagrant/.rbenv/versions/2.6.4' '--enable-d

    Linux上のRubyのUSDT - ローファイ日記
    udzura
    udzura 2019/10/04
    なるほど便利そう
  • 自分のためのカーネルトレーシング、その1 - ローファイ日記

    色々な理由 でカーネルのイベントなどをトレースする方法を整理する必要が出て来たので。地道にやっていくシリーズ。最近シリーズものが続いてないのでまた中断される可能性が...。 今回は、カーネルのイベントソースとして tracepoint, kprobe, uprobe というものがあるが、それぞれを使って、違いを確認してみる。理解が間違っていたら教えてください。 環境は基的に、ご家庭の Ubuntu Bionic でシュッと試しているので、最新のカーネルというわけではない。 $ uname -a Linux ubuntu-bionic 4.15.0-55-generic #60-Ubuntu SMP Tue Jul 2 18:22:20 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux tracepoint Linuxカーネルには、内部で起こる様々なイベントを

    自分のためのカーネルトレーシング、その1 - ローファイ日記
    udzura
    udzura 2019/09/03
    kprobe、tracepointなどの話はブクマが伸びないとわかりつつある...
  • libbccをmrubyにポートしている話 - ローファイ日記

    たまには「〜話」メソッドでブログを書く。あと6月は二回ブログを書けたのでめでたい。 さて、タイトルのようなことをしています。 前提としてeBPFという、カーネル内で動く特定の目的のプログラムを比較的高速・安全に書くための技術があるのですが、そのプログラムはバイトコードベースなので、eBPFを扱うプログラムをもう少し人間的な形式で書きたくなります。せめてC言語とか。そのためのコンパイラがlibbccです。 github.com 大きくはkprobe、uprobe、kernel tracepointといったカーネルイベントのトレースをしたり、XDPというネットワーク周りのトレースをしたり挙動を変更する処理を書くことができたりします。 以下の記事が詳しいと思います。 mmi.hatenablog.com qiita.com 知人の id:mrtc0 さんという人がeBPF関係の中でもUSDTとい

    libbccをmrubyにポートしている話 - ローファイ日記
    udzura
    udzura 2019/06/28
    さいきんやっていることです
  • 読んだ - 21st Century C, 2nd Edition - ローファイ日記

    shop.oreilly.com C言語初心者なので読んだんだけど、良かったとも言えるし、大変辛かったとも言える... C Is Punk Rock という章から始まる書は、「ググってもなんだかよくわからない」C言語のナウな使い方、具体的には、C89/C99/C11とはどういうことだとか、autotoolsというものが実際何をしているかだとか、gdbは怖くないよとか、Makefileって要するにこういう感じだとか、ポインタは友達、怖くないよ(Your Pal the Pointer)と言ってメモリの扱いについて述べていたり、他にはナウいマクロの書き方、構造体の使い方、並列プログラミング(OpenMP、Pthread、_Atomicキーワードなど)、GLibのようなライブラリ、といったトピックスを、随所に散りばめられた尖ったジョーク(英語ネイティブじゃないのでよくわからないが、尖っているこ

    読んだ - 21st Century C, 2nd Edition - ローファイ日記
    udzura
    udzura 2019/06/01
    この書評勢いはあるけど、本の良さを紹介できてるかわからんなw
  • Grenadine: 「普通のアプリケーション」がチェックポイント/リストアの恩恵を享受する - ローファイ日記

    ここ数日、 Grenadine (グレナデン)と名付けたOSSをやっていっていました。 github.com Grenadine は、CRIUを用いて、いわゆるコンテナ化をしていないような、VMにデプロイしているようなサーバ型アプリケーション(Webなら、Rails, Django, node.js ...)でもチェックポイント/リストアの恩恵を受けられるようにするためのツールです。 criu.org 今日はこのできたばかりのGrenadineを軽く紹介します。チェックポイント/リストア、と言われてもピンと来ないとは思うので、簡単なデモの手順を示しつつ。 インストール・セットアップ Grenadine、まだパッケージ等は作っていません(お待ちを...)ので、一旦は自分でビルドすることになります。mruby に必要なビルド環境 と CRIUのビルドに必要なパッケージ類 が揃っていればビルドで

    Grenadine: 「普通のアプリケーション」がチェックポイント/リストアの恩恵を享受する - ローファイ日記
    udzura
    udzura 2019/03/07
    書きました。 #rubykaigi みんなきてね。
  • エンジニアフレンドリーシティ宣言に寄せて - ローファイ日記

    私が住んでいる市の自治体がこのような取り組み - エンジニアフレンドリーシティ宣言(efc)をしています。 efc.isit.or.jp その取り組みのキックオフイベントに行ってまいりました。普段お世話になっている id:edvakf さん、 id:matsumoto-r さんを始めとした方々のコミュニティへの思いをあらためて聴くのは新鮮ではありました。 efc.connpass.com 僕自身の福岡への移住を振り返ると、そもそも、移住する1年ほど前に現LINEの 新田さん にお誘いを受けて、福岡のエンジニアとお茶をしたことが最大の契機となったのでした。新田さんとのつながりも東京時代の某社関係者繋がりのとある勉強会だったりして、とにかくコミュニティの力だなあというのを思い出しました。 そうして 2012年の7月29日 らしいんですが、天神を訪問し、大名の今はなきCosta に寄ったりして4

    エンジニアフレンドリーシティ宣言に寄せて - ローファイ日記
    udzura
    udzura 2019/02/14
    そういえばぼくのエンジニアフレンドリーシティへの気持ち記事です
  • Ubuntu(などdeb系なLinux)でLinux 4.20 + PSIなカーネルを入れる - ローファイ日記

    あけましておめでとう😂! では、今日はLinux 4.20より導入された PSI を試していきたいわけですが、まずは環境構築からやっていきたいとおもいます。今後、「〜していきたい」と言う表現が続きますが、そこは任意のユーチューバーやゲーム実況者の声に置き換えてお読みください。 PSIは公式サイトがあります。 facebookmicrosites.github.io Pressure Stall Information とは、各種リソース、CPU/メモリ/IO のプレッシャー状況を取得する方法で、具体的には /proc やcgroup2配下のファイルを経由してゲットできます。いわゆるロードアベレージのように参照できるのかどうかが気になっていて、色々試していきたいと思います。 ちなみに、TenForwardさんがすでに紹介記事を軽く書いていますので、僕はあれですね、フォロワーとしてやっていき

    Ubuntu(などdeb系なLinux)でLinux 4.20 + PSIなカーネルを入れる - ローファイ日記
    udzura
    udzura 2019/02/12
    カーネルビルドし放題記事です
  • mruby-metaprog がvanilla mrubyから切り出された話 - ローファイ日記

    タイトルの通りですが、そのようになるそうです。 あー、先日下呂温泉で開催されたSWESTにて、Matzさんを交えて徹夜(!)でmrubyについて協議した結果です。思ったほどRAMが大きいマイコンばかりでは無く小さい物もふつーにあるので、mruby体もちいさくありたいとのリバランスです。— mrubyc-dev-jp (@mrubyc_dev_jp) October 10, 2018 とりあえず、ブログを書いて状況や対処法などを残しときます。 状況 github.com このコミット以降、主に Kernel/Module のメソッドとして実装されたメタプログラミング機能を使いたい場合、 mruby-metaprog という同梱されるmgemを明示的に依存に追加する必要が出て来ます。 どれが対象で、どれが非対象かは当該コミットと、後のコミット (https://github.com/mrub

    mruby-metaprog がvanilla mrubyから切り出された話 - ローファイ日記
    udzura
    udzura 2018/10/18
    ふむふむ、直近のmrubyにはこういう変更があったのか(ステマ