メイン

ツール アーカイブ

2007年04月19日

Twiggee - Yahoo! Widgets 版 Twitter クライアント作ってみた

Yahoo! Widgets の勉強がてら、巷で話題の Twitter クライアントをさっくり作ってみました。おまけで PlaceEngine と連携して、発言に自動的に現在位置情報が追加されちゃったりします。

画面はこんな感じ(モザイクかかっててもわかる人には誰かわかると思いますが、まあご勘弁)。
一番上は現在の自分の写真と "What are you doing?" 。その下の入力欄にて発言内容を POST することができます。
friends の新しい発言はフレーム部分の下に追加される形で表示され、長い発言はほどよく左スクロールします。

Twiggee

Twiggee はこういうシンプルな Twitter クライアントなのですが、おまけ機能に「PlaceEngine連携」があります。
PlaceEngine が起動していれば、Wifi測位で取得した現在位置情報を「ぼちぼち仕事中~ @千代田区永田町 10F」という感じで発言に付加します(有効無効設定あり)。また、そのまま移動して現在位置住所が変わると自動的にステータスが更新されます。
その画面もキャプって掲載したかったんですが、この機能のテストのためにノートPC持って吉祥寺界隈をうろうろしてたら(←怪しいやつ)HDDが吹っ飛んでしまい、今が PlaceEngine 使えない状態だったりします…… orz
あと iTunes で演奏している曲名&アルバム名も付加してくれる機能もありますが、まあそれは珍しくないのでw

Yahoo! Widgets がインストールされていれば、下記からダウンロードした Twiggee.widget を開くことで試していただけます。

Twitter クライアント "Twiggee" ダウンロード
(右クリックして「名前をつけて保存」してください)

初回利用時は右クリックして「ウィジェットの環境設定」から Twitter のユーザID&パスワードを設定してやってください。
なお、決まり文句ですが「正しく動作することを期待していますが、無保証」でお願いします。


あと Yahoo! Widgets での "Hello World!" とか、気がついたはまりやすい注意点などなどは下記個人の blog の方にまとめてみたので、そちらに興味のある方はご覧くださいまし。

2007年04月26日

Twitter クライアント Twiggee を TinyURL に対応

以前のエントリで公開しました Yahoo! ウィジェットTwitter クライアントの Twiggee ですが、「URLクリッカブルにならないの?」という要望をいただいたので、さっくり対応してみました。
ステータスに URL が含まれている場合は、ステータス文字列をクリックするとブラウザが開きます。複数の URL が含まれている場合は先頭の URL しか見ません。すいません(Yahoo! Widgets ではテキストの一部をクリッカブルにすることができないんで……)。

で、これだけではおもしろくないので、TinyURL に対応してみました。
設定にて「TinyURL を使う」にチェックを入れておけば、入力されたステータスに URL が含まれている場合、TinyURL に投げて短い URL に変換してくれます。URL に # が含まれる場合も、ちゃんと # の前までを TinyURL に変換します。
Twitter の方でもある程度勝手に TinyURL に変換してくれるっぽい( '?' を含む場合は変換される様子なのだが、詳細は不明)のですが、とにかく URL は短い方がいい!(Twitter は文字数制限がそこそこ厳しいので)とか、ちょっと DIS っちゃったから referer 隠したい(爆)などという場合は便利かと。

Twitter クライアント "Twiggee" (20070426 版) ダウンロード
(右クリックして「名前をつけて保存」してください)

2007年05月01日

LingrTickr - 誰でもニコニコメソッドプレゼン

lingrtickr

プレゼンしているその画面の上に、聞いている人達のコメントがニコニコ動画風に流れるのが楽しいそうで。それ、Yahoo! Widgets でできるよ。
というわけでさっくり作ってみたのが LingrTickr です。

まず、名前からわかるように Lingr のルームを一つ作ります。
そしてプレゼンに使うパソコンにて LingrTickr 起動し、設定画面でその Lingr のルームIDを指定します。文字サイズ、フォント、流れるスピードなどもこの設定画面から行います。
これでそのルームでのチャット内容が画面上を流れます。簡単。
マウスやキーボードの全ての操作を透過するので、プレゼンツールによらずニコニコメソッドなプレゼンを展開して、愛のあるツッコミを全身で享受することが可能です。
ちなみに、チャット文の先頭に "green:", "red:", "blue:", "yellow:" などを付けることで流れる文字色を指定できたりします。

なお、LingrTickr は何もしていない時は画面上に何も出していないので、設定画面はタスクトレイの Yahoo! Widgets アイコンから開いて下さい。
同様に LingrTickr を終了させる時も通常の Yahoo! Widgets の方法では終了できないので、この設定画面にて「ウィジェットの終了」にチェックを入れて終了して下さい。

ツールを選ばないという特質から、プレゼン以外で使ってみても面白いかも。例えば、
・ペアプログラミングで「ぬるぽかよ……orz」とツッコんでみる
・スポーツの放送を観戦しながら、実況チャットをスーパーインポーズで流してみる。
とかとか。

LingrTickr ダウンロード
(右クリックして「名前をつけて保存」してください)
5/7 更新: オブジェクト消滅処理修正、など




≫5/7 更新

動的生成したビューオブジェクトの消滅処理を勘違いしていた(どうやら version="3.0" では delete 文は意味がないらしい)のでそれを修正しました(1000メッセージほど流してGCが働くことを確認したので、今度はおそらく大丈夫)。上記リンクから更新版をダウンロードできます。
また長いコメントは流れるスピードが速かったのですが(それはそれでおもしろいとも思ったけど)、やっぱり同じスピードの方が良いだろうと思ってそちらも調整してあります。

なお、Yahoo! Widgets さんは出し惜しみなしなので、アニメーションにCPUフルパワー使おうとします。
万一実利用を考えてしまった場合は、タスクマネージャから優先度を「通常以下」あたりに下げておいた方が幸せかもしれません。



≫5/2追記

ニコニコメソッドプレゼン - coding my life


あとは非公開の社内勉強会で気軽に使えたらいいのですが。というわけでぜひ親会社のサイボウズ社さんの方で製品作っていただいて、モニター協力させていただけないですかね :-)

ありがとうございます。是非製品化したいですね~w。チャットエンジンとセットにして……(とうそぶいてみるテスト)。
Yahoo! Widgets は意外といろいろおもしろいです。日本語の扱いが若干怪しいところはありますが……こういう類のものを軽く作るのには悪くないです。

Apollo でニコニコメソッド プレゼン

リッチクライアント系の得意分野ですから、他の実装もあれこれできそう~。でも見た目ではさすがに macromedia に一日の長?

2007年05月11日

Erlang で分散してみたくて倉庫番solver

Erlang の「軽量プロセス間の非同期 tuple メッセージのやりとりによる分散」というのが今やっていることの色々参考になるんじゃないかという気がして、少し勉強ということで "Programming Erlang" をせっせと読んでみました。

#Erlang のメッセージは別に tuple じゃなくてもなんでも送れます。一応念のため。

いきなり余談。"Programming Erlang" の書籍版はまだ出てないんですが、直販で $45.95、amazon.com だと $36.95 なのに、amazon.co.jp だと ¥7264 もするのはなぜ!? まあ、PDF版 ( $22.50 ) を買ったので関係ないんですが。 (5/18 追記:Amazon に Programming Erlang をリコメンドされたのでふと見てみたら¥4,118 になってました。これなら書籍でも良かったかな~)
ちなみに、PDF 版を購入すると特典として「全ページ」に自分の名前を入れてくれます(笑)。買ってからダウンロードできるまでにえらい時間かかるなあと思ったらそんな事してたのね。

閑話休題。中谷は何か作ってみないとわからない人なので、分散に向いている何か題材は……という頃合いに こんな記事 を見かけてしまうわけです。
あー大昔に作ったなあ。あの頃は X68000 だったのでメモリがなく、深さ優先で作るしかなかったんだけど、200~300歩クラスの問題なら解けるところまではなんとかたどり着いたなあ(しみじみ)。

というわけで、「分散対応 倉庫番 solver for Erlang」です。
まあ Erlang の勉強の題材としてということなので、単純幅優先&枝切り無しという solver としてはおもちゃなレベルなんですが、荷物3、4個の問題ならだいたい十数秒クラスで解けます。
注目を浴びている理由の 対C10K なネタじゃなくてすいません(笑)。

ソース: solver2.erl

関数型言語でまともにコードを書くのは初めてなので(XSLT除く)、おいおいなんだこりゃというところがぽこぽこあるでしょうが、生暖かくスルーするか添削してもらえると嬉しいです……

まずはシングルプロセスでの実行方法。
# カレントに solver2.erl を置いて、erlang を起動
$ erl

% モジュール読み込み
> c(solver2).

% 組み込まれているテスト用問題の解法を実行
% ######
% #@  .#
% # +++#
% # . .#
% ######"
> solver2:test4().
solution: 22 steps ([{5,3,"v"},{4,3,"^"},{4,2,">"},{3,3,"v"}]), goal (3, 3)
solution: 22 steps ([{5,3,"v"},{4,3,"^"},{3,3,"v"},{4,2,">"}]), goal (4, 2)
finish.

% 自分で問題を指定して解法を実行
% ##########
% #@.. #   #
% # +++    #
% ##.  #####
% ######    
% ・制限歩数 50
% ・自ノードで1プロセス実行
% 解法は複数出力されます。最短解法のみコピペ。
> solver2:start( [{self,1}], 
>  ["##########","#@.. #   #","# +++    #","##.  #####","######    "], 
>  50).
solution: 35 steps ([{4,3,"v"},
                     {5,3,">"},
                     {3,3,">"},
                     {4,4,"<"},
                     {4,3,"^"},
                     {6,3,">"},
                     {7,3,">"},
                     {8,3,"<"},
                     {7,3,"<"},
                     {6,3,"<"},
                     {5,3,"<"},
                     {4,2,"<"},
                     {4,3,"^"}]), goal (4, 3)
問題は下記のように記述します。ちなみに上記問題は自作w
プレイヤー初期位置がゴール上な場合が記述できないですが、まあいいや。
 # : 壁
 @ : プレイヤー初期位置
 + : 荷物
 . : ゴール
 * : ゴール上にある荷物
解法結果は(歩数、解法履歴、最終のプレイヤー位置)が出力されます(最終のプレイヤー位置は意味なかったなあ……)。
解法履歴は荷物の座標と、その荷物をどの方向に動かすかで表示されています。座標は左上を(1,1)としています。


では、続いて分散実行の方法。
# マシン2にてノード名とクッキーを指定して erlang 起動
# 以降、マシン2は手を触れる必要はありません。
# マシン2台無ければ同じマシンでも可
$ erl -name sokoban2@192.168.0.2 -setcookie solver

# マシン1にてノード名とクッキーを指定して erlang 起動
# setcookie には上と同じ値を指定
$ erl -name sokoban1@192.168.0.1 -setcookie solver

% マシン1にてモジュール読み込み
> c(solver2).

% マシン1にて分散解法実行
> solver2:start( [{self,1}, {'sokoban2@192.168.0.2',1}], 
>    ["##########","#@.. #   #","# +++    #","##.  #####","######    "], 
>    50).
start() の第1引数で {ノード名, プロセス数} を列挙することで、指定されたノードにて分散解法が開始されます。モジュールは自動的にマシン1からマシン2に渡されて読み込まれるようになっているので、マシン2は本当に erlang を起動しておくだけでOKです。
手元の環境では上記問題は1台実行で11秒、2台実行で7秒だったので、確かに分散の効果ありありって感じです(笑)。

というわけで、ここからはプログラムの説明。

続きを読む "Erlang で分散してみたくて倉庫番solver" »

2007年05月22日

倉庫番solverをちょっと Erlangっぽく

前回の倉庫番solver for Erlang は Erlang の勉強のためだった割には Erlang の良さを活かしていないつくりだったので、もう少しまじめに作り直してみました。

ソース: solver3.erl

今回はひとまず分散は置いといて、軽量プロセスの恩恵を発揮させる方向で攻めています。

プロセスの構造は manager と solver の2種類だけ、やりとりされるメッセージは基本的には solver → manager の branch メッセージだけという簡単なものに。
manager は branch メッセージを受け取ったら、最大歩数を超えてないか、解けてないか、探索済みの局面ではないかをチェック、問題なければ solver プロセスを起こしてデータを渡します。
solver はデータを1手進ませた枝(その局面で押せる荷物を全部押してみたもの)を作り、branch メッセージに付けて manager に送ります。

前回のプログラムは solver プロセスの数は固定、生存期間は解法開始から終了までというものでしたが、これは Erlang にはちょっと適してなさすぎでした……。今回、生存期間は1手進ませる間だけ、プロセス数も状況の許す限りという形に変わっています。
また solver の処理そのものも Erlang のリストを間違った形で使っていて(参考1参考2)、「重量プロセス」になってしまっていたのを改め、タプルで良いところはタプルに、リストを残すところは正しく「リスト」として使うように変更(これが一番大変だったかも。自分の頭の中身から変えていかないといけないので……)。立派な「軽量プロセス」に生まれ変わりました。

これで解法実行すると、解ける問題は数秒で解けるのですが、そうでない問題は瞬間同時プロセス数 1000~1500 くらいでがんがん探索を進めた後、1分くらいでメモリ不足で落ちます(苦笑)。同時プロセス数が 1000 程度で頭打ちになってしまうのも、メモリ不足に陥るのも、どちらも探索済み局面チェックがボトルネックになっていることがわかっているんですが、そこを Erlang でがんばるのは大変そうなので見ないふりしてます……
ともあれ、そのわずかな時間の間に延べ数十万プロセスをハンドリングできているので、さすがは軽量プロセスの面目躍如というのを感じさせられました。

ちなみに探索方式についても、本当の最低限(評価関数すら導入してない……)ではあるんですが、単純な田の字(荷物がかたまって動けなくなった状態)の枝切りと、探索済みの局面チェックだけは行うようにして、ちょっぴり性能向上しています。
解法アルゴリズムの何が楽しいかって、前回のプログラムでは全く歯が立たなかった問題もこういった工夫を加えていくことで、わずか数秒で解けてしまったりするところ。昨日丸一日解法プログラムを走らせていても解けなかった問題が(今回のプログラムはそこまで行く前に落ちますが……)、あっけなくパンと解けたりするとぞくぞくしてしまって、じゃあ次はあの問題だ! とかなっちゃうんですよね(笑)。

プログラム的にはだらだら長い田の字チェックが追加されているくらいで、それ以外は前回のものよりずっとシンプルになってしまい(プロセスは2種類、メッセージ1種類、solver もループしないし)、わざわざ説明するところがない感じ……
じゃあいっそ、前回は省略してしまった倉庫番解法まわりの説明でもしてみましょうか。

続きを読む "倉庫番solverをちょっと Erlangっぽく" »

2007年05月25日

Twitter & もごもごクライアント Twiggee 新版リリース

Twitter ライクなサービス「もごもご」API ができたということで、もうこれは早い者勝ちだろ~と、Yahoo! ウィジェット 版クライアント Twiggee を Twitter & もごもご両対応にいたしました。

設定画面で もごもごのログイン用メルアド&APIパスワードを設定することで、もごもごの「いま、なにしてる?」更新と「みんなのもごもご」の確認が出来るようになりました。
また両対応の名に恥じないよう、Twitter だけ、もごもごだけ、Twitter & もごもごの併用に対応しています。併用する場合、ステータスの更新は両方に対して行われますが、自分のステータスは Twitter のものだけが表示されます。

また、以前のバージョンでは長いステータスが自動スクロールするとちょっと負荷が高くなってしまう場合があったので、表示している範囲のみ自動スクロールするように変更しました。これでかなり Twiggee の動作の負荷も減少したのではないかと思います。

Twitter クライアント "Twiggee" (20070525 版) ダウンロード
(右クリックして「名前をつけて保存」してください)

ちなみに「もごもご」のAPIですが、もう Twitter そっくり(笑)。XML フォーマットで Twitter クライアントを作っていたなら、URL を変えるだけでほぼ対応できたかもしれません。
ただ、若干の難があります。

・friends_timeline の since に指定する日時のフォーマットが、created_at のフォーマットと違っているので、自前で変換しないといけない
・レスポンスはXMLながら、Yahoo! Widgets の XHR では responseXML で DOM が取れない(おそらくヘッダの content-type が間違っているため? 未確認)。自前で XMLDOM.parse する必要がある。

まあα版ということですし、おそらく遠からず改善されるのではないかと思います。

しっかし、ユーザがまだ多くないからでしょうけど、それにしても もごもごの動作は軽いなあ~。

2007年06月19日

Yahoo形態素解析サービスを使って閲覧中ページのキーワードクラウドを表示するGreaseMonkeyスクリプト

Yahoo! Japan から 日本語形態素解析Webサービス がリリースされて、「ほほう」と思っている人も多いかと思います。
mecab などをサーバにインストールすれば今まででも形態素解析を使用したサービス(特に需要が多いのは分かち書きかな?)を提供することは可能だったわけですが、形態素解析は結構重い処理なので、非力なサーバだと少々しんどくて困っていたり、そもそもそういったアプリケーションをインストールできないサーバなために形態素解析の利用を断念していたなんて人には結構朗報かもしれません。
個人的には JSONP に対応して欲しかったところ。あんなことやこんなことやもやもやいろいろできるんだけどなあ……

でもまあこのサービスをちょっと試してみたかったので、GreaseMonkey で今見ているページのキーワードクラウドをページの一番上に付加するスクリプトなんてのを書いてみました。

keywordclouder.jpg

このような感じで表示されます。ちょっと楽しげ?
Yahoo の形態素解析には uniq というオプションがあり、これを指定しておくと単語の出現頻度情報が得られます(使用回数を算出の上、多い順に並べて返す)。また、品詞を指定してフィルタリングもしてくれるので、実は帰ってきた結果をそのまま出力するだけでキーワードクラウド完成です(笑)。

GreaseMonkey で本文を取得して形態素解析サービスに送っているので、イントラのページなどでも解析できてしまいます。
逆に言えば、極秘のページであっても Yahoo! さんに内容を送ってしまいますので、利用は少々試してみるという範囲にとどめてくださいまし。
というわけで決まり文句ですが「万一本スクリプトでなんらかの被害が生じたとしても、無責任無保証」でお願いします。

2007年06月28日

Javascriptでdiffる ( with 形態素解析 )

Javascript で diff というのはいくつか試された例はあるようですが、まだこれといった決定打は出ていない様子です。

実は diff は見た目ほど軽い処理ではないので、Javascript にやらせるのはこれが結構大変……
diff の計算量は、おおざっぱに言うと比較対象の要素数の二乗に比例し(実際にはそれより小さくすることができるのですが、まあ話のイメージとして)、かつメモリを大量に消費するので、バッチ的な処理に最適化されていない Javascript にはどうしても荷が重いものとなってしまいます。

比較対象の要素数を減らせば当然計算量は減りますが、行単位で比較してもあまり嬉しくない(わざわざ Javascript で処理するということは自然文が対象と思って良いでしょう)。最小の文字単位だとギブアップ。
ということは形態素解析で分かち書きして、単語単位で diff するのが Javascript で処理する場合の正解なんでないの?

というわけで、がっっつり作ってみました(いつもなら「さっくり」というところですが、楽ではなかったので……w)。

Yahoo! の 日本語形態素解析Webサービス を呼び出すために、今回も GreaseMonkey スクリプトになっています。
適当なページを開いて、GreaseMonkeyのアイコンを右クリック>ユーザスクリプトコマンド>diff from google cache で現在見ているページの Google Cache を取得、Yahoo形態素解析サービスに投げて、単語単位で diff を表示します。ヘテロなのはわざとですw

diff-from-gc.jpg

このような感じで diff 結果がオーバーレイ表示されます。中谷のこの blog の平均的な記事量程度であれば4,5秒で処理が終了します。もっと大きいページの場合だと処理に時間がかかっているという警告が出てしまうかもしれません。

diff のアルゴリズムは下記論文を参照しました。
・ S. Wu, U. Manber, G. Myers, and W. Miller, "An O(NP) Sequence Comparison Algorithm" (1990)
このアルゴリズムの計算量は「(全体の要素数)×(比較した結果、削除される要素数)」に比例します。diff のシンプルなアルゴリズムの中では十分以上に速いものではないかと思います。

これを Ruby で実装したあと Javascript に移植したのですが、Ruby では特に問題にならなかったのに、Javascript だと最初遅くて遅くて、データサイズが大きくなると全く使い物にならず……。Javascript 用に実装を最適化する部分で一番時間がかかってしまいました(苦笑)。今月からラボに加わった amachang にも助けを求めたりしてw。

でもその甲斐あって、Javascript diff としては十分満足のいく性能と精度を確保できたと思います。
例えばライバルの一つ、Google の diff ライブラリである google-diff-match-patch と条件を同じ「文字単位 diff」にして比べても速度は2~3倍勝り、精度もこちらの方が上でした( google-diff-match-patch は共通部分を見逃すことがあります。Myers 氏の一つ前の論文のアルゴリズムをベースに実装したと説明に書いてあるのですが、そのアルゴリズムに忠実であれば共通部分を見逃すはずはないので、独自の工夫の部分で精度を落としてしまっているようです)。

Javascript diff ライブラリへの需要があるようだったら、もう少し手を加えてライブラリ化したいなと思います(例えば、IE向けの最適化とかまだ全然やってないので)。


実は、「Yahoo! の形態素解析サービスが JSONP に対応してくれれば、普通の web ページでもこの diff ライブラリと組み合わせて使えるのに!」という結論にしてやろうと思って作り始めたのですが、よく考えたら JSONP は POST できないのでやっぱり組み合わせられない……とほほ。
というわけで、形態素解析を当てにせず文字単位で diff れるようにするしかないのかなあ。

2007年08月09日

「Pathtraq が贈る人気ページ」ウィジェット

昨日、サイボウズ・ラボから Pathtraq をリリースいたしました。

詳しくは奥さんの記事やニュース(CNET, @IT)などを参照していただければ、なのですが、それらの記事に書かれているキーワードを簡単にまとめて、Pathtraq を一言で表すなら「自動ソーシャルブックマーク」と呼ぶのが一番近いでしょうか。
個人情報を集めていないために、はてブ や del.icio.us よりソーシャル度が自然と上がり、それらでは拾いきれない情報を補完していくような役割を果たすことが出来ていくといいなあ、と思っています。

中谷も自動分類回りでちらっと関わっていますが、その辺りのことは別途このblogでも記事にしますね。


今日は Pathtraq リリース記念! と銘打ちまして、 「Pathtraq が贈る人気ページ」ウィジェットをお送りいたします。

pathtraq widgets 画面

Pathtraq API から定期的に人気ページの一覧を取得、ウィジェットに表示します。
ページタイトル名にマウスカーソルを重ねるとタイトル名がツールチップで表示されますので、長過ぎて画面に表示しきれていないタイトルの確認などに使ってください。
ページタイトル名をクリックするとそのページを、"***hits" をクリックするとそのページへのアクセス内容を確認できる Pathtraq の解析ページをブラウザで開きます。
ランキングの入れ替わり時には ぷいぷいとアニメーションするのですが、片時も目を離さず見守っているわけにはいかないので、なかなか目にする機会はありません(苦笑)。

設定画面にて、どのような一覧を取得するか指定することができます。

pathtraq widgets 設定

URI直接指定の項目は、APIの仕様が公開されたときにご利用ください……


というわけで、以下がウィジェットの本体になります。実行には Yahoo! Widgets が必要です。なお、本ウィジェットの動作・影響に関する範囲内につきましては無保証・無責任でお願いいたします。


最新版をこちらの記事で公開しました [2007/08/16]

最近 .NET に惹かれているので、Vista のウィジェットというのも真っ先に思いついたのですが、なにぶん中谷のマシンが XP なもので……。
そろそろノートPCの買い時かなあ。

2007年08月10日

Pathtraq で注目のニュースや動画をゲットする5つの方法(ウィジェット版)

昨日公開しました Pathtraq ウィジェットを1日眺めていたのですが、自分で想像していたよりこれがなかなか楽しい。
恣意的でない、みんなが本当に見ているページのランキングがリアルタイムに更新されていくので、「たった今現在何が注目を浴びているのか」がわかってしまいます。うむーおもしろい。
ちなみに昨日の午前中はダル、午後はタカトシ、夕方は水曜どうでしょうでした。って、みんなゴシップ好きね(苦笑)。

奥さんの blog でこんな記事が。

Pathtraq で注目のニュースや動画をゲットする5つの方法 (オマケつき)
http://labs.cybozu.co.jp/blog/kazuho/archives/2007/08/pathtraq_filters.php

こちらに書かれているのは blog パーツですが、Pathtraq ウィジェットでも API URI を直接指定することで同様のことが出来るようになっています。
Pathtraq の解析対象にしたい URL のパターンに対して、下記の URI を API URI 欄に記述すればOK( API URI が指定されている場合は、一覧の種類などの設定項目は無効になります)。

http://api.pathtraq.com/pages?api=json&__lang=ja&m=upcoming&url=[URLパターン]

というわけで早速奥さんの blog のエントリーにあがっていた解析パターンについて、ウィジェット用の API URI をそれぞれ用意してみました。

1. ITニュースサイトの注目ページ

2. YouTubeとニコニコ動画の注目ページ

3. スポーツ新聞の注目ページ

4. オーマイ vs. JANJAN vs. J-CASTの人気ページ

5. ガジェット系サイトの注目ページ

おまけ

欲しい人は url パターンを自分で指定してみましょうw

2007年08月16日

Pathtraq ウィジェットの最新版公開(表示件数変更など)

先週公開しました「Pathtraq が贈る人気ページ」ウィジェットを更新しました。

pathtraq widgets 画面

追加した機能は以下の通り。

  • 表示件数を15件まで増やせるように
  • 常に最前面に表示
  • ctrl+shift+F1 で 「操作透過」<=>「操作可能」を切り替え
  • ctrl+shift+F2 で 「不透明」<=>「半透明」を切り替え
  • 上記ホットキーや透明度は設定画面から変更可能

表示件数の変更は設定画面で行います。4~15件の間で好きな件数を設定してください。

pathtraq widgets 設定画面

ホットキーはずっと表示させておきたい場合に便利な機能なのですが、ちょっとわかりにくいようなので具体的に説明。

ウィジェットを画面上のできるだけジャマにならない場所に置いておいても、どうしてもジャマになってしまうことがあると思います。
そのとき、ctrl+shift+F2 を押すとウィジェットが半透明表示になって、その下を見ることが出来るようになります。元に戻すときはもう一度 ctrl+shift+F2 を押してください。
また、ウィジェットの下を見るだけではなく操作もしたい場合は ctrl+shift+F1 を押すと、ウィジェットがマウスクリックなどを透過するようになり、そのままウィジェットの下のウィンドウやボタンを操作できるようになります。こちらも元に戻すときはもう一度 ctrl+shift+F1 を押します。

設定画面ではホットキーを別のものに変えたり、半透明表示の時の透明度を指定することができますので、好みの透明度などに調整してください。例えば、透明度2の値を0にする(つまみを一番左にする)と、ctrl+shift+F2 を押したときに完全に透明になります。

また、項目名をPathtraqに合わせて若干変更しています(瞬間→注目、等)。

「Pathtraq が贈る人気ページ」 ダウンロード
(右クリックして「名前をつけて保存」してください)

実行には Yahoo! Widgets が必要です。なお、本ウィジェットの動作・影響に関する範囲内につきましては無保証・無責任でお願いいたします。

2008年03月26日

本文抽出モジュールを RubyForge に登録しました


以前このブログで公開していました Web ページ(HTML)から本文と思わしきテキストを抽出するモジュールを RubyForge に登録、 gem でインストールできるようになりました。

gem install extractcontent

といっても、このモジュールは1ファイルで構成されていて、依存関係もないので、以前の公開方法のままでもあまり支障はなかったような気もするんですが、RubyForge に登録する練習もしておきたかったし、gem で入れられる方が便利ですよね?

ExtractContent プロジェクトページ
http://rubyforge.org/projects/extractcontent/

一応プロジェクトページの URL も貼り付けておきますが、実質リリースファイル置き場でしかなくて、SCM もまだ使ってません……


また、せっかくリリースするので、
・「全然 module っぽくないコード」と DIS られたw
・1インスタンスしか持てない(マルチスレッドで使いたい場合にまずい?)
というのに対応するべく、実装をクラスに切り替えました。
そのため抽出用のインスタンスを得るには ExtractContent::Extractor.new してください。

$KCODE="u"
require 'rubygems'
require 'extractcontent'

# Constractor
opt = {:decay_factor=>0.75} # optional settings
extractor = ExtractContent::Extractor.new(opt)

html = ' ~~~ ' # target html 
body, title = extractor.analyse(html) # analyse

以前のモジュールを使っていただいていた方のことを一応考慮しまして、ExtractContent.analyse メソッドも残しています(ExtractContent モジュールで Extractor のインスタンスを include している)。

抽出の原理などは特に変わっていませんので、そのあたりにご興味のある人は以前のエントリを参照してください。

About ツール

ブログ「nakatani @ cybozu labs」のカテゴリ「ツール」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

前のカテゴリはイベントです。

次のカテゴリはラボです。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。