2008/05/31

管理画面

管理画面がどうなってるのが非常に気になる。

ユーザ画面よりも管理画面と付き合うことが長いので。

とくにグルナビの沿線検索とか、Yahooのカテゴリとか。

グルナビの沿線だと、例えば新宿駅はJR、京王線、東京メトロ・・・と複数の会社があって、その中でも、中央線、山手線、総武線・・・と違う路線がある。さらに、東口、南口、西口、北口・・・と出口もいっぱいあって大変。

モデルの時点でいろいろな切り口があるし、スキーマに落としたときとか、それを実際に使うUIがどうなってるのかすごい気になる。

駅だけで何千とあって、山手線の沿線は新宿と、代々木と、原宿と・・・と検索して、さらには順番はこうとか。

うーん、サービスの本質でないし、更新頻度と作るコスト考えるとSQLでUpdateで良いじゃんと思ってしまうなぁ。

逆にお店を最寄新宿で登録したいときにどうやって登録するんだろう。「新宿駅」が山手、中央、京王、丸の内、etcに紐づくモデルということかなぁ。

検索結果が新宿(東口)1km圏内とでるということは、駅とお店に緯度経度を持たして、マッピングしているということか?

Yahooのサイトとカテゴリはどう紐付けるのだろうなぁ。ツリー構造をフラットにしてドロップダウンだとあの量だと使いにくそうだ。
ポップアップさせてカテゴリ検索画面を出すのかなぁ。

と思ったら各カテゴリの画面に登録リンクがあった。なるほどね。

どうもシステムよりから考えてしまうなぁ。使うシーンを考える癖をつけなければ。

2008/05/20

APIのユーザビリティ

ファクトリー ファクトリー ファクトリーでAPIのユーザビリティについて書いてあって非常に興味深かった。

Microsoftが実際にやっているらしい。C#のライブラリが使いやすい理由の一つにこんな理由があったとは。

最近Javaの冗長性が無駄かどうかでReader系の話があったが、あの当時オブジェクト指向といえば、SmallTalkやら、C++やら、アカデミックな世界から現場の一般人がオブジェクト指向を使い出したころ(だったような気がする)であって、使いやすさよりも純粋な(?)オブジェクト指向を貫こうとした結果だったんじゃないかなと。

FileもStreamにする抽象化とか、そのStreamでエンコーディングを指定したいならInputStreamReaderでReaderでラップすることによって文字列として扱うとかそれはそれで綺麗なつくりだと思う。綺麗なつくりと使いやすい抽象化は別であって、このAPIのユーザビリティという観点になるんだろうなぁ。最近のLLからの流れはまさしくJavaと違うTasteをもつ人なんだろう。

この記事で言っているとおりTasteは時代によって/使う人によって移り変わるので、UnmanagedCodeみたいない低レベルも使えつつFile.openで開けるみたいなラッパーを提供しているC#の設計もなるほどとうなずける。

しかし、このAPIのユーザビリティという観点は面白い。Commonsとかのライブラリ設計にも是非取り込んで欲しいし、自分の仕事で拡張性を考えるときの一つの観点として使いやすさという項目も考えたいなと思った。

# どうでもいいけど、Refrectionとか、動的定義は黒魔術だと思っている。
# 一撃必殺でライブラリとか閉じた範囲で使う分には良いけど。
# ある程度の規模の開発でみんながみんな使うのは混乱の元だと思う。

2008/05/19

CGMとか

CGMって最初はテキスト系サイト(懐かしい侍魂とか)HTMLをかけたりCGIをおいたりできる一部の人が使えたものから、MTとか誰でも簡単にBlogができて文章による表現がひろまって、携帯BlogやらTwitter、最近はYoutubeとか動画になって、さらにはニコ動で半リアルタイムにコメントによって感情を表せるようになった。

結局、CGMって個人の感動とか思いを伝えたい!っていう欲求からきていて、技術の進歩で表現の範囲が広まってきてはいるけど、まだ難しい。

たぶん今の軸は2個あって、表現の軸(テキスト→動画)、時間軸(家に帰って→携帯でとったシャメとコメントを投稿、Twitter、2chとかニコ動の祭などのリアルタイム性)なんだろうなと。

ちゃんとクリエイティブなのとかMAD制作とかは一般人には難しいので、今の最先端だと動画を起きた瞬間に投稿できるのが一番簡単で手っ取り早いということになる。

でも、感動した瞬間を撮るというのはあらかじめ準備しておくのは難しいわけで、あとからBlogに書いたりしても、本人自身忘れてたり、メディアの限界で伝えきれなかったりと難しい。テキストなら文才がなきゃ無理だし、動画でもピンポイントじゃないと編集技術がいるとか。

そこでネガティブにしか使われないドライブレコーダみたいな感じなのを個人に装着しておいて、常に記録しておいて、ここだと思った瞬間を別保存、うpできる仕組みが欲しいなと。ADVのバックログ、回想シーンみたいな。

そうすりゃ文才がなくとも個人の自叙伝ができあがり、感情をダイレクトに共有できるし、カロリー計算も家計簿も一瞬にしてできあがるスーパーだめ人間製造装置がげふんげふん。

とりあえず今日の散歩の途中で歩道の花が満開ですごく良い香りがしたので共有したかったのだが、いい写真がとれずそれを言い表す文才もなく書き綴れないのが非常に悔しかったということで。

レバレッジ英語勉強法

レバレッジ英語勉強法を読んだ。

勉強法の部分よりもその前段階の部分メンタルブロックを外すというところが心に残った。

失敗を恐れるあまりにできないということ。特に見に覚えがあるのが、中・高・大学と勉強してきて中途半端に知っているがために、これはおかしいよなぁとか、ネイティブみたいに完璧じゃないからといって恥ずかしく思ってしまい一歩を踏み出せないというのは、英語だけじゃなく日常どこにでもある罠だ。

例えばBlogのエントリーでも、セミナーで質疑応答でも、こんなのみんな知ってるかもしれないし、何を馬鹿なことを聞くんだろう?と思われてないかとか。そのあとの懇親会でもこんな話して、何を(ryとか気付けば無駄におびえてるような。

授業でも○か罰しかない教育しかなくて、子どものころから失敗を許されないがために、失敗を極端に恐れるようにいつのまにかなってるなぁと。そんなのはぜんぜん失敗でもなんでもないし、そもそも馬鹿なことだなんて思ってないはずなのにね。

そういえば最近売れてる人の本とかBlogでも失敗を怖がらないことが重要とみんな言ってるな。

(一方でアイデアに対して批判これとか、不機嫌な職場だと最近鬱っぽい話が多くてうなずけるので転んだあとの対処法を書いたら売れるんじゃないかなとか思った。最近のジュンク堂はコンピュータコーナーにも鬱病と対策が置いてあったり。)

こないだKREVAがヒップホップの魅力は「これでいいのか感」とかいってたが、何事もこれでいいんだと出していくのが重要だなと思いました。この本では欧米では平凡な意見でも言ったもん勝ち的な雰囲気があるとかなので、メンタルブロックを壊すべく完璧を目指さず楽観的にエントリーを増やしていくかなと書いた次第。

英語の勉強方法のほうは、自分の好きな/得意な範囲をやれという、最近巷で話題(?というかみんなこうじゃないのか?)の遅延評価勉強法だと思った。でもそれをアウトプットする対象の講師もその分野に強い人にするというのはExtremeでいいなというか、富豪的発想だなぁと思いつつも、そこまでやるからこそ効果があるんだなと。結構英語だけでなく勉強になった一冊でした。

英語は勉強すれどもアウトプットの場がないのが個人的な悩み。日常使うのはリーディングだけだし、スクールは高いし、重要だけど緊急じゃないに落ちて先送りな日々。

2008/05/17

docomo 906シリーズで無線LAN対応

906シリーズがもうでるのか。

NTTドコモの「906iシリーズ」は無線LAN搭載、初夏発売で高速通信と低料金を実現へ

かってサイトはどういう経路で通信することのなるのかなぁ。
今まではiモード網を経由するからIP縛りで携帯アクセスのみとかしてたサイトがあるけど、家庭網からならわざわざゲートウェイ経由して網を逼迫させる必要ないし。

まぁ、携帯からのアクセスに縛ってるサイトの理由もわからないんだけど。 ユーザビリティの観点でいえばUAで表示内容切り替えればいいだけだし、(絵文字がメンドイが)PCからしょぼい画面をみられても困らないんじゃないかと。

今後はAndroid採用だし、HSDPAで7.2Mでるし、中途半端なFlash多用とかやめて、とっとと携帯サイトって区分を捨てちゃえば良いのにって思う。親指で完結する携帯サイトの使い勝手というのは捨てがたいんだけど、そこは搭載ブラウザでなんとかできそうな気がする。

2008/05/07

RubyでExcelのWorkSheetを追加する。

rubyでExcelの操作をしていてWorkSheetを追加したいと思った。

普通に追加するなら

book.Worksheets.Add

で追加できるのだけど、末尾に追加したい場合がある。

その方法は Ruby win32ole 拡張モジュール覚え書き(5)に載っているようにハッシュでAfterに引数渡せばいいんだけどもうまく動かない。

どうやら、Before, Afterに指定するのはインデックスではなく、Sheetのインスタンスみたいだ。

ということで、シートを末尾に追加して、名前を変えたりするには

lastSheet = book.Worksheets(book.Worksheets.Count) book.Worksheets.Add({"After"=>lastSheet}) newSheet = book.Worksheets(book.Worksheets.Count) newSheet.Name = "追加したシート"

という感じになるみたい。