2010年2月20日土曜日

みくった〜♪3 次までにやること

以前から開発を続けているみくった〜♪だが、テストしてくれている人が増えてきたので、既知のバグがなんなのか、最初のバージョンまでにどんな機能を実現したいのかを明確にしておきたい。

最初のバージョンの目標

目標としてどんな機能を付けるかを列挙しても良いのだが、ここでは「twitte.rbと同じ機能を実装する」とする。
理由は、具体的なクライアント名を上げた方が明確になることと、twitte.rbは基本的な機能をもっているクライアントの中では、機能が少ない方であること。このクライアントには、必要と思われる機能も一部含まれていないが、今回はあえてtwitte.rbに存在しない機能はこれ以上実装しない(削除機能、ふぁぼったつぶやき一覧など)。
なお、twitte.rbにある「アイコンアルバム」は今回実装しない。というのも、なくてもさしあたって困らないからだ(そのうち実装するつもり)。

人柱版までにやること

MMI作成時にフォーカスを移す
ボタンクリックで無数につぶやき入力欄を増やせるMMI(Multi Mumble Input)だが、これを作成した時に入力欄にフォーカスがいかないと、入力欄一つのインターフェイスよりクリック数が増えてしまう。
メモリバカ食いをやめさせる
つぶやきが溜まると、それを破棄しない仕様になっているため、タイムラインの流れが早い場合にメモリを数百MB消費してしまう場合がある。ページングすると操作性が落ちてしまうが、表示されていない部分についてはメモリを開放したりして、メモリ消費を抑える工夫をしなければならない。
ふぁぼる/アンふぁぼ
他人のつぶやきをお気に入れる/外す機能。
URL開く
URLをつぶやく人は多い。今はコピーできるようになっているが、クリックだけで開けるようにするべき。
ショートカットキーによる投稿(Ctrl+Enterとか)
現状、ボタン押下による投稿のみしか対応していない。
設定変更プラグイン
要するに、設定変更画面。内容は詳しく詰めていないが、以下のような物が最低限必要だと思う
  • 通知機能(サウンドを鳴らす、inotify、コマンド実行等)
  • 更新間隔(現在は一分固定、リプライは20分)
  • アカウント情報の変更
初回のアカウント入力/アカウント変更
現在、initialize.rbを実行することで初回の設定をするが、mikutter.rbを起動した時点でこれをするべき。
ポストする時にハッシュタグが2つつく
#mikutterなどとハッシュタグをつけると、#mikutter #mikutterと投稿される。
リプライ送るときに、宛先がデフォルトで入ってない
送信時に補完していたが、残り字数がわからなくなる。
<>問題
<>などがエンティティエンコードされた状態で表示される。
140文字に切り詰める
クライアントがこれをしないと、Twitterは140字以上の投稿をはじいてしまう。

是非ともやっておきたいこと

IMEのデフォルトONオプション
毎回つぶやき入力欄が消えるため、設定によっては毎回半角入力モードになってしまっている。
ダイレクトメッセージの実装
ただし、これはユーザのプロフィール画面と密接に関わる。そのため、今回はごく簡単なものになると思われる。

余裕があればやること
これは絶対に将来的にやりたい事だが、今回やろうとして却下したもの。理由は上記の通り、twitte.rbに実装されていないからだ。
  • 短縮URL
  • 画像表示
  • 自分のつぶやきを削除
  • スキン機能、というか見た目変更機能(フォントや文字色、背景など)
  • スクロールロック
もしかしたら、見落としているだけで実装されているかもしれないが、今回はこれらを見送る。なお、付けたい機能はこの他もいくらでもある。

まとめ

今回は、直近のやることをまとめた、いわばメモのようなものをかいたが、リリース前なので実装したい機能というよりは、バグ修正と最適化が主になっている。
次回くらいには、ここや私のWebページで「みくった〜♪」を配布したいと思っている。

2010年2月16日火曜日

みくった〜♪2 ちょっと作ってみた

みくった〜関連の記事しか書き込んでいないけど、それしかやっていないので。
ある程度インターフェイスがしっかりしてきたので、まだ殆どみっくみくにされていないけどスクリーンショットを公開する。なお、Ubuntu 9.10で撮影した。



これがフレンドタイムライン。いわゆるTL。モザイクの行は「toshi_a 伊吹萃香」のように表示されている。ツールバーの「つぶやく」ボタンや、各つぶやきにある「@」「RT」ボタンを押したらつぶやきを入力するスペースが現れる。普段表示しないことにより、つぶやきを少しでも多く表示出来るようになっているし、猫につぶやかれる心配も減るかもしれない。

目玉機能のマルチつぶやき機能。だけど名前を付けておかないとパクられたときに残念な気持ちになるので「Multi Mumble Input(MMI)」という名前を付けておく※1。つぶやきボタン等は、押せばいくらでも量産できるようになっているので、つぶやきを書いている途中で別のつぶやきにリプライを送りたくなったりしても、その内容をわざわざ覚えておいたり、書きかけのつぶやきを消す必要はない。それを覚えておくのはみくった〜♪の仕事なのだ。
※1 というか、パクられるまでになれたら嬉しいんだけど


リプライ画面。先ほどと基本的には変わらない。リプライ画面に限ったことではないが、カーソルを合わせたつぶやきが別のつぶやきへの返事だった場合、親つぶやきがツールチップで表示される。
表示方法はともかくとして、あるリプライが何に対してなのかが分からなくなることというのは、複数人と会話していたらよくある話だ。これが確認出来るクライアントが当然多く使われているはずだが、その数はそんなに多くないし、しかも大抵のクライアントでは相当確認が面倒だ。
・・・ということを考えると、現時点ではついったーでよく会話をする人に適したものになっていると考えられる。もちろん、通知機能、URLを開く機能など基本的な機能が揃っていないのでまだ使ってもらえる段階にも無いが、twitte.rbを超えるという最初の目標はすぐそこだ。

まとめ
今回は、現在の開発の進捗を報告した。今後の課題は、見た目がみっくみくにされていない点である。

2010年2月10日水曜日

みくった~1 バージョン1の全貌

ついったーでわいわい言っていたが、ちゃんとまとめてなかったのでまとめる。
前回は動機を語ったので、今回は短期目標を具体的に語る。

とりあえず短期目標として、最低限、他のクライアントにある機能はつけたい。もっとも機能が多いと思われる夜フクロウに勝てばいいだろうと思ってる。
しかし短期目標には目標が高すぎる感があるので、まず、みくった~にコードの一部をいただいたtwitte.rbにある機能を網羅し、それを以ってバージョン1としたい。
だけど、あのクライアントにある機能で実装しないものも多いので、ここに最初の搭載予定機能を書いておく。

まずタブには、フレンドタイムライン、リプライ、DM、設定が並ぶ。

DMのタイムラインは大体どのクライアントにもあるし、実装が容易なのでとりあえず実装するが、どちらかというとフォロワーのプロフィールからその人だけを絞ったりできるようにしたい。

つぶやき入力欄が特徴的で、デフォルトでは表示されていない。ボタンを押すことで次々と入力欄を作れる。

各つぶやきにはリプライボタンが付いていて、クリックするとその下につぶやきが入力できる。これも、複数の同時入力に対応している。

またあるつぶやきをダブルクリックすると、それがなにかに対する返信だった場合に、それを再帰的に辿ってタイムラインを作るので、何に対する返事なのかが一目瞭然になる。

設定がタブに埋め込まれているのは、ボタンを置くスペースが無かったから。右クリックメニューからしか開けない、ということにしてもいいかもしれないが、いちいちポップアップにする必要もなさそうだ。
設定項目は次のものを予定する。タイムライン、リプライ、DMの通知方法(inotify、サウンド、任意のコマンド)。アカウント情報。更新頻度。そしてフッダ。各プラグインに関して設定が増えると思うがいまはこんなものだろう。

とりあえず、機能としては何もないに等しいがこれくらいでリリースする(すごいのに期待してた人ごめんなさい。でもこれからだ)。近いうちに、将来つけたい機能もまとめる。

次回は、プラグインによる機能拡張について書く。と思う。


その他
今回はiPhoneから書いてみた。やっぱりキーボードがいい!

2010年2月4日木曜日

ついったーブラウザ「みくった〜」0

タイトルのとおり。今回は半分メモ書きみたいなもの。
今回は、Twitter(以下ついったー)のクライアントサイドソフトを作るために、いろいろ考察したことを、なかなか寝付けないのでまとめてみた。

何が問題なのか

既存のクライアントの問題、特徴の雑感。

1、必要な機能が削られている場合が多い
例えば、大体のついったークライアントはフォロー/フォロワー数一覧すら取得することが出来ない。これらはWebページ上で済む話だから実装されていないらしい。場合によってはふぁぼりも実装されていない。Linuxにはお世辞にも使えるとは言い難い代物が多く、DMすら実装されていないものもある。普段使わない機能は実装しないというコンセプトかもしれないけれど、それが行き過ぎて必要な機能まで実装されていないことがある。

2、安定していない
Linuxで顕著。文字通り。例えば、HTTPリクエストをメインスレッドで送ってしまっているのか、更新中に動作しなくなるクライアントが以外と多かったり、そもそも突然落ちたり。ここに関してはとくに言うことはない。安定したものを作らなければならないと思う。

3、情報を表示しない
これは普通にしていては気づかないことかもしれない。Computer Humanoid Interfaceを作ったことによって気がついた。例えばついったーではゆるいチャットになることがしばしばあるが、いくつもの話題が平行して進行するので非常に分かりづらい。こればっかりはどうしようもないと思っていたら、なんとAPIの戻り値には、どのツイートへの返事なのかがちゃんと書いてあるのだ。このように、開発者しか知らないことが結構あったりする(※当然、返信を再帰的にたどれるクライアントも存在する)。

4、Webのほうが総じて使いやすい
このブログが人気だったらすごく炎上しそうな見出し。上述のとおり、機能が少ないためだ。ただ、頻繁に行うことがやりやすい、通知機能が使えるなどの理由で、クライアントを使う価値はある。

今使っているクライアントの特徴

というわけで、見聞したクライアントをいくつか試した。とりあえず今使っているついったークライアントとその感想(括弧内は使っているOS。必ずしもそのOSでしか動かないわけではない)。

twitte.rb (Ubuntu)
CHIの参考にしたクライアント。Rubyで書かれてる。つぶやき、RT、メンション、DM、ふぁぼができる。新規タブを作って、簡単なフィルタでつぶやきを分類できる。
HTTPリクエスト中に(ry)というのはこれのこと。最近Ubuntuを使う時はあまりついったーをしていないのでそんなに使ってない。Linux用ももっと良い物があると思う。

YoruFukurou (Mac)
Mac専用であまり知名度は高くないみたいだけどMacでは一番使われている(気がする)。
twitte.rbの機能に加えて、ふぁぼったものの確認、公式RT、twitter検索タブの作成、TLからつぶやきのインクリメンタルサーチ、特定アカウントのプロフィールの確認、画像のクイックプレビュー、特定のツイートの親ツイートの探索、などができる。高機能な割には直感的に使える。PC用クライアントはつめが甘いものが多いが、このクライアントは極めてマシ。レビューしてるわけじゃないけどおすすめ。

twitbird Premium (iPhone)
有料ソフト(無料の時に落としたけど)。お金取っている分なかなか出来は良い。
YoruFukurouにある「インクリメンタルサーチ」「公式RT」は無いが、フォロー・リムーブ、公式リスト、ユーザ検索など、ブラウザとの切り替えが煩わしいせいか、多くのPCクライアントにない機能が実装されている※。アカウントを2つまで登録可能。Proは6つくらいいけるらしい。
※iPhone用クライアントでは別に珍しいことではないんだけれど

これだけ機能があればそれほど問題が無いようにも思えるが、実際に使うと様々不満は出る。まず、機能が豊富そうな夜フクロウだが、アカウント管理のあたりが非常に弱い。フォローするだけでブラウザのお世話になるハメになる(そのため、twitter.comをブラウザで開くボタンが画面の一番左上にある)。はっきり言って煩わしい。一方twitter birdはいちいちブラウザを立ち上げる必要もなく、相手の情報をほぼ全て見ることが出来る。

どのクライアントも込み入ったことは全てWebに任せているし、何より「ついったーをチャットとして使うため」の機能がいまひとつ整っていない。そんな用途で使わないという人も多いだろうけど、単純なサービスなのでいろんな使い方があるから、それに耐えうる物を作りたい。今の状態は「ついったー中毒になったと思っていたら、このクライアント中毒になっていた」ように見受けられる。

具体的にどうしたいの?

1、初心者でも使える
はっきりいって、操作が煩わしいものが多い。いつもデザインする時には心がけているが、見ただけで不安になるようなUIは、初心者はおろかあるクライアントに慣れた上級者もアレルギー反応を起こす。

2、情報がすべてユーザに見える
せっかくついったーが提供してくれている情報を使わない手はない。全て表示するのはやりすぎだが、ユーザが望むならアクセスできたほうがいいし、できないものがあれば後発のクライアントに機能面で容易に追い越される。

3、情報を活用できる
この間、ある特定のことをつぶやいたのが何時だったか思い出せなかったのだが、それを検索する手段が無かった。このように、せっかく膨大なデータを持っているにも関わらず、そのデータを活用できないことが多い。今、多くのついったーの2次Webサービスができてきているが、クライアントソフトならではの機能というものもあるはずだ。

4、クライアントにならない
本来の意味ではないが、ついったーに於けるクライアントは「頻繁に行うことを楽にする」ものになっている感がある(それを想定しているのかもしれない)。一方で私は全機能をカバーしたいと思っているので、クライアントではなくブラウザを作ることにしたい(例えば2chブラウザは全ての2chの機能を利用できるようだが、そういう感じ)。

今回はこのあたりで止めておく。まだ見せられる段階に来ていないのでスクリーンショットなどは見せられない。UIなども今考え中なので、できてきたら随時ブログに書いていく。
とはいっても、また書くのをサボるかもしれない。コードを書けばブログを書いてくれるBOTがあればいいのに(笑)

まとめ
・ついったークライアントだらしないね。
・歪みない“ブラウザ”をつくろう。
・不便を感じたら口より先に手が動くのは仕方ないね。

2009年12月28日月曜日

Syslogの内容をモールス信号でブザーから発音させる

まだ書いてなかったようなので一応。
サーバマシンには普通ディスプレイなどの出力装置はついていないことが多い。したがって、何かあればメールやついったーなどで知らせるのが当たり前だが(?)、私のサーバの場合、普段隣で動いているので、いちいちインターネットを経由するのは無駄であると言っていい。
そこで、唯一ついている出力装置であるブザーを使ってsyslogの内容を通知しようと思った。ただ単音では面白くないので、モールス信号で全てを読み上げさせる。

モールス信号を発音
今回のために、モールス信号を発音するためのシェルスクリプトを作った。標準入力から得られた英数字と記号をモールス信号で発音する。私のWebページにて配布している。
$ echo 'sos' | ./morse -h 120 -l 80

Syslogの設定
Debian lennyの場合、syslogではなくrsyslogが採用されている。したがって、/etc/rsyslog.confに以下の設定を追加する。
*.notice -/tmp/morse.tmp

FIFOを使えばよかったのだが、今回はとりあえずファイルでやってみる。

そして、以下のようなワンライナーを実行しておく。
$ tail -fn 0 /tmp/morse.fifo | perl -ne 'open(PIPE, "| morse -h 250 -l 40"); print;print PIPE; close(PIPE);sleep(3);'

これで、noticeレベル以上のログが記録されたタイミングで、モールス信号が発音されるようになった。

感想
ここまでやっておいて言うのもどうかと思うが、私は全くモールス信号がわからない。しかし、サーバから時々モールス信号が発せられていると、映画に出てくるマシンのようで非常に格好良い。贅沢を言うならタコメータがあればなお雰囲気はよくなるが、そこまで技量が無いので今回は残念だが見送った。
なお、今回はモールス信号が鳴っている様子を動画に収めた。300円もあれば購入できる出力装置なので、Linuxマシンが有るなら検討してみても良いのではないだろうか。

2009年12月26日土曜日

Computer Humanoid Interface

Computer Humanoid Interfaceというソフトを10月くらいから開発を始め、25日にリリースができた。マシンの監視のためのジョブを簡単に追加できて、出力はついったーに流せるので、「その時間に何が起こったか」を確実に残すことができる。
自然言語を理解したりするが、そのあたりの一切の処理はコアがやるので、ちょっとした管理スクリプトを組みたいだけなのにI/O関連の処理で時間をとられることがない。人間に指示を出すように簡単に機能を追加できるようにしたかったため、コンピュータの人間用インターフェイスとした。
これからブログには、CHIの機能をつらつらと書いていこうと思う。今回は、今後の展望を書く。

まず、プラグインで拡張できるので、逆に言えば簡単に取り外せる。プラグインは全てplugin/の中に入っていて、このうち絶対に必要なのはplugin.rbとmother.rbだ。あとは消してしまって構わない。
そうすると、何も監視しない、かつ何も出力しないCHIができあがる。一体こんなものになんの意味があるのか、と思われるかも知れないが、逆に言えば、ここからいかなるBOTでも創ることが出来てしまうのだ。
例えば、「〜食べたい」「〜たべる」などというポストがTL上に現れたら「〜おいしいよね」と返答するBOTを作りたいと思った場合、仮想コードだがだいたい以下のようになる。(なお、以下は次回実装予定の、フレンドタイムラインが更新されたときに1ポストごとに呼ばれる「onfriendtl」を使っている)


require 'utils'
require 'plugin/plugin'

module Plugin
class WannaEat < Plugin

def onfriendtl(watch, message)
if(message.body =~ /([^ 、。 ]*?)[食た]べ/){
return message.post(Message.new("$1っておいしいよね!", :tags => [self.name]))
}
end
end

end

# プラグインの登録
Plugin::Ring.push Plugin::WannaEat.new,[:friendtl]


以上のように、ついったーにつぶやく部分や、取ってくる部分はそもそも書く必要すら無い。しかも、onfriendtlのようなイベントハンドラが用意されているため(次回リリースからだけど)定期的に確認に言ったりする処理も書かなくて良いのだ。CHI付属プラグインは、このあたりにコンピュータの管理ロジックを書いており、必要なコマンドが無い場合は、プラグインの登録をしないようにしている(自動的にOFFになる)。

ここから考えられるのは、TwitterのBOTのフレームワークになりうる、ということ(というか、もうすでになってる)。つまりBOTが量産できる。
さらには、GUIフロントエンドをつけてしまえば、Twitterクライアントまで創ることが可能になる。これはなかなか面白い試みだと思っている。

ほかにも、設定ファイルへの簡単なアクセス(各プラグインの@configに、設定ファイルの内容が最初から入っている)、簡単なkey-valueデータベースの提供(at(:key)で取り出し、store(:key,val)で書き込みができ、再起動後も値が維持される)、画像投稿への対応(画像を含むMessageオブジェクトを渡されると、twitpicにアップするようになっている)など、BOTを創るにあたって必要そうな機能をだいたい持っているし、これからも短縮URLなどに対応する予定になっている。

2009年12月19日土曜日

Debian LennyにALSA入れて音を鳴らす

Bluetoothのスピーカーがあれば、そのスピーカーだけを持ち運ぶことができるので、端末から離れた状態でも音楽を聞くことができる。また、RubyなどでWeb上からmplayerなどを操作することができるようにしておけば、モバイル端末で曲の再生・停止ができる。これは、傍から見れば、宛らiPhoneでスピーカのWebサーバ(?)にアクセスして、スピーカ内の音楽を(w)再生しているように見えるのではないか。

しかし、GUIすら入っていないサーバでは、普段なら手動でやらない設定をいくつかしなければいけなかったので、それをここに書いておく。

環境
今回は、GUI及びサウンド関係のパッケージやソフトウェアが一切入っていないDebian lennyを使用する。
また、
$ lspci | grep Audio
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 01)

である。

パッケージ
今回は、ALSAを用いて音を出力するため、aptにて主要パッケージを入れる。また、サウンド再生ソフトとしてはmadplayを選択した。これは、コマンドライン上からmp3ファイルを再生するのに特化したソフトで、軽量で依存パッケージも少ない。
# aptitude install madplay alsa-base alsa-utils


ALSAの設定
この段階では、ALSAがサウンドインターフェイスに対する適切なドライバを選択できないのだが、それは自動設定に任せる。本来ならlspciの結果から適切なドライバをコンパイルするところだが、Debianとこのハードウェアなら必要ないらしい。
# alsaconf


カーネルモジュールの有効化
このままでは、私の環境では/dev/dspが見えなかったので、心当たりのあるカーネルモジュールの有効化をしてみる。
# modprobe snd-pcm-oss
# modprobe snd-pcm
# modprobe soundcore


鳴らしてみる
ここまでやって、以下のようにmp3ファイルをパラメータに渡してやると、見事サウンドが鳴った。
$ madplay packaged.mp3

なお、これでならない場合は、上記コマンドをrootユーザで実行するか、実行するユーザがsoundグループに入っている必要がある。

ビープ音を有効にする(2009/12/19追記)
以上の方法でスピーカを使えるようにすると、システムビープを鳴らす方のスピーカ(以下、スピーカ(笑))が鳴らなくなった。これは困るので、以下のように実行してpcspkrを有効にしておく。これで、サウンドボードの方からも、スピーカ(笑)でも発音が可能になる。
# modprobe pcspkr


感想
冷静に考えれば、音を鳴らすような基本的なことはGUIをインストールすれば難なく出来ているわけだから、逆に言えば最初から収録されているパッケージだけでできないはずがない。しかし、今回はステレオミニプラグでの接続だったため問題が簡単だったに過ぎない。次回は、これをbluetooth上で実行する。

おまけ
今回の設定中に、ALSAの設定を抜かしていたところ、なんとスピーカ(笑)で無理やり曲を再生し始めた。今にも壊れそうな音で、なんとか再生している様が不気味だった。