投稿

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

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

イメージ
WebSocketを使ったアプリのイメージが出来たので、Titaniumでtiwsというネイティブモジュールを自前ビルドしてみたときの覚書。 環境:Mac OS X 10.9.4, Titanium SDK 3.3.0.GA MarketPlaceでも配布されているので そこからダウンロード すればビルドは必要ない。 今回はtiws自体が2年間更新がなく、何かあれば自分で対応するためにビルドしてみた。 まずはGitHubからCloneする。 $ cd ~/Documents/Titanium_Studio_Workspace/ $ git clone https://github.com/iamyellow/tiws Fork先 でいくつか修正されているようなのでこちらを使うことにした。 $ git clone https://github.com/HilkoLantinga/tiws   iOS用をビルド 環境変数を変更 $ cd tiws/ios/ $ vi titanium.xcconfig TITANIUM_SDK_VERSION = 3.3.0.GA TITANIUM_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.properties titanium.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-goo

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

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

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 Pos