2011年12月21日水曜日

coronaSDK Tips

Web表示
native.showWebPopup( url [, options] )
native.showWebPopup( x, y, width, height, url [, options] )

・画面内にWebViewとして表示。
native.showWebPopup(  "http://www.anscamobile.com" )


一番単純なパターン。全画面表示。

native.showWebPopup( 10, 10, 300, 300, 
                  "http://www.anscamobile.com", 
                  {urlRequest=listener} )

位置指定、サイズ指定にリスナーもつけたパターン。


これらを使った場合、画面遷移(というか描画?)がある場合は

native.cancelWebPopup()

を遷移時に呼んであげないと、次画面でWebPopupがあった部分が
枠が残って見えなくなります。ちなみにこの現象は実機でないと
確認できませんでした。

いけたんじゃない、これ!?って転送したらガッカリな感じで(´・ω・`)ガッカリ…

また、デフォルトで背景透けてます。黒画面に出したら見えませんw
optionsでhasBackground指定してあげればいいっぽいですね。

ドキュメントにはデフォルト不透明って書いてあるので、最新版は平気かも。


・ブラウザを開く
system.openURL( url )

system.openURL( "http://www.anscamobile.com" ) -- open URL in browser

ブラウザが立ち上がります。画面表示が若干おかしくて、一回ホーム画面が
見えてブラウザが立ち上がった気がします。ですが、アプリは生きてます。

アプリを終了する
ドキュメントにあるのに意外とみつかりにくいこれ。
os.exit()   -- exit app

シミュレーターでやるとシミュレーターごと落ちますw

coronaSDK独自でよく使うのはこの辺ですかねー。
次回はCoronaでできないことを書こうかと。ハマったとこでは解決した点
でしたが、ハード情報とかだとどうにもならない部分です。

2011年12月20日火曜日

Corona SDKでハマったところ

おはようございます!今4時過ぎです。寒いですw

多相性睡眠を始めたので、blogはこの時間に書くことが多いかもです。
http://www.lifehacker.jp/2011/12/111215polyphasic_sleep.html

この辺も自分で動ける強み。
開発者と受験生とプロボクサーを兼務しているので、ひたすら時間が
なかったんですが、睡眠で3〜4時間位時間が増えるとありがたい。
会社員だと仮眠取ったら怒られるところ多いですからね。

あーニポン人はこれだからw

情報収集が全時間できるのも強みです。

正直、エンジニアの仕事の3〜4割は情報収集だと思ってます。
OSとかplatformにも限界はありますが、本当の限界は「知ってるかどうか」
だと思います。できることを知らなかったら、それはその人にとっては
できないこと、ですから。


で、Corona SDKの話

個人的に肝だったのは、binary通信です。
会社が特殊なスタイルだったので、binary通信をしないといけなかったんですが、
Coronaではサポートされていません。基本stringなので、そこに落とし穴が。

会社のスタイルっていうのは、サーバーサイドがJavaだったんです。
今時Javaかよ的な話ですが、CMSがJavaだったんですよね。かつて会社に
SE(嫌いな単語です)がいなかった頃に、某大手システム会社に頼んだため、
システム会社といえば、文系エンジニア業界、たいていJavaが専門、
というのがありJavaになったっぽいです。

で、Javaのbinary通信といえばDataOutput, DataInputなわけで、
そこと通信するためにbinary通信の仕組みが必要でした。

結果から言うと、binary通信は無理。Coronaではbyteまでは使えて、
string.char(文字コード)で一応byteデータは作れます。ただ、中の人が
処理するときにnullバイト(文字コード00)の所で終端コードとみなして
処理を止めちゃうんですよね・・・。

DataOutputの例えばwriteIntは4バイト使ってバイトを表現するわけで、
0xff & (v >> 24)が0になる数値(ほとんどですねw)は最初にnullバイト
入るのでそこで終わってしまいます。

悲しいことに、開始コードとかってwriteIntが多いと思うので、
contentLengthが0になって渡らないんです。通信なら自分でHeaderの
ContentLength設定すればいけそうですが、通信をラップしてる部分で
自動的に設定してるようで、手動で設定しても上書きされます(^_^;

ということで、何かで変換して送って、サーバー側で解釈するしかないです。
そんで、サーバー側からも変換して返すことになりますが(受信もnullバイトで
切られるため)、Coronaというかlua純正のモジュールで変換すると
たいていstringに変換しようとしてnullバイトで切れますw

なので、binary通信周りは結構自分で実装しないとダメですね。
DataOutput,DataInputも含め。


最良の選択はサーバーサイドをJavaにしないことですw

2011年12月19日月曜日

会社終わりました

14日が最終出勤日で、年内で退職です。
来年以降は留学に向けた勉強しながら、個人アプリ作ったり、出来れば執筆したり、
企業や個人のクリエーターと組んでのアプリ作りなんかして留学資金ためたり、
ボクシングの新人王に向けて練習したりする予定です。

とりあえず、年内にAndroidのtwitter clientはリリースしたいです。
年明けにWindows Phone、そしてiOSといけたらですね。
最低限生活できるくらいの収入は確保しなくては・・・。


で、執筆とかできるのかなー、とか不安ですが、まぁ、アプローチしつつ、
ここに色々蓄積できればと思います。目指せ1日1ポストw
あー、しょこたんに鼻で笑われそうな目標だわー

明日から2,3日はCoronaSDK関係のポストでも出来ればと思ってます。
改めてよろしくお願いします!