blogに引っ越しました。0.2.2から実績機能が追加されます。APIを使えば他のプラグインから実績を新しく追加することができます。どんな風に実績を追加するか、実際のコードを見てみましょう。これは、5favされたら解除される実績、「red_fav」を追加するプラグインです。値がアクティビティに表示されます(他に未解除の実績があれば、そちらが表示される可能性もあります。表示される実績は毎回ランダムです)。ここに解除の仕方を書いておけば、ユーザは起動する度にそれを一定の確率で目にするので、実績を解除する手助けになります。defacievement実装についてもう少し詳しく見てみましょう。defacievementというプラグインメソッドが今回の肝です。引数はスラッグ、第二引数には以下の値を指定します。起動時にアクティビティに表示されるヒント。実績のスラッグをシンボルの配列で指定する。指定された全ての実績が解除されていないとヒントが表示されない。trueなら、起動時にランダムに表示されるヒントの抽選対象に入れない。ブロックここには実績を解除するための条件を記述します。このブロック、そもそも実績が解除された状態では実行されません。解除するための条件なので、もう解除された状態では必要がないのです。...」という部分です。この中もプラグインの一部なので、こうやってイベントリスナを設定することができるのです。ブロックは一つの引数を取ります。これは実績オブジェクト(Plugin::Achievement::Achievement)のインスタンスです。実績の主要な情報を得たり、実績を解除するために使います。defachievementを呼び出す度にインスタンスが一つ作られる感じで、普段あまり気にするものではないです。呼びだせば実績が解除されます。ブロック内でセットされたイベントリスナやフィルタ(例ではon_favorite)が解除されます。それから、前提実績をチェックして、まだ解除されていないものがあればそれを待ちます。これは、前提となる実績より先に現在の実績が解除されるのを防ぐためです。この状態で前提実績が解除されたら、すぐにこの実績も解除されます。イベントが発火されます。achievement_took(Plugin::Achievement::Achievement)実績解除のメッセージはこのイベントをachievementプラグインが受け取った時に表示されるようになっています。実績解除をトリガーに何かをしたいということはあまり無さそうですが。プラグインに集約されています。以下のプラグインの100行目あたりから後は、全て実績の定義です。http://dev.mikutter.hachune.net/projects/mikutter/repository/revisions/develop/entry/core/plugin/achievement/achievement.rb実績を見てしまうとネタバレになるのですが、それぞれが全く異なった方法で実装されているので、これだけで例としては十分でしょう。このファイルの前半の方は、実績プラグイン自信の実装です。このプラグイン、mikutterプラグインとしても結構興味深いのですが、それについては別の機会に触れたいと思います。ヒントのタイミング最後に、一応、実績のヒント(hint)がユーザに提示される条件を説明しておきます。偽か未指定の実績のうち、ランダムに一つを選出します。その実績に上記条件に当てはまる前提実績があれば、再帰的にそれを辿って、最終的に一つだけ実績を選んでそのhintの値を表示します。前提とされている数が多い実績のほうが、表示される可能性が高くなりますね。前提実績が解除の邪魔をしているような実績のヒントは表示されません。ユーザには、mikutterを再起動する以外に新しいヒントを得る方法がありません。Twitterクライアントの使い方なんて一気に勉強するものではありません。覚えたらいいし、もっと言えばTwitterなんてしてないでとっととレポートを書くべきです。mikutterのせいで単位を落としたって、私にはふぁぼることしかできません。まとめ使えそうで使えない、楽しそうで案外どうでもいい、実績機能について紹介しました。変な機能なので、構想はかなり前からあったにも関わらず、0.2.1では導入を見送っていました。DRを言いたかっただけです。クラッシュすることがあったなーにが0.2.1最後のリリースになりますじゃ。設定が破損する問題はRuby1.9系でも顕在化してないだけで存在していました。.mikutter以下を守るためにさっさとアップデートしましょう。存在し、全ての環境に影響があります。バグフィックスが相次いで申し訳ないですが、ておくれにならないうちにアップデートしたほうがいいです。お友達にも教えてあげてください。Linuxにも来たんですが、結構これで起動できなくなった人がいらっしゃったようで、こんなにユーザが居るのかと驚きました(←呑気rcairoとかの調子が良くないようですね。rb_cCairo_Context」とか言われるやつです。1.2.3みたいなかんじのコマンドで、RubyGtk2をgemでインストールしてやると良いんじゃないでしょうか。再現できてないのでよくわかりませんが、RubyGtkをgemで入れたら治ったと言ってる人が結構いたので。うまく行ったのを情報共有すれば、インターネットが便利になると思います。ううん、bundlerを使ったらもう少し楽になるんだけど、残念ながら0.2.2からなんですよね(丁度そこの作業中)。1.2.4mikutterの使っているRubyGnome2の最新版がリリースされました。このバージョンには不具合があって、mikutterが起動できません。うっかりアップデートしないように注意してください。してしまった場合は、過去のバージョンを使用する方法が用意されているでしょうから、1.2.3以前に戻してください。現在問題の特定と報告をやってもらっているところなので、次で直る可能性もあります。いずれにせよ、このブログでこんな感じでお知らせします。最近寝ても寝ても眠いんですよね、なんとかならないかな。2.0対応をやってみました。2.0に上げたいけどmikutter動かなかった...という人はこれを試してね。0.2.2の開発中に、いくつかmikutterに致命的なバグがいくつか見つかったのでバックポートしました。今のmikutterを使っていてクラッシュしたと言う人はあまりいないでしょうが、何かの拍子にパターン入るかもしれません。バージョンアップしたほうがいいです。0.2.1のバージョンアップはこれで最後か、次があっても随分後になるでしょうから、特別な理由がなければバージョンアップしたほうがいいです。@negi_s)遅延対策Rubyの変更によってTwitpicを含む一部サービスの画像プレビューができなくなっていました。早かれ遅かれまっとうなディストリならRubyのセキュリティフィックスならすぐ適用されるでしょうから、すぐにmikutterをアップデートすることをおすすめします。0.2.2の季節がやって来ました!フロントの新機能をサクッと見て行きましょう!開発者向けの情報は別の記事にします。新しいプラグイン「achievement」をバンドルしました。「設定を開く」「ペインを作成する」などのアクションを実行すると実績が解除されます。毎回起動する時、まだ達成していない実績があれば、その中からランダムに一つの実績の解除方法をmikutter_botが教えてくれます。こんな機能を付けた理由は、ユーザと機能が増えてきて、気づかれない機能も出てきたからです。実績を解除していく事で、自然と機能に気づくことができます。実績は達成したら終わりなので、よくある起動時に出るtipsダイアログのように、毎回知ってることをガミガミ言われることはありません。たいした個数はないので、煩わしく感じることはないと思います。え、それを見返したい時はどうするかって?それはもうあるんだけどなぁ。この実績、サードパーティプラグインが自由に追加できるようになっています。各機能へのポインタとして使用してもいいし、他にも面白い使い方があるかもしれません。ショートカットキーショートカットキーに、システムで予約されているキーを使用できるようになりました。タイムラインでスペース、エンター、Ctrl+P等にmikutterコマンドを割り当てることができます。Windowロールのmikutterコマンドの正式なサポートも開始します。これによって、「設定を開く」がmikutterコマンドになったので、ショートカットキーに割り当てることができるようになりました。最近プラグインを入れすぎてキーを割り当てるのが大変という人に朗報。はい、インクリメンタルサーチができるようになりました。上のテキストウィジェットに文字を入力すると、キーバインドか機能名、または表示されてませんがスラッグの何れかに部分的に一致した行だけが表示されます。「あれ、Ctrl+Sってふぁぼ以外に何か登録していたかな?」という時に使ってみましょう。mikutterでは自分で全てのキーを割り当てられますが、そのせいでわからなくなることも有りました。これで少しは良くなったでしょう。ショートカットキーの割り当て画面も変更しました。コンボボックスを廃止して、表示域いっぱいにコマンドリストを表示するようにしました。先ほどと同じようにインクリメンタルサーチできるようになっている他、ロール毎にカテゴライズされています。こちらも少しは選びやすくなったかな。ん、キーバインドの下のスペースが気になるって?...君のようなカンのいいガキは嫌いだよ。サウンド新しく「sound」というプラグインを導入しました。サウンドプラグイン自体は音を再生せず、サウンドプラグインにルーチンを登録したプラグインの中から、ユーザが使うものを選べるというプラグインです。OS/ディストリによっては、ALSAが導入しづらく、効果音を楽しめない環境もありましたが、相応しいサウンドサーバプラグインを選べるようになったわけです。以下に格納しており、これを変更する手段は用意されてませんでしたが、コマンドラインオプションでパスを指定できるようになりました。読み書きするようになります。キャッシュやプラグインの位置だけを指定とかには対応していません。デーモンモード(仮)botを作るためにmikutterのフレームワークがつかえるようになりました。core/plugin内を全て削除します。本当に全て消すと役に立たなくなるので、restとstreamingだけ残しておきましょう。これで、ツイートを受信するだけで何もしないbotができました。あとはいつものmikutterと同じで、プラグインをインストールしていくと、いろんな機能をつけることができます。データの蓄積や、おしゃべりbotなども作成できるでしょう。Key/Secretを新規取得して書き換えてください。mikutterフレームワークを使って作られたのがTwitterクライアントのmikutterですが、デーモンとして使うという事は、すでにそれはTwitterクライアントのmikutterではないからです。遠くないうちに、mikutterフレームワークを別途配布したいと思っていますが、CK/CSを削除してプラグインを大半削除したものを配布することになるでしょう。うまく動きますが、まだこの機能は仮実装です。端末からデタッチするなどの機能がありません。興味があれば使ってみてフィードバックをください。その他メモリ効率が大幅に改善されました。私自身RubyGnome2プロジェクトにメモリリークを修正するパッチを送るなどかなり力を入れました。mikutter自体の実装も一部見直しました。稼働時間に比例してメモリ使用量が増加する傾向はありますが、今までとは比べ物になりません。いっても、改善はRubyGnome2のバグフィックスによるところがほとんどなので、是非1.2.1以降のRubyGtk2を使用してください。書き忘れていること分かってたら書き忘れんやろ試すには今回から開発用のメインリポジトリをGitに移行しました。現在Subversionは、リリース時にしか更新していないので、開発中のmikutterを試したい人は、WebページからGitリポジトリを探してきてください。0.2.2に搭載する予定の機能のうち、実装が終わっていて、且つユーザに関係することを簡単にまとめました。前回と違って、今回は期間の割りには多くの新要素を追加できると思います。正式版の提供は4月前後になりそうです。3月中にプレビュー版が出せるといいのですが。この年度末は、数年ぶりにデスマーチにならなさそうなので、3月にもかかわらずmikutterの開発を続けています。なんだか3月じゃないみたいですね。ありがたいことに心配してくれる人もいますが、そんな感じなので御心配なく。春が来てしまうので、寒いうちに彼女とデートしてきます。こんな事ばかりしていたらなかなか進まないんだけど、冬のデートっていいですよね。