みなさんはコードジェネレータを使った事があるでしょうか。私はあります。 SQLにHTML, JavaScript, はてはPHPまで、Rubyでコードジェネレータを使う機会は増すばかりです。 さて、Rubyでコードジェネレーションと言えばERbを使うことが多いですが、それで充分なのでしょうか。 他の選択肢はどうでしょうか。 今日は、wlangというコードジェネレータを紹介します。 template engine? 次のサンプルコードを見てください。 とてもシンプルなHTMLテンプレートエンジンのように見えます。 require 'wlang' puts WLang::instantiate(<<EOS, {:name => "O'Reilly & Animals", :animals => %w(Koala Rhino Giraffe)}, "wlang/xhtml") <h1>${nam
近頃は @fusuian としてもっぱら Twitter しておりますです。 先日 @etoさんと @_tad_ さんとで Tsukuba.rb を立ち上げ、今日は第2回の集まりでした。 筑波大春日キャンパスのラーニングコモンズをお借りして、大学2年で初めてさわったプログラム言語がRubyという、Rubyネイティブの若い人たちとお話ししていたところ。 「どこも間違っていないのにエラーが出て3日間悩んだが、原因は全角スペースだった」という話題が。 しかし @eto さんはRubyでは全角スペースが識別子として使えることを指摘。 いろいろ試して、コマンドラインで-Kオプションを指定すると確かに使える。 ならば、どこまで全角スペースを使ってプログラム可能か? やってみました。 コピペしてghost.rbにセーブしてください。 コマンドラインから「ruby -Ku ghost.rb」で動きます。(
某所のチャットで話題になって、流れ去りそうだったのでもったいないから転載しておいた。事後承諾で。 MIYAMOTO Daisuke: 型の継承と実装の継承を区別する方法がないんだよな。 西尾泰和(nishio.hirokazu): 型を継承させずに実装を継承させたい→それ移譲で ってことかな? MIYAMOTO Daisuke: そそ。そもそも、クラスに「型としての役割」と「実装としての役割」という複数の責務があることに、俺は長い間気づかなかった。これに気づかないと、型継承と実装継承が頭の中で整理できない。 西尾泰和(nishio.hirokazu): 僕が最近気づいたことも加えると、クラスには「ユーザ定義型」「インスタンスを作成する道具」「実装の再利用の単位」という3つの役割がある。 MIYAMOTO Daisuke: あぁ、インスタンスの生成器ね。 西尾泰和(nishio.hiroka
※2011/11/08 コメント欄で指摘を頂いた箇所を加筆修正しました。また、割と古い記事ですので最新の情報は Fabrication を参照することをお奨めします。 これを作ってるとき、machinistとmachinist_mongoを使っていたんですが、試しに前々から気になっていたFabricationで書き換えてみました。README書いてあることをいくつか実際にやってみたのでメモしておきます。割と使いやすかったです。 何に使えるの 下記をサポートしてるそうですので、Mongoid使えます。やった! Plain old Ruby objects ActiveRecord objects Mongoid Documents 使ったもの Fabrication…本日のメイン Faker…嘘データをどんどこ作ってくれるやつ QuickStart & 使い方 Gemfile Rails/M
Railsで、ActiveRecordがSQLのログを吐いてくれるんですが、これだとどのクエリがどこから呼ばれたのか分からなくて、デバッグがしにくい。 Schedule Load (0.023687) SELECT * FROM schedules WHERE (schedules.id = 3) LIMIT 1 Resource Load (0.001076) SELECT * FROM resources WHERE (resources.id = 328) LIMIT 1 Schedule Load (0.011488) SELECT * FROM schedules WHERE (schedules.id = 3) LIMIT 1 Resource Load (0.022471) SELECT * FROM resources WHERE (resources.id = 328)
ライブラリのインターフェイスが変なときにGeneratorを使ってましにできることがある. MeCabのRubyバインディングのインターフェイスがださくて,使いにくかった. 分かち書きして,名詞だけ表示するようなとき,普通に書くとこうなる. c = MeCab::Tagger.new("-O wakati") node = c.parseToNode(text) while node do puts node.surface if node.feature =~ /^名詞/ node = node.next end whileとか,node = node.nextとかが,Rubyっぽくない. Generatorに入れて1個ずつ返すようにすると,Enumlatorを使えるようになって,だいぶましになる. c = MeCab::Tagger.new("-O wakati") node = c.
はじめに Rubyと出会ったころ、その簡潔さに感動した著者は、「ここまで自然言語に近い形でプログラムが書けるのであれば、インターネットとPCの違いすら理解しない妻でも、少しはプログラミングができるようになるかもしれない」と、家庭での普及に挑戦したことがあります。 その試みは、渡した入門書を「はじめてのRUBAI」と読まれた時点で頓挫したわけですが、その経験から「Rubyの文法に従ってはいるが、何やら他言語の匂いを感じるコード」のことを、Rubyの潜在力を生かしきれていないという意味で「RUBAIコード」と呼ぶことにしました。 そして、社内のさまざまな分野のプログラマにRuby開発を指導してみて分かったのは、"RUBAIコード"には、実装レベルの間違いと、設計レベルの間違いがあるということです。 実装レベルの間違いとは、処理を他言語の習慣に従って記述することで引き起こされます。Javaプログ
1時間でツイッターサービスを作ろう! | KRAY Inc 試してみました。 github公開ソースを見てみると twitter_auth.yaml oauth_consumer_key: <%= ENV['OAUTH_CONSUMER_KEY'] %> oauth_consumer_secret: <%= ENV['OAUTH_CONSUMER_SECRET'] %> となっていました。 おお、これは使えそうだなと思って、 同じようにして、config/initializers 下に gitignore 対象の環境変数読み込みファイル 作ってやってみましたが、うまくいきません。 #config/initializers/env.rb ENV['OAUTH_CONSUMER_KEY'] = "hogehoge" ENV['OAUTH_CONSUMER_SECRET'] = "fugafua
メモ。 deviseはRails3で便利な認証ライブラリですが、viewは $rails generate devise:views を実行すればapp/views/devise以下に展開されるので自由に変更できるものの、modelやcontrollerのロジックはライブラリ内にあるのであまりいじれません。というのが前提。 で、ユーザに登録時には登録ありがとうメールを飛ばしたりとか、何かしらメソッドを実行したいことがあります。deviseでも、modelのクラスそのものはアプリ側で定義できるので、標準ではたとえばafter_createに実行したいメソッドを指定しておけば、modelの生成時点=登録時点で実行されるようです。便利。 ところが、deviseにはconfirmableというオプションをつけられます。これは、いったん確認メールを送り、それに書かれているURLを踏むと登録が完了する
komagataです。 先週ぐらいのコミットでpadrino-helpersが入った代わりにr18nが無くなったので多言語化のやり方がちょっと変わって、周辺プラグイン・テーマにも影響があると思うので
目を二重にしただけで合コンでお持ち帰られ率100%w カテゴリ☆☆☆ 1:以下、名無しにかわりましてVIPがお送りします:2010/07/09(金) 01:30:51.77 ID:CRnie5bE0 一気にモテ始めたんだけどw 高校まで処女で彼氏いない歴だったんだけど 大学で二重にプチして一気に声かけられるようになったw 今年入ってからの合コンでは 100%持ち帰りされちゃうんだけどw 3:以下、名無しにかわりましてVIPがお送りします:2010/07/09(金) 01:31:38.55 ID:uHYDxB4S0 おめでとう 7:以下、名無しにかわりましてVIPがお送りします:2010/07/09(金) 01:32:36.66 ID:+eWUQ3ju0 五重にしたら芸能界入れるかもよ 9:以下、名無しにかわりましてVIPがお送りします:2010/07/09(金) 01:33:31.61
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く