こんばんみ。起きて時計に目をやったら13時を過ぎていて、おかしいなと思って別の時計を見たらそれも13時を過ぎていて、今日って平日だっけ?としばし考えた結果、その状態で準備をして会社に行く気がおきなかったので会社を休んで二度寝に走ったkwです。
ま、昨日会社を出たのが朝の3時で、寝たのは確か朝の5時だったので許してください。
さて久しぶりにYahoo! Widgetの開発を再開しました。前回更新が4月だったので半年近く放置してました。なんかいろいろ英語のメールが来てたのですが全部無視してたらいつの間にか自分のWidgetがダウンロードできなくなってました。
Yahoo! Widgetのglobal functionにはopenURLという関数があり、引数にurlを渡してあげるとデフォルトブラウザで開いてくれます。はてなTrendsでははてなのRSSを読み込んでキーワードごとにリンクを張っていたのですが、リンクをクリックされたときにこのopenURLを呼び出していました。
外部のサイトのurlを開くということは攻撃対象になるおそれがあり外部から取得したurlはサニタイズすべしというおふれが出ていました。というわけでサニタイズしました。
tracにプロジェクトページを作成したのでリンクをはっときますhttp://projects.makotokw.com/trac/arcadia/wiki/HatenaTrends
Yahoo! Widget Gallaryにも投稿済みなので近日中にアップされるでしょう。
ちなみに追加機能はないのですでにご利用な方が無理にバージョンをあげる必要はありません。はてなから変なurlを含んだRSSが配信されるとは思えませんし・・・はてなを偽装してわざわざはてなTrendsを攻撃してくるような特異な人もいないかと・・・ですが今回下回りのライブラリを全部書き直したので個人的には試していただきたいです。
今後Vista GadgetやGoogle Gadget、あるいはAIR、Silverlightに展開できるようにWidget Engineに依存しないで開発するためのWidget Abstact Layerという階層をでっちあげていたのですが、名ばかりで実際にはこの上の階層でも普通にYahoo! Widgetの関数を直接読んでいました。。。
今回Yahoo! Widgetに機能があるのにわざわざprototype.jsを導入して全く同じ関数をwapperとして作成したりしています。一応UI部分だけ作り替えれば他のWidgetにも展開可能になった・・・と思っています。まだやってないので何ともいえませんが。。。とりあえずVista GadgetのはてなTrendsも作ろうかと思っています。
その前にMy OUtlook TodayとSongWidgetの開発再開が先ですが。。。
Archive for 9月, 2007
先月くらいから雨の日以外は自転車通勤してます。帰り際毎日といって良いほどおまわりさんに出くわしますがまったく呼び止められません。
呼び止めマニュアルでもあるのでしょうか。

DSよりもファミコンソフトを例に多くの説明を割いている点を見ると若干タイトルとのミスマッチを感じさせますが、スーパーマリオブラザースやドラクエを例にとった説明は非常に新鮮で興味深い内容が多かったです。
たとえばスーパーマリオプラザーズでは、ゲームが始まってすぐに右側に進んでいくゲームというのがわかるようになっているのですが一見当たり前に感じて気がつかないということはそれを自然にユーザに認識させているということだと思います。
これを読んで強く感じたのはゲームというのは非常に厳しい中で商品が開発されてきたんだなということです。安くもない、娯楽製品であり、ほとんどマニュアルを必要とせずユーザに飽きせず使わせ続けるという点を的確についてきたという点については今じゃすぐに飽きてしまいそうなファミコンソフトとは言え学ぶ点は多くあると感じます。
本については内容がゲームだし本もカラフルなので本を読むのが苦手な人でも読みやすい部類に入るのではないかと思います。本嫌いの人にお勧めです。
逆に本を良く読む人にとっては中身がポップ過ぎるので書いていることが当たり前過ぎて小学校の教科書のように錯覚するかもしれません。ですが、書いてあることはUIエンジニアリングの基本をちゃんと押さえてあり技術本として十分読める内容だと思います。(もちろん易しめ技術本の部類ですが)
Rollyがどういった商品なのかだいぶ公開されてきています。
http://www.watch.impress.co.jp/av/docs/20070910/sony3.htm
価格はソニスタで39,800円らしいのですがいまいちピンときません。というか普通すぎるんです。音楽プレーヤーに+Bluetooth, +ロボット機能みたいな料金設定。
Rollyをどういう人が買うかと考えてみると
・ソニーが好きな人
・ロボットが好きな人
・新しいものが好きな人
のような気がして、携帯プレーヤーやコンポを買おうとしている人がターゲットになっているとは思えません。
そうすると当然買う人も、iPodや普通のWalkmanと値段を比較して買う人もあまりいないはず。であれば、音楽プレーヤーベースの価格設定なんて無視して、価格もまったく新しいカテゴリの商品として売るべきじゃないか、なんて思いました。
たとえば、初期ロットは15,000円で売ってみるとか。あるいは外見ももっと高級感あふれるようにして80,000円くらいで売ってみるとか。中途半端が一番いかんです。iPhoneなみの価格なんてちょっと微妙っす。
コミニティも作ろうとしているみたいなんで前者の方がよいかもしれません。ユーザが増えないとコミニティなんて成り立たないんだから、初版はやっぱり低価格で売るべきかなと思います。
でも、初版やすくしたら次のバージョンの値段がつけにくいとか、どうすんの?とか言われそう。まぁ、そういわれたら「高くなっても売れるようなもんつくれゴラァ」と好き勝手言おう。
もしくは携帯電話みたいに本体は10,000円で売ってコミニティを月100円にするってのはどうよ?
困っている。ひじょーに困っている。
今までブログの記事でAmazonの本を紹介したりしていましたが、doEditプラグイン(http://tech.bayashi.jp/archives/entry/movabletype-plugin/2006/001347.html)というMovable Typeプラグインを利用させていただいていました。
しかし、Movable Type 4.0にバージョンをあげて以来プラグインは使えなくなってしまいました。3,3xまでブログの編集画面を拡張する場合、編集画面のテンプレートを正規表現で書き換えるという方法しかなかったので4.0で画面のデザインが変わったら使えなくなってしまうのです。
4.0では正規表現で置き換えなくても普通のプラグインを追加できるようになったと聞き、自分でもdoEditプラグインなようなものを作ってみようと思ったのですが、編集画面のtextareaの入力ボタンを増やす方法はいまいちわからず。もちろんMovable Type本体のコードに手を入れれば余裕でできそうですが、なるべくそういうことはしたくない。(バージョンアップするたびにマージしないといけないから)
で、そもそもAmazonの本の紹介をするときにどういう手順を踏んでいたか見直してみました。
1. Amazonにいく
2. 本のタイトルで検索する
3. 本の商品ページを開く
4. ページをスクロールしてASINをコピーする
5. Movable Type編集画面に戻る
6. doEditプラグインのAmazonリンクボタンを押してASINをペーストする
という感じです。
正直この手順は面倒なのではてなBookmarkボタンや、TAGIRIツールバーみたいに現在開いてるページをもとに何か処理をするようなfirefox extensionを作成すればいいんじゃね?と思って昨日からfirefoxのextensionの作り方を調べています。
単にhtmlをつくるだけにすればMovable Type以外でも使えるのでできたら公開しようかなと思ってまふ。
「グローバルエンジニア」を読みました。

グローバルエンジニアに必要なスキルとして英語力があげられているのですが、転職して以来めっきり英語とふれあう機会がなくなったことに気づきました。
もちろん調べ物で英語のドキュメントを読むことはしょっちゅうありますが、英語のコミュニケーションとは全く別物。英語に触れているとは言えません。ソニー時代にアメリカに出張したり、nativeと毎日英語のメールをやりとりしていたころが懐かしいです。
というわけでサンフランシスコ開発合宿みたいなものを計画してみようかと思いました。(意味不明)軽く調べてみたところ一週間で費用は軽く20万くらいします。これを見て出張時代に自分はそれだけのアウトプットを果たして出せていたのかを自問自答。エンジニアたるもの常に自分自身にかかっている経費を意識しないといけないなと強く感じます。
最近、格差社会という言葉をよく耳にしますが、下流社会という本を読んでみました。
この本では格差というのはたんに所得に差がでるものであらず、人生に対する意識の差が格差として現れるのだと説いています。
意識の高い人は仕事でも出世したり、若くして起業し成功し、意識の低い人は定職に就かずニートになったりする。結果としてそれが所得の差に広がるということだそうです。
この本では男性を
- ヤングエグゼクティブ系
- 高所得思考で出世志向も強い従来型のビジネスマン
- ロハス系
- 比較的高学歴、高所得だが出世志向が弱い。マイペースで自分の好きな仕事をしていきたいタイプ。嫌な仕事でもそつなくこなす業務処理能力もあるのでフリーターになるタイプと異なる。
- SPA!系
- 特に勤勉ではなく、仕事好きでもないし、才能もないが、フリーターになるようなタイプではなく、仕事をするしかないので仕事をしているというタイプ。
- フリーター系
- 自分らしく生きたい、好きなことを仕事にしたい、本当にやりたいことをやりたいなどと言って、正社員になることを拒んでいるタイプ。
というタイプに分類しています。
たぶん僕は”ロハス系”。でもフリーター系と紙一重しか違わないと思うのは気のせいかな。。。たまたま今の仕事で定職について良い給料もらってるだけでそれ以外は違いはないような、、その”たまたま”が偶然ではなく必然だからこそフリーター系ではないんでしょうが。
ちなみに女性は、
- お嫁系
- ミリオネーゼ系
- かまやつ系
- 普通のOL系
- ギャル系
に分類されています。
おもしろかったところは、下に属する人のほうが自分らしさに対する意識が高いということ。普通は自分らしさの高い人が向上し上に属しそうなものですが、「生活の中で大事にしているものは?」という調査によると下の人の方が高かったそうな。(ちなみに逆に高階層で多かったのは”ゆとり”、”人間関係”、”創造性”、”活動的”)
この本では自分らしいことを求めて、いつまでも夢から醒めないで定職に就かずフリーターを続けているのでは?と予想しています。
ただ「自分らしさ」って何でしょう。自分らしいも何もすべての人生の過程こそが自分であり、大事も何もないと思いました。
*
発表からだいぶ日がたってしまいましたが、Appleから
- iPhoneから電話機能を取り除いたiPod touch
- Video対応のiPod nano
が発表されました。
もう少し日本でも無線LANの環境が整うならiPod touchほしいです。
“iPodにふつーにMacOSが載ったら”と思っていたことが現実になりました。決して飛び抜けて画期的ではないもののこうやって着実に新しい機能を実現していくということをトップに居続けながらできるというのはやっぱりすごいなと思います。
さてlogroateができたので実は今週からlabs.とtrac.は自宅サーバに向けてます。まだアクセスはまばらですがanalogを使ってログの解析を実施したいと思います。
analog自体は先日のlogrotateの際に
# sudo port install analog
にてインストールしていましたが、何一つ設定をしていませんでした。
analogはXREAでも使われていますが、apacheのlogファイルを解析してレポートをhtmlで生成してくれるツールです。読み込むlogファイルはファイル単体でもできますし、*を使って複数ファイルをまたいで解析することも可能です。
どのlogファイルを読み込むのか、どこにreportファイルを生成するのかどのレポートを作成するのかというのはすべて設定ファイルに記述することができます。デフォルトではこの設定ファイルは/etc/analog.cfgになるそうです。
# analog
を実行すると/etc/analog.cfgに基づいてレポートが出力されます。
リアルタイムでレポートを出力したい場合はcronで10分おきとかににanalogを実行すれば良さそうです。
しかし一つの設定ファイルで複数のレポートを作成することはできません。virtual hostを複数作成し、virtual hostごとにlogファイルを出力している場合は当然レポートもvirtual hostごとに作成したくなると思います。
この場合、
analog -G +ghoge.cfg
と書くことで設定ファイル(ここではhoge.cfg)を指定して動作させることができます。
(-Gはデフォルト設定ファイルの無視、+gは設定ファイル指定のパラメータ)
というわけでvirtual hostごとcfgファイルを用意すれば実現できそうです。今回は日ごとに作成している日単位のlogに対するレポートと、すべてのlogのレポートを作成するような設定を構築してみます。
現在自宅サーバではapacheのlogファイルが
sub1.domain-access.log sub1.domain-error.log sub2.domain-access.log sub2.domain-error.log ... subN.domain-access.log subN.domain-error.log
というようにvirtual hostごとに出力させています。
これらのlogは一日の終わりにlogrotateがcronで実行され
sub1.domain-access.log -> sub1.domain-access.log.1
というようにファイルがrenameされ一日分のlogファイルになります。
さらにlogrotate内のスクリプトで日付ごとにファイル名をつけているので
sub1.domain-access.log.1 -> sub1.domain-access.log.YYYYMMDD
というように再度renameが行われます。
logファイル名に日付がついてしまうとanalogのconfigファイルでの入力logファイルの指定が面倒になるので
sub1.domain-access.log.1
に狙いを絞ってレポートをはかせます。
このためlogroate内のスクリプトで
sub1.domain-access.log.1 -> sub1.domain-access.log.YYYYMMDD
のrenameが実行される直前にanalogを実行させます。
logrotateの設定ファイルは以下のようになりました。
/opt/local/apache2/logs/*.domain-*log {
daily
rotate 4
size 0
create
noolddir
ifempty
missingok
sharedscripts
postrotate
/bin/kill -HUP `cat /opt/local/apache2/logs/httpd.pid 2>/dev/null` 2> /dev/null || true
# EXT=`date +%Y%m%d`
EXT=`/opt/local/bin/php /opt/local/etc/logrotate.d/yesterday`
for f in $1;
do
if test -f $f.cfg; then
/opt/local/bin/analog -G +g$f.cfg;
mv $f.html $f.$EXT.html;
mv $f.$EXT.html /opt/local/apache2/logs/reports;
fi
mv $f.1 $f.$EXT;
mv $f.$EXT /opt/local/apache2/logs/logs;
done
endscript
}
porstroate – endscript内で
sub1.domain-access_log.cfgファイルが存在すれば
analog -G +g sub1.domain-access_log.cfg
が実行されるようになっています。
さらに実行後に
sub1.domain-access_log.html -> sub1.domain-access_log.YYYYDMMDD.html
にrenameさせレポートファイル名にも日付がつくようにしています。
cfgファイルでは入力ファイルが
sub1.domain-access_log.1
出力ファイルが
sub1.domain-access_log.html
になっており、レポートファイル名に日付をつけるのはlogrotateに任せています。
またファイルが多くなるとディレクトリが見にくいのでとりあえずlogファイルはlogs/へレポートファイルはreports/へそれぞれ移動させています。
なおanalogにはレポートをグラフ画像で作ってくれる機能がありますが、どうしても画像ファイル名がバッティングしてしまうのでグラフレポート機能はOFFにしています。これらの画像ファイルも日付をつけてrenameしてさらにレポートhtmlをrenameした画像ファイルに対応するように書き換えるスクリプトを作成すれば対応も可能ですがさすがにそこまでやろうとは思いませんでした。
最終的にはlogrotateによって
logs/sub1.domain-access_log.20070101 reports/sub1.domain-access_log.20070101.html
というファイルが作成されます。
これらのレポートを閲覧するためにとりあえずreportsにalias張っています。またurlを指定するのが大変なので閲覧用にレポートファイルが存在すればリンクを張ってリスト表示するような簡単なphpファイルを作成しました。
他に便利なやり方があるのかよく知りませんが、logrotate内でanalogを実行させることでわざわざanalog用にcronを設定しなくて良いこと、(rotateされる)logファイルと同期してレポートが出力されるというメリットがあります。
過去すべてのログのレポートを作成する場合には別の専用の設定ファイルを用意し、そのファイルでは
入力ファイルを /logs/sub1.domain-access_log.*
出力ファイルを /reports/sub1.domain-access_log.all.html
としています。
これはlogrotateのスクリプト内ではやらずに別途cronでanalogを実行させています。現状自宅サーバへのアクセスはほとんどないのですべてのログを読み込ませてもたいした負荷ではありませんが、ログが多い場合は入力ファイル絞った方が良いと思います。
リアルタイムのログを見るためには
入力ファイルを sub1.domain-access_log
出力ファイルを /reports/sub1.domain-access_log.realtime.html
みたいにしてcronで実行させても良いかもしれません。
analogの設定もできてようやく自宅サーバで設定しておきたい項目がすべてできました。これでプログラムが心おきなくかけます。^^
こんばんわ。サッカー(日本xスイス)をみていたら日本がFKから失点してしまいました。
すでにテスト運用をしていたのでご存じの方もいると思いますが、Movable Type 4にソーシャルブックマーク用のボタンをつけるMTSocialBookmarksプラグイン0.10をリリースします。
このプラグインをインストールするとソーシャルブックマークの表示がMTタグで記述できるようになります。詳しくは下記tracをご覧ください。
http://projects.makotokw.com/trac/arcadia/wiki/MovableType/MTSocialBookmarks
そのうちmovabletype.orgのプラグインディレクトリにも登録したいと思います。