2012/10/06

iOSアプリの画面遷移 + データの引き継ぎ(激闘編)

こんにちは。最近、本業がプチ炎上しているたーせるです。どうしてこうなったし。

閑話休題。

今日のお便りコーナーは、筑波の学園都市で暮らす ぬっくんから。

というわけで、ぬっくんが挫折したポイントに僕も挑んでみようと思います(下図は、前画面から引き継いだデータを表示するイメージです)。


あ、言い忘れましたが、ぬっくんは GUI ビルダー(Story Board)がお嫌いらしい。


ので、そこらへんも考慮して Story Board 不使用という縛りプレイで、画面遷移時のデータ引き継ぎを実装してみる事にしましょう。

2012/09/21

【Objective-C++】ARCとstd::shared_ptr

季節は、秋である。


僕はRetina MacBook Proを買って以来、iPhone 5を予約したり天国のスティーブジョブズ様に祈りを捧げたりと大忙しで、ブログの更新をサボりがちになっていた。

さて。

そんなAppleの先進的なプロダクトの中核をなす開発言語と言えば、Objective-Cである。

嘗てはC言語の陰に隠れてマイナーなポジションに在った言語であるが、昨今のiPhoe / iPadの普及に伴い、その知名度もようやく上がりつつある。

というわけで、僕もObjective-Cに再挑戦してみようと思い、荻原剛志著『詳解Objective-C 2.0 第3版』なんぞを買ってきて読んで今に至るわけである。

ここから本題であるが、Objective-Cを用いてプログラミングを行う上でネックなポイントが『メモリ管理』であった。この話は去年の3月頃にも一度書いた気がする。

あれから時代は流れ、Objective-Cではメモリ管理を自動化するための ARC (Automatic Reference Counting) という機能が使用できるようになった。もうretainやらreleaseやら手作業でリファレンスカウンタをいじらなくてもよいのだ。

しかし、例えば僕がiPhoneアプリを開発する事になり、UIまわりをObjective-Cで、ロジックをC++でそれぞれコーディングする事にしたとしよう。この場合、UIからロジックにアクセスするために、Objective-C側は何らかの方法でC++側のオブジェクトを参照しておく必要がある。

残念ながらARC は C++ の生ポインタを自動解放してはくれないため、このままではObjective-C側にC++のメモリ解放コードが混在する穢らわしいコードになってしまう。安全性も下がる。たちまちメモリリークが発生し、またたく間にアプリが落ち、やがてApp Storeのレビューには心ないユーザからの罵詈雑言が書き込まれる事だろう。

だが悲観するには早い。

2011年8月12日(僕の誕生日!)に、C++の最新規格であるC++11がISOに承認され、参照カウンタを自動制御できるスマートポインタという仕組みが正式に導入された。

Visual Studioはどうか知らんが、最新のXcode 4.5ではC++11をサポートしている。これでObjective-C、C++ともにメモリ周りにおける懸念がずいぶん軽減された事になる。

しかしながら、ARCはObjective-Cだけの機能であり、スマートポインタはC++だけの機能である。

ここで、一つの疑問が生じた(ほこ×たてっぽく)。

【Objective-CのARCとC++のスマートポインタは共存できるのか】


というわけで、いろいろ実験してみたよー。今日の記事は備忘録的側面が強いので、何言ってるのか分からんという方は読み飛ばして下さい。

1. まずはARCを使ってみる

#import <Foundation/Foundation.h>
#import <cstdio>

/* 宣言部 */
@interface ObjectiveTercel : NSObject
-(id) init;
-(void) dealloc;
@end

/* 実装部 */
@implementation ObjectiveTercel

-(id) init {        // イニシャライザ
    self = [super init];
    printf("[こんにちは]\n");
    return self;
}

-(void) dealloc {   // ファイナライザ
    printf("[さようなら]\n");
}
@end

/* main関数 */
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        ObjectiveTercel* tercel = [[ObjectiveTercel alloc] init];
    }
    return 0;
}


これは適当なクラスを作り、それをインスタンス化するコードである。

main()関数の内部では、インスタンスをポインタ参照している。動的にメモリをアロケートしているため、従来は明示的な解放コードが必要であった。

しかし、上記のコードを実行してみると、@autorelease ブロックを抜けるタイミングで dealloc が呼ばれ、メモリ解放が行われる。実行結果は以下の通りだ。

[こんにちは]
[さようなら]

もちろん、この手品にはタネがあり、ARCのために導入された構文上の制限を守らねばならないのだが。

2012/09/08

インドの写真あれこれ

昨日も少し書いたが、私はおよそ1ヶ月間ほどインドに滞在していた。というわけで、現地で撮影した写真の数々を一挙大放出したいと思う。



【食べ物篇】

現地の食事はスパイスが効いており芳香が強いため、好みは分かれるかも知れない。ちなみに私の口には合った。

朝食。コーンフレークとトースト
インドといえばやはりカレー
バナナの葉っぱ
インド人は右手だけを器用に使い、食物をぐちゃぐちゃとかき混ぜて食べる。

僕はスプーンを使わせてもらった。

2012/09/07

MacBook Pro (Retina) を買いました

お久しぶりです。

しばらく海外に出張しており、大人の事情でブログの更新ができずにおりました。

今は無事に帰国し、再びのんびり会社員として暮らしております。

さて、このたびMacに乗り換える事にいたしました。仕事上の都合というわけではなく、全くの個人的な趣味です。

とりあえず最低限の初期設定を終え、このブログを書いているところです。



Macに換えて、まず画面が非常に美しい点に驚きました。

ドット感(ジャギー)が全く無い事、フォントが非常に美しい事、画面全体に統一感がある事などなど、今まで使用していたマシンとはだいぶ感性品質が異なると感じています。

こんな駄文ですら拡張高く見えるから不思議です。

一方でキーボードの打鍵感やトラックパッドの使い心地にはまだ戸惑う事もあり、早く慣れたいと思う次第であります。

そんなこんなで、土日は書店でMacとお友達になる本を物色したいなぁと思うたーせるなのでした(今日のわんこ風)。

2012/06/23

データベーススペシャリストに合格しました / ほか

皆様、お久しぶりです。

実は、5月31日に、それまで住んでいた社員寮を退寮し、今は都内のマンションで一人暮らしをしております。 お給料はお部屋作りに消えましたが、その甲斐あってだいぶ住みよい環境が出来上がりつつあります。

そして本日、ようやっと新居のネット環境が整い、ふたたびブログを更新できるようになりました。

さてさて。

このたび、4月に受験したデータベーススペシャリストの合格発表がありました。

結果は、ギリギリの成績で合格でした。


さすがにネットワークスペシャリストに受かったときほどの感動はありませんが、なんだかんだ言って合格率1割台の難関資格。 やはり合格は嬉しいものです。



少し話は変わりますが、来月から初めての海外出張に行って参ります。

それなりに長い期間、日本を離れる事になりますので、またしてもブログの更新が滞りそうな予感がします。

どうか温かく見守って頂けたら幸いです。

2012/05/02

Processingでくろねこさんを……

ちょっと前のお話になりますが、Processing オフ会にて、くろねこさんをはじめ、 P5 ユーザの皆様とお会いしてきました。 とりにくおいしかったです∩( ・ω・)∩

さてさて。

くろねこさんから頂いたメッセージを少し加工して、ちょっとしたエフェクトを作ってみました(→OpenProcessing)。

2012/04/18

いろいろ近況

【DB】

先日、データベーススペシャリスト試験を受けてきました。 午後の出来は微妙ですが、とにかく私なりに力を尽くして解答したので、受かっても落ちても悔いはないなと思っています。



【名刺】

そろそろ私も社会人として小道具を揃えておきたいと思い、かねてより欲しかった名刺入れを購入しました。 試験に耐えた自分へのごほうびです。



【Unity】

紀伊國屋書店で、『Unity ライブラリ辞典 - ランタイム編』 を買いました。 英語ができない私にとって、こういう辞書的な一冊は貴重です。

……しかし残念ながら今の環境では Unity が動かないのでいろいろ欲求不満であります。 パソコンほしい。

2012/04/11

すばらしきこのせかい

就職に伴い、お引越しをしました。今は社員寮でのんびり寮生活を送っています。



【コンビニパスタの美味しさを知った】

いきなりですが、ローソンの「パスタ屋」シリーズがすごい。

コンビニのお弁当だろうと高をくくっていましたが、舌触り・歯ごたえ・喉越しの全てに於いて新食感すぎて、なんだか明日への希望が湧いてきました。

……恐らく故郷の家族はあんなにおいしいパスタを食べた事などないでしょう。 初任給でご馳走したいほどです。



【テクニカルライタの山下真吾さんに会う】

先日、高度情報省処理技術者区分の著書を刊行されている山下真吾さんにお会いする機会がありました。

山下真吾さんといえば、昨年のネットワークスペシャリスト受験でお世話になった 『情報処理教科書 ネットワークスペシャリスト 2011年版』 の著者さんです(参考記事)。

実際にお話ししてみると、山下さんは人当たりがよく、明朗快活で、非常に頭の回転が速い方だと感じました。 私にとってよい刺激になるお話をたくさん伺う事ができ、たいへん有意義なひとときとなりました。



【Processing オフ会に参加します】

p5info さんが、『Processing OFF TOKYO ~ たーせるの東京侵攻を祝して』 というイベントを企画して下さいました。 なんか縁起でもないサブタイトルになっていますが気にしない∩( ・ω・)∩

東京都の皆様と交流できる事を楽しみにしております。 よろしくお願いします。

2012/03/28

鍵の返還

学生証、工学部棟のセキュリティカードキー、研究室の鍵、そして、アパートの鍵を、それぞれのあるべき場所に返還しました。

それまでの“僕の住処”は完全に空っぽになり、 僕は、僕のあるべき場所へと帰ってきました。

2012/03/26

“終わり”の後

“終わり”の後は、“始まり”の前へとつながっている。

そんな気がする。

2012/03/25

明日への飛翔 (学生篇最終回)

岡山に出張している間に、晴れて学位を取得いたしました。これで私も社会人です。

更新頻度が落ちても僕は相変わらず元気いっぱい。 最近は Processingの最新刊 『ARプログラミング ~Processingでつくる拡張現実感のレシピ~』 『Processingでかんたん Androidプログラミング』 の2冊を購入し、興味の赴く方へと猪突猛進しております。
 ちょっと身辺整理が手こずりすぎてばたばたしていますが、4月からは新番組 『社会人篇』 が始まります

これからも、変わらぬご愛顧・ご愛読のほど、どうぞよろしくお願い申し上げます。

2012年3月吉日 たーせる

2012/03/20

ラストスパート

岡山大学さんへ行ってきます。 僕が最後の最後にやりたかった事をやり遂げるために。

2012/03/14

Processingでスカイボックス ほか

【ぐりぐり動かせるパノラマ背景】

ゲームづくりにおいてリアルなフィールドを構築するために、「スカイボックス」と呼ばれるパノラマ背景が使用される事があります。

これを Processing で再現してみようというのが今回のテーマです。実際は、単にカメラをテクスチャつきのポリゴンで囲っただけなのですが、演出次第ではそこそこ使えるかな……という印象です。

なお、実際に動作するサンプルはこちらです。マウスでぐりぐり視点変更ができますよー。

画像をクリックすると、サンプルに飛びます
ちなみに景観は Terragen というソフトウェアで作りました。 Processing 側ではそれらを繋ぎ合わせているだけです。

本当はこれを使ってもっとカオスなものを作る予定でしたが、いろいろ間に合わなかったので今日はこれだけですごめんなさい。



【データベーススペシャリスト、受けます】

どさくさに紛れてデータベーススペシャリスト試験を受ける事になりました。

ここに書こうかどうしようか迷いましたが、それなりにプレッシャーになるので宣言してみる事にしました。これで、たとえ落ちても“なかった事”にはできなくなります

とりあえず肩慣らしとして午前問題から攻略する事にしましょうか。……試験までに間に合うかな、かな。

2012/02/28

ProcessingでXファイルを解析(スタティックメッシュ篇その2)

昨日の続きです。ほんのちょっと進歩してマテリアルを反映できるようになりました。

こういうかっこいい戦車も……
Metasequoia にプリセットされている「Tank」
ちゃんと質感を保ったまま Processing に持ってくる事ができました。やったー!
Processing で表示した結果
※ というのは大ウソで、法線無視、フラットシェーディング一択という男らしい割り切り方をしています。P3D モードにおけるレンダリングのクオリティならばこのくらいばっさり行っても許容範囲な気がします(おい

2012/02/27

ProcessingでXファイルを解析(スタティックメッシュ篇その1)

今日は、DirectX で標準的に使用されていた X ファイルを読み込んで、Processing で表示してみたいと思います。 すなわち ——
Metasequoia にプリセットされている「日本橋麒麟像」
こんなふうに任意のモデリングソフトで作成したデータを、

上図のように、Processing でそのまま使えるようにしてしまおうという試みです。

しかし僕がアホすぎるせいで、まだ静止した 3D モデルの幾何形状だけしか読めていませんごめんなさい(アニメーションはおろか物体の色付けやテクスチャも無し)。

2012/02/24

おもちゃであそぶ

今日はおとなしくおうちで遊ぶ事にしました。

2012/02/23

Processingでスキンメッシュアニメーション

【とにかく、ぐにゃぐにゃ】

今まで黙っていましたが、実はこれまで Processing で表示させていた立体オブジェクトは、そのほとんどが剛体でした(オーロラは例外)。

というわけで、ブログをご覧の皆さんに僕が剛体しか出せない事がバレる前に、スキンメッシュという謎の技術を使って時々刻々と変形する形状の表示に挑戦してみたいと思います。

……と見せかけて、僕は根性無しなので、小規模のサンプルを作ったところで力尽きました⊂⌒~⊃。Д。)⊃


たいへん気色悪い物体がぐにゃぐにゃ動いているのがお解りいただけたかと思います。

スキンメッシュは、その名の通り表皮っぽいメッシュの事で、ボーンと呼ばれる仮想的な剛体の動きに追従して頂点が変形します(→OpenProcessing)。

この記事でも手法を詳しく紹介しようかと思いましたが、理論自体は大した事ないくせに解説がやたら面倒なのでやめました。理論の詳細は『ゲームエンジンアーキテクチャ』の第11章や『MESH GURU with Direct3D 10/11』 の第12章あたりにざっくりまとめられていますし、Web にも良質なドキュメントがあるのでそちらを参照してください(逃

ただ、OpenProcessing で “Skinning” や “Skin Mesh” で検索してもそれっぽい先行作品がヒットしなかったので、恐らく今回のスキニングは OpenProcessing 史上初の試みだと思います。えっへん。

2012/02/20

Processingで魔法使いの組分け帽子を作る

今日はちょっとしたパターン認識をやってみようと思います。あ、タイトルは釣りですよ。

とりあえずデモ動画をご覧ください。



こんな感じで、ある「特徴」を手掛かりにして正体をつきとめる処理は「パターン認識」と呼ばれており、文字認識などに応用されている技術です。

現在に至るまで、様々な認識手法(というか識別手法)が提案されていますが、今日はフィードフォワード型のニューラルネットワーク(3層パーセプトロン)にフォーカスを当てたいと思います。

2012/02/18

ProcessingでAI

【Boid 理論を眺める】

くろねこさんが Boid 理論を使ってパーティクルを動かしていたのが気になって、僕もちょっと背伸びをして大風呂敷を広げてみました。……あ、タイトルは釣りです

Boid 理論とは、団体行動を取っているような「群れ」を再現するシミュレーションです。ご存知ない方は、先入観なしに以下の動画をご覧ください。

2012/02/16

ProcessingとArduinoをくっつける

【本日のお便りコーナー】

twitter4Jかー。この前購入してたarduino使うのかと思ってた∩(・ω・)∩2012年2月16日 9:7 via HootSuite

—— というわけで、今日は Processing と Arduino を合体させてこんなの(↓)を作ってみようと思います。わー(歓声) ぱちぱち(拍手) ……あ、ちなみにこれの正体は最後に明らかになりますよ。