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

mew-ical.el

いくらかコードの整理と、送信者に対してメールで返信できるようにしてみた。

December 26, 2007

Invalid card number (cont.)

非常に気持ち悪い終わり方だが、udevとhalをインストールしなおしたら解決した。結局誰が、いつ、どうやって/dev/snd/*を作ってるかはわからず終い。たぶんudevなんだろうが、udevinfoとかみてもドライバをロードする手がかりがないように見える。

December 22, 2007

Invalid card number

いつのupdateからかはっきりしてないのだけど、rebootしてみたらalsa-utilsのinit scriptから呼ばれるamixerがこんなエラーを大量に吐いて音が全くでない状態になった。/proc/asound/cardsとかにはちゃんとデバイスが認識されてるように見えるし、/proc/asound/card0とかもある。とりあえずstraceしてみたら、/dev/snd/controlC0/dev/aloadC0が見つからんということのようだ。udevかなあ。手動で/usr/share/alsa-base/snddevicesを実行すると一通り必要なデバイスを作ってくれるけど、OSS互換モード以外はだめぽい。

とりあえずgnome-sound-propertiesで自動検出からOSSに変更しといた。

December 17, 2007

破壊的代入とcopy-sequence

何も知らずにこんなコードをEmacs Lisp上で書いた。便宜上サンプルコードとしてよりシンプルになってはいるけど。

(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-sequencecopy-treeといった関数を使うことで手間を省くことが出来る。

勉強になった。

mew-ical.el

先日の続き。認証の有無を認識するようにして、必要ならパスワードの入力を求めるようにしてみた。それからMETHOD:REPLYな.icsファイルの場合には、リクエストに対する相手のステータスを表示するようにした。

ファイルは前回と同じ場所に置いた。

December 15, 2007

富良野メロンパン

近所のコジマ前に移動販売がきてた。コンビニなんかでよく見るメロンパンとはちょっと違ってて、メロンの味が結構主張してる感じ。中はふかふかで悪くなかった。とはいえパンなので、時間とともに固くなってしまうので、焼きたてをとっとと食べるのが吉。

December 14, 2007

MewでiCalendar形式のファイルに対応させる

必要に迫られてMewでiCalendar形式のファイルが添付されてきた場合に、設定したカレンダーサーバに対して予定の登録および承認の可否をできるようにしてみた。現時点でできることは、

  • iCalendarの情報を(気持ち)分かりやすく表示する
  • 自分のカレンダーサーバへ登録する
  • ステータスの更新
  • Mewからカレンダーサーバへアクセスする
できないことは、

  • 承諾の可否を選択した後、要求者に対してメールで返信すること
  • 排他制御
  • カレンダーサーバに対する認証の有無の自動検出
  • ローカル時間で表示すること
  • その他多数
現状だととりあえず運用でいくらかカバーできるというレベル。動かすために必要なものは、

  • emacs
  • mew
  • browse-url
  • curl
  • iTIPをサポートしたカレンダーサーバ
ものはこちらからどうぞ。

December 11, 2007

Tag Cloud on blogger

メモ。Setup and configuration for New Blogger Tag Cloud / Label Cloud

Open Tech PressのRSSがGoogle Readerで読めない

まあOpen Tech Pressのに限らずpheedo使ってるやつは該当するみたいだけど、種明かしからすると、インストール時に選択したAdblock Plusのフィルタールールにpheedoのものが入ってて、これがひっかかってたらしい。タグ付けされたのをまとめてとかAll itemsでは見れるのは謎だけど。

ねむい...

さすがに3時間弱の睡眠時間ではちとつらい…。

December 8, 2007

インフルエンザ予防接種

かかったことないけど、去年同様息子のこともあるので、うってきた。

December 7, 2007

再起動なしでIMを変更する

そろそろ手をつけないといかんなあと思い、ちょっといじった。vnc2swfのデモはこちら

追記: 横長すぎたので、800x600で作り直した。

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 4, 2007

iceweasel is too unstable...

add-ons入れて再起動ボタンを押すと戻ってこない(i.e. SEGV起こしてる)とか、最後のウィンドウを閉じると、正常終了せずにクラッシュするとか、空のtooltipsがでるとか、いろいろ問題の多かったiceweaselだけれど、add-onsを無効にしまくったら、問題が起きなくなった。しらみつぶしに調べてみると、tooltipsの問題はNo Scriptを無効にすると消えることが判明。そんなまさかと、新しくprofileを作ってNo Scriptをインストールしてみても問題なし。profileがぼっ壊れてると判断して、引越しを決断した。

全く同じ構成とはいかないけど、似たような構成にしてみて上記の問題が一切起きないことを確認。passwordなんかはPassword Exporterを使った。今のところ快適なり。

人身事故

田園都市線市ヶ尾駅で起きた人身事故のせいでひどい目にあった。駅のホームは人が溢れてしまいには入場規制にまでなってたらしい。電車がきても全然乗れず、乗りすぎて扉が開かないことも。降りる人のために外に出たもののなぜか乗れずにホームに溢れた人とかもいた。ものすごい地獄絵図。

しかし田園都市線って行き帰りで上り下りの混雑状況が見事なまでに反転するんだけど、朝の時間帯で下りで混みまくり、立ってる人もいるとかそういうレベルじゃない状況を見たのは今回が初めてだった。一度電車に乗ったらもうだいぶ混雑も収束方向へ向かってたこともあり、その後は特にトラブルはなく、結局なんやかんやと会社について予定より一時間半遅れ。腰痛い…。

December 3, 2007

screen breaks the terminal layout

Hmm, handling the Japanese input on iceweasel made it terrible after updating to 2.0.0.11-1 on Debian sid. apparently it doesn't filter out the key event even if it's passed through the IM.

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

デフォルトの設定ではgnome-terminalでDeleteキーを押すと^[[3~が送られる。Fedora 8のzshはこれをうまく処理してくれない。エスケープシーケンス部分をそのままスルーして結果~(tilde)のみが出力される。次のようにbindkeyして対処しといた。

bindkey '^[[3~' delete-char

November 29, 2007

Welcome to...

"welcome"といえばzombo.comを思い出すという話から、zombo.comってなんぞやと見てみたら、じわじわと笑いがこみ上げてきた。

November 26, 2007

タイムゾーンがUTCから戻らない

Debian sid上にて。時々アップデートの後時計がおかしなことになることはあったけど、大抵ntpdateすると元に戻っていた。しかし今回はちょっとケースが違うようだ。まずterminal上では問題なし。.zshenvとかにTZ設定してあるから。しかしGNOMEから起動するアプリなんかは全部だめ。結局一度/etc/localtimeを消してsymlink張ってみたら問題なかった。dpkg-reconfigure tzdataでも問題ないね。zoneinfoのファイル形式変わった?

November 25, 2007

欠点

自分の欠点を再確認した。直す努力をしよう…。

November 22, 2007

サルベージ

古い日記から必要そうなエントリをサルベージしてみた。まあ手動で、だけど。

November 20, 2007

ねむい…

妻、息子共々昨日実家から帰ってきた。つっても定時で上がったはずなんだけど、家についたときにはもう寝てた…。まあ体調がまだよろしくないのでしょうがないか。

息子は絶好調のようだ。早朝遊べと起こされた。まだ外真っ暗だし、一体何時なんだよと時計をみると5:30であった。日の出もずいぶんと遅くなったなあ。

November 19, 2007

AC5

世間ではAC0ですらもう今は昔という状態でAC6もオワタとか言っている人もいる中、妻と息子がいないうちにと、途中で封印してたAC5を再開、なんとか戻ってくる前にLast Missionを終えることができた。
だいぶ勘が鈍ってて、最初は酷いありさまだったけど、まあなんとか途中から調子を取り戻すことができた。よかった、よかった。

次にやれるのは、いつになることやら…。

November 16, 2007

カラオケいきたい
寿司たらふく食いたい
温泉に浸かってのんびりしたい
スキーしたい
思う存分hackしたい
一日中ゴロゴロしたい
一ヶ月ぐらい旅に出たい

退院?

妻が昨日退院した。退院したといってもまだちゃんと完治したわけではなく、抗生物質に対する免疫が出来てきたため、他の患者さんに影響が出ないようにと、半ば強制退院に近い。そういうのもあってしばらくは静養すべしということになってて、昨日今日と実家にいる。息子もそのまま実家。いっしょにいるといろいろたいへんだと思ったんだけど、まあ両親が入院中と同様面倒みるから大丈夫ということらしい。
まあ、そんなこんなで、家に帰っても誰もおらんし、やることもないんで基本的に暇。

November 9, 2007

入院

妻が肺炎で入院することになった。定時まで間もなくだが会社抜け出して移動中

November 6, 2007

お休みその2

昨日に引き続きお休み。いまいちよくならないようだ。

November 5, 2007

お休み

妻、息子共々風邪引いたようだ。看病のためお休み。

November 2, 2007

Need more interesting, exciting topics

最近はあらゆるつまんないなぁ…。とりあえずおもしろいことを探す時間がほしい。

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まわりのトラブル再び

しばらく再起動もしないで放置してたんだが、ちょっとしたことでrebootを余儀なくされた。が、しかし。なんか反応しないキーが多数。いやむしろ割り当てもなんかおかしい。よくよく見てみるとkbdドライバではなくevdevで拾ったやつが有効になってた。そりゃまあPS/2のキーボードとかマウスもevdevで拾うけど、どうなのよ。しかも、kbdドライバで指定したCoreKeyboardのオプションをどうみても継承してるように見えるのに、XKBまわりの設定はデフォルト値が使われちゃってて実質設定なしでX動かしてるような状態に近い。

Xの入力まわりのhotplugサポートが云々とかでぐちゃぐちゃなようなので、結局evdevのドライバを消して現状回復。ノートでUSBキーボードとかマウスは使ってないから問題なし。
相変わらずgdmではAlt+Ctrl+Fnでコンソールに切り替えられないけど。

October 22, 2007

暑い…

移転先のビルでは、18:30を過ぎると空調が止まる。最寄りの席のマシンの台数と発熱量で、自分のまわりが死ぬほど暑い。Tシャツ一枚でも暑い。たまらん。

unable to open slave

skypeを実行した時にログにどわーっとでてくるエラー。

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 8

As 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のファイルがへん?

multilibの都合で、例えばi386とx86_64で同一パス上にインストールされるようなファイルは中身は同じでなければならない、という条件があって、これが違うとrpmはファイルが衝突してると怒るわけだけれども、rdocで生成されるなんちゃら.yamlのファイルでi386とx86_64で結果が違うという問題に遭遇した。

ちなみに結果は以下のとおり:
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

新オフィス

片付け、整理もろもろで、2,3日仕事にならんだろうし、何より忙しくてそれどころじゃないので、午後から新しいオフィスへ行ってみた。

なんつーか、広い。そしてどういう訳か日ごろ用事のある場所はあらゆる遠い。新手の嫌がらせかと思うくらい遠い。
いい運動にはなるんだろうけど、ちょっとナニ。

October 4, 2007

R BURGER

六本木も残すところ明日で最後なので、一度行ってみようと思いつつ一度も足を運ぶことのなかったR BURGERへ行ってみた。

店内は落ち着いた雰囲気で、昼よりは夜の方が似合いそう。アールバーガーとチキン梅バーガーをチョイス。1040円だった。高けえ…。注文を受けてから調理するらしく、しばし待たされる。でもモスより早いかな。混雑状況の問題か。

モノはというと、かねてよりあの白い物体が何なのか気になってたけど、蒸し饅頭なのか…。食べた印象としては、そのまま肉まんを半分に切って、中の具をパティにしてはさんだ、という感じ。まずくはないと思うけど、リピートしたいほどでもないなあ。

画像は…、まあR BURGERのページで確認して。どこかの詐欺みたいな画像と違って、見た目といっしょなので。

October 3, 2007

mount: could not find filesystem '/dev/root'

野暮用でRawhideというかFedora developmentをインストール。インストールそのものには問題はないのだけれど、rebootした後なぜかrootパーティションを見つけられずにkernel panic。boot時のログを見る限りvgscanは問題なさそう。なので、grubでroot=LABEL=/となっているところで直接デバイスを指定してみた。標準的な構成だとroot=/dev/VolGroup00/LogVol00とかになるはず。

これでrootが見つからない問題は回避できたけど、/etc/fstabにはLABEL=/が/だと記述しているので、そのままだとまだ途中でこけるので、メンテナンスモードでログイン。e2labelで確認してみるも、何もラベルは設定されておらず、原因を特定。後はラベルを設定して解決。
# e2label /dev/VolGroup00/LogVol00 /

October 2, 2007

Modifierキーの設定

SuperだのHyperだのが必要になったので、xmodmapで設定。keycodeはキーボード毎に違うと思うので、xevとかで調べつつ、適当に置き換える。X32のキーボードにそれぞれ変換キーにSuper、右AltHyperを割り当てた。設定によるけど、今の環境だとAltMetaが割り当ててあるので、一度その辺の設定をクリアしつつ再設定。

keycode 113 = Hyper_L Hyper_L
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
gnome-keyboard-propertiesでAltの設定をいじってある場合にはデフォルトへ戻しておく。後はxmodmapを呼んで設定を変更するだけ。

dateコマンドで和暦を出す

昔記録しといたんだけど、どうも忘れっぽいので、もう一度メモ。
% date +%Ec
平成19年10月02日 12時11分54秒

October 1, 2007

CD発掘

昨夜ダンボールに仕舞いっ放しのCDをいくつか発掘した。事の発端は「未来予想図」と「未来予想図Ⅱ」ってどっちがどっちだっけか…、ってことだったんだけど、目的のCDは発掘できず。まあ夜中だったので、あまり物音出せないので、途中で断念。

代わりに、というかあまりの懐かしさにそのまま引っ張り出してしまったんだけど、平松愛理のCDを何枚か。どう贔屓目に聴いても「一夜一代に夢見頃」までかなあとか。あとはなんか曲調変わりすぎてちょっとパス。まあ「7 DAYS GIRL」までは買ってはいたけど。

あと、EPO。「Wica Epo」ってアルバムに、ワンダーゾーンっていう関口宏が司会してた番組のテーマソングに使われてた「百年の孤独」が入ってて、まあこれ目当てに当時買った。

あとは、なんだ。THE BOOMとか。まあ語れるほどでもないけど、「島唄」でメジャーになる前の方がよかったと思う。KOKIAもそうだけど、そこそこ認知される前ぐらいの方がよかったとかいうのはなんなんだろうな。やりたい曲から売れる曲に変化するのは、まあ理解は出来るけれど、聴くに堪えない。まあそんなで、引っ張り出したのは「A Peacetime Boom」。これで一番気に入ってるのは「虹が出たなら」なんだけど、一昔前はカラオケ屋とかにも入ってたんだけど、ここ数年みたことない。「都市バス」とか「君はTVっ子」はバカっぽい歌詞がイイ。

まあそんなで、聴きながら今日は仕事をしてるわけですよ…。

IPAフォント

単体配布できるようになったらしい。英語のライセンスがないので問い合わせ。
とりあえずテスト用のrpmパッケージを作ってみたけど、ふと思い出してwikiをチェックしてみたら…

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


という記述が…。修正不可はFedoraではだめ、というかnon-freeをそもそも受け付けていないので、FedoraにIPAフォントが入ることはなさそう。一応英語のライセンスの返事待ちはするけど、たぶんここにリストアップされるためだけに使われそうな予感。

gmailで英数字がBoldにならない?

問題のフォントはどうもArialらしいんだが、深く原因追及する時間もないので、$HOME/.fonts.confにブラックリストを追加することで回避。
<?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

*Fusion

最近Fusionってつけるの流行ってんのかねえ。順不同、思いつく限り上げると

探せばまだ出てくるんかなー。

gnome-keyboard-propertiesで設定が変更できない?


こんなエラーダイアログがずいぶん前から、起動時およびgnome-keyboard-propertiesで設定を変更しようとすると出てて、当然ながらこの設定は反映されていない。

このほど やっと解決方法が分かったので、メモ代わりに残しておこうと思う。

手順は次のとおり:
  1. gnome-keyboard-propertiesを起動してレイアウトタブを開く。
  2. デフォルトに戻すボタンをクリック。
  3. なんか適当なレイアウト、例えばU.S. Englishとかを追加
  4. デフォルトをU.S. English切り替える。
  5. 一度古いレイアウトを削除。
  6. 再度新たにJapanレイアウトを追加。
  7. レイアウトの優先順位をDnDでJapanが先にくるようにする。
  8. デフォルトレイアウトをJapan戻す
以上の手順でgnome-keyboard-properties上で設定を変えても、ちゃんと反映されるようになる。
注意点としては、7.を忘れるとus layoutが優先されるので、日本語キーボードの右端のキーが尽く反応しなくなる。あと、一度古いのを削除する必要があるのかどうかは分からないけど、なんとなく。

September 26, 2007

Gmailでラベルリストを完全に表示させる方法

左側にあるラベルリスト。ラベルが長すぎて隠れてしまって、もはや何のラベルかも分からない。あまりに使いづらいのでGreasemonkeyで遊びがてら、スクリプトを書いてみた。ここからどうぞ。

問題点
  • カーソル表示ありだと、サイズ変更のあとレイアウトが変わると、カーソルが正しい位置を指さない
  • なぜかイベントが補足できず、結果折り畳んでもサイズ変更ができない(reloadが必要の意)

acroread 8.1.1

Marillatパッケージからインストール。あと8.x用のFont PackをAdobeのサイトからダウンロードしてインストール。

これで日本語大丈夫かなーとか、昔テスト用に手で書いたpdfを食わせてみたけど、Japanese Supportが云々と文句を言われる始末。インストールに失敗したかと思いきや、そうでもなくてよくよく見てみると、このAdobeの配布しているFont PackにはUniJIS-UTF8-*のCMapは含まれていなくて、このテストpdfは思いっきりそれ使って書いてた。

ghostscriptで使ってるCMapからコピったら問題なく動いた。

September 25, 2007

September 24, 2007

休出

静かで集中しやすいけど、ビミョー

September 21, 2007

とりあえず

近況などを、っても何も変わってないけど。

ああ、諸事情により、家ではネットワーク難民になりますた。予定では2月ぐらいに復活する予定。
後なんかあるかな…。ないかな。

July 26, 2007

host clock rate change request

kernel: /dev/vmmon[xxxx]: host clock rate change request yyyy -> zzzz

みたいなログがわんさかでてどうしたものかと思ってたが、解決方法を見つけたのでメモ。

kernel configを

CONFIG_HZ_1000=y
CONFIG_HZ=1000
でkernelをbuildするか、.vmxファイルに
host.useFastclock = FALSE
を追加することで収まる。CONFIG_HZ=1000は未確認。sidの吊るしkernel 2.6.22-1で確認。ソースはこちら

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"
'(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"))))
16667でlistenしてるのがなければsshでport forwarding、繋がるまでラグがあるので、set-process-filterで何か飛んでくるのを待ってからhookから抜けるようにしてみた。

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.close

updated = 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_destinationsyslogに変える。そうすると

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/sh

set -e

if [ $# -eq 0 ]; then
echo "$0 "
exit 1
fi

PORT=$2
if [ "x$PORT" = "x" ]; then
PORT=0
fi

if [ ! -S /tmp/serial-$1$PORT ]; then
echo "Unknown hostname"
exit 1
fi

socat 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/sh

w3m -dump_source $1 | nkf -w | sed -n -e "/<body.*>/!{x;/<body.*>/{x;\,</body>,{q};s/&nbsp;/ /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食いまくって使う気が失せるんだけどね。