mikutterの最新の情報は、mikutter blogに引っ越しました。

2011年11月27日日曜日

#mikutter 0.0.4, 0.1 rev.603

  • 0.0.4
    • 特定の条件を満たしたツイートを受信した時にクラッシュ
    • 同じ短縮URLのキャッシュが使われない場合があった
  • 0.1
    • 画像に対するリンクをポップアップで表示するようになった
    • 複数のPostBoxが存在している場合、いずれかを削除できるようになった
      • 空になっていることも削除の条件になります
      • ツイート失敗してから削除できるようにつけた機能です。通常は気にする必要はないです
    • 起動ロジックの書き直し
      • --profileオプションの追加
      • コマンドラインモード、デーモンモードを一度的に非サポートにしました。優先度低めで実装します
    • プラグインにコアライブラリの読み込みを明示的に書く必要が無くなった
      • 具体的には、miquireをプラグインに書く必要がなくなりました。書かなければ動かないという事があれば、バグです
わーいコミット600超えたー
0.1では大規模なリファクタリングばかりしていて、機能追加が全然ですね。
というのも、0.1でしたいと思ってることはあんまりなくて、掃除を主にやっていきたいなとおもってるんですよね。

追加したい機能で今のところ一番でかいのは、抽出タブの機能・UIを強化改善して、フレンドTLなどを取り払うというのが一番大きいでしょうか。TweetDeckのように、自由にタブを作る感じです。タイムラインにフィルタとかをつけることができるようになります。

あとはTLごとのイベント・フィルタですね。具体的には、タブごとに通知設定できます。
これ実はすごいことだと思いますよ。mikutterでこれを実装するということは、スレッドに対して通知が設定できるってことですからね。Skypeのチャットルームみたいに使えそうです。

とはいえ具体的にやりたいことをチケット化していないので、ちゃんとこのあたりもやらないといけないのだけど。

関係ないけどクリスマスにバージョン1.0は厳しそうです。いや、今の進捗的な意味でもそうかもしれないけれど、年末デスマーチフラグが建設されており…。やだなぁクリスマスに会社に泊まってたら横の家から愛し合ってる音とか聞こえてきたらやだなぁ

2011年11月19日土曜日

#mikutter 0.0.3, 0.0.4, 0.1 rev.592

  • 0.0.3
    • リストの設定を操作すると稀にクラッシュしていた
    • Twitterや回線の不調などの理由で、送信されずにずっと残り続けるツイートを削除できなかった
  • 0.0.4
    • ツイートを複数選択したあと右クリックすると、右クリックしたツイート以外の選択が全て解除されてしまっていた
    • Mac OSで動作させた場合にも、URLをブラウザで開けるようにした
  • 0.1.0
    • 適切にリンクが貼られないツイートがあった
ただのバグ修正です。深い意味はありません。

2011年11月16日水曜日

Activityについて

TwitterがActivity機能の提供を開始したようで。
これは、フォロイーのふぁぼ、リツイート、フォロー、公開リストの作成と追加を知ることができる。まだAPIは公開されてないし、それどころか一時的に機能停止したりといろいろと微妙な第一印象だけど、APIが公開されたらmikutterはどんなふうにサポートしていけるか、また何を追加すべきかを考えてみた。

ふぁぼ
現在、UserStreamを使えば自分のツイートのふぁぼられ、自分がふぁぼったツイートが取得できる。これに加えて、フォロイーのふぁぼりが取得できる。
mikutterでは、favstarのように各ツイートが誰にふぁぼられたかを表示する機能があるので、他人のふぁぼりも自然に表示することができる。
というよりは、UserStreamが発表されてからずっと、他人のふぁぼもわかるように成る時が来ると踏んでいて、こういうUIにしていた。今で約一年経ったが、APIが公開されればついに時が来るわけだ。
強いて言えば、自分に関係のないふぁぼは、TL上でageない、そもそも描画しないといった設定を作るべきだろう。

リツイート
現状でも、フォロワーのリツイートは見えるので、これがどのように表示されるかはご存知の通り。ここにさらに、フォロイーがリツイートされたツイートも入ってくる。
ここでも自分に関係のないものは表示しないようにするという選択肢があるといい。具体的に言うと、他人のツイートがフォローしていない人にリツイートされた場合は、自分に関係ないといえるはず。

フォロー
自分がフォローされたことは、UserStreamでわかる。ただし、libnotifyによる通知にしか対応していない。
また、フォロワーはフォロワータブで確認できる。

リスト
実は今のmikutterはList関連のイベントはだいたい無視してる。これは、取得した所で適切に表示する方法を持っていないからだ。
mikutterには今のところ、他人のリストを表示する方法はない。

アクティビティタイムライン
ということは、今のmikutterがアクティビティに対応するために致命的にかけているのは、せいぜいイベントをタイムライン表示することができないということだけだ。これがあれば、他の全ての機能はアクティビティ機能によって自然に強化されるだろう。

課題
単純に情報の流量が増えるので、今まで問題のなかった環境でも、パフォーマンスの問題が出るかもしれない。当然、そのためにアクティビティ機能は選択的に無効にすることができるようにするわけだけど、あったら全部使いたいよね。

まとめ
今からでも、システムメッセージのタイムラインなんかは作れるし、公開され次第すぐにでも対応したいところ。

2011年11月14日月曜日

#mikutter 0.0.3, 0.0.4, 0.1 rev.580

  • 0.0.3
    • 投稿中にしいたけを押せるようになった。投稿キャンセルができるように。
      • と思うじゃん?まだちゃんと動いてないんだなこれが
  • 0.0.4
    • なし
  • 0.1
    • Pluginモジュールをクラスに変更。PluginTagを廃止してPluginに統合。
    • 一部環境でmikutterが起動出来なかった
    • Ruby 1.8向けのコードを一部削除。
      • 多バイト文字の処理の違いを吸収するコードを削除したので、若干効率が良くなったはずです
うーん最近スランプ気味な気がする。全然コードを書く手が動かない。ミクに惚れた時以来だ。
サーバのrdocのバージョン上げて、テンプレートをdarkfishにしました。だからRDocがとても見やすくなってます。これでもう少し便利になったかな


Activity解禁おめでとうございます。mikutterは、ご存知の通り、他人のふぁぼも違和感なく表示することができます。だからはやくAPIを!公開して!ほしい!

2011年11月7日月曜日

プラグインが提供する設定項目とUI

プラグインを作っていると、設定を保存したいことが出てきます。ただの数字一つを保存するために、いちいちファイルに保存するのは非常にアレです。

設定値の保存と読み込み

そんなときは、UserConfigを使いましょう。以下のように使えば、mikutterの設定ファイルに設定を書き込めます。

UserConfig[:conftest_value] = 1

また、読み込みはこう書きます。

UserConfig[:conftest_value] # => 1

これは、全てのプラグインで共通なので、設定のキーの名前は、「プラグイン名_キー名」とするのが暗黙のルールみたいになってます。上の例の場合conftestプラグインですね。

手軽ですが、これをプラグイン間通信のために使わないでください。数少ない例外としては、表示の設定なんかは、設定用のプラグインが保存して、レンダリングするプラグインがその設定値を読みますが、そのあたりの裁量は空気を読みましょう。ベターな方法は、プラグインフィルタを使う方法ですが、まだ記事を書いてなかったので近いうちに書きます。すみません。

ユーザに設定させる

ユーザに設定してもらいたい項目が出てくることがあります。そんなとき、設定タブにプラグインの設定が追加できたら便利ですね。
mikutterでは、後から入れたプラグインが設定画面を新しく作ることができるようになっています。
以下は「表示設定」の設定画面を表示するプラグインです。先にいっておきますが、これが0.0.4ではちょっとマシになりました。ナウいやりかたは後述します。

# -*- coding: utf-8 -*-
miquire :addon, 'addon'
miquire :core, 'environment'
miquire :addon, 'settings'
Module.new do
container = Gtk::VBox.new(false, 8).
closeup(Mtk.group('フォント',
Mtk.fontcolorselect(:mumble_basic_font, :mumble_basic_color, 'デフォルトのフォント'),
Mtk.fontcolorselect(:mumble_reply_font, :mumble_reply_color, 'リプライ元のフォント'))).
closeup(Mtk.group('背景色',
Mtk.colorselect(:mumble_basic_bg, 'つぶやき'),
Mtk.colorselect(:mumble_reply_bg, '自分宛'),
Mtk.colorselect(:mumble_self_bg, '自分のつぶやき'))).
closeup(Mtk.boolean(:show_cumbersome_buttons, 'つぶやきの右側にボタンを表示する').tooltip("各つぶやきの右側に、リプライボタンと引用ボタンを表示します。")).
closeup(Mtk.boolean(:show_replied_icon, 'リプライを返したつぶやきにはアイコンを表示').tooltip("リプライを返したつぶやきのアイコン上に、リプライボタンを隠さずにずっと表示しておきます。")).
closeup(Mtk.group('リツイート',
Mtk.boolean(:retweeted_by_anyone_show_timeline,
'リツイートを表示する').
tooltip("TL上にリツイートを表示します"),
Mtk.boolean(:retweeted_by_anyone_age,
'リツイートされたつぶやきをTL上でageる').
tooltip("つぶやきがリツイートされたら、投稿された時刻にかかわらず一番上に上げます"),
Mtk.boolean(:retweeted_by_myself_age,
'自分がリツイートしたつぶやきをTL上でageる').
tooltip("自分がリツイートしたつぶやきを、TLの一番上に上げます"))).
closeup(Mtk.group('ふぁぼり',
Mtk.boolean(:favorited_by_anyone_show_timeline,
'ふぁぼられを表示する').
tooltip("ふぁぼられたつぶやきの下に、ふぁぼった人のアイコンを表示します"),
Mtk.boolean(:favorited_by_anyone_act_as_reply,
'ふぁぼられをリプライの受信として処理する').
tooltip("ふぁぼられたつぶやきが、リプライタブに現れるようになります。"),
Mtk.boolean(:favorited_by_anyone_age,
'ふぁぼられたつぶやきをTL上でageる').
tooltip("つぶやきがふぁぼられたら、投稿された時刻にかかわらず一番上に上げます"),
Mtk.boolean(:favorited_by_myself_age,
'自分がふぁぼったつぶやきをTL上でageる').
tooltip("自分がふぁぼったつぶやきを、TLの一番上に上げます"))).
closeup(Mtk.group('短縮URL', Mtk.boolean(:shrinkurl_expand, '短縮URLを展開して表示').tooltip("受信したつぶやきに短縮URLが含まれていた場合、それを短縮されていない状態に戻してから表示します。"))).
closeup(Mtk.chooseone(:tab_position, 'タブの位置', 0 => '上', 1 => '下', 2 => '左', 3 => '右')).
closeup(Mtk.default_or_custom(:url_open_command, 'URLを開く方法', 'デフォルトブラウザを使う', '次のコマンドを使う'))
plugin = Plugin::create(:set_view)
plugin.add_event(:boot){ |service|
Plugin.call(:setting_tab_regist, container, '表示') }
end
#Plugin::Ring.push Addon::SetView.new,[:boot]
view raw set_view.564.rb hosted with ❤ by GitHub


なんかまーやりたいことはわからないでもないけど、ちょっと大きいですね。あとRubyらしくないと思う人も居ると思います。
0.0.4からは、プラグインの定義中で、settings do ... end の中に、設定項目を書くことができるようになりました。

# -*- coding: utf-8 -*-
miquire :addon, 'addon'
miquire :core, 'environment'
miquire :addon, 'settings'
Plugin::create(:set_view) do
settings("表示") do
settings('フォント') do
fontcolor 'デフォルトのフォント', :mumble_basic_font, :mumble_basic_color
fontcolor'リプライ元のフォント', :mumble_reply_font, :mumble_reply_color
end
settings('背景色') do
color 'つぶやき', :mumble_basic_bg
color '自分宛', :mumble_reply_bg
color '自分のつぶやき', :mumble_self_bg
end
settings('Mentions') do
boolean('リプライを返したつぶやきにはアイコンを表示', :show_replied_icon).
tooltip("リプライを返したつぶやきのアイコン上に、リプライボタンを隠さずにずっと表示しておきます。")
end
settings('Retweets') do
boolean('リツイートを表示する', :retweeted_by_anyone_show_timeline).
tooltip("TL上にリツイートを表示します")
boolean('リツイートされたつぶやきをTL上でageる', :retweeted_by_anyone_age).
tooltip("つぶやきがリツイートされたら、投稿された時刻にかかわらず一番上に上げます")
boolean('自分がリツイートしたつぶやきをTL上でageる', :retweeted_by_myself_age).
tooltip("自分がリツイートしたつぶやきを、TLの一番上に上げます")
end
settings('ふぁぼふぁぼ') do
boolean('ふぁぼられを表示する', :favorited_by_anyone_show_timeline).
tooltip("ふぁぼられたつぶやきの下に、ふぁぼった人のアイコンを表示します")
boolean('ふぁぼられをリプライの受信として処理する', :favorited_by_anyone_act_as_reply).
tooltip("ふぁぼられたつぶやきが、リプライタブに現れるようになります。")
boolean('ふぁぼられたつぶやきをTL上でageる', :favorited_by_anyone_age).
tooltip("つぶやきがふぁぼられたら、投稿された時刻にかかわらず一番上に上げます")
boolean('自分がふぁぼったつぶやきをTL上でageる', :favorited_by_myself_age).
tooltip("自分がふぁぼったつぶやきを、TLの一番上に上げます")
end
settings('短縮URL') do
boolean('短縮URLを展開して表示', :shrinkurl_expand).
tooltip("受信したつぶやきに短縮URLが含まれていた場合、それを短縮されていない状態に戻してから表示します。")
end
select 'タブの位置', :tab_position, 0 => '上', 1 => '下', 2 => '左', 3 => '右'
select('URLを開く方法', :url_open_specified_command) do
option false, "デフォルトブラウザを使う"
option true do
input "次のコマンドを使う", :url_open_command
end
end
end
end
view raw set_view.565.rb hosted with ❤ by GitHub


ずいぶんすっきりしましたね。
この方法のメリットは、

  • ラベルと設定値と、最低限のUIの指定(候補から選択、キーボードで入力、ON/OFF等)だけになっている
  • RubyGtkを使わないので、実装が変わっても、RubyGTKを知らなくても簡単に書ける
とかがあります。

settings内で使えるメソッドの一覧は、core/addon/settings/builder.rbで定義されています。rdocあると思ったんだけど、プラグインなのでrdoc生成してません。コメント読んでください。

基本的には、第一引数がラベル名で、第二引数がUserConfigのキーです。ユーザが変更したら直ちに値がセットされます。

余談ですが、こういう適当にかいてることを、Wikiにまとめようと昨日あたりから動き出しました。だからもうちょっと丁寧な説明がまとめられるかもしれません。
そういうでかいマニュアルあまり書いたことが無いので、1分でわかるiPhoneアプリ開発みたいな本適当に読んでパクろうかなぁ

2011年11月4日金曜日

#mikutter 0.0.4, 0.1.0 rev.571

  • 0.0.4
    • コンソールから実行するRubyスクリプトにフッダがつく
    • URL再帰展開が上手く動かなくなっていた
    • SubpartsVoterのレンダリングの最適化
    • プラグイン独自の設定画面を提供するための新しいAPIを提供
      • ドキュメントは近々
    • 稀にクリックしても開けないURLがあった
  • 0.1
    • 次回バージョンを0.1としました
先週、風邪でリリース出来なかったので、今やっちゃいます。
trunkのバージョンを0.1にしました。それに伴い0.0.4のbranchを作成して、不安定版としてリリースします。

0.0.4は、Ruby1.8では警告が出て普通には起動できません。実用に耐えるほどのレスポンスが担保できないためです。
また、0.1では、Ruby1.9の機能を積極的に使って行きます。なので、今後0.1をruby1.8で使うと、Syntax Errorとかで起動しないと思います、多分。どうしてもRuby1.8で使いたい人は、0.0.3を使ってください。ubuntuならはやく11.10にうpgらですればいいと思いますの。

0.0.3は、よほど深刻なバグがない限りコミットしません。何かあれば開発者に教えてください。

Ruby1.9.3おめでとうございます。
mikutterも、Ruby1.9.3を積極的に使っていきたいと考えています。動作報告もあるので、暇な人はアップグレードしたら面白いかも知れません。