プロフィール

猫好きトム

Author:猫好きトム
モルディブと猫が大好きです!モルディブは10回行きました。
英語ができないのに外資系金融に無謀にも転職して、ITとして10年ほど働き、今は会社を辞めて猫と一緒に一休み中です。趣味は旅行とFXと猫を見ることです!英語の勉強は必要に迫られてずっとやってます。TOEIC935点です。

最新記事

カテゴリ

月別アーカイブ

最新トラックバック

メールフォーム

名前:
メール:
件名:
本文:

検索フォーム

RSSリンクの表示

リンク

ブロとも申請フォーム

QRコード

QR

FC2カウンター

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Node.JS Buffer クラスと JSON.stringify

香港の有人とスマホのアプリ作成の会社をやることになって、すでに3ヶ月が経ちました。
とりあえず、クロスプラットフォームでやること、HTML5, JavaScript, jQuery, enchant.js を使ってゲームの開発をすることを決め、それらの勉強をし、今は iPhone5, Android 間でもマルチプレイのゲームができるように、サーバーサイドの開発をやっているところです。
勉強することが多くてあたまがパンクしそうです。

サーバーサイドでの使用を検討しているは、Node.JS+socket.io+RabbitMQ です。それらを Amazon EC2 のサーバーで動かそうかなと思ってます。

RabbitMQ、最近試しだしたのですが感動です。こんな素晴らしいソフトがオープンソースであるなんて。
Queue も Topic も使えるし。Durable にもできるし。メッセージも Persiste してくれるし。
いうことありません。

Node.js + socket.io もすてきです。web を介した通信がこんなに簡単にできるなんて。いい時代になりました。

ここで本題に入ります。Node.JS の Buffer クラスに関してです。
このクラスは Node.JS でとても当たり前のように使われているものです。

socket.io を今開発で使っていて、socket.emit でこの Buffer クラスを送ろうとしたところ、debug メッセージでとてつもなく長い文字列が表示されたので調べてみたところ、socket.emit は引数のオブジェクトを JSON.stringify して送っているようなのですが、Bufferクラスを JSON.stringify するととんでもないことになるみたいです。

以下の行を Node.JS で実行してみてください。

var buf = new Buffer('test');
console.log(JSON.stringify(buf));


すごーーーく長い数字の羅列が表示されると思います。こんな感じで。

{"0":116,"1":101,"2":115,"3":116,"length":4,"parent":{"0":118,"1":97,"2":114,"3":32,"4":98,"5":117,"6":102,"7":32,"8":61,"9":32,"10":110,"11":101,"12":119,"13":32,"14":66,"15":117,"16":102,"17":102,"18":101,"19":114,"20":40,"21":39,"22":116,"23":101,"24":115,"25":116,"26":39,"27":44,"28":32,"29":39,"30":117,"31":116,"32":102,"33":56,"34":39,"35":41,"36":59,"37":10,"38":99,"39":111,"40":110,"41":115,"42":111,"43":108,"44":101,"45":46,"46":108,"47":111,"48":103,"49":40,"50":74,"51":83,"52":79,"53":78,"54":46,"55":115,"56":116,"57":114,"58":105,"59":110,"60":103,"61":105,"62":102,"63":121,"64":40,"65":98,"66":117,"67":102,"68":41,"69":41,"70":59,"71":10,"72":116,"73":101,"74":115,"75":116,"76":90,"77":232,"78":37,"79":0,"80":0,"81":0,"82":144,"83":72,"84":185,"85":24,"86":5,"87":5,"88":1,"89":1,"90":0,"91":0,"92":0,"93":90,"94":232,"95":38,"96":0,"97":0,"98":0,"99":255,"100":117,"101":24,"102":72,"103":185,"104":48,"105":5,"106":5,"107":1,"108":1,"109":0,"110":0,"111":0,"112":232,"113":39,"114":0,"115":0...........

実際はもっともっと長いです。

次にこれを実行してみてください。

var buf = new Buffer('test');
var str = JSON.stringify(buf);
console.log("data length=", str.length);

結果はなんと!!

data length= 75727

たった4文字(test) が75727文字になってしまいました!!
なので、もし socket.emit でBufferを送ると、4文字が7千5百文字以上になって送られてしまう訳です。
恐ろしいです。

なので、socket.io では Buffer は通常の string に変えてから送るようにしました。

これって当たり前のことで、みんな知ってることなのかな?でもググっても全然みつからなかった....





スポンサーサイト

新しいAndroidアプリ モルディブのリゾート壁紙 の公開

久しぶりの投稿です。

最近ずっと新しい(そんなに新しくないかもだけど)テクノロジーの PhoneGap, jQueryMobile を勉強してたので。
そして、その2つを使って新しいAndroid アプリを作ってリリースしました!

これです。

Maldives Wallpaper icon モルディブのリゾート壁紙

私が実際にモルディブに行ったときに撮影した写真を使った壁紙です! 水中の写真も入ってます。
モルディブ好きの方で、Androidスマートフォンを持っている方は是非使ってみてください! もちろん無料アプリです。

こんな感じの映像が入ってます。
SC20120705-221715.png

SC20120705-221724.png

よろしくお願いします!

しかし、PhoneGap と JQueryMobile での開発、なかなか苦労しました。開発の80%までは簡単だったのですが、残りの20%の細かい部分がなかなか。。。
そのうちそのことについてもアップします。

Tom's Multi Timer Free のアップグレード

Androidの開発は思ったよりも大変なので、開発にかかる労力を減らそうと最近はもっぱらHTML5,JavaScript,jQueryの勉強をしていました。そうすれば同じプログラムがiPhone でも動かせるし。SDKより簡単にアプリ作れそうだし。
ただ、覚えないといけないことがいっぱいあるので、実際にそれらを使っての開発はもうちょっと先になりそうです。

ところで、Android アプリ、トムのマルチタイマーを公開してから数週間が経ちましたが、前回のスピードダイヤルアプリに比べると評判がいいようです。ただし日本以外で
レビューはまだ7つしか入っていませんが、今のところ全て5つ星!ちょっとうれしいです。

レビューの中の1つで、ストップウォッチが付いてたらもっといいのにというコメントがあったので、今回はストップウォッチ機能を追加してみました。
ストップウォッチの画面です。
SC20120609-132829.png




ついでに偶然見つけたスクリーンロックの解除に関するバグも直しました。

このスクリーンロックの解除、及びスリープ状態の解除、なかなかうまく動かなくて。wakelock を使ったり、KeyguardManagerを使ったり、WindowManager のFLAG_DISMISS_KEYGUARD を使ってみたり。死ぬほどググって書いてある方法を全て試してみましたが、それでもうまくいかず、しょうがないので Android のオープンソースから DeskClock なるパッケージのソースをダウンロードして、そのソースコードを参考にしてみたところなんとかまともに動くようになりました。

1. BroadcastReceiver を実装したクラスを作り、その onReceive() で次のように wakeLock を acquire する。

PowerManager pm =
(PowerManager) context.getSystemService(Context.POWER_SERVICE);

  WakeLock wake =
pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK
| PowerManager.ON_AFTER_RELEASE
| PowerManager.ACQUIRE_CAUSES_WAKEUP, "MULTITIMER_WAKELOCK");
wake.acquire(10000);

acquire で 10秒を入れているのがみそ。
2. onReceive から startActivity でタイマーアプリを起こす
3. 起動された タイマーアプリで、同様にして WakeLock を aquire する(これをしないと、BroadcastReceiver のwakeLock が10秒後にリリースされた時点で画面がまたスリープ状態に戻ってしまう。
4. タイマーアプリで以下のようにしてロックスクリーンを解除

getWindow().addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

5. タイマーのアラームが鳴り終わったら、getWindow.clearFlags関数で、スクリーンロックの状態を元に戻す。

getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

6. タイマーアプリのwakeLock を release する。

これでとりあえず動きました。
wakelock じゃなくて、WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON だけで動くなんて書いてあるサイトもありましたが、私が試したところやっぱり Wakelock を使わないとだめでした。

大事なことは、BroadcastReceiver で取得した wakeLockがリリースされる前に、起動されたタイマーアプリでwakeLockを取得するということみたいです。
タイマーアプリがwakeLock を取得する前に BroadcastReciever が wakeLock をリリースしてしまった場合(タイムアウトを指定しなかった場合)、うまく動いたり動かなかったりしました。

ここで書いた方法が本当に正しいかはわかりませんが、とりあえずはちゃんと動いてます。
Android アプリの開発はちゃんと動かそうとするとほんとに難しいです。。。

eclipse Helios に Web Tools Platform (WTP) を入れる

今HTML5を使った開発をAndroid アプリ用にやろうとしてて、使い慣れた eclipse の環境での開発をやろうと思い、調べたところ、eclipse では JSDT (JavaScript Development Tools) などという JavaScript の開発環境のPlugin があるようで、それを入れるには Web Tools Platform (WTP) を eclipse に入れないといけない模様。

それで、私の環境には既に eclipse の Helios が入っているので、そこに WTP を追加する方法です。


  1. eclipse を上げて、ヘルプ --> 新規ソフトウェアのインストール
  2. 作業対象(W) に http://download.eclipse.org/webtools/repository/helios を入れる
  3. Web Tools Plartform (WTP) 3.2.5 を選びインストール (2012/5/30 時点でこれが最新でした)


これでインストールすると、WTPが入りJSDTも入ります。

Android のアプリ Tom's Multi Timer

新しいAndroid のアプリを作ってリリースしました!

Tom's Multi Timer です。

multi timer icon

advertisement.jpg


複数のタイマーを同時に動かせるアプリです。
料理をしていたときに、2つの違う時間を計りたいことが結構あって、こういうアプリがあると便利だなと思ってつくりました。

スマフォがスリープ状態になっていても、時間がきたらスリープモードがちゃんと解除されます。
簡単に作れるかなーと思って作ったのですが、なかなか苦労しました。

タイマーが必要な方は是非使ってください!

無料バージョン : https://play.google.com/store/apps/details?id=org.catfantom.multitimerfree
有料バージョン : https://play.google.com/store/apps/details?id=org.catfantom.multitimer

無流バージョンと有料バージョンの違いは広告のあるなしのみです。

| ホーム |


 ホーム  » 次のページ


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。