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関係のポストでも出来ればと思ってます。
改めてよろしくお願いします!

2011年11月23日水曜日

Android Themeにあった色を使う

久しぶりのポストです。
最近、Coronaばっか会社ではいじってます。

そのまとめはいつかするとして、Twitter Client作ってて、
色替え考えるとテーマでしていした色指定でアプリを作りたいと。

で、個人的にデフォルトの黒バックは始めたてのアプリみたいな印象で
味気ないのでTheme.Lightを使っていたんですが(多少カスタマイズして)、
うまく、黒が指定出来なかったです。で、試したところ、

 
TextView text = (TextView) findViewById(R.id.text);
text.setTextColor(mContext.getResources().getColor(android.R.color.primary_text_light));
 

Lightを使うとprimary_text_lightが黒という反転現像が起きる。
デフォルトがベースになってるから、背景黒、デフォのテキスト色がprimaryのlightみたい。
やっちゃいけないnamingの見本ですねw

ちなみに、色を使うときに、ContextからResourcesと取り出して、getColorで変換するのも
忘れがちなので、お気をつけ下さい。
#何回かはまりましたw


それにしても、Twitter Clientはアプリで使う要素のほとんどを使うのでかなり勉強になります。
来月にはAndroid版をリリースして、Windows Phone Mango版に取り掛かれそうです。

2011年11月16日水曜日

ブログ名変えました

無精ぶりが出ててやばいす。
FacebookとGoogle+とtwitterで手一杯という。
いつの間にか輸入SNSばっかですw

で、タイトル変えました。
夏に作った会社に年明けから集中して、日本を面白くしようと思ったりしてたんですが、将来に向けての展望が。
将来シリコンバレーで働きたくて、その土台に自社開発のつもりだったんですけど、実は僕は文系出身で、文系でアメリカでIT業界で働こうとすると就労ビザ取れないことがわかりました・・・。

そこで方向転換。

来年勉強して、来年中に学校を決めて留学します。
日本で学校通いながらボクシングして、とも考えたんですが、日本の大学だと文系から理系の3年編入が認められないところが多くて、今更ゆるーい、日本の学校で4年も通うのは苦痛のため、語学の勉強も含め、アメリカに行こうと思います。変換できる単位は変換して、なるべく早い期間で学士を卒業して(資金的にも)、修士に進んで、そのまま向こうで就職しようと思います。

留学ビザだと、その国での仕事に時間制限(目的外行動なので)がつくけど、日本の自分の会社で働いて、なら平気なはずだから、学生やりながらこっちの会社でアプリとかシステムは作る予定です。

というわけで、青年だって大志を抱けよ!という30歳リスタートのブログとなりました。
技術情報中心に取り上げていきたいと思います。

最近はCorona SDKもいじってるので、その辺の情報も上げていこうかと。
気が向いたら見てくれるとうれしいです。


それでは!

2011年10月28日金曜日

ADTプラグインのアップデート

最後です。

というか、SDKとADTがr.15に上がりやがりましたw
とはいえ、SDKとADTの依存性がr.15=r.15になったのと細かいバグフィックスだけみたいですね。それで15に上げるって、ほぼSDK15は欠番になりそうな気も。

それでは翻訳です。

ADTプラグインのアップデート

ADTプラグインの新しいリビジョンが利用可能になると、時折、新しい機能が追加されバグが修正されます。通常、ADTの新しいリビジョンが利用可能になったら都合が良い時になるべく早くアップデートすべきです。

ADTの新しいリビジョンはAndroid SDKツールの特定のリビジョンに依存関係を持つ場合もあります。そのような依存関係が存在する場合、ADTの新しいリビジョンをインストールした上でADKを構成するSDKツールをアップデートする必要があるでしょう。SDKツールをアップデートするにはSDKコンポーネントの追加に記載されているようにAndroid SDK and AVD Managerを利用します。

ADTの各バージョンの新機能やSDKつーるの依存関係について知りたければ、リビジョンの章を一覧をご確認下さい。現在のインストールバージョンを確認するにはEclipseのヘルプ>ソフトウェアのアップデートからインストールされているソフトウェアのウインドウを開いて、一覧から「Android Development Tools」のバージョンを参照します。

下記の手順からアップデートの利用が可能か確認して、可能であればインストールして下さい。
1.ヘルプ>更新の確認を選びます。
 もし、利用可能なアップデートがなければ、ダイアログにその旨表示されるので、それで完了です。
2.もしアップデートの利用が可能ならAndroid DDMS,Android Development Tools,Android Hierarchy Viewerを選んで次へを押します。
3.アップデートの詳細ダイアログが表示されるので次へを押下します。
4.ライセンス受諾を読んで受諾をせんたくしたら完了をクリックします。これでAndroid DDMSとAndroid Development Toolsの最新版のダウンロードとインストールが行われます。
5.Eclipseを再起動します。

もし、アップデート中に問題が発生したらEclipse内のADTプラグインを削除してから、ADTプラグインのインストールの指示に従ってインストールをやり直して下さい。

(英語本文)
Updating the ADT Plugin

From time to time, a new revision of the ADT Plugin becomes available, with new features and bug fixes. Generally, when a new revision of ADT is available, you should update to it as soon as convenient.

In some cases, a new revision of ADT will have a dependency on a specific revision of the Android SDK Tools. If such dependencies exist, you will need to update the SDK Tools component of the SDK after installing the new revision of ADT. To update the SDK Tools component, use the Android SDK and AVD Manager, as described in Adding SDK Components.

To learn about new features of each ADT revision and also any dependencies on the SDK Tools, see the listings in the Revisions section. To determine the version currently installed, open the Eclipse Installed Software window using Help > Software Updates and refer to the version listed for "Android Development Tools".

Follow the steps below to check whether an update is available and, if so, to install it.

Select Help > Check for Updates.
If there are no updates available, a dialog will say so and you're done.
If there are updates available, select Android DDMS, Android Development Tools, and Android Hierarchy Viewer, then click Next.
In the Update Details dialog, click Next.
Read and accept the license agreement and then click Finish. This will download and install the latest version of Android DDMS and Android Development Tools.
Restart Eclipse.
If you encounter problems during the update, remove the existing ADT plugin from Eclipse, then perform a fresh installation, using the instructions for Installing the ADT Plugin.

2011年10月26日水曜日

Android ExpandableListViewのIndicatorを消したい場合

ExpandableListViewのIndicatorが
親要素:setGroupIndicator(Drawable groupIndicator)
子要素:setChildIndicator(Drawable childIndicator)
で設定できるのはご存知だと思いますが、親はデフォルトで矢印(>とか)が
出てしまいます。

これ、子要素他の方法で示す場合、例えば子要素の数を明示的に表示したり
すると要らなかったりすると思います。その時、透過gifで透明の画像を
用意しないといけないのかな、と思ったのですが、setGroupIndicator(null)で
いけました。

NullPointer出るかな、と思ったんですが、大丈夫みたいです。