投稿

11月, 2014の投稿を表示しています

【Titanium】AndroidでMapモジュールが落ちる現象

イメージ
iOS, Androidアプリ開発で、TitaniumのMapモジュールで嵌ったときの覚書。環境: Titanium SDK 3.3.0 GA, Galaxy S2(Android 4.0.3)下記エラーが表示されてマップ表示からしばらくしてアプリ自体が落ちる。[DEBUG] REQUEST: Connection opened to:https://clients4.google.com/glm/mmap/api
[DEBUG] REQUEST: Open Connection
[DEBUG] REQUEST: DRD(65): 62|147
[DEBUG] REQUEST: Close
[DEBUG] REQUEST: Error processing: com.google.maps.api.android.lib6.b.d@416a5da8 not retrying
[DEBUG] REQUEST: Retrying: com.google.maps.api.android.lib6.c.au@418ecd60
[ERROR] REQUEST: ERROR
[ERROR] REQUEST: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
[ERROR] REQUEST:        at org.appcelerator.titanium.util.TiResponseCache.get(TiResponseCache.java:276)
[ERROR] REQUEST:
[ERROR] REQUEST:        at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:211)
[ERROR] REQUEST:        at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
[ERROR] REQUEST:        at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188)
[ERROR] REQUEST: …

TitaniumでWebSocketを使いたくてtiwsをビルドする

イメージ
WebSocketを使ったアプリのイメージが出来たので、Titaniumでtiwsというネイティブモジュールを自前ビルドしてみたときの覚書。環境:Mac OS X 10.9.4, Titanium SDK 3.3.0.GAMarketPlaceでも配布されているのでそこからダウンロードすればビルドは必要ない。今回はtiws自体が2年間更新がなく、何かあれば自分で対応するためにビルドしてみた。まずはGitHubからCloneする。$ cd ~/Documents/Titanium_Studio_Workspace/
$ git clone https://github.com/iamyellow/tiwsFork先でいくつか修正されているようなのでこちらを使うことにした。
$ git clone https://github.com/HilkoLantinga/tiwsiOS用をビルド環境変数を変更
$ cd tiws/ios/
$ vi titanium.xcconfigTITANIUM_SDK_VERSION = 3.3.0.GATITANIUM_SDK = /Users/daiki/Library/Application Support/Titanium/mobilesdk/osx/$(TITANIUM_SDK_VERSION)ビルド実行。
$ ./build.pyカレントディレクトリに「net.iamyellow.tiws-iphone-0.3.zip」が出来る。Android用をビルド前の記事を参考にまずは環境を作る。環境変数を編集。
$ cd ../android
$ vi build.propertiestitanium.platform=/Users/daiki/Library/Application Support/Titanium/mobilesdk/osx/3.3.0.GA/android
android.platform=/Applications/android-sdk-macosx/platforms/android-14
google.apis=/Applications/android-sdk-macosx/add-ons/addon-google_apis-google-14ビルド実行
$ antエラーBUILD FAILED
/Users/daiki/…

アプリ向けのサーバーAPIは「REST」 or 「WebSocket」?

イメージ
アプリとサーバー間のやりとりをREST APIかまたはWebSocketで実装するか迷ったときの覚書。よくまとまっているサイトWebSockets versus REST?(上記サイトの日本語訳)WebSockets vs. REST?今のところ「共存出来るんだから、それぞれの特性を理解して使い分けろ」に落ち着いている感じ。WebSocketでやりとりするメッセージにルール付けして、RESTを表現しようとする動きもある。SwaggerSocket Protocol · swagger-api/swaggersocket WikiNginxはWebSocketをリバースプロキシ出来るし、ロードバランサとしても動作する。NGINX as a WebSockets Proxy - NGINXExpressJSとSocket.IOでセッションを共有出来る。node.js - socket.io and express 4 sessions - Stack OverflowSocket.IOを利用すると名前空間(namespace)で機能分けして、部屋(room)でメッセージを送受信する範囲を制御できる。接続すると自動的に1つの(自分のIDが付いた)roomに参加するので、特定の人だけにメッセージを送信する場合はその人だけが参加しているroomに送信する。Socket.IO — Rooms and NamespacesSocket.IO v1.0からバイナリー送受信もサポートされて、ファイルの送受信も簡単に実装できる。Socket.IO — Introducing Socket.IO 1.0(上記サイトの日本語訳)Socket.IO 1.0の紹介 (翻訳) - from scratchPCを遠隔操作できるデモをPCやタブレットで複数開きながら操作すると感動する。クライアントアプリをTitaniumで実装する場合は、iOS/Androidに対応したモジュールがある。iamyellow/tiws | GitHubTi.Network.Socket.TCPを使うと上記のネイティブモジュールを使わなくても出来るみたい。【Titanium Advent Calendar 2011:五日目】Titanium Mobileでソケット通信 | @masuidrive blogmasuidr…

node-mysqlからnode-mariasqlに乗り換える

イメージ
NodeJSの開発にも慣れたことだし、そろそろMariaDBのスレッドプールに頼らずにnode-mysqlのpool機能を使って、DB接続を使いまわすようにしようと調べたときの覚書。環境: MariaDB Server 10.0.14, node-mysql 2.5.2, node-mariasql 0.1.21調査しているとnode-mysqlより速いnode-mariasqlを発見。node-mysqlの作者が速度改善に取り組んだ記事が面白い。felixge/faster-than-c | GitHub(上記記事の日本語版)C言語より高速なJavaScriptによるバイナリ操作が話題 | A-Listers速度比較ベンチマークNode.JS MySQL client library benchmarksただDB接続をpoolしたい場合は別モジュールと組み合わせて開発する必要がある。This is not issue, but just question... · Issue #43 · mscdex/node-mariasql今のところnode-mariasqlに乗り換えて、MariaDBのスレッドプールに頼ることにした。node-mysqlのpool機能を使って接続を使いまわすようにした方が結果的に速くなるかもしれない。試してみて気付いたこと。Node.js v0.11では動かない。v0.10では動く。 selectした行ごとにasync.mapで非同期処理している中でqueryを投げると「Already Closed」エラーになる。
→ res.on('end')の中でclient.close()を呼び出すと回避できた。確かに速い気がするが、いつでもnode-mysqlに置き換えられるように作っておいた方が良さそう。< 2015/04/09 Modified >
Apache Benchで試してみたところ速度的に大差ない。node-mariasqlで実行したとき数値のカラム(countした値など)も文字列で返ってくるので、やっぱりnode-mysqlで開発することにした。< Related Posts >複数サーバーでセッション管理するためにRedisからMariaDB Cluster(MySQL)に変更CentOS6…