2013年10月14日月曜日

Multiple Dygraph in Twitter Bootstrap based Tab

This post is a response to "Multiple Dygraph is not working in Twitter bootstrap based Tab !"

Bootstrap の tab に dygraph.js でグラフを描画している時に、「タブを切り替えるとグラフが正しく描画されない」という問題があります。より正確に言えば、「初期状態で非表示の領域にグラフを描画すると問題がおきる」でしょうか。

参考:Issue 238 - dygraphs - Canvas & container div have zero height and width when parent is invisible.

対策としてはリンク先でも述べられている通り、グラフが格納された div 要素が表示されたら、 Dygraph インスタンスの .resize() メソッドを実行すれば表示はされます。ただし、高さと幅が初期値に固定されてしまいます。これを防ぐために、描画領域の要素から style プロパティを削除しています。

Nginx 最新版を Raspberry Pi にインストールする

WebSocket をリバースプロキシに通す必要がありまして、Nginx を使うことにしました。ただ Raspbian 公式リポジトリではバージョン 1.2 が提供されています。WebSocket のリバースプロキシには Nginx 1.3 以降で対応しているそうなので、以下の方法で最新版をインストールしました。以下の記事が参考になりました。(ほぼそのまま)

/etc/apt/sources.list に以下の2行を追記。

deb http://nginx.org/packages/debian/ wheezy nginx
deb-src http://nginx.org/packages/debian/ wheezy nginx
以下のコマンドを実行。
$ sudo apt-get update
$ sudo apt-get build-dep nginx
$ sudo apt-get source nginx
$ cd nginx-1.4.3
$ sudo dpkg-buildpackage -uc -b
$ sudo dpkg -i nginx_1.4.3-1~wheezy_armhf.deb

2013年10月5日土曜日

ファイルをブラウザにダウンロードさせる (Python, Tornado Web Server)

たとえばCSVファイルをダウンロードさせる場合。

class FileHandler(tornado.web.RequestHandler):
    def get(self):
        self.set_header('Content-Type', "text/csv")
        self.set_header('Content-Disposition',
                        "attachment; filename=\"{}\"".format(filename))
        self.set_header('Content-Length', os.path.getsize(filename))
        with open(filename, 'rb') as fp:
            self.write(fp.read())