こんにちは、Cloudworksプログラマーのおぐらです。 本日、CloudworksのIAM管理機能で利用しているRubyライブラリをstratusという名前で公開しました。このライブラリによってAWSの権限管理機能であるIAMのAPIをRubyから操作できるようになり、 グループやユーザーの管理 グループ毎、ユーザー毎の利用可能なAPIなどの制限 ユーザー毎のアクセスキー管理 といったことを機械的に行えるようになります。 rubygems.org上にgemパッケージを登録してありますので、以下のようにgemコマンドでインストールできます。 $ gem install stratus stratusをインストールするとiamshコマンドもインストールされ、以下のように対話的にIAMの操作を行うことができます。 $ export AMAZON_ACCESS_KEY_ID=XXXXX $ e
UserStreamを受信するときに,毎回Net::HTTPがどうとか書いていて,めんどうだったので,UserStreamを受信するgemを作った. 1行ずつ受信したJSON(のテキスト)をくれるから,使いたいように使える. UserStreamReceiver.new.run{|chunk| p JSON.parse(chunk) } 内部的には,id:tilyさんのOAuth::CLI::Twitterを使ってAccessTokenを取得していて,最初に起動したときに,対話的にPINを入れるように言ってきたりする. 既存のtwitterクライアントから使いたい場合とかは,コンストラクタにAccessTokenを指定して使うこともできる. bin/以下に2つコマンドが入ってる. user-stream-receiver 受信したJSONを表示する. user-stream-receive
https://github.com/winebarrel/fdpass 元旦リリースできた。 これは何? プロセス間でファイルディスクリプタを転送するためのライブラリです。 ユースケースは少ないと思いますが、いろいろとがんばればMySQLのコネクションをプロセス間で共有する、とかできると思います(あくまでがんばれば、ですが) インストール gem install fdpass サンプルコード server.rb require 'fdpass' begin fdpass = FDPass.server('/tmp/fdpass.sock') t = Thread.fork { loop do fd = fdpass.recv io = IO.open(fd) io.puts('%s: %s' % [fd, __FILE__]) end } t.join ensure fdpass.clo
Webアプリケーションを作るとき、HTMLを生成するテンプレートエンジンをよく使いますが、これはパラメータに応じて様々なコードを生成する自動生成ツールであると言えます。 mplexは、プログラムを生成するためのテンプレートエンジンです。 実は MessagePack-RPC for C++ の実装に使っています。似たような関数をたくさんオーバーロードするために活用しています。(そろそろ可変長templateを使いたいですねぇ) 昔はeRubyを使っていたのですが、HTML用のテンプレートエンジンはソースコードがあまりに読みにくくなるので自作しました。 mplexを使うと、普通のプログラムの中にRubyのコードを埋め込むことができます: // クラスを4つ生成 %4.times do |i| class Test[%i%] { public: %if i % 2 == 0 int even;
4/6 追記 ツイッターから流れてくるかたのために補足しておくと、↓の方法は負荷が高すぎて、あまり実用的ではなかったです。某社では使ってないっす。規模にもよりますがゾーンファイルを更新するようにした方がいいとおもいます。たぶん backendスクリプトがこんな感じ。要amazon-ec2。 #!/usr/local/bin/ruby require "rubygems" require "AWS" require "syslog" $ec2 = AWS::EC2::Base.new( :access_key_id => "XXXXX", :secret_access_key => "YYYYY", :server => "ec2.ap-southeast-1.amazonaws.com" ) def lookup(hostname) ip_list = [] $ec2.describe_i
この記事は Functional Ikamusume Advent Calendar jp 2010 によって侵略されたでゲソ。 今回は Ruby を侵略したでゲソ。まずは gem をインストールするでゲソ。 $ gem install ikamusume Hello, world でゲソ。 # coding: utf-8 # ruby examples/hello.ikamusume で実行するでゲソ # 未だに 1.8 を使ってる愚かなる人類は -Ku を付ければいいんじゃなイカ? require "ikamusume" "Hello, world!\n" <= イカ娘! "H" <= "e" <= "l" <= "l" <= "o" <= "," <= " " <= "w" <= "o" <= "r" <= "l" <= "d" <= "!" <= "\n" <= イカ娘! $ ru
さてすでに書きましたが最近 API づいております。できるだけ RESTful な API を作りたいなぁと思っているわけですが、そこで問題になったのがテスト環境。 まず、ブラウザは使いものになりません。 通常の方法では GET, POST 以外のリクエストを投げられない通常の方法では html, xml, plain text な response body 以外は表示できないからです。 まぁ今回テストしたかったのは read only な API なのでリクエストメソッドとしては GET, POST だけでも問題はないのですが、response が application/json だったので 毎回毎回「ダウンロードダイアログが出る -> ダウンロード -> ファイルを開く」 作業が必要になり、さすがにこれはやっとれんと思いました。 そこでまず目をつけたのは以前インストールだけしてあっ
Rubyでwavファイルのフォーマットを読んだり、データチャンクを編集するためのgemを作った。 ベースは以前作ったやつで、ついでにwavファイル操作のサンプルをたくさん追加してrubygems.orgに登録しておいた。 あくまでサーバーで音を合成して返すようなwebサービスで使う事を想定している物で、マイクからの入力をリアルタイムに音声処理するための物ではない。 ■インストール gem install wav-file ■使う フォーマットとデータチャンクを読む require 'rubygems' require 'wav-file' f = open("input.wav") format = WavFile::readFormat(f) dataChunk = WavFile::readDataChunk(f) f.close puts format するとこんな感じにフォーマット
Log4rの使い方が分からずに苦労したのでメモしておく。 log4rのインストール インストールはgemで簡単にできる。 gem install log4r 使い方 require 'rubygems' require 'log4r' require 'log4r/configurator' logfile="./test.log" progname="log4r-test" formatter = Log4r::PatternFormatter.new( :pattern => "%d %C[%l]: %M", :date_format => "%Y/%m/%d %H:%M:%S" ) logger = Log4r::Logger.new(progname) outputter = Log4r::FileOutputter.new( "file", :filename => logfil
普通の、関数(またはメソッド)を主体とした言語では、関数呼びだし(など)のたびに、 ローカル変数や戻る場所など関数一つの実行のために必要な情報を構造体に格納し、 それをスタックに積む。関数から戻るとスタックの先頭の構造体が pop されて実行が 前のメソッドに戻る。 ruby の実行もやはりメソッドの連鎖に他ならないから、やはり同様の実行イメージを 持っている。ただし以上のような単純なイメージはあくまで「概要は」そうであるという 話であって、実際にはもっと複雑なことになっている。それというのも Ruby には イテレータのように実行の経路自体をスクリプトから変化させる機能があるため、 単純なスタックの push/pop だけでは実装できないからだ。そのためスタックに 積む構造体もひとつでなく機能ごとに分割されており、実行中に複雑に積みかえられる。 具体的にはその構造体は struct FR
The document provides performance best practices for Ruby on Rails applications. It discusses avoiding premature optimization, measuring performance bottlenecks, caching, SQL optimizations, and alternative storage options like NoSQL. It also recommends profiling tools like New Relic, Scout, Rack::Bug and ruby-prof to analyze logs and identify slow requests and actions. Benchmarking and integrating
超絶技巧 Ruby プログラミングの質疑で「どうやって音を鳴らしているのか」という質問があったので、自分のための記録を兼ねて簡単に紹介。 といっても Linux Sound programming with OSS API にある通り。Ruby で書くとこんな感じ。 # デフォルトでは 8bit 8000 Hz SampleSize = 256 SamplingRate = 8000 # ... 0:ラ 1:ラ# 2:シ 3:ド 4:ド# 5:レ 6:レ# 7:ミ 8:ファ 9:ファ# 10:ソ 11:ソ# 12:ラ ... tone = 3 # ボリューム: 0 〜 SampleSize/2 まで volume = 60 # 再生する長さ: 秒 length = 2 # 周波数: 基準のラは 440Hz 、1 オクターブ上がると倍になる freq = 440 * 2**(tone / 1
今月末の RubyKaigi 2010 で、「超絶技巧 Ruby プログラミング」という発表をする予定です。2 日目の 13:30-14:00 、大ホールでの発表です。 主にこのブログで紹介しているコードたちを紹介する予定です。その背景の意外な深遠さや、それを可能にする Ruby の素晴らしさも語れたらいいなあと思っています。 発表言語は日本語なのでスライドくらいは英語に、と思って、去年の暮れに書いた 山手 quine の英語版を作りました。 z=27;eval$s=%w!c,s=["H+{K}8k->dXNpv-cD~@?(zhAi~>JOv<-;A(]oH+MFKs*+KOB825i$%QX9~P=HC{iIlj*Sh# v=3U62LhUXhtnCx^{F=nuTtGG}@85_(xVvIWQ|Vllp[Gt22x&`^K3*ui;IW@O9-(`Z6V_T.E]%WHXYGa{O9
By Ilya Grigorik on June 13, 2009 Benchmarking, profiling and debugging are all areas where better tool support could really benefit the Ruby community. Built in benchmark library and extensions such as ruby-prof provide us with a minimal level of introspection to help identify the common bottlenecks, but they still fall short of the available tools for the JVM, or other dynamic runtimes. If you'r
同じようなサーバーの設定していると、さすがに面倒くさくなってくる。 というわけでRPMパッケージにしてしまおう。 パッケージ化の方法に関しては情報がたくさんあったのでさくっとできた。多謝。 <textarea class="html" cols="60" rows="5" name="code"> wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p174.tar.bz2 tar xfj ruby-1.8.7-p174.tar.bz2 cd ruby-1.8.7-p174 ./configure --prefix=/usr make </textarea>
標記のとおり、死ぬみたいです。 http://github.com/rails/rails/commit/b0b9bf320409b66c6c6b680371aca590297cd4cc crankharder I’m curious to know what the rational is behind this? rohit You can now use tap. 正論過ぎて返す言葉もありませんね。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 require "rubygems" require "active_support" a1 = returning [] do |ary| ary << 'hoge' ary << 'fuga' end a2 = [].tap do |ary| ary << 'hoge' ary << 'fuga' end
Taking into consideration the huge amount of feedback we received during the Bundler 0.9 series, we streamlined Bundler 1.0 significantly, and made it fit user expectations better. Whether you have used bundler before or not, the easiest way to get up to speed is to read the following notes and go to http://gembundler.com/v1.0 for more in-depth information. (note that gembundler.com is still being
High off Baltimore Pandemic and Yellow Tops, I believe we promised a release candidate shortly after RailsConf. As things usually go in open source, we gorged ourselves on fixes and improvements instead. But all to your benefit. We’ve had 842 commits by 125 authors since the release of the last beta! Now it’s time to just say good is good enough, otherwise we could keep on with this forever. So pl
Sinatra: 29 Links and Resources For A Quicker, Easier Way to Build Webapps Sinatra, a Ruby "micro framework" for developing Web applications, is hot stuff! Despite being over a year since we first mentioned Sinatra (as used on a 100 line blogging app called Reprise), only now does Sinatra seem to have reached critical mass - it's on the cusp of becoming really popular. This is a good time, then, t
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く