本を読む

読書やコンピュータなどに関するメモ

Linuxでrm -rf /を実行するとどうなるか

 答:何も起こらない。

$ sudo rm -rf /
rm: cannot remove root directory

 ただしGNU coreutils 6.4以降のrmに限る。あと、rm -rf /*だと保護されない。

参考:

RubyにYada Yada Operatorを追加してみる

 Perl 5.12では、Yada Yada Operatorというのが追加されています。コード中で未実装の部分を「...」と書いておくと、文法エラーにはならないけど、実行時にそこを通るとエラー(例外)が発生するというもの。いわば「あとで書く」機能です。

sub foo {
    ...
}

 遊びで、Ruby 1.9.1のソースをいじって同じようなことをしてみました。

ふつうのRubyで実行すると

 ためしに、ふつうのRubyで実行してみます。

$ ruby -e 'if true; ...; end'
-e:1: syntax error, unexpected tDOT3
if true; ...; end
            ^

 「...」は範囲演算子なので、1つのトークンとして認識されるんですね。トークンとしてはtDOT3というもののようです。

方法1:メソッドとして定義

 パーサーをいじってみます。文として認識されるのが混乱がなさそうなので、stmtの最後に追加してみます。

| tDOT3
    {
        $$ = NEW_FCALL(rb_intern("..."), 0)
    }

 tDOT3が文として書かれていたら、「...」というグローバルメソッドを呼ぶ式を構文木に突っ込むわけです。「...」というメソッド名だったら、Rubyからは定義できないのでカブらないでしょう。

 で、error.cあたりにメソッドの処理を追加。Rubyの「raise NotImplementedError, 'Unimplemented'」相当です。"Unimplemented"という文字列は、Perl 5.12のperly.yからのコピペです。

static VALUE
rb_yadayada(int argc, VALUE *argv, VALUE obj)
{
    rb_raise(rb_eNotImpError, "Unimplemented");
}

 これを「...」メソッドとして定義。

    rb_define_global_function("...", rb_yadayada, -1);

 ビルドしたら実行してみます。

$ ./ruby -e 'if true; ...; end'
-e:1:in `...': Unimplemented (NotImplementedError)
        from -e:1:in `
'

 期待した結果が得られました。ただ、「in `...'」ってあたりが、いまいち格好よくないですね。

方法2:raise式を構文木に突っ込む

 方法1では、「...」の中で例外が発生したと表に出てしまうのがいまいちでした。そこで、方法1の変更を戻して、構文木の中にraise式を直接突っ込んでみます。

| tDOT3
    {
        NODE *args = NEW_LIST(NEW_CONST(rb_intern("NotImplementedError")));
        args = list_append(args, NEW_STR(rb_external_str_new_cstr("Unimplemented")));
        $$ = NEW_FCALL(rb_intern("raise"), args);
    }

 ビルドしたら実行してみます。

$ ./ruby -e 'if true; ...; end'
-e:1:in `
': Unimplemented (NotImplementedError)

 より、それっぽくなりました。

テストを書く

 やっぱりテストを書かなくちゃね、ということでtest/ruby/test_yadayada.rbを作ってみます。

require 'test/unit'

class TestYadayada < Test::Unit::TestCase
  def test_yadayada
    assert_nothing_raised do
      if false
        ...
      end
    end

    assert_raise(NotImplementedError) do
      if true
        ...
      end
    end
  end
end

 テストを実行してみます。

$ ./ruby test/ruby/test_yadayada.rb
Loaded suite test/ruby/test_yadayada
Started
.
Finished in 0.000710 seconds.

1 tests, 2 assertions, 0 failures, 0 errors, 0 skips

 めでたしめでたし。

まとめ

  • グローバルメソッド呼び出しを構文木に突っ込むにはNEW_FCALL()で
  • 引数リストはNEW_LISTで
  • Cの文字列から文字列リテラルを作るにはrb_external_str_new_cstr()で、メソッド名などのシンボル表記はrb_intern()で

Googleコマンドラインツールでちょっとヘンな気分

 GoogleのCalendarとかDocsとかYoutubeとかをコマンドラインから操作するGoogleCLってのがGoogleから出てました。詳しくはIDEA*IDEAとかで。

 要するにpython-gdataライブラリのフロントエンドなんですが、そうわかっていても実行してみるとなんかヘンです(いい意味で)。

 公式サイトに.debがあったのでインストールしてみます。ただし、Ubuntu Lucidだとpython-gdataのバージョンが古いと言われるので、Debian sidで。

$ sudo apt-get install python-gdata libcanberra-gtk-module
$ sudo dpkg -i googlecl_0.9.5-1_all.deb

 Google DocsのドキュメントをEmacsで新規作成してみます。

$ google docs edit --title "My Text" --editor emacs

 最初に実行するときにはOAuthでアクセスを許可する必要があるけど、ここでは省略。

GoogleCLから編集

 想定どおりの動作ですが、なんかヘンなのw

 あと、google.1ってmanpageもインストールされます。ので、「man google」ができます。

man google

 間違っちゃいないけど、なんかヘンなのw

 以上、インストールしてみただけのエントリでした。

「Q.E.D.」36巻、「C.M.B.」14巻

 今回も同時発売で、わくわく。

 以下、ネタバレは含まないように注意してるつもりだけど、念のためご注意を。

 「黒金邸殺人事件」は、密室殺人もの。トリックはやや無理がないでもないけど、それ以上にテーマとなる学会政治の話が印象的。ラストを読み終わってから冒頭を読み返すとウーンと。あと、ε-δって一言で説明するとこうなるんだ(←よくわかってない)。

 「Q&A」は、地中海もの。話がどう進行しているのか自体がトリックなので、詳細は省略するけど、その出し方が面白かった。あと、ちょうど最近アラビア科学についての本を何冊か読んでたところなので、そういう点でも興味を持った。

最初に…まったく予想していなかったことが起きたんです
この世界が終わるまでね

 「ワールド・エンド」は、アルゼンチン軍事政権の「汚い戦争」と、幻の蝶をからめた、いろいろな意味でとても残酷な話。

 「すごろく」は一転して、殺人とか起きない、日常的な舞台の小品。ちょっとしたロジックが小粋に効いてる。博物ネタはウル王朝のゲーム。

 「花屋の娘」は、ストレートな推理じゃないけど、話の展開がちょっと一時期のQ.E.D.っぽくて面白い。

xdg-openの中身

 LinuxなどのX環境では、コマンドラインで「xdg-open url」のように実行することにより、WebブラウザでURLを開ける。Freedesktop.orgのPortlandプロジェクトで開発されているもので、わりと汎用的らしい。以下、xdg-openの中身のメモ。

xdg-open

 xdg-openはシェルスクリプト。判断ロジックは以下のとおり。

  • 環境変数KDE_FULL_SESSIONがtrueならKDEと判断し、kfmclientを呼ぶ
  • 環境変数GNOME_DESKTOP_SESSION_IDが設定されていればGNOMEと判断し、gnome-openを呼ぶ
  • 「xprop -root _DT_SAVE_MODE」の値が"xfce4"であればXfce4と判断し、exo-openを呼ぶ
  • そうでなければ、次項以降へ。OSによって実装が違うようだ

Red Hat系Linuxで条件に合わない場合

 Red Hat系Linuxではxdg-open内で処理が続く(Fedoraで確認)。これがオリジナルっぽい。

  • 環境変数BROWSERが設定されていればそれを呼ぶ
    • ":"区切りで複数指定も可(最初に実行できたところで終了)

Debian系Linuxで条件に合わない場合

 Debian系Linuxではdpatchな独自パッチが入っていて、sensible-browserを呼ぶ。sensible-browserもシェルスクリプトで、判断ロジックは以下のとおり。

  • 環境変数BROWSERが設定されていればRed Hat系に同じ
  • 環境変数DISPLAYが設定されていれば(Xが動いていれば)
    • 環境変数GNOME_DESKTOP_SESSION_IDが設定されていれば(GNOMEであれば)
      • gnome-www-browserがあればそれを呼ぶ
      • x-www-browserがあればそれを呼ぶ
      • gnome-terminalとwww-browserがあればそれを呼ぶ
    • x-www-browserがあればそれを呼ぶ
    • x-terminal-emulatorとwww-browserがあればそれを呼ぶ
  • www-browserがあればそれを呼ぶ

sidのibus-skkをLucidで

 Ubuntu 10.04(Lucid Lynx)のibus-skkは0.0.4なので、ちょっと前のバージョン。Debian Sidのibus-skkが現時点で0.0.8なのを知り、.debをダウンロードしてdpkg -iでLucidに入れてみた。アーキテクチャがallで、依存パッケージが0.0.4と同じなので、まぁ大丈夫じゃないかなと思って。

 とりあえずzlとかz/とかが使えるようになって便利。というか、ibus-skkってPythonで書かれてたんだ。

「秘境西域八年の潜行 抄」

「秘境西域八年の潜行 抄」
秘境西域八年の潜行 抄 (中公文庫BIBLIO)
西川 一三
中央公論新社
売り上げランキング: 344460

 第二次世界大戦の時代、日本軍の命を受けた工作員の若者が、中国に対する辺境民族を味方につけるため、北京から蒙古、チベット、ヒマラヤ、インドまで秘境を旅したという、実話の手記。

 内蒙古で暮らしたあと、内蒙古出身のラマ(僧)に化けて旅をする。任務なのかそうでないのかはわからないけど、各地の暮らしや旅する人々にとけこみ、民族学のフィールドワークのような記録を残していて、その内容がとても面白い。しまいには、心も蒙古人になったのか、やけにチベット人をボロクソに言ってたりもする。

 そして、なにより冒険記として面白い。途中で終戦を迎えたためか、もともとの性向か、任務とは関係なく行けるところまで進んでいく放浪者の記録にもなっている。沙漠の旅やヒマラヤ越えの描写は印象的だし、ちょっとした密輸や無賃乗車などのお茶目なエピソードは後世のバックパッカー風な感じ。過酷ながらも旅を楽しんでるなあと思う。

 本書は抄録ということで、ところどころ話が飛んでいる。機会があったらフルバージョンも読もうかな。

 とりあえず、以下、フィールドワーク的な部分からメモ。あくまで著者の見方であって真偽はわからないし、本当だとしても65年ぐらい前の話なので、あしからず。

内蒙古

  • 弁髪、蒙古服、蒙古靴、帯にダーレン(嗅ぎ煙草入れ袋)、箸付き蒙古刀、ガオー(お守り)、数珠
  • フェルト製のゲル
    • 中央にいろり、アルガリ(家畜の糞の燃料)、トロゴ(五徳)
    • 戸棚に鉄鍋、銅桶、薬缶、杓子、大皿、茶碗、包丁、俎板、ガンジン(麺棒)、ヌトール(石臼)
    • 朱塗りの仏壇
    • 壁側に木箱や皮袋が積み重なる
    • 壁に火縄銃
    • 客は西側に座って片膝を立て、ククール(嗅ぎ煙草の小瓶)を出して主人と交換し、嗅ぎながら挨拶
  • 野菜類はほとんど食べず、空気が乾燥しきっているため、茶はなくてはならない
    • 煉瓦状に固められた茶を削ってわかす
    • 乳と少量の塩
  • 炒り栗とバター
  • 懐に椀が必須。椀はすべてひとつ
  • ヤスタイマハ(骨付き肉)から、皆で肉を刀でそぎ取って食べる
    • 小麦粉を手で練って肉の脂だらけの鍋に入れ、スイトンにする
    • 手は洗わない。牛糞をくべたり手鼻をかんだり
    • 椀も箸も洗わない
  • 便所はない。すべて野糞
  • 狼からの番のため獰猛な蒙古犬

寧夏ニンシャ

  • ホトン(回教徒)が通行者を苦しめる
  • 仏の使いのカラスの伝説
  • ジュアチョバ(十五日の供養)の祭
  • 病気になったらグルム(祈祷の法会)
    • ザンバーや黒砂糖、チーズをこねた像のバリン(供養物)
    • ボンボ(瓶)、ドルチイ(銅の杵)、ダンバル(でんでん太鼓)
    • バリンを病人の全身にこすりつけて捨てる
  • 風葬
  • 首都 定遠営
    • 蒙古人より漢人が多く、街も中国の田舎町ふう
    • 関帝廟
    • 図書館
    • 漢人による蒙古への監視
    • 北京風の王府
  • テングリ沙漠
    • 徒歩で越えればガンジュール(大蔵経)を読んだと同じ功徳、といわれる
    • 盗賊の住んでいたハラホト(黒い城)の跡から財宝が発掘されるという話

青海蒙古

  • チベット人との旅
    • チベット人は茶のみ椀と飯の椀は別
    • 唐辛子の小片をザンバーにつけて食べる
    • ヤクの干し肉
  • チベット人の家庭
    • 蒙古人の使用人に対して厳然とした主従関係
    • ザンバーを山盛りにするのが礼儀
    • うどん汁に大根の干し葉
    • チベット式バター茶
  • 夏の大祈祷祭
  • 薮蚊
  • ハサクの反乱
    • 蒙古とトルコの雑民族
    • 剃髪、チャンホイ(纏回)服、回教、チャンホイ語
    • 精悍
    • 蒋介石政権のトラックを襲撃、立ち退き、青海蒙古地方に
    • 蒙古人を襲撃
  • 青海蒙古族
    • アルタン汗に外蒙古を終われたホショート部族の一部が青海に移り住んだもの
    • デートモンゴル(上方の蒙古)
      • 内蒙古や寧夏はドーロモンゴル(下方の蒙古)
    • 沼と河と湖
      • 塩沼地帯に硝石
    • 山地には羊・ヤク、曠野にはラクダ・馬・牛・羊・山羊
    • 6~8月は雨が多く、10~4月はほとんど降らない
      • ヘムヌグ(フェルトの雨衣)
    • 一部地域を除いて農業には適さない
    • 蒙古人の中でも野蛮、無気力
      • 回教軍や中国の役人のご機嫌とり
    • 毛皮の蒙古服をボロボロになるまで着る
      • 綿製品は品不足で高価
    • 学校がなく、蒙古文字を理解する者もほとんどいない
    • 禁語
  • タングート族
    • 羌戎、西蕃の子孫
    • 遊牧
    • 日本人に似た風貌
    • だぶだぶとした毛皮の着物。布団がわりにも
    • チベット刀を、体の前に下から上に向けて差す
    • ガオーと数珠、象牙の指輪、弓引輪、銀の耳輪、細身のヤク皮の長靴
    • 安定台として木製の棒をつけた小銃を背負う
    • 1日かけて編む弁髪に、たくさんの布切れや財宝を付ける
    • ヤクの毛で降られたバナクに住む
      • 目が粗い
      • 裾の内側に棒を立て、外に綱を張る
      • 夫婦でも別れて寝る
      • 家畜の世話などで外で寝ることも多い。大雨の日でも

チベット

  • ラサの家は中庭を中心に立てられる
  • 市内の数カ所に掘られた井戸から水を汲む
  • 便所は最上階にあり、一階の糞壺まで落とすしくみ
    • 肥料として農夫が汲み取りロバで運ぶ
  • ザンパーとバター茶、肉が主食物
  • 金銀や宝石が湯水のように使われた仏殿
  • 三百年前に十五年かけて作られた、ダライラマのポタラ宮殿
  • 支配階級の貴族ラマによって文明の利器が阻まれている?
  • 馬やロバ、ラバ、ヤクの出たての糞を、われ先に手づかみで拾って籠に入れる
    • 燃料
    • 家の壁にはりつけて乾燥させる
  • シギレ(煙草)は禁止、嗅ぎ煙草は許可
  • 学校はなく、ラマ以外は読み書きできない人が多いが、ラサなどには寺小屋もある
    • 習字(字形)を重んじて字義や文法をおろそかにするため身につかない
    • 先生が自分より優秀な弟子を潰そうとする
    • ラマは楷書体(ウーチェン)だけ、俗人は行書(ウメー)だけを使う
    • 数の勘定法が発達しておらず、九九もない
  • パリー県
    • 盆地
    • 黒灰色の小さな家が並ぶ
    • チベットの中でも最も寒い街との定評
    • インドへの門戸のため、商人や旅行者、巡礼者が集まり、すべての店が商店
  • ラマ教の組織
    • 組織
      • チョグチェン:全ラマ教圏から集合した寺の大学堂
      • ダツァン:大学堂の中で、地域出身ごとに法会を営む学堂
      • カムツェン:学堂の中でさらに地域ごとに分かれて法会を営む地方班堂
      • メツァン:地方班堂の中で小地域出身者が一緒になって住む僧舎
    • 大学堂の組織
      • カンボ(学堂長)、シャンウ(司法僧)、オムゼット(経頭)、ネルバー(会計僧)
      • 定期法会と不定期法会
        • 定期法会はすべて政府財政により賄われる
        • 堂や舎の修理、備品、全僧徒への支給なども政府財政による
    • 学堂の組織
      • 学堂長、司法僧、経頭、シャンゼット(倉参与)、会計僧、チヤビル(補佐役)、ギュグ(世話役)、ゴニル(堂管理僧)、初期、炊事僧
      • 倉参与と会計僧が重要
    • 地方班堂の組織
      • カムツェンゲゲン(地方班堂長)、経頭、倉参与、会計僧、ドニル(世話役)、堂管理僧、補佐役、書記、雑役僧
    • 僧舎の組織
      • シレートラマ(僧舎長)、経頭、会計僧、補佐役
      • 財源は法会からの収入か寄付に頼る
        • 新人僧を奪い合うようにスカウトしあう背景
    • 僧舎の生活
      • 3~4畳程度の独房のような部屋
      • 寄付で立てた建物だが「部屋主」が部屋代を取る
    • ゲシェ(博士)の試験
      • 金がかかるが、学問のある僧には後援者もつく
      • 金で学位を買おうとする僧も
    • 学位を得た学力や金力のある僧は、政府がラサの寺に引きとめる
      • 外貨をチベットに落とさせる政策
  • チベットと蒙古
    • チベット人は蒙古人に好感を持っているが下に見ている
      • 優秀、勤勉
    • 蒙古人はチベット人に反感を持っている
  • ラサの裏(?)
    • ラマ教を信仰することで現世利益が得られるという「形式的信仰」
    • 強い者に媚び、弱い者に厳しくあたる
    • 金力にまかせての豪華な御殿
    • 貴族が一般民衆を権力で弾圧する封建的な政治
      • 暴動が起きると、鎮圧する兵隊からの被害のほうが大
    • 乱れた性関係

ヒマラヤ

  • チュンビー渓谷
    • 高原のチベット人以上に日本人に似た容貌
    • ハンコー(トモ靴)。ヤクの一枚皮の底と、チベット檻の脚部で、足に一体化
      • 一般に靴の形や模様で種族が見分けられる
    • 木造建築、日本風の屋根
      • 雨が多い
    • ボン教
    • 農業、運搬業、宿屋
    • 風呂
  • カーレンポン
    • 山肌を開墾して茶、ミカン、ジャボン畑
  • ダルジリン
    • 白、赤、緑のマッチ箱のような家
    • 静かで清潔

インド

  • 電車に改札なし
  • 通路など空いている場所には早い者勝ちで荷物や人が
  • 荷物は背負わず頭の上に
  • 汽車の昇降口の下で茶をわかす
    • 湯は汽車のボイラーから
  • 街中にスパス・チャンドラ・ボースの肖像
    • 生存説
  • 独立後は路上で寝るのは取締りが厳しく

「日経Linux」2010年7月号

 6月号に続いてUbuntu 10.04の紹介記事を書かせていただきました。起動まわりから、Upstart、X.orgのHAL非依存、Plymouth、Ambianceテーマ、新規採用フォント、アプリ、Me Menu、UEC、Ubuntu One Music Storeなど、新しそうなあたりを広く(浅く?)扱っています。本当はFedora 13とあわせてディストリビューション特集のはずだったのですが、Fedora 13正式版がずれ込んだようで残念。

 ほかの記事では、CEREVO CAMの開発裏話の記事が載ってますね。連載では、Rlu-rayとかPT2とかXの仕組みとかRAIDとかAndroidでWebカメラとか。

Emacsでマルチバイト文字をコマンド文字に

 Emacsのヨタねた。

(global-set-key "\C-xい" #'insert-buffer)

 ibus-skkとかuim-skkとかだと、案外実用になったり。

「Ubuntu Magazine」vol.04

Ubuntu Magazine Japan vol.04 (アスキームック)

アスキー・メディアワークス
売り上げランキング: 32

 Ubuntu 10.04特集号。新機能紹介のほか、インストールやアップデートの注意どころがフォローされている。

 「うぶんちゅ」は、Ubuntuマニアック度もラブコメ度も急にアップ。スーパー牛さんパワーw

 あと今回は、3Dデスクトップとか、動画や音楽などのメディア系とかの記事が並んでいて面白い。といいつつ巻末に「はじめてのシェルスクリプト入門」も。

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad