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

2014年12月25日木曜日

#mikutter 3.2

mikutter 3.2 をリリースします

http://mikutter.hachune.net/

追加機能の詳細については、mikutter 3.2の予定をご覧ください。


  • 画像表示機能の内部処理を変更
    • 画像の表示が遅いことがある問題を改善
    • ロードできた部分から表示
    • ブラウザで開く・画像を閉じるなどのUIの改善
    • 以下のサービスに対応
      • totori.dip.jp
    • 以下のサービスの対応を廃止(需要の割に対応が難しい、サービスが消えてた等)
      • plixi
      • Tumblr photo
      • yfrog
    • サードパーティプラグインから画像取得ルールを追加できるようになった
  • 抽出タブ・抽出対象の条件を追加できる機能
  • スキン機能(試験的な実装)
  • アイコンを変更
mikutter五周年の日にmikutter 3.2がリリースできることを大変嬉しく思います。これも今まで支えてくださった皆さんのあれだと思います。ありがとうございます、これからもmikutterをよろしくお願いします。

今回は前から気になってた、プラグイン開発者として俺が触りたいのに外からではどうしようもない部分を改善しました。おかげで著名なプラグイン subparts-image が動かなくなっているので今からpull-reqを送ってきます。いわばシムシティみたいなものなんですよね。それ以外はとくに大きな問題はないでしょう。

画像まわりの使い勝手は個人的には気に入ってます。ダウンロード機能も付けたかったのですが実装が間に合わず今回はペンディングとしました。画像をブラウザで開くのがツールバーになっているのは、ここにそういった他の機能が乗るためです。
ただ、稀に画像のロードに失敗するとか、不具合が取りきれていないことがわかっているのが現状です。しかし、品質を疎かにしてまで日を合わせやがったとは思わないでいただきたい。バグを分かっててリリースするのと、知らずにリリースすることに本質的な違いなどありません。それにね、よく考えてもみてください。いい年なのに彼女もおらず、クリスマスイヴに私にふぁぼ爆撃したり、やれRuby2.2だ、mikutter 3.2だ、とか言っているmikutterユーザの人生に含まれる不具合のほうが深刻です。かたや画像たまに表示できない問題なんてもう一回開けばいいだけです。こう考えると、リリースに踏み切ったことにも納得できますね。ごめんなさいちょくちょく修正していきます。

本日はmikutterだけではなく、Rubyのお誕生日でもあります。本日リリースされたRuby 2.2 ではmikutterの検証をしていませんが、概ね問題がないらしいです。今回の変更ではmikutterの動作速度が上がることに期待できそうです。今のところRubyの進化の恩恵を毎回受けることができているので、今回も楽しみです。

最後に宣伝ですが、コミックマーケット87の3日目(12/30)に、mikutterの薄い本vol.7が頒布されます。詳しい情報についてはリンク先を見ていただけば良いのですが、私も寄稿しているmikutterの薄い本が、金さえ出せば買えるまたとないチャンスです。十分な部数があるようなので、ゆっくり来てください。当日は私もブースにいることが多いと思うので、握手しましょう。

また、同ブースに私の個人サークル「アトリエとしぁ」の初の画集を1部のみ委託します。

12枚か13枚くらい、全て私が描いた絵です。無印で買った無地の絵本に描いただけなので、世界に一部しかない、非常に貴重な作品です。これがなんとたったの400円!mikutterの薄い本のたった200%の値段でお求め頂けます!無印の絵本が315円なので、ほとんど利益はございません!これは私が会場に着くまで買うことができませんので、購入できるかどうかは完全に運です。買えたひとは本当にラッキーです!

そんなわけで、今年はコミケでお会いしましょう!皆さん、よいお年を!

#mikutter 3.2をハックする

mikutterアドベントカレンダー20145 25日目の記事です。

mikutter 3.2で新しく追加されたプラグインの機能拡張について、一通り見てみましょう。

画像サービスに対応する
twitpicやinstagramみたいな画像をアップロードすることを主とするサービスや、d250g2.comのような画像の提供が主となるサービス(便宜上まとめて画像サービスと呼びます)を、画像プレビューのウィンドウで表示できるようになりました。

ルールを追加してみる
今まで、画像を開くのはopenimgというプラグインが担当していました。これからは、画像をロードしてUI上に画像を表示するのはopenimgで、あるURLから画像自体を取得するのはphoto_support プラグインが担うことになります。

実際に photo_support プラグインを見ると、どうやって画像を開くのかわかると思います。
これはTwitpicのルールです。一番オーソドックスなルールを持っています。
今までのopenimgは、openimgプラグインに付属しているJSONファイルを編集してルールを追加していたので、サードパーティプラグインから追加する方法はありませんでした。
また、openimg自体も正規表現を駆使して画像を探すなど素晴らしい実装になっており、今回openimgを作りなおすに当たっては本当に難儀しました。数年前に自分が書いた、正規表現をゴリゴリ使ってスクレイピングするコードをメンテナンスするってなかなかつらいものがあるんだなあ。

今回このように一つひとつの画像サービスに対するルールをコードで現すようにした経緯は前のエントリで説明しましたが、もともと3年くらい前は全部のルールをコードで書いていました。それをやめた時の反省をせず戻すわけにはいきません。

で、JSONのようなデータ構造を採用したのは以下のような問題を解決するためであって
  1. 画像サービスってちょいちょいルールが変わるので、バージョンアップしなくてもルール配信できるようにしたい! 
  2. まとめないとコードが恐ろしいサイズになる
それぞれ以下のように解決しました
  1. 画像サービスはTwitterに死刑宣告されたからか、もう頻繁にDOM構造が変わることがなくなった。そもそも利用頻度が低い(今回この改修をしてるときにyfrogが見れなくなっていることに気づいたが、誰からも報告が来てなかった)。
  2. Nokogiri,HTTPClient,OpenURIあたりを積極的に使ったらJSONと同じくらいの行数のコードに収まっちゃった
まとめ
  • openimg と photo_support に分けたので、取得ルールと表示部分が分かれて良かった
  • ルールは全部コードに書くことにしたので一箇所にまとまって良かった
  • ルールはNokogiri使って書くことにしたら分量が減ってわかりやすくなって良かった
  • ルールは他のプラグインからも追加できるし最高
自分のプラグインから画像を開こう
この変更でユーザが新しくできるようになったことで一番重要なのは、自分のプラグインからopenimgを利用できるようになったことです。まず、mikutter 3.2 で Alt + x を押して mikutter console を開き、以下のように入力して CTRL + Enter を押してみましょう。

Plugin.call(:openimg_open, 'http://twitpic.com/d250g2/')


画像のURLをクリックした時と同じように、画像が表示されたと思います。ただのイベントですから、あなたのプラグインからも同じ方法で画像を表示できるのです。
注目すべきは、URLから画像を探しだし、それを表示したということです。実は、photo_support や他のプラグインで定義されたルールがこの時に使われます。これは強力ですね。mikutterを起動する度に同じ画像を勝手に開くことも可能です。当然、3.1までは他のプラグインからこのようなことは出来ませんでした。

画像をダウンロードしよう
次は画像自体をダウンロードしてみます。
次のコードを実行してみましょう。

画像をダウンロードするのでちょっと時間がかかるかもしれません。
終わったら、 ~/.mikutter/tmp/d250g2.jpg というファイルができていると思うので見てみましょう。燃えているのではないでしょうか。

簡単に説明すると、フィルタ openimg_raw_image_from_display_url を使うと、URLをダウンロードした結果が流れてくるIOオブジェクトが第二引数に渡されます。あとはそこから IO#read で受け取れば、画像のダウンロード完了です。これもちゃんと画像サービスのURLから実際の画像を探してダウンロードしていますね。それがなければ、このフィルタの存在する意味がないんですが。

ルールを追加してみるの節で、 defimageopener のブロックが、open() で終わっているのが気になった人がいるかもしれませんね。あの戻り値が、このフィルタのIOです。つまり何が言いたいかというと、ダウンロードが終わったら、そのIOは、フィルタを呼び出した側がcloseしてください、ということです。尤も、GC時に自動的にファイルディスクリプタは開放されると理解してるんですが、IO閉じないのって他のオブジェクトより罪悪感があって…

抽出タブの抽出対象
うまく伝わるタイトルは思いつかないのですが、要するにこれを増やす機能です。
標準では、ユーザ名・本文・Twitterクライアント名を使用できますが、もっとほかのことを基準に抽出したい!ということがままあったので追加できるようにしちゃいました。はい、こんな感じのコードで追加できます。



これは、Ruby 2.0から使えるキーワード引数を使っているという意味でも面白い例です。キーワード引数が何なのか知らない人は、12/30に東京ビッなんとかで行われるコミックなんとかの、西2 く-30a mikutterの薄い本製作委員会 ブースに来てください。私も行くので、本物のmikutterをお見せしましょう。

defextractcondition(:bio, name: "bio", operator: true, args: 1)

などと書いていますが、これは見て分かる通りbioで抽出するやつを追加します。name: は上のスクショのコンボボックスに表示する名前ですね。operatorとargsはおまじないです。…と言っても、敬虔なmikutterユーザ諸君は「おまじない」では納得できないでしょう。そういう方は、12/30に東京ビッなんとかで行われるコミックなんとかの、西2 く-30a mikutterの薄い本製作委員会 ブースに来てください。私も行くので、本物のmikutterをお見せしましょう。

あとはブロックの方がキーワード引数を要求してますね。 argument はスクショで言うところの右のテキストボックスに書かれた内容です。その左隣の「=」とか「含む」とかの条件ですが、 &compare がその条件でうまい具合に比較してくれる奴です。message: は抽出対象の message が一つ渡されます。つまり1ツイート毎に1回このブロックは実行されるので、ここではあまり重い処理をやるとロクなことがなさそうです。実際には、重い処理はどんな場所でも大抵ろくなことになりません。現実は厳しい!社会は厳しい!

それで、コメントになっている部分ですが、これはそのすぐ下のシステムメッセージを抽出するための条件と同じものです。システムメッセージは二つ見どころがあって、ひとつは引数や比較方法がない条件だということ、もうひとつは、defextractconditionにはS式も渡せるということです。コメントアウトしてる部分は、ブロックがなくなり、こんな引数が追加されていますね。

MIKU.parse("'(system? message)")

これをmikutter上で実行すると、以下のような値が返って来ます。

(:quote (:system? :message))

そのまんまですね。mikutterの抽出タブの条件がS式になっていることは有名ですが、まさか抽出対象がS式でも渡せるとは…たまげたなあ。
流石にこれは闇が深いのでこれ以上掘り下げることはしません。S式にすることの意味は速度・メモリの効率です。抽出対象をS式で指定すれば、マクロみたいな雰囲気で全体の条件の中に展開されるので、単一のRubyコードに変換されます。一方で、ブロックだとブロックを呼び出す準備で余計な処理が入ります。ブロック呼び出し自体もありますし。

で、確かにこちらのほうが速度的には有利になりますが、実際計測してみると思った程でもありませんでした。ラピュタに突っ込む気でいるなら気になるかもしれませんが、毎秒2,3ツイート程度ならどうでもいいんじゃないでしょうか。完全な悪ノリでした。mikutterも悪ノリみたいなものなので、抽出タブの条件周りはmikutterの本質のひとつなのだと思います。こういう側面を知らなかった、もっと知りたいという人は、12/30に東京ビッなんとかで行われるコミックなんとかの、西2 く-30a mikutterの薄い本製作委員会 ブースに来てください。私も行くので、本物のmikutterをお見せしましょう。デコにとんでもないものをくっつけてお待ちしております。

あとがき
サードパーティプラグインがどのような恩恵を受けられるのか、という観点からmikutter3.2で行われた変更を見てみました。どちらもコア機能の変更はとくになく、表層的な変更ですが、そんなに需要はないと思います。しかし需要はほとんど気にしていないので、こういうこともあるよなあといった感じです。

内容に関してはもっと具体的に掘り下げても良かったんですが、なかなかこういう記事では難しいものですね。別の話ですが、writing mikutter pluginとは別に、やりたいことからリファレンス的に引けるドキュメントを考えてるしそっちで補えたらなーとか思いつつ、そもそも書けるのかとか、うーん。


mikutterアドベントカレンダーの最終日・mikutter5周年ということで、今年一年のmikutterについて振り返ろうかなとも思ったのですが、ここ数年は、正月に一切のタスクから開放された状態でゆっくり書く感じだったので、今年もそんな感じで行きたいと思います。
そんなわけで簡単に、mikutter、誕生日おめでとう。来年もよろしくお願いします。

2014年12月23日火曜日

#mikutter 3.2 の予定

まもなくmikutter 3.2がリリースされますね(棒)。
12/25には正式にリリースされて、5日後には、コミケのmikutterの薄い本製作委員会のブースで頒布される「mikutterの薄い本 vol.7」に、mikutter 3.2についての私の記事が掲載されていますね(棒)。
3.2を12/25にリリースすれば何も問題ないはずですよね。では、3.2では何をする予定なのかを確認してみましょう。

アイコンテーマ(仮称)
mikutterのUIのアイコン郡を差し替える機能です。アイコンをまとめたファイルを所定の位置に置いて、設定画面でどれを使うか設定すると、mikutterが用意しているアイコンを別のものに置き換えることができます。
ユーザとしては、使用しているWMのテーマにあったアイコンを選ぶ・作ることができるようになります。
プラグイン開発者としては、この変更に伴って提供する skin DSLメソッドを使えば、画像ファイルの指定をより簡潔にできるというメリットがあります。

この変更はまだ試験的な機能です。3.3で大幅に変わる可能性があります。

openimg 2
トトリちゃんの画像を楽しめるWebサービス
http://totori.dip.jp
を表示したところ。イワシがいっぱいだあ。

openimgプラグインは画像の表示機能を提供していますが、使い勝手が微妙に悪いところがありました。
また、最近サードパーティの画像アップロードサービスがいまいち息をしていないとか、開発当初からとりまく環境が大きく変わってしまったプラグインでもあります。

単なる画像取得の手段としてサードパーティプラグインと連携
openimgは、d250g2、地獄のミサワなどさまざまなサービスに対応した強力な画像取得ルーティンをもっていますが、このインターフェイスはプラグインの中に閉じてしまっていていました。
openimgの画像取得部分を公開することで、画像を扱うプラグインはそれを利用できるようになります。

サードパーティプラグインが画像取得ルールを提供
従来は、openimgプラグインに付属しているJSONファイルに、例えばtwitpicの画像を取得するためのルールが書いてありました。
この方法では、openimgが想定しないような複雑な方法を使ったルールでの取得が出来ず、実用的には無理が出てくる場合がありました。現実に、いくつかの写真アップロードサービスについては、openimgに別途コードを書いて対応しているような状況がありました。
そこで、いっそのことURLを画像URLに展開するようなフィルタを用意して、写真アップロードサービス毎にリスナを登録するアプローチに変更することにしました。こうすることで、openimgプラグイン以外から、画像取得ルールを登録できるようになりますし、ルールがJSONファイルとRubyコードに散らばらなくなりました。

一方で、毎回コードを書くとなると、メンテナンス性が問題になってきます。これはスクレイピングの部分にNokogiriを使用することで、コードを単純にしました。mikutterからWebページをスクレイピングするようなプラグインなんて普通書かないと思いますが(棒)、これからは標準プラグインが要求するので気兼ねなくNokogiriを使えますね。

振る舞い
画面をクリックでブラウザを開いてウィンドウを閉じるという挙動がなくなりました。
閉じるにはウィンドウマネージャの閉じる機能を使ってください(ここにもmikutterコマンドを割り当てたかった)。
ブラウザで開くには、ツールバーに投げやりな感じのアイコンがあるのでそれを押します(mikutterコマンドry)。ここに入れたい機能がほかにもいくつかあるのですが(mikutterコry)。
画像の表示部分も書きなおして、画像のダウンロードが終わったところから表示されていくようになりました。

画像プラグイン→メディアプラグイン?
今までopenimgは画像に拘ってきましたが、最近のTwitter全体の動向を見ていると、動画なんかも気軽に投稿できるようになってきています。動画に対応する予定は今のところありませんが、今回の変更は、そういった将来の変更も見据えてのものです。

抽出タブ
抽出対象の拡張
抽出対象とは、抽出条件の「名前」「本文」などのことです。これには他に、Twitterクライアントでフィルタしたいという要求もあったので、一応それも入ってはいます。
ちょっと使っているぶんにはこれで足りるかもしれませんが、もっと高度な条件を指定したいかもしれません。
そもそもmikutterのツイートを現すオブジェクト Message には、もっと多くの条件になりうるメソッドが実装されていますが、今使っているのはそのほんの一部であるというのが現状なわけです。
現状だとコードを書いて自力でフィルタしたものをデータソースとして提供するという方法もあり、実際に鍵垢のツイートだけ流れてくるデータソースというものも提供されています。
抽出対象の拡張ができるようになることで、こういった要望について、より自然に答えられる場合が出てきます。

まとめ
3.1からあんまり空いてませんが、期間のわりにはいろいろできたみたいです。ちょっと詰め過ぎた感じもしますが、来年はまた4月までほとんど動けないことを考えると、差し引き調度良い感じかもしれません。
実は今alpha1を上げました。いくつか既知のバグがあるので25日まではそれを取って、25日のどこかで正式な不安定版としてリリースします。数年ぶりのクリスマスリリースになりそうです。
大体年末は仕事はたいしたことなくてmikutterでてんてこ舞いなのですが、今年は会社が大型案件をぶつけてくれたので泣いています。とにかく、最低限思ってたことはやりきれそうなのでよしとしましょう。

そんなわけで、動作確認おねがいします!

2014年12月14日日曜日

帰ってきたあひる焼きゲーム

<< 13日目 mikutterアドベントカレンダー2015
あひるをやっくのっはたのしいな♪

ある日あひるを焼いていると
怒られました。
どうも自動であひる焼きに反応するmikutterプラグインを書いたようです。
mikutterプラグインを書きたいと言っている人は基本的に書かないので無害ですが、何も言わずにふっとプラグインを生み出す人間にろくな人は今まで居ませんでした。あひるさんもろくな人間ではないのでしょう。

https://github.com/Na0ki/ahiru_yakuna

うわぁ…。今見たらyamlファイルに反応バリエーションが出してあるし…。順調に腕を上げてますね。pull-reqも受け取って比較的活発に開発しているようなので、こういう人は早めに潰しておかなければなりません。

作った

帰ってきたあひる焼きゲーム!
https://github.com/toshia/ahiruyaki

あひる焼きをソーシャルゲームにしました。mikutterの機能をフル活用してあひる焼きを楽しみます。フロント側の機能はREADMEに書いているので、裏で何をしているかちょっと紹介します。

RANK_TABLE
あひる焼きランクは、経験値を溜めると上がっていきます。経験値は減ることはありません。次のランクに上がるために必要な経験値をグラフ化してみました。
途中からやたら経験値が要るようになりますね。計算式は謎めいたものを使っていますが、深い意味はありません。詳しくはソースの6行目あたりからですが、無駄にEnumeratorを使用しているのがポイントですね。こういうことをすると、Enumerable#find で、ある経験値だとランクいくつになるか、というのがわりと直感的に書けます。

Plugin::Ahiruyaki::RANK_TABLE.with_index.find{ |exp, _|
  UserConfig[:ahiruyaki_exp] < exp }[1] + 1

だからどうした感が半端ない。効率はメモ化した再帰関数のほうが良さそうですが、一方でどう見てもボトルネックになるような処理ではありません。

スタミナ
ソーシャルゲームならスタミナがなければいけません。スタミナはランクアップで全回復して、行動によって消費し、時間経過で全回復します。また、スタミナには最大値があります。これはランクアップで上がっていくので、ランクから計算できます。更に、初めてゲームを遊んだ時はスタミナが最大になっているというのもポイントです。
今回はスタミナを数値で保持せず、スタミナが全回復する時刻を保持して、そこから現在のスタミナ値を決定しています。この方法のメリットは、スタミナ回復のことを常に考える必要がないことです。Time.now の戻り値を代入すれば即時回復できますし、mikutterを終了している間もスタミナが回復します。スタミナを消費した時は全回復時刻に加算すればいいだけですし、次回のスタミナ回復時刻が10秒後という時にスタミナを消費した時に、5分にリセットされるとかいうこともありません。
これはいい方法ですね。良い方法なので、多分本物のソーシャルゲームもだいたいこうなっているんじゃないか、という多分一生役に立たない知見を得ることができました。いや、思っただけなので知見でもないですね。本当に得るものがない。

また、 expend_stamina というメソッドは、消費スタミナ値を引数にとり、そのぶんだけスタミナを消費してブロックを実行します。スタミナが足りなければブロックが実行されないし、ブロックの処理途中で例外などで抜けたらスタミナが減らないので便利です。

イベント駆動
今回このプラグインを書くにあたっては、イベントをできるだけ使うようにしました。例えば、経験値は add_experience メソッドでのみ増加しますが、この経験値の増加でランクが上がると、ahiruyaki_rankup イベントが呼ばれます。最大スタミナ値などほとんどのものはランクから自動計算しているので、経験値が上がった瞬間自動的に上がりますが、スタミナの回復だけは処理してやらないといけないので、このイベントをキャッチすることで行ってます。
イベントはどのプラグインでも受け取ることができるため、あひる焼きゲームはMODの開発が簡単です。
とくに、スタミナが全快した時に発生するイベントは、全快したら自動であひるを焼くなど、さまざまな用途に使えそうです。
こういうことをしておくと、ユーザは予想外の意味不明な拡張をしてくるものです。mikutterで何度もそういうことを経験しました。何だよ、あひる焼くなプラグインって。

終わりに
結局、焼きあひるに油を注ぐ結果になっている感じがしてなりません。ゲームのアップデートもしたいのですが、忙しい時期なので、ほかのタスクに圧されて手がついていない状態です。
たまにこういう役に立たないものを書くと心がやすらぎますし、いろんなものを得た気になれるので(実際はそんなことはほぼない)、皆さんもやったら良いと思います。

2014年12月13日土曜日

mikutter-mode

<< 12日目 mikutterアドベントカレンダー2015 14日目 >>
こんにちは。ネタができたので書こうと思います。本日はmikutter-modeのある開発環境についてです。

mikutter-modeとは
Emacsでmikutter開発/mikutterプラグイン開発をするためのelispです。あ、elispっていうのはEmacs Lispで書かれた、あっ Emacs Lispというのは…

Emacsでないと意味のない内容なのか
そうではありません。例えばVimmerと呼ばれる人々は、Emacsでできることを大抵Vim上で実現してしまう習性を持っています。こういった記事をたまに書くことで、他のエディタ/IDEからやばいプラグインが生えてくるのは珍しいことではありません。

過去に触れている記事
実はmikutterの薄い本vol.2 の私の記事「プラグイン開発のベストプラクティス」 にて、
これについては触れています。
ただ、この記事は2012年夏に公開されたもので、その後の変化についてはとくに触れられていないので、あれからやったことを中心に書いていきます。

インストール
このあたりは特に変わってないのでざっと。

Emacs
まず、 mikutter-mode をチェックアウトして、elispよろしく ~/.emacs.d/ 以下とかそういうところに設置します。
Emacs側からは、この中の mikutter.el をロードするようにしましょう。
一応、私はこんな感じのことを書いてます。
変数 mikutter:dir には、mikutter.rbが入っているディレクトリを指定しましょうね。 e2wmを使っている場合、おまけでついてくる mikutter-parsepective を使うと、以下のような画面になって良い感じです。
mikutter
mikutter-modeの plugin/ 以下に、 mikutter_mode というディレクトリがあります。これがEmacsと連携するためのmikutter側のプラグインです。こちらも、このディレクトリを ~/.mikutter/plugin/ に設置します。

mikutterを起動
関数 mikutter-mode を実行すると、mikutterがデバッグモードで起動します。普通にコマンドとかから起動するのと違って、バッファ *mikutter-log* から、デバッグ出力が参照できます。

コード実行
ここからはmikutter-modeを導入しているmikutterなら、Emacsから起動されたものでなくても良いです。
mikutter-modeがインストールされている状態で、mikutterプラグインのソースを開いて C-c C-c と入力すると、mikutterに今表示している内容でプラグインがインストールされます。
mikutterで Alt+xを押してコンソールを開き、そこにプラグインをコピペして実行、という方法を取っている人もいるかと思いますが、 mikutter-mode を使った場合、Emacsからすぐに実行できることに加え、実行前にプラグインをmikutterから除去してくれるので、イベントハンドラが無限増殖しないといったメリットがあります。

選択範囲のコードを実行
mikutterのコードを開いている時に、コードの一部をリージョンで囲い(文字を選択)、 C-c C-c を押すと、バッファ全体ではなく選択したコードがmikutterで実行されます。もちろんこの場合はプラグインが一度除去されるようなことはありません。
なお、C-c C-c と、 C-c C-e で実行されたRubyコードの実行結果は、 *mikutter-result* に出力されます。mikutter-parsepective ならめっちゃ便利。

Emacs上のmikutter console
mikutterコンソールはmikutterの標準機能で、起動中のmikutter内でRubyのコードが実行できるので便利です。mikutter-modeも同様の機能を提供しています。Emacs側で関数 mikutter-console を実行すると、 *mikutter-console* というバッファが開いてきます。
これはただのmikutter-modeのバッファなので、前述のコード実行のキーが使えます。
用途としては、標準のコンソールと同じだと思います。ただし、こちらの場合はEmacsやruby-modeが提供するシンタックスハイライトや補完機能が使えるので、できるだけこちらを使ったほうが良いと思います。

プラグインが動く最小構成のmikutterを作る
これはついさっきやったアップデートです。
mikutterは、ツイートの取得でさえプラグインで実装されているということはご存知のとおりです。
プラグインというのは、入れることも外すことも自在にできるものです。標準プラグインだって外すことができます。
このことが何に使えるかというと、mikutterプラグインを開発する時に、不要なプラグインを取った環境を構築して、そこでプラグインを開発するということが可能になります。起動も早いしそのプラグインだけに集中できるのです。

これを手動でやると従来は大変でした
  • mikutterのディレクトリをコピー
  • いらないプラグインを消す
  • ./mikutter.rb --confroot=適当なディレクトリ でmikutterを別プロファイルで起動
 mikutterの --plugin オプションを使うとプラグインを消す必要がなくなって、例えば以下のようにすると home_timeline と rest プラグインだけがロードされた環境で起動できます。home_timeline は gui と gtk と uitranslator に依存しているので、この指定だけでバッチリ適切な言語でGUIが表示されます。

$ mikutter.rb --plugin=rest,home_timeline

これで確かに起動はするのですが、次普通にmikutterを起動すると、タブやペインの構成がぐっちゃぐちゃになっていると思います。一度消えたタブをまた追加したからですね。他にも設定を破壊する可能性がいろいろあるので、先のconfrootを使って、設定を分けておく必要があります。

となると、結局かなり面倒になってきます。ちょっとプラグインをデバッグするために毎回こんなことをしようと思う人はいません。最近Twitterでヌマクローをよく見かけますけど、この記事書いてて、この話をされた人の顔によく似ていることに気づきました。どんな相手でもこの話をしてからパワーウィップで確1で倒せると思います。

自分がヌマクローにならないようにするにはどうすればいいでしょうか。そう、mikutter-modeを使うのです。適当なmikutterプラグインを開いて C-c C-e と入力すると、mikutterが起動します。このmikutterには、以下のプラグインしかインストールされていません。
  • mikutter-mode
  • カレントバッファのプラグイン(現在開いているプラグイン)
  • そのプラグインが依存している全てのプラグイン(.mikutter.yml に書かれてるやつ)
プラグインによっては、gtkプラグインに依存していないものもあります。この場合、UIが表示されません。gtkプラグインがロードされなかったからです。このような状況でも、Emacsからmikutter上でコードを実行することができるし、出力も見れるのでデバッグが可能です。むしろ、プラグインを検証するときには、不要なGUIが上がってこないのでとても早く行うことができます。
先ほどの設定が壊れる問題については、 /tmp/mikutter-(プラグインスラッグ) / というディレクトリがなければ作られ、その中に ~/.mikutter が自動的にコピーされます。普段使用している環境を壊すことなく再設定の手間を省いています。

まとめ
mikutter-mode に前からやりたかったことをやってみました。
「コードの実行」は、evalのある言語ならではです。これがmikutterのアドバンテージの一つと言っても過言ではありません。
最後の「プラグインが動く最小構成のmikutterを作る」は、流石に最後は全部のプラグインを入れた状態でテストしたほうが良いですが、途中のテストはある程度これでできそうなので、どんどん使っていきたいです。

mikutter-modeは他にもいくつか機能があります。知らなかった人は導入を検討してみましょう。

#mikutter 3.1.1

  • --plugin オプションが正しく機能していなかった
  • アクティビティの設定で、操作したことのないチェックボックスを変更するとクラッシュする
  • 文書の修正等
不具合修正アップデートです。mikutter 3.2に集中するので、深刻な問題であるか、簡単なことしか手が回ってない状態です。つまり今回の不具合修正は選びぬかれた上質な不具合修正だということです。

自分だけの不具合を集めて君だけの最強のmikutterを作ろう!

2014年11月18日火曜日

#mikutter 3.1

mikutter 3.1 をリリースします。

http://mikutter.hachune.net/

見るからに、史上最強の mikutter です。

主な変更内容は mikutter 3.1の新機能です。そこからさらに変更がいろいろあったので、以下にざっとまとめます。

機能
  • Ruby 1.9のサポートを終了。
  • activity
    • アクティビティの設定画面のUIのブラッシュアップ
  • extract
    • データソースが多くなった時にスクロール可能に
    • データソースの階層化
  • list
    • リストタブを廃止。これからはリストデータソースが提供されますmikutter 3.1の新機能参照)。
  • openimg
    • 複数枚画像が添付されているツイートに対応
  • profile
    • 所属するリストタブが多くなった時にスクロール可能に
  • streaming
    • 自分がリツイートしたツイートを他人がふぁぼった場合、そのふぁぼを表示
  • uitranslate
    • 新たな言語、関西弁に対応
API
  • プラグインがロードされた時刻を取得するPlugin DSLメソッド「defined_time」を追加
  • MessageConverterを廃止。EntityにMessageを書き換える機能を追加

大幅に遅れてしまったなあ。まだちょっと既知の不具合もありますが、いつものことなので、時間切れということでリリースにします。流石に今度は12/25リリースを逃すわけにはいかないので…。

2014年11月14日金曜日

#mikutter 3.1.0 alpha5

  • 複数枚画像が添付されたツイートについて、各画像のURLを展開して表示
    • pic.twitter.com を使って画像がアップロードされている場合、画像が1枚でも展開後のURLが表示されるようになりました
  • 自分がリツイートしたツイートがふぁぼられた時、それを表示
機能追加じゃありません!Twitterの仕様に追随しただけです!
複数枚の画像は今更感があるけど、だからこそ3.2とか言わずにねじ込みました。こういうのはほんとさっさとやったほうが良かったなと反省。
早速その反省を活かして、favorited_retweetイベントに早速対応したというわけです。ふぁぼは早いmikutter。

3.1も流石に引っ張りすぎてるのでこの辺で区切らないとなぁという感じです。どうせバグ全部直したと思っても19年後とかに出てくるものですもんね。こわいなぁ。

2014年11月8日土曜日

#mikutter 3.1.0 alpha4

  • extract
    • データソースタブをマウスホイールでのスクロールに対応
    • データソースのカテゴリをデータソースとして選択できてしまう問題
  • プラグインがロードされた時刻を取得するPlugin DSLメソッド「defined_time」を追加
  • list: リスト名に「/」が含まれているときのデータソース表示上の問題
  • Entity#add で追加したリンクに、適切なクリックコールバックが設定されなかった
  • 3.0.9をマージ
クラッシュする可能性のある複数の不具合を修正しました。
ぼちぼち落ち着いてきたし、これ以上引っ張りたくないのでそろそろ…。

#mikutter 3.0.9

    • 細かい不具合修正
    Twitter以外のサービスに対応するようなプラグインを使っているとmikutterがクラッシュするような不具合がありました。ちょっとしたことですが、一応まだ3.1はリリースしてないので…。

    2014年11月1日土曜日

    #mikutter 3.1.0 alpha3

    • Ruby GTK 2.2.3
    • プロフィール内のユーザの所属するリスト管理タブのブラッシュアップ
      • 多い時のことを考えてなかったのでスクロールできるようにした
      • リストを作成したアカウントを併記
    •  3.0.8の不具合修正をマージ


    #mikutter 3.0.8

    • Twitpicの画像プレビューが正しく動作しなくなっていたので対応
    • 抽出タブのアイコンを未設定にすると、タブ名でなくErrorアイコンが表示されてしまう(thanks @syusui_s)
    • Androidでmikutterはあたまおかしい
    TwitterとTwitpicの結婚アップデートです。
    まさか3.0.7のリリースノートの続きを自分が書く羽目になるなんて思ってもみませんでしたよ。
    私事ですが、画集かTwitter×Twitpicのホモ本のどちらかを(未定)、冬コミ3日目西く-30a「mikutterの薄い本製作委員会」さんに委託する予定です。画集にしたら絵師から、ホモ本にしたら腐女子からマサカリが飛んできそうなので八方ふさがりな感じです。手書きなので4部もないと思います。価格は紙代の予定です。
    委託先のmikutterの薄い本製作委員会さんは毎回mikutterとかいうTwitterクライアントをテーマにした記事を集めて同人誌を作って頒布してるやばそうなサークルです。寄稿者も募集しているそうなので、mikutterユーザの方は検討してみるとどうでしょう。こんな記事をみてるあなたのことです。

    2014年10月25日土曜日

    #mikutter 3.1.0 alpha2

    • アクティビティの設定画面のUIのブラッシュアップ
    • 抽出タブのデータソースによっては複数回通知が発生することがあった問題
    • 新たな言語、関西弁に対応
    • その他細かい高速化等
    まだ不具合は取りきれていません。このペースでは難しいかな。例によって仕事です。

    RubyGNOME2 2.2.2とmikutterで何か問題が起こるらしく、そのへんの対応でも時間を取られてます。とりあえず2.2.0にすればいいんですが、bundlerではなくディストリ等のパッケージ管理システムで用意してる人は、アップデートしてしまいそうですね。

    2014年10月19日日曜日

    #mikutter 3.1.0 alpha1

    3.1のプレビューをリリースします。
    3.0からの主な変更点は以下の記事をご覧ください。

    http://mikutter.blogspot.jp/2014/10/mikutter-3-1-pre.html

    release/3.1 ブランチがリリース作業用のブランチです。皆さん、mikutter3.1が使えることに感謝しながらチェキナーしてください。
    また、tarボールも一応コロコロしています。ダウンロードページの一番下です。

    http://mikutter.hachune.net/download

    これは試用版ですので、そういう感じでおねがいします。
    また、 transifexのリソースも更新しておいたので、翻訳おねがいします!

    https://www.transifex.com/projects/p/mikutter/

    #mikutter 3.0.7

    • Twitpic終了に伴う作業
      • http://twitpic.com/d250g2 が見れなくなったので、 http://d250g2.com/d250g2.jpg を表示するように仕様変更
      • Twitpicの他の写真については現状何もしていませんが、twitpic側がもう画像を見れないようにしているようで、mikutterでも見ることができません
    • 新たな写真サービス()に対応
      • d250g2.com
    • APIの不具合修正
    • 言語ファイル更新
    それは突然の事だった――

    「これが新しい†規約†だ。」

    その男は能面のように固まった冷たい表情で、Twitpicの前に書類を置いた。
    Twitpicはその書類を一枚一枚繰るごとに、顔から血の気が引いていく。

    「Twitterさん、これは…。」

    Twitterと呼ばれたその男は、少しも表情を変えず「レニウムだ」とつぶやく。Twitpicはその意味を悟るや否や、その場に崩れ落ちた。

    「Twitterさん…!なんで…!一緒に起業/世界/上場って…bioに書いたじゃないですか!」

    5年以上前だろうか。二人はよく、オタクっぽい服に身を包み、安いバーで夢を語り合っていた。
    「俺はつぶやきを収集するだけだ。それがどうなっていくかはわからない。現に、お前のおかげでみんな写真をつぶやいている。そのうち、女子高生がマック※1から動画をつぶやくような時代が来るかもな。」

    ※1 東京地方の方言で、マクドナルドのこと。

    Twitterは、まだ丸みを帯びていた当時のiPhoneを手の上で転がしながら、こんな奇想天外なことをつぶやいていたものだ。その度にTwitpicは、彼の冗談をふぁぼりながらも、リツイートしていた。Twitterの言っていたことは、今やそのほとんどが実現しつつある。それを影から支えていたのは、常にTwitpicだった。



    あまりにも突然の死刑宣告に、Twitpicは涙をこらえることができなかった。Twitterが成長するにつれ、徐々にあたまがおかしくなっていくのをわかっていながら、彼はついに何もできず、今日を迎えてしまった。
    この日が来ることは、画像投稿に対応した時からわかっていた。あの時既に、自分はTwitterにとって邪魔な存在になっていたのだ。女子高生が気軽にマック※1で動画を投稿できるように動画にも対応してみたが、既に手遅れだったのだ。
    つぶやきだけを集めていたTwitterはもはやどこにも存在せず、全てはツイートに集約されてしまった。

    もう、俺が生きる意味なんてない。Twitpicは、自らの命を絶つことを決めた。Twitterはそれを聞き終わると、昔とは違う長く大きい、少し曲がったiPhoneを取り出し、Favstar※2を確認してから、こう言った。

    ※2 ふぁぼ収集サービス。プレミアム会員ですら期間中にBANするような卑劣なサービスであることから、iPhoneを曲げるような情弱しか使っていない。

    「君の悪いところは、判断を急ぎすぎることだ。」

    Twitterは、Twitpicの持っている書類を指差して、続きを促した。
    最後の紙だと思っていたが、少し小さな紙がもう一枚あった。

    「Twitterさん、こ、これは…!?」
    「結婚しよう。」

    みたいな薄い本書いてた人たち、息してるのだろうか。

    2014年10月4日土曜日

    mikutter 3.1の新機能

    前のリリースから随分空いたので、そろそろmikutter 3.1の準備をしています。3.1で追加される予定の機能を簡単に紹介します。

    Ruby 2.0以降をサポート (1.9.3以前のサポートを停止)

    mikutter 3.1からはRuby1.9のサポートを終了し、パフォーマンスやらインターフェイスやらの改善のためにRuby 2.0の新機能を積極的に使用します。
    Ruby 1.9.3 は既に来年の2月にはサポートを終了すると発表されているので、いいタイミングなんじゃないでしょうか。


    リストをデータソースとして提供

    listプラグインは、Twitterのリストをデータソースとして提供するようになります。それに伴って、listプラグインによるタブの提供を廃止します。
    リストの設定からは「表示」のチェックボックスが消えています。設定画面からは、リストの作成・削除・名前や説明の変更のみが行えます。


    抽出タブの編集画面でデータソースを見てみると、各アカウントの「list」という要素に、リストが表示されています。データソースなので、他のリストやデータソースとミックスしたり、フィルタリングもできます。

    データソースの一覧を階層化、折りたためるように

    3.0リリース後から、抽出タブを使うプラグインが沢山でてきており、データソースの数が多くなりがちです。そこで上のスクリーンショットのように、データソースを階層表示して探しやすくしました。

    データソースを提供する時、名前を半角のスラッシュ(/)で区切ると、いい感じになります。例えば「@toshi_a/list/mikutter」という名前のデータソースは、@toshi_a の中の list の中に mikutter という項目が作成されます。上位の階層が存在しない場合は作成されます。プラグイン開発者は、アカウントごとに異なるデータソースを提供するなら、いい感じにカテゴライズされるように名前を付けましょう。

    MessageConverterを削除、Entity書き換え機能追加

    構造とAPIが複雑すぎて使用することが難しかった MessageConverterを削除します。これはツイートのリンク部分を一部書き換えるためのもので、具体的には短縮URLの展開に使われていました。しかし、これはTwitterにEntityが実装される前に設計されたもので、非同期的に書き換えることをサポートしないといった問題も抱えていました。
    詳しいことは別の記事にまとめるかもしれませんが、これからはイベント gui_timeline_add_messages で、実際に表示されたツイートを検出し、書き換えはいつでも Entity#add を呼び出して行うことができます。 Entity#add によってツイートが書き換えられると、適切にタイムラインも書き換えられます。

    MessageConverterもEntity#addも内部的にはツイートのエンティティを書き換えているため、これはツイートの本文を書き換える機能としては使うことができません。よってこの影響を受けるのはせいぜいサードパーティの短縮URLプラグインくらいです。サードパーティの短縮URLサービスは、t.coの登場によってほぼ使われなくなっているので、今回は互換性のない変更ですが影響はないと考えて踏み切りました。

    なお、標準のbit.lyプラグインはこの変更に追随しています。

    リリース時期

    このリリースは12/25にリリース予定の3.2のつなぎみたいなやつです。そう考えると、できるだけ早くリリースしてしまいたいですね。
    上記変更は全てdevelopブランチにマージされています。これから来週辺りにalpha1を出して、11月1日あたりにはなぁー、とか思ってます。

    2014年9月21日日曜日

    #mikutter 3.0.6

    • 言語ファイル取り込み更新
      • ポルトガル語追加
    • setting DSLのselectにListnerを渡すとクラッシュする
    • 使用されておらず、UIだけ残っていた設定を削除
      • リツイートを表示する
      • ふぁぼられを表示する
    • 標準プラグインの設定の一部チェックボックスが正しく動作しない
    バグフィックスです。ここのところプライベートやマイクラで忙しかったのであまり何もしてませんでしたが、スライムブロックが結構面白い動きをするので大規模な回路を造る時にすごい面白そうだなと思いました。とりあえずスライムブロックを使ったエレベーターを作ってみたけど、何故かたまにダメージを受けます。アイテム化してもモンスターなんですかね。ダメージ自体は0.5とかなのでいいんですが、装備の摩耗が気になります。

    2014年8月16日土曜日

    #mikutter 3.0.5

    • タイムライン上で、自分の投稿に対して、設定した色が付かない
      • 表示されるべきmikutterコマンドが表示されていないという問題も修正
    あぁーここなぁーマルチサービスなぁー
    バグの修正一点だけです。困ってた人多かったので皆さんアップデートしましょう。

    OSCで喋った内容も書きたいんですけど、ちょっと彼女と…おっと、これ以上言うと工作員に叩かれるな
    最近、抽出タブに注目してくれる人がちらほら出てきてて嬉しいです。というか今までの不憫さがなんだったんだ。3.1でもこの辺強化していくんですが、そういえば3.1の予告みたいなの書いてませんでしたね。このままだと書く前にリリースしそうです。早くリリースできるという意味ではありません。

    2014年8月10日日曜日

    #mikutter 3.0.4

    • リプライを送る時、プライマリアカウントではなくツイートを受信したアカウントが使われていた。常にプライマリアカウントを使用するように変更
    • 言語ファイル更新
    選択してるアカウント以外でリプライ送ってしまうことがあるというやつの修正です。
    OSCお疲れ様でした。またちょくちょくバグ修正やります。

    3.1についてもやりたいことがまとまりつつあるのでぼちぼち着手しています。リリース日は言いません。

    2014年8月6日水曜日

    OSC 2014 Kansai@Kyoto に出展しました

    OSC 2014 Kansai@Kyoto に mikutter としてブースの出展と、セミナーをしました。

    準備

    仕事のほうも土曜日に出なきゃいけない日があったり、プライベートもやることがあったりしてギリギリでした。とはいえ、直前になったら両方落ち着いたので集中できました。
    前日にあたる木曜日からは休みをとっていたので、OSC運営チームのお手伝いをちょっとだけさせてもらいました。学生の頃はいろんな実行委員とか後先考えずやったりして無駄に忙しい思いをしていたので、そんなことを思い出してちょっと懐かしい気がしました。
    運営チームの皆さんありがとうございますありがとうございます

    1日目

    この日はブースの出展がないので、ブース予定地に作業スペースを展開して、セミナー中のふぁぼ爆撃対策をしていました。

    2日目


    mikutterの参加は2日目のみでした。入るや否や、いきなり巨大なmikutterのぼり(実はタペストリーです)が高々と掲げられており、来場してmikutterの名前を見ないことが困難な感じでした。これをやった犯人である @tsutsuii さんはOSCガチ勢なのでやっていいことと悪いことをちゃんとわかっているのですが、私はわかっていないので、背筋が凍る思いでした。

    展示端末

    今回展示用の端末はMacBookAirにArchLinuxを入れて、WMはAwesomeというよくある構成で展示しました。隣のNetBSDブースでは、かなり古い端末やRaspberry Piやスマフォなど、よくわからない端末でmikutterを動かしていらっしゃいました。MBAにNetBSDを入れて持っていけば、完全に境界がわからない感じになって面白かったかもしれません。

    ポケットミク

    今回の展示ではプラグインによって他のTwitterクライアントで難しいことが簡単にできるということを伝えるために、ポケットミクを2台持参し、ふぁぼ通知をポケットミクで再生させるプラグインをインストールして展示しました。

    https://github.com/toshia/mikutter_pocket_miku

    このような改造はなかなか難しいですが、mikutterプラグインなら比較的容易で、視覚的にもMBAにポケミクがつながっていてそこから音が鳴っているということで、来ていただいた人にはインパクトがあったようです。また、そのために展示端末にはALSAやPulseAudioといったサウンドサーバの類やサウンドドライバは一切入れず、ポケットミクさえあればサウンドが再生できるということを強調しました。

    グッズ

    今回もグッズは用意しませんでした。が、皆さんがいろいろ作って応援してくれました。ありがとうございます。
    • mikutter 0.2 シール
    • mikutter 3 シール
    • Teokure Point シール
    • ウワバミクッターシール
    • 季節感あふれるみくったーちゃんシール
    • mikutter 卓上のぼり
    • (mikutter タペストリー)
    また、mikutterの薄い本製作委員会の成果物を頒布していました。これらは夏コミでも頒布されるので、OSCに来れなかった方はそちらで購入しましょう。
    • mikutterの薄い本 vol.6.0『ておくれ!えもーしょん
    • mikutterの薄い本 vol.5『としぁくんちのておくれ事情』
    • vol.5ロゴ『としぁくんちのておくれ事情』Tシャツ
    • vol.6.0ロゴ『ておくれ!えもーしょん』Tシャツ
    • mikutter缶バッジ(計4種)
    夏コミでは外部サークルへ委託するようです。詳しくは以下のページをご覧ください。

    http://kohinata.sumomo.ne.jp/mikutter/C86.html

    mikutterタペストリーは、セミナーでじゃんけん大会をやって3名の運のいい人にお渡ししました。また、卓上のぼりは、来ていただいた方の中でも特に貢献度が高い人(≒ておくれてる人)、いろいろと大破してしまった人(≒ておくれてる人)にあげましたが、よく考えたらこれはつついさんに作っていただいたものを横流ししてるだけなんですよね。

    セミナー

    「mikutter 3」というタイトルでセミナーを開催しました。13時からアトリウムという良い場所を割り当てていただき、本当に目をつけられているんだと確信しましたが、二年前にも同じことがあったので、今回は落ち着いて虚ろな目で空を仰ぐことができました。いろいろとダメです。

    話したこと

    mikutter 3.0でやったことで、マルチアカウントとは何だったのかを話しました。このあたりの話はかなり長くなり、いろんな角度から45分かけてお話しました。話慣れていないので台本をかなりしっかり書いていたため(今回も暗記できなくてカンニングしながら発表してた)、今回はこれを編集してセミナーの内容を記事にできないかと検討中です。

    ウケ

    今回は笑うところが少ないなと思っていたのですが、セミナー中は結構笑いが取れていたと思います。笑いは重要です。しゃべっているのにしばらく誰も笑ってない状態が続くと不安になってきます。
    セミナーの内容自体もおもしろいと思ってくれた人が多かったようです。
    人前で発表するのは二年ぶりで(勉強会で飛び入りでちょっと話すとかはあったかもしれないが、よく覚えていない)、下手になってるどころかカンが無くなっていたので結構ボロボロなんじゃないかと思ってたんですが、褒められることが多かったので良かったんじゃないかと思います。
    人数もすごかったです。アトリウムに30席ほどあったと記憶しているのですが、椅子は全て埋まって立ち見も結構いたので、下手をすると50人くらいは集まっていたのではないでしょうか。今回はセミナー予約が27しかなかったので減るのかなと思っていたのですが、それでもほぼ満席ですね。
    とにかく、これだけ多くの人に関心を持ってもらえるというのはありがたいことです。

    ふぁぼ

    3.0は、極めて高い耐ふぁぼ性能、ふぁぼ処理能力を発揮します。そのため、今回は特にセミナーのためにmikutter本体の性能に関する対策はしませんでした。
    対策を入れたのはポケットミクプラグインのみです。ポケットミクがふぁぼ効果音を再生するには1回で0.24秒かかり、複数のミクの声をどうやらミキシングできないようなので、シーケンシャルにサウンドを再生するしかありません。となると、mikutterの最大ふぁぼられキュー消化速度は10fav/sなので、2.4倍の赤字になってしまい、ふぁぼ演出が終わっても音が遅れて再生され続けることになります。これはふぁぼられエクスペリエンス的には見逃せない問題です。
    そこで今回はポケットミクを2台用意し、ふぁぼ通知音を分散させることで、1台あたりに要求されるスピードを0.12秒にまで削ることに成功しました。また、プロセスを分けることで、mikutterの他の処理にブロックされて効果音が長く再生されることを防ぐことにも成功し、ほぼカタログ通りの速度が出るようになりました。
    また、セミナー中の不慮の事故も想定し、ホットスワップにも対応しました。セミナー中のふぁぼに耐え切れずポケットミクが壊れた時のためです。ポケットミクが発売してから一番大きなふぁぼ爆撃になると予想していたので、妥当な判断です。
    最終的には壊れることもなく、分散したおかげでふぁぼ通知も適切に再生できていました。

    OSC中にちょいちょいAclogを見ていただけなので推測ですが、今回のOSCではおよそ57000favを受けました。そのうち50000favは45分のセミナー中に受けたものです。
    これは、mikutterが18fav/sを受けきったということに他なりません。
    2年前のOSCでセミナー中に受けたふぁぼは2万。8.3fav/sと試算していました(セミナーを40分と計算)。
    mikutterの耐ふぁぼ性能がここまで上がったことを喜ぶ気持ちより、お前らなにやってんだよという気持ちのほうが強いです。


    終わって

    LTで複数回言及されるとか、知らないところで認知度が上がってるんだなぁと思いました。多くの人がプラグイン開発等を通して、mikutterエコシステムを育ててくれているおかげだと思います。これだけ認知度が上がっているにも関わらずのびのびやらせてもらえてるのも、mikutterのそういう空気も含めて応援してくれる皆さんのおかげです。
    他にも、書ききれないくらいいろんなことがあって、いろんな人とお話出来た素晴らしい一日(二日?三日?)でした。

    今回も皆さんに元気をもらえました。これからもよろしくお願いします。

    2014年7月6日日曜日

    #mikutter 3.0.3


    • タブの並び順取得時に、存在しないタブを意図せず作成してしまうことがあった
    • 複数人に対するメンションが適切に処理されないことがあった
    • マルチアカウント時のツイートのメンションの色付けのルールを変更

    まあまあな不具合修正です。メンションはしばしば問い合わせがあった問題でもあるので、早めにアップデートするといいと思います。

    プライベートが忙しくてなかなかこっちの作業が出来てないです。仕事が珍しくそこまで忙しくないのに、もったいない!
    OSC Kyotoの準備もあるし下手な炎上案件より大変になりそう。予告通り展示もセミナーもやります。

    https://www.ospn.jp/osc2014-kyoto/index.php

    2014年6月24日火曜日

    #mikutter 3.0.2


    • 軽微な不具合修正
    何も言うことがない。土日忙しくてここまで伸びてしまったから、多分次の土日のアップデートは更にどうでもいいものになってしまう。本当にひとつもなかったらリリースしないんだけど…。

    2014年6月15日日曜日

    #mikutter 3.0.1

    • アカウント認証関係の不具合対応 (thanks @moguno)
    • extract: 条件が空の時に全てのツイートにマッチするように変更
    3.0の最初の不具合修正アップデートです。
    以前ならしばらくはクラッシュする不具合が見つかっていましたが、事前にたくさん見つけられたおかげか、そういった問題はこの一週間で新規に見つかることはありませんでした。

    とはいえ多言語化周りを中心にいろいろと大小の問題が残っているようなので、しばらくはこれくらいのペースでリリースを継続できたらなと思っています。

    2014年6月8日日曜日

    #mikutter 3.0


    mikutter 3.0をリリースします。

    http://mikutter.hachune.net/

    全mikutterファンに捧ぐ、待望のアップデートです。まだ不具合が残ってはいますが、まあまあ安定してきました。ちょっと不具合があるところがかわいいので、早くアップデートすると良いと思います。

    新機能については、以下の記事を参照してください。

    http://mikutter.blogspot.jp/2014/05/mikutter-30.html


    2014年6月1日日曜日

    mikutter 3.0.0-alpha5

    • 言語ファイル取り込み
    • デフォルトアイコンをmikutter 3.0のアイコンに差し替え
    • 内部ツイート・ユーザ・リストデータのキャッシュを最適化
    3.0正式版出ると思った?ねぇねぇ、3.0正式版出ると思った?

    alpha4ではこんなことを言っていました
    mikutter 3.0の状態を確定する日は5月末と明言した……したが……!まだそのリリースをいつするかまでは明言していないそのことをどうか諸君らも思い出していただきたいつまり……我々がその気になればリリース自体は10年後、20年後ということも……可能だろう……ということ!
    それにね考えてもみてください。WWDC控えてるじゃないですか。タイミングが悪すぎる。良いのが来る保証はないですが、キャッチコピーの賞味期限が2日程度になってしまうならリリース伸ばしたほうが良いですよ。こっちも考えなしにパクってるわけじゃないんです。何も考えてないけど。

    2014年5月25日日曜日

    #mikutter 3.0.0-alpha4

    • ペースト時など、一部特殊な方法で文字入力した時に字数カウントが更新されないことがあった (thanks @moguno)
    • Twitpicの仕様変更に対応
    • 保存した検索をマルチアカウントに対応
    • 保存した検索を別のTwitterクライアントから追加・削除した時、それがmikutterに反映されなかった
    • キャッシュ構造をマルチアカウント用に変更
    • プロフィールタブの詳細タブの情報の表示が崩れる問題を修正
    ついにプロフィールタブの不具合が取れました。残件かなり減ってるので3.0ぴょんぴょんしてきました
    ただ3.0のリリース日は6/1から数日後ろになる可能性が高いです。でもこれは遅れてるわけではありません。mikutter 3.0の状態を確定する日は5月末と明言した……したが……!まだそのリリースをいつするかまでは明言していない
    そのことをどうか諸君らも思い出していただきたい
    つまり……我々がその気になればリリース自体は10年後、20年後ということも……可能だろう……ということ!

    前倒しもできるんだけどね

    mikutter 3.0の新機能: http://mikutter.blogspot.jp/2014/05/mikutter-30.html

    2014年5月17日土曜日

    mikutter 3.0.0-alpha3


    • Transifexから言語ファイルを取り込んだ
    • チュートリアル時に display_requirements プラグインが無いと、システムメッセージが正しく表示されず、進行不能になる
    • mikutterコマンドの「タブを閉じる」以外の方法でタブが閉じられた時にも、タブの並び順を保存する (thanks @moguno)
    3.0.0の変更点やスケジュールについては以下の記事をご覧ください。

    http://mikutter.blogspot.jp/2014/05/mikutter-30.html

    スケジュール

    http://dev.mikutter.hachune.net/versions/8

    あまり修正が追いついてないと思っていたのですが、残チケットを見ていると若干減ってはいるんですね。サボっているわけではなくて、テストしてくれる人が多く活発なので、早めに不具合が出てきていると考えています。
    尤も0件にならないとリリースできないわけじゃないですが。現に、多くのパワーユーザは既に3.0.0を使用しているようですし、実用には足ると思います。

    2014年5月9日金曜日

    mikutter 3.0.0-alpha2

    alpha1 からの変更点
    • Transifexから言語ファイルを取り込んだ
    • バイナリファイルを開くときにバイナリモードで開く様にした(thanks @moguno)
    • 前のアカウントへの切り替え方向が逆になっていた(thanks @penguin2716)
    • Ruby1.9.3で起動するとSyntaxErrorが出る問題の修正
    • bundlerが入っていない環境で新規ユーザー登録に失敗する問題の修正
    3.0.0の変更点やスケジュールについては以下の記事をご覧ください。

    http://mikutter.blogspot.jp/2014/05/mikutter-30.html

    おかげさまで現時点でもこれだけ不具合が修正できています。皆さんがRedmineで具体的に報告してくれるおかげでかなりスムーズに進んでいます。まだ報告されていない不具合を見つけたら、Redmineに報告してください。

    http://dev.mikutter.hachune.net/versions/8

    翻訳について言い忘れていましたが、各アルファ版リリース前に取り込んでます。最初にTransifexにプロジェクトが上がった時に飛躍的に翻訳が進みましたが、あのあと追加された箇所が結構あります。特にchange_accountなんかは、ちゃんとできていないとかなり残念なことになるので(言語ファイル参照)、我こそはという方は是非、翻訳をおねがいします。

    https://www.transifex.com/projects/p/mikutter/

    2014年5月7日水曜日

    mikutter 3.0.0-alpha1

    mikutter 3.0.0の最初のアルファ版を公開します。これは公開前に有志の方にテストしてもらうためのバージョンです。このバージョンで何かあっても責任を持ちませんと思ったら大間違いです。どのバージョンでも責任なんて持ちません。

    3.0.0の変更点やスケジュールについては以下の記事をご覧ください。

    http://mikutter.blogspot.jp/2014/05/mikutter-30.html

    アルファ版を入手するには、mikutterのダウンロードページの一番下のリンクか、gitリポジトリの「release/3.0.0」ブランチの内容を使用してください。

    また、ぶっちゃけ俺が使ってて大丈夫なので問題ないと思いますが、設定データの変更などがされているため、~/.mikutter をバックアップしておくことをおすすめします。
    既知の不具合などについては、以下のURLを参照してください。

    http://dev.mikutter.hachune.net/versions/8


    2014年5月3日土曜日

    mikutter 3.0の新機能

    みなさんおはようございます! まもなくmikutter 3がリリースされます。今回は待望となる1年ぶりのアップデートの内容を軽く紹介したいと思います。

    多言語対応

    日本語以外を母語とするユーザが出てきはじめました。これを受けて、mikutter 3からはUIに表示する言語を、ロケールによって切り替えるようにしました。

    マルチアカウント

    単一のmikutterで、同時に複数のTwitterアカウントを扱えるようになりました。
    現在選択されているアカウントは、プライマリアカウントと呼びます。
    プライマリアカウントの切り替えボタンは、他の多くのTwitterクライアントに倣ってpostboxの左隣に置きました。クリックしたら表示されるドロップダウンメニューからアカウントを切り替えることができます。


    また、mikutterコマンドでもアカウントを切り替えることができます。

    二つ目以降のアカウントは、設定画面で追加します。

    マルチアカウントについては、mikutterの薄い本vol.5のtoshi_aの記事でも触れているのですが、現在主流となっているそれとはちょっと違う仕様です。これについてはまたどこかで説明をするかも。

    抽出タブの機能追加
    抽出タブがアップグレードされました。

    編集画面の刷新

    抽出タブの編集画面が刷新されました。今まではタブには名前が表示されていましたが、他のタブのようにアイコンを設定できるようになりました。また、タブに新着通知機能がつき、任意の条件にマッチしたツイートがあるたび、効果音を鳴らしたりlibnotifyで通知を表示したりできます。

    データソースの追加

    今までデータソースは限られていましたが、マルチアカウント機能で追加された特定のアカウントのホームタイムライン・メンションをデータソースとして設定できます。

    また、データソースをサードパーティプラグインから追加できます。これはすごいことですが、何に使えるでしょうか。

    バージョン

    今回から、独自のバージョニングをやめ、セマンティックバージョニングを採用します。この影響で、当初0.3と言っていた次のリリースは、3.0.0となります。
    これは、mikutterのバージョン間の互換性をわかりやすくするためです。

    新しいバージョニング
    おおまかに言って、 「Major . Minor . TEENY」 という形式になります。

    古いバージョニング
    mikutterは、「0 . Major . Minor . BUILD」 という形式でした。BUILDというのはmikutterの開発が始まった日を0としての起算日です。また、先頭には意味のない0をつけていました。これは、何かミスった時に開発版ですしおすしと言い訳するための免罪符で、それ以上の意味を持ちませんでした。しかし昨今の拡がりを鑑みるに、これが免罪符として機能しない気がしてきたので、酔った勢いでこれを取り去り、ついでにセマンティックバージョニングを採用することにしました。

    なぜ0.2から3.0は大幅に飛んでないのか

    飛びすぎやろと言われることがしばしばありまくりますが、誤解です。まず、当初次回のバージョンは0.3を予定していました。これは古いバージョニングに当てはめると、以下のようになります。

    0 . Major . Minor . BUILD
    Major : 3
    Minor : 0
    0.3.0

    これを、新しいバージョニングにそのまま当てはめます。

    Major . Minor . TEENY
    Major : 3
    Minor : 0
    3.0.0

    0.2の次は3.0です。というより、0.2は新しいバージョニングに当てはめると2.0となります。何もおかしくない、順当な変化だということがわかりますね。

    これからのリリース

    今まではバグフィックスだと4桁目のビルド番号が増えていってましたが、これからはTEENYが増加します(3.0.0 → 3.0.1 → 3.0.2...)。ビルド番号は、これを書いている時点では互換性とかだるいとか忘れてたなどの理由まだついてますが、いずれ消えるでしょう。前よりガンガンバージョン上がっていく感じに思えますが、桁の問題ですね。飾りなのでこれくらい華やかな方がいいのかもしれません。

    見えない変更

    ライセンス

    ソースコードのライセンスは mikutter 0.2.2 までは GPL3 でしたが、3.0 からは MIT ライセンスを採用します。この決定の経緯については、0.3の予定 とかを参照してください。

    設定ファイルのフォーマットを変更
    今までの設定ファイルには幾つか要望がありました。

    1. テキストエディタで読むことができない
    2. 極稀に壊れる
    3. プラグインが扱うデータベースがどこにあるか分からず、データの引き継ぎが困難

    1.はそういう需要がいくらかあるということ。2.については、1.の問題のせいでどういう理由でエラーが発生しているのかわからないということ。3.については、データベース等大きなデータは設定ファイルに置くべきでないと言いながら、ではどこに置けばいいのかを明言していなかったため、プラグイン開発者が思い思いの場所に置いていたため、ユーザは設定を別の場所に引き継ぐ時に、どれが引き継ぐべきデータか分からないという問題がありました。

    mikutter 3からは、設定をYAMLで保持します。場所も、 ~/.mikutter/p_class_value.db から ~/.mikutter/settings/setting.yml へ変更しました。前のデータからの引き継ぎは、アップデート後の初回起動時に自動的に行われます。

    また、3.の問題に関して、各プラグインは ~/.mikutter/settings/[プラグインスラッグ]/ というディレクトリを持つことができ、この中に恒久的なファイルを置くことができます。ユーザはデータを移行する時、 ~/.mikutter/settings/ だけを移動してください
    また、プラグインから、この設定ディレクトリのパスを取得するときは定数 Environment::SETTINGDIR を使います。このあたりの話はWriting mikutter pluginにまとめておこうかと思います。

    specファイルの名称変更

    今まで、プラグインの依存関係等のメタデータは、各プラグインディレクトリに「spec」というファイルを設置して、その中に書くことになっていて、このファイルを設置することが推奨されていました。
    しかし、このファイル名はRSpecのテストを設置するディレクトリ名と衝突しており、RSpecでテストを書くことができませんでした。そのため、他のツールと被ることがない名前にということで、「.mikutter.yml」を採用しました。もちろん3.0でもspecがあれば一応読みますが、これからリリース/アップデートするさいは .mikutter.yml も作成してください。尚、specと.mikutter.ymlを両方入れておくことで、0.2と3.0どちらにも対応できます。

    書き忘れたこと

    書き忘れたことはこの記事には書いてません。書き忘れたからです。

    リリーススケジュール

    連休後[要出典]くらいに最初のプレビュー版を公開する予定です。その後、1週間程度の頻度で何度かプレビュー版を公開し、5/31終了時点の状態を、mikutter 3.0.0として確定します。仮にここで不具合が取りきれなくても、その時点の状態がリリースされるということです。追々直していけばいいんですよ。1年ぶりにドッグフードを食べる時が来ましたよ!

    2014年4月3日木曜日

    約束の日2014

    登場人物
    みくったーちゃん
    156cm!
    mikutterユーザのアイドルみくったーちゃん!今日もせっせとTwitterばかりしている実質ただのツイ廃だよ!
    マスコットキャラクターだから外面はいいけど裏では何を考えているかわからないよ!でも裏垢は持ってないよ!

    ておくれくん
    メモリ2GB!
    最近Ubuntuをインストールしてmikutterを先月から使い始めた、手遅大学工学部三回生のmikutter初心者だよ!
    留年をギリギリ回避したけど就活も無理っぽいし、全く心に余裕が無く、ユーモア欠落症を患っているよ!

    としぁ
    Athron!
    mikutterの開発者だよ!ヒマじゃないのにTwitterクライアントを作ってる暇人だよ!
    自分の作ってたシステムは増税対策大丈夫だと思ってたら、普通に全く関係ない年度末予算の案件に忙殺されている、まだまだひよっこのプログラマだよ!


    さーてお風呂上がったぞ!まだ春休みだから今日も朝までついったーするぞwwwエイプリルフールネタでめっちゃふぁぼ稼いでやる!10RTとかされちゃったりしてw
    ふぉおおおおおあああああ!?なんだこの画面は!
    ククク…驚いているようね、ボーイ?
    なんだこれ?みんなておくれアイコンに変えてるのか?…いや、僕のアイコンも変わってる!ちくしょう作者め!エイプリルフールだからってユーザに不便なクソを仕組みやがって!クソだ!ちんぽ野郎!クソうんこだ!
    迷える子羊よ…。
    あ!作者のと、としぁさん!
    (うわちっせぇ男だな、さっきまで大口叩いてたのに。エゴサでバレバレなんですけどねwみんなもSNSで陰口叩く時は気をつけようねw)
    何かお困りのようだね。
    あの、エイプリルフール?でmikutterだけアイコンが変わってるようなんですが、戻し方ありますか?
    そりゃあ、オープンソースだから、無いなんてことは…。
    僕Rubyとかプログラミングわかんないので、ちゃんとした戻し方ないんですか?
    君はさっきから〈戻し方〉と言っているね。
    そうです、mikutterがないと今日はツイッターできないんです。
    嘆かわしいな…。ておくれくん、逆だよ。4/1だけ、mikutterは元の姿に戻るんだ。今見ているのは、エイプリルフールのイースターエッグではなく、本来のmikutterなんだよ。
    ふぁぼよ…戒めの爆撃となれ…!レリーズ!!!
    こんなのじゃ誰が誰かわかりません!ユーザの利便性を損なうようなイタズラはだめだと思います!
    テーレーテレレレーテレーwww
    ふぅむ、これはかなりの重症だな。時に君は、mikutterのユーザなのかな。
    もちろんですよ。毎日使わせてもらってます。僕、Ubuntuで他のクライアント良いのがなかったので、mikutterにはちゃんとしてほしいです。
    もとの姿に戻れ!ク□ウカード!
    (微妙に間違ってるんだけどなぁ…。)ちゃんと、ねえ。その意味では残念ながら、ておくれくんが気に入る、ちゃんとしたTwitterクライアントはなかったということになる。諦めたまえ。
    どういうことですか?こんなことしなければmikutterは最高だと思いますよ?
    うーん、嬉しいんだか、悲しいんだか。結論から言うと、君はmikutterユーザなんかじゃない。mikutterなんて最初から存在しないんだ。Twitterするためにmikutterが必要だと思いこんでいて、俺の催眠術にまんまとかかり、mikutterを使っていると思い込んでいるんだ。春休みに惰眠を貪り朝までツイッターをしている気になっているだろうけど、実は俺の手の上で踊らされているだけだったんだ。
    え?どういう意味ですか?

    歴史

    うん、少し長くなるけれど、mikutterはもともといたずらソフトだったんだ
    いたずらソフト!?
    響かせて〜きれいなツイート♪
    そうそう。ほら昔、HSPとかでスタートボタンがゴールになったりするやつとかあったじゃん。
    そういうのよくわからないです
    じゃあ見てたら突然グロ画像になるGIF画像とか
    あー、ありましたね!精神的ブラクラでしょ?
    ここーろゆさぶーるパークリー♪
    (パクツイはあかん)そうそう。俺が作ったのもああいう、人を驚かすネタだったんだ。しかし、これには非常に大きい問題があった。
    みんなに叩かれたんですか?
    いや。もっとひどい。誰もダウンロードしてくれなかったんだ。
    えっ…
    よく考えてみなよ。わざわざ得体のしれない学生が書いたプログラムをダウンロードして実行する奴がどこにいる?今でこそ俺はちょっとフォロワーがいるけれど、当時は50人も居なかったんだよ。オープンソースソフトウェアを公開して誰かが目に止めてくれるなんて、夢のまた夢なんだ。何を作っても誰も見向きもしない。存在すら気づかれない。それが現実だよ。
    確かに。相当面白く無いと話題にならないですもんね。
    驚かされるだけのソフトなんて誰もインストールしない。だから、友達にツイッタークライアントだって偽って渡したんだ。
    そんなのでもらってくれるんですか?
    当時Linuxには全然なかったからね。そして起動したら、それはそれは粗末なツイッタークライアントが起動したというわけ。
    え?本当にツイッタークライアント?
    一応、ツイートもできるし、TLも見れる。でも実はそんなのはただの釣りで、4/1になったら皆のアイコンがミクになるというものだったんだ。暫く見てたらグロ画像に変わるGIFと同じだね。
    ちょっとー?あたしがグロいってー!?
    まあ、5人くらいだったかな。4/1は概ね好評だったよ。
    はぁ…でもそれがmikutterとなんの関係があるんですか?
    それがmikutterなんだ。ちょっとずつTwitterクライアント側に機能を足していって、本来の機能も毎年拡張していって、もう5年目。
    え?…そんな、じゃあ…。
    mikutter最高って言ってくれるのは嬉しい。でも、Twitterクライアントっていうのは釣りで、本当はこうやって使っている人を驚かすのが目的の、ジョークソフトなんだ。
    これがmikutter…?ウソだろ…!?そんなのが、Ubuntuに入ってるのかよ…!?
    Ubuntuも被害者だよ。
    僕は一体何を信じて生きていけばいいんだ…。Linux怖い…。

    意義
    でも、mikutterはTwitterクライアントとしては良いと思いますよ。
    確かに、俺だって普段はTwitterクライアントとして使ってるし、今日だってそうだ。それでいいんじゃないかな。
    よくないですよ!
    うーん、でもなあ、何度も言うように、mikutterはTwitterクライアントじゃなくジョークソフトなんだ。これを取ることはできない。mikutterの本質だからね。
    意味わかんないや。これがておくれなのか?でもやっぱりユーザは皆困ってますよ?
    さて。それはどうかな。みくったーちゃん。エゴサタブを。
    はい、どうぞ!
    「今年もmikutterはやってくれた!」「今年のエイプリルフールネタではmikutterが一番おもしろい!」「mikutterなんじゃこれwウケるw」
    あれ…?みんな…楽しんでる…?
    mikutterが本当の姿を現すのは今日だけ。5年の歴史の中で、たった5日だけ。その場面に立ち会えて、みんなうれしいんだよ。
    ほら見て、この人は普段mikutterを使ってないけど、今日のためにわざわざ久しぶりに起動したんだって。おひさー。
    こっちの人は、たしか一昨年のエイプリルフールでばずった時にmikutterを知って使い始めたんだったかな。今じゃいくつか便利なプラグインを書いてるよ。
    なんでみんな、不便になってるのに楽しんでるんだ…?
    俺にしてみれば、なんでせっかくのエイプリルフールなのに楽しめないんだって思うね。確かに、エイプリルフールにはその場の思いつきで嘘を言って、人を傷つけてしまう人もいる。もちろん、行動を起こせばそれが何だって批判する人はいるものだけど。でもね、mikutterはそんな薄っぺらい思いで作ってない。一年間、今日のためにTwitterクライアントだと偽ってユーザを集め、そしてこの日に全てをかける。もちろんアイコンを変えて使いやすくなるとは俺も思ってない。でも、それが何だっていうんだ。ここにあるのは嘘じゃない現実だ。本気で冗談をやってきたんだよ、五年間。だからこれだけの人が集まって、釣られたいと思ってくれるんだと、俺は思うよ。
    はぁ…。なんだか馬鹿馬鹿しくなってきた。まぁ明日になればまたmikutter使えるようになるし、もういいです。
    来年の4/1は、mikutterで検索かけてみると面白いと思うよ?初めてmikutterのエイプリルフールを見て戸惑ってる人を見るのは楽しいよ!
    はい、はい。

    反省会

    でもでも、今年はユーモア欠落症患者減ったよね?去年はもっといたような?
    いちいち覚えてないなぁ。でも、やっぱり多くの人に使われるようになって、ユーモア欠落症の人も増えたんじゃないかな。なんでも有名になると、そういうもんだよ。
    mikutterはほとんどそんなことないと思うよ?
    うん、ありがたいことにね。…しかし!ユーザ数を測ったところ、批判が増えるほどユーザが増えていないということがわかったんだ!
    な、なんだってー!(AAry
    エイプリルフール画像はサーバに設置してあって、3/1からプリフェッチが始まる。そのアクセスログからユニークIPアドレスを毎年出してユーザ数の概算としているんだけど、それがなんと今回は3001人!グラフにするとこうなります
    え?すごーい!順調に伸びてるじゃん!この予想人数っていうのは2600人?どうやって算出してるの?
    この青の線はIPアドレス数で、同じ人でもIPアドレスが変わったら別集計されてしまうし、本当はもっと少ないはずなんだ。
    算出方法は去年の数値の信頼性が高いからそれと同じ0.85を掛けたよ。詳しくは去年のエイプリルフールの反省を見てね。
    よくわかんないけど、だいたい2600人くらいユーザがいるってことかな。
    たしかに、毎年、去年に比べると圧倒的に伸びてるんだけどね。今年だって、Twitterクライアントが厳しい状況の中なのに去年の1.5倍程度になったね。思ったより少ないかなという印象だけど、健闘したほうかなとも思う。
    きっとあたしが可愛いからだねっ!
    うん。シールとかグッズもいっぱい作ってもらってるしね。
    えー!?そこは突っ込まないの?
    この、アイコン対話形式?VNI形式?っていう文章凄く疲れるんだ。公開前から既に後悔してるしさっさと終わらせたくて。
    酷い!メタい!!メタ酷い!!!
    しかもこのセクションに至っては、作者とオリキャラが対談するという一昔前の黒歴史ホームページを彷彿とさせる…
    やめて!痛いよ!ユーザいなくなっちゃう!あたしこんなTwitterクライアントのマスコットキャラクターやりたくない!
    う、うわあああああ
    え?ておくれくん?どうしたの?
    彼はきっと中学生時代に、自分のホムペで、異能等イタい設定のオリキャラを量産して、小説や、この記事のようなオリキャラとの対談を公開していた過去を思い出したんだと思う。そっとしておいてやれ。
    そっか…黒歴史は記憶からはなかなか消えないんだね。
    今回のコンセプトはずばり「黒歴史っぽい対話形式」で、これも狙いのうちなんだけどね。ほら、毎年エイプリルフールの記事って変わったことするじゃん。
    去年は特に何もなかったけど、一昨年は携帯小説風、その前は古風なブログ風…一体どこを目指してるの?
    知るか。それを言うなら、なんでこんなクソみたいなジョークソフトに何年も時間かけてんだよ。こっちはDebianとかまで釣れてしまって、釣った魚に食い殺されないかヒヤヒヤしながら毎日過ごしてるんだっつうの!俺はこんなくだらんことをするために生まれてきたんじゃねえ!もっとでかいことをするんだ!
    うわぁ…ておくれくんに言ったこと全否定してる…。
    そりゃあ、エイプリルフールだしね。今言ったことは全部嘘だよ。
    今言ったこと…って、反省会のこと?ておくれくんとの会話?それとも…もしかして、mikutter自体?
    無粋な質問だなぁ。ほら、0.3ではみくったーちゃんは実際にユーザとおしゃべりしたいって言ってたじゃないか。休憩はこれくらいにして、早く練習に戻るんだな。
    えー!?いいじゃん、どうせ一生リリースしないんだし…。

    2014年3月11日火曜日

    #mikutter 0.2.2.1537

    • gtk2のgemの2.2.0へのアップデート (thanks @cosmo__)
    • キャッシュが破壊された時、起動できなくなる場合がある
    • 140文字以上のメッセージに埋め込まれたURLが開けない問題を多分修正 (thanks @moguno)
    生存報告です。間が開きすぎてもうmikutter 0.2.2で修正することないよ、と思っていたけど時が経てばポロポロと見つかってくるものだね。起動不能になる不具合は0.3開発中に見つけました。

    Ruby 2.1.1で動作確認取れています。ちょっと早くなったらしいがまぁわからん。最近またふぁぼのペースが早くなってきたのは気のせいでしょうか。

    0.3は特に報告することはないですね。概ね実装したいものは実装できたので、あとは不具合修正等です。ご存知の通り一番時間がかかるところです。さすがに…いや、いつまでにとか言うべきではないです。フラグにしかなりません。生きているうちに次のmikutterのリリースが見れたら幸運だと思ってください。

    2014年1月9日木曜日

    #mikutter 0.2.2.1476


    • あけましておめでとうございます。
    • RubyGtk2 2.0.3以降を使用するとクラッシュする問題
    • Twitterの仕様変更を受け、REST APIリクエストをSSLに変更 (thanks @osa_k)
    各種変更対応です。このアップデートは全てのユーザが直ちに行うことを推奨します。

    RubyGtk2

    12/28にリリースされた RubyGtk2 2.0.3以降にバージョンアップするとmikutterを使用することができませんでした。このアップデートでは、RubyGtk2のバージョンが2.0.3未満でもそれ以降でも動作します。
    なお、Ruby 2.1では動作するかと思いますが、まだちゃんと確認していません。

    Twitterの仕様変更について

    1/14から、次のリンク先にある変更によって、今回より前にリリースされたmikutterが使用できなくなります。UserStream以外の全ての機能(ツイート投稿など)が使用できなくなるという情報が入っています。
    特に、新規にmikutterを使い始める時、認証できません。二次配布元の管理者の方はご注意ください。

    2014年1月5日日曜日

    mikutter 4年目

    あけましておめでとうございます。mikutterは2013/12/25を以て、4歳になりました。恐ろしいことです。

    mikutterのリリース

    mikutter 0.2.1

    0.2.1はクリスマスリリースの予定でしたが、品質を高めるために1/12まで延期された、今年最初のリリースです。
    内容は…mikutterコマンドにアイコンが設定できるとか、タブツールバーとか…見た目には影響があるが、かなり小さいリリースですね。マイナーバージョンが上がっただけですからこんなもんでしょう。

    mikutter 0.2.2

    5/12にリリースされた 0.2.2 は、プラグインの強化を主な内容としたアップデートでした。

    ショートカットキー

    コマンドのインクリメンタルサーチ機能は、増えてきたプラグインによって、ヘビーユーザーがmikutterコマンドを探すのが大変だったため搭載した機能です。これが必要になるくらい沢山のプラグインが誕生したということでもあります。

    実績

    以前から、マルチペイン等の、使っている過程では存在がわからない機能についてはWebサイトで紹介するなど、できるだけユーザに知ってもらう工夫をしていましたが、ほとんどのプラットフォームではパッケージマネージャ等によってソフトウェアをインストールしますから、わざわざアクセスする人は少ないです。
    例えば、長くmikutterを使っていたのにマルチペインを見て、こんなことができるのかと驚く人もいました。こういう場合、わかりやすい場所に置くというアプローチを取るのが基本ですが、利便性を考えるとそうもいかないことも多いです。
    そこで考案されたのが実績プラグインです。実績と聞いて、mikutterを知らない人は「流石キチクラである」といった感じの反応を示しているのですが、皆さんご存知の通り、例えば前述したマルチペインを使う方法を提示するなど、ユーザに少しずつ使い方を学習させていくための機能がその実態です。
    結果は、効果覿面でした。実績で紹介している機能については、ほとんどのユーザが認知できているようで、既存のある機能を実装してほしいという要望をツイートする人が殆どいなくなったのです。
    ヘルプなども考えましたが、実績は、ドキュメントを参照する手間を省き、解除するたびに確実にユーザはレベルアップしていくのです。ま、この機能はパクリなんですけどね

    周辺の動き

    OSC

    今年も、オープンソースカンファレンスでは、東京・京都2会場で、mikutterユーザ会、mikutterの薄い本製作委員会がブースを出展してくれたようです。冬の東京には訪問し、いろんな人にお会いしました。これだけ長いこと続けて出展できているのは凄いことだと思います。私は当然多忙のため、冬の東京に顔を出すくらいしか関与してませんが。みんながこういうことをやってくれるというのは本当に有難いことです。

    mikutterの薄い本/コミックマーケット

    2013年は、mikutterの薄い本vol.4「Too late.」とvol.5「としぁくん家のておくれ事情」という、不名誉なタイトルの同人誌が作成されました。
    内容についてはここでは詳しく触れませんが、どちらも多くの人が寄稿してくれました。更に、この2冊についてはどちらもサークル「mikutterの薄い本製作委員会」のブースを構え、コミックマーケット84と85にて頒布することができました。
    私は、夏は忙しかったので出席を見送りましたが、先日C85には行きました。個人的にはコミケ初参加ということもあって非常に楽しめました。天気にも恵まれてよかったですね。幾つかのブースはちょっと炎上していましたが…

    今年、とくに下半期は全くと言っていいほどmikutterに触れることができませんでしたし、mikutter関連のコードを書くとなると尚更でした。正直Rubyとかもうよく覚えていないし、今まで波はあったとはいえ定常的にmikutterにコミットし続けてきていたのを突然やめてしまったので、昔のコードを久しぶりに見るような心境でした。
    そんな中、ブースに訪れてくれた皆さんから励ましの言葉を頂いたり、ブースに足を運んでくださったメガネケエス作者と「私はmikutterの作者です」と言葉をかわしたりするうちに、そういえばこれは俺が始めたプロジェクトだったんだと思い出すことができ、今年もより洗練された悪ふざけを提供していきたいという気が起きてきました。

    外部の動き

    いいからapt-getだ!

    9月、Debianのリポジトリにmikutterが収録されました。UbuntuをはじめとしたDebianベースのディストリビューションに収録されるようになりました。Ubuntuで標準提供されるというのはかなり大きいことだと思うのですが、正直それがどれだけ影響があったのかははかりかねます。目に見える影響は…?

    雑誌掲載

    その影響か、雑誌「日経Linux」1月号の特集「最強ソフト47導入&活用法に掲載されました(反応)。
    知る限りではこれが雑誌への初掲載となります。1コーナーにちょっと載っただけですけどね。

    反省

    反省といっても、2013年は本当に何もできなかったので、せいぜい来年はゆったり過ごせるといいね、と言うくらいしかできませんね。

    mikutterとは単なる悪ふざけです。余裕のある生活があっての悪ふざけですから、祈るばかりですね。余裕があれば、これを書いてる今みたいに、家でmikutterで時間を溶かす生活をすると思うので、そうなると自然とコードを書くようになるでしょうし。となると、あとは今後の展望を書きたいところです。0.3の予定は内部的には既にほぼ確定しており、幾つかは完成しつつあります。あえて書きませんが、先日コミケで頒布されたmikutterの薄い本vol.5では、新機能の一つにスポットライトを当てています。また、多言語化についても着々と進めてくれているようです。

    0.3以降の今年の目標となると、いつもどおり特に決まっていません。今年もmikutterプラットフォームでわいわいやれるといいですね。これからもよろしくお願いします。