2007-12-03

.file をCVS管理


前からやろうと思っていたけど、実行に移した。これで、複数のPCで同じ設定を楽に使えるってもんだ。
初め import を試した時に、 "Unknown command `server'" と言われた。
Gentoo で USE=server を指定していなかったのだが、それがいけなかったらしい。
ssh 経由のアクセスにも USE=server が必要とは知らなかった。pserver のためだけかと思ってた。
その作業後に emacs-w3m の cvs update を行なおうとした時に PCL-CVS が奇妙な動作をした。
buffer の repository には emacs-w3m のものが書かれているのに、 うちのサーバのほうにアクセスをかけていた。なにか変な変数でもさわっちゃったかな?

どうにも、 CVS がまだ完全にはわかっていないみたいなので


を読むことにする。

PCL-CVS の日本語 info はないのかなぁ。

2007-11-26

Fedora から Gentoo への移行


Fedora の yum が w3m のために gpm をひっぱってきたりと依存関係がうっとおしいのに愛想がつきて Gentoo にいれかえたいなと思っていると「HOWTO Convert A RedHat Server to Gentoo Remotely- Gentoo Linux Wiki」というページを発見。
swap が小さいので代わりに少し危険だとあるけれど「HOWTO Replace RedHat with Gentoo, Remotely over SSH」の方法をとることにした。

1.必要なドライバをカーネルに組み込む
安全のため、モジュールなしでも起動できるカーネルを作る。
必要なモジュールは lspci-vvv を使えばわかる。

(2.sshd_confg で SSH の PAM 機能をオフにする)
remote からする時は必要だが、私は local で作業したので行っていない。
ちなみに以下のようにするといいらしい。


  1. /etc/ssh/sshd_config の UsePAM を no にする。

  2. netstat -tanp | grep LISTEN | grep sshd で sshd の PID をメモ

  3. kill <PID> で sshd を kill。これを実行しても LISTEN している sshd だけが kill され、すでにログインしているプロセスには影響しない。

  4. ログアウトせずに /usr/sbin/sshd を実行。

  5. 今のログインとは別にマシンに ssh 接続できるか試してみる。



3.最新の stage3 をダウンロード
Gentoo Linux-- Gentoo Linux Mirrorsにミラーサイト一覧があるので適当なところを選んで stage3 の tarball をダウンロード。

4.設定ファイルのバックアップ

  • /etc/resolv.conf

  • /etc/fstab,mtab

  • /etc/passwd,shadow,group

  • /etc/grub.conf,lilo.conf

  • /etc/sysconfig/network

  • /etc/sysconfig/network-scripts/ifcfg-eth*

  • apache の設定

  • sshd の設定


あたりを。そして、 /sbin/lsmod > /tmp/gentoo/modules.txt のようにして読みこまれているモジュールのリストをバックアップ。

5.全てのファイルの更新日時を変更
Gentoo をいれたあとにいらないファイルを識別するために一度全ファイルの更新日時を適当な日時に変更しておきます。


mv /sbin/modprobe /sbin/.modprobe
find / -print0 | xargs -0 touch -d "Feb 1 1978" -m -a
mv /sbin/.modprobe /sbin/modprobe



6.stage3 tarball を展開
私は念のために Fedora のバックアップをとりました。


# cd /
# for x in `tar jtvf /tmp/gentoo/stage3-*.tar.bz2 | awk '{print $6}'`;do
test ! -d $x -a -e $x &amp;&amp; echo $x
done > /tmp/fedora-list
# xargs tar zcvf /tmp/gentoo/fedora.tar.gz < /tmp/fedora-list


stage3 tarball を展開します。


cd / &amp;&amp; tar jxvf /tmp/gentoo/stage3-*.tar.bz2




7.portageツリーを同期


emerge --sync


同期には時間がかかるので、その間に他の作業ができるようにシェルを複数開いておくといいでしょう。

8.stage3 で置換えられたファイルの内容を復元

  • root パスワードの再設定。

  • 自分のアカウントを追加。

  • UID が変化していることがあるのでホームディレクトリ以下のファイルの所有者を再設定。


この時点でログインできるかどうかを確認。

  • バックアップしてある passwd、shadow、groupをもとにユーザ/グループを追加。UID が変化するなら以下のようにして所有者を再設定。




find / -uid $olduid -print0 | xargs -0 chown $newusername



  • バックアップから /etc/fstab を復元。


元の著者は LABEL= の設定を変更しているけれどそれはお好みで。

  • GRUB(または LILO)の設定を復元。

  • /etc/make.conf を編集

  • ネットワークの設定


/etc/conf.d/net を /etc/conf.d/net.example を見ながら編集。

  • その他の設定

    • /etc/conf.d/keymaps で KEYMAP の変更(emacs で US 配列・capslock が ctrl の役割のマップになるらしい)

    • /etc/conf.d/clock で CLOCK を local に変更

    • /etc/rc.conf で EDITOR をお好きなものに変更



  • システムのロケールを変更。日本なら ln -sf /usr/share/zoneinfo/Japan /etc/localtime

  • (一時的に、 /usr/bin/sshd を /etc/conf.d/local.start に追加)

  • /etc/conf.d/hostname でホスト名を設定

  • cd /lib && rm -rf i686 && /sbin/ldconfig で Fedora のシステムライブラリから Gentoo のシステムライブラリに移行!


この時点で Fedora のシステムバイナリ/ライブラリから Gentoo のものへの移行が完了です。再起動していらないファイルを削除する前に基本的なシステムコンポーネントをインストールします。

8.boot に必要なものをインストール

  • システムロガー(sysklogd,syslog-ng,metalog)

  • cron

  • emacs,vi で Backspace が動作するようにtermcap を修正するために libtermcap-compat

  • ブートローダ(GRUBかLILO)

  • openssh (rc-update add sshd default して、/etc/conf.d/local.start から /usr/bin/sshd を削除)

  • お好きなエディタ


私の場合、Fedora が LVM を使っていたので、さらに lvm2 を emerge しました。

これで再起動の準備が整いました。以下のことを確認して再起動してください。


  1. ブートローダがきちんと動くカーネルを起動するように設定されていること。

  2. ネットワークをつなげるためのドライバがカーネルにインストールされていること。

  3. Gentoo のネットワーク設定が正しく、タイプミスがないこと。

  4. fstab が正しく設定されていて boot 時に mount されるようになっていること。

  5. システムにログインし、 root になれること。

  6. openssh がシステム起動時に起動されること。



再起動後はいらない(Fedora 由来の)ファイルを削除します。

9.必要なファイルの保護
以下のように必要なファイルを保護します。


# find /lib/modules /etc/ssh -print0 | xargs -0 touch -m -a
# touch -m -a /etc/resolv.conf


これら以外にも例えば /var/www にウェブコンテンツを置いている場合にはそこも保護するといいでしょう。

10.Fedora のファイルを削除


# touch -d "Feb 2 1978" -m -a /tmp/foo
# find /bin /sbin /etc /lib /usr /var -type f ! -newer /tmp/foo -print0 | xargs -0 rm -v
# find /bin /sbin /etc /lib /usr /var -type d ! -newer /tmp/foo -print0 | xargs -0 rm -vrf



11.Fedora のディレクトリを削除


# cd / &amp;&amp; rm -rf opt misc tftpboot selinux



これで一通り終りです。
私の場合、空き容量800MBほどだったのが3.2GBほどまで増えました。

2007-11-15

SPARC のアセンブラ


Kernel Planet のDaveM's Linux Networking BLOGを見て。

2つのレジスタの状態によって、第3のレジスタに 0 か 1 を代入するということをしたい時。
つまり、


if(reg1==reg2)
reg3=1;
else
reg3=0;

ってことをしたい時。

下のようなコードだと分岐予測がきかないため効率が良くないらしく(いまいち理由がわからない…)、


cmp %reg1, %reg2
mov 0, %reg3
bCOND,a 1f
mov 1, %reg3
1:



次のようなコードを生成するらしい。


/* %reg3 = (%reg1 != %reg2) */
xor %reg1, %reg2, %reg3
subcc %g0, %reg3, %g0
addx %g0, 0, %reg3

/* %reg3 = (%reg1 < %reg2) */
cmp %reg1, %reg2
addx %g0, 0, %reg3

/* %reg3 = (%reg1 > %reg2) */
cmp %reg2, %reg1
addx %g0, 0, %reg3



これを読むために色々調べたことをメモ。
SPARC のアセンブラの演算は

hoge <レジスタ>,<レジスタもしくは数字>,<レジスタ>

と呼出し、第1引数と第2引数の演算結果を第3引数のレジスタに代入する。
g0 レジスタは、常に 0 がはいっていて代入は意味がない。
〜cc は with carry で演算結果によっては carry bit をセットする。
〜x は carry bit を考慮して演算する。
下2つはともかく、 %reg3 = (%reg1 != %reg2) の時が面白い。
xor して reg3 が 0 (reg1 == reg2) なら
subcc は 0- 0 で carry bit は 0 。
addx は 0+ 0 + <carry bit> で reg3 は 0。

xor して reg3 が 正 (reg1 != reg2) なら
subcc は 0- 正 で carry bit は 1 。
addx は 0+ 0 + <carry bit> で reg3 は 1。

引き算の carry bit を足し算で使うというアイデア。

386本で読んだはずなのに、 carry bit なんてすっかり忘れてた…。


2007-11-14

StupidFilter


/.本家から。
ウェブ上のばかな文章をフィルタリングするStupidFilterと言うオープンソースプロジェクトが開始された。
コアエンジンとしてCMS、ブログ、Wikiなどと協調して働くもの、そして、Firefox、Wordpress のプラグインをリリースする予定らしい。
とりあえず使えるコードは12月にでるそうな。

英語のみ対応のようだが、日本語版も作れないものかな。

ref.StupidFilter :: Main / HomePage

2007-11-05

pabbrev.el


gnu-emacs-sourcesMLから。
作者は、Phillip Lord氏。
アイドルタイムにバッファをスキャンし、文章を書いていて補完候補がみつかれば、候補を表示してくれる。
例えば、Emacsと打つ過程は


E
Em[acs] (ここでTAB)
Emacs

という風になる。
ここで表示されるのはもっとも出現頻度の高い候補だが、TABを二回おすことで下に選択バッファが開き、それ以外の候補を選択できます。

一応、日本語にも対応してはいるもののやはり区切りかたがいまいちで、日本語を書くのにはあまり使えないかも。
プログラミング時には、かなり使えるものと思われる。
アイドル時のバッファのスキャンは高速で Zaurus でも全くストレスなく使うことができた。

パスの通ったとこにおいて
.emacsに

(require 'pabbrev)

として、使いたいバッファで M-x pabbrev-mode してやればいい。
global-pabbrev-mode なら全バッファ(pabbrev-global-mode-not-buffer-names で指定されたものは除かれる)で pabbrev-mode が有効になる。
スキャン時に表示されるメッセージがうっとおしければ、

(setq pabbrev-idle-timer-verbose nil)

しておけばよろし。

2007-11-04

サスペンド、ハイバネーションのテスト


LKML に投稿されたパッチ。
/sys/power/pm_test_level に任意の数値を書きこむことで、サスペンド、ハイバネーションのテストを有効にする。


5- プロセスをフリーズするテスト
4- プロセスをフリーズし、デバイスをサスペンドするテスト
3- プロセスをフリーズし、デバイス・プラットフォーム操作システムをサスペンドするテスト
2- プロセスをフリーズし、デバイス・プラットフォーム操作システムをサスペンドし、起動CPUでないCPUを無効にするテスト
1- プロセスをフリーズし、デバイス・プラットフォーム操作システムをサスペンドし、起動CPUでないCPUを無効にし、プラットフォーム/システムのデバイスをサスペンドするテスト

プラットフォーム操作システムは、ACPIが有効なマシンでのみ使え、ハイバネーションモードが "platform" である時だけ、テストされる。


ref. Testing Suspend and Hibernation | KernelTrap

オープンソース版Second Life


Second Life のオープンソース版がでるみたい。

ref. A second life for 'Second Life' with open source? (LinuxWorld) [LWN.net]

2007-11-02

Apche の設定を楽にする mod_macro


mod_macroは、Fabien Coelho 氏 の書いた Apche用モジュール。
ライセンスは、Apcheと同じくBSDスタイルのライセンス。

これを使うと、例えば以下のようにして設定のコピペを回避し、ミスを少なくすることができる。



<Macro VHostCGI $customer $domain>
<VirtualHost $domain:80>
ServerName $domain
ServerAlias www.$domain
DocumentRoot /vaw/www/$customer/docroot/$domain/
ScriptAlias /cgi-bin/ /var/www/$customer/cgi-bin/
ErrorLog /var/log/apache/$customer/logs/$domain-error.log
CustomLog /var/log/apache/$customer/logs/$domain-access.log combined
<Directory /var/www/$customer/cgi-bin/>
Options ExecCGI
</Directory>
</VirtualHost>
</Macro>

Use VHostCGI customer1 example.com
Use VHostCGI customer15 sample.net
Use VHostCGI customer122 iamanexampletoo.org



Gentoo なら mod_macro を emerge して、 /etc/conf.d/apache の HTTPD_OPTS に "-D MACRO" を追加。
それ以外なら、最新版をダウンロードして、展開。


# apxs -cia mod_macro-1.1.8/mod_macro.c


で、本体のインストール。


# cp mod_macro-1.1.8/mod_macro.html apache_2.2.0/manual/mod/


で、ドキュメンとをコピー。


これを使うことで大分保守性があがりそう。本家にはいったりしないかねぇ。

2007-11-01

slashdotjp-mode


とりあえずバグ修正版


  • n/p キーの変な挙動

  • 同時に二つ以上の記事を取得した時にどちらのコメントも2つめの記事のほうに行ってしまうバグ

  • 一度取得した記事が二回目以降取得できないバグ



slashdotjp.el





2007-10-06

slashdotjp-mode


コードをちょっと整理。場所をコピペでグループごとにまとめただけだけど…。
リスト表示画面で、新しい記事・新しくコメントがついた記事に"U"マークをつけるように変更。
どうせ使っても日本内だけだろうから、コメントを日本語に。

plist-get、plist-putって便利。
同じ内容だらだら書いてるとこをさっさとmacroにしないと…。

slashdotjp.el


2007-10-01

slasshdotjp-mode


記事列挙、記事本文・コメント閲覧までできた。
関数コメントとか書かなきゃなぁ…。
だぶってるコードもあるから整理しないと。

slashdotjp.el

slashdotjp-mode開発中


スラッシュドットジャパンの記事やらコメントやらは見ているのはそれなりに楽しいし、暇つぶしにもなる。だが、2chブラウザを使っていると/.jは不便だな、と感じる。
例えば、何かの記事とそのコメントを読んで、しばらくして新しいコメントがついているかどうか、もしついているなら、どこについているのか、を調べるのは少し大変だ。

そんなわけで、slashdotjp-modeを開発中。
とりあえず、記事表示、コメントネスト表示までできた。

# 既出じゃなきゃいいけど…





2007-08-08

iptablesの設定ミスった…


最近、サーバがやたらとsshアタックがあってるからsshで入って、iptables-Lしてみると設定が全部消えてた。
あれ?と思いつつ、/rootのとこにmyiptable.shってのがあったので、これだろうと思い中身も見ずに実行。


……で、sshもSMTPもHTTPも動いてない。
なんでかなー…。カーネル再構築したからそのせいだろうか?
エラーでてたしな…。

遠くにあるサーバだから再起動面倒…。

2007-08-04

Emacs-w3mでURLコピー


デフォルトではEmacs-w3mのkeymapは、'c'にw3m-print-current-urlを割り当てている。
この関数は現在開いているページのURLを表示してkill-ringに追加してくれる。しかし、URLをkillしたければ'g'を押して'C-k'すればすむ話。むしろ画面に表示されないタイトルをkillするのがよっぽど面倒だ。
ページへのリンクを貼りたい時に、いちいち


<a href="foo">bar</a>

などと打つのも大変なので、こういう内容をkillしてくれる関数を書いてみた。


(defun my-w3m-yank-current-page ()
(interactive)
(kill-new (concat "<a href=\"" w3m-current-url "\">"
(w3m-encode-specials-string (w3m-current-title))
"</a>")))
(add-hook 'w3m-mode-hook
'(lambda ()
(define-key w3m-mode-map "c" 'my-w3m-yank-current-page)))

~/.emacs-w3mに、書いておくと'c'を押した時に上で書いたような文字をkillしてくれる。
意外と便利。

2007-08-03

Emacsのフォント設定


特に設定しなくてもほとんど問題なく使えていたが、略字(㌔とか)、丸数字、ローマ数字が見れないのにいい加減うんざりしてきたので、フォント設定をしっかりしてみた。

TTFはまだうまくは動かないようなので、なるべくBitmapフォントでそろえる。
追加したフォントは


の3つ。

ダウンロードして、適当なフォルダにいれて

$ mkfontscale (TTFのみ)
$ mkfontdir
$ xset fp+ /path/to/font/dir
$ xset fp rehash

下二行は、.xinitrcにも追加

設定の方法については、いろいろなところに書いてあるので省略。

(create-fontset-from-fontset-spec
"-mplus-*-mplus-r-normal--12-*-*-*-*-*-fontset-mplus_12r,
ascii:-mplus-fxd-medium-r-semicondensed--12-*-iso8859-1,
japanese-jisx0208:-mplus-gothic-medium-r-normal--12-*-jisx0208.1990-0,
katakana-jisx0201:-mplus-gothic-medium-r-normal--12-*-jisx0201.1976-0")
(set-fontset-font
"fontset-mplus_12r"
'chinese-big5-1
"-wenquanyi-wenquanyi bitmap song-medium-r-normal--12-120-75-75-p-119-iso10646-1")
(set-fontset-font
"fontset-mplus_12r"
'mule-unicode-0100-24ff
"-Misc-Fixed-Medium-R-SemiCondensed--12-110-75-75-C-60-ISO10646-1")
(set-fontset-font
"fontset-mplus_12r"
'mule-unicode-2500-33ff
"-Misc-Fixed-Medium-R-SemiCondensed--12-110-75-75-C-60-ISO10646-1")
(set-fontset-font
"fontset-mplus_12r"
'chinese-gb2312
"-wenquanyi-wenquanyi bitmap song-medium-r-normal--12-120-75-75-p-119-iso10646-1")
(set-fontset-font
"fontset-mplus_12r"
'japanese-jisx0212
"-misc-ipamonagothic-medium-r-normal--0-0-0-0-p-0-iso10646-1")
(set-default-font "fontset-mplus_12r")


基本的には、ASCII用のフォントを決めてcreate-fontset-from-fontset-specで設定し、表示できない文字、変えたい文字をset-fontset-fontで他の文字セット用のフォントを設定していく感じ。
japanese-jisx0212とかchinese-gb2312とかは M-x describe-charで見れる。
"-misc-ipamonagothic-medium-r-normal--0-0-0-0-p-0-iso10646-1"とかは、フォントのあるフォルダのfonts.dir見るなり、xlsfontsの結果をgrepするなり。

Emacs-w3mで、TABLEがずれるのが気にくわない…。
IPAモナーフォントが罫線文字を全角で描いてるからなんだろう。
このあたり(mule-unicode-2500-33ff)をうまくやってるフォント(できればBitmap)ないかな?
/efont/ Electronic Font Open Laboratoryのefont-unicodeがよさそう。


2007-08-01

Google Analytics/72.14.235.104


更新をずっとさぼっていてもなぜかGoogle Analyticsは日々1〜5の訪問を記録してくれています。

今日の参照元に、72.14.235.104という変な記録が残っていたので調べてみると
Google Analyticsとは何だ?- [コラム]10月の結果にあるようにGoogleのIPアドレスだったようです。

このブログGoogle Analyticsについて興味深い記事が多くあるのでじっくり読んで研究してみようかな…。

まぁ…まず更新することが前提なのでしょうけど。


2007-06-21

ZaurusにPerl 5.8.8をインストール


ZaurusにPerlといったらLinuxザウルス/Perl- Walrus, Visit.のが有名だが、ここのはバージョンが少し古く、スレッドやが使えなかったりするので新しいバージョンをいれてみた。

まず、以下のdebianパッケージをダウンロード
/pool/main/p/perl/perl-base_5.8.8-7_arm.deb
/pool/main/p/perl/perl-modules_5.8.8-7_all.deb
/pool/main/g/glibc/libc6_2.3.2.ds1-22sarge6_arm.deb
リンクはhttp://ftp.jp.debian.org/のものにしてますが、ミラーサイトもあります。
libcの取扱いには注意。うっかりZaurusのもとのものと置き換えると何も起動できなくなります。


cd /mnt/card/tmp/perl
dpkg-deb -x perl-base_5.8.8-7_arm.deb .
dpkg-deb -x perl-modules_5.8.8-7_all.deb .
dpkg-deb -x libc6_2.3.2.ds1-22sarge6_arm.deb .
mv ./usr/lib/perl/* /mnt/card/QtPalmtop/perl/lib/perl/
mv ./usr/share/perl/* /mnt/card/QtPalmtop/perl/share/perl/

適当にディレクトリを作ってそこに展開。
そのままだとPerlモジュールのパスが通らないので昔のPerlをインストールしていた時に作られていたディレクトリに移動。
昔のPerlをインストールしていなければ

ln -s /mnt/card/QtPalmtop/perl/lib/perl /usr/lib/
ln -s /mnt/card/QtPalmtop/perl/share/perl /usr/share/

とでもすればOKなはず。

このPerlは必要とするglibcのバージョンが違うので普通には起動できない。

LD_LIBRARY_PATH=/mnt/card/tmp/perl/lib /mnt/card/tmp/perl/lib/ld-linux.so.2 /mnt/card/tmp/perl/usr/bin/perl

こうやって起動するけど面倒なので

alias perl='LD_LIBRARY_PATH=/mnt/card/tmp/perl/lib /mnt/card/tmp/perl/lib/ld-linux.so.2 /mnt/card/tmp/perl/usr/bin/perl'

と.bashrcに書いておくと吉。
./hoge.plみたいに#!/usr/bin/perlでの起動はできなので、perl ./hoge.plみたいに呼び出さきゃいけない。

また、Perlの中で他のコマンドを呼ぶ時は

undef $ENV{LD_LIBRARY_PATH};

としておかないとうまくいかない。

threadsモジュールとかConfig_heavy.plとかは
/pool/main/p/perl/perl_5.8.8-7_arm.debに入ってるので個別に追加するといい。

おまけ
#!/usr/bin/perlを無理矢理動作するようにもしてみた。

#include <stdlib.h>

extern char **environ;

int main(int argc,char* argv[])
{
char** newargv=malloc(argc+2);
char** newenv;
int i;

newargv[0]="/mnt/card/tmp/perl/lib/ld-linux.so.2";
newargv[1]="/mnt/card/tmp/perl/usr/bin/perl";
for(i=1;i<argc;i++) newargv[i+1]=argv[i];
newargv[argc+1]=NULL;

for(i=0;;i++)
if(!environ[i]) break;
newenv=malloc(i+2);
for(i=0;;i++){
if(!environ[i]) break;
newenv[i]=environ[i];
}
newenv[i]="LD_LIBRARY_PATH=/mnt/card/tmp/perl/lib";
newenv[i+1]=NULL;

execve("/mnt/card/tmp/perl/lib/ld-linux.so.2",newargv,newenv);
}

これをコンパイルして/usr/bin/perlにおけばOK。

ちなみに

#!/bin/sh
LD_LIBRARY_PATH=/mnt/card/tmp/perl/lib
/mnt/card/tmp/perl/lib/ld-linux.so.2 /mnt/card/tmp/perl/usr/bin/perl $*

を/usr/bin/perlとしておく方法では、shがPerlスクリプトを解釈してしまってだめだった。

2007-06-18

mew-search-gmail.el,gmail-search.pl


GMail clientは作っているうちにどんどん劣化Mewに見えてきたり、単体で実用的に使えるようになるまでに相当のコードが必要そうな気がしてきたので中止。
そのかわり作りかけで放置していたMewでGmail検索するELispを久しぶりに書きすすめた。
ZaurusにCrypt::SSLeayをビルドしてつっこんでみたけれどLWPがあいかわらず、httpsはSSLeayがいるよ、なメッセージを出し続けるし、stunnelでGoogleの認証にアクセスするとhttp://www.google.com:8080/にとばされるで困った。
stunnelがリクエストを書きかえてくれるといいのに。

で、とりあえずZaurus用にはwgetを呼び出してやることにした。
あとはGMailのソース見てマッチさせてうんにゃらかんにゃらで、とりあえず1ページ目に表示されるスレッドは検索でひっかかるようになった。
Zaurusではすごく遅いけど…。Mewの制限でasyncにはできなさそうだしなぁ…。
なんとかならんものだろうか。
さすがにそろそろ寝なくてはいかんので、2ページ目以降の判定はまた明日にでも。

2007-06-15

GMail client for Emacs


現状でもMewを使えばGMailを読み書きできはするけれど、MewだとGMailの特性たる検索が上手く機能しきれていないような気がして初めてのメジャーモード作りに挑戦。
SSLの接続でstunnelがうまく使えない(redirectされるみたい…)ので通信にはとりあえずshimbun APIを流用。
検索してスレッド一覧を表示できるところまでいった。

でも、この先はどんどんMewでできる領域にふみこんでいくんだよなぁ…
車輪の再発明してる感がする…
やっぱり(ZaurusのPerlでSSL通信できないから)放置してるmew-search-gmailのほうを進めたほうがいいかな?

# しかし、GMailでPOP使うのはあの容量の意義がなくすようなものだ、とも思うからとりあえずもう少し続けよう

2007-06-11

analytics


Google Analyticsを久しぶりに見てみると、レポートの表示がずいぶんわかりやすくなってた。
昔からあったのかもしれないけれど、メールのスケジュールが便利。
一日一回メール報告を設定してみた。


2007-05-12

emacs-w3mでのbuffer移動


emacs-w3mでは、移動先のバッファがw3mのバッファである時に再描画するために、switch-to-bufferのバインディングをw3m-switch-to-bufferで上書きしている。
その関数の中で、iswitchb-modeが有効になっている時にiswitchb-read-bufferを呼んでいるが、mcompleteを使っているとiswitchbの機能とmcompleteの機能がかぶってうまく動作しなくなるようだ。

というわけで、iswitchb-read-bufferの前後でmcompleteをトグルするadviceを書いてみた。


(defadvice iswitchb-read-buffer (around disable-mcomplete activate)
(mcomplete-mode nil)
(condition-case nil
ad-do-it
(quit (mcomplete-mode t)
(setq quit-flag t))))


cf
9.5.3.3 エラーハンドラの書き方
20.9 中断
16. Emacs Lisp関数のアドバイス

2007-04-30

Hategle v0.3 リリース


Hategleは、更新Ping機能、TrackBack機能、isbn/asin記法を備えた、はてな記法でBloggerに投稿するためのPerlスクリプトです。

今回の変更点は


  1. isbn/asin記法を追加

  2. UTF-8以外の設定ファイル・日記ファイルの読みこみサポート

  3. 続きを読む記法のバグ修正

  4. 進捗メッセージの表示


です。

ダウンロードはこちらからどうぞ。
SF.jpのミラー選択画面につながります。

前回のリリースで、続きを読む記法が動かなくなってたり、バージョン情報を書きかえ忘れてたりしたので今回はそんなことがないように願います。
次は

  • スーパーpre記法(シンタックス・ハイライト)

  • TB先のお気にいりリスト

  • ラベル、内容によって自動的にTB先を判断する機能

  • Windows、Linux用GUI版作成


(ほとんど、前回とかぶってる…)


2007-04-27

isbn記法できた?


isbn記法がとりあえずできた気がするので、ちょっくらテスト。




不死鳥の剣―剣と魔法の物語傑作選
不死鳥の剣―剣と魔法の物語傑作選

著:ロバート・E. ハワード
編集:中村 融
2003年03月販売元 河出書房新社
ファンタジー傑作選。エルリックとかもっと読みたいものだ。
最近ブームなのか、前よりもこの手の本が書店に置いてある気がする。

スティール・ボール・ラン (1) ジャンプコミックス
スティール・ボール・ラン (1) ジャンプコミックス

著:荒木 飛呂彦
2004年05月20日販売元 集英社
5月2日に新刊が出ます。楽しみ。



2007-04-26

ISBN記法の実装にむけて


Amazon Web サービスのライセンス、ドキュメントを熟読中
更新規定は、blogにポストした内容にも適応されるんだろうか?
ポストした時点でアプリケーションと切り離されると考えていいよねぇ…?


はてなダイアリーキーワード自動リンクAPIというのもあるようだ。
これも機能にいれてみようかな。

2007-04-14

Hategle v0.2 リリース


Hategleは、更新Ping機能、TrackBack機能を備えた、はてな記法でBloggerに投稿するためのPerlスクリプトです。

今回の変更点は


  1. 更新Ping送信機能を追加

  2. TrackBack送信機能を追加

  3. 設定ファイルを外部に持つように変更


です。

ダウンロードはこちらからどうぞ。
SF.jpのミラー選択画面につながります。

とりあえず、これで普通の更新業務(?)はHategleからやれるようになったと思います。
次は

  • スーパーpre記法(シンタックス・ハイライト)

  • isbn記法

  • TB先のお気にいりリスト

  • ラベル、内容によって自動的にTB先を判断する機能

  • Windows、Linux用GUI版作成


あたりをやろうかと計画しています。

ところで、下のエントリ重複しちゃってます。すいません。
最初のは更新はされたものの、Ping打つとこにバグがあって…。
削除しようと思ったんですが、emacs-w3mからだと消せないんです…。


2007-04-13

Hategle 0.2 まもなく、リリース?


全国的に13日の金曜ですが、そんなの気にせずにリリースしようかと思っています。

SF.jpプロジェクトページを取得しました。
Google PageCreatorも便利なんですが、バージョン管理考えるときついものです。
GoogleのファンとしてGoogleのホスティングサービスも使ってみたのですが、まだまだ発展途上なのか、SF.jpに比べると物足りなかったです。

今回の投稿のメインは、更新Ping、TrackBackが上手く動くかの実験なのではやめに切り上げます。



2007-04-12

近況


御無沙汰しております。
ちょっと環境が変ったため、ネット環境やらPC環境やら、リアル世界での所用やらで忙しくしていました。

HategleのGUI版をQtで書いてWindows版リリースを考えたりはしてたんですが、実家にソースコードを忘れてきてしまう、という失態をおかしてしまい意気消沈しています。もう一度、一から書きなおす気力がわいてこない…。

HategleにPing機能、TB機能をつけるために仕様を調べています。
Weblogs.comのが、正式だとか。
うまくいけば明日には、Ping機能、TB機能のついたHategleをリリースできそうです。

2007-03-30

はてな記法でBloggerを

下のエントリに書いたことの繰返しになりますが、
Bloggerは便利なのだけれど、WYSIWYGエディタとHTML編集の2択なのが気にくわない。
はてなには、はてな記法というものがあって、簡単に編集できるようになっています。
そこで、はてな記法で書いたテキストを読んでBloggerにポストするPerlスクリプト「Hategle(仮)」を書いてみました。

おおまかな機能はこんな感じです。


  • (多くの)はてな記法が使える

  • カテゴリ記法を使うことで、ラベルを付けることができる

  • 簡単に続きを読む記法が使える(テンプレートの設定が必要となります)



続きは、簡単に続きを読む記法が使える、の詳細について。


クリボウの Blogger Tips: Blogger beta にも「続きを読む」機能

このページを見て設定すれば続きを読む機能がとりあえず使えるようになります。
しかし、使えるようになったと言えども投稿のさいに


ここには記事冒頭の、トップやアーカイブページでも表示される文章を書きます。
<div class="fullpost">
ここにはトップやアーカイブページで省略される(記事単独ページでだけ表示される)文章を書きます。
</div>
<div class="readmore">
<a href="この投稿自体の URL">[続きを読む]</a>
</div>


のように入力し、さらに、

リンクする URL は、記事を一度投稿して、記事の URL を確かめてからあらためて書き入れるのが一番確実です。記事投稿時点で、記事単独ページの URL を予想して書き入れる場合には、投稿のタイトルと URL の関係を参考にしてください。

とあるように、一度投稿し、編集しなおす必要があり、他のBlogサービスに比べ格段に使い勝手が悪い機能です。

この続きを読む機能、Hategleを使えばはてなと同じように

ここには記事冒頭の、トップやアーカイブページでも表示される文章を書きます。
====
ここにはトップやアーカイブページで省略される(記事単独ページでだけ表示される)文章を書きます。

こう書くだけで、続きを読む機能が実現されます。
Hategleが、代りに投稿した記事のURLを調べて書きこんでくれます。

作ったばかりで、エラーメッセージあたりもまともにでませんがそれでもいいや、というかたは使ってみてください。
こちらにおいてます。


最新版のダウンロードはこちらからどうぞ。


スクリプト実験そのさん


続きを読むてすと
以下、実験




小見出し


さらに小さい見出し


  • BSD

    • FreeBSD

    • NetBSD



  • Linux



  1. Windows

  2. Mac

    1. Mac OSX





Windows

MS社

Mac

Apple社

Linux

コミュニティによる






OSWeb Server管理者
LinuxApacheroot
WindowsIISAdmin


引用病だね。
と。


pre のなか。


ここも pre。


<html><body>
<h1>HTMLもそのまま表示</h1>
</body></html>



スクリプト実験そのに


Bloggerは便利なのだけれど、WYSIWYGエディタとHTML編集の2択なのが気にくわない。
はてなには、はてな記法というものがあって、簡単に編集できるようになっている。
そこで、はてな記法で書いたテキストを読んでBloggerにポストするスクリプトを書いてみた。
以下、実験

小見出し


さらに小さい見出し


  • BSD

    • FreeBSD

    • NetBSD



  • Linux



  1. Windows

  2. Mac

    1. Mac OSX





Windows

MS社

Mac

Apple社

Linux

コミュニティによる






OSWeb Server管理者
LinuxApacheroot
WindowsIISAdmin


引用病だね。
と。


pre のなか。


ここも pre。


<html><body>
<h1>HTMLもそのまま表示</h1>
</body></html>


2007-03-29

スクリプトから投稿

このエントリはスクリプトで投稿したものです。

2007-03-28

発音できるパスワード作成

昨日、ブログライクPingoo!に登録しましたが、これらのサイトはログインにSSLを使っていないというセキュリティの甘さがありました。
こんなところに同じパスワードを使ってログインしていると、一つばれると全てまきこまれてしまうわけで。
かといって、あんまり難しいパスワードを設定すると忘れてしまうし、そもそも、それがほんとに安全なパスワードかどうかはなかなか分かりません。

そこで、発音可能なパスワードを生成というユニークな機能をもったツールを紹介します。



APG (Automated Pasword Generator)
UNIX系はもちろんのこと、Windowsにも一応対応。
Gentoo LinuxのPortageツリーにも入っています。

主なオプション

-a (0|1)
アルゴリズムを選択(0:発音できるパスワード生成,1:完全にランダムなパスワード生成)
-k
cracklibで生成されたパスワードの安全性をチェック
-m num
生成するパスワードの最短の長さを指定
-x num
生成するパスワードの最長の長さを指定
-t
発音できるパスワードの発音を表示


サンプルコード
% apg -a 0 -k -m 10 -x 15 -t
WywriWiaccic (Wy-wri-Wiac-cic)
deekVishvem (deek-Vish-vem)
segIpbuelceet8 (seg-Ip-buel-ceet-EIGHT)
OppozebEelca (Opp-oz-eb-Eel-ca)
dyuvackniwideon (dyuv-ack-ni-wi-de-on)
wuedOsGattyal* (wued-Os-Gatt-yal-ASTERISK)

10文字以上、15文字以下のパスワードを生成しています。
()の外が生成されたパスワードで、()の中がその発音になっており、発音できるので覚えやすくなっています
・・・日本人には少し厳しいですが。
日本人むけにDQ1の復活の呪文みたいなパスワードを生成するプログラムがあるといいかもしれないですね。


2007-03-27

続きを読むとコメント履歴

クリボウの Blogger 入門: Blogger にも「続きを読む」
クリボウの Blogger 入門: Blogger にも「最近のコメント」
を参考に導入。
続きを読むは、テンプレの中にいれてみたけど、毎回、続きを読むが出るのが少し面倒なので変えるかもしれない。
コメント履歴は、独自改良(?)をほどこしてみた。


続きを読む機能から

とりあえず、「記事を投稿するときにすること」の前までクリボウの Blogger 入門: Blogger にも「続きを読む」の通りに実行。
毎回、続きを読むのタグをいれるのは面倒なのでテンプレにうめこみます。

<div class='post-body'>
<p><data:post.body/></p>
<div style='clear: both;'/> <!-- clear for photos floats -->
</div>
とあるのを
<div class='post-body'>
<p><data:post.body/></p>
<div style='clear: both;'/> <!-- clear for photos floats -->
<b:if cond='data:blog.pageType != "item"'>
<a expr:href='data:post.url'>続きを読む</a>
</b:if>
</div>

と変更。

あとは、投稿テンプレートに
<span class='fullpost'></span>
と書いてOK




次に、コメント履歴
クリボウの Blogger 入門: Blogger にも「最近のコメント」を見るとRSS→コメント一覧というふうになっている。
クリボウの Blogger Tips: 新 Blogger のフィード URL とパラメータにあるように、新Bloggerでは、コメントのフィードがとれる。
これを、埋め込みフィードリーダ(?)で表示してやればいいだけ。
設定→フィード→アドバンストモードでコメントのフィードの設定をいじるともっとよくなるかもしれない。

追記:記事を全部読んだらちゃんとこの方法も載ってたよ・・・。


HaloScanのコメントからBloggerのコメントに戻る

Daily HAKMEM: 更新Pingやらトラバ機能を導入で、トラバ機能を導入した時に付随して導入されたHaloScanのコメント機能は、いまいちなのでコメント機能だけBloggerのものに戻してみました。


一覧の時のコメント機能を戻します。


<!-- start haloscan (part 1) -->
<script src='http://www.haloscan.com/load/*****' type='text/javascript'> </script>
<a class='comment-link' expr:href='"http://www.haloscan.com/comments/*****/" + data:post.id + "/"' expr:onclick='"HaloScan(" + "\""+ data:post.id + "\"" + ");return false;"'>
<script type='text/javascript'>postCount(&#39;<data:post.id/>&#39;);</script>
</a> |
<a class='comment-link' expr:href='"http://www.haloscan.com/tb/*****/" + data:post.id + "/"' expr:onclick='"HaloScanTB(" + "\""+ data:post.id + "\"" + ");return false;"'>
<script type='text/javascript'>postCountTB(&#39;<data:post.id/>&#39;);</script>
</a>
</span>
<!-- end haloscan -->

こうなっているところを

<a class='comment-link' expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'><b:if cond='data:post.numComments == 1'>1 <data:top.commentLabel/><b:else/><data:post.numComments/> <data:top.commentLabelPlural/></b:if></a> |
<!-- start haloscan (part 1) -->
<script src='http://www.haloscan.com/load/*****' type='text/javascript'> </script>
<!--
<a class='comment-link' expr:href='"http://www.haloscan.com/comments/*****/" + data:post.id + "/"' expr:onclick='"HaloScan(" + "\""+ data:post.id + "\"" + ");return false;"'>
<script type='text/javascript'>postCount(&#39;<data:post.id/>&#39;);</script>
</a> -->
<a class='comment-link' expr:href='"http://www.haloscan.com/tb/******/" + data:post.id + "/"' expr:onclick='"HaloScanTB(" + "\""+ data:post.id + "\"" + ");return false;"'>
<script type='text/javascript'>postCountTB(&#39;<data:post.id/>&#39;);</script>
</a>
</span>
<!-- end haloscan -->

こう変更。

各々の記事表示時のコメント機能を戻します。

<!-- start haloscan (part 2) -->
<script src='http://www.haloscan.com/load/*****' type='text/javascript'> </script>
<span class='post-comment-link'>
<p><a class='comment-link' expr:href='"http://www.haloscan.com/comments/*****/" + data:post.id + "/"' expr:onclick='"HaloScan(" + "\""+ data:post.id + "\"" + ");return false;"'>
<script type='text/javascript'>postCount(&#39;<data:post.id/>&#39;);</script>
</a> |
<a class='comment-link' expr:href='"http://www.haloscan.com/tb/*****/" + data:post.id + "/"' expr:onclick='"HaloScanTB(" + "\""+ data:post.id + "\"" + ");return false;"'>
<script type='text/javascript'>postCountTB(&#39;<data:post.id/>&#39;);</script>
</a></p><br/>
</span>
<!-- end haloscan -->

こうなっているところを

<h4>
<b:if cond='data:post.numComments == 1'>
1 <data:commentLabel/>:
<b:else/>
<data:post.numComments/> <data:commentLabelPlural/>:
</b:if>
</h4>

<dl id='comments-block'>
<b:loop values='data:post.comments' var='comment'>
<dt class='comment-author' expr:id='"comment-" + data:comment.id'>
<a expr:name='"comment-" + data:comment.id'/>
<b:if cond='data:comment.authorUrl'>
<a expr:href='data:comment.authorUrl' rel='nofollow'><data:comment.author/></a>
<b:else/>
<data:comment.author/>
</b:if>
<data:commentPostedByMsg/>
</dt>
<dd class='comment-body'>
<b:if cond='data:comment.isDeleted'>
<span class='deleted-comment'><data:comment.body/></span>
<b:else/>
<p><data:comment.body/></p>
</b:if>
</dd>
<dd class='comment-footer'>
<span class='comment-timestamp'>
<a expr:href='"#comment-" + data:comment.id' title='comment permalink'>
<data:comment.timestamp/>
</a>
<b:include data='comment' name='commentDeleteIcon'/>
</span>
</dd>
</b:loop>
</dl>

<p class='comment-footer'>
<a expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'><data:postCommentMsg/></a>
<!-- </p> -->
<!-- start haloscan (part 2) -->
<script src='http://www.haloscan.com/load/*****' type='text/javascript'> </script>
<!-- <span class='post-comment-link'>
<p><a class='comment-link' expr:href='"http://www.haloscan.com/comments/*****/" + data:post.id + "/"' expr:onclick='"HaloScan(" + "\""+ data:post.id + "\"" + ");return false;"'>
<script type='text/javascript'>postCount(&#39;<data:post.id/>&#39;);</script>
</a> --> |
<a class='comment-link' expr:href='"http://www.haloscan.com/tb/*****/" + data:post.id + "/"' expr:onclick='"HaloScanTB(" + "\""+ data:post.id + "\"" + ");return false;"'>
<script type='text/javascript'>postCountTB(&#39;<data:post.id/>&#39;);</script>
</a></p><br/>
<!-- </span> -->
<!-- end haloscan -->

こう変更

表示されるフィードがコメントのフィードだけになっているので

<!-- start haloscan (part 3) -->

<a class='feed-link' href='http://www.haloscan.com/members/rss.php?user=*****' target='_blank'>Comment Feed (RSS)</a>
<!-- end haloscan -->

こうなっているところに

<a class='feed-link' expr:href='data:f.url' expr:type='data:f.mimeType' target='_blank'><data:f.name/> (<data:f.feedType/>)</a> |
<!-- start haloscan (part 3) -->

<a class='feed-link' href='http://www.haloscan.com/members/rss.php?user=*****' target='_blank'>Comment Feed (RSS)</a>
<!-- end haloscan -->

もとのフィードを追加。

ついでにお礼の意味でもこめて、HaloScanのボタンリンクをサイドバーに追加。

更新Pingやらトラバ機能を導入

クリボウさんのサイトを参考に更新Pingやらトラバ機能を導入を導入してみました。


まずは、更新Ping
cf.クリボウの Blogger 入門: 更新 Ping を打とう

BlogPeople - ブログ情報ポータル・ブログランキング
ここのソフトはWindows,Macのみ対応のようなのでNG

  1. ブログライクに登録
  2. Pingoo!に登録
  3. ブログライクPingoo!のPing URLを登録
  4. Pingoo!に載っていなくてPingLinerに載っているPingリストを手動で登録

としようとしたのだけど、PingLinerだけにあるMyblog japanドリコムRSS(Pingoo!に載ってる)に移行しちゃっているし、エキサイトブログ :ブログはカテゴリが決められていてどちらかといえばトラバライクなので却下。

Blog and ping | Pingoat
ここにもたくさんPing先が載ってるけれど、ほとんどが海外のサイトで日本のサイトはPingoo!に載っているものしかなさそうなので保留。

結局、ブログライクに設定したのはYahoo!Pingoo!だけになった。
http://api.my.yahoo.co.jp/rss/ping?u=あなたのサイトのRSSファイルのアドレス
という形式も使えるようだ。




次はトラバ。
cf.クリボウの Blogger 入門: トラックバック
HaloScan.com
参考のサイトに載っているのとは若干変更があったようだ。
登録してログインするとDashboardが表示される。
上のメニューからInstall→Blogger or Blogspot (New Version / Google Login)を選択→Next
ここでBlogger or Blogspot (Old Version)を選択すればおそらく参考サイトの設定になるのだろう。
一旦別のウィンドウでBloggerにログインして、テンプレート→HTMLの編集→テンプレートをすべてダウンロード
HaloScanに戻って、さっきダウンロードしたファイルを入れて、Upload Blogger Template
Download New Templateで、編集されたテンプレートをダウンロード
Bloggerに戻って、テンプレート→HTMLの編集でHaloScanでダウンロードしたテンプレートをアップロード

とりあえず、これでトラバ機能がついた。
他のブログに比べるとトラバ送るのも大変だが、どうせ頻繁に使う機能ではないしよしとする。

Blogger始めました

まだ、右も左も分からぬような状態なので
クリボウの Blogger 入門で、勉強中


クリボウの Blogger 入門: 文字化け対策、エンコードのこと
このページの設定は、3以外は既にできていた。