. 知らん間に日付が変わってた。
module WavFile
class NotWavFormatError < StandardError
end
class Chunk
attr_reader(:id, :size, :data)
def read(file)
@id = file.read(4)
@size = file.read(4).unpack("V")[0]
@data = file.read(size)
end
end
def WavFile.read(file)
riff = file.read(4)
data_size = file.read(4).unpack("V")[0]
wave = file.read(4)
raise(NotWavFormatError) unless riff == "RIFF" and wave == "WAVE"
while not file.eof?
chunk = Chunk.new
chunk.read(file)
p([chunk.id, chunk.size])
end
end
end
if $0 == __FILE__
File.open(ARGV[0]) do |f|
f.binmode
WavFile.read(f)
end
end. とりあえずこんな感じ。 ファイルに含まれているチャンクの種類とサイズを表示します。
. こういうちょっとだけ作って使う場合って、 どこまでクラスにしたりとかモジュールにしたりとかいう判断がなかなか出来ない。 で、今回の目的は「余分なチャンクを取り除く」ということです。 なので、単純に必要なチャンクのみを残して、 ファイルに書き出すだけで終わり、だと思う。
module Wav
class NotWavFormatError < StandardError
end
class Chunk
attr_reader(:id, :size, :data)
def read(file)
@id = file.read(4)
@size = file.read(4).unpack("V")[0]
@data = file.read(size)
end
def write(file)
file.write(@id + [@size].pack("V") + @data)
end
end
class File
def initialize
@chunks = []
end
def read(file)
riff = file.read(4)
data_size = file.read(4).unpack("V")[0]
wave = file.read(4)
raise(NotWavFormatError) unless riff == "RIFF" and wave == "WAVE"
while not file.eof?
chunk = Chunk.new
@chunks.push(chunk)
chunk.read(file)
end
end
def write(file, filters = nil)
filters = ["fmt ", "data"] if filters.class != Array
size = 4
@chunks.each do |chunk|
size += 4 + chunk.size + 4
end
file.write("RIFF" + [size].pack("V") + "WAVE")
@chunks.each do |chunk|
chunk.write(file) if filters.include?(chunk.id)
end
end
end
end
if $0 == __FILE__
wavfile = Wav::File.new
File.open(ARGV[0]) do |f|
f.binmode
wavfile.read(f)
end
File.open(ARGV[1], "w") do |f|
f.binmode
wavfile.write(f)
end
end. 一応いけてるみたい。 今回はdataチャンクとかの中身まで触る必要が無かったから、 手間もかからずに済んだ。よかったよかった。
. でも、ちょっとしたことをやるスクリプトにしては大きすぎないか?(^^;) WAVファイルとかAIFFファイルとかを触る為のクラスとかを書き溜めておく必要があるかな。
. ふと思い立ったのでCygwin向けXFree86をインストールしてみる。
. インストールは Cygwin を使う。 にある Cygwin 環境の構築:X11を動かす を見ながらやってみた。 感謝。
. で、一通りインストールしたんだけどもXWinが一瞬表示されただけで終わってしまう。 Googleとか2chとかで調べた結果、 一般的な答えは「binary modeでmountせよ」という感じらしい。 その後XWinが立ち上がらない原因自体はフォント fixed を見つけられないことらしく、 /usr/X11R6/lib/X11/fonts/misc/fonts.dirの改行コードをLFのみにすることで解決し、 startxwin.shの実行が成功した。
. ちうことで、記念スクリーンショット。
. で、結局binary modeでmountし直すべきなのかな。 このまま使っていって、ダメなら考え直そう。
. ports-currentでインストール。手順は以下の通り。
. ddclient.confはddclient.conf.sampleを元に作りました。 hn.org向け設定のみ生かしてます。 一部余分な行があるけど直すの面倒だから気にしない。
--- /usr/local/etc/ddclient.conf.sample Sun Feb 17 23:27:13 2002
+++ /usr/local/etc/ddclient.conf Mon Feb 18 00:32:35 2002
@@ -14,7 +14,7 @@
######################################################################
daemon=300 # check every 300 seconds
syslog=yes # log update msgs to syslog
-mail=root # mail update msgs to root
+mail=don # mail update msgs to root
pid=/var/run/ddclient.pid # record PID in file.
#
#use=watchguard-soho, fw=192.168.111.1:80 # via Watchguard's SOHO FW
@@ -39,10 +39,12 @@
#use=ip, ip=127.0.0.1 # via static IP's
#use=if, if=eth0 # via interfaces
#use=web # via web
+use=if, if=tun0 # via interfaces
#
#protocol=dyndns2 # default protocol
#proxy=fasthttp.sympatico.ca:80 # default proxy
#server=members.dyndns.org # default server
+#server=members.dyndns.org # default server
#server=members.dyndns.org:8245 # default server (bypassing proxies)
#login=your-login # default login
@@ -102,11 +104,11 @@
##
## Hammernode (hn.org) dynamic addresses
##
-# server=dup.hn.org, \
-# protocol=hammernode1, \
-# login=your-hn-login, \
-# password=your-hn-password \
-# your-hn-host.hn.org,your-2nd-hn-host.hn.org
+server=dup.hn.org, \
+protocol=hammernode1, \
+login=iwadon, \
+password=******* \
+iwadon.hn.org
##
## dslreports.com dynamic-host monitoring. ddclient.shもddclient.sh.sampleを元にしましたが、 ddclientはperlのスクリプトなので元のままではstopできませんでした。 ちょっと変更しすぎたかも。
--- /usr/local/etc/rc.d/ddclient.sh.sample Sun Feb 17 23:27:13 2002
+++ /usr/local/etc/rc.d/ddclient.sh Mon Feb 18 00:51:40 2002
@@ -1,19 +1,19 @@
#!/bin/sh
+if ! PREFIX=$(expr $0 : "\(/.*\)/etc/rc\.d/$(basename $0)\$"); then
+ echo "$0: Cannot determine the PREFIX" >&2
+ exit 1
+fi
+
case "$1" in
start)
- if [ -x /usr/local/sbin/ddclient ]; then
- /usr/local/sbin/ddclient -daemon 300 && echo -n ' ddclient'
- fi
+ [ -x ${PREFIX}/sbin/ddclient ] && ${PREFIX}/sbin/ddclient -daemon 300 && echo -n ' ddclient'
;;
stop)
- /usr/bin/killall ddclient
- echo -n ' ddclient'
+ [ -r /var/run/ddclient.pid ] && /bin/kill `/bin/cat /var/run/ddclient.pid`
;;
*)
- echo ""
echo "Usage: `basename $0` { start | stop }"
- echo ""
exit 64
;;
esac. しばらく使ってみます。
. ふと思い立って、昨日の晩からインストールしてました。 RPMなんてPS2 LinuxKit以来だなぁ。
. ってことで、ようやくmph-getが動かせるようになったので、 覚書。
. インストールは 使い方 にある通り。 今回は念の為にmountを全部解除した上、 /をbinary modeでmountしました。 いつかtext modeで試してみたい。
. /etc/mph.confはこんな感じ。 なかなか動作しないんで、ソースを追っかけながら動かしたら、 $get_commandsの記述の順番が鍵ということが判明。とほほ。
$keep_local_copy = false
$get_commands = [
# 'ncftpget ftp://localhost/usr/src/%s',
'wget --passive-ftp --non-verbose ftp://ftp.st.ryukoku.ac.jp/pub/ms-windows/%s',
'ln -s /usr/src/%s .',
]
$holds = [
]
$directories = [
"redhat/RPMS/i686", # for local
"redhat/RPMS/noarch", # for local
"HeavyMoon/rpms/i686", # for Project HeavyMoon
"HeavyMoon/rpms/noarch", # for Project HeavyMoon
]. 会社で試そうかと思ったんだけど、 wgetって Black Jumbo Dog のftp proxy機能には対応していないんだよなぁ。 かといって他のftp関連ソフトが Black Jumbo Dog に対応しているって話も聞かないし。
. 会社では今まで通りsetup.exe使うか。残念。
つっこみなどありましたらどうぞ。メイルアドレスは公開されません。
+ Dane 『Rudy』
+ クエストVIII 『攻城戦雑記ギルド戦に関しての様々な解説http://www.zhangweijp.com/rbro/index.htm』
+ 本日の予定 『過去ログサイトマップご意見フォームRo最新パッチ http://www.ragnaroklink.com/game/』
+ 前衛さん 『リニューアルされた攻撃魔法 http://www.game-fc2blog.com/chaos』
+ 前衛さん 『リニューアルされた攻撃魔法 http://www.game-fc2blog.com/chaos』