CGIとはHTTPサーバなどの情報サーバから外部ゲートウェイプログラムへのインタフェースの標準のこと。
CGI に準拠しているプログラムを CGI プログラムと呼ぶ。
Computer Generated Image の略。
Twitter 上で要チェックなポストは、今年の4月から MAILPIA でケータイにメール通知するようにしていた(記事)のだが、最近メールが届かなくなってしまった。 フィードを変更してみたりメールアドレスを変えてみたりしたが駄目。 他に良さそうなフィードメール通知サービスが無さそうだったので Plagger を使うことにした。
Plagger は以前途中までインストールしようと思ったのだが、依存 Perl モジュールが多くて途中でやめてしまった。 今回は目的があってインストールするので、頑張ってインストールした。
インストールするホストに libxml2 と OpenSSL が無くて必須モジュールが入らなかったので、これを別途インストール。 Plagger は Subversion リポジトリの trunk をチェックアウトしてインストール。 依存 Perl モジュールは CPAN から。
ケータイ向けにテキスト形式のメールを送る Publish プラグインは Web で見つけたものを流用。まずは以下の3つレシピを cron で 10分毎に実行するように設定した。 メールは基本的に Gmail アカウントに送ってフィルタでケータイに転送。 うまくいっている感じ。
Plagger で Twitter にログインして replies API にアクセスするようにもできるけれどパスワードを書いておきたくないので、先月作成した CGI スクリプト(記事)経由で取得することにした。
[Twitter] ↑ [replies.atom さらし CGI スクリプト] ↑ [Plagger (cron で 10分毎)] ↓ [Gmail] ↓ [ケータイ]
Plagger で直接各 Twitter-ers のフィードを取ってこれるけれど、10分毎にアクセスするほどでもないので、Google リーダーに Twitter-ers のフィードをフェッチさせてタグでたばねて公開したフィード経由で取得することにした。
Plagger のレシピをいじらないで Google リーダー上で Twitter-ers を追加・削除でき、Google リーダーでもポストを読めるというのが利点。 ポストが少ない Twitter-er のフィードは Google リーダーが巡回頻度を下げるのでタイムラグが大きくなることがあるのが欠点。
[Twitter] ↑ [Google リーダー] ← [Web ブラウザ (設定・チェック)] ↑ [Plagger (cron で 10分毎)] ↓ [Gmail] ↓ [ケータイ]
外出先などで、居場所やイベントの情報を Twitter でチェックしたい時がある(役に立つかどうかは別として)。 ケータイから定期的に検索かけるなんてありえないので、メールでプッシュしておいて(気がむけば)読むぐらいにしておきたい。 キーワードの設定・管理については、操作・サーバ実装とも楽したい。
Twitter 関連ということで頻繁にケータイでアクセスして画面に出ている MovaTwitter を活用したい。 ということで MovaTwitter のクリボーに「アクセス keyword」と書くことで検索キーワードを指定できるように組んでみた。
[MovaTwitter クリボー] ← [ケータイ (キーワード書き込み)] ↑ ↑ クリボーのフィードを読んでキーワードを取得 ↑ [CGI スクリプト] → [twitter検索] ↑ [Plagger (cron で 10分毎)] ↓ [Gmail] ↓ [ケータイ]
いまさらだけれど、Plagger 便利だな。 とっかかり(インストールと概要理解)がちょっと難しいけれど、それを乗り越えてしまえば Perl なんでどうとでもなるという感じ。
naney.org メールサーバの移転に次いで、Web サーバの移転作業。
現行 Web サーバと Unison でファイル同期している Web コンテンツを、さくらのレンタルサーバへ Unison でファイル同期。
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::Install で Makefile.PL を作っておいたおかげで、比較的スムーズにインストールできた(自画自賛)。
ちょっとはまったところは CGI::SpeedyCGI の make test を実行する(される)と SSH 接続がサーバ側から切られてしまうという現象にあったところ。 テスト用に大量にスクリプトが起動されるの検出して自動的に kick されたのだろうか。
さくらのレンタルサーバでは .htaccess Options が使えないようなので削除。 ExecCGI や MultiViews が有効になっているようなので問題なし。
Perl 5.005_03 用に書いてあったスクリプトについて、Perl 5.8.9 で文字化けしないように utf8 まわりを修正。
1時間毎に実行したい処理を列挙するシェルスクリプトを1つ作って、コントロールパネルから1時間毎に実行するように設定。
現行サーバでは任意の crontab を設定できたので、1時間毎はちょっと物足りない。 おいおい負荷にならない範囲で、外部から定期的に HTTP アクセスして処理を定期的に実行できるようにもするかな。
まだ動いていないスクリプトもあるけれど(大きいところだと NaneyOrgWiki (Wiki))現行サーバの解約日もせまっているので、サーバ移転させてしまうことに。
VALUE-DOMAIN で DNS サーバ設定を変更し www.naney.org でさくらのレンタルサーバにアクセスできるように A レコードを変更。
今のところ特に重い等もなく順調。 現行サーバでは深夜非常に重くなる時間帯があったのだが、それが無くなるのが嬉しい。 また容量が100MB*1から10GB*2になったので心理的にセーブしなくて良くなった。
年内に移行できて良かった良かった。
[ さくらのレンタルサーバ プレミアム ]
Twitter の replies (mentions) をフィードリーダや Plagger で読めるようにするために、Basic 認証で Twitter にアクセスしてフィードをとってきてそのまま出力する Perl CGI スクリプトを書いて使っていたのだが、やはり Basic 認証が嫌なので OAuth 認証に書き換えた。
Net::Twitter モジュールだと取ってきたフィードが Perl のデータ構造になってしまいそのまま再度出力するのが面倒なので、Net::OAuth モジュールでリクエストを作って投げるようにした。
以下エラー処理等を省略したコード。
Web サイトに設置すれば(CGI スクリプト側で認証を済ませて)認証無しで replies のフィードが取れるようになるので簡単にフィードリーダで読めるようになる。
#!/usr/bin/perl -w use strict; use warnings; use CGI; use LWP::UserAgent; use Net::OAuth; use Data::Random qw(rand_chars); $Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A; my $consumer_key = 'YOUR CONSUMER KEY'; my $consumer_secret = 'YOUR CONSUMER SECRET'; my $access_token = 'YOUR ACCESS TOKEN'; my $access_token_secret = 'YOUR ACCESS TOKEN SECRET'; my $url = 'http://twitter.com/statuses/replies.atom'; my $method = 'GET'; my $query = CGI->new; my $request = Net::OAuth->request('protected resource')->new( consumer_key => $consumer_key, consumer_secret => $consumer_secret, request_url => $url, request_method => $method, signature_method => 'HMAC-SHA1', timestamp => time, nonce => join('', rand_chars(ssize => 16, set => 'alphanumeric')), token => $access_token, token_secret => $access_token_secret, extra_params => {count => '200'}); $request->sign; my $ua = LWP::UserAgent->new; my $response; if ($method eq 'GET') { $response = $ua->get($request->to_url); } else { $response = $ua->post($request->to_url); } print $query->header('application/atom+xml; charset=utf-8'); print $response->content;
@kazuho → @kazeburo → @nekokak → @hiratara → @comewalk → @aloelight → @sartak → @Yappo → LT → @hidek → @lestrrat
雨大丈夫かなーと思って家を出たら、いきなりザーザーで折り畳み傘をさしたものの、ちょっと濡れたかなって感じで、着替え調達を口実に昨日ちょっと欲しいなと思った Perl T シャツを買ったんだけれど、そのあとは雨はあがりましたとか。
IPC::Open3 の話とか。
過去 Log::Log4perl とかをチョイスしていたけど、より Log::Minimal の方が手軽そうでいいな。
DevOps なお話。
開発と運用のコミュニケーション大切。開発だけれど障害出ると「ヤバい俺か?」といつもビビる。
モナド。
今までスルーしてたので参考になった。「Perl でモナドってみた」については理解するのに良いけど、(Perl において)プラクティカルかというと微妙だなという第一印象。まだ掘り下げて学ぶ必要あり。
Blog をとりまく今までの歴史など。
私的開発スタイルの変遷について。
DTrace で何かごにょごにょやってた。
スピーカーが一方的に話すだけではない YAPC らしいセッションを試みるなど、チャレンジングな良いトーク。
いろいろ。
マネージメント視点での話。他に無いトークで良かった。 DeNA にもってかれた。
時間もおしてたので、マキで。
トークとしては、やはり聞いてる自分が「お、これは自分でもやってみたいな」とか「ここに生かせるな」と思えるものが印象に残るし満足感が高いね。ここは落とし穴だから注意ねとか、ハマッたのでこんな工夫してみたよとかも引きこまれる。
逆に Perl 的な話だったとしてもモジュールの羅列紹介とかだとちょっと退屈。
内容レベル的には、浅すぎず、後半だんだん高度な話になってきたところでギリギリついていけるぐらいがいいかなと。
以上はもし自分がトークする立場になった時の参考用のメモ。
YAPC::Asia Tokyo 2012 もぜひ開催を!
SEO 的に重要なキーワードが前の方にあった方がいいらしいので「【日記】」というのは後ろにもってきてみる。
今日は久しぶり通勤時に冬の土砂降りで、家を出て2分で靴とジーンズがズブズブ。もうこれはどうしようもないレベル。やはり会社に靴と靴下置いておいた方が生産性に寄与する気がする。
あと昼に Plack Handbook を一読。今まで読んでいなかったのでモグリだった。チーム内の持ち回りのプチ勉強会で CGI・PSGI とかの話を担当する予定なんだけれど、Plack の部分はこれ読んでねで終わりな気がする。
あと技術交流的な LT 、交流がメインならトーク + 懇親会に一工夫なにかできないかなと考えたり。トークの後の懇親会でエンジニア同士交流ご自由だけでなくて、何か強制的にグルーピングしちゃうような。とか、名刺交換じゃなくてその場で強制友人申請大会にするとか。自分自身、社交型エンジニアじゃないのでそういう仕組みがあると出会いがあっていいなあと。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。