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

2015年12月28日月曜日

#mikutter 3.3.1

  • UserStreamの処理でクラッシュすることがあった
  • リストの追加でクラッシュすることがあった

バグフィックスです。今年最後のアップデートだと思います。明日からはコミケに参加してきますので。
mikutter 3.3を使っていたらステータスバーに表示されているのでご存知かもしれませんが、コミケ3日目にはmikutterの薄い本が頒布されます。今回も私は寄稿させてもらいました。危うく前回が遺稿になるところだったことを考えると、今回も又私の記事に金を出せる皆さんは本当に幸運ですよ。


2015年12月26日土曜日

Postboxを使う

今回はmikutter 3.3のPostboxのお話です。

3.3では、Postboxに大幅な改修が入りました。
古いAPIで呼び出しても一応、今までどおり動作します。もし動かなければ、mikutter側の不具合として修正される可能性があります。そこは信頼と安心のmikutterなのですが、かといって変更されたということは以前ではいろいろと不便だったわけです。これを機に、新しい使い方を学びましょう。

Postboxとは


Twitterへ投稿するテキストを入力する場所です。ReplyやDirect Messageもこれが使われています。
当然これだけ基本的な機能なので、mikutter最初期からあるコードでもあります。

gtk_postbox.rb: http://dev.mikutter.hachune.net/projects/mikutter/repository/changes/core/mui/gtk_postbox.rb?rev=master

Postboxを使う

rdocを見れば、Postboxで新しくできるようになったことがなんとなくわかります。今回は従来でも出来たことも合わせて、こいつが何を出来るのか見ていきます。

前例から学ぶ

使い方ですが、Gtk::PostBoxを直接使うのではなく、postbox プラグインDSLメソッドを使います。
実際にcommandプラグインを見てみるのが一番です。リプライを送るためのPostboxを呼び出すために、opt.widget.create_postboxを呼び出しています。ここでopt.widgetは、:timelineロールのコマンドなので、Plugin::GUI::Timelineのインスタンスです。

Reply

Replyは簡単で、to:に宛先のMessageを指定するだけでReplyにはなります。しかしTwitterでは実は「@toshi_a」などとScreen Nameを入力しなくてもReplyになってしまいます。とはいえ未だに、Replyは相手のScreen Nameから始めるのが普通なので、最初からこれを入力しておく必要があります。
mikutterでは最初からPostboxに内容を入力しておくためにheader:オプションとfooter:オプションが用意されています。値はStringで、カーソルの前に入れるか、後に入れるかの違いです。Replyでは前に相手のScreen Nameを入れるので、headerを使っています。
最後に、use_blind_footer:というパラメータはtrueかfalseで、設定の「入力>フッタ>リプライの場合はフッタを表示しない」で設定された値を渡しています。これが真になると、設定したフッタが入ります。footer:はプラグインから設定するfooter、use_blind_footer:が指すfooterはユーザが設定するフッタを使うか否か、です。ややこしいですが我慢しましょう(後述)。

Legacy ReTweet

これについてはcommandプラグインの60行目あたりにあります。いわゆる非公式リツイートというやつです。古い機能でもはや使われることはありませんが、mikutterは機能の廃止には慎重なので未だに残っています(後述)。
古い機能ですが、これもPostboxの使い方の教材としては未だに現役です。
このコマンドで目新しいのは、先ほど触れたfooter:が実際に使われていることと、to_display_only:オプションです。
Replyをmikutterから入力するとき、Postboxの下に宛先のTweetが表示されますね。これはto:で指定されたMessageが表示されます。つまりto:には2つの機能があることになってしまっているわけです。多くの場合問題ではないのですが、非公式リツイートはReplyにしたくないケースもあるのです。こういう時にはto_display_only:にtrueを指定すると、to:が表示のためだけに使われ、誰にも宛てられていないTweetを投稿できます。
オプション引数の名前がかっこ悪いのは、乱用すべきでないからです。宛先として表示されているTweetがあるのに、投稿すると実際には宛先がないのですから、ユーザを混乱させる可能性があります。使うときは慎重に。

Quoted Tweet

3.3から実装された、俗に言う「コメント付きリツイート」ですね。quoted_messageプラグインがQuoted Tweetに関することを担当しています。もともとサードパーティプラグインだったものが取り込まれたものですが、このプラグインの30行目あたりにあるquoted_tweetコマンドは、取り込まれるにあたって追加されたものです。
Postboxに大幅な変更が入ったことで、最初からURLを入力した状態のPostboxを出現させることが出来ます。
わざわざ画像まで貼りましたが、ReplyとLegacy ReTweetを見てきたみなさんにとっては、これの実装から今更学ぶことはありません。footerが非公式リツイート形式からURLに変わっただけです。
そういえば先ほど慎重に使えと書いたto_display_onlyがここでも使われています。これはReplyにしたくはないが、下には宛先を表示しておきたいというケースの好例です。

Postboxをとりまく歴史

Postboxは最初からあるので、今まで数々の環境の変化を乗り越えてきたファイルのひとつでもあります。今回のようなAPIの改修が行われた経緯と、古いAPIが構築されてきた経緯を簡単に書いておきます。

非公式ReTweetの終焉

Twitterが「ReTweet」を実装したのはさすがにもう随分前ですが、ReTweetが実装された理由は、皆がつぶやきを共有し始めたからです。その時は「ワロタ RT @toshi_a: 元のTweet」みたいなTweetでReTweetを表現してました。実装されたことで従来の形式は「非公式リツイート」などと呼ばれており、mikutterのコードではLegacy ReTweetと。

「非公式リツイート」は衰退しましたが、ReTweetという基本的な機能はPostboxの中に組み込まれており、mikutterはできるだけ従来の機能を削除することはしないので、この機能は残り続けます。更に悪いことに、ReTweetはユーザが勝手にやっていた頃からこの名前だったため、Postboxには例えばretweetというオプションがありました。ここまで読んでいただいた皆さんはこれの意味を「非公式リツイートかどうかを判別する」ためだということが分かるでしょうが、経緯を知らなければ「なんでリツイートがこんなところに…?」と困惑することになるでしょう。あと、なんでPostboxがそんなことを知らなければならないのだ、という疑問も湧いてきます。

実はheader:とfooter:は、3.3から実装されたオプションです。では今まではどうやってテキストを挿入した状態のPostboxを作っていたのかというと、それはできませんでした。retweet:が真だったらLegacy ReTweetのfooterをつけるといったことを、Postboxが担当していたのです。

Quoted Tweet : 目的から機能に

今回、Quoted Tweetを実装するにあたって、新たにquoted:みたいなオプションも考えましたが、そんなことをしていては今後Poll機能(アンケート機能)などが実装されていくとキリがなくなってきます。また、主にネタツイート系のプラグインから、いきなり投稿するのではなく、Postboxを一度表示して、ユーザに編集や確認をさせたいという要望もありました。プラグイン毎に異なる目的があるなら、従来の「目的を聞くAPI」には限界があります。

そういうわけで、今回からは以上のようなAPIに刷新したわけです。

今後(できないこと)

Postboxの内容を動的に変えることがまだ(素直な方法では)できません。もうみんなやってるし別にいいかなとも思うのですが、抽象的な方法を用意しておくと、例えばgtk3とかに移行するなど、非互換な変更が入った時に、mikutter側で差異を吸収して引き続き使える可能性があるので良さそうです。

まとめ

Postboxを使ってみました。今回の知識を使って、nominateというプラグインを作りました。ここまで読んだ人はこれから学ぶことは何もないと思いますが、必要な部分だけが切りだされているので、改造するには良いと思います。

2015年12月25日金曜日

#mikutter 3.3.0

mikutter 3.3をリリースします。mikutter 6周年おめでとうございます。ちょうど1年ぶりのマイナーアップデートです。
  • ライブラリ
    • Delayer-Deferred
    • Pluggaloid
  • リツイートのリツイート
  • リツイートのいいね
  • コメント付きリツイート
    • 表示
    • 投稿
    • URLのコピー
    • 会話スレッドがコメント付きリツイートに対応
  • 非公開アカウントの投稿にアイコンを表示
  • 公式アカウントの投稿にアイコンを表示する設定を追加
  • 文字数カウントの方法を変更。URLが短縮・冗長化されることによる文字数の増減を考慮している
  • デーモンモードの改良
    • streamingプラグインを使えるようになった
    • サブコマンド account を追加。ユーザの登録をコマンドライン上から行える
  • お知らせ機能。mikutterサーバからステータスバーにメッセージが配信される
    • 他のシステムメッセージがあれば、表示されません
    • OSCやコミックマーケットなどの参加情報などを表示します。謎グッズをゲットだ
    • ステータスバークリックしたらブラウザが開くとかどう考えてもあたまがおかしいのでリンクはありません。ぐぐってください
    • 設定で非表示にできます
  • 画像サービスのサポートの強化
    • d250g2.com
    • yfrogのサポートを復活(ルータケーキのみ)
詳しことは、以下の記事を参照してください。

http://mikutter.blogspot.jp/2015/10/mikutter-33-features.html

翻訳もお待ちしております

https://www.transifex.com/lindwurm/mikutter

皆さんのcommitで成り立っています 感謝
$ git log --format="%an" 3.2.0..3.3.0 | sort | uniq
  • Akira Ouchi
  • Akito Miura
  • Kazuki Yamaguchi
  • Koga Osamu
  • Osamu Koga
  • Phenomer
  • Toshiaki Asai
  • cosmo0920
  • moguno

#mikutter 3.3.0-alpha2

  • d250g2.comのサブドメインの画像表示に対応
特にこれといったバグ報告なども上がってきてません。今回はもうある程度使われているので、今更という感じですね。今日のどこかでmikutter 3.3をリリースしてしまおうと思っています。

2015年12月23日水曜日

#mikutter 3.3.0 alpha1

mikutter 3.3 プレビュー版です。主な機能は以下の記事を参照してください。

http://mikutter.blogspot.jp/2015/10/mikutter-33-features.html

まだ本ベータ(?)じゃないので気をつけてください。一応、ユーザデータなどのバックアップをしたほうが良いと思います。

Redmineには楽しい仲間がいっぱいいっぱい!

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

バグ報告は集中すると思うので、Twitterではなく、Redmineにお願いします。パッチがある報告はいいぞ

2015年12月22日火曜日

#mikutter 3.2.12

  • mikutterの偽りの姿がクラッシュする

普通に使っていただいているユーザには問題ないですが、実績をあまりアンロックしていない人が起動するとあら不思議クラッシュしてしまうではありませんか。

やばいと思ったのでリリースを抑えきれなかった。

2015年12月19日土曜日

#mikutter 3.2.11

  • 一部環境でアイコン上のボタンをクリックしても反応しない
  • スペルミスしているメソッド名を正しく修正(3.3からバックポート)
    • 従来のメソッドを呼び出すと警告が表示される
ソフィーのアトリエが届いたのでしばらくプレイしていて、疲れたので一旦休憩と思ってカレンダー見たら1ヶ月経っていた(おしまい)

2015年11月15日日曜日

#mikutter 3.2.10

  • Twitterの規約変更に伴う変更(☆→♡)
  • gtk2 3.0.7を使う
  • コマンドライン上からmikutterのバージョンを確認できる-vオプションを作成(thanks @Akkiesoft)
実を言うとmikutterはもうだめです。
突然こんなこと言ってごめんね。
でも本当です。

4日後にものすごく

それが終わりの合図です。
程なく多めの有給取得が来るので
気をつけて。
それがやんだら、少しだけ間をおいて

2015年10月11日日曜日

mikutter 3.3の新機能

mikutter 3.3の季節がやってきました。暖めていたらそのうち年を越しそうなので、まだ全部終わってないですが先にやったこと(+やる予定のこと)を公開しようと思いました。いくつか、やるかわからないので書いてないこと・忘れてるので書いてないことがあります。そういうのはちょくちょく追記していきます。

コードの分離

mikutterのプラグインシステムはmikutter自体からは削除され、Pluggaloid gem に置き換えられました。これは、いくつかのパフォーマンスチューニングと機能追加を行い、mikutterに特化した機能を削除した汎用的なgemです。今後プラグインシステムはmikutterと別々に開発が進むことになります。

Pluggaloid gemが依存しているInstance Storage、Deferredも同様に分離されました。




Retweeted Retweet

Twitterではリツイートをリツイートできるようになりました。自分のリツイートをリツイートされた場合、mikutterのRTインジケータにもこれが表示されます。

Quoted Tweet

Twitterでは、ツイートに別のツイートのパーマリンクを埋め込むことで、ツイートに言及できるようになりました。Twitter公式クライアントでは「コメント付きリツイート」という名前になっています。
サードパーティプラグインではすでにこれに対応するものがありましたが、今回からこのプラグインが「quoted_tweet」プラグインとしてバンドルされるようになりました。機能的には元となったnested_quoteプラグインにいくつか付け加えただけなので、mikutter 3.3になったらnested_quoteプラグインを入れている人は外してください。

引用ツイートを表示する

タイムライン上に次のように表示されます。Twitterとは違い、複数のパーマリンクにも対応しています。



引用ツイート

   引用したいツイートからmikutterコマンド「ツイートを引用」を選べば、画面上部の投稿内容入力ボックスに新しく、末尾にパーマリンクが入力された状態の投稿内容入力ボックスが現れます。
   もちろん、複数選択した場合はそれら全てが入力された状態になります。当然あまりたくさんを一度に引用し過ぎると文字数制限にひっかかるのでご注意を。

ツイートのURLをコピー

ツイートのパーマリンクをクリップボードにコピーします。

複数のツイートを選択しておけば、それら全てのパーマリンクを改行で区切った状態でコピーできます。Togetter等にまとめたり、他人のツイートを言質に取るために有用です。

引用データソース

自分のツイートが引用された時、それだけが流れてくるデータソースが追加されます。複数アカウントで運用しているときは、各アカウントごとのデータソースも追加されます。

スマートスレッド(会話)


スマートスレッドは、従来のin_reply_to_statusの関係だけではなく、引用ツイートも抽出します。

まず従来の方法で取得したツイートの本文に含まれるツイートのURLを探します。そしてそのURLが示すツイートもスレッド内に展開します(引用ツイート)。

更に、mikutterでは引用されているツイートもこの対象に含みます。すなわち、スレッド内にあるツイートのうちどれかを引用しているツイートも、会話スレッドから見ることができます。

非公開アカウント・公式アカウント

設定で、非公開アカウントのツイートに常にアイコンを表示したところ
特に意味のない全部乗せがTwitterを襲う


Twitterを長く続けていると、あの人もこの人も就職して非公開アカウントになっていきます。鍵垢は甘えなのは言うまでもないですが、こうも増えたらそうも言ってられないようになってきました。
アイコンオーバーボタンのリツイートは、投稿者が非公開アカウントだった場合に南京錠のマークに変わり、クリックできなくなります。
また、「設定→表示→非公開アカウント→非公開アカウントのつぶやきにはアイコンを表示」のチェックを有効にすることで、マウスをアイコン上に載せていない間もこのマークを常に表示する設定もできます。TL上でその人が非公開アカウントかどうかを常に確認できるわけです。

また、Twitter社から承認された公式アカウントの場合は、まりもがコバルトブルーに変わってチェックマークがつきます。これも非公開アカウントの場合と同様に、マウスオーバー中のみ表示、常時表示を切り替えることができます。

比較的正確な文字数カウント

「d250g2.com」の部分がURLとして認識され、見た目より長く扱われている

ツイートは140文字までですが、TwitterはURLを冗長化する機能があるため、正確な文字数はクライアントサイドで測ることができません。URLの区切りが確かではないからです。そこでmikutter3.3では、Twitter社がメンテナンスしているtwitter-text gemを利用して、URLの判定を行うようにしました。
当然これが現在のTwitterのURL検出アルゴリズムと一致する保証はないので、mikutterでは引き続き、字数オーバーしていても投稿は行えるようになっています。Twitter APIサーバから字数オーバーと言われたら、観念してゴルフをしましょう。

コマンドラインからアカウント追加が可能に

mikutter 3ではGUIを使わない場合にアカウント登録をする良い方法がありませんでしたが、以下のようなコマンドでmikutterにTwitterアカウントを追加できるようになりました。

$ mikutter account

これで、botをサーバに設置する時に楽ができるようになったと思います。

一部メソッドのリネーム

今まで、typoや勘違いでつけてしまった間違ったメソッド名などはエイリアスで対応していて、いちいちアナウンスもしてなかったのですが、今回からは古い名前で呼び出すとstderrに警告を表示するようにしました。
今回は以下のメソッドがdeprecateになっています。
  • Message#parma_link → Message#perma_link (typo)
  • 様々なクラスのregist → register (Janglish)
尚、過去にリネームしたメソッドを呼び出しても特に何も表示されません。調べるのが大変だったので。上記メソッドを使っている場合は、新しいメソッドを使うように変更してください。プラグインが移行しやすいように、これらの変更はmikutter 3.2.11にバックポートしました。

mikutterコアのデバッグ出力のポリシー

他の警告がわかりやすいようにnoticeレベルのエラーメッセージの大半を廃止しています。

リリース時期

まだ厳密には決まってません。期限を切るよりは、ここに書いたことを全部実装したいです。
とはいっても前回から随分リリースが空いていて、引用ツイート等も今回から漸く正式にサポートしているため、正式なリリースが私に渇望されている状況です。そのことを考えると、10月中にαリリースを行おうと思います。そこに間に合わないと、クリスマスリリースになるので…。

2015年9月27日日曜日

#mikutter 3.2.9

  • Instagramの画像が表示できなかった(thanks @moguno)
  • 画像自体のURLから画像を表示するとき、拡張子が大文字だとうまくいってなかった(thanks @moguno)
  • 自分の非公開リストや非公開ユーザの作ったリストを購読している時、それを読む権限のないユーザに切り替えるとエラーが表示されていた
  • リスト取得のためのTwitter APIリクエストを軽減
去年のクリスマスから置いていた不具合もあります。ようやく動けるようになってから波に乗ってきたかなあという感じです。
3.2.9ということで、次のリリースでTEENYが二桁になりますが、mikutterは一桁縛りはやってないので普通に3.2.10にします。

mikutter 3.3ではデーモンモード(GUI系プラグインを抜いた状態)のサポートを強化しています。その一環で、例えばmikutterのサブコマンド「account」で、Twitterアカウントを追加する機能をつけるなどしました。サブコマンドはバージョンアップで文法が変わる可能性があるので、使う前には毎回helpを見ましょう。
現在これで動いているbotは、私の管理している @cn_check です。sourceがcn_checkとかいうクライアント名になってますがmikutterです。このようなプラグインで動いています。
Twitterクライアント(GUIプラグイン)の更なるクオリティアップのためにデーモンモードは手薄になってましたが、今後はある程度安定して開発が出来そうです。

2015年9月20日日曜日

#mikutter 3.2.8

  • Ruby-GNOME2 3.0.3に対応
  • 抽出タブの条件を空にしても、全ての条件にマッチしないことがあった

追い越したつもりだったRuby-GNOME2に追いつかれそうになって焦っています。SemVerにしますみたいなとんちはもう使えないので流石にメジャーバージョンを10倍とかできないし、リリース早めるしか無いのか…。

2015年9月12日土曜日

#mikutter 3.2.7


  • Activityの種類はSymbolとStringどちらを渡しても正しく動作するようになった
  • 複数アカウントを使っているとき全ての UserStream が自分の Service に関係ないフォローイベントに反応していた
  • Activityプラグインが、受け取ったことのない通知を受取済みであると誤認する可能性(Thanks @rhe__)
不具合の修正です。だんだんmikutter 3.3に収録される機能が出揃ってきているので、そろそろ3.2を使うのがキツいです。3.2のリリース以降は、高性能ゴミ箱やiPhone 6Sなんかが発売されていてステータスバーのネタも潤沢にあります。

2015年8月29日土曜日

#mikutter 3.2.6

  • Enumerator.newをブロックなしで呼んでたくさん警告されていた(Thanks @cosmo__)
  •  Tooltipを作りすぎない
些細なブラッシュアップです。現在はmikutter 3.3に収録予定の機能を実装しています。なんでquoted_tweetはひとつのパーマリンクにしか対応しとらんのや…。

2015年7月19日日曜日

#mikutter 3.2.5

  • 起動時に復元されるプロフィールタブのユーザ情報が正しく復元されない
  • 自分のアカウントのユーザオブジェクトキャッシュが更新されない
  • リスト追加時にクラッシュすることがある
 なんの変哲もないバグフィックスたちです。仕事でいっぱい脳細胞が死んだので昔の自分が書いたコードを見てもあほなのかとしか思えない。ん、これはいつも言っているような…。

2015年6月15日月曜日

#mikutter 3.2.4

  • 抽出タブの多言語化漏れ。アンダースコア入れといた
  • 起動時、毎回moファイルを作成してしまっていた
  • 言語ファイル更新

多言語化周りの修正ばかりになってしまってるなあ、もっといろいろやったと思ってたのに。
日本人には全く関係ないかというとそういうわけでもなく、起動時の無駄な処理が省かれているので起動が早くはなっているはずです。私の環境ではまったく分かりませんでした。アップデートの必要性はそんなに高くないかな。


2015年5月14日木曜日

#mikutter 3.2.3

  • 特定のURLを展開する時にクラッシュすることがあった
  • 一部の環境でガベージコレクション時にクラッシュする問題の対策
  • 画像サービスの表示を新たにサポート
  • ruby-gtk2 2.2.5に対応

リハビリを開始しました。
もうmikutter 3.2.2に残っている不具合に情が移ってくる頃合いかと思いますが、残念ながらそのうちのいくつかとお別れする時が来ました。

このアップデートでなによりmikutterユーザにとって嬉しいのは、いわゆる「ドイツのトリ」と呼ばれているあいつがphoto_supportプラグインに追加されたことです。
私が最初これを見た時は鳥だと認識できず、メレンゲモンスターとか言っていました。今回、相当暇だったのか、これを撮影した @Asyley_ さんが上記URLでクリエイティブをコモンズしてくださいました。旅行先で撮影したちょっとおもしろいだけの写真を一年以上ネタとして引っ張る @Asyley_ さんの、「続ける」精神力をmikutterはリスペクトしています。
みんなが飽きても頻繁に自分でネタにし続け、飽きを通り越してみんなの日常にしてしまった歴史は、mikutterそっくりです。mikutterがこういった形で敬意を表するのは当然のことだと思います。全部嘘ですけど。

それにしてもこのシルエット、たまりませんね。

2015年1月10日土曜日

#mikutter 3.2.2

  • 抽出タブのソースを指定しなかった場合にクラッシュする場合があった
  • Ruby2.2で起動した時に、マシンのタイムゾーンに関係なく、ツイートの投稿時刻・アカウント登録時刻がUTCで表示されていた
事実上のRuby2.2対応です。流石にRubyちゃんとは誕生日が同じなので、そこまで迅速に対応できませんでした。先に持ってきてやってればよかったんですが、今回もこの程度の修正で動いてるので、ついつい気が抜けますね。良いことです。

2015年1月2日金曜日

#mikutter 5年目

あけましておめでとうございます。mikutterは 2014/12/25 を以て、5歳になりました。今年も一年、よろしくお願いします。

mikutterの進化
3.0
6月にリリースを予定していたmikutter 0.3でしたが、セマンティックバージョニングを採用することになったので、3.0というバージョンになりました。かといって別にメジャーバージョンが上がっても不安定版なことには変わりないので、今までとは何も変わりません。
多言語化
mikutter 3.0からは、一部の人待望の多言語化が行われました。起動時のロケールによって言語が切り替わるというものです。各言語の翻訳は、Transifexにて行われています。
多言語化というのは、今までの私には経験したことのないものでした。

過去には、プログラミングがしたいのに、その本来の目的を忘れてコメントの英語を何時間も考えたりしたこともありました。mikutterではそういった反省を活かして、そういうことに関して私が無理しなくていいように作っています。詳しくは語りませんが、英語を書くコスト、無理をして書いた文法的に間違った英文を数年後に読むコストをカットできたからこそ、今mikutterがあるのです。

そんななかで、mikutterに多言語対応して欲しい外国人という存在がぽつぽつと現れてきました。英語のUIをもつソフトウェアでも、機能的に問題があれば使われることはありません。mikutterはその意味で、言語の壁を超えて使われようとしているのですから、喜ばしいことです。

そういう経緯があるので、mikutterはベース言語を日本語とし、日本語から他の言語に翻訳をしてもらっています。mikutterには日本語独特の言い回しが多く、翻訳に困ることもしばしばあるようですが、そうやって頭をひねって、翻訳にユーモアを加えていくその一連の体験こそが、mikutterなのではないでしょうか。うわ、なんかめっちゃいいこと言ってるみたいになってるわ。

多言語対応の経緯なんかについては、以下の記事も詳しいです。
 
マルチアカウント
これももう随分前の事のように思えますが、つい最近のことなんですね。

これは昔から土台が存在していたのですが、マルチアカウントを気にしなければならない部分は多いので、コーナーケースではまだ小さな不具合が残っていて、なかなか厄介です。これについては折りにふれて語っているところなので、省略します。

チュートリアル
これは特に発表しなかったので、以前から使ってくれている人は気づいていないと思いますが、mikutterを初めて起動した時の挙動が変わっています。

初めて起動した時に灰色のダイアログが出てきていたのを覚えているでしょうか。mikutter 3.0からは、あのような無粋なモーダルは廃止して、みくったーちゃんと対話しながらセットアップを進めていくのです。

2013年はほとんどmikutterに何もできなかった原因は仕事です。その時携わっていた仕事で作っていたソフトウェアが、導入部分をかなり作りこんでおり、これだと思ってアイデアを拝借してきたのです。

mikutterを使いはじめる人が最初にあの残念なダイアログボックスを見ることに、予てから問題意識はあったのですが、かといってこれといった打開策もありませんでした。一年何もできなかったと恨み言を言うだけではなく、なにか持って帰ってやろうと考えて、このチュートリアル機能を思いつきました。以前は実現が難しかったのですが、マルチアカウントによって、アカウントがない状態でもmikutterが動くようになったので、今回実現にこぎつけました。

きっと、0.2系と3系では、初めてmikutterを使う人が抱く印象は全く違うのではないでしょうか。

3.1
3.1は、3.0のブラッシュアップという位置づけでした。大きな変更があった3.0の順当な改良版です。Ruby 1.9のサポートを終了したのもここでしたね。
Entityの書き換え対応
Entityを書き換える機能をつけました。bitlyなど、サードパーティのURL展開の時に処理がブロックされていたとか、かっこ悪い問題を抱えていたので、それの対策です。あとからエンティティを書き換えるという概念が加わりました。botや企業のアカウントでは、bitlyでURLを短縮しているものも少なくありません。そういったアカウントがツイートしたURLが、一旦bitlyのまま表示されて、すぐに展開後に置き換わる、というのを見たことがあるのではないでしょうか。

ついでに、黒魔術で他のサービスに対応するプラグインが、リンクなどを貼りやすくなりました。
3.2
mikutter 3.2.1 が現在の最新版です。これはmikutter5周年記念のリリースでした。25日ぴったりにリリース出来たのは、恐らく初めてだと思います(ログ漁ったけど意外と毎回遅れていた)。
画像表示
画像の表示には前からいろいろな問題がありましたが、ようやく昨今の要求に応えうる変更が入ったのが、3.2でした。画像ウィンドウは、以前は画像プレビューと呼んでいました。これはブラウザで見る前に、mikutter上で簡単に確認できる機能だったのです。全体の動きなどは、yorufukurouなどを参考にしていました。

一方、新しく書きなおされた画像表示プラグインは、プレビューなどではなく、メディアビューアを意識しています。今は基本部分しかできていないので、そんなにできることは変わっていませんが、基盤部分はすでにその要件を満たしうるものになっています。あまり出来てもいない将来の話はしたくないので、今後にご期待下さい。
スキン
アイコンを差し替える機能です。WMのテーマにあったmikutterのUIアイコンを設定できるようになります。これはまだ開発中で、試験的な実装が3.2に搭載されています。プラグイン開発者にとっても便利な機能になることでしょう。
抽出タブ
マルチアカウントが実装されたことで注目を浴び始めた抽出タブですが、毎回いろんな変更が入っています。今年一年(0.2.2 〜 3.2)の抽出タブの変化だけを切り出してみました。
編集画面の刷新
タブの編集画面が、データソース・条件・オプションの3画面になりました。抽出タブの論理的な要素を画面ごとに分けたのです。 このことによって、データソースが膨大な数になっても耐えられるようになりました。
データソースがプラグインで追加可能に
抽出タブといえば、複数アカウントのミキサのような役割がありますが、それ自体をプラグインで拡張できるのが面白いところです。 サードパーティプラグインがデータソースを追加できるようになったことは、抽出タブの夜明けでした。もちろん、標準プラグインにも、このことを利用するものがあります。
  • マルチアカウント。各アカウント毎にホームTL、メンションを追加します。標準のTLでは、全アカウントのものが一緒になってしまいますが、あるアカウントのホームTLを見たい!という場合に、このデータソースが利用できます。複数のアカウントをmikutterで使っていくうえでは欠かせない存在です。
  • リスト。Twitterのリストを扱うlistプラグインは、自らタブを提供することをやめて抽出タブのデータソースを提供するようになりました。
    ただでさえ複雑だったリストプラグインがマルチアカウントで大変なことになっており、それを解決する方法として、機能を複数のプラグインに分断することにしました。
    その中で、タブの表示部分は、抽出タブに任せることにしたのです。このことは良し悪しあったのですが、抽出タブはタイムラインを表示することに優れた拡張性を持っており、アイコンの変更や、フィルタ条件の追加ができるようになりました。 
抽出条件の対象追加機能
抽出タブはついにフィルタ条件までもを追加できるようになりました。defextractcondition プラグインDSLは、「ユーザのbio」に含まれている文字列とか、任意の情報を条件として追加することができます。抽出タブを拡張するプラグインを巧く組み合わせることで、カスタムタイムラインを作成するプラグインは、もはや書く必要がなくなりつつあります。 
周辺の動き
mikutterの薄い本
今年は夏にmikutterの薄い本vol.6.0、年末のコミケで頒布されたvol.7が公開されました。

vol.6.0は、最近mikutterでやばめのプラグインを作っている新規ユーザが多数寄稿してくれています。これだけ続けていれば同じ奴ばかり書きそうなものですが、現実には次々と新しいユーザが出てきていて、記事を書いてくれています。喜ばしいことです。

彼らが持つそれぞれの独特な世界観が凝縮された一冊だったと思います。これほどまでに「カオス」なmikutterの薄い本は、今までなかったかも知れません。バージョン6という不安を払拭する出来でした(IEやWindowsNTや某Pのつく言語がこのバージョン6でひどい目に遭っている)。

vol.7は、はからずも3人の寄稿者がmikutterをより深く知るために、それぞれ別々の角度からmikutterを考察することになりました。

tsutsuii さんは、NetBSDを様々なマシンにインストールし、mikutterを起動するという長年の活動を振り返りながらmikutterの歴史を紐解き、mikutterそれ自体の本質に迫ります。moguno さんは、mikutterにコミットしたスキン機能の紹介を通して、mikutterの思想を汲んだAPIの実例を示しています。そして私は、mikutter開発をするにあたって、mikutterをカスタマイズする道具としてRubyを捉え、よりmikutterプラグインを洗練されたものにするためにどのようにRubyを使っていけばいいのか、コードの書き方という表面的な観点から解説しました。

全体がわずか24ページに収まっているのも良いですね。是非いろんな人に読んで欲しいです。 mikutterの薄い本vol.7は、次回2月27日に開催予定のOSC Tokyoにて頒布されます。vol.6.0も在庫があったので頒布されると思います。また、mikutterの薄い本製作委員会のWebサイトからPDFをダウンロードすることもできます。
OSC
今年も各地のOSCで、Nから始まるコミュニティの方がmikutterを応援してくださっていたようです。mikutterユーザ会としては春秋のOSC Tokyoに、夏の京都には私主導で、mikutter名義で参加しました。


夏の方のレポートは、当時の記事があるので省きますが、展示にしてもセミナーにしても、手伝ってくれる、来てくれる人たちがいないと成り立ちません。皆さんの応援に圧倒的感謝です。

一昨年2013年はほとんど何もできず、こういったイベントには参加することができませんでした。コミケもそうですが、こういう場は開発のモチベーションに大きく貢献するので、来年も時間が許せばできるだけこういう場に出たいと思います。
コミックマーケット
mikutterの薄い本製作委員会がコミックマーケット86,87で、mikutterの薄い本6.0と7をそれぞれ頒布しました。夏の86は落選したので委託でしたが、87は当選し、当日は私も参加し、ブースで売り子をしていました。

サクチケをそらまめさんに渡してしまったので私は8時から並び、10時10分に入場しました。mikutterブースは朝からお客さんが途絶えず、私がブースを訪れた時にはデコにドイツのトリシールを貼った不審人物が既にいるなど、大盛況でした。あと、そらまめさんが俺の名刺を首から下げて「としぁです」とか言ってたせいで俺が女装してたと思ってる人がいたみたいで、コミケやばいなって思いました。場が場だけに信じてしまっても仕方ないかも知れません。

いろんな人にお会いできたのも良かったです。昨年過酷な労働によって感情がなくなった私に、自分がmikutterの作者だと思い出させてくれたメガネケエス作者や、AUR高速デプロイシステム2GMonなど、なかなかお会いできない人にたくさん会うことができてとても有意義な一日でした。

まとめ
何もできてなかったんじゃないかなぁと思っていましたが、振り返ってみると2013年とうってかわって、mikutterの開発に結構リソースを割いていたようです。やっぱり、仕事が平和だとくだらないことに時間を使えるので、mikutterが充実するんですね。いいことです。今年は早速前半はつらい感じなのですが、いろいろ進めていけたらいいなと思います。

今年もmikutterをよろしくお願いします。

2015年1月1日木曜日

#mikutter 3.2.1

  • 抽出タブ: タブを編集しようとするとクラッシュ
  • あけおめ
不具合修正です。コミケなどでほとんど何もできなかったので致命的なものだけ。ヽ('ω')ノ三ヽ('ω')ノもうしわけねぇもうしわけねぇ

あけましておめでとうございます。今年も一年、よろしくお願いします。コミケのまとめとかは、また近いうちに。