たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
以前Ubuntu 8.10に導入したNautilusSVNなんだけど、一つ困った事がある。それは、コミット時のメッセージを日本語で入力するとコミットできないという点。
普通のオープンソースのプロジェクトだったら英語でやるのが当たり前だろ!!!日本語のメッセージとか死ね!!!と言う人もいるだろうけど、そんなの知るかよと。TortoiseSVNじゃ普通にできてるんだから、できない方がおかしいだろと。とかぼやきつつも仕方ないからNautilusSVNからcommitする時だけは英語でコメント付けるようにしてたけど、英語苦手だからついつい二言三言の適当なメッセージだけでcommitして、後になってログ一覧見た時に何の変更だったのか訳が分からなくなる、ということがあまりに多いのでいいかげん我慢の限界がきた。
そもそもの所で勘違いしてたんだけど、日本語が通らないのはSubversion自体の問題ではなくてNautilusSVNの問題だということについ先日やっと気がついた。ターミナルでsvn commit -m "日本語のメッセージ"てな感じで書いたらちゃんとコミットできたし。あと閉じ括弧を入力するまでは改行とかもメッセージに普通に入れられるということにも気がついた。なのでしばらくの間、コミットだけコマンドライン操作でやるようにしてみたんだけど、やっぱりめんどくさい。
この手の問題はMozillaでもよくあって、Mozillaの場合は文字列のエンコーディングを変えてやるだけで解決する場合が多いので、NautilusSVNでもきっとそうなんじゃないだろうか。と見当を付けて、思い切ってソースコードを覗いてみた。~/.nautilus/python-extensions/NautilusSvn/SvnCommit.py の中のそれらしい箇所に、ぐぐって調べた文字エンコーディング変換のコードを一行加えて、試しにコミットしてみたら無事に日本語が通るようになった。
Index: SvnCommit.py
===================================================================
--- SvnCommit.py (リビジョン 776)
+++ SvnCommit.py (作業コピー)
@@ -102,6 +102,7 @@
ctrl = XRCCTRL( self.frame, "Message" )
self.commitMessage = ctrl.GetValue()
+ self.commitMessage = self.commitMessage.encode("UTF-8")
# If the user doesn't supply a commit message we will just use the string
# "Empty message" since pysvn doesn't accept an empty string see:
# pysvn._pysvn_2_5.ClientError: callback_get_log_message required
変更箇所はほんとにこれだけ。
僕はバージョン管理システムのSubversionのクライアントとして、WindowsではTortoiseSVNを使っている。TortoiseSVNはシェル統合型のクライアントで、エクスプローラのファイルアイコンがファイルの状態(競合とか最新とか変更ありとか)に応じて変化したり、フォルダの右クリックからチェックアウトや更新や差分の表示やログの閲覧ができたりと、独自ファイラを使わない僕にとっては実に使い勝手が良い。
TortoiseSVNはWindows専用なので、UbuntuではRapidSVNを使ってたんだけど、Ubuntu 8.04LTSで使うとどーいうわけかコミットしようとすると必ず落ちる(しかもその時作業対象のフォルダをロックしたままで死にやがる)という問題が起こっていて、チェックアウトしかできなくて困ってた。コマンドラインからsvnコマンドを使えばコミットすることはできるといえばできるんだけど、根っからのGUI人間なので、いつもそうするというのは苦痛で苦痛で……
そんな時に、Nautilus向けのシェル拡張としてNautilusSvnというTortoiseSVNクローンが存在するということを教えてもらったので、是非入れよう! すぐ入れよう! 幸いページの一番下に.debなパッケージもあることだし! と思ってダブルクリックしてみたらパッケージマネージャに蹴られて撃沈して僕涙目。Python関係のパッケージの依存関係が壊れてるだかなんだかでインストールすらできなかった。
それ以来すっかり諦めてたんだけど、先日Ubuntu 8.10にアップグレードしたので今度はうまくいくんじゃないか? と思って再挑戦してみた。.debをダブルクリックしてパッケージマネージャから入れてみると、今度はインストールには成功したんだけど、再起動してもちっともそれっぽい変化が現れない。
Google検索したらUbuntuのフォーラムのトピックでGoogleコード上のプロジェクトページが紹介されていたので、これがダメだったらもう諦めよう、という気持ちでそこのWikiに書いてあったインストール手順に従って操作してみた。そしたらうまくいった。やった!!!
以下、すべてコマンドライン操作。
で、ログアウトしてログインし直した後にNautilusで適当なフォルダを開いて右クリックすると、メニューの中に「SVN Checkout」という項目が増えてた。Subversion管理下のフォルダだとフォルダやファイルのアイコンの上に状態を示す小さなアイコンが表示されるようになってて、管理下のフォルダで右クリックすればログや差分も見られる。
.debでやった時にうまくいかなかった理由については結局分からずじまいなんだけど、最初に入れる必要なパッケージの中の一つがWikiには「python-wxgtk2.6」と書かれていたのに対して、.debではpython-wxgtk2.8が入っていたので、もしかしたらこのバージョンの違いが原因だったんだろうか?
あと、この件について調べてる中でnautilus-script-collection-svnというパッケージがあることも分かった。こちらはSubversion用のシェルスクリプトをNautilusの汎用的なユーザスクリプト呼び出し機能を使って起動して使うというもののようで、パッケージをインストールした後に sudo ln -s /usr/share/nautilus-scripts/Subversion ~/.gnome2/nautilus-scripts/Subversionとしてシンボリックリンクを作成すると、次回起動時以降、Nautilusのフォルダ内での右クリックメニューの「スクリプト」サブメニューからそれぞれのシェルスクリプトを呼び出せるようになる。こちらはコミット前の「やっぱりやめとこう」みたいな取り消しができないっぽかったりSubversion管理下のファイルやフォルダの状態が特に表示されなかったりという問題があるので、NautilusSvnが使える環境だったらNautilusSvnを使った方が良さそうだ。どうしてもNautilusSvnが動かないという時のために一応メモしておく。
余談。NautilusSvnでもTortoiseSVNでも微妙に不便な点として、まあこれは仕様上当たり前なのかもしれんけど、ある場所にチェックアウトしたSubversion管理下のフォルダに対するシンボリックリンク(Windowsだったらジャンクション?)からはコミットできないという問題がある。Windowsの場合はフォルダのショートカットがあるから別にいいんだけど、Linux(GNOME)だとGUIからは簡単には「フォルダのショートカット」を作れない(アプリケーションのランチャを作って、コマンドに「nautilus "パス"」と書けば、擬似的にフォルダのショートカットを作ることはできる)ようなので、そこだけ地味に困ってる。
2009年2月9日追記。日本語のメッセージを付けてコミットできない問題に対処してみた。
Ubuntu 8.04LTSからUbuntu 8.10にアップグレードした。手順はUbuntu Japanese Teamのアップグレード手順解説の通り。
ATOKがちゃんと使えるかが心配だったんだけど、とりあえず以前と同じ状態で使えてるみたい。%gconf.xmlが肥大化して設定が戻ってしまうという問題も含めて。
ubuntu hardy amd64 で ATOK X3 の iiim-properties を動作させる - Assemblr
によると、 ~/.gconf/desktop/input_methods/%gconf.xml だけじゃなく/etc/iiim/client.xml の内容も関係してるようだったので、<entry props="status enabled">True</entry>
を<entry props="status enabled">False</entry>
に、<entry props="trigger keys">Ctrl+space,Henkan_Mode,Alt+Henkan_Mode</entry>
を<entry props="trigger keys">Ctrl+space,Henkan_Mode,Alt+Henkan_Mode,Zenkaku_Hankaku</entry>
に書き換えた。
追記。ATOK X3を買った時にCD-ROMが手元になかったからすっかり忘れてた、広辞苑(第六版を買いそびれてるので第五版)その他のATOK用電子辞書をLinux版でも使えるようにした。CD-ROMから直接入れようとしても肝心の辞書のファイルが見つからなかったりしてうまくいかなかったので、最終的にインストール済みのWindows環境から辞書ファイルだけコピーしてきた。/opt/atokx3/share/systemdic/以下にkoujien.drt等をコピーして、所有者をrootに設定し、再起動(多分ATOKだけの再起動でいいと思うんだけどちょうどUbuntu自体のアップデートで再起動要求が出たのでシステム全体を再起動した)後にATOKの環境設定で電子辞書を有効にすれば、Windows版と同様に使えるようになる。同音異義語の使い分けには充実した電子辞書が欠かせません……
LVMを使って460GBほどの領域を確保して/backupにマウントした所までやったので、その続き。
バックアップ対象は色々あるんだけど、大まかに言って3種類ある。
これらのバックアップ対象を、日付の名前を付けたディレクトリの中に(圧縮して)コピーすると同時に1ヶ月以上前のバックアップは自動で削除する(=30世代のバックアップを取る)、というシェルスクリプトを1日1回自動で走らせる、というのが最終目標です。Googleであちこち検索して回って、コマンドの使用例をコピペしまくった。
作業用ディレクトリとその日のバックアップディレクトリの作成はこんな風に書いた。
#!/bin/sh
destparentdir=/backup
destdir=${destparentdir}/`date +%Y-%m-%d`
mkdir $destdir
ファイル(ディレクトリ)のバックアップはtarコマンドを使う。「j」オプションでbzip2形式を指定して圧縮してみる。
tar cjf $destdir/svn/hooks.tar.bz2 /var/svn/repos/hooks
データベースのダンプは、Subversionならこんな感じになった。
ダンプを吐く端から圧縮するというやり方が分からなかったので、一度作業ファイルを出力してから圧縮してみた。svnadmin dump /var/svn/repos/ > $workdir/dump
tar cfj $destdir/svn/dump.tar.bz2 $workdir/dump
rm $workdir/dump
svnadmin dump /var/svn/repos/ | bzip2 > $destdir/svn/dump.bz2
bzip2をパイプで繋げて、ダンプが吐かれるそばから圧縮。MySQLのデータベースの場合はsvnadminではなくmysqldumpコマンドを使う。
cronの設定の出力は、こう。
crontab -u tdiary -l > $destdir/crontab-tdiary
会社サイトのブログ部分の自動出力はtdiaryという名前のユーザの自動処理になっているので、こうなる。
最後、30日以上前のバックアップを消す処理はこう書いた。
BACKUP_DAYS=30
...(略)...
find ${destparentdir}/ -ctime +$BACKUP_DAYS -type d -maxdepth 1 -print0 | xargs -0 rm -r -f
...(略)...
これで、日付が30日より前のバックアップディレクトリは自動削除されるようだ。(※この処理は新しいバックアップを作る処理よりも前に書くのが望ましい。そうでないと、ディスクがいっぱいになってしまう場合があり得るから。まぁ、それも根本的な対策にはなってないんだけど……)
-maxdepth 1
を付けないと、下層のファイルから削除されるせいで上位ディレクトリの更新日が新しくなってしまい、削除されるべき古いバックアップが消えなくなってしまう。これに気付くのにだいぶかかってしまった。あと、ここでは-print0
でNULL文字区切りで検索結果をパイプに出力して、xargs -0 rm -r -f
で受け取って一度にファイルを削除するようにしてある。
このファイル(今の置き場所は /backup/backup.sh )のシンボリックリンクを/etc/cron.daily/以下に作成(sudo ln -s /backup/backup.sh /etc/cron.daily/baskup)した。これで、root権限でこのスクリプトが1日1回自動的に実行されるはずなんだけど……とりあえず明日どうなってるかまた見てみよう。
追記。どうやらタスク自体は実行されてるようなんだけど、実行されてる時刻が設定と違うような…… /etc/crontab に書かれた /etc/cron.daily/ 以下のタスクの実行時刻は22時なのに実際には翌日7時から動いてるみたい。9時間差ってことはUTCとJSTのずれっぽいんだけど、どこをどうすれば直るのか分からない。まあ今の所特に支障があるわけでもないようだし別にいいか……(←ひどい)
2009年1月5日追記。正月明けて見てみたら古いバックアップが自動削除されてなかった……しょうもないミスでした。/backup/ 以下を検索しないといけないのに、/backup/最新のバックアップディレクトリ/ の中を検索してた。そりゃ古いファイルが見つかるわけがないです……
2009年3月19日追記。スクリプトを/backup以下に置いてcronにはシンボリックリンクを……という風にしてたせいで、スクリプトの編集から30日後のタイミングで古いバックアップと一緒にバックアップ用スクリプト自体まで消えてしまってました(ぉぃ)。アホス。これは置き場所を変更して解決しました。
会社で、Ubuntuで動いてるマシンの中身を自動的にバックアップする仕組みを作るようにと言われて、右も左も分からないままあれこれやってます。
まず、バックアップ先として500GBの外付けHDDを繋いだ。で、それをフォーマットし直す(FAT32→ext3)前に、LVMというのを使うように言われた。LVMとはLogical Volume Managerのことで、物理的なドライブの境目にとらわれずに論理的なパーティションを確保する技術とかなんとか……
GUI人間の僕は以前教わったとおりにssh -Y ユーザ名@IPアドレスでログインしてsudo GPartedでどうにかならないかなと思ってしまったのですが、どうもGParted上からだと言われたとおりの操作ができないようで……諦めて上記リンク先のITmediaの記事を見ながら何とかやってみた。
/dev/mapper/backup-backup /backup ext3 default 0 1という行を追加。
とりあえずまだここまでです……
Ubuntu 7.10から8.04にアップグレードして以降、音量とかはホットキー(Fnキーとファンクションキーの組み合わせでの操作)が効くものの、ホットキーではハイバネーション(Windowsでいう休止状態)やサスペンドができなくなってて困ってた。メニューから選べばできるんだけど、Fn+F10ですぐにハイバネーションできないというのは地味に不便だった。
今日思い立ってふと検索してみたらOSS EXPO - Let's Note + Ubuntu 8.04 pcc-acpiモジュールというエントリに手順が書かれてたので、やってみた。
ダウンロードしたファイルの置き場所を読み替えてそのままやったら無事ホットキーでハイバネーションできるようになった。ただ、Fn+F7はキーの刻印ではサスペンドのはずなんだけどこっちもハイバネーションになってしまう。まあサスペンドは使わないから別にいいんだけど……
のっぴきならない事情があってUbuntu(8.04LTS)でたくさん文章を書かなきゃいけなくなったんだけど、SCIM+Anthyでの変換効率が悪すぎてお話にならないので、カッとなってATOK X3 for Linuxをその場でダウンロード購入した。AAA優待版(他のプラットフォームでATOKを使ってる人向けの割引)で4252円。
ていうか仕事で一応メイン環境としてずっとLinux使ってきてたのに、我ながらよく今までずっと我慢してたなあ。いかにロクに仕事をしていないかがバレバレ……じゃなくて、だいたいLinuxだけで仕事することは少なくて特に文章を書く必要があるときは無意識のうちにいつも横にあるWindowsマシン(当然ATOK入り)で作業をしてたから、いざそれが使えない状況になって初めてそのありがたみを実感したわけですよ。
ご丁寧にもUbuntu 8.04LTSでのインストール手順がFAQとして公開されてたので、この通りに操作してサクッとインストールできた。
何で今まで入れなかったんだろうってくらい快適だ……もうAnthyには戻れない。
RapidSVNとかsvn upとかで妙に時間がかかる件について。須藤さんに教わったところによると、
という感じで主に4の所で時間がかかってるんだろうと言われまして、言われるままに以下のようにしました。
blacklist ipv6
と書いて保存いま作業中だから再起動できないので、一息ついたらもう一度試してみよう。
前にメモした気がしてたんだけどどうやらメモし忘れてたみたいなので……
WindowsでRapidSVNを使うときは、差分を表示するツールが付いてくるみたいなのでいいんだけど、UbuntuでRapidSVNをインストールすると、編集時のテキストエディタ、差分表示ツールのどっちも手動で設定しないといけない。テキストエディタはgeditでいいんだけど、差分表示ツールは普通にdiffを指定してもうまく動いてくれないので、GUIの物を入れて使わないといけない。
で、パッケージマネージャで「diff」をキーワードにして検索するとやたらたくさん引っかかるのでそれらしい物を片っ端から試してみたところ、どうも「xfdiff」が一番よさげな感じだった。日本語が化けないとかGUIがそれなりに綺麗とか、まあそんな理由からなんですが。
Firefoxの環境はデスクトップ百景を参照。
新マシンへの移行と同時にThunderbirdの本格的な利用を開始して、さっそく不満タラタラになったのでアドオンを漁ってみた。
スレッド表示してる時にソートできなくなる件について、あまりにあんまりだと思ってアドオンを作り初めてからふと「Thunderbird スレッド ソート」で検索してみたら、about:configでmailnews.thread_pane_column_unthreadsをfalseにすればよいと書かれた記事を発見した。こんなのデフォルトでfalseにしといてくれよ……
スレッドペインのコンテキストメニューで一番上の項目が「返信」じゃなくて「新しいウィンドウで開く」になってるせいで、無駄にウィンドウを開いてしまってイライラ。なのでuserChrome.cssで項目を消した。ついでにDOM Inspectorのインデントも減らしてみた。スレッド表示のネストが深くなったときに見にくくなるので、スレッドペインのインデントも変えるようにした。
#threadPaneContext-openNewWindow,
#threadPaneContext-sep-open {
display: none !important;
}
@-moz-document url(chrome://inspector/content/viewers/dom/dom.xul),
url-prefix(chrome://messenger/content/) {
treechildren::-moz-tree-indentation {
width: 9px !important;
}
treechildren::-moz-tree-twisty {
padding-right: 0px !important;
}
treechildren::-moz-tree-cell-text(colNodeName) {
margin-left: 1px !important;
}
}