ラベル mikutter の投稿を表示しています。 すべての投稿を表示
ラベル mikutter の投稿を表示しています。 すべての投稿を表示

2011年1月9日日曜日

mikutterをRuby1.9.1で動作させる

mikutterは、いままでRuby 1.8.7専用で開発してきた。
理由は、GUIツールキットとして採用しているRuby-Gnome2が、Ubuntuでは1.8用にビルドされたものしか用意されていないからだ。もし1.9を採用するなら、mikutterを使うためにRubyGtkをわざわざソースコードからビルドしなければならない。一方、1.8を採用すれば、apt-getで全て手に入る。

Ruby1.8と1.9では大きな変更があったが、両方で動くコードは充分に実現可能だ。そこで、今回はmikutterを両方で動くようにしてみた。

なぜ1.9を使うのか

では、1.9の追加機能を使わずにサポートするメリットとはなんなのか。主な理由は
  1. 速くなると思われる
  2. 1.8は古いので、いずれ1.9にシフトしていくだろうから
  3. Twitterでmikutterの開発協力者にそそのかされた
だ。とくに最後の要素が非常に大きい。
1.9系列の最新版は今のところ1.9.2だが、今回はubuntu 10.04で手に入る最新の1.9.1を使用する。

やりかた

1.9で動作させるには、trunkを使う必要がある。
参考サイトには10.10用と書いてあったが、10.04でも同じ手順で問題なかった。ただし、現在Ruby-Gtkはより新しいバージョンがリリースされている。
また、Ruby-GtkのフルセットとGtkのみが入ったパッケージがあるが、mikutterを動かすならGtkだけで良い。
加えて、READMEに書いてあるライブラリも1.9用のものを入れる必要がある。また、libhmac-sha1は1.9用のものが用意されていないので、gemでインストールする必要があった。
# apt-get install rubygems1.9.1
# gem1.9.1 install ruby-hmac
mikutterはrubyコマンドで起動するようになっているが、この方法ではruby1.9.1というコマンド名でインストールされる。そのため、
$ ruby1.9.1 mikutter.rb
のように起動しなければいけない。通常通り起動すれば、1.9.1をインストールした後でも1.8で動作させることができる。

どう変わったか

私の開発環境では、起動時間に圧倒的な差があった。1.8が23秒であったのに対し、1.9は7秒で起動できた。実に三倍である。
mikutterはリプライ元など取得に時間がかかる可能性のあるものは遅延して表示するが、起動時間にはこれは含まれていない。あくまでつぶやきが表示されるまでの時間だ。
しかし、その遅延して表示されるウィジェットもいずれも高速に表示され(見た感じ倍速程度)、非常に快適になった。
高速化のための遅延レンダリングが露骨に見えることも多かったが、1.9を使えばそれも殆ど見えなくなった。

今後

mikutterは非常に高度で複雑なウィジェットの配置をしている。UIを妥協なしに実装したいがためであったが、マシンパワーを異常に浪費してしまっていた。そこでCairoによるタイムラインのレンダリングを検討していたが、1.9を採用すれば充分に高速化されることが期待できるので、このまま様子を見ることにした。
更に改善を続ければ、1.9でも問題なく使えるようになるだろう。

2010年12月26日日曜日

mikutterで振り返る一年

CHI

http://hakurei-shain.blogspot.com/2009/12/computer-humanoid-interface.html

2009年12月26日に、computer humanoid interfaceとかいうタイトルの記事をポストしていた。9月くらいから書き始めた監視スクリプトだが、25日にリリースし、翌日にこの記事を書いたもの。どういうものかというと、

  • これをインストールしたサーバ(マシン)のあらゆる状態を監視し
  • 異変があればTwitterにポストする
  • 欲しい機能はプラグインで拡張できる
  • 会話支援機能などが付いていて、Twitter上でリプライを飛ばしあうようなプラグインが簡単に作れる
というもの。現在もメンテナンスはしていて、わがサーバを監視しているlime_toshiaや、監視プラグインを全て外して独自のプラグインを入れて稼働しているkirimaru_botがある。
これをリリースする少し前から、GUIプラグインを入れたらTwitterクライアントになるんじゃないか、と考え始めていた。それが現在のmikutterだ。

一年で起こったこと

理想(最初のUI設計)

現実

これが最古の写真(理想はイラスト)。今には程遠いように見えるけれど、ほとんどこの時に今の原型ができていた。
今にも受け継がれている特徴は

  • できるだけコンパクト
  • リプライ入力欄がつぶやきのすぐ下に現れる
  • どのつぶやきへのリプライかが簡単に分かる
リプライ入力欄をすぐ下に出現させるのは実装し始めてすぐに思いついたアイデアだった。これはたくさんのスレッドがひとつのタイムラインに絡まり合って存在しがちなタイムラインにはなかなか良いUIだと思っている。同じようなTwitterクライアントはいくつかあるが、このような芸当はウィンドウのパーツの制約で難しいことが多いので、ほとんどのクライアントはひとつのつぶやき入力ウィンドウを使っているのが現状だ(尤も、好みの問題もあるのでその限りではない)。
ツールチップで何に対してのリプライかを表示するのは、RubyGnome2のバグにハマって途中でやめてしまった。それがなければずるずるツールチップに表示していたかもしれない。(そんなことはないか)

逆に考えをあらためたこともあった。
  • DM
  • Twitterでできることを全てできるように!という方針
mikutterを開発している間に、りむったーというサービスが終了した。これは、リムーブされたらDMで通知してくれるというサービスだった。これが終了すると、めっきりDMが来なくなった。普段使わない機能を実装する気にはなかなかなれない。
Twitterでできることを全てできるようにしようと思ったが、時間的な制約もあるので、実装を遅らせるのもよしとすることにした。TwitterのAPIに対応するより、それ以上の機能を実装したほうが良い場合もあると考えているからだ。

他のTwitterクライアントにも様々な変化があった(以下、覚えている範囲で書いているのでいろいろ間違っているかも知れない)
  • Twitter Webの刷新。重くなったとも言われているが、画像のプレビューやyoutubeなどに対応、外部サービスをTwitter Web上から使えるようになるというのは前代未聞だった。
  • 多くのTwitter クライアントが返信元やスレッド機能を実装してしまった。mikutterは会話を追うことを得意としているので、差別化は困難になった。
  • 開発をはじめてしばらくしてTwitterクライアントが大量にリリースされた。しかしながら、LinuxでのクライアントはUIや機能がパッとするものが少なく、今のところmikutterが少しリードしている、と思う。
  • TwitterがGoogleなどにつぶやきの情報を提供するようになった。これによってGoogleでリアルタイム検索(つぶやき検索)ができるようになった。favstarの収集がやたらと速いが、たぶんこれだと思う(よく知らない)。
開発は常に絶え間なく行なっていたが、途中様々なTwitterの仕様変更があり、時間を取られたりもした
  • 公式リツイート。これにより、従来のリツイートが「非公式RT」と呼ばれるようになり、恰好の論争のネタになっている。
  • OAuth。8月31日を以てBasic認証でTwitterAPIを叩けなくなった。mikutterは6月末くらいに対応して、この時から投稿クライアントに「from mikutter」と入るようになった。この日を境に多くのメンテナンスされていないTwitterクライアント、BOTが使えなくなった。
  • ジオタグ。つぶやきをどこでしたか、位置情報を含められるようになった。多くのPC用クライアントでは非対応(そりゃそうだ)
  • Streaming API。mikutterは製作開始時点からこれを視野に入れていたが、今ではUser Streamは一般的になっている。クライアントによってはオプションになっているが、mikutterではUser Streamは標準。Twitterの使い方が大きく変わった。
  • ユーザリスト。1ユーザにつき20個のリストを作ることができ、そのリストのTLを見たり、人の公開リストをフォローしたりできる。対応しているクライアントは今でも少ないが、mikutterは不完全ながら最低限の対応はしている。
こう見ると、この一年はTwitterにとっても大きく変わった一年だったことがわかる。とくにReTweet、UserStreamは私たちのTwitterの使い方を大きく変えた。また日本ではメディアに取り上げられたりドラマが放映されたりして大きく認知度が上がり、ユーザ層が大幅に変わって、それに併せて周辺サービスの性格も変わってきた。
Twitter自体の安定性が上がったことは誰もが感じているはず。一週間何もトラブルがなければ不安になっていたものだが、今やTwitterAPIに不具合があるとTwitterクライアントの作者に苦情がいくこともあるそうだ(mikutterはユーザ層的にないけれど・ありがたい)。

それ以外にmikutterを取り巻く環境にも様々な変化があった。
  • RubyGnome2が安定してきた。最初はかなり不安定で採用したことを正直後悔していたが、最近は不具合も減り、mikutterは確実にそのパフォーマンスを上げている。
  • 協力者が出てきた。パッチを送ってもらったことにより様々な機能がついた。またブログ等で紹介してくれる人も何人か出てきて、様々なOSでの動作報告、パッケージ化がなされた。特設サイトにはドメインも提供してもらった。
  • 利用者が思ったより増えた。Linuxでも動く優秀なTwitterクライアントが出現する見立てだったが、今のところ満足できるものはあまりない。AirやJavaを使ったものはLinuxでも動くが、どうしても対応が疎かになっているようだ。その中でmikutterはUbuntu Linuxに主軸を置いており、それを買ってか利用してくれるユーザが確実に増えている。
個人的にも、これほど長期にわたって開発を続けることができたプロジェクトも初めてだし、これだけ多くの人を巻き込んで開発するという貴重な体験をさせてもらえることにとても感謝している。いろんな事を勉強できたので、来年はそれを還元していける一年にしたいとも思っている。ほかに、自分自身にはこんなメリット・デメリットがあった。
  • Rubyの理解が深まった。去年に比べて大幅に理解が進んだ。
  • ソフトウェア開発に対する理解も深まった。
  • Twitterがより楽しくなった。
  • 廃人度が上がった。知らないうちにつぶやいていたり、ふぁぼっていたりする。どうしたものか。
制作開始当初は、Twitte.rbを目標にしていたが、機能的には(一部実装していないものがあるが)超えたと思う(目指している方向が違う気もするが)。
これからは安定化を図りつつ、プラグインとして追加で提供する機能でTweenやTweetDeckに追いつくことを視野に入れて開発していきたいと思っているので、今後とも宜しくお願いします。


2010年5月18日火曜日

まだまだやりたい事は出来ていない・・・

先日、mikutterの着想から半年が経っていたことに気がついた。途中なんども開発を停止しているし、別のこともいろいろとやっていたので本当に半年やっていたわけではないが、結構経ってしまった。
実際には、CHIを書き始めたのは10月であり、今まで何をしていたんだ、と落胆しそうになったが、とりあえずこれだけの機能がつけられた。
  • ホームタイムライン
  • リプライタイムライン
  • 検索
  • saved search
  • 通知
  • URL短縮
  • リプライ元つぶやきの表示
  • リプライ
  • リツイート
  • 公式リツイート
  • お気に入り
と、非常に少ない。亀進行である。未だにプロトタイプのレベルを出ていない。
主観だが、以下の機能が「普通のクライアント」を名乗るためには足りないのではないだろうか。
  • ダイレクトメッセージ
  • お気に入りに入れたつぶやきのタイムライン
  • スマートリスト(フィルタ)
逆に、現時点では以下の機能が普通のクライアントを上回っていると考えている
  • twitter.comからつぶやきを検索出来る
  • ハッシュタグの内容をmikutterから閲覧出来る
  • Webで保存した検索をタブに表示できる
  • あるつぶやきのリプライ元をノークリックで見ることが出来る
特に検索関係は強い。とりあえずだが自動更新も有り、少し改良すればtsudaる用途にもいい線を行くのではないだろうか。
つぶやきのリプライ元表示は良いアイデアで、構想段階からすでにあった。単純に、フォントを変えて下にリプライ元を表示しているだけだが、これだけでタイムラインの見た目はぐっと変わり、一番の長所といっていい。が、こんなものは簡単にパクられる。
# つぶやきの表示にリストビューを使っちゃった人たちには簡単にはパクれないかもしれない

では、構想段階ではどのようなことを考えていたのか、再び挙げてみたい。これは、12月の時点で既に欲しいと思っていた機能だ(既に実現したものは外している)

  • ダイレクトメッセージ
  • お気に入り
  • ふぁぼられ
  • 特定のつぶやきだけをまとめたリスト(Togetterのようなイメージ)
  • 公式リストへの完全対応
  • フォローしている人一覧
  • フォロワー一覧
  • 特定の人のプロフィール確認
  • 自分のプロフィールの編集
  • フォロー・リムーブ・ブロック・ミュート・マーク
  • スマートリスト
  • つぶやきの永久保存及び検索
  • 画像アップロード
  • 画像インライン表示(少なくともブラウザを介さない)
  • Twitlongerを利用したつぶやきの短縮
  • スレッド
Togetterのようなものだが、これは今はどうかな、と思っている。使いたいケースがあまり思いつかないからだ。何故欲しいと思ったんだろう(とはいえ、この程度のことはプラグインで出来るので、後で作ってもいいかも)。
ミュート、マークはオリジナルの概念だ。ミュートは、フォローしているにも関わらず特定の人のつぶやきを一切ホームタイムラインに表示させない。逆にマークは、フォローしていないにもかかわらず特定の人のつぶやきをホームタイムラインに表示させる。相手に知られること無く、フォロー/リムーブができる。幾つかのクライアントソフトには、既に実装されている。
ミュート、マークはスマートリストで実現可能かもしれない。スマートリストは、簡単なフィルタ言語等でつぶやきを絞り込んで表示するタブで、フィルタ言語にはHatsuneLispを検討している。スマートリストは、ホームタイムラインやリプライタイムラインを実現可能なので、これ一つで大抵のことをしてしまう時がくるかもしれない。
つぶやきの永久保存及び検索は、MySQLとSQLiteを用いて実装したが、万人受けするものではない割にライブラリ等の依存関係がややこしいので配布には至っていない。
最後のスレッドとは、つぶやきの親子関係を再帰的に辿り、一連の会話のツリーを構成するるぶやきをタイムラインに並べる機能。これがあれば、つぶやきを一つ拾えば会話全体が見えるようになり、革新的な機能となるだろう。

かなり盛りだくさんに見えるかもしれないが、これくらいないと使い物にならないと考えている。mikutterは、現在のTwitterクライアントに対する問題提起なのだ。作り始めたきっかけが「良いクライアントがない」という現状をなんとかするため、だったからだ。

こうしてみると、やりたい事の半分以下も出来ていないように見える。しかし、拡張可能な基板は整いつつあり、現在はつぶやきの保存方法すらプラグインで拡張出来るようになっている。つぶやきを投稿したら1秒くらいでフォロワー全員のところに届くのが当たり前の時代もついにすぐそこまで来ているし、半年後は今では想像もできない使い方をしているだろう。
# ハッシュタグとか、去年は公式サポートなかったんじゃなかったっけ・・・あと公式リツイート?検索っていつついたっけ?
とにかく・・・Twitterが本気を出す頃には、Twitterをちゃんと使えるクライアントにしておきたい。