昨日はユルさん と一緒に台所の大掃除をしました。そのあとはお買い物をして早めの夕ご飯。ひさしぶりにすき焼きを食べました。おいしいね。
kaeruspoon の独自記法に、youtube記法とamazon記法を追加しました。amazonはAWSを使っているんだけど、ruby/amazonを使ったので実装は楽チンでした。今度、ruby/amazonのソースを読んでおこう。これで欲しい機能はだいたい実装できたかな。にこにこです。
「「WEB+DB PRESS Vol.36」 」を買いました。Seasar2の記事がおもしろかった。よく聞くんだけどなんなのかよく知らなかったから。ぼくはJavaに接することがあまりないから。なにせ、
「「増補改訂版Java言語で学ぶデザインパターン入門」 」で初めてJavaに接したくらいなのです。でもJavaもなかなかよさそうだね。仕事じゃなきゃ使う気しなさそうだけど……。
やっぱ999はカッコいいなあ。この動画のやつなんて悪そうでとてもいい。1098も出たけど、やっぱ999だよね。
さっそくyoutube記法とamazon記法を試してみました。ここを訪れている人にはあまり関係なくてどうでもよいお話。こうして夜は更けていきます。
あ、今日はお正月じゃないか。あけましておめでとうございます。これを書いているときは、まだ大晦日の午後7時なので、書いているぼくにとってはまだめでたくもなんともないのです。ちなみに仕事始めは今日からだったりします。大変がやってきた!
お雑煮を食べました。おもちは三つです。お正月はいいね。昨日は仕事だったし、今日も仕事なのだけど。
amazon機能を強化しました。日記で言及したモノに関しては、一番下に一覧表示するようにしてみます。なかなかいい感じ。amazonのAWSを使うのって、なんだか楽しいです。みんなが使えるウェブ本棚でも作ってみようかな。
あとkaeruspoon に追加するとしたら、amazon商品の検索機能くらいかな。これはぼくが便利になる機能だから、次に実装しましょう。わくわく。
あ、それから紹介したyoutube動画の一覧もamazon一覧の下に表示させるようにしよう。それからあとは、Ajax チャットを作ってみたいのでそれも実装しよう。そこまで行ったら、キャッシュをあちこちで使うようにするつもりです。今はまだ別にいいけど、そのうちあちこちが重くなりそうだから(すでにちょっと重くなっているけど)。そして最後にリファクタリングしましょう(まだやらない気かよ)。いや、とにかく機能をどんどこ追加していくのが楽しいのです。サンデープログラマのいいところは自分の好き勝手できるところなのです。
仕事で社内で使うようなツールをちょこちょこ作っていたりします。今の部署で使っている社内ブログや情報共有用アプリなどはRuby on Rails で作っているのですが、以前いた部署での同様のツールはPHPで作っていました。当時はRuby もRails も知らなくて、知ってるのはC言語だけで、さてwebアプリを作るにはどうすればいいか、を考えたときに自然と選択したのがPHPでした。Cに似てるしね。
リファクタリングしなきゃ機能追加もロクにおこなえないのでそこから手をつけたのですが、これがなかなか楽しかったです。こういうのってぼくの性に合っているかも。なんだかkaeruspoon も早くリファクタリングしたくなってきたよ。
あ、あと、最近初めて使った言語にawkがあります。シェルスクリプトとからめて使ったのだけど、これもなかなか楽しいね。いろいろとやってみたくて、特に必要でもないツールとか作って遊んでたりしています。
最近初めて、といえばJavaもそう。こいつはまだコードを書いたことはなくて、デザパタ本で触れているだけですが、そのうちちょっと使ってみましょう。
Youtube機能をさらにちょっと強化しました。日記で言及した動画は一番下に一覧表示されるようにしてみました。この動画のサムネイルを手に入れるにはYoutubeAPIを使います。初めてまともにNet::HTTPを使ったけど、おもしろいなあこれ。もっといろいろやってみたい。Ruby /Amazonを使うのやめて、kaeruspoon 専用のものを作っちゃいたくなってきた(車輪の……)。
それにしても、web service APIを使っているためかトップページがとても重くなってしまった。ログを見ると、トップページを表示するのに5~6秒もかかっている。ありえないよ。毎回、ひとつひとつ取得しにいくのはヤバそうです。なにかやり方を考えよう。
それから機能追加の前に一度リファクタリングすることにしました。綺麗に整理です。今後はひとつの機能を実装するごとに綺麗にしようっと。
日ごと、日記につけている一言ですが、すぐに何も出てこないときは5年くらい前のものを使い回しています。エコロだ。
あまりにも重かった、web serviceを使って情報を取得する部分を改良しました。5~6秒かかっていたトップページの表示時間は0.5秒前後に。10倍の速度だ。シャアよりすごいぞ。やったのは簡単なことで、取得した情報をDBに保持しておくようにしただけ。これだとAmazonやYoutube側で情報が変化したときに対応できないので、情報を取得してから一週間が過ぎたら、再度アクセスして情報を取りに行くような仕様にしてみました。一週間という期間は適当なので、様子を見ていろいろ変えてみようと思う今日この頃であります。
でもこのやり方、kaeruspoon みたいな個人用サイトだからできるんだよね。10年使ったって、言及する本や動画の数なんて知れたもの。でも、たくさんの人が使う大きなサイトだと、だんだんとDBのレコード数がAmazon本体のそれに近づいていきそう。ユーザ数の多いブログサービスとかどうしてるのかな? それくらいのDBをちゃんと扱えるので問題がないとか。ちょっと知りたいです。
Rails 1.2になると、Rails 2.0で廃止される予定のAPIを使った場合に警告が出てくるそうな。Deprecation(互換性)という名前がついているこの仕組みだけど、kaeruspoon でもDeprecationに引っかかりそうな部分はあらかじめ直しておこう。と思ったけど、Deprecationに関する記事がネット上に見あたらない。あれ、おかしいな。確かにどこかで読んだ気がするのに。ブックマークもしてないし、はて困ったと思っていたら、「「WEB+DB PRESS Vol.36」 」の中の記事に書いてあったのでした。なんでもgoogleして調べようとするのはあまりいいクセじゃないかも。足下に置いてあった雑誌に書かれていたのに30分もネット上を探しちゃったよ。
popxpopの「ありえないほどリアルなファイナルファンタジー、『College Saga』 」という記事でおもしろい動画が紹介されていた。世界にはおもしろいことするやつらがいるものだ。ここでも動画を載せておこう。
昨日はユルさん と一緒に初詣に行きました。赤坂にある日枝神社です。写真にあるように、まわりを高層ビルに囲まれている都心の神社ですが、ちゃんと神社が備えているべき雰囲気を持っていて落ち着けます。少なくとも明治神宮よりは全然いいですね。ひさしぶりにたき火にあたりました。
DBになぜか変な文字列が混入してしまうという現象に出会ってしまって、ちょっとハマってしまいました。Youtube動画の情報をDBに保持する処理のところです。
text.scan(/\[youtube:(.+?)\]/).each do |number|
……
(省略)
……
item = Youtube.new(:youtube_number => number, :image_url_small => image_url)
たとえば、「wwLrgxtALWs」という動画IDがnumberに入っているとします。このあとにsaveをかますと、なぜかDB上のyoutube_numberカラムは
---\n - wwLrgxtALWs
というような状態になっているのです。動画IDの前に入っているなぞの文字列はなんなんだよう。しばらく悩んだ末に、numberのクラスがStringでないことに気づきました。調べてみると、numberのクラスはArrayだったのです。というわけで、
item = Youtube.new(:youtube_number => number.to_s, :image_url_small => image_url)
これで解決しました。
ちょっと納得いかなかったので、scanメソッドについてちょっと調べてみます。
a = "1111abc222def333ghi444"
a.scan(/abc(.+?)def/) do |text1|
p text1.class
end
結果は
Array
ところが以下のようにすると、
a = "1111abc222def333ghi444"
a.scan(/abc(.+?)def(.+?)ghi/) do |text1, text2|
p text1.class
p text2.class
end
結果は
String
String
うおー、納得いかねー。確かにオンラインマニュアル を見ると、カッコでくくった部分文字列の配列を返すと書いてある。ちゃんと読んでなかったぼくが確かに悪かったよ。でも、ブロックに渡すパラメータが2個になるとStringになっちゃうのはなんでなんだろう。
今日も今日とてロックだぜ。ThriceとかLetter Killsとか、「PANDORA 」のおかげでいろいろといいバンドが見つかるのだ。素敵じゃないか。
kaeruspoon の掲示板にはコメントを記入したときだけ書き込みボタンが押せるようにしてある……んだけどなんだか変な感じだったのでいろいろやってみました。
<%= text_area :comment, :text, :cols => 60, :rows => 3, :id => 'field-text',
:onchange => "if ($('field-text').value != '') {\
$('comment-submit-button').disabled = false;\
} else {\
$('comment-submit-button').disabled = true; }" %>
これだとテキストボックスから一度フォーカスをはずさないといけない。そうじゃないとSubmitボタンが押せる状態にならないのです。ようはテキストボックスに文字が入力されたり削除されたときに判定すればいいわけで、だから「onkeypress」を使ってみます。でもこれだとダメでした。特に文字を削除したとき。キーが押された時点ではまだ文字が削除されていない様子。なので、「onkeyup」を使ってみるとうまくいきました。ただ、日本語入力だとちょっと変な挙動のときがあるんだよね。うーん、まいいか。これは宿題です。
「FEEDBRINGER 」がおなじみRails のエラー画面のまま止まったままです。はて困った。ぼくは今ではwebサイトを見て回ることはあまりなくて、ほとんどをRSSリーダで済ませているのです。とりあえず前から気になっていた「livedoor Reader 」を代わりに使うことにしてみます。もうあまりFEEDBRINGERを使う気がなくなっちゃった。web上のサービスって、こういうことでけっこう簡単にユーザを失うんだなあ。
livedoor Readerに移行するにしても、ぼくが巡回していたサイトがなんなのか、はたまたそのサイトがどこにあるのかFEEDBRINGERが復活しないことには全然わからないのです。とりあえずうろ覚えのものを登録していっているのですが。
今日の一言に特に意味はありません。今日だけでなく、いつも意味などないのですが。
昨日はユルさん と一緒にマクドナルドに行ってきました。ひさしぶりにビッグマックを食べます。たまに食べたくなるのです。
ウイイレをやりました。ユルさん が作った「おおいし」という選手が大活躍です。ゴールを決めると中村俊輔と肩を組んで喜んでます。
昨日はひさしぶりにスノーボードの手入れをしました。今週末はスノボー をしに行くのです。2年ぶりだからどきどきしますね。とても楽しみ。
ホワイトカレーを作りました。あまりぼくの口には合わなかったし、ユルさん の口にも合いません。ぼくたちには普通のカレーがいいみたい。
執筆 状況の更新pingをどのタイミングで打つか、と考えると、それは公開したとき、つまり零時過ぎなわけです。Rails アプリの中で零時過ぎになるのを待つ処理を入れるのってなんだか不自然、というか変な感じがする。更新ping用の簡単なRuby スクリプトを書いて、cronでそいつを動かすようにしようかなと考えてます。ActiveRecordが単体でも使えるのは便利だなあ。
FEEDBRINGERが復活してました。社員さんが出社してきたのでしょうか。これでようやくすべての巡回先をlivedoor Readerに移行できました。ついでにFEEDBRINGERを退会しておきました。やれやれ。
ユルさん が手伝ってと言うので、彼女のサイトを見てみました。ユルさん はホームページビルダーを使って自分のサイトを作っているのです。彼女が言うには、更新したトップページが表示されないらしい。見てみると、確かに新しいページが表示されずに古いままのページが表示される。おかしいな。なんどか見ているうちにサーバ上にindexファイルが2つあることに気づきました。「index.htm」と「index.html」の2つです。「/」止まりのURLを指定したとき、拡張子がhtmlのものが優先されるような設定になっていたようです。わかってみればなんてことないけど、気づくまでは不思議でした。なかなかおもしろい。
cronで更新pingを打つスクリプトを作ってみました。
#!/usr/local/bin/ruby
require "xmlrpc/client"
require "uri"
require 'rubygems'
require_gem 'activerecord'
$LOAD_PATH.push('../../app/models')
config = YAML.load_file('../../config/database.yml')
ActiveRecord::Base.establish_connection(
config['production']
)
now_date = Date.today
diary = Diary.find_by_open_date(now_date)
if diary
name = diary.title + ' : kaeruspoon Diary'
url = 'http://www.kaeruspoon.net/diary/'
url << "#{now_date.year}/"
url << "#{now_date.month}/"
url << "#{now_date.day}"
ping_uris = Array.new
ping_uris << 'http://ping.myblog.jp/';
ping_uris << 'http://www.blogpeople.net/servlet/weblogUpdates';
ping_uris << 'http://ping.bloggers.jp/rpc/';
ping_uris << 'http://bulkfeeds.net/rpc';
ping_uris << 'http://blog.goo.ne.jp/XMLRPC';
ping_uris << 'http://r.hatena.ne.jp/rpc';
ping_uris.each do |ping_uri|
uri = URI.parse(ping_uri)
connection = XMLRPC::Client.new(uri.host, uri.path, uri.port)
connection.call('weblogUpdates.ping', name, url)
end
end
やっつけ仕事ですがうまくいくでしょうか。できればRails のログファイルにメッセージを吐きたいんだけど、やり方調べるのがメンドかったのでおあずけです。今度やろう。あ、あと、controllerのメソッドを直接使いたいなあ。
「javala 」という、javaを覚えるにはなかなかいい感じのサイトがあるとはてブで紹介されていたのでさっそくやってみた。javaを覚え立てのぼくにはぴったりなサイトです。サイトの言語は英語かフィンランド語が選べる。フィンランド語なんて未知の世界なので、当然英語を選択します。プログラミング 関係の英語はそんなに難しくないし、コードを見ると言っていることが理解できたりするから、英語が苦手な人でも大丈夫です。なにしろ、「「英文法のトリセツ—英語負け組を救う丁寧な取扱説明書 じっくり基礎編」 」を読んでいるぼくが言うのだから間違いない。
とりあえず、Basics of the Java languageとStringsをクリアしてみます。うーん、ひさしぶりにfor文なんて使ったよ。Ruby じゃ使う機会がないもんな。あと、String aa = new String();とかいう書き方がまどろっこしいです。素直にaa = String.newって書きたい(それはRuby )。あと、s.length();とかも、s.lengthって書けたほうがすっきりするよね(それも)。なんだか改めてRuby の良さを再認識してしまいます。
今日からスノボー しに新潟のほうに行ってきます。わくわく。月曜日まで更新はありません←誰も気にしてないよ、そんなこと。
土日はシャトー塩沢スキー場へスノボー をしに行きました。ガーラ湯沢の近く です。10人以上の大人数で行ったのですが、みんなでこたつを囲んでご飯を食べたり夜中まで酒を飲んで修学旅行の夜をしてみたり、スノボー をしたりと楽しい2日間を過ごしました。神様の手によってズタボロに投げ出された背徳者のように体中ががたがたです。素敵だ。
写真を一枚アップ しました。
スノボー がやりたくて仕方がないです。筋肉痛だらけなのに。とりあえず、Youtubeでスノボー の動画みたりしてじたばたしています。新しいボードとか欲しいね。CUSTOM とか。それにバインディングも新しくしたいです。今のは安物でけっこう足ががたつくときがあるもんな。ブーツもそろそろ……と、いきなり物欲がつきません。なにはともあれ、スノボー がしたいです。安西先生。
「javala 」はObjectsとClassesとInheritanceとExceptionsをクリアしました。途中で、null判定の処理をいれなくちゃいけないところがなかなか気づかなくて、ちょっとハマってしまいました。
ぼくはVAIO のtype FというノートPCを使っているのですが、購入してから一年半が過ぎてさすがに動作がのろのろになってきました。なのでリカバリをしてみます。あっという間に終わったけど、起動・終了がめっちゃ速くなりました。すっきりです。
「javala 」はすべての項目をクリアして、King of Javaの称号を授かりました。あれくらいでKingになれるのだから大変です。なかなかおもしろかった。
ぼくはauの携帯を使っているのだけど、今の機種は使い始めてから二年になろうとしている。一回お話すると、だいたいバッテリが残り一目盛りになるおちゃめなやつです。そろそろ機種変更したいなあと考えているのですが、ウィルコム にふらふらしつつも、auのW52T がなかなかいいなあと思う今日この頃です。
楽天がwebservice を公開したね。楽天ってサイト自体もほとんど訪れたことがないのだけど、これを機会にちょっとAPIを使ってみようかなと考えています。Amazonで全部済めばいいんだけど、スノボー の道具とかってあまりないんだよね。Amazonにないものは楽天から探し出すような仕様にでもしようかと考えています。
とりあえずVAIO をリカバリしてから、昨日でようやく環境整備が終了しました。いろいろメンドくさかった。coLinuxまわりの開発環境とか……。Rails はいつの間にかバージョンアップしてたんですね。kaeruspoon はしばらく1.1.6のままでいきます。
ユルさん とマクドへ行きました。ウワサのメガマックを食べたかったのですが、すでに売り切れています。味はビックマックと変わらないみたいですね。本当のところ、ぼくが食べたいのはDouble Quarter Pounder with Cheese です。I want that he comes to Japan!
楽天webserviceですが、ちょっと試してみて、意外と使いにくいことに気づきました。たとえば、あるひとつの商品を紹介したいとき、amazonと違って取り扱い店がたくさんある上に、店舗ごとに値段も商品コードも違うのです。超メンドくせー。特定のお店の商品を紹介したいときはいいけど、そうでないときは使いようのない感じ。ぼくがkaeruspoon で使いたいような使い方(Amazonみたいな)には不向きです。楽天の統合管理サイトを作るならいいのだろうけど……。というわけで、kaeruspoon での採用は見送りです。こりゃダメだ。
赤坂に観劇に行ってきました。パラノイア・エイジ さんの「平将門 傀儡徒夢」。とてもおもしろかったです。舞台に立っている桜さんはぼくの知っている人とは違う人のような印象を受けます。役者さんってすごいですね。
帰りにユルさん と居酒屋さんに寄って帰りました。居酒屋大好き。
くるぶしさんから教えていただいた不具合をなおしました。掲示板での改行も反映させるようにします。一番の問題だったのは、textareaに文字を入力すると横幅がびよーんとのびてしまうこと。これはInternet Explorerだけに出現する現象みたい。なんとなくイヤな予感がします。と思ったら、「Internet Explorer (Windows) CSSバグリスト 」という記事を発見。やっぱりかよこの野郎。ぼくはマイクロソフトって嫌いじゃないんだけど、こういうバグに遭遇するたびにぶっ殺してさしあげたくなります。嘘です。ホントはやれやれと首を振りながらため息を吐いただけ。kaeruspoon での原因はtextareaの幅を%指定していたから。これをちょちょいとなおしたらきちんと動きました。やれやれ。
kaeruspoon へのリンクから飛んできたときの情報を保持していて、リンク元としてAjax で表示しているけど、サーチエンジンの検索キーワードの日本語がURLエンコードされたままでした。なので、以下のようにしてみます。
ref_url = URI.unescape(referer).toutf8
URI.unescapeメソッドでURLエンコードをデコードしてくれます。このままだと、EUCとかSJISの場合は文字化けしてしまうのでUTF8に変換しています。
サーチエンジンの検索結果から飛んできたときは、リンク元のURLよりもサーチエンジンと検索キーワードだけ表示したほうがすっきりしそうですね。近いうちにそういう仕様に変更しましょう。
マジシャンのセロさんがテレビに出ていた。ぼくは彼の手品が大好きなのですごく楽しみにしていたのだけど、途中で寝てしまった。がっかり。なんでこういうときに限って寝てしまうのか。サプライズ。
藤堂さんと創作合宿の話をしています。かいはちゅ.com で紹介されていたブルーベリーロッジ がすごくよさそうだったのだけど、土曜の夜の宿泊はずっと先まで予約でいっぱいでした。残念。ぼく自身は平日でもいいんだけど、みんなはそうもいかないもんな。なにかよさそうなところを探さなくては。
サーチエンジンから飛んできた場合は、リンク元情報にサーチエンジンと検索キーワードの情報のみを表示するようにしてみました。だいたいのところが、「http://hostname/etc?q=search word...」みたいな感じのURLなんだけど、そうじゃないところもあったりして、ちょっとメンドくさかったです。まだ一部のサーチエンジンにしか対応していませんが、それはまあ誰かが飛んできたときにでもかんがえましょう。
初めてショウガ焼き丼を作ってみました。なかなかうまかったです。生姜焼きのもとを使ったので超簡単。いろんな元があるのでそれを使うといろんな料理がそつなく作れそうです。でも簡単なのが嫌いな人、ガンプラなんかプラモじゃねえ、という人は、一から自分で作ったほうが楽しいでしょう。
ひさしぶりに小説のストックができました。心に余裕ができるなあ。最近はあまり小説を読んでなかったので、またこちらの世界にちょっと戻ろうかと思います。
F-Ups 出版社/メーカー: Capitolメディア: CD発売日: 2004-06-17
ぼくがPandora を聴いていると、ときどきノリノリになってキーボードを叩いていたりして、そんなときはたいていSUM41の「Still Waiting」が流れているそうです(ユルさん 談)。The F-Upsの「Screw you」のときだってそうなんだぜ。
やっと羽生さんのドリル本を買いました。ぼくはSQLってちゃんと勉強したことなくて、考えてみれば使いたいときに使いたいものをネットで探すって感じだったし、単純なCRUDくらいにしかSQLを使っていなかったので、もう少しちゃんと知っておきたいなと思ったのです。
品川の本屋さんで買ったのだけど、そのときドリル本の前にふたりのスーツを着た人たちがいて、「ぷぷ、ドリルだって」「うわー、ホントにドリルだ。ネタで買おうかな」なんて言っていたので非常に買いづらかったです。でも買ったけど。おまえら、どんだけSQL書けるんじゃぼけ(すげー書けると思うけど)。
昨日は飲み会でした。寝過ごしました。起きたら相武台前とかいう聞いたこともない駅で、おいおいおいどうするんだよおれと思っていたらとなりの駅が小田急相模原だったのでほっとしました。次にやってきた電車が最終で、町田 止まりだったので、再びおいおいおいどうするんだよおれと思いました。結局、ユルさん に謝って町田 の漫画喫茶で朝まで過ごしました。
家に帰って寝て起きてお風呂から上がってきたらこんなものが。おもしろい。
仕事仲間から、タカラのQ-STEERをもらいました。大きさはチョロQとほとんど同じですが、赤外線リモコンで前後左右に動かせるのです。とりあえずぼくのVAIO の上で走らせてみます。
ネット上を見て回ると、発光ダイオードで電飾かましたり、チョロQのボディに換装している人たちもいます。だんだんと燃えてきました。とりあえずまずはオールペンでもしましょう。
ユルさん に「「ワールドサッカー ウイニングイレブン8」 」を買ってもらいました。とりあえずおおいしという選手を彼女に作ってもらいます。本人と同じデータにしたら、めちゃくちゃ痩せていてルーニーとかに吹っ飛ばされそうです。
こういうの、ぼく大好き。
昨日はユルさん と新宿に行ってきました。Ruby という単語に反応してしまう阿呆なぼくです。彼女の誕生日だったので、ピンキーリングを買ってあげました。
新宿を上から望むカフェで昼間からビールを堪能してきました。お昼にはイタリアン。とてもおいしかったです。ルミネのレストランにはおいしそうなお店がたくさんありました。また行こう。帰りにケーキを買って帰りました。楽しい一日です。
とりあえず武石さん用に、ここに紹介しておきます。小回り効かすために、とりあえずリアタイアにはセロテープを巻きましょう。
Q-STEERに塗装を施してみます。ボンネットだけ黒くして、なんちゃってカーボンボンネットです。相変わらずぼくは不器用だ。あとではみ出したところを修正しておきましょう。ついでにまた動画を載せておきます。