× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
iOS4以降では、アプリを中断して、別のアプリを実行することが出来る。
中断されてバックグラウンドに行っているアプリは、フォアグラウンドに戻って来るときのため、メモリ上にまだ存在している。 しかし、フォアグラウンドのアプリがメモリを消費してシステムのメモリが足りなくなったとき、 バックグラウンドのアプリのメモリが解放されるときがある。 解放されてしまったアプリを再開すると、アプリの頭から開始される。 これは市販のアプリでもそうなっているものが多い。 (解放されていなければ、中断した状態からアプリを再開できる…iOS4以降対応のアプリなら) デバッグ実行していると、
と出て終了してしまう。 バックグラウンドのアプリが終了してしまったというログが XCode→オーガナイザ→デバイスログ に残るわけではないので、(実行中アプリ自体がメモリ確保に失敗した場合は、Crash とか Low Memory といったログが残るが) 確認する方法はこれしか見つけていない。(他にもあるんだろうか) **以下、仕様的な話** 使用可能なメモリ領域が少なくなったとき、 - (void)didReceiveMemoryWarning が呼ばれる。 または、 AppDelegate の applicationDidReceiveMemoryWarningメソッド や UIApplicationDidReceiveMemoryWarningNotification でも通知を受け取れる。 ただしこれらの通知は、フォアグラウンドで実行中のアプリにしか行われない。 この通知を受け取ったら、使っていないメモリを速やかに解放する必要がある。 キャッシュやイメージオブジェクトなどが望ましい。あとで必要になったときに再生成できるからである。 規定の動作の例として、例えばビューコントローラの場合、visibleでないビューを解放する。 (ビューが解放されたかどうかは、viewDidUnload の処理が呼ばれるかどうかで確認することができる。なお、viewDidUnload は dealloc 後には呼ばれない) なお、メモリ不足をシミュレートする機能が、iOSシミュレータには付いている。 アプリをシミュレータで起動した状態で iOSシミュレータ→ハードウェア→メモリ警告をシミュレート とすると、すぐに前述の MemoryWarning 系の通知が飛んでくる。 参考:iOS Application Programming Guide pp.120~ PR |
NSTimerクラス。
タイマーの機能が使える。 http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSTimer_Class/Reference/NSTimer.html インスタンスを生成するメソッドはいくつかあるけれど、今回はこれを使う。 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 / 60.0 target:self selector:@selector(timerEvent) userInfo:nil repeats:YES]; intervalがタイマー間隔 targetとselectorが、時間が来たときに呼ばれるインスタンスとメソッド。 userInfoはnilにしておく(のが良いとリファレンスにも書いてある) repeatsは、繰り返すかどうか。 タイマーを発動させるときは、 [timer fire]; タイマーを止めるときは、 [timer invalidate]; 以上。簡単。 注意すべき点としては、invalidateを呼び出すと、timerインスタンスが無効になる。 この状態でタイマーを再開しようと思って単に [timer fire]; とすると、落ちてしまう。 この場合、 timer = [NSTimer scheduledTimerWithTimeInterval...]; からやり直さなければならない。 |
iPhoneでフォントを指定するときは、
という具合に、フォント名とサイズ(縦幅)を指定する。 じゃあ、どんなフォントがあるのさ? ということは当然知りたくなる。 そんな人のために、使用できるフォントの一覧を取得する関数も用意されている。
NSStringの配列で、フォント名が返ってくる。これを標準出力にでも出せば、使えるフォントの一覧が見られる。 iOS SDK4.2だと、以下のようになった。 |
「もしドラ」こと
「もし高校野球の女子マネージャーがドラッカーの『マネジメント』を読んだら」 本が出て割とすぐ読んだ。 読んだあと友達に貸し続けていて手元に無いが、 NHKでアニメが始まったので復習がてら見ている。 見逃しても、漫画にしたものをクラブサンデーのサイトでなぜかタダ読みできる。 http://club.shogakukan.co.jp/magazine/SH_CSNDY/animekomik_001/all/ NHKだから何度も再放送すると思うけど。 興味深い話がある。 この本は売り上げ200万部以上のヒットとなったが、 作者はこの本を万人向けに書いたのではなく、 ある一人だけのために分かりやすく書くつもりで書いたんだそうだ。 万人向けに書こうとすると、漫然として誰が読んでもピンと来ない書き方になってしまう。 だれか実在の人を想定して、その人のために書くと、その人が読んでとても分かりやすい面白い本になる。 そしてそれは、その人と近い境遇の人にも響くことになり、結果多くの人に受け入れられるようになる。 これってブログを書いたり、ゲームを作ったりするときにも多いに当てはまることだと思う。 もしドラの場合、その「ある一人」というのはAKB峰岸みなみだ。 知ってる人は知ってることだが、主人公のみなみのモデルが峰岸なのだ。 |
JavaでWebAPIを使う方法について。
「java webapi」みたいな検索で、最初に見つけたページがこれ http://www.my-notebook.net/memo/yahoo-webapi-using-java.html おおまかな流れは、 StringクラスのWebAPIのリクエストURLから、URLクラスのインスタンスを作り、 リクエストした結果をDocumentクラスに格納する ということらしい。 このDocumentクラスというのは、XMLまたはHTMLドキュメントを表すクラス。 http://java.sun.com/javase/ja/6/docs/ja/api/org/w3c/dom/Document.html SAXBuilder().buildというのが、入力ストリームから受け取ったバイト列をXMLドキュメントに変換するメソッド。 http://www.jdom.org/docs/apidocs/org/jdom/input/SAXBuilder.html#build(java.io.InputStream) |
「エンジニアとしての生き方」
元Microsoftの中島聡氏のブログ、Life is beautiful の人気エントリーを再構成した本。 本の冒頭、氏がWindows3.1用のサードパーティのソフトをWindows95で動くように改造するウルトラCのアイデアのエピソードが載っていて、 その話がいきなり面白いのだが、 中身のメインはそういう裏話より、 技術者としての気構えとか、どうキャリアを考えるかとか、そういう話が多く載っている。 起業を目指してるとか、そこまでじゃなくとも、ちょっと意識のある若い(若くなくても)技術者とか、 新社会人とかが読むといいんじゃないのかね。と思う。 日々の仕事をルーチンワークのようにただこなすだけになってしまった人には、 「価値のある人材になるためには何を学べば良いのか、どんな仕事を経験すれば良いのか、どんな人的ネットワークを築けば良いのかを常に意識し続けて自分のキャリアパスを作っていく必要がある」 という言葉をよく聞いてほしいし、 「どんなに優秀なエンジニアでも、プログラムを自分自身で書かずに良い詳細仕様を作ることは決して出来ない」 には気付かされた。 仕様書を仕様担当が書いてこないのは当たり前なんだ。優秀なエンジニアでさえ書けないものを、優秀かどうか以前にエンジニアでさえない人に書けるはずがない、それを期待していることが間違っていたのだ。 (とここまで書いて、改めてブログを見てみたら、この話が一番人気エントリーだった。やっぱりみんな同じことを思ったんだ。) 中島氏が独立して作った会社UIEは、iPhoneアプリとか作ってるそうで、 2つリリースしたと紹介してたが、2つともしっかり持ってたよ。ううむ。 |
キーファイルをもらって、ローカルPCのどこかに置く。
sshでサーバに入るときは、以下のように書く。 ssh -i keyfile accountname@servername ファイルのモード変更するときは chmod 400 ***.ext さて、javaのクラスファイルをサーバに置く には権限を書き換えるので、chmod あと、suする(スーパーユーザ) ファイルをローカルPCからサーバにコピーする しかし、サーバ側からローカルにアクセスするのはとても難しいらしい で、コンソールをもう一つ開いて、ローカル側からサーバにコピーする ただし、直接/var/www/java/bin以下には置けないらしいので、まず/home/accountname/以下にコピーする。 そのコマンドは scp -i ../keyfile file.ext accountname@servername:. になる。最後の . が自分のホームディレクトリ/home/accountnameを表している で、これをサーバ側のコンソールから cp java.class /var/www/java/bin/ こんな感じでコピー。 注意点としては、ファイル名に $ が入るときは、その前に \ をつけてエスケープする必要があるようだ でないと、コピーができない。コピーできないというエラーを吐く訳ではないが、コピーはできていない ここまでできたら、サーバにJavaをインストールする。 で、署名を行う。 やり方は以下のサイトに詳しい。 http://kamakura.cool.ne.jp/oppama/misc/java-plugin-sig.html |
JavaだけでなくC++のコードが使えるようにするには、
AndroidNDKを使います。 NDK = Native Development Kit NDKをダウンロード http://developer.android.com/sdk/ndk/index.html 解凍すると、android-ndk-r5bというフォルダができる。 これをDeveloper下に置く。android-sdk-mac_x86の隣だ。 この場所を$(NDK)とする。 このフォルダの中に、ndk-buildという実行ファイルがあり、これを使うとNDKのビルドができるようだ。 サンプルプロジェクトで試してみる。 $(NDK)/samples/hello-jni に移動し、 % ../../ndk-build で、いろいろファイルが生成される。 libs/下とobj/下の libhello-jni.so というのがキモらしい。 ビルドしたら、Eclipseで New→AndroidProject で、今のhello-jniを選択。 そのまま実行。 これで実機上で動くアプリを確認しました。 簡単だ。 ライブラリ(Cネイティブ)のほうだけを書き換えてビルドしても反映されない。 javaコードのほうを書き換えるなりして再ビルドをかける必要があります。 さて、サンプルを実行したはいいが、もちろんiPhoneでガンガン書いているコードたちを引っ越しできなければならない。 しかしネットで探してもあまり詳しく載ってない・・・? 探し方が悪いのか 自分でいろいろやってみる。 cファイルの書き換え →コンソールで ndk-build -B (必ずリビルドするオプション) →Eclipseでビルドかけて実行 まず、ネイティブ関数を増やしてみる →できた。Javaから呼び出すこともできた cファイルを2つにしてみる →できた。Android.mkの LOCAL_SRC_FILES にも追記すること。 2つ目のファイルの関数をJavaから呼び出すこともできた ゲームを作るには、 イメージファイル、シェーダのロードが必要で、 タッチ入力を受け取ったり加速度センサーを使ったりする必要がある。 これらはAndroidの機能として行う必要があるが、 Androidプログラミングを一度覚える必要がある。 という訳で、NDKはいったん留め置く。 Androidプログラミングを覚える段に入ります。 |
参考ページ
技術評論社。googleで最初にヒット「Android 開発」 http://gihyo.jp/dev/serial/01/androidapp/ 開発環境 OSは、Windows, Mac, Linux何でもOK。 googleの配るAndroid SDKをインストール。 無料。ただし、Androidマーケットを使う際は、最初に25ドル必要。カード決済のみ。 SDKは、ここからインストール http://developer.android.com/sdk/index.html とりあえず、Developer/下に置いた。 フォルダ名はandroid-sdk-mac_x86 ホームディレクトリに.bash_profileを作成し、パスを通す JDKをインストール。 Macは標準装備だそうなので、やることなし。 |
『フェイスブック 若き天才の野望』
これはもう黙って読め。 このスピード感だよ。 |