Lightning Talk

SFC-LTという愉快なイベントに参加してきた。 http://sfc-lt.com/ かしこまって参加するのもアレだし、Ustされちゃうし、@naotacoです、とだけ言って参加してきた。学校でプレゼンするのに本名も出さず、こんなゆるふわな感じでも何とかなるあたりがLTの素晴らしいところ。滑っても5分耐えれば済む話だし。 普段お世話になっている方々が運営をされていたので参加してみることにしたのだが、これといって話すようなことはない。卒論の話を5分でおもしろくまとめるほどの才能も多分俺にはないし。でもtwitterで告知されたLTとか普通に考えたらギークしか来ないだろうし(実際はそれほどギーク率は高くなかった気もする)、割と適当なこと話してもいいんじゃないかと思い始めた。 一般受けとギーク受けを考えるともうtwitter BOTの話くらいしかネタがなかったので、卒論とからめて作った@sfc_sotsuproと、@naotaco_sotsuの話をしておいた。意外とうけた。いろんな意味でこんなにホットな会場にしてくれた運営の方々と参加者の方々に感謝することしきりである。まあ本当にやりたかったのは、プログラムを怖がらずやる気に満ちた1,2年生の確保だったんだけど、会場には見当たらなかったしネタ発表にしといてよかった。 後半しか聞けなかったし、自分の発表であわあわしてたので他の人の発表は落ち着いて聞けなかったんだけど、アーカイブで全部見せてもらいました。SFCにはいろんな人がいて楽しいということが再確認できた。たのしかったなぁ。 ORFみたいなセッティングされた感の凄い何かより、こういうリアルなイベントの方が受験生に響くような気はするんだけどな。SFCのアレな感じを広めるのに少しでも貢献できたのなら幸いだ。最後になったけど、運営の皆様ほんとうにありがとう。

Read more

twitter bot @genryo_bot のはなし

Syntax highlighterいれてみた。ので、コードを少し貼ってみる。 とりあえずこないだTwitterでフォロー返しに不具合があって、良く出力を見ていたらフォロワーが100人ぴったりだった。慌ててAPIとかNet::Twitterのドキュメントを見ると、1回に100ずつしか得られないとのこと。pagingかcursorを利用するかして何度かアクセスしろ(これってAPIアクセス数は増えるのかな?)とのことだったので、next_cursorに0が帰ってくるまで何度もアクセスして、followers()で得られたuserを1つの配列に突っ込むようにしといた。 my @followers; my $cursor = -1; while ($cursor) { my $f = $nt->followers({cursor => $cursor}) or die “error while getting followers $!\n”; $cursor = $f->{next_cursor}; foreach my $u (@{$f->{users}}) { push @followers, $u; } } これでたぶん数百フォロワーいても大丈夫。twitter先生のことなので、2回目だけアクセス失敗とか平気であるからちゃんとチェックしておきましょう。僕はこれ忘れて100人目より後のフォロワー全部を一度リムーブしましたorz あとはまってたのは、in_reply_to_status_idに渡すID。ステータスのIDを渡すものだと知らず、ひたすらユーザーIDを渡して、reply toが表示されないなぁおかしいなぁって思ってたorz で、このBOTはフォロー返しして、TLにある太りそうな発言にうっとうしいReplyを返すのが仕事。発言を全部MeCabに突っ込んで要素に分割して、あらかじめ指定した順番で太りそうな名詞と(助詞と)動詞の組み合わせが出てきてるかどうか見てるだけ。超単純なんだけど、MeCabのおかげで動詞を原形で指定できるから、けっこう幅広いパターンに引っかかっていい感じ。 文字列が太りそうか判断するパッケージ”Fat”を作ったんだけど、中身が上に書いたことくらいしかなくて100行くらいしかないしだいぶアレなのでソースは貼らないw

Read more

Net::TwitterでIncorrect signatureが止まらない(つづき)

どうせ忘れるだろうからメモ。 Net::OAuthだかNet::Twitterだかのバグで表題のエラーが出ていた件は、十分に新しいバージョン(3.14**以降?)では直っているはずだ。にもかかわらずこれが出るというのは、単にutf-8として適切ではないデータが渡されているだけのことらしい。orz BasicのときはいけたのにOAuthになったら通らなくなるのは不可解だが、TwitterのAPIなんて不可解なことだらけなので考えても仕方がない。まあもうBasic認証使えないしね。もしかしてあれか?OAuthになったついでに化けないようにutf-8のチェックをちゃんとしてくれてるとか? 結論から言うと、 use encoding(“utf-8”); を消したら直った。ふしぎだ。orz 御大の言うように、ソースは全てuse utf8;してutf-8で書く。encodingはもう使わない。 で、読み込んできた文字列は全部Encode::decode_utf8で処理する。(http://blog.livedoor.jp/dankogai/archives/51290188.html) そうすればソース中の文字列も外から入ってきた文字列も全部中身が正しいutf-8で(←これ大事)、かつutf-8フラグも立つ(←これも大事)ので化けない(少なくともNet::Twitterさんに怒られることはない)。もう文字コードでは悩まなくて済むはずだ・・・

Read more

Net::TwitterでIncorrect signatureが止まらない

Net::Twitterを使って日本語をつぶやきたいが、OAuthを使うと日本語がつぶやけないという話。 普通にBASIC認証でIDとパスワードを渡すと英語・日本語(UTF-8)どっちでもツイートできるのに、OAuthを使うと日本語の時だけIncorrect signatureなどと意味不明な供述をしやがる。ちなみにPerlは5.10.1。 こうして、あとは $nt->update(‘hoge’); でつぶやける。但し英語のみ。 ぐぐってみると、同じ問題がNet::Twitter 3.13003+Net::OAuthで発生するという話がたくさん引っかかるのだが、どれもこれらを最新版にアップデートしたら直ったと書いてある。とっくに3.13006まで上げてるが、まったく直る気配がない。どうしてこうなった。現在は3.13007になっているが、変わらなかった。 英語ならツイートできるわけで、OAuth自体に問題があるとはどうしても思えない。ので、きっとどっかで何かがUTF-8あたりと喧嘩か何かしてるか何かなんだろうなぁ。なんもわからん。ソースを読みにいくという選択肢が無いへっぽこ学生。 一番安直な解決法としては、既にgem twitterをインストールし、OAuthでのあれやこれやの方法を確認できているRubyに移植することなんだが、今ひとつ踏み切れないところ。大したBOTでもないから1日あれば全部移植できるとは思うんだけど、んー。 てことで劇的なNet::TwitterのアップデートがtwitterのBasic認証廃止までにくることを夢見て、今日も寝て待つ俺なのであった。 →つづき:http://blog.naotaco.com/archives/101

Read more