タグ

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

  • 今日から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をはじめる人へ
    yuiseki
    yuiseki 2013/03/08
  • 言語の性能の差がApacheモジュールの決定的な差でないことを教えてやる

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 mod_mrubyにはぜひluajit版に勝って、言語の性能の差がシステム全体の決定的な差でないことを教えてやる と言ってほしい。すっかり他力願モード — Miura Hidekiさん (@miura1729) 1月 23, 2013 というツイートに触発されて、mod_luaのLuaJIT版の速度がどの程度早く、mod_mrubyと比較してどれほどの性能差があるのかを試してみました。 mod_luaのLuaJIT版の設定 ここが結構はまってしまって、最新のApache2.4.3ソースで–enable-luajitとしても、LuaJIT版でmod_luaが動作するようにはなっていません。バグかな? というわけで、Apacheのソースを追って

    言語の性能の差がApacheモジュールの決定的な差でないことを教えてやる
    yuiseki
    yuiseki 2013/01/28
  • 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動いたよー
    yuiseki
    yuiseki 2013/01/18
  • 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を操作
    yuiseki
    yuiseki 2013/01/03
  • csshXが素晴らしすぎる件

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 複数のホストに対して、同時にコマンドを実行するツールはpssh等いくつかあると思うのですが、もっと自由度高く、viで編集したり、さらにはsshでログインしている状態でやれるような作業を全部同時にやりたいと思っていました。 そんな都合の良いツールはなかなかなくて、会社の人がLinuxでCluster SSHを使っていて、Linux限定かぁと諦めていたところ、なんとMacで使えるcluster SSHのcsshXがあるようだと教えてもらいました。これがあまりに素晴らし過ぎるので簡単に紹介します。 インストール brew環境を入れている人は以下のコマンド一発で使えるようになります。 [program lang=’bash’ escaped=’tru

  • mod_mrubyの拡張ライブラリ開発のススメ

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 先日mod_mrubyでredisクラスを扱えるようにしました。 今回は、こういった新たなクラスを扱うためのmod_mruby用拡張ライブラリの作り方を紹介しようと思います。「mrubyで何か作ってみたいけど、どこから手出していいかわからない。」という人は、是非この記事を参考にmod_mrubyの拡張ライブラリを作って、Apacheに実行させて遊んでみてはどうでしょうか。 拡張ライブラリの実装 まずは、作りたいクラスの実装をします。 mod_mrubygithubからcloneするとレポジトリ内にlibディレクトリがあると思います。今回は、例のごとくhelloクラスを作る場合はどういう実装の仕方になるかを紹介します。 まず、以下のようにli

    mod_mrubyの拡張ライブラリ開発のススメ
    yuiseki
    yuiseki 2012/12/13
  • mrubyでRedisを操作するmruby-redis書いたよー

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 mrubyでRedisを操作できるようにしました。ソースはGitHubに上げています。driverにはhiredisを使っているので結構高速だと思います。 元々のモチベーションはmod_mrubyでredisを操ることでしたが、mrubyのような軽量・高速な言語とRedisの連携は実に相性が良いと思ったので、mrubyの拡張ライブラリとして書き直しました。 色々と考えがあってmrbgems化はもう少ししてからにしようと思っています。 インストール 非常に簡単です。以下の通りです。自動で最新のmrubyも取得します。 [program lang=’bash’ escaped=’true’] git clone git://github.com/

    mrubyでRedisを操作するmruby-redis書いたよー
  • 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をインストールした時にハマった所
    yuiseki
    yuiseki 2012/11/11
  • mod_mrubyに高速化機能を追加

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 Apacheやnginxで動くLuaやその周辺を見ていると、Luaのコードをhttpd.confに直接書くような設定の方法があります。その結果、高速にLuaが動いて、「やっぱLuaはやいー、最高ー」とかそういう話を目にしたので、それだったらmod_mrubyでもやってやろうじゃないかと思いやってみました。 そもそもconfに直接書くとなぜ速いのか もともとmod_mrubyの売りの一つは、Apacheを起動させている状態で再起動することなく自由にスクリプトを変更して、Apacheの内部処理をリアルタイムに変更できる事です。mod_mrubyの基的な考え方は以下を参考にして下さい。 なぜApacheにmrubyを組み込もうと思ったか しかし、

    mod_mrubyに高速化機能を追加
    yuiseki
    yuiseki 2012/10/21
  • 勢いでデバイスI/Oを制御するツールも作った

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 昨日のエントリに続いて、そのまま勢いでcgroupsを使ってデバイスI/Oを制御するツールをPerlで書いてみました。 プロセス単位でCPUコアを割り当てたりもできるけど、そんなニーズあるのかなぁと思ったのでそっちはとりあえずPending。このシリーズで後やるとしたら、プロセス単位でトラフィックの制御とメモリぐらいを考えていますが、cgroupやCFSをもう少し勉強すると、もっとやりたいことが出てくるかもしれません。 昨日公開したCPU制御のレポジトリ名をresources-managed-toolsにリネームして、そこにツールをどんどん入れていくことにしました。引数で色々やれるツールでも良いのですが、この手のツールはツール自体が別の方が運

    勢いでデバイスI/Oを制御するツールも作った
    yuiseki
    yuiseki 2012/08/20
  • ngx_mrubyから学ぶnginxモジュールの作り方

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 ngx_mrubyを作るにあたって、nginxモジュールの実装方法が分かってきたので、それを連々と書いていこうと思います。nginxモジュールといっても、Apacheモジュールの実装方法と似ていたので、Apacheモジュールを書ける人は同様にnginxモジュールも実装できると思います。 ngx_mruby用のディレクティブを追加 nginxモジュールはApacheモジュールと同じで、基的にはnginxの内部ルールに従って、nginxに処理させたい関数をフックさせる方式で実装します。nginxのconfに新たな設定を追加したい時、例えば、以下のようなnginxの設定を新たに作りたいとします。 location /mruby { mrubyHa

    ngx_mrubyから学ぶnginxモジュールの作り方
    yuiseki
    yuiseki 2012/08/08
  • nginxをmrubyで制御するモジュールngx_mruby 0.0.1をリリースしました

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 といっても、nginx固有のメソッドはクライアントに任意の文字列を返す事しかできませんが、とりあえず動くものを実装する事ができました。ということで、mod_mrubyの時と同様ngx_mruby 0.0.1としてGithubでリリースしたいと思います。もちろんmrubyに最初から含まれているメソッドは動きます。 ngx_mrubyとは ここで一旦ngx_mrubyの簡単なおさらいをしておきます。ngx_mrubyはその名の通り、Apacheをmrubyで制御するためのモジュールmod_mrubyに対して、nginxをmrubyで制御するためのモジュールです。このモジュールによって、nginxを再起動することなく、Rubyスクリプトによってng

    nginxをmrubyで制御するモジュールngx_mruby 0.0.1をリリースしました
  • mod_mruby - 組み込みスクリプト言語mrubyを利用したWebサーバの機能拡張支援機構

    質疑 以下の3点の質問とコメントをして頂く事ができたようです。代理で発表して頂いた先生から教えて頂きました。 質問1 (地引先生) rubyのようなスクリプト言語がC言語より記述性がよい、というのは当だと思うか。 大きなプログラムだとCでちゃんと書いた方がいいんじゃないか。 質問2 (柏崎先生) これでjournal論文になるのか。新規性はどこにあるのか。 コメント(安東先生) これはぜひ早いうちにApacheConに出すべき。 http://www.apachecon.com/ 質問とコメントして頂いてありがとうございました。先生が全ての質問に対して適切に回答されたと思いますが、僕も改めてこれらの質問やコメントに対して、きちんと考えてまたブログや論文、発表で回答したいと思っています。 最後に 先生、お忙しい中代理で発表した頂き、当にありがとうございました!

    mod_mruby - 組み込みスクリプト言語mrubyを利用したWebサーバの機能拡張支援機構
    yuiseki
    yuiseki 2012/07/01
  • mrubyでApacheのCPU割当てを制御できるモジュール作った

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 週末の夜なので、突発的に何か面白い物作れないかと、一人ハッカソンがてら新しいApacheモジュールを作ってみました。最初に断っておきますが、mrubyを使ったものの、mod_mrubyとは全く関係ないです。 ApacheのサーバプロセスのCPU割当を制御 まだまだ、あくまで試しに実装しただけというレベルのモノです。一応、名前は「mod_resource_manager」と呼んでいます。何ができるのかというと、Apacheのサーバプロセス上のCPU使用率を制御できるモジュールです。例えば、アクセス集中の場合やCPUを大量に消費するようなスクリプトが動作するプロセスのCPU使用率を制御する事ができます。特徴としては以下になります。 サーバプロセス

    mrubyでApacheのCPU割当てを制御できるモジュール作った
    yuiseki
    yuiseki 2012/06/19
  • 人間とウェブの未来 - mod_mrubyでApacheのリバースプロキシを実装してみた

    動作チェックはしていませんので、あくまでネタとして読んで頂くのが良いと思います。さらに、Rubyのコーディングスキルが低すぎて、いっぱい書くと荒が見えすぎてしまうため、今回は少ないコードにしました。 mod_mrubyの売りとしては、ApacheをRubyスクリプトで「高速に」コントロールできる事ですが、「どういうことができるの?」というイメージが付きにくいのでサンプルを書いてみました。 例えば、複数のバックエンドのサーバがあって、それらにとある条件下でリバースプロキシとして振り分ける場合の処理を書いてみました。だいたいこういう実装になるんじゃないかと思います。 今回は、バックエンドサーバリストからランダムでサーバを選択する場合の処理を実装しました。 require "Apache" backends = [ "http://192.168.0.101:8888/", "http://19

    人間とウェブの未来 - mod_mrubyでApacheのリバースプロキシを実装してみた
  • mrubyとmod_mrubyに関して社内勉強会で発表します

    mrubyとmod_mrubyに関して社内勉強会(第3回松勉強会)を今日行う予定ですので、それで使うスライドを先行で公開しておきます。 mod_mrubyについて シンプルに題目は「mod_mruby」にしました。これまでにブログ等で書いた事をまとめたスライドになっていますので、mod_mrubyに関してはこれが最新のスライドになります。要望や指摘、及び、質問等は@matsumotoryまでお願いします。

    mrubyとmod_mrubyに関して社内勉強会で発表します
    yuiseki
    yuiseki 2012/06/08
  • mod_mrubyとApache(Nginx)の関係を図示してみた

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 今回は、言葉だけだと非常に分かり難いmod_mrubyの役割を図示してみました。 このエントリを読んだ後にでも、「なぜApacheにmrubyを組み込もうと思ったか」を読むと色々理解が深まるかもしれません。 ApacheとApacheモジュールの関係を図示 まずは、ApacheとApacheモジュールの関係は以下のようになります。 皆さんご存知の通り、ApacheコアにApache APIがかぶさっていて,Apacheモジュールを組み込んでいく仕組みです。 では、mod_mrubyだとどういう図になるのでしょうか。 ApacheもApacheモジュールとmod_mrubyの関係を図示 このように、mod_mrubyでmrubyスクリプトの実装

    mod_mrubyとApache(Nginx)の関係を図示してみた
    yuiseki
    yuiseki 2012/05/30
  • Linuxで3万(10万)プロセスを同時に起動させてみた

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 といっても、きちんとした検証をしたわけではないので、あくまで「こういう環境でこういう事をやるとこうなる」という参考程度のものと理解してい頂ければ幸いです。 Linux上でプロセスは同時に何個起動できるのか 数年前にC10K問題が流行りました。これは、簡単に言うと、万のオーダーでプロセスを立ち上げる事になると、現状のOSではそれを想定した設計になっていないためまともに動かなくなる、といった問題でした。 だったら、「10万プロセス位を同時に立ち上げてみて、どうなるか試してみようぜ!」と思い、会社のエンジニアと一緒に試してみました。検証環境は、メモリ48GでCPUはHyperThreading込で24コアです。そこで動いていたOSはDebianでL

    Linuxで3万(10万)プロセスを同時に起動させてみた
    yuiseki
    yuiseki 2012/05/16
  • mod_mrubyの逆襲(mod_luaよりパフォーマンス良くなったよ)

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 さてさて、これまでの研究の論文化や研究会発表等が落ち着いたので、mod_mruby触ってます。 mod_mrubyGithub 前回、mod_luaにパフォーマンス面で完敗したわけですが、ついにやりました。mod_luaを超えてやりましたよ! 工夫した所 何を変えたかいうと、前回の実装ではmrubyスクリプト実行毎に、 mrb_open()実行 mrb_define_module()やmrb_define_class_method()を実行 mrb_parse_file()実行 mrb_generate_code()実行 mrb_run()実行 していました。しかし、Apacheの特性上プロセスやスレッドをプールさせて使いまわすため、少

    mod_mrubyの逆襲(mod_luaよりパフォーマンス良くなったよ)
    yuiseki
    yuiseki 2012/05/06
  • GNU GLOBALとvimで巨大なコードでも快適にコードリーディング

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 これまでも、多くの記事にされていて、恐らくKernelや巨大なコードを読んでいる人にとっては当たり前なのかもしれませんが、あまりに快適だったのとこれをきちんとやれてなかった事に自戒をこめて記事にしようと思います。grepとかscreenを駆使していた時間を返してほしい! 対象者 僕がLinux大好きなので、Linux上での動作を前提にしています。対象者はLinux KernelやApache HTTP Server等、数万から数十万、さらには数百万行のコードをじっくり読んでいきたいと考えている人におすすめしたいと思います。巨大なコードを何のツールも使わずに読むのはかなりきついはずです。しかし、今回はGNU GLOBALと呼ばれるソースコードタ