ruby

Macbook Air で refe が使えるようにする

少し迷ったけど、結局のところは以下を参考にしてターミナルから refe を叩けるようになった。 http://d.hatena.ne.jp/ruedap/20110426/vim_ref_plugin_ruby_reference_search_tool_refe2 ディレクトリ構成などもあまり悩まず上記と同じにしておいた。 Windo…

.aco から色のデータを HTML カラーコードにして抽出する

extract_colorcodes_from_aco.rb binary_file = 'test.aco' color_num = 0 colorcodes = [] open(binary_file, 'rb') {|f| f.getc; f.getc # 0001 を読み飛ばす color_num = 256 * f.getc + f.getc # 色数 p color_num until f.eof? colorcode = "" f.getc; …

バイナリファイルの内容表示する

display_binary_file.rb binary_file = 'test.aco' decimal_mode = false #decimal_mode = true item_num = 0 open(binary_file, 'rb') {|f| until f.eof? if decimal_mode print "%5d" % (f.getc * 256 + f.getc) else print "%02x%02x" % [f.getc, f.getc]…

Ruby で画像収集

Rubyで画像収集ソフト的な物を作ってみた - チラシ裏日記上等!!を見て 面白そうだなぁと思い僕なりに少し書き換えてみた。 以下のスクリプトはまだ書きかけというか挙動があやしいのだけど とりあえず貼り付けておく。 最後の画像保存するところ (save_ima…

Ruby には Perl の Plagger のようなお手本はないの?

その中でも直近の大規模なオープンソースプロダクトである Plagger はまさに Perl Hacker の教科書とも言えるべき存在だ。 http://d.hatena.ne.jp/tokuhirom/20080719/1216423454 ということで、Perl では「Plagger」が お手本となるソースとしてお勧めされ…

::Object を使った定数のややこしい参照方法

「初めてのRuby」の「8章 オブジェクトとクラス」の p.153 に 「トップレベル」という項目がある。 ここにちょっとややこしい定数の参照方法がのっていた。 今、以下のような Duration クラスがあったとして class Duration DAYS_OF_WEEK = 7 end このクラス…

ゆの in Ruby を読む

ゆの in Ruby - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtechは パッと見て全然よく分からなかったのであきらめて投げていたのだけど 他のバージョンとかも色々出てきて読めていないのが段々くやしくなってきた。 そこで、気合を入…

配列を生成するときに要素を別々のオブジェクトにする

Array.new(size, val) で配列を生成すると a = Array.new(3, 'hoge') a.each {|v| p v.object_id } # >> 21625090 # >> 21625090 # >> 21625090 要素は全て同じオブジェクトになる。 これだと、どれかの要素を破壊的に変更したときに全ての要素に影響が出て…

ruby-mode の flymake の設定をした

JavaScript 書くときは使いまくりんぐな flymake だったけど Ruby では使っていなかったので使えるようにした。 flymake でリアルタイム文法チェック - とりあえず暇だったし何となく始めたブログを参考に 以下を .emacs に追加した。 ;; flymake for ruby (…

ミリ秒まで含んだ時刻文字列

YYYY年mm月dd日HH時MM分SS.xxx秒なら、「YYYYmmddHHMMSS.xxx」のようにミリ秒まで含んだ文字列を返すプログラムを書いてください。 エロと風俗情報満載 どう抜く? というお題に対して以下のスクリプトが投稿されていた。 ただし、自分好みになるように少し…

コード中の文字の頻度分析

プログラムコード中の文字の頻度は言語によって相当にばらつきがあると思います。ある言語はピリオドが頻出するとか、別の言語はカッコの頻出頻度が高い、とか。そこで、 * 文字の頻度解析をするプログラムを作成し、 * 適当なプログラムに対して実行し、結…

Array#replace って何が便利なの?

Array#replace は a = [1, 2, 3] a.replace [4, 5, 6] とかって使うらしいんだけど これって a = [1, 2, 3] a = [4, 5, 6] ってやっても結果は同じだと思うんだよね。 ベンチマーク取ってみても require 'benchmark' num = 100000 Benchmark.bmbm(10) do |x|…

{ } と do end の違い

Benchmark を使うときに require 'benchmark' puts Benchmark::CAPTION puts Benchmark.measure { a = [1, 2, 3] a.replace [4, 5, 6] } このように { } を使うのは OK なのに { } を do end に変えると require 'benchmark' puts Benchmark::CAPTION puts B…

Web の画像をファイルに保存する方法

require 'net/http' require 'uri' def save_file(url) filename = File.basename(url) open(filename, 'wb') do |file| file.puts Net::HTTP.get_response(URI.parse(url)).body end end url = 'http://d.hatena.ne.jp/images/diary/g/gan2/gan2_p.gif' sav…

StarRuby で作ったライフゲーム

とりあえず CodeRepos にコミットした。 ブラウザからアクセスする場合はここからどうぞ。 Subversion がある場合は以下のコマンドでソースを持ってこれます。 svn co http://svn.coderepos.org/share/lang/ruby/StarLife 簡単な説明として README の内容を…

rcodetools の導入

xmpfilter が便利らしいのでぐぐってみたら、rcodetools に含まれていることが分かった。 rcodetools。見覚えはあるけど何なのかはよく分かってない。 とりあえず gem で入るみたいなので入れてみる。 gem install rcodetoolsrcodetools には Emacs 用のイン…

1.8.6 で 1.8.7 な inject を使う

Ruby 1.8.7のinjectはSymbolを引数に取ることができる。つまり、合計は「inject{|s,x| s+x}」から「inject(:+)」でよくなった。 1+2+3+4 # => 10 (1..4).inject(:+) # => 10 1*2*3*4 # => 24 (1..4).inject(:*) # => 24 今はinjectよりもtapだよね〜 - http:…

総当たり戦の日程作成

任意の偶数Nのチームの総当たり戦を最短日数(N-1日)で 行う場合の日程表を1つ作成してください。 解はひとつではない場合もあります。 もし、余力があれば、全ての可能性も求めてください。 これは、スポーツスケジューリングと言う分野の問題で、 数学的…

あみだくじ

次のような書式で与えられた「あみだくじ」があります。 (あみだくじはコード中に埋め込んでも、標準入力や 外部ファイルから読み込んでも、書きやすい方法でかまいません) A B C D E | | |-| | |-| | |-| | |-| |-| |-| |-| | |-| | | | このあみだくじをた…

ある日からある日までの Range を週ごとの Range に分ける

日付のRangeを週に切り出すスクリプト - はこべにっき#を僕なりに書いてみた。 こんな感じでいいのかな? gen-weeks.rb 2008/04/01 から 2008/04/21 までの Range を週ごとに分ける require 'date' def gen_weeks(range) weeks = [] week = [] range.each do…

Twitter のアーカイブを取得するツールをリファクタしてみた

Twitterのアーカイブを取得するツール作りました。No Use API版 - Seasons.NETのスクリプトを OptionParser や scrapi の勉強がてらにリファクタしてみた。 リファクタといっても僕なりに読みやすいように書き換えただけなので そんなの全然リファクタリング…

eshell で標準出力に出力されるタイミングが遅い問題について

Ruby の場合なら以下のように puts などを再定義しておくことで とりあえずは解決されるように思える。 alias :_puts :puts def puts(*args) _puts *args $stdout.flush end 追記 バッファリングの問題のようだから、再定義しなくても「$stdout.sync = true…

RSpec の spec.opts って毎回用意しなきゃいけないのかな?

spec.opts はいつも以下のような内容のを使っているので これをデフォルトの設定にしちゃいたい。 -c --drb -fs毎回 spec/spec.opts をコピーして作るのはちょっとめんどくさい。

RSpec を autotest で使う

あんまりまとまってないけど書く。 むしろまとめるために書く。 重要なのはアウトプットすることで 「分かったところまででいいからとにかく書いた方がいいよ」 ってえらい人が言ってた。 できていること 「./hoge.rb」と「./spec/hoge-spec.rb」がある状態…

require と load の違い

Rubyスクリプティングテクニック ―テスト駆動による日常業務処理術にのってたのを適当にメモ。 require はファイル名の終わりに .rb を付ける必要がない。load は付ける必要がある。 require はロードしたファイルを記憶し、一度しかロードを行わない。load …

配列の頭に * をつけると…?

何が起こるのでしょう。 この超簡単なスクリプトで比較してみる。 a = [0, 1, 2] p a p *a 実行結果はこう。 ん?なんだこれ?何が起きたんだ? [0, 1, 2] 0 1 2

each ってこんな使い方もできたんだ…知らなかった

[ [1, 11, 111], [2, 22, 222], [3, 33, 333], ].each{|a, b, c| puts "#{a} #{b} #{c}"} これを実行すると 1 11 111 2 22 222 3 33 333こうなる。 基本ですか? そうかもしれません…(´・ω・`) ちなみに今までの僕だったらこうしていたと思う。 [ [1, 11, 1…

M-x align-regexp を知る

「M-x align」や「M-x align-current」は知ってたけど、「regexp」は今日はじめて知った。 「M-x align-regexp」を実行するとミニバッファに Align regexp: というプロンプトが出るので、そこで「=」や「#」を入力すると、それを基準にして align してくれる…

忍者ツールから今日のアクセス数を取得する

WWW::Mechanize を使ったスクリプト書いてみた。 でも管理ページへのログインでこける(´・ω・`) 何がいけないんだろうなぁ…。 get-todays-traffic.rb #!/usr/local/bin/ruby -Ks # はてダから忍者ツールの今日のアクセス数を見に行くツール require 'rubyge…

Hpricot の練習でプロキシの取得

ProxyForest - プロキシの杜から Rank が A で 2ch の書き込みに使えそうなプロクシを取ってくるスクリプトを書いてみた。 get-proxy.rb require 'open-uri' require 'hpricot' def get_proxy ips = [] ranks = [] codes = [] (0..10).each do |n| open("htt…