2012年9月9日日曜日

最新 nodejs npm を apt-get でいれる

https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

websocket-server で Chrome からアクセス出来ない問題の解決策


Sec-WebSocket-Accept が無いために Chrome だとエラーがおこる。

(npm -i websocket-server したパス)/nodejs/node_modules/websocket-server/connection.js  を編集

console.log(connection);
var key = require('crypto')
            .createHash('sha1')
            .update(connection._req.headers['sec-websocket-key']
                    + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')
            .digest('base64');
res += '\r\nSec-WebSocket-Accept: ' + key;

377行目の直前に書く。

377  connection._socket.write(res + '\r\n\r\n', 'ascii');


2012年9月4日火曜日

python で関数に大量の引数をまとめて与える。

たとえば、 struct.pack で 200個の長さのlist をバイナリにしたいとする。
でも、 struct.pack は

    struct.pack(format, p1, p2, ...)

なので、単純には p1, ..., p200 の引数を書かないといけない。つまり
    values = range(100)
    packed = struct.pack("<" + "L" * 100, values[0], values[1], ..., values[199])

でもこれはあまりにしんどい。そんなときは, * を使えば展開可能
    packed = struct.pack("<" + "L" * 100, *(values))