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

2013年12月3日火曜日

mikutter Advent Calendar 2013 3日目 mikutterのマルチアカウント・マルチサービス

mikutter Advent Calendar 2013(http://www.adventar.org/calendars/120)三日目です。

今年ももうこんな時期ですか。今年を振り返るのはもう一月先にするとして、今回のネタは、mikutterマルチサービスの話です。

世の中のTwitterクライアントで先進的で人気なものはだいたい複数のアカウントを使い分けられるものですが、mikutter 0.2.2ではご存知の通り1アカウントしかサポートされてません。
しかし!0.3ではなんと、複数のサービス・複数のアカウントを同時に扱えるのです!

複数のサービスとは

複数アカウントはわかると思うんですが、複数サービスとはなんでしょうか。ここでいうサービスというのは、例えばTwitterのようなものです。SNSのほかに、メールやIRCも、ここでいう「サービス」の範疇です。
そう!遂にmikutterは、Twitterクライアントから、「SNSクライアント」いや、「コミュニケーション・プラットフォーム・クライアント」になったと言っても過言ではありません!これは革命です。

イマドキのSNS

とはいえですよ、何に対応するかが肝心です(例えばmikutterがWassrクライアントだったらどうなっていたか)。mikutter 0.3では、任意のサービスをプラグインで提供できます!フゥフゥ!
というわけで、今回は、今年リリースされて既に100万人のユーザが居るSNS、「艦隊これくしょん」のアカウントをmikutterに登録して使ってみましょう!

艦これとは?

さて、私は艦これを遊んだことがないのですが、仮にもIT系エンジニアとして活動しているので、そこら辺の艦これプレイヤーより艦これには詳しいです(同業者との飲み会でこれを知らないと仕事が取れません)。私も艦これ博士ではありますが未プレイには変わりないので、知らないみんなも安心してください。また、艦これはあくまで「マルチサービス」のための例として出すだけなので、あんまり深く説明しません。興味を持ったら遊んでみましょう。

FLASHという壁

艦これは厳密にはソーシャルゲームという類のサービスです。ソーシャルゲームとはゲームのなかでも「ガチャ」という機能ないしそれに類する機能でモンスター(艦これの場合は船)が手に入るゲームのことで、一応名前にソーシャルと入っているから後付けでSNSみたいな要素も入っています。艦これの場合は、Twitterでみんながわいわいしているのがそれだと言う人もいますが、どうなんでしょう?…つまりmikutterに要求されるのは、Twitterで艦これワイワイしやすくするための機能です。
艦これは多くのソーシャルゲームと違って、サーフェイスと呼ばれる専用のゲーム機でプレイしますが、FLASH版はLinuxでも遊べます※。なので、FLASHが再生できたら艦これはプレイできるということになります。

※サーフェイスでも内部的にはFLASHを使用しているみたいです

作ってみる

では実際に作ってみましょう。テンプレートはお決まりですね。

$ mikutter generate kancolle
$ mikutter spec ~/.mikutter/plugin/kancolle

WebkitGTK

FLASHを再生するにはな、こうやってWebkitGTKをアアアアアアアアアア♡♡♡♡♡♡♡♡♡

# pacman -Syu webkit-gtk2 (Archの場合)
$ gem install webkit-gtk2

で、ブラウザを埋め込めばいいんだ!えいや!


簡単にWebkitでブラウザが表示できました。RubyGTK最高!まさに、早きこと島風のごとし、ですね!ああ、早きこと島風のごとしというのは艦これ用語でしてね、とりあえず速い!という意味です。うおーこの船はやきこと島風のごとしー!みたいな感じで使います。以後、艦これ用語をいくつか使いますが、いちいち説明はしません。皆さんも一緒に勉強しましょう。

…と、話は逸れましたが、もうここまでくれば実質暁の水平線に勝利を刻んだも同然ですね。細かい作りこみをやりましょう。

見た目を良くする

Linux界隈のプログラマの悪い癖は、見た目とUXをわきまえず、UIを質素にしてしまいがちなところです。質素なUIは、マシンにかける負荷が低い傾向にあるとか、深く考えなくても一定のユーザビリティを担保できるとかメリットもあるのですが、GUI面倒だとか、そういうネガティブな理由で手抜きをするのは良くないです。こういうプラグインのアイコンはしっかりきめておきましょう。

アイコンは文字と違って読めばわかるというものではありません。ここでは難しいUIの理論までは言及しませんが、一般的には誰でも経験的に知ってるものにしておくと混乱が無いです(フロッピーとかぐるぐる矢印など)。
で、艦これプラグインの場合、艦隊のアイドルと言われている那珂ちゃんをアイコンにしました。那珂ちゃんは車の展示会みたいなところにいる女と同じようなもので、通には嫌われており「解体」されるのですが、大抵の人は船より女のほうが好きですから人気です。

また、艦これプレイヤーには、艦これTLがあると便利だと思います。 mikutter プラグインはUIがいろいろといじれてとてもいいですね。こういうのもイベントやフィルタを使って島風のごとしですから、も〜っとmikutterに頼っていいですよ。

なにこれぇ?

課題

今、世界が「艦隊これくしょん」を必要としています。mikutterも転換期を迎えたと感じます。しかしmikutterフレームワークは、自然にこの変化を受け入れることができました。まるで、最初からそう設計されていたかのように。

人々はTwitterと艦これの自然な融合を望んでいます。サーフェイスに対抗するために、先日Canonicalは、サーフェイスより安くTwitterも艦これもできる「Ubuntuタブレット」の布石として、mikutterをバンドルしたUbuntu 13.10を島風のごとくリリースしました。また、Appleもこの流れを受けて、自社の開発するOSの最新版Marlionで、長らく1.8のまま放置していたRubyを2.0に改修し、mikutterの導入の簡略化を図りました (参考: 昨日のAdvent calendarの記事)。WindowsかMacか、という時代は既に轟沈しつつあり、サーフェイスかmikutterか、という時代はもうそこまで来ている!すでのな

しかし、冷静にmikutterの現状を見ると、そのようなベンダーの期待は過分であると言わざるを得ないのが現状です。最初のスクリーンショットを見てください。艦これの表示域があまりにも細いです。これはmikutter が「ペイン」を全て同じ大きさで扱うことが原因です。mikutterで本当に快適な艦これライフを送るには、mikutterがウィンドウマネージャになる必要があることを示唆しています。

使ってみる

githubで公開しています。艦これのアカウントはなくてもいいですが(俺は持ってない)、あったほうがいいと思います。mikutter 0.2.2.1430で動作確認しています。

https://github.com/toshia/mikutter-kancolle

まとめ

明日から年末までまた忙しいからこんなことをしている場合ではない。早く寝ること島風のごとしです!

2013年11月24日日曜日

#mikutter 0.2.2.1430


  • UserStreamに於いて、ツイートや通知が一部または全て欠落する問題
  • UserStreamで受信するツイートが極端に遅れる問題
ちょっとTwitter側の挙動が変わったのでちゃちゃっと対応です。
何も問題起きてないと思ってる人でも、気づいてないだけで遅延や部分欠落が発生している可能性が有ります。UserStreamがつながらない(ツイート受信が遅い)とツイートしている人がいましたが、このアップデートで改善します。

2013年11月4日月曜日

#mikutter 0.2.2.1410


  • 画像プレビュー
    • Tumblrの仕様変更に対応 (thanks @obsolete_std)
  • ネットワークから切断されている時、CPU使用率が100%になることがあった (thanks @penguin2716)
  • 会話スレッドに、過去のツイートを遡れないことがある問題
  • リスト操作時にまれにクラッシュする問題
ピコーン!実績解除!「一ヶ月mikutterのリリースを提供しない」!!!

今月はいろいろありましたね。Ubuntuに正式に取り込まれたのでaptで入るとか。あまり特定のディストリひいきしたくないので黙ってようと思ったんですが、最近のUbuntuはやっぱり無視できないです。Debianのおかげなのですが。他のディストリでもかなりアップデートこまめにやってもらってるので有難いです。Twitter側の不具合とかでクライアントが仕様変更とか最近は減ったけど、あるし。

先日会社の掃除をしていたら、階段で足を思いっきりぶつけましてね。尋常じゃなく痛かったけどそのまま仕事してたら結構内出血してて歩けないほど痛くなってきたんです。で、慌てて翌朝病院に行ったら骨とかは大丈夫だったんだけど、レントゲンの映像とか見せてくれたりするソフトがとてもかっこよかったです。足の骨の写真とか表示しておいたらUX上がると思いました。絶対やりません。

mikutterの薄い本製作委員会がコミックマーケット85に当選したようです。
今回は夏に比べたら仕事と金に余裕があるので、是非行きたいですね。この値段でこのブログに書いてあるような秀逸な文章を読むことができるのはすごいと思います。俺なら即買いますね。皆さんもコミケに行って、年末年始は恋人と二人でmikutterの薄い本を読みながら過ごすんでしょうか。俺はポケモンやってると思います。

2013年9月28日土曜日

#mikutter 0.2.2.1373

  • 非公開アカウントに対してコマンド「リツイート」を表示しない
    • アイコンボタンには表示されます?何を言ってるんですか、display requirementsに従っているから、アイコン上にボタンなんて表示されませんよ?
  • Activityタブで取得できるツイートのパーマリンクのリンク先を変更
  • Activityのアイコンを作った
生存報告です。だんだんRuby思い出してきました。監禁されてiPhoneアプリ作っていたせいで、文字列連結するのに「"foo".stringByAppendingString:"bar"」みたいなコード書いてRubyインタプリタに怒られていたのも今月頭までの話です。一文字だけだと補完働くまでもないです。
公式サイトではクッキー焼いてます。投下時間ミスってあまりPV稼げませんでしたが。それはいいんですが、報酬として絵師にフルHDの画面買ってやったら、mikutter横に表示して作業効率めっちゃ落ちてたようです。mikutter、やめたほうがよさそうですね。

いやしかし、仕事はこのままでは来年3月までこの状態っぽいので、いろいろと厳しいですね。あなたの恋愛事情よりはマシなだけよかったと思いましょうか。
一方で、0.3のほうの進捗はまあまあです。あなたのレポートよりは進んでいると思います。developと、某闇のブランチがpushしてありますね。時期は当然未定です。個人的にはさっさとリリースしてしまいたいんですけれどね。タブの順序の問題とかも、設計を変えて対応することになったので、0.3からの提供になってしまいますし。

2013年8月14日水曜日

#mikutter 0.2.2.1328


  • リストをmikutter以外から削除した時に、リストのタブが消せずに残り続けてしまう問題
  • 0.2.2.1318から、とある大人気サードパーティプラグインが無い環境で(失笑)確実にクラッシュ
コミケお疲れ様です!俺は仕事をしていたおかげで熱中症になることもないかと思ったら、会社が暑くて軽く熱中症になり、コミケ気分を味わうことが出来ました。やったね!

やはりホームTLに実績表示するようになってから、初めて実績に気づく人が多いですね!アクティビティなんてなかったんやな!!それはいいけどDRもはじめからなかったことにしよう!!!

2013年8月4日日曜日

#mikutter 0.2.2.1318

  • リストの名前を変更するとクラッシュする
  • なんかたまにクラッシュする問題 (thanks @moguno)
  • 実績に関する不具合
  • instagramの画像プレビューの変更 (thanks @eagletmt)
いくつか安定性に関係する不具合を修正しました。あと、実績のヒントが表示されてなかったので、鳥が画面を占領してしまっていたようですね。アクティビティはあんまりみんな見ないからこれは痛かった。

バルスベンチマーク

先日ラピュタが放映されたのでバグを残したままさっさと帰ってラピュタを見ていました。Twitterのトラフィックは前回より圧倒的に増えたようですね。手元のmikutterも一応耐えましたが、数が増えたこと、ふぁぼに最適化しすぎたことが原因で、去年よりも危なっかしい感じでした。今年はラピュタ放送中のUserStreamのデータをすべて取っていたので、高速化のためのベンチマークに利用できるといいですね。デーモンモード便利です。

2013年7月20日土曜日

プラグインの多言語化について

mikutter 0.3からは、プラグインを別の自然言語に対応することができるようになりました(以下、このエントリでは自然言語を「言語」と略します)。あるテキストのある言語訳を用意しておけば、日本語がわからない人でも設定が見やすくなったりします。多分mikutterの設定は、英語圏の人とかには私達が韓国語とか群馬語を見た時のような絶望感を与えているのでしょうから、思いやりがあるならやったら徳が上がるとおもいます。

やりかた
_
ローカライズしたい文字列は、Rubyソースコードの中で _ メソッドで囲ってください。これはプラグインのメソッドです。RubyのKernelにはエクスポートしてないので気をつけてください。大規模プラグインなどでどうしても外から _ メソッドを使いたい場合は、「Plugin[:slug]._」とかしたらいいんじゃないでしょうか。

これにはRuby-Gettextというパッケージを使っています。他のメソッドについて知りたい場合は、以下のWebページを参考にするか、先生に聞きましょう。

Ruby-GetText-Package開発手順 http://www.yotabanana.com/hiki/ja/ruby-gettext-howto.html

spec

国際化については、0.3から導入される uitranslator というプラグインが担当しています。国際化されたプラグインの依存関係リストには、 uitranslator を必ず入れておかなければいけません。
例えば、gtkプラグインのspecファイルは以下のようになっています。

---
slug: :gtk
depends:
  mikutter: '0.2'
  plugin:
  - gui
  - uitranslator
version: '1.0'
author: toshi_a
name: Gtk2
description: Gtk2を使ってウィンドウを描画する

potファイルの生成
次に翻訳ファイルのテンプレートを生成します。以下のようなコマンドを実行しましょう。
$ mikutter makepot
インストールされているプラグインの中で、specファイルにuitranslatorへの依存が明記してある各プラグインのディレクトリに po というディレクトリが生成され、「プラグインスラッグ.pot」というファイルが生成されます。

翻訳
各言語への翻訳を書く po ファイルを生成します。ここでは英語にしてみましょう。翻訳したいプラグインのルートに移動して、以下のコマンドを実行します。
$ mkdir -p po/en
$ LANG=en_US msginit -i プラグインスラッグ.pot -o po/en/プラグインスラッグ.po
英語の言語ファイルが出来ました。 po ファイルは専用のエディタがたくさん有ります。編集方法はここでは省きます。
この po ファイルは、そのプラグインにのみ影響を及ぼします。同じ文字列に対して別のプラグインで別々の訳を設定していても問題ありませんし、お互いが干渉することはありません。

起動
言語ファイルを作成したロケールで mikutter を起動してみましょう。うまいかんじに翻訳されていたら成功です。
うまくいかなかったら、 core/plugin/gtk/ 以下を参考にしてみましょう。くだらないサンプルが入っています。あとは、poをコミットしておけば、その言語の話者がpullしたあとはいい感じに翻訳されるでしょう。potは入れる必要は無いでしょう。翻訳者にしか

こまかいこと
moファイルは?
~/.mikutter/cache/uitranslator/ 以下にあります。poファイルがここのmoファイルより新しいか存在しない場合に自動生成されるので、配布するプラグインに添付する必要はありません。

標準プラグインの翻訳
標準プラグインも全く同じ方法で翻訳します。

もとの言語
ソースコードに書く翻訳元のキーは、通常は英語ですが、標準プラグインでは日本語を採用しています。理由は私が日本人だからです。あなたの母語が日本語でないなら、配布するプラグインが日本語をベースにしないことを私は止めません。
しかし、あらゆるドキュメントを難読化し、10年以上に渡って私を苦しめ続けている英語を私が許す日は来ないでしょう。彼らも私達と同じ人間なのですから、同じ苦しみを共有したいんです。そうやってみんなで一緒に苦しみましょう。世界平和。

コアの翻訳
未実装です。どうしましょうね。ただし、GUIはすべてプラグインなので、このことが直ちに問題になることはないでしょう。コンソールに英語が出ちゃうだけです。

実際に国際化をやってみたい
現在、これらの機能はdevelopブランチのみで有効ですので、とってきてください。また、uitranslatorプラグインもdevelopにしかないので、国際化したプラグインは0.2.2以前では動作しないので注意しましょう。

標準プラグインの翻訳に参加したい
私は日本語以外は書けないので、各プラグインの翻訳をやってくれる人がいないとどうしようもないです。近いうちにここで詳細を発表します。名乗りを上げてくれている人もいるので、なんとかなりそうです。



mikutterは単純なアプリケーションとは事情が違い、プラグインはそれぞれがほとんど独立したアプリケーションみたいなものです。そのため単一の言語ファイルを使うのでは都合が悪く、何をお手本にすべきかというところから設計が始まり、とりあえず形になったので、このまま走りだしてみようという段階です。翻訳者と相談していく中で色々変わるかもしれません。せっかくこういうことをやるので、海外にもユーザが少しくらい出てくればいいですね。そしてソースに散りばめられた日本語を見て彼らは何を思うのでしょうか。リリースが楽しみです。

2013年7月14日日曜日

#mikutter 0.2.2.1297


  • 以下の画像サービスが開けなくなってたので修正
    • tumblr (thanks @hcm_std)
  • 一部のURLがクリックに反応しなかった問題に対応 (thanks @eagletmt)
  • 左右のタブにフォーカスを移動するmikutterコマンドで、境界をまたいで移動しようとすると逆側にwrap aroundするように変更 (thanks @eagletmt)
ちょっとしたバグ修正です。ちょっと合間ができたので頂いたパッチをさくっと取り込みました。ありがとうございます。

mikutterの開発休止期間ですが、当初7月末と言っていたのを8月末にします。理由は全く状況が変わらないからです。へたをすると10月末までほとんどなにもできないということになるかもしれません。OSSの弱点は炎です。また、10月になるとポケモンの新作を買うことになっているので、余計に厳しい状況になるでしょう。

とはいっても、こうやってちょいちょい修正なんかはしていくでしょうし、0.3の作業もわずかながら進んでいます。例えば、国際化についてはその作業がもう終わっていますし、コマンドのマウスサポートの拡充など、いくつか面白い機能も開発されています。今から楽しみですね。

mikutterの薄い本 vol.4『Too late.』 

mikutterの薄い本 vol.4『Too late.』の頒布が決まったようです。詳しいことはこちら。


今回もまた、私も少し記事を書かせてもらいました。今回はいままでに増しておもしろそうです。是非手に入れましょう。ちなみに私は頒布場所には仕事で行けませんが、作者特権で入手する予定です。そういえば薄い本の元凶の喫茶室長に頼み忘れてました、この場を借りて一部、お願いします。

今回はコミックマーケット84、OSC Kansai @ Kyotoで頒布する予定みたいです。関西と関東の大きなイベントで頒布されるので、これはなんとしても入手したいですね。詳しい日時や注意事項については、先のURLを確認してください。

2013年6月12日水曜日

#mikutter 0.2.2.1264


  • Gemfileの依存関係が原因で、bundle installしても正しく環境が構築されなかった
  • 欲しいだけのパワーを、一日中。
    • (プラグインレイヤーが)薄くて軽い。でも、(爆撃に)強くて頼れる。
    • 高性能である。ただ、それだけ。
    • 使うのが楽しいプラグインがついています
      • 驚くような標準プラグインの数々。ネット上には更に数千から選べます。
    • プラグインモデル。mikutterがmikutterである理由です。
バグ対応と、WWDCがあったためステータスバーを更新しました。Ratinaなら買ってたとか言った奴は新生活で困窮している私にMBAをおごってください。
仕事で親元を離れて彼女と同棲をはじめました。かなり忙しいですがだんだん慣れてきてちょっとづつ時間を見つけてはTLを眺めて時間を無駄にする毎日です。mikutterやばいですね。

2013年5月12日日曜日

0.3の予定

次のバージョンは0.3です。簡単に予定している変更を上げておきます。

i18n
mikutterは、開発リソースの少なさによる開発速度の遅さを補うためにできるだけ実装する機能をカットしていました。そのため、流暢な日本語で「英語対応してください」などと言われても、「日本語お上手ですね」と返答していました。しかしこの間ついに英語圏の人から英語のメールが来てしまったのです。もう逃げられないので、一応多言語化の仕組みだけ作る予定です。

コア機能の分割
mikutterのコアが肥大化してきたため、一部機能はRubyGemで配布します。この準備のために、0.2.2ではbundlerを使えるようにしました。勿論ビルドプロセスで、tar ballを作る時にこれらをbundlerなしで使えるようにするので、通常の使用においては何の影響もありません。
ライブラリを切り離すことで、mikutterのバージョンアップとは違うリリースサイクルを持てること、mikutter以外でもそのライブラリを使用できること、それによって品質の向上が期待できる等のメリットがあります。

ライセンス変更
現在のmikutterのライセンスはGPL3ですが、今となってはmikutterにこのライセンスは適切ではありません。GPL3は、mikutterから派生したコードに同じライセンスを適用することを要求しますが、私はそれを要求するつもりがありません。そのため、mikutterプラグインにGPL3以外のライセンスを適用することが可能なのかどうかが不透明になるという問題がありました。
そこで、mikutter 0.3からは、MITライセンスを適用することを検討しています。理由は主に、mikutterはTwitterクライアントではなくTwitterに特化したBotフレームワークであり、フレームワークのような再利用されることを目的としたコードには、上記のような理由から緩いライセンスのほうが良いだろうということです。似たようなソフトウェアとしては、Ruby on RailsやSinatraが同じライセンスのもとで配布されています。

ただし、mikutterは既に多くの人のパッチをいただいており、この変更にはその人たちの承諾を受ける必要があります。幸い、ある程度貢献度の高い人たちには直接話をして、既に意見を頂いています。そのうち、Redmineのニュースで開発者全員に正式にこのことについて説明をして、最終的な決定を下します。

タイムラインのレンダリング方法の変更
Twitterのタイムラインという非常に特殊な情報を表示するため、多くのTwitterクライアントは様々な工夫をしており、mikutterも例外ではありません。二年前に抜本的な再設計を行いましたが、更に効率的にする余地があります。うまくいく目処が立ったら、紹介するかもしれません。

みっくストアの標準プラグイン採用
これは0.3では厳しいかもしれない。
みっくストアは、githubにアップされているプラグインをgitを使用してクリックでインストールできるコンセプトプラグインです。これを洗練させて標準プラグインにして、標準プラグインをこの管理下に置けば、mikutterのリリースサイクルに囚われること無くプラグインを個別にバージョンアップできます。例えば、twitpicの仕様が変わって画像が開けなくなった時、mikutterのバージョンを上げなくても画像プレビュープラグインだけをバージョンアップできます。

方向性の確認
mikutterはプラグインホストです。その拡張性故にmikutterはTwitterクライアントさえも実装することができました。最近、「mikutterはどこに向かっているんだ」という励ましの言葉をいただきます。その認識は全くの誤りで、最初からそういうスタンスで開発してきたが、最近になって漸く皆さんがそのことに気がつき始めたのです。

その意味で、これからはTwitterクライアントとしての機能追加ではなく、より根本的な変更がメインになっていくと以前どっかに書いた気がします。0.3は、さらにmikutterエコシステムの発展に貢献する変更を加えることが根本的な目的です。

スケジュール
8月までは、多忙のためmikutterにはコミットできないと思います。0.3の開発は8月から本格的に開始するため、寒くなるころには出せたら良いかなといったところでしょうか。0.2.2の不具合修正もできないですが、報告は早いほうがいいと思うので、バグ報告はおねがいします。

#mikutter 0.2.2.1230


mikutter 0.2.2を正式リリースします。pre3と全く同じ内容です。

  • 機能追加・仕様変更
    • 実績機能
    • ショートカットキー設定のUIの改善
    • デーモンモードを試験的に実装
    • bundlerを使って使用しているライブラリをインストールできるようにしてみた
    • プラグインのGemfileに対応
    • ふぁぼ・リツイート数をAPIから取得するように変更。
  • 内部変更
    • プラグイン・イベント周りの処理を大幅に変更。依存関係を満たしておらずロードできない場合は警告を表示するようにした
    • サウンドを鳴らす方法を拡張できるようにした
    • 高速化

サウンド関連プラグイン以外は0.2.1と互換性がありますが、そんなのあんまりなかったので関係ないと思います。今回はアップデートが大幅に遅れましたが、いろんな機能が追加できてよかったです。新機能についての詳細は、3月のエントリ「mikutter 0.2.2の新機能」をご覧ください。

2013年5月8日水曜日

#mikutter 0.2.2.1230 pre3


  • 人をリムーブするとクラッシュすることがある (thanks @moguno)
  • アクティビティに種類「ratelimit」を追加。他の多くのTwitterクライアント同様、規制されても通知を出さないようにした。あたかも規制されていないように見えて気分が良い。


細かいバグ修正です。もうこれでいけるやろって言うといけないということが改めて分かったので、言いません。でももし土曜日になっても新しい不具合が見つからなければ、これを以てリリースとします。

ここからは数カ月間忙しくなるので更新が停滞すると思います。不具合の対応も極めて遅くなると思われるので、運用でカバーしましょう。生きているって素晴らしい。

2013年5月3日金曜日

#mikutter 0.2.1.1142 and 0.2.2.1225 pre2


0.2.1.1142
  • 未知の形式のエンティティを受信するとクラッシュする問題
  • openimg: yfrogの仕様変更対応と、instagramの一部の画像の仕様に対応(thanks @negi_s)
  • extract: Twitterクライアントで抽出するとクラッシュする問題の対策を0.2.2からバックポート
  • directmessage: 自分自身にDMを送った時に適切なイベントが発火していなかった (thanks @nullpo_head)
0.2.2.1225 pre2
  • 0.2.1.1142を取り込んだ
  • TLのレンダリング中にエラーが発生した時にクラッシュしないようにした
  • プラグインロード関連処理の修正
0.2.1のバグフィックスです。特定のツイートを受信するとクラッシュする問題がありました。TLにツイートが表示される間はクラッシュし続けるので良くないです。アップデートしましょう。
0.2.2ではそういう時はクラッシュする代わりにへんな画像を表示してお茶を濁そうとします。ことなかれ主義っぽくて日本的で良いと思います。

0.2.2のバグ修正殆ど無いですね。特に問題がなければこの土日で0.2.2を正式にリリースします。ていうかまだやってなかったのかよっていう。幾つかすごい細かいことが気になっている部分があるので、リリースまでに直すかもしれません。次期バージョン(0.2.3 or 0.3)についてもそのうち書きます。

2013年4月20日土曜日

#mikutter 0.2.2.1211 pre1

mikutter 0.2.2 テスト版を公開します。というか内部スケジュールが押してしまってこれ以上延期するといろいろ問題があるので…。主な変更は前に先走って投稿したエントリをご覧ください。
http://mikutter.blogspot.jp/2013/03/mikutter-022.html

簡単にまとめます。

  • 機能追加・仕様変更
    • 実績機能
    • ショートカットキー設定のUIの改善
    • デーモンモードを試験的に実装
    • bundlerを使って使用しているライブラリをインストールできるようにしてみた
    • プラグインのGemfileに対応
    • ふぁぼ・リツイート数をAPIから取得するように変更。
  • 内部変更
    • プラグイン・イベント周りのコードを刷新
    • プラグインのロード処理を大幅に変更。依存関係を満たしておらずロードできない場合は警告を表示するようにした
    • サウンドを鳴らす方法を拡張できるようにした
    • 高速化
今回から、バージョンの最後の桁はSubversionのリビジョン番号ではなく、ビルド番号になりました。mikutterの開発を始めてから経過した日数です。そんなにリビジョン番号と離れていなかったので違和感もないし、ぶっちゃけどうでもいいことです。今回公開したのは1211で、実は前に1201を公開したけれどアナウンスしませんでした。

テスト版なので、起動する前には~/.mikutterのバックアップを取っておいてください。実装したかった機能は残ってるけどだいたいバグは取ったのでリリースは近いか(フラグ)。

2013年4月6日土曜日

THE DAY

今年も、4月1日を無事に終えることができた。去年よりも多くの反応があり、ユーザの増加を実感した次第である。

四年目
あなたは何回mikutterと共にエイプリルフールを超えただろうか。エイプリルフールにアイコンを変更するのは今回で4度目だ。一度目は2010年。あの頃は開発が始まってまだ3ヶ月しか経っていなかったし、まだあまり時間をかけていなかったので、Twitterクライアントとして、ほとんど使用には耐えなかった。当時存在した数少ないユーザとは、たった16種類のアイコンで大いに盛り上がったのを今でも4年前の事のように覚えている。しかし、このいたずらを快く思わない人もいた。

mikutter開発の動機
初音ミクはかわいい。かわいいアイコンは素晴らしい。初音ミクアイコンは、考えうる最高のアイコンである。しかし現実はどうだ。ほとんどの人が初音ミクのアイコンを使っておらず、初音ミクアイコンの人をまとめたリストまで見られる。嘆かわしい限りだ。
アイコンを初音ミクにしないがために人々の心はすさみ、TLでは諍いが絶えず、Togetterは常に炎上、ついに運営チームの心も蝕まれ、サードパーティを排斥しはじめて久しい。これらはすべて、人々の心にミク分が不足していることが原因である。
このことを2009年にすでに予知していた私は、なんとかこの滅亡の戯曲の台本を書き換えようと試みた。そう、つまりクライアントサイドでアイコンを書き換えるのだ。mikutterが描こうとした世界は素晴らしいものだったが、私の声はTwitterに対してあまりにも小さすぎた。

約束の日
それから一年後、またエイプリルフールが訪れた。ユーザ数は40倍近くに増え、アイコンも128種類に増やした。やはりユーザが増えるとわかってくれない人もいる。ユーモアを必要条件に掲げているのに、ユーモア欠乏症患者は概して日本語が読めないので、平気で使いやがられるようだ。
だが、ここで私は数人の奇妙なケースを目の当たりにした。去年disっていた人が楽しんでいるではないか。彼らは心を腐らせていたにも関わらず、ふぁぼられる度にミクの声に心を浄化され、人の心を取り戻しつつあったのだ。
この時私は初めて、mikutterを作ってよかったと思えた。開始から一年を超えて、漸く私は、無意識にしか自覚出来なかったmikutterの真の目的を自覚することができたのだ。私はこの日を約束の日と定め、来年のその日のために早速一年のロードマップを打ち出した。

本質
私はもともとTwitterクライアントをつくろうと思ったのではなかった。ではなぜmikutterが今の形になったのだろうか。全ては約束の日のためである。一人でも多くの人に、心を取り戻して欲しい。もう「手遅れ」な人もいるかもしれない。しかし、「ておくれ」な人も多い。きっと彼らと来年はともに笑いあえることを信じて、私はキーを打ち続けている。
mikutterの本質はTwitterクライアントでは断じてない。約束の日のための単なる釣竿に過ぎず、ユートピアを映し出すスクリーンに過ぎない。あの便利な機能も、最適化も、全部エイプリルフールである。この間数年触っていなかったCで書かれたruby-gtk2のコードに必死の思いでパッチを投げたのもエイプリルフールのためである。つまり、Twitterクライアントとしての側面は単なる約束の日の準備であり、約束の日のタイムラインこそが、mikutterなのである。ユーザである(と、あなたは思い込んでいるのだろう)あなたたちは、私の手の上で踊らされていたのだ。

失敗
今年の約束の日は、一見無事に成功したように見える。去年同様、フィルタでほとんどのネットワーク経由の画像読み込みを差し替えた。そのことによってTwitterBirdも姿を変えることになったし、mikutterコマンドのアイコンも変わったが、癒されるので由とした。同様の理由で、昨年好評だった、通知のアイコンがエイプリルフールのままになる不具合は残しておいた。
正直に告白すると、私は今回やってはならないミスを一つ犯してしまったのだ。それは、環境によってある人のアイコンの見え方が異なる場合があるというものだ。判明したのは3月の終わりの方で、これに気づいたときはもうmikutterは終わったと思った。
しかし、やるしかない。問題を修正し、入念に確認したあと、すぐにそれっぽい不具合をでっち上げて、さもすぐアップデートしないとデータの破損を引き起こす可能性があるかのような虚偽のリリースノートを書いた。約束の日はmikutterにとって最重要と言うよりもmikutterの全てだ。そのためにはリリースノートを偽ることも、1コミットで2つの変更をすることも厭わない。全てを秘密裏に行い、その日を迎える必要がある。
今年は会社に泊まることはなく、自分の目で全てを見届けることができた。大きな失敗はあったが、去年以上に多くの人が楽しんでくれた。最初はわけがわからないと言っていた人も、1日が終わる頃には、ミク以外のアイコンに違和感を覚えるほどにまで精神を浄化されていた。今年もmikutterがその目標を達成できたという意味では、今年も成功したといって良いだろう。

手段の目的化
この一年、私はTwitterクライアントを作ることを目的にしてしまっていたのではないか。こんな機能が必要だ、こういうUIが良い、最近のデスクトップ環境のUXとの相性は…。もちろんそれは魚を釣るために必要なことだ。しかしそれはあくまでも餌で、本来の目的ではない。Twitterクライアントなんてどうでもいい。品質なんてある程度でいいんだ。そこがブレたから、守りの開発になった。何をやるにも違和感があった。そしてミスを許した。ユーザに対しても失礼なことだし、何よりmikutterがかわいそうである。

4月1日、自らが創りだしたTLに、自らの魂が浄化されるのを感じた。そうだ、これだよこれ。これがmikutterなんだ。Twitterクライアントではなく、mikutterを創っているんだ。ユーザを増やして、どこにも初音ミクなんて書いてないのに「ミク要素がない」と言った奴らに目に物見せてやるんだ。そういう思想的バックボーンがあったから、Twitterクライアントが飽和状態のWindowsのユーザでさえ、mikutterを羨むんじゃないか。

反省
先に一つだけ言っておきたいことがある。今年は直前になって、過去のエイプリルフールエントリ「約束の日」「謝罪」のリンクをTwitterに貼る人がいたが、これはやめていただきたい。mikutterのユーザは私も驚くくらい増えている。新参者がこのことを事前に知ることはできるだけ避けたい。

ではどれくらいユーザが増えたのだろうか。正確な数はわからないが、mikutterは約束の日のために、3月からサーバ上から当日のために画像を収集する機能が備わっている。そののため、サーバのログを見れば、おおよそのユーザ数をつかめるのだ。例年通り、統計データだけ公開する。

ユニークIPアドレス数 1989
当日ユニークIPアドレス数 332
3月ユニークIPアドレス数 1897

肝心のユーザ数の正確なところがわからないが、ユニークIPアドレス数というのが参考になる。勿論、家の他に学校や職場、モバイル回線でも使う人なら多重にカウントされてしまうので正確な数ではないが、例年と比べると明らかに増加傾向にある。



約2000なので、少なく見積もっても1000くらいはいきそうだ。10万トークンの上限を心配する人もいたが、これを見る限り、全く問題は無さそうだ。

ところで、0.2.1からDisplay Requirementsに対応したことで、Twitterの鳥をタイムラインの下に表示しなければならなくなった。実はこれはライセンス等の問題でmikutterには同梱されておらず、mikutterのWebページのサーバからダウンロードしてきているのだが、ついでにログを集計してみたところ、1736という数字が出た。こちらはエイプリルフールと違って、同じ設定ファイルを使いまわす限り必ず一度しかアクセスしないため、テザリングなどで頻繁にIPアドレスが代わる人を多重カウントしないのでより正確かもしれない。今年の予想人数(上のグラフ)はこの数字を採用した。

共犯者
今年使用したアイコンは、半分は @penguin2716 さん、もう半分は新たに @catina013 さんに描いていただいた。私も10枚ほど描いたが、合計256枚のアイコンを提供してくれた二人にはいくら星謝しても足りない。この場を借りて改めてふぁぼりたい★。

まとめ
当日はトラブルもあったが、概ねうまく行ったと私は思っている。しかし成否はあなた自身が決めることだ。今年も楽しんでもらえたなら何よりだし、例年または開始時はうっとおしい、区別がつかないと否定的な見方をしていた人が楽しめるようになったならこれほど喜ばしいことはない。最後まで人の心を取り戻せなかった人もたくさんいただろう。そういう人も、mikutterに触れていくうちに、必ず人間に戻れると私は確信している。

最後に、念のため書いておくが、以上の内容は全てエイプリルフールである。

2013年3月30日土曜日

プラグインに実績を追加する

mikutter 0.2.2から実績機能が追加されます。

これは、皆さん分かってると思いますが achievement というひとつのmikutterプラグインが提供している機能で、 achievement APIを使えば他のプラグインから実績を新しく追加することができます。

どんな風に実績を追加するか、実際のコードを見てみましょう。

これは、5favされたら解除される実績、「red_fav」を追加するプラグインです。実際にこれをインストールして起動すると、4行目の :hint の値がアクティビティに表示されます(他に未解除の実績があれば、そちらが表示される可能性もあります。表示される実績は毎回ランダムです)。ここに解除の仕方を書いておけば、ユーザは起動する度にそれを一定の確率で目にするので、実績を解除する手助けになります。

defacievement

実装についてもう少し詳しく見てみましょう。defacievementというプラグインメソッドが今回の肝です。

第一引数はスラッグ、第二引数には以下の値を指定します。
  • description ... 説明。現在は見返す方法がないので、用意されているだけ
  • hint ... 起動時にアクティビティに表示されるヒント。hiddenがtrueなら必要ない
  • depends ... 前提実績。実績のスラッグをシンボルの配列で指定する。指定された全ての実績が解除されていないとヒントが表示されない。
  • hidden ... 隠し実績。trueなら、起動時にランダムに表示されるヒントの抽選対象に入れない。
defacievement のブロック

ここには実績を解除するための条件を記述します。このブロック、そもそも実績が解除された状態では実行されません。解除するための条件なので、もう解除された状態では必要がないのです。
この例では、「on_favorite ...」という部分です。この中もプラグインの一部なので、こうやってイベントリスナを設定することができるのです。

Plugin::Achievement::Achievement

defachievement ブロックは一つの引数を取ります。これは実績オブジェクト(Plugin::Achievement::Achievement)のインスタンスです。実績の主要な情報を得たり、実績を解除するために使います。defachievementを呼び出す度にインスタンスが一つ作られる感じで、普段あまり気にするものではないです。

実績解除

Plugin::Achievement::Achievement#take! を呼びだせば実績が解除されます。このメソッドが呼ばれると、直ちに defachievement ブロック内でセットされたイベントリスナやフィルタ(例ではon_favorite)が解除されます。

それから、前提実績をチェックして、まだ解除されていないものがあればそれを待ちます。これは、前提となる実績より先に現在の実績が解除されるのを防ぐためです。この状態で前提実績が解除されたら、すぐにこの実績も解除されます。

そうやって実際に解除されたら、 achievement_took イベントが発火されます。

achievement_took(Plugin::Achievement::Achievement)

実績解除のメッセージはこのイベントをachievementプラグインが受け取った時に表示されるようになっています。実績解除をトリガーに何かをしたいということはあまり無さそうですが。

実績の例

mikutterの標準の実績は全て achievement プラグインに集約されています。以下のプラグインの100行目あたりから後は、全て実績の定義です。

http://dev.mikutter.hachune.net/projects/mikutter/repository/revisions/develop/entry/core/plugin/achievement/achievement.rb

実績を見てしまうとネタバレになるのですが、それぞれが全く異なった方法で実装されているので、これだけで例としては十分でしょう。このファイルの前半の方は、実績プラグイン自信の実装です。このプラグイン、mikutterプラグインとしても結構興味深いのですが、それについては別の機会に触れたいと思います。

ヒントのタイミング

最後に、一応、実績のヒント(hint)がユーザに提示される条件を説明しておきます。毎回mikutterが起動される度に、

  • 未達成で
  • hidden が偽か未指定
の実績のうち、ランダムに一つを選出します。その実績に上記条件に当てはまる前提実績があれば、再帰的にそれを辿って、最終的に一つだけ実績を選んでそのhintの値を表示します。

前提とされている数が多い実績のほうが、表示される可能性が高くなりますね。前提実績が解除の邪魔をしているような実績のヒントは表示されません。
また、ユーザには、mikutterを再起動する以外に新しいヒントを得る方法がありません。Twitterクライアントの使い方なんて一気に勉強するものではありません。ゆっくり覚えたらいいし、もっと言えばTwitterなんてしてないでとっととレポートを書くべきです。mikutterのせいで単位を落としたって、私にはふぁぼることしかできません。

まとめ

使えそうで使えない、楽しそうで案外どうでもいい、実績機能について紹介しました。かなり変な機能なので、構想はかなり前からあったにも関わらず、0.2.1では導入を見送っていました。DRを言いたかっただけです。

2013年3月27日水曜日

#mikutter 0.2.1.1141


  • 主にRuby 2.0.0 で、サードパーティプラグインを入れていると起動しない又は設定ファイルが破損することがある問題
  • Ruby 1.9.3 でクラッシュすることがあった
なーにが0.2.1最後のリリースになりますじゃ。

設定が破損する問題はRuby1.9系でも顕在化してないだけで存在していました。.mikutter以下を守るためにさっさとアップデートしましょう。この問題は、過去リリースした全ての mikutter に存在し、全ての環境に影響があります。

バグフィックスが相次いで申し訳ないですが、ておくれにならないうちにアップデートしたほうがいいです。お友達にも教えてあげてください。

Ruby 2.0.0
私の使っているArch Linuxにも来たんですが、結構これで起動できなくなった人がいらっしゃったようで、こんなにユーザが居るのかと驚きました(←呑気
rcairoとかの調子が良くないようですね。「undefined symbol: rb_cCairo_Context」とか言われるやつです。時間が解決しそうな問題ではありますが、そういう時は、
$ gem install glib2 --version 1.2.3
$ gem install gtk2 --version 1.2.3
みたいなかんじのコマンドで、RubyGtk2をgemでインストールしてやると良いんじゃないでしょうか。再現できてないのでよくわかりませんが、RubyGtkをgemで入れたら治ったと言ってる人が結構いたので。うまく行ったのを情報共有すれば、インターネットが便利になると思います。

ううん、bundlerを使ったらもう少し楽になるんだけど、残念ながら0.2.2からなんですよね(丁度そこの作業中)。

RubyGnome2 1.2.4
mikutterの使っているRubyGnome2の最新版がリリースされました。が、このバージョンには不具合があって、mikutterが起動できません。うっかりアップデートしないように注意してください。もししてしまった場合は、過去のバージョンを使用する方法が用意されているでしょうから、1.2.3以前に戻してください。現在問題の特定と報告をやってもらっているところなので、次で直る可能性もあります。いずれにせよ、このブログでこんな感じでお知らせします。

最近寝ても寝ても眠いんですよね、なんとかならないかな。

2013年3月22日金曜日

#mikutter 0.2.1.1137

  • Ruby 2.0に対応
  • データソース追加系プラグインを導入するとツイートが表示されなくなる問題
  • TL描画時に稀にクラッシュする問題
Ruby 2.0対応をやってみました。Ruby 2.0に上げたいけどmikutter動かなかった…という人はこれを試してね。

0.2.2の開発中に、いくつかmikutterに致命的なバグがいくつか見つかったのでバックポートしました。今のmikutterを使っていてクラッシュしたと言う人はあまりいないでしょうが、何かの拍子にパターン入るかもしれません。さっさとバージョンアップしたほうがいいです。

おそらく、0.2.1のバージョンアップはこれで最後か、次があっても随分後になるでしょうから、特別な理由がなければバージョンアップしたほうがいいです。

2013年3月10日日曜日

#mikutter 0.2.1.1132


  • Activityの幾つかの不具合修正
  • Ruby1.9.3 p392以降で画像プレビューができず、ブラウザで開いてしまう問題
  • 画像アップロードサービスpikuboに対応 (thanks @negi_s)
  • 遅延対策
Rubyの変更によってTwitpicを含む一部サービスの画像プレビューができなくなっていました。早かれ遅かれまっとうなディストリならRubyのセキュリティフィックスならすぐ適用されるでしょうから、すぐにmikutterをアップデートすることをおすすめします。

2013年3月7日木曜日

mikutter 0.2.2の新機能

皆さんごきげんようでし!ついにmikutter 0.2.2の季節がやって来ました!フロントの新機能をサクッと見て行きましょう!
開発者向けの情報は別の記事にします。

実績

新しいプラグイン「achievement」をバンドルしました。「設定を開く」「ペインを作成する」などのアクションを実行すると実績が解除されます。毎回起動する時、まだ達成していない実績があれば、その中からランダムに一つの実績の解除方法をmikutter_botが教えてくれます。

こんな機能を付けた理由は、ユーザと機能が増えてきて、気づかれない機能も出てきたからです。実績を解除していく事で、自然と機能に気づくことができます。実績は達成したら終わりなので、よくある起動時に出るtipsダイアログのように、毎回知ってることをガミガミ言われることはありません。たいした個数はないので、煩わしく感じることはないと思います。え、それを見返したい時はどうするかって?それはもうあるんだけどなぁ。

さらにこの実績、サードパーティプラグインが自由に追加できるようになっています。各機能へのポインタとして使用してもいいし、他にも面白い使い方があるかもしれません。

ショートカットキー

ショートカットキーに、システムで予約されているキーを使用できるようになりました。例えば、タイムラインでスペース、エンター、Ctrl+P等にmikutterコマンドを割り当てることができます。

Windowロールのmikutterコマンドの正式なサポートも開始します。これによって、「設定を開く」がmikutterコマンドになったので、ショートカットキーに割り当てることができるようになりました。

また、最近プラグインを入れすぎてキーを割り当てるのが大変という人に朗報。

はい、インクリメンタルサーチができるようになりました。一番上のテキストウィジェットに文字を入力すると、キーバインドか機能名、または表示されてませんがスラッグの何れかに部分的に一致した行だけが表示されます。「あれ、Ctrl+Sってふぁぼ以外に何か登録していたかな?」という時に使ってみましょう。mikutterでは自分で全てのキーを割り当てられますが、そのせいでわからなくなることも有りました。これで少しは良くなったでしょう。

さらに、ショートカットキーの割り当て画面も変更しました。
コンボボックスを廃止して、表示域いっぱいにコマンドリストを表示するようにしました。先ほどと同じようにインクリメンタルサーチできるようになっている他、ロール毎にカテゴライズされています。こちらも少しは選びやすくなったかな。
ん、キーバインドの下のスペースが気になるって?…君のようなカンのいいガキは嫌いだよ。

サウンド

新しく「sound」というプラグインを導入しました。サウンドプラグイン自体は音を再生せず、サウンドプラグインにルーチンを登録したプラグインの中から、ユーザが使うものを選べるというプラグインです。
OS/ディストリによっては、ALSAが導入しづらく、効果音を楽しめない環境もありましたが、相応しいサウンドサーバプラグインを選べるようになったわけです。

設定ファイルの場所

いままでmikutterは、設定等を全て ~/.mikutter/ 以下に格納しており、これを変更する手段は用意されてませんでしたが、コマンドラインオプションでパスを指定できるようになりました。

# mikutter --confroot=/var/mikutter/

これで起動すると、~/.mikutter/は使われず、/var/mikutter に読み書きするようになります。キャッシュやプラグインの位置だけを指定とかには対応していません。

デーモンモード(仮)

botを作るためにmikutterのフレームワークがつかえるようになりました。

使い方は簡単。普段使っているmikutterとは別の場所にインストールして、 core/plugin内を全て削除します。でも本当に全て消すと役に立たなくなるので、restとstreamingだけ残しておきましょう。これで、ツイートを受信するだけで何もしないbotができました。あとはいつものmikutterと同じで、プラグインをインストールしていくと、いろんな機能をつけることができます。データの蓄積や、おしゃべりbotなども作成できるでしょう。

botとして使う場合は、Consumer Key/Secretを新規取得して書き換えてください。なぜなら、mikutterフレームワークを使って作られたのがTwitterクライアントのmikutterですが、デーモンとして使うという事は、すでにそれはTwitterクライアントのmikutterではないからです。CS/CSは core/config.rb に書いてます。

そう遠くないうちに、mikutterフレームワークを別途配布したいと思っていますが、CK/CSを削除してプラグインを大半削除したものを配布することになるでしょう。

かなりうまく動きますが、まだこの機能は仮実装です。なので、端末からデタッチするなどの機能がありません。興味があれば使ってみてフィードバックをください。

その他

メモリ効率が大幅に改善されました。私自身RubyGnome2プロジェクトにメモリリークを修正するパッチを送るなどかなり力を入れました。また、mikutter自体の実装も一部見直しました。まだ稼働時間に比例してメモリ使用量が増加する傾向はありますが、今までとは比べ物になりません。

とはいっても、改善はRubyGnome2のバグフィックスによるところがほとんどなので、是非1.2.1以降のRubyGtk2を使用してください。

書き忘れていること

分かってたら書き忘れんやろ

試すには

今回から開発用のメインリポジトリをGitに移行しました。現在Subversionは、リリース時にしか更新していないので、開発中のmikutterを試したい人は、WebページからGitリポジトリを探してきてください。

まとめ

mikutter 0.2.2に搭載する予定の機能のうち、実装が終わっていて、且つユーザに関係することを簡単にまとめました。前回と違って、今回は期間の割りには多くの新要素を追加できると思います。正式版の提供は4月前後になりそうです。3月中にプレビュー版が出せるといいのですが。

この年度末は、数年ぶりにデスマーチにならなさそうなので、3月にもかかわらずmikutterの開発を続けています。なんだか3月じゃないみたいですね。ありがたいことに心配してくれる人もいますが、そんな感じなので御心配なく。もうすぐ春が来てしまうので、寒いうちに彼女とデートしてきます。こんな事ばかりしていたらなかなか進まないんだけど、冬のデートっていいですよね。

2013年2月22日金曜日

#mikutter 0.2.1.1130


  • 一昨日あたりからmikutterを初めて起動した時に、アクセストークンを取得する段階でクラッシュする問題を修正 (thanks taiki45)
  • Streaming API の Twitter API 1.1対応を失念してたのでやった(thanks f_swallow)
そろそろ0.2.2だけどTwitter対応リリースです。過去のバージョンのmikutterでは、アクセストークンを取得するAPIのURLが間違っていたにも関わらず、一昨日くらいまではニコニコ応対してくれてました。今はもう違います。これからmikutterを使い始める人は、このバージョン以降でないと起動することはできません。

また、Twitter API 1.1の対応漏れに対応しました。しかしいまのところデベロッパがAPIテストをするこれといった手段は用意されておらず、3/5のブラックアウトテストがあるまでは対応漏れは基本的にわかりません。その度にmikutterのテストをして実装漏れに対応する感じになると思います。ていうか3/5に止めるんじゃなかったんかよ(俺はこうなると思っていた)!

明日はOSC Tokyoに遊びに行きます。遊びに行くだけなのでmikutterユーザ会のブースにはいませんが、遊びに行くのでブース付近に居る事も有ると思います。サインは無料でさせていただきます。

2013年2月5日火曜日

#mikutter 0.2.1.1127


  • Ruby Gtk2 の 1.2.1以降を使用した場合にメモリの使用量が少なくなった
  • 仕様変更により動作しなくなっていた以下の画像プレビューを修正 (thanks @hcm_ccs)
    • 携帯百景
    • 地獄のミサワの「女に惚れさす名言集」
ちょっとしたバグ修正です。Ruby Gtk2のバージョンを上げれる人は、上げた上でmikutterのバージョンも上げると、少しだけメモリの消費がマシになります。0.2.2ではもう少しマシになる予定です。

ちょっと聞いてくださいよ。この間、とあるOSSプロジェクトにコミットしたんですが、リリース情報に自分の名前が載って、しかも思ったより大きく掲載していただいて、3日間くらいとても嬉しかったんです。mikutterでは、パッチをくださった方々に感謝してないわけじゃないけど、Redmineやコミットログ等に名前が入っているので、ここには基本的には書いてませんでした。
でも、パッチをくれた人には3日くらい嬉しくなって欲しいので、このブログにも報告者のscreen name(基本的にはRedmineに書いてもらった奴)を掲載することにしました。ラッパーの世界では感謝の意を表に出しすぎるとダメになると聞きましたが、OSSの世界ではそうではないように思います。
また、普段からこういうことをしておくと、一緒に飲む機会があった時に奢ってもらえる可能性が上がると考えられます。舌は肥えてないので安い居酒屋チェーン店でも構いません。数字ではなく心だと思います。奢れと申し上げているわけではございません。旅行に来る際はご検討の程よろしくおねがいします。

2013年1月26日土曜日

#mikutter 0.2.1.1025


  • ユーザのプロフィールを開くと稀にクラッシュする問題
  • 起動直後に一部環境で稀にクラッシュする問題
  • タイムラインのコンテキストメニューを呼び出すと稀にクラッシュする問題
バグフィックスです。レポートを送ってくれた皆さんありがとうございました。0.2.1は0.2よりはクラッシュレポートが少ないので、対応が楽でした。もう少しいろいろあると思うけれどね。

Display Requirements プラグインの処理でクラッシュしているレポートがたくさん届いていて、行き場のない怒りを覚えました。晩ご飯に唐揚げがあったので、とても良く噛んで食べてやりました。顎が痛いです。

0.2.2

開発を開始しています。コードネームは namaramune です。リリースは2月の末から3月の頭を予定しています。はい、そういうことです。
まだどれをやってどれを後回しにするか考えているところです。今回も早めにやってしまいます。

2013年1月12日土曜日

#mikutter 0.2.1

mikutter 0.2.1をリリースします。変更点は以下の通り(pre1とpre2のを合わせただけ)
pre2から若干リビジョンは進んでいます。



  • 機能・仕様変更

    • mikutterコマンドにアイコンを設定できるようになった
      • commandメソッドの引数に :icon キーを追加。ファイル名(URLかローカルのパス)を指定する。サンプルはcommandプラグインを参照
    • タブツールバー。タブレベルコマンドで表示設定とアイコン設定があるものは、タブごとに作成されるツールバーにアイコンが表示されるようになった。
    • Twitter APIレスポンスのStatusオブジェクトのふぁぼフラグを無視するようにした
      • 勝手にふぁぼってるように見える不具合が修正されています
    • 被ふぁぼRTのラベルをアイコンに変更
    • ディレクトリ構造ちょっと変えた


  • 環境対応



  • バグ追加・修正

    • アイコンのロードに失敗することがある問題を改善
    • 高速化
    mikutter誕生日おめでとう!!!!(遅)
    今回は機能の追加をいろいろやる予定でしたが、どちらかというとTwitter対応がほとんどメインの変更になってしまいました。そういう意味では見所があまりない。
    このバージョンからTwitter API 1.1に対応します。2013/3/5 以降は、このバージョンより古いmikutterはお使いいただけません。

    2013年1月9日水曜日

    #mikutter 0.2.1 pre2


    • ツイートが投稿できないことがあった
    • ツイート検索が動作しないことがあった
    • アイコンの読み込みに失敗することがあった
    ちょっとしたバグ修正です。軽くなった気もしますね。
    特に大きな問題が見つからなければ、週末には正式に0.2.1を出します。

    2013年1月4日金曜日

    #mikutter 0.2.1 pre1

    rev.1112を、当初12月25日にリリースする予定だった 0.2.1 のプレビュー版として公開します。ちょっとづつバグ修正をしながら、適当なタイミングで不安定版としてリリースします。

    http://mikutter.hachune.net/download

    ざっと行った変更を。

    • 機能・仕様変更
      • mikutterコマンドにアイコンを設定できるようになった
        • commandメソッドの引数に :icon キーを追加。ファイル名(URLかローカルのパス)を指定する。サンプルはcommandプラグインを参照
      • タブツールバー。タブレベルコマンドで表示設定とアイコン設定があるものは、タブごとに作成されるツールバーにアイコンが表示されるようになった。
      • Twitter APIレスポンスのStatusオブジェクトのふぁぼフラグを無視するようにした
      • 被ふぁぼRTのラベルをアイコンに変更
      • ディレクトリ構造ちょっと変えた
    • 環境対応
      • Twitter API 1.1に対応
        • 各エンドポイント毎にレートリミットが設定されています。mikutterで各エンドポイントのレートリミットを確認する方法はありません(やっつけでステータスバーに表示しているが実用的ではない)。
        • 検索に非公式リツイートの形式でリツイートが表示される問題を解決
        • その他、レスポンスが変わったことで若干動作が変わっている部分があります。大まかにはドキュメントの通り https://dev.twitter.com/docs/api/1.1/overview
      • Developer Display Requirementsに準拠したUIに変更
        • TLでは、名前よりスクリーンネームを後に表示。クリックするとプロフィールを開く
        • Icon Over Buttonを廃止。アバターアイコンをクリックするとプロフィールを開く
        • ツイートのタイムスタンプを相対時刻表示に変更。クリックするとブラウザでツイートのパーマリンクを開く
        • 被ふぁぼ、RTのアイコンの右側にはそのユーザの名前を表示
        • 全てのタイムラインの下にTwitterのロゴを表示、twitter.comにリンク
        • ハッシュタグのリンク先をWebサイトの検索ページに変更。検索プラグインがWebサイトを開く機能を有していないため
        • 各変更は必須要件なため設定によって変更することはできない。設定によってはね。
    • バグ追加・修正
      • Twitter API 1.1の挙動を把握しきれてないのでそのへんでなにかあるかも
    若干予定を変更して、Twitter APi 1.1に対応しました。認証の問題が未だに起こっている環境では、このアップデートで改善される可能性が高いです。
    同時にDRにも対応しました。予定変更の経緯は過去のエントリを。このへんのことをこのブログを見ていないmikutterユーザにどう伝えるのか、困ったものだ。

    リアルでいろいろあってリリースを遅らせたので、ちょっと慎重にpre版とか言っていますが、API周りで何もなければこれでいくでしょう。また、mikutter 3周年記念リリースであることにも変わりはありません。だからと言ってなにか有るわけではないですが。

    2013年1月3日木曜日

    mikutter 三年目

    はじめに

    あけましておめでとうございます。 mikutterは2012年12月25日を以って3歳になりました。こんなことを三年もやってると思うと本当に残念な気持ちでいっぱいです。Twitter廃人とはよくいったものですが、相変わらず私は起きてる間しかPostしないエンジョイ勢ですよ。
    とはいえ、まだしばらくずるずるとやってると思うので、よろしくお願いします。
    例年通り、去年一年間にmikutterに起こったことを振り返ってみましょう。

    去年の目標とかを振り返る

    去年のブログから

    アクティビティ情報がリアルタイムに取得できる Streaming API が出たらぜひ対応したい
    
    ぷっ
    いい加減、1.0ですかね
    
    ぷっ

    結論

    来年のことを言うと鬼がふぁぼる。

    年明け

    この年の年明け、つまりちょうど一年前ですが、mikutterは0.0.4でした(0.1は存在したがpre版だった)。
    現在0.2です。バージョン番号だけはやたらとジャンプアップしましたね。実際の機能はたいして変わってないです、上がり方の割りには。mikutterはバージョンなんてただの飾りだってことを僕達に教えてくれた。

    mikutter自体のこと

    0.1.x

    before_api_section

    APIのレートリミットがリフレッシュされる寸前にこれでもかというくらいAPIをリクエストしまくるサーバ泣かせな隠し機能です。きたないぞ!きたないぞmikutter!(標準ではリスト関連でしかしてなかったと思うけど)
    こんな小さなことをわざわざ書いた理由は、間もなくこれが無意味なものになるからです。0.2.1では Twitter API 1.1に対応し、エンドポイントごとにレートリミットが設定されているため、このような処理をしても効果が薄いのです。残念。

    リストのストリーミング

    mikutterで表示するすべてのリストはリアルタイム更新されるようになりましたね。リスト自体がそんなに使われていない機能なので、これで喜んだ人はあまり多くなかったようですが、 API 1.1になってリストのタイムラインを15分で15回しか更新できなくなるので、15個のリストを表示していると1回で規制されますし、1アカウントが作成できるリストの数の条件である20個を表示している場合にいたっては、すべてのリストを取得することはできないという惨状です。
    mikutterでは、このリストのストリーミングに対応しているため、ほとんど問題なくリストを使うことができます。他にない機能ということで鼻を高くしていましたが、PC用のメジャーなTwitterクライアントはこれを実装し、当たり前の機能となっていくかもしれません。スマートフォンではどうするんでしょうね。

    アクティビティ

    TwitterがアクティビティAPIをどうやらデベロッパに公開する気が無さそうだと悟るやいなや、自前でそれっぽいものを作成してしまいました。大量の通知の可視化という課題に対する革命的なソリューションであり、いまやmikutterのキラープラグインの一つです(自称)。

    0.2

    DSL拡張

    プラグインにDSLカスタマイズをできるように、特定のプラグインに依存したプラグインを定義できるようにしました。最たる例がUI DSLです。プラグインがタイムラインやタブを構築するときに使うメソッドです。

    gtkプラグイン

    guiプラグインからgtkプラグインを分離してイベントでやり取りさせるようになりました。
    UIの組立を任意のタイミングで実行できるようになり、体感速度が上がり、外部フィルタなどですべてのアクションに干渉できるようになりましたが、実際の処理ステップは増加しているので、起動時など大量のイベントが発生するときはやや動作がもたつくことがあります。とはいえ、速度改善は副産物に過ぎず、来年はこの仕組みを使った興味深いプラグインをたくさん提供できることでしょう。既に、標準のフォーカス移動関連の処理はこれらを使っています。

    周辺の動き

    mikutterの薄い本

    1月15日、喫茶室長さんが、いろんな人が書いたmikutterにかんする記事をまとめた「mikutterの薄い本vol.1」を作成してこみトレで頒布しておくれました。確かtoshi_aとkatsyoshiさんが寄稿したと思いますが、vol.2からはもっと多くの方が書いてくれるようになりました。先日のコミケでは、vol.3を70部ほど頒布したそうで、こんなにも多くの人がmikutterに興味を持っているということに驚きを隠せません。
    私自身は第一回から毎回寄稿させてもらっていて、ドキュメントを書く切欠に利用させてもらってます。まだまだ書かないといけないんですけど。

    mikutterユーザ会

    私がゴールデンウィークに東京に遊びに行った時、katsyoshiさんがmikutterユーザ会を企画してくださり、参加しました。要は単なる飲み会だったのですが、mikutterの名のもとにユーザやユーザじゃない人が集まってくれました。今思えばTwitter上で技術系クラスタの間で有名な人とかもいらっしゃったので、結構豪華なメンバーでしたね。当日お越しいただいた女帝さんに、緊張のあまり「ShootingStar作者のはるです」と自己紹介してしまったのが未だに気になっています(誤解されてないといいが)。不特定多数が参加できるmikutter関連のイベントに私が参加したのは初めてでした。

    OSCに出展

    8月4日に開催されたOSC Kyotoに「mikutter」として出展しました。今のところ唯一私が主催したもので、mikutterの開発者として不特定多数の人にお話をしたのは初めてでした。その時のことは OSC Kansai 2012に行ってきた というエントリにまとめました。

    外の動き

    ubuntu 12.04

    Ubuntu 12.04がリリースされました。mikutterにとっては最初いくつか問題が起こりましたが、LTSでも簡単に新しめの動作環境を構築できるようになりました。やったね!

    Twitter API 1.1

    Twitterは9月かそこらにAPI 1.1を告知、過去のAPI 1.0を使用できなくするという発表をしました。いつかのBasic認証とかを思い出しますね。このAPIのアップデートによって、検索結果にリツイートが非公式リツイートのように紛れ込んでしまう問題などが改善しました。ありがたや、ありがたや。
    あとは最近さんざん書いてるDisplay Requirementsの話とかがある。表示の仕方とかはmikutterの肝なので、新しくmikutterを使う人に誤解されてしまったら少し悲しいな。今年Twitterにあった最大の事件といえばこれですね。世界的にもこれは衝撃的だったようです。

    反省

    今年は結構コード書く以外のことをやった。その結果いろいろ面白かったんだけど、mikutterの開発速度が目に見えて落ちた。特にmikutterに使える時間が増えたわけではないのに(減ってる)、コードしか書かなかった時よりペースが落ちるのは当たり前か。一方で実装したい機能というのも、さすがにこれだけ続けていればひと通り出揃いつつある。私が魅力的に感じない機能はサードパーティプラグインで提供されたほうがいいし、これからはそういったものを作りやすい環境を整えることを考えた方がいい、気がしてる。
    大袈裟な話じゃなくて、単にもうちょっとドキュメント書いたら割りと問題なくなると思ってる。みっくストアとかもあるけれど。今年はドキュメント書いていこうと思っていたけれど、前述のような理由や、書いたとしてもドキュメントというより日記みたいなことばかり書いていた気がする。全く、このブログを何だと思ってるんだ。「mikutter開発日記」だぞ。って、日記じゃねーか、これでいいのか。これでいい。

    今年の目標

    もう同じ過ちは犯さない。目標なんて立てたら全部達成できないんだ。だから胸のうちに秘めておくことにしよう。
    そういえば、今年は元日未明に八坂神社を参拝してきて、mikutterの薄い本製作委員会がコミケに通りますようにってお祈りしてきました。
    あっ