ruby

Ruby 2.4 で CGI.unescape が高速化されていた

久しぶりに ruby をいじる機会があったので、備忘的に。 URL encode された文字列を decode したいのだけど、Ruby 2.1 の URI.decode だと遅すぎる! というのをなんとか解決できないかと調べていました。 ベンチマークコード 似たようなことをやってくれる…

Project Euler - Problem 10

もろもろの合間にちょっとした体操。http://projecteuler.net/problem=10 200万までの素数の合計を求める。 単に素数リストを求めて合計すればいいだけ。組み込みクラス使ってもいいけど、自前で実装する。 #!/usr/bin/env ruby class Prime def list(max) #…

メソッドの呼び出し方

PHPでは、static宣言なしでもメソッドのstatic呼び出しができてしまう。 で、どっちが速いの?という話。 メモリの使用量も比べてみたかったけど、速さのみ。

マージソート

基本に立ち戻って、マージソートをやってみた。 Ruby, C, Scala, Gaucheの4種類。 最初にRubyで書いて、他に移植という流れ。 ScalaとGaucheはほぼ同じ。普通に再帰で書いたけど、Scalaは末尾再帰に最適化されてるそうな。 Cだけは配列をガンガン作ろうとす…

複数のRubyを切り替えられるようにする

Ruby1.9をメインで使いつつ、1.8系も準備しておきたかったので併存させられる環境を作ってみた。 OS: Ubuntu 9.04 Server Edition Rubyのソースを用意する Subversionで落としてくる。当然trunk。安定とか知りません。 $ svn co http://svn.ruby-lang.org/re…

Mitaka.rb に行ってきた

4/15 に吉祥寺で開かれた、Mitaka.rb設立総会に行ってきました。 一次会 会場がヴィレッジバンガードダイナーだったこともあり、外国ビールが飲み放題!!Poken共同購入の受け渡しをしてもらったのもあり、Poken充してました。はいふぉーはいふぉー。 その後…

ifもcaseも使わずに条件分岐

再び、λ楽しいよラムダの時間がやってまいりました。 true=λx.λy.x false=λx.λy.yそうすると、変数bがtrueかfalseをとるとしてb(0)(1)とすると、bがtrueのとき0、falseのとき1を返します。λで条件分岐ができた! 2009-04-09 - きしだのはてな というわけで、…

リテラルの %(percent) 記法

よく忘れる上にググりにくいのでメモっておく。 文字列や正規表現、リテラルを簡潔に記述できる。 %(hoge #{foo} bar) # => "hoge Foo bar" %Q(hoge #{foo} bar) # => "hoge Foo bar" %q(hoge #{foo} bar) # => "hoge \#{foo} bar" %x(echo hoge #{foo} bar)…

define_method ってなんぞや

railsのプラグインを覗いてたら、eval系メソッドがもっさり出てきてわけのわからないことになったので、色々復習。まずはdefine_method。 インスタンスメソッド name を定義します。ブロックを与えた場合、定義したメソッドの実行時にブロックがレシーバクラ…

Struct

Rubyにもstruct があるということを教えてもらったので、早速使ってみる。 Struct って? いわゆる構造体。語弊はあるけれど、メソッドの無いクラスのようなものと理解している。 Rubyの場合、Struct.new でstruct型のサブクラスを作り、それをさらにnewする…

Passenger をアップデート

Redmine を svn up してアップデートしてみたが、 504 エラーが出た。 なにかと思ったら、先日Passengerのバージョンが上がったのを放置していたせいらしい。Passenger をアップデートすると、apache module を再インストールする必要がある。 $ sudo passen…

Project Euler - Problem 2

1分間でなんてとても解けません。 Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...Find the sum of all the even-…

Project Euler - Problem 3

素因数分解 - Wikipedia The prime factors of 13195 are 5, 7, 13 and 29.What is the largest prime factor of the number 600851475143 ? Ruby には便利なライブラリがありますね。 singleton method Integer.prime_division #!/usr/bin/env ruby require…

ついでにカリー化

カリー化 - Wikipedia 複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること。 クロージャよりもさっぱりだよ!! サンプル 書いてみたはいいけどいまいち良さが…

Ruby でクロージャ

クロージャってブロックとしてよく使っているが、何者なのかよくわかってなかった。 急に気になったので調べてみた。ただし Wikipedia。 クロージャ - Wikipedia 典型的には、クロージャはある関数全体が他の関数(以下、エンクロージャ)の内部で宣言された…

Ruby で Singleton

Ruby で Singleton を実装してみる。 モジュールなし 生成したオブジェクトをクラス変数へ保存しておく。 #!/usr/bin/env ruby class Singleton @@instance = nil; def initialize puts "MyInitialize" end def self.instance @@instance = new if @@instanc…

public なメソッドを private でオーバーライドした場合

Java だと確か、アクセス制限を弱める方向でオーバーライドできた覚えがある。 PHP と Ruby で同じことを試す機会があったのでメモ。 PHP の場合 Error になる。public なメソッドは public でないといけないらしい。 Java と似た方式。

Rubygemsがhomeディレクトリに入ってしまう

現象 gem list で表示されるのに、gem uninstall してもエラーになってしまう。例えばgrowlnotifierを抜こうとする。 $ sudo gem uninstall growlnotifier [~] ERROR: While executing gem ... (Gem::InstallError) Unknown gem growlnotifier >= 0 原因 イ…

Capistrano のメイン開発者が燃え尽きたっぽい

お疲れ様でした。 ゆっくり休養して、また新しいアイデアを形にして欲しいですね。 But I’m burning out, and I have to drop these before things get worse. the { buckblogs :here }: Net::SSH, Capistrano, and Saying Goodbye ってよく見たら Capistran…

Rubyの誕生日

昨日、2月24日が Ruby の誕生日だったようです。 Rubyは1993年2月24日に生まれました。その日同僚とオブジェクト指向 言語の可能性について話していました。 FAQ::一般的な質問 - Rubyリファレンスマニュアル 1993年2月24日は「Rubyの誕生日」ということにな…

Twitter4rのエラーを追って見る

普段、twitter には twitter4r を使った投稿用のスクリプトで投げている。仕事中にぼやきたい時などにターミナルから直接投げれるのでちょっと便利*1。 そんなわけでタイムラインはあまり見ていない。投稿時に10行だけ表示されるようにしているので、チラっ…

CSVを読み込む&新規CSVファイルに書き込む

RubyでCSVファイルを読み込んで、新規のCSVファイルに書き込む。 FasterCSVというgemを使った方が速いらしいが、あえてスルー。 新規CSVファイルに書き込む CSVファイルを読み込んで、一部を置換したものを新規CSVとして保存する。 File.openはファイルオブ…

改行コードLFをCR+LFに変換する

Macでテキストファイルを保存すると、改行コードがLFで保存される。 ただ、Windowsに渡さなければ行けない時にちょっと面倒。 dos2unix というコマンドもあるらしいが、あえてRubyで変換してみる。 正規表現でいけるかと思ったが、なんかうまくいかないので …

Ruby1.9.1がリリースされた

2009/01/31, Ruby1.9の歴史が始まったようです。 1.9系統初の安定版、Ruby 1.9.1がリリースされたそうな。 http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/45836 Ruby 1.9はRubyの新しい系統です。近代的に、高速に、文法も明確に、多言語化 …

Daemon動作時のファイル出力と標準出力

プログラムをdaemonで動作させた時のログ出力ができない。 プログラムのカレントにある'test.log'というファイルに書き込むとすると・・・サンプルコード def daemon &bl exit!(0) if fork Process.setsid exit!(0) if fork Dir::chdir("/") File.umask(0) S…

Titanium 触ってみた

というわけで、チュートリアルやってみた。 http://titaniumapp.com/documentation/starting-your-first-titanium-project Appcelerator Titanium ってなによ? Appcelerator Titanium is an open source platform for building rich desktop applications u…

調べもの

調べたら追記していく。 11/29 追記終了。 Process.fork == fork 組み込み関数 - Rubyリファレンスマニュアル子プロセスを作る。 parent = Process.pid fork { puts Process.pid # >> 587 } child = Process.wait puts "Parent: #{parent}, Child: #{child}"…

Daemonにするとcallbackが効かない

あるプログラムをDaemon化して常時動かしたいのだが、callbackを受け付けなくなってしまう。 $ ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9] 1.8.6までは正常に動いてたと思ったのになあ・・・ WEBrick::Daemonでも、Process.forkもダメ。…

RSpecのチュートリアルをやってみる

スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)とりあえずやってみた。日本語にはしていない。 インストール 記述を無視して最新版(1.1.4)を突っ込む。 今の本家サイトは下記のところっぽい。 http://rspec.info/ downloadを見る…

MacOS XデフォルトのRubyとMacPortsで入れたRubyどちらが有効になる?

MacPortsフォルダへの環境変数の通し方で決まる。 $PATHの中で先に書いてある方を見に行くようだ。 MacPorts優先 .bash_profile export PATH=/opt/local/bin:/opt/local/sbin/:$PATH 上記の書き方だと、MacPortsで入れたものが優先される。 /opt/local/bin …