余計なことを0.1.1リリースを記念して、Twitterがサーバサイドエラーに40xを返すようになったようです。RESTのホームタイムライン、メンション、UserStreamが影響を受けたみたいですね。私にとっては昨日の出来事ですがみなさんにとっては2週間くらい前の出来事だったんでしょう。0.1.1.790のリリースから一ヶ月近く開いててびっくり。現在はなんとか少しづつ時間を確保できる状態になってきて、モチベも回復してきたからちょっとづつコードを書いてます。久しぶりにやってることを書く。Twitterで小出しにして言ってたことをちゃんとまとめてみた。GUIプラグインといえば、Gtkを使って諸々のUIを全て管理しているプラグイン。これを追加したことで、mikutterはbotからTwitterクライアントに進化したんだね。*.rbやったら4700とか出てきて合わせたら5000行を超えますね。200行で大規模とか若かったな現在問題になっていることが数点あって、それを解決するためにはもういっそ再設計したほうがいいんじゃないかと思って今回書きなおしてます。一応最低限動くようになってこれでいけるんじゃねって思ったので今回ブログを書きました。今回問題にしたのはタブとかペインを扱うmikutterコマンド作るのがしんどいプラグインのGtk依存を除去したいタイムラインにイベントを引っ掛けられたら便利の3点。mikutterコマンドのほうの話は、そもそも俺がそんなことをしたいと思ってなかったのでそんな設計ではなかったんだけど、確かにできると便利。具体的には、キーを押せば左右のタブにフォーカスが移るという事ができる。ユーザ層的にキーボード大好きな人が多いので、できるとよさそう。今のguiプラグインだと、RubyGtkの知識がめっちゃ無いとそういうものは作れない。完全にプラグインのGtk依存をなくせば、まずGtk以外のUIツールキットでmikutterのUIを書くことが理論上できるようになる。いうのは、guiプラグインだけすげ替えればよくなるので。Gtkがうまく使えないプラットフォームでは、プラグインを書けばなんとかなるということがあるかもしれない。それから(実はこっちがメイン)、イベントがGtkオブジェクトをやりとりしないようになるという事は、UIに影響を与えるようなプラグインでも別プロセス化しやすくなる。そもそも特定のプラグインのプロセス分けるのをまだやってないんだけど、その理由がほとんどのプラグインはタブ作ってるからあまり意味ないというもの。ちなみにGtk依存は完全には無くせないと思ってます。あとは、特定のタイムラインにだけ通知、フィルタなどをかけられるといいなと思ってるんだけど、これをするには今のタブの管理方法では不可能。大幅な書き換えがいるけれど、嬉しいことに三年で俺のスキルが上がったらしく、guiプラグインをいじっているとSAN値直葬されるので、書きなおすしかなくなってしまったわけです。内部処理については端折るけれど、タブとかに固有ID(スラッグ)を持たせたら通知の鳴り分けができるし、その名前を指定して直接タブオブジェクトとかにアクセスできたら、ショートカットキーで左右のタブに移動するのもできるようになる。あとはちゃんと設計して前よりは読みやすくする。gtkプラグインを新設することで、guiプラグインにgtkの話が一切入らないようにした。この2つのプラグインは、mikutterのイベント機能を使って通信しているので、ほかのプラグインで気軽にちょっかいを出せる。多くの人にとっては、具体的にプラグインの書き方がどう変わるかが関心ごとだと思います。今移植した中で一番簡単なfriend_timeline改めhome_timelineプラグインのコードがこんな感じです。タイムライン作ってるらしい処理があるけどGtkの文字はどこにも出てこないようになりました。2-4行目が、タブを作ってアイコンを当てはめ、タブの中にタイムラインを入れるという一連の処理。実際にツイートを入れるのは7行目ですね。これはスラッグを指定してインスタンスをわざわざ得ていること以外は特に変わらない。ところどころ出てきてるシンボルが識別名です。プラグイン、タブ、タイムラインで同じ名前使ってるから若干わかりづらいけど。スラッグさえ指定すれば別のプラグインから別のタブにちょっかいを出せます。あとタイムライン以外に必要なパーツといえば、フォロイーリストとかで使ってるようなユーザリストと、アクティビティなどで使ってるCRUDビューくらいかな。プラグイン開発者が望めばGtkを使えるようにします。プロフィール画面をこの調子で作れるようにしようとおもったらwxWidgetsを再発明するハメになってしまいかねない。やり過ぎはよくないのだよ以上でやりたかったことは全て解決できそうです。guiプラグインならまだしも、gtkプラグインに依存するプラグインが出てきてしまうという新たな問題が顕在化しました。これじゃあ別のツールキットで実装が出来なくなるし、マルチプロセスの夢も遠のいてしまいます。いうわけで、先延ばしにしていた、プラグインのメタ情報を書くことができる「プラグインメタファイル(仮名)」の実装を検討しています。これは、yamlとかで、プラグイン名や想定するmikutterのバージョンなどを書いておくファイルです。別ファイルになっているので、実際にプラグインをロードするまえに動作条件を満たしているかどうかが分かります。ロード完了してからバージョンが違って動かないということがわかっても手遅れなので、ソースコード内に書くのはボツになりました。この中に依存するプラグインを書いておけば、想定するプラグインがないというエラーを出せますし、同じプロセス上で実行するといった配慮もできそうです。これは今のところ0.1.2のメインになるであろう変更でもあります。今のところ前のタイムラインやタブの作り方と互換性を取るのに苦労していて(タイムライン、タブにスラッグがない等)、mikutterとしては初の互換性がないリリースになる恐れがあります。(メジャーバージョン上げて0.2にしようかな。requestを送ることもできそうです。仕事も落ち着いてきて今月は時間が取れそうなので、あまり風呂敷を広げすぎないようにしつつ、8月はじめまでにはリリースしたいです。アクティビティタブの仮実装(Twitterのアクティビティとは別物です。UIを追加multiselect(チェックボックスによる複数項目選択)multi(複数のテキスト)プラグインのデタッチ機能バグ追加priceless自分で設定していた期限が来たのでリリースします。pre1のテストのご協力ありがとうございました。あれからもいくつかのバグが追加・削除されているので、pre1を使ってくれていた人もアップデートしてね。pre1http://mikutter.hachune.net/bin/mikutter.0.1.1.780.tar.gz主な変更点アクティビティタブの実装ツイート受信以外のイベントが、ただのリストビューに表示されます。設定で指定された種類のイベントについては、ホームタイムラインにも表示します。(ex)フォローされた、リストに追加された時にホームタイムラインに表示、等Twitterのアクティビティ機能とは別物なので注意(APIが公開されていないため不可能・mikutterのは自分関連のものに限る)ツイートの全ての色の変更が可能になった抽出フィルタに、投稿元ツイッタークライアントを追加いくつかの速度最適化そろそろ、0.1.1をリリースできる頃になってきたと思うので、プレリリース版を公開しようと思います。予定では、今週末までにできることをやってリリースという事にしてしまおうと思ってます。今回はアクティビティ、Activity、アコテベテェなど、あなたのTwitter体験に革命を起こす様々な新機能が追加されてます。抽出タブの条件設定がたまに消える問題GWアップデートです。12.04にてUserStreamが動作してない問題があったので焦って対応しました。他にも安定性に関わる問題を数点修正してます。アップデートしましょう。0.1.1を出そうと思っていたのでその時にしようかと思ったけどそれだと遅くなるのでやめました。0.1.1はもうすぐ出ます。明日からしばらく旅行してるので世間一般のゴールデンウィーク期間中には来ないでしょう。いいつつ、つけたい機能はあらかた終わってるので案外いけるかもしれない。今やってることの途中経過とかだよアクティビティイベントのタイムライン「アクティビティ」mikutterのUIは、「メッセージ(=ツイート)」をいろいろな抽出条件で表示するタイムラインを中心に構成されてるわけですが、mikutter開発開始当初と違い、今ではお気に入りを初め、様々なツイート以外の「イベント」が飛び交うようになりました。TwitterのWebやTweetDeckも、Facebookをパク意識してそういったユーザの行動(=アクティビティ)を追うことができる機能をつけました(それと憑依機能とkおっと誰か来たようだ)。API自体は提供されていませんが、UserStreamから受け取れる情報である程度それっぽいことができるようになります。やって行動の実態を定義してやることで、タイムラインに抽出したり、通知を設定することができるようになるでしょう。任意のイベントをタイムラインにまた、プラグインからアクティビティタイムラインにイベントを表示するためのAPIも用意していますし、全ては表示する前にフィルタで書き換えたり削除したりできるようになっているので、この機能を使ったプラグインもそのうち出てくると思われます。フィルタによる表示の自由な書き換えタイムラインを黒くしてみた。全ての色が変えられるので、実用できる今までmikutterのデザインって、結構決め打ちのところが多かったんですが、フィルタのパフォーマンスが上がったので、色とかをフィルタでいじれるようにしました。色についての変更が見た目には大きいと思います。実はいままでメッセージのヘッダ(名前とか日付とか表示されてる部分)の文字色は黒固定だったので、黒背景で使いたい人はヘッダが見えなくなってしまっていたんですが、ヘッダは左右で色を設定できるようにしました。設定が細かくなった何より、ここの色がフィルタで自由にいじれるようになったことが今回最大の変更点です。以下のように実行すれば、Twitterユーザ@toshi_aのツイートだけ文字色が赤になります。こんなふうに、MiraclePainterを受け取ってそこから適当な条件で任意の色をつけるプラグインを簡単に開発することができるようになります。この他にも、スレッド(会話)プラグインの拡張、ツイートを投稿前に加工するフィルタ等で、表示に影響を与えるプラグインを作成する上で表現の幅を拡げるような内部的な変更を複数取り入れる予定です。先送りになったのタブのDSL化タブをGtkオブジェクトではなくGUIプラグインの提供するDSLで定義・管理させることで、他のプラグインが関係ないタブに干渉できるようになる機能です。左右のタブにフォーカスを切り換えるmikutterコマンドとか、タブごとの新着通知なんかがプラグインで実現できるようになります。このためには、半ば手探りで実装したGUIプラグインを再設計しないと難しいと判断しました。思ったよりGUIプラグインが大きいし、設定画面の作成など、ついでにやってしまいたいこともいろいろあったので、あえて0.1.1では対応せず、次回に回すことにしました。いつになるの5月中頃くらいで蹴りをつけたいですね。12.04には間に合いません。0.1.0.749UserStreamが止まることがあった問題を改善フィルタやフックを独自に定義する一部のプラグインが動かなかったツイートの右クリックメニューが出ないことがあったロケールがUTF8になっていない環境で起動できなかったパッチをもらうなどした。ふへへ一ヶ月ぶりくらいにmikutter使えるような状態になってきたので、新機能とかをついかしていきたいってか前回のバージョンアップが24日だし0.1.1の実装予定機能を書く書く詐欺してるのでぼちぼち書いておきたいな。!この記事は4/1に書いた記事ではありませんが、私@toshi_aにとっては毎日がエイプリルフールです。角のテーブルの若者がにわかに騒ぎ始める。主催の年越しオフ会に参加することにしていた。実際に蓋を開けてみると、彼はついさっきコミケから新幹線で帰ってきたところで眠そうだし、@toshi_aの他には誰も来なかったのである。オフ会というよりはただのサシ飲みだ。誰も来なかったらどうするつもりだったのか。余談だが、161cmであると正式に発表があり、有識者の中でも意見が別れ問題になっている。calendarからのリマインダが来たことにも気がついていなかった。京阪の地下で普段ならとっくに終電が終わっている2:30発の電車の案内板を眺めながら、いよいよ2012年の始まりか、と気を引き締めた。おくれることを強いられているんだ思えば、2011年は本当に悲惨な一年だった。来月には忘れる一年の目標でも考えてみようかとiPhoneを取り出し、目に飛び込んできた「約束の日」という奇妙なリマインダに一瞬戸惑った。4月1日という日付を見るやいなや、今年の目標のことなんかすっかり忘れ、今年のネタを考えるのであった。歴史@toshi_aはエイプリルフールには嘘はつかない。普段からふざけたようなことばかり言っているし、今更何を言ってもエイプリルフールらしくならない。巷では彼女ができたとか、内定が出たとか、卒業できたとか嘘を言う人がたくさんいるが、どれも大概やったし、嘘をついてもつかれてもたいしておもしろくない。そんなわけでエイプリルフールには全く興味がなかった。なんで今年のエイプリルフールはWebページいじらなかったのにアクセスが伸びたのかその考え方を変えたのは、近年のWebサイトの参入からだ。彼らは年度末の一番忙しい中で、我々の宿敵であるユーモア欠落症患者に罵られるような内容のページを作る。それらはすべてくだらなく、取るに足らないどうでもいいもので、笑い以外に何も与えない。繁忙期にもかかわらずそんなことに身を裂く彼らの遊び心に感動したのだ。彼らのやりかたに心を打たれた所で簡単に真似できるものではない。普通の人間がコンスタントに不特定多数からのアクセスのあるサイトを作るのはなかなか厳しいのだ。ブログではアルファブロガーでもない限り友達にジョークを言うのと大して変わらないし、Webサイトなら尚更だ。誰も見てないWebサイトが調子に乗ってエイプリルフールネタをやったところで2日にはGoogleのbotのアクセスログたくさん入ったApacheログと一緒に削除することになるのは確定的に明らか結局このモデルは一見魅力的だが現実的ではなく、彼は結局、毎年彼女ができたと死ぬまで報告しつづけるしかない運命を呪うしか無かったのだ。2010年に変化が起こる。Twitterクライアントを作り始めたことだ。Twitterクライアントは常に使うアプリケーションなので、ここにネタを仕込めば不特定多数にネタをブロードキャストできる。彼は普段から「初音ミクに全く関係ないじゃないか」という、聞く人が聞けばTwitterをやっていいのは中学生からですよと思わずマジレスをしてしまうような呟きが何か気にかかっており、エイプリルフールに彼らのユーモアを試すとともに、俺が本気を出してしまったらいったいどんなひどいことになってしまうのか思い知らせ、二度と同じ口を叩けないようにしてやろうと思ったのである。mikutterにとってユーザはお客様ではないのだ。いつからmikutterを「使っている」と錯覚していた?お前たちは常に試されているのだ。mikutterではTwitterクライアントがユーザを選ぶ。2010年3月、彼は16種類のアイコンを自分のサーバに設置し、それをエイプリルフール当日に取得させ、ユーザのアイコンのURLを一定のルールでいずれかの画像に置き換えた。これらはすべて初音ミクのアイコンで、ユーザのタイムラインはすべてみっくみくにされた。当時10人ほどいたユーザには突然のことに恐れおののくもの、最高にクールだと賞賛するもの等いろいろいたが、中には好ましく思わない人の声もあった。彼は、最初はそういったつまらない人間もいるだろうと考えていたが、翌年のエイプリルフールにはmikutterに触れることにより「これだからmikutterはやめられない」と言うまでに変貌を遂げているのを見て、実は彼らは私達と同じ「ユーモア」を持って生まれたのにもかかわらず、殺伐とした現代社会に心を破壊され、いつしか人の心を閉ざしてしまっただけなのではないか、と悟ったのである。彼らも私達と同じ人間なのだ彼は絶望に打ちひしがれた。俺達と常に争ってきたあいつらにも心があったのだ。私たちは同じ人間同士争わなければならないのだろうか。きのこ派とたけのこ派は分かり合えないのだろうか。見てもチョコが少ないきのこの山を選ぶ過ちを犯す人間がいるのだろう?ご自分の息子が皮を被ってるのがそんなに気になるのだろうかwwwしかし、mikutterで変われる人がいるのならば、創り続けたい。その日から彼はもう一度mikutterの機能目標を練り直し、翌年までにTwitterクライアントとして最低条件を満たし、ユーザをあわよくば増加させることを決めた。餌がなければ、獲物はかからないからだ。一年後には無事に実装を終えて、その顛末はこのブログにも書いた。新年になったと同時に彼に届いたアラートは、「約束の日」まであと3ヶ月しかないことを報せるために、いつだったか自分で設定したものだったのだ。いえ、今年に入る寸前にどう考えてもデスマです本当にryみたいな案件の話を聞かされて最悪の気分で新年を迎えた彼は、あまり時間が無いことはわかっていたし、一発勝負なので複雑なことをしてバグを作り込むよりは、単純なことに留めておいたことがいいということもよくよくわかっていた。「今年は順当にアイコンを増やすか...。」この決断は決して安易なものではなかった。今年はすでに去年の128種類があり、ここから更に増やすのは非常に困難である。ミクの写真はいくらでもあるが、一緒にデートに行った時に撮影したものなどが殆どで、童貞の巣窟であるTwitterで晒せばフォロワー全員にリムられることは想像に難くなかった。できるだけ早く手を打たなければならない。同じ事をするにしても全く繰り返す訳にはいかない。