2007/11/30(金)Firebugがあまりに凄いので感動した

FirefoxのアドオンであるところのFirebugなるツールが非常にすばらしい。主な用途はWebサイト・アプリケーションのデバッグだと思うのだが、それ以外にも色々応用できそうだ。

まず、開いているサイトのソースを見られる。そのソースをインタラクティブ変更してサイトへの反映を見られる。表示されてる画面の要素をクリックして該当するhtml elementをピックアップできる。ありとあらゆるリクエストをのぞける。XPathが取得できる(すばらしい!)。スタイルシートも見られる。スタイルシートもインタラクティブに変更して反映をチェックできる。

もう神過ぎて涙が出てきそう。

今のところ解析したHTMLで、存在しないTBODYを勝手に挿入してるのが不満だけど、ちっちゃい傷。

Firefoxのアドオンをきちんと調べたり探したりしているわけでもないのに、すでにValidatorとFirebugだけで欠かせないツールになりつつある。すごいねFirefox。

2007/11/30(金)Ruby on Rails[4]

[7]よくわかんなかったところ

・コントローラ内のインスタンス変数はどうもそのアクションで定義したものしかビューに伝わらないような感じ。ちょっとこれはまだ理解できていないのだが、変数のスコープはある程度動きを追わないと分からないかもしれない。
・関連して、@paramsとparamsは同一?

・text_fieldの階層構造が謎。アクセス方法は分かるけど何でこんなことをしている?

・SQL文を綺麗に書くメソッドがあると思うのだがみっからなかった。

・Routesの指定のしかたがわからない。

・image_tagを使わないとき、/public/imageファイルの場所は相対パスでどう書く?

・prefix的に'_'(アンダースコア)が使われることが多いので、アクション名にうかつに'_'を使うとバグった時にえらいことになりそう。セキュリティ的にも。どう解釈されるのか。そこで予約語はどう絡むのか。

[8]MySQLまわりのなぞ

・バイナリデータつっこんだときのまともなバックアップ・リストア法。
・予約語が多すぎませんか? 予約語ならつっこむときに警告を出してくれませんか? でもさすがに、fromとtoってカラム名を作ったのは私が悪かったと思います。

・MySQL AdministratorでUTF-8が文字化けするのは何でだろう。どういじっても解消せず。

・from節やwhere節って前後したらダメなの?

・ていうかSQLが優秀なのは認めるけど、書きづらいよ

・階層構造作りたい。楽に作りたい。

2007/11/30(金)Ruby on Rails[3]

[5]はまったところ

renderは1アクションにつき1つという制約がある。Ajaxを使い始めると、Ajax部分を初回の表示に使いたかったりして、これが意外とこの制約に衝突することがある。打開策としては、ともかく設計段階から、Ajaxを使う予定があるところはrender :partial用にするとして、サブに分ける必要がある。
render :partialはアクションの実行がないというが一つ大事なところ。ここら辺は知識として知った上でないと設計で失敗しやすく、結構引っかかりやすいところだと思う。またrender: してからredirect_toもできない。メソッドを書いたとき、render :partialしたとき、redirect_toしたとき、どのアクションが実行されてどのビューが表示されるのか把握しておくのがRails理解の第一歩。

messageは知る限りもっともtypoが多い英単語。

[6]はまったところ、Ajaxまわり

link_to_remote, observe_formなど、Ajaxのメソッドを使うにはヘッダに

<%= javascript_include_tag :defaults %>

を書かなければいけない。けっこうどこにも書いてないので気をつける。あちこちで使いたいなら、/app/views/layoutsのモデルレイアウトに書いておけばよし。
RJSはerbではなく、純Ruby。RJSでは:partialを呼ぶだけにして、書き直す中身はサブビューに分離しておくのがスマートだと思う。

observe_formは:frequencyを書くと、Form.Observerになり、書かないと、Form.EventObserveになる。マニュアルにかいといて……

2007/11/30(金)Ruby on Rails[2]

[4]Apache + fcgiで動かすまでの設定

自分のデスクトップ+WebRickで動かしていて、Apacheに移植するときの話。
基本参考サイトに従っていればいいのだが、いくつかはまりポイントがあるので記載。

fcgiで動かすために必要なことは、

・Apache側を対応させる

・Ruby側を対応させる

・アプリの設定で書く
と3つ必要になる。

(1)Apache側の対応

Apache用のFastCGIの実装には、fcgidとfastcgiで2種あるがApache2だとfastcgiがあやしいという情報があった。ただ、どっちでも動くとかどちらかはダメだとか情報が揃っていない。
aptitude searchして、debianのライブラリをのぞくと、fastcgiでもlibapache-mod-fastcgi,libapache2-mod-fastcgi2種あるので名前からfastcgiが動くと判断。

ということで、

#aptidue install libapache2-mod-fastcgi

する。aptが勝手に/etc/apache2/mods-available/fastcgi.confを作ってくれるので何も設定がいらない(なんて楽なんだ!)

#apache2ctl restart

してやる。
(2)Ruby側の対応

debianなので、

#aptitude install libfcgi-ruby1.8
してやるだけ。gemで入れた方が良かった?

(3)アプリ側の設定

a. public/dispatch.fcgiのRubyアドレスを書き換え。

#!/usr/bin/rubyとか。
b. .htaccess書き換え。

RewriteRule (.*)$ dispatch.cgi [QSA,L]



RewriteRule (.*)$ dispatch.fcgi [QSA,L]
c. パーミッション設定

dispatch.fcgi -> 755に

/log, /tmp(これ必要ないって噂あるけど)->777に
d. /config/database.ymlをサーバ側の設定に合わせる

データベース名、パスワードの設定など。場合によっては、MySQLのsocket位置を指定しなければいけないかもしれない。
また、以降アプリを更新する際は、/configと/public以外をコピーし、/public/images等に変更があった際はそれを個別にコピーでいいと思う。

[参考]

・pylori*style wiki - RailsでWikiクローンを作る12

http://tam.qmix.org/wiki/Minki12.html
・Apache2 + fcgid + Ruby on Railsメモ - sakuramateo.

http://d.hatena.ne.jp/sakuramateo/20060205/1139162716
・83's : /tmp/mysql.sockが見つからないって言われた

http://fg-180.katamayu.net/archives/2005/08/25/185402

2007/11/30(金)Ruby on Rails[1]

RoRで軽いアプリを作ってみた。その上で気づいたこと、詰まったところなどをメモっておく。ちゃんとしたメモをどっかにやってしまったのでだいぶ怪しいかもしれない。なお、感想など雑感は日記の方に書いた。

[1]チュートリアル

色々眺めてみたが、初心者用にぴったりのものがなかなかない。ある程度の機能は実装して見せてくれないと不足だし、マニアックすぎるのも取っつきづらい。Webアプリケーションだとどうしても画像を大量に用意してくれないと分からないというのもある。結局以下のサイト辺りが役に立った。
・Ruby on Rails チュートリアル 「Webアプリケーション開発方法」]

http://www008.upp.so-net.ne.jp/letitbe/
各機能を段階的に実装していること、一般的なアプリケーションで必要なパーツを多く実装していることから分かりやすいしお勧め。ただし、画像はあまりない(自分でやってみる系)。

・pylori*style wiki - RailsでWikiクローンを作る01

http://tam.qmix.org/wiki/Minki01.html
ここも良い。

・Rails' Wiki - AjaxOnRails

http://wiki.fdiary.net/rails/?AjaxOnRails
Ajaxに関してはこっちの方がわかりやすかった。

[2]情報源

・Rails' Wiki - FrontPage

http://wiki.fdiary.net/rails/
・RoR Wiki 翻訳 Wiki - FrontPage

http://techno.hippy.jp/rorwiki/
・Rubyist Magazine - るびま

http://jp.rubyist.net/magazine/
・ヽ( ・∀・)ノくまくまー

http://wota.jp/ac/?category=Rails
くまくまーの人のサイトは細かいTipsの山盛り。

ここら辺は追っておく価値がある。

[3]マニュアル

・Rails Framework Documentation

http://rails.rubyonrails.com/
本家

・RDoc Documentation

http://techno.hippy.jp/apidoc/
部分的な和訳

・Rails API ドキュメント

http://railsapi.masuidrive.jp/
本家とほとんど同じだが、全文検索できてattributesが本家より良く書いてある(要はRDocの設定をいじってる)。全文検索と書いてあるが全文検索ではない?

2007/11/21(水)star(*) html hack

cssのプロパティで、

 * html hoge{}

と初めてやると、IE6以下のブラウザでは* htmlが無視されhogeのプロパティが有効になるという話。何に役に立つかと言えば、IE6以下で対応していないposition: fixed;等のために用いるのが一興。
 div.sidemenu{ position: fixed; }

 * html div.sidemenu{ position: absolute; }
とかすれば、全ブラウザ用のcssが楽に記述ができる。ちゃんと振り分けするのが正しいのは知ってる。

こんなの知ってれば当たり前の話なんだろうけど、知らなきゃさっぱりな話だよなあ。同様にアンダースコア(_)ハックがあるが(こっちは聞いたことがあった)、これはcss validatorを通らない。* htmlは通るのでこだわる人(?)向き。全称セレクタ以下のhtmlタグはないはずだからね。

この手のハックは当然のごとく他のブラウザ用とか色々あるらしい。

IE7でこれらハックが通じるかどうかは、どうも標準モードと互換モードで挙動が違うとか。恐ろしい。

2007/05/28(月)PCastTV2の衛星放送に関するiEPG情報

我が家ではマンション上部のコンバータによってUHF帯に衛星放送が流れてきているという特殊な事情がある。従って、特別なチューナーなしにUHF対応のアナログキャプチャボードで衛星放送が見られたりする。

さて、PC-MV5DX/PCIというキャプチャボードを愛用しているのだが、これの視聴ソフトPCastTV2が、EPGで衛星放送を扱えるようにできていない。PCastTV2はBuffaloブランドのキャプチャ製品共通のソフトであるが、対応機器に衛星チューナー搭載のものがないのが原因である。

そこで今回のミッションは、なんとかしてPCastTV2でUHF33,35チャンネルをNHK BS1,BS2のEPG情報に割り当て、GUIや録画ファイル名に反映させて幸せになるというもの。

[1]PcastTV2のインストール

そもそもPCastTV2はPC-MV5DX/PCIにインストールできるようになっていない。しかし動いてしまえばMV5DXに対応しているようである。従って、インストール時にレジストリをいじってやる。
[HKLM\SYSTEM\ControlSet*(使っているコントロールセット)\Control\DeviceClasses\{65E8773D-8F56-11D0-A3B9-00A0C9223196}##?#PCI#VEN_14F1&DEV_8800&SUBSYS_051E1154&REV_05#4&CF81C54&0&10F0#{65e8773d-8f56-11d0-a3b9-00a0c9223196}#GLOBAL\Device Parameters

]の値
BUFFALO PC-MV5DX/PCI Video Capture



BUFFALO PC-MV52DX/PCI Video Capture

に書き換え、PCastTV2をインストール。
インストール後、文字列を元に戻しPCastTV2を起動。

このままだとPCastTV2がMV5DXを認識していない場合があるので、その場合はPCastTVを立ち上げる必要がある。

さらに録画しても容量0のファイルができる場合はドライバをインストールし直す。ここまでやればたぶんOK。

[2]pcast_iepgloc.datの設定

受信するEPG情報を決めているファイルは、

C:\PROGRAM FILES\BUFFALO\PCastTV_2\EPG\pcast_iepgloc.dat

である(標準のインストール先の場合)。
このファイル中の受信放送エリアの行は、



Lct=東京(東京)

7001=NHK総合<001>,7002=NHK教育<003>, ...



となっている。自分の受信エリアのLctを探し、その下の行を書き換える。

=の前の4桁の数字は、SO-NET TV王国

http://www.so-net.ne.jp/tv/bangumi/

中の放送局コード。
PCastTV2はEPG情報をここ決めうちでダウンロードしているようだ(EPGサイト設定できるけど、リンククリックしたときに開くだけっぽい)。

上記サイトで地域選び、番組表から番組名をクリックしアドレスをみたときに、?st_cd=となっている部分が放送局コードになる。
放送局名はTV王国にあわせる。<>は自分が設定したチャンネル。たとえば、9002=NHK衛星第2<035>と追記してやると、衛星第2の情報がダウンロードされ、PCastTV2のGUIに衛星第2の列が追加される。
[3]でも番組名が出てこないんですが・・・・・・

列が追加され、情報もダウンロードしているのに、なぜか番組タイトルが表示されない。どういうこっちゃ!? と思って調べた。
ダウンロードしたEPG情報は、

C:\PROGRAM FILES\BUFFALO\PCastTV_2\EPG

内の

SEPG.txt(は日付)

に記録される。これがTV王国が提供してる生データか、PCastがパースし直したものかは謎だが、それをさらに加工して表示用のデータ、

EEPG.txt(は日付)

に直している。
調べてみると、先の例でいう衛星第2=放送局コード9002の番組はSEPGの方には記録されているが、EEPGには記録されていない。そこで放送局コードの数字をいじって、PCastがどういう挙動をしているのか確認してみた。放送局リストみたいなものを持っていて、一致しないものを捨てているのかと思いきや、シンプルに、

放送局コードが、

・8999以下->通し

・9000以上->捨て
という挙動であるようだ(8999と9000の境界以外は適当にしか確認していない)。

TV王国のサイトを眺めてみると、9000以上はWOWOWやNHK衛星にしか使われていないようで、地上派オンリーだからそれでいいということらしい。

となってくるとこの判定部分を探せばいいということになる。ついにOllyDbgの出番が来た、それ解析解析~と・・・・・・思ったのだが、使用許諾確認したら逆アセンブル、書き換え禁止となっている。とはいえしゃくに障るので、バイナリ読むのだったら問題ないと考え、それらしい名前のCEpgDll.dllをバイナリエディタで開いてみた。

さて、一文字目を検査して8,9の場合分けだと探しづらい。この際、このコードを書いた人間が一番単純にやっていると考えて、パースしたあと、atoiで数値変換->比較という流れであると想定。

ねらいが正しければ、8999(0x2327)か9000(0x2328)がどこかに見つかるはず。

・・・・・・1カ所あった、28230000が(リトルエンディアン)。あれその前が、0x3Dになってる。3Dってたしか・・・

C・M・P

ここでほぼ確定。アドレス0x2C32からの、3D 28 23 00 00の部分をいじってやればいいっぽい。たとえば、9999(=3D F0 27 00 00)とかに。とはいえ使用許諾があるので書き換えはできないわけで。

Buffalo様何とかしてください。

2007/03/16(金)Ruby関係のPATHが滅茶苦茶

うちのPCにはRubyが3バージョン入っているため良く問題が起きる。

3バージョンとはApollo版とActiveScriptRubyのmswin32版とcygwin版なのだが、これの共存がどうも難しい。スクリプト言語はPATHに支配されるので別バージョンのライブラリを見にいったりしてしまう。

さて今回のトラブルは、諸事情あってmswin32版Rubyを1.8.5に入れ替えたため発生したようだ。入れ替え後、irbを動かそうとしたら、
c:\online\apollo\bin/readline.dll: 127: 指定されたプロシージャが見つかりません。

   - Init_readline (LoadError)

c:\online\apollo\bin/readline.dll       from c:/online/ruby/lib/ruby/1.8/irb/com

pletion.rb:10

        from c:/online/ruby/bin/irb.bat:18:in `require'

        from c:/online/ruby/bin/irb.bat:18
と怒られた。どうやら環境変数$RUBYLIBにapollo版のPATH、c:\online\apollo\binが書いてあるのが駄目らしい。しかし、奇怪なことに先にmswin版のPATH、c:\online\ruby\binを書いてやってもダメ(その場合はruby\binのreadline.dllでプロシージャが見つからないと言われる)。

つまり、環境変数$RUBYLIBに、
C:\ONLINE\RUBY\bin
c:\online\apollo\bin

c:\online\apollo\bin
の場合はダメで、

なら良いらしい。

ところが、RUBYLIBからapollo\binを外したところ、今度はApolloで作ったスクリプトがexerbで固めない限り動かなくなってしまう。

うーん、何も考えずに1.8.5を入れたのが迂闊だったか。

暫定でActiveScriptRubyを1.8.2に戻した。一応gemsも含めて動くようになったので解決。

今後mswin32版のVer Upは注意することにする。危ういバランスの環境はすぐに壊れるということだ。
OK キャンセル 確認 その他