Ruby
てきとうに重そうな再帰処理を用意 $ cat fib.rb #!/usr/bin/env ruby # -*- coding: utf-8 -*- def fib(n) return n if n < 2 fib(n - 1) + fib(n - 2) end puts 'fib(10) = %s' % fib(10) puts 'fib(20) = %s' % fib(20) puts 'fib(30) = %s' % fib(30) pu…
redmineのリポジトリでphpファイルを表示するとソースコード内の日本語が文字化けしていたので、調べてみるとcoderayの問題との記事がいくつか見つかった。そんで、coderayのほうを調べにいってみると、どうやらv1.0.9で修正されたらしい。 https://github.c…
x要素がシンボルの配列(空白区切り)欲しい, ○Ruby2.0.0で%i()使おう! | 實松アウトプット上記エントリーを読んでみて、「要素がシンボルの配列」が得られる%記法はないことを知った。 %w(foo bar baz).map &:to_sym #=> [:foo, :bar, :baz] 現状だと上のよう…
昨日くらいに timecopというライブラリをRuby1.8系で使った場合に起こる問題を修正してPull Requestを送ったところ、程なくして取り込んでくれた。まだRuby1.8系を使っている人がどのくらいいるか分からないけど、timecop-0.5.4に対応が入ったらしい。 https…
http://el.jibun.atmarkit.co.jp/rails/2012/11/ruby-20-8256.htmlRuby2.0 のRefinementsなる機能を試す。 "クラス拡張の影響範囲を名前空間に限定する" とか。test_refinements.rb #!/usr/bin/env ruby # coding:utf-8 module Hoge module Refinements refi…
Ruby2.0のプレビュー版がでたとのことで、新機能のlazyを試してみる。 #!/usr/bin/env ruby # coding:utf-8 exit unless RUBY_VERSION >= '2.0.0' require "benchmark" require "prime" a = b = nil Benchmark.bm(10) do |x| x.report("not lazy:") { a = (1…
2つの配列から重複を省いたり、重複を得たり 割とよく使うのにすぐ忘れるからメモ。ruby RUBY_VERSION #=> "1.9.3" a = [1,2,3,4,5,6,7,8,9,10] b = [1,3,5,7,9,11] a - b #=> [2, 4, 6, 8, 10] a & b #=> [1, 3, 5, 7, 9] python import sys print(sys.vers…
クラスを示す文字列からインスタンスを得る方法 検索したら普通に出てきた。 http://bugs.ruby-lang.org/issues/767 def my_const_get(name) name.split(/::/).inject(Object){|o,c| o.const_get(c) } end module Hoge class Foo end end my_const_get('Hoge…
http://d.hatena.ne.jp/UNKK/20110801/p1 こちらの記事の追記を読んでみて、なるほど自分が前回書いた例だと全てのクラスを汚染してしまう。その点を踏まえて色々やっていたら、以下のようになった。 とはいっても、元記事のeigenclassメソッドをラムダに差…
こちらの記事のクラスマクロについて考えてみた。 http://d.hatena.ne.jp/UNKK/20110801/p1 #!/usr/bin/env ruby # -*- coding: utf-8 -*- class Module def my_macro(arg) self.class.instance_eval do define_method("Gorira" + arg.to_s) do "Gorira" + a…
こちらの記事の Rubyで配列から重複している値を抽出するのを考えてみた。 http://d.hatena.ne.jp/kiyo560808/20110801/1312196444 a = [1, 2, 3, 4, 5, 6, 5, 4] a.uniq.reject{|i| a.index(i) == a.rindex(i)} #=> [4, 5] もしくは a = [1, 2, 3, 4, 5, 6,…
何気なくRVMをアップデートしようと思ったのだが、以下のエラーが発生した。 今、途方に暮れている中。 $ rvm get latest Original installed RVM version: rvm 1.5.2 by Wayne E. Seguin (wayneeseguin@gmail.com) [http://rvm.beginrescueend.com/] rvm-<html> %</html>…
久しぶりにRVMをアップデートしようと思って、「rvm update」を実行してみたらエラーが出た。 $ rvm version rvm 1.2.8 by Wayne E. Seguin (wayneeseguin@gmail.com) [http://rvm.beginrescueend.com/] $ rvm update ERROR: rvm update has been removed. S…
まず、環境はこんな感じ。 # cat /etc/redhat-release CentOS release 5.4 (Final) # rpm -aq | egrep '^sqlite' sqlite-3.3.6-5 sqlite-devel-3.3.6-5 # ruby -v ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux] # gem -v 1.3.7 gemでsqlite3-rubyの…
gemでインストールしたcurb(Rubyのcurlバインディング)のrdocを見ていたらCurl::Multiっていうクラスがあって、並列でURLリクエストできそうだったので試してみた。 ※2010/06/15現在、WEB上に置いてあるcurbのオンラインドキュメントは結構古いようで(CURB_…
簡単!たった13行のコードで HTML取得&解析をするPerlスクリプト 簡単!たった2行のコードで HTML取得&解析をするrubyスクリプトなんか流行ってる? ぼくもYahoo!Japanのトピックス一覧を取得するやつをRubyでやってみました。 使用ライブラリは標準添…
別にビンゴカードを作りたいわけじゃないけど、Ruby1.9のArray#sampleの使いどころを考えてたらビンゴカードが思い浮かんだのでやってみました。最初は単純に (1..75).to_a.sample(24) で良いのかなーと思ったんですけど、wikipediaを読んでみたら なお、通…
こちら(http://d.hatena.ne.jp/spider-man/20080802/p4)を参考に ./configure --program-suffix=1.9 としてruby1.9をインストールしてみました。 $ ruby -e'puts RUBY_VERSION' 1.8.6 $ ruby1.9 -e'puts RUBY_VERSION' 1.9.1 irb、gemもそれぞれ irb1.9、g…
http://d.hatena.ne.jp/s-n-k/20080630/1214836026 必ず偶数番目に数値がくるっていうのが目からウロコ Rubyでもやってみる。おお、確かに目からウロコ。 RUBY_VERSION #=> "1.8.6" DIGITS = /(\d+)/ pieces = '123a4bcd56e'.split(DIGITS) #=> ["", "123", …
どういう場合に嬉しいのか、Structを使いどころがよく分からない。 class StructPerson < Struct.new(:name, :age) end foo = StructPerson.new("taro", 20) #=> #<struct StructPerson name="taro", age=20> class ObjectPerson attr_accessor :name, :age def initialize(name, age) @name = name @a</struct>…
RubyでSSH経由でリモートのLinuxマシンを操作するとかいうので、net-sshを練習している。 いかんせんドキュメントが英語なもんで進みが悪い。 http://net-ssh.rubyforge.org/ require "rubygems" require "net/ssh" host = "example.com" port = 22 user = "…
会社のとあるマシンにインストールしてあるRailsを1.2.3から1.2.6にして動かしてみたら、ログの中に「この書き方はRails2.0では使えないよ。」みたいなWARNINGがいっぱい出てた。まあ、これ以上いじる予定の無いアプリだから放置することにした。