コードDJ 第0回

とうとう始まってしまった。Help me, hackers!に上がったコードの中身を毎回紹介していくコードDJ。

「始まる、始まる」って電波を送信しといたから、宇宙の知識の全てが記録されているというアカシックレコードにアクセスしてた人は、本当にお待たせ。komagata a.k.a. DJです。

第0回といっても準備号的なものってわけじゃなく、ゼロオリジンなだけなので注意だ。

今回紹介するのはコレ。

はてなブックマークのコメントをGoogle Readerに表示するFirefox Add-onかGreasemonkey – Help me, hackers!

Google ReaderとはてブはDJも愛用している。正直俺も欲しい。

machibuse a.k.a. ネオニートが投稿してくれた。ありがとう!

即効でGistにアップしてくれたのがm_satyr a.k.a. short-coder-wannabe。畜生、わかってるじゃねえか。

コード:

https://gist.github.com/406743/cebdd9dd0579311277ba044f0931ea5684361de1

(右上のrawのリンクからグリースモンキースクリプトをインストールできる。)

DJ正直、Javascriptとかグリモンとか詳しくないが行数はたった67行。BSDのlsより遥かに小さいコードだから頑張ってみていこう。

const HB = 'http://b.hatena.ne.jp/', HBE = HB + 'entry/';

いきなりconstか、おしゃれじゃねえか・・・。ついていけるのか心配だ。

概要はGM_addStyleでスタイルを定義してGM_xmlhttpRequestで取ってきたはてブをsetInterval内でそれぞれのエントリーにくっつけてる。

GM_xmlhttpRequestのクロスドメイン通信はChromeでは出来ないけど何か方法があるらしいからChromeユーザーは頑張ってくれ!

GM_addStyle(.hatebu-count {float:right}
  ${margin:0; padding:0; clear:both}

9行目に素でCDATAが置いてある。これはアレか、E4XのXMLリテラルか。

$は何?そういうCSSセレクターがあるの?

function qse(node, sel, fn) Array.forEach(node.querySelectorAll(sel), fn);

20行目には便利な関数が。querySelecterの略でqseか?素敵だ、パクろう。

setInterval(function watch(){
  qse(document, '.entry:not([data-grhc-done])', fetch);
}, 1e3);

その前にsetIntervalの第二引数の1e3。これはよく見たら指数形式の整数。基数を10として扱うから 「1e3」は「1×103」のことで「1000」。確かに慣れるとわかりやすいが1文字少ない方を選ぶとはさすがshort-coder・・・。

setInterval第一引数の関数にwatchと名前がついてるのはどういう意味があるんだろうか?

その後はfetch関数の中になる。

for each(let {user, tags, comment, timestamp} in o.bookmarks)
  ls += let(uu = HB + user +'/') String.concat(

41行目にfor each in文。こんなのあったのか。for inとどう違うんだ?

さらにlet式。次の行にはlet文。Javascript 1.7からはletなんて使えるのか。DJはCommon Lispで軽いlet恐怖症だよ。

最近はこんなモダンな書き方ができるのか、Javascript&m_satyrスゲーな。DJ勉強になったよ。

machibuseはおそらく結果に満足。はてブAddon風Userstyleも公開してくれて、気前よく報酬を支払ってくれたみたいだが、

Twitter / murky-satyr: http://help-me-hackers.com …

http://help-me-hackers.com/tasks/30 重畳。今月のアフタが買える

9:21 PM May 21st Ubiquityから

この金はどうやらアフタヌーン代に消えたようだ。

letとアフタヌーンに幸あれ!

comments powered by Disqus