ラベル プログラミング の投稿を表示しています。 すべての投稿を表示
ラベル プログラミング の投稿を表示しています。 すべての投稿を表示

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/05/02

Processingでくろねこさんを……

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

さてさて。

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

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/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/07

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

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

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

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

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

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

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

2012/01/02

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

【プログラミング初め】

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

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

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

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

秘密鍵の認証画面

2011/12/30

Javaでできるだけ安全にデータを直列化するためのてきとう備忘録

現在絶賛放置中の Web サイトを今後の発信基地として再開発したいと思い立った事がきっかけで、最近は Web サイトの簡易更新支援ツールの開発を考えている。

簡単な HTML ジェネレータと FTP クライアントを一緒にしたようなものを作りたい。

特に、FTP クライアントを作る際には、ユーザビリティのためにアカウント情報(ユーザ名とかパスワードとか)をローカルに保存しておき、できるだけワンタッチでサーバにアクセスできる仕様にしたいなと考えている。

データのセーブとロードは至るところで使いそうだし、今日はそこらへんの実装をステップバイステップで書き残しておこうと思う。

あ、この記事のサンプルコードには FTP 接続の実装例は含まれていないので、そういう内容を期待している方にはごめんなさい。あくまでデータのアーカイブに関する話題に絞ってもそれなりの分量になってしまったので……。