思考ノート

技術 iPhone  android アプリ開発 物理演算 OpenGLES 3D 自動化 プロジェクト管理 気になる技術、トレンドを書き連ねるところ。

2009年5月6日水曜日

iTunesで気になったサウンド

You Feel Right (Cornelius Remix) 4:31 If By Yes Chimera Music Release No. 0 ¥150
Seasons of Change 5:46 Mitsuto Suzuki NEUROVISION ¥150

2009年4月22日水曜日

数字メモ

サイトに乗ってた数字を、情報源と一緒にアップします。

2009年1月10日土曜日

Androidを使ってアプリ開発

開発言語はJavaなので、EclipseがIDEとして公認されている。

SDKをDL
http://code.google.com/intl/ja/android/download.html
ダウンロードしたファイルを解凍、好きなところに置く。
documentation.htmlに全部書いてあるのでそこから実行してもOK

エクリプスをDL
http://www.eclipse.org/downloads/
Eclipse IDE for Java EE Developers (162 MB)


エクリプスandroid対応
Help > SoftwareUpdates...
Available Softwareのタブ選択
Add Site... 
下記のサイトを入力
https://dl-ssl.google.com/android/eclipse/
OK押して、出てきたhttps://dl-ssl.google.com云々 の左のチェックボックスをonに。
右上のinstall... ボタンをクリック
next、Iacceptにチェックを入れて、Finishをクリックして終了。
自動的にエクリプスの再起動がかかる。

エクリプスにandroidSDKのパスを通す
Macの場合:Eclipse > Preferences... をクリック、
左の項目中からAndroidを選択し、SDK Location: Brouwse...ボタンを押す。
SDKのフォルダが置いてある場所を選択し、Applyで完了。



SIMカードなしで使う(1
mkdir /etc/udev/rules.d/
50-android.rulesファイルを作成、下記を記述。
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
記を記述。

export PATH=${PATH}:SDKのフォルダが置いてある場所/tools
cd /data/data/com.android.providers.settings/databases
sqLiteを起動
sqlite3 settings.db
insert into system (name,value) values ('device_provisioned',1);
.exitでsqLiteを終了
rebootで端末を再起動して終了
ここまでで、SIM抜きアンドロイド端末認証が可能になる。
ただし、このままではWebにつなげないため、アクティベートができない。

SIMカードなしで使う(2)
コマンドラインから、アンドロイドのWifiセッティングを起動する。
adb shell
am start -a android.intent.action.MAIN -n com.android.settings/.Settings
端末側でMENUボタンを押すと、設定画面が開く。
Wifi設定を行うと、ネットへの接続完了。
画面真ん中上にWifi接続マークが出る。

認証
ホームメニューに戻りロボットアイコンをクリック
googleアカウントを使ってログインしてアクティベート終了!

2008年12月7日日曜日

iPhoneでユーザデータを個別に蓄積するには

DocomoのUIDみたいなものがある。

UIDeviceクラスを使用して、現在のデバイスの共有デバイスインスタンスを取得します。次に、さまざまなハードウェア識別子
から作成されたハッシュ値である、uniqueIDプロパティの値を読み取ります。

とのこと。 個人情報の香り。

2008年11月26日水曜日

Adobe JavaScript (JSX) 覚え書き

覚え書き。AdobeのjavaScriptで、PhotoShopが自動化できるらしい。
形式はAdobeによるJavaScript-eXtendらしく、.jsx。

調べてみると、これが結構強力。
やりたかった事は以下

1、フォルダ内の画像ファイルをすべて展開
2、切り出し位置が書いてある記述ファイルを別途読み込み、数値データ用意
3、数値データで画像を処理
4、指定フォルダに一括書き出し

できるとなー、ファイル更新とか素敵な時間削減になるんだ。

悩む事数時間、
、、、、で、でけた!

ワンクリックで数百枚の画像の最適化処理+アイコン作成+URLリンク作成が瞬殺ですよ。


詰まったのは、画像データ読み込みと、切り出しデータ読み込みの部分。
Adobe独自のJavaScriptAPIを使うのだけれど、情報が少ない。

1、画像ファイル展開
//open()
var folderName = "画像データ置き場";
var fileList = new Folder (folderName).getFiles ("*.*");
for ( docNo = 0; docNo < fileList.length; docNo ++ ) {
var fileRef = new File(fileList[docNo]);
open (fileRef);
}
コレで全部のデータが一気に開く。

2、記述ファイルの読み込み
//readIndexData()
var scriptfile = File.openDialog("読み込むファイルを選んでください","JSX-Script(*.jsx *.js):*.JSX;*.sJS;*.*");

if (scriptfile) {
var myOpenfile = new File(scriptfile);
myOpenfile.open("r");

var myContent;
for (i = 0; !myOpenfile.eof; i++) {
myContent += (myOpenfile.readln()+",");
}
}
データは、今のところExcel表→CSV出力で作成。","区切りでデータが出るのだが、テーブルの右ハジに関しては","が足されないという事が判明。流石だExcel、イライラさせてくれる。 己の無知だとしたら後で訂正。
readln()で読み込んで自分で","を足す。

悩ましかったのは最後のfor~部分。できるだけ適当なデータ形式(長さが不定)を読み込みたかったため、
eofで判定を入れてみた。 ウマー。JavaScript、適当ですな。


最後に、配列を用意し","でsplitした値を流し込んで、完了。
var fileName;
var itemNum = 6;
var alt = myContent.split (",");//カンマ抜きで、分割した文字数を出す
var itemLength = Math.floor(alt.length/itemNum);
fileName = new Array (itemLength);
for (j = 0; j < alt.length; j++) {
index = Math.floor(j/itemNum);
if (j%itemNum == 0) fileName[index]=alt[j];
}

3、画像処理(というか保存画像命名スタイル)
1の方法で画像を開くと、そのまま最前面にあるファイルからフォーカスがあたる。
PhotoShopでの処理は展開しないと動かない。

利点は、展開処理が一斉に行われるので時間効率とメモリ効率がいいこと。
ただし、
・開く順番はフォルダ内のファイル名依存となる。開く順が想定できないので、処理順が特定できない。
・管理するときに面倒くさいので、処理するファイル名は変えたくない。すぐミッシングしていやん。
・連番処理を考えると、画像を足すたびにガンガンずれて処理が嫌になるのが目に見えてる。

そこで、開いているドキュメントの名前を取得し、2で出たファイル名データfileNameと一致をとる。
一致したナンバーを出力ファイルにつける事で、記述ファイルの上から順についている番号で命名できる。

var docNoSum = documents.length; // 開いているファイルの合計数
var docNo; // カウンタ用変数
//Execute()
for ( docNo = 0; docNo < docNoSum; docNo ++ ) {//現在開いてるファイルカウント

var srcDoc = activeDocument; // 現在アクティブなドキュメント
var myName = srcDoc.name.split( "." )[0]; // ファイル名の取得

for (i = 0; i < fileName.length; i++) {
if (myName == fileName[i]) {
alert (myName+"_NameHIT!_"+fileName[i]+"/num_"+i);
contentNo = i;

saveName = "00"+contentNo; // ナンバリング
if (10 <= contentNo) saveName = "0"+contentNo;
if (100 <= contentNo) saveName = contentNo;
}
}

//saveNameが保存時のファイル名連番部分になる。やりたい処理を書く
}

うん、便利。
一致部分はかなりやっつけなので、αレベルのものという事で。
どうなんじゃろ。無駄だな。。 モノが1000枚とかになると、どっちにしてもPhotoShopが死ぬか。
再考の余地あり。


4、保存。 ここではJpegで保存
//createContents()
var saveFileJPG = new File("保存先フォルダ"+ saveName+".jpg" ); // 保存パスJPG

//JPEGで保存
var jpgSaveOpt = new JPEGSaveOptions(); // JPEG保存設定

jpgSaveOpt.quality = outQuality; // JPEGクオリティ
jpgSaveOpt.embedColorProfile = false; //埋め込みカラー設定
jpgSaveOpt.formatOptions = FormatOptions.OPTIMIZEDBASELINE;//フォーマット

srcDoc.saveAs( // 保存
saveFileJPG, // 保存パス
jpgSaveOpt, // JPEG保存設定
true, // 複製保存
Extension.LOWERCASE ); // 拡張子は小文字
以上。


コレ以外に、
・画像サイズを取得して選り分ける
・各辺の最大サイズを指定して、画像のアスペクト比を保ったまま縮小
・指定位置からroundRectのサムネイルを作る
・画像名と表示位置をリストとして出力
・htmlを出力
とかやってみた。 モジュール化して作る癖がついてきたので、複数jsxに分解したいですね。
チェーン形式のメソドが作れたらやってみよう。
それとサーバ越しの処理も。

2008年11月23日日曜日

Xcodeのインクリメンタルサーチ

30分ほど、現実逃避に調べモノをしていたら
いろいろ出てくるもんです。ずっとCやらJavaに触れてきた身としては、こんなのがぽこぽこ出てくるXcodeはすてき。

// [myView pointInside:<#(CGPoint)point#> withEvent:<#(UIEvent *)event#>
// [myView touchesBegan:<#(NSSet *)touches#> withEvent:<#(UIEvent *)event#>
// [myView layer
// [myView bounds
// [myView frame
// [myView setTag:<#(NSInteger)#>
// [myView viewWithTag:<#(NSInteger)tag#>
// [myView center
// [myView zone
// [myView sizeToFit
// [myView subviews
// [myView superview
// [myView mutableCopy
// [myView contentMode

2008年11月8日土曜日

はじめてのmySql

自分一人ではDB、mySqlについてなんにもわからないプログラマが通りますよ。
目的:DBを立ち上げ、アプリ/Webから読み込み、書き出し。要はサーバ構築。

mySqlはこっからダウンロード
http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.51b-osx10.5-x86_64.dmg/from/pick

ここを見てインストール
http://earlybirds.ddo.jp/namahage/inegalog/article.php?id=8

次に、ターミナルからログイン
(マシン):bin (ユーザ)$ /usr/local/mysql/bin/mysql -u root -p
パスワードを入れて、エントリー。
その他のエントリー方として、
/usr/local/mysql/bin/mysql test
なんてのもある。これだと、データベースを名指しでエントリー。そのDB以外には,許可されたものしか見えなくなる。このときはどんなユーザで入ってるんだろう?ちょっとわからん。

DBを作るコマンドは、create database $データベースネーム;
作ったデータベースを見るには、show databases;

セミコロンは必要なのか?→必要でした。反応しないだけじゃなく、それまで連続行として判定される。

grant select,insert,delete,update,create,drop,file,alter,index on *.* to $ユーザ名 identified by '$パス';
ユーザー $ユーザ名を、パスワード $パスで作る。
flush privileges;
内部キャッシュを消去、privilegesは権限オプション

use データベース名;でデータベースをチェンジして使う。

mysql> create table testtable(
-> text1 text,
-> text2 text not null
-> );
テーブルを内容付けて制作。


show fields from testtable;
作ったテーブルを表示する。

insert into testtable (text1,text2) values('name2','value2');
こんな風にテーブルにデータを入れる。

select text1,text2 pref from testtable;
セレクトでフィールドを指定して、もっと限定してみれる。非限定ならば*。
+-------+--------+
| text1 | pref |
+-------+--------+
| name | value |
+-------+--------+
こんな感じ。さらに限定すると、
select text2 pref from testtable;
+--------+
| pref |
+--------+
| value |
+--------+


select * from testtable where text1='検索内容' ;
選択テーブル内で、text1が検索内容と一致するものを表示する。

select text2 from testtable where text1 = '';
text1が空っぽのtext2を表示する。


select count(*) from testtable;
そのテーブルへの登録数を出す。*は別の項目に入れ替え可能、つまり
select count(text2) from testtable where text1 = '';
こんな事をすると、testtable内でtext1が空っぽであるtext2の数を表示できる。


create index testindex on testtable(text1(4));
testindexというインデックスを、testtableのtext1から、それが文字なので4文字という制限付きで作る。

drop

help;でいくつかのコマンド説明が出る。 ここでは割愛

次は、アプリやWebから読み出す仕掛けを作りたいですね。

自己紹介