万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

AdobeHTML5開発 Eg?

http://labs.adobe.com/technologies/edge/

OpenGL ES上に日本語文字 on iPhone

http://dixq.net/forum/viewtopic.php?f=3&t=5904&hilit=opengl+es+%E6%96%87%E5%AD%97+%E5%88%97+%E8%A1%A8%E7%A4%BA
見たがよくわからない

テクスチャを準備してそこに文字を記載するってやりかたであるようだ。

とりあえず文字列を渡してテクスチャのIDを返すメソッドを作成。

GLuint createCharTexture(NSString* str);

某本のgraphicUtil.hへ追加

// 文字を描画するテクスチャ
GLuint createCharTexture(NSString* str){
	
	GLuint texture;

	// 画像ファイルを展開しCGImageRefを生成
	CGImageRef image = [UIImage imageNamed:@"moji_tex.png"].CGImage;

	// 画像の大きさを取得
	size_t width = CGImageGetWidth(image);
	size_t height = CGImageGetHeight(image);
	
	
	GLubyte* imageData = (GLubyte *) malloc(width * height * 4);
	CGContextRef imageContext = CGBitmapContextCreate(imageData, width, height, 8, width * 4, CGImageGetColorSpace(image), kCGImageAlphaPremultipliedLast);
	CGContextDrawImage(imageContext, CGRectMake(0, 0, (CGFloat)width, (CGFloat)height), image);
	
	// 文字列を描画 ※フォントが小さいので100にした
	UIFont *tFont = [UIFont systemFontOfSize:100];
	UIGraphicsPushContext(imageContext);
//	[[UIColor whiteColor] set];白のとき
	UIColor *color = [UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0];
	[color set];
	// テクスチャへ文字を記載(UIKitとCoreGraphics間の問題?座標系のY軸の上下反転される対策)
	CGContextScaleCTM(imageContext, 1, -1);
	CGContextTranslateCTM(imageContext, 0, -512/2);  
    
	CGPoint point = CGPointMake(0.0f, 0.0f);
	[str drawAtPoint:point  withFont:tFont];
	
	UIGraphicsPopContext();
	CGContextRelease(imageContext);
	
	// OpenGL用のテクスチャ生成
	glGenTextures(1, &texture);
	glBindTexture(GL_TEXTURE_2D, texture);	
	glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);

	free(imageData);
	return texture;
}

某iPhoneOpenGL本に出るgraphicUtil.mmへ追加する。

◯使用方法
透明で512×512pxのmoji_tex.pngを用意しXCodeのResourcesに格納。

@interface Hoge : GameBase {
	GLuint mojiID;

Hoge.hファイル

// initなど
mojiID = createCharTexture(@"書きたい文字");

// 実際に記載 drawメソッドなどへ drawTextureは某本のメソッド
drawTexture(100.0f, 100.0f, 128.0f, 128.0f, mojiID, 255, 255, 255, 255);

Hoge.mファイル

とりあえずで、固定の色、大きさになっている・・・・。
今後、色やサイズを指定できるをようにしたい。
位置や文字数もおかしい・・・。


今後テクスチャには画像ファイルを用意せずにやれるならやりたいためにとりあえず、コードの断片をブログに置いておく(注意:今使えない)

// 使えない
CGRect imageRect;
imageRect.origin = CGPointMake(0.0f, 0.0f);
imageRect.size = CGSizeMake(512.0f, 512.0f);
	
// コンテキストの生成
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef imageContext = CGBitmapContextCreate(nil, // 最適なメモリ自動確保はnil
imageRect.size.width, imageRect.size.height, 8,
imageRect.size.width * 4, colorSpace, kCGImageAlphaPremultipliedLast);

CGColorSpaceRelease(colorSpace);
// イメージを取り出す
CGImageRef image = CGBitmapContextCreateImage(imageContext);
GLubyte* imageData = (GLubyte *) malloc(imageRect.size.width * imageRect.size.height * 4);
||<	
(注意:今使えない)

<h3>NSSearchPathForDirectoriesInDomainsってなんだ??(iPhone)</h3>
NSSearchPathForDirectoriesInDomainsが参照しているものを
ブログによっては「特殊ディレクトリ」「文章フォルダ」「Documentsフォルダ」と どこを指してるか不明であった。
私のブログは殴り書きなのでいいが(w)、きちんと明記してほしい。
>|objc|
NSLog(@"writableDBPath:%@", writableDBPath);	

このサイトのコードを実行して上記のログみて理解した。

特殊ディレクトリDocumentsってのは

/Users/【ユーザ名】/Library/Application Support/iPhone Simulator/【シミュレータのバージョン】/Applications/【バージョン名みたいな文字の羅列】/Documents/

でした。

このサイトのサンプルは

// 例の「特殊ディレクトリ」
 NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"sample.db"];
||
になければ、
>|objc|
// "Resources"フォルダへドラッグしたsqliteファイル(sample.db)
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"sample.db"];

からコピーされるって意味。
だから@"sample.db"のコピー元の名前を万が一ミスったら、特殊ディレクトリの中のsqliteファイルをデリートする

SQLite のラッパー「fmdb」が便利

ラッパークラスつくろうと思ったらfmdbがよさげ
http://tokyo.supersoftware.co.jp/tech/iphone/2011/01/082144.html

fmdbをさらに有効活用しているやり方
http://d.hatena.ne.jp/ttshrk/20110225/1298636841

https://github.com/ccgus/fmdb.git

これでfmdbフォルダごと落ちるのでディレクトリ作成しなくていい
↓中身

find fmdb/ -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
|____
| |____.git
| | |____branches
| | |____config
| | |____description
| | |____HEAD
| | |____hooks
| | | |____applypatch-msg.sample
| | | |____commit-msg.sample
| | | |____post-commit.sample
| | | |____post-receive.sample
| | | |____post-update.sample
| | | |____pre-applypatch.sample
| | | |____pre-commit.sample
| | | |____pre-rebase.sample
| | | |____prepare-commit-msg.sample
| | | |____update.sample
| | |____index
| | |____info
| | | |____exclude
| | |____logs
| | | |____HEAD
| | | |____refs
| | | | |____heads
| | | | | |____master
| | |____objects
| | | |____info
| | | |____pack
| | | | |____pack-9f4e6673d6c6fd1ec05fcf07fb91f66af078f279.idx
| | | | |____pack-9f4e6673d6c6fd1ec05fcf07fb91f66af078f279.pack
| | |____packed-refs
| | |____refs
| | | |____heads
| | | | |____master
| | | |____remotes
| | | | |____origin
| | | | | |____HEAD
| | | |____tags
| |____.gitignore
| |____CHANGES_AND_TODO_LIST.txt
| |____CONTRIBUTORS.txt
| |____fmdb.1
| |____fmdb.xcodeproj
| | |____project.pbxproj
| |____fmdb_Prefix.pch
| |____LICENSE.txt
| |____README.markdown
| |____src
| | |____FMDatabase.h
| | |____FMDatabase.m
| | |____FMDatabaseAdditions.h
| | |____FMDatabaseAdditions.m
| | |____fmdb.m
| | |____FMResultSet.h
| | |____FMResultSet.m
#import "FMDatabase.h"
#import "FMDatabaseAdditions.h"
#import "FMResultSet.h"

hoge.hにfmdbの〜.hファイルのインポート忘れずに。〜.mはいらない


C++プログラマのための、最短 Objective-C 入門

C++プログラマでなくても便利

  1. クラスメンバ関数   → インスタンス メソッド

→+-の意味を今日知った
http://kosuke-komiya.info/wiki/index.php?IntroductionObjectiveC

iPhoneアプリとデータベース(MySQL+PHP)連携

http://thinkit.co.jp/article/1210/1
ここに「第2回 iPhoneアプリとデータベースサーバの連携」の記事がある
文字を読むのが煩わしいのであとでコピペで出来るようにまとめる
ソースコードとHOW TOでできるように記事書いてたらなぁ・・

まず、
iPhone向けのプロジェクトはこちらからダウンロードしてください。 」の「こちら」から「PlantRental_r3.zip」ファイルをDL。
解答する

「PlantRental_r3」ディレクトリの中身
・plantrental.phpと「plantimages」・・・PHP
・PlantRentalSales・・・iPhoneのプロジェクト

XCodeでPlantRentalSalesのプロジェクトを開く
Project -> Edit Project Setting -> ポップアップで開いたウィンドウから「Build」タブ選択 -> Base SDKを選択 -> iOS 4.3とかにする

「RentalDB.m」をいじる

#define SERVER_URL @"https://msyk.net:1220/plantrental.php?"
#define IMAGE_ROOT @"https://msyk.net:1220/plantimages/"

→この著者のサーバはもうサーバが死んでる

#define SERVER_URL @"http://localhost/rental/plantrental.php?"
#define IMAGE_ROOT @"http://localhost/rental/plantimages/"

こう書き換える

PHP側では「rental」ってディレクトリを作成して配置する。

XMAPPのMySQLを起動
以下のようにすると「sample_schema.txt」からDBやテーブルやテストデータもろもろが作られる
※「sample_schema.txt」の中身でコメントアウトされているので注意!!
「web」ユーザと「password」パスワードがつく
#CREATE USER 'web'@'localhost' IDENTIFIED BY 'password';
#GRANT SELECT, INSERT, DELETE, UPDATE ON TABLE rental_db.* TO 'web';

CREATE USER 'web'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, DELETE, UPDATE ON TABLE rental_db.* TO  'web';
cd Downloads/PlantRental_r3
/Applications/xampp/xamppfiles/bin/mysql -u root -p < sample_schema.txt 

XAMPPの初期パスワードは空欄みたいなので「Enter password: 」はそのままEnter!