はてブのタグ別新着エントリーを Twitter に流してみる

[twitter:@hatebu_android]

はてなブックマークタグ「android」を含む新着エントリーが、だらだらと Twitter に流されてたら便利かなと思い、[twitter:@hatebu_android] というのを作ってみた。
はてなブックマークYahoo! PipesGoogle feedburnerTwitter という流れなので、どこかひとつでも障害が発生すれば止まる。

Yahoo! Pipes

ただ流すだけなら、はてブが出してる公式フィードをそのまま twitterfeed とかに放りこめばいいのだけど、[twitter:@hatebu] みたいにブックマーク数が含まれてるほうがいいなと思い、Yahoo! Pipes でフィードの加工を試みた。
ググって出てきた "http://pipes.yahoo.com/pipes/pipe.info?_id=tA34Seyk3BGjG9CLOTY80A" を改造すればいいのかなと思ったのだけど、これは Fetch Page モジュールを使ってスクレイピングしてて、どうせならはてなブックマーク件数取得 API ってのを使ったほうがいいんだろうな、とか思いつつ公式フィードをよく見てみると、hatena:bookmarkcount としてブックマーク数はあらかじめ含まれてるのだった。
というわけで、すごくシンプルな "http://pipes.yahoo.com/pipes/pipe.info?_id=4c8af53145ffbafacd090deea2894920" というのになった。タグは指定できるので、はてブの自分が気にしてるタグの新着エントリーを Twitter に流したい人はどうぞ。

なんてモジュールを使えばいいのかすら最初わからなかったのだけど、http://pipes.yahoo.com/pipes/docs?doc=modules から http://pipes.yahoo.com/pipes/pipe.info?_id=dAI_R_FS3BG6fTKsAsqenA というのを見てわかった。

Google feedburner

Google feedburner を使えば短縮 URL が goo.gl になるのか、と思って使おうとしたら、"The FeedBurner Status Blog: Known Issue: Problems with Socialize service." に出てる障害にちょうど引っかかって使えず、twitterfeed を使うことにした。
追記: twitterfeed はフィードの取りこぼしが激しいみたいなので再考中。
12/5 追記: まだ復旧のアナウンスは出てないけど、Google feedburnerTwitter アカウント登録がとりあえず復活してたので、他にも代替サーヴィスがたくさんあるのは知りながら、Google feedburner に切り替えてみた。一応動きだしたみたい。

Twitter のアイコン

Android のアイコンは "ロイヤリティフリーのストックフォト、イラスト・ベクター素材、ビデオ - Getty Images" から。GIMP で適当に組み合わせただけにしてはいい感じになった。

Robo Defense 攻略方法

Robo Defense について

Robo Defense (ロボ・ディフェンス) というのは Android 用に出てるゲームで、タワー・ディフェンス系の一種。無料版 (お試し版) と有料版があって、無料版はある程度以上自身の兵器を強化できない (のである程度のレヴェルになるとクリアできなくなる) という制限がかかってる。

ゲームの内容説明としては、英語だけど "http://www.brighthub.com/mobile/games/articles/74836.aspx" がわかりやすいと思う。
有料版を購入し、他にやることはいくらでもあるのにムダに時間を費やしてしまって、いいかげんもうやめようと思うので (前からそう思ってるのだけど)、最後に自分なりの攻略パターンを書いてみる。

続きを読む

Iceweasel (Firefox) で Wall Street Journal の記事を全文表示する

Google Reader に登録してる Techmeme のフィードから Wall Street Journal の記事に飛んだとき、いつも記事の冒頭部分しか表示されなくて、ああここはそういうサイトだったと簡単にあきらめてた*1のだけど、Google News からのリンクだと全文表示されるという話を思い出し、試してみるとホントにそうだった。
ただ、いちいち Google News で検索して読みに行くなんてやってられないので、RefControl という Firefox のアドオンリファラで詐称することにした。たぶんよく知られてる方法なんだろうと思うけど、メモしておく。
"サイト" に "wsj.com" を指定し、"動作" は "カスタム" を選択して "http://news.google.com/" を指定する。

RefControl 使用前 RefControl 使用後

もっとも、この方法がいつまで有効かわからない。"Google News、ニュースメディアの泣き言に譲歩―無料を1ユーザー1日5クリックまでに | TechCrunch Japan" で紹介されてる First Click Free プログラムは、Google News 側でリダイレクトをいじるものだろうから関係ないだろうと思うけど、Wall Street Journal のサイト側に変更があればおしまいだから。

*1:ちなみに、無料会員の登録をすればいいのかと試してみたことがあるのだけどダメだった。有料会員にのみ全文表示されるみたい。

Fast Look up Alc を Ctrl キー押してるときだけ効くようにする

英和辞書引くのに Greasemonkey スクリプトfastlookupalc.user.js を一応入れてたのだけど、単語選択のたびにバカスカ辞書引かれるのはうっとうしくて、ふだんはそれはオフにして、Ctrl キーを押して単語選択したときのみ辞書を引く poolmmjp_translation.user.js のほうを使ってたのだった。
でも、最近は後者の調子が悪いみたいで、反応がすごく遅かったり、辞書を引いた結果が出なかったりするので、あきらめて前者を Ctrl キー押してるときだけ効くように改変してみることにした。JavaScript まったくわからないのに。
両者のソースをながめて、たぶん 1 行足すだけでいいんじゃないかとやってみて成功したぽい。

--- fastlookupalc.user.js.orig	2009-01-23 04:11:58.000000000 +0900
+++ fastlookupalc.user.js	2009-04-20 00:00:00.000000000 +0900
@@ -8,6 +8,7 @@
 (function () {
 	var popups = [];
 	window.addEventListener("mouseup", function (e) {
+		if (!e.ctrlKey) return;
 		var selection = window.getSelection().toString();
 		log(selection);
 		if (!selection || !selection.match(/^[a-z\s]+$/i) || selection.match(/^\s+$/)) return;

一応、オリジナルは userscripts.org にある Fast Look Up Alc のページから "Remotely hosted version" とリンクが貼ってある、coderepos.org にあるヴァージョン (なにがちがうのかわからないけど、こっちが新しいみたいなので)。
JavaScript わかると便利そうだ、おぼえたいと思いつつ、はや幾年月。思いっきり非プログラマ・タイプ。

不要なパッケージを消す

名前が lib からはじまるパッケージを整理する

"Eee PC 900A に Debian をインストール - だらりな。" のつづき。基本的なシステムしか入れてないのだけど、それでも不要なパッケージが入ってるのを消す。別に SSD が 4 GB しかないからとかじゃなく、なんとなく。あとで、容量的に許せば、おおざっぱなメタ・パッケージで GNOME を入れたりする気もある。
まず、ライブラリ・セクション (参考: "Debian -- List of sections in "sid"") にあるパッケージを全部自動的にインストールされたことにして、不要 (Unused) なものはパージされるようにしようとしてみる。

sudo aptitude -s markauto '~i~slibs'

すると、locales がパージされそうになってしまった。locales だけ除外してもいいのだけど、やりかたを変え、指定を lib ではじまるパッケージにしてみる。

sudo aptitude -s markauto '~i~n^lib'

だいじょうぶそうなので -s をはずして実行。少し整理できた。消えたパッケージ、あとから結局依存で入ってくるものばかりのような気もするけど。

Essential (必須) なパッケージ

他もどんどん markauto していこうと思うのだけど、Essential なパッケージはやめておこうと思う。依存関係が明記されてなくても、その機能が前提されるらしいので。

Packages may assume that functionality provided by essential packages is always available without declaring explicit dependencies, which means that removing functionality from the Essential set is very difficult and is almost never done.

http://www.jp.debian.org/doc/debian-policy/ch-binary.html#s3.8

もっとも、Essential なパッケージは簡単には消せないようになってるみたいではあるけど。

Since these packages cannot be easily removed (one has to specify an extra force option to dpkg to do so), this flag must not be used unless absolutely necessary.

http://www.jp.debian.org/doc/debian-policy/ch-binary.html#s3.8

ちなみに Essential なパッケージは、aptitude show <パッケージの名前> したとき "必須: yes" と表示される。

Priority (重要度) が required (要求) なパッケージ

Essential のつぎに重要そうなのは Priority が required なパッケージ。まず、前者は後者のサブセットということでいいんだろうかと、確認してみる。

aptitude search '~E' > p-e.txt
aptitude search '~prequired' > p-r.txt
diff -u p-e.txt p-r.txt

そういうことでいいらしい。ただひとつ、apt パッケージが、Essential なんだけど Priority は required じゃないと出る。aptitude show apt してみると、apt は Essential じゃない。よくわからないけど、なんかそういうもんなんだろうか。
それはともかく、Priority が required なパッケージは markauto してもいいんだろうかと、"Debian Policy Manual" の 2.5 Priorities を読んでみる。消えるとマズイらしい。でも、ためしにやってみる。

sudo aptitude -s markauto '~prequired!~E'

なにも消えない。ということで -s をはずし実行してしまった。
これは、Priority が required なパッケージは、依存関係がなくなっても勝手に消されないということであるのかな。たとえば、気づくと libvolume-id0 と libvolume-id1 というパッケージが入っていたのだけど、調べてみると、前者はそもそも Debian Sid のアーカイヴから消えてるし、他のパッケージに影響なく単体でパージできる。実際にパージしてしまった。

その他のパッケージを整理する

あとは Priority が required じゃないパッケージ。ここもどんどん markauto していく。これはちまちまと手でやるしかない感じ。といっても、数えるほどしかパッケージが入ってない状態なので、それほどには手間ではないのだけど。
以下のコマンドの出力を見ながら、ちまちまと markauto していった (ホントは Aptitude::CmdLine::Show-Deps "true"; してるので、-D はつけてない)。

sudo aptitude -s -D markauto '~i!~required'

他のパッケージが依存してるものはどんどん markauto して、いらないパッケージ (doc-linux-ja-text をはじめ、update-inetd なども) はパージしていった。aptitude search '~i!~required' の出力をながめて確認したりしつつ。
整理はとりあえずこのへんで終了。

OpenNTPD を入れる

"不要なパッケージを消す - だらりな。" のつづき。まだコンソール生活中。
とりあえず時間合わせとかなきゃと、Eee PC 900A に openntpd を入れる。ntp じゃなく openntpd なのは、メイン・マシンがそうだから
以前は /etc/openntpd/ntpd.conf で "servers ntp.nict.jp" と指定するとエラーが出て動かなかったのだけど、今回試すとちゃんと動いた。
/var/log/daemon.log あたりで確認しようとして権限がないのに気づき、いちいち sudo 〜はイヤなので、sudo adduser <自分> adm してログインしなおす。

ntp engine ready
peer 133.243.238.244 now valid
peer 133.243.238.163 now valid
peer 133.243.238.164 now valid
peer 133.243.238.243 now valid

ちゃんと NTP サーヴァを 4 つつかんでる。以前試したときのヴァージョンは 3.9p1-7 で、今回は 3.9p1+debian-2。直ったってことかも。
ただ、sudo /etc/init.d/openntpd restart したとき、lo: Disabled Privacy Extensions とかいわれた (/var/log/syslog にも kernel からのメッセージとして記録されてる)。念のため Google してみたのだけど、放っておいていいみたい。

Privacy Extensionsはipv6アドレスを一定時間で使い捨てインターフェイスIDをランダムに生成する方式である。ローカルのloopbackデバイス (lo)はネットワークに接続されていないため、Privacy Extensions機能が無効にされる。

http://ossmpedia.org/messages/linux/2.6.9-34.EL/30490.ja

それより、メイン・マシンのほうで client_query socket: Address family not supported by protocol ってメッセージが /var/log/daemon.log 他に出まくる。メイン・マシンは IPv6 を無効にしてるせいかな (/etc/modprobe.d/local.conf で alias net-pf-10 off してる*1 )。ちゃんと時刻は合わせてくれてるみたいだからいいんだけど、ちょっとイヤな感じ。
これをどうするか (あるいはどうもしないか) はまた今度考えることにする。

*1:"Disabling IPv6 under a 2.6 kernel" とかにあるやりかた。

Aptitude::CmdLine::Show-Deps (-D) vs. Aptitude::CmdLine::Show-Why (-W)

Eee PC 900A への Debian Sid のインストール (まだ途中だけど) でひさしぶりに aptitude の設定ファイルを編集して、そのときは単純にメイン・マシンと同じにしたのだけど、それをきっかけに aptitude-doc-en の "Configuration file reference" (/usr/share/doc/aptitude/html/en/ch02s04s05.html) を見直してみた。
で、自動的にインストールされるパッケージについて、その理由 (依存関係) を表示するっていうオプションがあるのに気づいて、それはいいかもしれない、試してみようと思ったのだけど、なんか似たようなのがふたつある。Aptitude::CmdLine::Show-Deps (コマンドライン・オプションだと -D) と Aptitude::CmdLine::Show-Why (-W)。
ちょっとだけ調べてみた。

続きを読む