<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>oops</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/" />
    <link rel="self" type="application/atom+xml" href="http://www.narazaki.info/atom.xml" />
    <id>tag:www.narazaki.info,2009-07-04://2</id>
    <updated>2012-04-07T04:08:35Z</updated>
    <subtitle>世間に背中を向けてひた走る情報弱者のblog</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 5.04</generator>

<entry>
    <title>何故バグ報告の99%が役に立たないのかもしくは何故プロのテスターが存在するのか</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2012/04/99.html" />
    <id>tag:www.narazaki.info,2012://2.410</id>

    <published>2012-04-07T02:04:24Z</published>
    <updated>2012-04-07T04:08:35Z</updated>

    <summary>テストにはプロがいます。「お仕事」で開発する場合はQA(Quality Assu...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="Android" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="メモ" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<p>テストにはプロがいます。「お仕事」で開発する場合はQA(Quality Assurance/品質保証)部門という「テストのプロ」がテストします。<br />
バグ修正におけるテスターの役割は極めて重要で、「プログラマの手元で任意に再現可能な状態に持ち込めれば、バグ修正は8割終わっている」と言っても本当に過言ではありません。詳細聞き出しに10時間、修正30分、修正確認テスト30分、なんてのも実務ではザラです。この場合、プログラマも11時間拘束される(=時給x11時間分のコストが掛かる)わけですから、バグ修正のコストは聞き出しに掛かるコストがほとんどを占めることになります。<br />
(誤報告一発で万単位の金が簡単に吹っ飛ぶとも言える)</p>]]>
        <![CDATA[<p>まずそもそもの問題として「素人」がテストを行うと以下のような論外ケースが頻繁に起こります。上に行くほどクソです。<br />
<ul><br />
	<li>誤報告<br />
実際に起こったことと、現象が違う、手順が違う、設定が違う、環境が違う、などなど。<br />
報告通りに原因究明を試みると永久に解決に行き着かない最悪の状態です。プログラマは出口のない迷路に叩き込まれて延々時間をロスすることになります。</li><br />
	<li>連絡が付かない<br />
普通はあまりないのですが、Android Market時代到来で発生した新しい問題です。つまり「コメでバグ報告する」問題です。<br />
バグ報告に対して「最初の情報だけで解決出来る」ことは稀です。熟練のプロQAですら(誤字脱字を除けば)報告すぐの一発解決は少なく、大抵は「○○の部分の詳細を教えて下さい」とか「ログ仕込んだのでこれで試して下さい」とか聞き返すことになります。<br />
つまり聞き返せない時点で解決は絶望的になります(そして当然聞き返せないような場所で報告するような人に限って報告の品質自体も悪いので......)</li><br />
	<li>内容がないよう<br />
「表示が変です」「落ちました」「重いです」などなど。「何か変」なことが起こったらしいという以外に何一つ分からない情報量ゼロの報告。<br />
これは赤ん坊がオギャーと泣いてミルクかオムツか救急車かというようなもので、直接その赤ちゃんを診察出来ればいいのですが、電話で「赤ちゃんが泣いてるんです!!泣いてるんです!!!!泣いてるんです!!!!!!」と泣き叫ばれても「まずお母さんが泣き止んでください」としか言いようがないわけです。</li><br />
</ul><br />
上記のようなケースは何も解決しない上にプログラマの人的コスト(ブラックと言われますが割と高価な労働力です)だけを浪費するわけですから「いない方がまだマシ」と言えます。<br />
こういうことを絶対しないというのがプロのテスターの最大の利点で、裏を返せばこういうことを避ければ素人テスターも「まあ、有り」なわけです。</p>

<p>上記は論外として、Android全般だと大体以下のような点に気をつけておくと対応しやすくなります。<br />
<ul><br />
	<li>環境が正確に書かれている<br />
機種、バージョン、回線状態(携帯電話会社、3GかWiFiか、電波が弱い時はそれも)、縦持ちか横持ちか、など。アプリ特有の設定があるならそれも。<br />
また、アプリがインストール直後なのかそうでないのかも重要で、手順はアプリインストール直後のまっさらな状態からの手順である方が(当然ながら)望ましいです。</li><br />
	<li>手順や正確に書かれている<br />
行った手順は(一切省略せずに)くどいくらい書きます。操作に抜けがあったらその時点でプログラマの手元では再現不能だからです。<br />
例えば「ダイアログが出たのでボタンを押して......」という報告はよくされます。しかし、普通に考えられる操作としてOK/キャンセル/Backの3種があり、文脈によってはMenuやHomeやSearchボタンもあり得ます。どれか分からないわけです。<br />
勝手にOKかキャンセルのことだと解釈して10時間填まる→「あのー......これOKですかキャンセルですか」→「Homeですが?」→壁パン、は実際ありました。少しでも曖昧なところは全部詳細に聞き返すようにはなりましたが......</li><br />
	<li>対象としたデータが何か書かれている<br />
対象に依存した現象というのは良くあるので、詳細であるほど原因究明はしやすくなりますし、隠せば原因究明は困難になります。<br />
可能であれば実際にどのURLのどのデータにアクセスしたかまで書かれていれば解決しやすくなります。</li><br />
	<li>表示内容が正確に書かれている<br />
エラーが出たら「なんかエラーダイアログ出ました」ではなく重要なのはそのエラーメッセージです。エラーダイアログなんかはスクショ取るのが一番確実でしょう。<br />
贅沢を言えばログがあればいいですが、そこまでは要求しないです(一般人には無理なので)</li><br />
	<li>発生頻度が書かれている<br />
指定の操作をした場合に「何%で発生する」とか「何回やったら何回起こった」とか書きます。これ抜けてる人多いです。地味に重要です。<br />
大体4種類くらいに分かれます。「その手順で操作すれば必ず発生する(再現性100%)」「現実的な試行頻度で発生する(再現性5%～99%)」「極めて稀に発生する(再現性5%未満)」「1回起こっただけ(再現性0%)」<br />
再現性が高いほど解決しやすく、再現性0%のものは報告するだけ無駄なことが多いです。</li><br />
</ul></p>

<p>とまあ、だらだらと一杯書いてますが、全部が全部完璧である必要はありません。<br />
本当に困るのは最初に書いた論外パターンだけで、後のものは適宜聞き返して情報を補完していきます。プロのテスターでも一発で完璧な報告なんてそうそう無いですしね。</p>

<p>また、「事実関係が誤っている」誤報告は困りますが、「仕様を誤認している」誤報告は一応有りです。<br />
「○○に設定したら××になっちゃった!!」「そりゃ○○って書いてるんだから当たり前だろ」ってケースもそれは「ユーザから見て○○から××が想像出来ないという問題」なわけですから修正の余地はあります(直さないこともあるけど)<br />
でも、「いきなり××になっちゃった!!」→「え、マジで......」→10時間後→「あの......まさか○○の設定変えてないよね?」→「変えたけど?」→壁パン、は勘弁な。</p>

<p>素人報告の場合、大体ここまでやって半分くらいは解決するかな、って感じですね。どうしても直で見られない形なので再現不能のケースは発生します。その辺はある程度諦めて下さい。<br />
究極的には日本Androidの会の懇親会などで直に見せるという荒技もあります。直接見せるのはたいてい最強です(場合によってはその場でログも取れるので)</p>

<p>まあこんな長文読んでくれる人は最初からちゃんとした報告くれるんだけどね!!</p>]]>
    </content>
</entry>

<entry>
    <title>Tuboroid ClassicでまちBBSを登録する方法(したらば等も基本的に同じ)</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2012/04/tuboroid-classicbbs.html" />
    <id>tag:www.narazaki.info,2012://2.409</id>

    <published>2012-04-06T02:16:51Z</published>
    <updated>2012-04-06T02:40:36Z</updated>

    <summary>新しくTuboroidを使い始める人が増えたのか、なんだか最近同じ質問が何度も来...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="Android" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<p>新しくTuboroidを使い始める人が増えたのか、なんだか最近同じ質問が何度も来るので画像付きで解説します。<br />
試しに「まちBBS大阪掲示板」を登録してみましょう。</p>]]>
        <![CDATA[<p><a href="http://www.narazaki.info/2012/04/06/machi_001.png"><img alt="machi_001.png" src="http://www.narazaki.info/assets_c/2012/04/machi_001-thumb-240x400-83.png" width="240" height="400" class="mt-image-none" style="" /></a><br />
とりあえず標準のウェブブラウザで「まちBBS大阪掲示板」を開きます。ググるのが早いです。</p>

<p><a href="http://www.narazaki.info/2012/04/06/machi_002.png"><img alt="machi_002.png" src="http://www.narazaki.info/assets_c/2012/04/machi_002-thumb-240x400-85.png" width="240" height="400" class="mt-image-none" style="" /></a><br />
検索結果から「まちBBS大阪掲示板のトップ」に飛びます。</p>

<p><a href="http://www.narazaki.info/2012/04/06/machi_003.png"><img alt="machi_003.png" src="http://www.narazaki.info/assets_c/2012/04/machi_003-thumb-240x400-86.png" width="240" height="400" class="mt-image-none" style="" /></a><br />
板のトップってのはこのページです。</p>

<p><a href="http://www.narazaki.info/2012/04/06/machi_004.png"><img alt="machi_004.png" src="http://www.narazaki.info/assets_c/2012/04/machi_004-thumb-240x400-87.png" width="240" height="400" class="mt-image-none" style="" /></a><br />
メニューから「共有」を選びます。<br />
これは4.0端末ですが、2.3以下の端末なら「MENUボタン→その他」あたりにあるはず。</p>

<p><a href="http://www.narazaki.info/2012/04/06/machi_005.png"><img alt="machi_005.png" src="http://www.narazaki.info/assets_c/2012/04/machi_005-thumb-240x400-88.png" width="240" height="400" class="mt-image-none" style="" /></a><br />
共有を選ぶと「共有機能でこのページを受け取れるアプリの一覧」が出ます。<br />
その中に「Tuboroidで開く」というのがあるはずなのでこれを選びます。</p>

<p><a href="http://www.narazaki.info/2012/04/06/machi_006.png"><img alt="machi_006.png" src="http://www.narazaki.info/assets_c/2012/04/machi_006-thumb-240x400-89.png" width="240" height="400" class="mt-image-none" style="" /></a><br />
すると、この板がTuboroidで開かれます。この時点で板一覧にも登録されています。<br />
ここで失敗するようなら、最初に共有しようとしたページが「板トップ」でも「スレ」でもないものを指定しようとした場合とかです。</p>

<p><a href="http://www.narazaki.info/2012/04/06/machi_007.png"><img alt="machi_007.png" src="http://www.narazaki.info/assets_c/2012/04/machi_007-thumb-240x400-90.png" width="240" height="400" class="mt-image-none" style="" /></a><br />
登録に成功するとここに追加されます。</p>

<p><a href="http://www.narazaki.info/2012/04/06/machi_008.png"><img alt="machi_008.png" src="http://www.narazaki.info/assets_c/2012/04/machi_008-thumb-240x400-91.png" width="240" height="400" class="mt-image-none" style="" /></a><br />
板一覧のところで板名を長押しするとこんな感じでメニューが出ます。いらなくなった板はこれで削除して下さい。<br />
(2ch標準板は変更不可。弄れるのは外部板のみ)</p>

<p>ちょっと分かりにくいかもしれないけど、共有ボタンは色々応用が利くので覚えとくと便利です。</p>]]>
    </content>
</entry>

<entry>
    <title>Tuboroidは何故端末起動時に処理が走るのか、もしくはAndroidのAlarmManagerがださい点</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2012/03/tuboroidandroidalarmmanager.html" />
    <id>tag:www.narazaki.info,2012://2.408</id>

    <published>2012-03-29T22:39:00Z</published>
    <updated>2012-03-29T23:31:56Z</updated>

    <summary>2012年3月30日金曜日 7:20 2chブラウザなのに たかが2chブラウザ...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="Android" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Tuboroid2" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<blockquote>2012年3月30日金曜日 7:20

<p>2chブラウザなのに たかが2chブラウザなのに、端末起動時に自動起動して、新しいアプリをインストールした信号を受けてまた動く。裏でどんな処理をしてたら、そんな動きが必要なのか大変疑問。</blockquote></p>

<p>Tuboroidでしょうもない半可通さんに噛みつかれてアレなんだけど、分からないなら調べるか、調べても分からないなら黙ってるか、コメに書き散らす前に俺に訊ねてくれたら答えるのに、とは思うんだけど一応軽く解説しとくね。</p>

<p>Androidでは時限処理を行うためのAlarmManager Serviceというものがある。</p>]]>
        <![CDATA[<p>AlarmManagerは時間を指定しておくとアプリを起動してくれるというもので、「午前10時に目覚まし時計アプリを呼んでくれ」とか「1時間ごとに2ch更新チェックタスクを呼んでくれ」とかそういうことができる。<br />
Windowsなどで時々使われるいわゆる"常駐チェック"と違い、AlarmManagerを使えば指定の時間までアプリは終了していても構わない。ちなみにWindowsにもタスクスケジューラという同様の仕組みはある。UNIX系だとcron/atか。</p>

<p>AndroidのAlarmManagerにはいくつかの問題点がある<br />
・端末を再起動すると設定したタイマーが全クリアされる<br />
・アプリインストール直後はタイマー設定がクリアされている<br />
・アプリをアップデートすると設定したタイマーがクリアされる</p>

<p>Windowsのタスクスケジューラは再起動しようがアップデートしようが設定を引き継いでくれるのだが、AndroidのAlarmManagerはクリアされる度にいちいち再設定を行う必要があるという割とおバカな作りになっている。<br />
しかも「再設定するかどうかを決める」こと自体をアプリ自身で判断しなければならないため、現在タイマーを使用しているかどうかに関係なく一旦は起動する必要が出てくる。</p>

<p>つまり、Tuboroidには定期チェック機能が存在するため、「定期チェック機能がONになっていたらAlarmManagerを再設定する」という処理を行うために、定期チェック機能がONだろうがOFFだろうがクリアされた可能性があるイベントが起こった時点で毎回再確認する必要がある。<br />
OS側でタイマーを保持してくれればこんな面倒なことはしなくて良いのでなんとかしてくれよというのが正直なところ。</p>

<p>あとアプリインストール状態変更時での再設定なんだけど、現在のTuboroid(Classic系)では「インストール直後は必ず定時チェックオフ」に設定されるので、初回インストール時の再設定は確実に不要になってる。のでこの辺は減らす。<br />
ただしアップデート時の再設定チェックは不可避。<br />
アプリインストール時・アップデート時トリガは「自分自身」という絞り込みが効かない(端末によるのかも)ので、あらゆるアプリでトリガが引かれる。なんかもうね......<br />
OS側でなんとかしてくれよ......</p>

<p>Tuboroid2では定時チェック機能そのものを削除する(というか最初から付けない)方向。何故って俺自身が使わないから。</p>]]>
    </content>
</entry>

<entry>
    <title>Tuboroid(Classic)の鰊対応</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2012/03/tuboroidclassic.html" />
    <id>tag:www.narazaki.info,2012://2.407</id>

    <published>2012-03-26T10:36:02Z</published>
    <updated>2012-03-28T07:32:04Z</updated>

    <summary>先に言っておきますが、俺はauのスマホを持っていないので自分の手元で鰊が起こった...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="Android" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Tuboroid2" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<p>先に言っておきますが、俺はauのスマホを持っていないので自分の手元で鰊が起こったことが一度もありません。<br />
このため実際にどのような現象が起こるのかデータどころか文字通り全く分かりません。<br />
2chは鰊に関する技術情報を事実上全く公開していません。<br />
この件について、本質的に悪いのはauではなく、HTTPがステートレスプロトコルであることを理解せずに設計している2chです。</p>]]>
        <![CDATA[<p>もちろん、「鰊」でマッチさせて問答無用でウェイトかけてリトライ、みたいなのは論外。<br />
2chがそのような仕様を維持する保証も確証も全くなく、プロトコル的に他のエラーとの区別も付かないため、ただでさえ2chの仕様が無茶苦茶なせいで不安定なエラーハンドリングがますます混乱することになります。</p>

<p>まあそれはそれとして、暫定対応版作ってみたので、auユーザの方ちょっとテストスレにでも書き込んでどういう動作になったか教えて欲しいです。<br />
<strike>Tuboroid_0.2.3.7b.apk</strike><br />
<strike>Tuboroid_0.2.3.7c.apk</strike><br />
<strike>Tuboroid_0.2.3.7ｄ.apk</strike><br />
<a href="http://www.narazaki.info/2012/03/28/Tuboroid_0.2.3.7f.apk">Tuboroid_0.2.3.7f.apk</a><br />
問題が起こった場合は「何を、どうしたら、どうなって欲しいのに、どうなっちゃった」かをステップバイステップで詳しく教えて貰えれば対応できるかもしません。まあ正直、俺が実環境を持っていない完全エスパー対応なのであまり期待はしないで下さい。<br />
鰊スレ読んでも技術的に有意義なことは何一つ書いてなかった......</p>]]>
    </content>
</entry>

<entry>
    <title>Google Play(Android Market)のコンテンツが出鱈目レーティングだらけな件</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2012/03/google-playandroid-market.html" />
    <id>tag:www.narazaki.info,2012://2.406</id>

    <published>2012-03-15T03:41:17Z</published>
    <updated>2012-03-15T04:41:09Z</updated>

    <summary>デベコン見てて思い出したのだけど、Android Marketでは年齢別のレーテ...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="Android" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<p>デベコン見てて思い出したのだけど、Android Marketでは<a href="http://support.google.com/googleplay/android-developer/support/bin/answer.py?hl=ja&answer=188189">年齢別のレーティング</a>を自己申告で付けることが義務付けられている。<br />
(Tuboroidはレーティング導入当初から"中(Medium)"に設定している)</p>]]>
        <![CDATA[<p>大ざっぱな説明。<br />
"低(Low)"は8歳以上を対象とし、軽度の(架空の)暴力描写などを含んだり位置情報を利用するアプリは必ずLow以上にしなければならない。<br />
"中(Medium)"はTeenつまり13歳以上を対象とし、アルコール・煙草・ドラッグ・暴力・差別・下品ネタなどを含む場合はMedium以上にしなければならない。<br />
"高(High)"はAdultつまり18禁コンテンツとなる。これに該当するのはエロと暴力だが、一方でポルノはレーティングに関係なく禁止なので、「コンシューマゲーム機のCERO Z」くらいだと思っておけばいいと思う(範囲が狭いので該当コンテンツは少ないと思う)</p>

<p>現在Everyoneに設定されたコンテンツは非常に多いが、LowやMediumに設定すべきものが多々あると思われる。<br />
例えば2chブラウザは(差別系コンテンツが非常に多いし何よりBBSPINKがある以上)明らかにMedium以上が必須のはずだが、Everyoneになっているものが多い。</p>

<p>これ現状Googleがちゃんと取り締まっている気配がない。<br />
まあスパムもやりたい放題になってるようなMarketなのでGoogleのやる気は推して知るべしなんだろうけど、ちょっと検索がズタボロになってユーザが不便して釣りアプリを踏む被害者が続出する<strong>だけ</strong>(?)のスパムとはわけが違う。<br />
不正レーティングは各国でのコンプライアンス問題になるだろうし、せめて(審査は必要無いと思うけど)通報されたら対応するくらいはしないとGoogleはいい加減法的にまずいんじゃないか。</p>

<p>Market規約上、不正レーティングは再犯だと最高で"account termination"があるので、悪意でなくうっかりで設定している開発者は設定し直しておくといいよ。通報されてBANされても自業自得になっちゃうよ。<br />
どうせ取り締まられないんだからとわざとやってる悪意の開発者なら死ねばいいよ。てか死んでね。</p>

<p>まあ一度Googleは断固たる態度で春のBAN祭りでもやるべきだと思う。悪意の開発者に完全に舐められてるし、検索が腐っているというのはGoogleとしてホント恥じて欲しいし、そもそもGoogleが法的な義務を果たしているかどうかが微妙。<br />
Googleらしいユーザの守り方ってのはなんと言っても適切な検索結果を返すことじゃないかな。</p>

<p>あと気になった点としては、<strong>ガチャのあるアプリ</strong>ってどういうレーティングになるんだろう。</p>]]>
    </content>
</entry>

<entry>
    <title>Tuboroid2についていろいろ</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2012/03/tuboroid2-1.html" />
    <id>tag:www.narazaki.info,2012://2.405</id>

    <published>2012-03-02T12:27:08Z</published>
    <updated>2012-03-02T23:06:35Z</updated>

    <summary>思いっきりサボってたけど、装備が弱すぎてジンオウガがきついので余暇時間をTubo...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="Android" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Tuboroid2" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<p>思いっきりサボってたけど、装備が弱すぎてジンオウガがきついので余暇時間をTuboroidに回す生活に戻ってきた。</p>]]>
        <![CDATA[<p>■機能検討</p>

<p><a href="http://www.narazaki.info/2012/02/tuboroid2.html">前回</a>から特に進展無し。<br />
基本的にはTuboroid1とあんまり変わらないはず。<br />
大きめの機能は、画像ビューアが根底から変更、書き込み履歴とそれを利用した機能、まっとうなNG管理、Be、実況、あたりかな。</p>

<p>VIPPER向けの機能は付けたいんだけど俺自身がVIPに全くと言っていいほど出入りしないのでなぁ。VIPPERって2chをどういう風に使ってるんだろうね。<br />
最大人口を誇るであろうニュー速系はもっと分からない。どういうのがあったら便利なんだろう。<br />
スレ埋め立てのための自動連投機能とか、スレをチェックボックスで複数選択して片っ端から同じ書き込みする機能とか、どうよ。うん、この時点で俺がニュー速系をどう認識しているかがよく分かる。もちろん付けないよ。<br />
AA支援機能とかはあってもいいのかなとは思ってたりはする。</p>

<p>そういえばdatMateってunkarとか使ってるのかな。あの機能を付けるべきかどうかがすごく悩んでる。作ること自体は簡単でTuboroidでも●を実装した時点で追加出来るような仕組みにはしてあったんだけど、出来るかどうかよりもしていいのかどうかが分からない。<br />
クックパッド利用者のために便利ツールを作るみたいなのと違って完全に一方的な寄生なわけだから開発者倫理的には限りなくアウトだし、そもそも論的には●売りビジネスを妨害すること自体も2chブラウザ作者としての一線超えまくってる。<br />
でも既に横行してるしヘラヘラとか言いながら付けちゃう可能性はある......。</p>

<p>共有NGについて。2chMateが搭載したようなのだけど、DBはどこで管理してるんだろう。独自管理?<br />
Script Assassinの共有NGは嫌儲限定っぽいし<br />
でもID単位での共有NGは実はあんまり有効性感じないんだよねぇ。どちらかというと画像のグロ避けをどうするかの方が問題だと思ってる。単純にグロという文字列の入ったアンカーが付けられたら暫定グロ認定みたいな原始的処理でもいいんだけど。</p>

<p>■内部実装についての検討</p>

<p>掲示板サイトからのfetch→datファイルに追記→掲示板別parser→オンメモリキャッシュ→Adapter→画面<br />
という階層。<br />
従来ではfetch時点で掲示板別parser通して内部用の共通dat形式に変換し、読み込む時は共通処理を使っていたのだけど、datはなるべくオリジナルを残すように変更。<br />
実は動作速度的には不利なんだけど、DB管理外のdatファイルを野良で突っ込むのに対応しようとするとこれ必須になっちゃう。</p>

<p>レスをdatファイルでのみ管理する方式から、レスごとの情報を管理できるメタデータファイルを隣に作るようにする。<br />
バイナリファイルにすべきかテキストファイルにすべきか迷ったけど、フォーマットの拡張性を考えるとテキストかな。例によってパフォーマンスが不利になるけど仕方あるめえ。<br />
ここではレス個別のNGとか画像あぼーんの状態とかを管理させる。</p>

<p>実はTuboroid 0.1系(現在は非公開、最終版は2010年1月の0.1.4.7、日本のAndroidユーザが今の1/100くらいしか居なかった頃の幻のアプリ)では全レスをDB上で管理していたのだけど、完全にフロムスクラッチでリライトされた0.2系(現行のClassic系)ではdatファイルオンリーになってる。<br />
Tuboroid2ではdatファイル+DBとdatファイル+管理ファイルの2種類を検討したんだけど、前者の方が設計的には綺麗だけど後者の方が色々メリットが大きいかなという感じ。</p>

<p>スレ覧はこれまで1スレ開くごとに1Activity開いてたけどスレ覧Activityはアプリ内で1個にする</p>

<p>これまでガン無視してきたSETTING.TXTの解釈を行う。また板表紙の連投規制値の取得も行った方がいいかな。これにより連投規制待ちをある程度クライアント側で管理出来るようになる。<br />
SETTING.TXTの仕様見てて気づいたんだけど、実は2005年からは暦で遊ぶのを止めていたようなので日付はちゃんとparseできそうだ。コンマ区切りで板暦がつくことがあるのでコンマがあったらそれより前を捨てるという仕様をさっき知った。<br />
(従来の2chの書き込み時刻は管理側の気分次第でしばしばデタラメな表記になっていたので、文字列としてそのまま扱うことはできるがparseしてUNIX timeに変換する安全な手順がなかった)<br />
でも今SETTING.TXTの仕様見てみたらなんかこれ読む意味ない気もする......</p>

<p>時刻を管理出来るようになればNG処理が日付単位で管理出来るようになるため大幅な改善が見込める。</p>

<p>画像関連については完全に別物。ビューア部分については根こそぎ別物で書くと長くなるので割愛。<br />
問題はサムネイルを自動ロードするかどうかで、最近拡張子が画像っぽいけど踏むとIPアドレスやUSER_AGENTを記録するトラップみたいなのが2chのあちこちで横行してるんだよね。だいぶ前に俺がサムネ自動ロードしたくないって言った問題がやっぱ出てきちゃってる。<br />
サムネ自動ロードってことはこういうトラップを問答無用で踏むことになるけどいいかなぁ。<br />
スレごとに切り替えってことにしてデフォルトオフでもいいんだけどさ。ファイルNG機能は共有NGがないと自分が一度踏んでから登録することになるんだよね......。<br />
前述したけどグロ注意レスがついたら暫定NG扱いという手もあるけど、グロ注意レスが付く前にレス読み込んじゃってドーンということもあるわけだから、書き込みから10分以内のレスは自動ロードしないといった工夫も必要かもしれないね。</p>

<p>板移転はいつだって2chブラウザ作者の頭痛の種。Janeも板移転処理無茶苦茶だし、アドホックな対応しか取りようがないのだと思う。</p>

<p>幸いなこと。<br />
Tuboroid開発当時存在すら知らなかったrep2のソースが手元にある。<br />
これは2ch公式p2と全く同じコードベースと思われるものなので、内部実装が2ch公式の想定している動作にかなり近い物になっていると思われる。<br />
monazillaは有用だけど情報不足が否めないので、具体的な実装が(Delphiとか俺が読みにくい言語でなく)存在していることは有り難い。</p>

<p>(追記)<br />
内部構造の件、メタデータは別ファイル保存と書いたけど、DB保存(少なくともローカルストレージ保存)じゃないとまずいかもしれない。<br />
SDカードには事実上セキュリティが存在しない。一方メタデータには「自分の書き込み」マークは付けるつもりでいる。他アプリからSDカードが読まれてそれまで読んだことのあるスレの一覧がバレるのはもうある程度仕方ないかな(ログを全部内蔵ストレージに入れる以外に回避不能)と思ってるけど、さすがに「その人が書き込んだ履歴」が読まれる危険があるのは俺のセキュリティ感覚では容認できない。<br />
SDカードに保存する情報を暗号化する手もないことはないけど、そうなるとランダムに生成した鍵を本体ストレージ側に保持しておく必要があり、それはつまり再インストールすると暗号化した部分はロストするわけだからSDカードに保持しておく利点の大半は失われてしまう。<br />
datの移動はサポートするけどインポート時点でメタデータはロストするよ、という仕様にするしかないのではないかと思う。<br />
2chMateがSDカードにテキスト形式でメタデータを持ってるけど、これ大丈夫なんだろうか。</p>]]>
    </content>
</entry>

<entry>
    <title>monazilla仕様のよく分からない点</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2012/02/monazilla.html" />
    <id>tag:www.narazaki.info,2012://2.404</id>

    <published>2012-02-14T12:13:46Z</published>
    <updated>2012-02-18T17:34:36Z</updated>

    <summary>Janeとか2chMateなんかだと自分のレスにマーク付くよね。 でもあれを正し...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="Android" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Tuboroid2" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<p>Janeとか2chMateなんかだと自分のレスにマーク付くよね。<br />
でもあれを正しく実現するためのmonazilla仕様が見当たらない。<br />
つまり「自分が今書きこんだレスが実際に何番のレスとして書き込まれたのか」を正確に知る手段が分からない。<br />
正しいやり方知ってる人がいたら誰か教えて欲しい。</p>

<p>以下考察。</p>]]>
        <![CDATA[<p>とりあえず思いついたのはこういうやり方。このやり方では問題があるので後述する。<br />
(1)書き込み直前にスレをリロードし、現在何番まで書き込まれているかをチェックする。<br />
(2)書き込みを行い、書き込んだ内容を記録しておく<br />
(3)スレをリロードし、書き込み前から増えたレスを抽出する<br />
(4)そのうち書き込んだ内容に一致するものにマークする</p>

<p>問題点</p>

<p>(A)2chでは書き込み時にレス内容は若干加工される。<br />
　例えば改行がbrタグに置き換わるとかレス番参照がリンクに置き換わるとか。<br />
　これは「書き込んだつもりの内容から改行を全部除去したもの」と「書き込み後の内容からタグを全部除去したもの」が一字一句完全一致することを期待しても良いレベルなのか?</p>

<p>(B)ｹｺｰﾝすることがある。<br />
　書き込み直前のリロードから書き込み直後のリロードまでには時間が掛かる。長ければ数秒かかることがあり得る。<br />
　何か面白いレスがあった時に自分が「ｗｗｗ」とだけ書き込んだとして、この数秒の間に「ｗｗｗ」と書き込んだ人がいた場合、「ｗｗｗ」という書き込みが複数出現することになる。<br />
　この状態になると、何番の「ｗｗｗ」が自分の書き込みなのかを知る手段がない。</p>

<p>この問題点を解決するために4以降を強化する実装を考えてみる。ただしこの方式は不完全。<br />
(4)3の全ての書き込みについて書き込んだであろう内容との編集距離を計算する<br />
(5)編集距離が最短の書き込みが1つであればその書き込みが自分の書き込みである。<br />
　もし(A)による書き換えで数バイト程度の書き換えが起こっていたとしても自分の書き込みが編集距離最短であることに違いはないはずである。<br />
　この方法では自分の書き込みが「無かった」時に手近な異なる書き込みが選択されてしまう可能性があるが、それはないことを期待する。<br />
(6)もし編集距離が最短の書き込みが2つ以上ある時は一番前の書き込みを選択する。<br />
　全く同じ書き込みが2つ存在している原因として考えられるのは、ｹｺｰﾝかコピペ荒らしである。<br />
　コピペ荒らしは自分の書き込みよりも必ず後であることが期待出来るので、先勝ちにすれば自分の書き込みである可能性が極めて高い。<br />
　ｹｺｰﾝはどうしようもないのでとりあえず適当にマーク付けておく。正確に知るための仕様がないならｹｺｰﾝ時に正確に自分のレスを特定することは出来ないはずであって、つまり誤マーク上等でマークする。</p>

<p>本当に正しい方法が存在するならばそれがいいのだが、無いなら無いで、既存のアプリも上記方法で実装されているなら誰か教えて欲しい。</p>

<p>(追記)<br />
JaneStyleにて動作を確認したが、ｹｺｰﾝ時の手当はしていないことを確認。検証方法は以下の通り。<br />
初心者練習スレにて「テスト」の一文をP2とJaneStyleで書き込み待機状態にし、どちらも書き込んでいない状態でdatを読み込む。<br />
その後、まずP2で書き込み、P2の書き込みを読み込まずに全く同じ書き込みをJaneStyleからも行うと、JaneStyleの「自分」表示はP2の書き込みに付いた。書き込みの順序がP2→JaneStyleになっている(実は書き込みの順序が逆転していて正しく認識しているということはない)というのはIDの末尾がPであることで確認できた。<br />
しかるに、JaneStyleの「自分」表示は、書き込み時点で書き込んだ内容をセーブしておき、書き込み直後のリロードで新たに追加されたレスのうち一番最初のものを選択する、という原始的かつ割り切った手法を取っていると考えられる。<br />
これはもう、割り切るしかないな。</p>]]>
    </content>
</entry>

<entry>
    <title>1.6+support-v4を使う時のリソースディレクトリ配置</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2012/02/16support-v4.html" />
    <id>tag:www.narazaki.info,2012://2.403</id>

    <published>2012-02-10T15:20:17Z</published>
    <updated>2012-02-10T16:45:46Z</updated>

    <summary>Androidで互換性の高いアプリを書くための最悪ではない程度のプラクティスの実...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="Android" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<p><a href="http://www.narazaki.info/2011/10/android-7.html">Androidで互換性の高いアプリを書くための最悪ではない程度のプラクティス</a>の実例だけど自分用の備忘録を兼ねて。</p>]]>
        <![CDATA[<p>res<br />
<ul><br />
        <li>anim<br />
ウィンドウアニメーションなどの定義</li><br />
	<li>drawable<br />
ビットマップは置かない。xml定義のシェイプやlevel-list型アニメーションなどを置く</li><br />
	<li>drawable-xhdpi<br />
ビットマップリソース。メニューアイコンと通知アイコンはクラシック(v10以下)用。<br />
mdpi/ldpi/hdpiも用意していいけどここではｘhdpiからの自動生成に任せる。hdpi機種は多いので綺麗なアイコン出したいならhdpiは別建てでもいい</li><br />
	<li>drawable-xhdpi-v11<br />
Honeycomb以降用のメニュー(アクションバー)アイコンと通知アイコン。もしdrawable-hdpiを作ったならdrawable-hdpi-v11も必ず作ること</li><br />
	<li>layout<br />
基本的なレイアウト。完全に共用するものはここ。スマホの標準縦長モードもここ。また、include/mergeで取り込むためのパーツものの</li><br />
	<li>layout-land<br />
横長モード。スマホの横長モード～眼鏡ケェスの標準横長モード。主にマルチペインのもの</li><br />
	<li>layout-large<br />
タブレット縦長モード。縦長時1ペインならあまりここに物を置く必要はないかもしれない</li><br />
	<li>layout-large-land<br />
タブレット横長モード。スマホ横長時1ペイン、タブレット横長時2ペインならここに定義。タブレットもそうだけどGoogle TVもここを読むはず。<br />
Google TV時はタブを「横(左)に」持ってくることが推奨されるはずだけど今のところ詳細がないのでタブレットと共通でいいと思う。もしこの詳細が出てきたらGoogle TVだけlayout-notouch-large-landで分けるといいかもね</li><br />
	<li>layout-large<br />
タブレット縦長モード。縦長時1ペインならあまりここに物を置く必要はないかもしれない</li><br />
	<li>values<br />
        <ul><br />
        	<li>attr.xml<br />
スタイル用属性リスト</li><br />
        	<li>color.xml<br />
カラー定義</li><br />
        	<li>string.xml<br />
標準(英語版)文字列リソース。デフォルトはブロークンでもいいのでとりあえず英語にしておくこと</li><br />
        	<li>arrays.xml<br />
英語・共通版配列リソース</li><br />
        	<li>styles.xml<br />
標準(共通・スマホ版)スタイル</li><br />
        	<li>theme.xml<br />
クラシック(2.3以前用)テーマ。Holoを使わないもの</li><br />
        </ul><br />
        </li><br />
	<li>values-ja<br />
        <ul><br />
        	<li>string.xml<br />
日本語版文字列リソース。lintのせいで標準にあって日本語版にない文字列があると怒られるので注意</li><br />
        </ul><br />
        </li><br />
	<li>values-large<br />
        <ul><br />
        	<li>styles.xml<br />
タブレット用スタイル。文字サイズなど共通のものから変更を加えたい時はここ</li><br />
        </ul><br />
        </li><br />
	<li>values-v11<br />
        <ul><br />
        	<li>styles.xml<br />
Honeycomb以降(=Holo)用スタイル。Holo特化のものが必要ならここ。もしくはHoloから継承しなければならない場合もここ</li><br />
        	<li>theme.xml<br />
Honeycomb以降(=Holo)用テーマ。Holoから継承</li><br />
        </ul></p>

<p>        </li><br />
	<li>xml<br />
        <ul><br />
        	<li>preferences.xml<br />
設定画面の定義</li><br />
        </ul><br />
        </li></p>

<p><br />
</ul><br />
</p>]]>
    </content>
</entry>

<entry>
    <title>Tuboroid2に関する構想というか妄想</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2012/02/tuboroid2.html" />
    <id>tag:www.narazaki.info,2012://2.402</id>

    <published>2012-02-10T07:39:54Z</published>
    <updated>2012-02-10T09:35:17Z</updated>

    <summary>ナビゲーションUIとかタブ周りとかがまだまだ悩んでるのでとりあえず妄想レベルのも...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="Android" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Tuboroid2" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<p>ナビゲーションUIとかタブ周りとかがまだまだ悩んでるのでとりあえず妄想レベルのものを列挙してみる。<br />
正直言うと2chMateがかなりモダンで出来が良くかなり俺の理想とするものに近いので「Mateっぽいんだがwww」とか言われるのは覚悟しないといけないと思ってる。</p>]]>
        <![CDATA[<p>■必要項目<br />
・従来との互換は完全に捨てる。操作性も踏襲しない<br />
・なるべく標準デザインガイドを踏襲し、Android 4.0時代の模範的アプリです(ｷﾘｯとほざきたい<br />
・Android 1.6以上対応でsupport-v4ライブラリを使用<br />
・Fragmentを使用し「スマートフォン」「タブレット」「Google TV」「キーボード付き端末(眼鏡ケェス等)」に対して適応的なUIを提供する<br />
・キーボードだけで操作出来るようにする<br />
・機能は少なく、カスタマイズ項目は少なく。上級者はどうでもいいので2chMateに回す。The Zen of Palm!<br />
・サジェスチョンのあるUI。標準的なAndroidアプリの使い方を知っていれば見た瞬間全ての機能を使いこなせる、そんなアプリがいい。初見は殺さない。迷子を出さない。上級者はどうでもいい<br />
・上級者はどうでもいい。3回言いました<br />
・しっかりとした画像ビューアを作る。最近PSO2スクショスレに住んでいると必要に思えてきた<br />
・堅牢な内部設計。Tuboroidはそこそこ手堅い作りにしていたつもりだけど後付けで作った部分に作りの良くない部分が多い<br />
・しおり管理を(後付けではなく)きちんと設計段階から入れておく<br />
・再インストール時に履歴やお気に入りをリカバリ出来るようにする<br />
・板移転への対応(でも板移転って滅多にないから仕様分からないしテストもしにくいんだよね......)<br />
・2ch・したらば・まちBBS対応、外部板対応、P2書き込み、●書き込み、●dat読み、などの現行の基本的な機能は削減しない<br />
・ちゃんとしたNG管理<br />
・Tuboroidの頃から何度も要望が上がってたBe対応。でもいまだにBeって何かよく分かってない<br />
・内部形式はUTF-8変換形式からオリジナルのShift_JIS dat形式で取り扱う。<br />
・忍法帳の処理<br />
・バグレポ機能<br />
・書き込み履歴<br />
　Janeとかで自分の書き込みにマークが付くけど「自分が書き込んだものである」ことはどうやって検出するのが正しいんだろう。書き込み本文とdiff取れば常に同値が期待出来るものかな??</p>

<p>■検討中<br />
・一番上へとか一番下へとかリロードとかを取り扱うナビゲーションボタンの配置。下ツールバーは廃止したいがどこに置くべきか。<br />
　候補としてはHoneycomb以降のブラウザに搭載されているクイックコントロールだが実装めんどくさい割にどの程度みんなが適応出来るか分からない<br />
・遷移。特にスレ表示の遷移方法は課題。<br />
　スタック・タブに載せるスレ表示を1個に制限するなら遷移はシンプルで自明だがスレからスレを開いた時に戻れなくなる。<br />
　スレ表示を無条件に一定数の履歴としてタブに載せていく場合、左スワイプなどでスレ一覧とかお気に入りまで戻るのが大変。2ペイン表示との親和性は良い<br />
　スレ表示中にスレリンクを押した時のみスタックして、「次の未読」を押した場合はスタックをクリアする、というのも考えられる。<br />
　多分一番難しいところ<br />
・テーマ機能をどうするか<br />
　派手なカスタマイズ機能は付けたくない。例えば行間調整などのオプションがずらーっと並ぶのは無し。外部テーマファイルを作るとかってのもあんまり気が進まないんだよね......。<br />
　アイコン差し替えなども解像度対応がややこしく気が乗らない。<br />
・AAに関する機能<br />
　俺自身がAAを張らない人なのでどういうものがいいのかイマイチ微妙。下手すると荒らし機能になるし......<br />
・終了ボタン<br />
　なんでみんなそんなに終了ボタン好きなの？</p>

<p>■付けない物<br />
・ジェスチャ<br />
　覚えられない。誤爆する。設定めんどくさい。標準的ではない<br />
・機種情報貼り付け<br />
　あると便利かもしれないけど2chMateが裏目ってるのを見るととてもじゃないけど......<br />
・2ch外で広告などで維持されているサイトへのタダ乗り<br />
　これは厳密に禁止というわけではないけど道義はわきまえる必要があると考えてる</p>

<p>......という感じで、今のところものすごい新機軸みたいな機能は全く思いついてない。<br />
実は機能的にはTuboroidでほぼ完成形に近いと思ってるし、これ以上はもっとディープな2chユーザじゃないと思いつかないんじゃないかな。<br />
実況民とかだとオートリロード+音声読み上げとかあると嬉しかったりする?<br />
ニュー速系とかはあまりライフスタイルが良くわかんないんだよね。典型的なニュー速系民が、どんな風に視線を動かしてどんな風にレスを読んでどんな風にスレを渡っていくか、そういうのは知りたい。あそこが一番人口多いんだろうとは思うんだけど......。<br />
VIP民とかは1様オンステージだったりするのかな?わざわざ1だけ抽出の専用ボタンとかはいらないよね。<br />
画像スレ民にはキャッチアップ出来るようにしていきたい。グロ対策だけがちょっと微妙。デフォ表示にした場合、見ちゃってから手動でNGしてねとかで大丈夫?ネ実のスクショスレとかだとグロなんて滅多に張られないからさ。<br />
過疎板民についてはお気に入り未読巡回ツアーで今まで通りかな。</p>]]>
    </content>
</entry>

<entry>
    <title>あのさ......</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2012/02/post-35.html" />
    <id>tag:www.narazaki.info,2012://2.401</id>

    <published>2012-02-09T17:14:40Z</published>
    <updated>2012-02-09T19:10:03Z</updated>

    <summary>もし俺がフロムスクラッチで2chブラウザを作るとか言ったら使う人いるかな。 名前...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="Android" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<p>もし俺がフロムスクラッチで2chブラウザを作るとか言ったら使う人いるかな。</p>

<p>名前は某アプリの後ろに単に2とか付けただけだけど、コードベースは全く1から再設計で操作体系も別物。多分某アプリユーザからすると「使いにくい」って言われる。<br />
多分広告付き版をMarketで公開して広告無しのDev版をBlogで公開する2chMate方式を取ると思う。有料版は出すつもりない。それとこまめなバージョンアップに自信ないんでDev版は期間無制限だろうな。きっちり背負える開発者であれば2chMateのやり方は理想的なんだと思うけど俺は自信ない......。</p>]]>
        <![CDATA[<p>まあ構想としては無かったわけではないんだけど、いきなりなんでこんなことを言い出したかっていうとあまりポジティブな事情じゃなくてちょっと毒吐くことになりそうなので割愛。<br />
# 散々twitterで毒吐いたので。フォローしてる人すまん</p>

<p>で、基本的なUIのところでいきなり問題があるんだけど、今のGoogle最新ガイドラインでは「下にツールバー置くな」なんだよね。死ねェ。でも便利ボタンを上ツールバーに置くとかマジゴミクズ産廃レベルなのであり得ないよね。<br />
本当のとこどうよ。タブとかは上に置かないといけないけど便利ボタンは下に配置してもOKだったりするのかな。<br />
だってICS標準アプリとかでも思いっきり下にボタン並んでんじゃんバーカバーカ。<br />
下ボタンでいいか。いいの?　......いいか。</p>

<p>対応バージョンについては3案考えられる。1.6以上、2.2以上、3.0以上、の3種。<br />
ほんとは3.0以上のアプリを作ってみたい。そうじゃなきゃ1.6以上。まあ1.6かなぁ......。<br />
3.0以上決め撃ちで作って1.6向けには古いのを復活させるって手もあるんだけど......って問題が一周回って戻ってきてるやん。</p>

<p>ちなみにまだ一行も書いてないよ。</p>]]>
    </content>
</entry>

<entry>
    <title>PSO2α2雑感</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2012/02/pso22.html" />
    <id>tag:www.narazaki.info,2012://2.400</id>

    <published>2012-01-31T22:46:31Z</published>
    <updated>2012-02-01T01:07:29Z</updated>

    <summary>PSO2α2が始まったので雑感。4日の日程のうち2日まで経過。...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="ゲーム" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<p>PSO2α2が始まったので雑感。4日の日程のうち2日まで経過。</p>]]>
        <![CDATA[<p>■全体的なところ<br />
・アクション性が大幅に上がっている<br />
　すごくモンハンっぽい。モンハンとPSPo2を2:1で混ぜたような感じ。<br />
　ジャンプとステップが非常に重要なので格ゲーっぽいところもあるけど、戦闘そのものは大味で取っつきやすくしてある。<br />
　基本的には慣れればノーダメで進めるようなバランスになっていると思う。</p>

<p>・ギスギス要素を緩和するための工夫がされている<br />
　アイテムドロップをPSPo2以来の個別ドロップ方式にし、経験値取得も手付け方式から周囲にいるだけで均等配布される方式になった。<br />
　このおかげでマルチパーティエリア(後述)などで全く見ず知らずの人といきなり共闘しても損がなく、他人が鬱陶しくないむしろ他人が一杯いるほど嬉しい設計。<br />
　ガチガチのパーティ組みたい人には向かなくなったかもしれないがMOとしては健全な方向になった。</p>

<p>・回復手段が大きく制限された<br />
　従来のPSO/PSUと大きく異なる点として、アイテム使用に(モンハンのように)時間が掛かるようになり、レスタはHPが徐々に回復するフィールドを数秒間張るような効果になった。<br />
　このため回復には安全確保が必須になり、回復しつつ敵と正面からHPを削り合う、というような戦い方は出来ない。</p>

<p>・種族格差が全体的に縮小<br />
　HPと法撃以外のステータス差はあまりない。法撃だけはキャストとニューマンでそこそこの差(といってもPSUのヒューマンとニューマンくらいの差)があるのでキャストのフォースだけは若干不利かもしれない。</p>

<p>・3職それぞれ操作感が別ゲー<br />
　特にハンターとそれ以外の操作感が全く異なる。ハンターはパッドでプレイする人が多いようだが、レンジャーとフォースはキーボード+マウスでの操作がほぼ必須に近い。</p>

<p>・ハンターは格ゲー<br />
　普通に使っても普通に強く、操作に慣れると凶悪に強くなるので、初心者から上級者までとりあえずハンター使っておけばハズレは無い。<br />
　攻撃力がぶっちぎりで高く防御面でも隙が無いので効率とか強弱とか気にする人はハンター選んでおけって感じ。<br />
　ジャンプとステップが非常に重要で、特にステップは無敵時間有りで使用コスト0な上にステップをキャンセルして攻撃に繋がるため非常に強力。敵の全攻撃をステップで避けながら攻撃し続けるのがデフォルト。<br />
　前述の通りメイトが使いにくくなっているため回復時は安全確保が重要。<br />
　ステップに比して空気っぷりがやばいガードにはてこ入れ必要と思われる。</p>

<p>・レンジャーはTPSっぽい<br />
　立ち位置としてはモンハンのボウガンか?弱点狙いのため事実上TPSモードが必須。<br />
　敵を弱体化させる特殊弾を持つ。ただし特殊弾はリキャストが長く対ボス用の性質が強い。<br />
　攻撃力は(弱点を狙ってすら)低めだが、PAの一点集中攻撃やグレネード弾はそこそこの威力。ボス戦ではハンターが殴りにくいような場所にある弱点を特殊弾で防御下げてPA撃ちまくると割と強い。雑魚戦は苦手かもしれない。<br />
　ステップの代わりにダイブロールというPSPo2の緊急回避みたいなのが出る。コスト0なのでPSPo2よりはずっと強力だがステップと違ってキャンセル出来ないため3職では一番地味。</p>

<p>・フォースは...なんだろ<br />
　モンハンの弓と笛を足して2で割ったような感じ?レンジャーと同じくTPSモード推奨。<br />
　テクは時間を掛けてチャージしてから撃つ必要がある。このため安全にチャージ出来るような位置取りが重要になる。<br />
　攻撃力は低いが補助が出来るのが一応利点。ただαでは補助が(前述の通り使いにくい)レスタしかないので補助役としてはあまり期待出来ない。シフデバが来れば違ってくるはず(補助アイテムが無ければ)<br />
　ステップの代わりに水平に滑るように移動するミラージュエスケープが出る。無敵時間が長いが隙も大きくキャンセル不可のため、その名の通り敵中脱出用という色彩が強い。<br />
　ガス欠になりやすいくせにPP回復手段が殴るしかなく、非チャージテクの存在意義が不明、などまだ練り込みが足りない感はある。</p>

<p>・キャラクリは良く出来てる<br />
　顔が変形できすぎてとんでもないことになりがちなので、かんたん編集で大まかに作った後で少し弄る、くらいにしておかないとやばい。<br />
　おっぱいスライダー自重。<br />
　α1であまりの自由度の低さに驚異的な不人気っぷりだったキャストはα2で大幅にてこ入れされた。</p>

<p>・ツリー式のスキルシステム<br />
　いわゆるDiablo2方式。正直これは古い。なんでPSPo2で付け替え自由のアビリティ方式にしたのに退行するんだろう。<br />
　スキルの性能はあまり強力にしない方針のようなので、特定のスキル編成でないとどうこうということはあまりないと思う。今の傾向で行くならだけど。<br />
　αではスキルリセットが出来ない。本番では課金アイテムか何かになるんだろうか?</p>

<p>・アイテム強化とかはまだ触ってない<br />
　悪名高いドゴーンや傷物仕様が無くなったため、とにかくコストさえ掛ければ強化していける感じにはなった模様。<br />
　基本的にはPSPo2系の発展型といった感じみたい。</p>

<p>・マルチパーティエリアが特徴的<br />
　道中で複数のパーティが最大12人までごちゃ混ぜになるエリアがあり、基本的にマッチングがランダムに行われるためかなりカオス。前述の通り他人がいるほど有利なので自然に共同戦線を張る形になる面白い仕組み。<br />
　α1では大人気を誇ったがα2で仕様が複雑化しかえって過疎化するという逆効果をもたらしたため、α1に近い仕様に戻して欲しいという声多数。</p>

<p>・マイルームはPSUの発展系<br />
　デフォルトでバルコニー付きでPSUより広い中部屋だが、最大で大部屋3個まで拡張可能。<br />
　ただ、実用的な機能はロビーで一通り使えるため、マイルームは純粋に友達呼ぶ用となっていてどの程度使われるのはやや疑問。マイルームでしか出来ない機能(栽培とか?)がないとあまり利用されないコンテンツになるかもしれない。</p>

<p>■ぱっと見てまずいと思う所<br />
・アイテム整理周りのUIがいまいち<br />
　α1からはやや改善したが相変わらず使いにくく分かりにくい。<br />
　ミッション中にアイテムが一杯になって整理しようとすると確実にイラッとするレベル。</p>

<p>・倉庫が狭い<br />
　αだからかもしれないが倉庫にアイテムが200個しか入らない。本番では少なくともあと1桁は多くなることを期待する。<br />
　とすると尚更今のアイテム整理UIでは追いつかなくなるわけだけど。</p>

<p>・不可逆型のスキルツリーシステムは今時古い<br />
　課金スキリセ売るぜーとか思ってるなら止めて欲しい......。<br />
　特にフォースのスキルが属性別で分かれているのは懸念点だと思う。</p>

<p>・ガードと非チャージテクが空気<br />
　ガードが完全にステップに食われており、α2から攻撃モーションをガードでキャンセル出来るようになったがまだ弱い。何かもっと目立つ利点がないと厳しいと思う。<br />
　非チャージテクは威力がショボいくせにPP消費がチャージと同じという意味不明さ。いっそ非チャージはPP消費無しで低威力の通常攻撃扱いにでもしてしまえばいいのに。</p>

<p>・α1のマルチパーティエリアを返して<br />
　返せ</p>

<p>とりあえず現状見えている範囲では割と期待出来る方じゃないかなぁ。</p>]]>
    </content>
</entry>

<entry>
    <title>何故ActionBarは使いにくいのか</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2011/12/actionbar.html" />
    <id>tag:www.narazaki.info,2011://2.399</id>

    <published>2011-12-05T15:26:51Z</published>
    <updated>2011-12-05T16:45:01Z</updated>

    <summary>俺はGalaxy Nexus買ってないけどな!でかすぎるし 私が「Ice Cre...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="Android" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<p>俺はGalaxy Nexus買ってないけどな!でかすぎるし</p>

<p><a href="http://d.hatena.ne.jp/Kazzz/20111205/p1">私が「Ice Cream Sandwich」を嫌いな理由 - Kazzzの日記</a><br />
やっぱり不評みたい</p>]]>
        <![CDATA[<p>ActionBarはICSに限らず最近Googleが推奨しているAndroid向けUIで、従来のメニューボタンによるメニュー表示を廃し、ActionBar(多機能タイトルバー)の右部分にボタンを並べることで代替するものだ。<br />
推奨されているので(操作一貫性重視の観点から)俺も最近書くアプリではなるべく使うようにはしている。</p>

<p>このUIは見た目的にはまあクールな感じになるのだけど、重大な欠点がある。<br />
ボタンが画面の右上という僻地に置かれているため左手で片手持ちすると押せないのだ。右手持ちでもかなり押しにくい。</p>

<p>スマホを片手持ちする時の重心は大ざっぱに分けて二通りの流派があると考えている。<br />
一つはAndroidユーザに多いと思われる下半分に重心を置いた持ち方。もう一つはiPhoneユーザに多いと思われる端末中心に重心を置いた持ち方だ。<br />
なぜそんな持ち方になるのか。<br />
iPhoneではBackボタンが左上に配置されることが多く、また往々にして各ボタンが画面に散在している。このため、画面全体を均等なコストで押せる持ち方が望ましい。まああのUIは開発過程で両手操作しているのではないかと思うが......。<br />
Androidでは最重要のボタン(「Back」と「Menu」のことだ)が下部に配置されており、アイテム選択を除けば上部での操作はあまり発生しない。だから上部ボタンのコストが多少高くなっても下部ボタンを最小コストで押せる持ち方が望ましい。</p>

<p>これはかねてからの俺の持論なのだけど、スマホにおける片手操作のスイートスポットは画面の下半分～1/3程度の場所にあると考えている。<br />
重心を中央に置いて画面上部を押しやすい持ち方をするとどうしても自分自身の手で画面を隠しがちになるし、画面が隠れないように持つと親指は画面下部あたりに優れた稼働特性を持つことになる。<br />
特に理由がないなら、画面の下の方で親指をチョコチョコと動かして操作し続けられるのが一番快適なはずだ。<br />
まあ<a href="http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%83%E3%83%84%E3%81%AE%E6%B3%95%E5%89%87">フィッツの法則</a>とかいう奴に合致するよう作ると自ずとそうなる。</p>

<p>Honeycombより前のAndroidでもあからさまに上記法則に反しているものがある。みんなあの操作は大嫌いなはずだよ。<br />
そうそうあれだよあれ。　「通知バーの引きずり下ろし操作」だよ!<br />
あの操作がかったるいのはきちんと駄目な理由があるってことだ。</p>

<p>まあつまりどういうことが言いたいかというとだね</p>

<div style="font-family:'ＭＳ Ｐゴシック';font-size:12pt;line-height:100%;">
　　 )､.＿人＿人＿人＿人__,.イ.､.＿人＿人＿<br />
　＜´　Menu　ボ　タ　ン　返　し　て　っ　！ ＞<br />
　　 ⌒ v'⌒ヽr -､＿　 ,r v'⌒ヽr ' ⌒<br />
// // //／::　<　　 ＿,ノ｀' 、ヽ､＿　ノ 　;;;ヽ　 //<br />
///// /::::　　　（y○'）｀ヽ) ( ´（y○'）　 　　;;|　　/<br />
// //,|:::　　　　　（ (　/　　　　ヽ) ）+　　　 　;| /<br />
/ // |:::　 　　　+　 ) ）|~￣￣~.|（ (　　 　 　 ;;;|// ////<br />
/// :|::　　　　 　　（ (||||! i: |||! !| |) ）　 　 　 ;;;|// ///<br />
////|::::　　　　+　　 U | |||| !! !!||| :U　　　;;; ;;;|　///<br />
////|:::::　　　　　　　| |!!||l ll|| !! !!| | 　　　;;;;;;|　////<br />
// / ヽ:::::　　 　 　　| !　|| |　||!!|　　　　;;;;;;/// //<br />
// // ゝ::::::::　:　　　| ｀ー----－'　|＿_／///<br />
</div>

<p>ActionBarに置くボタンは滅多に押さないボタンだけにして、よく押すボタンはSplitActionBarに置け、ってことかもしれないけど、それだと画面がせませまですお</p>]]>
    </content>
</entry>

<entry>
    <title>ぐぐるTV日本上陸は来年?</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2011/11/tv.html" />
    <id>tag:www.narazaki.info,2011://2.398</id>

    <published>2011-11-01T23:14:32Z</published>
    <updated>2011-11-02T00:12:50Z</updated>

    <summary>...というのが今回のGDDでの最大の収穫かなぁ。 懇親会に申込み損ねてしまった...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="Android" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<p>...というのが今回のGDDでの最大の収穫かなぁ。<br />
懇親会に申込み損ねてしまったのでなんだか不完全燃焼みたいな感じになってしまいました。</p>

<p>ぐぐるTVが面白そうだったので講演の雑感。</p>]]>
        <![CDATA[<p>・ぐぐるTVは現在アメリカ版のみ。来年国際版を出す予定だよ<br />
　まあ今日本に上陸されてもしょんぼりなので、少しアメリカで初速つけてから来てもらった方がいいね。このままだと来年でも微妙だけど...<br />
・タッチパネルがないのでDPAD(方向キー)での操作になるよ<br />
　トラックボールか何かもあるようだけど、基本的に方向キーで操作できるようにしてくれ、とのこと。<br />
　...ちょうど前日に思い立って互換性ネタを書いた時にカーソルキー使えるようにしとこうぜみたいなことを書いたんだけど、Google TVが来たらこの対応は必要だろうなとは思ってたのでちょっとタイムリーだった。もう一つはIS01もしくはAZみたいなブックタイプ(俺はChrome Bookはコケると思っているので)<br />
・TVではアクションバーは上ではなく左に来るよ。<br />
　縦方向はListViewのせいで非常に(論理的に)長くなるので、DPADでの上下移動が大変。アクションバーなどの切り替えは基本的に左右に振るのがいいよ。講演では横3ペインのデザインを推奨していた。<br />
　これは当然だと思う。あと横に長く上下に狭いので上下方向にものを並べると狭いしね。<br />
　この辺は昔作った(黒歴史の)拙作2chブラウザでも初期(2年前)からlandscape(横長)モードではツールバーを左に置くといった対応をしていたのだけど、当時は全く見かけなかったし今でもあまりやられてない対応。やっと時代が俺に追いついたってことだな!!まあ某2chブラウザのカーソル対応は死んでたわけだが(ダメじゃん)<br />
・GoogleTVとタブレットのresourceの切り替え方法については言及がなかった<br />
　両方largeとかxlargeじゃ区別つかないじゃん。どーすんのよ。<br />
　論理的にはlayout-notouch-largeとかで区別してねって話になるべきところなのでなんでそう言わないんだろうかと思った。もしかして現行のGoogle TVってトラックボールカーソルがtouchscreenを詐称していて区別がつかないみたいなグダグダ展開だったりするの?もしそうなら今すぐやめさせて欲しいんだけど、そんなことはないと思いたい。<br />
　というわけでタブレットとTVはnotouchで区別したいね。ほんとはresourceタイプに「タッチはあるけどキーボード優先のデバイス」があってもいいと思う。<br />
　このやり方の利点はTVもそうだけどAZのようなノート風デバイスにも全く同じアプローチが可能なこと。IS01なんかはnotouchで区別できないので、キーボード優先指定が欲しいなぁ。タッチを必須とするアプリが使用できる一方で、キーボード操作レイアウトを持つアプリはキーボードでも快適操作、だと嬉しいよね。<br />
・TVはすっごい視聴時間長いよ論<br />
　...うん、言いたいことはわかるんだけど、その理論で任天堂もSONYもMSも死屍累々の山を築いてきたんだよね...。<br />
　でもブレイクしたら逆にセットトップボックスがゲーム機を駆逐する、みたいな未来もあるのかもしれない。周辺機器もUSB/Bluetoothによる共通化が可能だし開発環境が激安だから業界構造を変えるかもしれないよね。<br />
　とはいえ日本だとセットトップボックスはあまり一般的じゃないからなぁ。アメリカだとCATV会社に採用させたら一気に行く可能性はある。<br />
　でもなんだろうね、この3DO臭みたいなの。</p>]]>
    </content>
</entry>

<entry>
    <title>Androidで互換性の高いアプリを書くための最悪ではない程度のプラクティス</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2011/10/android-7.html" />
    <id>tag:www.narazaki.info,2011://2.397</id>

    <published>2011-10-30T17:25:18Z</published>
    <updated>2011-10-30T18:37:16Z</updated>

    <summary>っつーても1.6～4.0までぼちぼち対応しているって程度。 一般アプリ向け。ゲー...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="Android" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<p>っつーても1.6～4.0までぼちぼち対応しているって程度。<br />
一般アプリ向け。ゲームは知らん。</p>]]>
        <![CDATA[<p>・プロジェクトそのもののAPI Versionは最新のもの(今なら14)を指定<br />
・android:minSdkVersionは当然V4<br />
・android:targetSdkVersionは二択。3.x以上の端末でMenuボタンを出したいならV10、腹を括ってモダン設計で行くなら最新のもの(今ならV14)<br />
・android-support-v4.jarを使うのは今時常識。Fragment使わず全部ベタActivityとか使う輩はこの先生mashroomあたわず<br />
・基本的にV4のAPIしか使ってはいけない。それ以上を使う時はリフレクションするかクラスローダの例外を拾ってスタブクラスでゴニョゴニョ。<br />
・V5以上のAPIを使ってもコンパイルは通ってしまう。そのくせV4のマシンで動かすとクラスロード時に死ぬので注意。まあ大抵すぐ死ぬから気づくけど<br />
・V5以上のAPIにある定数は使ってもいいけどxmlはV4互換で書かないとダメ。例えばmatch_parentは使わずfill_parentで書くとか<br />
・drawable-xhdpiとかlayout-xlargeとかは使っていいよ。じゃんじゃん作れ<br />
・values-v11とか書けばその中はどうせv11以上でしか読まれないからその中のxmlは本気出しても良い。<br />
例えばstyle.xmlとかtheme.xmlとかは下位互換用のvalues/style.xmlと最新版用のvalues-v11/style.xmlに分けて後者でHoloを使う<br />
・support-v4とproguardが大ゲンカするので黙らせる<br />
-dontwarn **CompatHoneycomb<br />
-dontwarn **CompatCreatorHoneycombMR2<br />
-dontwarn android.support.v4.view.**<br />
-keep class android.support.v4.** { *; }<br />
・タイトルバーを非表示にする時は要注意。targetSdkVersion=11以上にするとHoneycomb以上でメニューボタン出ないからメニュー押せなくなるぞ<br />
・メニューでは適宜MenuCompat.setShowAsActionを使おう。なんかかっこいいし<br />
・drawableはldpi/mdpi/hdpi/xhdpiの4種類全部用意すること。楽がしたいならhdpiとxhdpiの2種類でもまあ良い<br />
・公式UIガイドラインがコロコロ変わっているのでdrawableに-v11と-v14を作っても良い(Googleを罵倒しながら)<br />
そこまで拘らないなら解像度違いの2～4種類だけでも十分<br />
・shape drawableで作れるものはなるべく画像ではなくshapeを使う。だって楽だし綺麗だし<br />
・layoutはlayout/layout-land/layout-large/layout-large-landの4つはとりあえずフォルダだけでも作っておけ。<br />
全レイアウトに対して4種類用意する必要はないけど心構えとして、ね。<br />
includeやmergeを駆使して記述を最小化するとメンテしやすい→しかしレイアウトエディタ涙目<br />
・RelativeLayoutとかlayout_weightとかを制して目くるめくリキッドレイアウトの世界へ<br />
・string.xmlはvaluesとvalues-jaの2個。当然valuesは英語。下手でも片言でもいいから英語<br />
・theme.xmlはvaluesとvalues-v11に作る。Holoは癖が強いので。<br />
タブレットだとフォントサイズを少し大きめにした方がいいこともあるのでその場合はstyle.xmlだけvaluesとvalues-largeに分ける<br />
・タブレットを想定するとペイン数が変わるためActivityはペインの管理とキー入力などだけを受け持ち、画面のロジックはFragmentに書く。Fragmentはいまや常識<br />
landとportでFragment配置が異なると画面回転が鬼門なので回転して死ぬ時はonCreate内で帳尻を合わせる。<br />
FragmentTransactionをcommitしてもcommitされずステート不正で死ぬことがある。commitという言葉について小一時間語り合いたくなったらexecutePendingTransactions。<br />
・キーボード対応。まあ、一応ね。カーソルキーくらいはちゃんと使えるようにしておくとデキル子だと思って貰えるよ。IS01ユーザとかに。<br />
・SDカードにデータ類を置く時はgetExternalFilesDirをリフレクションで呼び、呼べない時はgetExternalStorageDirectory下の"/Android/data/" + context.getPackageName() + "/files/"を指定する。<br />
Android2.2以上の端末ではアンインストール時に自動的にデータが削除でき、2.1以下では自動削除はされないけどとりあえずGoogleオススメの場所に保存はされる。<br />
・とにかくFragmentがキモ。Activityとはまた違ったライフサイクルを持つので慣れるまではまた苦労させられる。慣れたらすごく便利だよ。</p>]]>
    </content>
</entry>

<entry>
    <title>dalvik VM伝説</title>
    <link rel="alternate" type="text/html" href="http://www.narazaki.info/2011/10/dalvik-vm.html" />
    <id>tag:www.narazaki.info,2011://2.396</id>

    <published>2011-10-30T15:25:02Z</published>
    <updated>2011-10-30T15:58:37Z</updated>

    <summary>・10秒に1回のFull GCは当たり前。1秒に1回Full GCすることも ・...</summary>
    <author>
        <name>H.Narazaki</name>
        <uri>http://www.narazaki.info/</uri>
    </author>
    
        <category term="Android" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.narazaki.info/">
        <![CDATA[<p>・10秒に1回のFull GCは当たり前。1秒に1回Full GCすることも<br />
・起動と同時にFull GCを連発<br />
・dalvikにとってGC_FOR_ALLOCは一時オブジェクトの確保しそこない<br />
・BitmapFactoryをひと睨みするだけでGC_FOR_ALLOCで止まる<br />
・あまりにFull GCするからGC_CONCURRENTでも止まってない扱い<br />
・オブジェクト1個の生成時間が3フレームに見える<br />
・グッとガッツポーズしただけで5フレームくらい止まった<br />
・1オブジェクト生成で1Full GCはザラ、2回Full GCすることも<br />
・Androidフレームワークが自分で作った一時オブジェクトでFull GCするというファンサービス<br />
・画面タッチと同時にFull GCし、1GHz CPUを追い抜きフレーム落ち成功<br />
・2フレームスキップのFull GCが起こった次の瞬間気づいたらGC_EXTERNAL_ALLOCしていた<br />
・2011年アメリカ１０大事件　第一位「Dalvik VMでGC_CONCURRENT発生」</p>

<p>これだけGC様のご機嫌を伺いながらトリッキーなコード書かされるとC++の方が生産性高いんじゃないかと本気で思うことがある</p>]]>
        
    </content>
</entry>

</feed>

