メモ encodeで変換失敗を第三引数でフォロー
Encode::decode()でutfフラグをつけてゴソゴソ。その後Encode::encode()でutfフラグを落として出力したい文字コードに。というありがちな日常風景だ。
で、このとき、変換できない機種依存文字などはデフォルトだと「?」になる。それはそれでいいんだけど。変換できない文字があるかどうかを判定したいときに変換後文字列から「?」を grep するのはなにかと面倒だったりするので、ぐーぐるサマに聞いてみた。
判定できないものを第三引数で受けることができるのだった。上記の例だと判定できないものをサブルーチンでマークしたり、判定できないものが混じってたらその行を出力したり。
便利だったんで忘れないうちにメモ
[11/12 00:20:41]
便利といえば。twitter の webに新着通知機能がついてた。
ストリーミングでリアルタイム実況だ、とか言ってたけど、この新着通知機能で十分、か。いちいち更新しなくても、新着があったらわかるようになって、らくちん度128倍アップだ。
どういう仕組みなんだろう。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
秋葉原ブックオフで収穫
昨日はブラブラ都内徘徊、ていうか順路。
上野のうさぎやでドラ焼きを買い、秋葉原の立ち食い寿司で昼飯にし、ヨドバシを冷やかして、浅草ダイマスでビールをガブっといただく。
その途中、秋葉原のブックオフに寄って、スペンサーシリーズを105円で7冊、ファファード&グレイマウザーの2巻「死神の二剣士」を購入。スペンサーシリーズはまだきれいに揃わないので読み進められない、かな。
今、電車のお供がスティーヴン・キング「夕暮れをすぎて」いや、ほんと、キングって、キ印に追いかけられる話が好きなんだなあ。…て、まじめに、おっかねーよ。
こないだから、どうにかならんかと調べ中のtwitterストリーミング。
まずは perl で非同期についてぐーぐる様詣でしたところ coro というモジュールにいきつく。
中身の理解はまるでなく、呪文状態で使ってるんだけど(join for @coros てナニ?)、friends_timeline、user_timeline、mentionsを順番待ちせず、一度に取得するので早い。これは便利、かも。ちょっと理解しておいた方が吉だからもちっと真面目に調べようか。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
リアルタイム実況twitter
streaming API を使えばリアルタイム実況ができる。
https://apiwiki.twitter.com/Streaming-API-Documentation
てことで、雨模様の週末だし、ちょっと作ってみた。
・followしているひとの発言を流す。
・filter.xmlに対してPOSTでリクエスト。
・followパラメータをつけて、followしているひとのIDを指定。follow=ID,ID,ID などとコンマで区切る。
・認証はBasic認証
以上で、callback関数を適当に作るだけ、だった。
ハマったのは、content-tyepの指定忘れ、requestの第二引数の書き方(":content_cb"=>$disp_twit だと思ってたら、requestの場合は関数へのリファンレンスをそのまま書けばいいだけだった)
followしているIDと名前とパスワードを渡せば、これだけで、だらだらコンソールに流れ出すリアルタイム実況が始まる。予想以上に簡単、LWPだけでOKだった。うううむ。perlサイコーっす。
ってもちっと出力データを整形加工しないと、見にくいんだけど。
ところが、もっとらくちんに、こいつをブラウザで表示させようと思って、悶絶。インラインフレームを使うのか、Ajaxを使うのか。どうもよくわからず。ちょっと手ごわい。ぐーぐる様詣で。
[10/03 20:42:29]
comet とか言われてもわからんちんだ。ネットワークプログラムから理解して、perlでストリーミングサーバーを立てる感じになるのか。
てことで素人のわたしには、お手上げ確定。コンソールで眺めるだけにしておく、か。とほほ。
[10/04 18:42:11]
ぐーぐる様によると、perlの世界も、オブジェクトに非同期。POEとかAnyEventとか、初耳寝耳に水、だ。この数年で取り残されてしまってるじゃねいか。とほほ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
ケータイメールでtwitterに発言
ついこないだ、ちらっと書いたtwitterにメールで発言するスクリプトを。
ぐーぐる様詣でをすれば、すぐに出てくるネタで新鮮味もないんだけど、メールを受け取るところからの解説記事が少なかったんで、自分メモ。
前提としてメールサーバーはqmail。
HOMEにtwitter用のドットファイルを用意する。たとえば .qmail-mytwitter。中身はパイプでスクリプトに渡しているだけの1行。たとえばこんな感じ
| twitter.pl
送られてきたメールは、このtwitter.plが処理する。
twitterに投稿するにはユーザー名とパスワードが必要なので、データベースでもcsvファイルでもいいから、なにかに記録・登録しておく。このとき一緒に、投稿に使うケータイのメールアドレスも記録・登録する。
送られてきたメールをかまわずtwitterに投稿するわけにはいかない。まずは誰から送られてきたメールなのかを判定する必要がある。
qmailの環境変数 RPLINE は return path (ほぼ送信元のメールアドレスのこと)が入るので、これを使う、てのがキモ。こいつを見て、登録されているメールアドレスなら、そのユーザー名とパスワードを使って、twitterに投稿する。登録されていないメールアドレスだったら、なにもしない。
送り先のメールアドレスがバレても、returnpathのチェックが入る。returnpathを偽装されても登録されているメールアドレスでチェックをする。エラーの場合は何も返さず沈黙する。
てことで、なりすましや何かの踏み台に使われることも、ない、ハズ。セキュリティ的に問題になりそうなのはパスワードを平文で保存しているところ。でも、twitterそのものが認証はBasic認証だし、jsonpでAPIを使ってるひとのソースをみるとJavascriptにユーザー名とパスワードを書くことになっているのが目につく(=パスワード丸見え)
てことで、ここは目をつぶってtwitterだけにしか使わないパスワードにする・定期的にパスワードを変えることでカバーしよう。DBにしろcsvにしろ、ウチのポンコツサーバーから持ち出される、なんてことはほぼ考えられないし。
後は、誰が書いても、どんな環境でも、ほぼ同じスクリプト。
↓こんなでメールを解析して
メール本文と文字コードを取り出して
↓こんなでtwitterにPOSTする
メッセージが140文字以上だったらなにもしない。
ケータイのメールアドレスから取り出したユーザー名とパスワードを$twtに渡すのでそれを使ってtwitterのBasic認証をする。
メッセージ本体はhtmlエンコードをする。
POSTで投稿する。
というだけの手抜きなシロモノ。
twitterみたいな気楽な巨大チャットにはモバイルは最適、だと思う。ケータイで使えるモバツイッターや、iPhoneなどのスマートフォン向けのアプリが充実してるのも当然。わたしの場合はauで、パケットのコースのこともあるので、メールで投稿できたほうがいいかな、と。
ケータイで見るのをどうしようか検討中。とりあえず、ezwebで見るようにスクリプトを書いたんだけど、なんかビミョー。それなら、空メールを送ったら返信で最新のつぶやき20個とかメールで返してもらうのも、あり、かなと。こっち側はまだ試行錯誤、だ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
trackbackを実装
今日は昼間っからレタスしゃぶしゃぶ。ヨメとふたりで、やはりレタスひと玉をさくっと食いきり、豚肉ももりもり食いまくった。夜はそれの残りで雑炊。これまた美味完食。
そんなこんな、今日は部屋でのたのた。ネットを徘徊する。
OpenIDとかOAuthとか、面白そうなので、モジュールだけインストールしてみた…けど、よく理解できず。なんに使うのかどういうところで使うのかそれがどんなに便利なのか。頭悪いんで困ったもんだ、と思いつつ、これもまた前からなにが面白いんだか理解できないTrackbackをとりあえず雑記帖に組み込んでみた。
送受信するのは url blog_name title excerpt だけだし、受信したら返すのは簡単なXML。なので、実装はさくっとスグできた。けどなあ、Pingを送るヒマあったら、こんちわー、とフツーにコメントつけて、そこにURLいれときゃいいだろ、と思ってしまうんだけど。いまどき、コメントもトラックバックもスパム防止で自動送信を受けつけるところが少ないしねえ。
[09/21 22:50:06]
てことで、ちょっとそれっぽいところを眺めに徘徊したけど、どうももはやトラックバックは死に体っぽい。そりゃそうだ。ブログの情報を繋ぐのとはちょっと違うけど、ひとを繋ぐSNSがあちこちにあるし、軽く繋げるtwitterもある。ニュースサイトだったらRSSがあるし。
なんか無駄なスクリプト書いてしまったかもしれん。
[09/22 09:39:13]
↓こんなで送って
↓こんなで受けるだけ
…知らなかった、今さら。テキストエリアの中って、タグなんかが素通しだとずっと思ってたら、こいつはCDATAじゃなくて、PCDATAというやつなので、「>」などは文字参照にする必要がある。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
DBD::Excelとか麻布十番納涼祭りとか
朝から毎月定例の内科。今日は採血されて結果は来月。
帰ってから、ちょっとperl。
毎週ルーチンで、60個前後のエクセルファイルを開いてcsvに保存する、という実に馬鹿馬鹿しい低脳作業がある。こんなもの人間のやる仕事じゃない。腐れエクセルには1mmも触りたくない。
複数人が並行で入力しているんだけど、さいわい、シートの名前に規則性があるんで、以前ちらっとここで触れたDBD::Excelを、本稼動させてみた。
ディレクトリにあるxlsファイルを開いて、特定のシートをcsvに吐き出す
#!/usr/local/bin/perl
use strict;
use Encode;
use utf8;
binmode OUT=>':cp932';
use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::FmtJapan;
my $oFmtJ = Spreadsheet::ParseExcel::FmtJapan->new(Code =>'cp932');
my $sheet = shift(@ARGV);
my $orig_dir = 'xls/';
foreach my $d ( @{ $section_dir } ){
opendir(DIR, $orig_dir) || die;
my @files = grep(/.xls/, readdir(DIR));
closedir(DIR);
foreach (@files){
my $xls = $orig_dir . $_;
my $oBook =
Spreadsheet::ParseExcel::Workbook->Parse( $xls, $oFmtJ);
my $ws; my $wc;
for(my $i = 0; $i < $oBook->{SheetCount}; $i++){
$ws = $oBook->{Worksheet}[$i];
if( $ws->{Name} =~ m!$sheet! ){
printf qq{XLS:%s Sheet:%sn}, $xls, $ws->{Name};
for(my $r = $ws->{MinRow}; $r <= $ws->{MaxRow}; $r++ ){
my @buf;
for(my $c = $ws->{MinCol}; $c <= $ws->{MaxCol}; $c++ ){
$wc = $ws->{Cells}[$r][$c];
my $value = $wc ? $wc->Value : ''; $value =~ s/,//g;
push(@buf, $value );
}
print join(',', @buf), "n" if @buf;
}
}
}
}
}
これだけ。
今日は、ヨメと昼前には麻布十番納涼祭りに出かける予定だったので、時間がないかな、と思ってたのに、20分もかからずスクリプト完成。あとは現物合わせな例外処理だの作りこめば実戦投入できる。
いやもう、ほんと便利で、DBD:Excelの作者には大感謝!糞エクセルからまた一歩離れることができたゼ。ざまみろ。って、休みに仕事なんぞしてちゃいかんだろ、おれ。
大盛況おお賑わい大混雑の麻布十番納涼祭り。今年こそは国際バザールでちゃんと食おうと、開店前に並ぶ気合。ヨメはドイツ、わたしはブラジルに並び、フランクとシュラスコをがっつり食う。比較的すいていたラオスでおじいさんとおばあさんが上げていたスパイシーチキンまで堪能できた。ちなみに、3時開店のときにはもう行列となっていた。どれも美味でありました。大満足。
その後麻布十番側にいって、うろつく。オリオンビールとか赤ワインとか純米酒とか、馬肉ソーセージとか。しかし、今日の暑さ、人ごみにバテバテ。面白かったんだけど、ちょっと余裕がなかった、かも。
あとは、部屋でのたのた転がるかしらん。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」