nDiki : HTTP

2006年6月20日 (火)

WiKicker 0.35 リリース - 添付機能の修正など

添付機能を有効にすると、添付ファイルが無いページに対応するディレクトリが無条件に作られてしまう問題を修正。

それから日本語ファイル名のファイルを WikiPage に添付した際、Internet Explorer でそのファイルをダウンロードして保存しようとすると URI エスケープされた文字列がデフォルトの保存ファイル名になってしまいよろしくない。 このため、Content-Disposition ヘッダをつけてレスポンスを返すためのダウンロード用のリンクも追加。

Cotent-Disposition ヘッダでファイル名を指定する際、

ファイル名シフト JIS でエンコードしてしまうようにした。

ファイル名シフト JIS で表現できない文字があるかもしれないし、Accept-Language に ja があったからといって Windowsロケール日本語になっているという保証もないので、かなりいい加減なコードである。

なにか良い方法があったら修正したい。

スポンサード リンク
[ 6月20日全て ]

2006年11月27日 (月)

Iceweasel 2.0 (Firefox 2.0) にほぼ無事移行終了

ホールドしていた Debian GNU/Linux sid ノート PCFirefox を 1.5 か 2.0 にそろそろ上げることにした。

Firefox 拡張機能

心配していた Firefox 拡張機能等の移行は以下の通り:

Firefox 拡張機能1.5 時代2.0 へ
Adsense Notifier0.9.2OK
SwitchProxy Tool1.4NG -> install.rdf を書き換えてインストール
Google Toolbar for Firefox2.1.20060807LOK
Tabbrowser Extensions2.1.2006031301NG
Wev Developer1.0.2OK
Greasemonkey0.6.6.20061017.0OK
TinyUrl Creeator1.0.1NG -> 無視
Fasterfox2.0.0OK
CustomizeGoogle0.55OK
Add Bookmark Here0.5.5OK
Mozex1.07.1NG -> 1.9.5
All-in-One Gestures0.18.0OK
VideoDownloader1.1.1OK
FoxyProxy2.2.1OK
SearchStatus1.18OK
Japanese Language Pack(deb)1.5.0.7deb はまだ
Beagle Indexer0.5NG -> 0.6
hatenabar0.4.0OK
Diggler(deb)0.9OK
Live HTTP Headers(deb)0.12OK

ほぼ問題なく動いた。

Tabbrowser Extensions については残念だがしょうがない。 かわりに

  • Tab Mix Plus 0.3.5
  • Undo Closed Tabs Button 2.0.0

インストール

TinyUrl Creeator は最近使っていないので問題なし。

SwitchProxy Tool は一応いれたけれど、考えてみれば最近は FoxyProxy の自動切り替えが申し分ないので別に無くてもよかったのであった。

それとステータスバーがごちゃごちゃしてきたので、整理できるように

  • Organize Status Bar 0.5

インストール

テーマ

Modern Pinball 1.5.2 が NG だったので、Modern Pinball v2.0.2 for Firefox v2.0 ( http://mozilla-themes.schellen.net/... ) を入れ直した。

移行してみて

2.0 になったからといってあまり変わった感じはしないか。

Tabbrowser Extensions が使えなくなって、タブまわりの使い勝手が悪くなったのは痛い。個別に拡張機能を入れていくしかないか。

せめてタブを縦並びにできればいいのだが。

[ 11月27日全て ]

2007年12月29日 (土)

Twitter ベイジアンフィルタプロキシ

Twitter で following が増えてくるにつれて、タイムラインに目を通すのが大変になってきた(という程きちんと見ている訳ではないが)。 さっとタイムラインをなめて面白そうな情報をピックアップしたい時は、「おはよう」とか「風呂入った」とか「トイレ」とかは除外して読みたい(そういう書き込み自体は嫌いじゃないのだが、人生はあまりにも短い)。

Twit や P3:PeraPeraPrv では NG ワード指定ができて、それらを含むステータスは表示しないようにできるのだが、Twitter の書き込みは揺らぎが激しすぎて指定しきれないという弱点がる。

ということでベイジアンフィルタでフィルタリングしてみることにした。

自前で Twitter クライアントを作る気はないので、proxy の形でさっと実装してみた。

 #!/usr/bin/perl

 use strict;
 use warnings;

 use HTTP::Proxy;
 use HTTP::Proxy::BodyFilter::complete;

 my $proxy = HTTP::Proxy->new(port => 8088);
 $proxy->push_filter(response => HTTP::Proxy::BodyFilter::complete->new,
                     mime     => 'application/xml');
 $proxy->push_filter(response => Bsfilter->new,
                     mime     => 'application/xml');
 $proxy->start;

 {

   package Bsfilter;

   use File::Temp qw/tempfile/;
   use XML::XPath;
   use base qw(HTTP::Proxy::BodyFilter);

   sub filter {
     my ($self, $dataref, $message, $protocol, $buffer) = @_;
     return unless defined($$dataref) && $$dataref ne '';
     eval {
       my $xml = XML::XPath->new(xml => $$dataref);
       my @nodes = $xml->findnodes('/statuses/status/text/text()');
       return unless @nodes;
       for my $node (@nodes) {
         my $text = $node->getNodeValue;
         if (is_NG($text)) {
           $node->setNodeValue("[NG] $text");
         }
       }
       $$dataref = qq(<?xml version="1.0" encoding="UTF-8"?>\n);
       $$dataref .= $xml->get_context->toString;
       utf8::encode($$dataref);
     };
     if ($@) {
       warn $@;
     }
   }

   sub will_modify { 1 }

   sub is_NG {
     my ($text) = @_;

     my ($fh, $filename) = tempfile();
     utf8::encode($text);
     print $fh $text;
     close($fh);
     my $result
       = system(
       "bsfilter --homedir ~/.twitter-bsfilter --ignore-header --auto-update $filename"
       );
     unlink($filename);

     return !$result;
   }
 }

HTTP proxy の作成

PerlHTTP proxy を作ろうとして真っ先に思い浮かんだのは POE だけれど、ちょっとヘビーなので今回は HTTP::Proxy をチョイス。 もともとフィルタリング HTTP proxy を作ることを念頭に置いた Perl モジュールなので今回の目的にぴったり。

1つはまった点といえば、filter の呼び出しがレスポンス全てを取得してからではなく一部分ずつの呼び出しになるところ。その仕様に気がつくのにちょっと時間がかかってしまった。 例えば XML 形式のレスポンスをフィルタしようとしても、普通に HTTP::Proxy を使うと XML の一部ずつがフィルタに渡されるため、XML のパースがうまくいかない。

これについては HTTP::Proxy::BodyFilter::complete を使うことで、まとめてフィルタに渡せるようになった。

レスポンスの処理

Twitter のタイムライン取得については P3:PeraPeraPrvXML 形式で取得しているので、そのタイプのレスポンスをフィルタするようにした。

XML::XPath でステータス部分を抜き出して NG 判定し、NG であれば先頭に [NG] を追加する。 これで Twitter クライアント側で [NG] を NG ワード指定すれば、表示されないようにすることができる。

bsfilter による NG 判定

NG 判定は普段メールspam フィルタとして使っている bsfilter を使った。 単純に system 関数で呼び出して結果を取得するだけ。

今回は対象がメールではないので --ignore-header を指定。また自動的に学習するように --auto-update を指定。 それと普段メールのフィルタリングに使っているのとは bsfilterデータベースを別にしたいので、--homedir も指定しておく。

NG と非 NG の学習。

NG ワードを twitter-NG.txt に、非 NG ワードを twitter-clean.txt に書いて以下のコマンドを実行。

 bsfilter --add-clean --ignore-header --homedir ~/.twitter-bsfilter twitter-clean.txt
 bsfilter --add-spam --ignore-header --homedir ~/.twitter-bsfilter twitter-NG.txt
 bsfilter --update --homedir ~/.twitter-bsfilter

自分の環境 (Debian GNU/Linux sid)では、UTF-8 で書いておいて問題なかった。

フィルタリングしてみる

あとは先の proxy を起動し、P3:PeraPeraPrv でプロキシとして localhost:8088 を指定すれば OK。

タイムラインを取得するたびに bsfilter が動いて NG なステータスには [NG] が挿入される。

フィルタリングの精度

これについては、まだまだチューンの必要ありかな。

  • 事前の学習データが少ない。
  • --auto-update していることもあり、最初に NG 判定が多いとそちら側に強化されすぎる。
  • 毎回 bsfilter を呼んでいるため、同じステータスが何度も学習される。

まだ使える精度まで上がってないけれど、教師データを増やせばそれなりにいけるかもしれない。

proxy の枠組ができたので、(@~は抜いてから bsfilter に渡すとか、前後の文脈も含めるとか)いろいろ試して遊べそうではある。 別に bsfilter にこだわらず、正規表現による判定などをしてもよいし。

この辺り P3 は Java で書かれているので、プラグインを書いて拡張できるよう将来になると面白いなと思ってみたり。

[ 12月29日全て ]

2009年2月26日 (木)

今日のさえずり - GDrive ずっと待っています

2009年02月26日

  • 09:41 3分時間調整2回で早めに家を出たの台無し。 [mb]
  • 09:54 ヴィド、この時間フルーツっぽいパンがない。 [mb]
  • 11:57 Nikon F6 ずいぶん値上りするなあ。生産終了しないだけいいのだが。 *P3
  • 11:58 DC-Nikkor も以前から1本欲しいと思っているんだけれど値上げ前には買えない。 *P3
  • 12:20 Safari 4 Public Beta for Windows インストールしてみた。Google Chrome と区別がつかない。 *P3
  • 12:26 Safari 4、フォントのアンチエイリス設定するとちょっと印象が変わるかな。 *P3
  • 12:58 Safari 4 の Top Sites の円筒配置をモニタで逆補正をかけてまっすぐにしてみようという話になったが、液晶モニタには膨らませる補正がなかった。 *P3
  • 15:03 Dropbox ここから登録すると 250MB プラス。http://tinyurl.com/cneoyz *P3
  • 16:35 Safari 4 アンインストール。 *P3
  • 18:16 @yamakiyo Dropbox、2GB では多分足りなくなるけど 5GB あれば結構十分なんだけどねえ。50GB はいらない(そんなにローカルディスクに余裕ないし)。 *P3
  • 19:28 @yamakiyo は自宅サーバたててる? [mb]
  • 20:57 2GB 無料オンラインストレージサービス Dropbox ここから登録すると 250MB プラス。http://tinyurl.com/cneoyz *P3
  • 21:37 @yamakiyo おお、自宅サーバ持ちですか。音とかは気にならないですか? *P3
  • 22:01 ZumoDrive Linux サポート予定があるのか。気になる。 *P3
  • 23:58 携帯百景登録しようと思ったら、ちょうど今つながらないみたい。 *P3
  • 24:34 @yamakiyo ZumoDrive のトップページに「Linux support is coming, stay tuned!」って書いてある (HTTP の UA 見てトップページの内容が変わる)。 *P3
  • 24:35 携帯百景登録した。写ツも設定。 *P3
  • 24:44 @yamakiyo Twitter 見ていても ZumoDrive 不安定というコメントが多いですね。 *P3
  • 24:45 @yamakiyo ZumoDrive は公開 URL を無効にできるということで、大き目のファイルの一時共有にいいかなと思っています。 *P3
  • 24:46 ZumoDrive の Windows 版はとりあえずダウンロードした。手元に Windows BOX ないけど。 *P3
  • 24:57 @yamakiyo オンラインストレージとしては GDrive ずっと待っています。いつになるのかなあ。 *P3
  • 25:07 さて寝る。 *P3
[ 2月26日全て ]

2009年12月23日 (水)

www.naney.orgさくらのレンタルサーバへ移転

naney.org メールサーバの移転に次いで、Web サーバの移転作業。

静的コンテンツのアップロード

現行 Web サーバUnisonファイル同期している Web コンテンツを、さくらのレンタルサーバUnisonファイル同期

WiKickerインストール

nDiki 用に DiKicker (WiKicker) を make install。

 %bash
 $perl -MCPAN -e mkmyconfig
 $perl -MCPAN -e shell
   o conf makepl_arg PREFIX=/home/naney/local/WiKicker
   o conf mbuildpl_arg --install_base=/home/naney/local/WiKicker
   o conf commit
   notest install CGI::SpeedyCGI

 $tar zxvf WiKicker-0.420.tar.gz
 $cd WiKicker-0.420
 $export PERL5LIB=$HOME/local/WiKicker/lib/perl5/site_perl/5.8.9
 $perl Makefile.PL PREFIX=$HOME/local/WiKicker
 $make
 $make install

以前きっちり Module::InstallMakefile.PL を作っておいたおかげで、比較的スムーズにインストールできた(自画自賛)。

ちょっとはまったところは CGI::SpeedyCGI の make test を実行する(される)と SSH 接続がサーバ側から切られてしまうという現象にあったところ。 テスト用に大量にスクリプトが起動されるの検出して自動的に kick されたのだろうか。

.htaccess の修正

さくらのレンタルサーバでは .htaccess Options が使えないようなので削除。 ExecCGI や MultiViews が有効になっているようなので問題なし。

いつくかのスクリプトの修正

Perl 5.005_03 用に書いてあったスクリプトについて、Perl 5.8.9 で文字化けしないように utf8 まわりを修正。

cron 設定

1時間毎に実行したい処理を列挙するシェルスクリプトを1つ作って、コントロールパネルから1時間毎に実行するように設定。

現行サーバでは任意の crontab を設定できたので、1時間毎はちょっと物足りない。 おいおい負荷にならない範囲で、外部から定期的に HTTP アクセスして処理を定期的に実行できるようにもするかな。

DNS 設定変更

まだ動いていないスクリプトもあるけれど(大きいところだと NaneyOrgWiki (Wiki))現行サーバの解約日もせまっているので、サーバ移転させてしまうことに。

VALUE-DOMAINDNS サーバ設定を変更し www.naney.orgさくらのレンタルサーバにアクセスできるように A レコードを変更。

今のところ特に重い等もなく順調。 現行サーバでは深夜非常に重くなる時間帯があったのだが、それが無くなるのが嬉しい。 また容量が100MB*1から10GB*2になったので心理的にセーブしなくて良くなった。

年内に移行できて良かった良かった。


[ さくらのレンタルサーバ プレミアム ]

*1メール等別

*2メール他を含む

[ 12月23日全て ]

2010年3月12日 (金)

今日のさえずり - 英辞郎で英辞郎を検索

naney:4432182956

2010年03月11日

  • 08:38 ウルトラマンライブ2010「ウルトラ8兄弟の奇跡」のウルトラマンの顔ぶれが、自分の中の7兄弟と違いすぎて愕然。
  • 08:49 コンコースでホワイトデー用の何か売ってる。 (@ 秋葉原駅 w/ 2 others)
  • 12:11 ねぎ塩豚カルビ弁当(昼食) 398円。 (@ ファミリーマート神田佐久間町店) http://4sq.com/biJuCj
  • 20:11 特のりタル弁当(夕食) 390円。 (@ ほっともっと東神田二丁目店) http://4sq.com/arhPYT
  • 22:34 4月19日から京浜東北線・根岸線に女性専用車導入か。3号車(大船側から3両目)。いつも乗っている車両ではないな。大井町駅だと大宮方面行き 7:27 発から 9:26 発まで。

2010年03月12日

  • 09:38 オトクーポン退会(iモード関連整理の一環として)。
  • 09:41 @Meg_mama こんにちは。Xperia 予約して楽しみに待っています。価格未定ですが、各種ポイント充当で財布の負担を軽くしたいと思っています。
  • 09:45 前に座っている人のバッグに方眼ノートが入ってた。友達になれそうな気がした。
  • 09:48 お友達にナレソウ。 RT @hiro: @Naney 方眼ノートならいつもポケットに入っています
  • 09:55 秋葉原iPad よりデカイやつ。 http://movapic.com/...
  • 10:14 英辞郎で英辞郎を検索。「英辞郎 に該当する項目は見つかりませんでした。」
  • 11:07 RHODIA No11 のストックが無い。補充しなくては。
  • 12:19 めぼしいもの無かった。 (@ Starbucks Coffee)
  • 12:23 めぼしいもの無かった。 (@ 無印良品 アキバ・トリム)
  • 12:47 おにぎりセットL(昼食) 375円。 (@ サンクス秋葉原駅前店)
  • 17:56 XZ 平面上の回転行列のための sin の計算が間違えていて泣けた(自分が書いたやつ)。
  • 17:58 右手座標系3次元座標系の XZ 平面て混乱する。
  • 19:25 30時間超過の承認がおりた。
  • 19:39 大盛たらこスパゲティ(夕食) 398円。 (@ セブン-イレブン神田佐久間町店) http://4sq.com/cEfW1k
  • 20:27 納期直前だけど、ボスもそのボスもサクっと出ていった。
  • 20:55 CGI プログラムのことを CGI と言っちゃう奴出てこい。
  • 21:18 マジデスカ。 RT @yaizawa: ガラッ) RT @Naney: CGI プログラムのことを CGI と言っちゃう奴出てこい。
  • 21:18 一休みに万年筆にインクを補充して、また Visual Studio タスク一覧上の TODO つぶし。
  • 21:25 インタフェース自体の事を指したいこともあるので CGICGI プログラム/スクリプトはきちんと区別している。野暮だけど。
  • 21:34 ブラインドがカタカタなって「誰かそこに居るの!」と一人オフィスで何度もなるので、掃除のために開けた窓おわったら閉めて帰って欲しい。っていうか寒いし。
  • 21:46 「ありがとう!30周年今夜かぎりの春のドラえもん祭」観たいと思ったが、掃除当番の日ではないか。
  • 21:55 @madaaamj Web サーバが外部プログラム(CGI プログラム) を CGI というインタフェース(きまり)に従って実行してそのレスポンスを HTTP などのレスポンスとして返すという流れです。
  • 23:09 I'm at 秋葉原駅 (秋葉原駅, 千代田区) w/ 2 others. http://4sq.com/68fhHr
  • 24:23 @yamakiyo 自分のところにも何通かそういう文字化け通知メールがきてます。ここ数日の foursquare システム更新で何か変わったのかな。
  • 24:42 Pontaカード届いた。
[ 3月12日全て ]

2010年10月18日 (月)

今日のさえずり: 「東工大は半袖ばかり」は言い過ぎでした

2010年10月18日

[ 10月18日全て ]

2013年1月26日 (土)

HTTP POST リクエスト1発で通知できる Notify My Android

IRC でトークをもらったり名前を呼ばれた時や、その他何かのイベント発生のタイミングで、Android 端末で通知を受けたいなと思って Notify My Android (NMA)を入れてみた。

対抗馬としては Pushover があるんだけれど NMA の方が

  • 回数制限が緩い (NMA は API key 毎に1時間800回、Pushover は月7500回)。
  • Tasker でイベントを受けられる。

という点でいい感じ。

Web サイトでアカウント登録し、端末にアプリをインストールしてユーザ名とパスワードを設定。で Web サイトのフォームを使ってテスト通知したところ、すぐに通知が届いた。日本語も OK。ということで問題無さそうなのでアプリ上からプレミアムアカウントにアップグレードした。387円。

あとは Web サイトAPI key を発行すれば HTTP POST メソッド1発で Android 端末に通知を送ることができる。

 curl --data-ascii "apikey=発行した API key" \
      --data-ascii "application=curl" \
      --data-ascii "event=testevent" \
      --data-ascii "description=testdescription" \
      https://www.notifymyandroid.com/publicapi/notify

API key ごとにメールアドレスが設定されるのでそこにメールを送る形で通知することもできる。IFTTT あたりから通知させるならメールを送れば良いね。

IRC からは適当にスクリプト書いて LimeChat 2 から通知してもいいし、Growl for Windows の Notify My Android Forwarder Plugin を経由して送ってもいいかな。NMA のサイトを経由するので、見られると困るようなものは詳細は送らずに定型文のみ送るようにすると良いだろう。

お手軽に通知できるようになるのでいいね。


[ Android アプリレビュー ]

[ 1月26日全て ]

2013年1月27日 (日)

今日のさえずり: ダイオウイカみた。一番の謎はなぜ研究しているかですね。

2013年01月27日

  • 11:18 NMA での IRC のキーワード通知、やるとすると前後の文脈一緒に送りたいとか欲が出るな。
  • 11:35 とりあえずキーワードのあった行を NMA で通知するだけなら Tiarra の Auto::Notify に config_prowl() と send_prowl() をベースに NMA 用のコードを追加すれば良さそげ。
  • 11:50 HTTP POST リクエスト1発で通知できる Notify My Android http://t.co/HWYmivN6
  • 13:46 デスクトップ PC も通知用にバイブレーション機能があればいいのにと思ったけど、先人は cdbiff とかやってましたね。 http://t.co/jwgFmHer
  • 17:11 Tiarra から Notify My Android で通知できるようにしたった。
  • 20:58 NHKスペシャル 世界初撮影!深海の超巨大イカ観る。ダイオウイカのやつ。
  • 21:59 ダイオウイカみた。期待していたよりしっかり撮影されててびっくりした。一番の謎はなぜ研究しているかですね。
[ 1月27日全て ]

2013年2月14日 (木)

今日のさえずり: 午後はチョコレイト・ディスコから

2013年02月14日

  • 08:19 買い出しゴー。
  • 11:56 午前の部、先ほど終了。
  • 13:01 @py0n まさかの push 忘れ……。
  • 13:05 午後はチョコレイト・ディスコから。
  • 16:39 帰投した。ソーシャルメディアへの投稿を見るに昨日 git push し忘れていたことがうかがえるし、きっとチームで対応してくれている(すみません)。
  • 18:12 IRC で呼ばれたの Android 端末で気がついた http://t.co/bfXgEmDB ので mixiメッセージで返信した。通知から、急ぎそうかどうかやりとりする mixiメッセージを一発で書けるようにしちゃばいいんじゃないと思ったので考えてみる。
  • 18:24 IRC ニックネームから mixi の ID に変換し、 mixi Touch のメッセージ投稿ページの URL を生成して通知につければ Notify My Android から1タップでいけるな。
  • 19:28 “[050845]「こんにちは」と入力すると「こんにちは、死ね!」と表示される” http://t.co/ROqu0Ix2
  • 19:59 RT @kis: あ、「全米が泣いた」って、「全コメが泣いた」→「全コメントが泣いた」→「コメント書いた人すべてが泣いている」ってことだったのか。今頃気付いた。
  • 20:47 Adobe Flash Player 11.6.602.168 のダウンロードしてインストール中に、McAfee Security Scan Plus の追加インストールがデフォルオンになっているに気がついてあわててキャンセル。市場系か……。
  • 21:37 風呂入ってて、やっぱ Android 端末に Perl スクリプトを走らせられる HTTP daemon が動いているべきと思った。
[ 2月14日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.065762s / load averages: 0.60, 0.83, 0.87
nDiki by WATANABE Yoshimasa (Naney)
Powered by DiKicker