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 を合体させてこんなの(↓)を作ってみようと思います。わー(歓声) ぱちぱち(拍手) ……あ、ちなみにこれの正体は最後に明らかになりますよ。

2012/02/15

ProcessingとTwitterをくっつける

くろねこさんが、昨日のサンプルをさっそく fork して下さいました(→くろねこさんの記事)。

パーティクルの動きの改良に加え、ソースコードもリファクタリングされて品質が上がっています。さすが!



さてさて、今日は Processing を Twitter に組み合わせてへんなのを作りますよー∩( ・ω・)∩

なんか、テキスト領域に Twitter のユーザ名を入れると、フォローしているおともだちが3次元空間を漂うというなんとも愉快なスケッチです。


実は、ほとんど昨日のソースコードを流用しただけの手抜き更新というのは内緒だよ。

2012/02/14

Processingできらきら3次元パーティクル

今日はこういうものを作ります。たぶんきれいですね。


このスケッチは、いくつかのテクニックを組み合わせて作ります。

恐らく、Processing ユーザにとっては馴染みの薄いものもあるかと思いますので、今日はそれらをひとつひとつ紹介しつつ完成形に持っていこうと考えています。

2012/02/13

【予告】 Processingで講演します(?)

少し先のお話ですが、来たる3月20日~23日に開催される電子情報通信学会・総合大会に参戦する事になりました。講演分野は『パターン認識・メディア理解』だそうです。

今回は「Processing で『立体おえかきツール』を作ってみたよ」みたいな内容です。とりあえず予告篇のようなデモムービーをてきとうに作ったので、こっそりご紹介しておきますね(※注意:音が鳴ります)。


あまり大規模な制作物ではありませんが、もしよろしければどうぞおたのしみに。

2012/02/09

Arduinoはじめます

研究が一段落して論文を書き終えてしまったためか、なんとも言えない虚脱感に襲われています。

そこで、新たな生きがいを探すべく、Arduino というおもちゃを買ってきました。

入門用の『Arduinoをはじめようキット
Arduino は、自分で回路を組み、マイコンにプログラムを送り込むと、とってもいいものができる素敵な装置なのだそうです(※ 厳密には装置の名称ではないのだけど)。

電気電子な人じゃなくても電子工作ごっこができ、マイコンボード本体も中高生のお小遣いで買えてしまう程のお手頃価格。 これなら僕にもできるかな。

2012/01/28

C++と仲直り計画: Cの構造体をスマートポインタで扱う (同時上映: ラムダ式もほんのちょっとかじる)

いきなりですが今日は boost::shared_ptr を構造体に対して用いるお話です。ここまで読んで、『何を今さら』と思った方はブラウザをそっと閉じると幸せになれますよ。

あと、今日の日記は解説というよりは備忘録的な色が強いので、僕と波長が合わないとなかなか内容に共感して頂けないかも知れません。そういう方もブラウザをそっt(ry


2012/01/25

Processing.jsで作った「ひこうき」を高速化してみた

以前、Processing.js で『3D ひこうき』を作りました。

これは P3D モードのサポートがアレな Processing.js 環境でも、なんとか 3D っぽいグラフィックを出そうというチャレンジだったのですが、速度的な意味で非常に残念なものができあがっただけでした。

今回は、ループの中でオブジェクトを new しないように心がけたり、描画関数の呼び出しを削減したりといろいろ高速化を試みました(→ OpenProcessing)。


うーん……。

僕の iPhone 3GS だとまだカクカクしています。

もうちょっと形状を単純にするとかなり速く動く気がするのですが……。

2012/01/23

Processingでてきとう3次元バンプマッピング

学位論文の方が一段落しそうなので、空き時間を使ってバンプマッピング(のようなもの)を実装してみました。ちょっとしたリハビリです。

バンプマッピングとは、ポリゴン上の凹凸を擬似的に再現する技術で、テクスチャマッピングでは表現できない質感表現を実現できます。

実際に動作するデモは OpenProcessing で公開していますので、是非ご覧ください。

2012/01/19

三次元・直線・最小自乗法(vs. ぷで)

ぷでさんが面白い記事を書いていたので、僕も同じテーマで書いてみる事にしたよ。

「3次元における直線 \(L_{i}\: \left( i = 0,1,\cdots, n-1 \right) \) の尤もらしい交点 \( \vect{p} \) を最小自乗法で求める」

これは、位置と姿勢が既知である多視点画像における対応点3次元位置を推定する際にしばしば用いられる議論だ(下図参照)。3次元空間中では一般的に複数の直線の交点は一意には定まらず、いわゆる “ねじれ” の関係になる。その際、できるだけ誤差を抑えるために、各直線が最接近する点を採用する事が望ましい。

複数カメラの視線を基に被写体の3次元座標を得るイメージ.
カメラ光学中心から各対応点を貫く直線の交点が3次元位置となる.

2012/01/08

素晴らしき日々へ

カルボナーラを食べるとカルボニル基という言葉を思い出す。

ボロネーゼを食べると、ドロネー図を思い出す(ついでにボロノイ図も思い出す)。

普段からこのように突飛な方向へと思考回路がスイッチされてしまうため、話し相手はそれなりに苦慮しているらしい。申し訳ない。



今日は親友の祥月命日だ。

本当は一緒に連れて逝って欲しかったのだが、僕は生きることになった。

死ぬというのはどういう事なのだろう。僕はあまり宗教への頓着がないせいか、恐らく『生まれる前と同じ世界』に還るのだろうと考えている。



最近の気分転換は専らマリオだ。

小さい頃から高いところがダメで、たとえゲームであっても足が竦む。操作をミスしてマリオが高所から落下する一瞬、心臓がドキっとする。

まぁマリオにしてみても、こんなヘタクソにプレイされているせいで何度も死ぬ羽目になって、さぞかしいい迷惑だろう。



『はじめてのおつかい』は微笑ましい。

僕は、はじめておつかいをした日の事も、はじめて補助なしの自転車に乗れるようになった日の事も、よく覚えている。

ついでに、はじめて C 言語で printf() 関数を使った日の事も。

2012/01/07

相対参照を適当に考慮したHTMLファイルの移動

1月2日の続きで、自分用ひとこと日記支援システム(?)的なものをだらだら作っています。

ちなみに前回は、「HTML ファイルを生成する仕組みを作ろう」という、なんともややこしい話をしていたのでした。
※ ちなみにあの後、くろねこさんからも非常に有益なアドバイスを頂きました。記事になるところまでできたらここに書きたいと思います。
 せっかくですから、ひとこと日記を単に書き溜めるだけでなく、月別のアーカイブページなども生成できれば、情報が整理できて閲覧性も高まるのではないかと考えました(というか、至って平凡な思いつきですが)。

さて、ここで問題になるのが HTML に記述された相対参照の扱いです。

もしも HTML ファイル中に  
<img src="baka/aho/img.png" /> 
とか、 
<a href="../../hoge/piyo.html" /> 
みたいな相対参照が仕組まれていた場合、何も考えずに階層の異なる別ディレクトリ移動・複製すると、リンク切れを起こしてしまうのです。

どうにかしたいですよね。

しかし、この問題を完全に解決しようとすると果てしなく面倒なので、実用上それほど問題が出ないレベルで適当に対処しようというのが本日のテーマです。

2012/01/02

冬休みのてきとうアプリケーションづくり

【プログラミング初め】

ちょっと前に『作りたい』とか言っていた Web サイトの更新支援ツールの開発をてきとうに始めました。

手始めに前回のネタを GUI 化。

秘密鍵の設定画面
秘密鍵の設定は初回起動時だけ(ただし、変更は可能)。

次回の起動時からは下のような認証画面が表示されるようにしました。 GUI めんどくさい。

秘密鍵の認証画面

2012/01/01

明けましておめでとうございます

旧年中は大変お世話になりました。

おかげさまで、旧年中は 47,000PV を超えるアクセスがありました。

本年は、より一層のご愛顧のほどよろしくお願い申し上げます。

2012年1月1日 たーせる