Help me hackers!
Help me, hackers!で@kyannyさんよりありがたいタスク、「Blog | FJORD, LLC(合同会社フィヨルド)にはてなスターを設置して欲しい」をいただきましたので、早速設置しました!
フィヨルドサイトはwordpressで出来ていて、このテーマもMITライセンスの元で公開してします(ダウンロードはこちら)。
何かご要望やバグを発見しましたらHelp me, hackers!にタスクを登録してください。その際にオプションから「wp-fjord-love」というプロジェクトの選択をお願いします(さっきプロジェクト登録しました!)。
wp-fjord-loveの使い方や必要なpluginなどの情報をこちらのブログとHelp me, hackers!で近いうち(6/3の夕方予定)に載せます。
ぜひぜひ、こんな形でHelp me, hackers!を要望やバグの声を集める場としても使ってみてください。
毎週火曜日、Help me, hackers!に上がったコードを紹介していくコードDJ 第1回。
「果物だけを食べていれば風呂に入らなくていい」
ジョブスの言葉で一番感動したのはコレ。komagata a.k.a. DJです。
今週紹介するのはコレ。
ホームページビルダーで作られてるサイトを目立たせるGreasemonkeyスクリプト – Help me, hackers!
正直DJが登録したタスクなんだけどね。2回目にしてネタ切れ気味のDJを助けてくれ。
ホームページビルダーで出来てるサイトの修正だけは勘弁して欲しいので目立つようにしたかった。
このタスクを登録して数時間もしないうちに2人のECMAScripterが解決してくれた。DJ頭に来たから両方振り込んだよ。
速攻で解決してくれたのはazu_re a.k.a ニコ厨とおなじみm_satyr a.k.a. short-coder。
コード:Source for "IBM Builder Caution" Userscripts.org
概要としては、XPathを簡単に使うようにした$x関数の定義と、IBMロゴの生成だ。
var result = expr.evaluate(context, XPathResult.ANY_TYPE, null);
キモはやはり30行目のevaluate。このevaluate関数、なんでこんなに引数多いんだろうか。DJちょっと調べてみたよ。
Introduction to using XPath in JavaScript – MDC
パラメータ
evaluate 関数は 5 つのパラメータを取ります。
- xpathExpression
- 評価する XPath 式を文字列で指定します。
- contextNode
- xpathExpression を評価する対象となる文書内のノードを指定します。指定されたノードの全ての子ノードに対しても評価が行われます。もっともよく指定される値は document です。
- namespaceResolver
xpathExpression に含まれるあらゆる名前空間接頭辞を渡され、その接頭辞に対応する名前空間 URI を表す文字列を返す関数です。この関数により、XPath 式で使われている接頭辞と文書内で使われている接頭辞が異なっていたとしてもそれを変換する事が可能になります。この関数は次のいずれかです。
- XPathEvaluator オブジェクトの createNSResolver メソッドにより作成されたもの。ほとんどの場合はこれを使うべきでしょう。
- HTML 文書の場合や、名前空間接頭辞が使われていない場合は null 。xpathExpression に名前空間接頭辞が含まれている場合に null を使うと、NAMESPACE_ERR コードと共に DOMException が投げられるので注意してください。
- ユーザ定義のカスタム関数。詳しくは付録のユーザ定義名前空間リゾルバの使用の節を参照して下さい。
- resultType
- 評価の結果返してほしい値の型を示す定数です。もっとも良く指定される定数は XPathResult.ANY_TYPE で、この場合、指定された XPath 式に対して一番適切な型で結果が返されます。指定できる定数の一覧は付録の定数一覧の節を参照してください。それぞれの定数の使い方は戻り値の型の指定の節を参考にしてください。
- result
- 既存の XPathResult オブジェクトまたは null を指定します。 XPathResult オブジェクトが指定された場合には、そのオブジェクトが再利用されます。 null が指定された場合には新しい XPathResult オブジェクトが生成されます。
戻り値
パラメータ resultType で指定された型の XPathResult オブジェクトを返します。XPathResult インターフェースはここで定義されています。
この関数Cっぽいな。document.evaluteって名前も判り辛くないかな?JS的にはもっと小さい粒度にして欲しい感じがする。
それはともかく、これで好きな部分が取れる。今回はnamespace要らないから大分省略できるかもしれない。
img.src = "data:image/png;base64,iVBORw0KGgoAAA(略)==";
そして、16行目ではdataスキームでの画像が使われている。コレは素敵だ。IE7以前では動かないらしいが、知ったこっちゃないという荒くれ者やGreasemonekyではどんどん使っていきたい。
そして実際に@mugesoが教えてくれた近所の蕎麦屋のホームページでの結果がコレ。
これはイイ・・・!!ネットはBIG BLUEに監視されている!とりあえず、このロゴを見たら警戒した方がいいかもしれない。Greasemonkeyだと1クリックでインストールできるからぽんぽんインストールしちゃうけど、中身をじっくり見ると勉強になるな〜!
そして、m_satyrがそもそもCSSだけでgeneratorを直接表示するという荒業に出た。
@namespace url(http://www.w3.org/1999/xhtml);
head * {display:none}
head, meta {display:inline}
meta[name=GENERATOR]::before,
meta[name=generator]::before {
content:attr(content);
position:absolute; z-index:2147483647;
background-color:#000; color:#fff; opacity:0.4;
-moz-border-radius-bottomright:1ex;
}
headのmetaのbeforeにgeneratorを表示する・・・だと・・・?
そんなことできんの?
contentプロパティにattrファンクションなんてものが・・・。
DJ完全にマークアップ界の情報弱者だよ。m_satyrの言語を選ばず目的に最短の手段を取るやり方には脱帽。
これだとCMSなんかもgenerator出してるからいろいろ見てみると面白いかも。
二人ともありがとう!
Help me, hackers!に続くフィヨルドのサービス第二弾をリリース!
今回はちょっとした便利ツールHTMLのインデントを美しくするサービス、その名も「Ham Cutlet(通称ハムカツ)」です。
色んな人が触ってHTMLがガタガタなサイトをいじってイライラ、なんてことはよくありませんか?そんなとき、Ham Cutletにそのソースを貼ってみてください。
インデントの美しいHTMLがゲット出来ます。
このツールはHelp me, hackers!でも採用しているHamlというマークアップ言語を実現するrailsrubyのgemを使っています(詳しいことは@komagataさんまで)。
技術的には、
(インデントがぐちゃぐちゃの)HTML → 一旦hamlにする → HTMLに戻す(インデントが美しくなってる!)
…ということをしています。
早速、イライラさせられるHTMLをHamlを使ってCOOK!
とうとう始まってしまった。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(
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とアフタヌーンに幸あれ!
Help me, hackers!でPayPalを使った報酬支払いの流れに関する質問を頂いたので説明したいと思います。
報酬支払の流れ
実際に、komagata@fjord.jpからmachida+fjord@fjord.jpへ100円支払ってみました。
- 「支払う人」:komagata@fjord.jp:僕
- 「受け取る人」:machida+fjord@fjord.jp:@machidaさん
解決してくれた@machidaさんの回答のところにある支払いボタンをクリック。
PayPalログインすると、こういう画面になるので「今すぐ¥100 JPYを寄付」をクリック。
「支払う人」の住所は「受け取る人」にも通知されます。知られたくない場合は僕のように北の果てから送金してることにしたらいいと思います。
支払う人(僕)にはこういうメールが来ます。
受け取る人(@machidaさん)にはこういうメールが来ます。
受け取る人が報酬を受け取ると、支払う人にこういうメールがきます。
この情報はHelp me, hackers!の方には届かないので分かりません。
実装
PayPalには、任意のメールアドレスへの寄付ボタンを設置する機能があります。(ココで貼付けHTMLコードが作れる)
Help me, hackers!ではその機能を使って他人から他人への寄付ボタンを単に置いているだけです。
(ソースコードはココ)
個人情報について
こういう機能を利用しているだけなので、Help me, hackers!では「支払う人」と「受け取る人」の(メールアドレス以外の)情報は保持しません。(というか見ることができません)
完全にPayPal内で「支払う人」と「受け取る人」のやり取りが行われます。
何パーか抜かれるの?
ソースを見てもらえば一目瞭然ですが、Help me, hackers!が何パーセントかお金抜いているとかそういうことはありません。
Help me, hackers!の収益化方法に関してはこちらのWikiに書いてあるようなことを考えています。
Help me, hackers!のプロフィールに「好きなエディタ」を選べるようにしました。また、ユーザーの一覧に「人気の言語」を表示しました。
プログラマにとってエディタほど好みの分かれるものはありません。
我々が一度集まれば、
「Emacsユーザーは親指より小指の方が太い」
「vi好きは詰将棋をテキスト編集の応用だと思っている」
といった悪態を突き合います。
Facebookにはプロフィールに「宗教・信仰」といった項目がありますが、いろいろな人種が集まるSNSでは要らぬトラブルを避けるために重要です。
プログラマにとっての信仰とは「言語」と「エディタ」です。逆に同じ仲間の結束は固く、スムーズなコミュニケーションにとても有用です。
是非、vimユーザーの方は今すぐ登録を!
「彼氏のエディタが選択肢に無い。別れたい・・・」
という方はすぐに教えてください。選択肢に追加しておきます。
プログラマーには「ドッグフードを食べる」という格言(?)がありますが、Help me, hackers!(以下hmh)も自分で使いながら開発しています。
新しいサービスなので最初はどう使っていいか分からないかもしれないので、僕の使い方を少しづつ紹介していきたいと思います。
GoogleカレンダーのTODOからプログラミング系のタスクを転載する
GoogleカレンダーにTODOをちょこちょことメモすることがあるんですが、プログラミング系のタスクをhmhに転載してみました。
Googleカレンダーにずっと眠ってたタスクなのでカレンダーから削除できてスッキリ・・・。
自分でタスクをこなしたら、「コメントして自己解決」ボタンを押せば解決になります。
(自己解決しちゃって問題無し)
TODOリストの場所を移しただけに過ぎません。しかし、TwitterのTLの方や同僚、友達、知り合いが何のタスクをやろうとしているかは普段わかりません。こうやって公開していたら、意外と知り合いとかからツッコミが結構入りました。
「それってあのライブラリ使ったら便利だったよ」
「そういうもの作ろうとしてるんだったら、これも詳しいだろうから聞いてみようかしら」
「修正しました」
このサービスを作るまでは分からなかったんですが、仕事や趣味のやり方を「公開しやすいやり方」に変えていくと、何故だかいろいろ上手くいくのです。
仕事のプログラムをオープンソース開発の手法に近づければ近づける程、仕事がスケールし易く・柔軟になり、臭い物に蓋的なところが消えて品質が上がるのと何か関係があるのかもしれません。
githubだけでなく、bitbucketアカウントも追加できるようになりました!
右上のアカウントからアカウント情報ページに入って登録が出来ます。
bitbucketアカウントをお持ちの方は是非ご登録を!
「プログラミングタスクを共有する」Help me, hackers!というサービスをリリースしました。
一言で言うと「報酬支払いインフラ付き共有・公開バグトラッキングシステム」です。(PayPalを使って支払いも出来ます。もちろん報酬とか無しの単なるタスクもアリです)
プログラマー同士がお互いのタスクを公開・共有しながら、実際の成果物を中心とした建設的なコミュニケーションを促進できればと思い作りました。
普通はTwitter上の知り合いが「仕事で何をやってるのか」「趣味で何を作ろうとしてるのか」などはブログなどに書いてないと分かりません。口に出してみると周りの人から「それだったらこういう解決方法があるよ」とか「あそこにもっといいプラグインがあったよ」などと耳寄り情報が入るときがあります。
だったら普段のBTS/TODOリスト的なものを常に公開しておけばそういったコミュニケーションが活発になり、仕事にも活用できるのではないかと思いました。
僕と@machidaさんは以前いたアクトインディ株式会社でBTSを使って島根県の凄腕Rubyistの方と仕事をさせていただきまいしたが、退社に伴ってそのBTSが使えなくなりました。(当たり前です)
「フィヨルドでもああいうの使いたい!」
「じゃあ作るしか・・・」
「どうせだったら他のみんなも使えるものにしたら便利かも」
という単純な発想から出来ております・・・。
利用にはTwitterアカウント必須ですが、面倒な登録はいりません。タスクも登録後に編集・削除は自由なので「今日やるタスク」とか「個人的に作ろうとしているモノ」などを試しに登録していただけるとありがたいです。
もちろん当初は全てのタスクに僕が全力で解決に挑みます!w
4月1日から4月30日のオープンを目指して、Help me, hackers!というWebサービスを作り始めました。
対象がデザイナーやプログラマーのみと大変ニッチなので知り合いなどに使ってもらって意見をもらいながらやらないといけないなと思ったんですが、それだったら早い方がいいので、ニコニコ動画の生放送をして常に意見を聞きながら作ることにしました。
毎日平日の18:30〜19:00の30分間だけですが、生放送をしながら作っています。開発環境で動いているものも現在触れる状態にしているので、ニコ生にアクセスしてパスワードをゲットして、どういうサービスにしたらいいのかアドバイスいただけるとありがたいです。
ニコ生では放送から7日間は録画を見ることができますのでそちらでも開発環境のパスワードが分ります。平日の夕方ですが、ニコ生を見るのが許される会社の方なども実際に生放送でアドバイスお待ちしております。
既にネットワークの設定を生放送で手伝ってもらったり、機能の提案や仕事の依頼を頂いたりと非常に参考になっております。
既に公開予定地にはbuilding nowの文字が。果たして1ヶ月で本当に出来るのか!

















