mikutterの技術的なことを書いていこう

2016年1月31日日曜日

#mikutter 3.3.5

  • 言語ファイル更新
    • en
    • zh_TW
  • 一部のツイートがリツイートできないことがあった
  • gyazoの画像ビューができなくなっていた
年末にバックアップHDDが吹き飛んだので、WD Redの3TBのやつ買いました。前は1TBで値段は覚えてません。覚えてないのに、安くなったなぁって思います。不思議ですね。容量に対するの価格を見て3TBにしました。前のは1TBを2年でやっとあふれさせたみたいな感じだったので、一生使えそうです。

10年前とかは、これからは動画とかめっちゃ扱うようになってアホみたいに食っていくんだろうなと思っていたのですが、俺は録画とかしないし、アニメや映画はネットで見れるし、写真は大きくなりましたが、PCよりスマートフォンの方が容量困ること多いので、扱うデータが大きくなったという実感は少ないですね。音楽も増える一方なんですが、あれは意外としれてるんですよね。何であれ、収集する人にはいくらあっても足りないと思うんですが。

今回買ったのはバックアップなので、直接アクセスすることはめったに無いでしょう。バックアップは役に立てる機会がないに越したことはないです。

2016年1月21日木曜日

#mikutter 3.3.4

  • 関西弁ロケールで未翻訳だった部分を埋めたやで
  • Ruby 2.3でdeprecatedになったメソッドなどを使用しない
阪神は関係なかった、いいね?

2016年1月11日月曜日

#mikutter 6年目

mikutterは 2015/12/25 を以て、6年目に入りました。今年も一年、よろしくお願いします。

mikutterの進化

3.3

mikutterにとって、2015年はbugfix以外のアップデートが史上最も少ない(一度しか行われなかった)年でした。その唯一のアップデートが3.3でした。

例年ならここに、3.3で変更した内容を書いていくところですが、今回1つしかリリースしていないので意味がないんですよね。複数あれば、一つの記事でそれらの変更が全て見られることには意味があるんですが、まだリリースされて間もないので、このブログを読むような人なら全部知っているわけです。

mikutter 3.3の新機能

みくったー さんてんさんの しんきのう、575だ

5年目の記事を見ていると、どうやら誕生日にリリースできたのは今回で二度目らしいです。ほかにここに書くべきことはありませんでした。

周辺の動き

mikutterの薄い本

コミケお疲れ様でした。今年は、夏のOSC Kyotoが初出のmikutterの薄い本vol.8、C89ではvol.9の二冊が頒布されました。夏はダウンしていたので何も出来ませんでしたが、C89には参加もして、ブースをジャックしてました。

C89の私の記事では、Minecraftサーバを操るためのコードをmikutterのプラグインシステムを用いてきれいにまとめる方法をとおして、Pluggaloidについて説明しました。
残念ながら記事はまだWeb上には公開されていませんが、今回使用したコードは私のgithubリポジトリから入手できます。
vol.9は他にも神棚の話や、事故をマネタイズする話、つついさんに狙われている人の話、バニラ環境における高効率ゾンビピッグマンTTの話、果ては謎のギャグ漫画など、mikutterとは何なのかを読者に問いかける哲学書でした。

OSC

今年も各方面で開催されるOSCでNetBSDな人たちがmikutterブースを展開して宣伝してくださっていたようです。ありがとうございます。
夏はOSC Kyotoに参加しようとしていたのですが、入院期間と重なってしまったので急遽喫茶室長に頼んで薄い本頒布所にしてもらいました。関西ではmikutterの薄い本を入手する機会が少ないので京都は重要なのです。

mikutterの危機

mikutterを利用している沢山の人に心配していただいたようでありがとうございました。その後元気になったということはご存知だと思いますが、コミケに行った時に、思ったより心配かけてしまってたのかなと思ったので、少しだけ触れておこうかなと思います。
mikutter 5年目の記事では
やっぱり、仕事が平和だとくだらないことに時間を使えるので、mikutterが充実するんですね
などと書いていました。いや本当にこれだ。
今年は早速前半はつらい感じなのですが、いろいろ進めていけたらいいなと思います
おめでたいやつだな。
いろいろ書いてしまうと角が立つので抽象的なことしか書きませんが、健康には気をつけて、などとは申しません。体調管理の権限が無くなったその先に、本当の†ヤバい†がある。マイナーなOSSプロジェクトでは開発が停止した後にフォークされて別の道を歩む可能性は低いでしょう。mikutterのような極めてくだらないソフトウェアでは尚更です。普通に考えてこんなものを5年も開発しているのおかしいですからね。この記事のタイトルは見たくない。

Twitterクライアント開発終了ガチャの抽選テーブルは、

  • [DR]Twitterに愛想尽かして終わる
  • [R]心ないユーザの罵倒でモチベが消えて終わる
  • [N]誰にも気づかれずに終わる

…という具合になっていて、これはこれで後味が悪いのですが、mikutterが[UR]一身上の都合 を引き当てることなく持ちこたえて本当に良かった。良かったな。なんやかんや言って、続くことは良いことだと思います。

Twitterクライアントにとっての5年

伝統的に毎年初めの記事を「mikutter n年目」としていますが、これは「n-1歳になったので今年から開発n年目」ということです。だからmikutterは5歳です。去年の記事とか自分が混乱してしまっていて微妙に数字が間違ってますね。来年の俺がこれを見ていたら、彼から見て一昨年の記事を直してくれることでしょう。ややこしいな。

2012年、API 1.1/Display Requirementsの制定によっていくつかのTwitterクライアントは開発終了を宣言、いくつかは開発のモチベーションを失い、事実上の開発停止状態になりました。その中に、TwitやP3のような、現在から見れば殆どTwitterと同時に生まれたようなTwitterクライアントがあったことは、まだ記憶に新しいです。これらは2007年に開発が始まり、2012年に開発停止を発表しました。5年の間に、Twitterにはそれだけの変化があったのです。

あの頃の騒動を覚えている身としては、いろいろ考えさせられてしまうものです。とはいえ、黎明期を支えた彼らのような高い志があったわけでもなく、ただなんとなくmikutterはここまで生きてきてしまいました。こんなことで良いのかな、と思うこともありますが、気張り過ぎないからここまで無理なく続いているのだろうとも思います。

まとめ

ここ数年、「今年はあんまり何も出来なかった」がボジョレーヌーボーみたいになってますが、mikutterはここまで続いたことは事実ですし、まだ当分歳を重ねていくことでしょう。
一応、今年はこれをしようみたいな目標もぼんやりとあるので、何かしらのアップデートはあると思います。今年もそんなテキトウな感じで、よろしくお願いします。

2016年1月7日木曜日

#mikutter 3.3.3

  • 言語ファイル更新
  • 設定押したらクラッシュするやつのfix入れ忘れとったゎw
ゾロ目をクソくだらんミスで消費してしまった

#mikutter 3.3.2

  • あけましておめでとうございます
  • いくつかのクラッシュする不具合
  • 設定ボタンを押すとクラッシュする場合があった
  • Ruby 2.3でレガシーとなったメソッドの利用をやめる

Ruby 2.3は特に問題ないのでもう皆さん使ってると思います。そろそろRuby 2.0のサポートも切れるので、次のマイナーアップデートではRuby 2.1以降をサポートとしようかな。

Ruby毎回早くなってるみたいで、確かにベンチマークとか取ると概ねカタログ通りの違いはあるのだけれどmikutterが早くなったという気はあまりしません。Ruby2.3はまだ見てない。違いのわからない男。もっともmikutterは今となっては速さは問題になることはあまりないのですが。Ruby1.9は俺達の中で生き続けている。mikutterではもうサポートしてないけど。

コミケ89もお疲れ様でした。今回かなり人が多くて、病み上がりだったこともあってお使いがめっちゃ大変でした。mikutterブースは平和で、ブースに侵入してmikutterをgtk3対応するおじさんとかがいて和やかな感じでした。この辺のことはまた別の記事に書きたい。皆さん有り難うございました。

次回のmikutterはバージョン3.4を予定していて、実装する機能などは未定です。去年一度しかマイナーバージョンを上げられなかったのでもっとマイナーバージョン回転させて徳を積んでやってる感出したい。あとmikutterも12/25に誕生日を迎えたので、去年一年を振り返って記事を残しておきたいと思っています。去年何やったかな…。

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というプラグインを作りました。ここまで読んだ人はこれから学ぶことは何もないと思いますが、必要な部分だけが切りだされているので、改造するには良いと思います。