商品の情報収集が捗るブラウザ拡張『はてなレビュー』を作りました


はてなレビュー』というブラウザ拡張を作ってみました。
Chrome拡張版Firefoxアドオン版を用意しています。

何を提供するもの?


Amazonの商品ページに、カスタマーレビュー以外の情報収集の手段として、その商品について言及しているエントリーを人気と新着に分けて表示します。

商品を見ながらはてな上での評判や関連情報を見れるので、情報収集が捗ることを期待しています。


Amazonのカスタマレビューはそのレビュアーがどういった見識を持っているのかが見えないのでイマイチ信頼性がはかれない、そういった点も解決できないかなーと思っています。
よく訓練されたはてなーであれば、言及しているユーザのidを見るだけでその人のことはある程度知っているでしょうし。

知らないAmazonレビュアーが付けた5つ星の評価よりも、はてな上での評判のほうが参考になる、そう思うはてなーにオススメのブラウザ拡張です。

仕組み

言及しているエントリーの情報は、はてなasinページから取得しています。
asinページの情報はYahoo! PipesRSS形式に変換して、そのRSSGoogle Feed API経由でブラウザ拡張から取得するというサーバレスな構成で作っています。

インストール方法

下のリンク先からお使いのブラウザにあったものをインストールしてください。

インストールした後はぜひ、Amazonの商品ページにアクセスして実際に使ってみてください :-)

Readabilityを初期設定のままで使うとリストが公開されちゃってる件

Readabilityのリストって非公開だと思っていませんか?自分は勝手に非公開だと思っていましたが違うようです。

事の発端は「ReederのReadability連携が便利!」という以下の記事を見て、Reederではなくlivedoor Readerを普段使いしている自分も、ReadabilityのリストをRSSリーダで読む方法はないかなと探してみたところから。
Twitterで気になった記事を「Readability」に送って「Reeder」で読むように設定するとRSSリーダーが超進化する。 | 男子ハック



ググってみると、Readability側でRSSが用意されているのを見つけました。

Desk.com - Site Not Found (Subdomain Does Not Exist)

しかし、説明を見るとフィードのURLが

https://www.readability.com/USERNAME/latest/feed

とユーザID(USERNAME部分)を含めたURLとなっていてビックリ。
てっきりユーザIDではない識別子が含まれたURLになっているかと思ったのですが。

これだと、ツイッターIDやはてなIDと同じIDで登録する人も多いと思うので簡単に推測可能ですよね。。

他にも

https://www.readability.com/USERNAME/latest

にアクセスするとRSSではなく、通常のWeb画面でリストが見れるようです。

人には見られたくないページを非公開だと思って追加してると、自分の知らないところで人に見られちゃう可能性も。。。

非公開設定にするには?

初期設定では公開状態ですが、ちゃんと非公開に設定する方法も用意されています。
設定手順は以下の通りです。

  1. Readabilityにログインして右上メニューの「MY ACCOUNT」をクリック
  2. Profileの入力項目Privacyの「Hide reading list 」をチェック
  3. 「Save Profile Settings」をクリックして設定完了

まとめ

気をつけて使いましょう。

「ATNDBK(アテンドバック)」というサービスを作りました

昨日11/07にATNDBK(アテンドバック)というサービスをリリースしました。

http://atndbk.org/

名前から想像がつくようにATNDがらみのサービスで、ATNDで開催されたイベントにトラックバック機能を提供するサービスです。
トラックバックを受け付けるWebサービスと、受け取ったトラックバックの表示を行うブラウザ拡張機能Chrome版、Firefox版)とで構成しています。

作った目的や使うことのメリット

イベントの主催者が、参加者の書いた記事を一つ一つ手でまとめてリストアップした記事を作って「抜けがあったら連絡くださーい」と言っている光景をたまに見かけるのですが、その手間は参加者一人一人が書いたことを通知する先があれば減らせるんじゃないかな、それっていわゆるトラックバックだよなー、という発想から作りました。

イベント参加者からのフィードバックを埋もれさせないために参加ログを集約する場所

となることをATNDBKは目指しています。そのための手段としてトラックバックを使います。

twitterでいいじゃない」という声も上がりそうですが、ツイートは時間が経つと消えちゃいますから、ストック型な情報としてのブログ記事の価値は高いんじゃないかなと考えています。

ATNDBKの特徴

トラックバック送信先は、参加したATNDのイベントURLに"bk"の2文字を付け足すだけの簡単仕様としています。

http://atnd.org/events/xxxhttp://atndbk.org/events/xxx

トラックバックの表示は、ブラウザ拡張機能をインストールしてATNDイベントページにアクセスすると、「トラックバック」というタブが新たに現れ、そこに一覧が表示されます。


また、受け付けたトラックバックはイベント単位でRSS配信しているので、送られたトラックバックをもらさずにチェック出来るようにしました。

使った技術など

Webサービス側はCakePHP 1.3で開発していて、サーバはPHP fog(http://phpfog.com/)を利用しています。

デザインのベースにはBootstrap(http://twitter.github.com/bootstrap/)を使っています。いかにもBootstrapな雰囲気は無くそうと努めましたが、なかなか難しいですね。

ブラウザ拡張機能とのやりとりするためのJSON出力や、RSS出力などはCakePHPの機能が使えるのでそのあたりはラクができました。

初めてプライベートでの開発

プライベートでの個人開発は初めてでしたが、仕事でしているシステム開発とは違って「解決したい事」と「解決する方法」の両方を自分自身で生み出さないといけないのでなかなか苦労しましたが、普段使っていない脳を働かせてアイデアを形にする過程はとても楽しかったです。
これで広く使ってもらえるサービスになるともっと嬉しいんですけどね :-P

というわけで、、

ATNDのイベントに参加してブログ記事を書く際には是非、ATNDBKまでトラックバックをお願いします!

『Javaルールブック』

TwitterのTL上で本書に関するツイートを何度か見かけて気になっていたので、本屋でパラパラ見て「これは会社に一冊あると良さそうだ」と思い、勤め先用の書籍として購入して貰いました。

Javaルールブック ?読みやすく効率的なコードの原則

Javaルールブック ?読みやすく効率的なコードの原則

本書は、良いコード(=保守しやすい)を記述するためのルールを中心に、そのルールの違反例と修正例のコードと説明が掲載されており、スッキリとした構成でとても読みやすかったです。

ルールについても全体的にフムフムと同意できる、または参考になる内容ばかりだったのですが、1つだけ自分が「ん?」と引っ掛かったのが『2.10.4 文字列リテラルと変数を比較するときは、文字列リテラルのequals()メソッドを利用する』というルールです。

どういうことかというと

if (str != null && str.equals("Y")) {
  // 省略
}

よりも、

if ("Y".equals(str)) {
  // 省略
}

を使うことを推奨するということです。

前者だとnullチェックを行う必要があり、nullチェック漏れのリスクを回避できるという理由で後者が推奨されています。

テクニックとしてこういう方法があるのは知っていましたが、自然言語の順序として何となく気持ち悪さを感じてしまうので、私は前者を使っています。(変数を文字列リテラルと比較するのか、文字列リテラルを変数と比較するのかでいうと前者の方がしっくりくる)

この話題について、ここ数年の間にどこかで大議論が行われているのを見た記憶があるけど、それがどこだったか思い出せず。

その議論に決着が付いたのかも記憶にないのですが、どなたか知ってる人がいれば教えてください。。

Mac/iPhoneを分解するなら必見のサイト『iFixit』

最近Macbookの熱がずっと高めだったので、先週末に冷却ファンの掃除とヒートシンクのシリコングリスの塗り替えをしました。

ネットで大体の手順を調べて、「1時間くらいで出来そうだな」と思って夜に始めたのが間違いの始まり。

いざ裏蓋を開けてみたら、見ていたページの情報は自分のMacbookと型違いで調べた手順は何の意味もなさないというオチが待っていて、困り果ててしまいました。。

で、何とか見つけたのが以下のサイト。

iFixit: The Free Repair Manual

Apple好きな方には有名なサイトみたいですね。知りませんでした。

このサイトのトップページから”Repair manuals”へ進むと、Mac RepairsやiPhone Repairs等のメニューが並んでいます。

さらに進むとモデル別、目的別の分解手順が写真付きで詳細に解説されています。モデルも豊富で最近のものは網羅されていそうです。

当初の1時間という見積もりは大きく超えて3時間半もかかってしまいましたが、このサイトのおかげで何とか作業を終えることができました。

SmartyでPHP関数を呼ぶ方法

Smartyを使っていて、0埋めされていない現在の月の値(1〜12)を出力したい時に、

{$smarty.now|date_format:"%m"}

では、01〜12の2桁の値が出力されるし、%m以外に月の値を出力できる変換指定子もないので困りました。

date関数が使えれば楽なのになぁ、と思って調べてみたら、ちゃんとPHP関数を呼ぶ方法が用意されていました。

その方法

PHP関数はSmartyの修飾子として指定できるようです。

あらかじめ用意されている修飾子しか指定できないと思っていました。

全ての PHP 関数は暗黙で修飾子として使用する事ができます。

Smarty 第 5章変数の修飾子

というわけで、↓の記述で無事に0埋めされていない現在月の値の取得ができました。

{"n"|date}

色々と使えそう

今まで知らなかったけど、これはかなり使えそうな予感。もっと早く知りたかった。

XLSBeansで文字化け発生

XLSBeansを使っていて、”×”(バツ、かける)の入ったセルが、読み込んだ後では”ラ”に文字化けする問題が発生しました。

解決策がないかググってみるとこんな資料を見つけました。

JExcelApi - blanco Framework システム構成←[注意]パワーポイントへのリンクです

この資料によると、

文字化けはXLSBeansが内部で使っているJExcelApiの問題のようで

というケースで発生するようです。

確認してみると、確かに”×”は上記範囲内の\u00d7でした。

解決策

上記資料によると、WorkbookSetting#setEncoding()に”ISO8859_1”を指定すればよいということなので、XLSBeans#load()の中でWorkbookSettingのインスタンスを生成した後に

settings.setEncoding("ISO8859_1");

という処理を追加したソースをビルドしたものを使えば、無事文字化けせずに”×”が扱えました。

XLSBeansについて

今回初めて使いましたが、エクセルからオベジェクトへのマッピングアノテーションで簡単に出来るので、エクセル読み込みが必要な時は今後も使っていきたいプロダクトでした。

欲を言えば、S2Csvみたいにバリデーションとコンバート処理を差し込む方法があれば、自分的にはパーフェクトなプロダクトです。

[Amateras]XLSBeans 1.1.0をリリースしました