shields.ioにmergeされるまでのこぼれ話

shields.ioにchrome web store対応がmergeされるまでの、chrome extensionのバージョンのバッジを表示する | 實松アウトプット こぼれ話。
mergeされたい人は参考にしてくれ。

2015/7

shields.ioでchrome extensionのバッジ出したいな、と思う。
まず思ったのが一番間違っていた。
shields.ioに取り込まれる練習にもなりそうだ、という勘違い。

公式APIがない。

How to get chrome extension’s meta information (e.g. version, name) from Chrome Web Store? – Stack Overflow

みんなwebページをスクレイピングします。…まじっすか。

chrome web storeのhtmlをスクレイピングしてparseするモジュールを書く。

2015/8

Support chrome web store by sanemat · Pull Request #505 · badges/shields

  • htmlスクレイピングは勘弁してくれ
    • ですよね(sanemat)
  • cheerio ぶっこむなんて今までで一番大きい依存だぞ
    • そうですね(sanemat)
    • lodashまるごと使ってるcheerioがわるいだろ…
  • htmlスクレイピングだけど、未来永劫取れるのか? 少なくともオープン当時の2010年のhtmlから取れるならいいけど
    • google にpublicなAPI作ってもらうよう話をするのが正当じゃないの
      • いやまあそりゃ正論はそうだし、いちおうメーリングリストで話しかけては見るけど(sanemat)
    • !???!??! (今2015年だぞ?) web-archiveで2013年のhtmlはparseできるけど、そりゃ明日取れるとは保証できないですね(sanemat)
      • じゃあgoogle の反応待ちだね
        • そうですね(sanemat)
          • 放置

2015/11

じゃあもういいっす close(sanemat)

2016/1

add chrome extension version badge · Issue #636 · badges/shields

  • chrome extensionいれてくれー
    • そういえば前pull request来てたわ
      • なんで入れないの? 壊れたら直せばええやん どうです @sanemat
        • 今も動いてるならいれてやってもいいよ 6ヶ月ごとぐらいに直すの嫌じゃん

2016/4

ここでノコノコ出てくのもシャクではある。が、ノコノコ出て行ってマージされて世に出た。Add chrome extension support #687。めでたしめでたし。
あと、shieldsプロジェクト、nodeっぽくないアプリなんだよね。
クライアントライブラリなど使わずにrequestで全部リクエスト作る自前主義。理屈もあって、リクエストをキャッシュしないとどうにもならないので、そのへんを作りこんだことによって、自前で書かなくてはいけなくなってしまった、ある意味仕方ないともいえる。
まあ(勝手に)頑張ってくれーとは思わなくもない。

理屈もわからなくはなくて、こういうのって導入するときだけみんな頑張りに来て、あとで直すのは自分たちだ、動かなくて文句言われるのも自分たちだ、という実情がある。
ちょっと違うけど、homebrewのsanemat/fonts (ricty) もだいたいそんな感じになって読めないコードになった。なので、そういう文化圏があることは否定しない。

簡単でした(再掲)

chrome extensionのバージョンのバッジを表示する

chrome extensionのバージョンのバッジ(こんなの)
Chrome Web Store
を、例えばGitHubのリポジトリのreadmeに表示する。

TL;DR

<a href="https://chrome.google.com/webstore/detail/do-not-merge-wip-for-gith/nimelepbpejjlbmoobocpfnjhihnpked"><img src="https://img.shields.io/chrome-web-store/v/nimelepbpejjlbmoobocpfnjhihnpked.svg?maxAge=2592000" /></a>

こう指定する。aタグのhrefはまあどこでもいいけど、detailのページに向けてやると親切げ。

必須要素

chrome extensionのdetailぺーじから、謎のIDっぽい文字列を得る。
https://chrome.google.com/webstore/detail/do-not-merge-wip-for-gith/nimelepbpejjlbmoobocpfnjhihnpkednimelepbpejjlbmoobocpfnjhihnpkedコレ。

https://img.shields.io/chrome-web-store/v/nimelepbpejjlbmoobocpfnjhihnpked.svg?maxAge=2592000 vだと バージョン、dだと ダウンロード数、priceだと 金額、ratingだと レーティング、rating-countだと レーティングの数、が表示できる。

詳細は、Shields.io: Quality metadata badges for open source projects 参照のこと。

chrome webstore

これ実はchrome extensionだけではなく、chrome webstore対応なので、chrome app, chrome extension and chrome theme も表示できる。便利ですね。簡単ですね。

簡単ですね

ほぼ一年かかりました。

自分の名前・アイコンをクリックすると

自分の名前、iconを押したときどこに飛ぶのか確認してみた。感覚では、URLは自分用のパーマリンクになってほしくて、中身は他人から見たときのページになってほしい。
結論は、感覚ほど統一されてるわけではなかった。
これだっていうurlと、その見せたい中身が欲しいですね。facebook, github, stackoverflowみたいにactivity, timelineが見えるのが好み。

twitter:
url:
https://twitter.com/#!/sanemat
content:
上部分にbioが来て、左がリストなど、右が自分の発言

facebook:
url:
http://www.facebook.com/sanemat
content:
自分のタイムライン

google+:
url:
https://plus.google.com/u/0/102731985287780687047/posts
よく分からないけどこれが自分のパーマリンクかな?
content:
自分の発言

wordpress.com:
url:
https://sanematsu.wordpress.com/wp-admin/users.php?page=grofiles-editor
content:
自分のpublicなプロフィール編集ページ

linkedin.com:
url:
http://www.linkedin.com/profile/edit?goback=%2Enmp_*1_*1_*1_*1_*1_*1&trk=spm_pic
content:
自分のプロフィール表示

mixi.jp:
url:
http://mixi.jp/list_self_profile_image.pl
content:
名前をクリックしてもなにもない, 自分画像をクリックするとプロフィール画像編集ページへ

gmail:
url:
https://plus.google.com/u/0/
content:
+Kenichiさん をクリックするとgoogle+へ

github:
url:
https://github.com/sanemat
content:
そのひとのactivityが見えるページ

stackoverflow:
url:
http://stackoverflow.com/users/104080/sanemat
content:
そのひとのactivityが見えるページ

evernote:
url:
なし?
content:
あんまりスペース割り当ててない。settingsとかhelpにpulldown直

photozou:
url:
http://photozou.jp/user/top/299169
content:
名前にはリンク無し, 自分画像は自分のプロフィールページ

cookpad:
url:
http://cookpad.com/kitchen/3892676
content:
名前にリンク, sanematのキッチン

yahoo.co.jp:
url:なし
content:
こんにちは そしてどこにあるか全然分からない場所にある 遠い

yahoo.com:
url:
http://profile.yahoo.com/XVPY2BOCK4GOW6E7SYOAEUR3DI/
content:
yahoo! profileに飛ぶ 謎のアバター

twttus release! (shorten permalink you tweet)

twttus give you permalink for your tweet!
http://twtt.us/

usecase

when you want to tweet about others tweet, you can use bit.ly and ow.ly for shorten tweet url.
but they shorten anything urls (they have black list you know), you fear you jump anywhere you don’t know.

it is twttus case!
twttus only jump tweet in twitter.com.
and you can use twttus easy.

http://twitter.com/twttus/status/7909061689
->
http://twtt.us/7909061689

enjoy twitter life!

作者知らなかったサービスの作者メモ

正確には作者とサービスが今さっきはじめて紐づいたのメモ
どちらもかなり使ってるサービスですが1, 2年まえに知らなかったそのままになってました。

wedata
http://wedata.net/
eto
swdyh

Extractor – Bookmark Comment Aggregator
http://extractor.47objects.com/
clouder

あらためてありがとうございます。

パスワード再設定機能の実装案

パスワード再設定機能案考えてたら「つきあいきれねーよ」という考えにいたり、OpenIDにフリーライドすればいいのではという話。

■パスワード再設定機能とは
登録メールアドレスにパスワード再設定用URLの入ったメールを送り、パスワード再設定を可能にする機能
「※パスワードを忘れた方はこちら」のやつ

■パスワードも忘れたし登録メールアドレスも使えないときに困る
●登録メールアドレスを忘れた場合
よくあるのがGmailのアドレスに「.」つけたり「+suffix」つけたりしてなにがなんだか分からなくなるケース。

対処法→忘れない 探す

●登録メールアドレスが使えない場合(捨てた)
登録時はフリーメールアドレスで登録したが、そのアドレスはもう使えないケース。
学校のメールアドレス、会社のメールアドレスで登録して今は使えない。
対処法→捨てメールアドレスは使わない

●登録メールアドレスが使えない場合(変えた)【本題】
ケータイユーザは自分のメールアドレスをころころ変える
ケータイの一度使われたアドレスには使った本人といえども戻せないことが多い
ケータイユーザは「かんたんログイン」という端末固有番号を用いてログインする機能を用いることが多い(=パスワードはその設定するまでしか使わない)

「ケータイのアドレス変えました」→「パスワード忘れました」→「再設定メールが届きませんたすけて」
ここで俺は本人に決まってる早く対応しろとかパスワード送りつけられたりとかしても困る。

「かんたんログイン」からうまく設定変更に誘導できればぎりぎりセーフだが、うまくいかないことも多い。

■パスワード再設定機能の実装案1
1. ケータイとPCのメールアドレスを登録させる
2. パスワード再設定URLの入ったメールはケータイとPCの両方に送る(もしくは選択できる)

●クリアした点
・当人の情報をキーにして再設定させる場合(たとえば誕生日)、近しい人ならその情報知ってる
・秘密の質問等々どうしても人力を介さなければならないことがない
・そもそも秘密の質問なんて覚えてない

●クリアしてない点
・わざわざ二つもメールアドレス登録したくない
・なんなのメールいっぱい送ってくる気なの
・どこをユニークにする必要があってどこをユニークにしなくていいのかパニック

■つきあいきれねーよ

■余談暴論
ケータイこそOpenIDのような気がしてきた
こんなのいちいち自前で各サイトに実装してらんない
yahoo.co.jpやmixiが頑張ればいい話じゃないのかな

残る問題
サービス視点
何かにつけメルマガや個別メール送りたいからメールアドレス欲しい欲しいOpenIDはメールアドレス取れるの取れないの取れないならダメじゃん
ユーザ視点
OpenIDってなんだよなんでmixiのidパスワード教える必要があるんだよ なにそれ怖い
開発視点
重要項目変更前にパスワード聞くような柔軟な設計にしづらそう OpenID組み込んだことないからそのうち使ってみる

Bloglinesが重いのはRSS広告のせい

重い重いと思い、文句を言いつつ使っていたBloglinesですが、重いのはRSS広告であってBloglinesは悪くありませんでした。疑ってごめんなさい。

http://www.pheedo.jp/img.phdo*
http://rss.rssad.jp/rss/artimg/*
http://rss.rssad.jp/rss/img/*

以上のURLをProxomitron使うなりfirefoxならAdblock Plus使うなりして絶てばずいぶん軽くなります。

Bloglinesでフィードを読んでいる最中に、ブラウザから応答がなくなることが私の環境ではよくありました。非力な自分のPCと鈍重なBloglinesに原因があるとなんとなく思っていました。でも通信のヘッダをみると、bloglinesからの応答が遅いというよりも、やたらめったら同じサーバにGET掛けまくっているのがわかりました。そのファイル自体は1×1のgif画像ですが数が多いので、チリも積もれば式にボトルネックになっていたようです。

小さな画像を読み込ませてアクセス解析をする、というのは常套手段です。広告効果を広告主に示す必要があるのは分かります。でも広告エントリ差し込むごとに画像読ませるならもっと速いサーバ使ってよ。もしくはもっと別の手段で計測してよ。こんなのないでしょ。利便性損ないすぎだよ。

というわけで自分の行為の正当化も済ませたので大手を振ってRSS広告の画像部分をカットします。

よくあるtipsのように「RSS広告を非表示にする」だけだと読み込むことには変わらないので軽くなりません。
RSS feed の広告を消す by Yahoo!Pipes/楽
http://etopics.bayashi.jp/archives/entry/topicsit/2007/001877.html

のようにRSS自体加工してしまうなら軽くなります。

裏Get2ch補足1

指摘があったので補足しておきます。

メモ2
http://yy14.kakiko.com/test/read.cgi/mirror/1158402994/757-758

實松アウトプット: 裏get2ch のエントリ中では主語、というかすべての前提に「Get2chを作る上では」「当サービスでは」が入ります。

「だいたいこんなことをやっています」、「ニッチなサービスを作る時に『全部入り』目指すのは効率悪いよね」と私は思っています、「しんどいところフリーライドしてごめんなさい」と私は思っています、という趣旨のエントリでありそれ以上の意味合いはありません。

659の独り言
http://jbbs.livedoor.jp/bbs/read.cgi/computer/21256/1164941934/290-291

みみずん検索は巡回がpush型で行われるわけではないと私が認識しているので検討対象に入れませんでした。何日かかけて全板を総なめにしていく形式だとどこかで読んだような。ソースは見当たらないので誤解かも。

追記(2007.06.14 12:11 URL追記)

裏get2ch

2chのdat落ちスレッドの中で自分がどうしても読みたいスレッドは●なりモリタポなりを使って取得すべきです。が、そこまではしたくない、でも最後までよみたい、程度のスレッドも多々あります。これを解決するためにGet2chを作りました。

作る上でネックになるのは次の三点です。

  • datの保存
  • 巡回動作
  • datのビュアー

datの保存

datは容量食いです。しかも現在進行形でガンガン増えていきます。逐一貯めていくよりも、必要な人が探してdatを回収できるだけの手段を提供、に機能を限定します。

巡回動作

2chからdatを持ってくる時に、登録されたスレッドURLに対してHEADしてGETして差分を取得、という流れはスレ登録数が増えたときに破綻します。クローリング用のミラーサーバがある板はまだいいですが、cronでスクリプトを動かして〜という一連の動作の中に収めるには2chに対する連続アタックになってしまいます。

datのビュアー

サーバにdatを引っ張ってくる場合には自前のnonyuで読み込ませればいいです。しかし、nonyuは本当に必要最低限の機能しかないので、あまり便利ではありません。(そして、datを引っ張ってこない かつ ビュアーは自前 の場合、直近の何スレッドかをキャッシュすることになりますが、その辺イマイチよく理解できていません。ビュアーで読むたびに毎回相手にアクセスしに行くのが不経済なことはわかります。)

選択肢とフリーライド

自前のサーバにdatを保存する一番オーソドックスなやり方は保存・巡回の二点から却下です。そうすると、他者のサービスにフリーライドする選択肢か諦めるしかなくなります。選択肢は二つ。snapshot2chとp2.2ch.netです。

snapshotはurlをGETで投げるとその時点での中身を保存してくれます。ビュアーも用意してあるので、保存・ビュアーの二点は解決します。しかし、巡回動作が難しいです。仮に登録スレが50あるとしたら、結局毎時50回それも短時間にGETすることになってしまいます。

p2.2ch.netはスレッドを読み込んだらそのスレッドを保存してくれます。この点はsnapshotと似ています。しかし、各スレを読み込む以外に、お気にスレに登録したスレッドはワンクリックでまとめて巡回することが可能です。この機能を利用します。ただし、dat落ち後にp2.2ch.netで読み込み済みのdatの取得は可能ですが、p2.2ch.netのビュアーで見ることは出来ません。

よって、p2.2ch.netの巡回でdatを取得しておいて、別のビュアーで見るのが現実解です。

ビュアーについても同様です。前述の理由からこちらも他者のサービスにフリーライドします。com-nika.osask.jpでは2chのスレッドを表示することが可能です。また、該当スレッドがdat落ちしている かつ p2.2ch.netにdatがある場合にはp2.2ch.netから保管して表示してくれます。

さらに、●・モリタポ以外で取得したdatは短期間のうちにp2.2ch.netから削除されます。ですので、datは冷めないうちに取りにいかなくてはいけません。これにはmirrorhenkanが役立ちます。

まとめ

以上が他人のふんどしサービスget2chの説明になります。大きなサービスより小さなサービスという方向性は間違ってないはずですが、しんどいところ全部フリーライドなのは問題問題。作るのは勝手だけど公開するのはやめてよ、って言われそう。

各所に怒られたらサービスは終了です。もちろん怒られない程度のアクセス頻度・上限数に設定してますが、こればっかりはどうにも。文句言われるほど利用者来るかな。来ないだろうな。