タグ

ブックマーク / blog.matsumoto-r.jp (26)

  • Raspberry PiのGPIOをmod_mrubyで操作してブラウザからLEDを光らせてみた

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 前回の記事では、Raspberry Pi上でmod_mrubyを動作させることに成功しました。やはり次はマイコンボードらしく、GPIOを操作してLEDを光らせてみましょう。 しかし、普通に光らせても面白くないので、mod_mrubyを使ってブラウザからLEDを光らせてみました。 ちなみに、無線LAN化も試してみました。以下はその時の写真です。 準備 まずは、mrubyでGPIOを操作するために、mruby-WiringPiとmruby-sleepをmrbgemとしてmrubyに組み込みます。 以下のようなbuild_config.rbになります。 [program lang=’ruby’ escaped=’true’] MRuby::Buil

    Raspberry PiのGPIOをmod_mrubyで操作してブラウザからLEDを光らせてみた
  • なぜApacheにmrubyを組み込もうと思ったか

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 なぜWebサーバソフトウェアであるApacheやNginx等にmrubyを組み込もうと思ったのかを整理しておきたいと思いました。 目的はWebサーバの開発支援 Webサーバの開発支援をしたい という壮大な目的が以前からありました。 それがどういうことかは後述するとして、ここでいうWebサーバの開発とは、Webサーバの内部機能拡張を指しています。それを行うにはどうしたら良いかをまず簡単に説明したいと思います。(スクラッチでWebサーバを1から実装するのもよいですが、ここではスコープ外とします) 例えば、Apacheを例にあげると、Webサーバの内部機能拡張はモジュール単位で組み込むという方法が取られています。ApacheやNginxはWebサー

    なぜApacheにmrubyを組み込もうと思ったか
  • Dockerとmrubyで迅速かつ容易にnginxとapacheの柔軟なリバースプロキシ構成を構築する

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 Docker Hubがアナウンスされて以来、焦ってDockerを触っている@matsumotoryです。 今日は早速mod_mrubyとngx_mrubydocker buildに対応させました。これによって、Docker環境においてmod_mrubyを組み込んだApache httpdやngx_mrubyを組み込んだnginxを迅速かつ容易に連携させる事ができるようになります。 今日はその一例を紹介したいと思います。 リバースプロキシのnginxの挙動をmrubyで制御する ngx_mrubyGitHubレポジトリにはすでにDockerに対応させています。ですので、ngx_mrubyをcloneするとDockerfileとdocker/

    Dockerとmrubyで迅速かつ容易にnginxとapacheの柔軟なリバースプロキシ構成を構築する
  • mrubyでSPDYやHTTP2通信

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 年末にSPDYやHTTP2の勉強がてら、mrubyでSPDYやHTTP2通信可能なmrbgemを作りました。 mruby-spdy mruby-http2 これで、mrubyを組み込んだアプリケーションやデバイスからSPDY・HTTP2通信ができるようになって未来が広がりますね。 現状はクライアントのGETのみができます。これで、例えばmod_mrubyやngx_mrubyに組み込んで、あるURLにアクセスした場合はバックエンドでSPDYやHTTP2な通信をすることもできますね。 サンプル SPDYやHTTP2通信をするためにはRubyで以下のように書きます。 SPDY通信 [program lang=’ruby’ escaped=’true

    mrubyでSPDYやHTTP2通信
  • abコマンドのベンチマークパターンを書けるab-mrubyを作った

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 Web屋さんはみんな大好きabコマンドは便利ですが、オプションは複雑で数も多く、複数のホストにそれぞれに対応するオプションを指定してテストしたりすると結構カオスになりがちです。 最近では、httperfやweighttp等のabに変わる次のHTTPベンチマークツールが出てきていますが、やっぱりまだまだ現役で良く使うのはabコマンドだと思います。 そこで、今回はabコマンドの複数のベンチマークオプションのパターンを1つのRubyスクリプトに定義しておいて、それをabコマンドで読み込む事で動的に任意のパターンでベンチマークを行うab-mrubyを作りました。外出しで書いたRubyスクリプトとabコマンドの連携は、ab-mrubyと見てわかるように

    abコマンドのベンチマークパターンを書けるab-mrubyを作った
    kjw_junichi
    kjw_junichi 2015/04/21
    これか!http2にも将来的には対応するんだろうなぁ
  • Raspberry Pi上でmod_mruby動いたよー

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 Raspberry Piとは、世界中でとんでもなく売れている名刺サイズのワンボードマイコンで、その性能たるやLinuxを普通に動かせるほどの実力の持ち主です。 2ヶ月前に注文してようやくRaspberry Piが届いたので、早速動かしてみました。まずはmod_mrubyを動かすところまでです。mod_mrubyが動いたので、後はマイコンボードらしく、mod_mruby経由でGPIOを触ってLEDをチカチカさせたり、赤外線センサーやリモコンをつけたりして色々遊んでみたいです。ということで、まずはmod_mrubyが動くところまでを紹介します。 Arch Linuxのインストール Raspberry PiにOSを入れるために、Raspberry

    Raspberry Pi上でmod_mruby動いたよー
  • mruby-cgroupを書いてみたがかなり便利な件

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 Linux KernelのControl Group機能によって、プロセスの様々なリソース管理を行うcgroupをmrubyから呼び出せるようにしました。 それをmruby-cgroupと呼ぶことにします。 これがなかなか素晴らしくて、C言語で書いたプログラムにmrubyを組み込むことで、そのC言語で書かれたホストプログラムをとても簡単にリソース管理できてしまいます。 使い方 mrbgemsとして作っているので、mruby-cgroupのREADMEに従ってbuild_config.rbにgitのURLを書くと簡単にrakeでlibmruby.aに組み込めます。 現状は、CPUとIOリソースの管理の機能のみですが、cgroupのコンテキストの

    mruby-cgroupを書いてみたがかなり便利な件
    kjw_junichi
    kjw_junichi 2015/04/03
    将来、高速なPCを奥さんに内緒で購入して、息子と共有する際にお世話になるかも?
  • mrb_stateを共有しているRubyコード間でuserdataを読み書きできるmruby-userdata作った

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 mrubyにおいて、mrb_stateを共有しているRubyコード間で、userdataを自由に読み書きできるmruby-userdataというmrbgemを作りました。 これは、mrubyの状態遷移情報を格納しているmrb_stateを共有している限り、あるタイミングでコードAが呼ばれて、次に別のタイミングでコードBが呼ばれた場合、コードAでuserdataオブジェクトを保存しておけば、コードBからそのオブジェクトを取り出せる仕組みです。 グローバル変数を使えばコード間でやり取りができますが、なんとなくグローバル変数を使うのは実装上バグを生みそうなので、C側にuserdataを保存しておくハッシュテーブルオブジェクトを作っておいて、そこにR

    mrb_stateを共有しているRubyコード間でuserdataを読み書きできるmruby-userdata作った
  • 人間とウェブの未来 - Trusterd(mruby-http2)にリバースプロキシや動的コンテンツ機能を追加した

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 Trusterd(トラスタード)と呼んでいるmrubyで設定が書けるHTTP/2 Web Serverを、色々と勉強しながら実装しているのですが、それらに下記機能を試験的に追加しました。 HTTP/1へのリバースプロキシ機能 コンテンツとしてmrubyスクリプトを実行できる機能 これらの機能はまだ実装は甘く、性能・効率面はこれから詰めていきますが、一応動作するという事で簡単に紹介します。Trusterdの設定方法や簡単な紹介は、過去のエントリ「Trusterd: HTTP/2 Web Server scripting with mruby v0.0.1 リリースしました」を御覧ください HTTP/1へのリバースプロキシ機能 これは、フロントを

    人間とウェブの未来 - Trusterd(mruby-http2)にリバースプロキシや動的コンテンツ機能を追加した
  • mrubyのirepテーブルを再利用する事でmod_mrubyのメモリ消費量を改善

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 昨日、内部フラグメンテーション耐性の高いjemallocを利用することで、mod_mrubyのメモリ使用量を半分に減らす事ができました。 しかし、なお、mod_mrubyを組み込んだサーバプロセスに継続してRubyスクリプトを処理させると、メモリ消費量が単調増加してしまうという問題が残っていました。 そこで、単調増加してしまう原因を突き止め、メモリ消費量増加をさらに改善することができました。 メモリ消費量が単調増加する原因 1リクエスト処理するたびにmalloc利用で400バイト程度のメモリが増加している原因を追った所、mrb_generate_code()後にメモリ消費量が増加している事を突き止めました。 そこで、mrb_generate_

    mrubyのirepテーブルを再利用する事でmod_mrubyのメモリ消費量を改善
  • Linux系インフラエンジニア3年目のスキルを見抜く50の質問(ホスティングの場合)

    数年前になんとなく面白がって書いてた「Linuxインフラエンジニア3年目のスキルを見抜く50の質問(ホスティングの場合)」というのが、昔の資料をあさってると出てきて、意外と面白かったので少しだけ手を加えて(古い情報とかあったので)公開しようと思います。 意外とリアルなものがあって懐かしい気分になりました。過去に書いた以下の記事もどうぞ参考にして下さい。 「Linuxエンジニアを目指して入社一年目にやって役にたったと思う事」 「Linuxエンジニアを辞めて大学院に入学しました」 追記: 設問1があまりによくないので、@tagomorisさんのアドバイスを頂きつつ変更しました。1を消して3を追加しています。ありがとうございます! 2000台以上のサーバー運用経験はありますか? サーバやネットワーク機器のキッティング経験はありますか? サーバやネットワーク機器の交換を現地のデータセンター職員に

    Linux系インフラエンジニア3年目のスキルを見抜く50の質問(ホスティングの場合)
    kjw_junichi
    kjw_junichi 2015/03/04
    4,7,8,10,15,16,17,22,23,24,25(kqueueで苦戦中),26(昔は出来たw),28,29,34(1.x系なら),41以外は、ほぼムリゲー
  • mruby-oauthでmrubyからtwitterを操作

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 なんとか年末に追い込みをかけて、mruby-uvとmruby-httpベースのmruby-oauthを完成させました。ベースはiij/mrubyの実装を再利用しています。 mruby-uvは名前解決のメソッドが現状用意されていないので実装し、mruby-simplehttpとmruby-httprequestを書き直して、それらを継承しmruby-oauthを作成しました。 インストール build_my_mrubyというレポジトリにインストールスクリプトを容易しているので、そのスクリプトを実行します。 [program lang=’bash’ escaped=’true’] git clone git@github.com:matsumot

    mruby-oauthでmrubyからtwitterを操作
  • perlでforkするメモ

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 perlでforkする実験を色々してみた。 結構色々分かったのでメモ。 親が子を作って、プログラムをコピーして渡して実行する 親が子を作った時のグローバル変数はそのままコピー?ループカウント変数は保持したまま。 子が最初からプログラムを純粋に実行するわけではない? #!/usr/bin/perl use strict; use warnings; $| = 1; # 並行して生むことが出来る子の数 my $child_max = 3; my $child_num = 0; # 処理は30回 my $roop_max = 30; my $roop_count = 0; my ($pid, $wait_pid, $sleep_time); whi

    perlでforkするメモ
  • 人間とウェブの未来 - Lua上でmrubyを動かすための禁断のLuaライブラリを作った

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 今日は、6キロのランニングを達成できたご褒美に、突発一人ハッカソンをやりました。眠たかったので、すぐできそうだけど、禁断とされている(勝手な思い)Lua上でmrubyを動かすためのLuaライブラリ(mruby-on-Lua)を作りました。 Lua上でmrubyを動かすためのLuaライブラリ 以下のLuaライブラリを作りました。こんな感じでとても簡単にできます。 #include <lua.h> #include <lualib.h> #include <lauxlib.h> #include "mruby.h" #include "mruby/proc.h" #include "mruby/compile.h" static int l_mr

    人間とウェブの未来 - Lua上でmrubyを動かすための禁断のLuaライブラリを作った
  • mrubyでカジュアルにLinuxのプロセスをサスペンドしてみよう

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 子育てと家事にいそしんでいてあまり研究ができていない松です。こんばんは。 今日はmrubyからLinux上で動いているプロセスをサスペンドしてイメージとして保存し、サーバ再起動後や任意のタイミングでサスペンドしたタイミングのプロセスを復帰させてみましょう。 そのために、mruby-criuというmrubyのモジュールを作りました。これはCRIUという技術を使っていて、上記のようなプロセスのサスペンドが可能になります。 今回は簡単なプロセスサスペンドの例を紹介します。 カウンタをインクリメントするプロセスを起動 まずは以下のように1秒毎にsleepしながらカウンタをインクリメントして表示する簡単なスクリプトを用意します。 [program l

    mrubyでカジュアルにLinuxのプロセスをサスペンドしてみよう
  • Trusterd: HTTP/2 Web Server scripting with mruby v0.0.1 リリースしました

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 Trusterd: HTTP/2 Web Server scripting with mrubyのバージョン0.0.1をリリースしました。 Trusterdはmrubyで設定を書けたり、振る舞いをプログラムブルに制御できるHTTP/2用のWebサーバです。まだまだ低機能ですが、ベースの機能が大体できたのでv0.0.1としてリリースしました。 現状の機能としては、 設定をmrubyでスクリプティングできる Listenアドレス・ポートの指定 ドキュメントルートの指定 serverヘッダの指定 デバッグオプション Rubyメソッドでリクエスト・レスポンス情報を操作 TLSオプションの有無 有りの場合はkeyとcrtファイルの指定が必要 Ruby

    Trusterd: HTTP/2 Web Server scripting with mruby v0.0.1 リリースしました
  • Linuxにlibuvをインストールした時にハマった所

    最近はnode.jsに興味を持ち出しています。 そうなると、やっぱり内部のアーキテクチャが気になってしまって、jsを弄るのと並行してlibuvを使ってCでコード書いたりしています。例えば、Apache2.4系のmpmはLoadableなので、libuvでmpm書いちゃったらApacheも高速だろうなーとかも考えてます。 しかし、Windowsはいっぱいあるんだけど、意外とLinuxにlibuvをインストールする記事やドキュメントが無くて、微妙にハマったのでlibuvをLinuxにインストールする方法をまとめておきます。Makefileやconfig-unix.mkをチラチラ見ながらなんとかしました。 OSはCentOS5系でわけあって32bitのPAEカーネルの環境にインストールしました。 [program lang=’bash’ escaped=’true’] uname -a Linu

    Linuxにlibuvをインストールした時にハマった所
  • mrubyで設定を書けるTrusterd HTTP/2 Webサーバを作ってみた

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 この3連休を使って、mrubyで設定を書けるTrusterdという名前のHTTP/2 Webサーバを作ってみました。まだ機能は限定的ですが、とりあえず動くので公開します。 以前からWebサーバの設定をこなれたプログラミング言語で書きたいと思っていて、ちょうどそれにmrubyのサイズや言語仕様がしっくりきたため実装にとりかかりました。 実装にはnghttp2というCのHTTP/2ライブラリとそれとlibevent2を組み合わせて作ったmruby-http2を使っています。 Trusterdの設定 現状は機能が少ないですが、このように書けます。 [program lang=’ruby’ escaped=’true’] root_dir = "/u

    mrubyで設定を書けるTrusterd HTTP/2 Webサーバを作ってみた
  • mrubyでも使っている擬似乱数Mersenne TwisterがMITライセンスでも提供可能になった

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 擬似乱数Mersenne TwiterがMITライセンスでも提供可能になりました。 というのも、mrubyでランダムクラスをコアにマージする際に、Mersenne Twisterは3項BSDライセンスで提供されており、mrubyはMITライセンスで提供しているため、ライセンスの取り扱いで誤解を招きそうだという話題が上がりました。 一部BSDライセンスだと明記していたとしても、mrubyをMITライセンスとして使っているプロダクトなどにとっては、ライセンスの一部変更はそれなりに手間のかかる問題で、できればライセンスは統一したいという話になりました。もしくは、コアに入れるのはやめようかという話題もでました。 しかし、個人的にはこのような素晴らしい

    mrubyでも使っている擬似乱数Mersenne TwisterがMITライセンスでも提供可能になった
  • 今日からmrubyをはじめる人へ

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 ApacheCon NA 2013に参加し、早めにポートランド国際空港に到着しました。時間があるので、今日(2013年3月2日)からmrubyを始める人へ簡単なチュートリアルをしようと思います。 mrubyというプロジェクト mrubyとは、組み込み機器やアプリ組み込みに最適化された軽量スクリプト言語です。記述方法は既存のRubyのように書くことができます。C言語で書かれたホストアプリにmrubyを組み込むことで、ホストアプリをRubyの記述でコントロールすることができます。例えばmod_mrubyは、RubyでApache APIをつつけるようにmrubyをApacheに組み込むためのモジュールで、ApacheモジュールをRubyで記述する

    今日からmrubyをはじめる人へ