2009.05.06

VPSサービス Linode を使い始めた

安くてなるべく品質の良いサーバサービスを探していて、Linode にたどり着きました。使いはじめて少し経ちましたが今のところ非常に満足しています。

Linode は Xenベースの Linux 仮想マシンを提供するサービスで、一番安いプランなら月額19.95ドルから利用できます。自分の場合は、Linode 540 という月額 29.95ドルのものを使用しています。一年分を先払いしたので10%引きでした。Linode 540 のスペックは、メモリ540MB、ディスク24GB、転送量300GB/月まで、CPUはdmesgによると2.5GHz x 4 となっています。

Linode の特徴は以下の通り:

  • XenベースのLinux仮想マシン
  • OSのディストリビューションは自由に選べるし、いつでも簡単に変更できる
  • サーバの場所(データセンターの位置)を選べる。日本から使う場合は Fremontが一番近い。

仮想マシンであるがゆえに、電源のon/offが簡単にできるし、OSの入れ替えすら自分でできます。性能も思っていたよりずっと良く、もう専用サーバは要らないんじゃないかと思えるくらいです。

仮想マシンの設定/起動から、その上で動かす OS の設定などを以下にまとめたので、興味のある方はごらんください。なお、今回は OS として CentOS 5 を選びました。

VPS サーバ Linode 設定メモ

なお、Linodeには Referral System という紹介制度があります。一応、以下に自分の referral code をのせておきますので、今後 Linode に申し込む人がいればこれを入力するか、このエントリの Linode のリンクから申し込んでもらえるとありがたいです。

a331d30a13f246066cc19ec5d4f7a61a778bd0e7

2008.06.29

Consistent Hasing を Ruby で試す

Consistent Hashing を試すというページにて、Perlで Consistent Hashing を実装しているのを見つけたので、そのプログラムを Ruby に移植してみました。Perl 側の文法を完全には理解していないので一部は勘ですが、実行結果が一致しているのでたぶん合っていると思います。単純な移植ではつまらないので二分探索を用いた高速化も行っています。詳しくは以下のページをご覧ください。

ConsistentHashingRuby – pylori*style – Trac

2008.03.02

Ruby/EventMachineによるサーバの例

最近、Ruby/EventMachineというライブライがおもしろくて良く使っています。EventMachineは、イベントドリブンで非同期I/O処理を行うためのライブラリで、一部 C++ で書かれていて高速動作するのが特徴です。

EventMachine のインストール

rubygems を使うのが簡単です。

$ gem install eventmachine

EventMachineの使い方

ごく簡単な例:

require 'rubygems'
require 'eventmachine'

EventMachine.run {
  EventMachine.start_server('localhost', 7000, EventMachine::Connection)
}

EventMachine.run はイベント待ちの無限ループを行います。ブロックの中身はイベント待ちループの初期化のあと、ループに入る前に呼ばれます。

EventMachine.start_server は、指定TCPポートで待ち受けるサーバを登録します。3つ目の引数は、イベント発生時にコールバックを処理するクラスまたはモジュールを指定します。
EventMachineのイベント待ちループで、新しい接続(コネクション)が発生すると、ここで指定したクラスのインスタンスが生成され、イベントに応じてそのインスタンスオブジェクトのメソッドが呼び出されます。モジュールを指定した場合は EventMachine::Connectionにmix-inされます。EventMachine::Connectionは元々EventMachineにあるベースとなるクラスです。

上記のスクリプトを実行するとイベント待ちループにはいるので、別の端末ウィンドウを開いて telnet 等で次のように接続します。

$ telnet localhost 7000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

なにか文字を入力して Enter を押すと、サーバを起動した端末の方に

............>>>5
............>>>7

などと表示されます。数字は入力した行の文字数です。実際に入力した文字より2多いと思いますが、これは行末の “\r\n” も含めて数えているからでしょう。このように EventMachine::Connectionにはデフォルトで受け取った各行の長さをSTDOUTに出力するコールバックルーチンが定義されています。実際に使うときには EventMachine::Connectionを継承したクラスをつくるか、必要なメソッドを定義したモジュールを指定することになります。

Echoサーバの例

Echoサーバとは、クライアントからの入力をそのまま出力して返すものです。先ほどの例に少し手を加えてEchoサーバを作ってみます。

require 'rubygems'
require 'eventmachine'

module MyHandler
  def receive_data data
    send_data(">> "+data)
  end
end

EventMachine.run {
  EventMachine.start_server('localhost', 7000, MyHandler)
}

新たにMyHandlerというハンドラを定義して、それをstart_serverの引数に渡しています。receive_dataは入力があったときに呼び出されるメソッドで、引数の変数に受け取ったデータが入ります。send_dataは出力するためのメソッドで、ここでは入力の先頭に”>> “を付加してそのまま送り返しています。

これは非常に簡単な例ですが、これだけで複数のクライアントから同時に接続されても正しく動くサーバが簡単に作れます。非同期入出力をするプログラムを作る際には便利なライブラリです。

2008.03.01

FreeBSD 7.0 を VMware Workstation 6.0 にインストール

インストール環境

  • VMware Workstation 6
  • Host OS = Windows XP Professional
  • Guest OS = FreeBSD 7.0R

OSのインストール

  • Windows XP 上で、FreeBSD ftp site ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/からISOイメージをダウンロードする。
  • VMwareのVMメニューのSettingsからCD-ROMを選択し、Use ISO imageをチェックし、ダウンロードしてきたISOイメージファイルを指定する。
  • bootして、通常通り一通りインストールする。
  • TimeZone, rootのパスワードを設定
  • 再起動

portsnapでportsのインストール

  • portsnap fetch; portsnap extractを実行

VMware toolsのインストール

  • ports/misc/compat6xをインストール
  • VMwareのVMメニューからInstall VMware Toolsを選択
  • ports/emulators/vmware-guestd6とports/emulators/vmware-tools6をインストール

X11のインストール

  • portsまたはpackageでx11-servers/xorg-server, x11-drivers/xorg-drivers, x11-fonts/xorg-fontsをインストール
  • x11-drivers/xf86-video-vmwareをインストール
  • x11/xterm, x11/xinit, x11/xrd, そのた必要なものをインストール

Xの設定

xorgconfig を起動して設定していく。

  • マウス、キーボード: 適切なものを選択。/stand/sysinstallでmouseをenableにしておき、Protocol はauto, デバイスは/dev/sysmouseが吉。
  • horizontal sync range, vertical sync range: なんでもよい?
  • monitor identifier: (例) vmware
  • Video Card: VMWare guest OS (generic)
  • video memory do you have on your video card: なんでもよい?
  • depth関連: (Host OSの depth にあわせる)
  • /etc/X11/xorg.confに生成されるので中身を確認

CapsLockとCtrlをいれかえる

  • キーボードのCapsLockとCtrlを入れ替えたければ、/etc/X11/xorg.conf の Section “InputDevice” に Option “XkbOptions” “ctrl:swapcaps” という行がコメントで存在しているはずなので、有効にする
  • さらにports/x11/xkbcompをインストールする

2008.02.11

weblogger: Emacsでblog投稿

WordpressにEmacsから投稿するために、以下のページを参考に weblogger というものをインストールしてみました。

Blogging with Emacs

インストールは簡単で、手順は以下の通り。

CVSでソースをとってくる

cd ~/.emacs.d/
cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/emacsweblogs
co -d weblogger weblogger/lisp

.emacsを編集

(add-to-list 'load-path "~/.emacs.d/weblogger")
(require 'weblogger)

M-x weblogger-setup-weblog
blogのエンドポイントURL、ユーザ名、パスワードなどを入力

準備ができて、新規に投稿するには、M-x weblogger-start-entry
入力し終わったら C-c C-c

2007.05.04

Ubuntu 7.04日本語版のインストール

VMware Workstation上にUbuntu 7.04日本語ローカライズ版をインストールしてみました。

Ubuntu 7.04 on VMware インストールメモ

大きな問題もなく簡単にインストールできます。VMware toolsのインストールでちょっとエラーが発生しますが、それほど致命的なものでもないので放置中。

2007.01.28

PerlのPlagger、PHPのPrhagger、Rubyは?

PHP版のPlaggerっぽいものであるPrhaggerが出たら しいです。Rubyをメインに使っている者としては当然Ruby版Plaggerを期待するわけですが、誰か作っていないものでしょうか。 Prhaggerはブラウザ上で設定できるらしいので、Ruby版Plaggerでも同じようにするためにRailsベースでやるのが良いと思います。名前は、Plagger + Rails で Plarail(プラレール)。商標とかまずいかなぁ。

追記: praggerというのが出たみたいです。http://pragger.ikejisoft.com/

2007.01.21

うざいページ分けを結合するGreaseMonkeyスクリプト

ITmediaとかMYCOMジャーナルで、意味もなくページを分割している記事が多くて、いや、少しでもページビューを稼ごうという戦略ということでサ イト側としては意味はあるのでしょうが、見る側としてはとにかく激しくうっとおしい!と思っていたら、同じことを思っている人はいるものでした。

[usability]うざい!めんどい!果てしなくうっとおしい!

この方は、これを解決するGreaseMonkeyスクリプトを作られていて、以下のページで公開されています。

[GreaseMonkey]PageConcater

実は今までFirefoxを使っていなかったので、上記ページは知っていながら使えていなかったのですが、最近Firefoxをメインのブラウザにしたのを機にこのGreaseMonkeyスクリプトを導入しました。とても便利でありがたいです。

2006.09.30

ChartDirector for Ruby

ChartDirectorとは、Advanced Software Engineeringの製品で、チャート(グラフ)を描くためのライブラリです。有料ですが、試しに使ってみるだけなら無料でできます。最近になってRuby用が出たので試しに使ってみました。

ダウンロードと展開

ダウンロードページ http://www.advsofteng.com/download.html からアーカイブをダウンロードします。ここではChartDirector for RubyのFreeBSD(i386)用をダウンロードしました。ダウンロードしたら展開します。

% wget http://download2.advsofteng.com/chartdir_ruby_freebsd.tar.gz
% tar zxvf chartdir_ruby_freebsd.tar.gz

railsdemo

ChartDirector for Rubyには、Ruby on Rails用のサンプルが添付されています。 Railsが使える環境であれば、次のようにして展開したディレクトリの中にあるrailsdemoディレクトリで ruby srcipt/serverを実行し、ブラウザでhttp://localhost:3000/にアクセスすればデモを見ることができます。

% cd ChartDirector/railsdemo
% ruby script/server

s-WS124.jpg

左側のリンクをクリックすると豊富なサンプルグラフを見ることができます。たとえば、Cylinder Bar Shadingというリンクをクリックすると以下のようなサンプルが表示されます。

s-WS125.jpg

自分のrailsアプリケーションでChartDirectorを使う場合は、railsdemo/vendorディレクトリの中身を全部自分のrailsアプリのvendorディレクトリにコピーして使います。

rubydemo

ChartDirectorは、もちろんruby単体で使うことができます。rubydemoディレクトリに移動し、rubyのライブラリサーチパ スにrailsdemo/vendorを含めれば、デモプログラムを実行できます(実際に使う場合にはrailsdemo/vendorの中身を全部 rubyのライブラリサーチパスのどこかにコピーして使うことになります)。

% cd ../rubydemo
% ruby -I../railsdemo/vendor simplebar.rb

上記のようにするとsimplebar.pngというグラフ画像が生成されます。

simplebar.png

画像下部にある黄色いバーは、ライセンスを登録していない場合に表示されます。ライセンスを購入し、設定すれば黄色いバーは表示されなくなります。

ライセンスの購入

http://www.advsofteng.com/purchase.htmlからライセンスを購入することができます。メールでライセンスコードが送られてくるので、それをファイルに書き込むと登録は完了し、グラフ画像に黄色いバーが表示されなくなります。

ChartDirectorは非常に機能が豊富で、美しいグラフを高速に生成できます。サンプルやドキュメントも充実しています。値段も安いのでオススメのグラフライブラリです。

2006.08.27

Hpricot

HpricotというRuby用のHTMLパーサに注目していたのですが、 最近ちょうど使いたい場面があったので使ってみました。 まず、Hpricotはスキャン部分がC言語で書かれていて、類似のHTreeより高速だということですので両者を比べてみました。

require 'benchmark'
require 'open-uri'
require 'rubygems'
require 'hpricot'
require 'htree'

str = open('http://www.ruby-lang.org/en/').read

n = 100
Benchmark.bm {|x|
  x.report {n.times {HTree(str)}}
  x.report {n.times {Hpricot(str)}}
}

結果は次のようになり、たしかにHpricot(下の段)の方がかなり高速なようです。

     user     system      total        real
11.773438   0.671875  12.445312 ( 13.631620)
 4.750000   0.359375   5.109375 (  5.644100)

使い方等についてはwikiHTMLパーサ Hpricotにまとめました。 使い勝手もかなり良く、おすすめです。

Next »