asahi.comのネットスケープ用サイドバーは、2009年6月5日で終了します。RSS、ツールバーなどをご利用ください。と表示されるようになりました。 サイドバーは確か Netscape 6 からだったでしょうか。その後 Firefox には引き継がれず、衰退してしまいました。私は拡張機能のイージーSidebarを利用しています。asahi.com のサービスがなくなれば、購読しているまともなサイドバー対応のサービスはスラッシュドットジャパンくらいです。 しかしサイドバーは、携帯サイトを表示させればちょうどいいサイズです。便利に使っているのは河川情報の「レーダー雨量」の履歴動画です。
カテゴリー: ソフトウェア
Emacs で subversion のコミットログ
- 諸説あるが、何しろここでは自分ひとりで使っているリポジトリのものなので自分流である。↑
PostgreSQL を 8.3 に
バックエンドに PostgreSQL を使っているのは、自前のデータベースのほかに Trac と MediaWiki だ。バージョン 8.3 が出てから1ヵ月以上経つし、MediaWiki の 1.12.0rc1 で PostgreSQL 8.3 対応の文字が見えてきたのでそろそろ大丈夫だろうとバージョンアップしてみた。
debian の場合 pg_upgradecluster で簡単にデータの移行ができる……はずだったのだが一筋縄ではいかなかったのだった。きっと数ヵ月後には根本的に解決されていて役に立たない情報になるだろうが、記録しておく。
自前のデータベース
PostgreSQL の contrib に含まれている isn.sql[1]を利用している。この isn.sql も 8.2 と 8.3 で若干違っているようで、pg_dump したものを読み込ませてもうまくいかなかった。
しかたがないので、pg_dump したものを isn.sql 関連の定義前の部分、isn.sql による部分、その後の部分の3つに分け、前の部分を読み込ませた後、contrib の isn.sql を読み込ませ、それから後の部分を読み込ませることで、ようやくデータの移行ができた。
自前で書いていたフロントエンドは特に問題なしと思ったら、
互換性のない変更点に引っかかるところが数ヵ所見つかった。演算子 ~ はテキスト型にしか使えないとのこと。暗黙のルールは使わないようにしているつもりでもうっかり使っているのものだなと思った。
- 文字でない型 (日付型など) を自動的に text 型に変換しないようにしました。
- 今までは text 型入力を受けとる演算子や関数に文字でない値が渡されると、自動的に text 型にキャストしていました。 これからは text 型でないデータを渡したい場合には text 型への明示的なキャストが必要になります。
Trac
データの移行はすんなりとできた。が、使ってみるとエラーが出る。上と同様、キャストに関わる問題のようだ。検索して、6416と6512の変更を加えて、うまく動くようになった。
MediaWiki
MediaWiki で使っている tsearch2 は PostgreSQL 8.2 では contrib だったのが 8.3 では本体に組み込まれた。と言っても関数名等の互換性を取るために 8.3 でも contrib の tsearch2.sql を読み込ませる必要がある。上述したのと同じように dump を分割してデータを移行した。
これで大丈夫と思ったら、記事を書き換えようとした際にエラーが出た。ts2_page_text() で tsvectorの引数の ‘default’ は存在しないというもの(すみません、メッセージを正確に記録していませんでした)。
maintenance/postgres/tables.sql の 当該関数の定義箇所を見てみると
-- Tsearch2 2 stuff. Will fail if we don't have proper access to the tsearch2 tables -- Note: if version 8.3 or higher, we remove the 'default' argとのコメントがある。1.12.0rc1 ではまだ対応されていないのだった。新しい版を見るとコメントがつけ加えられていて、patch-tsearch2funcs.sqlの存在を教えてくれた。これを適用して、問題なく動くようになった。
- 書籍コードの ISBN をひとつの変数型として扱うためのもの。↑
gdm でのシャットダウンの禁止
特に設定しないと gdm のグリーティング画面で、「アクション」から誰でもシャットダウンや再起動ができてしまう。これではコンソールの前を通りかかった人は誰でも実行できてしまうので困ったものだと思うのだが、GNOME の考え方なのだろう、以前からこれがデフォルトだ。
また、いったんログインすれば、メインメニュー「シャットダウン」の項目があり、一般ユーザーがシャットダウンできてしまう。意図的でなくてもメニューで「ログアウト」と隣合っているので、うっかり間違えてシャットダウンしてしまうことがある。別のユーザーがリモートからそのマシンを使っていると困ったことになる。
シャットダウンを禁止するには、GNOME 2.18 では、gdm の設定ファイル /etc/gdm/gdm.conf[1] の [deamon] セクションに
[daemon] HaltCommand= RebootCommand=と書き加えればよかった。シャットダウンと再起動用のコマンドに空を指定することで、自動的にグリーティング画面の「アクション」メニューから「シャットダウン」「再起動」の項目が消え、ログインした一般ユーザーのメインメニューからも「シャットダウン」が消えていた。
ところが、gdm 2.20 になると、グリーティング画面の「アクション」からは消えるが一般ユーザーのメインメニューには「シャットダウン」が出るようになってしまった[2]。
gdm の設定の [daemon] セクションを見ると、 AllowLogoutActions
という項目が 2.20 から増えていた。これに空の値を指定する、つまり先ほどの2行に加えて
AllowLogoutActions=と書くことで、一般ユーザーのメインメニューから「シャットダウン」を消すことができた。
【2011年6月29日追記】 GNOME でのシャットダウンの禁止—最近の流儀 を書きました。
- gdm のマニュアルを見ると
/etc/gdm/custom.conf
という名前のようだが、Debian では古い名前/etc/gdm/gdm.conf
が使われ続けているようだ。↑ - ロックダウン・エディタ
pessulus
を使うことも考えたが、これで「ログアウトを無効にする」と「シャットダウン」も「ログアウト」も一緒にできなくなってしまう。これらを別々に設定することはできない。↑
ブラザーのレーザー複合機
ほしい機能
Fax機能で、受信時は複合機のメモリに保持しておき(これは当然できる)、必要なときに PCからファイルとして見えると助かる[1]のだが、結局、紙に印刷するしかない。スキャナ機能ではデータをFTPでPCに送ることもできるのだから、Fax機能でも受信データを同じように送ることができてもよさそうなものだが、その機能はないらしい。brpcfax
オンラインでマニュアルを読めばだいたいの設定はできたのだが、「PC-FAX 送信 CUPS Wrapper ドライバのインストール方法」はちょっと不親切だ。インストールまではできるが使い方がわかりにくい[2]。 そこで検索してみると英語版のInstalling a Brother Linux PC-FAX send driver into a CUPS based Linux Systemが見つかり、こちらの方がはるかにわかりやすい[3]。もっとも使用頻度の高いと思われる OpenOffice.org から直接印刷するようにFaxを送る方法が載っている。ここにかいつまんで訳すと[4]- OpenOfficeの設定ユーティリティである spadmin を起動する。(注: このプログラムを探すには
find / | grep spadmin
) - 「新しいプリンタ」ボタンをクリック
- 「Fax 機の設定」を選択して、「次へ」ボタンをクリック
- 「標準ドライバ」を選択して、「次へ」ボタンをクリック
- 次のコマンド行を入力[5]
brpcfax -o fax-number=(PHONE)
そして「次へ」ボタンをクリック - Faxプリンタの名前を入力。例えば
Brother fax
- 「完了」ボタンをクリック
- Windows なら附属のソフトでできるらしい。↑
- さらに誤りもある。「ファクス送信を実行する」の章の最初のコマンド例「単一宛先にファクス送信する場合:」は
dpkg -i brmfcfaxcups-1.0.0-1.i386.deb
と書かれているが、いくらなんでもそんな訳はない。英語版を見ればbrpcfax -o fax-number=0566-55-12345 psfile.ps
である。↑ - 検索中に見つけたブログの記事も参考になる。↑
- 実はStarSuite 8 管理ガイドにほぼ同じ記述がある。↑
- StarSuite 8 管理ガイドやブログの記事によると
(TMP)
をつけたほうがよさそうだ。↑
MediaWikiのスタイルシート
編集の際、プレビューはするものの最後に保存するのを忘れてしまい、せっかくの編集が水泡に帰すことがしばしばある。そこでせめてプレビューのあいだは背景に色を着けて注意を促したい。
全ての外装に反映されるスタイルは MediaWiki:Common.css に書けばいいらしい。編集画面でプレビューは <div id=’wikiPreview’> となっているので、
div#wikiPreview { background-color: #ACCAC1; }
のように書いた。
第何何曜日
日付を尋ねる場合に「何年何月何日」のようにあいだに別の語が挟まればいいのだが、「第何何曜日」というのは言いにくい[1]。次のような事情で「第何何曜日」を求める方法を検索したく、この単語でいいのだろうかと思ったが、やはり仕方ないのかこのまま書いてあるのがいくつか見つかった。ともあれ意味は通じるし、そもそも未知のところを「何」に置き換えればほぼそのまま表現できる日本語は強力だ。
さて、その事情というのは……うちの資源ゴミの収集日は「第 2, 4 月曜日」だ。うっかり忘れてしまうことがしばしばあるので、収集日 (の前日) に自分宛にメールを飛ばそうと考えた。cron
では「第何何曜日」という指定はできないので、スクリプトのほうで判定する。せっかくだからメモしておく。
Y 年 m 月 d 日は、その月の第 i の w 曜日か
これは検索ですぐに見つかった。曜日は、PHP なら求める手段は用意されている。
$i = floor(($d+6)/7); $w = date("w", strtotime($Y . $m . $d));
Y 年 m 月の第 i の w 曜日は、その月の d 日か
上の逆だから簡単だと思ったが、何度か試してみてようやく
$w1= date("w", strtotime($Y . $m . "01")); $d = $i*7-6 + ($w+(7-$w1))%7;
とした。ここで $w1 は当該月の 1 日の曜日である。$d が当該月の最大日を越えない判定が必要かもしれないが、ゴミ収集日はたいていの場合 5 回目の曜日には設定されないので省略した。
—
ところでこのために PHP マニュアルの日付・時刻関数を見ていたら、日の出時刻や日の入り時刻を返す関数というものまであるではないか[2]。
現代の都市生活者には日の出・日の入り時刻より、ゴミ収集日を返す関数のほうがありがたい。……と思ったら、この日の出・日の入り時刻関数は宗教上の必要から作られたらしい。別に農耕狩猟生活のためというわけではなかった。