2011/09/09



追記
anekosさんから、Chromeは「--disk-cache-dir=r:/ram みたいにオプションつけて起動すれば、キャッシュディレクトリ指定できる」と教えて貰いました。毎度指定してないとダメらしいですが、ショートカット等で運用すればjunction要らない子ですね。

IEとFirefoxに関しては難しい事はしないし誰でも出来る。この記事読む時間も合わせて10分程度あればIE、Firefoxを高速化出来る。Chromeは少し敷居が高いけど中級者レベルなら出来るはず。

以下、Windows初心者は最後まで読んでからやるべし。あと動作がおかしくなったとしても自力で直せる片が対象です。
まず、これを入れる。
ドライバーダウンロード RAMDISK ユーティリティー | BUFFALO バッファロー

お客様が以下のダウンロードソフトウェア使用許諾契約に同意する場合にのみ、お客様はダウンロードソフトウェアをダウンロードし、またはこれを使用することができます。ダウンロードソフトウェア使用許諾契約をよく...

http://buffalo.jp/download/driver/memory/ramdisk.html
これは、メモリをRAMDISKとして扱うソフトウェアで、通常の書き込みオーバーヘッドの多いディスクストレージに比べて高速にアクセス出来る仮想ストレージを提供するソフトウェア。

これをインストールすると、BUFFALO RAMDISKユーティリティとういソフトウェアがインストールされる。起動して「かんたん設定」ボタンを押すと、適当なドライブ(私の場合はFドライブになった)にメモリから割り当てられたRAMDISKが作られる。要再起動。
choppa1
実はこれだけで、既にIEとFirefoxが劇的に高速化されている。このソフト、以前まではキャッシュの設定を自分でやる必要があったが、最近は自動でやってくれる。
再起動後に詳細設定を見ると分かるが、IEのTemporary Internet FilesがFドライブに配置され、FirefoxのcacheディレクトリもFドライブに設定される。
choppa2
Google Mapsなんかで試すとサクサク動くようになるのが分かると思う。

最後にChromeだが、Chromeはキャッシュフォルダを任意の場所に移す事が出来ない。
そこでWindows2000以降で使えるハードリンクを使う。
WindowsXPに付属のfsutil.exeを使いたくなるだろうが、実はfsutil.exeはターゲットフォルダがNTFSとして認識されないとハードリンクが作れないという制限がある。そこでjunctionというツールを使う。
Junction

Windows 2000 以降では、ディレクトリのシンボリック リンクをサポートしています。これにより、ディレクトリをコンピューター上の別のディレクトリのシンボリック リンクとして使用することができます。...

http://technet.microsoft.com/ja-jp/sysinternals/bb896768
これを C:¥Windows¥System32 にコピーしておき、以下の手順で実行します。
以下を実行する前に全てのGoogle Chromeを終了しておいて下さい。

エクスプローラでCacheフォルダを移動する

WindowsXPだと以下のフォルダ C:¥Documents and Settings¥[ユーザ名]¥Local Settings¥Application Data¥Google¥Chrome¥User Data VistaやWindows7の場合は以下のフォルダ C:¥Users¥[ユーザー名]¥AppData¥Local¥Google¥Chrome¥User Data に移動し、Cacheというフォルダがある事を確認する。そのフォルダを上記のツールで作成されたドライブ(上記の例だとFドライブ)にカットアンドペーストする。心配な人はどこか別の場所にバックアップを持っておけばいい。ただしキャッシュなので飛んでもそれほど重大じゃないと思う。なお、バックアップは誰にも見えない場所にしておいた方がいい。
僕の場合は F:¥Cache というフォルダ名が汎用すぎて嫌だったので、エクスプローラから F:¥ChromeCache とリネームした。

コマンドプロンプトからジャンクションを作る

コマンドプロンプトを開き、上記の場所に移動し、junctionコマンドを実行する。
WindowsXPだと以下のコマンド cd C:¥Documents and Settings¥[ユーザ名]¥Local Settings¥Application Data¥Google¥Chrome¥User Data
junction Cache F:¥ChromeCache
VistaやWindows7の場合は以下のフォルダ cd C:¥Users¥[ユーザー名]¥AppData¥Local¥Google¥Chrome¥User Data
junction Cache F:¥ChromeCache
なお、この僕は上記で言った様に F:¥ChromeCache をChromeのキャッシュフォルダにしたが、他のフォルダ名にした人はコマンドの内容も変更して下さい。

あとはChromeを起動するだけ。

僕が触った感触だと、IEはかなり速くなり、FirefoxとChromeはそこそこ速くなる感じ。

ちなみにIEは、「インターネット オプション」にある「全般」タブで、タブの設定を開き、「クィック タブを有効にする」と「タブ グループを有効にする」のチェックを外しておくとさらにチョッパヤになる。
choppa3
なお、Chromeに関しては手動でジャンクションを作ったので、もし元に戻されるのならば、ジャンクションも元に戻すのを忘れない様にして下さい。

RAMDISKを作るソフトウェアとしては、「Gavotte Ramdisk」というソフトウェアもありますが、上記で説明したBUFFALO RAMDISKユーティリティの方が簡単に試す事が出来ます。
Posted at by



2011/08/24


  • Vimが無いと俺はコーディングも出来ないのかよ
  • タイピングだけは一流のところをみせてやるぜ
  • ネオコンプリートフラシュだぜ 信じらんねぇ
  • 補完候補は見える、でもこれじゃだめなんだろ?
  • Vimの補完実装は晴れ時々大荒れ いいね、いいUNIX臭さだよ
  • vimrcを…vimrcを書き換えるんだ…!
  • typoしてる・・・分かってる! うぅぅわあああああ!!
  • ifとendifのネストがあってない!!うぅうわあああああああ!!!
  • あああpatchラッシュがああああ!!うっっごけええええ!!
  • ああー!ひどいっ!
  • 直れ!直らんかああ!
Posted at by



2011/08/04


最近はクラウドサーバ等、割と色んな所で見かける様になったuWSGIですが...
uWSGI

uWSGI is a fast, self-healing and developer/sysadmin-friendly application container server coded in pure C.

http://projects.unbit.it/uwsgi/
Perlだとhirataraさんが書いた記事や
Hokkaido.pmでuWSGIについてLTした - a geek born in Tomakomai

uWSGI はデフォルトではhttpではなくuwsgiプロトコルを喋るので、uwsgiプロトコルを喋れるフロントエンドを立ち上げます...

http://d.hatena.ne.jp/hiratara/20110718/1310950381
Plack::App::uWSGIが参考になります。
hiratara/p5-Plack-App-uWSGI - GitHub

Plack::App::uWSGI - a PSGI frontend of uwsgi.

https://github.com/hiratara/p5-Plack-App-uWSGI
こちらはuwsgiに付属のpsgiプラグインを使っています。なお、uwsgiのcontribフォルダにはPlack::Handler::Uwsgiが同梱されているので、例えばnginx.confに server {
  listen 8082;
  location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:9999;
  }
}
と書いておき use Plack::Handler::Uwsgi;

my $app = sub {
    return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello World' ] ];
};
Plack::Handler::Uwsgi->new(host=>'127.0.0.1'port=>9999)->run($app)
こんな感じに走らせると、"http://server:8082/" で"Hello World"が表示されます。もちろんフロントエンドであるnginxの設定を弄ればキャッシュやタイムアウトも変更出来るという仕組みです。

ちなみにcontribフォルダにはrubyやjavaのコードも置いてあります。つまりuWSGIプロトコルを実装すれば、言語を問わずフロントエンドをnginxとしたワーカーが作れるって事ですかね。

Go言語も仲間に入れてよ!って事でuWSGIリスナを書いてみました。
mattn/go-uwsgi - GitHub

uwsgi implement for go

https://github.com/mattn/go-uwsgi
あくまでリスナという位置づけなので、unixドメインソケットのファイルや、tcpソケットなど、goでnet.Listenerとして扱える物であれば何でもokです。これを使うとファイルサーバがほんの数行で書けてしまいます。

nginx.confが server {
  listen 8081;
  location / {
    include uwsgi_params;
    uwsgi_pass unix:///var/run/go-uwsgi/socket;
  }
}
であれば package main

import (
    "net"
    "http"
    "github.com/mattn/go-uwsgi"
    "os"
)

func main() {
    s := "/var/run/go-uwsgi/socket"
    os.Remove(s)
    l, e := net.Listen("unix", s)
    if e != nil { panic(e.String()) }
    http.Serve(&uwsgi.Listener{l}, http.FileServer(http.Dir(".")))
}
これだけですね。簡単です。
Posted at by