2015年12月22日火曜日

Yukari for Android 1.2

この記事は「Twitterクライアント開発マン Advent Calendar 2015」 22日目の記事です。


結月ゆかりさん、お誕生日おめでとうございます。心よりお祝い申し上げます。

長い長い混迷の期間を経て、ついに時間切れです
2015年の最後に、Yukari for Android 1.2.1をお届けします。


Yukari 1.2.1の新機能

正直、Yukari 1.2alphaが長かったので皆さん飽きているでしょう。というか、1.1からの差分をまとめていたらキリがありません。1.2.0alphaの最終一般リリース(r.244)からの差分をお届けします。

  • フィルタシステム / Yukari Query β
  • QRコードのテキストプレビュー機能
  • 再生不能な動画リンクを極力避けるように判定を修正
  • ページングの状態がタブ切り替えによってリセットされるバグの修正
  • ブックマーク上でプラグインを起動する際、表示と1つずれて起動されてしまう(最悪落ちる)バグの修正
  • 5インチ以上の端末で使うとサムネイルが極端に小さくなるバグの修正
  • ナルシストオプションの可否に関わらず、TLタッチ拡張で自己ふぁぼが行えるバグの修正

フィルタシステムについて

以前より長らく予告していた、ツイートの高度フィルタリング機能の実装です。
名前は「Yukari Query」と言います。ベースとなった言語をもじりました。
時間とやる気、他様々な要因によって、まだβ段階です。

ベースはSQL, Krile Query (StarryEyes), Lispです。これらを参考として、大枠にはSQL, KQ形式の表現で見やすさを、条件評価式の記法にS式を用いることで実装の手軽さを取りました。

どのような言語になっているか。最低限、何でも表示するとしたらこうです。
from * where (t)

大枠として from や where といったSQLライクな記述が見られます。これは存じている方であればその通り、ツイートの取得元、その抽出条件をそれぞれ表します。
from句の * は「全ての受信ツイートを対象とする」といった意味を持ちます。ちょうどKQのそれに近い性格を持ちます。
では、where句はどうでしょう。(t) はS式由来の記法となります。
この場合、(t) の t とはブーリアン値のTrueを指しますので、結果は真ですね。それだけですので、ツイートは全て真と評価され、TLに表示されることでしょう。

詳しい説明は、Yukari Wikiの以下ページを御覧ください。
Yukari Wiki / Yukari Query

Yukari Queryを使用するには、以下の方法があります。

  1. Filter タブを作成する
    タブの編集画面で、Filterタブを作成してください。
    作成後、エントリを長押しするとクエリ編集画面が開きますので、クエリを入力して保存して下さい。
    再起動後、保存したクエリでタブが有効になります。
  2. 「クエリを実行」コマンドを実行する
    検索メニューに新設されています。これをタップすると、クエリ編集画面が開きますので、クエリを入力して実行して下さい。新規タブで実行されます。


このエントリの残りでは、Yukari Queryのサンプルを幾つか紹介します。Wikiと被るかもしれませんが大目に見てください。
見やすさのため、改行とインデントを加えていますが、実際の入力の際には適当なスペースが空いていればだいたい解析してくれます。

from home:"<screen_name>" where (in ?text "ゆかり")
Home TLから、本文に"ゆかり"という語句が含まれているツイートを抽出します。ごく基本的な形です。

from home:"<screen_name>" where (or
  (in ?text "ゆかり")
  (in ?text "Yukari")
)
"ゆかり"だけでは飽きたらず、"Yukari"も含めてしまいましょう。このように、or関数を用いることで複数の条件を指定することが出来ます。もちろん、and関数もありますよ!
orが"いずれかが真"、andが"全て真"、ですね。

from home:"<screen_name>" where (regex ?text "(結月)?(ゆかり|ユカリ|[Yy]ukari)")
たとえば本文でいずれか、のような条件が多くなってきたら、正規表現を検討するのもありかもしれませんね。この場合、"ゆかり""Yukari""yukari""結月ゆかり"なんかが該当しますかね。
regex関数では、Javaの標準ライブラリが扱える形式の正規表現を使用することが出来ます。詳細はJava SE6のJavadocとか読んでください。
パフォーマンスは計測してないので、まぁなんというか無理はしないでくださいね。

from * where (and
  (= ?source "Yukari for Android")
  (or
    (in ?text "ユッカリーン")
    (regex ?text "(ゆかりさん){2}")
  )
)
まぁ、なんだ。アレだ。y4aで様々な愛情表現を行っているツイートを抽出する例です。

Krile Queryなどを使ったことがある人なら、すぐにどんなことができるかピンと来るかもしれません。そうではない人は、あまりピンと来ないかもしれません。
要するに条件をつなげて俺だけのタイムラインを作るぜ、という夢がモバイルでも始まったということです。

Yukari Query実装の最大の理由は「モバイルでも妥協しない、デスクトップクライアント並のことをするための機能を載せる」ってことです。
操作しにくくスペックも劣るモバイルだからこそ、できる範囲でスマートにこなせるようにする。それは方向性としてとても正しいと思います。
ですが、昨今の端末はどうでしょうか。昔と比べたらスペックも上がりました。3Dモデルがわいわい動きまわるリッチなソーシャルゲームをしている人も増えました。例えば白猫や乖離性、一昔前と比べたらだいぶすごいですよね。それを支えられるだけの力を持った機種がたくさん出回っているのです。
なら、テキストの大量処理なんて、できないわけないですよね?
じゃあ、やってみましょうよ。ってことです。

これからヒマな時に、徐々にfromソースなどを増やして実用的にしていきます。

バグ報告や要望は@yukari4aで受け付けております。
それでは、これからもよろしくお願いします。そして良いお年を!

2015年6月28日日曜日

Yukari 1.2 開発進捗状況

お久しぶりです。なんとかかんとか生きています。
仕事は難しいわけではないのですが、とにかく疲れと辛さが蓄積されます。

Yukari 1.2

進捗ダメです。
この状況では、2ヶ月連続正式版アップデート無しです。悔しいです。
今までほとんど月に1回は更新してきたのに……。

最も大きな理由としては、フィルタシステムの実装が難航していることが挙げられます。
y4a1.2では、条件式を記述してフィルタリングを行うタブを作成できるようにするつもりです。
何を目標にしているかは、Krile StarryEyesあたりを想像していただければだいたい合っています。私がWindowsを使用している時、愛用しているものです。
もっとも、それほどまで洗練されたレベルに持っていける気はしていません……。
とにかく好きなタブが作れるようになったら良いなという考えで進めています。単なる理想ですけど。

他には、単にy4a1.1でレポートされたバグが割と多くて手が回っていないなど、いつも通りの理由です。
この辺りに関しては、修正ができそうなものは極力手を付けますが、フィルタシステムにリソースを割いているためにそれほど手が回る気がしていません。
また、フィルタシステムの実装が済み、アルファテストでクリティカルなバグを潰したら早めに正式版に昇格させたいと思っているので、いつも通り1.2.0ではバグ満載となる予定です。

更新が途絶えている間にTwitterでは様々な事件が発生し、多くのクライアントの存亡が危ぶまれました。
ほとんどは元通りになりましたが、それでも多大なショックを与えましたね。
その関係もあってか、Yukariユーザも増えたり減ったり、トータルでは結構増えたようです。ご利用ありがとうございます。

ユーザが増えたところで、もしかしたらメイン張らせている人がだいぶ増えてしまったかもしれませんが、このクライアントはそもそも安定アプリではありません。
皆様と問題点を探して改良できたらと思っています。
1.2.0ではバグ満載となる予定です、と書きましたが、配信の際には恐れずにアップデートを適用し、だめだった場所を教えていただけたらと思います。

私だって人ですから時には荒れてたり適当なこともありますが、基本的にはバグや疑問点を問い合わせてもらえることはありがたいと思っています。
どうか今後もよろしくお願いします。



まあ、1.2全然できてないけどね。

2015年5月6日水曜日

就職して1ヶ月

ちょうどゴールデンウィークに直撃する感じで体調崩しました。
(正確には2日前くらいから鼻水がひどく職場でずっと鼻をかんでいた)

お仕事はまだつらくないです。
今つらくないから数ヶ月後が余計に心配になります。業種が業種だから……ね。

d250g2しなければいいなあ。するんだろうなあ。

Yukariについては、最近1.2開発ブランチを切りました。
ちまちまと拡張していって、5〜6月を目処にリリースできればと考えています。
お仕事が私の想像を超えていきなり派手に燃えれば夏になりますが、極力その前に……。

2015年3月1日日曜日

OSC2015 Tokyo/Springに行った

2/28 日曜日、明星大学にて開催された「オープンソースカンファレンス 2015 Tokyo/Spring」の2日目に行ってきました。
高校のコンピュータ部合宿の直後ということで、なかなかハードな週末となりました。

当日はとりあえず11時に間に合うように行動。今回は後輩である@raven_38_君と共に行きました。

到着してすぐ、raven君の希望でConoHaブースへ行き、raven君とこのはちゃんの写真を撮影。その後はとりあえずコミュニティブースへ行きました。

まず見たのはProject Vine、ちょっと前からLinux触ってる日本人なら誰でも一度は触ったことがあるであろうVine Linuxのブースですね。
何となく覗いてみたらおかのさん(@okano_t)に勧誘を受けた形です。atelier-wmとかVineで動くかな、とか考えながら聞いていました。



ここでは、リリースから間もないVine Linux 6.3のセットアップディスクとロゴステッカーをいただきました。

次に向かったのはmikutter ユーザ会やRasPi、NetBSDの並ぶ一角!ずっと大混雑でした。
シールをたくさん収集し、mikutterの薄い本 Vol7も購入。本で手に入れたいと思っていたのでよかったです。




この後、ぱらつり氏(@paralleltree) kb10uy氏(@kb10uy)らと合流し、食事をとりました。今回はカツカレーです。カツは切られているのかと思いきや、半分ほどまで切り込みが入っている感じでした。カツのユーザビリティについて話しながら食べていました。



食事後、Android WearからRecotw Explorerが見れるよなど披露してみました。

そうこうして適当にふらふらしていると、わかめそば氏(@wakamesoba98)が登山を終えOSCを散策している情報をキャッチ。しかも私の名刺情報があるじゃないですか……。



ということで、合流!F-07CでArchLinuxが実際に動いている姿や、Android 1.6エミュレータでSobaChaを実行する話、などなど盛り上がりました。



この後はまたmikutterユーザ会のところへ。「atelier toshi_a」というこの世に1つしかない名著を読ませていただけるなど、大変貴重な経験ができました。
としぁさんがツイートすると盛り上がる一角、おもしろかったですw




しばらくふらふらしたり、休憩をして最後はLT会場へ移動。ここではmikutter on Nexus7を広げ積極的な危篤患者アッピルに努めました。



上海OSCの話やあひる焼き、また、あっきぃさんのラズパイ発表でバーコードリーダーでページ送りをしていた姿は印象に残っています。


正直な話、今回は合宿の直後に来たということもあり、体力不足や体調の不安さがありました。実際、日中ずっと喉の調子が優れませんでしたし、帰りは電車内で寝まくっていました。万全な体調で行きたいものです。

また、つい先日アップロードしていたatelier Window Managerのことをふと思い出し、いずれWindow Managerの分野でOSCに出展側で出てみるのも面白いかも知れない……!なーんて考えたりもしました。今は全く自信がありませんが、もう少し経験を積めていればWMの事でLTに挑戦するのもまた楽しそうです。
WM分野に手を出そうとする日本人を少なくとも自分のTLでは見かけないため、この分野にはまだ試せることがあるかなあといった感じです。

ともかく、OSC楽しかったです。でも角度を変えてもっと楽しみたいです。そんな感じです。

2015年1月3日土曜日

Yukari Link Accelerator について

Yukari Link Accelerator とは

Yukariのツイート詳細画面、Linkタブに列挙されるURLにアクセラレータボタンを付加することができる機能です。 いわゆるプラグインです。 Yukari for Android 0.120alpha 以降で使用することができます。

どんな風にボタンが付くの?

y4a 0.120以降で「ツイートのパーマリンク」が入った発言を開いてください。 URLの左に、吹き出しボタンが付いていると思います。 そして、それをタップすると即座にYukariでツイートが開かれます。 このようにボタンと機能を付加することができます。

作り方

以下のIntentを受け取ることができるアプリを作成してください。


Action shibafu.yukari.ACTION_LINK_ACCEL
Category android.intent.category.DEFAULT
Extra
  • String user_name  ツイートを受信したユーザのユーザ名
  • String user_screen_name  ツイートを受信したユーザのScreenName
  • long user_id  ツイートを受信したユーザのID
  • String user_profile_image_url  ツイートを受信したユーザのプロフィール画像URL
  • String status_url  呼び出し元ツイートのパーマリンク
Intent#getData() でアクセラレーション対象のUriを取得できます。
これは結果をYukariに返す種類のプラグインではないため、setResult()等を行う必要はありません。適当に戻ってきてください。

サンプル

https://github.com/shibafu528/y4a_ShindanAccelerator
ライセンスは MIT License です。

蛇足

このAPIは、私がツイートの直接呼び出しや、診断の即時実行を呼び出すことを目的に実装されたものです。そのため、機能不足や不親切な点が目立つのは否めません。
もし、興味を示していただける方がいれば、提案があればExtraで提供するデータの追加なども検討します。

2015年1月2日金曜日

Bye 2014, Hello 2015.

あけましておめでとうございます。今年もどうか変わらずよろしくお願いします。

2014年振り返り

思えば私のインターネットライフで一番変化の激しい年だったような気がします。
1月にArch Linuxをインストールしたのが全ての始まりでした。そこから、mikutterのインストール、プラグインの開発薄い本への寄稿OSC2014 Tokyo/Fallへの参加、と猛ダッシュしていきました。

Twitterのフォロワー数も2倍くらい[1]になったのではないでしょうか。去年の今頃[2]はあまりフォロワー居なかった気がします。
大して見られていないけど、見る人には見られているという、何と言いますか油断ができなくなってきました。

また、1年がかりでYukari for Android ver.1.0.0のリリースに成功しました。悲願の達成です。今までは未完成のプロダクトばかり投げ捨てていた僕としては、何としてでもこれだけはエターナることをしたくなかった。
まだ、不足している機能や深刻な不具合が残っていますが、おいおい対応していきましょう。

あー、メモ帳界隈という謎のクラスタとの接触もありました。活動の活発な人が多くて、僕もなにかせんとなあ……という気持ちになります。エネルギーがもらえますね。
何より中心で囲われている人物は確か僕より若い……やばい怖い。技術に年齢とかあまり関係なくて、習得したもの勝ちだと思うのですが、まあ単に僕は学習意欲が乏しいから今恐怖を感じているのでしょう。

2015年

さて、新しい年です。今年で僕は高校を卒業し、このままつつがなく進めば就職します。
僕は変化に強いわけじゃないので、新しい環境が怖いです。うまく行くといいですが……。

今年の目標


  • 自動車免許の取得
  • (上に関連し)事故らない
  • Yukariの不具合解決と次期インターフェース実装
  • VOICEROID+ 結月ゆかり EXの購入(お迎え)
  • 社会で生き抜く

----
[1]: 2015/1/2 12:43 JST時点で413
[2]: analytics.twitter.com によると 2014/1/1 時点で 173

2014年12月22日月曜日

Yukari for Android ver.1.0.0

結月ゆかりさん、お誕生日おめでとうございます。心よりお祝い申し上げます。
VOCALOID 4に対応した純・穏・凛の新しいライブラリ、それらを使った作品が見れるのが今からとても楽しみです。

さて、Yukari; prototype 0.35 の公開から1年が経過した今、2014年の成果物として Yukari for Android 1.0.0 をリリースします。

0.166.1alpha からの変更点

  • オートミュート機能
  • ツイフィール ビューア
  • 表示域拡張を使用中、画面左下の「▶」をタップするとナビゲーションバーを再表示する機能
  • UserStreamが切断された時のメッセージ表示を復活
  • サムネイル対応の追加
    • Gyazo
    • totori.dip.jp
  • オプションの追加
    • 実況モード
    • RTレスポンス通知
    • サムネイルモザイク加工
    • 日本語のツイートのみの検索と、RT除外検索
    • Limited TL (画面上のツイート保持数の制限と自動破棄)
  • 画像添付プレビューで画像を正しい向きで表示するよう修正
  • Pixiv R-18画像のサムネイル処理でクラッシュするバグを修正
  • pbs.twimg.com直リンクの画像でサイズsuffixが付いている場合に表示失敗するバグを修正
  • フォロー関係の取得でクラッシュするバグを修正
  • DMタブが開かれた状態でアプリを休止すると、復帰時にクラッシュするバグを修正


期末試験が重なったために、11月は月末の定期リリースを行うことができませんでした。そのため、11月に公開予定だった機能も今回のアップデートにまとめています。

このアップデートをもって、私が2013年中に構想を立てていた全ての機能の実装を完了しました。私だけが使うアプリだったら、妥協に妥協を重ねてそれすら到達することは無かったことでしょう。ユーザの方々の声は確実にモチベーションに影響していました。ありがとうございます。

これからしばらくは、機能追加を優先して1年間放置し続けていたバグについての調査を行うことと、ライブラリの更新によるMaterial Design対応を行っていきたいと思います。
どうか、これからもよろしくお願いします。