たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
僕はバージョン管理システムの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日追記。日本語のメッセージを付けてコミットできない問題に対処してみた。
新はてブとAutoPagerizeの競合のことで色々もめているようですが、個人的にはこの間Aza氏に見せてもらったUIデザインのモックアップみたいなのがいいなーと思いました。Azaはタブの代わりに使いたいと思ってたようだけど、AutoPagerize的な用途に使うのが現時点では有用なんじゃないかなあ。
イメージしづらいと思うけど、XULのbrowserとframesetとframeでそれっぽく表現するとこんな風になるかな。
<xul:browser height="600"><!-- ←この要素がスクロールバーを提供する -->
<html:frameset rows="*,*,*" height="6000">
<html:frame src="今見ているページ(ページ1):ページの長さ=2000px"
height="2000"/>
<html:frame src="ページ1のrel=nextのリンク先のページ(ページ2):ページの長さ=2000px"
height="2000" />
<html:frame src="ページ2のrel=nextのリンク先のページ(ページ3):ページの長さ=2000px"
height="2000" />
</html:frameset>
</xul:browser>
本物のXHTML 1.0 Framesetとは違う嘘マークアップであることに注意。あくまで雰囲気だけ見て欲しい。こういう作りなら、AutoPagerizeの原理的な問題の一つである「ページを動的に継ぎ足すせいで、継ぎ足された内容に対してユーザスクリプトが実行されない」という問題は起こらなくなるはずだし、想定されない内容改変によるページのレイアウト崩れも起こらないはず。その代わり、広告が二度も三度も表示されるという問題は起こるけど。
ちょっと作ってみようかな、そういうの。
色々思う所はあるんだけれども、根本的な問題として、自分がこの人の立場だったらどう感じるか?という所で感情移入ができなかったため、多分この人の言いたいことの根っこの所は自分には理解できないんだろうなあと思った。
仮に、すでに何人もの男と付き合ったことがあるモテ子さんと付き合って、自分が童貞であると知った瞬間にそのモテ子さんに「え?ホント? ホントに童貞なの?? マジで??? うっそー。私、童貞に当たったの初めてだ。どうしよう。やっと大当たり来た。これは嬉しすぎるマジで」と言われたら、どう思うか? と考えてみても、自分の場合「童貞捨てたい欲」「何でもいいから自分の持ってる性質で承認されたい欲」の方が上回って全然気にならないかもしれないなあ、という気がするのです。
まあ「物扱い」ていうんですか、ナツ氏が感じたような感覚が全く無い訳じゃないだろうとは思うんだけど、しかし自分だったら「あ、物扱いなんだ……所詮は物扱いなんだね。うん、でも、しょうがないよね。自分には恋愛市場価値が無いんだから、こんな人でもなきゃ相手してくれないんだよね。こんな僕の童貞をわざわざ奪ってくれるのだから感謝しこそすれ恨むだとかキモがるだなんてのはとんでもないことだよね。」とすら考えるんじゃないかって気もするんですよ。
まあ、理屈では分かるんですけどね。多分こういう事を言ってるんだろうなっていうのは。色々言葉を尽くして説明してくださっているし。でも自分自身の感情とあまりにリンクしなくて、ナツ氏のその時の感情に共感できない。「意見に賛成できない・したくない」という意味でなくて、字義通り「共感」できない。
そこを「共感」できるようにするのが「想像力」だろ、もっと努力しやがれ想像力鍛えやがれ、っていうのがナツ氏をはじめとする世の大多数の非アスペ傾向な人達の言いたいことなんだろうなあ、と思うことは思うのだけれども、残念ながらやっぱり共感できなくて想像力もこれ以上逞しくならないので、彼ら彼女らのためを思えば自ら首くくって死ぬべきなんだろうと思うけれども、その勇気もないので申し訳ないことに彼ら彼女らを不快にさせながら今後も生きていかざるを得ないなあ。
誤解されるとアレだから一応書いておくけど、少なくとも今の自分は、「非処女は肉便器」と言う「処女厨」の考え、には同意しない。
追記。そういえば、彼女が水着に着替えない というエントリに対するナルカミさんの反応にも似たような事を思ってしまった。自分がその立場だったらどう思うか、という事を考えてみても、「『自分を許容してくれた他人を』『果たせなかった過去の夢を叶えてくれる道具としか見ていない』ような人と傷をなめ合う事くらいしか自分には許されないんだよアハハだって自分もそうだもんねえお互い様だよねえ」みたいな感じで。
結局、なんていうか、「自分は物扱いされていいような安い人間じゃない」という自信? 自負? プライド? そういうものを、成長の過程で身につける事のできた「健全」な人でなければ、望ましい恋愛関係を築くことはできず、築こうと試みる事も許されず、分不相応にもそういう事を望んだのならば激しく非難され糾弾されてしかるべき(試みる自由はあるが、その代償として当然非難されねばらならず、非難されたくないのならば試みてはならない)、ということなんですかね、人の世というものは。
関連リンク:
ランドセル込みで後ろ姿。
カトキメカは後ろ姿が特に格好いいよね。
デストロイモード。
小説6巻でバナージが自分の意志でデストロイモードを発動するシーンがシビレる程格好良かったので、ルックスだけじゃなく物語の中での存在としても、デストロイモード好き度合いがグッと上がりましたよ(それまでの劇中の描かれ方では、バナージの意志と関係なく発動する「忌まわしいモード」みたいな感じ一辺倒だったから)。
腕には前述の3mmスペーサーを入れてある(上の後ろ姿とデストロイモードはこのスペーサーが入った状態です)。
自分としては両モードともそれほど違和感がない(ユニコーン時は長すぎず、デストロイモード時は短すぎない)、と思ってる。キットのランナーの廃材利用でできるお手軽改造なので、持ってる人は試してみてはどうだろう。
VF-25(アルト機)の再版分を買ってしまったので、それに手を着ける前に早く片付けないとと思って、大放置中だったユニコーンガンダムの組み立てを約1年ぶりに再開しました。ちなみに昨年の進行状況は腰から上まででした。
Vガンダムの前半を見(?)ながら、約5時間でここまで。何故こんなに時間がかかったかというと、足首まわりのABSパーツでパーティングラインが真正面に来てる奴とかの処理に手間取ったから(その時はちょうどケイトさんがマスドライバーを守って戦死してました)。パーツ同士の合わせ目が出ない構造なのはいいんだけど、一体成形のパーツの目立つ所にパーティングラインってのも、どーにかして欲しいです……
膝裏の切り書きを増したりしてみたけど、装甲付けたら90°くらいしか曲がらない……あちこち干渉しすぎる。まあどうせカトキ立ちで置いとくからべつにいいんだけどね。
バランス見るために組み上げてみたら、ユニコーンモードの時ですら脚の長さが異様で、デストロイモードの状態まで伸ばしたらもうシャレにならんくらいだったので、なんとかしないと……と思って上腕の所に挟み込むスペーサーを作ってみた。
ランナーのネームプレート部分を切り出して積層で、2mmから3mmの延長といったところだろうか。脚の装甲を全部付けたらまた感じが違うのかもしれないけど、とりあえず今の所はこれで。
今頃になってVガンダムを見てみている。まだ頭の方だけど、こうして今見てみると、ウッソがどういう人物なのかとか、カテジナがどういう人物なのかとかがよく分かる。しかしどう考えても子供向けアニメじゃないよなあこれは。
Aza Raskin飲み会行ってきた。
普段あまり顔を合わせることがないplus7さんが来られていた。plus7さんは最近タブレットPCを使われているそうなのだけれども、タブレットPCはキーボードが無い。そういう環境で便利に使えるUbiquity的なUIはどういうものか?という事についてのアイデアをAza氏に解説されてた。
それはどういうものかというと、逆ポーランド記法の計算が「演算対象のデータをスタックに溜め込」んでから「演算の種類を決定する」という形で行われるのと同じように、リンクやら文字列やらをドラッグ&ドロップでどんどん「スタック」に溜め込んでからコマンドを選択する、というものだ。溜め込まれるデータ自体が持つコンテキストであるとかメタデータであるとか(Microformatsもそう)をキーにすれば、その時提示される「コマンド一覧」について最も適切と思われるものをサジェストできるのではないか?とか、色々と夢が広がる。セカンドサーチで、ページ内の文字列を選択→検索窓にドラッグ→ポップアップが出てくるのを待つ→ポップアップから検索エンジンを選んでドロップ という風な操作をよくやってる僕としては、このUIが実現されれば結構使えるかも?と感じた。片手がふさがったままでも色々できるし。
組長に、現状のUbiquityにおける日本語対応用コードの内容というのを教えてもらった。曰く、「で」とか「に」とかの助詞をデリミタとして文を分割するという物だそうな。単純に作るとそうなるよなあと思うんだけど、実際の日本語の文章ではこれはまずマトモに動かないことが予想されるわけで……やはりきちんとした形態素解析の仕組みは欠かせないと思う。それか、ローマ字入力で分かち書き入力するという前提で、XUL/Migemoの応用によって、例えば「miru」という入力に対してマッチするコマンドをコマンド一覧から探し、「見る」と「診る」の両方をサジェストの候補として出す、という風にするとか。
ATOKダイレクトのAPIがオープンになっていること、PerlとRubyに対応していてSDKが公開されていることをAzaに伝えると、「Pythonは無いの?」とAza。そこから、何故Pythonが日本であまり流行らないのかという話になった。最初に出た訳本が微妙だったからじゃないかとか、名前の元になったモンティ・パイソンが日本であまり知られてないからじゃないかとか、PHPやPerlやRubyがすでにデファクトスタンダードとなってしまっているからじゃないかとか……
モンティ・パイソンの話から、コメディは文化に強く依存するのかもしれないという話にもなった。Azaが紹介してくれた「far side」というアメリカの漫画は、日本人に見せても「何が面白いのかよく分からない」と言われがちだという。モンティ・パイソンも組長曰く「ギーク受けするような内容」とのことで。でもサウスパークは日本人にもウケてる気がする。直接的なギャグ、は日本でも受け入れられるということなんだろうか?
日本語入力といえば、IME上でEnterで変換を確定するとUbiquityのコマンド実行として扱われてしまうという問題。これにはAza本人も参っているとか……誰かパッチを公開してたはずだ、という話をその場でもしてたけど、今調べたらFireMobileSimulatorの堀川さんだった。このあたりの、キー入力とIMEの組み合わせの問題を回避するノウハウは、Find As You TypeがC++からJavaScriptに移植された後に中野さんが頑張って直したFindToolbarの実装(今だったらfindbar.xml)に詰まっているので、Azaにもおすすめしておいた。
Azaは日本語がしゃべれるということで、みんな普通に日本語ベースでしゃべっていたけど、日本語ネイティブでないAzaにはちょっと辛いんじゃなかろうか? と、勝手に気を回してしまって僕はなるべく英語を使うようにしようとしてみたんだけど、基本的な語彙力がないからやっぱり日本語混じりの怪しい英語にしかならなくて、あの場では僕が一番アホな喋りになっていたんじゃないかという気がする。
その後、終電までの短い時間だったけどカラオケにも行った。Azaは「津軽海峡冬景色(石川さゆり)」「花火(AIKO)」「First Love(宇多田ヒカル)」を歌ってた……って、ちょ、どこで憶えるんだそんなラインナップ?!
そんな感じの会。いろんな人が色んな知識やアイデアを持ち寄って話すのも大事だなということを改めて思った。こういう機会を設ける提案をしてくれた組長に感謝せずにはいられない。組長はかなりの量のウィスキーにビールにワインに色々飲んでいてカラオケの時には呂律も回らなくなってヤバイ状態に見えたけど、無事会社まで辿り着けたんだろうか。心配だ。
ところで、帰ってきてから気付いたけど、ATOKダイレクト開発者ブログで前のエントリが紹介されてる。UbiquityにはATOKダイレクト開発者の方も以前から興味を持たれてたとのことで、みんな似たようなことを考えるものなんだなあと感慨を憶えた。……ATOK 2008(for Windows)買いそびれててすみませんすみません ATOK X4(?)での改良に期待してます。
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版と同様に使えるようになる。同音異義語の使い分けには充実した電子辞書が欠かせません……
http://anond.hatelabo.jp/20081119002409
非モテが思うほど女って処女に拘りあるわけでもないし。
なんかつまらんことに凄く思いつめてて意味が分からないんだよなー
処女の相手の男なんて正直、「インターネットをつないで初めていったサイト」くらいのモンでしかないよ。
「でも、初めて俺のサイトにきたことは確かなんだろ!?」って管理人に言われても、「まあそうだけど、それがどうしたの?なんでそんなことに息切らしてるの?」みたいなさ……
非常によく分かる例え話に大変カルチャーショックを受けました……
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日後のタイミングで古いバックアップと一緒にバックアップ用スクリプト自体まで消えてしまってました(ぉぃ)。アホス。これは置き場所を変更して解決しました。