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

2012年9月18日火曜日

mikutter 0.2 開発版のテスト開始


若干日数がたってしまいましたが()、mikutter 0.2をtrunkにマージしたので、trunkを使っている人たちは、updateするともうmikutter 0.2がつかえるようになると思います。


で、これを以てバグ報告の受付を開始します。まだできてないこともあるけれど、数が減ってきたのである程度つかえるレベルになってきたと思います。さあ今こそかつての人柱魂を呼び起こす時だ!


A____A
|・ㅅ・|
|っ c|
| か |
| た |
| じ |   
| け |
| な |
| い |
| ! |
|   |
U ̄ ̄U


リリーススケジュール

Redmineのトラッカーが「機能」か「致命的」になっているものが全て完了した時点でRC1を公開(tarball)、致命的な不具合があれば修正して、数日サイクルでRCをリリースしていき、一週間大きな問題が見つからなければ0.2をリリースです。9/30あたりになればいいんだけどな。

新機能

ちょいちょい言ってますがざっとおさらい。

UI関連の内部APIの大幅変更

前回のエントリで説明したとおりです。人によっては、拾ってきて入れてるプラグインが対応して無くて起動できなくなると言ったこともあるでしょう。

マルチペイン

マルチペインに正式対応しました。二つ以上タブがあるペインのタブを右クリックすると、「新規ペインを作成」というコマンドが出てきます。これで新しいペインが一番左にできて、そのタブがそこに移動します。
今までの怪しい隙間にD&Dで増えるというのはないです。
ペインの構造が大幅に変わったので、0.1系のペイン情報は失われています。

設定

設定タブを廃止しました。ステータスバーの右にあるネギレンチアイコンをクリックすると、設定ウィンドウがポップアップします。設定はいままでどおり、触ったら即反映されます。決定ボタンなどはないので、設定が終わったらWMの機能を使って設定ウィンドウを閉じてください。

プロフィールプラグイン

プロフィールプラグインを書き直しています。レイアウトが大幅に変わったことと、ふぁぼ・ふぁぼられ数が見れるようになったことが変更点です。

フォーカス操作系のコマンド

左右のタブに移動する等、キーボード操作をしやすくするmikutterコマンドを大量に追加しました。ちょっとショートカットキーの割り当て画面考えないとそろそろきつくなってきましたね。

この世の全てをそこに置いてきた

いろんなプラグインにどさくさに紛れて隠し機能を追加しました。あと、いい忘れてる機能もありそうです。

バグ報告

クラッシュしたらレポートを送ってやってください。だけどバックトレースをコピペしてRedmineで適切に報告してくれたら、より早く対応できます。
バグ報告はRedmineでお願いします。Twitter上で報告されてもチケット化が追いつかないし、そもそもバグの報告から修正完了までの流れを扱うのに不向きです。また、流れが早いため他の人との情報の共有がうまく行きません。一応リプライで言われても聞きますが、基本的にTL上にいる時は休憩中なので、その場で聞いてるだけですぐに忘れる、ということがしばしばあります。人間だもの。
もちろん、質問はTwitterで結構です。でもアカウントを持ってる人には最終的なチケットの作成はお願いすると思います。

mikutterのRedmineアカウントを持っていない人で、報告するのに登録してやってもいいという方は、登録フォームから登録してください。ただしアクティベートは手動で行うので、登録したらリプとかで知らせてください。

チケット作成の流れはこちらの文書を参照してください。Redmineで残作業を確認するにはこちらから。コンソールのように、実装してあるのにまだチケットが残っているものは、現在作業中ということです。


今週は結構できるとおもうんだけどなーほんとに今月中にリリースとかできるんかな

2012年9月16日日曜日

mikutter 0.2 プラグイン移行ガイド

1 はじめに
まだバグは致命的なもの含めていくつか残ってますが、テストしてもらえる品質になったと判断したので、mikutter 0.2 を mikutter の trunk にマージしました。 今回のアップデートで、0.1 系と互換性が失われた部分がいくつかあり、プラグインを開発している人にはお手数ですが自分のプラグインに手を入れてもらわなけばいけなくなりました。

それもこれもクーラーが壊れたのが悪いんです。で、みなさんのプラグインをどうやって移行していけばいいかを簡単に説明します。 今回は、あくまで0.1用のプラグインが「動く」ようになることを主眼に説明します。 つまり、すべてをモダンな形式に書きなおす訳ではなく、互換性のあるところはできるだけ触らないようにして、 最小ステップで動くようにする方法を紹介します。 したがって、0.2対応のプラグインを書くためのドキュメントとしてはあまり使えません。

2 ざっくり
0.2 の目玉の変更はGUI関連に大幅に手が入ったことです。 これにより、複雑なGUIをもったプラグインが動作しない場合があります。 また、mikutterコマンドも変わったので、 もしあなたの作成したプラグインにmikutterコマンドを提供しているものがあるなら、 基本的には必ず書き替えなければならないと考えてください。

3 タブ
今までは、Gtkオブジェクトを作成して、 mui_tab_regist イベントでそれをGUIに渡して、適切な場所に配置されていました。 これからはGtkは基本的には使いません。全てはUI DSLを介して操作し、それをツールキットプラグインが表示する というスタイルをとっています。こうすることで、mikutterをGtk以外で操作する方法を提供する余地を持たせたい、 という目論見があります。 とはいうものの、UI DSLはmikutterプラグインのほとんどのニーズを満たすために最適化されているため、複雑な インターフェイスを定義することには向いていません。望むなら nativewidget メソッドを使ってタブの中に Gtkオブジェクトを直接埋め込めますし、 mui_tab_regist も非推奨ですが残されています (そして、いくつかのmikutterプラグインは未だにこの古い方法でタブを構築しています)。 ぶっちゃけて言えば mui_tab_regist はそのまま使える。Gtk::TimeLineもそのままでいい。 (Gtk::TimeLineは昨日あたりまでバグで動作してませんでしたが、今はもう大丈夫です)

あとどうでもいいんですけど、registっていう英単語はないんですってね。なんであると思い込んでたんだろう。 多分みんな使ってるから、調べもせずに日常的に使うようになってしまったんでしょうけど、 イベント名なので単純に変えられないし。早くこんな黒歴史イベント消し去りたいです。 このイベントを使わずにもっとクールに書く方法はあるんですが、今回の範囲外なのでカット。

4 設定
設定はポップアップウィンドウになりましたが、プラグインからsettings DSLを 使って設定を挿入することに変わりはありません。 これについても、内部のAPIは完全に互換性があります。

5 廃止されたイベント
内部でしかほとんど使っていなかったような、Gtk関係のフィルタを削除しました。残念ながら、見た目はほとんど 変わっていませんが、mikutterのUIの構造は大幅に変わっているので、安直に代替できるものはほとんどの場合ありません。 Gtkウィジェットのツリー構造を直接操作するようなプラグインも(多分見たことないけど)動かなくなります。

6 mikutter コマンド
おそらく一番多くの人にとって問題になるのはmikutterコマンドです。これは今回どうしても変更せざるを得ませんでした。

6.1 command メソッド
従来はmikutterコマンドを追加するためにはフィルタを用いていましたが、これからは command メソッドを使用します。 まずは従来の書き方をおさらいしてみましょう。
# in 0.1.x
on_command do |menu|
  menu[:reply] = {
    :slug = :reply,
    :name => '返信',
    :condition => lambda{ |ms| ms.map(&:message).all? &:repliable? },
    :exec => lambda{ |ms| ms.first.timeline.reply(ms.first.message, :subreplies => ms.map(&:message)) },
    :visible => true,
    :role => :message
  }
  [menu]
end
このモデルにはさまざまな問題があって、まずフィルタで受け取ったHashに、スラッグをキーにしてHashを入れる必要がありますが、 中に入れるハッシュの中にもスラッグを書いておかなければいけません。2つが違うと不具合が起こるので、 あまり好ましいAPIではありませんでした。 更に、フィルタなので、最後に引数を配列で返す必要があります。だいたいはスニペットで書いてしまうのでこれが問題になることは少ないですが、 ミスをする原因にしかなりません。 0.2では以上の点を改善しています。
# in 0.2
  command(:reply,
          name: '返信',
          condition: Plugin::Command[:CanReplyAll],
          visible: true,
          role: :timeline) do |opt|
    opt.widget.create_reply_postbox(opt.messages.first.message,
                                    subreplies: opt.messages.map(&:message)) end    
commandメソッドが追加されました。
command(slug, options, &proc)
slug にスラッグを設定して、 options は従来渡していたHashと同じ物を渡します。ポイントは、slugを指定する必要が なくなったことです。 slug に設定されている値が流用されます。 更に、 :exec キー(コマンドの実行内容)も不要になり、 &proc を使うようになりました。これも slug のように中で Hashが加工されているとお考えください。というかそうなってます。

6.2 condition
condition キーに、従来は無名関数を渡していましたが、例では Plugin::Command[:CanReplyAll] という値が 設定されています。 これは単純に、よくある条件を定数にまとめたもので、あえて使う必要はありません。 すべての定数は mikutterの「core/plugin/command/conditions.rb」にまとめられています。 実は引数に渡される構造体にも若干の変化があるのですが、それは次の実行部分の話にまとめます。

6.3 ロール
どのウィジェット上でコマンドを実行するかを指定する部分で、条件や実行時に渡ってくる引数が変わります。 ただ、今まであった :message:message_select のような、 直接存在しないウィジェットに紐づいていないロールは 廃止されています 。 0.2でも使用できるロールは、実際のウィジェットとして存在するもの、すなわち :timeline, :postbox です。 また、ウィジェット全てにロールが割り当てられたので、今までにはなかった :tab, :pane, :window, :profiletab, :profile が新たに使えるようになりました。移植するのに新しいロールを使うことはない と思うのでここでは割愛します。

6.4 条件及び実行時の引数
いままでは、ロールによって渡される引数が違いましたが、 これからはどのロールでも同じ構造体が渡されるようになりました。
Plugin::GUI::Event = Struct.new(:event, :widget, :messages)
event には、mikutterコマンドがどのような入力によって実行されたかがシンボルで入っています。 基本的には :contextmenu (右クリックメニューから選択された)か :keypress (ショートカットキー)です (mikutter 0.2 からはmikutterコマンドを呼ぶデバイス等も拡張できます。だから :gamepad とか :kinect とかが入ってくる可能性があります)。 widget は、イベントが発生したウィジェットです。ロールが :timeline なら、必ずPlugin::GUI::Timeline のインスタンスが入ります。 最後の :messageswidget のアクティブな子ウィジェットを再帰的に探索し、タイムラインがあれば、 そのタイムラインでイベント発生時にアクティブだった Message の配列が渡されます。 これは Plugin::GUI::Timeline#selected_messages の戻り値ですが、 選択されているツイートに対して実行されるコマンドには必ずこの配列の内容を使ってください。 イベント発生時と実行時には微妙なタイムラグがある可能性があり、コマンドを実行した時に選択していたツイートと、 実際に実行された時に選択しているツイートが違う可能性があるからです。

6.5 具体例等
mikutterの core/plugin/command/command.rb に、たいがいのコマンドが定義されているので参考になると思います。 フィーリングでコピったらいけるでしょう。

7 定義ファイル
プラグインによっては、正しく書いているのにNoMethodErrorなどでクラッシュすることがあります。 理由はたいがい、guiプラグイン等がプラグインDSLにあとからメソッドを足しているケースがあり、これらの プラグインよりそのプラグインが先にロードされていることが原因なんじゃないでしょうか。 0.2からはどのプラグインに依存しているかといった情報を書く定義ファイルが追加されたので、 依存するプラグインがあればそれを書いておくべきです。そうすれば、依存しているプラグインを先にロードしますし、 依存するプラグインが一つでも存在しなければ、ロードされません。

7.1 定義ファイルの書式
spec という名前のファイルを作成して、中にYAMLで記述します。 例えばダイレクトメッセージプラグインはこんなかんじです。
name: Direct Message
slug: directmessage
description:
  mikutterにリア充御用達機能ダイレクトメッセージを追加します。
  送受信したすべてのDMを見るタブと、各ユーザのプロフィールにそのユーザと自分がやり取りしたDMを表示するタブを追加します。
depends:
  mikutter: "0.2"
  plugin:
    - gui
    - gtk
version:
  "1.1"
author: toshi_a
  • name プラグインの通称です。日本語でもいいです。現在は使われませんが、インストールしてるプラグイン一覧みたいなのをそのうち作ってみたいですね。
  • slug プラグインのスラッグ。依存関係の解決に使われます。
  • description プラグインの簡単な説明。
  • depends/mikutter 想定するmikutterのバージョン。ここに書いてあるバージョンと現在のmikutterのバージョンに 互換性がなければプラグインがロードされません。
  • depends/plugin 依存するプラグインのスラッグ。今のところ、GUIがないと意味がないようなプラグインは gui を、 Gtkクラスを少しでも使っている場合は gtk を指定してください。DirectMessage は両方指定しています。 一つしかない場合も配列で指定してください。
  • version プラグイン自体のバージョン。今のところ特に用途はありません。
  • author プラグインの開発者のTwitterアカウントのscreen_name。これも今のところ特に用途はない。
8 まとめ
今回は当初の設計では想定していなかったことをいくつか実現するために、内部を大幅に書き換えたので、いくつか プラグインの互換性がなくなってしまいました。mikutterは今まで、必ず過去のプラグインも動くようにしていたので、 今回手を入れたGUIまわりは、最初の設計が誤っていたと言わざるを得ないでしょう。 

難しく言えば、クライアントに新たなユーザエクスペリエンスを提供するためにはアーキテクチャにイノベーションを起こすことが必要でした。 その代償としてコンパチビリティを失うソリューションしかトゥギャザーできなかったのは残念ですが、逆に言えば、 長いスパンで見ればプラグインデベロッパの開発コストを大幅に減らすオポチュニティと捉え、 プラグインDSLを拡張することによって新たなmikutterのコアコンピタンスを創出することができたので、 私とみなさんにとってWin-Winの変更になったと思う次第です。

mikutterのプラグインは本当にいろんなことができます。だから場合によってはここにある内容だけでは 移植することができないかもしれません。あと、なんか書き忘れてる気もします。 だから何かあれば適当に聞いてくれたらいいと思います。適当に答えますんで。

2012年9月4日火曜日

#mikutter 0.1.1.863

  • Twitpicとinstagramの画像が表示できなくなった。仕様変更に対応
  • mikutter.rbにシンボリックリンクを貼ってそれを起動すると起動できない問題
お久しぶりです。いかがお過ごしですか。自分の部屋にクーラー無くても、2回くらい頭痛と吐き気で動けなくなる程度で、基本的に生きていけることが分かりました。
ただし流石に40度を超えると怖いので、クーラーが生きてる部屋に逃げてしまいます。そうするとmikutterの開発が止まるので、mikutterのバージョンアップが一ヶ月以上空いた原因は、間違いなく夏にあります。

今回のアップデートについてはあまり話すことはありません。現在、0.2を開発中です。ですが、あまりにも抜本的な変更だったため、trunkに入れると一部trunkを常用している人の環境が破壊されるので、ブランチを一時的に切り替えていて、ある程度のところでtrunkにマージする、という手順で開発を進めていくことにしました。

0.2の現状

0.2はまだ不安定なので、うかつに起動すると、プロファイル等を壊し、mikutterを起動不能にし、あなたを一生童貞のままにしてしまう可能性があります。彼女はできたとしても財布しか見てません。
そのため、現在0.2は「開発者用プレビュー」です。αかな。プラグイン開発者とかは先に見ておきたいですからね。それから、バグ報告は受け付けていません。あまりにもバグが多すぎて、いちいちバグ報告を聞いている感じじゃないからです。

trunkに取り込んだ時(βくらい?)、RC(tarボールを公開した時)にここでもう一度記事にするので、テストしてみたい方はもうしばらく待っていてください。パッチはくれたら気温が低い日に取り込みます。

Twitterの規約の変更等を受けてのこれからのmikutterについて

最近話題になっています。これについて私から説明することはありません。Twitterの発表が全てです。ただ、mikutterがこれに対してどういう対応をするかはお伝えしておこうと思います。一言で言えば、まだ様子を見ているところで、今のところなにも行動していません。

今のところ問題視しているのは、Twitterの定める Display Requirements に従わなければならないようになったことです。mikutterでこれに従うことは、技術的にはそれほど難しいことではありませんが、これに従えば、mikutterの使い勝手を損なうことになるだろうと考えています。ではどうするのか…というのも実はまだ考え中なのですが、おそらくみんな似たようなことを考えているんじゃないでしょうか。どうしようもないことばかり考えてないで、週末のOSCに向けて日程を調整したほうが良いと思います。俺はいけないけどね。(mikutterマグカップが手に入るチャンスもあるとかないとか)

2012年8月11日土曜日

OSC Kansai 2012に行ってきた

先日の告知にもあったように、OSCにmikutterブースを出展させていただきました。個人的にまとめてみます。

1 準備

ブース自体は普段使っているmikutterの展示をするということで、あまり準備はしなかったけど、私の持っているノートパソコンがMBAだけなので、標準のMac OS Xでは動作しません。 そこで、Ubuntu Linux 12.04をインストールしてmikutterをセットアップし、展示を行うことにしました。 mikutterのセットアップ自体は本番2週間前くらいになってセットアップ。セミナー用開発環境も込みで、朝起きてから開始して昼くらいには終わってました。いやぁ楽になったものだ。 当日ブースを手伝ってくれたぺんぎんさん(@penguin数字四桁(忘れた))は、多忙なスケジュールの合間を縫って参加してくれて、Gentoo Linux上で動いているmikutterを展示してくれました。
また、Android用Twitterクライアント、ShootingStarの多分マスコットキャラクターであるイプシロンマンのTシャツを、私の務める会社のデザイナーに協力してもらい作成し、当日着用して参加しました。結果、作者にふぁぼ爆撃されました。 殺伐としたOSCにmikutterブースが!!!

_人人人人人人人_
> (´へεへ`*) <
 ̄^Y^Y^Y^Y^Y^ ̄

2 前日

OSCは3日と4日に開催されていますが、mikutterの参加は4日だけでした。私も仕事が大詰めで、下手をすると参加できないということもありえたので、前々から仕事を片付けておき、金曜日は午後からはほとんど会社にはおらず、会場の下見等をしていました。 で、15時くらいに会場に行ったら、すでにタペストリーやグッズがセッティングされているし、ぺんぎんさんがブースでmikutterの展示をしているし、お客さんもぽつぽつ来るし、事実上mikutterブースやってる。いいのかこれ。 私はmikutterブースで翌日のためにmikutter0.2のデバッグをしてました。

3 当日

3.1 開始

OSC開始が10:00なんですが。5分前くらいに「ておくれた人たち」(私のことを「ておくれである」と言い、定義も曖昧なまま言葉だけをひとり歩きさせ、手遅れにさせる人たちのこと)がぞろぞろとやってきてブースを囲み、肉まんを開けるというハプニングがあったけどなんとか予定通り開始。

3.2 展示内容

ブースでは、以下のグッズを配りました。
  • mikutterシール(円形) @okano_t さんから
  • mikutterシール(エンブレム・okanoさんから横流しらしい・笑) @uwabami さんから
  • mikutterシール(縦長) @tsutsuii さんから
  • mikutterちゃんブロマイド @brsywe さんから
  • mikutterタオル @okano_t さんから
  • mikutterマグカップ(mikutterの薄い本vol2執筆者のみ) @tsutsuii さんから
  • mikutterの薄い本vol2「すごいmikutterたのしくておくれよう!」 @brsywe さんから タイトル自重
多い。ほんとうに多い。どうしてこうなった。多すぎて書き忘れてるのあるんじゃないか。大丈夫か。 グッズだけじゃなくて展示も紹介しておかないといけません。
  • ubuntu 12.04でのmikutter 0.2(開発中)の展示
  • Gentoo Linuxでのmikutter 0.1.1の展示
これではグッズ売り場か展示してるのかよくわからない。しかも私は全く何も用意していない(mikutterの薄い本には寄稿したが)。いいのかこれ。

3.3 お客さん

当日はかなりたくさんのお客さんが来てくれました。不慣れなことも手伝ってとても慌ただしくて周りをよく見てなかったけど、聞くところによると初参加ということもあってか相対的に人気のブースだったようで、ありがたい限りだ。

3.3.1 janetterの人

Windows/Mac用のTwitterクライアント、janetterの中の人が絡んでくれた。まさかjanetterのような有名なTwitterクライアントの中の人に捕捉されていた上に、前日は同じTシャツを着ていて、mikutterのREADMEから無断リンクしていることもバレていたとは。jane氏〜相互リンク(死語)してくだされ〜。
そういえば母校の先輩だったということもわかった。janetterはリリース当初からたまに追いかけていたが、これで気兼ねなく機能をパクることができるようになった。 あの学校、(不本意だが)やばいとされているTwitterクライアント開発者二人も排出してるのか、恐ろしいな。

3.3.2 Archの人

私が現在mikutterの開発にも使っているArch Linuxでmikutterのメンテナンスをされている方と初めて会うことができました。関西でも結構いろんな人に会えるものですね。 あと別の人からですがArch Linuxの缶バッジをもらいました。これはArch(ry

3.3.3 遠方から

わざわざ、mikutterが出展するから来京予定を前後させてOSCに参加してくれた人が何人かいた。嬉しいですね。

3.3.4 通りすがりにエナジードリンクをくれる人

エナジードリンクはたまに飲むけど、立て続けに二本のんだのは初めてで、カフェインの取り過ぎか、とても気分が悪くなって、死ぬかと思った。それともちゃんぽんしたのが悪かったのかな。 飲み過ぎには注意しよう。

3.3.5 通りすがりにGentooTシャツを売ってる人

ブース出せよwww

3.3.6 通りすがりにふぁぼってくる人

家でやれ

3.4 セミナー

当日は、13:00からセミナー「mikutterをあなた色に染める」を開催した。 講義内容相当の記事は開発日記に掲載する予定だけど、資料はアップするとまずいものがかなり含まれているので大人の事情で非公開で。 めったにプレゼンしないのに、展示会場の前のステージでやらされた。どう考えても運営にマークされている。どうせネタ枠だし前でやらしといたらええやろといったところだろうか。そうだよ。

3.4.1 mikutter 0.2

mikutter0.2から大幅にカスタマイズの幅が広がるので、それを紹介させてもらいました。 このブログでも当然そのことについては後に詳細に解説した記事を書く予定です。0.2のエッセンスを伝えられてよかった。ただ今回は、内部の話が主だったため、プラグインを開発するつもりのない人にはピンと来ない話だったかもしれません。 一方、本来対象としていた人たちには、一定の反響がありました。もう少しまともに動くようになったらブランチを切って公開したいと思う(あんまり溜めるの良くないと思ってるし)。

3.4.2 ライブコーディング(プラグイン作成デモ)

mikutterプラグインを作るライブコーディングを行いました。推定30人以上が見てる前でコードを書くという極めて過酷な状況下でも書けるくらいプラグイン簡単だよというのをアッピルするつもりで、同じコードをちゃんと再現できるように10回以上同じプラグインを書く練習をするというなかなかない経験をしました。でも入念に練習しすぎて、前日に書いたコードの設定が残っていて、へんなやつにカラーラベルがついたりして本番でテンパってしまった。料理番組メソッドがあって本当に良かった。

今まで、ustreamで画面を配信しながらコードを書いたことは何度かあったけど、あれだけ多くの人が注目する中でコードを書くのは初めて。さすがに緊張するかと思ったけど、ちゃんと準備していたので思った程でもなかった。

ライブコーディングで伝えたかったことは、私がmikutterプラグインを作るときにどういう環境でコードを書いているかということです。mikutterの薄い本vol.2に私が寄稿した内容をフル活用してました。 同等の環境は、mikutter0.1.1でも、私が公開しているコードや、他の有名なelispをインストールするだけで実現できます。ぜひお試しあれ。

3.4.3 笑い

10回取ることが目標だったけど、それくらいはいけたと思う。練習した甲斐があった。

3.4.4 人

他のアトリウムでのセミナーの雰囲気から、2/3くらい来ればと思っていたが、フタを開けるとはるかに多くの人が来て、スタッフが椅子を追加してもまだ立ち見が出るほどでした。だれがこんなこと予想できただろう。運営にも、人多すぎワロタとか言われていたようだし。 今回は、mikutterプラグインにある程度興味が有るか知っている人が対象で、あまり人が入るたぐいのセミナーではなかったんだけど。

3.4.5 ふぁぼ爆撃

ふぁぼ魔たちが、セミナー中に示し合わせてふぁぼ爆撃をする計画をしていたようで、数日前からほとんどふぁぼられなくなり、本番が始まった時に未曾有のふぁぼ爆撃を受けた。 あとでfavstarで調べたところ、40分のセミナー中に2万ふぁぼされたことがわかりました。これは1秒に8favのペースで、過去に受けた最大のふぁぼ爆撃、20分4000ふぁぼ(1秒3fav)を遥かに超える規模・長さ。爆撃を受けている間はmikutterの動作に難があり若干セミナーに支障をきたしたものの、爆撃が終わったらいつもどおり動作しており、毎秒8ふぁぼにも耐えられることが証明できました。 依然として爆撃を受けている最中の挙動に課題は残るものの、今回のところは大成功と言って良いでしょう。

4 経緯

思い返せば、ステッカーが作られ、東京ではユーザ会が行われ、同人誌まで出すなど、かなりいろんなことに手を出しています。だから「mikutter」をよく知っている人の感想は、「今度はOSCか」といったところだったかと思います。 しかし「私」をよく知る人の中には、今回のOSC参加に違和感を持ったというか、驚いていた人がいて、何度かそのことについて聞かれたので良い機会だからまとめておきます。 今までのそういったアクティビティと今回では、(私にとっては)決定的な違いが一つありました。それは、初めて私が主導したということです。

今まで私がmikutterに関して行ったことは、コード自体へのコミットとリリース作業くらいなものでした。 リリースも、私はWebサイトを作ってtarボールを置くだけで、各種OS/ディストリでのインストール方法をブログにまとめたり、パッケージを再配布していただいているのは全て別の人です。 当然、イベントやグッズの企画、運営、頒布も全て私以外の人が主導しています(支援することはあったが、私が言い出したわけではないし、主導権を奪うようなことはしなかった)。

もともと、mikutterは私のために開発されました。 今まで私が書いたコードは、しばしば他人のためにデザインされていました。それというのはより多くの人に使ってもらう意図があったのですが、製作過程はつまらないから出来も悪く、尽く失敗していました。 あるときその過ちに気がついて、私は自分が書いていて楽しいコードだけを書いたほうがいいのではないかと考え、楽しければ実用できないコードでも書くようになりました。 そのアウトプットの趣向が大きく変わるきっかけになったのがTwitterとの出会いです。そう、気に入るTwitterクライアントがなかったから、作ろうと思い立ったわけです。その時決めたことが2つあって、今も概ね貫いています。
  • 楽しくなくなったらやめる。そうなったら続ける価値がないから
  • 自分のために。そのほうが良い物ができるだろうし、この考えが間違っているならmikutterは誰にも見向きされないだろう
だから、パッケージを提供するようなこともしなかったし(面白くない)、機能の要望も自分がやりたいと思わないと聞かないし(これはDMなど、何度かミスを犯して痛い目にあった)、グッズも作りませんでした(面倒以前に、そもそも思いつかないw)。 人のことを考えて作ったソフトウェアが全く日の目を見ないのに、私のわがままを体現したものが広く受け入れられる。よく聞くような話ですが、なんとも皮肉というか、不思議ですよね。

いままでこのようなイベントを見送ってきたのは、私が面倒くさがり屋だからです。準備が大変なのはわかりきっています。それでも今回私を参加させるに至った動機が2つありました。
  • 楽しそうだった。せっかくだし一度くらい、自分のソフトウェアを持って参加とかしてみてもいいんじゃないか
  • 一度みんなを見てみたかった
各種企画をしてくださること自体は非常にありがたいですが、やってる本人たちは大変そうだけどとても楽しそうで、開発者という立場を利用して今回私も楽しんでやろうと思いました。 2つ目は説明がとてもむずかしいし、理解されないかもしれないけれど、私が上記のような経歴を持っているから、mikutterに興味を持ってくれる人がどんな人なのか純粋に興味がありました。 もちろんそういう人たちには感謝もしていますが、べつに一人ひとりにお礼を言いたいというわけではなく、何を伝えたいというわけでもなく、かといってただの好奇心だけでもない。一度一緒に飲んでみたいという感覚に一番近いかもしれません。 そこで、mikutterを使っているような人が集まるであろうOSCという場に目をつけて、今回出展を決意するに至ったわけです。

そんなわけで今回のOSCへのブース出展、セミナーの開催は、二年半を超えるmikutterの歴史の中で、初めて私が企画し、私の主導のもとで運営されました。皆さんが楽しかったといっても、私のそれには遠くおよばないでしょうが、少しでも何か持って帰ったもらえたなら(物理的、論理的に)嬉しいです。

mikutterを使ってくれてる皆さん、来て下さった皆さん、サポートして下さった皆さん、ありがとうございました。これからもよろしくお願いします。そのうち飲みましょう。もちろんおごってくださいね。

5 今後

クーラー壊れたので死ぬ前に0.2をブランチに置いておきたいです。あとはたのんだ

2012年7月8日日曜日

#mikutter 0.1.1.814


  • 検索でクラッシュすることがある問題
  • OAuthトークンが切れた時のリトライ処理の不具合修正
  • 画像アップロードサービス「via.me」の仕様変更対応
いくつかバグを修正しました。自分の部屋の壁の中にネズミがすんでるみたいで、作業効率が下がってかないません。知り合いにそういう業者の人間がいるので相談したら、「次はイタチとかがくるよ!ハハッ!」とか言われましたそうじゃないだろもっとプロっぽい回答求めてるんだよ小学生かお前は

今回のバージョンにネズミが混入していないことは確認済みです。

2012年6月17日日曜日

#mikutter 0.1.1.810

  • 以下のWebサービスの画像プレビューに対応
    • twitgoo
    • via.me
    • 地獄のミサワの「女に惚れさす名言集」
  • 画像サービス「gyazo」の画像プレビューが機能していなかった問題
  • プロフィールタブを閉じた後、稀に「retweet error」というエラーが表示される問題の改善
  • デバッグモード中、特定の処理中にデバッグモードが有効にならない問題
マイナーチェンジです。最近話題になっている、いろんなtwitterクライアントで401エラーを受け取ってしまい、アクセストークンを破棄したような動作をする問題は、まだTwitterが修正を完了していないようですね。これ以上長引くようなら対策してもいいですが、データが返ってこないわけですから、通常通りお使いいただくことはできないです。でもTwitter社を責めないでください。Twitterと不具合はズッ友だよ…!

相次いで画像サービス(なんて呼べばいいんだ)向けのパッチを頂いたので、機能追加になってしまいますが今バージョンで提供することにしました。これからもジョニーデップに激似どころかそれを超越するTwitterクライアントになるべく、がんばっていきます。

(とはいっても来週から当分、また忙しくなりそうなんだよなぁ…

2012年6月9日土曜日

#mikutter 0.1.1 r799


  • 高負荷時、ツイート入力開始時にクラッシュする問題
  • タイムラインを閉じる時にクラッシュする問題
  • 規制されていたりネットワークが不安定な時に起動に失敗する問題
バグ修正ばかりですが、何れもクラッシュする可能性のあるものです。アップデートを推奨します。
Twitterの仕様変更がありましたね。URLに含まれてる #! を削除してくれました。やったね。また余計なことを
0.1.1リリースを記念して、Twitterがサーバサイドエラーに40xを返すようになったようです。RESTのホームタイムライン、メンション、UserStreamが影響を受けたみたいですね。私にとっては昨日の出来事ですがみなさんにとっては2週間くらい前の出来事だったんでしょう。0.1.1.790のリリースから一ヶ月近く開いててびっくり。

現在はなんとか少しづつ時間を確保できる状態になってきて、モチベも回復してきたからちょっとづつコードを書いてます。しかしじめじめして作業効率も落ちるし、なんとかならんのかいな