2010-10
26
00:40:55
Titanium mobileが盛り上がっているようで何よりだ


実はしばらく前にTwitterのTLで流れてたのを見て触りだしてからはまっていたので、最近の盛り上がりは嬉しく思います。なんたって一時期は日本でTi mobile使ってるのは数人ぐらいしかいないんじゃないかとか思ってたぐらいなので。
へえまだアルファブロガーっているんだぁと思った次第。

実は既にそれなりにまともなiPhoneとAndroidアプリをTi mobileで作ってそれぞれAppStoreとAndroidマーケットで公開していたりします(本名で出してるからここでは紹介しない)。
ということで僕も別にそんな経験あるわけではないけど使っていて感じたこととかつらつらと書いてみますよ。

因みにTi mobileの日本での先駆者と言えばまとめサイトも作られてるdonayamaさんとかyuichi_katahiraさんとかですかね。また Yuichiro MASUIさんはAdMob用など幾つかiPhoneモジュールを公開されていらっしゃいます。

iPhone版は優秀だけどAndroid版は発展途上

僕の経験で言うと一週間でiPhoneアプリは出来てしまったんですがそこからAndroidに対応させるのに二週間かかりました。原因はAndroidでのバグ?らしき挙動とiPhone版さの差異のためです。
iPhone版は非常に優秀でJavaScript好きの人ならさらさらと簡単にアプリを作れてしまうと思います。ただそれと同じつもりでAndroid版に拡張し始めると要領があまりに違っていてかなりはまりました。
例を挙げると、何故かiPhoneでは当たり前に取得できるresponseXMLがAndroidではRSSフィードによっては文字化けしたり(結局最後まで原因はわからず、responseDataを使ってパースした)、windowのxIndexがwindowのlayout指定によって順序が異なったり、WebViewで取得したHTMLは外部からは取得できなかったり、windowのblur/focusイベントは動作しなかったり・・などなど。
「iPhoneとAndroidでは画面サイズとかが異なるからコードを分けないといけなくなる」程度の話が流れていますがそれどころではないです。僕はかろうじて同一レポジトリに閉じ込められましたが、現時点ではコードの規模によっては別々に開発することも考えた方がいいこともあるでしょう。
Titanium Developer製品(Ti mobileはその一環)はOSSで開発が進められているのですが、チケットを見てもAndroidのissueは多いように見えます。
まだまだ開発途上の製品なのでそれにうまく付き合えるかどうかがポイントになります。

iPhoneとAndroidのJavaScriptの解釈が異なる

恐らく先のAppleによる「AppStoreからの開発ツールの締め出し」騒動に関係していると思われますがiPhone版ではコンパイル時にネイティブコードに変換します。対してAndroidではJSエンジン(恐らくGoogleのV8?)でリアルタイムにインタープリターもしくはJITで実行しているようです。つまり解釈されるエンジンが異なるのです。これが前項の原因でもあり、また両者での違いを経験から読み取っていく必要があるでしょう。

メモリ管理しなくてもいいということはメモリ管理できないということ

僕もTi mobileを一番気に入っているのはメモリ管理を気にしなくて良いと言うこと。特にiPhoneでは顕著ですよね。しかし一方ではそれはメモリリークなどの管理をできないということも意味します。
開発元のAppceleratorでは「メモリリークはうまく回避しているよ」と言い切っていますが 実際に試してみると細かなメモリリークは発生し得るようです(特にネットワーク周り)。
あまり問題にはならないレベルとは思うのですが、JavaScriptに書き慣れていないとGCを意識できずオブジェクトを残し続けてしまいがちです。ブラウザでもよく話題にはなるのですがかなり巨大なコードにならないとあまり気にしない部分かと思います。しかしTi mobileではGCを意識した変数設計をしておかないと簡単にメモリを食い潰すアプリができてしまいます。
こういう時は逆にGCに頼るのではなく自由にメモリ管理も出来る仕組みがあるといいですね。

ドキュメントを信じるな、アンドキュメントな仕様が多すぎる

これはAppceleratorが基本的にはOSSで無償で提供しつつビジネスとしてサポートを有償にしていることと関係していると思うのですが、ドキュメントがあまりに杜撰です。
そもそも返値とパラメータが全く異なっていたり(多分コピーミスなど)、ドキュメントだけではちょっと複雑な仕様を実装しようとすると悩むことが多いかも知れません。
他の方もおっしゃっているように、APIドキュメントよりもサンプルアプリであるKitchenSinkを最大限利用しましょう。特にiPhoneとAndroidの実機に実際インストールして動作を確認することをお勧めします。
またドキュメントはあまり参考になりませんが、ディスカッションフォーラムは割と参考になることが多いです。凄く盛り上がっているとは言えないけど みんな同じ事で悩んでいるのです。

拡張モジュールを作るならObjective-CとJavaは知っておいた方がいい

Ti mobileでもiPhoneとAndroidのすべての機能に対応しているわけではありません。また世には様々な便利なライブラリが公開されていますが、当然それらはObjecive-CやJavaで書かれています。Ti mobileにはそれらネイティブコードを取り込むための「モジュール」という仕組みが用意されているのですがそのためにはObjective-CやJavaでもコードを書けなければなりません。更に言えばiPhoneやAndroidでどのようにアプリを開発するかの知識が必要です。
因みに僕は広告を掲載したかったのですが当然Objective-CやJavaのライブラリやサンプルしか提供されていないので、独自にiPhoneとAndroid用にモジュールを作成しました。広告程度なら表示するだけなのでそんなに難しくないです。但しiPhoneやAndroidの経験がないとかなり難しいと感じることでしょう。
なのでTi mobile自体は単に「Objective-CやJavaを知らなくてもJavaScriptを知っていればiPhone/Androidアプリを作れる」ツールなのではなくて、まずはやはりiPhoneやAndroid開発をある程度経験してからの方が相応しいツールなのではないかなぁと思います。

最後はコードを読もう!

先に述べたようにTi mobileはOSSとしてすべてのコードが公開されています。実際現時点でのコードをgithubから取得して自分でコンパイルして使うことも出来ます(Androidの拡張モジュールはそのようにして開発します)。
なのでどうしてもバグなのか仕様なのか回避のしようがなかったら最後はコードを読んでみることをオススメします。
個人的な例では、どうしてもAndroidの実機で位置情報が取得できない問題がクリアできなかったのですが、コードを読んでみるとgetLastKnownLocation()のみで取得していることが分かりました。これは時々ディスカッションでも話題になっていますが初回には位置情報は取れないのです。
ということでプロバイダーをNETWORKにして回避したのですが(これはこれでどうかと思いますが)、こういう部分もOSSとして提供されている利点であり、活用しない手もないでしょう。

といったところでしょうか。
何やら文句と愚痴が多くなった気もしますが(笑)、個人的には大変気に入っています。特にJavaScript好きには堪らないツールとなることでしょう。
一方で「初心者でも簡単にiPhone/Androidアプリが作れる」風のイメージには疑問を感じていて、どちらかと言えば現時点でiPhone/Android開発をバリバリされてらっしゃる方にこそ効率を上げるためにぜひオススメしたいツールです。
まずは使ってもらって、少しでも日本で広まるといいなぁ。

2010-08
07
01:11:09
ニコニコPodder R1.2.2 をリリースしました


少し間が空きましたがR1.2.2です。

■ マイリスト一覧に任意のマイリストのみを表示できるようにしました

編集ダイアログを追加し任意のマイリストのみを一覧に表示できるようにしました。登録マイリストが非常に大量になった場合には便利かと思います。コメントでも以前ご要望頂いていました。
このあたり今後いろいろ拡張できると便利かもと思っています。ご要望なども頂けるとありがたいです。
この機能はフル機能版限定です。

■ 自動運転対象のマイリストをダイアログで編集できるようにしました

これもコメントで要望頂いていましたね。やはりマイリストが大量になるとチェックしにくくなるのでダイアログで編集できるようにしました。なお前項の任意のマイリストに選択したものだけが自動運転対象とできます。自動運転モードでの機能ですので必然的にこちらもフル機能版でのみご利用になれます。

■ 任意のTwitterツイートを個別に投稿できるようにしました
■ Twitterツイートの自動投稿機能は廃止しました

あまりTwitter機能は使われていないようなので(悲)廃止も考えたんですが、一応仕様を変更して任意のツイートを個別にポストできるようにしました。
自動投稿機能はよく考えるとそもそもうざくて必要なかったですね(^^;

■ Operaでブラウザ認証統合に失敗する場合があったのを修正

コメントで報告頂いていた問題です。主にx64版でだと思うのですが初期インストール直後などでは、Operaでの認証統合をうまく判定できない場合がありましたのでこれを修正しました。

■ 変換処理が非常に遅くなることがあった問題を修正

即時停止機能を付けた影響で、環境によっては変換処理が非常に遅くなっていた場合がありました。

■ Windows7向けタスクバーAPIを最新に変更

ご報告頂いた問題でこの箇所のエラーにより落ちていることがあったようです。
当方ではその現象が確認できなかったのですがとりあえず最新版のAPIに変更しました。これで改善されればよいのですが。

■ フリー版にてマイリスト登録の上限を10としました

これまでフリー版でもマイリスト登録数に制限はありませんでしたが、本バージョンより追加できるマイリストの上限数を10としました。なおこれまでに登録されているマイリストについては影響ありません。ただしすでに10を超えて登録されている場合にはそれ以上追加できませんので、新規に追加したい場合には登録削除などをして10未満の登録にして頂く必要があります。
フリー版とフル機能版の差別化のために必要と判断しました。ご面倒ですがご了承ください。

その他いくつかのバグを修正しています。

何かありましたらコメント欄までお寄せください。宜しくお願いします。

2010-07
02
14:28:34
とある件 #librahack に関連しつつ一般論を再度電話して聞いてみた


最初に再度強調しておきますが、これは「とある件 #librahack」に関連しつつも、とある関係先に再度「個人的に」「一般論」として考え方を確認してみた話です。
あくまで、 最近起きた具体的な事案についての具体的な話ではありません。
再度電話して確認したところ「あの書き方では県警が特定の事件について語ったと読まれてしまう」「あの事件について具体的に話を聞いたとの公表の仕方であれば一切お話しできない」「具体的事案についてであれば取材なので私の立場ではお話しできない。別途書面で質問を」と言われ、僕自身は「個人的にお聞きした」「一般論」と強調して書いたたつもりですがどうやら幾つかほかにも電凸があった模様もあり困惑されていた雰囲気もあり、具体的な事案情報のように捉えられるのを大変懸念されていたので、再度ここに強調してお伝えするものです。
ということで先方にお約束もしたので、ぜひあの事件からは離れて一般論的な話として、高所要所よりお読み下さい。
お話しをお聞きしたのは前回と同じ所属部署の同じ方です。という事情があったにも関わらず再び非常に真摯に長時間お話し頂きまして、大変感謝致します。ありがとうございました。

さて再度電話してお聞きしたかったのは皆さんからも少し疑問の声が上がっていた「偽計業務妨害罪には故意が必要とは書かれていない」という部分について。
基本的に議論ではなくお話しをお伺いするという姿勢で臨んでいたのと、その際僕の勘違いだっけ?などとも思ったので当時はそのままスルーしてしまったのですが、いろいろその後の議論も読み自分でも考えるにやはりここだけは聞いておかないと重要なポイントなのではないかと思ったので、本当はもうかけるつもりは無かったのですが、もう一度だけ電話して確認してみました。
ポイントを羅列しますが、あくまで僕自身の捉え方の部分でしか無いところもあるかと思いますので、その点もご注意下さい。

  • 故意犯規定(刑法38条1項)では、あくまで本当に故意であるかどうかは外形上は分からない。少なくとも偽計業務妨害罪が構成要件上成立している(しているように外形上見える)のならば取り調べたり、または裁判などで証拠調べをしてその上で故意であるかが判断される
  • 考えて頂きたいのは、これまでネットの中では通用してきたかも知れないが、今日においてはネットにそれほど通じていない人々もネットへ参加してきているということだ。ネット内で起きた問題や困り事を解決する手段が現時点で何か明確に用意されていますか?(「明確には無いと思いますね」と返答)そういう人たちがネットで自力で解決するのは困難なことだ。であればそこはやはり警察なりが被害者を助けなければならない。実際被害が出ていて困っている人々がいることは理解して欲しい。ネットに詳しい人だけが分かればいい問題ではない
  • もし具体的に判断基準を知りたいと言うことであっても、具体的事案についてはお話しできないから示すことはできない。より深い判断を聞きたいと言うことであれば、法務省なり警視庁なりに問い合わせて欲しいが、事件は個別のもので一つとして同じものはない。(今回はファーストケース故にその事案の事実を知らないと分からないがファーストケース故に一般論では今後のことは何も言えないと言うことになりますよね、との問いに対し)そうなる。また(元被疑者の方が)情報を公開されていると言うことだが(こちらからお伝えした)それ以上の情報も当然警察はお話しすることはない。関係者以外の方にお話しすることは出来ない。なので今後どのような事案について問題になるかも述べるのは難しい。
  • (これまでのネットでのルールや慣習などが無かったことになるのでは、との問いに対して)慣習は法ではない。また実際そうしたルールが完全にネットに参加してくる人たちに周知され理解されているかも問題だ。警察としては被害が出ているのならば、また他に救済策がないのであれば捜査しないといけない(多少意訳入っています)。もっとも立場の弱い人を基準に動く
  • 例えれば警察は風邪薬のようなものだ。つまり事件が起こってから作用するに過ぎない。それ以前に未然に防ぐことをぜひ徹底して問題にならないようにして欲しい
  • (しかしそれではあらゆるサイトに対してアクセス時(ブラウザアクセス、クロール関係なく)に了解を取り付けないといけなくなる。外形上ではどこまでアクセスが許されるかは分からない、という問いに対して)ネットをする際に常に確認しなければならないと利用を阻害するものではない。例えばYahooなどの大きなサイトへアクセスする際にそうした問題が起きる/起きたことがありますか (今後のことは何があるか分からないし、様々なサイトがあり外形上判断の付くことではないと返答) 常にネットに理解の深い人だけが参加しているのではないという理解をして欲しい。その上でエラーが出たら確認を怠らないなどの処置をして欲しいし、エラーが出続けているのにリロードを常識外れに繰り返すなどの利用は普通はしないと思う

色々話が飛んだり混迷もしたので物足りない部分や不明な部分もあると思いますが、以上でしょうか。

議論に先入観を植え付けたりこの立場からリードもしたくないので極力ここでは意見は差し控えたいと思いつつ、一点だけ。
会話して感じたのは、警察の立場でぶれていないのは「被害が出ており法律上立件が求められているのならば動くのは当然」との感触が端々に感じられたことです。会話でも一部出たのですが、「罪刑法定主義」とのことです。
一般論として(他の悪質な例で考えれば)当然でありますし、裏返せば「ネット特有とされるルールや習慣は新規参入者やネットに詳しくないとされるものに受け入れられていない・共通認識されていないという主張に対しどう抗弁していくのか」「今回の件は偽計業務妨害罪にそぐわないのだとすればどう法整備や法実務に反映していくべきか」「ネットのルールや事実をどう法的根拠付けしていくべきか(それにより、条件によって阻却事由を構成していくか)」という点かと感じます。 つまり条件が揃ってしまえば警察が動き出すのはある意味当然(当然法実務での阻却要因はあり得るとしても)という考え方かなと感じました。
少なくとも「毎秒何回までならいいのか」「業者のシステム構築能力が悪い」「業者が技術的にDoSなどではないと判断すべきだった」 論ではない(それはそれとして別の議論としてはあり得ると思います)のだと思います。上記からもそうしたことは仮に証明・釈明されても「この論法の中では」全く役に立たないことは理解しておくべきかと思います。
一般論として紐解いても、@librahackさんが20日かかっても抗弁し切れなかった要因が見え隠れするようにも感じます。

以上です。
因みに僕自身は自分なりの議論ポイントの方向性は見いだせたので、もう電話はこれ以上しません(多分)。会話内容についての疑問・質問についてはある程度お受けすると思いますが、より深い部分についてはぜひ各々で問い合わせするなどそれぞれでの出来うる範囲での行動をお勧めします。

(追記 19:55) 誤読されうる箇所の表現を何カ所か修正。ペースは変えていません

2010-06
24
17:32:55
岡崎市立中央図書館事件 #librahack について愛知県警に電話して聞いてみた


連日Twitterでは #librahack ハッシュが大盛況だが、個人的には事実関係でよく分からないことも多く明白にしたいことではあったので、直接愛知県警に電話して事情を聞いてみました。岡崎署ではなく愛知県警なのは、そちらが事件捜査の主体的な役割を担っただろうと判断したからです。

対応して頂いたのは生活経済課の方。お名前は出しません。愛知県警ではこの課がサイバー犯罪を担当しているそうです。
担当して頂いた方は割と若めで理路整然と話したいクールなタイプ。多少警戒されて話されていたのが印象によく残っています。
ネットでもこの聞き取り結果を公表したいともお話ししましたが、「あくまであなた個人に対して個人としてご回答しただけでそれ以上でもそれ以下でもない。これはあくまで一般論としてのお話しです(注: 個別事案について漏らしたわけではない、という意味かな?)。話した事実関係をお話し頂くことはあなたの責任範疇の話で別に問題ない。但しそれを元に『じゃあこういう抜け穴もあるのでは』と書いたらそれは教唆ですから」とも忠告してくれました。そのつもりでお読み下さい。
フレンドリーとは言いませんが(住所・氏名も聞かれたし(笑) 単に記録かも知れないけど一種のプレッシャーでもあるのかも知れないですね)、誠実に対応して頂けたと思います。ありがとうございました。

聞き取った事実関係のみ羅列します。

  • 警察の考え方として、立件したのは事実として岡崎市立中央図書館のWEBサイトがその行為により閲覧不能に陥り他の利用者が利用できない状態に陥っているから。警察は常に被害者の立場での問題に対処している
  • (クロールという行為自体は世間ではよくあるプログラムでありまた作成者の立場からはどのような被害が出ているのか分からない、との質問に対して) それはネットに詳しい方の一方的な見解に過ぎない。ぜひ図書館側の立場で考えて欲しい。不用意にプログラムを走らされて利用が不可能になった図書館側としては非常に困る事態に陥っている。作成者側の事情や立場に立つのではなく、警察は被害者側の立場で対応する。これはネット上でどうというよりも、実際に現実世界で被害を受けた方々がいることが重要視される
  • そもそも図書館側は大量のアクセスを想定してサービスしていない。そこにこのようなプログラムを走らせて機能不全に陥らせたことが重視されるべきである。そういう利用をしたいのであれば、まず図書館側に電話やメールで連絡して了解を取り付けるべきであった
  • (“故意”をどのように認定したかについて) 捜査上の秘密なので言えない。
  • (検察の起訴判断も終わり事件としては終結したのでは、という質問に対して) 明白な故意という判定は難しいはずだ。それは心の中で本当は何を考えいていたかはその人にしか分からない。我々は周辺の様々な状況から判断する。そして例えば裁判で様々な証拠から裁判官の心証として故意は認定される。また偽計業務妨害罪の法文上は故意が必要とは書かれていない。我々は法文でどうなのかを重視して判断する。(判例上は?という質問に対して) それはそちらで勝手に調べて下さい。もちろん判例も考慮する。
  • ストーカー規制法違反事案を想像して欲しい。加害者にどのような意図があろうとも被害者を守らなければならない。それと同じように警察は被害者をまず一番に考えて動く。
  • (『基本的な考え方はわかった。しかし個人意見として、インターネットでは例えばWEBサイトは常にオープンな接続が前提とされており、今回もスタートは全く同じだ。しかし逮捕に至った。例えば道行く人を阻んでいきなり迷惑をかけたのとは異なる』との問いに対して) おっしゃる意味は理解するが実際に被害者が出ていることが重要だ。そういうプログラムが作れるから実行できたから相手の迷惑が関係ないとはならない。
  • (果たしてどこからが問題なるかわからないのは大変に不安だ、との問いに対して)例えば30000回のアクセスは駄目だったから、では29999回ならいいのかとはならない。0か1かで判断しているわけではない。被害者のいる事案であり様々な状況を考慮して対応している。

以上でしょうか。
恐らくは別に捜査機関全体の意見を代表しているわけではないことに注意。但し現場ではどのような考え方で発想されているのかの参考にはなるかと思います。
僕は果たして警察はどのような発想・考え方で動いていたかに興味があったのと、事件の捜査過程については「関係者からの問い合わせではないので」と拒否されたので、不満の残る箇所もあろうかと思います。
特に「故意」の部分については突っ込んで聞きたかったのですが、具体的な過程は明白に出来ないのでしょう、はぐらかされた感はあります。

最後に、もし似たようなプログラムを予定していて不安があるのなら、警視庁のサイバー犯罪担当へ問い合わせて確認した方がよいとアドバイスがありました。愛知県警を含め各県警が警視庁の判断や事例に従うから、とのことです。県警として答えられるのはこれまで担当した事案に対して同じ状況であれば逮捕します、としか答えられないとのこと。

ここではまずは聞き取り結果としてのみ公表するにとどめます。
何かの参考になれば幸いです。

2010-06
21
08:10:58
ニコニコPodder 銀行振り込みで有効期限が無期限になるバグを修正しました


ご報告します。

先ほどニコニコPodderの購読者チェック処理において、銀行振り込みの場合有効期限のチェックが正常に行われず、有効期限を過ぎていても購読状態で利用できるバグを修正しました。
そのため銀行振り込みで購読頂いているユーザー様で本日より突然未購読状態になった方もいらっしゃるかと思います。この場合は有効期限をご確認頂き、既に有効期限が過ぎている場合には正常な動作ですので、引き続き購読をご希望の場合は購読の処理(銀行振り込みでもPaypalでもどちらでも構いません)を行って頂けますようお願い致します。

ご迷惑をおかけしましたことお詫び申し上げます。