サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
災害への備え
www.narazaki.info
テストにはプロがいます。「お仕事」で開発する場合はQA(Quality Assurance/品質保証)部門という「テストのプロ」がテストします。 バグ修正におけるテスターの役割は極めて重要で、「プログラマの手元で任意に再現可能な状態に持ち込めれば、バグ修正は8割終わっている」と言っても本当に過言ではありません。詳細聞き出しに10時間、修正30分、修正確認テスト30分、なんてのも実務ではザラです。この場合、プログラマも11時間拘束される(=時給x11時間分のコストが掛かる)わけですから、バグ修正のコストは聞き出しに掛かるコストがほとんどを占めることになります。 (誤報告一発で万単位の金が簡単に吹っ飛ぶとも言える) まずそもそもの問題として「素人」がテストを行うと以下のような論外ケースが頻繁に起こります。上に行くほどクソです。 誤報告 実際に起こったことと、現象が違う、手順が違う、設定
2012年3月30日金曜日 7:20 2chブラウザなのに たかが2chブラウザなのに、端末起動時に自動起動して、新しいアプリをインストールした信号を受けてまた動く。裏でどんな処理をしてたら、そんな動きが必要なのか大変疑問。 Tuboroidでしょうもない半可通さんに噛みつかれてアレなんだけど、分からないなら調べるか、調べても分からないなら黙ってるか、コメに書き散らす前に俺に訊ねてくれたら答えるのに、とは思うんだけど一応軽く解説しとくね。 Androidでは時限処理を行うためのAlarmManager Serviceというものがある。 AlarmManagerは時間を指定しておくとアプリを起動してくれるというもので、「午前10時に目覚まし時計アプリを呼んでくれ」とか「1時間ごとに2ch更新チェックタスクを呼んでくれ」とかそういうことができる。 Windowsなどで時々使われるいわゆる"常
NotificationにPendingIntentを投げる時、 intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); のようにフラグを付けることで既存のActivityに対してIntentを投げることが出来る。 受け取り側のActivityは(onCreateではなく) protected void onNewIntent(Intent intent) を適切にオーバーライドしてIntentを受け取る。 1つのアプリが複数の種類のIntentを持つ場合、notifyの第一引数(int id)によって区別される。 PendingIntentを更新したい時はPendingIntent.getActivityの第4引数(int flags)にPendingIntent.FLAG_UPDATE_CURRENTを設定すると同じidの通知を上書
俺はGalaxy Nexus買ってないけどな!でかすぎるし 私が「Ice Cream Sandwich」を嫌いな理由 - Kazzzの日記 やっぱり不評みたい ActionBarはICSに限らず最近Googleが推奨しているAndroid向けUIで、従来のメニューボタンによるメニュー表示を廃し、ActionBar(多機能タイトルバー)の右部分にボタンを並べることで代替するものだ。 推奨されているので(操作一貫性重視の観点から)俺も最近書くアプリではなるべく使うようにはしている。 このUIは見た目的にはまあクールな感じになるのだけど、重大な欠点がある。 ボタンが画面の右上という僻地に置かれているため左手で片手持ちすると押せないのだ。右手持ちでもかなり押しにくい。 スマホを片手持ちする時の重心は大ざっぱに分けて二通りの流派があると考えている。 一つはAndroidユーザに多いと思われる
っつーても1.6~4.0までぼちぼち対応しているって程度。 一般アプリ向け。ゲームは知らん。 ・プロジェクトそのもののAPI Versionは最新のもの(今なら14)を指定 ・android:minSdkVersionは当然V4 ・android:targetSdkVersionは二択。3.x以上の端末でMenuボタンを出したいならV10、腹を括ってモダン設計で行くなら最新のもの(今ならV14) ・android-support-v4.jarを使うのは今時常識。Fragment使わず全部ベタActivityとか使う輩はこの先生mashroomあたわず ・基本的にV4のAPIしか使ってはいけない。それ以上を使う時はリフレクションするかクラスローダの例外を拾ってスタブクラスでゴニョゴニョ。 ・V5以上のAPIを使ってもコンパイルは通ってしまう。そのくせV4のマシンで動かすとクラスロ
・10秒に1回のFull GCは当たり前。1秒に1回Full GCすることも ・起動と同時にFull GCを連発 ・dalvikにとってGC_FOR_ALLOCは一時オブジェクトの確保しそこない ・BitmapFactoryをひと睨みするだけでGC_FOR_ALLOCで止まる ・あまりにFull GCするからGC_CONCURRENTでも止まってない扱い ・オブジェクト1個の生成時間が3フレームに見える ・グッとガッツポーズしただけで5フレームくらい止まった ・1オブジェクト生成で1Full GCはザラ、2回Full GCすることも ・Androidフレームワークが自分で作った一時オブジェクトでFull GCするというファンサービス ・画面タッチと同時にFull GCし、1GHz CPUを追い抜きフレーム落ち成功 ・2フレームスキップのFull GCが起こった次の瞬間気
音楽・動画 | サービス・機能 | NTTドコモ 担当者はさっさと切腹してください。 にわかに話題になっていますが、「どういう時に何の情報が抜かれるのか」が分かっていない人がかなり多そうなので簡単に解説。 ■まず、なにが「できない」のか こちらの方を勘違いしている人が多いので列挙しておきます ・一般のアプリが無許可でIMEIを抜くこと IMEIへのアクセスにはREAD_PHONE_STATEという許可が必要で、アプリインストール時に許可を取っていないとIMEIにアクセスした途端にアプリがエラーで落ちます。ユーザがREAD_PHONE_STATEを承認しなければ抜けません。 (ただしREAD_PHONE_STATEの説明文が分かりにくいとか、承認範囲をもっと細分化すべきといった指摘はあります。とりあえず今回の問題とは別です) ・ドコモ謹製メディアプレイヤーがインストールされていないA
もうほとぼり冷めたかな。AppLogの件とAndroidのセキュリティ問題についての雑感。 まず、個人的には個人情報を集めるビジネス自体は「悪しき」ものではないと思ってる。まあオプトインが適切に行われていなかった問題については後述するとして、これはもちろんオプトインが適切に行われていたらの話だ。 以下長文なので引き返すなら今だ。 リサーチ会社は情報を集めたがるし、アプリ作者は開発費を回収したいし、ユーザはタダでアプリを使いたい、全てのプレイヤーが同意のもとに行うのであればこれはwin-winのビジネスだ。 だいたいこれで文句を言うプレイヤーはユーザなわけだけど、オプトインで同意のもとにやるのであれば拒否すればいいだけの話であって、たかだか数ドルのアプリを乞食するために自分の個人情報を売る選択を自らしたんだから文句言うのは筋違いだ。大体ユーザがみんな99セント~数ドルの金をチャリンと払
H.Narazaki (2011年1月27日 16:23) | コメント(0) | トラックバック(0) | Honeycomb SDKのプレビューが出ていたので早速Tuboroidが動作するか見てみたんですよ。 結論から言うと、ListPreferenceの動作が変わっていたために設定画面に入ると落ちました。互換性にはそれなりに自信があったので「ええー!?」とか思ったんですよ。 もしかしたらAPIの使い方を勘違いしていたのかと思いました。ところがですよ、これがですよ、公式ドキュメント読んでもさっぱり分からない。 そこで、どの部分で落ちているかを追ってみたわけですよ。 AA縮小率の設定をするところで「Resize 60% for thread a entry body which seems AA」とかSummaryのとこに表示しています。ここのロジックは前もって「Resize %s
H.Narazaki (2010年12月24日 16:21) | コメント(0) | トラックバック(0) | なんだかIS03が出たあたりからかまたTaskKillerが中興してるね。 相変わらずAndroid界隈は支持者もアンチもオカルト大好きで......。 半年ほど前の蒸し返しになるけど、Androidのタスク管理について。もうあんまり内部の細かいこと書いても分からないだろうから書かないよ。 ■結論から ・TaskKillerは使わない方が良い ・バッテリ消耗が激しい場合、まず設定(特にWiFiやGPSなどの無線周りが使いっぱなしになっていないか)を見直す ・それでもバッテリ消耗が激しい場合はバッテリを食ってるアプリを特定しアンインストールする ■何故TaskKillerを使わない方が良いか Androidでは一度起動したプロセスはなるべく再利用しようとする。これは重い起
H.Narazaki (2010年10月24日 21:56) | コメント(1) | トラックバック(0) | 前回「互換性については注意すべき点を踏まえて設計段階で気を付けていれば、ほとんど問題出ないよ」的なことを書きましたが、今回は「100だの200だの端末出てるのに検証どうするんだ」という話。 ■いきなり結論 結論を言いますと「全検証なんて元より非現実的なんだから、動作確認環境だけ示しておいて動作『保証』はするな、サポートのために手元に置く端末は比較的少なくても可能」ですかね。 だいたい「検証しないとサポートなんて云々」とかいうバカな人が(特に日本では)散見されますが、現実問題としてPCでもガラケーでもiOS向けですら全検証なんてしていないでしょう? また、クオリティアップのコストパフォーマンスとしても割に合いません。 ■その心 「全端末で検証」したからといってバグは無くなら
また2ch落ちてるから迂闊にうpできない今日この頃です。 最近Tuboroidに関するメールは読むたびにエナジードレインされるので半分以上はほとんど読まずに無視する日々です。 Tuboroid_0.2.2.25.4.apk(撤去) 細かい動作の改善や処理速度の改善が中心です。 やや大きな変更点としては各板のスレ一覧をストレージ(内蔵 or SDカード)にキャッシュし最大1時間程度それを使いまわすようにしました。明示的にリロードを押せば更新もできます。一方でスレ一覧をメモリ上にキャッシュしないようにしたので、若干のメモリ節約が期待できます。 このバージョンは暫定版なのでAndroid MarketにはUPしない予定です。 UP版は0.2.2.25.5か0.2.2.26となり以下の変更を加える予定。 ・一部の初心者ユーザに混乱を引き起こしているお気に入りと履歴の"New"ボタンを廃止。
H.Narazaki (2010年10月20日 08:13) | コメント(0) | トラックバック(0) | Android端末が色々出回ってきて端末の多様性が幅広く=差異が大きくなってきている昨今、開発者からの問題提起から外部からのFUDまで、色々と話題に上ることが多くなってきました。 どうであれ話題になるのは良いことなのですが、割合としてFUDの方が圧倒的に多いので、FUDしてる方々がいかに馬鹿であり知ったかで語っているかをdisってみたり、本当はどのような問題が存在するのかを挙げてみたり、その上で実際に互換性の高いAndroidアプリを作るにはどうするのが良さそうかまとめてみたり、そういうことをしてみようかと思います。 一度に書くと長いので、気が向いた時にちょこちょこ書いていきます。 そんなに高度な話をするつもりはないです。 まず基本的なとこ。 ■端末ごとにAndroidバー
H.Narazaki (2010年9月30日 01:15) | コメント(0) | トラックバック(0) | 割と場当たり的にやっていたので一貫したコンセプトのようなものはさほどないのですが、追悼がてら与太話でも書いて自分のために自分の考えをまとめてみたい所存。 みっともない自分語りだし長文なのであまり読む価値はない。チラ裏の日記みたいなもん。 根本的な動機はやはり自分で使うためのものということと、半分は習作的な感じですね。 というのは、俺ってJavaは10年くらい前にちょろっと触った程度でほぼ全くの素人だったんですよ。あ、C++経験とかはそこそこ長いですけどね。皆さんどう思ってるか知りませんが俺ってそれなりの歳で、具体的に言うと所謂プログラマ定年云々にそろそろなるくらいです。 実質的にはAndroidを買ってから始めたようなもので今でJava歴1年チョイ、Tuboroidを書き始め
H.Narazaki (2010年9月29日 17:09) | コメント(0) | トラックバック(0) | もうだいぶ前になりますが、2010/09/22よりhttp://code.google.com/p/narazakis-android-repos/source/checkoutでTuboroidの最終ソースを公開しています。 ソース自体は公開のために手を加えている部分は基本的に有りません。命名則グチャグチャだしコメントとか全然無いです。 ライセンスは俺が作った部分についてはPublicDomainです。例外は以下の通りです。 ・info.narazaki.android.lib.view.XYScrollView.java これはAndroidの基本ライブラリからandroid.widget.ScrollViewとandroid.widget.HorizontalScroll
H.Narazaki (2010年9月10日 16:10) | コメント(2) | トラックバック(0) | 今後のタイムラインですが、現時点を以て開発は中断されます。ただし短期的に問題になる致命的な不具合については修正する可能性があります。 こちらの手違いでクラッシュするバージョンが上がってしまっていたため、更新し損ねて短期に難民化する人が出ないようAndriodMarketには9月一杯は公開した状態で置きます。その後、適当に撤去します。 野良apkの公開も行いません。つまりTuboroidの公式な入手手段はなくなります。適当なタイミングで使用を中止し、他の2chブラウザに移行して下さい。 この件に関する質問は受け付けません。
H.Narazaki (2009年12月29日 10:12) | コメント(0) | トラックバック(0) | "/data/data/" + this.getPackageName() いやいやいやいやいやいやこれはないだろ ......これしかないの? /dataまでは Environment.getDataDirectory().getAbsolutePath() で取れるんだけどそういう問題じゃない...... 何も考えなくてもこれをくっつけたものがさくっと返ってくるものがないと将来この場所変わった時に祭りになるわけだし...... わかった(とおもう) context.getDir("hogehoge", Context.MODE_PRIVATE)) とやるか context.getFilesDir() みたいにやるのが正解みたい
H.Narazaki (2010年8月 6日 03:17) | コメント(0) | トラックバック(0) | aptitude install pptpd で、/etc/pptpd.confを設定。あんまり設定するところはなくて、一番下のところを編集するくらい。 localip 192.168.1.1 # サーバのIPアドレス remoteip 192.168.1.241-238,192.168.1.249 # PPTPで振り出すIPアドレス域 うちは192.168.1.1がサーバ、DHCPで192.168.1.129-192.168.1.140を割り振ってるので被らないようにその後のIPアドレスを9個ほど振ってみた。 パスワードの作成。パスワードは/etc/ppp/chap-secretsに平文で書くのでrootしかアクセスできないように注意。 ユーザ名 pptpd "パスワード
H.Narazaki (2009年12月23日 17:53) | コメント(0) | トラックバック(0) | Serviceクラスを継承する AndroidManifest.xmlに登録が必要 startServiceでIntentを投げると起動する 複数回startされるとどうなる→1回onCreateされて2回onStartされる bindServiceでActivityにバインドされる バインドとは何? AIDLとかいうのでインターフェースを定義するらしいよ。AIDLってなんやねん ServiceConnectionが必要→サービスに接続したり切断したりした時にコールバックを受け取る人っぽい→やることはサービスをActivityから参照できるようにするだけ?→適当にローカルで作ってprivateでもっとけばいいくさ AIDLてなんぞ http://developer.android
H.Narazaki (2009年8月10日 21:54) | コメント(0) | トラックバック(0) | SimpleCursorAdapter.ViewBinderを継承したクラスを作り、それをSimpleCursorAdapterを継承したクラスのコンストラクタでsetViewBinder(new MyViewBinder());のように与える。 SimpleCursorAdapter.ViewBinderは public boolean setViewValue(View view, Cursor cursor, int column_index) を実装する必要があり、列名COL_KEY_1のところをいじりたい時は、cursor.getColumnIndex(COL_KEY_1) == column_indexが成立した時COL_KEY_1のターン!なので、バインド時にC
H.Narazaki (2010年4月13日 00:07) | コメント(0) | トラックバック(0) | あくまでAndroid開発者ではない、iPhoneユーザとか非開発者向けの話です。 前回の後、ブコメで疑問が付いてたのでサービス(Service)の話を簡単に。 Androidにおけるいわゆるマルチタスクは物凄く大雑把に言うと二つの側面があります。 ■ユーザから見た時のいわゆるマルチタスク = Androidの"Activity" = iPhoneOS4.0の"Fast App Switching"(多分) これは作業中のアプリを他に切り替え、一旦バックグラウンドに回したアプリが、またフォアグランドに戻してもまたさっきの状態から再開できる、というものです。 Androidではメモリの空き状況に応じて、アプリをバックグラウンドでスリープさせておく、もしくは状態情報だけを保存して一旦終
H.Narazaki (2010年4月12日 06:59) | コメント(0) | トラックバック(0) | まあ俺は一応iPhoneオーナーではありますが、ほぼ全くと言っていいほど使っておらず、またiPhone開発者ではないのでiPhone開発者の心境なんて知る由もないですし、iPhone開発者になる気も無いし(でも仕事上やむを得ないなら何だって書くけどね)、iPhoneOS4.0ベータ版にも触れてないから詳細は知らないけど(そして今のところ触る気もないけど)、とりあえず雑感。 その前に巷で恐ろしく誤解の多そうなAndroidのマルチタスクの初歩の初歩的な話からします。 メモリをどうやって節約してるとかそういう話はあるのだけど、そもそもそれ以前の人があまりに多く見受けられる(というか酷いことにジョブスも勘違いしているようにしか見えない)ため、物凄く初歩的な話をします。 なるべく非プロ
H.Narazaki (2009年8月 4日 19:39) | コメント(0) | トラックバック(0) | Life is beautiful: GoogleのAndroid向けのアプリビジネスはなぜ魅力的ではないか? WebKit搭載の携帯が普及すればネイティブアプリなんて不要だから携帯アプリはHTML5+JavaScriptでいいんじゃね的な話。 まあある程度はそうだと思う。AndroidもiPhoneも最大公約数的に対応できるんだから、Androidで言うところのActivityに相当する部分はある程度それで足りる。 iPhoneが出て、Androidが出て、PalmPreが出て、みんなWebKitで遠からずHTML5のパラダイス。ずっと言われてきたことだしそれはそれであるだろう。 ただ留意しておくべき点はいくつかある。 iPhoneの初期構想はまさにそれ一本でサードパーテ
H.Narazaki (2009年7月 4日 07:30) | コメント(0) | トラックバック(0) | オーディオについてはaacかmp3だが現実的な範囲ではほぼ何でもOKで、引っかかる可能性があるとすれば超高音質動画でaacの最大ビットレート160kbpsに引っかかる可能性がある?くらいか。 基本的にそのまま再生できると考えて良いと思われる。 ビデオについては問題が多い。 まずflvが一切再生できない。OpenCoreでも現時点で対応予定がないので絶望的。 再生可能なのは.3gpか.mp4で、コーデックはH.263,H.264,MPEG-4が可能。ニコニコのH.264なmp4動画はフォーマット的には再生可能だ、が、実際は再生できない。現在のAndroidでは最大解像度が480x320で600kbps以下に限られる。表示の解像度ではなくファイル側の解像度がこれを越えてしまうとそ
このページを最初にブックマークしてみませんか?
『https://www.narazaki.info/』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く