Ruby

2.1系もrubiniusに期待。

てきとうに重そうな再帰処理を用意 $ 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ファイルを表示したときの文字化け対応

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ライブラリにpull request

昨日くらいに timecopというライブラリをRuby1.8系で使った場合に起こる問題を修正してPull Requestを送ったところ、程なくして取り込んでくれた。まだRuby1.8系を使っている人がどのくらいいるか分からないけど、timecop-0.5.4に対応が入ったらしい。 https…

Ruby2.0のRefinementsを試す。

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を試してみる

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つの配列から重複を省いたり、重複を得たり

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で配列内の重複する値を抽出する方法

こちらの記事の 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をアップデートしようと思ったのだが、以下のエラーが発生した。 今、途方に暮れている中。 $ 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をアップデートしようと思って、「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…

sqlite3-ruby 1.3.0のインストールが失敗する。

まず、環境はこんな感じ。 # 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の…

curb(Rubyのcurlバインディング)で並列リクエストを試す

gemでインストールしたcurb(Rubyのcurlバインディング)のrdocを見ていたらCurl::Multiっていうクラスがあって、並列でURLリクエストできそうだったので試してみた。 ※2010/06/15現在、WEB上に置いてあるcurbのオンラインドキュメントは結構古いようで(CURB_…

HTML取得&解析をするRubyスクリプト

簡単!たった13行のコードで HTML取得&解析をするPerlスクリプト 簡単!たった2行のコードで HTML取得&解析をするrubyスクリプトなんか流行ってる? ぼくもYahoo!Japanのトピックス一覧を取得するやつをRubyでやってみました。 使用ライブラリは標準添…

Ruby1.9のArray#sampleを使ってビンゴカードを作る。

別にビンゴカードを作りたいわけじゃないけど、Ruby1.9のArray#sampleの使いどころを考えてたらビンゴカードが思い浮かんだのでやってみました。最初は単純に (1..75).to_a.sample(24) で良いのかなーと思ったんですけど、wikipediaを読んでみたら なお、通…

Ruby1.9をインストールしてみた。

こちら(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>…

net-sshの練習

RubyでSSH経由でリモートのLinuxマシンを操作するとかいうので、net-sshを練習している。 いかんせんドキュメントが英語なもんで進みが悪い。 http://net-ssh.rubyforge.org/ require "rubygems" require "net/ssh" host = "example.com" port = 22 user = "…

RailsのログのWARNING

会社のとあるマシンにインストールしてあるRailsを1.2.3から1.2.6にして動かしてみたら、ログの中に「この書き方はRails2.0では使えないよ。」みたいなWARNINGがいっぱい出てた。まあ、これ以上いじる予定の無いアプリだから放置することにした。