投稿

[Node.js] http client がリクエスト6回目以後ハングする

Node.js v0.10.x の http.globalAgent は、keepAlive = true, maxSockets = 5 になっているので、同一 Origin に対して5コネクション全てを腐らせるとハングします。 具体的には 公式ドキュメントの http.get のサンプルコード そのままで、複数回のリクエストを行うようにすると6回目以降必ずハングします。 var http = require('http'); setInterval(function () { http.get("http://www.google.com/index.html", function(res) { console.log("Got response: " + res.statusCode); // res.resume(); すれば OK }).on('error', function(e) { console.log("Got error: " + e.message); }); }, 1000); この事情に関しては、 Class: http.ClientRequest の章に丁寧に記述されているとおり、コールバック関数で受ける res は paused readable stream で、on data で内容を読むか、resume で捨てるかどちらかを必ず行う必要があります。 この状況の詳細なログを見るには、以下のように環境変数 NODE_DEBUG に http を入れるとデバッグログが出力されます。 $ node --version v0.10.39 $ NODE_DEBUG=http node foobar.js # 正しい場合の出力 HTTP: outgoing message end. HTTP: AGENT incoming response! HTTP: AGENT isHeadResponse false Got response: 302 HTTP: AGENT socket keep-alive HTTP: outgoing message e...

[raspberrypi] mackerel-agent を簡単に導入する

Raspbian を使っている場合、こちらの公式 GitHub mackerel-agent - Latest release にて、以下のファイルをダウンロードします。バージョンは 2015/07/04 時点のものです。 mackerel-agent_0.17.1-1_all.deb mackerel-agent_linux_arm.tar.gz deb パッケージをインストールします sudo dpkg -i mackerel-agent_0.17.1-1_all.deb この状態だと設定ファイル類は正しく存在するのですが肝心のバイナリが i386 になっていて正常に動作しません。 $ file /usr/local/bin/mackerel-agent /usr/local/bin/mackerel-agent: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped この状態で起動しようとしたとき、/var/log/mackerel-agent.log には以下のような出力がありました。 /usr/local/bin/mackerel-agent: 1: /usr/local/bin/mackerel-agent: <E0>^G^H4<F4>4: not found /usr/local/bin/mackerel-agent: 1: /usr/local/bin/mackerel-agent: ^?ELF^A^A^A^B^C^A<96>^A@<E0>^B^F^PQ<E5>td^F^D<80>^U^De*^D^A^A^F <8C>^D^H^LP<84>: not found /usr/local/bin/mackerel-agent: 2: /usr/local/bin/mackerel-agent: Syntax error: word unexpected (expecting ")") arm のバイナリに上書きします。 $ tar zxf mackerel-agent_linux_a...

Intel Dual Band Wireless-AC 7260 でスリープ解除後 Wi-Fi が繋がらなくなる

イメージ
スリープ解除後 Wi-Fi が繋がらなくなって、再度スリープ、スリープ解除するか、デバイスの有効無効を切り替えないと復帰しない不具合が、 Intel Dual Band Wireless-AC 7260 (Intel® PROSet/Wireless Software and Drivers 17.1) と NEC Aterm WF800HP (ファームウェア Ver1.0.16) の組み合わせで発生していました。 Intel 側も相互運用性に関する問題を認識しているらしく、 この解説 の通りデバイスの詳細設定で、省電力に関する機能 U-APSD 対応を無効とすることで繋がらなくなる現象は 発生しなくなりました。 直っていませんでした。以下の追記のご参照をお願いします。 2015/01/22 追記 U-APSD 無効の設定でもしばらく使っていると切れたままになる現象は起こったので、この機能は原因ではなかったようです。 ドライバのバージョンを 17.13.11 に更新して、設定は U-APSD も含めて初期状態で、2週間ほどスリープを駆使しながら使っているのですがまだ一度も発生していないので、ドライバの更新をお勧めします。 リンク Intel® Wi-Fi Products — TechNote: Access Point Interoperability Issue with uAPSD Windows 8.1* 用インテル® PROSet/Wireless ソフトウェア - インテル® ダウンロード・センター

CloudFlare: サブドメイン毎に Flexible, Full SSL を設定する

CloudFlare の SSL 設定の種類 ( What do the SSL options (Off, Flexible SSL, Full SSL, Full SSL Strict) mean? ) の設定について、ドメイン全体に適用されるグローバルな設定だけでは不十分なときは、Page rules の SSL から個別に Flexible SSL にするか Full SSL にするかなどの設定を行うことが出来ます。 設定画面へは My websites から、右の歯車を押して、Page rules で行けます。対象とするパスは www.example.com/* のように入力すれば OK みたいです。 Page rules の設定は Free plan だとドメインあたり3個までなので、足りない場合は Pro plan に移行する必要があります。

.htaccess を使って利用可能な Apache モジュールの一覧を取得する

共有サーバーなど、httpd.conf や mod_info の server-info を確認できない状況で、組み込まれているモジュールを確認するには、IfModule と Header append を組み合わせると、指定した中で利用可能なモジュールをレスポンスヘッダー X-Module に出力することができます。 # .htaccess <IfModule mod_deflate.c> Header append X-Module mod_deflate </IfModule> <IfModule mod_expires.c> Header append X-Module mod_expires </IfModule> <IfModule mod_rewrite.c> Header append X-Module mod_rewrite </IfModule> <IfModule mod_ratelimit.c> Header append X-Module mod_ratelimit </IfModule> <IfModule mod_setenvif.c> Header append X-Module mod_setenvif </IfModule>

Chrome でダウンロードしたファイル名の一部がハイフンになる

Google Chrome で Content-Disposition ヘッダでファイル名に時刻 (12:34:56) のような文字列を入れてダウンロードするとなぜか勝手に 12-34-56 のようにハイフンになってしまう理由が良く分からなかったのですが、Windows ではそもそもファイル名にコロンは使えないので、安全のため全プラットフォームでファイル名にコロンを含む文字列を設定しないようになっているからみたいです。 変換対象の文字一覧は、 filename_util_unsafe.cc の illegal_characters に入っていて、変換先がハイフンになる理由は、 filename_util_internal.cc の GetSuggestedFilenameImpl でコールバック関数 replace_illegal_characters_callback を第二引数を '-' として呼び出しているからのようです。 ReplaceIllegalCharactersInPath の使い方は変換先を ' ' にしたり '_' にしたりするバリエーションがあったので、必ずしもハイフンに変換されるという訳ではないみたいです。 リンク https://chromium.googlesource.com/chromium/src.git/+/39.0.2171.95/net/base/filename_util_unsafe.cc https://chromium.googlesource.com/chromium/src.git/+/39.0.2171.95/net/base/filename_util_internal.cc

Cocos2d-x で dlopen failed: cannot locate symbol "rand"

EABI は正しいのに Cocos2d-x v3 のアプリが立ち上がらずに即座にクラッシュする場合、ログに dlopen failed: cannot locate symbol "rand" が出ていないかを確認してみてください。 これはどうやら NDK が Android 5.0 (Lollipop) 64bit でしか動かないバイナリを作ってしまっているのが原因のようで、Cocos2d-x で公式に推薦されている Android NDK r9d を使うと大丈夫でした。 リンク Issue 168 - android-developer-preview - libc removed issetugid - A public project for reporting issues with Android Developer Preview releases - Google Project Hosting NDK r9d url - Compiling and linking error when using NDK r10 to build cocos2d-x v3.2 | Cocos2d-x