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

  • やわらか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 入門〜 - ローファイ日記
    ksss9
    ksss9 2021/12/10
    fiddleの使い方がよくわからずffi gemを使ってしまった記憶があるので、あのときの自分に見せてあげたい……。
  • 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を公開した - ローファイ日記
    ksss9
    ksss9 2021/09/24
    libcにも正規表現あったのかー。よさそうだけど正規表現エンジン以外の部分はコード統一できないかなあ。
  • 2021年にmrubyを始める皆さまへ - ローファイ日記

    2021年3月5日に、mruby 3.0.0 のリリースがされました。おめでとうございます! mruby.org これに関連してなのか、mrubyをこれから始めようとか、ここのところどうなっていますかという質問をちょくちょく受けたり、ツイートを拝見したりするようになりました。 一方で、どうしても情報が古い、あるいは多くのmgemのメンテナンス状況が悪いように見える、などの初学者にとっては難しい状況が広がっており、厳しい気持ちになったり、厳しい感想を述べたりされている方もいるように思います。そして、その感想中には誤解も含まれているようです。 ここでいったん、少しでも「心構え」ができるように、これから触ってみる方々に対しての自分の考えをまとめておこうと思いました。 (さらにいうと、基的に原稿はいちユーザ、それもWebインフラに関わるユーザとしての解釈なので、Matzをはじめとした他のmru

    2021年にmrubyを始める皆さまへ - ローファイ日記
    ksss9
    ksss9 2021/03/12
    へー、mrubyっておもしろそう。今度遊んでみよ。
  • 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の話。 - ローファイ日記
    ksss9
    ksss9 2020/12/17
  • Cレベルのライブラリコールを“Hijack”してみる その2 - libmruby.aを組み込む - ローファイ日記

    少し間が空いたんですが udzura.hatenablog.jp こちらの続きです。 今回は LD_PRELOAD するshared objectにlibmruby.aを組み込み、mrubyで置き換え対象の処理を記述できるようにする。 組み込み用の libmruby.a を作成する git clone --depth=1 https://github.com/mruby/mruby vim mruby/build_config.rb # 後述する通り、共有ライブラリにするため -fPIC オプションを渡すよう書き換え # libmruby.a を単体で作る場合は、生成ファイルのフルパスを指定すると良い bash -c 'cd mruby && rake `pwd`/build/host/lib/libmruby.a' -fPIC はこの場所に書く。 MRuby::Build.new do

    Cレベルのライブラリコールを“Hijack”してみる その2 - libmruby.aを組み込む - ローファイ日記
    ksss9
    ksss9 2017/04/05
    Cの関数をmrubyで書いて上書きする感じかなあ。そんなことできるんだ。
  • 第9回フクオカRuby大賞を受賞しました - ローファイ日記

    www.digitalfukuoka.jp 去年より開発している、mrubyでコントロールできるLinuxコンテナランタイム Haconiwa で、第9回フクオカRuby大賞・県知事賞をいただきました。 写真は受賞決定直後の様子です。 今日の福岡Ruby大賞で @udzura さんが大賞で100万円とったという速報とともに送られてきた写真見て「うづらさん怒られてるの?」ってslackに書いた自分の書き込みがツボって仕事にならなかった。おめでとうございます! #udzura_sushi pic.twitter.com/7zGKUyvj5K— 松 亮介 / まつもとりー (@matsumotory) 2017年3月1日 Haconiwaの開発にあたって 去年の振り返り で書いた気もするんですが、そもそもの大きなきっかけとして福岡開催された 第9回 コンテナ型仮想化の情報交換会@福岡 の存在が

    第9回フクオカRuby大賞を受賞しました - ローファイ日記
    ksss9
    ksss9 2017/03/22
  • Linuxプログラミングインターフェースを読んだ(一周目) - ローファイ日記

    読みきった。一周目の所感を書く。 Linuxプログラミングインタフェース 作者: Michael Kerrisk,千住治郎出版社/メーカー: オライリージャパン発売日: 2012/12/01メディア: 大型 クリック: 14回この商品を含むブログ (7件) を見る モチベーション ぼくは、小さい会社でWebサービスの開発もしつつLinuxのサバ管も少ししつつ、という人間だったので、Linuxに開眼して真髄を会得したい、という欲求が長らくあった。例えば青木さんのであったり、なるほどUnixであったり。 ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道 作者: 青木峰郎出版社/メーカー: ソフトバンククリエイティブ発売日: 2005/07/27メディア: 単行購入: 35人 クリック: 450回この商品を含むブログ (150件) を見る tatsu

    Linuxプログラミングインターフェースを読んだ(一周目) - ローファイ日記
    ksss9
    ksss9 2017/03/07
  • 私のロールモデル: エンジニア立ち居振舞い番外編 - ローファイ日記

    お題「エンジニア立ち居振舞い」 pepabo Advent Calendar 2016 24日目の記事です。 割と飲みの席とか、某ポエムサービスでは語ってはいるんですが、そういえばブログで書いたことがないような気がしたので父の話をします。 実は今年の福岡での新卒研修で同じような話を若者にしていて、でもまあ、あまりに個人の話なのでとスライドも公開していなかったのですが、せっかくなので内容を加えて書き下します。 僕の父は欄間職人をやっていて、6X歳を超えるいまも自営で東三河の片隅に店を持ってやっていってるわけだけど、僕は子どもの頃からそういう背中を見て育ってきたからか、今の自分を振り返ってみると随分自分の仕事ぶりが影響を受けているなと思ったりする。 今日は、6X歳のいまも職人の父を見ていて思ったこと、あるいは直接言われたことなどいくつかをしたためてみる。 生涯、勉強すること これは僕の父の仕事

    私のロールモデル: エンジニア立ち居振舞い番外編 - ローファイ日記
    ksss9
    ksss9 2016/12/24
  • mruby gemを作るスクリーンキャストです - ローファイ日記

    mruby advent calendar 2016 5日目の記事なのですが、公開が遅れ失礼します。 前日の様子です。 qiita.com 先日の Fukuoka.rb で、mrbgemをライブコーディングで作る、という一芸をやったのですが、とはいえ特に映像などを記録するでもなくという感じでした。 せっかくですのでもう少し違う実装で再現してスクリーンキャストを撮ってみました。公開します。 www.youtube.com struct passwd をバックデータに getpwnam(3) をmrubyでラップしたgemを作っています。 ただ、このスクリーンキャストのままのコードだと、 getpwnam(3) の返り値を free しかねないということに気づいてしまったので、デモはデモとして、より適切であろう最終形を gist に残しておきます。 mruby advent cal 2016

    mruby gemを作るスクリーンキャストです - ローファイ日記
    ksss9
    ksss9 2016/12/06
    コンソールがかわいい
  • fusuma/mruby-fuseでFUSEを簡単に試す - ローファイ日記

    mruby Advent Calendar 2016 の 2日目の記事です。 昨日は おごもりさんのRuby Miniature Book の記事でした。 今日は、最近こそこそ作っているfusumaとmruby-fuseが、なんとなく面白いおもちゃにはなってきたので、せっかくということで紹介したいと思います。 fusuma (FUSe Upon Mruby-script Assistance) github.com mrubyとFUSEを用いて、ファイルシステムを作れるコマンドベースのミドルウェアです。 インストールはx86_64なLinuxバイナリは用意してありますのでひとまずそちらを解凍し、パスの通るところに配置すればOKです。各ディストロで fuse/ilbfuse 相当と libcurl 相当を別途インストールす必要があるでしょう。 ダウンロードはこちら とりあえず、libfuse

    fusuma/mruby-fuseでFUSEを簡単に試す - ローファイ日記
    ksss9
    ksss9 2016/12/02
    うおーファイルシステムを作るってこんなこともできるんだ
  • seccompをmrubyで試す - ローファイ日記

    seccomp とは、Linuxでプロセスのシステムコールの発行を制限する機能のこと。今回試すものはseccomp mode 2と呼ばれる、Linux3.5から搭載されたもので、システムコール単位での制限、特定の条件を満たす引数のみの許可/制限を実現できる。 バックエンドではlibpcapなどでも利用しているBPF(Berkeley Packet Filter)を利用していて、JITなどで高速に動作するらしい。 以下のサイトなども参照のこと。 mmi.hatenablog.com yuzuhara.hatenablog.jp 今回、seccompを利用するためのCライブラリlibseccompを用いて、mruby-seccompを作成した。これを利用してシステムコールの発行制限を試す。 github.com 基的な使い方 基的には、Seccompのコンテクストを作って、ルールを記述し、

    seccompをmrubyで試す - ローファイ日記
    ksss9
    ksss9 2016/11/18
  • Haconiwa 近況(released 0.3.0) - ローファイ日記

    Haconiwaの近況報告です。みなさんは、庭ですか? まず、haconiwa-0.3.0 今すぐダウンロードは以下です: udzura/haconiwa - Packages - packagecloud.io | packagecloud 次に何があったかを話します。 (サンプルコマンドの色々な操作は、rootで行う前提となっております) haconiwa new で設定ファイルのテンプレートを作れるようにしました ファイル名を指定するだけでOKです。コンテナ名やrootfsのロケーションはオプションで指定可能です。ヘルプを参照。 root@localhost:~/hacos# haconiwa new ./test.haco assign new haconiwa name = haconiwa-2c876e2f assign rootfs location = /var/lib/h

    Haconiwa 近況(released 0.3.0) - ローファイ日記
    ksss9
    ksss9 2016/08/22
    RubyKaigi行きたい人生だった……。
  • Emacsでmrubyをそこそこ快適に書く - ローファイ日記

    こんにちは、これはEmacs記事です。みなさんはEmacs記事...ではないですよね...。 Haconiwaのおかげですっかりmruby人間になって久しい id:udzura です。 https://t.co/1iLQyn2rV0 バージョン 0.2 系を出しました。rlimit系のリソース制限と、コンテナ内PID=1のuid/gidを変更できます #haconiwarb— Uchio KONDO (@udzura) 2016年7月20日 で、宣伝はこんなくらいにしておきまして、なんとなく流れでセットアップしたEmacsによるmruby環境をこの辺で整理しとこうと思ったので、書きます。というか、ほとんどC言語を書くための環境...。平成が終わるとか終わらないとか言っている2016年にEmacsでC言語を書く環境の記事を書きます。 なお僕は C言語をまともに書いて2ヶ月ぐらいだったり、あと

    Emacsでmrubyをそこそこ快適に書く - ローファイ日記
    ksss9
    ksss9 2016/07/21
    emacs使ってみようかな(そこから)
  • IPC Namespaceをまたいだプロセス間で、pipeでやりとりする。mrubyで。 - ローファイ日記

    Introduction to Linux namespaces - Part 2: IPC | Yet another enthusiast blog! こういうブログ記事があって、元記事はC言語なんだけど、これと同じことをmrubyでもやってみたサンプル。なお元記事は clone(2) だけど今回はforkしてから unshare(2) している。clone未実装なんで。。 reader, writer = IO.pipe puts " - Hello ?" p = Process.fork do Namespace.unshare(Namespace::CLONE_NEWUTS | Namespace::CLONE_NEWIPC) writer.close reader.read # blocking system "hostname 'In-Namespace'" puts " -

    IPC Namespaceをまたいだプロセス間で、pipeでやりとりする。mrubyで。 - ローファイ日記
    ksss9
    ksss9 2016/06/28
    mrubyのIO.pipe使われててニヤニヤする
  • Go言語からmrubyのDSLを読み込んでよしなに使う - ローファイ日記

    Go言語便利だけど、文法をこねくり回して内部DSLを作るとかには向いていないので、ルビー風にDSLを読み込ませて設定と替えさせていただきます、と言うのが少し難しい。 いっそGo内部でRubyを組み込んで実行したい。mrubyならできるんじゃね? と思ってやってみたらそれっぽいのができた。 Vagrant、Packer、Consulなど、DevOps対応界隈でその名を知らない者はいない mitchellh さんの mitchellh/go-mruby · GitHub をつかう。 多分だけど、ハシモト氏も同じようなこと考えてたんじゃないだろうか。結局 hashicorp/hcl · GitHub を使われてるけれど。 完成したそれっぽいの.go package main import ( "fmt" "io/ioutil" "os" "github.com/mitchellh/go-mrub

    Go言語からmrubyのDSLを読み込んでよしなに使う - ローファイ日記
    ksss9
    ksss9 2014/09/18
  • 1