monthly gimite

試験運用中。

ruby

Yuyake - ブラウザ上でRubyでWebアプリ開発

色々未完成なのですが、放置気味だったのでとりあえず現状を公開することにしました。Yuyakeブラウザ上でRubyでWebアプリを開発してそのまま実行できる、というものです。フレームワークはSinatraのみをサポートしてます。利用にはGoogleアカウント*1が必要…

Fiberを使ってem-http-requestとかを同期的に呼び出す

EventMachineの関数(em-http-requestとか)を多用すると、コールバックだらけになって訳が分からなくなるのが欠点です。Ruby 1.9のFiberを使うと、em-http-requestみたいな非同期関数を同期的に呼ぶことができます。em-synchronyというライブラリがそのような…

jruby-jars-*.gem のビルド方法

jruby-jars-*.gem をビルドする方法のメモ。 $ git clone git://jruby.org/jruby.git jruby $ cd jruby $ ant $ ./bin/jruby bin/gem install rake rspec $ ant gem $ ls dist jruby-complete-1.6.1.jar jruby-jars-1.6.1.gem jruby-complete-1.6.1.jar.md5 …

HpricotからNokogiriに移行するときの罠(特にXML名前空間)

HpricotからNokogiriに移行しようとしていくつか罠にはまったのでメモしておきます。基本的には require "hpricot" → require "nokogiri" Hpricot(html) → Nokogiri::HTML(html) Hpricot::XML(xml) → Nokogiri::XML(xml) と書き換えるだけで、運が良ければそ…

Google SpreadsheetのRubyライブラリ

を作ったので公開しました。Google Spreadsheet Rubyインストール方法: $ sudo gem install google-spreadsheet-ruby使用例: require "rubygems" require "google_spreadsheet" # ログイン。 session = GoogleSpreadsheet.login("username@gmail.com", "mypa…

HotRubyがC Rubyより速い本当の理由は?

JavaScriptが速くて、Rubyが遅い理由というエントリがあったのですが、コメントやトラックバック、追記などを読むと 実用上HotRubyがC Rubyより速いというわけではまったくない プリミティブ型の有無が原因という話はどうやら間違い のようです。とはいえ「↓…

HotRuby (Ruby VM on JavaScript) をいろいろいじってRPCとか実装してみた

HotRubyというJavaScript上で実装されたRuby VMを発見して、 これを使えばWebアプリのサーバ側もクライアント側もRubyで書く、とかできるのか つまりGoogle Web ToolkitのRuby版 そのためにはまずRPCかな ということでDRb風のRPCを実装してみました。その過…

Railsで undefined method `<=' for :db:Symbol (NoMethodError)

手元のアプリのRailsのバージョンを1系から2.0.2にあげたら undefined method `<=' for :db:Symbol (NoMethodError) from /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/quoting.rb:61:in `quoted_…

open-uriにできないこと

open-uriはとても便利なのですが、BASIC認証とかPOSTとかができないので、そういうときだけはめんどくさになぁと思いながらnet/httpを使ってたのですが、WWW::Mechanizeを使うのが楽だということを最近知りました。BASIC認証、ダイジェスト認証: require "ru…

Cygwinでmswin32版のRuby拡張ライブラリをコンパイルする方法

まずmingw版Rubyバイナリをダウンロードして、てきとうな場所に解凍します。ちょっとバージョンが古いですが、まあ問題ないでしょう。ここでは c:\ruby-mingw32\ bin\ruby.exe doc\ :という感じで置いたとします。次に、Cygwinのシェルを起動し、コンパイル…

Ruby 1.9.1のm17nについてメモ

2009/2/8追記: 今はもう↓の公式ドキュメントやid:macksさんのドキュメントなどいろんな情報が出ているので、このメモの存在意義は微妙ですが、一応1.9.1に合わせて修正しておきました。 多言語化 class String class IO この辺のドキュメントが見つからず(…

Ruby新リファレンスマニュアル + 索引検索

Rubyのリファレンスマニュアルの新しいやつができていたので、それをクラス名とかメソッド名で簡単に検索できるものを作りました。Rubyリファレンスマニュアル + 索引検索新しいマニュアルはBitClustというツールを使ってプログラムからも簡単にアクセスでき…

gem install railsで404 Not Found

# gem install -r rails ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError) OpenURI::HTTPError: 404 Not Found reading http://gems.rubyforge.org/gems/actionmailer-2.0.1.gemとか言われる。 # sudo gem update --systemしてみたらちゃん…

tx-ruby

Trieというデータ構造を構築するTxというライブラリがあるんですが、これのRuby bindingを作ってみました。tx-rubyTrieははてなキーワードの付与みたいに、大量の単語をいっぺんに検索する場合に便利なデータ構造です。Txはインデックスがコンパクトになるの…

コマンドライン引数っぽいもののトークン分割

hoge "foo \"bar\" boke" mogeみたいなのをどうやってトークン分割すればいいかみたいな話になったので、Rubyでテキトーに書いてみました。 s.split(/([^ "]+|"(?:[^\\"]|\\.)*")/). enum_cons(2).map(){ |a| a[1] }

多言語対応の文字コード判別ライブラリ chardet

RubyForge : Universal Encoding Detector多言語対応の文字コード判別ライブラリ。Mozillaの文字コード判別ライブラリをRubyに移植したものらしいです。インストール: $ gem install chardet使い方: require "rubygems" require "UniversalDetector" require…

RubyでJISの半角カナを文字コード変換すると文字化ける

Rubyで半角カナ入りのテキストを、(NKFとかKconvで)JIS(ISO-2022-JP)からほかの文字コードに変換すると、文字化ける場合があったので、調べてみました。まずISO-2022-JPで半角カナを表す正式な方法はないようです。非公式な方法として ESC ( Jを使って8…

Rubyで文字のUnicode pointの取得とかその逆とか

NKFでUTF-16に変換してunpackして〜とかやってもできるんですが、めんどくさいのでUnicodeライブラリを使ってみました。 "ほ".to_u[0] #=> U+307B HIRAGANA LETTER HO "ほ".to_u[0].to_i #=> 12411 0x307b.uchr.to_s #=> "ほ" $KCODE=="EUC"だとちゃんとEUC…

配列などからHashを作る

配列を作るならmapが使える場面で、Hashだといちいち result= {} for v in [1, 2, 3, 4, 5] result[v]= 2*v end とか書くのが面倒だったので、僕は module Enumerable def map_to_hash(h= {}, &block) for a in self (k, v)= block ? yield(a) : a h[k]= v e…

Pythonでブロック付きメソッド呼び出し

PythonでRubyのブロック付きメソッド呼び出しみたいなのをやる方法メモ。Ruby: def foo() yield(1) yield(2) yield(3) end foo() do |i| puts(i) end Python: def foo(): yield(1) yield(2) yield(3) for i in foo(): print i Rubyの方はputs(i)の部分がオブ…

printfは$KCODEの影響を受ける

ハマったのでメモ。printfで$KCODEと一致しないマルチバイト文字列を出力しようとすると文字化けます(この場合だと最後の1バイトが消えるみたい)。 require "kconv" s= "日本語".toeuc() $KCODE= "e" puts(s) #=> 日本語 printf("%s\n", s) #=> 日本語 $KC…

REXML→scrapiでやたらと速くなった

secondlifeさんの記事を読んで、とあるWebページから情報を抽出する*1ためにREXMLでごにょごにょしてたやつをscrapiで書き直してみました。ソースも簡潔になったんですが、なんかむちゃくちゃ速くなりました。具体的には、1MB程度のHTMLファイルを解析するの…

Rubyのリリース問題

なんかRubyのリリースのことで盛り上がってるのをぼーっと読んでたんですけど、 政治的パフォーマンスとか社会的信用とかいうほどに、Rubyのリリース予定日って周知されてましたっけ。 僕はruby-devにそういう話が流れてるのしか見なかった気が…。 それともR…

ActiveRecord::StatementInvalid

RailsでActiveRecord::StatementInvalidとかいうエラーが出たので何かと思ったら、テーブル名を間違って単数形にしてただけでした。分かりにくいエラーだな…。*1 *1:SQLでエラーになると全部これになるのかな。

Ruby/CaboChaのインストール

まずCaboCha本体。*1 $ tar xvzf cabocha-0.53.tar.gz $ cd cabocha-0.53 $ make # make installそしてRubyのライブラリ(SWIGをインストールしておく必要あり)。 $ cd swig $ make ruby $ cd ../ruby $ ruby extconf.rb --with-opt-include=/usr/local/inc…

夏休みの宿題 -- ポーランド記法

夏休みの宿題 - ポーランド記法 - Rubyist Magazine 15号jumius氏のにインスパイアされて正規表現だけで頑張ってみました。 a= "- + 1 / 2 2 + 3 * 4 5" 0 while a.sub!(/([^ \w]) (\d\S*) (\d\S*)/, '\2_\3_\1') p a.gsub(/_/, " ") # ==> "1 2 2 / + 3 4 5…

Enumerable#shuffle

なんでrubyには - 'hceT'.sub(/\Z/,'bus').reverse Enumerable#shuffle - 満足せる豚。眠たげなポチ。 確かにあると便利ですよねぇ。僕も勝手に定義して使ってます。うちのはこんな感じです。 module Enumerable def shuffle() return self.to_a().dup().shu…

RubyKaigi2006 2日目

というわけでちょろっとロイディの発表をしてきました。スライドはこちら。5分間ということで、紹介程度の軽い話ですが。DHHさんの発表が面白かったです。内容の細かいところは他の誰かに譲るとして、大雑把に言うと アクションはできるだけCRUDにしよう。 …

RubyKaigi2006

に、行ってきました。これから明日の発表のスライドの修正とかしないといけないので、今日の内容についてはこちらを参照ってことで省略。学会なんかと違って、すごくフランクな雰囲気で面白いです。

Perl Monger の質問 - AUTOLOADって他でどうやるの?

各言語での未定義メソッドの呼び出し&メソッド動的定義。ふむふむ。ちょうどこの前「method_missingってPerlでどうやるんだろ?」と思って調べたところでした。メソッド名自動生成&メソッド動的定義(Ruby)の「オブジェクトごとにメソッドを定義する」の…