2005-12-30

2005年もパクられてこなかったもの私的まとめベスト3

良く出来たものはパクられなければなりません。技術者たるもの我が社の利益だとか愛国心だとかのためではなく、人類の幸福のために行動すべきです。たかだか見た目程度でしか物事を判断できない人間がパクりは悪などという風潮を広めてまわるのは残念でなりません。大企業だろうがベンチャーだろうが一個人だろうが関係ありません、良く出来たものはパクるべきです。パクられてこなかった人の気持ちを考えたことがありますか?胸に手を当てて考えてみてください!

iRider

サムネイル表示とドラッグによる高速なタブ切り替えを備えたブラウザ。
http://www.irider.com/irider/

デモムービー(Flash)を見ると良い
http://www.irider.com/demo/index.htm

百式の紹介。
http://www.100shiki.com/archives/2004/07/_iridercom.html

LensBar

曖昧検索によるフィルタリングとなめらかなズーミング機能を備えたスクロールバー
http://pitecan.com/research/LensBar/index.htm

デモムービー(25MB)を見ると良い。
http://pitecan.com/research/LensBar/lensbar.mpg

Bloglines

あえてBloglinesを挙げる。殆どのRSSリーダー(特にローカルクライアントで動作するもの)はBloglinesを知らずに間違った設計をしてしまっている。論外の使い勝手で話にならない。いますぐつくりなおすべきだ。
http://www.bloglines.com/


まとめ

他にも何か色々あった気がするけどまあいいや。今日は三つね。

2005-12-29

Safariでreplace callback のエミュレーション

replaceメソッドをhackしてsafariでもreplace callbackを使えるようにしてみた。Safari バージョン 2.0.2(416.13)で上手く動いたそうです。手元に環境が無いので細かい検証はできませんが、とりあえず。
http://la.ma.la/misc/js/replace_callback/

解説

JavaScriptのString#replaceメソッドは文字列を置換して新しい文字列を返すメソッドですが、第二引数に置換後の文字列を指定する代わりにfunctionオブジェクトを渡してやると、Perlでいうところのeオプションみたいなことができます。

// 大文字を小文字に、小文字を大文字に
String.prototype.swapcase = function(){
    return this.replace(/([a-z])|([A-Z])/g,function($0,$1,$2){
        return ($1) ? $0.toUpperCase() : $0.toLowerCase()
    })
}
"Hello World!!".swapcase() // hELLO wORLD!!

第一引数にはマッチ文字全体、それ以降には後方参照用にカッコで囲った部分が渡されます。その後にはマッチ箇所の先頭からのoffset値、String全体が渡されます(ここでは使ってません)

// 少しわかりやすく書くと
String.prototype.swapcase = function(){
    var reg = /([a-z])|([A-Z])/g;
    var callback = function(match_text,lower,upper,index,self){
        return (lower) ? lower.toUpperCase() : upper.toLowerCase()
    };
    return this.replace(reg, callback)
}

こんな感じになります。単純な置換だけではなくて、文字列の出現頻度を調べたりとか、簡単なテンプレートシステムを組んだりすることもできます。

// Ruby風の変数展開
String.prototype.fill = function(param){
    return this.replace(/#\{(.*?)\}/g,function($0,$1){
        return (param[$1] != undefined) ? param[$1] : ""
    })
}
"My name is #{name}.".fill({ name : "John" }) // My name is John

で、これを知ってからゴリゴリ使ってるのですが、どうもSafariでは使えないという話らしく
http://jszen.blogspot.com/2005/12/safari-and-stringreplace-method.html

次のリリースで直るそうですが、直ったところで古いバージョン使ってる人はいるわけなので作ってみました。本来のreplaceメソッドより動作は遅いはずなのでsafariの場合だけ適用するのが良いです。

いくらなんでもsafari酷いなあ、と思ってたのですが、互換性を気にして便利なものを使えないよりは、自前で実装しまったほうが楽なケースも多いんじゃないかと。

ブラウザの差異は大体こういう方法で吸収できるはず。

参考

ECMA-262 3rd Edition 邦訳 String.prototype.replaceのところ
http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/15-5_String_Objects.html#section-15.5.4.11

正規表現のeオプションをJavaScriptでエミュレート
http://hail2u.net/blog/coding/emulate_regexp_e_option_in_js.html

2005-12-19

忘年会議2005レポート

忘年会議2005に参加してきました。
2005年の「究極のウェブサイト」第2位に選ばれました。大変光栄です。
一年間、わりとよくがんばれたとおもいます。
インターネットに感謝します。ありがとうインターネット。

ちなみに1位ははてなブックマークでした。はてなに負けて大変不愉快です。

----
二次会(忘年会)ではダイヤ☆ハシモト氏と真性引き篭もりについて熱く語り合いました。

「引き篭もりなのか引篭もりなのか、たまにわからなくなるよね」
「真性でGoogleトップに出ますよ」

などというTipsを交換した。

----
以上、レポートでした。

真面目なレポートを読みたい方ははてなブックマークをご活用ください。
http://b.hatena.ne.jp/t/%e5%bf%98%e5%b9%b4%e4%bc%9a%e8%ad%b0?sort=eid

2005-12-15

ネットランナーがWeb2.0特集

Web2.0がなんなのか良くわかってない人は必見かも。


全てのWeb開発者必見 : remember the milk のサインアップフォーム

ライブドアの次世代テクノロジーセミナーの後の二次会の後のSledge勉強会で発表したネタ。
http://www.rememberthemilk.com/signup/



Ajaxを使ったTODO管理やらリマインダサービスらしいのですが、これのサインアップフォームがとてもよく出来ています。苗字と名前から自動でアカウント名を補完してくれたり、それをサーバーに問い合わせてそのアカウントが取得できるかどうかを確認してくれたりします。

肝心のサービスの中身は使いやすいのかどうか良くわかんないというか、正直微妙な感じなんですが、一度しか通過しないサインアップフォームを作りこむ心意気が良いですね。

別に必見ってほどでもないか。でも知ってる人がいなかったのでブログに書いておくことにします。

2005-12-11

del.icio.us買収と1470.netのExit戦略

すでにあちこち書かれているけど米Yahoo!がdel.icio.usを買収した。

del.icio.usは良くあるネットベンチャーではない。買収されるために作った会社、というのは、まあ実際そうだろう、実際そうだろうけれどもそんなこと言うやつはスーツ脳だ。スーツ脳の恐怖だ。

del.icio.usは完全独立中立国家だった。
- 概要を取得してAdsenseを貼り付ける、であるとか。
- AmazonのURLならアソシエイトIDを付加する、であるとか。
そういうことをしない。

AmazonのURLは正規化したほうがいいに決まってるのにそういう特別扱いをしない。クロールをしない。ブックマーク以外のデータを保持しない。URLのMD5ハッシュ値をキーにしていてdel.icio.usにURLを教えずにそのページに関する情報を取得することが出来る(これは、だいぶ昔に書いた)。完全一致の取り出しに特化していて代わりに検索が出来ない。

言うなれば、del.icio.usにはユーザーの利便性よりも美意識を取るという狂気があった。

del.icio.usは単なるソーシャルブックマークサービスではない。
同じものを作れる人はたくさんいる。del.icio.usよりも○○の方が高機能だ、とか、そういう話はよく聞くし、検索機能がついてたりBBSが付いてたりサムネイルが付いてたりスナップショットを保存してくれたり色々ある、そんな中にあってdel.icio.usはURLがかっこいいという理由だけで30万ユーザーを獲得した。

残念なことにdel.icio.usを買収したYahoo!はevilである。いやそれは正確ではなくdel.icio.usに比べればどの企業も相対的にevilであるというだけのことだ。

もちろん短期的に見ればサーバーが軽くなるとか、検索が使い物になるとか、そういうメリットのほうが大きいだろう。del.icio.usもYahoo!もユーザーも誰も損をしない。ただハッカーの士気に関わるだけで。

----
del.icio.usの持っているデータが全開放されたら世界が変わる。del.icio.usのCPUパワーと回線帯域が無尽蔵であれば、全てのリンクに「3users」とかくっつける事が出来る。(だから俺は常々「P2P!P2P!」とか言ってるんだけども)

Googleならば世界を変えられるだけのCPUパワーを持っているかもしれない。けれどyahooには無理だ。yahooだもの。yahooに出来ることといったら、せいぜいdel.icio.usの持っているデータを使ってyahooの価値を高めることぐらいである。Flickrと連携するとか言うからげんなりする。

del.icio.usがyahooの力を借りて無尽蔵のパワーを得るのならば素晴らしいけれど、あんまりそういう未来を期待できない。2%ぐらいしか期待できない。多分しばらくは今までどおり何も変わらないだろう。けれど、del.icio.usが完全独立中立国家でなくなったことは、確かだ。

同じものを作れる人はたくさんいる。けれども何もかもが足りない。CPUが足りない、回線が足りない、愛してくれるユーザーが足りない。そんな中にあって、del.icio.usはURLがかっこいいという理由だけで30万ユーザーを獲得した奇跡だ。

実際のところ、del.icio.usにしてみれば美意識なんてどうでも良くて、さっさと資金を調達して何か新しいことを始めたかっただけかも知れない。あるいはこれからぐんぐんevilになっていくのかもしれない。

del.icio.usの買収は、わかりきっていたことだけれどもやっぱり悲しい。

Web2.0て所詮パワーゲームか?
どれだけユーザーを囲えるかの勝負なのか?
買収だけがゴールなのか?
URLがカッコ悪けりゃゴールは無いのか?

どうなんだ。どうなんだよ。

2005-12-09

Haskell風にJavaScriptを書く

ていうのをだいぶ前に作ったんだけど、コードがごちゃごちゃで何やってるか自分でもよくわかってなかったのでちょっと整理して公開。フィボナッチ数列を求めるのに大変便利です。

http://la.ma.la/misc/js/haskell/

関数の定義を記述すると、再帰処理でごにょごにょやって求めてくれる関数を生成します。メモ化もします。色々いじってたらなんとなく出来た。あんまり細かいツッコミされても困る。

実際のところJavaScriptは再帰処理をたくさんさせるとすぐにスタックオーバーフローで止まってしまうので使い物になりません。数を大きくすると即死したりするので注意が必要です。タイマーを使って再帰処理させるとかトリッキーなことをすれば回避することもできるのだけれど面倒くさい。

遅延評価っぽくなっていて、
// 代入はできる
test = ack(100,100); // アッカーマン関数(100,100)
// 評価すると死ぬ
alert(test) // Stack overflow

とか、そういう具合になります。
JavaScriptではtoStringやvalueOfというメソッドをいじる事で、実際にその値が使用されるまで演算を遅らせることが可能です、という記事をあとで書く。

----

今年はHaskellを覚えよう、などとは思っていたのだけれどインストールしただけで何もしてない。なんか本が出るそうなので言語マニアにならない程度には覚えていきたい。まあそのうち。

関数型言語の時代が来るよ。たぶん。

2005-12-01

情報収集のための11の質問

http://www.jarchive.org/temp/joho.html
バトンが回ってきたので答えるよ!ああ、もうバトンでもないか、これ。

1.RSSリーダーを使っていますか?

- Bloglines。632フィード読んでる。
- 使い始めたころは50ぐらいだった。
- ごくプライベートなものを除いては公開してる。

2.アンテナを使っていますか?

- アンテナや更新チェッカは使ってない。
- どうしても必要ならなんでもRSSか野良RSS使う。

3.ソーシャルブックマーク(SBM)を使っていますか?

- http://del.icio.us/ma.la
- http://del.icio.us/inbox/ma.la

4.その他情報収集に使っているツールはなんですか?

- GoogleAlertとGoogleアラート。
- IRC、リファラ、bulkfeedsの検索結果フィード。

5.他人にこれはお勧め!と思う方法は?

- 発信すること。恥を書かないように頑張れるから。
- 何か面白げなものを作ってる人がいたら継続して追いかける。
- 同じ記事を自分より早くクリップしてる人のブックマークを見て良さげならsubscribe。
- 他人のinboxを購読。適度に重複してると重要な記事を見逃さない。

6.逆にこれはお勧めできないな、と思う方法は?

- 素のIE使ってる奴は本気でダメ。

7.情報収集で良く参照するサイトは?

ネタ元になることが多い(自分より早い)のは、
- del.icio.usのmiyagawahigeorangee_luck
- はてなブックマークのid:brazil
- MM/Memoの新着全部
- あとhail2uってひとがいたんですけど今ゲーム期

8.自分のブログで良く言及・リンクするサイトは?

- 特にない。

9.逆にここは参照してはいけない、と思うサイトは?

- ReadMe張ってるようなサイト、hirax除く。

10.WEB以外で良く情報源にするものは?

- ネットランナー

11.最後にあなたが情報収集方法を知りたい人は?

- id:brazil
- あとyoupy(ブラクラ注意)

補足

RSSBarとか使ってた時期もあったんだけど更新が気になってしょっちゅうリロードしてしまう癖があって、そういうの迷惑だろうから巡回は全部Bloglinesに任せることにした。

del.icio.usのinboxは「そういや見たけどブックマークしなかったな」というようなのを後から探せるようにthunderbirdに読ませてたんだけど、重くて使えなくなったので今はOperaに読ませてる。

そろそろ読むの大変なんだけど減らしたくはないので、もっと速く読めるインターフェース考える。あと昨日はてなスタッフと飯食ってきたんだけどあんまり大量にRSS読んだりとかはしてなさそうだった。