December 28, 2007
風邪
体温を計ってみたら微熱があるようだ。普段はこのぐらいの体温で体中が痛くなることはないので、インフルエンザを疑われた。15分ぐらいで検査できるらしいので、検査してもらったけど問題なし。まあ一回だけだけど、予防接種もしてたしなあ。
そんなで、薬もらって養生しよう。
ホームの下にいる不思議なファイルたち
- 01-1.pdf
- 01-5.pdf
- 1.ps
- 2.ps
- 3.ps
- 4.ps
- 5.ps
- 6.ps
- 7.ps
- a
- a.txt
- bar.ps
- f.c
- foo
- foo.ps
- foo.sh
- foo.xml
- t.c
- t.ps
- test
- test.c
- test.pdf
- tmp5
- tmp6
- tmp8
- tmp9
- tt.c
中身をみないと正直なんのファイル(もしくはディレクトリ)なのか不明。
December 27, 2007
December 26, 2007
Invalid card number (cont.)
December 22, 2007
Invalid card number
とりあえずgnome-sound-propertiesで自動検出からOSSに変更しといた。
December 18, 2007
December 17, 2007
破壊的代入とcopy-sequence
(defun foo ()
(let ((bar '(a b c)))
(if (eq (car bar) 'a)
(prog2
(setcar bar 'e)
(foo)))
bar))
なんとなくbarには常に(a b c)が代入されて無限ループになりそうなもんだけど、最初の呼び出しも含めて実際にはfooは2回しか呼ばれない。これは'(a b c)が実行時に生成されるんではなくて、読み込み時に生成されるからなんだそうな。これを回避するにはlistやconsといった関数を呼び出せばいいようだ。ただこれらの書き換えが出来ない場合には、copy-sequenceやcopy-treeといった関数を使うことで手間を省くことが出来る。
勉強になった。
mew-ical.el
ファイルは前回と同じ場所に置いた。
December 15, 2007
December 14, 2007
MewでiCalendar形式のファイルに対応させる
- iCalendarの情報を(気持ち)分かりやすく表示する
- 自分のカレンダーサーバへ登録する
- ステータスの更新
- Mewからカレンダーサーバへアクセスする
- 承諾の可否を選択した後、要求者に対してメールで返信すること
- 排他制御
- カレンダーサーバに対する認証の有無の自動検出
- ローカル時間で表示すること
- その他多数
- emacs
- mew
- browse-url
- curl
- iTIPをサポートしたカレンダーサーバ
December 11, 2007
Open Tech PressのRSSがGoogle Readerで読めない
December 8, 2007
December 7, 2007
December 6, 2007
Tomboyが動かない
** (Tomboy:20454): WARNING **: The following assembly referenced from /usr/lib/t
omboy/Tomboy.exe could not be loaded:
Assembly: Mono.Addins (assemblyref_index=7)
Version: 0.2.0.0
Public Key: 0738eb9f132ed756
The assembly was not found in the Global Assembly Cache, a path listed in the MO
NO_PATH environment variable, or in the location of the executing assembly (/usr
/lib/tomboy).
** (Tomboy:20454): WARNING **: Could not load file or assembly 'Mono.Addins, Ver
sion=0.2.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' or one of its de
pendencies.
** (Tomboy:20454): WARNING **: Missing method .ctor in assembly /usr/lib/tomboy/Tomboy.exe, type Mono.Addins.AddinEventHandler
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'Mono.Addins, Version=0.2.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' or one of its dependencies.
File name: 'Mono.Addins, Version=0.2.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756'
at <0x00000>
at Tomboy.AddinManager..ctor (System.String tomboy_conf_dir) [0x00000]
at Tomboy.NoteManager.CreateAddinManager () [0x00000]
at Tomboy.NoteManager..ctor (System.String directory, System.String backup_directory) [0x00000]
at Tomboy.NoteManager..ctor (System.String directory) [0x00000]
at Tomboy.Tomboy.Main (System.String[] args) [0x00000]
この問題、policy-install scriptがcli-common-devに入ってたことが原因らしく、cli-common-0.5.1で修正されている。ただし、cli-commonをupdateしただけではだめで、libmono-addins-gui0.2-cilとlibmono-addins0.2-cilを再インストールするか、手でpolicy-install scriptを実行しないといけない。
December 5, 2007
iCalendar関係のメモ
- RFC2445 Internet Calendaring and Scheduling Core Object Specification (iCalendar)
- RFC2446 iCalendar Transport-Independent Interoperability Protocol (iTIP) Scheduling Events, BusyTime, To-dos and Journal Entries
- RFC2447 iCalendar Message-Based Interoperability Protocol (iMIP)
- RFC3283 Guide to Internet Calendaring
December 4, 2007
iceweasel is too unstable...
全く同じ構成とはいかないけど、似たような構成にしてみて上記の問題が一切起きないことを確認。passwordなんかはPassword Exporterを使った。今のところ快適なり。
人身事故
しかし田園都市線って行き帰りで上り下りの混雑状況が見事なまでに反転するんだけど、朝の時間帯で下りで混みまくり、立ってる人もいるとかそういうレベルじゃない状況を見たのは今回が初めてだった。一度電車に乗ったらもうだいぶ混雑も収束方向へ向かってたこともあり、その後は特にトラブルはなく、結局なんやかんやと会社について予定より一時間半遅れ。腰痛い…。
December 3, 2007
screen breaks the terminal layout
Anyway, I have experienced an issue since when I updated screen from some version. that totally breaks the terminal layout, particularly when the line-graphic appears say. that behavior is really annoying and makes it a lot of troubles to me in daily use. So I investigated this issue.
First, I have never seen such problems on F-8. this probably means Debian-specific patches introduces it. looking at debian/patches.... there are the questionable filename there... it is... 40cjk_eastasian.dpatch.
Okay, let's look into the patch. hmm, there are the big tables in utf8_isdouble(). well, that actually deals with Unicode, but not UTF-8. but anyway.
I guess from the function name what is required and assume that it may misnterprets the given Unicode is the wide character. so I simply replaced them with wcswidth(3) and looks good so far.
November 30, 2007
Delete key introduces a tilde
bindkey '^[[3~' delete-char
November 29, 2007
November 26, 2007
タイムゾーンがUTCから戻らない
November 25, 2007
November 22, 2007
November 20, 2007
ねむい…
息子は絶好調のようだ。早朝遊べと起こされた。まだ外真っ暗だし、一体何時なんだよと時計をみると5:30であった。日の出もずいぶんと遅くなったなあ。
November 19, 2007
AC5
だいぶ勘が鈍ってて、最初は酷いありさまだったけど、まあなんとか途中から調子を取り戻すことができた。よかった、よかった。
次にやれるのは、いつになることやら…。
November 16, 2007
退院?
まあ、そんなこんなで、家に帰っても誰もおらんし、やることもないんで基本的に暇。
November 9, 2007
November 6, 2007
November 5, 2007
November 2, 2007
October 25, 2007
rdocで生成されるyamlのファイルがへん? (続き)
diff -ruN ruby-1.8.5.orig/lib/rdoc/rdoc.rb ruby-1.8.5/lib/rdoc/rdoc.rb
--- ruby-1.8.5.orig/lib/rdoc/rdoc.rb 2006-08-05 07:00:25.000000000 +0900
+++ ruby-1.8.5/lib/rdoc/rdoc.rb 2007-10-25 18:17:03.000000000 +0900
@@ -136,7 +136,7 @@
result = []
patterns.split.each do |patt|
- candidates = Dir.glob(File.join(in_dir, patt))
+ candidates = Dir.glob(File.join(in_dir, patt)).sort
result.concat(normalized_file_list(options, candidates))
end
result
@@ -184,7 +184,7 @@
# we may well contain subdirectories which must
# be tested for .document files
def list_files_in_directory(dir, options)
- normalized_file_list(options, Dir.glob(File.join(dir, "*")), false, optio
ns.exclude)
+ normalized_file_list(options, Dir.glob(File.join(dir, "*")).sort, false,
options.exclude)
end
こんな感じで、.documentの結果および与えられたパスの結果を一定にすることで、回避。適度に:nodoc:、:startdoc:や:stopdoc:で制御するとあってしかるべきファイルまでなくなる副作用があるぽいので、rdocそのものを大幅に改良しないとだめな気がする。問題の発生する状況からして、あまりそのへん考えられていなかったような気がするけど。
October 24, 2007
XKBまわりのトラブル再び
Xの入力まわりのhotplugサポートが云々とかでぐちゃぐちゃなようなので、結局evdevのドライバを消して現状回復。ノートでUSBキーボードとかマウスは使ってないから問題なし。
相変わらずgdmではAlt+Ctrl+Fnでコンソールに切り替えられないけど。
October 22, 2007
unable to open slave
ALSA lib pcm_dmix.c:864:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm_dsnoop.c:558:(snd_pcm_dsnoop_open) unable to open slave
これのせいで実際うまく動いてくれない。ぐぐってみたらこんなのを発見。肝はStep 8ぽい。
STEP 8As root, edit /usr/share/alsa/cards/HDA-Intel.conf (or whatever the ALSA configuration file is called for your soundcard) and change:
capture.pcm {
type plug
slave.pcm {
@func concat
strings [ "dsnoop:" $CARD ]
}to
capture.pcm {
type plug
slave.pcm {
@func concat
strings [ "hw:" $CARD ]
}i.e. replace "dsnoop:" with "hw:"
October 18, 2007
rdocで生成されるyamlのファイルがへん?
ちなみに結果は以下のとおり:
system/Kernel/warn-i.yaml at i386:
--- !ruby/object:RI::MethodDescription
aliases: []
block_params:
comment:
full_name: Kernel#warn
is_singleton: false
name: warn
params: (msg)
visibility: public
system/Kernel/warn-i.yaml at x86_64:
--- !ruby/object:RI::MethodDescription
aliases: []
block_params:
comment:
- !ruby/struct:SM::Flow::P
body: Display the given message (followed by a newline) on STDERR unless warni
ngs are disabled (for example with the -W0 flag).
full_name: Kernel#warn
is_singleton: false
name: warn
params: |
warn(msg) => nil
visibility: public
ちょっとした一例にすぎないけど、まあこんな感じ。
元となっているerror.c内のコメントをみるとx86_64側が正しい結果に見える。実際のところparse時にはコメントの情報はちゃんと得られているようで、error.c単体をrdocに食わせればそれっぽく出力されるけど、他のメソッドで微妙な抜けや順序が違うなどの問題もでたりするので、ちょっとまだ調査中。
October 17, 2007
October 10, 2007
トラックボール
最近は光学式でかつコードレスが主流っぽくて、だいぶ浦島太郎状態だった。あと高い。最低限の機能だけあればいいので、やたらボタンがついてるやつは候補から除外。ちょっとほしいと思ったのは、LogicoolのMX Air。モーションセンサーがついてて、空中でもカーソルを動かせる。デモってたので触ってみたけど、すげー。と思いつつちょっと冷静に考えて、会社で使うのに、そんなもんいらん罠と。
結局あれこれ悩んだ末にLogicoolのCordless TrackMan Wheelにした。電池が切れた時面倒だなあと思ったけど、コードが煩わしいので。
さっそく取り付けてみたが、どうも今使っているKVMと相性が悪いようで、全く反応しない…。しょうがないので、メインのマシンに直接取り付けて問題の先送り。
October 8, 2007
新オフィス
なんつーか、広い。そしてどういう訳か日ごろ用事のある場所はあらゆる遠い。新手の嫌がらせかと思うくらい遠い。
いい運動にはなるんだろうけど、ちょっとナニ。
October 4, 2007
R BURGER
店内は落ち着いた雰囲気で、昼よりは夜の方が似合いそう。アールバーガーとチキン梅バーガーをチョイス。1040円だった。高けえ…。注文を受けてから調理するらしく、しばし待たされる。でもモスより早いかな。混雑状況の問題か。
モノはというと、かねてよりあの白い物体が何なのか気になってたけど、蒸し饅頭なのか…。食べた印象としては、そのまま肉まんを半分に切って、中の具をパティにしてはさんだ、という感じ。まずくはないと思うけど、リピートしたいほどでもないなあ。
画像は…、まあR BURGERのページで確認して。どこかの詐欺みたいな画像と違って、見た目といっしょなので。
October 3, 2007
mount: could not find filesystem '/dev/root'
これでrootが見つからない問題は回避できたけど、/etc/fstabにはLABEL=/が/だと記述しているので、そのままだとまだ途中でこけるので、メンテナンスモードでログイン。e2labelで確認してみるも、何もラベルは設定されておらず、原因を特定。後はラベルを設定して解決。
# e2label /dev/VolGroup00/LogVol00 /
October 2, 2007
Modifierキーの設定
keycode 113 = Hyper_L Hyper_Lgnome-keyboard-propertiesでAltの設定をいじってある場合にはデフォルトへ戻しておく。後はxmodmapを呼んで設定を変更するだけ。
keycode 129 = Super_L Super_L
clear Mod1
clear Mod3
clear Mod4
add Mod1 = Alt_L Meta_L
add Mod3 = Hyper_L
add Mod4 = Super_L
October 1, 2007
CD発掘
代わりに、というかあまりの懐かしさにそのまま引っ張り出してしまったんだけど、平松愛理のCDを何枚か。どう贔屓目に聴いても「一夜一代に夢見頃」までかなあとか。あとはなんか曲調変わりすぎてちょっとパス。まあ「7 DAYS GIRL」までは買ってはいたけど。
あと、EPO。「Wica Epo」ってアルバムに、ワンダーゾーンっていう関口宏が司会してた番組のテーマソングに使われてた「百年の孤独」が入ってて、まあこれ目当てに当時買った。
あとは、なんだ。THE BOOMとか。まあ語れるほどでもないけど、「島唄」でメジャーになる前の方がよかったと思う。KOKIAもそうだけど、そこそこ認知される前ぐらいの方がよかったとかいうのはなんなんだろうな。やりたい曲から売れる曲に変化するのは、まあ理解は出来るけれど、聴くに堪えない。まあそんなで、引っ張り出したのは「A Peacetime Boom」。これで一番気に入ってるのは「虹が出たなら」なんだけど、一昔前はカラオケ屋とかにも入ってたんだけど、ここ数年みたことない。「都市バス」とか「君はTVっ子」はバカっぽい歌詞がイイ。
まあそんなで、聴きながら今日は仕事をしてるわけですよ…。
IPAフォント
とりあえずテスト用のrpmパッケージを作ってみたけど、ふと思い出してwikiをチェックしてみたら…
という記述が…。修正不可はFedoraではだめ、というかnon-freeをそもそも受け付けていないので、FedoraにIPAフォントが入ることはなさそう。一応英語のライセンスの返事待ちはするけど、たぶんここにリストアップされるためだけに使われそうな予感。Bad Licenses
This is a list of Font licenses which are NOT OKAY for Fedora. Nothing in Fedora should be using these licenses. They're either non-free, deprecated, or have usage/distribution restrictions.
Full Name
FSF Free?
...
Notes
Literat Font License
NO
...
Cannot modify
gmailで英数字がBoldにならない?
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
...
<selectfont>
...
<rejectfont>
<pattern>
<patelt name="family"><string>Arial</string></patelt>
</pattern>
</rejectfont>
...
</selectfont>
...
</fontconfig>
September 28, 2007
gnome-keyboard-propertiesで設定が変更できない?
こんなエラーダイアログがずいぶん前から、起動時およびgnome-keyboard-propertiesで設定を変更しようとすると出てて、当然ながらこの設定は反映されていない。
このほど やっと解決方法が分かったので、メモ代わりに残しておこうと思う。
手順は次のとおり:
- gnome-keyboard-propertiesを起動してレイアウトタブを開く。
- デフォルトに戻すボタンをクリック。
- なんか適当なレイアウト、例えばU.S. Englishとかを追加。
- デフォルトをU.S. Englishに切り替える。
- 一度古いレイアウトを削除。
- 再度新たにJapanレイアウトを追加。
- レイアウトの優先順位をDnDでJapanが先にくるようにする。
- デフォルトレイアウトをJapanに戻す。
注意点としては、7.を忘れるとus layoutが優先されるので、日本語キーボードの右端のキーが尽く反応しなくなる。あと、一度古いのを削除する必要があるのかどうかは分からないけど、なんとなく。
September 26, 2007
Gmailでラベルリストを完全に表示させる方法
問題点
- カーソル表示ありだと、サイズ変更のあとレイアウトが変わると、カーソルが正しい位置を指さない
- なぜかイベントが補足できず、結果折り畳んでもサイズ変更ができない(reloadが必要の意)
acroread 8.1.1
これで日本語大丈夫かなーとか、昔テスト用に手で書いたpdfを食わせてみたけど、Japanese Supportが云々と文句を言われる始末。インストールに失敗したかと思いきや、そうでもなくてよくよく見てみると、このAdobeの配布しているFont PackにはUniJIS-UTF8-*のCMapは含まれていなくて、このテストpdfは思いっきりそれ使って書いてた。
ghostscriptで使ってるCMapからコピったら問題なく動いた。
September 25, 2007
September 24, 2007
September 21, 2007
July 26, 2007
host clock rate change request
kernel: /dev/vmmon[xxxx]: host clock rate change request yyyy -> zzzz
みたいなログがわんさかでてどうしたものかと思ってたが、解決方法を見つけたのでメモ。
kernel configを
でkernelをbuildするか、.vmxファイルにCONFIG_HZ_1000=y
CONFIG_HZ=1000
を追加することで収まる。CONFIG_HZ=1000は未確認。sidの吊るしkernel 2.6.22-1で確認。ソースはこちらhost.useFastclock = FALSE
diredでgを押さずにbufferを更新
若干誇張しすぎてる気もするけど、とりあえずgを押せと言われるシチュエーションに於いてgを押さずに勝手に更新してもらう方法。
(defadvice dired-noselect (after my-dired-noselect (dir-or-list &optional switches) activate)
(if (dired-directory-changed-p dir-or-list)
(with-current-buffer ad-return-value
(let ((pos (point))
(current-file (dired-get-filename)))
(revert-buffer)
(unless (dired-goto-file current-file)
(goto-char pos))
(message "Dired buffer `%s' has been updated." dir-or-list)))))
July 23, 2007
ghostscript 8.60とromfs
最 近のgsは%rom%lib/とかsearch pathに追加されてんのね。いくら/usr/share/ghostscriptの下のファイルを変更しても反映されんのでしばらく悩んだ。build 時に必要なファイルすべてmkromfsを経由してgsromfs.cとして変換され、それをlibgsの中に組み込んでしまうようだ。
まあそれはそれでありだと思うけど、それなら/usr/share/ghostscriptとか持つ必要ないよね。混乱するだけ。
July 10, 2007
rieceからsshのトンネルを掘る
環境の都合上clientからIRC proxyまでの経路をsshでトンネルを掘っている。これを裏でshell scriptを使って接続していたんだけど、めんどいので、riece動かした時になんとかしてみようと思った。
というわけで以下結果。
(eval-after-load "riece"16667でlistenしてるのがなければsshでport forwarding、繋がるまでラグがあるので、set-process-filterで何か飛んでくるのを待ってからhookから抜けるようにしてみた。
'(progn
(defun irc-ssh-tunnel-negotiates-connection (process event)
(message "ssh tunnel established")
(set-process-filter process nil)
(setq irc-ssh-tunnel-negotiating nil))
(defun make-tunnel (irc-ssh-user irc-ssh-server)
(setq irc-ssh-tunnel-negotiating t)
(if (condition-case nil
(let* ((buf (generate-new-buffer " *irc-tunnel*"))
(process (open-network-stream
"irc-tunnel"
buf
"localhost"
16667)))
(delete-process process)
(kill-buffer buf)
nil)
(error t))
(progn
(setq process
(start-process "irc-ssh"
nil
"ssh"
(concat irc-ssh-user "@" irc-ssh-server) "-C"
"-L 16667:localhost:16667"))
(set-process-filter process 'irc-ssh-tunnel-negotiates-connection)
(while irc-ssh-tunnel-negotiating
(sit-for 0.1)))))
(add-hook 'riece-after-load-startup-hook
'(make-tunnel "user" "host"))))
June 24, 2007
flets squareへのroute
今さらなことだけれど、flets squareへのroutingを手でいじったりちょくちょく確認するのが面倒なので、スクリプトでも書いて勝手に更新するようにしてみた。
#! /usr/bin/env ruby
#require 'open-uri'
require 'htree'
require 'rexml/document'
require 'tempfile'scriptfile = '/usr/local/sbin/flets-route.sh'
pppdev = 'ppp1'ht = HTree.parse(open('http://routing.flets/routing.html').read)
xml = REXML::XPath.match(ht.to_rexml,'/html/body/text()')
tmp = Tempfile.new('flets-route')
fp = tmp.open
fp.printf("#! /bin/sh\n" \
"\n" \
"if [ \"x$1\" = \"xup\" ]; then\n" \
" OP=\"add\"\n" \
"else\n" \
" OP=\"del\"\n" \
"fi\n")
lines = xml[0].to_s.split("\n").grep(/\ARoute\d+=/)
exit(1) if lines.empty?
lines.each do |line|
if line =~ /Route\d+=Add,((?:\d{1,3}\.){3}\d{1,3}),((?:\d{1,3}\.){3}\d{1,3})/
then
fp.printf("/sbin/route $OP -net %s netmask %s dev $2\n", $1, $2)
end
end
fp.closeupdated = false
if File.exist?(scriptfile) then
system("diff #{scriptfile} #{fp.path} > /dev/null")
if $? != 0 then
system("#{scriptfile} down #{pppdev}")
File.rename(scriptfile, "#{scriptfile}.#{Time.now.strftime('%Y%m%d')}")
updated = true
end
else
updated = true
end
if updated then
File.rename(fp.path, scriptfile)
File.chmod(0755, scriptfile)
system("#{scriptfile} up #{pppdev}")
end
cronにでも一日一回チェックするように仕込んどけばおk。動かす前にflets squareへ接続できるようにしておく必要はあるけど、そのあたりの設定はぐぐると山ほど出てくるので割愛。出来たファイルは/etc/ppp/{ip -up.d,ip-down.d}もしくはそれに類似するものから呼ぶようにしておけば、rebootなりなんかの都合でpoff/ponする必要があっ たりしても問題なし。
June 21, 2007
PostgreSQL x PAM x syslog
DBへのアクセスにPAMを使うように設定したんだけど、どうも不可解なログを残す。
Jun 20 06:33:19 cosmos .168.2.201(50039) authentication: pam_succeed_if: require
ment "user ingroup db" was met by user "tagoh"
まずpam_succeed_if.soがどんな感じでsyslogにログを吐いているかを見てみた。
int
pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv)
{
...
if(!quiet_succ)
log_error(LOG_INFO,
"requirement \"%s %s %s\" "
"was met by user \"%s\"",
left, qual, right, user);
...
}
そしてlog_error()が
#define MODULE "pam_succeed_if"...
static void
log_error(int priority, const char *fmt, ...)
{
va_list va;
char *fmt2;
fmt2 = malloc(strlen(fmt) + strlen(MODULE) + 3);
va_start(va, fmt);
if (fmt2 == NULL) {
vsyslog(LOG_AUTHPRIV | priority, fmt, va);
} else {
snprintf(fmt2, strlen(fmt) + strlen(MODULE) + 3,
"%s: %s", MODULE, fmt);
vsyslog(LOG_AUTHPRIV | priority, fmt2, va);
free(fmt2);
}
va_end(va);
}
という具合になっている。このことから、実際にpam_succeed_if.soがsyslogに対して送っているのはpam_succeed_if: ...以降。日付およびホスト名はその先で勝手につけられる。問題はどのプロセスがそれを送ってよこしたのか、という部分なんだけど、.168.2.201(50039) authentication:はどうみてもなんかおかしい。
ということで、次にvsyslog(3)を覗いてみることにする。
static const char *LogTag; /* string to tag the entry with */
...
extern char *__progname; /* Program name, from crt0. */
...
void
vsyslog(pri, fmt, ap)
int pri;
register const char *fmt;
va_list ap;
{
...
if (LogTag == NULL)
LogTag = __progname;
if (LogTag != NULL)
fputs_unlocked (LogTag, f);
if (LogStat & LOG_PID)
fprintf (f, "[%d]", (int) __getpid ());
if (LogTag != NULL)
{
putc_unlocked (':', f);
putc_unlocked (' ', f);
}
/* Restore errno for %m format. */
__set_errno (saved_errno);
/* We have the header. Print the user's format into the
buffer. */
vfprintf (f, fmt, ap);
/* Close the memory stream; this will finalize the data
into a malloc'd buffer in BUF. */
fclose (f);
...
static void
internal_function
openlog_internal(const char *ident, int logstat, int logfac)
{
if (ident != NULL)
LogTag = ident;
...
}
とこんな感じになっていて、openlog(3)されていない場合はそのプログラムの名前を使いましょう、ということになっている。で、pam_succeed_if.soの方はと言うと、openlog(3)は一切使っていない。よってPAMを呼び出したアプリケーション依存ということになる。
では、次にPostgreSQLの方はというとopenlog(3)を呼んでいるのは一箇所のみ。backend/utils/error/elog.c内のwrite_syslog()。
static void
write_syslog(int level, const char *line)
{
static unsigned long seq = 0;
int len;
/* Open syslog connection if not done yet */
if (!openlog_done)
{
openlog(syslog_ident ? syslog_ident : "postgres",
LOG_PID | LOG_NDELAY | LOG_NOWAIT,
syslog_facility);
openlog_done = true;
}
...
つまり、一度もsyslogへログを吐こうとしてなければopenlog(3)は呼ばれない。
postgresql.confの中にlog_destinationというパラメータがあって(少なくともDebian環境上では)デフォルトがstderrになっている。根本的な解決方法としては、これによらずopenlog(3)を呼べ、ということになるんだけど、手っ取り早くworkaroundで済ますなら、このlog_destinationをsyslogに変える。そうすると
Jun 20 23:52:07 cosmos postgres[9371]: pam_succeed_if: requirement "user ingroup
db" was met by user "tagoh"
という具合に期待どおりの結果になった。
June 16, 2007
シリアルコンソールを仕込んでみる
最近どうも安定して動かない上に、CPU load食いまくってsshで入るのも難儀なことが多く、その度にvmware-server-consoleを起動させては、ごにょごにょとあれこれや るはめになる。また、セキュリティ上外から902番ポートへ繋げないようにしてるので、sshでport forwardしてとかまあなんつーか面倒くさいことこの上ない。そこで、vmware上のシリアルポートをhostのttyへマップさせ、シリアルコン ソール替わりに使うことにした。
まず、各VMの設定を変更する。シリアルポートをひとつずつ追加し、Use named pipeを選択、pipeの名前は後で識別しやすいように/tmp/serial-hostname portとした。また、今回このシリアルポートはhostから使うので、This end is the serverおよびThe other end is an applicationを選択。あとは、/etc/inittabにgetty経由でログインできるように修正。Debianの場合はすでにコメントアウトされた行があるので、それを有効にするだけでよい。
次にhost側。先ほど指定したnamed pipeはhost上に作られるけど、そのままだとよくあるterminal系のアプリでは使えないので、socatを使ってptyに変換した。ついでにそのまま接続しちゃうように次のようなスクリプトを書いた。
#! /bin/shset -e
if [ $# -eq 0 ]; then
echo "$0"
exit 1
fiPORT=$2
if [ "x$PORT" = "x" ]; then
PORT=0
fiif [ ! -S /tmp/serial-$1$PORT ]; then
echo "Unknown hostname"
exit 1
fisocat unix-connect:/tmp/serial-$1$PORT pty:link=/tmp/ttyv$1$PORT,raw,echo=0,waitslave &
SOPID=$!
if ls /proc/$SOPID > /dev/null 2>&1; then
while [ ! -h /tmp/ttyv$1$PORT ]; do sleep 1; done
cu -l /tmp/ttyv$1$PORT
else
echo failed.
fi
June 13, 2007
フォントサイズが小さくなった
FC6 からF7へアップグレードした後Firefoxのあらゆるフォントが小さくなった。gnome-font-propertiesとかでDPIの設定をいじ るとたしかにFirefox上でも変化するんだけど、当然ながら他のGNOMEアプリも影響するため、Firefoxで丁度よいサイズになると他の GNOMEアプリ上ではでかすぎて話にならない。
解決策としては、about:configを開きlayout.css.dpiに0(初期値は-1)を設定し、再起動すると以前のサイズに戻った。
April 27, 2007
Process Substitution
zshやbashにはProcess Substitutionという機能が備わっていて、これを使うことで一時ファイルを経由せずにプロセス間でやりとりできる。
例えば、あるログからgrepで必要な部分だけを取りだし、またもう一方のログからもgrepで必要な部分だけを取り出して、双方のdiffを取る、という処理をする場合に、これまで一時ファイルを作成してdiffを取っていた。ところが
$ diff -u <(grep foo foo.log) <(grep foo bar.log)
これだけでいいらしい。たいへん衝撃的な出来事だった。
裏では何が行われているかというと、それぞれの出力先fdを/proc/self/fd/nとしてdiffに渡している。
ちなみに、>(process)で出力として使える。
$ grep blog.tagoh.jp /var/log/apache2/access.log | tee >(grep -E '(google|yahoo)' > foo) | grep -v -E '(google|yahoo)' > bar
まあこんなことは普段しないし、しようとも思わないんだけど、出力を何種類かにわけて異なる処理をしたい場合に便利かもしれない。
April 13, 2007
webからテキスト部分だけを抽出する
要件は次のとおり。
- 整形されてないテキストがほしい
- 後にkakasiとかでローマ字に分解したいので、もともとASCII文字であるものを区別したい
他にももっとうまい手がありそうだけど、とりあえず以下で落ち着いた。
#! /bin/shw3m -dump_source $1 | nkf -w | sed -n -e "/<body.*>/!{x;/<body.*>/{x;\,</body>,{q};s/ / /g;s/<[^<>]*>//g;s,\([-0-9a-zA-Z ().!\"#$%&=^~\\|\`@{};:+*,<>/?_'[]]*\),<ASCII>\1</ASCII>,g;s,<ASCII></ASCII>,,g;s,</ASCII><ASCII>,,g;/^$/{d};p};d};/<body.*>/{h}"
実体参照の置換は他にも必要になるだろうけど、まあそれはそれで。
March 30, 2007
ダブルクリックで選択する文字範囲の変更
先日ちょっとした事故でgnome-terminalのprofileをすべて消失させてしまってから、ダブルクリックによる文字選択の挙動が変わってしまったので、ちょっとメモ。
まず何が悪かったかというと、profileのdialogにある「単語単位で選択する文字」が空だったことで、これによって英数字のみ単語として認識する、という状況だった。これだと、ちょっと不便なので、設定を次のように変えた。
.0-9A-Za-z-
実際にこれを処理しているのがvte_terminal_set_word_chars()で、レンジ指定を可能にするためにハイフンのみ特殊な役割を担っている。よって-そのものを含めたい場合は、その出現位置に注意しないといけない。ややバグっぽい挙動だけど
0-9A-Za-z.-
と記述すると.が無視されてしまう。まあ単独の文字として扱われる条件が
if ((wbuf[i] != '-') && (wbuf[i + 1] != '-')) {
で、レンジの条件が
if ((wbuf[i] != '-') &&
(wbuf[i + 1] == '-') &&
(wbuf[i + 2] != '-') &&
(wbuf[i + 2] != 0)) {
となっていて、これに漏れた条件については救済していないのが原因。BK臭が漂ってはいるけれども最初に書いたようにしておいた。
March 28, 2007
rpmでのbuild手順の省略方法
rpmをbuild中にspecファイルの記述ミスとかで、散々待たされた挙句エラー、なんてことを経験したことはないだろうか。そんな時に役立つのが--short-circuitオプション。
-bcや-biと組み合わせて使い、それぞれ、%buildから開始、%installから開始という具合に動作する。configureを%prepとかに書いとけば、makeでこけても
$ rpmbuild -bc --short-circuit foo.spec
とかやれば、続きからbuildしてくれる。
ほとんどがconfigureは%buildに書かれているので、便利か不便かはspecの書き方次第になってしまうのがちょっと悲しいところ。
March 26, 2007
URLの補完
URLを入力するときにctrl+enterでwww. + .com、shift+enterでwww. + .net、ctrl+shift+enterでwww. + .orgを補完してくれるらしい。
他にはctrl+Lでロケーションバーに移動とか、ロケーションバーにフォーカスがある状態で、ctrl+UでURL削除とか。その他のEmacs keybindings。
February 23, 2007
NT_STATUS_BAD_NETWORK_NAME
野暮用でRawhide上にsambaの設定をしてみたんだけど、smbclientでテストしてみても繋がらない。ログは次のとおり。
[2007/02/23 05:10:45, 0] smbd/service.c:make_connection_snum(920)
'/home/samba/public' does not exist or permission denied when connecting to [T
esting] Error was 許可がありません
/home/samba/publicのpermissionも問題なく途方に暮れてたところ、SELinuxが悪さしてたことが判明。
type=AVC msg=audit(1172175045.653:1369): avc: denied { search } for pid=27149
comm="smbd" name="home" dev=dm-0 ino=1305601 scontext=user_u:system_r:smbd_t:s0
tcontext=system_u:object_r:home_root_t:s0 tclass=dir
smbdのhomeへのアクセスを許すためには次の設定が必要らしい。
# setsebool -P samba_enable_home_dirs=1
February 8, 2007
semanticのDBファイルを一ヶ所に集約させる
semanticと いうelispで書かれたparserがあるのだけれど、読み込んだソースコードを解析して、関数のプロトタイプとか構造体や型の定義なんかも出してくれ たりと便利なんだけど、解析結果のcacheとしてそのファイルのあったディレクトリの下にsemantic.cacheというファイルを作ってくれる。 ドットファイルではなく。もろ見えてるし、ソースコード管理下にあるファイルの場合浮いてしまうので精神衛生上あまりよろしくない。という理由で使うのを やめてたのだけど、よくよく見てみると実はこのファイル名を変えられるし、保存先も変えられた。ということで.emacsに
(setq semanticdb-default-save-directory "~/.semantic")という一行を加えてみた。どのように区別されるのかというと、!path!to!top!of!working!directory!semantic.cacheみたいなファイルを作り、cacheがどれかを区別するようだ。
まあでも使ってみると、idle時にいろいろ裏でやっててCPU食いまくって使う気が失せるんだけどね。