2005-10-31

hatena-mode の設定

hatena-modeはてなダイアリーの投稿を始めたので、設定その他をメモ。

ダウンロード

hatena-mode は cvs で開発版を公開している。開発版を ~/cvs 下に置くとして、

$ cd ~/cvs
$ cvs -z8 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/hatena-mode co hatena-mode

最新版への更新は ~/cvs/hatena-modecvs update

.emacs の編集

site-lisp にコピーしてもよいけれど、いろいろと面倒なので ~/cvs/hatena-mode に load-path を通すことにした。次の設定を .emacs に追加。

;;
;; Hatena Mode
;;
(setq load-path (cons (expand-file-name "~/cvs/hatena-mode/") load-path))
(autoload 'hatena "hatena-mode" "hatena mode" t)
(setq hatena-usrid "at-aka")
(setq hatena-plugin-directory "~/cvs/hatena-mode/")
;; Optional
(setq hatena-directory (expand-file-name "~/path/to/hatena/"))   ; default は ~/.hatena
(setq hatena-proxy "http://foo.bar.net:8080/")                   ; proxy を通す場合

load-path の設定には、 expand-file-name が必要。これをつけなかったら、hatena mode が起動してくれず、ハマった。

hatena-mode の説明では load を使って hatena-mode をロードしている。これだと、 Emacs 起動時に hatena-mode.el を読み込んで起動が遅くなる。ここは autoload で十分なはず。何か理由があるのかな?

quick start

M-x hatena で「はてなモード」に入って「はてな記法」で文章を入力。

C-c C-p で、「 はてなダイアリー」に送信

2005-10-30

はてなダイアリーも始めました

はてなダイアリーも始めました。

最近いろんなサービスを試してばかりで収拾がつかなくなっている。だけど始めちゃった。

始めたきっかけは、 hatena-mode なる Emacs Lisp を見つけてしまったこと。ちょっと面白いかも、と思って、hatena-mode を試すために「はてなダイアリー」に登録。う〜ん、何か順番が逆だよね。

そんなわけで、 hatena@aka の方は hatena-mode に関する文章ばかりになると思う。更新頻度も低いと思う。それから、ほとんどの内容はこのブログとのクロス・ポストにするかもしれない。

あまり、期待せずにお読み下さいまし。

Google Reader アップデート (2005/10)

The Official Google Reader Blog によると、先週末に Google Reader がアップデートされていたそうな。

My favorite is support for the space keyboard shortcut. In all browsers, pressing the space key moves down in the current page. Reader's addition to that is to advance to the next item if you're at the end of the current one. This means that you can read your entire reading list with just one finger press!

ということで、「スペースキー」を押し続けるだけで、全てのフィードを読むことができるようになった。 Emacs-w3m のようなインターフェースですな。

手元のキーボードは Kinesis キーボードの dvorak 配列なので、 j を左手で、 SPACEs を右手で押す。短いフィードと長いフィードが交互にあると、左手と右手を両方使わなくちゃいけなくて大変だった。

今回の変更のおかげで、フィードを読むのもスターを打つのも右手だけで事足りるようになった。便利。

jk で前後のフィードに移動できるというのは、vi 由来のキーバインドなのだろうけど、dvorak 使いには不便極りない配列。ここら辺、キーバインドを mnemonic にしてくれるか、変更できるともっと便利なのだけど...

その他、こまごまと

Google Reader の雑感で、日本語が Your subscriptions で表示されない問題があると書いたけど、こちらの修正も行われたみたい。ただし、既に登録してあるものについてはそのまま。もう一度登録し直す必要があるのかな?

2005-10-29

Blogger の Word Verification

Blogger へ Atom-PP 経由でポストできない問題は解決したみたい。Atom-PP 経由でポストしてもエラーにはならなくなった。とはいえ、全面的に Atom-PP からのポストを許しているわけじゃない。

現在 Blogger では、splog と疑わしきブログから Atom-PP 経由でポストしようとするとドラフトとして保存される仕組になっている。そこで、 Blogger にログインして「投稿」画面から CAPTCHA を入力すると、あらためて記事が投稿される。こういった仕組みは、Atom-PP 経由だけじゃなくて、次のサービスでも取られている。

  • AudioBlogger
  • Mail-to-Blogger
  • Blogger for Word
  • Hello BloggerBot
  • Flickr
  • API clients (XML-RPC, Atom-PP, etc?)

question mark投稿時の Word Verification をやめさせるには、「Word Verification:」についてる「?」マークをクリックする。すると下のような画面になるので、そこで CAPTCHA を入力する。これで投稿時の Word Verification は出なくなる。

word verification

以上、元ネタは Blogger のヘルプ:

追記: という記事を Atom-PP 経由で投稿したところ、Error 500 が返った。あれ? さっきは成功したのに... しかも、「投稿時に Word Verification させない」ようにしたはずなのに有効になってない。ううん、Blogger、頑張れ。

追々記: 先刻、Blogger Support からメールがあった。「あなたのブログをレビューして、確認して、ホワイトリストに加えました」という内容。メールが英語なのがちょっとマイナス。でも、Blogger の日本語化は早めだから、すぐに日本語のメールが届くようになるでしょう。メールが届いたら、Blogger をログアウトしてもう一度 Blogger に入り直す。それで、Word Verification は行われなくなる。最後に、「我慢してくれてありがとね、こんなことになって不便な思いをさせてごめんなさい」と書いてあった。Blogger、頑張ってるじゃん。

2005-10-27

Bazaar-NG のコマンドライン補完 |zsh|

Bazaar-NG には、zsh (と bash) のコマンドライン補完用ファイルが同梱されている。darcs の補完入力でも書いたけど、僕は zsh 使いなので、zsh の設定方法をば書いておく。

補完ファイルの追加

zsh 補完用のファイルは、以下の場所にある。

  • bzr-0.X.X/contrib/zsh/_bzr

これを、zsh の completion 用のディレクトリー (ここでは、~/etc/zsh とする) にコピーして、.zshrc に次のコードを追加する。

fpath=(~/etc/zsh $fpath)
autoload -U ~/etc/zsh/*(:t)
autoload -U compinit && compinit

zsh を起動し直せば、設定が反映される。

もうちょっと賢い (?) zsh 補完

[2005-10-19]、much improved zsh completion script から始まる (Bazaar-NG ML 内の) 一連のスレッドで、もう少し賢い zsh 用の completion script が公開された。このスクリプトは、[2005-10-27] 現在、Bazaar-NG の開発版には含まれていない。ファイルは以下の場所で手に入る。

設定は上と同じ。

2005-10-26

Blogger の Word Verification と ATOM-PP

Blogger の投稿画面で CAPTCHA による Word Verification が行われている。

最近増加しつつある splog (ブログ版スパム) 対策だそうな。

現在、この Word Verification のおかげで、Blogger の ATOM-PP 経由による投稿ができなくなっている (送ろうとすると Error が返る)。Blogger 側の説明によると、数日のうちに直す模様。早く直るといいな。

ソースはこちら。

Bazaar-NG の branch format をアップグレードする

調子に乗って Bazaar-NG のバージョンを 0.0.9 から 0.1.1 に上げたら、bzr のコマンドが全く通らなくなってしまった。エラー・メッセージはこんな感じ。

$ bzr log
bzr: ERROR: command: '/usr/bin/bzr' 'log'
pwd: /home/foo/path/to/your/bzr-project
unsupported branch format: sorry, branch format u'Bazaar-NG branch, format 0.0.4\n' not supported
  at /usr/lib/python2.4/site-packages/bzrlib/branch.py line 515, in _check_format()
  see ~/.bzr.log for debug information

これは、Bazaar-NG のリポジトリーの形式 (branch format というのかな?) が変更されたのが原因らしい。新しい format は、weave format と呼ぶそうな。

リポジトリーのアップグレードは、ソース・ツリーの中で bzr upgrade と打つだけでよいみたい。

$ pwd
/home/foo/path/to/your/bzr-project
$ bzr upgrade
starting upgrade of /home/foo/path/to/your/bzr-project
making backup of tree history
./.bzr has been backed up to ./.bzr.backup
if conversion fails, you can move this directory back to .bzr
if it succeeds, you can remove this directory if you wish
starting upgrade from format 4 to 5
note: upgrade may be faster if all store files are ungzipped first
upgraded to weaves:
      17 revisions and inventories
       0 revisions not present
      45 texts
starting upgrade from format 5 to 6
adding prefixes to weaves
adding prefixes to revision-store
this branch is in the most current format
finished

アップグレードは、あっという間に終わる。でも、念のため、ディレクトリーのコピーを取ってからやることをお勧めする。

一応、Bazaar-NG 0.1.1 の bzr help upgrade を和訳 (意訳) しておく。

ブランチのストレージを最新のフォーマットにアップグレードする。

(bzr の) check コマンドや bzr の開発者は、時々このコマンドを実行するようアドバイスするでしょう。

このバージョン (0.1.1) のこのコマンドは、0.0.8 及びそれ以前のバージョンで使われていた full-text storage から weave format (v5) にアップグレードします。

はてなブックマークの「注目エントリー」の閾値

はてなブックマークの注目のエントリーは、(ブックマークしているユーザーの) 閾値を越えたエントリーを、ユーザー数と更新の新しさから並べてくれるというもの。[2005-10-25]、はてな閾値をユーザー数 3 から 5 に引き上げ、[2005-10-21] にユーザー数を 3 と 5 に切り替えられるようにしてデフォールト値を 3users に戻した

clmemo@akaはてなブックマークでエントリーしている user 数は、最大 5。だから、5users だと「注目のエントリー」にほとんどのエントリーが表示されなくなる。

デフォールト値の切り替え機能は大歓迎。

閾値を任意の値にする

さて、はてな側ではこの閾値の値は 3users と 5users の二者択一。実はこの閾値、URL を直接いじることで、任意の値に変えられる。

注目のエントリーの URL の末尾は、

&threshold=5

という風になっている。ここを好きな値に変えればいい。

RSS の閾値も設定する

「注目のエントリー」ページにある RSS でも、同じように閾値を設定できる。

「注目」の基準なんて、タグやサイトごとに違うものだから、任意に変えられるのは便利。

ちなみに、末尾に &threshold=# をつけない場合、閾値は 5users になるみたい。例えば、&threshold=# が導入される前の RSS を引き続き使っていると閾値が 5users になる。

clmemo@aka のサイドバーには、はてなブックマークを利用した「Hot Entries」を JavaScript で表示しているのだけど、その閾値が (はてなの設定画面で 3users にしたにもかかわらず) 5users になっているので気付いた。

2005-10-25

開発版 Bazaar-NG を入手する

開発版 Bazaar-NG を get する方法について。つまり、 CVScvs checkoutBazaar-NG でやる方法。

CVS で開発版を get するとは、リモートにあるレポジトリーから最新の状態のソース・ツリー一式をローカルにコピーすること。一方、 Bazaar-NG では、リモートにあるレポジトリーそのものをローカルにコピーする。そのため、レポジトリーはリモート側 (開発元) とローカル側 (手元) に二つ出来てしまう。そして、十人が開発版を get すれば、11 のレポジトリーが出来る。これが分散型バージョン管理システムの特徴。

Bazaar-NG では、最新版を手に入れるコマンドを branch と呼んでいる ( getbranch の alias)。つまり分散型バージョン管理においては、最新版の get は、新しくブランチを作るのと変わりがない、ということ。

Bazaar-NG の公式開発版は、以下のアドレスにある。

最新版の入手と更新

Bazaar-NG の開発版は以下のコマンドで手に入る。

$ bzr branch http://bazaar-ng.org/bzr/bzr.dev

全てのバージョンをダウンロードしようとするので、とても時間がかかった。mirror とか、無いのかな?

更新は、bzr.dev ディレクトリー内で

$ bzr pull

branch コマンドと pull コマンドは、ローカルのレポジトリーに対しても (当然) 有効。例えば、 foo というプロジェクトを bzr でバージョン管理していたとして、新しいブランチを作る場合は、こんな風にする。

$ ls
foo
$ bzr branch foo foo-new-branch
$ ls
foo foo-new-branch

古いバージョンを手に入れる

先の foo プロジェクトで、古いバージョンが欲しくなったとする。その場合、revision number を -r オプションで指定して branch コマンドを実行する。例えば、欲しい revision number が 15 だとすると、次のような感じ。

$ ls
foo foo-new-branch
$ bzr branch foo foo-old -r15
$ ls
foo foo-new-branch foo-old

revision number は、 log コマンドで調べられる ( revno が revision number)。

$ bzr log

2005-10-24

TypePad ブログの更新情報を weblogs.com にも送る

ぼくは clmemo@aka とは別に趣味用のブログを TypePad で作ってる。今日、自分のブログの記事を GoogleBlog Search で探してみたところ、一件も見つからなかった。理由を調べてみると、 Blog Search は、weblogs.com に送られた ping を打った所をインデックスしているとのこと (via Googleブログサーチ)。

早速、 TypePad の設定画面を調べてみたところ、 TypePad は外部 PING サービスに ping.bloggers.jp と weblogs.com を設定できるものの、デフォールトでは OFF になっていた。 Blog Search から検索できるに越したことはないので、weblogs.com にも PING を送るように変更 (ついでに pnig.bloggers.jp にも PING を送る)。

「ブログ」タブの「設定」タブから「公開設定」を選ぶと設定画面が表示される。

ちなみに、 Blogger は最初から weblogs.com に PING を送る設定になっている。というか、weblogs.com 以外に PING へ送れないみたい。

もし、任意の PING サービスに PING を送りたければ、 Feedburner を使ってみるといい。

2005-10-22

Bazaar-NG install / quick start

分散型バージョン管理システムの一つ、 Bazaar-NG をインストールして使ってる。バージョン 0.0.9 のインストール方法を書こうと思って、 Official Page を見てみたら、最新版は 0.1.1 になってた。何気に細めにアップデートされてるのかしらん。新版の変更点なんかをチェックするのは後回しにして、とりあえずインストールと quick start を書いてみる。ちなみに、分散型バージョン管理システムには他に GNU Archdarcs がある。

インストール

Bazaar-NG は pure Python なアプリケーション。インストールには、バージョン 2.4 以上の Python が必須。

Bazaar-NG のダウンロード・ページから、Official 最新版 0.1.1 をダウンロードして展開。Python のセットアップ・スクリプトを実行するだけ。

$ tar xzvf bzr-0.1.1.tar.gz
$ cd bzr-0.1.1
# python2.4 setup.py install

管理者権限がない場合は、symbolic link を張る。これだけで使えてしまうのも、 Python スクリプトならでは。src を ~/src に展開したとして、これを ~/bin にインストールする場合、次のようにする。

$ ln -s ~/bazaar-0.1.1/bzr ~/bin/bzr

bzr quick start

Bazaar-NG のコマンド名は bzr。チュートリアルには、以下のサイトがとても詳しい。

上記サイトの前では、蛇足以外の何ものでもないけれども、quick start... 手元の freeleaf.js というファイルを登録する場合。

$ ls
.  ..  freeleaf.js
$ bzr init                            ; .bzr ディレクトリーの作成
$ bzr status                          ; 登録ファイルの確認
$ bzr add -v freeleaf.js              ; ファイルをレポジトリーに登録
$ bzr commit -m "initial revision"    ; 登録を反映
$ bzr log                             ; ログを見る。

darcs と同じように、レポジトリーはカレント・ディレクトリーに出来る。 RCS と同じと言った方が早い? darcs, RCS と違うのは、レポジトリー名が . で始まる。つまり隠しファイル。カレント・ディレクトリーで rm -rf * して消える心配がないのは嬉しい (でも一つ上の階層で rm -rf すると、やっぱり消えちゃうんだよね)。

メール・アドレスの設定

bzr は、commiter の名前 (メール・アドレス) を次の順序で調べてる。

  1. $BZREMAIL
  2. .bzr/email
  3. ~/.bzr.conf/email
  4. $EMAIL

~/.bzr.conf/email を開いて次のように書いておくとよいかな。

Masayuki Ataka  <ataka@foo.com>

2005-10-21

We [love] Blog キャンペーンに当選した

ちょっと嬉しいニュース。といっても、読者諸氏に嬉しいニュースじゃなくて (ごめんなさい)、個人的に嬉しいニュース。8 月半ばに書いた エントリーSix Apart 社の We [love] Blogキャンペーンに当選した。

全部で 114 件のエントリーの中から、66 件が選ばれる。2 倍弱の倍率を勝ち抜いたわけですな。嬉しい、嬉しい。

キャンペーンのあり方

考えてみると、今回の Six Apart の取り組みは、キャンペーンのあり方として新しいものだと思う。というのも、この手のキャンペーンって、アンケートに答えて、個人情報を入力して、そして結果を待つのが大半。そこで疑問に思うのが、この時入力した個人情報ってどうなっているんだろう? ってこと。落選したら使われない個人情報を入力するのって気持ちが悪い。もしかしたら、個人情報を集めるのが目的なんじゃないか? とか、勘繰ってしまう。

でも、 Six Apart のキャンペーンは違った。今回、キャンペーン応募者が Six Apart 側に渡したのは、トラックバックだけ。プレゼントの送付先なんかは、当選が確定した時点で当選者が改めて Six Apart 側に通知する仕組みになってる。そして、当選・落選の通知は、これまたトラックバックで来る (さすがブログの会社)。

個人情報という面から見ると、このやり方は応募者が個人情報を最初に渡さない分、心理的なハードルが低い。どうせ選ばれないんだろう、と思いながら答えるアンケートとは大違い。これからは、ブログの活用の一つとして Six Apart 型のアンケートやキャンペーンが増えるとよいな。

2005-10-20

utf-8 の代わりに iso-2022-jp-2

テキストに複数言語を含めたい。そう思う人は多いと思う。ドイツ語のウムラウト、フランス語のセディーユ、スペイン語のひっくり返ったクエスチョン・マーク、ギリシア文字にキリル文字、そして朝鮮のハングルに中国の簡体字。世界には色んな言葉と文字が溢れていて、数えるだけでも一苦労。そんな沢山ある文字を一つの文字コード系で扱おう、という取り組みが Unicode で、そのエンコーディング・スキームの一つ utf-8 は耳にすることも多いと思う。今回は、有名な utf-8 ではなくて、iso-2022-jp-2 という耳なれないエンコーディング・スキームもあるよ、というお話。

具体的には何ができる?

iso-2022-jp-2RFC 1554 で定義されていて、英語と日本語の他に次の文字集合を扱うことができる。

ISO-8859-1
ラテン文字 1 (ドイツ語、フランス語、スペイン語などのアクセント付文字)
ISO-8859-7
ラテン文字 (ギリシア文字)
JIS X 0212-1990
日本語の補助漢字
GB2312-80
中国の簡体字 (俗に云う EUC-CN)
KS X 1001:1992
韓国語のハングル文字と漢字 (俗に云う EUC-KR)

Unicode ほど網羅的ではないけれども、Shift_JIS に比べれば扱える文字集合の数は雲泥の差。こんな面白いエンコーディング・スキームなのに、マイナーなのは勿体ない。それも、utf-8 一つで事足りてしまうからかもしれないけれど...

iso-2022-jp-2 のメリットとデメリット

iso-2022-jp は ISO 2022 のサブセットなので、ISO 2022 のお話をしませう。ISO 2022 の基本は、文字集合のエスケープ・シークエンスによる切り替え。デフォールトは英語で、エスケープ・シークエンスという制御文字を挟むことで、他の文字集合を使うようにする。

例えば、「ISO 2022 の subset」という一行は、次のようになる。

ISO 2022 (日)の(英) subset

ここで、 (日)(英) は各々、日本語と英語に切り替えるエスケープ・シークエンス。

JIS コードの俗称を持つ iso-2022-jp は、日本語と英語の切り替え用エスケープ・シークエンスを持っている。iso-2022-jp-2 は、iso-2022-jp のエスケープ・シークエンスに、中国・韓国・ラテン・ギリシア文字用のエスケープ・シークエンスを加えたものという位置付けになる。

つまり、iso-2022-jp-2 のメリットは、iso-2022-jp の上位互換なところ。iso-2022-jp-2 をサポートしているツールは少いけれど、iso-2022-jp (JIS コード) に対応しているツールは多い。だから、もし、iso-2022-jp-2 未サポートなツールでそのテキストを読んだとしても、日本語と英語の部分だけはちゃんと読める (何故なら、その部分は iso-2022-jp と変わらないから)。文字化けするのは、中国語やラテンの部分だけ。これは、日本語 (と英語) がメイン、だけど時折他の言語が混ざる文書で使う分には問題がない、ということ。日本人には、とても優しいエンコーディング・スキームだと思う。

一方、utf-8 未サポートなツールでテキストを読むと、英語の部分以外全て文字化けしてしまう。今はまだしも、二年前は utf-8 でファイルを保存するのには勇気が要った。

iso-2022-jp-2 のデメリットは、サポートしているツールが非常に少いこと。こればっかりは、しょうがないかな...

Emacs で iso-2022-jp-2

最新の Emacs (21.4) なら、iso-2022-jp-2 をサポートしている。ファイルを保存する前に、ファイルの coding system を iso-2022-jp-2 に設定すればいい。

C-x RET f RET iso-2022-jp-2 RET

次のコードをファイルの末尾に加えておくと、 Emacs はそのファイルを iso-2022-jp-2 なファイルとして扱う。

;;; Local Variables: ***
;;; coding: iso-2022-jp-2 ***
;;; End: ***

ちなみに、 Emacs の最新安定版 21.4 は、未だに Unicode (の日本語・中国語・韓国語) をサポートしていない。Unicode を使うには、MULE-UCS をインストールするか、開発版の Emacs を使うしかない。

後書き

ぼくは、自分の ChangeLog メモを iso-2022-jp-2 で保存している。メモの中には、本や映画の感想も書いていて、そこには原題も書くようにしている。すると、韓国映画やフランス文学の原題でハングルやラテン文字が出てきた。参った。昔は mule 2 しか入っていない古いマシンがあって、そこでも ChangeLog メモを開くことがあったので、Unicode は使えなかった。結局、古いマシンで読み書きするのはマシンの設定用のメモだけで、映画の感想は読まないのだから、iso-2022-jp-2 なら (ハングル等は文字化けするけど)、最低限の要は足せることに気づいて iso-2022-jp-2 にしたら上手くいった。

今でも、最新 Emacs が Unicode じゃないので、万一のために iso-2022-jp-2 のまま。開発版の Emacs が正式リリースされたら、utf-8 にかえるかもしれない。

.
.

2005-10-19

Emacs の darcs モード (vc-darcs)

バージョン管理システム darcsEmacs から操作するツールについて紹介しやう。 Emacsdarcs 関連パッケージは以下のサイトで公開されている。

上記ページにはいくつかの darcs 用パッケージがあるけれど、今回僕が試したのは vc-darcs.elEmacs がデフォールトで提供している VC (Version Control) パッケージに darcs を加えるツール。VC パッケージについては、 Emacs Reference Manual の Version Control の項を参照のこと。

簡単な使い方

使い方は、Emacs の vc パッケージに同じ。つまり...

C-x v v
修正分をコミット (Log 入力バッファーが表示されるので、入力後 C-c C-c)。
C-x v =
最新バージョンとの差分を表示。
C-u C-x v =
任意のバージョンとの差分を表示。
C-x v l
darcs の Log を表示。
C-x v u
ソースの修正分をキャンセルして最新のバージョンに戻す。

といったことができるようになる。それから vc-darcs を入れると、バックアップ・ファイル (ファイル末尾に ~ のついたファイル) を作らなくなる。

残念なことに、 darcs のインタライティブな commit は vc-darcs からは出来ない。

インストール

上記サイトのリンクを辿ると、vc-darcs.el の最新版をダウンロードできる。

なお、vc-darcs は darcs でバージョン管理されている。だから、 darcs で開発版の vc-darcs.el を手に入れることも可能。やり方は下の通り。

$ darcs get http://www.pps.jussieu.fr/~jch/software/repos/vc-darcs/_darcs/ (ソースの入手)
$ darcs pull                                                               (最新版の更新)

vc-darcs は単体のソース・ファイルなので、load-path にファイルを移動してインストール終了。.emacs に次の一行を追加しておく。後は好みに応じてメール・アドレスを設定するなり、ご自由に。

;;
;; vc-darcs
;;
(add-to-list 'vc-handled-backends 'DARCS)
(setq vc-darcs-mail-address "Masayuki Ataka <ataka@foo.com>")

ref

2005-10-18

XHTML の script 要素の閉じタグでハマった

body 要素の中に script 要素を入れると、script 要素の直後に、head 要素の閉じタグと body 要素の開きタグが挿入され、結果として script 要素より前のテキストが無視される現象に出会った ( firefox 1.0.7)。具体的なコードを書くと、

<body>
foo bar something
<script type="text/javascript"></script>
FOO BAR ANYTHING
</body>

を、 firefox は次のように解釈する。

<body>
foo bar something
<script type="text/javascript"></script>
</head><body>
FOO BAR ANYTHING
</body>

この場合、前半の foo bar something はブラウザーに表示されない。

原因は head 要素内の script 要素

原因は、head 要素内の次の script 要素だった。

<head>
 <title>foo</title>
 <script type="text/javascript" src="bar.js"/>
</head>

見てお分かりだろうか? script 要素の閉じタグがない。XHTML では、HTML で許されていた <br> のような閉じタグの省略が許されなくなった。そのため、厳密には <br></br> のように閉じタグが必要になった。でも、それじゃあ面倒だってんで、 <br/> のような書き方も許されている。

そこで、script 要素も (要素の中身が空なら) 同じ書き方が出来るだろう、と

 <script type="text/javascript" src="bar.js"></script>

 <script type="text/javascript" src="bar.js"/>

のように書いたわけ。確かにこの書き方は、本文中に script 要素の閉じタグが現れるまでは動いた。でも、body 要素内に script 要素の閉じタグが現れたとたん、head 要素内の script 要素は閉じていない、と firefox に解釈されてしまったらしい。そしてご丁寧にも、head 要素の閉じタグと body 要素の開きタグまで挿入してくれちゃったわけ。

XHTML の仕様をまだ確認していないのだけど、任意の要素を <div/> のように書くのは許されていないのかしらん。

今夜はこいつのおかげでえらい目に遇った...

Amazon の商品個別リンクから BookLog へのリンクに変えた |Blogger|

最近、 BookLog が面白くてしょうがない。 BookLog については、「 ブクログ、始めました」でも書いたけど、簡単に説明すれば Amazon の商品を本棚風にレビューを付けて紹介するサービス。本と本とで、他人の本棚と SNS 的に繋がるのが楽しい。そこで今回、 Amazon への個別リンクを BookLog@aka へのレビューへのリンクに変えてみた。

clmemo@aka では、ブログのエントリーに関連する商品をサイドバーに表示させている (See 「 関連情報をエントリーの外に表示させる (2) printAmazon」)。このリンク先を BookLog の URL に変えただけ。 BookLog の商品 URL は、ユーザー名が at-aka として次のようになる。

http://booklog.jp/at-aka/asin/ASIN-NUMBER

BookLog のレビュー・ページからも、 Amazon の個別ページへリンクが張られているけど、デフォールトでは、このリンクには BookLog の開発者の Amazon Associate ID が入っている。 BookLog の詳細設定で、 Amazon ID の設定を忘れずに...

BookLog に関して不満を言えば

  • 動作が重い。
  • (カテゴリーじゃなくて) タグを使いたい。
  • シリーズものは、グループか何かでまとめて更新できないかしらん。
  • 自分のレビュー・ページから、すぐに編集ができると楽。
  • ブクログの Export 機能が欲しい。

といったところ。特に動作が重いのは早く直って欲しいなぁ。

サンプル

せっかくなので、試してみやう。

先日書いた、「 ChangeLog メモで人名は、フルネームで書け」というタイトルは、丸谷才一氏の「文章読本」から「ちょっと気取って書け」を真似たもの。というわけで、「文章読本」へのリンクをサイドバーに入れてみる。

.

2005-10-17

Emacs の空白削除コマンド

Emacs で、空白 (スペース) を削除する時に使うコマンドをメモ。

just-one-space ( M-SPC)
スペースを一つ残して空白を削除する。
delete-horizontal-space ( M-\)
周りの空白を削除する。
fixup-whitespace
文脈 (context) に合わせて、周りの空白を削除する。
delete-trailing-whitespace
行末の余分な空白を削除する。

括弧の中はキー・バインド。ここで言う空白は、スペースとタブ。全角空白は含まないので悪しからず。

2005-10-15

つぶやき

「対位法的になってましたっけ?」

「伝わらなければ国際電話で歌おうか?」

「電話でどうやって対位法部分を歌うのかしらん?」

「君はすでにメイン・パートを知ってるからそれを歌って、僕がサブ・パートを歌うの。」

ChangeLog メモで人名は、フルネームで書け

ChangeLog メモ を書き始めて、三年半強。メモの中にも沢山の名前が集まった。一度だけの出会いだった人、今も友達な人、音信不通になってしまった人、と様々。そんなメモを書く時に、一つ心掛けていることがある。それは、

人の名前はフルネームで書く

ということ。

フルネームで書く利点

それは、もちろん人を特定し易いということ。つまり、同姓対策。メモを長くつけていると気づくけど、実は同姓な友人は多い。メモを書いた時は、誰を指していたのか明らかでも、時を置いて見返すと「これはどの伊藤さんだっけ?」と分からなくなる。

実例を挙げると、僕の知り合いには、二人の「荒木」さん、二人の「奥村」さん、二人の「岡田」さん etc... がいる。特に「岡田」さんは、高校の先輩と大学の先輩で、卒業以来ほとんど会っていない。時折、メールなどで連絡を取る程度。ただし、一年に一度位いは会ったりする (かもしれない)。そこでメモに

ひさしぶりに岡田さんと食事。

などと書くと、非常に困ったことになる。2005 年の 8 月に食事をした「岡田」さんはどっち? と悩むことになる。

ここをフルネームで書くように習慣付けておくと、一目瞭然。後で検索する時にも便利。

ひさしぶりに岡田太郎と食事。

ちょっとぞんざいな感じもするけど、自分のメモだし、気にしない。気になれば、フル・ネームの後に敬称をつける位いの気持ちで。

こういう名前のつけ方には注意

基本は、後で相手が特定できること。だから次のような書き方も注意が必要。

部長と企画の打ち合わせ。
ほげ社のフーさんと電話。

数年後に、その人はまだ「部長」だろうか? もしかして、常務になってるかもしれないし、リストラされてるかもしれない。当時の「部長」は誰だっけ? と考えるのは大変。

そして、フーさんは、絶対に転職・退職しないか? その会社に、フーさんは一人だけか? 新入社員で二人目のフーさんが入ってこないか?

まとめると、メモの中でやってはいけないのは次の三つ。

  • 名字だけ
  • 敬称 (+名字) だけ
  • 所属 (+名字) だけ

つまりは、相手が誰かをはっきりさせられればいい。そのためには、フルネームで書くのが一番楽だと思う。同姓同名が出ない限りは... Xp。

2005-10-13

つぶやき

「IM 使ってる?」

「使ってるよ」

「アカウント教えてよ」

「メールじゃだめなの?」

「聞きたい事があるんだよ。IM の方がやりとり楽じゃん」

「そう... で、なに聞きたいの?」

「IM の設定方法」

Windows 用 emacs+auctex バイナリ

開発版 EmacsAUCTeX をバンドルさせた Windows 用バイナリが Ralf Angeli 氏によって作られた。サイズは 34 MB。zip ファイルを展開して、bin フォルダー内の runemacs.exe を実行すれば使えるようになるという。ファイルとリリース・ノートは以下のアドレスにある。

今回のパッケージは URL を見ても分かる通り alpha 版なのでバグなどは自己責任で。

Emacs 22.0.50 + AUCTeX 11.81 on Windows

なんでこんなバイナリ・パッケージを作ったのか、Angeli 氏の真意は分からないのだけど、僕なりに考えたメリットをば。

  • Windows で開発版 Emacs を (コンパイル無しに) 試すことができる。
  • 画像ライブラリー (libpng, libz, etc...) などは同梱済。
  • AUCTeX の設定をする必要がない (最低限の設定は終えている)。

Windows で Emacs をコンパイルするには、沢山の画像ライブラリーが必要になる。これを揃えるのは面倒なので、その手間が省けるのはよろしいと思う。ただし、 dvipng や Ghostscript は付属しないようなので、preview-latex を使うには別途これらのインストールが必要。

Windows で動く Emacs というと、cygwin 版や Meadow がある。記憶違いでなければ、cygwin 版の Emacs は安定版 (21.4) だから、開発版を使ってみたい人にはお勧めできる (かな?)。

Meadow は、Meadow 3.00-dev が Emacs 22.0.50 を追従してて、なんと AUCTeXパッケージに含まれている。両方とも使ったことがないので、どっちがいいか分かんない Xp。

手元に Windows はないので情報提供のみ。もし試したら是非トラックバック (or コメント) を下さい。

2005-10-12

quickurl で emacs-w3m と firefox のどちらを呼び出すか URL で切り替える

最近、 Google Maps を始めとして JavaScript 全開なページが増えてきた。困るのは、JavaScript なページは Emacs-w3m のようなテキスト・ブラウザーでは見ることができないこと。今回は、JavaScript やフラッシュを使っていてテキスト・ブラウザーで閲覧できないページの URL をブラック・リストとして保存し、テキスト・ブラウザー ( Emacs-w3m) とモダン・ブラウザー ( firefox, etc...) に切り替える設定をば書いてみる。

設定

;;
;; emacs-w3m で見られない URL のブラックリスト
;;
(setq browse-url-dhtml-url-list
      '("http://www.google.com/reader/"
 "http://maps.google.co.jp/"
 "http://map.yahoo.co.jp/"
 "http://map.labs.goo.ne.jp/"
 "http://www.haloscan.com/"
 "http://sitemeter.com/"
 "http://www.hmv.co.jp/"
))
;;
;; ブラッリストにマッチしたら firefox、しなかったら emacs-w3m。 
;;
(setq browse-url-browser-function 
      `((,(concat "^" (regexp-opt browse-url-dhtml-url-list)) . browse-url-firefox)
 ("." . w3m-browse-url)))

変数 browse-url-browser-function は、ブラウザー名を直接指定するだけでなく、 (URL-REGEXP . BROWSER) な alist も取ることができる。つまり、上の設定は、 browse-url した時に browse-url-dhtml-url-list に URL がマッチしたら firefox を呼び出し、そうでなかったら Emacs-w3m を呼ぶ。

Emacs の quickurl-browse-url-ask で書いたように、quickurls を使った browse-url でもこの設定は有効。ただし、 Emacs-w3m の中でリンクを辿る場合は、この限りではない。

ref

Emacs-w3m と browse-url 周りの設定については、以下のエントリーも参考にどうぞ。

2005-10-11

コメントに認証機能を付けた |Blogger|

ついに、 clmemo@aka にもコメント・スパムが来るようになった。今日までに届いたスパムは 5 件ほど。そのうち、昨日届いたのが 2 件。今月に入ってアクセス数も増えてきたから、そろそろコメント・スパム対策をすることにした。

Blogger は、画像認証によるコメント・スパム対策をしている。設定方法は、管理画面の「コメント」から「コメントの投稿者に確認用文字を入力させますか?」を「Yes」にするだけ。

コメントを投稿する前に、表示された文字を入力して機械による自動投稿でないことを証明する。一手間多くなるけど、よろしくお願いします。

ref

2005-10-10

「存知ます」は存じません |日本語|

「思います」を謙譲語で「ぞんじます」という。この表記で、「存知ます」と書くテキストを見かける。というか、昔は僕もそう書いてた。これは「誤り」ではないか? という記事です。

ことの起こり

2002 年 10 月。後輩のメールを添削をした。

面識のない方にメールを出すので、失礼があってはいけない、と、誤字・脱字・敬語のチェックを頼まれたわけ。ちょこちょこと直して返したら、「これ、何て読むんですか?」と聞かれた (後輩は隣の席だった)。彼のディスプレイを覗き込んで、読めないという字を確認。そこには存知ますと書かれてた。

ぼく: ああ、それは「ぞんじます」と読むんだよ。
後輩: こんな書き方しませんよ。
ぼく: 「存知」って書くでしょ。
後輩: いえ、漢字変換でこんな変換出たことないですね。

そう言って、彼が「ぞんじます」を変換すると、確かに候補に「存知ます」がなかった。

辞書で調べた

漢字変換にないからと言って、それが間違ってるとは限らない。常用漢字以外で、漢字変換されない用語はあるし、もしかしたら漢字変換の方が間違ってるかもしれない。

そこで、現代国語辞書を引いてみた。困った時の辞書頼り。

存知 (ぞんち)
〈名・他動サ変〉[文章語]知っていること。「その問題については、―していない」[類]承知 (しようち)

困ったことに、「存知」に関するエントリーは一つしかない。読みは「ぞんち」。動詞として使う時は、「存知する」「存知せず」という風にサ変活用の動詞になる。

「ぞんじます」というのは「ぞんずる」を丁寧にした形。「ぞんずる」は「ぞんぜ・ぞんじ・ぞんず、ぞんずる・ぞんずれ・ぞんぜ」のサ行変格活用。

「存知 (ぞんち)」が濁って「ぞんぢ」で、現代仮名遺い化しているのか? いやいや、「ぞんぜず」を「存知ず」とは書かないし、「ぞんずれば」を「存知れば」とも書かないぞ。「知」に「ぜ」や「ず」の読みがあるなんて聞いたことがない。

やっぱり、「ぞんじます」の表記は「存じます」であるべきだ。

当て字という反則技

ここまで記事を書いといて、広辞苑を引いてしまった...

存じ (ぞんじ)
(「存ずる」の連用形から。当て字で「存知」とも書く。謙譲語) 知っていること。思っていること。承知。「ご―の通り」

「存ずる」の連用形から。当て字で「存知」とも書く。って、そんなの反則だよ〜。

Google で検索すると、

  • 存じます: 4,740,000 件
  • 存知ます: 32,600 件

当て字の「存知ます」は、市民権を得ていると言っていいの? 悪いの?

Emacs の quickurl-browse-url-ask

Emacs から特定のウェブ・サイトに素早くアクセスするには、どうすればいいだろう?

特定のウェブ・サイトとは、例えば Google News とか Yahoo! 地図 とか 自分のウェブページfirefox なんかのウェブ・ブラウザーを使っていれば、ブックマーク (or ソーシャル・ブックマーク) に入れておくようなウェブ・サイト。

方法としては、 Emacs-w3m のような Emacs 版ブラウザーのブックマークにそのサイトを登録する。または、 Emacs-w3m から はてなブックマークなどの SBM にアクセスする。若しくは、素直に隣に起ち上げているであろう firefox からブックマーク (or SBM) を使う。というのが挙げられるでしょう。今回の記事は、そこでもう一手間省きませんか? というもの。

quickurl-browse-url-ask

紹介するコマンドは quickurl-browse-url-ask。quickurl パッケージと browse-url パッケージのいいとこ取りをしたコマンド。

quickurl は「省略キーワード」と「URL」のセットを覚えておいて、abbrev (略語展開) に活用するパッケージ。詳しくは、以前の記事をお読みあれ。

browse-url は、 Emacs から firefoxEmacs-w3m などのブラウザーを直接呼び出すパッケージ。例えば、ここら辺を参考に。

つまり、コマンド quickurl-browse-url-ask を呼び出すと、quickurl で設定した「省略キーワード」を聞いてくる。それに答えると、設定したブラウザーでそのページを開いてくれるというわけ。

例えば、quickurl に次の設定をしていた場合

 ("emacsw3m" "http://emacs-w3m.namazu.org/"     "Emacs-w3m")

Emacs から Emacs-w3m のウェブページを開くには

M-x quickurl-browse-url-ask
Browse: emacsw3m

とするだけ。省略キーワードの入力には補完が使えるし、quickurl ユーザーならテキストを書く時に使ってるキーワードだから忘れることはないでせう。

設定

quickurl-browse-url-ask は、Emacs 21.4 の標準機能。設定なしで使える。

ただ、キーバインドの設定位いはしておくと便利かも。僕の設定は次の通り。

(define-key mode-specific-map "u" 'browse-url-at-point)
(define-key mode-specific-map "U" 'quickurl-browse-url-ask)

C-c ubrowse-url を。 C-c Uquickurl-browse-url-ask を呼び出す。

では、Happy Browsing!

2005-10-09

Google Reader の雑感

Google Reader が出てから一日経った。 昨日の記事では地に足がついてなかったけど、今ならもう少し冷静な記事が書けると思う。一日使ってみた後の雑感などを書いてみやう。

Subscribe について

Google Reader トップにある検索ボックスに、ブログの URL を入れて「Search for new contents」。プレビューが見られるので、気に入ったら「Subscribe」ボタンを押す。ブログ・ページから Feed URL を調べる必要がないので便利。

検索ボックスには、URL の他にトピック名を入れてもいい。例えば「Lord of the Rings」と入れると、「Lord of the Rings」に関するブログ一覧が表示されるので、よさそうなのを「Subscribe」する。

ブログが複数のフィード (例えば Atom, RSS 0.9, RSS 2.0) を用意していたりして、フィード・アドレスを直接したい場合は、「Your subscriptions」タブにある「Add a feed」をクリックする。試してみた所、RSS 2.0 のフィードは読み込めなかった。その内、サポートされるだろうけど...

それから、 Google Reader に登録するための Bookmarklet も用意されてない。これも、近いうちに出来ると期待しているけど、それまでの間に合わせには Kickstart my heart さんの提供するブックマークレットが便利でせう。

日本語について

日本語でも問題ない。でも、所々不具合がある。

まず、サイト名の日本語が表示されない。例えば、「Foo の ChangeLog」は「Foo ChangeLog」と表示される。もしサイト名が全て日本語「ほげほげ」だったら、「Untitled Subscription」になる。ブログの URL を「Search for new contents」する方法だと「subscribe」ボタンの隣に「edit」ボタンがあって、その中でサイト名を編集できるから、ローマ字なりで逃げる手はある... これは、早く直して欲しいなぁ。

ラベルにも日本語が使えないそうな。

Your Subscriptions

「Your Subscriptions」タブから、ラベルで読むブログを絞り込める。

読み始めると、「Your Subscriptions」タブの中身が邪魔になる (スペース取り過ぎっ)。そういう時は、もう一度「Your Subscriptions」タブをクリック。タブ部分が隠れる。

それと、 前の記事「Your Subscriptions」と「Read items」の違いは何? なんて書いたけど、これは僕の勘違い。「Read items」を「(I) read items」とか命令文の「read items!」と思っていたのがいけなかった。この「Read」は過去分詞ですね。つまり、「既読のアイテム」。

時々、「Your Subscriptions」の反応がなくなるのは、何でだろう?

Podcasting

Podcasting も聴ける。Linux でも聴ける (要スピーカー ;)。やばっ、便利。

Blog Search

Blog Search から clmemo@aka に来た人がいた。気になって見てみると、 Blog Search の検索で 2 番目に表示されてた (ビックリ)。それはともかく残りのエントリーも見てみたのだけど、皆さんの喰いつきぶりはすごいね。新しいサービスがアルファ・ギークな人達をフィルタリングしてるかのよう。

新しいサービスが出る。 Blog Search で調べる。ブログを登録する。

これからは、こういう感じで面白いブログを見つけていこう (そのためには、常に新しいサービスにアンテナを立てとかないとね :)。

Blogger の Backlink

okanomail.com さんと kuribo さんの記事に触発されて、 Blogger の新機能 backlink を付けてみた。まだよく分かっていないんだけど、これが Blogger の Trackback の代わりになるのかしらん。

使い方は簡単で、このブログにリンクを張るだけ。すると勝手に backlink というセクション (個別ページでしか見れない) に逆リンクが張られる (らしい)。Trackback のように「記事の要約」を入力することはできるのかな? ちなみに、 Links to this post: の下にある「Create a Link」リンクは Navbar の BlogThis! と同じ (混乱しそう Xp)。

設定は管理画面の「コメント」の欄で backlink の設定をオンにするだけ。テンプレートのコメント部分をいじってると、時に失敗することもあるらしいけど、うちのブログでは問題なかった。ダメだった場合の設定方法は kuribo さんの説明に詳しい。

backlink をオンにすると、firefox で範囲選択ができなくなる。これは firefox が悪いのか? Blogger が悪いのか? まあ、近いうちに修正されるだろうと期待して、この機能をオンにしている。

backlink でいいのは、ブログ内リンクを張った場合。例えば、記事の続きを書いた場合に、元記事へリンクを一本張るだけで backlink が付く。この方法は トラックバックでやる方法もある。というか、今まで HaloScan を使ってやっていた。 Movable Type なんかはトラックバックを打つのが楽でいいなぁ... と思いながら。でも、バックリンクのおかげでその苦労もしなくてよくなりそう。

トラックバックには、引用なし (若しくはリンクなし) のトラックバックの是非があるけれど、このバックリンクは、リンクを前提にしている。そういう意味では、トラックバックよりいいのかもしれない。

2005-10-08

Google Reader が出た

beta 版ではあるけれど、Google が RSS Reader を出した!!!

やばいっっ! 面白いっ。面白すぎるっっ!

出たばかりの、触ったばかりで、興奮冷めやらず。まともな文章にならないと思う。でも、この感動をちょっと書かせて下さい。

皆さんっ! これは面白すぎですよ。

なにが?

まず、フィードごとにラベルが貼れる。これは、 Gmail のラベルと同じもの。一つのフィードに例えば、「blogger」とか「Emacs」とか「ニュース」とかのラベルが 複数貼れる。 Bloglines だと、階層式のカテゴリー分けしかできなかったので、どのカテゴリーに含めるかに悩んだ。でも、Google Reader は違う。ぼくの分け方はこんな感じ

  • ブログ・サービス ( Blogger, TypePad, Movable Type, chalow, etc...)
  • メイン・コンテンツの内容 (Emacs, XML, Movie, Music, etc...)
  • ブログ作者の所属 (所属してる会社, Google, Six Apart, はてな, 大学, etc...)
  • 面識のある知人のブログか否か。

こういった情報を、全部ラベルにしてフィードに貼りつけておける。これは便利。

次に、「スター」。これも Gmail と同じ。面白いと思った記事に「星」印を付けることで、後で見直すのが楽になる。気に入った記事の「星」マークをクリックするだけ。 Bloglines の記事の保存より簡単で便利。

RSS の登録も一風変わってる。普通、面白いブログを見付けたら、それを登録するという手順を踏むものだけど、Google Reader は、ウェブ全体から検索にマッチするブログの RSS を登録する形のよう。

そして最後に、フィードの Sort に、日付順と relevance 順が用意されてること。ああ、 Google の RSS Reader ですよ。まさしく。

Your subscription と Read items の違いは何? Feed 内の検索は出来ないの? 記事につけるラベルはどう活用する? 次の記事じゃなくて次のフィードへのショートカット・キーはないの? と、分からないことは沢山あるけれど、この目新しい面白さと初めて見るデザインに目をつぶってしまおう! (そのうち改善されるだろうし、他の人の解説読めば分かることもあるだろうし...)

ブログのデザイン -- IE 対策

このブログ clmemo@aka のデザインの骨子は、[2005-06-06] に Green Witch という名前で作られた。その後、 最小幅を設定したり、 右サイドバーに折畳み式のコンテンツを作ったりと少しずつ進化してきた。ただ、デザインの確認は firefox だけでやっていて、IE のバグを考慮に入れてなかった。

たまたま、IE でブログを見直してみたところ、レイアウトがえらく崩れているのにびっくり。というわけで、IE のバグ対策を二点行ったのでメモっとく。

問題

IE6 でこのブログを見ると、右サイドバーがメイン・コンテンツの右端から押し出されて、本文の一番下に配置される。これは、次の二つの問題に起因する。

  1. IE6 が min-width をサポートしない問題
  2. IE6 が 内側のボックスの大きさに合わせて外側のボックスの width を広げてしまう問題

min-width をサポートしない問題について

firefox で見ると、メイン・コンテンツの横に白い帯が見える。これは、単なる飾り。作り方は、「 最小幅の設定」を参照されたし。

問題は、この飾りを作るために width にパーセント指定と px 指定が混ざっていること。

#main-content {
  width: 61.8%;
  float: left;
  margin: 0 1% 0 2%;
  border-style: none double;
  border-width: 18px;
  border-color: #eee;
}

#sidebar {
  float: left;
  width: 28%;
}

そのため、ブラウザーのウィンドウ幅を狭くすると、width が 100% を越えて、(結果) 右サイドバーが下に落ちてしまう。そこで firefox では最低の window 幅を CSS の min-width で指定していた。IE は min-width をサポートしないから、この解決策は使えない。

問題になっているのは border-width の px 指定だから、IE にはボーダーを設定しないことで逃げる事にした。見栄えが好みと合わなくなるけど、サイドバーが下に落ちるよりはまし。

IE だけ CSS を適用させないようにするのに、IE の独自実装 Conditional Comments を利用した。Conditional Comments を使うと、

<![if expression]> HTML <![endif]>

のように書いて、if 文にマッチするブラウザーだけ HTML を表示させられるようになる。

今回の場合、IE だけボーダーの設定をしないようにしたい。具体的には CSS ファイルの該当部分からボーダーの設定を取り除き、 Blogger のテンプレートに次のコードを追加した。

 <![if lt IE 5]>
  <style type="text/css">
    #main-content {
      border-style: none double;
      border-width: 18px;
      border-color: #eee;
    }
  </style>
 <![endif]>

if 文の意味は、IE のバージョンが 5 以下ならボーダーの設定をする、というもの。

内側のボックスの大きさに合わせて外側のボックスの width が広がる問題

簡略化した次のコードをごらんあれ。

<div style="width: 100px;">
 <pre>
   ...
 </pre>
</div>

上の例では、div 要素が pre 要素を囲んでいる。そして外側の div 要素には 100px の横幅が設定されてる。問題は pre 要素の中身のテキストが横長く、100px を越えた場合に起きる。

firefox のような標準に準拠したブラウザーは、100px 超過分のテキストは div のボックスを飛び出る形で表示する。ところが、IE は超過した分だけ外の div ボックスの width を広げてしまう。もし、pre の内側のテキストが 120px なら、div の width も (CSS の設定を無視して) 120px になる。200px なら、div の width は 200px。テキストの幅がブラウザー・ウィンドウの幅と同じ位い広いと、div もブラウザー・ウィンドウの幅と同じ位い広がっちゃう。そんなことになれば、右サイドバーの在るべきスペースは当然なくなるから、結果下に落ちることになる。

この解決策として、pre 要素に幅を設定してそれより大きな width を取る場合はスクロール・バーを表示させる方法がある。それを CSS で指定するには overflow: scroll とする。ただ、この問題は IE だけの問題だから、この設定は IE にだけ指定したい。というわけで、 Blogger のテンプレートに次のコードを仕込んだ。

 <!--[if IE]>
   <style type="text/css">
    pre {
      width: 450px;
      overflow: scroll;
    }
   </style>
 <![endif]-->

Conditional Comments で IE にだけコードを適用。ただし、このコードは IE の独自拡張だから、 firefox らのために <!-- --> で Conditional Comments そのものをコメントアウトする。

さあ、これで IE でもレイアウトが崩れないはず。どうかな?

2005-10-07

emacs-atompub で編集する |Blogger|

Emacs 21.4 から emacs-atompub でポストするを書いた時、 前のエントリーで書いたように Blogger 本体から編集ができていなかった。だから、最新版のバグ (edit を実行すると空のバッファーが返る) だけを修正して、publish までは試してなかった。正確には、publish したら Error: 500 が返るのを確認していた。でも、 Blogger 本体で編集に失敗してるのだから、Atom-PP で失敗するのは当たり前だろう。きっとメンテナンス中なんだろう、と思ってた。

今、 Blogger から編集ができるようになって試してみて分かったこと。

ダメ。やっぱり publish できずに Error: 500 が返る。

Patch by VIA DEI CONDOTTI

前の記事を書いた時に、 via dei condotti さんから反応があって、 パッチを書いてもらった。そのパッチと via dei condotti さんのアドバイス

でもeditのバヤイ、issued、created、modifiedを消してやらんとpublishする時にエラーになります。

を合わせると編集記事を publish できた (Thanks Mr. via dei condotti)。

手元にある古い emacs-atom-api.el だと無条件に編集に成功する。きっと最新 emacs-atompub に何かバグがあるのだろう。悲しいかな、それを解き明かす力が今の僕にないけれど、進展があったら報告します。

Blogger Error -- 編集できないときは

最近、 Blogger で記事の編集が出来なくなって困ってた。ダッシュボードからブログの「投稿」を選び、記事の編集後「投稿を公開」すると
Error

Your argument is invalid.

なんて素気のないエラー・メッセージ (確か your argument is invalid だったと思う) を吐いて止まっちゃう。そして、NavBar のレイアウトも崩れて、サインインすらできなくなった。

きっと Blogger のメンテナンスなんだろう。最近は、メンテナンスが多いな。悠長にそう思ってた。

でも、 OpenCage さんとこのコメントでも同じエラー・メッセージが出るようになって、 これは、ちょっとおかしいぞと気付いた。

解決策

そこで思い出したのが、 クリボウさんとこで紹介されてた「Blogger で画像が投稿できないときは」という記事。

実は画像をアップするサーバーは複数用意されているんですが、Blogger ユーザーにはそれぞれすでに特定のサーバーが割り当てられ固定されているようなのです。なのでサーバーが反応しないというときにはこのサーバーの指定を解除して別のサーバーを割り当ててもらうという方法が有効です。

具体的な内容としては、ブラウザのキャッシュ、クッキーを削除し、Blogger にサインインしなおす、それだけです。

もしかして、同じような問題なのでは? そう考えて、ブラウザーのキャッシュとクッキーを消除し Blogger にサインインし直すと... 問題解決。編集できるようになった。NavBar も崩れなくなった。コメントもできるようになった。

結局、原因は分からないのだけど、これで解決するらしい。

同じような状況に陥った人は、試してみては?

2005-10-06

TeX by Topic

最近 TeX の本が少くなってきたように思う。ここで言う TeX とは plain TeX のこと。本来、TeX と言えば plain TeX を指すものだと思っていたのだけど、最近は LaTeX も TeX と言うようになってきたらしい Xp。書名に「TeX」とあるから中を覗いたのに、LaTeX の本だったということが数知れず。

plain TeX の勉強をしようとするなら、バイブルは「 TeX ブック」と決まっている。けど、この本は物語のように書かれていてリファレンスとして使うにはいま一つ。TeX に関する全てが書いてあると言って過言ではないのだけど、情報が一か所にまとまっていないため読み難い。

Victor Eijkhout の 「TeX by Topic」

そんな plain TeX 学習者には、Victor Eijkhout 氏の「 TeX by Topic」がお勧め。39 のトピックに分けて解説がされていて、リファレンスとして使える。

ところがこの本。本国では絶版のよう。そのため、出版者が権利を著者に戻してしまった。今、著者のページに行くと、PDF 版の原稿が手に入る。もちろん英語。

なお、タダで手に入れるのはもったいない。とか、何かお返しが出来ないものか、とか考えている人は、著者のページの下に donation (寄付) のボタンがある。PayPal を使ったシステムだけれど、押してあげると喜ばれるかもしれない (お金のトラブルは自己責任で)。

.
.
.

2005-10-05

Emacs でキーワードをハイライトする

Emacs は font-lock というシステムを使ってキーワードに色を付けてくれる。最近の Emacs では、文字の大きさを変えたり、代替テキストを表示させたりもできる。非常に高機能な反面、設定に敷居が高い。そのため、バッファー内のキーワードに色を付けるといった一時的な色付けには使えない。

そこで便利なのが、David M. Koppelman 氏の hi-lock.el。ちょっとした minor-mode で、キーワードに色を付けることができる。ここでは、一番簡単な highlight-phrase で説明しましょう。

M-x highlight-phrase
Phrase to hilight: foo RET          ; 色を付けたいフレーズを指定
Highlight using face: hi-yellow RET ; 色を選ぶ

選べる色は、 yellow, blue, green, pink などの原色系。

hi-lock.el は、NEWS によると Emacs 21.1 から標準になったそうな。 highlight-phrase の他に highlight-regexp, highlight-lines-matching-regexp などがある。特に highlight-lines-matching-regexp は面白くて、正規表現にマッチした行を丸ごと色付けしてくれる。

テキスト・ファイルでセクションの頭に「§」を付けるようにしておいて、

M-x highlight-lines-matching-regexp RETRET select-color RET

なんて感じに使ってる。font-lock が定義されてない設定ファイルとか、データばかりのテキスト・ファイルなんかでも使えるんじゃないかしらん。

2005-10-04

ブクログ、始めました

ブログパーツをさがせ で紹介されてた WEB 本棚ブクログ。Amazon の ASIN を持つ商品を、本棚風に紹介するページ。面白そうなので登録してみた。

本棚とあるけれど、ASIN さえあれば CD でも DVD でもエレクトロニクスでも紹介可。自己評価 (星五つ) とコメントを付けられる。商品には、Amazon のジャンル分類ができる他、自分で好みのカテゴリーを付けられる。

面白いっ! と思ったのは、本棚同士が SNS よろしくリンクが貼られること。左カラムにある「似てるかも木棚」というのがそれで、自分の本棚と同じような商品を本棚に入れてる人達へのリンクが表示される。今回、本棚に入れたのは 「闇の戦い」シリーズというファンタジーなのだけど、この (マイナーな) シリーズを本棚に入れてる人達が、「似てるかも本棚」に出てきた。作品が、それほどメジャーでないから、同じ趣味の人達をこれで見つけられてホクホクしてしまう。本棚の蔵書量 (?) が増えた時に、このリンクがどれほど上手く動いてくれるか心配だけど、新たな出会いがあるんじゃないかと期待してしまう。

この他、商品をクリックすれば他の人のレビューが見れるし、作者名をクリックすれば作者検索が、訳者をクリックすればその訳者が訳した本が見れる。それから「商品リンクを作成」をクリックすると Amazon のアフィリエイト・リンクが簡単に作れてしまう。これは、 printAmazon で僕がやろうとしていたことに似ている。

最後にもう一つ。ブクログの商品はトラックバックに対応している。つまり、ブクログの外で本の感想を書いても、ブクログと連携できるということ。僕なんかは、 TypePadlife@aka なんて本や CD の感想ブログをやってるけど、そういったブログとブクログとを一緒に使って行く、なんてことが出来そう。

惜しむらくは、 Amazon のクラシック CD の品揃えがよくないことかな〜。せめて HMV なみに揃えて欲しいのだけど。

2005-10-02

AUCTeX 11.81 の日本語モード

AUCTeX の日本語モードについて、バージョン 11.81 を対象に解説を書いた。

AUCTeX には日本語 TeX 用に tex-jp.el というファイルが用意されており、この中で japanese-latex-mode が定義されている。 japanese-latex-mode は、tex-jp.el をロードしただけでは有効にならない。ここではメジャー・モードが japanese-latex-mode な時、 AUCTeX は日本語モードに入っているとしよう。

日本語モードに入ると、どうなるか

まず、tex-jp.el をロードした時点で次の設定が加わる。

  • コンパイル・コマンド ( C-c C-c) に日本語 TeX 用のコマンドが追加される。追加されるのは、 pLaTeX, jLaTeX, mendex, jBibTeX など。
  • クラス・ファイルの候補に日本語のクラス (jarticle や jsbook など) が追加される。
  • スタイル・ファイルのサーチ・パスに日本語 TeX の Path (/usr/share/texmf/ptex など) が追加される。
  • 日本語の命令 ( \西歴 など) を理解するようになる。
  • エラー・メッセージが日本語になる。

そして、 AUCTeX が日本語モードに入ると、次の機能が加わる。

  • コンパイル・コマンド LaTeXplatex (or jlatex) が実行されるようになる。
  • BibTeX のデフォールトが、jBibTeX になる。
  • クラス・ファイルのデフォールトに japanese-LaTeX-default-style が使われる。

少し説明が必要なのは、コンパイル・コマンドかな。

AUCTeX では C-c C-c COMMAND で外部コマンドを呼び出し、TeX ファイルをコンパイルできる。デフォールトの COMMAND は LaTeX で、 latex コマンドが実行される。この LaTeX は少し賢くて、クラス・ファイルから実行するコマンドを切り替える。つまり、article クラスなら latex を、jarticle クラスなら platex を、j-article クラスなら jlatex コマンドで TeX をコンパイルする。ちなみに、クラス・ファイルから実行コマンドの推測に失敗した場合に備えて、 pLaTeX, jLaTeX というのも用意されてる。クラス・ファイルを自作でもしてない限り、全て LaTeX でやって大丈夫。

一方、 BibTeX は違う。 AUCTeX は TeX のコンパイルに bibtex コマンドが必要な場合、 C-c C-cBibTeX が候補に挙がる。この時、日本語モードに入っていると、 BibTeX の代わりに jBibTeX が候補に挙がる。つまり、 BibTeX は、クラス・ファイルを見て実行コマンドを切り替えてはくれない、ということ。

日本語モードにどうやって入るか

AUCTeX はファイルをパースして (正確には \documentclass で指定されてるクラス・ファイルを調べて) 日本語モードに入るかどうかを決める。ところが、 AUCTeX はデフォールトで自動パースしない。そのため、ユーザーがパーサーを走らせなきゃいけない。パースの実行は C-c C-n

TeX ファイルを開いた時、自動的にパースするには次の設定を .emacs に追加する。

;;
;; Automatic Parsing of TeX files.
;;
(setq TeX-parse-self t)  ; ファイルを開いた時に自動パース
(setq TeX-auto-save  t)  ; パースしたデータを保存する

さて、問題はもう一つある。新規にファイルを作った時、ファイルは空でクラス・ファイルも \documentclass もない。だからパースしても、日本語モードに入らない。従って、新しいファイルに限っては、\documentclass を書いた後に、明示的に C-c C-n しなくちゃいけない。

それが面倒というなら、次の設定を .emacs に加える。

;;
;; Japanese TeX
;;
(setq TeX-default-mode 'japanese-latex-mode)

これで新しく開いたファイルは日本語モードに (強制的に) なる。

僕は日本語と英語の文章を半々の割で書くから、 TeX-default-mode の設定はしてない。少々面倒だけど、日本語ファイルの場合だけ C-c C-n してる。どうせ、最初の一回だけなので気にしない。

まあ、ほとんどの人は上の設定も加えるようにしとけば、いいんじゃないかしらん。

新しくクラス・ファイルを作った時に

今の AUCTeXC-c C-c LaTeX で、クラス・ファイルから実行する latex コマンドを選ぶ。これはもう書いた。問題は、新しくクラス・ファイルを書いた場合はどうするか? AUCTeX がそのクラス・ファイル知らなければ、日本語モードに入っていても latex でコンパイルされちゃう。

回避策は二つある。一つは、 C-c C-c LaTeX の代わりに C-c C-c pLaTeX を使う。もう一つは、 AUCTeX に自作のクラス・ファイルを教える。

後者の具体的な設定は、自作のクラス・ファイル名が myclmemo.cls だとして、次のようなコードを .emacs に追加する。

(setq LaTeX-command-style
      (append '(("^myclmemo$"
   "%(PDF)platex %S%(PDFout)"))
       LaTeX-command-style))

Emacs 21.4 から emacs-atompub でポストする

Emacs は開発版の 22.0.50 で emacs-atompub を使ってポストする方法は 以前書いた。今回は、 Emacs 21.4 で emacs-atompub を使ってポストする方法を書いてみる。ほとんど前回の焼き直しだけど、Emacs 21 ユーザーの参考になれば。

最新版の入手

Emacs 21.4 で必要になる外部パッケージは二つ。url パッケージと nxml パッケージ。

url パッケージは、emacs/w3 という pure EmacsLisp なテキスト・ブラウザーのために開発されたパッケージ。最近、emacs/w3 の開発の話は聞かないけれど、url パッケージは開発が進んで開発版 Emacs に取り込まれた。 Emacs 21.4 では、まだ標準パッケージじゃない。 emacs-atompub のページに、 emacs-atompub 用にチューンされた url パッケージがあるので取ってくる。

nxml パッケージは、XML Scheme をパースして Valid な XML テキストを書くための Emacs パッケージ。同種のソフトに psgml パッケージというのもある。 emacs-atompub では、XML の検証用に nxml パッケージを利用している。

emacs-atompub, url, nxml の最新版は以下のサイトからダウンロードできる。

インストール

手元の環境だと Emacs 22.0.50 が動いてるので、標準的なインストールをすると開発版の EmacsLisp と競合してしまう。そんなわけで、 Emacs 21.4 だけで使うように Path がちょっと変わってる。分かる人は、自分の環境に合わせて読み変えて下さい。

$ cd ~/
$ mkdir site-lisp
$ cd site-lisp
$ wget http://purl.org/net/emacs-atom-api/emacs-atom-api-latest.tar.gz
$ wget http://purl.org/net/emacs-atom-api/url.tar.gz
$ wget http://www.thaiopensource.com/download/nxml-mode-20041004.tar.gz
$ tar xzf emacs-atom-api-latest.tar.gz 
$ tar xzf nxml-mode-*.tar.gz 
$ tar xzf url.tar.gz 
$ ls
emacs-atom-api                nxml-mode-20041004         url
emacs-atom-api-latest.tar.gz  nxml-mode-20041004.tar.gz  url.tar.gz

nxml-mode の elc ファイルは、XEmacs 用かもしれない。もし上手く動かなかったら、 rm *.elc してみて下さい。何でそう思ってるのか、ソースが分かんない。単なる記憶違いかも。何か分かれば、追記します。

.emacs の編集

.emacs に次のコードを追加。

;;
;; url package
;;
(setq load-path (cons "~/site-lisp/url/" load-path))

;;
;; nXML mode
;;
(setq load-path (cons "~/site-lisp/nxml-mode-20041004/" load-path))
(load "rng-auto")

;;
;; atom-api
;;
(setq load-path (cons "~/site-lisp/atompub/" load-path))
(autoload 'atom-api:entry/edit "atom-api" "Prompts for an entry to edit, opens in new buffer." t)
(autoload 'atom-api:entry/new "atom-api"  "Create a new entry." t)
(autoload 'atom-api:entry/delete "atom-api"  "Prompts for an entry to delete." t)

blogger 用の設定

Blogger のエントリー・ポイントを emacs-atompub に教えてやる。ただ、当方 proxy のある環境でしかテストが出来なかった。だから、この設定は proxy 用の設定。proxy がない場合は... もし出来た人、居たらトラックバック下さい。

proxy は proxy.foobar.net、ポートは 8080 とする。

(setq url-http-real-basic-auth-storage
      '(("proxy.foobar.net:8080"
  ("Blogger" . "hash_by_username_and_password"))))
(setq url-proxy-services
      '(("http" . "proxy.foobar.net:8080")
 ("https" . "proxy.foobar.net:8080")
 ("no_proxy" . "\\(localhost\\|localhost\\.localdomain)"))
)

Bloggerhash_by_username_and_password と書かれた部分は、ユーザー名 foo、パスワード bar として、次の操作で得た文字列と置き換えて下さい。

$ echo -n 'foo:bar' | openssl enc -e -base64

使ってみる

atom-api:entry/new
新規ポスト記事を作成
atom-api:entry/publish
書いた記事を投稿する

edit 用パッチ

2005-10-02 現在の emacs-atompub では edit が動かない (実行すると空のバッファーが返る)。一応、下のパッチを書いた。無保障だけど、人柱な人はどうぞ。

--- old-emacs-atompub/atom-api.el 2005-09-26 17:49:32.000000000 +0900
+++ new-emacs-atompub/atom-api.el 2005-10-01 03:26:18.000000000 +0900
@@ -695,8 +695,10 @@
   (atom-api:init 'sync)
   (let ((entry (atom-api:entry/prompt-for "Entry: ")))
     (switch-to-buffer (xml-node-text (xml-get-child entry 'title)))
-    (if (not (buffer-modified-p))
- (atom-api:entry/to-editable entry))))
+    (unless (buffer-modified-p)
+      (insert (atom-api:xml/to-string
+        (atom-api:entry/to-editable (atom-api:xml/parse-string entry))))
+      (atom-api:entry/edit-thunk))))
 
 ;;;###autoload
 (defun atom-api:entry/delete ()

2005-10-01

emacs-atompub

Emacs で AtomPP (Atom Publishing Protocol) 経由でポストするためのツールとして、emacs-atom-api パッケージがあることを以前紹介した。今回はその続報。

まず、パッケージ名が emacs-atom-api から emacs-atompub に変わった。

次に、パッケージが trac で管理されることになった。それに伴ってウェブページ (Wiki) のアドレスも変わった。

それから、最新のソースコードが darcs レポジトリーで公開されてる。最近の darcs の記事は、実は emacs-atompub のためだったりする。最新のソースの tar ball も Wiki 上にあるけれど、 darcs を使えば、ローカルに emacs-atompub のレポジトリーを持てるし、patch を送るのも楽になる (かもしれない)。

2005-10-01 現在の最新コードについていえば、entry の edit (編集) ができない。既にパッチは作者の Erik Hetzner 氏に送ってあるので、近い内に取り込まれる (といいな ;)。

Links

最後に、このブログで扱った emacs-atompub と darcs のエントリーのリンクを書いておく。

emacs-atompub
darcs
.

sdic の統計情報をとる |Emacs|

GNU Emacs には、 sdic というシンプルでスマートな英和・和英辞書ツールがある。英和辞書はウェブ上にも転がってるけど、 GNU Emacs から使える所が魅力。特に、 MewEmacs-w3m で英文を読む時に Emacs から離れずに辞書が索けるので重宝してる。

この sdic で調べた単語を、下記のフォーマットで統計データのように保存するコードを書いた。

characteristic of ~, be 1                       2005-05-09
arbitrary               2                       2005-06-05
successor               1                       2005-06-28
fluctuate               3                       2005-07-02
pending                 1                       2005-07-11
amend                   1                       2005-07-24

sdic-stat.el

ダウンロードした sdic-stat.el を load-path 下に置き、.emacs に次の設定を加える。

;;
;; sdic-stat.el
;;
(autoload 'sdic-stat-ci-word "sdic-stat" "Save word statistics in sdic" t)
(defadvice sdic-display-buffer (after sdic-auto-stat activate)
  "Record word statistics automatically."
  (sdic-stat-ci-word))

後は sdic で英単語を調べるだけ。調べた単語が自動的にファイルに保存されていく。

データの保存先は ~/.sdic-stat.txt。保存先を変えたければ、次のようにする。

(setq sdic-stat-file "your/favorite/path.txt")

sdic-stat のタブ

sdic-stat では、英単語と単語の検索回数の間に TAB が一つ入る。ただ、それだと Emacs でファイルを開いた時に、ガタガタに表示されてしまう (ことがある)。例えば、こんな感じ...

characteristic of ~, be 1       2005-05-09
arbitrary       2       2005-06-05
successor 1 2005-06-28
fluctuate 3 2005-07-02
pending 1 2005-07-11
amend 1 2005-07-24

これは、いかにも見苦しい。僕は、 .sdic-stat.txt の末尾に次の四行を加えてる。

^L
Local Variables:
tab-width: 24
End:

こうすると、最初の例で見たようになる。ちなみに、 ^L は一文字の制御文字で C-q C-l で入力する。

sdic-stat を使って

これでデータは取れた。後は、好きなようにファイルを加工すればいい。

例えば、よく sdic で索く単語が知りたければ

$ sort -k 2 ~/.sdic-stat.txt
caveat  2       2005-07-09
relevant        3       2005-03-23
drawback        3       2005-04-17
intermittent    3       2005-06-27

という感じ。