2007年05月30日

iTunes7.2

iTunesがバージョンアップされ7.2になっています。

早速更新をして何が変わったかを確認…

外から見える部分については、何も変わっていない気がする。
軽く早くなったとか、そう言うのだったら嬉しい。
それならば、ちょっと使ってみないと分らないか。

投稿者 iwazawa : 23:26 | コメント (0)

2007年05月29日

RadRailsでステップ実行

EclipseのRuby on Rails開発環境、RadRails and Ruby Development Tools (RDT)がバージョンアップ(といっても5/14の様だが)されていて、ついにEclipse内でステップ実行が出来るようになっている。

コードを追いかけながら動きを掴めるのは初学社にはありがたい。

ServersビューのWEBrickやMongrelサーバのプロパティーを表示すると、「Run Mode」というのが追加されていて、ここを「run」から「debug」に変更するとOK。

radrails_runmode.jpg

既にインストールされている場合は「Help」メニューの「Software Updates → Manage Configuration → Search for updates of the currentry installed features」からRadRailsが最新かどうかの確認と、最新ではない場合はアップデートできる。

まだ入ってないなら「Software Updates → Find and Install... → Search for new features to install」で http://update.aptana.com/install/rails/3.2/ をURLに追加して続ければOK。


ただし、かなり動作が遅くなるので、常時debugモードにしておくとストレスがたまりそうですが(笑)

投稿者 iwazawa : 07:29 | コメント (0)

2007年05月28日

接続のキャラクタセットおよび照合順序

ほとんどPHPでできているシステムなのですが、訳あってPerlから更新作業をする必要ができてしまい(というかPerlで書きたかった)一通り思い通りに動くものができた。

ところが日本語のデータが化ける。MySQL(バージョンは4.1)で保持している日本語のデータはSJISで格納されている(不本意ながら今さら変えられない)。そして、もちろんDBIでINSERT/UPDATEする時にEncode::decode/encodeを使ってSJISで格納しているにも関わらず化けてしまう。かなり悩んだあげく、やっとMySQLのドキュメントを見つけた。

接続のキャラクタセットおよび照合順序

次のようにconnect()直後に送信/受信のキャラクタセットをSJISであると指定してあげれば良い様です。

sub db_connect { my $dsn = "DBI:mysql:database=$DB;host=$DB_HOST"; my $dbh = DBI->connect($dsn, $DB_USER, $DB_PASS); unless ($dbh) { error("Coudn't connect Database $dsn"); die "Coudn't connect Database $dsn"; } my $stmt = $dbh->prepare("SET CHARACTER SET SJIS "); $stmt->execute(); return $dbh; }
投稿者 iwazawa : 21:15 | コメント (0) | トラックバック

ServerAliveInterval

WindowsのPoderosaからsshでFirewall内のサーバに接続していた時は、セッションのタイムアウトで接続が切れてしまうのに対応するため、「オプション設定」の「ターミナル」にある「KeepAliveパケットを送信する」オプションをONにしていた。

最近、Mac OS Xをメインに使用しているが、Terminalから件のサーバにつないだときに、切れてしまうのをどうすれば良いのか、やっと分かりました。

~/.ssh/config ファイルに下記の行を追加します。

ServerAliveInterval 60

60は60秒です。セッションのタイムアウト時間が長い場合は、環境に合わせてもっと長くするべきかも知れません。

投稿者 iwazawa : 20:48 | コメント (0)

2007年05月25日

Perlの配列とハッシュの初期化

自分のためのリマインダーです(笑)

  • 配列の初期化(リストを使う)
  • ハッシュの初期化(リストを使う)
  • 配列の参照の初期化(無名配列を使う)
  • ハッシュの参照の初期化(無名ハッシュを使う)
my @arr = (1, 2, 3); my %hash = ('1' => 1, '2' => 2, '3' => 3); my $r_arr = [1, 2, 3]; my $r_hash = {'1' => 1, '2' => 2, '3' => 3};
投稿者 iwazawa : 13:19 | コメント (0)

Amazon ECS

Amazon ECSですが、以前のエントリーamazon-ecsを使うつもりと書いたのですが、これカテゴリーのトラバースをするOperationであるところのBrowseNodeLookupに対応していなさそうな感じ。

カテゴリーは結構使えそうな情報なので、他を当たってみたところ、素直(なのかどうなのか分りませんが)にNet::HTTPREXMLで自分でやっても大したこと無さそうだという結論に。

試しにBrowseNodeLookupでサブカテゴリーにどんどん降りていくRailsアプリを書いてみたが、わりとすぐにできた。それもリクエストとレスポンスは開始1時間後にはできていて、そのあとREXMLの使い方がイマイチ分らず悩んでいただけでした。

やってておかしくないのにもかかわらず、XMLは何故だか使ったことがなかった私(笑)

投稿者 iwazawa : 00:25 | コメント (0) | トラックバック

2007年05月22日

1111

ふと見ると、Iron Maiden 1111。

20070522d.jpg

狙ってないで(笑)

投稿者 iwazawa : 23:36 | コメント (0) | トラックバック

EclipseのRuby Editor

最初からそうなのかも知れないが、EclipseのRuby Editorでインデントが微妙に崩れてしまっていることに気づき、気持ち悪い

20070522a.jpg

どうやら、bold化されているキーワードやインスタンス変数が先頭に来ている行で、構造的にはあっているはず(デフォルトのスペース2個です)インデントが崩れて表示されていると思われる。

Eclipseのフォントの設定(Windows Menu → Preferences... → General → Appearance → Colors and Fonts → Ruby → Ruby Editor Text Font )をどう変更しても直らない。

Ruby EditorのSyntax Coloringの設定( Windows Menu → Preferences... → Ruby → Editor → Syntax Coloring)で、Boldにチェックが入っているElementを付けたり外したりすると、Preview表示からして、ぶっとなったり、しゅっとなったりしてずれているのが分る(バカっぽい表現で好感度アップ)

ずれるのは許せないので多少、コードの識別が悪くなってもBoldじゃない方がよい!

BoldになっているElementを全てBoldじゃなくしてみると、崩れなくなった。

20070522b.jpg

うむ。美しい。

むろん崩れなければBoldの方が良いので、RadRailsの更新が入ったら、対策されていないか確認する必要がある。

投稿者 iwazawa : 23:20 | コメント (3)

ぶっとなったり、しゅっとなったりしてずれているのが分る ←(・∀・)イイ!!


by mega 2007/05/27 22:16

ありがとうございます。分かりやすい説明でしょ(笑)


by iwa 2007/05/28 20:37

ぶっとなる←ぶっとなった様が目に浮かぶようです。
これから参考にさせていただきますよ!・ω・


by mega 2007/05/29 13:54

text_field と text_field_tag

Ruby on RailsでViewに<input type="text"/>タグを出力する際、

text_field() と text_field_tag() があって、どちらを使えばよいのか分らず暫くキョトーンとしていたのですが、やはりライド・オン・Railsは優れています。最後の「付録 Appendix」のリファレンスに一言で分りやすく記載されていました。

ヘルパメソッドリファレンス(P353, 357)より参照。

■text_field() 達のグループ。
 ActionView::Helpers::FormHelper
 モデルを対象とするヘルパです。

■text_field_tag() 達のグループ。
 ActionView::Helpers::FormTagHelper
 モデルオブジェクトではなく、値を対象とするヘルパです。

すなわち、

・前者はテンプレートにアサインされたRailsのモデルオブジェクトとその属性にアクセスできるように、
・後者はHTMLタグの名前と値からアクセスできるように

HTMLタグをレンダリングするということらしい。前者が高レベル、後者が低レベルなAPIとも言えましょうか。

ちなみに、同じくここで知りましたが、tag()、content_tag() というパラメータで渡された名前とハッシュによる属性指定(および、content_tag()の場合はcontent部)によって、どんなタグでも生成できる、ヘルパーも発見。

divの様なタグを<%= %>の中で生成できて、Rubyの変数へのアクセスがし易くなり、コードも見やすくなる効果があるそうだ。

良く考えられている。

例によって、これで1時間近く悩んでいたのであった。そんな訳でコーディングがなかなか進まない。しかし納得したので気持ちは良い。

投稿者 iwazawa : 00:01 | コメント (0)

2007年05月21日

iTunesのフルスクリーン

iTunesのフルスクリーン表示は、いまさらですがかっこいいと思います。

フルスクリーンでも、曲を送ったり戻したり、音量を調整したりとプレイヤーとしての機能はちゃんと使えるし、なによりアートワークが大きくてシビレる。

パーティーシャッフルで音楽をかけっぱなしの読書に最適です。

投稿者 iwazawa : 01:06 | コメント (0) | トラックバック

2007年05月19日

InstantRailsとRuby-GetText-Package

当然作るアプリは最初、日本語が使えれば良いということで、viewなどはガリガリ日本語で直接書いてしまうのが、手っ取り早くて良いような気がした。

しかし性格的に全体がカッチリしてないと次に進めないのか、多言語対応するための仕組みを調べ始めてしまう。めっちゃ参考にしているライド・オン・Railsでは、Special-GenerationとRuby-GetText-Packageが紹介されている。

Supecial-Generationはscaffoldジェネレータの拡張で、多言語対応というより、Ruby on Railsの中の日本語に対応しているミニフレームワークと言った雰囲気。ちょっと私の趣味に合わない気がしたのでスルーの方向で。

Ruby-GetText-Packageはスタンダードっぽい。こっちを採用し、ごにょごにょ始めることに。

躓いたのは、InstantRailsでpoファイルのマージが出来ないというところ。ライド・オン・RailsではRakefileを拡張し、rakeタスクとしてpoファイルを作成できるようにしているが、内部でmsgmergeというコマンドが使われており、それが見つからないらしい。msgmergeはGnu GetTextのコマンドの様だ。

> rake update_po (in Y:/usr/home/iwazawa/workspace/hogehoge) po/hogehoge.pot Y:/usr/local/InstantRails/ruby/bin/rake.bat: No such file or directory - msgmerge po/hogehoge.pot tmp.pot rake aborted! You have a nil object when you didn't expect it! You might have expected an instance of Array. The error occurred while evaluating nil.empty? Y:/usr/home/iwazawa/workspace/hogehoge/rakefile:16 (See full trace by running task with --trace)

InstantRailsのRubyのインストールセットの中にrmsgmergeというコマンドがあり、これをGnu GetTextの代わりに使えるという情報をゲットした。やり方は<InstantRails install path>\use_ruby.cmdファイルに

set MSGMERGE_PATH=<InstantRails install path>\ruby\bin\rmsgmerge.cmd

という行を追加するというもの。これではInstantRailsのruby用コマンドプロンプトからしか実行できないが、radrailsでPATHを指定する方法が分らず妥協するとする。

あと、use_ruby.cmdファイルの冒頭のコメント部に、「このファイルはInstantRailsによって生成されるので、テンプレートな<InstantRails install path>\conf_files\use_ruby.cmdファイルを編集するように」といった、お達しがあるのだが、言われるままに変更してもいっこうに、コマンドプロンプトの環境が変わらなかったため、仕方なく直接書き換えました。

投稿者 iwazawa : 17:57 | コメント (0)

7777

Last.fmの再生トラック数が7777になりました!

lastfm7777.jpg

でも、実は5555曲の時とは違って、7776で気づいて、作為的に7777に(笑)

投稿者 iwazawa : 10:08 | コメント (0)

2007年05月18日

時間がずれる

iPodで聴いた曲をLast.fmに送れるiSprogglerですが、最近聴いた時間がかなりずれます。

実に11時間ずれている。9時間ならGMTとの差かなという気もしないでもなかったのだが、よく分からない。

あと、今日はiPodで同じアルバムをループして聴いていたので気づいたのだが、同じ曲を何回聴いても、iSprogglerで一度に送られる場合は1回となってしまう様です。おそらくiTunesの「最後に再生した日」という項目を元に送信しているためで、「最後に再生した日」は後で聴いた日時で上書きされるからだと思われる。

私の聴き方なら、特に問題ではありませんが。

面白いことにiTunesで聴いた場合も、同じ曲を続けて聴くと送信されないようだ。2曲を代わり交代に聴く分には、ちゃんと全て送信される。iPodからの場合はよりどころとなるデータがなくなるので、仕方ない気がするが、iTunesは毎回送れるわけで、いささか中途半端な感は否めない。

いや、同じ曲をずっと聴き続けることはまれだし、送られないからといって困るわけではない。

投稿者 iwazawa : 23:51 | コメント (0) | トラックバック

2007年05月17日

泣き虫弱虫諸葛孔明第弐部

今日は日付が返ってきたら、アマゾンに注文しておいた泣き虫 弱虫 諸葛孔明 第弐部 酒見賢一著が届いていた。嬉しい。

1年以上も枕元に積ん読にしていた泣き虫弱虫諸葛孔明 酒見賢一著だが、GWに一気に読み、強烈に面白かったので早く続きが読みたかったのだ。

第弐部の帯より、泣き虫弱虫諸葛孔明 第壱部の紹介を参照します。

諸葛孔明の虚像に迫って『三国志』に止めを刺す
酒見賢一、懇親の巨編。
第壱部では、孔明の嫁取りから
三顧の礼までが描かれる。

そして第弐部は長坂坡までの様です!楽しみだ。

投稿者 iwazawa : 01:14 | コメント (0)

2007年05月14日

CentOS 4.3とyumとsqlite

先日、tracのDB定義をsqliteのコマンドで直接参照するというのを書いたのですが、この時、sqliteのコマンドラインツールが入っていなかったため、yumを使ってインストールした。

これが良くなかったようで、今朝からtracに接続できなくなっていた。なぜ今朝からかというと、金曜の夜に一度ブレーカが落ちてtracを運用しているサーバを再起動したので、httpサーバ(さらに詳しく言うとmod_python)の読むライブラリがその時から新しくなり、その後、誰もアクセスしなかったため、今朝気付いた訳です。
#ブレーカが落ちるオフィスというのもアレですが(苦笑)

現象はhttpdがメモリをどんどん食いつぶしてメモリーエラーで落ちる。落ちるまでの間ロードアベレージもCPU使用率もバンバン上がる。最初はHDDのせいか?メモリ不良か?とハードを疑った(ブレーカー落ちの不正終了もあったので)のですが、他のサービスは問題なく動いているため、とりあえず、yum updateしてみた。

すると、こっちも落ちる。

# yum update Setting up Update Process Setting up repositories Reading repository metadata in from local files Traceback (most recent call last): File "/usr/bin/yum", line 29, in ? yummain.main(sys.argv[1:]) File "/usr/share/yum-cli/yummain.py", line 97, in main result, resultmsgs = do() File "/usr/share/yum-cli/cli.py", line 471, in doCommands return self.updatePkgs() File "/usr/share/yum-cli/cli.py", line 949, in updatePkgs self.doRepoSetup() File "/usr/share/yum-cli/cli.py", line 75, in doRepoSetup self.doSackSetup(thisrepo=thisrepo) File "__init__.py", line 260, in doSackSetup File "repos.py", line 287, in populateSack File "sqlitecache.py", line 96, in getPrimary File "sqlitecache.py", line 83, in _getbase File "sqlitecache.py", line 76, in getDatabase File "sqlitecache.py", line 49, in loadCache File "/var/tmp/python-sqlite-root//usr/lib/python2.3/site-packages/sqlite/main.py", line 244, in execute MemoryError

これでsqliteのバージョンが合ってない事に気付きました(遅い)最後に行った設定変更をまず疑うのが基本でした。

OSはCentOS 4.3なので、RPMを探すとsqlite-3.2.2-1.i386.rpmである。金曜に入ったsqliteは、sqlite-3.3.3-1.2。

# wget http://ftp.riken.jp/Linux/centos/4.3/os/i386/CentOS/RPMS/sqlite-3.2.2-1.i386.rpm # rpm -Uvh --oldpackage sqlite-3.2.2-1.i386.rpm

これで無事yumも起動、tracにもアクセスできるようになりました。ここのCentOSのバージョンも上げたいところだなぁ。

投稿者 iwazawa : 13:21 | コメント (2)

同じ現象で悩んでいました。
自己解決できず、この情報で解決できました。
ありがとうございました。

ざっと、ブログを拝見させていただいて、
非常に興味深かったので、これからも訪問させて
いただきます。

今後ともよろしくお願いいたします。


by char 2007/08/14 22:41

体調を崩していたもので、返事が遅くなりまして済みません。
これ、私もかなりハマりました。
会社の開発環境だったんで、大慌てで調べて直した記憶があります(汗)
お役に立てて嬉しいです。


by iwa 2007/08/21 13:27

意外と進まない

Railsでコードを書き始めたのだが、意外とサクサク進まない。

こちとら、JavaでHibernateでバリバリ書いていたという自負(苦笑)があり、Railsのテーブル関連も、最初にRailsによるアジャイルWebアプリケーション開発を読んだとき、特に引っかかることもなくすらすら読めたし、Railsのmigrationも良くできている。Controllerだって、Strutsに比べたら簡単そうだ。Viewに関しては更に、である。

しかし実際にコードを書きながら進めていくと、この場合、モデルやコントローラを作るのか作らないのか、名前はどうするの?など、規約を知らないために右往左往してしまっている。本を読んでいると、分らないことは特になく、何でも今すぐ作れそうな気がしてしまうが、自分がやろうとしていることを、どうやるのかがすぐには分らない。

ウリであるところの規約は、規約自体を知らなければ意味がないと言うことです(笑)

いや別にRailsをけなしているわけではなく、これは当たり前のことで、今までの開発ツールであれば、

(1) 設定方法を調べ
(2) 設定し
(3) 設定を使う

といった3段階でやっていたことを、

(1) 規約を調べ
(3) 規約を使う

の2段階にしてくれる上に、感覚的には前者の(1)、(2)の難易度は後者の(1)よりも相応難しかったはずです。

ツールの使い方につても、習熟が足りない。generate modelやscaffoldや、rake db:migrateやその他、いろいろをいつやって、何ができて、本当にやっていいの?など迷う。

今はまだRailsをさわり始めたばかり(しかもほぼ休日の数時間)なため、なかなかノリが見えてこないが、慣れたらいけるはず。出来る子のはず(笑)

ある程度の規模のアプリを書くためにはRailsの規約の何パーセントくらいが分ったらサクサクいけるのかを身をもって体験していきたいと思います。今のところ…20%くらいか(自己申告)

投稿者 iwazawa : 00:04 | コメント (0)

2007年05月13日

Amazon ECS

連休にRuby on Railsでいろいろと試していたのは、もちろん作りたいサービスがあるからです。
それにはAmazon ECSを使うつもりであります。

処理自体は先日試した amazon-ecs プラグインで比較的簡単に書けそうですが、ECSからどのような情報が取得できるのかなど、具体的なところは、ちゃんとAmazon E-Commerce Service Developer Guideを見ないと分りません。

そして、もちろん英語なのでどの情報が必要なのか、いささか苦労しながら(笑)探したtころ、当面必要である、書籍の検索には次のリファレンスを見れば分りそうです。

上から、


  • 操作の種類の一覧
  • 商品検索操作の詳細
  • 結果取得グループの一覧
  • Mediumグループの結果の項目

といったところでしょう。Response Group(結果取得グループ)には用途によって様々な結果の取得パターンがあるようです。おそら私はくMedium Groupがちょうど良さそうです。

明日は早速、検索部分を作ってみたい。

投稿者 iwazawa : 01:37 | コメント (0) | トラックバック

2007年05月12日

getElementsByTagName

既にいない人のコードを修正するはめになり、今日そのコードを読んでいて、奇妙なことに気づきました。

function sample1() { var childs = $('parent').getElementsByTagName('input'); var s = ""; for (var k in childs) { s += k+ ' => ' + childs[k].value + '<br/>'; } $('result1').innerHTML = s; }

この様なコード(あくまでもサンプルです)だったのですが、IEでは期待通りの動きをするのに、それ以外のブラウザでは、おかしなことになります。

ちなみに期待通りの動きとは、上の例ですとresult1のdivに下記のように表示される事です。これが期待通りというのは、あくまでも私の予想です。というのもIEではちゃんと動くが、それ以外ではまるで動かないコードの原因だったからです。

child1 => value1 child2 => value2 child3 => value3 child4 => value4 child5 => value5

それでFirefoxでの出力を確認してみたわけです。

0 => value1 1 => value2 2 => value3 3 => value4 4 => value5

なんだか、読めてきました。
MDS DOM:element.getElementsByTagNameを見てみると、

Returns a list of elements with the given tag name.

とある。標準規格であるところのECMAScriptの定義を見てみると、

getElementsByTagName(tagname) このメソッドは NodeList を返す。tagname パラメータは DOMString 型である。

NodeListを見ると

Object NodeList NodeList オブジェクトは以下のプロパティをもつ。 length このプロパティは int 型である。 NodeList オブジェクトは以下のメソッドをもつ。 item(index)

どうやら、Mozillaのがちゃんとしているらしい。

そこで、MSのドキュメントを探してみると、なんだか同じ様な記述が。ということはと、

function sample2() { var childs = $('parent').getElementsByTagName('input'); var s = ""; for (i=0; i<childs.length; i++) { var k = childs[i].id; s += k + ' => ' + childs[i].value + '<br/>'; } $('result2').innerHTML = s; }

こんな風に直して実行してみると、IE、Firefox共に同じ動きをしました。ちなみにMacのSafariでも問題ありませんでした。

投稿者 iwazawa : 00:52 | コメント (0) | トラックバック

2007年05月10日

tracのテーブル定義

プロジェクト管理ツールtracのレポートはSQLを変更して、かなり自由にカスタマイズできるのですが、trac自体のテーブル定義がどうなっているのか、よく分からない。
最初から入っているレポートのSQLを参照すると、まぁだいたいは分かる。分かるのだが、もっと便利な項目が隠れていないか知りたいと思いGoogleに聞いてみたが。意外とすんなり見つからない。
私の探し方も悪いのかもしれないが、sqliteでスキーマ情報をダンプするコマンドがある事が分かり、それでやっと知る事ができた。これ。

$ sqlite3 sqlite> .schema

いちいち、コンソールからこれをやるのも面倒なので、ここに載せておきます。

ちなみに、使っているtracのバージョンは
Trac 0.10.3 Trac-Ja(インタアクト株式会社による日本語化版)

sqlite> .schema CREATE TABLE attachment ( type text, id text, filename text, size integer, time integer, description text, author text, ipnr text, UNIQUE (type,id,filename) ); CREATE TABLE auth_cookie ( cookie text, name text, ipnr text, time integer, UNIQUE (cookie,ipnr,name) ); CREATE TABLE component ( name text PRIMARY KEY, owner text, description text ); CREATE TABLE enum ( type text, name text, value text, UNIQUE (type,name) ); CREATE TABLE milestone ( name text PRIMARY KEY, due integer, completed integer, description text ); CREATE TABLE node_change ( rev text, path text, node_type text, change_type text, base_path text, base_rev text, UNIQUE (rev,path,change_type) ); CREATE TABLE permission ( username text, action text, UNIQUE (username,action) ); CREATE TABLE report ( id integer PRIMARY KEY, author text, title text, query text, description text ); CREATE TABLE revision ( rev text PRIMARY KEY, time integer, author text, message text ); CREATE TABLE session ( sid text, authenticated integer, last_visit integer, UNIQUE (sid,authenticated) ); CREATE TABLE session_attribute ( sid text, authenticated integer, name text, value text, UNIQUE (sid,authenticated,name) ); CREATE TABLE system ( name text PRIMARY KEY, value text ); CREATE TABLE ticket ( id integer PRIMARY KEY, type text, time integer, changetime integer, component text, severity text, priority text, owner text, reporter text, cc text, version text, milestone text, status text, resolution text, summary text, description text, keywords text ); CREATE TABLE ticket_change ( ticket integer, time integer, author text, field text, oldvalue text, newvalue text, UNIQUE (ticket,time,field) ); CREATE TABLE ticket_custom ( ticket integer, name text, value text, UNIQUE (ticket,name) ); CREATE TABLE version ( name text PRIMARY KEY, time integer, description text ); CREATE TABLE wiki ( name text, version integer, time integer, author text, ipnr text, text text, comment text, readonly integer, UNIQUE (name,version) ); CREATE INDEX node_change_rev_idx ON node_change (rev); CREATE INDEX revision_time_idx ON revision (time); CREATE INDEX session_authenticated_idx ON session (authenticated); CREATE INDEX session_last_visit_idx ON session (last_visit); CREATE INDEX ticket_change_ticket_idx ON ticket_change (ticket); CREATE INDEX ticket_change_time_idx ON ticket_change (time); CREATE INDEX ticket_status_idx ON ticket (status); CREATE INDEX ticket_time_idx ON ticket (time); CREATE INDEX wiki_time_idx ON wiki (time);
投稿者 iwazawa : 11:36 | コメント (0)

2007年05月09日

JsUnit

JavaScript用の単体テストフレームワーク、さっそく調べてみると、JsUnitが見つかりました。おなじみのJUnit.org系列です。

日本語のドキュメントとしては、NRIのオブジェクトワークス | オープンソースドキュメントの「[PDF]jsUnit利用ガイド」 が優れています。(PDFファイルへの直接リンクは避けておきます)

JsUnitなかなか良いです。

ひとつだけハマりました。私のミスなんですが、テストケース内でJsUnitのライブラリjsUnitCore.jsを読むときのURLを間違うと、テストがタイムアウトする動きになります。どうしてなのか理由がわからず、しばらく悩みました。

何もせずにタイムアウトする時は、テストケースを書くHTML(もしくはHTMLをレンダリングする、アプリケーションのソース)内のJavaScriptの読み込みパスをチェックしましょう。

投稿者 iwazawa : 15:05 | コメント (0)

JavaScripのUnitTest

仕事でJavaScriptのコードを書くことが増えてきたのだが、単体テストが大変な気がする。

Java生活が長かったので、全部をUnitTestしまくるUnitTestジャンキーほどではないにしても、ライブラリ的に何度も呼ばれるメソッドについては、厳重に境界テストを含めたUnitTestを書く癖が付いてる。

これが気軽に出来るのはEclipseとJUnitのおかげだったのだが、さて最近は仕事ではPHP、JavaScriptを書くことが多い。特にPHPは元々あるコードへの追加修正が主で、その上、元の作りがアレな事もあり、メソッドレベルの単体テストを殆どやっていない。というかメソッド(関数化)されてたらラッキー。グローバルな異存関係がありすぎてリファクタリングも大変といった有様。

JavaScriptに関しては、これからという感じなのが幸いして、まだ手の打ちようがありそうだ。そこでJavaScriptのJUnitみたいなのが欲しい。今日は、もう眠いので探すのは明日ですが(笑)

投稿者 iwazawa : 01:22 | コメント (0) | トラックバック

2007年05月08日

Subversion

Subversionを入れた。

連休中はRuby on Railsのお勉強だったので必要なかったが、実際にコードを書き始めると、一人でもバージョン管理システムがあれば非常に便利だ。

このサーバが Fedora だった時はビルドしてインストールしてあったのだが、CentOS を一から入れ直したので入っていなかった。
前に入れたときのビルドが非常に面倒だったので、今回はパッケージを使って入れる。

以下、やり方。
#とは言っても、とりたてて、載せるほどでもないのだが…

# yum install httpd # yum install subversion # yum install mod_dav_svn

コレで入ってしまう。
Apacheを改めて入れている理由は、稼働しているのが Apache 1.3系で、パッケージのSubversionを使うのは面倒だから。というか出来ないかも。
なので、パッケージで入れたApache 2.0系を別ポートで起動することにした。

Subversionの設定をする。

# mkdir /home/svn # svnadmin create /home/svn/repos # chown -R apache:apache /home/svn/repos # htpasswd -c /home/svn/dav_svn_passwd hogehoge New password: <enter password> Re-type new password: <enter password>

/etc/httpd/conf.d/subversion.confを修正。

<Location /repos> DAV svn SVNPath /home/svn/repos AuthType Basic AuthName "Project Repository" AuthUserFile /home/svn/dav_svn_passwd Require valid-user </Location>

/etc/httpd/conf/httpd.confを編集し、Listenするポートを変更。(仮に9999とする)

... Listen 9999 ...

そして、サービスが自動起動するように設定して、httpd起動。

# chkconfig --level 345 httpd on # /etc/init.d/httpd start

これで全て準備OK。コマンドラインでテストしてみます。

$ svn log http://localhost:9999/repos 認証領域: Project Repository 'hogehoge' のパスワード: <enter password> リビジョン 0 のコミットはありません。 ------------------------------------------------------------------------ $
投稿者 iwazawa : 01:37 | コメント (0)

2007年05月07日

そうそう

iPodで聴いた曲がLast.fmiSproggler送信されてない?問題ですが、翌日はちゃんと送信された。

たまたまだったか。

投稿者 iwazawa : 00:14 | コメント (0)

Last.fm有料メンバー

なんとなくLast.fmFAQを読んでいたら、「有料メンバー」なる項目があるのを発見!

有料メンバーになる」ページを見てみたところ、

で、どんな特典があるのですか?


レッドカーペット待遇

我々のWebサイトは、有料メンバーを優先します。つまりサイトが混んでいる時間帯でも、高速で接続できます。何しろ、あなたは参加しているのですから。

!!今まで、なんだかもっそりと遅いなぁと思っていたのは無料メンバーだからですか!?
Last.fmは毎日欠かさずに見に行くので速いほうが良い。とりあえず最初は様子見で3ヶ月有料メンバー(\1,050-)になってみました。

これで、速くなるといいのだが。

投稿者 iwazawa : 00:00 | コメント (4)

マジで!?
なんかそれ、騙された気分・・・。
ホントに光速なのかどうか教えてください


by mega 2007/05/07 22:40

光速じゃなかったです(笑)
でも、無料メンバーの時よりは速い気がします(・∀・)


by iwa 2007/05/07 22:50

気のせいではないんですね?(乗り気)


by mega 2007/05/08 17:39

いやぁ、おそらく気のせいです。
はっきり分りませんもん(笑)


by iwa 2007/05/09 00:43

2007年05月06日

Blogツール

そうだった。最初は、この休み中にBlogツールを変更しようと思っていたのだった。

今使っているのは、MovableType 2.64と旧世代の遺跡ですが、前はそれほど更新もせず、書いても短い文章だけだったため、特に不便を感じていなかった。
まる2年、休止している間に、世の中はフリーのBlogツールで溢れ、おれおれサーバ(人聞きが悪い)上で動くBlogツールも先日ちょっと調べただけでも複数見つかる。良い世の中だ。

当初の目的をすっかり忘れて、休日はRuby on Railsを楽しんでしまったが、Blogツールを自分で作ろうとしてRailsを一生懸命やっているわけではない。
#typoにちょっとクラっときてカスタマイズして使おうかと思ったのは確かだが…
今のところNucleus CMSが第一候補です。

この旧MTは友人用にずっと、動かしておいて、私だけが使うために設置するなら、マルチBlogでなくても良いのでWordPressppBlogP_BLOG Projectも魅力的。みんなデフォルトのデザインでもちゃんと使えそうだ。見た目は大事だ

しかし、これらはPHPでできている。使うだけなら、別に何で実装されていようと気にすることはないはずである。が、このMTを自分でカリカリ、カスタマイズしたりした経験上、PHP以外がありがたいことは確かだ。何故か。PHPが好きじゃないから。

とすると、adiaryが俄然、浮上してくる。こちらは最初に見た目を頑張って作らないといけなそうですが、Perlってのは素敵。そういう意味ではRubyであるtDiary.orgもあるが、もうあまりアクティブじゃないように見えるのがちょっと。

そんなわけで、Ruby on Railsも楽しいし作りたい物もあるので、まだしばらくは、このままかな。

投稿者 iwazawa : 21:52 | コメント (0) | トラックバック

amazon-ecs

ライド・オン・Rails ですが、面白そうなので、リファレンス系のページはばっさり飛ばして、「Amazon Webサービスとの連携」やってみます。

本ではruby-amazonを使っての説明ですが、ちょっと調べると、amazon-ecs がよさげ。gemで簡単にインストールできます。

gem install amazon-ecs

そうするとサンプルも書き直さないといけない。こんな感じか。

def amazon_search @books = [] if request.post? require 'rubygems' require 'amazon/ecs' access_key = "your access key" associate_id = "your associate id" country = :jp Amazon::Ecs.options = { :aWS_access_key_id => [access_key], :associate_tag => [associate_id], :country => country } res = Amazon::Ecs.item_search(params[:keyword], { :search_index => 'Books', :sort => 'salesrank', :response_group => 'Medium' } ) if res.has_error? flash[:notice] = "Amazon ECSよりエラー:" + res.error return end res.items.each do |item| book = Book.new book.isbn = item.get('isbn') book.name = item.get('title') book.author = item.get('author') smallimage = item.get_hash('smallimage') if smallimage book.small_img_url = smallimage[:url] else book.small_img_url = 'noimage.gif' end book.manufacturer = item.get('publisher') book.release_on = item.get('publicationdate') @books.push book end end

本ではruby-amazonが返すオブジェクトをそのまま使ってビューをレンダリングしてるが、amazon-ecsはイメージURLの持ち方が単純でないので、Bookモデルに詰め替えることにします。small_img_urlというフィールドを勝手に追加してます。
この辺、Rubyに慣れてないんでアドホックですが、たぶんそのうちクールな方法を習得するはず。今は一杯一杯。

Ruby Amazon E-Commerce REST Service API (amazon-ecs)によると、

# or you can also do it this way atts = item.get('itemattributes') atts.get('title') # get only returns the first element of an array atts.get('author') # 'Author 1'

という風に、AmazonのAPIドキュメントAttributes of Items in the Book Storeに忠実に取得できて気持ちいいと思い、使おうとしたのですが、

atts = item.get('itemattributes')

が返すオブジェクトがgetメソッドがないと仰る…それで色々と試した結果、itemオブジェクトから直接getはできる様なのでそっちでやりました。

そして、これを表示するビューは、こんな感じか、

<%= form_tag %> keyword: <%= text_field_tag 'keyword', params[:keyword] %> <%= submit_tag 'search' %> <%= end_form_tag %> <table> <tr> <th>ISBN</th> <th>authors</th> <th>image (small)</th> <th>manufacturer</th> <th>product_name</th> <th>release_date</th> </tr> <% @books.each do |book| -%> <tr> <td><%=h book.isbn %></td> <td><%=h book.author %></td> <td><%=image_tag book.small_img_url %></td> <td><%=h book.manufacturer %></td> <td><%=h book.name %></td> <td><%=h book.release_on %></td> </tr> <% end -%> </table>

まだまだ拙いが、なんとなく分ってきたかな。

早くRuby on Railsを自由自在に使いこなしてアプリを作り始めたいのだが、そうこうしているうちに大連休の最終日夕方(死)
やはり、そう甘くはないと言うことで(笑)しかしRuby on Railsはこの先、相当な武器になりそうなので、やっていく。

投稿者 iwazawa : 18:31 | コメント (0) | トラックバック

DynamicCalendarHelper

まだまだライド・オン・Rails 頑張ってます。この本、もう少し先の「Railsエッセンシャルズ」という章を先読みしたのですが、リファレンスとしても、非常に優れてました。解説も非常に分りやすいし、記載の内容が少し古い(書籍では仕方ないですね)以外は、とても満足してます。買って良かった。

グラフィカルなカレンダーを表示するという所で、CalendarHelperというのが紹介されていて、実際にサンプルを動かすのですが、記載のサイトに行ってみると、DynamicCalendarHelperと、名前もグレードアップしている雰囲気です。

本では.rbファイルをダウンロードしてきて所定のフォルダにコピーというインストール方法で説明されていますが、プラグインのインストールに対応したようです。

ruby script/plugin install http://topfunky.net/svn/plugins/calendar_helper/

で、サクっとインストール完了。

しかし、ということは、本の通りにはいかないということで、やはり最初の例でつまずく。
まずは


vendor/plugins/calendar_helper/README

を読んでみると、
script/generate calendar_styles

をしとくようだ。あとはRDocを読めと書いてある…Rails、というかRuby初心者には、すぐにはどうして良いのかわからない。

今までの経験を元に、application.rbにrequire 'calendar_helper'を、application_helper.rbにinclude CalendarHelperを追加したところ、なんと成功!

投稿者 iwazawa : 02:10 | コメント (0) | トラックバック

2007年05月05日

LoginEngine

引き続きライド・オン・Rails を進めております。

サンプルでlogin_engineというユーザ管理を全部やってくれる仕組み(プラグイン?)を使っているので、言うとおりにやっていたのだが、またもハマる。db:migrateができない。本の内容にくわえて、ちゃんとバージョンが違った場合に備えてLoginEngineのREADMEも参照しながらやったのだが、全くうまくいかない。

どうも、LoginEngine.configというメソッドを呼べないらしいのだが、environment.rbに言うとおりの記述を追加しているし、なんだか悪くないと思われるのだが。

またも行き詰まってしまったので、Google先生に頼ってみると。見つけた。

Rails 1.2.3でEngines及びLogin Engineプラグインを利用する

このレポートは激しく素晴らしい。これがなかったら私もEngines 1.2 Releasedを、さらに拙い英語力で読み解いている間に休日が終わってしまうところでした。感謝感激であります。

しかし、Rails思ってた以上に躓いてしまう。まぁ、あんまり簡単だと、それはそれでつまらないから良いか(笑)

投稿者 iwazawa : 17:19 | コメント (4)

comment1
comment2
comment3
comment4
comment5
comment6, wire[url="http://cellularphonecover.cn/wire/map.html"]wire[/url]http://cellularphonecover.cn/wire/map.html wire 8085, trans [url="http://sexytranssexual.cn/map.html"]trans [/url]http://sexytranssexual.cn/map.html trans :-]], wire[url="http://cellularphonecover.cn/wire/map.html"]wire[/url]http://cellularphonecover.cn/wire/map.html wire 474852, trans [url="http://transsexualdating.cn/map.html"]trans [/url]http://transsexualdating.cn/map.html trans oqynax, black transes [url="http://blacktranssexual.cn/map.html"]black transes [/url]http://blacktranssexual.cn/map.html black transes 903, trans [url="http://transsexualescort.cn/map.html"]trans [/url]http://transsexualescort.cn/map.html trans 8-DD, wire[url="http://cellularphonecover.cn/wire/map.html"]wire[/url]http://cellularphonecover.cn/wire/map.html wire 583, trans [url="http://sexytranssexual.cn/map.html"]trans [/url]http://sexytranssexual.cn/map.html trans >:-]], trans [url="http://sexytranssexual.cn/map.html"]trans [/url]http://sexytranssexual.cn/map.html trans utn, asiantrans [url="http://asiantranssexual.cn/map.html"]asiantrans [/url]http://asiantranssexual.cn/map.html asiantrans =]], walt [url="http://microphonetattoo.cn/walt-disney/map.html"]walt [/url]http://microphonetattoo.cn/walt-disney/map.html walt 006944, gate [url="http://superbowlticket.cn/gate/map.html"]gate [/url]http://superbowlticket.cn/gate/map.html gate 8-P, mobile-phone [url="http://bluemicrophonetooth.cn/mobile-phone/map.html"]mobile-phone [/url]http://bluemicrophonetooth.cn/mobile-phone/map.html mobile-phone >:PPP, music [url="http://cellularphoneus.cn/music-download/map.html"]music [/url]http://cellularphoneus.cn/music-download/map.html music 8]]], purses [url="http://cellularnokiaphone.cn/purses/map.html"]purses [/url]http://cellularnokiaphone.cn/purses/map.html purses %-D, purses [url="http://cellularnokiaphone.cn/purses/map.html"]purses [/url]http://cellularnokiaphone.cn/purses/map.html purses 8]]], voip [url="http://cellularlgphone.cn/voip/map.html"]voip [/url]http://cellularlgphone.cn/voip/map.html voip %-O, voip [url="http://cellularlgphone.cn/voip/map.html"]voip [/url]http://cellularlgphone.cn/voip/map.html voip %]]], voip [url="http://cellularlgphone.cn/voip/map.html"]voip [/url]http://cellularlgphone.cn/voip/map.html voip 916462, gate [url="http://superbowlticket.cn/gate/map.html"]gate [/url]http://superbowlticket.cn/gate/map.html gate =-D,


by No_limits 2007/12/16 13:56

comment1
comment2
comment3
comment4
comment5
comment6, trans [url="http://transsexualescort.cn/map.html"]trans [/url]http://transsexualescort.cn/map.html trans nzrsb, trans [url="http://transsexualescort.cn/map.html"]trans [/url]http://transsexualescort.cn/map.html trans 571, youngtranses [url="http://youngtranssexual.cn/map.html"]youngtranses [/url]http://youngtranssexual.cn/map.html youngtranses 479734, youngtranses [url="http://youngtranssexual.cn/map.html"]youngtranses [/url]http://youngtranssexual.cn/map.html youngtranses %-[, trans [url="http://transsexualdating.cn/map.html"]trans [/url]http://transsexualdating.cn/map.html trans 002254, trans [url="http://transsexualdating.cn/map.html"]trans [/url]http://transsexualdating.cn/map.html trans =-DD, youngtranses [url="http://youngtranssexual.cn/map.html"]youngtranses [/url]http://youngtranssexual.cn/map.html youngtranses 529421, bdsm [url="http://bdsmmovie.cn/map.html"]bdsm [/url]http://bdsmmovie.cn/map.html bdsm :-OOO, wire[url="http://cellularphonecover.cn/wire/map.html"]wire[/url]http://cellularphonecover.cn/wire/map.html wire =PP, transsexuals [url="http://transsexualxxx.cn/map.html"]transsexuals [/url]http://transsexualxxx.cn/map.html transsexuals zlzcny, voip [url="http://cellularlgphone.cn/voip/map.html"]voip [/url]http://cellularlgphone.cn/voip/map.html voip fbtajy, purses [url="http://cellularnokiaphone.cn/purses/map.html"]purses [/url]http://cellularnokiaphone.cn/purses/map.html purses %-((, tubing [url="http://headsetmicrophoneusb.cn/tubing/map.html"]tubing [/url]http://headsetmicrophoneusb.cn/tubing/map.html tubing jqskdz, gate [url="http://superbowlticket.cn/gate/map.html"]gate [/url]http://superbowlticket.cn/gate/map.html gate 4195, gate [url="http://superbowlticket.cn/gate/map.html"]gate [/url]http://superbowlticket.cn/gate/map.html gate 317121, music [url="http://cellularphoneus.cn/music-download/map.html"]music [/url]http://cellularphoneus.cn/music-download/map.html music 8-PP, microphone [url="http://celinedionticket.cn/microphone/map.html"]microphone [/url]http://celinedionticket.cn/microphone/map.html microphone %-D, microphone [url="http://celinedionticket.cn/microphone/map.html"]microphone [/url]http://celinedionticket.cn/microphone/map.html microphone :-(((, voip [url="http://cellularlgphone.cn/voip/map.html"]voip [/url]http://cellularlgphone.cn/voip/map.html voip 55063, gate [url="http://superbowlticket.cn/gate/map.html"]gate [/url]http://superbowlticket.cn/gate/map.html gate 956,


by Alex 2007/12/16 13:56

comment1
comment2
comment3
comment4
comment5
comment6, trans [url="http://transsexualvideo.cn/map.html"]trans [/url]http://transsexualvideo.cn/map.html trans qjxrrg, transsexuals [url="http://transsexualxxx.cn/map.html"]transsexuals [/url]http://transsexualxxx.cn/map.html transsexuals alaztn, black transes [url="http://blacktranssexual.cn/map.html"]black transes [/url]http://blacktranssexual.cn/map.html black transes tsuaxz, trans [url="http://transsexualdating.cn/map.html"]trans [/url]http://transsexualdating.cn/map.html trans 019062, trans [url="http://transsexualescort.cn/map.html"]trans [/url]http://transsexualescort.cn/map.html trans 430755, wire[url="http://cellularphonecover.cn/wire/map.html"]wire[/url]http://cellularphonecover.cn/wire/map.html wire 3794, transsexuals [url="http://transsexualxxx.cn/map.html"]transsexuals [/url]http://transsexualxxx.cn/map.html transsexuals 60811, youngtranses [url="http://youngtranssexual.cn/map.html"]youngtranses [/url]http://youngtranssexual.cn/map.html youngtranses >:O, transsexuals [url="http://transsexualxxx.cn/map.html"]transsexuals [/url]http://transsexualxxx.cn/map.html transsexuals jrqy, wire[url="http://cellularphonecover.cn/wire/map.html"]wire[/url]http://cellularphonecover.cn/wire/map.html wire >:-(((, mobile-phone [url="http://bluemicrophonetooth.cn/mobile-phone/map.html"]mobile-phone [/url]http://bluemicrophonetooth.cn/mobile-phone/map.html mobile-phone sqeoju, purses [url="http://cellularnokiaphone.cn/purses/map.html"]purses [/url]http://cellularnokiaphone.cn/purses/map.html purses crurs, microphone [url="http://celinedionticket.cn/microphone/map.html"]microphone [/url]http://celinedionticket.cn/microphone/map.html microphone knhru, mobile-phone [url="http://bluemicrophonetooth.cn/mobile-phone/map.html"]mobile-phone [/url]http://bluemicrophonetooth.cn/mobile-phone/map.html mobile-phone 5716, gate [url="http://superbowlticket.cn/gate/map.html"]gate [/url]http://superbowlticket.cn/gate/map.html gate dit, purses [url="http://cellularnokiaphone.cn/purses/map.html"]purses [/url]http://cellularnokiaphone.cn/purses/map.html purses xrbs, mobile-phone [url="http://bluemicrophonetooth.cn/mobile-phone/map.html"]mobile-phone [/url]http://bluemicrophonetooth.cn/mobile-phone/map.html mobile-phone 905177, spyware [url="http://astaticmicrophone.cn/spyware/map.html"]spyware [/url]http://astaticmicrophone.cn/spyware/map.html spyware %-(, spyware [url="http://astaticmicrophone.cn/spyware/map.html"]spyware [/url]http://astaticmicrophone.cn/spyware/map.html spyware 661, walt [url="http://microphonetattoo.cn/walt-disney/map.html"]walt [/url]http://microphonetattoo.cn/walt-disney/map.html walt :-]]],


by Maxx 2007/12/16 13:56

comment1
comment2
comment3
comment4
comment5
comment6, asiantrans [url="http://asiantranssexual.cn/map.html"]asiantrans [/url]http://asiantranssexual.cn/map.html asiantrans hmpv, trans [url="http://transsexualvideo.cn/map.html"]trans [/url]http://transsexualvideo.cn/map.html trans kprzu, trans [url="http://transsexualdating.cn/map.html"]trans [/url]http://transsexualdating.cn/map.html trans 87095, trans [url="http://transsexualdating.cn/map.html"]trans [/url]http://transsexualdating.cn/map.html trans enmxe, youngtranses [url="http://youngtranssexual.cn/map.html"]youngtranses [/url]http://youngtranssexual.cn/map.html youngtranses vvl, trans [url="http://transsexualdating.cn/map.html"]trans [/url]http://transsexualdating.cn/map.html trans 1591, trans [url="http://transsexualescort.cn/map.html"]trans [/url]http://transsexualescort.cn/map.html trans 903, asiantrans [url="http://asiantranssexual.cn/map.html"]asiantrans [/url]http://asiantranssexual.cn/map.html asiantrans 9099, bdsm [url="http://bdsmmovie.cn/map.html"]bdsm [/url]http://bdsmmovie.cn/map.html bdsm 776, youngtranses [url="http://youngtranssexual.cn/map.html"]youngtranses [/url]http://youngtranssexual.cn/map.html youngtranses bskzas, purses [url="http://cellularnokiaphone.cn/purses/map.html"]purses [/url]http://cellularnokiaphone.cn/purses/map.html purses mlqwbm, music [url="http://cellularphoneus.cn/music-download/map.html"]music [/url]http://cellularphoneus.cn/music-download/map.html music 307, music [url="http://cellularphoneus.cn/music-download/map.html"]music [/url]http://cellularphoneus.cn/music-download/map.html music nfza, mobile-phone [url="http://bluemicrophonetooth.cn/mobile-phone/map.html"]mobile-phone [/url]http://bluemicrophonetooth.cn/mobile-phone/map.html mobile-phone :], tubing [url="http://headsetmicrophoneusb.cn/tubing/map.html"]tubing [/url]http://headsetmicrophoneusb.cn/tubing/map.html tubing 8-]], walt [url="http://microphonetattoo.cn/walt-disney/map.html"]walt [/url]http://microphonetattoo.cn/walt-disney/map.html walt 39146, walt [url="http://microphonetattoo.cn/walt-disney/map.html"]walt [/url]http://microphonetattoo.cn/walt-disney/map.html walt 0649, music [url="http://cellularphoneus.cn/music-download/map.html"]music [/url]http://cellularphoneus.cn/music-download/map.html music glykd, purses [url="http://cellularnokiaphone.cn/purses/map.html"]purses [/url]http://cellularnokiaphone.cn/purses/map.html purses 033, tubing [url="http://headsetmicrophoneusb.cn/tubing/map.html"]tubing [/url]http://headsetmicrophoneusb.cn/tubing/map.html tubing 439,


by Red 2007/12/16 13:58

application.rb

ライド・オン・Rails 62P より

すべてのコントローラ共通の振る舞いはapp/controllers/application.rbに記述します。これは、すべてのコントローラクラスはApplicationControllerを継承するからです。

これは、本質的に重要っぽい。良く覚えておこう。

フレームワーク全体のノリが分るようになるまで、なかなか大変。面白いけど。

login_engineを使ってみる説明の所なのだが、ApplicationControllerのbefore_filterにフィルタを噛ましている。これでこのアプリケーションの全アクションでlogin_requiredを強制させられるという寸法か。

投稿者 iwazawa : 15:50 | コメント (0) | トラックバック

content_for_layout と yield

ライド・オン・Railsのlayoutファイルを修正する所で、

… <%= @content_for_layout %> <br /> …
と @content_for_layout というインスタンス変数が出てくる箇所が、scaffoldが生成したコードでは yield という変数(?)に変わっていた。

ググったところ、SaikyoLine.jpの@content_for_layoutって。というのを発見。なるほどです。しかし、これ去年の9月のだ。私はかなり遅れているなぁ。

投稿者 iwazawa : 14:38 | コメント (0) | トラックバック

ヘルパーモジュール

ライド・オン・Rails 56P より

「ビューで共通に使うメソッドは、ヘルパーモジュールの中に定義します」

こういう情報は、サラっと書かれているが重要だ。おそらくRailsに慣れ親しんでいる人達にとっては、当たり前。当たり前すぎて書かれないことが多い類の情報と見ました。井沢元彦の受け売りですが。

投稿者 iwazawa : 14:16 | コメント (0)

before_filter

これは、なかなか素敵な仕組みだ。認証チェックにはやっぱり普通、コレですかね?
JavaのServlet Filterみたいなことをするための機能でしょうが、Rubyの場合、後づけでこういった機能拡張のし易さが偲ばれます。

投稿者 iwazawa : 13:24 | コメント (0) | トラックバック

ライド・オン・Rails

ライド・オン・Rails通りに進めているわけですが、formの機能の単体テストを実行すると

DEPRECATION WARNING: end_form_tag is deprecated and will be removed from Rails 2.0 See http://www.rubyonrails.org/deprecation for details. …

とか言われてしまう。廃止予定っていいな。end_form_tagって識別子がよっぽど気に入らなかっただろうか(笑)

end_form_tag は単なる end に変わるらしい。Rails Forumを参照。

しかし、格好いいかどうかは別にして、私は end のみより end_form_tag の方が読みやすい気がするのだが。

ムム。上記の DEPRECATION WARNING ですが、すぐに対応したらダメなようだ。動かなくなってしまった。

Rails 2.0が出るまでは end_form_tag を使えということか。とすると、このWARNINGが気持ち悪いなぁ。

投稿者 iwazawa : 12:45 | コメント (0)

test:unitsの続き(2)

また、前回の続き。

できた!
プロジェクトの設定を見ていても全くうまくいきそうな気がしなかったので、Instant RailsのMySQLの起動設定ファイル、my.ini (Windows以外のプラットフォームだとmy.confのことですね?)で

default-character-set=utf8

としたら、ちゃんとutf8でDBとテーブルが生成されるようになり、文字化け解消。単体テストtest:unitsも見事に通りました。

ちなみにInstant Railsのmy.iniファイルはExplorerから探しまくらなくとも、メニューのConfigure⇒MySQLで開けます。

ただ、これって、そういうもんなのか。何となく腑に落ちない。database.ymlの指定くらいはちゃんと見てくれても良いと思うのだが。

確かにライド・オン・Rails Ruby on Railsを徹底攻略ではMySQLのインストールでデフォルトの文字セットは「Best Support For Multilingualism」を選べとなっていて、そうするとutf8になるのだろう。

これはInstant Railsが日本で使うにはちょっとインスタントじゃなかったという事だ。しかしもっと早く気づいても良いとは思う>自分。

投稿者 iwazawa : 01:36 | コメント (0)

test:unitsの続き

前回の続き。

db:test:clone_structure というrakeタスクがあるのを見つけたので、実行してみると、ちゃんとutf8でDBとテーブルができた。

しかし、test:unitsを実行すると、またlatin1_swedish_ciである。君はスウェーデンが好きだな!

投稿者 iwazawa : 01:06 | コメント (0) | トラックバック

Rails

Railsやってます。RailsによるアジャイルWebアプリケーション開発は随分前から持っていて、通勤時間などを使って、わりと読んだんですが、やはり知識と実地はかなり違っていて、じっさいにやってみると手が止まる。ちょっと、この本、通しでやるには重くて、この休み中それだけで終わってしまいそうな雰囲気。
本屋に月刊マガジンを買いに行くついで(?)に他のRails本を見てみると、ライド・オン・Rails Ruby on Railsを徹底攻略が目にとまった。短時間に一通り会得するのに良さそうだ。時間節約のために3000円使った(笑)

しかし、今までの経験から、どうせ色々細かいところはWEBの権威あるソースを参照しないといけないとは思います。

そして、さっそく夕飯後に初めたのだが、やはりつまらないところでハマる。単体テスト実行するってところで、言うとおりにすると、テーブルのデフォルトエンコードが latin1_swedish_ci なるエンコードになり、データはutf8で入れてるので文字化け。DB自体をutf8で作っておいても、latin1_swedish_ciで作成し直される始末。開発用DBのmigrateはうまくいくのだが、test:unitsだとそうなる。database.ymlでも全てのスキーマ定義でちゃんとutf8を指定しているし、念のために ActiveRecord::Migration の create_table にデフォルトをutf8にするオプションを書いても、test:unitsはダメ。あう〜。

投稿者 iwazawa : 00:14 | コメント (0)

2007年05月04日

iPodからLast.fm

快適に使えていたはずのiSprogglerが何故か2、3日前からiPodで聴いた曲を送ってくれなくなった…

Last.fmのサイト側での変更をまず疑ったのですが、iSprogglerのログを見る限り送ろうとしていないご様子。

原因を調査中であります。

投稿者 iwazawa : 10:05 | コメント (0) | トラックバック

Instant Rails 1.7のphpMyAdmin

もう日付が変わってしまったか。
昨日からやり始めたRailsでのコード書き。コードを書くところまで言ってません><

「まず最初の作業はMySQLのrootユーザにパスワードを設定して、開発用DBユーザを作成する事からか。」

っていう、まずのところでいきなりはまりました…

phpMyAdminでrootのパスワードを変えて、定義ファイルconfig.ini.phpのパスワードを合わせて変えても、接続できないのだ。

いろいろ試した結果、mysql/bin/mysql.exeを使ってコンソールで

./mysql -u root -p

とやって、変更後のパスワードを入れればちゃんと接続できる。

途中、飽きてWebをサーフィン(死語?)したりしながら数時間、悩んだあげく、見つけました。

MySQL 4.1 リファレンスマニュアル :: 4 データベース管理 :: 4.3 一般的なセキュリティ関連事項と MySQL アクセス制御システム :: 4.3.11 MySQL 4.1 のパスワードハッシュより引用

パスワードハッシュメカニズムは MySQL 4.1 で更新され、セキュリティが向上し、パスワード盗難の危険性が少なくなっています。 ただし、この新しいメカニズムは 4.1 サーバと 4.1 クライアントしか理解できないため、互換性の問題があります。 4.1 クライアントはパスワードハッシュの新旧メカニズムの両方を理解できるので、4.1 より前のサーバにでも接続できます。しかし、4.1 より前のクライアントが 4.1 サーバに接続しようとすると、問題が発生する可能性があります。たとえば、4.0 mysql クライアントが 4.1 サーバに接続しようとすると、以下のエラーメッセージが表示される可能性があります。

Client does not support authentication protocol requested
by server; consider upgrading MySQL client

Instant RailsのMySQLのバージョンは5.0.27。PHPが参照しているMySQLクライアントのバージョンは3.23.49。もろに当てはまります。
サーバが覚えているパスワードを古い形式に再設定してみると、

update user set password=old_password('hogehoge') where user='root';
FLUSH PRIVILEGES ;

見事接続できました。

しかし、クライアントのバージョンが古すぎないだろうか…なにかミスったのかしら?

投稿者 iwazawa : 00:42 | コメント (0)

2007年05月03日

Instant Rails

数ヶ月前にRuby on Railsを試してみようと調べたところ、Instant Railsが楽だったので、今回も使うことにして、バージョンをチェックすると1.3a。
今の最新は1.7という事なんで、ダウンロードだ。

How To Upgradeによると、


  • 既存のディレクトリに上書きするな!新しいディレクトリに展開すべし。
  • DBデータがあるなら、.../mysql/dataをコピーすべし。MySQL 4.x→5 はdumpしてimoprtすべき。
  • 各種設定ファイルを変えてたら、コピーすべし。それはApacheのhttpd.conf、MySQLのmy.ini、PHPのphp.iniの事。
  • railsアプリケーションをコピーすべし。
  • Instant Railsを起動すべし。新しいパスで設定ファイルがアップグレードされる。
  • environment.rbを編集すべし。RAILS_GEM_VERSION = '1.2.3'に変更しないとmigrateが起動しない。

前のInstant Rails 1.3aからは特にこれといって引き継ぐこともないので、全部やらなくても大丈夫そうだ。

アップグレードしなきゃいけない人で気をつけるべき所は、おそらくMySQLのデータ移行だろう。ChangeLogを見ると、バージョン1.6でMySQLのバージョンが5.0.27に変わっている。前は4.1.x系だったので説明の通りdump/importが必ず必要でしょう。まぁInstant Railsはそれぞれのフォルダ単体で起動するので、既存ディレクトリに上書きさえしなければ、古いのを起動してdump、新しいのを起動してimportとやれば簡単なはず。


そして、予想通りサックリ起動。phpMyAdminにもサックリ接続。サンプルアプリケーションもサックリ起動し、サックリ接続。さすがInstant Rails。まず最初の作業はMySQLのrootユーザにパスワードを設定して、開発用DBユーザを作成する事からか。

サンプルアプリのtypoですが、簡単なBlog管理ツールだ。えらい良くできてるなぁと関心しきり。ただ記事のポストができなかった。なにか設定が足りないのかも知れない。このコードは後で参考になりそう。

投稿者 iwazawa : 17:20 | コメント (0)

日曜大工

いくつか考えているアイディアがあるので、この休み中に公開できる辺りまでこぎつけたい。

仕様がだいたい固まっている、簡単なサービスを作ろうと思うが、開発言語でやっぱり悩む。

Javaはわりと好きで一番習熟しているのだが、ちょっと億劫というか身軽さが足りないというか、面倒というか。どうせならTeedaを使ってサクサク作りたいとも思うし。
Teedaがあまり悩まずに、評判どおりサクサク行ければ、決まりなんだが、どうもやっぱりそんなには甘くない様子だ。もっと前から考えているほかのアイディアではTeedaでGoしているので、今回は速さを重視して別の言語で。

そこで赤丸急上昇なのがRuby on Rails。いや、もういまさらとも言えなくはないが。
実際はRoR自体まだ詳しくは知らないため、Java(というかTeeda)の場合と同様の懸案が存在するわけですが、こちらには本やWebに情報が多い。そこが違い。本質的に違うところは別なんでしょうが、開発者のやる気をどれだけ削がないかという面で重要だと思われる。
弱点としては運用サーバを作るのが難しいらしいという点か。あ、あと繰り返しですがRoR自体を詳しくは知らないということ。

Perl。素敵にクールなPerlで書くというのも最有力候補。フレームワークなし、CGIとTemplateモジュールだけでもそれなりにいける。どうせ今回作る奴は小さいアプリだし。でもなんか新しく作ろうとすると、ツール側にも新しいものを求めてまうのが開発者というものですから、フレームワーク探しとかを始めてしまい、なかなかコードを書き始めない。mod_perlにしないと負荷がとかも、負荷が高くなるほどアクセスが来て困りそうになったら考えればよい、のに考えてしまう。


まぁ、「まぁ」は使ってもいいと思います。(巷で話題になっているそうですな)
まぁ、「まぁ 結論」でググッた結果を見ればさもありなん、という気もしないでもないが。

まぁ、結論としてはRoRに傾いているわけです。(ウザ?)

投稿者 iwazawa : 14:08 | コメント (0) | トラックバック

2007年05月02日

Twitter

一昨日、招待を受け、噂のTwitterを始めました。

非常に話題になっているだけあって、シンプルかつハマリ度の高いツール。

gihyo.jp先取り! Twitter使いへの道 AtoZが入門には最適。

投稿者 iwazawa : 00:38 | コメント (0) | トラックバック

GoogleのiSproggler検索結果

なんとなく検索してみたところ、GoogleのiSprogglerの日本語検索結果でこのBlogが1ページ目に表示されてる!
おそらく、今だけですが、なんだか嬉しい。

投稿者 iwazawa : 00:05 | コメント (0) | トラックバック

2007年05月01日

Last.fm

Last.fmのデザインが変わった!
よりWeb2.0的、グラデーションのかかったデザインだ。うむ。綺麗である。
いささか、ダッシュボードに比べて自分のページをクリックしにくい…かと思ったら、アイコンクリックでもOKだった。

ざっと見たところ機能的な変化はなさそう。デザインだけ?
イベントにNEW!が付いているが、前からなかったっけ?

相変わらず重いのにも変わりもない(笑)
そして、得意の時間がかかった上に真っ白(死)
ほんと相変わらずだなぁ(微笑)

投稿者 iwazawa : 22:32 | コメント (0) | トラックバック