ruby
http://subtech.g.hatena.ne.jp/secondlife/20080709/1215530958のFluent InterfaceはRubyCocoaの呼びだしで使えたらうれしいかもと思った。今はobjc_sendをつかって、 NSTimer.objc_send(:scheduledTimerWithTimeInterval, 120,- :target, self, :selector,…
http://d.hatena.ne.jp/rubikitch/20080710/1215641240メソッドの引数にHashをとるのはいっぱいあるときでもきれいに書けるので個人的にはあまり嫌いではない。classXを使うとHashのチェックが柔軟にできるよというおはなし。 require 'classx/validate' cla…
http://d.hatena.ne.jp/walf443/20080524/1211650071前の記事でコンストラクタに渡せるHashのキーと値を宣言的に書くことで見通しが良くなると書きましたが、コンストラクタに限らず、メソッドにオプションとして渡すHashもきっちりチェックしたいはず。とい…
classXで、Mooseをなぞるのをやめてアクセサの宣言のデフォルトの設定を変更しました。 :writableオプションを指定しない限りは、アクセサはwriterをpublicにしないようになりました。これは、単にreaderを定義する時は、オプションを明示的に定義する必要は…
http://d.hatena.ne.jp/walf443/20080524/1211650071前の記事でコンストラクタに渡せるHashのキーと値を宣言的に書くことで見通しが良くなると書きましたが、コンストラクタに限らず、メソッドにオプションとして渡すHashもきっちりチェックしたいはず。とい…
GitHubPostRecieverでGitHub以外からのpostは受け付けたくなかったのでRackでIPのアクセス制限ができるRack::Auth::IPというミドルウェアを作ってみました。rackupのファイルの中で、 require 'rack/auth/ip' # ローカルネットワークにアクセスを制限する us…
http://d.hatena.ne.jp/walf443/20080520/1211239672で触れた宣言的なアクセサをGitHubPostRecieverに試しに適用してみた + has :host, :is => :ro, :kind_of => String, :required => true + has :port, :is => :ro, :kind_of => Integer, :default => 6667…
GitHubでは、プロジェクトのコミットをfollowして興味のあるプロジェクトのコミットのみをまとめてみれるのですが、毎日それらを全部見るのはなかなか大変だったりします。興味のあるプロジェクトの場合、割とfreenodeにIRCのチャンネルがあって、そこにjoin…
最近perl界隈で話題のMooseをちょくちょく弄ってみたりしているのですが、宣言的なアクセサは見通しも良くなるし、なかなか良いなと思ったんでRubyでもそれっぽく動作するやつを書いてみました。Mooseっぽくコンストラクタも勝手に用意するようにしてみたの…
DSLみたいなものを作ろうとしてると、どうしてもブロックを俺俺文法で解釈させたくなって調べてみた。ParseTreeというライブラリを使うとRubyのコードをS式に変換することが出来る。 S式に変換できるのは、モジュール単位、モジュールのメソッド単位、文字列…
先日言っていた機能はまだ足してはないのですが、一通り個人的に使いたい機能を動くようにして、テストも充実させたのでgemにしました。 gem install rspec-fixtureでインストールできます。http://coderepos.org/share/changeset/6563で、単純なテストがい…
RSpecでテストを書いていて単純なテストなんだけど、いろいろなデータで検証させたいといった場合に毎度毎度exampleを書くのがめんどくさいと思い、こんな感じでTest::Baseっぽく使えるやつを作ってみた。 describe Point, "detect_location" do with_fixtur…
この前、誕生日を迎えたのですが、自分が何歳になったのかいまいち思い出せなくて、rubyで計算させようとしたのですが、時刻の差から年を出すのはそれほど簡単ではなかったので、ライブラリにしました。なにやらruby-listでもちょうどその話題があがっていた…
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/43494を見て。aとかbとかという変数名が例に載ってるのは初心者には優しくないと思った。 %w(foooo barr baz).sort {|one, anothor| one.size <=> anothor.size } #=> ["baz", "barr", "foooo"…
TwitterのAPIでRailsのActive Resouceを試してみる http://blog.tkmr.org/tatsuya/show/318-twitter-api-rails-active-resouceの影響を受けてActiveResourceを使ってみた。上の記事と合わせて思ったことをつらつらと書きます。多くの場合書くクラスの設定は…
Rubyレシピブックのレシピ8.1をみて--debugオプションをRubyインタプリタの起動時につけると$DEBUGがtrueになるというのを知って、Kernel#dpとかKernle#dppとかKernel#dyとかが標準であれば良いのにと思った。こんな感じ。 module Kernel def dp *args p(*ar…
タイトル的にはレシピ本と同じようにもっとライトな感じの本かと思ったら案外そうではなくて非常に内容の濃い本だった。特に内容が今までに出版されている本とはほとんど被ってなくてこれは買いの本だと思った。内容的にはRHGを除いては現在出ている日本語の…
読んだ。なかなか熱い本だった。Rubyより、というよりはJavaをほとんど知らない自分にとっては自分のRubyに対して感じているRubyの良さが率直に書いてあって読んでいて気持ちよかった。例えば、Javaの現在の開発ではオープンソースの様々なツールやフレーム…
あまりコマンドラインを処理するプログラムを書かない…というよりはオプションが色々あるような立派なコマンドラインアプリを今まであまり書いてなかったのでOptionParserの使い方に苦労したのでまとめておく。柔軟で慣れると楽だけど,暗黙的なところを理解…
Webが重かったので店頭に逝ったらすんなりチケットとれた。家の近くにローソンがあってよかった…。
久々にRubyを書いていてハマった。 date = "2007/04/13 12:00:00 +9:00" #=> "2007/04/13 12:00:00 +9:00" %r{#{date}}.match date #=> nil %r{#{Regexp.escape(date)}}.match date #=> #<MatchData:0x10844bc> %r{#{date}} #=> /2007\/04\/13 12:00:00 +9:00/ どうやらスラッシュ</matchdata:0x10844bc>…
本格的にRSpecを使う場合,Test::Unitのssert_~みたいなメソッドを追加したくなることもあるでしょう。そういった際にどういったところを読めばよいかの手がかりのようなものを示したいと思います。*1まず,テスト自体の実行の流れの追い方。lib/context/run…
http://wiki.fdiary.net/rails/?RailsMeetingTokyo-0016時間をおくと先月のように書かなくなってしまいそうなのでとりあえず書く。今回はやや人が少なめだった。 RSpecについて RSpecを使うとTest/Unitを使うことよりどんなことがうれしいかということの再確…
Rackのソースを漁っていて見つけた。最初に定数を参照した際にロードするようにできるらしい。ファイル名とクラス名は一致させるのであればGem名.rbですべてのクラスをロードするようにすればいらないような気もしますが。*1autoloadをConvensionでラップす…
http://rack.rubyforge.org/まだ触ってないですが,これは良さそう。
Webサーバーはサブドメインを勝手に割り当ててあるだけでサイトを自由におけるわけじゃないし、今レンタルしてるサーバーもないのでここに書いた。rubyforgeコマンドの使い方が分からない。
PathObserver helps you writing program observing for some files or directories easily. SYNOPSYS # observing '*.txt' files require 'rubygems' require 'path_observer' observe_manager = PathObserver::ObserveManager.new('*.txt') do |path, resu…
定義はできるけど,Object#__send__使わないと配列のリテラルと判断されて実行できないようです。 def [](val) "hello world" end #=> nil [1] #=> [1] [](1) SyntaxError: compile error (irb):11: parse error, unexpected '(', expecting $ [](1) ^ from …
http://d.hatena.ne.jp/walf443/20070302/1172849934 の続き分かった。Pathnameを使えばもっと幅の広い監視ができそう。おまけに名前も困らない。(とおもったら一文字足りない。pathname-observer) Pathname#entriesを使って新しいファイルが追加されたらと…
http://d.hatena.ne.jp/walf443/20070301/1172762706 の続き。ファイルを監視するスクリプトを手軽に書きたいときに良いかなと思ってGem化しようと思ってRubyForgeに登録しようと思ったけど,既にほとんど同じようなやつがあった。Gem化されてないのが残念。…