ruby

おわっ、いつの間にauto-complete-ruby.elが!

http://www.cx4a.org/blog/2009/01/autocomplete-ruby.htmlauto-complete.el + rcodetools で動的なRubyのメソッド名補完をやるやつ。 なるほど、オムニ補完は特定の文字の後でのみ実行されるのか。空気読んでくれている。 毎回Rubyスクリプトを実行している…

rubyforge(RTask)でリリースしたらauto-config.ymlが乱れる

rtask -rでリリースしたら~/.rubyforge/auto-config.ymlが乱れてしまう。 --- release_ids: w3m-autopagerize: 1.0.0: 30959 !ruby/object:Gem::Version ? version: 1.0.1 : 30961 文法違反らしい。 /pkgs/ruby18/lib/ruby/1.8/yaml.rb:133:in `load': synta…

gitで対話的に本家リポジトリ所有者にメールを送るスクリプト

git cloneしておれおれパッチを書いた後に、本家のリポジトリへメールするのにいちいち「「git-format-patch origin」してから「git-send-email --smtp-server ほにゃらら --from めーる --to 相手のメール 0*.patch」して「rm 0*.patch」するのが面倒だ。da…

Ruby 1.9.1リリース!

[ruby-list:45836] [ANN] Ruby 1.9.1リリースRuby 1.9.1キターーーーーー(゜∀゜)ーーーーーー!!各種ライブラリの対応がまだまだだと思うけど、もう…安定版なのね。

rubyforgeでのリリースがうまくいかない→解決

Ruby 1.8だと「require 'rubygems'」が糞重いのでgem作成とか正直興味なかった。おまけに「ruby -rubygems -rGEMNAME」と指定できない糞仕様*1。インストールが手軽というメリットよりも俺的にはデメリットの方が上回っていた。 Ruby 1.9だとデフォルトでgem…

Ruby 1.9のSymbolがStringっぽい理由

Ruby 1.9に移行する際に注意すべき10のポイント - なんとなく日記 ==== Symbol が String のようにSymbol が String のようになる.正規表現や upcase/swapcase,その size を得ることができ る.この目的が何なのかわからない.完全に String のようになる…

Nokogiri::HTMLはGoogle検索結果をパースできない→解決策あり

Nokogiriは実在するぶっ壊れたHTMLでもパースできるらしい。 Nokogiri.parseはヒューリスティックにHTMLかXMLかを判断して、合ったパーサを使うようになっている。でもHTMLだとわかっている場合はNokogiri::HTML.parseと明示したほうがよい。nokogiri.rbより…

特定の単語を含むリンクをどうやって得るか

w3m-autopagerizeでは、サイトが登録されていない場合はOperaのfast forwardのように「次」が含まれているリンクをたどるようにしてある。 しかし、ここで問題発生。 # -*- coding: utf-8 -*- require 'nokogiri' html = <<EOH <html><body> <a href="next1.html">次</a> <a href="next2.html">次へ</a> <a href="next3.html"><b>次</b></a> </body></html> EOH nokogiri = Nokog…

RubyでWebにアクセスするhttpclientがアップデート、Ruby 1.9対応

Rubyでwebにアクセスするならhttpclientが手軽 - http://rubikitch.com/に移転しましたhttpclientは大好きなライブラリなので、Ruby 1.9対応は素直に嬉しい。しかもファイルアップロードのコードもすっきり記述できるようになった。 nahi++

うーん、Nokogiriが落ちるよぉ><

特定のURLで特定のXPathを食わせるとNokogiriが落ちる。そのせいでw3m-autopagerizeのサーバごと落ちてしまうから困る。 当面は落ちても再起動させるようなシェルスクリプトを被せておくか。 require 'nokogiri' require 'open-uri' require 'kconv' url = "…

Enumerator#with_indexの落とし穴

[ruby-list:45744] 無限ループの回数の取得にてKernel#loopによる無限ループでループの回数を知りたいという質問があった。で、俺はイテレータをwith_index化する魔法のメソッドであるEnumerator#with_indexを使えばいいじゃんと思って試してみたらエラー。…

Emacsのorg-modeでGTDを始めてみた

今更ながらGTDを始めてみた。頭の中がもやもやしてしまってストレスがたまっていたからだ。きっかけはorg-modeとの出会い…っていうか本腰入れて使ってみようと思ったから。そこでGTDが話題になっていた。GTDは収集→処理→整理→レビュー→実行のプロセスを経る…

Emacsで連番を挿入する方法

連番テキストを生成する機会というのはけっこうあると思う。Emacsにおいて連番を入力する方法を考える。シェルコマンドを使う方法は他のエディタにも応用できる。ここでは3つの連番だが、多くなっても対応できる方法を挙げる。 (1)〜(3)を入力する (1) (2) (…

tenki.jpからピンポイント天気予報、週間予報、アメダス実況を抜き出すRubyスクリプト

http://tenki.jp/ から天気予報の情報を抜き出したい。ブラウザで見るとヘッダがうざいし、天気予報とアメダス実況は別ページなので開くのが面倒だ。そこで加工してひとつのHTMLでまとめてしまおうとするのがrubyistというもの。Hpricotでさくっと料理してし…

Array#permutationがなぜEnumeratorを返すのか・Rubyのメソッド呼び出しはコストがでかい

Send + More = Money - Ruby初心者prinyの学習帳 - Rubyistもっと金くれや問題 - http://rubikitch.com/に移転しましたで俺と同じような解答があった。Array#permutationはEnumeratorを返す。というのは、配列で返していたら、すべての順列をメモリに記憶し…

もっと金くれや問題

send more money - krystal: プログラミング超初心者(文系) - Rubyistsend + more = money を満たすそれぞれ異なる 0 以上 9以下の数 s, e, n, d, m, o, r, y を求めよ。(ただし s, m は 0 でない)いかにも中学入試に出そうな問題。Ruby 1.8.7以降ではArra…

Object#tapを制御構造で実現する方法

ensureのreturning的な使い方 - Hello, world! - s21g→Ruby on RailsのreturningはObject#tapである。Ruby 1.8.7以降で使えるObject#tapに萌えるのはtapかわいいよtap - http://rubikitch.com/に移転しましたを参照してくれ。これってbegin〜ensureで記述で…

漢数字→数値変換メソッド

P230 - "七千百二十三"といった、漢数字による数の表現を「7123」のような数値に変換するメソッドkan2numを定義してみよう - krystal: プログラミング超初心者(文系) - Rubyistとりあえず1〜9999対応。 # -*- coding: euc-jp -*- KANNUM_1_9 = { ''=>1, '一'…

バグ取りはエラーメッセージをきっちり読むことからでは?

バグ取りで遠回りしないためのヒント | 日経 xTECH(クロステック) array1 = (1..100).to_a array2 = array1.select(|i| i%7 == 0) # !> useless use of == in void context # ~> -:2: syntax error, unexpected '|', expecting ')' # ~> array2 = array1.s…

gem updateがエラーになる件

sudo gem updateを実行していて、アップデート中に特定のgemでエラーになったら例外終了してしまって他のgemがアップデートできないのなんとかしてくれんかね。 gem help updateしても手がかりが得られなかった。困った。

Ruby 1.8でminiunitをインストールするとactivesupport 2.2.2がロードできない

Ruby on Railsの最新版が出たのでとりあえずActiveSupportを使ってみようと思ったのだが、うーん、ロードできぬ。 $ rugem -ractive_support -e '' /pkgs/ruby18/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:445:in `lo…

Roxy: Rubyでプロキシオブジェクト

http://ryandaigle.com/articles/2008/11/10/implement-ruby-proxy-objects-with-roxy本家では「両親が離婚しているか」をモデリングしている。 離婚しているか?は両親のpropertyだから、person.parents_divorced?ではなくて person.parents.divorced? と書…

Rubyで複雑なハッシュを見やすくするのは書き方の問題かな?

http://blog.s21g.com/articles/1026 { "com_tantosya" => { "users" => { "tantosya_cd" => "id", "tantosya_name" => "login", "tantosya_official_name" => "name", "password" => "crypted_password", "tantosya_addr3" => "salt" }, "teams_users" => {…

0〜1000に含まれる0をカウントする

練習 - krystal: プログラミング超初心者(文系) - Rubyistざっと思い付いたのはこんなの。Ruby 1.8.7以降。 「&:to_s」は Symbol#to_proc で {|i| i.to_s } というブロックを渡したのと同じ。 String#succで文字列で表現された数字を加算できる。 Array.new(…

Lux IO Ruby bindingをインストールしてみた

Lux IO - Yet Another Fast Database Managerにある luxio-0.1.0.tar.gz を取ってきてインストール。 http://d.hatena.ne.jp/kajidai/20081108/1226110366にあるRuby bindingをインストール。 require 'luxio' luxio = LuxIOBtree.new luxio.open '/tmp/test…

Hash#keyがRuby 1.8でも使えるようになった

Rubyでハッシュの逆検索を行うHash#keyはRuby 1.9から使えるようになり、それに伴い現行のHash#indexはdeprecatedになる。移行措置もないのにいきなりdeprecatedにするのはあんまりだ。Ruby 1.8.7がRuby 1.9への移行措置だと考えたらRuby 1.8.7にHash#keyを…

Ruby 1.8.7での新メソッド更新(Array#choice→Array#sample)

Ruby 1.8.7で使えるようになったRuby 1.9のメソッドたち - http://rubikitch.com/に移転しましたいつのまにかArray#choiceはArray#sampleに改名されていた。Array#choiceは互換性のため1.8.7では残っているが、Ruby 1.9ではなくなっている。 require 'rubyge…

正規表現のoオプションにRubyの暗黒面を見た

正規表現のoオプションにPerlの暗黒面を見た - はこべにっき ♨実はRubyでも同じことが起こる。直訳してみた。 def match(pattern, text) # 繰り返しの中で使うのでoオプションをつけよう! return text =~ /^#{pattern}$/o; end # すべてマッチする for $tex…

GNU/Linuxでの文書作成環境

Sakai Hiroaki's Home Pages/FreeBSD/GNU\/Linux/g; s/Perl/Ruby/g; s/make/rake/g; s/html/rd/ig; したのが俺の環境。 RDで書いていれば、RDtoolで簡単にHTML化できるので便利。わざわざ生HTMLをいじらなくてもよい。さらにeRubyがpreprocessorになる。

ブロックパラメータにおける配列と多値の違い

RUBY_VERSION # => "1.8.7" [:a,:b].each_with_index {|x| # !> multiple values for a block parameter (2 for 1) x # => [:a, 0], [:b, 1] } def y1() yield 1, 2 end y1 do |x| # !> multiple values for a block parameter (2 for 1) x # => [1, 2] end …