2008年11月30日日曜日

大世界人のカレンダー

確かに素晴らしい。でも最高じゃないな。
少なくとももっといいカレンダーがあるよ! 俺の頭の中に。

Google Sitesも予想と違った。。残念。

あるとき

プログラムコードは主として誰のための言葉か?

と言う。

私はコンピュータと答えるが、

人間と答える人も多いようだ。

2008年11月28日金曜日

再び、Rails本

MashupEXの設計が進んでいくと、具体的な実装ということに当然なってくるわけですが、ここでRailsをかじった気になって、後の細かい小技は逆引き本で、なんて生意気な行動に出てしまいました。余計わからなくなりそうだったので、一旦Rails本に戻って第23章です。web v2.0とvがついているのがこの本を買うのを躊躇した点の1つです。ま、どうでもいいことでしたね。本質をちゃんと見ようとしない悪い癖です。反省。。

逆引き本も、ああこういうのがあるんだ的な、馴染むという点では、あながち悪い物では有りませんでした。もう少しレベルアップするか、行き詰まって藁をも掴む場合には、また手に取ることができるでしょう。1週間以内には到達したいです。それじゃ遅い?

2008年11月27日木曜日

Thunderbirdで家と職場を同期する

RSSをThunderbirdで見ていますが、家と職場で両方設定するのが面倒です。
。。。よく考えたら、メールも同じことですね。でもWebメールって使い辛いんですよね〜なんとなく。IMAPも何となく。

メールの話はおいといて、まずRSSの購読ですが、これもWebで見ようとすると億劫(おっくう)になると思うので、Thunderbirdがクライアント間で同期を取ってくれればいいのではないかと。あまり難しい方法じゃなくて、ちょっとローテクっぽく、次のような感じで。

まず、家でメール情報をtarします。といっても同期用にThunderbirdが管理データを追加してExportしたものです。それをメールで自分宛に送ります。このメールアカウントは家でも職場でも受信可能なものである必要がある点が人によっては難点ですが、そういう人はそもそも同期を取る必要がありませんね!

で、そのメールを同期時に指定するわけです。メールを選んで右メニューから同期みたいなUIがいいですね。そうすると、追加したアカウントやRSSを同期した上、オプションでメールそのものを同期してもいいですね。そしたらまずそのアカウントだけメールを受信して、最後に受信した同期用メールを自動検出して自動的に同期するっていうのも便利かも。

それよりiGoogleを使いこなした方が良いのだろうか?と思ったりして。でも何となく使いにくいんだよね。。

あ、いっそ自分でweb上にデスクトップ作ればいいんじゃん。な〜んだ簡単な話だった!

2008年11月23日日曜日

cafe2.0 TESTDRIVE Oliva: RoRアプリケーションの配備

cafe2.0 TESTDRIVE Oliva: RoRアプリケーションの配備

リンクを作るで作ったエントリ。これがbacklink?
どうやってつかうんだろう?

RoRアプリケーションの配備 (2)

ちょっとエントリーの順番が前後しちゃいましたが、最近デプロイの話を聞いてから、Netbeansを使っていることもあり、ついついJRubyやGlassFishに頭が向いてしまいます。ネイティブRubyをGlassFish V3で動かす記事もあるので、やってみたいのはやまやま、ついそっちを除いてしまうのは分かるんですが、ぐっとこらえて、まずはローカルで動くようにしましょう。

モデルの作成

データベースの格好は何となくまとまってきました。さてそこでモデルですが、考えてみると、adminやstoreというモデルの単位がはっきりしない頭。まあ、深く考えずにいきましょう。

2008年11月22日土曜日

You! 翻訳

最近英語アレルギーから脱しつつ有る私!は、たった今、『Miles to go ...』をみて、よし、これを翻訳しよう、と思った。すごい進歩だと自分でも関心する。レベルが低くて申し訳有りません。 

ところで、翻訳サイトを作るというのは、半年か1年ぐらい前からあるアイディアですが、--あ、これWanted!にしょうかな--、これにはローミングという考えが背景にあります。

例えば私が『Miles to go ...』を翻訳したいと思ったとします。これを個人的に行い、結果を自分だけのメモ帳に保存しておく分には、著者の許可は不要です。しかしもし、これを誰かと共有したいと思ったら、多少問題が起こるかもしれません。勝手にインターネットで公表しようとすればなおさらです。

ローミングとは、ローミングブラウザを介してアクセスすることにより、該ページをユーザの嗜好に合わせて書き換えるものです。Greasemonkeyのようなプラグインをイメージしても良いかもしれませんし、私の知らない間にすでにそういうアプリケーションがあるかもしれません。ただし、プラグインではありません。Webアプリケーションとしてのブラウザです。私はこれをニューブラウザと呼んでいますが、普通にWebアプリケーションのUIが他のページを見るための機能を持っていること、およびそのコンテンツに干渉することから、一種のブラウザだと考えているためです。

つまり、ニューブラウザは、通常のブラウザで表示される素のコンテンツに、翻訳などの付加情報で変換したり、コメントなどを追加した、二次的なコンテンツを表示するものなのです。

ここでいうユーザの嗜好の中に、言語翻訳機能があります。ローミングサーバは、ユーザが登録したページの翻訳情報を相対的なページの位置情報と共に保存します。それにより指定されたURLでアクセスした時に、翻訳情報を表示できるようになります。

ユーザが自分で翻訳しただけの状態であれば、他のユーザはその情報にアクセスできません。共有許可を著者に取った後、はじめて共有URLに置かれ、他のユーザもアクセスすることができます。共有URLにある情報を見るか否かはユーザ次第です。デフォルトでONにもOFFにもできますが、気に入らない(というより不快な)情報だけを後からON/OFFすることもできますし、不正だと思われるコンテンツの通報も可能です。一方、発信したユーザは、誰がON/OFFしているかは知ることが出来ません。しかし、その割合は知ることができます。あまりにもOFFの多いコンテンツは、その理由について、誰かに意見を求めてみても良いでしょう。また、OFFが多いコンテンツや通報されたコンテンツは調査の対象となり、違法行為が確認されれば、然るべき対応が取られます。

もちろん著者が共有に問題(著作権侵害)を感じたら、いつでも共有を禁止にすることができます。このような情報もまた調査され、対応されることになります。

共有許可のプロセスは、今のところ人力で行うことを想定しています。もし社会的に支持されるようになれば、robot.txtのような情報で自動的に可否を判断できるようになるでしょう。それまでは多少時間がかかっても著作権を重んじるべきです。

そこで著者に許可を求めるわけですが、利用者の負担はできるだけ軽減したい。そこで登録したURLをローミングサービス側で調査し、問い合わせ先を探し、許諾を得るというプロセスになります。

私は英語のプロではありません。それどころか、まともに会話したり読み書きしたりすらおぼつかない状態です。でも、そんな私でさえ分かる英語もあります。それは、技術的に必要に迫られた、翻訳というより、書いてある内容を理解するための最低限の意訳レベルにすぎませんが、もしそれを原作と関係付けて保存できれば、それは自分が繰り返し見るときに非常に役に立ちます(毎回辞書を引かなくていい)し、さらに他の人と共有できれば、きっと同じレベルの人にも役立つでしょう。そして私が勇気を持って恥を忍び、つたない訳を公開すれば、見るに見かねた人が、やさしく間違いを指摘し、正しい訳を示してくださるに違い有りません。そうなればきっと他にも追従してくれる人が現れるはずです。そしてそれは多くの理解を助け、読者を増やしてくれるはずです。ですから基本的に著者にも歓迎されるはずだと私は思います。

他にも例えばja.netbeans.orgのような公式に翻訳された情報が載っているサイトで、英語と日本語のページが別々に存在するサイトがあります。これは非常に有り難いのですが、未翻訳のページに行ってしまうと、そこから先のリンクは常に英語のページになってしまいます。これは致し方ないところです。

しかしまあ、このような状況は解決できないわけではありません。URLの対応表を作り、Greasemonkeyのようなプラグインを使ってユーザスクリプトを書けば、日本語ページを表示する、ということはできそうです。リンクといっても結局URLですからね。特にja.netbeans.orgのように、英語と日本語のページのURLに規則性がある場合は、対応表も楽になるでしょう。指定したURLが日本語ページでない場合、対応する日本語URLがあれば、そちらを表示する、たったこれだけです。あとは如何に多くの言語に対応するかと、できればページのヘッダに小さい(流行のブックマークボタンのような)言語ボタンを置いて、あれ?っと思ったらすぐ原語ページを表示できるようにしたいですね。それとこれってスペイン語だとどんな感じ?とか。

しかしこういったものも含めて、シームレスに他言語に対応できればいいんじゃないかなと思います。

2008年11月21日金曜日

RoRアプリケーションの配備

NetBeansを触っていると、一見、JRuby+GlassFishだと配備も簡単そうに感じたんだけどそれはなぜ?
http://blogs.sun.com/mingzhang/entry/jruby_rails_with_jpa_onとか見ると、めんどくさそうだよ?

クックパッドさんはcapistranoを使ってるそうです。う〜ん。いずれはJRuby+GlassFishへ。Javaにしたいから。

と思ったら、ここにV3での配備についての記述を発見。が、サーブレットの呼び出し? それは今要らない。

あとはこういうのもある。

なんか、違うねえ。

もっとこう、普通にRubyをJRuby+GlassFishで使いたいだけなんだけどね。「だけ」っていうのが怪しい。

MacOSXのJava

http://developer.apple.com/jp/qa/qa2001/qa1170.html

RoRセミナー

昨日、ウェブキャリアさん主催のRoRセミナーに2ヶ月連続で参加させて頂きました。

すごい人です(た)。

今回はクックパッドさんの橋本さんが、クックパッドについて、哲学を語ってくださいました。リクルーティングの一環ということもあったようですが、それにしてもすごい人。懇親会ではさながら橋本詣のような長蛇の列。私も最後の最後にご挨拶だけさせて頂きました。質問コーナーでは私が前から気になっていた、埋没される投稿コンテンツについて、クックパッドさんでは検索の工夫などにより、ロングテールになっていて、結構くまなくアクセスされるようになっているとのことです。アクセス解析的なスタッツが見えるのかどうか知りませんが、コンテンツを提供されているみなさん、これからもどんどんアップしましょう! みんな見てますよ〜。(かな?)

と、ここで実はすごい偶然が。「すみません、お隣よろしいですか?」と声をかけてきたのは、MA4で一度ご挨拶させて頂き、その後ご丁寧にメールまで頂いた方。混雑してきた会場のため、3人がけのテーブルの真ん中に後から来た人が座っていくという状態での出来事でした。帰りも別々に出たのですが、偶然地下鉄のホームで再会:)。渋谷まで楽しい会話をさせて頂きました。ショートムービー、ぜひやりましょう。

そういえば、cafe2.0企画の中に、ドキュメンタリー制作というのもあったことを思い出しました。ハリポタの作者よろしく資料メモをファイルボックスに入れとくんだったか。

2008年11月19日水曜日

HanKo :WEB印鑑作成APIに学ぶ

ウェブキャリアさんのWebAPI『Hanko』を試しに使わせて頂きました。HTMLのタグを貼るだけ、超カンタン。色も色々あるみたいで、とってもGoodですね〜。

なのですが、何にも分かってない私はimgタグのsrcのurlにパラメータが書かれているのを見て「あれ。これrailsだとどうするの?」と。で、そもそもrailsの場合(私わかってないかもしれないので間違ってたらご指摘ください)/で囲ってパラメータを指定してるので、この?name=高橋&size=50&type=maru&color=red"というつなぎ方が分からない。。。
ということでググり方も全然ダメで、当てもなくrails本をめくっていくと、結局URLの解釈について第20章でルーティングとURLということで、書いてあって、ここを何度か行ったり来たりしているうちに、「あ、railsはhanko/img/name/50/maru/redじゃね?」と。ここでhankoはコントローラ、imgはアクション、name,50,maru,redがパラメータ(コントローラ、アクション名は今テキトーに付けました)。これにそってconfig/routes.rbにmapを追加すればいんでしょ?

なるほど、きっとそうだ、そうに違いないと。
なんかブラウザのURLって普通に&とか?とか書いてあるし、いろんなWebAPIのパラメータみてもだいたい?とか&で繋がってるし。これってきっとなんか他のフレムワク用なんだろうと勝手に思い込みして解決というか問題先送りします。間違ってたら恥ずかしいね。。でもしょうがない。

と思ったら、そうだ食べログ見てみようと。で、いろいろアクセスしてみると、あれ、?&だ。あ〜そういえば、formとかって確かブラウザがID=値で送ってくるよね?あれのこと?

じゃあ登録フォームと同じじゃん。どれどれ。
<input name="commit" type="submit" value="Create" />
これ、どうやってんだっけ? rails本をめくると、書いてない。。なんだよ〜productのデータチェックで騙された感じ? どうやって処理してるんでしょ〜か、railsさん。また振り出しだ。

でいろいろググって見ると、こんな親切なページがあって、もう一度adminページのブラウザ上のソースを見ると、
<p><label for="product_title">Title</label><br/>
<input id="product_title" name="product[title]" size="30" type="text" /></p>

<p><label for="product_description">Description</label><br/>
<textarea cols="40" id="product_description" name="product[description]" rows="20"></textarea></p>

<p><label for="product_image_url">Image url</label><br/>
<input id="product_image_url" name="product[image_url]" size="30" type="text" /></p>

<p><label for="product_price">Price</label><br/>
<input id="product_price" name="product[price]" size="30" type="text" value="0.0" /></p>

<p><label for="product_special">Special offer</label><br/>
<input id="product_special" name="product[special]" size="30" type="text" /></p>

とある。で、コントローラのメソッドとして、
def create
@product = Product.new(params[:product])
if @product.save
flash[:notice] = 'Product was successfully created.'
redirect_to :action => 'list'
else
render :action => 'new'
end
end
となっている。つまりproductが配列になっているということだが、どこでProductクラスのメンバとしproduct_title などが作られているのか? それらしい名前があるのはマイグレーションしかない。ということは、newのパラメータparams[:product]でブラウザから受け取ったパラメータが渡り、このパラメータで指定された名前のカラムがproductsテーブルにあるかどうかチェックしてるってことか? う〜ん。なんだかなあ。要するに最初の疑問はimg src="hoge?=a=1&b=2"っていうのがどう渡るのかということで、submitの時も同様な形式だとすれば、img srcの場合も同じやり方なのか。ただしテーブルを使ってないので、登録フォームのやり方はおいといて、こういうのやり方でできるのかなあ。

とりあえず必要になったときにやります! 今はここまでということで。

少し休もう

なぜかBlogger@Safariがすごく遅い。重い。一体なんなんだ?
こういうとき、プロバイダが悪いのか、行き先が悪いのか、簡単に分かるステータスってないもんだろうか。

それはさておき、今日は朝から体が別人のようで、右側が強烈に頭痛。仕方ないので夕方まで寝てみました。う〜ん体は多少動くような感じだけど、頭痛が相変わらずひどい。寝なきゃ良かったのか? で、夜になって、初めて行った近くの家庭的イタ飯屋さんでトマトとバジルのサラダを食べたら、半分ぐらい解消した気がする。きっと朝風呂が良くなかったのではないかと反省。まああと実際目が疲れているというのもあると思う。

ということで、今日はほとんど何も手に付かない状況。

少し休んだ方が良いと思う反面、休みたくない。でも結局身体が言うこと利かないのでしょうがない。

2008年11月18日火曜日

jester

ここ。

JavaScriptでサーバサイドのDBをRESTで扱うためのライブラリ、かな?

yahoo!ニューストピックスAPIのレスポンスのスキーマをどう扱えば良いかという問題で、rubyで探していたが、ふとJavaScriptで出来ればブラウザだけでできるじゃないかということに気づいたかどうかは知らないが、JavaScriptでRESTのXMLを扱うライブラリを探していたらJesterがそれとなく出てきた。良さそうな代物に見えるけど、大々的にググられるわけじゃない辺りがどうなの?

ところで肝心なこのニュースのレスポンスには対応するXMLSchemaが定義されて公開されているが、実際のデータ(レスポンス)をこのスキーマで検証する方法は? ということで、こちらをこれから拝見しようかと思っているところ。

つづく。

2008年11月17日月曜日

railsでリレーション(2)

すいませんこれ、トラックバックってどうやって張るんでしょうか。

それはさておき、ここを読みながら改めてRails本のP125を読むと、なるほど、と。よい復習になりました。これで(頭の)一段奥に入ったような気がします。

railsでリレーション

ファミリテーブルはディレクトリと本体に分かれる。ノードのオバケだ。だからこそ自分でリストDBを(最終的には)作るわけだけど、RDBで別に王道を行くつもりはないので、まずできるところから。

ググ(Rails テーブル リレーション )ってみるとこんなきれいなページが検索トップに。これからみるところでブックマーク代わりに。

って読みながら「なるほどx2と」マーカーしたりコメントつけたりしたい訳ですが、はて?FireFoxのプラグイン?どっかで見たような気が。

そういうのいちいち探すとめんどくさいので、サイトに1行JSを追加するだけで、できるといいのにね。そしたらブログのデフォルトONにしておけば、流行ると思うね。できると思うし。DOM見てツリーのパスとカーソル位置ってわかるのか?でもクリップしてるんだからね、きっと何か方法あるんだよ。ブロガさん側もどこが注目されたか詳細にわかってよろしい。問題は保存場所だな。サーバに置きたくないなあ。本文はローカル(cookieか保存ファイルを指定)、ポイント(URI---これってカーソル位置まで指定できるんだっけ? でも出来なかったらURIじゃないんじゃないの?)はサーバに。しょうがないか。まいいや、この話はまた今度。


2008年11月16日日曜日

netbeansのコード補完 for mac

⌘+¥。こちらからの情報に感謝です。
Spotlightのショートカットを外すとControl+スペースでも表示されます。Spotlghtのショートカットはシステム環境設定のSpotlightの項目にあります。

2008年11月15日土曜日

Cのソース

11/10、日本androidの会の11月のイベントに参加させて頂きました。お土産にAndroidソース&Rubyスクリプト入りDVDを頂きました。ありがとうございます。それにしても凄い人でした。抽選は伊達じゃなかったですね。

久々に組み込み系の話を聞いて、Dalvik VMのCソースを眺めて、自分の土俵だなあと実感しました。でも後戻りするつもりは有りません。それはover Clock! しますから。

google earthでみつけたNASAの写真

宇宙飛行士が撮影した地球の写真と衛星画像にチェックを入れて、日本を見たら、北海道の辺りにNASAアイコンがあり、クリックしてみると見事な5角形が。

google galaxyにブログを置く。

odt形式のドキュメントをアップロードしたんですが、さすがにページの背景に設定した画像(透かし:watermark)は表示されない。そこで生ファイルを置けないものかとgoogleのサービスを見てみたが、どうやら無いみたいだ。mobilemeも全然使わないうちにトライアルが終わりそう。dropboxも遅いらしいし、クライアントにインストールするのはちょっと。有料でもいいからgoogleで扱ってほしいけど、googleグループとか使えばいいんだろうか? それともNingのようなSNSに移行したほうがいいのだろうか。

そうしてgoogleを見ているうちにそういえばgoogle earthって使ってなかったことを思いだして、遅ればせながらgoogle earthをインストール。ああ、ここにブログを置きたい。写真は置けるみたいなのでそこをゲートウェイにしても、いいかしらbyミシェル。そのうちgoogle galaxyとかが出るだろうから、そしたら。。。あ、google galaxyって想像してみるとかなり良いね。行ってないところはシミュレーションで十分。まずは有名な星雲から。

そういえば月を勝手に(といっても確かどこかの州の裁判所が所有権を認めただか許可しただか)売ってる人がアメリカにはいるけど、googleは勝手に双子座を売ったりしない。無料で使わせてくれるはずだから。

リクエスト出しとこう。

2008年11月14日金曜日

読み返し

ここらで以前に読んでいた本を今読むとどうなのか、読んでみました。

まずRAILS OF RUBY ON RAILSという、真っ黒ベタに白抜きの文字の本。私にはこのインクが肌に合わず、途中わざわざコピーを取って読んでたのですが、内容はもっと分からないものでした。今見ると「何が足りないのか」よく分かります。もちろん全部はまだ読めませんけどね。私にはデモ本もしくは1つのTipsあるいは逆引き、ですが、この本で理解出来てしまう人は凄いですね。ただ後半のCASE STUDYの特にインタビューは、サイト作ってる方や運営している方々の生声、興奮が伝わってきて良いと思います。

こういう路線ならCUT(雑誌)みたいにすればいいのに。余計なお世話です。せめてもう少しインクや製本(ページがほつれやすく、一部ページがはがれてきました)をなんとかしてほしかった。

10日でおぼえるRuby on Rails入門教室。これは出だしから好きで、なかなか良い本だと思うのですが、私の思考回路に多分合わないのでしょう。なのに出だしが良かっただけに、これで頑張ればと無理に固執しすぎたのは間違いでした。やはりある程度仕組みを理解できないと、覚えられないというか、頭に入ってこない。ちょっとしたことなんですけどね。いろんな本を読みましょう。

ということで、不満は多々あるものの、基本的に今のところRails本で行きたいと思います。

が、このままDepotをやっていても自分にとって得策ではないような気がしてきました。不満の多くはMVCとしての実装や、仕様と実装に対する考え方の差によるもので、一重に自分のWebアプリの経験不足と、逆に他の開発の仕事の経験値だと思います。

ギャップが埋まった訳では有りませんが、ギャップが見えてきて、埋めていく手がかりが掴めてきたと思います。であれば、まずは自分の考えに基づいて、自分自身のアプリケーションをもうRails化した方が良さそうです。その上でDepotと比較し、または後半のRails詳細へと入っていく、そんな方法に変更してみます。

とはいえ、MashupEXのアウトラインとコンセプトは明確なので、Depot式にイテレーションしながらやっていってみようかと思います。

ただ、私はイテレーションが大嫌いだと思います。でもここまでせっかく無理してきたんですから、最後まで無理してでもやり遂げたい。だからどこまでイテレーション出来るか分かりませんが、がんばります。あ、がんばりますはダメなのか師匠、すみません。やります。やり遂げます。よろしくです。

2008年11月13日木曜日

P128 誤植?

図10.1 で、コード上は『Name:』になっているが、フォームイメージの中では『名前:』に翻訳されているので、一瞬、対応関係が分からない。

P124 誤植?

欄外*1の1〜2行目、『外部キーのようなデータベースレベルでの制約の指定にはあまり気が使われません。』

気が使われないって、どういうこと? どういう関係なの? 気功師?

自動的に外部キー制約をモデルに追加するプラグインもあるそうだが、そもそも外部キー制約って何か分かってないことに気づき。
CreateLineItemsとLineItem?

そっか、CreateLineItemsはマイグレータ(こういう言い方は怒られる?)だっつうの。む〜ん。どうせならモデルからマイグレーションできればいいのに。ま、違うんだろうなあ何か。

ここで書きたかったのは、マイグレーションはモデルとは別ということをしっかり頭に叩き込むということ。

テーブル構成というかDBの作り方

これをみると、品目のテーブルがline_itemか。何で最初のマイグレーションに個人情報しか入ってないのか。余計混乱。流せ流せ。

品目を1個のテーブルにして、そこに沢山の注文を全部まぜこぜにして入れるのか。なるほどね。RDBってそんなんだったけね。そうそう、何かテーブルのキー寄りの項目が同じ行が沢山並んで、最後の方だけユニークになってんだよね。それ(前半部分の同じ値)がどうにも無駄に見えてしょうがなかったのを思い出しました。あれってなかなか消化できないんだよね。当時はdosの時代でmifes系のエディタを使っていたので、矩形でカットしたい思いに駆られたものです。今は大丈夫。

でも何か分かってきて楽しい。executeの呪文も今は無視してみよう。

品目って何?

P125を読んでるだけだとよくわからなかったので、"注文 品目"でググると、注文品目というフォームがあった。幕の内弁当、2個。なるほど、俺の頭でいう明細のことか。

p114 誤植?

トラブルシューティングの3つめ。『テストで混乱がうまくいかない』

ローカルファイルに保存する

これはブラウザプラグインかローミングじゃないと無理。

ウィッシュリストやリマインダ機能がないサイトの情報を自分で管理するための仕組み。商品ページが変わったるするとそのままでは使えないが、情報としては残るので、そこから商品の再検索などができるし、Tipsに『そのとき私はこれがほしかった』を入れておける。ぜひこれをブログパーツにしたいところ。

最終的にはマッシュアップできるのが望ましい。それを一旦ローカルファイルを経由するというのも、仕組みとしては面白いかもしれない。もちろんこのローカルファイルは本質的にいうと、そのサイトの外にある、ということなので、ローカルのさす場所が実はネット上のユーザドメイン(ブログなど)を指すことも論理的には可能。これがマッシュアップとは言えないのは、通常(現状)のマッシュアップはサイト主導なので、サイト側がマッシュアップサイトになってる必要があるから。

例えばオープンマッシュアップAPIがあったとする。買い物サイト自身ではウィッシュリストを持っていない。そこでOpenMashupAPIのユーザメッセージにそのサイトで買い物に必要な情報、例えば商品ID(独自の商品IDで構わない)や値段などを送信するためのJavaScriptを呼び出す1行をボタンなどに貼付けておく。

このJavaScriptはユーザメッセージを受け取ることができるサービスをプリセットしたりできるオープンソースなコードで、現在よくみられるブログやブックマーク,SNSなどへの接続と同じ類の物になる。ただここに汎用サイト指定やファイルに保存も追加して、拡張性を高めておきたいところ。以前USTREAMで使っていたメニュー形式のものが近いが現在USTREAMでは使われなくなってしまったので、あれが『何』だったか分からなくなってしまった。

ウィッシュリストを構築する方が簡単だしユーザの嗜好もわかってマーケットに活用出来る有益な情報が自分のところにだけ得られる、というならそれもいいだろう。しかし外に情報を出すことによって、ユーザは様々な利用が可能になる。ウィッシュリストも1つではないし、リマインダ機能も1つではないのだ。ブログやカレンダーと連携したり、他のリマインダに連動したり、それを様々な店舗間で比較したり。

そういう機能が囲い込みを阻害する場合もあるだろうが、そういう機能が主流になったら逆に取り残されてしまう。もちろん、よほどその店の商品やサービスに自信があれば別だ。


cookie上のデータの管理

DB上にカートの中身を置くとき、それを消すタイミングを忘れずに調べること。例えば...

・ユーザがcookieを消したときにDB上のカートを消す。
・ユーザがブラウザを終了したとき。(残す場合もあり得る)

廃れつつあるコンポーネントって?

P107(第9章)の*1にコンポーネントを使う方法が有ると書かれている。これじゃない?俺がほしいのは。と思って22.9(p476)を軽く読んでみると、どうも違うようだ。

ところで、p476には、ショッピングカートが自己完結したアプリケーションではなく、ショップの基盤となるコンテキストの一部だという内容のことも書いてある。果たしてそうだろうか。Rails流にはそうなのだろう。でも私はユニバーサルカートというアイディアを捨てたりはしない。これ(ユニバーサルカート)もずいぶん古いアイディアだが一向に実現しようとしない行動力の無さには、呆れることすらできない。

2008年11月12日水曜日

カートのリストの順番が入れ替わる?

これも何か再現しない。む〜ん。まいっか。そもそも実践で使うかどうかもわからないわけだし。ただなぜここに書くかというと、悩んだ履歴を残しておきたいから。

なんだこりゃ? flush[:notice]を使うと、カートが壊れる?

そうではありません。さっき追加したrescueのelseが抜けていたせいでした。。。

flushを外しても同じだが、cookieを消すと直るので、確かにカートを何か壊している。でもflushじゃない、、とその下にあ〜elseがないじゃないか! XXXXが。すいません。

rake db:sessions:clearがうまく動かない?

P95のようなエラーが出る。CartItemを修正したからだと思う。そこで、rake db:sessions:clearを実行したが、うまく動いていないのだろうか。こんなメッセージ。

(in /Users/Home/Documents/Rails/Depot)
Gem::SourceIndex#search support for String patterns is deprecated
/Users/Home/Documents/Rails/Depot/config/boot.rb:20 is outdated

とりあえずまたブラウザのcookieを消して対応。cookieを消したらうまくいきました。



DRYにもほどがある

DRYっていっても1つのインスタンス変数が複数のメソッドに出てくれば、その都度書かなければならない。まあ普通でしょう。でもそこでスペルを間違っても、実行するまで分からない。undefindとか言ってほしいなあ先に、せめて。お願いします。無理か。。。嗚呼、インタプリタ様。

attr_readerが索引に載ってない

これって漏れ?
何だっけattr_readerって。アクセサ自動生成だったような気が。ググってみるとやはり。でもこの本の何処に載っているのか知りたい。でも探すのは面倒。rubyのリファレンスで再度確認。

さらっと流す

P96の欄外*3にあるように、どうやら色んな失敗をわざと入れて改良という筋書きを描きたいようです。うまく自分と重なれば有り難いわけですが、解決方法にも色々あるわけですし、それがRailsの問題というより、Webアプリケーションとしての在り方や実装方法だったりすると、厄介です。

ということで、さらっと流すことが重要です。難しいけど。

例えばP95のadd_productが気に入らないとしても、仮想イテレーションを元に設計されたものなら、相手してもしょうがない訳です。

ただこうした実際のコードを通じて、いろんなことが見えてきているということが、この本が有益であることの証だし、この本に「自分の完璧」をぴったり重ねることはできない。そのズレをきちんとズレとして認識しつつ、それをちゃんと流していくことが大事。


宅配ボックス

Amazonで体重計を買った。自分の体重ではなく、飼い犬の体重を計るため。
そういえば宅配ボックスがあるじゃん。宅配業者さんはどういう基準で体重計を入れるか入れないかを判断するのだろう? もちろんボックスの大きさは体重計が十分入る大きさである。

2008年11月11日火曜日

カートに追加できない

session.rbにclass Session
def []

 Cartのinitializeに来ない。
為にしadd_productで@itemsがnilならCart.newを。
で、

if @items == nil
then
@items = Cart.new
end

って書いたら、NetBeansが電気マークを出して、なにやらクリックすると、

@items = Cart.new if @items == nil

って直してくれた。ありがとうNetBeans!

追ってみると、session[:cart]がnilじゃない?っぽい。
でも session[:cart] ||= Cart.new じゃブレークポイントが張れない。そこでsession[:cart]がnilじゃないかどうか、適当なロジックを足して確認。すると、本当にsession[:cart]がnilじゃない! なんで?

とりあえずお腹がすいたので晩飯を食いに出かけたその道すがら、突然思いついたことが。「あ!わかった!」と、思わず声を上げてしまいました。cockieだ。最近MacBookのSafari、リセットしてない。だからずいぶん前にやったNetBeansに付いてくるサンプルのDepot動かしたときのsessionのcockieが残ってんじゃないか?

さっそく戻って試してみると、ほらね。やっぱそうじゃん。まずいんじゃない?ブラウザが終了してもセッションが切れないなんて。Bloggerは? (とここでSafariを一旦終了) 大丈夫だね。ちゃんとクリアされて、再度ログインから始まる。当たり前か。

念のため、もう一度、サンプル版のDepotを動かしてみる。あ、マイグレーションからか。大丈夫か? やってみよう。あれ、サンプルのデータが入らない。カートは空。追加は出来る。ブラウザ終了して再度実行。カートは空。大丈夫じゃん。どういうこと? 

データベースを確認してみると、マイグレーションで「バージョン0へ」をやってもデータが残ったまま。NetBeansからやってるからか? コンソールでやってみよう。

rake db:migrate VERSION=0

同じだ。もういい、あきらめよう。とりあえず原因はわからないけど、cockieが残ってしまい、session[:cart]がうまく動かなかったと。



P91 思い出してください。・・はい。。。

session[]というハッシュ(連想配列)は、どこに定義されるのか? つまり、誰が持っているのか。

P91に「思い出してください。現行のセッションはRailsによって、コントローラから見るとハッシュであるかのようになっています。」
Rails本より引用)

ん? 思い出す? 思い出せない。。
何処にそんなことが書いてあったのか? これか〜。P90「Railsはコントローラ内に、sessionと呼ばれる、ハッシュに似た特別なコレクションを保持しています。」(Rails本より引用)

ハッシュであるかのようってどういうこと? プログラムじゃないじゃんそんないい加減なもの。まあいいや、理解不能の上塗りは。

とにかく、この「session」って何?メソッド?何のオブジェクトの?何処にある? さあ。

currency_of_this_store

number_to_currencyが気に入らなかったので、application_helper.rbに勝手にcurrency_of_this_storeを追加してそこで¥を付けることに。でもここで¥スペースを入れてるんだよね。だけど¥と数字の間の隙間ってビューだよね。画像の場合もあるよね。だから本当はビューオブジェクトとして処理したいんだけど、取りあえず入れる所がないので、adminのリストでも使うことを考慮して、application_helper.rbに入れることにしました。

メソッドの呼び出し時のパラメータ指定を()したりしなかったり。

外して書ける場合は外す、みたいな不統一性は、可読性を下げると思うし、間違いも起こりやすいと思う。冗長性を排した良い書き方などと言う人がいますが、賛成しません。ただRails流といえばそれまで。は〜。ため息をつくと幸せが一つ減るとか、言われたことがある。それ以来ため息はつかないようにしてきたが、最近出るこれはきっと「弱音を吐く」ってやつか?

そういえばさんまのからくりTVで太鼓を教えるおやじさんが、「がんばるって言うのは日本人の悪い癖、やるかやらないか、どっちかなんだよ」(注:表現は不正確です)みたいなことを言ってたのを思い出した。XX〜やるぞRails。

全角英数の入力方法

全角英数の入力方法を調べていたら、™(トレードマーク)などのショートカットが載っているサイトを発見。他にも面白そうなエントリがあるのでメモします。

おっと、それじゃなくて、全角英数は言語環境の設定からことえりで全角英数にチェックを入れる。

ちなみにことえりのメニューに出てくるショートカットの記号で「^」が分からない。コントロールキー? あたりだ。こちらを拝見。ありがとうございます。

2008年11月10日月曜日

add_to_cartはまだ追加されていない

って自由課題に書くことじゃないと思うよ。普通分かるだろう?と怒られそうだけど、そんなときは、分かる人がこの本読むかよ!と逆切れましょう。飛ばしたかと思ってずいぶん探したんだから(3分ぐらい)。

でも日時を表示してみましょうと言われて、いらないいらないと思ったが実は覚えてないので3秒で出来ない自分だからこそ、Clock!が必要なのさ。必要は発明の母なり。

numner_to_currency

通貨をフォーマットしてくれるヘルパーさん。国際化対応のために。 こうやって書けば書くほど、ちがうんだよなあって気が、秋なのか?と共に深まっていきそうな予感。

でもドルで出されてもなあ。rails.orgのapiリファレンスを見ても書いてないなあ。まさか例題にhushでポンドとかって書いてあるけど、そんなわけないよね〜。国際化っていうんだから、currency(通貨)のデフォルトをサイト対象国の販売通貨にするってことだよね? もちろんUSドルのサイトが単に日本語化されていて、日本から買えるけどドルだよ、っていうのはあるけど、この場合の国際化には当てはまらない。Amazonさんみたいにamazon.co.jpで買うと円だよということじゃないと。

分からないので、練習ということで、unitでも指定してお茶しよう。

ん〜ぜんぜんだめだ。普通に"¥"ってやると¥だし"¥ "(ブランク1個)だとそう出るし。単に:unitで指定した文字が手前に付くだけっぽい。ん〜それ何のミーニングがあるの?byネッササリー体操。

NoMethodError in Store#index

商品レコードを登録したら、こうなってしまった。
1個もレコードがないと、タイトルだけ表示されるのになぜ?

あ、わかった。

product.titleとすべきところを、@product.titleとしてしまっていたからだ。

で、よくメッセージを読むと、ちゃんと書いてあるじゃん。

NoMethodError in Store#index

Showing app/views/store/index.rhtml where line #5 raised:

You have a nil object when you didn't expect it! The error occurred while evaluating nil.title

ほら、nil.titleって。ちゃんと読もうね! こんなに親切にエラーメッセージ出してくれてるんだからさ。

言い訳すると、NoMethodErrorっていうのが、先入観の塊を作ってしまっておりました。猛省(もうせい)いたします。

ところで猛省ですが、「もうしょう」と読んでました。Mac付属辞書を見ても「もうしょう」とは出てませんね。で、思ったんですが、プログラミングをなさる皆さん「定数」を何と読みますか?

私は自信を持って「じょうすう」と読みます。昔コンパイラ関係の仕事にちょっとだけ携わらせて頂いたときに、「じょうすう」と読むんだと教わったからです。あ、あと、漢字じゃないですけど「Warning 」、これ何てカタカナします? 私はこれも同じ理由から自信を持って「ウォーニング」と言わせて頂きます。でも実際なかなか言い辛いんですけどね。ときどきワーニングって言ってしまいます。

DBが合わないとNo Method Store#Index・・・間違い

これは間違いでした。書き直します。

正確なメッセージはチャプチャする前に変えてしまったので分かりませんが、だいたいそんな感じのメッセージが表示されていました。

DepotというサンプルはNetBeansのサンプルソースとして入っていて、最初にこのiMacでやっていたのですが、自分のMacBookで作業を進めていたものをソースだけもってきて続きをやろうとしてたので、DBが合わない(Schemaとテーブルのカラム)

ところでMySQL Administratorでデータベースの表示「Catalogs」を見ると、「Schemata」って書いてあって、例えばdepot_developmentを削除しようとすると選択したSchemaを削除するか?と聞いてくる。ということは、depot_developmentという単位はSchemaってことなのか。私はてっきりテーブルのカラムのことをSchemaっていうのかと思ってました。ざんねん。テーブルをダブルクリックして中身を表示すると、columns/indicesと書いてある。indicesっていうのがindexの複数形っていうのも今知ったよ。。。インディシーズ?

ということで。


<br>と<br />の違い

こういう検索は難しい。ようやくここで発見。ありがとうございます。
XHTML式だと。なるほど。ぜんぜん分かってないので先行こう。

1つだけ。
どちらも適切なDTDに沿って使えば正しいタグだとある。Depotの例でいうとdtdファイルのURLが書いてあるので、きっとこれの事だろうと解釈。これはscaffoldで作られたadmin.rhtmlには自動的に挿入される。

2008年11月9日日曜日

P83 レイアウト store.rhtmlとadmin.rhtmlの違い過ぎ

またしてもstore.rhtmlは特別扱いな感。admin.rhtmlはどうやって出来たんだっけ?最初からあったような気が。あ、あった。generateのscaffoldをかけたときだ。scaffoldはモデルとコントローラのペアで作るよね。なんでstoreはscaffold使えないんだろう? モデルは最初のコントローラとしかscaffoldできないの? む〜ん。

確か最初の方にRailsは実際のwebアプリケーションから共通項を抜き出して開発されたフレームワークって書いてなかったっけ? adminと1個のモデルとの結合なのか、adminとモロproductの結合なのか知らないけど、そこにscaffoldが当るっていうのがなんだろうって感じだねぇ。。もっともっとテンプレートっぽいフレームワークのほうがいいんじゃない?いっそのこと。

クラウド(が一般化すれば)なコマンドラインで、webapp newとかやると、webappなアプリケーションが1個インストール(インスタンス化)されるのを想定していますが、なんか中途半端な感じがします。テンプレートなら10分と言わず、1Clickでブログできるだろうに。

もし本当にrailsがこんなんだったら絶好のチャンスですし、さもなくばいずれ自分の勘違いに気づくでしょう。

P80 adminとの違い過ぎ

確かに、販売可能な商品の一覧と管理上の商品一覧とは違うだろうが、チュートリアルとしてどうなんだろうこの扱いの違い過ぎは、と思ってしまう。

これは考え方の違いなのかもしれないし、何か別な理由かもしれない。adminもstoreもURL上はadmin,storeで終わっているのにadminのデフォルトは説明がなく、storeはindexだとか、データベースから商品の一覧をモデルに問い合わせるとなっているが、adminのときはデフォルトでリストが表示されたわけだ。ちなみにadminの場合、コントローラのコードはscaffold :productで、URLのアクションに相当するメソッドも書かれていない。

そういえばHello World!の例ではどうだっけ?と見返してみると、ちゃんとsay/helloとなっていて、sayコントローラにhelloメソッドを実装している。

だんだん分かってくると、こちらの理解からみた矛盾がまた新たに発生してくる。困ったもんだ。しかしそれだけ『よくデキテキテルわ』ということだ。

コード管理サービス

バージョン管理に関するエントリを読み返していて思ったのですが、なんだっけ?すぐ忘れる。。。思ったのですが、思い出した。実際にコード管理サービスを行うことについて一句。

コードを保守するリモートディスクサービスをやります。そこから統計的なコード情報を得て、学術的なフィードバックを行ったり、バッチ情報を流したり、製品情報を流したり、そういうサービスも良いのではないかと。

ここに置くコードは何もオープンである必要はありません。しかしサービス側はコードを静的や動的に解析し、二次的情報を無制限に得る権利を有することとします。ユーザは自分たちのコードがどの程度主流なのか、知ることが出来ます。自分たちのコードの冗長性はどうなのか、使用しているクラスやライブラリはどの程度推奨や標準に沿っているのか、そういったフィードバックを得ることができます。

もちろんここに静的解析結果報告や使用しているコードが何らかのパッチに影響を受ける場合のアラートなど、様々な付加サービスを有償もしくは無償で提供していくことが考えられます。また、従来の広告と異なり、コードを技術的に評価することで、より高度な質の高いジョブマッチングを行ったり、開発元に利用頻度情報を提供することで、素早いフィードバックを促したり、さらにそうした開発元の対応を評価してユーザにフィードバックしたり、多種多様な可能性が広がると思います。

Google Code?でしたっけ? いろんなコードを集めているというか登録できるというのか、そんなサービスがあると思いますが、まずはそれで何ができるのか、できないのか、調査してみたいと思います。

ぱっとみ、ダウンロードして使ったりするだけなんでしょうか。特に機能的なサービス(機能が何を指すかだけど、コード解析や付帯したコード管理など)は無いみたい。

実際コードをホスティングすると逆に使えないユーザも出てくると思うので、ウェブアプリなんだけどローカルでも動く(Javaアプレット?)というのは、クラウドの過渡期としては必要かもしれない。そこを敢えてリモートでCPU使ってサービスしてペイできるかは、非常に重要な問題。

_formのadmin/createの謎が分かった。

_formはadminというコントローラに対応すビューなので、常にadminなんだ。と思う。いまからstoreを作ってview/layoutsの下にコントローラと同じ名前であるstoreを取って、store.rhtmlを作るとある。

でもadminを作る際の説明では単にcssへのリンクをHTMLページ内に記述するという文脈でさらっと出てくるだけだ。やってることは同じはずなのに、方やレイアウトの作成方法として載ってるというのは、非常に不公平な感。

なかなか馴染んでないけど、少しずつ馴染んでいるのもまた事実。カメのようだけど自分では納得感があって気分的にはいい感じ。

Macのウィルスチェッカー

Mac用ウィルスチェッカー『ClamXav』をインストール。これは『ClamAV』のGUIアプリケーション。親切なことにClamXavをインストールして最初に起動したときにClamAVがインストールされてないと、自動的にインストールするか聞いてきて、そのまま続けてClamAVをインストールすることができる。便利〜。

ところでClamAVのパターンファイルはいつ誰がどうやって更新してくれているのだろう?


<form action="admin/create" method="post">

http://localhost:3000/admin/newのページのHMTLソースをブラウザでみると、<form action="admin/create" method="post">になっている。

でも_form.rhtmlにはadminっていうのが出てこない。なかなか繋がらないねえ。。

ここまでHTMLのformタグの意味は書いてあっても具体的な送信内容について説明されてるところがなかなか見つからなかったが、ここを見て漸く理解。ありがとうございました。

『読めば分かる』サイトにはこういうところも当然入ることになる。ボリューム的に大変だろうけど、こういうサイトは特に日本語ではなかなか無いと思うので、ぜひやり遂げたいと思います。たくさんの人が参加してもらえるよう頑張ります。タイトルはちょっと弱気な『読んで知る』でもいいかな。

2008/11/9 わかった

2008年11月8日土曜日

バージョン管理

さて漸く午後に入ります。第7章です。ここで自由課題を追加してしまったので、ソースを替えようかと思って一句。浮かびました。

バージョン管理ツールがどれほど使いやすくて素晴らしいのか分かりませんが、使っていることを普段感じさせないというものは、まだ無いように思います。無知なだけでしたらごめんなさい。

大勢で1つのプロジェクトを更新する、ということと、純粋にバージョンという意味には本質的な違いがあると思います。私が考える本質的なバージョンとは、変更履歴の集合(積み重ね)です。

一方、複数の人が同じファイルを修正するというのは、同じファイルの違う場所なのか、同じ場所なのかという、単純に競合の問題だと思います。ですから当然一人でやってるときには、競合の問題は起こり得ません。

しかし競合の問題も各人からみれば、2つ(変更前と変更後)の違いでしかありません。実際、異なるファイルであれば、競合は起きない訳です。ただし全体として1つ選ぶとき、各人のどのバージョンをそれぞれ選ぶのか、ということになってきます。そこで初めてプロジェクトとしての総合的なバージョンという概念に当てはめたバージョン管理が必要になってくるわけです。そしてそこから翻って個々人のバージョンにおいて、プロジェクト全体のバージョンとどういう関係なの?という属性が付いてくるというか、必要になってくるわけです。

話を初めの方に戻すと、使っていることを感じさせない、というのは、何らかの文書を作成するものであれば大概やっている自動保存というものになると思います。それと自分が明示的に保存したい場合。そしてバージョン管理のためには、保存の度に2つの保存の間の差分と、その全変更履歴が正しく保存され、後でそれに基づいて、さまざまな管理操作ができる、ということになってくると思います。

従ってバージョン管理のリポジトリとの出し入れの間だけバージョン管理されているというのは、本質的なバージョン管理として、ちょっと弱いと思うわけです。つまり、あるエディタがバージョン管理ウェアに対応するということは、保存先(開く元)としてOS管理上のファイルを指定するのではなく、バージョン管理上の仮想ファイルとやりとりする必要がある、というkとです。

で、そういうものを私は作りたいと。

ディスク管理ソフトの作り方を知ってる訳じゃないのでアレですけど、Macで言えば、仮想ファイルをマウントして使う。アプリケーションからみると普通にファイルですが、仮想ファイルの管理モジュールを介在させ、ユーザから見えない所で差分情報を管理します。プロジェクト単位のバージョン管理を行う場合は、アドミンツールを使って仮想ファイルをコントロールします。また仮想ファイル(ディスク)としてマウントすることで、WebDAVやSFTP、SSHなど、ネットワーク上に配置することも可能でしょう。

また、プロジェクト管理ツールとも連携して、あるバグ票、あるリリースバージョンといったクエリから差分情報だけを抜き取ってバグ票に添付する、FAQに流す、チュートリアルにエクスポートする、といったことが可能だと思います。

ま、かなり適当なことを書きましたが、兼ねてから明確なイメージが沸かなかったので、この機に書いておきました。

PDF + 音声 &| ビデオ

Sun Tech Daysに行く予定です。去年はぜひ宣伝してくださいということでした。今年もそうであることを願っています。その前提でハンディカムで撮ったビデオとプレゼン資料としてアップされるであろうPDFを連携させたいと思っています。が、なかなか思うようなソフトが見つからないので、自分で作ってみようと思っています。仮に名前を猿芝居とします。

1.猿芝居にはビデオ、PDF、タイムラインデータが渡されるものとします。
2.データはURLでホスティングされている場所を示すか、ローカルファイルから取得可能とします。
3.これら3つのデータをセットにしたデータもXML等で記述可能とします。
4. タイムラインデータは、単純に経過時間とページのペアとします。
5.できれば途中でマニュアルでPDFを操作したり映像(音声)を操作したりできるようにしたいと思います。このとき映像とPDFの同期を付けたり外したりできるようにします。
6. 猿芝居はAjaxなWebアプリとし、とはいえ最初にJavaScriptを取得したら、以降はブラウザでのみ動作可能としたいと思っています。
7.せっかくなので、商用用途で使えるよう、広告挿入(開始前、視聴中)を可能にしてみたいと思います。
8. ブログパーツとして埋め込めるようにしたいと思います。

さてどうなることやら。

base.rb render のソース

base.rbでpartialを検索すると、次のifの辺りでしか使っていない。
それはともかく、

          elsif partial = options[:partial]
            partial = default_template_name if partial == true

とある。elsif で中に入ってくるならpartialはtrueだけじゃないかと思うが違う?
あ〜true以外で真になるってこと? 例えは"form"は真だけどtrueじゃない。ということはpartial => trueってやると?、default_template_nameがpartialに設定されると。ということは、呼び元(new.rhtml)が、render :partial =>'form' なので、partialは...'form'だが。む〜ん。

あ、あった_form.rbにnewのフォームのERbが。な〜んだよ。でもどうやって動くかは謎。そのうち出てくるでしょうということで、先に進もうと思ったけど、ちょっと調べてみることに。

まず<label for="product_price">について。product_priceというIDとこのラベルを関連付ける? で、<%= text_field 'product', 'price'  %>っていうのは、なんだろう? ググってみるけどどうもよくわからない。これがどう展開されてラベルが何と関連づくのか。ボタンならいざしらず、単なるテキストボックスで、値を入力したときに何かコードを動かしてるわけでもないと思うのだが。

とりあえず単純に、追加した項目名=specialを当てはめて行を追加してみる。

あ、表示された。試しに30% OFFと入れてみる。createボタンをクリック。あ、リストに30%が表示された! 一瞬喜んだが、何も理解出来てないことに気づいて落胆。もうちょっとだな。。。

p77 Product Listにpriceを追加

p77自由課題にあげられた、priceの表示をpruduct  listに追加しようと思ったのですが、ついでに特価などのアテンション表示を上に付けられるようにしようと思い、いろいろコードを見てるのですが、よくわからない。特に、render partial =>'form'。

特価情報は練習なので、最初テキストで追加するだけで良いのですが、priceのときは動的scaffoldを使っていて、たぶんこれが勝手にテキストボックスを追加しなのではないかと思っているわけです。で、new.rhtmlをみると、renderになっているので、一体どうやって追加したら良いのかと。

きっとこの先出てくると思うので、先に進みます。

HTMLに慣れてきた感

(1) HTMLだけ
(2) HTML+CSS
(3) HTML+ERb

この理解には、CSSクリエイティブ・デザイン ISBN-10 4774131636 の果たした役割が大きいと実感しています。

例えば最初、表示、編集、破棄のlink_toの行の改行(<br/>)が抜けていたため、3行縦並びではなく、1行横並びになってしまっていたんですが、CSSで右詰めって言ってるから、右詰め、右詰め、右詰めってくるよなあ3つ。。あ、改行いるんじゃね? と思って本のリストをよく見るとちゃんとbrタグが入っていたことに気づいたわけです。我ながらおおすごいじゃん、わかってきてるじゃないか、と嬉しかったです。

よく、デキテキテルわ。byミシェル。

ということで一気にぐったりして爆睡してしまいました。

この後、
(4) HTML+ERB+JavaScript

となると思います。

2008年11月7日金曜日

迷惑千万なウェブサイト

まったくムカつく!この無意味にCPU100%にするウェブサイトが未だにあるとは。

ブラウザ(だけじゃないんだけど)のCPUの利用率を監視して、3秒以上負荷をかけたら自動的にブラックリストに入れて、二度とアクセスできないようにするアプリを作るぞ!

既出でしたらお教えくださいませ。

履歴を見ても分からないのはなぜ?

バックスラッシュは[option+¥]

MacOSXでは半角エンマークと半角バックスラッシュが違うって知ってました?? 一体どういうことなんでしょう?

と、ググってみると、あちらこちらに分かりやすく情報が掲載されていました。また、MacOSXでバックスラッシュを入力するには「Option+¥」との情報はこちらから。みなさんありがとうございます!

UTF-8ではエンマークは[U+00A5]、バックスラッシュは[U+005c]。しかしShift-JISは0x5cだから、エディタがUTF-8に変換する場合は、エンマークのA5をとるか、バックシュラッシュの5cを取るか、という問題があると。bashでエンマークを打つと勝手にバックスラッシュになるので、同じだと思っていた。この辺は昔から*nix系を使うと必然的にシェルを使うわけだが、そこではいつもエンマークがバックスラッシュだったので、そう思い込んでしまったんだろうな。

てことで、NetBeasnで正規表現を書くときは、[option+¥]、を忘れずに。

第7章 ここからが午後?

ということで、ここまでは午前中だったらしいです。

P70 validates_format_ofが動かない

普通にaaa.jpgとか、本のように/images/abc.jpgとかやってるんだけど、常にエラー。とりあえずコメントアウトして、ペンディングにして、先進みます。

で、エラーチェックは前にも書いたように、レコードに変化がないと動きません。当然ですね。そうすると、このチェックを入れる前に登録したレコードが置き去りにされます。かといってチェックは自動で出来ても、結果を表示する方法がいまは1レコード用のページしかないし、DBに項目もないので、どうするんだろう?

こういうのがレコードまでケアされないマイグレーションの問題と同じで、こっちはレコードを処理するコードに変化があったら、DB全体として見た場合に扱いが変わるということなんで、その辺だね。

だからもっとこう、データチェックなんてそれこそ必須処理なんだから、Railsにもっと頑張ってもらいたいところ。この先出てくるのかも知れないので、取りあえず推移を見守るということで。

p69,p70 あれ? validateは誰がいつ呼ぶ?

priceをチェックするvalidateですが、一体いつ誰がどのタイミングで呼ぶのでしょうか。

あ、P69に書いてあった。申し訳ない!
RailsがProductのインスタンスを保存する前に自動的に呼び出す、とある。インスタンス? あ、インスタンスって、そういえばこいつらのインスタンスって誰が「持ってる」の? 何気にMigrationとかもそうだよね。全然気にしてませんでした。うっかり。

まあ、Railsがどっかでやっとっくよ!なんでしょうが、Productみたいにいつ動くのか分からないと、作ったうちに入らないよね当然。

Productは多分商品1個でインスタンス1個でしょ。バカみたいな答えで申し訳ない。ということは、レコードを追加したときNewだよね? そっか、で多分ActiveRecord絡みの何かがそれをテーブル単位かなんかでさらに管理(保持)すると。想像ですけど。

だとして、レコードの追加や更新があった時に?DBを更新する動きになるわけで、そんときか。そのときにvalidateを呼ぶんだねきっと。ということは、きっとこれも規約に則ってないとダメってことだよね。つまり、validateっていう名前で、多分パラメータなしっていうこと。じゃないと呼べない? どうだろ。この人たちrubyコードを構文解析して値を取るっていうのを、確かRailsのバージョン取得でやってたからね。油断は禁物。とりあえずこれ以上は想像しててもしょうがないのでペンディングにして、今後の経過を見守ろう。

Migrationに関してはねえ、インスタンスは1個なんじゃない? でコマンド実行時にやると。で問題ない気がするけど。

P68 validates_presence_ofで問題発生

Titleが赤枠で囲まれてない。メッセージはTitleもエラーだと言っている。本の写真では囲われてる。はて?

あ、validates_presence_of切ったとき、パラメータのtitleをtileにしてるからだ。でもそれだったらTileっていうフィールドがないっていうエラーだよね? でもメッセージは can't be blank(空はダメ)になってる。はて?

tileをtitleに直したら赤枠が表示されました(面倒なので写真はなし)が、メッセージは同じ。ってことはそういうメッセージってことだねきっと。

P68 どんな感じになるの?っていう感覚

ちょっと脱線します。

validates_presence_of (チェックする項目の羅列)というメソッドは指定されたフィールドの存否と内容が空でないことをチェックしてくれ、エラーがあると画面にエラーメッセージを表示してくれる。

こういうメソッドを気軽に試せる環境も入れていきたい。対象は、rails本を読みを得て初心者は脱した初級〜上級者。動くリファレンとして。P68までのレベルでなら開発者が手動で追加しなければならない部分も自動化できると思う。

その上でそれ(本来開発者が自分で追加する内容)を、いわゆるToDOもしくはタスク一覧などの形での情報提供もやっていきたい(動くマニュアルという構想もST青山の時代からある構想だけど、一向に取りかかれていない現実:P)。

逆引きや検索、実際のページからオブジェクトを指定しての逆引きとかもやりたいね。ページにインスペクトボタンを内蔵して(firebugのような)ブラウザのプラグインじゃなしに、あくまでWebアプリとして実装したい。だったらページにツールバーを出せばいいのかな。そうすれば色々載せられるし。ユーザ(セッション)管理上でちゃんとやればいけると思います。だんだんC9fonに近くなってきた。


ということでググ: CORBA

CORBAをググってみました。

聞いたことはありましたが、何だかメインストリームじゃなさそうな、でもメジャーな技術なような。こちらに独習用のドキュメントがあります。閲覧にはログインが必要で、ここから無料の会員登録を行います。

2008年11月6日木曜日

NetBeans RoR Special Edition

NetBeansをRoR専用にカスタマイズするというのも面白そうだけど、時間がないので無理だな。それだったらJavaScriptで動くエディタを見つけるか作るかして、Webアプリケーションにしたいし、MashupEXにVisual Daze! RoR を入るのが先か。

NetBeansをどうにかする前段として、NetBeansのモジュールをもっと分解して独立した部品にしたい。コマンドというよりウィジェットとかJavaAppletとか。実験的にRESTなWebアプリにしてみるとか。

OpenPluginというよりOpenPlugだろうか。ググってみるとモバイル系の会社がフランスにあるようだ。Plugletとすると、Java Pluglets APIがあり、Appletとはローカルディスクにインストールされる、Appletが&ltapplet>タグで起動されるのに対し、Context-typeで起動される違いがあるらしい。む〜ん、ぜんぜん違うなあ(求めているものと)。あとはCORBAか?

chane_columnは失敗に終わった。

マイグレーションコードを書いていたら、,(カンマ)が先頭に来ると構文エラーになる。これはNetBeans 6.5 RC2でのこと。強引に実行  ruby script/generate migration update_price してみるとホントだ、エラーになる。

Cで書くときからの習慣で、自分の気にしている意味に応じて改行する、カンマで区切るときは、カンマを先頭にする、という「冗長な」記法を好んで使っていたので、やってみましたが、すっかり嫌われてしまいました。まいいです。理由は今は分かりませんが、そのうちruby本(プログラミングRuby第2版)に取り組むようになったら消化したいと思います。

で、カンマさえ後ろなら改行しても大丈夫だったので、思いつきで項目の属性変更してみようと、:scale => 1 をchange_columnでやってみましたが、どうもうまく行きません。取りあえず、remove_columnしてからadd_columnするとうまくいくので、migrationはOKなようです。MySQL Query Browserで内容も確認したので、合ってると思います。

※ちなみにMySQL Query Bworserは日本語の値はうまく表示出来ないようなので、そのうち代わりのものを探したいと思います。


scaffoldは足場って言ってるじゃん最初から

なんだけど、とあるセミナーでしていた、scaffoldがなかなか良くて、これを改造して作っていく、みたいな話を、素人が中途半端に聞いたせいだと思うんですが、10分で作るデモってこれメインじゃないですか。フォーカスされてるわけですよ私から見ると。他の人には、何れ取っ払われる足場であって、エレベータじゃないっていうのは、当たり前のことなんでしょうか? む〜ん。

だからVisualだぜ!RoRみたいなものが必要な気がするわけです。だってHTMLも知らなきゃシェルのコマンドだってろくに打てないやつに、『自動で出来るよ!』って言われた日にゃあねえ、最後まで面倒見てよ、って思ってしまうよと。

ですが、作った人自らの口ではっきり言ってもらえたおかげで、すっきりしました。(P65 David曰く)

P60..61 db:migrate時に

db:migrateで、テーブルproductsに追加する項目のうち、:description, textを間違って、:testにしてしまい、エラーが出たので、:textに直してやり直したがエラーが消えない。VERSION=0で戻そうとしてもdownが動いた感じがしない。そこで強引にupにdrop_tableを入れると削除出来ないと言われる。仕方なくMySQLのGUI Toolからテーブル(products)を削除しようとしてもエラーになってしまう。

さらに仕方なしにGUI Toolでdepot_developmentを全部消して、もう一度db:migrateを実行したら今度はうまくいった。む〜ん。

ちなみにこの状態でVERSION=0をやってみたがうまくいったようだ。お、shema_infoがある。これは残ってて良いのかな。

よく考えてみると、NetBeansのサンプルソースにDepotが付いていて、これを動かしたことがあるので、そのときに作成したテーブルが残っていたせいかもしれない。もっかいやる?

P61

P61より引用『downメソッドはupメソッドの結果を元に戻します。』
これはウソでないかい?。元に戻すかどうかはそこに書いたコード次第であって、Railsがやってくれるわけではないと思う。

本当かどうか確かめるために、ちょっと先をめくってみる。分刻みのイテレーションって言ってるのだから、次のバージョンアップについてきっと書いてあるだろう。

案の定、すぐ、P65には足りない列の追加という項目が出てきて、P66でそのコードの説明があるが、やっぱり手で追加するんじゃないか。すなわち手で書いたコードでは戻るかどうかはわからない。残念な結果だけど疑問は解決した。

downメソッドのテストも毎回必ずしないと元に戻すなんて出来ない。だいたいテストしてもバグがあるんだから、元に戻せるなんて言い過ぎだ。こういうところは声を大にして言っていこう。

それより何より、戻すかどうかわからないコードをデバッグするのは相当ストレスだと思うけど、それってRailsが最も嫌う無駄な雑用に近い保険じゃないんだろうか。

それに、どうせupメソッドを見て書くに等しいdownメソッドなら、必要になったときにupメソッドをみて書けば良い。そうすればトータルの時間はずっと少なく済むはずだ。

戻せると思い込んで、いざ戻そうってときに動かないショックは、大きいよ。

P60

productという名前のモデルをジェネレータで作成すると、Productsというテーブルを関連付けるとはまだ何となくわかる=>productのモデルのDBテーブル名を複数形名とする命名規則ってことだろう?

で、このテーブルをどうやって見つけたのでしょう?とあるが、どういう意味?それがdatabse.ymlファイルのdevelopmentエントリを記述するときにテーブルを探す場所を指定していたのですと言われてもなあ。どこにも指定してないし。ymlは最初っから場所決まってるし。DB上のテーブルはdepot_developmentでマイグレーションを実行しなければ、productsテーブルは作られないわけだし。意味不明だ。とりあえず無視。

2008年11月5日水曜日

ハードディスクのデータはそんじょそこらの磁石じゃ消えない?

さて、プレゼント用の磁石を探そうと、ハードディスクに入っている磁石を探していたら、ハードディスクのデータが磁石で消えるというのは都市伝説だったことが判明! みなさん知ってました? いろんなQ&Aサイトで、みんな声を張り上げてデータが消える!と叫んでおられたやうですが、ハードディスクのモータ部分なんでしょうか そこに強力な磁石が入っています。まあ、家庭とか会社で一般的に使う磁石で消えるなら、あの内蔵された磁石でとっくに消えてるでしょうなあ。

ハードディスクの物理処分で散々分解して破壊しまくって、この磁石スッゲー強力とか感心してたくせに、私も丸っきり120%ゼッタイ消えると思ってました。ぜんぜん考えもしなかった。頭悪ぅ。

ハードディスクのモータ部分の磁石についてはこちらを参照しました。

Rails本の原作

原作(※)が来ました。やや遅れて注文したプログラミングRuby第2版 言語編 ISBN4-274-06642-8 も一緒に配達されて助かりました。ここまで本格的に覚えるつもりは全くなかったのは前に書いたと思いますが、著者がDave Thomasさんが中心ということで買ってみました。ライブラリ編はRails本を買いにいったときもあったのですが、そっちはまたの機会に。

def respond_to(*type,&block)が分かるといいですが。

さてハードディスクに磁石で書き込むリナクサのことは英語で何て書いてあるでしょうか?

原作p25より引用:
『"I-code-by-twiddling-the-bits-on-my-hand-drive-with-a-magnet"』

正解者の方には抽選で1名の方にハードディスクのビットを反転させるのに最適なごく有りふれた磁石をプレゼント!みなさんふるってご応募ください、みたいな企画を考えてます。ところで単語を何故かハイフンで繋いでますが、どうしてでしょう? どなたかご教授くださいまし。

※原作:Agile Web Development with Rails  ISBN-10 0-9776166-3-0

ウェブなのにチェーン店

ウェブ上にチェーン店やフランチャイズを持つというのはどうなんだろう。

一見、ウェブは繋がってるんだから1個だろう、と思うのは正しいでしょう。でもそこを何とか、複数の店舗に分けるんですよ。

どう分けるかという問題もありますが、とりあえず普通に地理的に分けてみましょう。で、やはり普通に店長もしくはオーナの所在地別に分けます。そうすると、お店のブログは当然地域密着型にしやすい。場合によっては商品の在庫をその地で持ったり、リアルなデモ店舗をもったり、地域とマッシュアップしたり、交流を図ることができるような気がします。

例えばMashupEX山中湖支店というのがあれば、山中湖に関係あるサイトという認識をされるでしょうし、実際、山中湖の観光とマッシュアップしたり、日々の山中湖の写真や動画が配信されれば、そのサーバが実際にはパリにあったとしてもいいわけです。

ウェブショッピングモールに望むこと

例えば私の好きなAmazonに望むこと。

1. カートの中身を右袖に軽く表示してほしい。
買い物をしてる最中、リアルな買い物ならカートは手元にあって、何が入っているか常に分かるもの(預けるなどの例外もあろうが)。

2. 商品を表示したとき、その商品が、今カートに入っている/カートに保存している/ほしい物リスト(ウィッシュリスト)、を軽く表示してほしい。

例えば(メーラーのDockアイコンのような)カウンタ付きアイコンでリストの数や順位(ウィッシュリスト)などを合わせて表示。そもそもウィッシュリストに優先順位を付けて欲しいとか、ウィッシュリストに入ってたヤツを買ったら購入済みにして何冊も買わせないようにして欲しいとか、そういう要望もある。

3. ポイントを増やして欲しい。

4. カレンダーを付けて欲しい。

5. ウォレットを付けて欲しい。

これら3つ、特に4と5は他社のウェブサービスに解放して欲しい。つまりAmazonをパーソナルステーションにしてしまうのだ。だってクラウドの先頭切って走ってるのはAmazonだし、色んなものが買えるわけだし。ダメならYahoo!JAPANさんに行こう。

というか、自分でやろう。

ところでどうしてAmazonが好きなのか。自分でもよくわかりませんが、多分まだ日本のサイトが無い時代にアメリカのサイトで洋書を買ってDHLで2、3日で届いたときの感動とか、その後わざわざマウスパッドを送られてきたときの驚きとか(何か勝手に抽選で当ったか、クリスマスプレゼントだったか)、そういうファーストインプレッション的なものだと思います。


P46 ulタグ

リスト表示にULタグを使うとよいでしょうという教えを読んでULタグをググってみると(そう私はHTMLのタグさえろくに知らない)OLタグも気軽に便利でいいね。こういうのがなぜオブジェクトになってないんだろう。HTMLもろくに知らないヤツはそう思います。

MashupEXのプロファイルにもULやOLで実装するリストがあってもいいよね。

P44 ハッシュの正体はキーワードパラメータ

キーワードパラメータね、やっぱり。最初にそう思ったんだけどさ、メソッド側のコードを見たときに、普通(誰の?)で考えたらシンボルが何かを判断してるところが確か無かったんだよね。見間違いなのか、それとも何か違うのか。そのうち連想配列をハッシュっていうのがおかしいとか、考えが捩れてきて理解不能に陥っていったような気がする。

VBでもあるよねパラメータに名前付けるの。書き方忘れたけど。そうやっとくとIntegerが2個以上並ぶ場合に並べ間違いがない。でもめんどくさくて結局使わなかったような気もする。バグったときは使おうかと思うんだけどね。

そういう理解でいいのかな?もーこのハッシュ君は。

Rails本 p44より引用:
『パラメータの意味がわかったところで、再びアプリケーションの説明に戻りましょう。』

はーい!先生!

理解するって本当にすっきりするよね。

<>を半角で書く

<> これは全角です。
html等を書くとき、Bloggerで書こうとすると、&ltとかを使っても、2回目以降の編集で、そっくり消えてしまう(その行だけ/まだ1行しか書いてないけど)。この前見つけたソースを表示する用のアレ、アレを使えば良いのかなあ。でもめんどくさそうだよね。Bloggerのエディタに普通にソースコードテキストボックスみたいなツールが組み込まれてればいいのに。自分が作るシステムには是非取り入れたいと思います。ていうか、プタレットなので、ん〜、ソースコードテキストボックスとしてウィジェット的部品にするのがどうなのか?(良いのか悪いのか)悩むところ。悩まず両方やれ。そのほうが早い。悩んでると遅いんだよね結局。買い物なら2つ買えないけど、プログラムなら2つでも3つでも好きなだけ書けるじゃん。

rhtmlにインスタンス変数を書くこと

<%= @controller_instance_variable %>

こう書いたとき、インスタンス変数ではなくメソッド(いわゆるアクセサ(ゲッタ))を使えばビューからコントローラのプライベートな変数に直接アクセスしている感じがなくていいのではないかと思うが、当然何か理由があるんだろう。

そもそもビューは(ここまでのところ:P41)クラスじゃない。単なるテンプレートでしかない。いや、ユーザが関与する部分としては、という意味で。

Joeの疑問(p41)ではRubyのメタプログラミング機能をうまく利用して、テンプレートオブジェクトに注入するとあるので、コントローラからRailsに戻ったときに、何をするのかが具体的に分かれば、疑問は解消すると思うので、とりあえず先へ進もう。


※これがよく分からない。オブジェクトはクラスかクラスのインスタンス(厳密にはクラスもメタクラスのインスタンスなので表現が難しいが)ではないのか? ビューオブジェクトもこれに従うのか、従わないのか。


2008年11月4日火曜日

P41 Joeの疑問、私の疑問

Rails本P41にテンプレートオブジェクトとある。テンプレートはクラスではない、まったく素のERb用ファイル、HTMLと<%が混在したファイルでしかない。なのにオブジェクト? オブジェクトとは一体、どういう、関係なの? byミシェル

とにかくERbファイルの中のスコープ(名前空間)の付いてないインスタンス変数は、全部コントローラのものだということになる。いいの? いい。

クロネコメンバースについて質問

クロネコメンバースの会員宛に荷物を送るとき、名前と会員番号、もしくはニックネームと送付用IDだけで送れるのだろうか。

そうなれば、オークションやバーチャル図書館で相手の配送先というプライバシーをクロネコ会社さんが保護することで、送付元は気を使う必要がなくなり、非常にうれしい。ニックネームとIDで使うのがいいな。IDだけだと、使い辛い気がする。

もしまだやってなかったら是非。あるいは佐川急便カードで。Yahoo!でやってしまうと、ショップの自由度が問題になるので、そこは物流、もしくはクレジットカードか、専門の管理会社か。専門の管理会社なら他のステータスなんかも総合的に管理するのがいいかも会社としては。とするとベリサインのような認証局、銀行、保険会社、カード会社。この辺だろうな。政府っていうのもあるけど公務員には責任が重すぎる(営利目的に徹することが出来ない)と思う。物流が認証局っていうのも、実際個人宅に人が行くというインタフェースを運用してるという重要性から言ったら、アリかもね。さあ!どうでしょ。

P598(2) ブロックとはメソッドに関連づけられてるもの

今までブロックをメソッドのパラメータだと思っていました。だからおかしかったのか。でもまてよ? Railsのコードのrespond_toのdefにはdef respond_to(*type,&block)ってあったよね。

P598 誤記というか文章理解の問題?

P598,A.9 ブロックといてレータで(以下引用)『yieldはメソッド呼び出しに類似した形て、yieldが記述されているメソッドからそのメソッドに関連づけられているブロックを呼び出すものだと考えれば良いでしょう。』(引用終わり)
このyieldが記述されているメソッドからというのは確かにそうなんですが、もっとつっこんで、「yieldと書いた位置から」になどにしたほうが良いのではと思いました。果たして合ってるでしょうか。

それが何をしているかを知っておくことは良いことです

P38

Rails本p38より引用:
『Railsのコードを見たとき、それが何をしているかを知っておくことは良いことです。』

同感です。

今後もこの調子で、「細かいが知らないと困ること」は常に知っておけるようにしてもらえることを願ってます。

10日でおぼえる本は自分には不向き

Rails本、P36まで来ました。

HTMLテンプレートか。そうだよなテンプレートだよな。と妙に納得を深めて、10日で覚える本はどう書いてあったろう?と思い、見返してみると、ただrhtmlファイルとしか書いてない模様。やはり10日でおぼえる本は自分には不向きな本だったということが良くわかる。この本も随所になるほどと思うことが書いてあって、その辺からとても気に入ってたんだけど、結局進んでいってもRailsの正体が全く掴めない。掴めた感じがしない。それは多分、Rails自体をよく知るという風になってないからではないかと思う。

Rails本は最初にHello World!を表示するアプリケーションを作って説明を行っているが、まさに簡潔で、ユーザがどんなコードを何処に追加したかとか、ブラウザの起動から一連のURLの解析と流れなんかが、丁寧に書かれている。それでいてRailsであるが故なのか、説明量自体はとても少くて済んでいる。

rhtml(ver1.2なので)をテンプレートと呼ぶことだけを取っても、理解しやすさが私には大きく異なる。もっと酷い本では、何の役目も説明せず、ただ<% %>で囲むとどうです、とか、ヘルパーなんちゃらを呼びます、とか。それじゃ何の応用も利かないでしょう。単なるデモ本でしかない。デモという目的であれば良いんだろうけど、身につけるための参考書足り得ない。

今更ながら第2版のコメントをAmazonで見ましたが、全コメントが5つ星(現時点で4つ)だったのが頷けます。でもくどいようだけど、本屋さんでチェックしたときには、まあとてもこんな分かりやすい、読みやすい本には思えなかった。やはり立ってパラパラめくるだけじゃわからんってことだね。

ちなみにAmazonの『なか見!検索』で私が気に入った『はじめに』が見れますが、はじめにじゃなあと全く読んでいませんでした。でも買うと気合いが入ってたしね、ちゃんと読んでよかったね。結局気合いだね。

Sun Tech Days 2008

Sun Tech Days 2008のお知らせがメールで届いた。あれ重複? とっくに申し込んであるのに、と思ってメールを探してみたけど、ない。え:なんで?

あーわかった。フィードでイベント&セミナー登録してたからだ。そっちで先に見たんでしょう。ほらキーワードがメールだと3つあるし。Sun Tech DaysのサイトではADVANCE: YOUしか書いてない。タイトルのFlashにはEMPOWER:YOU を加えた2つしかない。DEVELOP: YOUはどうしたんでしょうね。やっぱフィードのほうがいいんだね。でも例えば世のMLを全〜部フィードに替えたらサーバは持つんでしょうかね。素朴な疑問。

ところでこのADVANCE: YOUの書き方を見てるとJavaFXみたいに見えるわけですが、Project Hydrazineのセッションは皆無だけどJavaFXはハンズオンもある。HydrazineはJavaFXで手ザインツールとやり取りするような記事を見かけたので、まずはJavaFXということなのでしょうか。去年のTech Daysの時点ですでにSunSPOTの開発までJavaFXを使ってましたからね。

ただ気になるのは超ホットな話題っていうのが見当たらない?こと。気がつかないだけ? 3日目のアプローチ(学生さん用)が新しいけど、なんでまたfacebookアプリなんでしょうね。

Rails本には冗談が書いてある

変な冗談が書いてあるので、原作が読みたくなった。英語読めないけど。

英語の学習用に。例えば「強調表示機能」や「構成要素」の原文ってなんだろうと。勉強しながらユーディクショナリを作っていこうと思います。ところで、こういう断片的な訳語を公開するのって著作権的にどうなんだろう? 出来てから考えます。公開しなければ自分の私的利用でしかないわけだし。

Rails本より引用:P21『オレはハードディスクのビットを磁石で反転させて書くぜ』と言い出すようなLinuxユーザなら(以下省略)』(以上引用終わり)。さあこれを英語で何というでしょうか?

こういうテクノロジックでロングテールな冗談を集めたユーなサイトも作りたい! 広告月商目標1万円。April Fool Awardを4/1に。おまけで「これを英語で(君なら)何て言う?」ページを付けるので、みんなトラバしてね。スペイン語を筆頭に各国語で。だったら言語自体も自由にしとこう。『これを(私なら)*語でこう言う』かな。そっかジャンル限定っていうのもなあ。あ、さっきの話だと限定チャンネルだから良いのか。いや、これは違うでしょ。ジョークっていう時点でチャンネルだよ。冗談チャンネル。そう考えると大きさ(業界風に言うと粒度)って面白いというか難しいというか。

注)私はトリビアとロングテールを少数派(自分には重要でも他人には重要でない)という意味で同じに捉えています。もともとWeb2.0を知る前は沢山のトリビアなサービスを展開するというのが基本理念でした。その頃、Web2.0というのはセマンティックウェブのことだと思ってました。間違いです。

18:28 追記
Rails本に学ぶ英語100。Railsの勉強をしながら、英語を、学びましょう。byミシェル

2008/11/5 12:59 追記
April はやめて、Summer Fools' Awordにしよう。夏をクールに。 寒さもどんとこい。

コンバース

コンバースのブラックサバスモデルというのがあるらしい。

その話を聞いて一句。

1. コンバースだけを集めたサイトを作る。月商目標1万円。
2. ブラックサバスのニュースサイトを立ち上げる。月商目標1万円。

ブラックサバスファンではなく、ロニージェイムスディオファンで、ネオンの騎士のファンです。高校3年のとき、修学旅行と東京公演が被ってしまい、本気で東京公演に行こうとして、親の許可まで取ったものの、友人が修学旅行ぐらい言っといた方が良いと説得され、自分も思い直して、じゃなかったかなと思うのですが(あやふやな記憶)、結局、修学旅行を取ったのは事実です。で、たしかFMでライブの模様が放送されたと思うんですが、ロニーが風邪かなんかで声が完全につぶれてしまって、酷い状況だったのを覚えています。ホント行かなくてよかった。。。

で、本当の一句。

1. 特定の商品だけを集めたサイトを沢山作る。最初に思ったのは黒いシャツ専門チャンネル。おおっ、チャンネルときたね? いいねチャンネル。販売にチャンネルって新しいんじゃない? あるのかもしれないけど。ウケるかどうかも分からないけど。販売チャネルっていうとまた意味が違うし。

2. 特定のアーティスト限定のニュースサイトを作る。このニュースサイトは現在のブログみたいにウェブアプリケーションとして売り出す(売るっていうのは名前を売るって言う意味で金銭的な売るではないです)。これもチャンネルだね。

チャンネルっていうのは昔から思っている一つの基本的なメタファで、きっと多くの人がそう思ってるんじゃないかと思う。ちなみに私は電話番号とチャンネル番号が残ると思ってましたが、電話番号は妖しくなりつつあります。チャンネルもチャンネル番号としてしまうと、生存率は低いかもね。わかんないけど。



ビューはテンプレート

テンプレートねえ。ビューを何で書くかということだと思うけど、結局設定ファイルみたいなもになるのか?HTMLテンプレートは。設定ファイルとプログラムコードの違いは何かというと、CPU的実行コードか否かということなのか。ん〜微妙だな。

テンプレート、テンプレート、テンプレートと。

んーやっぱり違うね、自分の感覚とは。まそれは(それで)良い話だし。Rails的にはビューはHTMLテンプレートだと。

Rails本こそRails初心者が最初に読むべき本だと思う

めちゃめちゃ面白いじゃん!
こういう説明こそ重要かつ最初に読むべきもの。アマゾンのコメントもブログエントリを張れるようにしたほうがいい。この辺はもう今更な感じだが、自分がやりたいのはそもそも現在のブログアプリじゃないので、あくまで現状のブログ環境に対して言っているだけ。でもAmazonのようなサイトにしてみれば、自分のところにコンテンツ自身を入れてくれないと面白くないんだろうなあ。まさか投稿した場合と同じく二次的著作物として非独占的権利を有するとかなんとか、言い出したりはしないと思うけど。どっかで始めたよね最近、商品にその商品に関するブログをくっつけるサービス。どこだっけ? まいいや今は。

Amazonにコメントしようと思ってしまったので脱線してしまったが、話を元に戻すと、本当にこの本こそ、Rails初心者が『最初に』読むべき本だ。あ〜失敗した。出版社はもう少し外見に拘って欲しかったなあ。そんな要望は自分だけかもしれないけど。これをカラー写真入りで雑誌みたいにかっこ良く、段組みとかもつけてやったら、良いと思うんだけど。『Web Designing』さんにやってほしい。もしくは『CSSクリエイティブ・デザイン』の著者/編集者の方々に。

あ、また脱線。

−この本こそ、Rails初心者が『最初に』読むべき本だ。で、これを読んで分からないところを他の情報で補えば良い。ウソだと思ったら、最初のほうだけ(今11ページ目の中程までを読んでこれを書いてます)立ち読みさせてもらうと良い。ツタヤに置いてあればなあ、コーヒー飲みながら遠慮なくチェックできるのに。図書館の蔵書としても必須アイテムだと思う。読み終わって尚考えが変わらなければ、そして近くの図書館にこの本がなければ1冊寄贈します。−

あ、Kivaみたいにバーチャル図書館ってどう?(あげるんじゃなくて貸すっていう意味でKivaみたいかなと思いました)どこで止まるか分からないけど、まず私が誰かにこの本を着払いで届けます。受け取った人は送料だけ負担すれば良いわけです。で、次に読みたい人にまた着払いで送ります。途中で売られてしまったり、読むにも時間かかるし、現実的ではないけどね。面白そうな気はします。常に私に送り返すだと送料が無駄になるし、住所が私に集まるのは良くない(集めようとしないでね)。そうするとやっぱり図書館みたいな公的ハブを利用する方がいい。で図書館も協力してくれて、寄贈本コーナーというか「お勧め寄贈本」ステータスを本に付けてくれるといいね。それもそうだけど、単純に口コミシステムを図書館自体にリアルに導入してくれればいいのか。借りた人がコメント付けて返せるようにする。でまあ非常識なものは除いてそのまま本に挿んでおく。もちろんWebも良いんだけど、いちいちPCで調べてとか、ケータイで見れたとしてもね、ちょっとめんどくさいと思う。実際本を手に取ったときに後ろを見ればコメントが書いてある方が、UIとして、ユーザビリティが高いと思う。

私は別にチュートリアレット構想があるわけだけど、この本のベータ版を永遠のベータとして残してくれて、そこ上で他の本(サイト)が補完する。これが理想だな。自分の書くつもりの本はこんなに内容的に素晴らしくはならないだろうけど、構造的にはそうするつもり。題材はもちろんMashupEXそのもの。そしてこれから作るであろうあらゆるプログラムというプログラムすべて。オープンソースって素晴らしい。発明したフリーソフトウェア財団とリチャードストールマンという人(および彼をサポートした人々)の先見の明と、もちろんオープンソースとしてメジャーにした多くの貢献者の素晴らしさを、ようやく実感しつつある感じ。Web2.0の本質はそこにこそあると思う。

言語環境やOSやデバイスに固執しない

ウェブログはログとして使えば良いわけで、何も読み物としての完成度を求める必要はない。

何故Javaかと言えば、多くのデバイスをターゲットに出来るからだ。RoRはHTML(現在のWebアプリ)しか相手に出来ない(と思っている)。

いろいろ思うことはあるが書きたいような書きたくないような。要するに次こそJavaだと。いや違う。言語環境やOSやデバイスに固執しない、これが元なんだから、別に今慌ててJavaである必要は全然ない。また間違うところだった。つまらない損得勘定は捨てること。大丈夫。俺は間違ってない。必ず出来る。だからやるんだ。やり遂げるんだ。:-)

Rails本に移った訳

10日でおぼえる本からRails本に移った訳を忘れてしまった。あ、思い出した。ハッシュの使い方がどうしても気になっていて、まずそこを解消したいと思ったから。Rails本に載ってるかどうかは分からないが。別に投げた訳じゃない。

2008年11月3日月曜日

RailsにおるアジャイルWebアプリケーション開発

出だし読み物として面白い。
第2版に寄せて、監訳者序文、はじめに」と読んだところ。
監訳者序文を見ると、Railsの火付け役という第1版も読んでみたくなった。Amazonで確か中古で安く売ってたので、買ってみようかな今度。今は時間がないのでやめましょう。

マイグレーションでDBを戻せる?

マイグレーションでやる前から気になっているのは、戻す場合。
普通、バージョンを戻したりはしない。トラブルがあってこそだ。まあ、それが言い過ぎだとしても、毎回戻したりはしないはずだ。ということは、使われない「戻すコード」を大量に書いてテストしてしまうということになる。しかもRubyコードで手書きするということは、バグがあるということ。つまり、戻らないということ。

もっと賢い方法だとばっかり思ってた。
10日でおぼえる本にはすごいことが書いてある。drop_tableだって。消すのか? これは最初のバージョンだからね。その前は確かにテーブルが無い状態だった。先をめくってみると、002バージョンではちゃんとスキーマを元のもので書き直している。書き直している!? DRYなのか?これって。せっかくなんだから、up間の差分を判断して、戻して欲しいよね。

それと実際にレコードがある程度溜まった状態で変更があった場合、元に戻すということは、その間変更のあったレコードを元に戻す必要があると思う。データベースは、レコード有っての物種だからね。そう考えると、以前のバージョンをテーブル毎保存しておいて、そこへ戻すほうが合理的かつ安心。

つまりマイグレーションで行うバージョン管理とは、スキーマレベルということなのだろうか? それは余りにもお粗末だ。きっとまた、私が大きな勘違いをしているに違いない。

それはそうと、DB側で世代管理機能ってあってもよさそうだけど、一体、ドウナッテルノヨbyミシェル。



namespaceは:で

Rake騒動のおかげで、こちらを拝見することができ、長年(といっても3日程)疑問だった:コロンがネームスペース修飾だということが分かった。そういう理解でいいんだろうか? 何せ#はコメントだけじゃないからね。{}もブロックだけじゃないからね。

Rakefileにlib/tasksに置いたrakeファイルを記述する方法は?

10日で本にrakeのタスクの構文と例が載っているが、肝心のrakefileにlib/tasksの下に置くrakeファイルの書き方が載ってないので分からない。

と思ったら何のことは無い、デフォルトのままでlib/tasksに.rakeファイルを置けば良いだけだった。NetBeansでRakeファイルの作成が無かったため、何でも良いだろうとRubyファイルの作成としたのだが、こうすると強制的に.rbが末尾に付与されてしまい、IDE上で名前の変更として.rakeを付けても、.rake.rbとなるのであった。な〜んだよ。。。

でも10日でおぼえる本には「Rakefile内dタスクファイルを探索するためのパスを設定します」p69 と明記されているよなあ?と思ったら、これが読み間違いで、よく読むと「Railsが」行うこととして書いてある。すまん。申し訳ない。

なぜ気づいたかと言うと、コマンドラインからやって作ったプロジェクト上で同じことをするとうまくいったから。なんでNetBeansだとダメなんだ?ということでよーくみたら、そういうことでした。

2008年11月2日日曜日

RoR本の購入

前から何度も立ち読みやAmazonでチェックしていた本だが、なかなか買うところまで行かなかった。今回余りにも分からないことが多すぎて(それでも大分馴染んできたが)、ついに購入に踏み切りました。


当然な人には今さら何言ってんの?的本ではないかと思いますが、こんな厚くて見辛い本、私は見た目で引きます。それに作者の本より、良き理解者の本を好む質(タチ)なので、ROR作者作という点で逆に引いたのと、 RoR2.0対応じゃないということで敬遠してました。でもあるとき、NetBeansのサンプルソースとしてついているDepotというアプリケーションが、このサンプルだということを発見して、絶対買おうと思って高島屋の紀伊国屋さんに行きましたよ確か、2週間ぐらい前? や〜っぱり買えませんでした。でも今は気合いが違いますからね。何でも来いです。(知りたいことがこれに)載ってるかどうかは分かりませんでしたが、まあ、これに載ってなかったらしょうがないだろうと。

2. Ruby on Rails逆引きクイックリファレンス ISBN978-4-8399-2826-1

これもこんなレベルまで踏み込む予定は全くありませんでしたから、それにクイックリファレンスという割にはリファレンスっぽくない感じがしていたので、これは全然買う予定じゃありませんでした。でも今までの流れから、どうせ藁をも縋る思いで買うんでしょ?みたいな感じで。

あ、藁っていうのは相対的な意味であって、こっちがカナヅチなんで、浮き輪も藁も同じに感じるということです。

3. Railsレシピブック 183の技  ISBN-978-4-7973-3662-7

これも2.と同様、逆引き系です。2.を買ったので、比較とかN増しとかいう感覚で買い増しした感じです。なぜ183個なのかということについては特に気にしてません。

4.UNIXシェルスクリプト辞典 ISBN4-7981-0923-1

これはおまけ(といっては失礼ですが)。この間MySQLで空のテーブルが何個作れるか試すのに作成はいいんだけど削除で"y"って入力を返すのがわからず、どこかのQ&Aサイトで質問して教えて頂きました。自分でもecho y | echo ってやったんだけど、これだと改行しかしないので、ダメだと思ってしまった(何故だろう?)。echo y | mysqladmin -u root detete file名でやったわけですが、rootがパスワードなしでいいと割り切っていたので(実験ですから)。で、試しにexpectを使おうとしたんですが、これがまた全然ダメで、そういう関係ないところで時間無駄にしてしまって、大いに反省していたところに、偶然Ruby売り場の隣に置いてあったので、衝動買いしてしまいました。でも肝心のコマンドが本とMacOSXで合ってるのかやや心配です。

クラスメソッド

この辺がなんだかなあなのでメモ。
クラスメソッドとクラスの特異メソッドの違い。
クラスとメタクラスの関係。

Classクラスがその他のクラスのメタクラスじゃないのか?

なぜなら、例えばObjectクラスはClassクラスのインスタンスだから(だと思うから)。つまりクラスのクラスということでメタクラスなんじゃないの?

でもここにはClassのインスタンスとしてObject(などのメタじゃないクラス)と同名のメタクラスがClassのインスタンスとして存在すると。で、それがObjectが持っている? 持っているっていうのは、どういう格好だろう? クラス変数として? わからん。『もちろんClassで定義されているメソッドもクラスメソッドとして使えます』ってどういうこと? またクラスメソッドって何ってなるじゃん。


必要に迫られるまで、ペンディングだが、経過をメモ。

受け入れる

例えば繰り返しについて考えてみよう。
intであろうと、floatであろうと、
for( i = 0 ; i <10 ; i++ )
{
    m[ i ] = rand( i ) ;
}
は(mについて)同じ結果になる。
しかしオブジェクト指向で実装する場合、integerとfloatは別クラスであるため、両方とも繰り返し構造が必要になる。とすれば、1つの繰り返し処理で両方処理できるのではないか?できる、したい、する、となる。でもそれにmix-inを使わなければならないのだろうか。もし進化の木が一本の根につながるのであれば、さらに掘り下げればビッグバンを越えてインフレーションまで1つの川を遡るのであれば、むしろ、どこかの段階で繰り返しメソッドが入るべきではないかと思う。

しかしコンピューティング上のオブジェクトは、あくまで便宜上のものであり、生物や宇宙の進化を表しているわけではない。うまく利用することこそが重要視されて驚けない。しかも数学的な問題となれば、なおさら物質的な問題そのものとは違ってくるだろう。

「なるほど。」

ということは、特に数学的な特徴を活かした機能に関しては、オブジェクトの木とは違う場所にあって然るべきなのかもしれない。長年理解できなかった答えとは、こういうことじゃないか? それが概念交換機へと繋がる源流なのかも。

rubyのモジュールの実際のコードや使われ方もまだ見ていないけど、名前はともかく、本来のオブジェクトとは別にしてmix-inして取り込むというのは、実は非常に合理的な考えなような気がしてきた。考えが一転してしまった。

本当はモジュールのようなやり方に納得できない病が発生しそうだったので、前に言ったように考え方に合意せず、受け入れようという主旨で書き始めたのに、30秒程冒頭部分のことを考えてたら、こんなエントリになってしまった。

まてよ? だとしたら、宇宙はどこから数学をmix-inしたんだろう。

2008年11月1日土曜日

yied の読み方

辞書の発音記号を見ると、jíːldとなっている。カタカナで訳す("yield".katakana)とジールド? 

でもジーっぽい単語を適当に見ていくと、dʒíː ばっかり。例えばジープはJeepでdʒíːp。google( "yield イールド" ) だと沢山出てくるので、やはりイールドなのか? でもeastは íːst、ってやったら偶然イースト菌のイーストがyeastでjíːstなのを発見。

どうしても知りたい。で、こちらを見つけました。

なるほど、やっぱり違うんだ。だったら発音が付いている辞書で実際に聞いてみれば良い。なぜ最初にそれを思いつかなかったのか? バカだなあ。

まずeastを聞いてみるとイースト。yesetを聞いてみるとイイースト?もしくはィイーストみたいな感じです。イがダイナミックというか長い。私的にはイイーストですが、一般的にはイースト、でしょうな。うん、納得。あれ?肝心のyieldは?というと、なんかふつーにイーオドって聞こえます。(このオはよくLはこうなりますよね)。ちなみにこれらの発音はExcuite辞書で聞きました。

ところでrubyでカタカナに訳してくれるメソッドはある? さっき"yield".katakanaって書いたけどruby的には"yield".to_katakanaってしたいのかな? ググってみると、katakanaもto_katakanaもあるけど英語(外国語)→カタカナっていうのは見つからないね。辞書が必要な割に誰も必要としてないってことか。

とにかく、イールドで納得した私でした。

イテレータの意味

繰り返し子?http://www.swlab.it.okayama-u.ac.jp/man/ruby/uguide/uguide09.html
思わす「くりかえしっこ」と読んだけど、「くりかえし・し」?

いずれにせよ、イテレータの意味が「iterate: 繰り返していう[する]。反復する」だったとは不覚も不覚。何で意味調べようとしなかったんだろう。