2014/09/27

AsyncTaskLoader を使うのを止めた

Android 版アプリ開発で非同期処理に AsyncTaskLoader を使っていましたが、どうにもしっくりこない。

Fragment で利用する Loader が 1 つになるような局面では、Fragment に LoaderCallbacks を 実装するパターンで可読性が下がるわけではなく、Fragment/Activity のライフライクルとも連動して便利なのかなと思います。

しかし、開発中のアプリでは、1 つの Fragment から幾つものサーバ通信処理(非同期処理)を呼び出すので、Fragment に LoaderCallbacks を実装して onLoadFinished で分岐するにしても、非同期処理別に LoaderCallbacks を実装しても、どちらにせよ可読性が大きく低下します。

また、非同期に実行したい処理は、極自然に実装したクラスのメソッドであるため、それら各メソッド毎に AsyncTaskLoader のサブクラスを実装する必要もあり、これも可読性を下げます。仮に、単一の AsyncTaskLoader のサブクラスで共通化できるように API を整理したとしても、onCreateLoader でのインスタンス化処理の可読性が下がるでしょう。これは、CursorLoader の使い方が示す通りです。

ってことで、何か良い枠組みが無いかと検索したところ、直ぐに以下が見つかりました。
JDeferred
非同期に実行する処理を直後に、done/fail/always でコールバックを書けるのが良いですね。ある非同期処理に関連する全ての処理の把握が容易です。
非同期処理では、その開始でプログレスバーやプログレス ダイアログを動かし、成功と失敗の両方でそれらを止めるなどの UI 制御が必要となりますが、そのような後処理を always で共通化できるのも便利です。

しかし、JDeferred は導入せず、考え方だけを取り入れてフレームワークを自作して利用しています(Deferred/Promise には従っていません)。
開発中のアプリでのみ利用する物として考えれば、必要な部分だけを洗い出し、より簡潔に可読性の高いフレームワークを作ることは容易です。
必要としない型パラメータを排除し、非同期に実行する処理は Runnable/Callable の実装としたりなどで簡素化した感じですね。

・・・つーか、ラムダ式を使いたい。匿名クラスによるコールバック実装では、可読性の向上に限界があります。

2014/09/10

そういやぁ KL1

学生の頃、並列処理に特化した言語をやったのですが、「なんて名前だっけ・・・」と長く思っていて、ようやく思い出しました。また忘れた時にブログを見て思い出せるようにメモ。最近、痴呆気味なので・・・。

KL1 - Wikipedia

僕自身が KL1 ベースの研究をしていたわけではなく、勝手にいじって学んでいただけです。
まぁ、習得した言語のほぼ全てが、そんなノリで独学した物ですが。

KL1 に触れた時には、それまで得ていた知識では理解に及ばず、新たな概念の習得を余儀なくされ、それが刺激的だった記憶があります。
そういうのが一番楽しいですね。3D グラフィックスを突然やり始めたのも、そんな刺激を求めていた所があります。

Wikipedia には第五世代コンピュータを目指した国家プロジェクトで生まれたと書かれていますが、そんな大事が関与していたとは知りませんでした。
プロジェクト終結が 1992 年、僕が KL1 に触れたのはその数年後なので、何でうちの研究室でそんな時期に KL1 が突然始まったのだろう?と思う所がありますが・・・まぁどうでも良いか。

仕事で KL1 などのような言語を扱う機会を得られる人は特殊だと思うので、貴重な体験をしたなぁとしみじみ感じています。

2014/09/03

懐古: FF11

丁度仕事を辞めた時で、丁度新居に移った時で、丁度 ADSL を引くという時で、ならば、「ADSL の性能とやらを見せてもらおうか!」と意味不明のテンションを挙げ、当時始めたネトゲが FF11 です。
当時の仕事を辞めずに続けていたならば、FF11 の存在すら知ることが無かったでしょう。当時の僕は、仕事の事ばかり考えていましたから。

もう 10 年以上前の事ですね。サービス開始から数日経過してからの参加でしたが、時期を見れば初期組というやつです。

あの頃は、僕を含めて FF11 プレイヤの殆どがネトゲ初心者でしたので、本当に自由で混沌としていて、でも、何かの期待を抱かせる世界でした。
あれは言葉では表せない経験だと思います。くだらなくてどうでも良い事が特別な何かでした。今でもセルビナの BGM を聞くと、特別な感情が沸き起こります。
経験していない人には伝えにくいですが・・・中学や高校や大学に入学した直後のテンションみたいなものですかね、アレは。

僕は飽きやすいので、1 ヶ月程度で飽き、ウダウダと不満を言いながら惰性で 3 ヶ月程やり(あんなマゾいゲームだと不満は言うでしょう)、半年(?)くらいで辞めた記憶があります。ただ、既に FF11 内の友達とは現実でも友達になっていたので、復帰を求められて何となく復帰したり、また飽きて辞めたり、でもまた復帰したりを繰り返していました。

本格的に辞めたのは数年前です。価値観が合わないと感じて完全に辞めました。僕は数多のゲームの一つとして FF11 を捉えるのですが、延々と FF11 を続ける人には FF11 が日常なんですよね。
とは言え、日常としてくれていたお陰で、僕は復帰してもスムーズに、懐かしさも含めて楽しめたので、とても感謝しています。
と言っても、日常としていた友達らも、IL 制が導入された辺りで「もう FF11 じゃない」と思って辞めたようです。

まぁ、もう年齢や時代を考えても、あの時と同じ何かをネトゲから感じる事はないだろうなぁ、と思っていますが、しかし、何かブレイクスルーが欲しいな!と期待している所もあります。

libgdx いじり

Google が提供している Java 版の Tango Examples は Rajawali をベースにしているため、自分が仕事で開発する Tango アプリも Rajawali ベースとしていましたが、最近は libGDX への移行を進めています。一応、要点については移行が...