投稿

2010の投稿を表示しています

2010年12月31日時点のPC環境

イメージ
今年は1年の間に結構色々とPC環境に手を入れた気がするのでちょっとまとめようと思う。

ServersMan@VPS から さくらのVPS へ乗り換え

ServersMan@VPS はユーザに root 権限を与えているのに事あるごとに触られて怖いので無料期間内にさくらのVPSへ乗り換えることにした。ServersMan@VPS の時は当時 CentOS と Debian しか選べなかったので Debian にしたが、さくらは色々選べるので Ubuntu の 64bit 版を入れることにした。

ギガプリン

イメージ
昨日 Twitter のタイムラインを眺めている時にギガプリンの曲に遭遇して、前からこうなんというか気になるというかイラッとするというか思うところがあったので、なんかよくわからん伴奏を被せてみた。


などという文章とともに、twaud.io の埋め込み機能と YouTube の iframe 埋め込み機能を実験する記事を作ってみた。
Blogger では mp3 ファイルのアップロードに結構困ってたけど、twaud.io の埋め込み機能があれば心配なさそうだ。

※twaud.io の埋め込み機能は再生成功率が低いなぞのトラブルがあるので一旦取り除いた

SSL のページに非 SSL の iframe が挿入された時の動き

イメージ
SSL で保護されたページにブックマークレットで iframe を挿入して、ブラウザがどれだけアクションを起こしてくれるのか調べてみました。

ルイカ細めセットを買った

イメージ
Windows は Linux や iOS と比べるとフォントレンダラに癖があるのかフォントが汚く見えることがよくある。
プログラミングなどの用途で使えるフォントなどを探しているとき、1Il| O0 '` ,. などの区別が付きやすく、かつ日本語が使える見やすいフォントとなるとなかなか思ったようなフォントが見つからずに困っている。
ソース内のコメントを日本語で書いたり、普通のテキストファイルや HTML ファイルを編集するときなどのことを考えると漢字の数も十分にないと困るし、その時点で選択肢がほとんどなくなってしまう。
メイリオを加工するような手法も検索すると散見されるがライセンス的にどうなのかわからないし、少なくとも Ubuntu を併用してる自分が同じフォントを両方の環境で使うのはアウトのように思える。同じような理由でフォントリンクを使うような手法も面倒なので微妙だ。

そんなこともあり今まではVLゴシックをメインに使っていたのだが、タイプラボのルイカ等幅がプログラミング用に使えるように配慮されていることを偶然知った。まずは教育漢字までが使える無料版を試用してみたのだが、PuTTY の画面が個人的にはなかなか読みやすかった。

VL Gothic
ルイカ等幅-02
ルイカ等幅-03

VLゴシックは丁度良い感じに行間が確保されていて嫌いではないのだが、t や f の横棒のように滲んでしまう文字がいくつかあったりして微妙に濃さが安定しない。
ルイカ等幅-02やルイカ等幅-03は行間が狭く、102、103行目の p と b が非常に近く若干読みにくかったり、そもそも p の縦棒が少し短めで視認性が低いなどいくつか問題はあるものの少なくとも滲む場所はなかった。

ルイカは全9ウェイトで、ダウンロード版は1ウェイト税込2730円で可変幅と固定幅のフォントが1つずつ付いている。可変幅の方は英数字もスタンダードな書体になっていて使い勝手がよく、とてもコストパフォーマンスがいい。
ダウンロード購入ページの下の方にはお得なセット販売の案内まであり、5ウェイトが4ウェイト分の価格で購入できる。Webサイトを作るときにも使えるし、思わずルイカ細めセットを買ってしまった。

商売上手である。

次の給料が入ったらルイカ太めセットも買おう。買った。いいフォントは長く使える。
でもできれば自己解凍書…

「『作曲できる奴ちょっとこい』のデータで遊ぶ」の3日間

イメージ
「作曲できる奴ちょっとこい」のデータで遊ぶ
http://sdc.oov.ch/

「埋もれた歌詞の救済」というテーマを元にこんなサイトを作ってみた。
実際の作業自体は大体3日ぐらいで終わった。実作業時間は半日とちょっとぐらい。

1日目 ----

ネタ元はもちろん少し前に話題になったJ-POP ジェネレータ
それを見た友人が「作曲スレのデータでできないかな」と言っていて、作業しようと思い立ったのがこの日。

まず最初に歌詞のデータを集めてくる必要があった。
いくつか抜けている部分もあるもののIDは既に19000を越えているようなので、1秒ずつ HTTP アクセスを掛けたとしても19000秒。
図書館事件も記憶に新しい今日この頃なので、サーバのレスポンス速度も確認してデータ収集中はほぼ常時対象サーバもクライアントも監視していた。

収集で使用したのは概ね以下のようなコード。golang で書いた。
package main import ( "http" "io" "os" "log" "fmt" "time" ) func main(){ for i:=0; ; i++ { time.Sleep(1e9) r, _, err := http.Get(fmt.Sprintf("http://www9.atpages.jp/stewmusic/akadb/songlist.php?key=No:%d", i)) if err != nil { log.Printf("http.Get error: %s", err.String()) i-- //リトライ continue } dir := fmt.Sprintf("akadb/%02x", i & 0xff) filename := fmt.Sprintf("%s/%04x.html", dir,…

Flash-Socket-Policy への応答を xinetd で行う

https://github.com/gimite/web-socket-js
Flash のソケット通信機能を経由すれば IE や現行の正式版の Firefox や Opera でも WebSocket と同じレベルの通信ができるということで、最近 gimite さんの web-socket-js を使ってみている。

Flash の場合アクセスを許可するためのポリシーファイルを配信しなければならないようなのだが、ServersMan@VPS の Debian には最初から xinetd が入っているようなのでこれを使って許可するようにしてみようと思う。
(もちろん WebSocket サーバ側で準備するのもいいけどポート843番は特権ポートなのでサーバをユーザ権限で動かしたい場合直接は listen できない模様)
まず /etc/services にポート843番に関する情報を追加する必要がある。
vim /etc/servicesflsockpolicy tcp/843 次に登録したポートに対応した応答用の定義を追加する。
vim /etc/xinetd.d/flsockpolicyservice flsockpolicy { disable = no wait = no socket_type = stream flags = IPv6 user = www-data group = www-data server = /usr/local/flsockpolicy/flsockpolicy } で、この server に書いた場所に実際に実行されるスクリプトファイルを設置する。
cd /usr/local/ mkdir flsockpolicy cd flsockpolicy vim flash-socket-policy.xml<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.m…

Avast! の Web シールドを一時停止しても WebSocket で接続できない

最近 WebSocket サーバをGo言語の勉強を兼ねて作っているのだが、友人の環境で接続に失敗してしまう問題が起こり、それの解決策がわからず微妙に悩んでいたが、タイトルに書いてあるとおり Avast! が原因だということがわかった。
WebSocket の情報がまだ少ないと思って検索してなかったが、avast websocket で検索すると思いっきりそれに関する情報が出てくるではないか。

この一件で個人的にはもう無料で対策したいなら Microsoft Security Essentials、最新のウィルスからも迅速に保護されたいなら有料の有名どころを使えばいいじゃないと内心思ってしまった。

カスペルスキー系はここに書いてあるトラブルシューティングで回避方法が書かれているので手動設定しないとダメかも。

Blogger で新しいはてなブックマークボタンを設置

はてなブックマークボタンが使いやすくなったらしいので、Blogger の各記事の下に加えるようにしてみた。

Blogger では記事の側にボタンを設置しようと思うと HTML 編集モードに入らないといけないっぽいのだが、どうも記事ひとつひとつに対して調節しようと思うと「ウィジェットのテンプレートを展開」を使って展開されたソースに対して書き換えを行う必要があるらしい。
ただこれを一度展開してしまうとテンプレが巨大になって見通しが悪くなるし「ここから先は自力で頑張って下さい」ムードが漂っていてせっかくのインターフェイスが使えなくなりそうで怖いので(※実際にどうなるのかは未確認)、JavaScript 経由で挿入する方法でお茶を濁すことにした。

このブログには既にシンタックスハイライト用の JavaScript を仕込んでいて、その時に jQuery も読み込んでいたので jQuery を使った。実際に必要なコードはこんな感じ。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> <script type="text/javascript"> //<![CDATA[ $(function(){ $('h3.post-title.entry-title').each(function(){ var $this = $(this), title = $this.text(), url = $this.find('a:first').attr('href') || $('head:first link[rel=canonical]:first').attr('href'), encoded_url = encodeURIComponent(url); $this.closest('div.post.hentry').find('div.post-footer-line.post-footer-line-1') .prepend(…

Debian に Go 言語をインストール

好き放題入れられるんだから興味がある golang も使えるようにしたい。
ただ VPS 上でコンパイルなどができる必要はないので、ローカルの Debian サーバにだけコンパイル環境を用意して、出来上がったバイナリを ServersMan@VPS で動かすような使い方をしようと思う。
以前はビルド前の環境変数の設定が必須だったが、いつの間にか簡単にできるようになっていた。
su apt-get install bison ed gawk gcc libc6-dev make python-setuptools python-dev build-essential easy_install mercurial exit hg clone -r release https://go.googlecode.com/hg/ go cd go/src ./all.bash ビルドが上手くいったので、.bash_profile に環境変数を設定しておく。 今回はまだ .bash_profile 自体が存在していなかったので新たに作成した。
vim ~/.bash_profileif [ -f ~/.bashrc ]; then . ~/.bashrc fi GOROOT=~/go PATH=$PATH:$GOROOT/bin export GOROOT PATHsource .bash_profile プログラムのビルドをテストするのはオフィシャルの Writing programs を参照すればいいと思うので省略。
これで自前のバイナリを走らせることもできるようになった。

golang の netchan でデータが欠落することがある?

Go言語を最近触っていてちょっとした経緯で netchan を使おうと思ったのだが、どうすればいいのかよくわからなくなってきたので取り敢えずメモっておく。このコードは上手くいく。1秒ごとに画面にログが現れる。
package main import ( "log" "time" "netchan" "os/signal" ) func exporter() { exp, _ := netchan.NewExporter("tcp","127.0.0.1:65432") expSendChan := make(chan int) exp.Export("chan", expSendChan, netchan.Send) go func(){ for i:=1;;i++ { time.Sleep(1e9) expSendChan <- i } }() } func importer() { imp, _ := netchan.NewImporter("tcp","127.0.0.1:65432") impRecvChan := make(chan int) imp.Import("chan", impRecvChan, netchan.Recv) go func(){ for { log.Printf("%d", <-impRecvChan) } }() } func main() { exporter() importer() <-signal.Incoming } ただ、これが Importer と Exporter を別のプロセスを分けた時などに起こるような複数回 Importer が接続に行くような状況で上手くデータが転送されないみたいだ。
このソースの main() にある exporter() と importer() の呼び出しのうち片方をコメントアウトし、一方だけを呼ぶバイナリを…

Debian に HAProxy をインストール

HAProxy はロードバランサで、複数の Web サーバに処理を振り分けるために使われたりするもの。
このマシンで Web サーバとして使い始めた nginx も同じ用途で使えるので、通常あれば HAProxy を入れなくても大体同じことができる。

が、密かに企んでいる将来の目的にはどうも nginx が使えないらしい。目的の詳細についてはまた別な記事で語ることにして、今回は取りあえず HAProxy を経由して nginx に接続させるところまでやってみる。
apt-get install haproxy インストールができたら、/etc/default/haproxy の ENABLED を 1 に変更する。
vim /etc/default/haproxy#ENABLED=0 ENABLED=1 更に haproxy の設定ファイルを書き換える。
最初の時点でなんかわりと色々と書いてあるのだが、今回は真面目にロードバランサとして使うわけではないので取りあえずファイルをバックアップしつつ全面的に書きなおす方向で進める。
cd /etc/haproxy cp haproxy.cfg haproxy.cfg.default vim haproxy.cfgglobal user haproxy group haproxy daemon defaults mode http retries 3 option redispatch option forwardfor except 127.0.0.1/8 option SERVERID rewrite backend web timeout client 30s timeout server 30s timeout connect 1s balance roundrobin server web1 127.0.0.1:60080 rspirep ^(Location:\ [a-z]+://[-.a-z0-9]+)(:[0-9]+)(.*)$ \1\3 frontend all 0.0.0.0:80 default_backend web ※2010-12-01 追記 - Locationヘッダの書き換えを追加

HAProxy がポート…

Debian に Zend Framework をインストール

現在動いているメールフォームは PHP 標準機能とか mb_string ぐらいしか使っていなくて、わりと持ち運びしやすいスクリプトではあるのだが、ServersMan@VPS ではメールサーバを立てるつもりがないので mail 関数がそもそも使えなくなる。
外部の SMTP サーバを使ってメールを送信するには PEAR::Mail を使う手もあるが、今回は Zend Framework に存在する Zend_Mail を使ってその辺を作ってみようと思う。
なので Zend Framework 自体をインストールする。
cd ~ wget http://framework.zend.com/releases/ZendFramework-1.11.0/ZendFramework-1.11.0-minimal.tar.gz tar -zxf ZendFramework-1.11.0-minimal.tar.gz cd ZendFramework-1.11.0-minimal bin と library ディレクトリをインストール先に配置したい。まずは library を取りあえず他のPHPのファイルもある /usr/share/php を真似て /usr/local/share/php に一緒に突っ込んでしまうか。
mv library /usr/local/share/php あとは bin だけどこれも慣例的には /usr/local/bin でいいのかな? これは中身を入れる。
zf.bat は Windows 用のファイルで必要ないので消してしまおう。
あとマニュアル上では zf ってコマンドで呼ぼうとしてるので合わせるようにしてみる。
cd bin rm zf.bat mv zf.sh zf chmod 755 zf mv * /usr/local/bin php.ini に /usr/local/share/php を見に行くようにさせる。php5-fpm と cli の両方を設定しないとダメそう。
あとスクリプトを書き始めてから php.ini で date.timezone と mbstring.language と mbstring.internal_encoding が未設定なことに気づいた。この設定もこの辺でしておくとよさげ。
vim /etc…

自宅サーバを Ubuntu から Debian に変更

ServersMan@VPS で Debian を使い始めたので、自宅にあるサーバ用 Atom マシンを Ubuntu から Debian に切り替えた。
この PC は gPXE が使えるので、ネットワーク経由で小さいイメージを http ダウンロードして直接インストールできる。

基本的には ServersMan@VPS と同じような構成だけど、相変わらず自宅は固定 IP ではないので IP が変化するたびに DynamicDNS を更新する必要がある。
この更新は Ubuntu の時にも使っていた Python スクリプトがあるのでこれをそのまま持ち込んだ。
ただ、もちろん初期の状態では Python も入っていないので apt-get でインストールする。
apt-get install python これでインストールされる Python は 2.5 で若干古いものの、世の中にある Python 用のライブラリなどを調べているとどうも 2.5 が一番無難そうな気配があるのでこのままにしておく。
Python も準備できたところでスクリプトを配置する。
mkdir /usr/local/share/diceoov/ vim /usr/local/share/diceoov/diceoov.py#!/usr/bin/python # -*- coding: utf-8 -*- import urllib2, re, os IPCHECKER = r"http://global-ip.appspot.com/" DDNS_UPDATER = r"[DDNS更新用のリクエスト先URL]" def main(OLD_IP): #現在のIPアドレスを取得する now_ip = urllib2.urlopen(IPCHECKER).read().strip() #正しいIPアドレス表現で、前回からIPアドレスは変わっているか? if re.match(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", now_ip) and now_ip != OLD_IP: #IPアドレスの更新リクエスト a = urllib2.urlopen(DDNS_UPD…

Debian に Kyoto Tycoon、Net_KyotoTycoon をインストール

前回の記事でカウンタを SQLite3 に移行することに成功したのだが、なんか妙にパフォーマンスが安定しない。何度か F5 で読み込み直すと 100msec ちょっとぐらいで返ってきたり(それでも遅いけど)、500msec 以上掛かったり。
もしかして SQLite2 だと問題ないのかなと思い結局 php-sqlite を入れたりして実験してみると、確かに SQLite2 のコードの方が安定して 100msec を切っていた(それでも同時アクセスが集中すると簡単に遅くなっていく)。

アクセスが少ないんだからそれでいいじゃんという話もあるが、せっかく好き放題できるサーバなのだから好き放題やってみようと思い、Kyoto Tycoon のサーバを立てて PHP からアクセスさせてみることにした。こんなアクセスの少ないサイトに対してこんな豪華なものが使えるなんて幸せだ。

mikio さんのチュートリアルを参考にインストールする。とは言っても王道の流れで入れられるので特に壁になるようなことはない。
apt-get install g++ wget http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.24.tar.gz tar -zxf kyotocabinet-1.2.24.tar.gz pushd kyotocabinet-1.2.24 ./configure make make install popd wget http://fallabs.com/kyototycoon/pkg/kyototycoon-0.9.7.tar.gz tar -zxf kyototycoon-0.9.7.tar.gz pushd kyototycoon-0.9.7 ./configure make make install チュートリアルのように ktserver を起動して、ktremovemgr から set をしようとすると接続に失敗した。これは恐らく iptables によるものだと思うので、ループバックインターフェイスを正しく経由するように明示的に -h localhost を加えることで上手く動いた。
問題なく動いているようなので、PHP からアクセスできるように Net_KyotoTycoon をインストールする。これは p…

ServersMan@VPS の Entry を契約した

イメージ
無事にカードの再発行も済んだので、予定通り ServersMan@VPS の Entry プランに申し込んだ。
取りあえず使う予定のない ServersMan 提供ツール群は必要ないので Apache2 を消した。
その他 smadmin、serversman も必要ないので削除。

ServersMan@VPS の Debian はどうも locale が指定されていない状態になっているのか PuTTY で UTF-8 に設定した状態で日本語を打とうとしたら打てないことに気づいた。その辺の設定はここの記述を参考にして en_US.UTF-8 に設定した。
dpkg-reconfigure locales update-locale LANG=en_US.UTF-8 そして今まで書いてきたのとほぼ同じ手順でサーバを準備して、早速サイトの移植を開始。
元々のサーバである XREA.COMCORESERVER.JP の時に入っていたモジュールが一部入っていなかったりするので、その辺は随時インストールしながら作業していくことにする。

アクセスカウンタ
ほとんど見えないぐらい小さいサイズでさり気なく存在しているアクセスカウンタは、簡単な自作スクリプト。
データは SQLite2 のデータベースで扱っていて、文字の出力は GD 経由で xbm 形式の画像を読み込んで、png 画像として出力している。
ここで使っている SQLite2 と GD はどちらも入っていない。とはいえ SQLite2 をわざわざ入れるよりは SQLite3 を使ったコードに直すべきだと思うので、そこはコード側を修正する方針で進める(直す対象のコードも少ない)。インストールついでに APC も入れておく。高速化バンザイ。
SQLite2 と SQLite3 のデータベースファイルは互換性がないのでコンバート作業が必要。
apt-get install php5-gd php5-apc sqlite sqlite3 invoke-rc.d php5-fpm reload sqlite [カウンタのデータベースファイル名] .dump | sqlite3 [新しいデータベースファイル名] とても単純な構造だったので特に問題なく変換できた(もちろん本当は生成されるSQLデータをよく確認すべき。更にこのままだと…

Debian に daemontools をインストール

実は以前 Windows でも nginx + PHP の環境を作って PHP スクリプトを書いていたこともあったのだが、その時「いつの間にかプロセスが居なくなっている」というミステリーに遭遇した。
Windows 版がそんなに安定動作するとは思えないのでそれ自体は不思議ではないのだが、やはりサーバとして使うのであれば勝手に nginx とか PHP が居なくなってサイトが見れなくなっているのは寂しい(とはいえアクセスが少ないので実質的な問題はほとんどないが……)。

ServerMan@VPS の Entry プランはメモリも少なめで swap 領域も現状はないので、OOM Killer 様がやってきて殺戮していく可能性もあるし、でも自分が書いたスクリプトのバグなどで大量にメモリ食い潰したりした時は落として欲しいので OOM Killer 様も必要。
というわけで落ちた後に何食わぬ顔で立ち上がってくるようにしておきたいので、今回は daemontools をインストールしてみようと思う。

daemontools は apt-get でインストール。
apt-get install daemontools daemontools-run 基本的にはこれだけで daemontools は起動する。
daemontools でプロセスを監視させる場合、daemontools 側からサービス起動をしなければいけないようなので、nginx と php5-fpm を自動実行の対象から外しておく。sshd は OOM Killer の対象外だし失敗すると作業続行が出来なくなる可能性があるので取りあえず今回は除外。 まずは nginx から。
invoke-rc.d nginx stop update-rc.d -f nginx remove pushd /etc/service mkdir nginx pushd nginx vim run#!/bin/sh exec 2>&1 exec /usr/local/sbin/nginx -c /usr/local/nginx/nginx.conf -g 'daemon off;'chmod 700 run svc -u /etc/service/nginx これで daemontools 経由で起動す…

Debian にインストールした nginx を再調整

前回の記事の最後に書いた通り、nginx を ./configure する際のオプションを見なおして記事を修正した。とは言っても --user=www-data --group=www-data を追加して、指定しなくても問題なさげな md5 と sha1 の指定を外しただけ。

まだこれといって nginx.conf もそんなに弄っていなかったので、今回は思い切って /usr/local/nginx まるごと削除して make install し直した。ps aux でプロセス一覧を確認した限りでは問題なくなっているので無事成功したようだ。

DBはなくとも、取りあえずは Web サーバとして使える状態になったので現サイトを少しずつ移植していきたい。本当はデザインとかサイト構成とかも変えたいものの、その辺は弄りだすと永遠に終わらなくなるので気にしない方向で。

Debian に PHP5.3 をインストール

iptables の設定も終わったので、次は予定通り PHP のインストールをしようと思う。
PHP も頻繁にアップデートがあるのでソースから入れようかと思っていたのだが、丁度似たような時期に似たようなことをしている人がいて、明らかに自分より詳しそうな人なのでホイホイ参考にさせてもらいながら php5-fpm を入れてみようと思う。

php5-fpm 自体は Dotdeb のリポジトリにあるらしいので、一つ前の記事も参考にさせてもらいながら /etc/apt/sources.list にリポジトリを追加などを行う(Dotdebのインストラクションはこちら)。

ただし、hkp鍵サーバとの通信のために tcp の 11371番ポートで外部へアクセスできないといけないので、iptables の設定を弄る必要があった(※前回の記事を既に編集済み)。
su echo "deb http://php53.dotdeb.org stable all" >> /etc/apt/sources.list echo "deb-src http://php53.dotdeb.org stable all" >> /etc/apt/sources.list gpg --keyserver keys.gnupg.net --recv-key 89DF5277 gpg -a --export 89DF5277 | apt-key add - apt-get update apt-get install php5-fpm invoke-rc.d php5-fpm start あっさりと立ち上がるところまできてしまった。
あとは書いてあるように nginx.conf を編集すれば使えそうだ。
vim /usr/local/nginx/nginx.conf location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/loca…

Debian に iptables を設定

前回から少し間があいてしまったが、sshd と httpd が立っている Debian に対して、必要最低限のアクセスのみを許可するような設定を施したい。ただ iptables で出来る設定はネットワークに関する知識が乏しい自分にはなかなか難しく、手探り状態ながら作業してみる。
方針としてはその辺のサイトの解説でもよくあるようなホワイトリスト方式。ただし作業元の環境は固定IPアドレスは持っていないので、IPによる接続元制限はできない。

念のため netstat で使用中のポート一覧も確認して知らぬ間にサーバが立っていないか確認しておく。
以降のコマンドは全て su で root になった状態で叩いている。
netstat -anp 問題なさそうだったので、/etc/firewall.sh というファイルを新規作成して、vim で内容を作る。
touch /etc/firewall.sh chmod 700 /etc/firewall.sh vim /etc/firewall.sh#! /bin/sh LOCALNET=192.168.11.0/255.255.255.0 MY_SSHD_CONFIG=/etc/ssh/sshd_config iptables -F iptables -X iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # Loopback iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # SYN Cookiesを有効にする # ※TCP SYN Flood攻撃対策 sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf # ブロードキャストアドレス宛pingには応答しない # ※Smurf攻撃対策 sysctl -w net.ipv4.icmp_echo_…

Debian に nginx をインストール

前回 SSH で秘密鍵を使ったログインができるようになった Debian に、今度は nginx を入れようと思う。
枯れているし .htaccess が使える Apache はとても便利だけど、非力なマシンでは軽さを優先したい。
そんな理由で今回は nginx を入れようと思う。

nginx は今もバリバリバージョンアップされているので、apt-get を使って入れた場合のバージョンを先に調べてみる。
apt-cache show nginx どうやら apt-get で入れようとすると現状では 0.6.32 がインストールされるらしい。
ちょっと古過ぎる気もするのでソースからインストールすることにしようと思う。

本当に何もない状態からのインストールなので、gcc や make なども必要。
とりあえず今回は libpcre3-dev と lib-ssl-dev があれば configure に成功するようだ。
一気に make と make install までやる。
su apt-get install gcc make libpcre3-dev libssl-dev cd ~ wget http://nginx.org/download/nginx-0.8.53.tar.gz tar -zxf nginx-0.8.53.tar.gz cd nginx-0.8.53 ./configure --user=www-data --group=www-data --sbin-path=/usr/local/sbin/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/logs/nginx.pid --with-http_ssl_module make make install インストールに成功したら、起動用のスクリプトをここからもらってくる。
configure の際のパラメータは予めこの起動用スクリプトに合わせたファイル構成にしてあるから改変なしで上手くいく。
wget -O /etc/init.d/nginx http://www.debianadmin.com/images/nginx chmod 755 /etc/init.d/nginx 試しに起動して接続テスト…

Windows Virtual PC に Debian をインストールし、SSH の設定をする

イメージ
ServersMan@VPS の Entry プランを試しに申し込んでみようかと思っているものの、先日起きた個人情報流出に巻き込まれてしまって普段使っているカードが一時的に使えなくなっているので、取りあえず予行練習ということで Windows Virtual PCDebian をインストールしてみようと思う。

元々 Windows 以外の OS に関してはそんなに詳しくはないものの、Ubuntu は多少使ったことがあるので CentOS よりは Debian の方が慣れやすいだろう、というところで Debian を選んだ。

取りあえずメモリは ServersMan@VPS の Entry プランの基本になる 256MB に。HDD は検索したところによると容量可変のHDDを使うと VirtualPC 2007 で問題が起こっていたらしいので、取りあえず「詳細オプションを使用して仮想ハードディスクを作成する」を選んで、「固定サイズ」、10240MB の HDD を作成。

Debian は 150MB 程の小さい ISO イメージをダウンロードした。
仮想マシンを起動したら ISO イメージを選択。インストーラの起動画面まで到達できた。


2007 だとここからもまだ Kernel Panic が起こったりして noreplace-paravirt というオプションが必要になったりするらしい話も見かけたものの、手元の環境では何も指定しなくても問題なさそうだ。

まず言語選択。ここは迷わず English を選択する。大抵の場合 English の方が都合がいいから。

次に「Choose a country, territory or area」と言われるが、ここでは「other」を選ぶ。
すると「Choose a continent or region」と言われるので、選択肢の中から「Asia」を選ぶ。
こうすると次の「Choose a country, territory or area」ではさっき存在しなかった「Japan」が選べるので選ぶ。

続いてキーボードレイアウトを選ぶ。日本語キーボードを使っているので「Japanese」を選ぶ。

少しの間色々と進行して、ネットワークの設定が始まる。Hostname を決めろと言われるが、その辺は好みで。今回はめんどいので…

64GBのSSDを購入

Electri6ity を買って以来、ただでさえそんなに速くはなかったプロジェクトの読み込みや音色の読み込みが更に遅くなり DAW を開くのさえ面倒になってきていたので、思い切って CSSD-SM64WJ3を買った(注文当時 Amazon に在庫がなかったのでツクモで注文したけど今はある模様)。
3.5インチベイ取り付け用の金具を買っていないので PC ケースが開けっ放しな上に SSD を PC の上に置きっぱなしという中途半端な状態ながら早速使用開始。

フォーマットにあたっては遅いと思われる GPT + NTFS を先に試してみた。
そもそも作曲用の音源を入れっぱなしにするために買ったのでジャーナリングなどは必要ないはずなのだが、取りあえず CrysitalDiskMark で 512K ランダムリードだけテストして、すぐ MBR + exFAT でフォーマットしなおした。
GPT + NTFS で 170 前後、MBR + exFAT で 190 前後のスコアを出していたのでまあまあ予想通りな感じ。

フォーマットが済んだので入れるデータを選ぶのだが、Electri6ity を入れてもまだ余裕があるので、KOMPLETE7 についてきた音源のうち使用頻度が高そうで HDD への負担が高そうなものを選んでコピーした。

Electri6ity 26.2GB
Abbey Road 60s Drums Library 6.32GB
Scarbee MM-Bass 2.96GB
New York Concert Grand 2.70GB
Vienna Concert Grand 3.12GB
Berlin Concert Grand 2.77GB
Upright Piano 2.55GB

ここまでで残り容量が約 13GB ぐらいになっていたので、ついでに Battery3 のライブラリのデータも 12GB 弱ぐらいなので入れようと思ったら Battery3 はサンプルごとにファイルが分かれていてコピーに恐ろしく時間が掛かるようなので結局諦めた。
本当は KONTAKT4 のライブラリも入れたかったけどこれは容量オーバーになるので諦め。

準備も終わったので DAW を立ち上げて以前作りかけで投げ出していたプロジェクトを開いてみたら速い速い。しかも今までは Electri6i…

非同期タイプの埋め込みタグ

少し前に GoogleAnalytics でのアクセス集計用のタグとして </head> の直前に挿入するタイプの非同期型埋め込みタグが導入された。
それまでのタグは </body> の直前に挿入してページの読み込みをブロッキングしないようにしましょう、という方針だったものの、それなりにいるはずの「開いてみたけど読み込み遅いからやっぱ止めよう」みたいな諦めるのが早いユーザを知るためには若干遅いのではないか、という手法だった。

新しい方法では外部 JavaScript ファイルを読むための script タグを直接 HTML には書かずに JavaScript から挿入するように変わった。この読み込み方法はブロッキングしないように読み込む方法として最近ではわりと有名な方法だとは思うが、読み込んだファイルが持つメソッドを呼び出す方法が面白くていいなあと思った。
var _gaq = _gaq || []; _gaq.push(['_setAccount', 'アカウントID']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); 実際の内部での動作を見たわけではないので推測だけど、_gaq が未定義だったらまず配列として初期化して、メソッド呼び出しの代わりにメソッド名とパラメータを配列で渡す。
その後で script タグを動的…

jQuery に Templates Plugin と Data Link Plugin が追加

jQuery に Templates プラグイン(jquery-tmpl)と Data Link プラグイン(jquery-datalink)が追加された。
これらは普通のプラグインとは少し違っていて、jQuery オフィシャル。JavaScript を書いていると処理と HTML が綺麗に分離できなかったりすることがしばしばあるけど、これらのプラグインを使うとコードの整理がしやすくなるのではないかと思う。ありがとう Microsoft!

http://api.jquery.com/category/plugins/templates/
http://api.jquery.com/category/plugins/data-link/

ドキュメントも整っていて使い始めるのにもそんなに戸惑わずに済みそう。ただしまだリリースされていない jQuery1.4.3 に依存しているようなのでもうちょっと我慢。まだ触っていないものの、プロポーサルの時から目をつけていたのでちょっと説明も書いておく。
間違っているところがあるかも知れないのでその辺についてはごめんなさい。先に謝っておきます。

Data Link プラグイン

個人的には Data Link プラグインのほうが地味ながら重要な機能を担っていると思うのでこっちから紹介。
これはその名のとおりデータをリンクするプラグイン。データをサーバサイドと JavaScript サイドでシームレスに行き来させるのは地味に面倒くさいが、その辺の面倒な部分をある程度綺麗に書けるようにしてくれるので、構造が整理されて読みやすいソースになりそう。

最初に出てくる例がわかりやすいので2つを引用してみる。
var person = {}; $("form").link(person); $("[name=firstName]").val("NewValue"); // Set firstName to a value. person.firstName; // NewValue // User types a value into the form field. person.firstName; // firstName now contains the user-ented value.…

とうこうてすと

記事の表示を確認。