zt日記

書いているのは Kazuhiro NISHIYAMA a.k.a. ZnZです。
2001|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|
2012|04|05|06|09|

この日記にはツッコミを入れられます。 ツッコミを入れたい日付をクリックすると、フォームが現れます。

xreaでtDiaryを使う方法はxrea.com で tDiary を使う方法インストールメモXREA + tDiary + Namazuをどうぞ。


2010年01月01日(Fri)

謹賀新年

今年もよろしくお願いします。

モバイル回線

PCの接続に使うのをWILLCOMからEMOBILEに変えていて、つながらないかもと思っていたけど、問題なくつながっていた。

[ruby] ARGF

ruby 1.9 で String#each はなくなってしまったが、 IO#each や ARGF#each は残っているようだ。

% cat catfn.rb
#!/usr/bin/ruby
ARGF.each do |line|
  puts "#{ARGF.filename}:#{ARGF.file.lineno}:#{line}"
end
% ruby catfn.rb catfn.rb catfn.rb
catfn.rb:1:#!/usr/bin/ruby
catfn.rb:2:ARGF.each do |line|
catfn.rb:3:  puts "#{ARGF.filename}:#{ARGF.file.lineno}:#{line}"
catfn.rb:4:end
catfn.rb:1:#!/usr/bin/ruby
catfn.rb:2:ARGF.each do |line|
catfn.rb:3:  puts "#{ARGF.filename}:#{ARGF.file.lineno}:#{line}"
catfn.rb:4:end
%

2010年01月02日(Sat)

出来るだけ更新

今年の目標は出来るだけ毎日更新ということでPC関連以外もちょっと書いてみる。

[game] ゼルダの伝説 大地の汽笛

年末年始に進めようとしていたが、マイクが必須のところが結構あって、電車の中での移動中とかも進めようとすると厳しいところがあった。


2010年01月03日(Sun)

[nadoka] google bot

GoogleBot に年始にささださんが省略機能をつけてくれたので、「google> nadoka」などの代わりに「g> nadoka」のように書けるようになりました。 別に作成されていた google calc bot や google codesearch bot も取り込まれています。

API が対応しているからと入れてみた google local は日本に対応していないので、あんまり使えませんでした。 google news とかは便利だと思います。

NadokaWiki は句読点をよくみるとどこを誰が書いたのかある程度推測できるかもしれません。


2010年01月04日(Mon)

[debian] 設定ファイルのテスト

Debian (lenny) のサーバで使っているもの。

  • apache2: sudo apache2ctl configtest
  • bind9: /usr/sbin/named-checkconf -z
  • postfix: /usr/sbin/postconf -n など
  • samba: testparm
  • slapd: sudo slaptest

他にもあったかもしれないけど、すぐに思い出せたのはこのあたり。


2010年01月05日(Tue)

[ruby] 標準エラー出力のテスト

[ruby-dev:39116] のテストを追加するのに、 test/ruby/envutil.rb に assert_in_out_err というのがあって、それを使えばいいかと思ったが、 /:0/ にマッチしないというのが素直に書けそうになかったので、 assert_in_out_err の中で使っている EnvUtil.invoke_ruby を使って書いてみた

コミットした後で気づいたけど $DEBUG=true の時に出てくる例外発生場所は backtrace じゃなさそう。


2010年01月06日(Wed)

git bisect で ibus-skk が起動しない原因を調査

ibus-skk を更新したら起動できなくなって困ってしまったので、原因を git bisect で調べてみた。

まず master にいる状態で

  • git bisect start
  • git bisect bad
  • git bisect good ibus-skk-0.0.1

とした。

その後、alienで適当debを作成する方法で deb を作成して dpkg -i でインストールした後、ログインし直して試していき、結果に応じて

  • git bisect bad
  • git bisect good

を繰り返していくと、途中ファイルが変更された状態になっていて

  • git checkout engine/skk.xml.in

が必要なことがありつつ、以下の変更が原因だとわかった。

% git bisect next
6ae512110d846a6d101a743a72176cbe26fb59c3 is first bad commit
commit 6ae512110d846a6d101a743a72176cbe26fb59c3
Author: Daiki Ueno <ueno@unixuser.org>
Date:   Tue Dec 29 15:24:59 2009 +0900

    Request the default orientation of the lookup table.

:040000 040000 0df61ec21a0dbd6e5df25c8010a7d050642229b2 8eedc5739ed475d4806a27c81a3dff173dff9e57 M      engine
% git bisect log
git bisect start
# good: [81c1230149ac10d748a3541f853aa1b2531fef70] Show the URL of the SKK Project if SKK-JISYO.S is not found.
git bisect good 81c1230149ac10d748a3541f853aa1b2531fef70
# bad: [15922c5577b3887377ae0861c6ed6d62b4fce7cc] Use ibus.ORIENTATION_*.
git bisect bad 15922c5577b3887377ae0861c6ed6d62b4fce7cc
# good: [ca33bf5157cbadaac5f4f2f52d912240d0381716] Lower the preference rank from 99 to 70 so that IBus-Anthy is default.
git bisect good ca33bf5157cbadaac5f4f2f52d912240d0381716
# bad: [6ae512110d846a6d101a743a72176cbe26fb59c3] Request the default orientation of the lookup table.
git bisect bad 6ae512110d846a6d101a743a72176cbe26fb59c3
# good: [f0ebaaac8cc03459c5cf74761dcbde62bb08e23c] Move acceptable keys check from engine.py to skk.py.
git bisect good f0ebaaac8cc03459c5cf74761dcbde62bb08e23c
# good: [1c5388f8b65b9afee06c9a01324fc2b5aab31c91] Call emacsclient if the candidate string is "(...)".
git bisect good 1c5388f8b65b9afee06c9a01324fc2b5aab31c91
# good: [d2f741450ba0b7128720206cac4cf0653893f3aa] Done.
git bisect good d2f741450ba0b7128720206cac4cf0653893f3aa
# good: [d4fa90dbbbb8affd4b53b0df715439a40f3a985e] Align candidates to the page_size if pagination is active.
git bisect good d4fa90dbbbb8affd4b53b0df715439a40f3a985e
# good: [d4fa90dbbbb8affd4b53b0df715439a40f3a985e] Align candidates to the page_size if pagination is active.
git bisect good d4fa90dbbbb8affd4b53b0df715439a40f3a985e
%

IRC で報告してみると git の ibus じゃないと ibus.ORIENTATION_* が定義されてないということで直してもらえた。

また、調査の仕方として、ibus のアプレットを終了して、ibus-daemon --verbose で再起動してみればどこで落ちているかなど例外の情報も見えるということを教えてもらった。

% ibus-daemon --verbose
/usr/share/ibus/ui/gtk/candidatepanel.py:193: DeprecationWarning: Use the new widget gtk.Tooltip
  self.__tooltips = gtk.Tooltips()
/usr/share/ibus/ui/gtk/candidatepanel.py:243: DeprecationWarning: Use the new widget gtk.Tooltip
  self.__tooltips.set_tip(self.__aux_label, "Aux string")
/usr/share/ibus/ui/gtk/candidatepanel.py:262: DeprecationWarning: Use the new widget gtk.Tooltip
  self.__tooltips.set_tip(self.__prev_button, "Previous page")
/usr/share/ibus/ui/gtk/candidatepanel.py:267: DeprecationWarning: Use the new widget gtk.Tooltip
  self.__tooltips.set_tip(self.__next_button, "Next page")

(ibus-daemon:30206): IBUS-WARNING **: org.freedesktop.DBus.Python.AttributeError: Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.6/dbus/service.py", line 702, in _message_cb
    retval = candidate_method(self, *args, **keywords)
  File "/usr/lib/pymodules/python2.6/ibus/factory.py", line 68, in CreateEngine
    engine = self.__factory.create_engine(engine_name)
  File "/usr/share/ibus-skk/engine/factory.py", line 56, in create_engine
    return engine.Engine(self.__bus, "%s/%d" % (self.ENGINE_PATH, self.__id))
  File "/usr/share/ibus-skk/engine/engine.py", line 119, in __init__
    self.__lookup_table.set_orientation(1)
AttributeError: 'LookupTable' object has no attribute 'set_orientation'

^C

Traceback (most recent call last):
  File "/usr/share/ibus-skk/engine/main.py", line 105, in <module>
    main()
  File "/usr/share/ibus-skk/engine/main.py", line 102, in main
    launch_engine(exec_by_ibus)
  File "/usr/share/ibus-skk/engine/main.py", line 62, in launch_engine
    IMApp(exec_by_ibus).run()
  File "/usr/share/ibus-skk/engine/main.py", line 55, in run
    self.__mainloop.run()
KeyboardInterrupt
Traceback (most recent call last):
  File "/usr/share/ibus/ui/gtk/main.py", line 80, in <module>
    main()
  File "/usr/share/ibus/ui/gtk/main.py", line 76, in main
    launch_panel()
  File "/usr/share/ibus/ui/gtk/main.py", line 47, in launch_panel
    UIApplication().run()
  File "/usr/share/ibus/ui/gtk/main.py", line 42, in run
    gtk.main()
KeyboardInterrupt

この後、「git checkout master」しても zsh の vcs_info で (git)-[master|bisect] の bisect の消えなくてどうすればいいのか困ってしまったが、「git bisect reset」で消すことが出来た。


2010年01月07日(Thu)

[debian] subversion レポジトリのバックアップ

rsync を使ったバックアップ場所へコピーするのに、最初は svn-hot-backup を使おうかと思ったが、 rsync 側で --link-dest を使って古いものが残るので不要だと思ったので、「svnadmin hotcopy」を直接使うことにした。

svn_hot_backup_all () {
    cd /srv/svn
    for svn_repo_dir in */*; do
        if [ -f "$svn_repo_dir/format" ]; then
            svnadmin hotcopy "$svn_repo_dir" "$BACKUP_DIR/$svn_repo_dir"
        fi
    done
}
  • 「cd /srv/svn」しているのは $BACKUP_DIR を前に付けるだけでコピー先が他の変な場所にならないことを保証するため。
  • format ファイルをチェックしているのは、レポジトリ以外のファイルやディレクトリを除外するため。

2010年01月08日(Fri)

subversion の pre-commit hook

まとめて設定できるものがないか、頑張って探してみたところ、 http://svnchecker.tigris.org/ とその後継の http://repoguard.tigris.org/ というのを見つけたが、 repoguard は使い方が良くわからず、 svnchecker は挙動が微妙なこと ( https://thomas.apestaart.org/thomas/trac/wiki/5Minutes/svnchecker の手順を試してみると pylint test.py を直接実行したときのメッセージが svn クライアント側に出てこない) が気になったので、まだ使わないことにした。


2010年01月09日(Sat)

Tropy クローン

rails:3357を見てherokuを試してみようと思って、何を作るのか悩んで、とりあえず Tropy クローンを作ってみることにした。

そして出来たものは RoR ということで r をつけて Tropyr という名前にしてみた。

実際に動かしているのは http://tropyr.heroku.com/ で、ソースは http://github.com/znz/tropyr で公開した。

[rails] 自前でリソースルーティングのまね

苦労した点としては ActiveRecord で自動で振られる id ではなく pageid という ActiveSupport::SecureRandom.hex で生成した文字列で識別しようとしたため、 config/routes.rb で map.resources と同じようなことを個別に定義しないといけなくなって、 POST や PUT に対応するものは「:conditions => { :method => :put }」などをつければいいとわかって

map.random '', :controller => "tropies", :action => "index"
map.with_options :controller => "tropies", :pageid => /[0-9a-f]{32}/ do |t|
  t.tropy ':pageid.:format', :action => "show"
   t.edit_tropy 'e/:pageid.:format', :action => "edit"
   t.connect ':pageid.:format', :action => "update", :conditions => { :method => :put }
 end
 map.with_options :controller => "tropies" do |t|
   t.new_tropy 'c.:format', :action => "new"
   t.tropies '.:format', :action => "create", :conditions => { :method => :post }
 end

としてみたら、 GET 用だけのつもりの定義を上の方に書いていると POST や PUT の時もそちらにいってしまったので、

 map.random '', :controller => "tropies", :action => "index", :conditions => { :method => :get }
 map.with_options :controller => "tropies", :pageid => /[0-9a-f]{32}/ do |t|
   t.tropy ':pageid.:format', :action => "show", :conditions => { :method => :get }
   t.edit_tropy 'e/:pageid.:format', :action => "edit"
   t.connect ':pageid.:format', :action => "update", :conditions => { :method => :put }
 end
 map.with_options :controller => "tropies" do |t|
   t.new_tropy 'c.:format', :action => "new"
   t.tropies '.:format', :action => "create", :conditions => { :method => :post }
 end

のように GET も明示的に指定するか

 map.with_options :controller => "tropies", :pageid => /[0-9a-f]{32}/ do |t|
   t.edit_tropy 'e/:pageid.:format', :action => "edit"
   t.connect ':pageid.:format', :action => "update", :conditions => { :method => :put }
   t.tropy ':pageid.:format', :action => "show"
 end
 map.with_options :controller => "tropies" do |t|
   t.new_tropy 'c.:format', :action => "new"
   t.tropies '.:format', :action => "create", :conditions => { :method => :post }
 end
 #map.resources :tropies, :as => "t", :only => [:create, :update]
 map.random '', :controller => "tropies", :action => "index"

のように汎用的な方を後ろに持って行かないとダメだった。


2010年01月10日(Sun)

[linux] iptables-apply

リモートのマシンで、iptablesでなんかいじる前に保険をかけておく - (ひ)メモリモートでこわいことをやるを見て以前書いたiptables-applyはdebian独自なのかが気になって調べてみたところ、iptables自体に1.4.0で追加されているようだったので、新しいiptablesが入っていれば他のディストリビューションでも使えそうだと言うことがわかった。


2010年01月11日(Mon)

空の環境変数

[ruby-dev:40026]の話をみてUNIX系OSだとqmailのRELAYCLIENTのように空の環境変数でも設定されていることに意味があるものとして使われていたことがあったのを思い出した。

Windowsだと「set FOO=」のように環境変数を削除するので、空の環境変数と設定されていない状態は普通区別しないように見える。


2010年01月12日(Tue)

radiant 0.8.1 と rack 1.1.0

gem update して rack が 1.1.0 にあがったら radiant が動かなくなった ( Re: [Radiant] Rack 1.1.0 と同じ?) ので、とりあえず rack 1.1.0 をアンインストールして rack 1.0.1 だけに戻して解決した。

GIT_EXTERNAL_DIFF

etch 環境から lenny 環境にあげて tdiary に問題がおきないか調べるために wget しておいたファイルを git に入れて git diff で比較してみたところ、改行の変化でうまくいかなかった。

「git diff --ignore-all-space」とか「git diff --color-words」でもいまいちだったので、 http://git.or.cz/gitwiki/GitTips の git-oodiff を参考にして「odt2txt」を「ruby -e 'gets(nil).delete(" \t\r\n").gsub(/>/, ">\n").display'」にして「GIT_EXTERNAL_DIFF=./my-diff git diff」のように試してみたところ、非常にわかりにくい diff になってしまったけど、余分な差分は減らすことができた。


2010年01月13日(Wed)

tig.rb 不調の日

気がつくと何も流れてこないようになっていたので検索してみつけた http://twitter.com/cho45/tig-rb からたどって http://twitter.com/cisc/status/7703706925 http://twitter.com/cisc/status/7703719051 の修正をしてしのいだ。

後で git pull をするとちゃんと修正されていた。


2010年01月14日(Thu)

debian live の netboot

uuuu用にハードディスクが故障しているノート PC を netboot で youtube を再生できる環境にした。

最初は karmic の LTSP で試していたが ltsp-localapps や端末側への pulseaudio の設定がうまくいかなくてあきらめた。(gdm の起動時の音がなるのにログイン後は mixer の対象として dummy device しかでてこなかった。)

そこでもっと素直な環境として Debian の live-helper を使ってみることにした。

まず最初にちゃんと起動できることを確認するために

  • mirror は approx
  • i386 の lenny

であまりカスタマイズはせずに以下のように試してみた。

/etc/exports に

/srv/nfs/debian-live    *(ro,sync,no_subtree_check,no_root_squash)

を追加して

% sudo exportfs -av

で反映。(ro なので他のオプションなどは適当に設定)

karmic の live-helper だと「debian-live/i386/boot-screens/*」の include のパスがおかしかったので、それをなんとかしたりしたら起動できた。

キーボード設定などを追加したり、BIOS の時計がローカルタイムのようなので utc=no にしたり、 live helper を動かすのを karmic (live-helper 1.0.5-1, live-initramfs 1.157.2-1) から sid (live-helper 2.0~a3-1, live-initramfs 1.157.4-2) に変えたりした。

キーボード設定は「keyb=jp106」と書いてあるものもあったが「keyb=jp kmodel=jp106」じゃないとダメだった。 sid の live-helper では lh_config などがなくなっていて「lh config」などのようにしないとダメになっていた。 curl は http://bts.vinelinux.org/guest.cgi?project=wishes&action=view_report&id=178 を参考にして後述の libflashplayer.so のために追加した。 日本語関連はとりあえず表示が出来ればいいかということで ttf-vlgothic だけ入れて入力関係は入れなかった。

libflashplayer.so はライセンスの都合があるので、以下のようなシェルスクリプトを用意して別途インストールすることにした。

% cat /srv/nfs/debian-live/install-libflashplayer.sh
#!/bin/sh
set -ex
wget -N http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_10_linux.tar.gz
mkdir -p $HOME/.mozilla/plugins
tar xf install_flash_player_10_linux.tar.gz
mv libflashplayer.so $HOME/.mozilla/plugins
%

2010年01月15日(Fri)

LLVM勉強会

14日はLLVM勉強会梅田 - Low Level Virtual Machine Workshop Osaka Umeda, Japanだった。

そのために LLVM (バージョン2.6以上) が入った netboot のイメージを作ろうと思って、 lenny だと古いので squeeze や sid で作ろうとしたが、sid は「E: Couldn't find package aufs-modules-2.6-686」で失敗して squeeze は「E: Couldn't find package squashfs-modules-2.6-686」で失敗してしまった。 もうちょっと試行錯誤が必要そう。


2010年01月16日(Sat)

OOo 開発版のビルド

Getting the source - OpenOffice.org Wiki を参考にして、まず

mkdir ~/OOo
cd ~/OOo
hg clone http://hg.services.openoffice.org/DEV300 DEV300

でソースを取得した。

次に Building on Linux - OpenOffice.org Wiki を参考にして以下のようなシェルスクリプトを作成してビルドした。 configure のところでライブラリなどが不足しているとメッセージが出るので、それに従って不足しているパッケージをインストールしたり、シェルスクリプトの中でやっているようにファイルをダウンロードしたりすると configure が最後まで進んだ。 Wiki の方に書いてある (コメントアウトしている方の) 引数だとパッケージにないものまで要求されたので (何だったのかメモし忘れ)、あきらめて少なめのオプションにしようと思って --with-use-shell=bash だけにした。

% cat build-ooo.sh
#!/bin/sh
set -ex
cd $(dirname $0)
export CC='ccache gcc' CXX='ccache g++'
[ -d BUILD300 ] || time hg clone DEV300 BUILD300
[ -f unowinreg.dll ] || wget -N http://tools.openoffice.org/unowinreg_prebuild/680/unowinreg.dll
cp -p unowinreg.dll BUILD300/external/unowinreg/unowinreg.dll
[ -f seamonkey-1.1.14.source.tar.gz ] || wget -N ftp://ftp.mozilla.org/pub/mozilla.org/seamonkey/releases/1.1.14/seamonkey-1.1.14.source.tar.gz
cp -p seamonkey-1.1.14.source.tar.gz BUILD300/moz/download/seamonkey-1.1.14.source.tar.gz
cd BUILD300
#./configure --with-use-shell=bash --with-system-libs --without-system-jars --without-system-icu --without-system-agg --without-system-lpsolve --without-system-mspack --disable-mozilla
time ./configure --with-use-shell=bash
time ./bootstrap
case $(uname -m) in
  x86_64) source ./LinuxX86-64Env.Set.sh ;;
  *) source ./LinuxX86Env.Set.sh ;;
esac
time dmake

2010年01月17日(Sun)

mod_proxy

apache の古い設定を引き継いでいるファイルを見ていると「<Directory proxy:*>」で許可している設定があったが、この書き方は apache1 の頃のものらしく、 apache2 では「<Proxy *>」を使うようだ。 他の設定ファイルをみてみると「<Proxy http://localhost:8081/VirtualHostBase/http/*>」のようにもっと制限しているものもあった。


2010年01月18日(Mon)

行の折り返しで壊れた UTF-8 を直す

(少なくとも karmic で) apt での翻訳された文字列の出力の行の折り返しの処理がおかしくて、 UTF-8 の文字の途中でも折り返されてしまって壊れてしまう。 そこで適当なワンライナーで直す処理を書いてみた。

% apt-cache show apt|ruby-trunk -Ku -e '$<.each_line{|x|p x}'
"Package: apt\n"
"Priority: important\n"
"Section: admin\n"
"Installed-Size: 5244\n"
"Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>\n"
"Original-Maintainer: APT Development Team <deity@lists.debian.org>\n"
"Architecture: i386\n"
"Version: 0.7.23.1ubuntu2\n"
"Replaces: libapt-pkg-dev (<< 0.3.7), libapt-pkg-doc (<< 0.3.7)\n"
"Provides: libapt-pkg-libc6.10-6-4.8\n"
"Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.4.0)\n"
"Recommends: ubuntu-keyring\n"
"Suggests: aptitude | synaptic | gnome-apt | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt\n"
"Filename: pool/main/a/apt/apt_0.7.23.1ubuntu2_i386.deb\n"
"Size: 1685688\n"
"MD5sum: a9802ae4b51307bb25daf8a6075211fe\n"
"SHA1: b86dc69f84846c4b54606a5cd2e337ce4091e59e\n"
"SHA256: e7c06e4a71030790b1ba64a98076956a3ed68ba6d75f9ae83dafc5d83d366004\n"
"Description-ja: dpkg の高機能フロントエンド\n"
" Debian の dpkg\n"
" パッケージマネージャ用次世代フロントエンドです。 \xE3\n"
" \x82\xA4ンストールやアップグレードを、シンプルかつ安全に\n"
" 行う apt-get ユーティリティと APT dselect\n"
" メソッドを提供しています。\n"
" .\n"
" APT は、完全なインストール順序付けや、複数の取得源\xE3\n"
" \x82\x92設定できるなど、\n"
" 他にはない特徴を持っています。apt-doc\n"
" のユーザガイドをご覧ください。\n"
"Bugs: https://bugs.launchpad.net/ubuntu/+filebug\n"
"Build-Essential: yes\n"
"Origin: Ubuntu\n"
"Task: minimal\n"
"\n"
% apt-cache show apt|ruby-trunk -Kn -e '$<.read.gsub(/(?<=[\xc0-\xfd])\s+(?=[\x80-\xbf])/n, "").display'
Package: apt
Priority: important
Section: admin
Installed-Size: 5244
Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: APT Development Team <deity@lists.debian.org>
Architecture: i386
Version: 0.7.23.1ubuntu2
Replaces: libapt-pkg-dev (<< 0.3.7), libapt-pkg-doc (<< 0.3.7)
Provides: libapt-pkg-libc6.10-6-4.8
Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.4.0)
Recommends: ubuntu-keyring
Suggests: aptitude | synaptic | gnome-apt | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt
Filename: pool/main/a/apt/apt_0.7.23.1ubuntu2_i386.deb
Size: 1685688
MD5sum: a9802ae4b51307bb25daf8a6075211fe
SHA1: b86dc69f84846c4b54606a5cd2e337ce4091e59e
SHA256: e7c06e4a71030790b1ba64a98076956a3ed68ba6d75f9ae83dafc5d83d366004
Description-ja: dpkg の高機能フロントエンド
 Debian の dpkg
 パッケージマネージャ用次世代フロントエンドです。 インストールやアップグレードを、シンプルかつ安全に
 行う apt-get ユーティリティと APT dselect
 メソッドを提供しています。
 .
 APT は、完全なインストール順序付けや、複数の取得源を設定できるなど、
 他にはない特徴を持っています。apt-doc
 のユーザガイドをご覧ください。
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Build-Essential: yes
Origin: Ubuntu
Task: minimal

%

改行まで消さないといけない都合上、一気に読み込んで間のスペースを消すようにしてみた。 これだと ruby 1.9 必須になってしまうので、「(?<=...)」を使わないように書き換えてみた。

% ruby -e 'puts "\xE3\n \x82\xA4"' | ruby -Kn -e '$<.read.gsub(/([\xc0-\xfd])\s+(?=[\x80-\xbf])/){$1}.display'
イ

2010年01月19日(Tue)

[emacs] anything のコマンド一覧とか

コードの色つけの都合で http://d.hatena.ne.jp/znz/20100119 の方に書いた。


2010年01月20日(Wed)

FULLWIDTH TILDE と NKF

IRC の IRCnet の方で動かしている bot で FULLWIDTH TILDE か WAVE DASH かわからないが、ほとんどのクライアントで文字化けするシーケンス(ログを lv コマンドで見ると化けていなかったので、化けないクライアントもありうる)が送られることがあったので、調べてみた。

「-j」オプションで変換した結果を dump してみると「"\e$(D\"7\e(B"」になっていて、これは Wikipedia の 表3 7ビット符号のマルチバイト用キャラクタセットでの文字集合の選択 によると ISO-2022-JP-1 らしいということで、「-j」と同じ意味の「--oc=iso-2022-jp」も含めていくつか試してみると以下のような変換結果になった。 「--numchar-input」を使っているのは入力される文字をはっきりさせるためで、本質には無関係。

IRC できいてみたところ「CP50221使えってこと」らしいので、いくつかの bot では「-j」のかわりに「--oc=CP50221」を使うことにした。

% ruby -r nkf -e 'puts NKF.nkf("-j --numchar-input","&#xFF5E;").dump'
"\e$(D\"7\e(B"
% ruby -r nkf -e 'puts NKF.nkf("--oc=iso-2022-jp --numchar-input","&#xFF5E;").dump'
"\e$(D\"7\e(B"
% ruby -r nkf -e 'puts NKF.nkf("--oc=iso-2022-jp-1 --numchar-input","&#xFF5E;").dump'
"\e$B!A\e(B"
% ruby -r nkf -e 'puts NKF.nkf("-j", NKF.nkf("-s --numchar-input","&#xFF5E;")).dump'
"\e$B!A\e(B"
% ruby -r nkf -e 'puts NKF.nkf("--oc=CP50221 --numchar-input","&#xFF5E;").dump'
"\e$B!A\e(B"
% ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux], MBARI 0x6770, Ruby Enterprise Edition 2009.10
%

2010年01月21日(Thu)

証明書更新

いつものように CAcert.org で発行してもらっている証明書の更新のついでに一部のサーバは openssl genrsa で 4096 で生成した。

数値は2の累乗しかダメかと思っていたら、適当に「openssl genrsa -out hoge 1234」とかでも生成できるらしい。


2010年01月22日(Fri)

[emacs] wl-gravatar.el

sylpheed の ML で gravatar の話を見て wanderlust でも表示したいと思って gravatar.el を探したら http://gist.github.com/15087 は gnus 依存で困ったが、よく見ると fork の http://gist.github.com/18015 では gnus 依存を分離していた。

しかし、fork 元の方が更新されて機能が増えていたので、別途 fork して merge し直して wl-gravatar.el を作成した。

成果は http://gist.github.com/283328

% git clone git@gist.github.com:283328.git gravatar-el
Initialized empty Git repository in /srv/nfs/homes/kazu/Share/wc/gist/gravatar-el/.git/
cd gremote: Counting objects: 18, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 18 (delta 5), reused 18 (delta 5)
Receiving objects: 100% (18/18), done.
Resolving deltas: 100% (5/5), done.
% cd gravatar-el
% git remote add 15087 git://gist.github.com/15087.git
% git remote add 18015 git://gist.github.com/18015.git
% git pull 18015 master
remote: error: object directory /data/git/repositories/3/3d/ba/88/gist/15087.git/objects does not exist; check .git/objects/info/alternaremote: tes.
remote: Counting objects: 14, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 12 (delta 5), reused 0 (delta 0)
Unpacking objects: 100% (12/12), done.
From git://gist.github.com/18015
 * branch            master     -> FETCH_HEAD
Auto-merged gravatar.el
CONFLICT (content): Merge conflict in gravatar.el
Automatic merge failed; fix conflicts and then commit the result.
% emacs *.el
% git commit

Merge branch 'master' of git://gist.github.com/18015

Conflicts:

        gravatar.el
#
# It looks like you may be committing a MERGE.
# If this is not correct, please remove the file
#       .git/MERGE_HEAD
# and try again.
#

# Please enter the commit message for your changes.
# (Comment lines starting with '#' will not be included)
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   gnus-gravatar.el
#       modified:   gravatar.el
#
Created commit d5f6d7b: Merge branch 'master' of git://gist.github.com/18015
% git push
Counting objects: 20, done.
Compressing objects: 100% (16/16), done.
Writing objects: 100% (16/16), 3.14 KiB, done.
Total 16 (delta 7), reused 0 (delta 0)
To git@gist.github.com:283328.git
   576b19f..d5f6d7b  master -> master
% git add wl-gravatar.el
% git commit -m "add wl-gravatar.el"
Created commit 400a6c7: add wl-gravatar.el
 1 files changed, 56 insertions(+), 0 deletions(-)
 create mode 100644 wl-gravatar.el
% git push
Counting objects: 4, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 1.21 KiB, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@gist.github.com:283328.git
   d5f6d7b..400a6c7  master -> master
%

2010年01月23日(Sat)

Opteron 144 と VMware

AMD Opteron(tm) Processor 144 という CPU のマシンで amd64 の lenny を入れて VMware Server 2.0.2 を入れてみたところ、ゲスト OS に amd64 の OS が動かなかった。

VMware KB: Hardware and firmware requirements for 64bit guest operating systems によると revision D 以降でないとダメらしく、いろいろ調べた結果、

とわかって、わかりやすい違いは Socket ということで sudo lshw の出力のマザーボードの方の型番でも調べてみると http://www.tyan.com/archive/products/html/tomcatk8s_spec.html でダメな方の CPU しかのらないマザーボードと言うことで、ダメということがわかった。


2010年01月24日(Sun)

fml

Debian の fml パッケージが lenny 以降では無くなっているようなので、 mailman への移行を検討中。


2010年01月25日(Mon)

StartCom CA

気になっていたので一部のサーバで CAcert.org の代わりとして使ってみた。

Firefox だとなぜかうまくいかなかくて、 google-chrome だと証明書のバックアップ方法がわからなかったので、 Opera でやってみた。

Opera だとルート証明書が入っていなかったので、毎回ブラウザ起動後の初回接続で確認が必要だったが、個人証明書を発行してもらったり、CSR を送信してしばらくまって証明書をダウンロードしたりするのは問題なくできた。

最初のユーザ登録や証明書の発行のところはちゃんと誰かが確認しているらしく、メールを待ってから続きという感じだった。

サーバへの設定は CAcert.org と違って中間証明書の設置も必要のようなので、FAQ を見て設定したが、中間証明書の設定がちゃんと設定出来ているかどうかの確認方法はよくわからなかった。


2010年01月26日(Tue)

AppleScript で最小化して実行

ほとんど使ったことがない Mac OS X で 端末上で動くプログラムを通知スペースに入れる のような感じのことをしたかった。

いろいろ調べた結果、結局以下のようなファイルを command という拡張子で作成して実行属性をつけるということにした。

osascript -l AppleScript -e 'tell application "Terminal"
  set miniaturized of front window to true
end tell'

ここでデーモン的なプログラムをフォアグラウンドで起動

# http://apple.sysbio.info/~mjhsieh/archives/000328.html
echo "Please close this terminal window!"
osascript -l AppleScript -e 'tell Application "Terminal" to close every window w
hose contents contains "Please close this terminal window!"' &

参考にしたサイト:


2010年01月27日(Wed)

[ruby] 未初期化変数バグ

Failure: test_segv_test(TestRubyOptions) は同じ環境なのに chkbuild でビルドしている方は Failure にならなくて $HOME 以下に入れている方だけで起きていた。 他にもいくつかの環境で試しても再現しなかったので、再現するうちに調べた方が良さそうと思ったら、結構簡単に直せたので良かった。

SEGV のテストってどうやってるのかと思ったら、"Process.kill :SEGV, $$" で自分に SIGSEGV を送りつけているだけだった。


2010年01月28日(Thu)

[debian] etch から lenny

専用サーバの etch を lenny にあげた。 特に問題なく再起動できて、 trac-admin で upgrade をしたり、ユーザのcgiでエラーになっていたので apache2-suexec パッケージを入れたりした。 cron で動くものなどで、まだ問題が残っているかもしれないので、まだ様子見中。


2010年01月29日(Fri)

[emacs] wl-gravatar

wl-gravatar.el で画像を入れているバッファで flyspell-buffer を実行すると画像の中でなぜかひっかかることがあったので悩んでいたが、(insert-image-file filename) を (insert-image (create-image filename)) に変えると直った。

違いがよくわからないが、画像の上で C-x = (what-cursor-position) などで確認すると画像の内容そのままが埋まっていたのが半角スペース1個に変わって問題が起きなくなったように見える。


2010年01月30日(Sat)

[nadoka] mlabot

%ruby などで動かしている mlabot で、最近の subversion の fsfs のように 1000 通ごとにおいたディレクトリにメールアーカイブを保存しておいて、そこから subject を取り出そうかと思ったが、結局手動でそこに移動するようにしていると最新のメールに対応できないので、あきらめて open-uri で html の title をとってくるようにした。


2010年01月31日(Sun)

[debian] 5.0.4

Debian -- News -- Debian GNU/Linux 5.0 updated ということで 5.0.3 から 5.0.4 にあがったので、更新していった。

少し前に etch から lenny にあげたサーバがあるけど、もうちょっと待っておけば再起動の回数が減らせたのに、と思ってしまった。


copyright © 2001-2013 ZnZ
Key fingerprint = 6E14 2C9C DBD7 874D 8B3C CAA8 9B58 5538 ED7E 1B73