Monthly Archives: 5月 2014

短期間にツイッターボット2つ作りました

まず、友人の通称ゴリラちゃんが、お友達をほしそうにしていたので、こんなボットを作りました。
gori_head2

そして実際のツイートがこちら:

アルゴリズムは超簡単で、大体140字以内で説明できます。

ソースコードはここにおいておきましたので参照してください。Pythonで書かれてて、あとはcronに登録して1時間おきに実行するようにしました。

一応cronの設定のしかたも書いておきます(ちなみにサーバはDebianを仕様)。まずはシェルから(一般ユーザでOK)

crontab -e

と入力するとエディタ画面になります。そこで、

0 */1 * * * python /path/to/gorilla_bot/bot.py

(/path/to/gorilla_bot/bot.pyのところは実際のbot.pyのおいてあるところを指定)
と入力すると設定終わりです。

この公開直後に、こんなすばらしいアイデアをもらいました。

そこから、実装についてのディスカッションが始まる。

そしてできました。
yojo_head2
実装からテストまでにかかった時間が大体3分くらい。

そして実際のボットのツイートがこちら:

しばらくアイコンなしで運用してたのですが、アイコンを募集したら提供してくれる人がいました。

この和田さんっていう方、プロフィールにもありますが、株式会社コスパというコスプレグッズ・キャラクターグッズ等の製作販売会社の副社長さんです。つまりガチでそのスジの人ですので、絵もすばらしいです。

アイデアをいただいたじゅんじさん、絵を提供して頂いた和田さんには改めて感謝申し上げます。

こうやってネット上で違う才能を持った人がディスカッションしながら何かを作るって、イノベーティブな感じがしますね。ふぇぇぇ

P.S.
ゴリラボットの方はソースコードを公開していますので、みなさんこれを改変して自由になんか作ってください。未実装なアイデアとして、例えばこんなのがあります。

grep: またUnicode周りでキモいコミット見つけた

久しぶりのgrepネタ。今度はまだリリース版に入ってないコミットの話。

commit c50283a3a8d15d382691c447c3a1e1fde1c548fc “grep: fix bugs with -i and titlecase”

実はかなり前に見つけてたのだが、解説するのが遅くなった。全国のgrepファンのみなさん、ごめんなさい。

+ grep -i no longer mishandles patterns containing titlecase characters.
+ For example, in a locale containing the titlecase character
+ ‘Lj’ (U+01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J),
+ ‘grep -i Lj’ now matches ‘LJ’ (U+01C7 LATIN CAPITAL LETTER LJ).

どうやら”L”と”j”を合わせた文字で’Lj’ (U+01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J)という文字があって、その周りの問題をなおしたらしい。この文字についてはUnicode本家のコード表(pdf注意)を参照のこと。これ見てると「NJ」というもう一個キモいの見つけてしまうが見なかったことにしよう。

このコミットを見て、試しに手元のUbuntu(先日14.04にアップグレードしたばかり)で実験してみたら、再現しなかった。Ubuntuに入ってるのは2.16なので、それから2.18の間に退化しているらしい。

なので、両方のバージョンで実験してみようと思う。まずは、aというファイルを作って、各行に

  • ‘LJ’ (U+01C7 LATIN CAPITAL LETTER LJ)
  • ‘Lj’ (U+01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J)
  • ‘lj’ (U+01C9 LATIN SMALL LETTER LJ)

という文字を入れた。

grepのバージョン2.16と2.18の実行ファイルはそれぞれgrep-2.16, grep-2.18とする。あと、わかりやすいように、-iオプションの他に-nオプション(行番号表示)もつけた。以下、シェルの実行セッション:

$ cat a
LJ
Lj
lj
$ grep-2.16 -in 'LJ' a
1:LJ
2:Lj
3:lj
$ grep-2.16 -in 'Lj' a
1:LJ
2:Lj
3:lj
$ grep-2.16 -in 'lj' a
1:LJ
2:Lj
3:lj
$ grep-2.18 -in 'LJ' a
1:LJ
3:lj
$ grep-2.18 -in 'Lj' a
2:Lj
3:lj
$ grep-2.18 -in 'lj' a
1:LJ
3:lj

キ、キモいよ〜
っていうか、わけわかんないよ〜

ところで、’Lj’ (U+01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J)ってどんなときに使うんだろうか。詳しい人、教えてください。

Ubuntuを14.04にアップグレード

Ubuntuを13.10→14.04にアップグレードした。

見た目ではほとんど変わってないのだが、ひとつだけ気づいた改善点があったので報告。

改善点

長い間困っていたchormium-browserの問題が解決した。12.10から13.10にアップグレードしたあたりからSEGVで起動しなくなっていた。そういうこともあったので、今回のアップレードもちょっと躊躇してたのだが、アップグレードしてよかった。

バグの詳細はこちらに報告してある:
chromium-browser doesn’t start; crashes wich SIGSEGV in libprotobuf.so

ところが…

Google ChromeのLinux版ができていた(昔はなかった)ので、最近はそれを使っている。つまりChromimumもういらね。そして、デスクトップ環境としてのLinuxを見捨てないGoogleの姿勢はすばらしいと思う。

起動できない状態が長い間続いたら普通は乗り換えるよね。

これはChromeとChromiumを同時に立ち上げた画面。違いがわかるだろうか。
Screenshot from 2014-04-30 17:49:04

使ってても違いがよくわからない。とりあえずChromeの方を使い続けると思う。

Googleさん、いつもお世話になってます。ありがとう。