2010-09-01
■ [ruby] myruremaに「るりまを書くための機能」を追加しました
myrurema 0.1.0をリリースしました。
@kakutani の発表でみんなが自分のできることを探しているみたいなので、
るりまをやるといいよ!とつぶやいておきます #Rubykaigi
[Twitter / okkezより引用]
というわけで、0.1.0では、るりまプロジェクトに手軽に参加できる機能として、リファレンスのプレビュー機能を付けました。
インストール:
$ gem install myrurema $ rurema --init #しばし待つ $ rurema Array #リファレンスが表示される
プレビューしてみる:
$ `rurema --preview` #リファレンスの原稿があるディレクトリに移動する $ rurema --preview _builtin/Array Array#pop --browser #ブラウザにプレビューが表示される
というわけで、リファレンスに間違いや足らない部分を見つけたら、編集して、プレビューして、 svn diffでパッチを作ってるりまITSにチケットを作ってください。 内容が問題なければ、るりまコミッタがコミットしてくれます(あるいは、コミット権を渡されるかも)。
(9/2追記:残念ながら、1.9.2だとプレビュー機能がエラーになるようです(bc-tohtml.rbが未対応?)。1.8.7では大丈夫です。)
2010-09-08
■ [ruby] Tab Sweep
TabっていうかLDR pin sweepだけど。
http://rubyzucker.info/
ActiveSupportとかRuby Facets的なやつ。思考実験としては面白い。
Array#to_proc
>> [1,2,3,4].map &[:*, 5] => [5, 10, 15, 20]
とか。
http://github.com/c00lryguy/dsl
ryguy.edit do name 'Ryan Lewis' gender :male age 19 end
みたいなDSLを簡単に作るためのライブラリ。
fixture vs factory
http://www.metabates.com/2010/08/15/fixtures-v-factories-cant-we-all-just-get-along/
- fixture: 数が増えるとわけわからなくなる
- factory: 遅い
- 両方使えばいいんじゃね?
- fixtureで最も代表的なデータを作り、それを使い回す
- 例外的なケースのみ、factoryを使う
SimString をRubyから使ってみた - とはえ領域
http://d.hatena.ne.jp/tohae/20100810/1281409877
「もしかして:」機能の実装。
unveil.js
http://github.com/michael/unveil
http://dejavis.org/ みたいな、リアルタイムに動かせるグラフをJSで。リファレンス
http://github.com/blog/677-how-we-deploy-new-features
設定項目をRedis上に保存することで、デプロイなしにアプリケーションの状態を設定する話
2010-09-09
■ [ruby] Tab Sweepつづき
AxeML
http://github.com/DerGuteMoritz/axeml
SchemeのSXMLのように、RubyオブジェクトでXMLを表現する。
AxeML.transform([:ul, { :class => 'menu' },
[:li, [:a, { :href => '/foo' }, 'foo']],
[:li, [:a, { :href => '/bar' }, 'bar']]]).to_s
fab
サーバサイドJSのための非同期フレームワーク。
…らしいのだが、見た目が衝撃的すぎたのでメモ。
with ( require( "fab" ) )
( fab )
( listen, 0xFAB )
( /^\/hello/ )
( tmpl )
( "Hello, <%= this %>!" )
( /^\/(\w+)$/ )
( capture.at, 0 )
( "world" )
( 404 );
■ [esolang] 闇プログラマーって、プログラミング言語「闇」を使う人のことですよね
こんばんわ。松江でRubyプログラマーをしているyharaです。
今日はTwitter上で「闇プログラマー」という単語が流行っていました。 Rubyプログラマーはプログラミング言語Rubyを使う人のことなので、 闇プログラマーとはつまりプログラミング言語「闇」を使う人のことに違いありません。
ということで、 みたいに「闇」っぽい漢字だけで構成されたプログラミング言語を考えようとしたんですけど、 途中で
これはプログラミング言語「門」だ
ということに気づいて止めてしまいました。
上のコードで「Hi」と表示されたりする予定でした。
4839927847
インスパイア元:
問こ 門ん 閂に 閂ち 問は
約6時間前 Tweenから 5人がリツイート
2010-09-10
■ [ruby] nyacusでpikを使う方法
ちゃんと動きました!(nyaosユーザではないのに)ありがとうございます。
以下の設定を _nya に記述することで nyaos で pik が利用できるようになります。
pik{
pik_runner.exe pik.bat %*
if exist "%USERPROFILE%\.pik\pik.bat" then
source "%USERPROFILE%\.pik\pik.bat" 2> nul
endif
}
2010-09-26
■ [mac] 白MacBookのバッテリーを交換してもらった
2008年に買ったMacBookのトラックパッドのボタンが押しにくくなってきた、とTwitterで発言したら 「バッテリの膨張ではないか?」というリプライをいただいた。検索すると、かなりの人が バッテリ膨張を経験している模様。
それだけなら良かったのだが(良くないけど)、その後、勝手にボタンがクリックされてしまう現象が発生したので、 Genius Barに持ち込むことに。
結果、すんなり無償交換になった。具体的な問題が出ているというのは大きいのかも。
そのほか、筐体の端っこ(右手首があたるくらいの位置)が割れて欠けてしまったのについても、 1週間くらい預ければ取り替えてくれるとのこと。こっちはまあ実害ないししばらくはこのままにするかな。
2010-09-29
■ [rails] Rails3で論理削除
http://railsplugins.org/ で調べたところ、rails3_acts_as_paranoidというgemがあるらしい。
state_machine gemとdefault_scopeで同じことができるよ、という話もあるけど。
2010-09-30
■ [ruby] Rubyで書かれたミニマルなブログエンジン、toto

- Sinatraすら使わず、Rackのみで実装されている
- 記事のバージョン管理はgitで
- 記事のマークアップはmarkdownで(変更可能らしい)
- コメントはdisqusで
- サーバはThinなりPassengerなりunicornなり(CGIもいけそうな気がする)
- 記事はテキストファイルに書く
- 最初の数行にメタデータ(タイトルとか)を書く。
- 独自のメタデータを書いて、ERBテンプレートからそれを表示するようなカスタマイズも可能
データベースが不要で、テキストファイルを編集してgitでpushするだけっていうシンプルさが良いかも。
使い方
すぐに使い始められる状態になったものがgithubのcloudhead/dorothyにあるので、それをcloneする。
Herokuにアップロードする手順が公式サイトに載っている。(Herokuについては10月発売のWEB+DB PRESSに書くよ!)
$ git clone git://github.com/cloudhead/dorothy.git myblog $ cd myblog $ heroku create $ git push heroku master
ブログのコード自体はdorothyではなく、toto gemの方に入っている。名前は「」の主人公と、その愛犬ですね。
■ [ruby] mongoidのドキュメントを手元に置く方法
1.
$ git clone http://github.com/mongoid/mongoid-site.git
2.
$ bundle install # bundlerがなければ先に gem install bundler
3.
$ nanoc autocompile
4.
$ open http://localhost:3000/
5.
ArgumentError: invalid byte sequence in UTF-8 /Users/yhara/.rvm/gems/ruby-1.9.2-p0/gems/nanoc3-3.1.5/lib/nanoc3/data_sources/filesystem.rb:242:in `=~'
6. nanocェ…と言いながらrvm use 1.8.7して上の手順を繰り返す
7. 動きました

■ [ruby] mongoidのロケールを翻訳しようとしたのだが…
padrino (http://www.padrinorb.com/guides/localization ) も、mongoid (http://mongoid.org/docs/installation/ )も、英独仏伊西は翻訳者がいるけど日本語がなくて悲しい。言語の壁
[Twitter / yharaより引用]
と言うだけでは何なので自分で訳してみようと思ったんだが、これが思ったより難しい。英語と日本語ってちょっと違いすぎるよね。 下手に訳すと「メモリが"read"になることはできませんでした」みたいになりそうで怖い。
とりあえずやってみたのが以下。フィードバックください。
ja:
activemodel:
errors:
messages:
taken: は、既に利用されています
# is already taken
mongoid:
errors:
messages:
document_not_found:
idが%{identifiers}(のいずれか)である%{klass}クラスのドキュメントは見つかりませんでした。
# Document not found for class %{klass} with id(s) %{identifiers}.
invalid_database:
データベースがMongo::DBではなく、%{name}になっています。
# Database should be a Mongo::DB, not %{name}.
invalid_type:
%{klass}として定義されたフィールドに、%{value}という%{other}が渡されました。
# Field was defined as a(n) %{klass}, but received a %{other} with
# the value %{value}.
unsupported_version:
MongoDB %{version}はサポートされていません。
%{mongo_version}にアップグレードしてください。
# MongoDB %{version} not supported, please upgrade
# to %{mongo_version}.
validations:
バリデーションに失敗しました:%{errors}
# Validation failed - %{errors}.
invalid_collection:
埋め込まれたドキュメント%{klass}からはコレクションにアクセスできません。
ルートドキュメントからアクセスしてください。
# Access to the collection for %{klass} is not allowed since it
# is an embedded document, please access a collection from
# the root document.
invalid_field:
%{name}という名前のフィールドは定義できません。
Mongoidが内部で使用している属性やメソッドと重複する名前の
フィールドは定義できません。そのような名前については
Document#instance_methods を参照してください。
# Defining a field named %{name} is not allowed. Do not define
# fields that conflict with Mongoid internal attributes or method
# names. Use Document#instance_methods to see what names this includes.
too_many_nested_attribute_records:
%{association}の属性のネストは%{limit}レコードまでに制限されています。
# Accepting nested attributes for %{association} is limited
# to %{limit} records.
embedded_in_must_have_inverse_of:
embedded_inメソッドの:inverse_ofオプションは省略できません。
# Options for embedded_in association must include inverse_of.
dependent_only_references_one_or_many:
オプション :dependent => destroy/delete は、
references_oneまたはreferences_manyメソッドにのみ有効です。
# The dependent => destroy|delete option that was supplied
# is only valid on references_one or references_many associations.
association_cant_have_inverse_of:
このアソシエーションに:inverse_ofオプションは設定できません。
このオプションはembedded_inまたはreferences_manyにのみ有効です。
# Defining an inverse_of on this association is not allowed. Only
# use this option on embedded_in or references_many as array.
calling_document_find_with_nil_is_invalid:
Document#findの引数がnilです
# Calling Document#find with nil is invalid
おまけ
エルシャダイロケール
ja-ElShaddai:
activemodel:
errors:
messages:
taken: は既に利用されているが大丈夫か?
# (くだらなすぎるので以下略)
□ ムムリク [>(くだらなすぎるので以下略) いえいえ、”そういうnlize”を彷彿とさせるので、ぜひ!]
□ okkez [padrino のは翻訳して送っておきました]
□ yhara [okkezさんかっこいい! ムムリクさん:"そういうnlize"の元ネタが分かりませんでした…]