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

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のリリースから一ヶ月近く開いててびっくり。

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

2012年5月28日月曜日

GUIプラグイン書き直してる話

久しぶりにやってることを書く。Twitterで小出しにして言ってたことをちゃんとまとめてみた。

GUIプラグインといえば、Gtkを使って諸々のUIを全て管理しているプラグイン。これを追加したことで、mikutterはbotからTwitterクライアントに進化したんだね。
ただ、最初にこれを書いてから三年くらい経ってるわけで、最初は200行くらいの超大規模()プラグインだったわけだけど、今では400行弱あって、これ関係が入ってるmuiディレクトリでwc -l *.rbやったら4700とか出てきて合わせたら5000行を超えますね。200行で大規模とか若かったな

現在問題になっていることが数点あって、それを解決するためにはもういっそ再設計したほうがいいんじゃないかと思って今回書きなおしてます。一応最低限動くようになってこれでいけるんじゃねって思ったので今回ブログを書きました。今回問題にしたのは

  • タブとかペインを扱うmikutterコマンド作るのがしんどい
  • プラグインのGtk依存を除去したい
  • タイムラインにイベントを引っ掛けられたら便利
の3点。

mikutterコマンドのほうの話は、そもそも俺がそんなことをしたいと思ってなかったのでそんな設計ではなかったんだけど、確かにできると便利。具体的には、キーを押せば左右のタブにフォーカスが移るという事ができる。ユーザ層的にキーボード大好きな人が多いので、できるとよさそう。ただ、今のguiプラグインだと、RubyGtkの知識がめっちゃ無いとそういうものは作れない。

もし完全にプラグインのGtk依存をなくせば、まずGtk以外のUIツールキットでmikutterのUIを書くことが理論上できるようになる。というのは、guiプラグインだけすげ替えればよくなるので。Gtkがうまく使えないプラットフォームでは、プラグインを書けばなんとかなるということがあるかもしれない。
それから(実はこっちがメイン)、イベントがGtkオブジェクトをやりとりしないようになるという事は、UIに影響を与えるようなプラグインでも別プロセス化しやすくなる。そもそも特定のプラグインのプロセス分けるのをまだやってないんだけど、その理由がほとんどのプラグインはタブ作ってるからあまり意味ないというもの。
ちなみにGtk依存は完全には無くせないと思ってます。理由は後述。

あとは、特定のタイムラインにだけ通知、フィルタなどをかけられるといいなと思ってるんだけど、これをするには今のタブの管理方法では不可能。大幅な書き換えがいるけれど、嬉しいことに三年で俺のスキルが上がったらしく、guiプラグインをいじっているとSAN値直葬されるので、書きなおすしかなくなってしまったわけです。

内部処理については端折るけれど、タブとかに固有ID(スラッグ)を持たせたら通知の鳴り分けができるし、その名前を指定して直接タブオブジェクトとかにアクセスできたら、ショートカットキーで左右のタブに移動するのもできるようになる。あとはちゃんと設計して前よりは読みやすくする。更に、gtkプラグインを新設することで、guiプラグインにgtkの話が一切入らないようにした。この2つのプラグインは、mikutterのイベント機能を使って通信しているので、ほかのプラグインで気軽にちょっかいを出せる。

多分多くの人にとっては、具体的にプラグインの書き方がどう変わるかが関心ごとだと思います。とりあえず今移植した中で一番簡単なfriend_timeline改めhome_timelineプラグインのコードがこんな感じです。



タイムライン作ってるらしい処理があるけどGtkの文字はどこにも出てこないようになりました。2-4行目が、タブを作ってアイコンを当てはめ、タブの中にタイムラインを入れるという一連の処理。
実際にツイートを入れるのは7行目ですね。これはスラッグを指定してインスタンスをわざわざ得ていること以外は特に変わらない。ところどころ出てきてるシンボルが識別名です。プラグイン、タブ、タイムラインで同じ名前使ってるから若干わかりづらいけど。スラッグさえ指定すれば別のプラグインから別のタブにちょっかいを出せます。

あとタイムライン以外に必要なパーツといえば、フォロイーリストとかで使ってるようなユーザリストと、アクティビティなどで使ってるCRUDビューくらいかな。もちろんプラグイン開発者が望めばGtkを使えるようにします。プロフィール画面をこの調子で作れるようにしようとおもったらwxWidgetsを再発明するハメになってしまいかねない。やり過ぎはよくないのだよ

以上でやりたかったことは全て解決できそうです。
しかし、guiプラグインならまだしも、gtkプラグインに依存するプラグインが出てきてしまうという新たな問題が顕在化しました。これじゃあ別のツールキットで実装が出来なくなるし、マルチプロセスの夢も遠のいてしまいます。というわけで、先延ばしにしていた、プラグインのメタ情報を書くことができる「プラグインメタファイル(仮名)」の実装を検討しています。
これは、yamlとかで、プラグイン名や想定するmikutterのバージョンなどを書いておくファイルです。別ファイルになっているので、実際にプラグインをロードするまえに動作条件を満たしているかどうかが分かります。ロード完了してからバージョンが違って動かないということがわかっても手遅れなので、ソースコード内に書くのはボツになりました。
この中に依存するプラグインを書いておけば、想定するプラグインがないというエラーを出せますし、同じプロセス上で実行するといった配慮もできそうです。

これは今のところ0.1.2のメインになるであろう変更でもあります。今のところ前のタイムラインやタブの作り方と互換性を取るのに苦労していて(タイムライン、タブにスラッグがない等)、mikutterとしては初の互換性がないリリースになる恐れがあります。(メジャーバージョン上げて0.2にしようかな。え?最初の0がどうしたって?)とはいえ、多少の書き換えで済むので、把握してるぶんについては、pull requestを送ることもできそうです。

丁度仕事も落ち着いてきて今月は時間が取れそうなので、あまり風呂敷を広げすぎないようにしつつ、8月はじめまでにはリリースしたいです。アレがあるからね

2012年5月13日日曜日

#mikutter 0.1.1

mikutterの最新不安定版、0.1.1をリリースしました。


  • 機能追加・仕様変更
    • アクティビティタブの仮実装(Twitterのアクティビティとは別物です。リンク先参照)
    • 抽出タブプラグインに、Twitterクライアント名によるフィルタのサポートを追加
    • リプライ記号として、♨や陰陽玉、チルノ等を新たにサポート
    • ツイート検索、PINコード入力をエンターキーで決定できるようにした
    • フォントと色を細かく設定できるようにした
    • ミュート機能でミュートしたユーザのツイートに加え、関連するリツイート、リプライを表示しないようにした
    • 処理の高速化
  • 内部変更
    • 設定画面のUIを追加
      • multiselect(チェックボックスによる複数項目選択)
      • multi(複数のテキスト)
    • プラグインのデタッチ機能
  • バグ追加
    • priceless

自分で設定していた期限が来たのでリリースします。pre1のテストのご協力ありがとうございました。あれからもいくつかのバグが追加・削除されているので、pre1を使ってくれていた人もアップデートしてね。