Ruby

RubyでTCP_FASTOPENを使う

サーバ側 setsockoptにTCP_FASTOPENを渡せば良い。 TCP_FASTOPENは、trunkのr42865以降Socket::TCP_FASTOPENとして定義されている。 require "socket" TCP_FASTOPEN = Socket::TCP_FASTOPEN || 23 serv = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM) …

SystemTapでrubyのUser-Space Evnetsをフックする

SystemTapでrubyのUser-Space Evnetsをフックしてみる。環境は以下の通り。 Ubuntu 13.04 ruby 2.0.0p195 systemtapのインストール sudo apt-get install systemtap systemtap-runtime systemtap-sdt-dev ruby 2.0.0p195のビルド 既にビルドしている場合はma…

IO.copy_streamで出力先がsocketでない場合でもsendfile()を使う

※結論から言うと速くならなかった。rubyのIO.copy_streamは可能であればsendfile()を用いるが、これは出力先がsocketである場合に限定されていた。 Linux 2.6.33以降ではsendfile()の出力先が通常のファイルでも許されるようになっていた( sendfile(2) - Lin…

セキュリティ&プログラミングキャンプ2011に参加した

プログラミング言語クラスに参加した。 講義の内容についてはどこかで見られると思うので、個別課題について書く。 個別課題の内容 rubyのpreludeのprecompileという課題に取り組んだ。 preludeというのはインタプリタの起動時に実行されるRubyスクリプトで…

Queueのどうでも良い話

thread.rbでQueue#.popがこのように定義されている。 def pop(non_block=false) @mutex.synchronize{ while true if @que.empty? raise ThreadError, "queue empty" if non_block @waiting.push Thread.current @mutex.sleep else return @que.shift end end…

ウェザーニューズから受信した緊急地震速報をeew_parserに通して何かする

WNIから受信した緊急地震速報をeew_parserに通して色々するクラス WNI_EEW.newにWNIのメールアドレスとパスワードとブロックを渡すと、WNIから緊急地震速報を受信した時にその緊急地震速報から生成したEEWParserオブジェクトをブロックに渡して実行してくれ…

高度利用者向け緊急地震速報の電文を扱う為のライブラリeew_parser

ウェザーニューズなどから受信した高度利用者向け緊急地震速報の電文を扱う為のRubyライブラリを書きました。 https://github.com/Glasssaga/eew_parser require "eew_parser" str = <

配列のようなものを可読な状態で保存

最近はロイディという人工無脳を弄って遊んでいる。 本家ロイディは、ログと単語の保存をバイナリな内部ファイルと、human readableな外部ファイルに分けて保存し、外部ファイルに変更があればそれを内部ファイルに反映するという少し面倒な事をしているので…