フォーチュンサモナーズ
最新 追記

Don'tStopMusic

2003|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|12|
2006|01|02|03|04|05|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|

カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年

知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。


2008-02-06 この日を編集

_ [近況] ベッコアメ解約 このエントリーを含むブックマーク

10年来ユーザだったベッコアメを解約しました。GMO 傘下になってしまった時に止めようと思いつつ、メールアドレス維持のためだけにお金を払っている状態でした。テレホタイムに突入した瞬間にダイアルアップをしていた頃が懐かしいです。しかし、こんなにパソコン上での作業がインターネット前提になるとは、あの頃は思ってもみませんでしたね。


2008-02-10 この日を編集

_ [Ruby] [ruby-list:44590] ' との " 使い分け このエントリーを含むブックマーク

文字列を表すときには、シングルクォートとダブルクォートがあり、それぞれ機能が異なりますが、どちらでも良い場合はどちらを使っていますか?  最初は違いを知らず、シングルクォートのみを使っていましたが、うまく動作しない場合があり、適当に(^^;ダブルクォートを使っていました。今後慣れていくにあたって、どちらを使う癖をつけておいたほうが良いなどはあるのでしょうか?

[ruby-list:44590] ' との " 使い分け

前田さんのRubyコーディング規約には、

文字列リテラルには基本的に"..."を使用する。ただし、特殊文字を解釈させたくない場合のみ、'...'を使用する。また、原則的にヒアドキュメントは使用しない。

Rubyコーディング規約:文字列リテラル

とあります。

この辺の書き方は人によって流儀がありそうです。私の場合は、

  • (解釈させたい)エスケープシーケンスがある:ダブルクォート
  • 式展開がある:ダブルクォート
  • やたら長い文字列やテンプレート: ヒアドキュメント
  • ' や " が含まれてる: % 記法
  • それ以外:シングルクォート

というように使い分けています。「それ以外」はダブルクォートでもいいのですけどね。

まず、単に固定を文字列を出力するだけなら、puts が改行も出力してくれるので、以下のようにシングルクォートにしています。

 puts 'wait a moment...'

処理結果を出力するときには変数が混じるのでダブルクォート。

num_errors = count_errors
puts "errors:\t#{num_errors}"

これは以下のようにも書けますが、文字列の結合を多用すると読みにくいので、なるべく式展開を使うようにしています。

puts "errors:\t" + num_errors.to_s

禁則処理のように文字列を文字単位でアルゴリズムに則って処理するならば + を使った方が読みやすくなると思いますが、処理結果を出力するくらいであれば式展開の方が出力されるメッセージに近い見た目になるのでいいですね。

長い文章を扱うときにはヒアドキュメントを使います。画面に出力する文字列だとコマンドの usage くらいにしか使ったことありませんが。あとは eruby のテンプレートを別ファイルにせずにスクリプトに埋め込むときくらいですかね。

def usage
  puts <<-_USAGE_
usage: #{$0} -foo foo -bar bar file, [file...]
This program...
       -foo ...
       -bar ...
  _USAGE_
end

文字列中にシングルクォートやダブルクォートが含まれる場合には、% 記法を使ってます。HTML/XML タグを直接書く場合など。

image_tag = %Q!<img src="#{url}" />!

_ [] メディア・バイアス あやしい健康情報とニセ科学を読んだ このエントリーを含むブックマーク

世間に氾濫するトンデモ科学報道。センセーショナリズム、記者の思い込み、捏造、それを利用する企業や市民団体…。メディア・バイアスの構造を解き明かし、科学情報の真贋の見極め方、リスク評価の視点を解説する。

メディアのあり方や食について興味のある方はぜひ一読してほしい一冊です。著者は元毎日新聞記者で現在フリーのサイエンスライターをしている松永和紀さん。

内容は多岐に渡っていますので、ここで部分的に紹介はせず、各章の見出しだけ記載します。新聞やテレビの報道がいかに偏っており事実の一部の側面だけを過剰に取り上げているのか、実際のさまざまな事例を挙げて実態を明らかにしています。

  • 第1章:健康情報番組のウソ
  • 第2章:黒か白かは単純すぎる
  • 第3章:フードファディズムの世界にようこそ
  • 第4章:警鐘報道をしたがる人びと
  • 第5章:添加物バッシングの罪
  • 第6章:自然志向の罠
  • 第7章:「昔はよかった」の過ち
  • 第8章:ニセ科学に騙されるな
  • 第9章:ウソつき科学者を見破れ
  • 第10章:政治経済に翻弄される科学
  • 第11章:科学報道を見破る十カ条

この問題を解決するには、新聞やテレビが正しい報道をし、消費者が科学的な素養とメディアリテラシーを学んで情報の真偽を見極める目を持つことしかありませんが、どちらも難しそうですね。新聞やテレビには期待できないので、後者の方がまだ芽があるかもしれません。

メディア・バイアス あやしい健康情報とニセ科学 (光文社新書 (298))(松永 和紀)


2008-02-11 この日を編集

_ [サイト運営] tdiary-2.2.0 にしました このエントリーを含むブックマーク

リリースされてからずいぶん経ちましたがやっと 2.2.0 にしました。スパム対策がだいぶ強化されたようですね。


2008-02-12 この日を編集

_ [適当] 顔のお手入れ このエントリーを含むブックマーク

事の始まり

私は冬場には手足をはじめとしてあちこちが痒くなる乾燥肌です。が、顔も乾燥しているはずなのに鼻や額だけは脂ぎっているという状態でした。つまり、眉間や頬は乾燥していて荒れているのに鼻や額はテカテカしているという。あと、ニキビは思春期だけできるものだと子供の頃は思ってたのですが、大人になってもできるもんなんですよね。呼び方が変わるだけで。

妻の薦めで顔のお手入れをするようにしてから顔の乾燥については改善しました。ニキビもできにくくなってるかと。

お手入れ

で、お手入れですが、洗顔後に化粧水と乳液をつけるようにしてます。七面倒だしお金もかかるしという印象がありますが、そう手間もかからないしお金もかかっていません。

手順

  • 顔を洗う
  • 水気を拭き取る
  • 化粧水を適当に手に取って顔につける
  • 水気が大体なくなるまで待つ
  • 乳液を適当に手にとって顔につける

化粧水はぴたぴたと手のひらで軽く叩きながら、乳液は刷り込むような感じにしています。まあ、実際のところ最初は面倒ですが、洗顔の手順の一部として習慣化してしまえば、そこまで億劫ではありませんね。

化粧水と乳液

さて、使ってる化粧水と乳液ですが、別に DHC が出しているようなメンズ用の化粧品は使ってません(今調べたらそもそも DHC の男性向けのは化粧水や乳液が存在してないですね←追記)ローション=化粧水、ジェル=乳液相当とのこと)。では何を使っているかというと、100 円ショップとしておなじみのダイソーの「酒しずく」です。それぞれ100 円合計 200 円。これで 1 月は持ちます。酒しずくは All About に写真があります。「酒のしずく」という似た名前の商品もありますが、「の」が入らない方です。

そもそも何もお手入れをしてなかったわけで、100 円ショップの化粧水や乳液でも十分効果がありますね。顔の肌荒れや乾燥が気になる男性諸氏は一度(というか一週間くらい)お試しください。

それでも脚は痒い

お手入れしてるのは顔だけなので、脚は依然として乾燥して痒くなります。ひどいと寝ている間に掻きむしっていて、朝起きると爪に血が……ということも。こっちも対策しようということで、ここんところはコーワのケラチナミンを愛用してます。塗るとすぐに痒みが治まるし、長くて数日で乾燥して荒れた肌も滑らかになるしで医薬品なだけあります。こっちは結構高いのですけどね。ドラッグストアで買ってますが、Amazon でも買える模様。しかし Amazon は何でも売ってますね。

ケラチナミン 乳状液20 100g  (医薬品) ケラチナミン 乳状液20 100g (医薬品)

ケラチナミン
¥ 1,659

_ [Ruby] Ruby/LibGTop2 0.1.1 をリリースしました このエントリーを含むブックマーク

Ruby/LibGTop2 は GNOME の libgtop ライブラリ のバージョン 2.x への Ruby バインディングです。

今回は単なるメンテナンスリリースです。libgtop の 2.14.8 から 2.21.5 までの差分を確認して変更点を反映させました。Linux でしか動作は確認してませんけども……


2008-02-13 この日を編集

_ [Ruby] Ruby技術者認定試験の認定証 このエントリーを含むブックマーク

届きました(先週末に)。これで私も Ruby Association Certified Ruby Programmer Silver です。長いですね。

認定証は出雲和紙で出来ているそうで、写真じゃわかりにくいですが趣のある風合いになっています。

いつの間にか更新されていたRuby技術者認定試験案内ページによれば、今年の10月にゴールド、来年の 4 月にプラチナの試験が開始される予定のようです。いずれ Rails 版も出来たりするのでしょうかね。Ruby Association Certified Rails Web Developer とかなんとか。

認定証

_ [Ruby] ホスティングで Ruby を提供する際の方針案 このエントリーを含むブックマーク

というのを昔書いたことがあります。結局使っていませんが。せっかくなので晒しておきます。RubyHostingPolicy

今読み返して思いましたが、実際に提供するとしたらマイナーバージョンアップはなるべく避けた方が無難ですね。現状動作している CGI が動かなくなるリスクの方が、バージョンアップするメリットよりも大きいからです。また、需要のある CGI プログラムであれば、そのプログラムの提供者側がユーザからの要望に応じて古いバージョンの環境でも動作するようにしてくれる可能性が高いのではないかと。

しかし、世のホスティング(共用サーバ)はどういう風にしているんでしょうね。

_ [Firefox] Firefox 3 Beta 3 インストール このエントリーを含むブックマーク

Beta 2 から使っています。Beta 3 が出たので更新しました。次は RC ですかね。Firefox 3 に関するリンクを挙げておきます。

気に入らないところ

「鍵穴」と呼ばれている戻るボタンが強調された新テーマは見た目がいまいちしっくりきません。他に気になるところはないですね。いきなり落ちるようなこともなく、ベータの割りに安定していると思います。

気になる新機能

個人的に気に入っている新機能は、「ページ情報の更新」「IME の制御」「フルページズーム(画像込みの拡大縮小)」、そして Mozilla ユーザ長年の希望だった「長い url の自動改行」。スペースでページ送りをしているので、IME が ON の場合でもスクロール可能になったのは小さいことながら非常に便利です。

速度

Gecko のバージョンがあがったためか、Firefox 2 よりもレンダリングは速くなっていると思います。Javascript は SunSpider でベンチをとってみましたが、変化なしでした。新しいエンジンが搭載される予定の Firefox 4 に期待です。

拡張(アドオン)

まだベータなので動かない拡張もあります。私の使っている拡張を Nighlty Tester Tools を使った状態で動いているものとちゃんと動かないものに分類してみます。

まず、使えているもの。

  • Adblock Plus
  • All-in-One Gesture
  • Auto Copy
  • CustomizeGoogle
  • del.icio.us Bookmarks (Add bookmark のウインドウがちょっと崩れるけど動作に問題なし)
  • Firebug(動作に影響のない表示の乱れがあります)
  • FireFTP
  • Gmail Notifier
  • Greasemonkey
  • Japanize
  • Live HTTP Headers
  • Nightly Tester Tools
  • PDF Download

というか、ほとんど普通に使えてますね。次にだめなもの。

  • Bloglines Toolkit(このアドオンには安全に更新する手段が用意されていません)
  • Tomboo (同上)
  • Web Developer(同上)
  • Google Toolbar for Firefox: 検索できない

fx3 からは、更新が HTTPS か署名されていないと無効にされます。正式版がリリースされれば、拡張側でそれに追随して対応されるでしょう(Bloglines Toolkit はたぶん放置されると思いますが)。


2008-02-17 この日を編集

_ [適当] 江戸雪の雪ちゃんがかわいい件 このエントリーを含むブックマーク

江戸雪は豆腐や油揚げなどの豆腐・豆製品を作っている会社です。近所のスーパーで取り扱っているのですが、この江戸雪の製品には「雪ちゃん」というキャラがプリントされています。google さまで検索しても言及している人があんまりいないので、少しでも世に知らしめるために書いておきます。

雪ちゃん@絹豆腐

これは1月下旬に買った絹豆腐。雪だるまを作っているところですね。他にも 4 種類(計 5 種)絵柄があります。さらには、これは冬バージョンだったりします。つまり、季節によって絵柄が変わるんですね。夏バージョンにはテニスラケットを持った雪ちゃんなどがあります。

油揚げやいなり用の揚げにもまた雪ちゃんがいて、江戸雪の製品に全面的に展開されているわけです。かなりの力の入れようだと思いませんか。

追記:スーパーに行って少し確認してきました(併せて上の文を少し訂正)。絹豆腐の絵柄はなんと 5 種類も。絵柄が複数ある製品は絹豆腐だけで、他は小さめに描かれているだけでした。お稲りさん用の揚げには、作り方を示す二コマか三コマのイラストがフィーチャーされており、ファン必見。


2008-02-18 この日を編集

_ [rails][OpenFL] OpenFL ことオープンソース版 Fastladder のコードを読む その1 このエントリーを含むブックマーク

先日公開されたオープンソース版 Fastladder を遅ればせながらダウンロードしてみました。オープンソース版は Rails 製。せっかくなのでコードを読んでみることにします。

ダウンロードする

Fastladder Open Source / Free Downloadのページから、Unix / Linux 版をダウンロードします。

$ wget http://fastladder.org/downloads/fastladder-0.0.2-src.tar.gz
$ tar fxz fastladder-0.0.2-src.tar.gz
$ cd fastladder

依存ライブラリを調べる

INSTALL.txt に書いてある通りです。

  • rFeedFinder: RSS autodiscovery や ATOM autodiscovery してフィードを探してくれます。hpricothtmlentities を必要とします。
  • Feed Normalizer: RSS パーサ。Ruby 標準添付の rss と gem で配布されてる simple-rss のラッパとして働きます。RSS 0.9/1.0/2.0 のときは rss、ATOM のときは simple-rss を使うようですね。どっちのパーサを使っても返すオブジェクトは統一されるので、フィードのフォーマットの違いを気にせずに済むと。simple-rss と hpricot を必要とします。
  • opml: REXML ラッパの OPML パーサ。rubyforge のプロジェクトページはなくなっていて、gem ファイルだけ存在しているという微妙な状態のライブラリです。下手するとそのうちなくなるんじゃないかなあ。
  • mongrel: 高速ウェブサーバ。先行き不安ですが、何だかんだいって ML には投稿しているので大丈夫かも知れません。
  • sqlite3-ruby: sqlite3 バインディングです。

プラグインを調べる

どんなプラグインを使っているかを調べるため、vendor/plugins を見ます。

$ ls vendor/plugins
restful_authentication

restful_authentication は Rails 2.0 でデファクトスタンダードな認証プラグインです。使っているのはこれのみのようですね。

LoC を調べる

とりあえずアプリの規模を知るために LoC を調べます。rake のタスクにコードのメトリクスを得る stats というのがあります。

$ rake stats
(in /home/date/tmp/fastladder)
+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          |  1015 |   886 |      22 |      73 |   3 |    10 |
| Helpers              |    90 |    85 |       0 |       9 |   0 |     7 |
| Models               |   282 |   232 |       8 |      29 |   3 |     6 |
| Libraries            |   602 |   484 |       2 |      37 |  18 |    11 |
| Integration tests    |     0 |     0 |       0 |       0 |   0 |     0 |
| Functional tests     |   366 |   274 |      28 |      57 |   2 |     2 |
| Unit tests           |   171 |   133 |       8 |      21 |   2 |     4 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                |  2526 |  2094 |      68 |     226 |   3 |     7 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 1687     Test LOC: 407     Code to Test Ratio: 1:0.2

Code LOC: 1687 なので、サーバ側は結構コンパクトなコードだと言えます。余り時間を書けずに読めそうですね。

他の値も少し見てみます。全体の規模からするとコントローラのクラス数が多いですね。画面数あるいは機能数が多いのかもしれません。コントローラとモデルの Methods/Class が 3 と少なめですから、(コード的に)軽量な画面や機能が多いか細かく分割していると考えられます。統合テストが 0 ですが、Code to Test Ratio は 1:0.2 なので TDD でない Rails アプリでは普通くらいでしょうか。まあ、この辺のメトリクスの値は多いから良いとか悪いとかではないので、傾向が多少分かるくらいの話ですが。

参考までに他の Rails アプリの stats の結果を挙げておきます。

redMine 0.6.3 の場合
(in /home/date/tmp/redmine-0.6.3)
+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          |  3888 |  2814 |      36 |     242 |   6 |     9 |
| Helpers              |  1850 |  1026 |       2 |      84 |  42 |    10 |
| Models               |  3748 |  2293 |      54 |     276 |   5 |     6 |
| Libraries            |  7111 |  4838 |      39 |     313 |   8 |    13 |
| APIs                 |    25 |     8 |       1 |       0 |   0 |     0 |
| Integration tests    |   268 |   166 |       4 |      10 |   2 |    14 |
| Functional tests     |  1686 |  1140 |      40 |     163 |   4 |     4 |
| Unit tests           |  1938 |  1125 |      32 |     149 |   4 |     5 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                | 20514 | 13410 |     208 |    1237 |   5 |     8 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 10979     Test LOC: 2431     Code to Test Ratio: 1:0.2

多機能なだけあって Code LOC は 10000 超えです。ライブラリが約半分を占めていますが、サードパーティー製で大きいのは SVG グラフくらいなのでそれを除いても 10000 前後でしょう。モデルがやたら多いですね。ヘルパーの Methods/Class が 42 なので、これは明らかに詰め込みすぎ。

typo 5.0.2 の場合
(in /home/date/tmp/typo-5.0.2)
+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          |  2124 |  1752 |      37 |     220 |   5 |     5 |
| Helpers              |   765 |   608 |       0 |     104 |   0 |     3 |
| Models               |  3041 |  2432 |      57 |     415 |   7 |     3 |
| Libraries            |  1446 |  1047 |      33 |     161 |   4 |     4 |
| APIs                 |   437 |   355 |      17 |      23 |   1 |    13 |
| Components           |     0 |     0 |       0 |       0 |   0 |     0 |
| Model specs          |  1022 |   805 |       2 |      19 |   9 |    40 |
| View specs           |   118 |    94 |       0 |       9 |   0 |     8 |
| Controller specs     |   870 |   675 |       1 |      19 |  19 |    33 |
| Helper specs         |    50 |    37 |       0 |       0 |   0 |     0 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                |  9873 |  7805 |     147 |     970 |   6 |     6 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 6194     Test LOC: 1611     Code to Test Ratio: 1:0.3

こちらもモデルクラスが多いですね。LOC/Method が総じて低いので、すっきりしたコードなのでしょう。

島根県CMSの場合
(in /home/date/tmp/pref-shimane-cms-1.0)
+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Helpers              |   317 |   288 |       0 |      23 |   0 |    10 |
| Controllers          |  2860 |  2576 |       8 |     199 |  24 |    10 |
| APIs                 |     4 |     2 |       1 |       0 |   0 |     0 |
| Components           |     0 |     0 |       0 |       0 |   0 |     0 |
|   Functional tests   |  2660 |  2358 |      12 |     165 |  13 |    12 |
| Models               |  1817 |  1536 |      22 |     149 |   6 |     8 |
|   Unit tests         |  1510 |  1270 |      24 |     131 |   5 |     7 |
| Libraries            |  8275 |  6270 |     128 |     414 |   3 |    13 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                | 17443 | 14300 |     195 |    1081 |   5 |    11 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 10672     Test LOC: 3628     Code to Test Ratio: 1:0.3

LOC が 2576 と大きいわりに、コントローラ数が少なく、Methods/Class が 24 と大きいです。あまり画面遷移をさせずに色々できるようにしているのかもしれません。LOC/Method も 8〜10 と大き目ですね。リファクタリングの余地がありそうです。

わき道に逸れたので今回はここまで。


2008-02-19 この日を編集

_ [rails][OpenFL] OpenFL ことオープンソース版 Fastladder のコードを読む その2 このエントリーを含むブックマーク

続きです。その1

ディレクトリ構造

ディレクトリ構造を見ます。

$ ls
INSTALL.txt  README.txt  app     db   lib  public  test  vendor
LICENSE.txt  Rakefile    config  doc  log  script  tmp

一般的な Rails のディレクトリ構造です。特殊なディレクトリはないので、Rails の CoC に則って作られているようですね。

config

config ディレクトリ以下を確認します。環境設定や起動に関するものはここに入るので、OpenFL 特有の設定などをを知ることができます。

database.yml*

特に Rails アプリ一般と変わりはありませんでした。

environment.rb

session の secret を外部ファイル化しています。この secret は Rails 2.0 でセッション情報をクッキーに突っ込むようになって増えたパラメタです。デフォルトだと environment.rb に埋め込まれるので公開するコードだと困るんですよね。コードはRails 2.0 移行ログ -- BONNOH FRACTION 13のものでしょうかね。

enviconments/*

rails コマンドで生成されたそのまま。

initializers/constants.rb

OpenFL で追加されたファイルです。environment.rb のコメントに元から書いてあるように、initializers 以下の *.rb はアプリケーション起動の初期時に自動的に読まれて実行されます。なのでアプリケーションの設定をここに書くことが強く推奨されています。

さて、constants.rb には定数がいくつか記述されています。定数なので constants.rb なのでしょうけど、意味からすれば別のファイル名のほうがいいんじゃないでしょうかね。global_settings.rb とか。ちょっと長いかな……

定数のそれぞれの意味は必要になったら調べることにします。とりえあず、名前から推測されるところをメモっておきます。MAX_UNREAD_COUNT と CRAWL_INTERVAL 以外は大体分からないでもないですね。

  • MAX_UNREAD_COUNT: 最大未読カウント?
  • DEFAULT_FAVICON: デフォルトの favicon のパス。favicon がなかったときに使われるやつだと思われます
  • SUBSCRIBE_LIMIT: 購読数の上限。デフォルト 5000。変える必要があるのはきっと ma.la さんと otsune さんくらい
  • SAVE_PIN_LIMIT: ピンのバックアップ数上限。デフォルト 100
  • CRAWL_INTERVAL: クロールの間隔?(単位不明)
  • ALLOW_TAGS: 許可するタグ。フィードに含まれているタグのうち、これ以外は実体参照にエスケープされるのでしょう。
  • ALLOW_ATTRIBUTES: 許可する属性。同上ですね。たぶん。

routes.rb

直接ファイルを眺めてもいいですし、rake routes してもいいです。rake routes すると定義されている route が展開された状態で全部表示されます。map.resource 使っていると長くなるのが玉に瑕。

さて中身ですが、members と session を map.resource してますね。これは restful_authentication が必要としている設定です。

また、

  map.connect "api/config/load", :controller => "api/config", :action => "get"
  map.connect "api/config/save", :controller => "api/config", :action => "put"
  
  map.connect "/api/:action", :controller => "api"
  map.connect "/:controller/:action", :requirements =>{:controller => /api\/\w+/}

と、api に関する定義が多いです。最後の requirements している定義で /api/ 以下にさらにコントローラが複数あることがわかります。実際ファイルを調べてみると、

$ ls app/controller/api
config_controller.rb  folder_controller.rb  pin_controller.rb
feed_controller.rb    item_controller.rb    search_controller.rb

という感じです。名前からするとほとんどの機能はこの /api/ 配下に集中しているのかもしれません。

今回の対象は設定ファイルなので、深入りは止めておきます。また次回。


2008-02-21 この日を編集

_ [ゲーム] Amazon からメールきた (世界樹の迷宮II) このエントリーを含むブックマーク

Amazon.co.jpからのお知らせ
 
お客様からご注文いただいた 商品 を本日発送させていただきました。
 
ご注文の処理が完了しましたのでお知らせします。
 
Amazon.co.jpをご利用いただき、ありがとうございました。またのご利用を
お待ちしております。
 
今回発送する商品は以下のとおりです。
---------------------------------------------------------------------
数量      商品                           価格  発送済み          小計
---------------------------------------------------------------------
  1     世界樹の迷宮II 諸王の聖杯 ¥4,706      1  ¥4,706

特典あり「世界樹の迷宮II 諸王の聖杯」 はプレミア付いてますね。特典なしの「世界樹の迷宮II 諸王の聖杯(特典無し)」は普通に買える模様。しかも届くのは金曜日。

すでに Wiki が立ってますが、なるべく見ないようにしようと思います。


2008-02-22 この日を編集

_ [影舞] stable-0_8 タグの testall でエラーが大量に → 解決 このエントリーを含むブックマーク

影舞の開発が再開したようです。目出度い。会社で業務に使っています。コードをベースとしてやりとりする際には trac、タスクがベースなら影舞という使い分けをしています(あとは、新しいプロジェクトには redMine を使ってみたり)。

1.8 では obsolete になってる部分を修正するパッチ取り込んでもらいました。ありがとうございます。

Ruby 1.9 でも動くようにとコードをいじってみているのですが、stable-0_8 タグですと testall でエラーが大量に出ます。ほとんどが No such file or directory なので何か設定に問題があると思うのですが、良く分からず。

↓checkout したそのままの状態で実行した結果の一部。

141) Error:
test_update2(TestXMLStore):
Errno::ENOENT: No such file or directory - /home/date/work/kagemai/project/_tmp/messages.ja.cache
    ./lib/kagemai/message_bundle.rb:65:in `initialize'
    ./lib/kagemai/message_bundle.rb:65:in `open'
    ./lib/kagemai/message_bundle.rb:65:in `initialize'
    ./lib/kagemai/message_bundle.rb:30:in `new'
    ./lib/kagemai/message_bundle.rb:30:in `open'
    /home/date/work/kagemai/test/xmlstore_test.rb:13:in `setup'
 
142) Error:
test_update2(TestXMLStore):
Errno::ENOENT: No such file or directory - /spool
    ./lib/kagemai/util.rb:133:in `open'
    ./lib/kagemai/util.rb:133:in `foreach'
    ./lib/kagemai/util.rb:133:in `delete_dir'
    ./lib/kagemai/filestore.rb:76:in `destroy'
    /home/date/work/kagemai/test/xmlstore_test.rb:41:in `teardown'

project/_tmp ディレクトリを作っておいても、

 95) Error:
test_update2(TestXMLStore):
ArgumentError: wrong number of arguments (0 for 1)
    ./lib/kagemai/reporttype.rb:154:in `parse'
    ./lib/kagemai/reporttype.rb:154:in `parse'
    ./lib/kagemai/reporttype.rb:36:in `load'
    ./lib/kagemai/sharedfile.rb:62:in `read_open'
    ./lib/kagemai/sharedfile.rb:60:in `open'
    ./lib/kagemai/sharedfile.rb:60:in `read_open'
    ./lib/kagemai/sharedfile.rb:47:in `sync'
    /usr/lib/ruby/1.8/sync.rb:229:in `synchronize'
    ./lib/kagemai/sharedfile.rb:46:in `sync'
    ./lib/kagemai/sharedfile.rb:59:in `read_open'
    ./lib/kagemai/reporttype.rb:35:in `load'
    /home/date/work/kagemai/test/xmlstore_test.rb:15:in `setup'
 
 96) Error:
test_update2(TestXMLStore):
Errno::ENOENT: No such file or directory - test/testfile/spool
    ./lib/kagemai/util.rb:133:in `open'
    ./lib/kagemai/util.rb:133:in `foreach'
    ./lib/kagemai/util.rb:133:in `delete_dir'
    ./lib/kagemai/filestore.rb:76:in `destroy'
    /home/date/work/kagemai/test/xmlstore_test.rb:41:in `teardown'

追記

インストール済みの xmlscan と影舞バンドルのそれとのバージョンが違っていたため、それでエラーになっているものがありました(filestore_test)。これは以下のように kagemai の lib の探索順位を上げて対応。

Index: testall.rb
===================================================================
RCS file: /cvsroot/kagemai/kagemai/testall.rb,v
retrieving revision 1.1.1.1.2.5
diff -u -r1.1.1.1.2.5 testall.rb
--- testall.rb  20 Feb 2008 11:52:44 -0000      1.1.1.1.2.5
+++ testall.rb  22 Feb 2008 14:56:59 -0000
@@ -10,7 +10,7 @@
 $SAFE = 1
 
 $WIN32 = (RUBY_PLATFORM =~ /mswin32|cygwin/) != nil
-$:.push("./lib");
+$:.unshift("./lib");
  
 kagemai_root = "."
 

あとは、Kagemai::MessageBuldle.open で wrong number of arguments (4 for 3) が出るというもの。こっちは fukuoka さんが直してくれました。0F0E です。

$ ruby -v testall.rb 
ruby 1.8.6 (2007-12-03 patchlevel 113) [i686-linux]
(略)
171 tests, 327 assertions, 0 failures, 0 errors
本日のツッコミ(全2件) [ツッコミを入れる]

_ fukuoka [こんばんは。最初の project/_tmp がないというのは、テストケースの問題ですね。これは手元でも再現しますし..]

_ だて [こんばんは。ありがとうございます。手元で 0 failures, 0 errors になりました(1.8 で)。 ..]


2008-02-27 この日を編集

_ [rails][OpenFL] OpenFL ことオープンソース版 Fastladder のコードを読む その3 このエントリーを含むブックマーク

続きです。その1その2

今回はデータベースのスキーマを見ます。タイトルに反してコードを全然読んでないですね。データ構造を把握しておくとモデルやコントローラのコードを読む助けになりますので、先に確認しておきます。

db/schema.rb を眺めるのもいいのですが、テーブル間の関連を手っ取り早く把握するために図を作ります。図の生成には RailRoad を使います。まず、graphviz をインストールしておきます。RailRoad のインストールは gem で実施。

# gem install railroad

これで railroad コマンドがインストールされます。コマンドを実行する前にデータベースを migration しておきます(まだしてなければ)。

$ rake db:migrate

データベースが出来たら、railroad コマンドを実行。railroad コマンド自体は graphviz 用のグラフデータをテキストで出力しますので、それを graphviz のコマンドに食わせて画像データに変換します。

SVG にする場合は、

$ railroad -M | dot -Tsvg > models.svg

PNG の場合、

$ railroad -M | dot -Tpng > models.png

こんな具合の図が生成されます。
OpenFLのモデル

さて、図を見ると以下のようなモデル/テーブルが登場していることがわかります。

  • Member: 利用者
  • Pin: ピン
  • Folder: フィードのフォルダ
  • Feed: フィード
  • Subscription: フィードの購読
  • Item: 記事
  • CrawlStatus: クロール状況
  • Favicon: favicon

それぞれのモデル/テーブルの役割は LDR や Fastladder を使ったことがあるならすぐに分かりますね。Favicon のデータをデータベースに格納している、クロール結果もデータベースで管理している、ピンはユーザから多対一の関連を持つだけでフィードやアイテムと関連を持たない、あたりが興味深いですね。

画像はファイルで管理したくなりますが、favicon はサイズの上限も決まってますので予想外に膨れ上がるということもないのでしょう。数もブログごとに一つかなしかということを考えると記事に比べて消費するバイトはだいぶ少ないですね。

クロール状況をデータベースで持つかどうかは、

  • 実行制御: クロール間隔など
  • エラー制御: クロールに失敗した場合の対処
  • ロギング: いつクロールしたかを記録

といった事を行うかどうかによります。バッチで実行して、エラーになっても放置か単にやりなおすだけというやり方もありえますが、クロール対象となるフィードの数が膨大になればそういう素朴なやり方は通用しなくなります。一回のバッチ実行ですべて終わらせるのは難しくなりますので、前回のクロールから十分に時間間隔があいたフィードだけ取得するのが効率が良いですし、何度もクロールに失敗した場合には対象から外すといった措置も必要になるでしょう。クローラのコードを読むときにはその辺が読みどころですね。

OpenFL の場合は関係ありませんが、広くネットユーザに公開しているサービスの場合、クロール記録があるとクロール間隔の制御に使えるだけでなく、「フィードを登録したのに全然更新されないがどうなってるんだ何が最速だ」といった問い合わせに対して「○○時○○分に確かにクロールしています。というかブログに記事が一件もないですが?」などと返答に利用できるわけです。記録がなかったら、「たぶんちゃんとクロールはしているはずですが、クロール対象が多くていつも高負荷なので遅れることがよくあります。ご不便をおかけしますがご了承ください」といった返答しかできません。これは困りますね。

また脇道にそれがちなので続きはまた今度に……次回こそコードを読もうと思います。

_ [ゲーム] Windows 版 Freeciv を gentoo でクロスコンパイル このエントリーを含むブックマーク

Freeciv を日本語でプレイすると「金%sを発見しました」などと悲しい表示になります。gettext の使い方が間違ってるんじゃない?ということでコードを直したくなるわけですが、C で書かれていますので、直してすぐ実行ということはできません。ということでビルドしてみることに。

crossdev による mingw32 クロスコンパイル環境

gentoo には crossdev というパッケージがあり、クロスコンパイル環境を簡単に用意できます。詳細は Gentoo Linux Documentation -- Gentoo Cross Development Guide

とりあえず、

# emerge crossdev
# crossdev -t mingw32

と打てば OK です。mingw32-gcc などが出来るはずです。/usr/mingw32/ が mingw32 用の環境となります(インクルードファイルやライブラリなどを置く)。

freeciv が必要とするライブラリをインストール

zlib、libiconv、libpng が必要です。

zlib

emerge できればいいんですが、mingw 用にパッチ作って ebuild 改造して overray においてとやらないといけないっぽいので、手動でコンパイルしました。

# wget http://www.zlib.net/zlib-1.2.3.tar.gz
# tar fxz zlib-1.2.3.tar.gz
# cd zlib-1.2.3
# vi win32/Makefile.gcc # mingw32-gcc や mingw32-ar を使うように修正
# make -f win32/Makefile.gcc
# INCLUDE_PATH=/usr/mingw32/usr/include/ LIBRARY_PATH=/usr/mingw32/usr/lib/ make -f win32/Makefile.gcc install

makefile の修正はこんな感じです。

--- win32/Makefile.gcc.orig     2008-02-27 23:14:28.000000000 +0900
+++ win32/Makefile.gcc  2008-02-27 23:15:50.000000000 +0900
@@ -30,7 +30,7 @@
 #LOC = -DASMV
 #LOC = -DDEBUG -g
 
-CC = gcc
+CC = mingw32-gcc
 CFLAGS = $(LOC) -O3 -Wall
 
 AS = $(CC)
@@ -39,10 +39,10 @@
 LD = $(CC)
 LDFLAGS = $(LOC) -s
 
-AR = ar
+AR = mingw32-ar
 ARFLAGS = rcs
 
-RC = windres
+RC = mingw32-windres
 RCFLAGS = --define GCC_WINDRES
 
 CP = cp -fp
@@ -50,7 +50,7 @@
 INSTALL = $(CP)
 RM = rm -f
 
-prefix = /usr/local
+prefix = /usr/mingw32/usr
 exec_prefix = $(prefix)
 
 OBJS = adler32.o compress.o crc32.o deflate.o gzio.o infback.o \
@@ -79,7 +79,7 @@
 $(IMPLIB): $(SHAREDLIB)
 
 $(SHAREDLIB): win32/zlib.def $(OBJS) $(OBJA) zlibrc.o
-       dllwrap --driver-name $(CC) --def win32/zlib.def \
+       mingw32-dllwrap --driver-name $(CC) --def win32/zlib.def \
          --implib $(IMPLIB) -o $@ $(OBJS) $(OBJA) zlibrc.o
        strip $@
 

libiconv

Linux 用にビルドするにしても glibc 付属のではだめなようです。

$ wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
$ tar fxz libiconv-1.12.tar.gz
$ libiconv-1.12
$ ./configure --host=mingw32  --prefix=/usr/mingw32/usr/
$ make
# make install

これは configure が --host に対応しているので簡単です。

libpng

$ wget http://nchc.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.25.tar.bz2
$ tar fxj libpng-1.2.25.tar.bz2
$ cd libpng-1.2.25/
$ ./configure --host=mingw32  --prefix=/usr/mingw32/usr/
$ make
# make install

これも同様 host 指定だけでクロスコンパイルできます。

freeciv 2.1.3

いよいよ freeciv をクロスコンパイルします。

$ wget http://jaist.dl.sourceforge.net/sourceforge/freeci
v/freeciv-2.1.3.tar.bz2
$ tar fxj freeciv-2.1.3.tar.bz2
$ cd freeciv-2.1.3
$ vi client/gui-win32/happiness.c # typo ってるので
$ ./configure --host=mingw32 --with-included-gettext --enable-client=win32 --prefix=/home//freeciv 
$ make
$ make install

client/gui-win32/happiness.c の修正点は以下の通りです。

--- freeciv-2.1.3/client/gui-win32/happiness.c.orig  2008-01-23 20:19:09.000000000 +0900
+++ freeciv-2.1.3/client/gui-win32/happiness.c 2008-02-26 00:17:44.000000000 +0900
@@ -181,13 +181,13 @@
   repaint_happiness_box(dlg,hdc);
   ReleaseDC(dlg->win,hdc);
 
-  SetWindowText(pdialog->mod_label[CITIES],
+  SetWindowText(dlg->mod_label[CITIES],
                text_happiness_cities(dlg->pcity));
   SetWindowText(dlg->mod_label[LUXURIES],
                text_happiness_luxuries(dlg->pcity));
   SetWindowText(dlg->mod_label[BUILDINGS],
                text_happiness_buildings(dlg->pcity));
-  SetWindowText(pdialog->mod_label[UNITS],
+  SetWindowText(dlg->mod_label[UNITS],
                text_happiness_units(dlg->pcity));
   SetWindowText(dlg->mod_label[WONDERS],
                text_happiness_wonders(dlg->pcity));

host に加えて、--with-included-gettext をつけます。さらに -enable-client=win32 とクライアントに win32 を選択します。作ったバイナリを Windows に移動させて動かすのでインストール先はホームディレクトリの下にしておきます。

結果

無事 civclient.exe や civserver.exe がコンパイルできました。が、実行しても何も反応がなく終了します。うーん残念。修正が必要という時点であんまりケアされてないのではという懸念がありましたが。配布されている Windows 版が GTK+ 版なので client は gtk にしたほうがいいのかもしれません。


最近のコメント:

  1. だて (02-23)
  2. fukuoka (02-22)

RSS
Creative Commons License
This work is licensed under a Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).