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ヶ月経っていた(おしまい)