さくらのVPSでvirtio

さくらインターネットのVPSサービスがリニューアルされ新プランへの優待移行が
アナウンスされていましたので、休みを利用して新プランに乗り換えを行ってみました。
新VPSのリリース直後は在庫切れが発生するなど大盛況でしたが、1ヶ月も経つと
だいぶ落ち着いてきたようで、順番待ちなどもなく普通に契約できるようです。

移行作業はrsyncで全ファイルコピーしてサクッと完了なので、説明などは省略。
リモート作業だとやるのが怖いこの手の作業も、コンソール画面がつかえる
VPSなら気軽に作業できて楽すぎます。

新VPSではメモリやHDDの増加以外にvirtioが使えるようになっているようですが、
FreeBSDでは無効化してあるのでこの辺を参考にして有効化してみました。

で、virtioでDiskIOがどのくらい速くなるかというと・・・
設定前

# time -p dd if=/dev/zero of=/home/hoge bs=1M count=8192
8192+0 records in
8192+0 records out
8589934592 bytes transferred in 197.433158 secs (43508065 bytes/sec)
real 197.50
user 0.04
sys 42.14

設定後

# time -p dd if=/dev/zero of=/home/hoge bs=1M count=8192
8192+0 records in
8192+0 records out
8589934592 bytes transferred in 52.097458 secs (164882030 bytes/sec)
real 52.13
user 0.00
sys 35.38

HDDへの書き込みが4倍近く高速化しています。
DISK I/Oが忙しいサーバーではないですが、速さはチカラなのでvirtio有効で
運用していきたいと思います。

Macで地震速報を通知してみた 続編

先日作成したTwitterの地震速報を受信してMacのGrowlへ通知するツールを作り直しました。
仕組み的には前回とたいして変わっていませんが、以下の機能を追加しました。

  • 複数の対象をFollowする事を可能にした。
  • SIGHUPを受信するとTwiterサーバに対して強制的に再接続を行うようにした。
  • PIDファイルを出力するようにした。

前回のツールも今回のツールも、Macのスリープ復帰時にTwitterとの再接続が出来ないという
致命的な問題があります。
この問題への対策としてツールがSIGHUPを受信すると再接続を行うようにしました。
ですので、スリープ復帰後にターミナルから kill -HUP `cat ~/hogehoge.pid` てな感じで
SIGHUPを送信するとサーバーへの再接続が行われます。

スリープ復帰の度に手動入力するのは面倒なので sleepwatcherデーモン等を使って
スリープ復帰時にkill -HUPを自動実行すると良いのではないかと思います。

#!/usr/bin/ruby
# -*- coding: utf-8 -*-
require 'rubygems'
require 'tweetstream'
require 'ruby-growl'
require 'webrick'

# 監視するTwitterアカウント (どちらか片方で十分だと思う)
# @earthquake_jp (4104111)
# http://labs.transrain.net/products/earthquake_jp/
# @eew_jp (16052553)
# http://quake.twiple.jp/

# 複数の監視対象に対応するため配列に格納
# ID番号
id = [4104111,16052553]
# アカウント名
id_name = ["earthquake_jp","eew_jp"]

# 自分のTwitterのアカウント
$USERNAME = "username"
$PASSWORD = "password"

### tweetの受信およびGrowlの送信処理 #################################
def EarthquakeNotification(id,id_name)
  # SIGHUPを受信したらメソッドを終了する
  Signal.trap(:HUP){return}
  
  # Growlへの接続をオープンする
  g = Growl.new("localhost","Earthquake Notification",["Notification"],nil,"")
  
  # TweetStreamはデーモンではなくクライアントとして動作させる
  TweetStream::Client.new($USERNAME, $PASSWORD).follow(*id) do |status|
    # screen_nameが監視対象と同一か判定する、同一なら通知を行なう。
    if id_name.include?(status.user.screen_name) then
      g.notify("Notification","地震速報",
                   "** #{status.user.screen_name} ** \n#{status.text}\n")
    end
  end
end

### 本体 ##############################################################
# PIDファイルの名前を生成 "HOME/スクリプト名.pid"
pid_name = "#{File.expand_path("~")}/#{File.basename(__FILE__,'.*')}.pid"

# TweetStreamでのデーモン化は行なわず、自力でのデーモン化を行なう
WEBrick::Daemon.start do
  # PIDファイルの作成  
  File.open(pid_name,"w") do |file|
    file.puts(Process.pid)
  end
  
  # 再接続を行うためにループ処理で通信系を呼び出す
  loop do
    EarthquakeNotification(id,id_name)
  end
end

Macで地震速報を通知してみた

Macで緊急地震速報を受信できるアプリを探してみたのですが、
見つからなかったので地震速報モドキを自作してみました。

Twitterに流れてる地震速報を拾ってGrowlに通知するという単純なモノです。
単純な作りですが、地震速報が全く受信できないよりはマシなのでしばらく運用してみます。

#!/usr/bin/ruby
# -*- coding: utf-8 -*-
require 'rubygems'
require 'tweetstream'
require 'ruby-growl'

# 監視するTwitterアカウントのID
# http://labs.transrain.net/products/earthquake_jp/
# ID番号
id = 4104111
# アカウント名
id_name = "earthquake_jp"

# 自分のTwitterのアカウント
$USERNAME = "username"
$PASSWORD = "password"

g = Growl.new("localhost","ruby-growl",["ruby-growl Notification"],nil,"")

# tweet監視はデーモンとして実行
fork do
  Process.setsid
  fork do
    TweetStream::Client.new($USERNAME, $PASSWORD).follow(id) do |status|
      if status.user.screen_name == id_name then
        g.notify("ruby-growl Notification","緊急地震速報","#{status.text}") 
      end
    end
  end
end

Twitterからの情報取得はこちらのブログに書かれているコードを利用させていただきました。
地震情報はこちらのアカウントを監視させていただきました。
有用な情報をネットに公開していただきありがとうございます。

ReadyNAS Ultra2をファクトリーリセットする

マニュアルには載ってないので、備忘録として残しておきます。
うろ覚えだけど、こんな感じの操作だったはず。

  1. 背面リセットボタンを押しながら電源ON
  2. LEDが全点灯したらリセットボタンを離す
    (電源、HDD1/2、バックアップLED)
  3. フロントパネルのバックアップボタンを2回押す
    (HDD1のLEDのみが点灯した状態になる)
  4. 背面リセットボタンを1回押す
  5. 自動的に再起動がかかって、工場出荷状態になる。

Snow Leopardで純正以外の液晶を使うときの設定

Snow Leopardにしてから今までずっと文字が薄いと思ってたんですが、
純正品以外の液晶モニタを使うとLCD向けのアンチエイリアス
(サブピクセルレンダリング)が無効になると今頃知りました。
もっと早く気がつけよと自分でも思いますが・・・

Leopardの頃は純正以外のモニタでもサブピクセルレンダリング出来たのに、
なんで制限かけたんでしょうね??

GUIからの設定は消えちゃいましたが、CLIからは設定できるらしいので、
さっそく設定してみました。

defaults -currentHost write -globalDomain AppleFontSmoothing -int 2

ターミナルを開いて上記のコマンドを入力してログインし直せば設定完了です。

うん、凄く見やすくなった\(^_^)/

USB音源のプチノイズ対策 その2

USB音源のプチノイズ対策の続編です。
USB Audioバッファーを追加してもダメな場合の対策。

●Audio処理系サービス実行中はDLLのアンロードを禁止する。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Audiosrv\Parameters]
“ServiceDllUnloadOnStop”=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AudioEndpointBuilder\Parameters]
“ServiceDllUnloadOnStop”=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MMCSS\Parameters]
“ServiceDllUnloadOnStop”=dword:00000000

●Audio処理の優先度を上げる。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile\Tasks\Audio]
“Scheduling Category”=”High”
“SFIO Priority”=”High”
“Background Only”=”False”
“Priority”=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile\Tasks\Pro Audio]
“Scheduling Category”=”High”
“SFIO Priority”=”High”
“Background Only”=”False”
“Priority”=dword:00000001

ここまでやってもダメならば諦めるしかないかもね。

Windows7のCPUクロック制御をカスタマイズする

Windows7でEISTやCoQのクロック制御の閾値を変更する。

以下のレジストリを適用すると電源オプションの設定画面に閾値設定の項目が現れる。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\06cadf0e-64ed-448a-8927-ce7bf90eb35d]
"Attributes"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\12a0ab44-fe28-4fa9-b3bd-4b64f44960a6]
"Attributes"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\40fbefc7-2e9d-4d25-a185-0cfd8574bac6]
"Attributes"=dword:00000000

なぜかCurrentControlSetじゃなくControlSet001と書いてたので修正しました

こんな感じで表示されるので、クロックの上昇/下降のトリガーとなるCPU負荷値を設定する。

USB音源のプチノイズ対策

自分用メモ

  1. 音源を帯域占有できるUSBチャネルに接続する。
  2. 以下のレジストリを開く
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\USB\VID_<xxxx>&PID_<yyyy>
    \<device_instance>\Device Parameters
  3. DWORD 32bitで CapturePacketsPerUrb キーを作成する。
  4. バッファーサイズを設定する。 (単位 ms)
  5. 再起動

HP-A3
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\USB\VID_1019&PID_0103
\<device_instance>\Device Parameters

HUD-mx1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_1852&PID_7925
\<device_instance>\Device Parameters

バッファーサイズ初期値
XP  10ms
Vista/7  4ms?