2011-01-01から1年間の記事一覧

RubyとOS

Ruby使いとしてインフラまわりのお仕事をやっていると、RubyってOSに食い込んでないなーと思うことがよくある。 つまりPerlならPerlで書かれていて標準的にインストールされているスクリプトがいっぱいあるし、MySQLまわりでも腐るほどあるし、Unix!と言った…

、、、

YU-NOやるかー。

簡易EC2クライアント

ちょっとしたメタ情報を取るのにec2-api-toolsだと遅いし(JAVA_HOMEとかの設定も必要だし)、gemでライブラリをインストールするのもいやなので、rubyの標準ライブラリだけで簡易的なクライアントを作ってみた。*1 #!/usr/bin/env ruby require 'cgi' requi…

Murakumo - 分散型負荷分散での振り分けの平均化について

EC2

分散型内部DNSサーバ - Murakumo 0.3.8をひっそりとリリースしました。 画期的だと思うんですが、話題のわの字にも上りません。悲しいなぁ… 分散型負荷分散での振り分けの平均化について Murakumo 0.3.8では振り分けの新しいアルゴリズムとして、fix_by_src…

srandのデフォルトのシード

さらっと読むかぎり、/dev/urandomと時刻とpidと変数seedのアドレスをシードにいている模様。 S_ISCHRで何を判別しているんだろう? static VALUE random_seed() { static int n = 0; struct timeval tv; int fd; struct stat statbuf; int seed_len; BDIGIT…

重み付きランダム選択アルゴリズムを考えてみる

200回ぐらい回せば大体、Weightに従って分布してくる…と思う。 def wrr(addr_weights, n) addrs = [] ary = [] addr_weights.each do |a, w| w.times { ary << a } end ary = ary.sort_by{ rand } loop do addrs << ary.shift addrs.uniq! if addrs.size >= …

クックパッドの勉強会でMurakumoの話をしました

ゴシッププロトコルによる冗長化と負荷分散の検証 View more presentations from winebarrel 謝辞 懇親会で話しかけてくださった方々ありがとうございます。全力で懇親会を避けていた自分としては、あの手の懇親会での立ち位置が未だによくわかりません。マ…

2.6.18-xenU-ec2-v1.5でnscdを動かす

EC2

2.6.18-xenU-ec2-v1.5でnscdを起動しようとすると、以下のエラーが発生。 shell> nscd -d 2011年11月24日 21時52分03秒 - 3629: Failed to drop capabilities nscd: cap_set_proc failed「modprobe capability」で直るようだが、うまく動作しない。 以下のフ…

Murakumo

https://bitbucket.org/winebarrel/murakumo/大体できてきた。あとはパフォーマンスのチェックとか、細かい動作確認。

TCPSocket.newのDNSラウンドロビンの調査

mysqlへの接続時にホスト名に紐付くIPアドレスが帰ってきたらどうなるのかと思って少し調査中。 libcのレベルでは複数のgetaddrinfoが複数のIPアドレスをそのまま返している。 http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/getaddrinfo.3.html Ru…

mysql/client.cのDNSラウンドロビンの調査

MySQL/Rubyの方は、libmysqlclientに依存するだろうから、client.cを読む。 hp = my_gethostbyname_r(host,&tmp_hostent,buff2,sizeof(buff2), &tmp_errno); /* Don't attempt to connect to non IPv4 addresses as the client could end up sending informa…

Rubyのrand

Mersenne Twisterを使っていたはずだけど、きちんとしたドキュメントを見つけられなかったので、一応、ソースコードを確認。 /* * call-seq: * rand(max=0) => number * * Converts <i>max</i> to an integer using max1 = * max<code>.to_i.abs</code>. If the result is zero, …

逆ポーランド記法的配列を出力する計算機

class Calcp prechigh nonassoc UMINUS left '*' '/' left '+' '-' preclow options no_result_var rule target: exp | { result = [] } exp: exp '+' exp { val[0] + val[2] + ['+'] } | exp '-' exp { val[0] + val[2] + ['-'] } | exp '*' exp { val[0] +…

逆ポーランド記法配列出力計算機: 演算子を関数に変えてパース後に計算する

class Calcp prechigh nonassoc UMINUS left '*' '/' left '+' '-' preclow options no_result_var rule target: exp | { result = [] } exp: exp '+' exp { val[0] + val[2] + [lambda {|a, b| a + b }] } | exp '-' exp { val[0] + val[2] + [lambda {|a, …

Amazon SimpleDBのクライアント

#!/usr/bin/env ruby require 'cgi' require 'base64' require 'net/https' require 'openssl' class SDBClient API_VERSION = '2009-04-15' SIGNATURE_VERSION = 2 def initialize(accessKeyId, secretAccessKey, endpoint = 'sdb.amazonaws.com', algorith…

順列をすべて舐める

以下のように複数の集合があった場合に sets = [ [1,2,3,4], [5,6,7], [8,9], ] すべての順列を舐める関数を定義してみる。 def permutation(stack, ary = [], &block) list = stack.shift list.each do |i| if stack.empty? block.call(ary + [i]) else per…

bracecomp 0.1.0

https://rubygems.org/gems/bracecomp https://bitbucket.org/winebarrel/bracecomp まいどまいどのこまいライブラリのリリースです。 これは何? bashとかのブレース展開をするライブラリです。 サンプルをみればやりたいことは分かると思います。 require …

こわ…

夜の会社で一人でし仕事してるときに、奉神御詠歌を流すと洒落にならないことがよくわかった。 巫秘抄歌も破壊力あるな…

インスタンスタイプごとの帯域を調べてみた

EC2

注意 window sizeによって左右されるようです。 コメントをいただきました。 https://twitter.com/#!/ar1/status/107798786344108032 Iperfを使って同じタイプのインスタンス間の帯域を調べてみた。 結果 (資料) 所感 帯域が気になるならm1.large以上を使っ…

link:Mapreduce Bash Script

http://blog.last.fm/2009/04/06/mapreduce-bash-script なにこれ、おもしろい。

ec2-api-toolsのspecファイル

EC2

Summary: Amazon EC2 API Tools Name: ec2-api-tools Version: 1.4.3.0 Release: 1 License: Amazon Software License Group: Development/Tools Source: ec2-api-tools.zip BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildArch: noarch %…

ec2-ami-toolsのspecファイル

EC2

Summary: Amazon EC2 AMI Tools Name: ec2-ami-tools Version: 1.3 Release: 66634 License: Amazon Software License Group: Development/Tools Source: ec2-ami-tools.zip BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildArch: noarch %…

ASRでaws-sdk-for-rubyを使う

インストール jsonのmswin32ビルドをインスコ https://bitbucket.org/winebarrel/ruby-json-win32/downloads gem install aws-sdk パッチ 以下のパッチをあてる。 https://github.com/amazonwebservices/aws-sdk-for-ruby/pull/4 サンプルコード #!/usr/bin/…

elasticfox-ec2tag 0.2.8

https://bitbucket.org/winebarrel/elasticfox-ec2tag/downloads リリースしました。 しかし、今後はFirefoxのメジャーバージョンアップにあわせてちまちまリリースする必要があるのな?

象牙の塔の住民は嫌いだ

象牙の塔の住民は嫌いだ。 痛みを感じようとしない奴らに憤りを感じる。

optopus 0.1.4

https://rubygems.org/gems/optopus https://bitbucket.org/winebarrel/optopus これは何? optparseのラッパーです。µ-optparseみたいなものです。µ-optparseとの違いは… オプションの説明をオプションの前の行に書ける(横にも書ける) ハッシュのキーと引…

主にEC2内部用のDNSサーバ - ddns

※後継のMurakumoを開発中です。 https://bitbucket.org/winebarrel/murakumo/ http://d.hatena.ne.jp/winebarrel/20111202/p1某勉強会でddnsのことを話したのですが、ほっとくと忘れ去られそうなので記事にまとめたいと思います。 https://bitbucket.org/win…

rgossip 0.1.0

rgossip 0.1.0をリリースしました。 https://rubygems.org/gems/rgossip https://bitbucket.org/winebarrel/rgossip これは何? Gossipプロトコルのライブラリです。Cassandraみたいに「サーバを起動したら勝手にクラスタに追加される」みたいなことが可能に…

制御文字をエスケープするスクリプト

MySQLでtsvにダンプしたりすると制御文字が \<制御文字>とエスケープされる。テキストファイルでは、なるべく1行を1レコードをして扱いたいので、Perlで制御文字をエスケープ文字に変換するスクリプトを書いてみた。 #!/usr/bin/env perl use strict; use …

文字列をステートメントとして評価する

mysql> SET @sql = CONCAT('SELECT ', DATE_FORMAT(NOW(), '\'>\'')); Query OK, 0 rows affected (0.00 sec)mysql> SELECT @sql; + @sql + SELECT '>' + 1 row in set (0.00 sec)mysql> PREPARE stmt FROM @sql; Query OK, 0 rows affected (0.00 sec) Stat…