2/20/2011

激安DAC

 上海問屋で発売された激安DAC DN-DAC195を購入してみた
音質は残念だけど小さくてよい


2/14/2011

DOCKケーブル購入

DOCK STAAR.のDS-SALとM2-SALを購入

ちょっとトラブルもあったので報告おば



まずトラブルのほうですがM2-SALの方が内部の接触不良(たぶんハンダ不良)らしく
再生中にちょっとでも触ると左チャンネルしか鳴らなくなる
速攻でDOCK STAARに連絡したら「代替品と返送用封筒を送るので届いたら返送して」という対応
やり取りが面倒くさそうだから自力で直すことも視野に入れつつ連絡してたんで
この対応の良さ(話の早さ)にはビックリ。いいメーカーだと思う。


気になる音質ですけど、ZYCABLEからの移行だと正直あんまり音質差は感じない
(値段的にはSALのほうが1000円ちょっと高いのでガッカリ感はある・・・)

気のせい?レベルの話をすると
SALのほうが音はほそくて一音一音が引き締まってる印象
arrowのクセのある音場には合うと思う。
解像度とか分解能には寄与するところはない(ZYとの比較論)
音場は広くなるというより、左右と奥に一歩ずつ遠ざかる感じ
arrowは音源の位置が近い(広さはないが配置はしっかりしてるタイプ)のため
広がりを与えるとちょうどいい。

ちなみにZYとSALの違いは単線かより線かの違い。
SALはそのまんま針金3本って感じで
ZYCABLEは左右チャンネル分は銀線でGNDは銅線、いずれも極太
気兼ねなく持ち出すなら曲げに強いZYCABLEの方がいい(私が扱い間違ってコネクタ破損させるまでトラブルなかった)
SALは曲げを繰り返すと断線するはず(単線だからデリケート)


国内メーカーで対応もきちっとしてるDOCK STAARはなかなかいいです。
値段は割高だけど、なにより対応がいい点は高評価。
ケーブルは消耗品だし受注生産品だから出来栄えにムラがある都合上
作り手に信用おけるかどうかが大事だと思う。ブログに載ってる宣伝文句はさておき
客の心象を考えた対応をしてくれるところは信用おけると思う。
品質は悪くはなかった(故障箇所を除き)。

高いけど、割りとオススメ。

2/09/2011

mailx(mailコマンド)でgmailのSMTPを使う

msmtpがあればいい。


Gentooのドキュメントにわかりやすい記述があった
認証まわりの設定値はGoogleのドキュメントを参照

あとは ~/.mailrc に以下を書く
set sendmail="/usr/bin/msmtp"


アラートメールなんかを携帯で受けたいときには
smtp立てるより、こっちの方がいい(もちろん自宅サーバに限って)

アホみたいに遅いけどね(認証とか入るから)

2/08/2011

rubyの勉強続き

コンパクトにしてみた

ruby楽しいよ

個人の感想です


むか~し開発の仕事をしていて
C/C++やらJavaやらPerlを使っていたのだけれど
正直、好きじゃなかった

趣味でやってる分には楽しかったんだけど
途中で作るのが面倒になる

「ああもうシェルスクリプトでいいや」

充分にテストされてコンパクトで早いcoreutilsやら
枯れた実装かつノウハウ(悪いものも含めて)が充分にあるawkやらsedやら
bashやらzshの固有拡張機能があれば、いちいちPerlやら何やら持ち出すのが
バカバカしい。
(もちろんスクリプトで作りにくい、または現実的には困難なものもあるけど)

仕事じゃなくなってから、仰々しいものを作ったりしなくなったのも
「シェルスクリプトでいいや」を助長させてたと思う


なんで、シェルスクリプトでいいかというと
使い慣れたツールとの連携が可能、かつ楽
なによりも手軽に試せる。デバッグは面倒だけどテストは楽。
殆どのLinuxならzsh以外ならデフォルトで入ってるから
Linux間では可搬性も高い(違ったとしてもパスくらいだし)。


で、Rubyの勉強として過去作ったスクリプトの移植を試みてるんだけど
楽しいね。ほんと、純粋に楽しい。
awkやsed、grepレベルの文字列操作なら特に何も意識しなくても普通にできるし
「ちょっとやってみようかな」と思ったらすぐ試せる。シェルスクリプトばりに手軽。

PerlもJavaも構文が嫌いだった。Perlは後付臭いOOも嫌い。
あくまで”嫌い”なだけです。機能や性能や思想的な価値がRubyより劣るとか言ってるわけではありません。
ただ、私はPerlやJavaは大嫌いです。くそったれだと思います(個人の感想です)。
「ちょっとした小間使い的なツール作成」だと絶対に使いたくない。
(規模によってはJavaがいいかな、と思うこともある。ただしPerlはイヤだ)

RubyのALGOLみたいな構文はアレな気はしてたんだけど、書いてみてナルホドという感じ
こうじゃないといけなかったんだなぁと。

OOネイティブな感じもすばらしい。



思想的なものには一切興味はないんだけど
(例えばRubyのどこそこはどう美しい、それはなぜか とか)
規模問わず、お手軽にはじめられるのはいい。

とりあえずRubyで実装して、思考を整理したり実装する機能を選別したり検証してから
ほかの言語に移植(要件とか運用で使う言語変わるし)とかしてもいいかなと思えるくらい、良い。

2/07/2011

rubyでtapを覚えたかも

そのうち綺麗にします
とりあえずtapを覚えた
ファイルのhash取り込みも

snapshot.rb


勉強メモ

引き続きRuby中

メモを残す

#!/usr/bin/env ruby


require 'date'






def parse_dir(conf)
 snap = Hash::new

# hoge.tap{|h| hoge.each_pair{|src, dst| h[src] = "a"} }


 conf.each_pair {|src, dst| 
  _src = src.sub(/$\//,"").split(/\s*\/\s*/)
 if _src.size == 0
  snap[src] = "#{dst}/rootfs_#{Time.now.strftime("%Y%m%d").to_s}"
 else
  snap[src] = "#{dst}/#{_src[_src.size - 1].strip}_#{Time.now.strftime("%Y%m%d").to_s}"
 end
 }
 return snap
end


def get_conf(conf_file)
 conf = Hash[*open(conf_file).read.split(/\n/).map{|f| f.split}.flatten]
 return conf
end

class Snapshot
 def initialize(conf = "/etc/snap.conf")
 @snap = parse_dir(get_conf(conf))
 end
 def do_snap
 @snap.each_pair {|src, dst|
  system("btrfs","sub","snap",src,dst)
 }
 end
end


if ARGV[0] == nil
 snap = Snapshot.new
else
 if File::ftype(ARGV[0]) == "file"
  snap = Snapshot.new(ARGV[0])
 else
  p "no such file"
 end
end

if snap != nil
 snap.do_snap
end

rubyの勉強


やろう やろう と思いながら
結局3年くらい勉強しないままにしてたruby
せっかく参考書まで買ったのに一度も目を通してない
というわけで、仕事の空き時間に練習してみた
(参考書がないのでGoogle先生のお世話になりました)
構文からの勉強だから非常に時間がかかった(働け)

先日のbtrfsのスナップショット用スクリプトのruby移植+α版
ハッシュが使えるお陰で設定ファイルがシンプルになりました。
/path/src /path/dst の形式で1行ずつ書いてくだけ。
以前の階層に関連する制約がなくなりました。
データ構造をもう少し考えて
1つのでdstにつき、複数のsrcという形式で記述できるように
したほうがよかったかなと思ってます(今後の課題)
#!/usr/bin/env ruby

require 'date'


def parse_dir(conf)
snap = Hash::new
conf.each_pair {|src, dst|
_src = src.sub(/$\//,"").split(/\s*\/\s*/)
if _src.size == 0
snap[src] = "#{dst}/rootfs_#{Time.now.strftime("%Y%m%d").to_s}"
else
snap[src] = "#{dst}/#{_src[_src.size - 1].strip}_#{Time.now.strftime("%Y%m%d").to_s}"
end
}
return snap
end

def get_conf(conf_file)
conf = Hash::new
open(conf_file) {|file|
while i = file.gets
_line = i.split
conf[_line[0]] = _line[1]
end
}
return conf
end
class Snapshot
def initialize(conf = "/etc/snap.conf")
@snap = parse_dir(get_conf(conf))
end
def do_snap
@snap.each_pair {|src, dst|
system("btrfs","sub","snap",src,dst)
}
end
end

if ARGV[0] == nil
snap = Snapshot.new
else
if File::ftype(ARGV[0]) == "file"
snap = Snapshot.new(ARGV[0])
else
p "no such file"
end
end
if snap != nil
snap.do_snap
end

2/04/2011

btrfsの明示的に作成されてないサブボリュームの話

人によってはマスターボリュームとか親ボリュームとか言われるアレ


mount -o default,subvolid=0 /dev/hoge /mount/path
subvolid=0でマウントできる。スナップショットも取れる。
マスターとか親とか雰囲気的には間違いじゃないけど
このボリュームID 0さんもサブボリューム。

インストールルートをサブボリュームにしたときは
grubにrootflagsオプションを付ける必要がある。
root=UUID=hogehoge rootflags=subvol=rootfsとか
root=UUID=hogehoge rootflags=subvolid=xxxとか

うちのサブ環境も変えた


比較的最近に購入したWin7機があるんだけど
ゲームと動画編集くらいにしか使わないのでもったいない
というわけで動画をノンリニア編集したりするので容量は無駄遣いできないが
空いてる領域で何かできないかと考えてみた

とにかく現状では容量が足りない(元々ついてたHDDは280GBくらいだったはず)
500GBを増設して、そこに動画の元ネタを入れて編集してるんだけども
今のところキツキツ(Windows上での認識では460GBくらいに見えてる)
そこで500GBを買い足し(2480円)、500GB2つをオンボードで対応してるRAID 0にした。

まずは現在の環境の退避から、Win7のシステムイメージとリカバリ用のブートメディア作成機能の評価もしたかったので
OSの機能のみでやってみる。
シャドウコピーなので、一時間もかからない間にイメージファイルが作成される。
ちなみにこのイメージファイルはXenとかHyper-Vとかと互換性があるVHDイメージで
ディスク管理画面からVHDに接続することも可能。
ブートディスクの作成もCD-Rつっこんで待つだけ
とっても簡単で、すばらしい。

作業が完了したところでリカバリテスト。
そのまま上書きする形でリカバリをしてみたところ、これもすぐ終る
(ディスクイメージは外付けUSB HDDに書き出してあるものを読み出した)

ここからが本番。
SATAに接続されている機器が
0:初期搭載HDD(280GBくらい)
1:初期搭載DVD-RWドライブ
2:増設HDD(500GB)
3:今回足したHDD(500GB)
となってる。
ここでは2,3をグループにする。
0はいじらない。

作成手順は省略。オンボのだし。

作業完了後、そのまま起動してみる。
ブートローダは走ってるようだけどHDDが見つからないようで再起動がかかる。
(ディスクのデバイスIDかインスタンスIDみたいなもんが変わるはずなんで当然)
(またはUUIDみたいなイメージ?)
先ほど作成したブートディスクから起動
復旧をはじめる。指定イメージからの復旧で全体の復旧を試みる。
復旧はエラーなく完了し、再起動。
ところがどっこい同じ症状で起動しない。

またブートディスクをいれて、パーティション構成を見てみると
なにやら変な風に切れてた
なぞの100MB程度の領域がCドライブ
Dドライブ(280GB)
Eドライブ(456GB)
みたいな。
しかも 恐ろしいことにどいつもこいつも「空っぽ」
このシステムイメージからの復旧はディザスタリカバリや
HDD交換後のリカバリには使えないらしいという情報をネットでみる
たしかに出来てない(手順はもしかしたらあるのかもしれないが・・・)
面倒だからメーカのシステムリカバリ(OSを工場出荷時に戻す)で対応
退避したものからの復旧は一旦VHDをマウントして中身を普通のバックアップで
外に逃がして、フォルダ単位で個別復旧(システムファイルなどを手動で上書きできないので、あくまでリストア処理に任せる)
その途中で仕事に出てきたので、まだ結果はでてない。
これが終ったらCentosいれてXen環境の勉強でもしようと思う。
あとはファイルサーバかな。

btrfsのバックアップ運用

ちょっと考えてみた

一括でロールバックする手段はなさそうだから
あまり有り難味はないかもしれない
とりあえずバックアップ用のスクリプトを用意した

bashじゃなきゃだめ

しかもrootfsからみて2階層目までしか取得できない

/etc/snap.confをこんな内容で作成する
SNAP_DIR=(/ /home/user1 /home/user2)
それぞれのパーティション直下に.snapshotっていうサブボリュームを作っておく
なまえが気に入らなければ変数にして合わせて内容を変えればOK

#!/bin/bash

SNAP_DIR=(/)
_CONF="/etc/snap.conf"

##
_BTR_BIN=`which btrfs`
_SNAP_DEST_DIR=()
source "$_CONF"
_S_C=0
_D_C=0

_expr() {
    i=0
    for _A in $*
    do
        if [ "$_A" = "/" ]; then
            _SNAP_DEST_DIR[$i]="/.snapshot/rootfs_"`date '+%Y%m%d'`
        else
            _B=`echo $_A | awk -F/ '{print $2}'`
            _C=`echo $_A | awk -F/ '{print $3}'`
            _SNAP_DEST_DIR[$i]="${_A/$_B/$_B/.snapshot}/"
            if [ -z "$_C" ]; then
                _SNAP_DEST_DIR[$i]="${_SNAP_DEST_DIR[$i]}"$_B"_"`date '+%Y%m%d'`
            else
                _SNAP_DEST_DIR[$i]="${_SNAP_DEST_DIR[$i]/"$_C"\//$_C}""_"`date '+%Y%m%d'`
            fi
        fi
        i=`expr $i + 1`
    done     
}



_expr ${SNAP_DIR[@]}
_S_C=${#SNAP_DIR[@]}
_D_C=${#_SNAP_DEST_DIR[@]}

_I=0
while [ $_I -lt $_S_C -a $_I -lt $_D_C ]
do
    $_BTR_BIN sub snap ${SNAP_DIR[$_I]} ${_SNAP_DEST_DIR[$_I]}
    _I=`expr $_I + 1`
done

WSKY Bluetooth 5.0 トランスミッター レシーバー買いました

安くレシーバーモードでapt-x HDが使えるものというと非常に限られますが そのなかで高音質と評判のよかったものをということで購入しました。 音質は安いなりですね、apt-x HDで接続されている状態でも元がなんであれ痩せた音になります。 SBSにしか対応していない...