2009-08-20

新版暗号技術入門 秘密の国のアリス

新版暗号技術入門 秘密の国のアリス、購入から 5 ヶ月経ってようやく読了。

これまでだいぶ長いこと曖昧な理解のままにしてきた暗号技術について、身近で使われる PGP, SSL/TLS の仕組みについて、靄が晴れるようにすっきりと理解できたと思う。

少しずつ読み進めて、時には睡眠誘導剤になったりw、理解の浅かったところを読み返しながらでしたけれど、ほんとうに読み易かった。

親切な作りというんでしょうか、章立ても、各パラグラフも、読者を決して置いてけぼりにしない、不安にさせない心配りが随所にあって、この著者(結城浩さん)の本ならば、どんな分野でも理解できちゃうんじゃないかと思ってしまうくらい。

ポイントごとに参考文献の紹介も挟まれており、更に理解を深めたい向きへの配慮も忘れられていません。(もちろん巻末にもまとめられている)

些細なことかも知れないけれど、索引も良かった。 読んでる最中には索引を引かず、ページを繰って読み返して理解を深めることにして、読了後に初めてじっくり索引を見ました。ほんとうは索引を引きたかったところも、ちょっと我慢して。期待してたんです、索引に。この著者の索引は、きっと「使える」索引だろうと。思ったとおりでした。形だけじゃない、実用的な索引でした。

ぼくはまったく数学が得意なほうではないのに、ここまできちんと読ませる著者の文章力・構成力はすごいと思う。ぼくは結城さんのファンなので多少バイアスかかってるかも知れないけど。

前から気になってた数学ガール のシリーズも読んでみる予定です。数学好きになっちゃったりしてね。

内容とは関係ないけど、この本の背表紙の製本方法(?)は、(名称は忘れちゃった)ちょっと特殊なものらしく、著者と編集者のこだわりの作りなんだなぁと感じました。読み易いし使い易いです、物理的な意味で。

2009-08-18

AOD250 のキーボードを US-ASCII 配列に換装してみた

AOD250 US-ASCII Keybaord

Acer AspireOne D250 (AOD250) のキーボードを、ヤフオクで買った US-ASCII 配列の英語キーボードに換装してみました。

英語キーボードは AOA150 用のものがそのまま使えます。A150, D150 は共通として売っているものが多いようなので、加えて D250 も共通の部品ということになると思います。

キーボードの外し方とコネクタの差し方は AOA150 と AOD250 は少し異なるようです。

キーボードの外し方

AOD250 キーボードを抑えるツメ

AOD250 の場合、キーボードを抑えている可動するツメは F8 キーの上にある一カ所だけです。

加えて、キーボードの両サイドに二カ所ずつ、固定のツメがあります。

外すためのポイントは、F8 キー上のツメを液晶側へ押しながら、キーボードを∩状にたわませることです。

F8 キーのすぐ隣りあたりにクレジットカード状のものを軽く差し込んで液晶側に倒し、キーボードが上へ浮き上がるように梃子の力を加えておきます。液晶は最大限に開いておくのが良いです。

その状態で、マイナスドライバなどのしっかり厚みと幅のあるもので F8 キー上のツメを液晶側に押してあげると、キーボードが∩状にたわんで、「ぽこっ」と浮きます。

F8 キー上のツメから外れたら、あとは∩状のたわみを維持しながら、両サイドのツメから抜き出すだけです。

コネクタの差し替え

コネクタを抑えるツメ

キーボードを浮かせたら、こんどはキーボードと本体を繋いでいるリボン状のケーブルをコネクタから外します。

AOA150 では「コネクタで挟んである」ようですが、AOD250 は違いました。挟んであるのは同じなのですが、解放するには、コネクタの両サイドにあるツメをスライドさせます。

両サイドのツメをスライドさせると、するっと抜けます。

接続するときも同様に、ケーブルをしっかり奥まで入れてから、ツメをスライドさせて固定します。

キーボードの戻し方

戻すのは簡単で、すべてのツメにはまるように押し込むだけです。

…中のリボン状のケーブルが変な形に折れないことを祈りながら。(-人-)

参考サイト

2009-08-10

espresso-mode

espresso-mode is a Javascript-mode for GNU Emacs.

これくらいシンプル(?)なモードも良い気がしてきた。ちょっと使ってみようかな。js2-mode の高機能 + 柔軟なインデンテーションに慣れていると厳しいかな…。

追記@Tue Mar 02 07:49:49 2010

Emacs 23 くらいから espresso-mode は javascript-mode と名前を変えて標準ディストリビューションの lisp/progmodes/js.el に含まれています。
espresso-なんたらの prefix が js-なんたらに変わった程度の変更なので、単純に prefix を置換すれば周辺の elisp も動くようです。

2009-08-01

NTEmacs 23 を作ってみたメモ。

NTEmacs 23.1

Emacs 23.1 がリリースされたので、Windows 用の NTEmacs 23.1 をビルドするときの個人的な手順メモ。

IME 対応などのパッチを使わない点を除けば、上記のページで広松さんが公開してくださっている手順と同じです。

ほかの部分も、ぼくが NTEmacs 22 を作っていた上記の手順とだいたい同じです。

Cygwin

コンパイルには Cygwin 1.5 の gcc 3.4.4-3, MinGW パッケージ, GNU Make 3.80 を使います。

$ uname -a
CYGWIN_NT-5.1 aspirin 1.5.25(0.156/4/2) 2008-11-18 15:24 i686 Cygwin

$ gcc --version
gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ make --version
GNU Make 3.80
Copyright (C) 2002  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

$ cygcheck -s | egrep '^(gcc|mingw|make)'
gcc                     3.4.4-3
gcc-core                3.4.4-3
gcc-g++                 3.4.4-3
gcc-mingw               20040810-1
gcc-mingw-core          20050522-1
gcc-mingw-g++           20050522-1
make                    3.80-1
mingw-bzip2             1.0.5-3
mingw-libbz2-devel      1.0.5-3
mingw-libbz2_1          1.0.5-3
mingw-runtime           3.15.2-1
mingw-zlib              1.2.3-3
mingw-zlib-devel        1.2.3-3
mingw-zlib0             1.2.3-3

Cygiwn 1.5 は UTF-8 Cygwin の cygwin1.dll を利用させてもらっています。たぶん NTEmacs のビルドには関係ないですが。
Cygwin 1.7 は現時点でリリースされておらず、環境を作っていないので状況は分かりません。もうすぐリリースなのかな。もう MinGW アプリケーション作れるのだろうか…。

gcc は alternatives 対応直前の gcc-3.4.4-3 を使います。一連の gcc のパッケージのバージョンを keep しておきます。 
gcc-3.4.4-999 を使う場合には alternatives の symlink (ショートカット)をどうにかするか、configure.bat を修正して、COMPILER=gcc-3 を指定する必要があると思います(未確認)。
gcc-4 系は現時点では MinGW アプリケーションを作るための "-mno-cygwin" フラグがサポートから外されているので使用できません。

MinGW はどのパッケージが最低限必要なのか調べていないので、mingw と名のつくパッケージを適当に…。

GNU Make は、emacs/nt/INSTALL によれば 3.81 は使えないらしいので 3.80 に keep してあります。

その他の Cygwin のパッケージは、サーバ系と X 関係、フォント、グラフィック関係を除いて自分が使うものをテキトーに入れてます。

画像サポート用のライブラリ DLL

emacs/nt/INSTALL の "* Optional image library support" を参考にして、DLL とヘッダファイルを用意します。

実験的サポートの SVG は入れてません。

$ \ls -Rgo src/GnuWin32
src/GnuWin32:
total 3524
drwx------+ 3      0 Feb  8 16:57 DLL
-rwx------+ 1 189242 May 15  2005 jpeg-6b-4-bin.zip
-rwx------+ 1  38186 May 15  2005 jpeg-6b-4-lib.zip
-rw-r--r--  1 401037 Jun  5 05:53 libpng-1.2.37-bin.zip
-rw-r--r--  1 134939 Jun  5 05:55 libpng-1.2.37-lib.zip
-rwx------+ 1 285963 Mar  2  2007 libungif-4.1.4-1-bin.zip
-rwx------+ 1  12272 Mar  2  2007 libungif-4.1.4-1-lib.zip
-rwx------+ 1 928480 Mar  2  2007 libungif-4.1.4-1-src.zip
-rwx------+ 1 687244 Mar 31  2006 tiff-3.8.2-1-bin.zip
-rwx------+ 1  38372 Mar 31  2006 tiff-3.8.2-1-lib.zip
-rwx------+ 1  35884 Feb 15  2005 xpm-3.5.1-1-bin.zip
-rwx------+ 1  42484 Feb 15  2005 xpm-3.5.1-1-lib.zip
-rwx------+ 1 622191 Feb 15  2005 xpm-3.5.1-1-src.zip
-rwx------+ 1  99777 Jul 26  2005 zlib-1.2.3-bin.zip
-rwx------+ 1  71569 Jul 26  2005 zlib-1.2.3-lib.zip

src/GnuWin32/DLL:
total 1297
drwx------+ 2      0 May  9  2008 X11
-rwx------+ 1  16189 Oct 25  2005 gif_lib.h
-rwx------+ 1   1800 May 14  2005 jconfig.h
-rwx------+ 1  14488 May 15  2005 jerror.h
-rwx------+ 1  14567 May 14  2005 jmorecfg.h
-rwx------+ 1 127488 May 15  2005 jpeg62.dll
-rwx------+ 1  46359 May 15  2005 jpeglib.h
-rwx------+ 1   2245 Jun  4 22:41 libpng12-config
-rwx------+ 1   4645 Jun  4 22:55 libpng12.def
-rwx------+ 1 260096 Jun  4 22:48 libpng12.dll
-rwx------+ 1 376832 Mar 28  2006 libtiff3.dll
-rwx------+ 1  31232 Mar  1  2007 libungif4.dll
-rwx------+ 1 153839 Jun  4 22:40 png.h
-rwx------+ 1  45382 Jun  4 22:40 pngconf.h
-rwx------+ 1   4959 Oct 25  2004 simx.h
-rwx------+ 1  33725 Dec 27  2005 tiff.h
-rwx------+ 1   2968 Mar 23  2006 tiffconf.h
-rwx------+ 1  23216 Mar 28  2006 tiffio.h
-rwx------+ 1    410 Mar 23  2006 tiffvers.h
-rwx------+ 1  52224 Feb 13  2005 xpm4.dll
-rwx------+ 1  75264 Jul 20  2005 zlib1.dll

src/GnuWin32/DLL/X11:
total 16
-rwx------+ 1 16286 Jan 25  2004 xpm.h

Emacs のソースのチェックアウト

リリースの tarball を入手するか、CVS / git リポジトリから emacs モジュールをチェックアウトします。

Emacs 23.1 で使用する branch は EMACS_23_1_RC です。

CVS
$ cd ~/src/anoncvs
$ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/emacs \
> checkout emacs
$ cd emacs
$ cvs update -r EMACS_23_1_RC
git
$ cd ~/src/git
$ git clone git://git.savannah.gnu.org/emacs.git
$ cd emacs
$ git checkout --track origin/EMACS_23_1_RC

gmake.defs の修正

Cygwin 環境でビルドするために nt/gmake.defs を修正します。Cygwin で検索すると出てくるので分かりやすいです。

$ cd nt
$ git --no-pager diff gmake.defs
diff --git a/nt/gmake.defs b/nt/gmake.defs
index 018ca15..d860c42 100644
--- a/nt/gmake.defs
+++ b/nt/gmake.defs
@@ -84,9 +84,9 @@ MAKETYPE=gmake
 # remedied before putting this cygpath kludge back in.

 # Convert CURDIR to native file name, if in Cygwin format
-#ifeq "$(shell cygpath $(CURDIR))" "$(CURDIR)"
-#CURDIR                := $(shell cygpath -m $(CURDIR))
-#endif
+ifeq "$(shell cygpath $(CURDIR))" "$(CURDIR)"
+CURDIR         := $(shell cygpath -m $(CURDIR))
+endif

 THISDIR                = .

@@ -276,7 +276,7 @@ ifeq "$(ARCH)" "i386"
 ifdef NOOPT
 ARCH_CFLAGS     = -c $(DEBUG_FLAG) $(NOCYGWIN)
 else
-ARCH_CFLAGS     = -c $(DEBUG_FLAG) $(NOCYGWIN) $(MCPU_FLAG) -O2 \
+ARCH_CFLAGS     = -c $(DEBUG_FLAG) $(NOCYGWIN) $(MCPU_FLAG) -O3 \
                  # -fbuiltin \
                  # -finline-functions \
                  # -fomit-frame-pointer

上記後半の -O3 optimization の修正と、以下の configure.bat の修正は必要なわけではないです。

$ git --no-pager diff configure.bat
diff --git a/nt/configure.bat b/nt/configure.bat
index 56b8570..21e683a 100755
--- a/nt/configure.bat
+++ b/nt/configure.bat
@@ -325,10 +325,10 @@ set COMPILER=gcc
 echo Using 'gcc'
 rm -f junk.c junk.o
 Rem It is not clear what GCC version began supporting -mtune
-Rem and pentium4 on x86, so check this explicitly.
+Rem and prescott on x86, so check this explicitly.
 echo main(){} >junk.c
-echo gcc -c -O2 -mtune=pentium4 junk.c >>config.log
-gcc -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1
+echo gcc -c -O3 -mtune=prescott junk.c >>config.log
+gcc -c -O3 -mtune=prescott junk.c >>config.log 2>&1
 if not errorlevel 1 goto gccMtuneOk
 echo The failed program was: >>config.log
 type junk.c >>config.log
@@ -336,8 +336,8 @@ set mf=-mcpu=i686
 rm -f junk.c junk.o
 goto gccdebug
 :gccMtuneOk
-echo GCC supports -mtune=pentium4 >>config.log
-set mf=-mtune=pentium4
+echo GCC supports -mtune=prescott >>config.log
+set mf=-mtune=prescott
 rm -f junk.c junk.o
 :gccdebug
 rem Check for DWARF-2 debug info support, else default to stabs

なんでいじったのか覚えていないけど、たぶん Cygwin 1.5 の gcc-4 が使えるようになるのを期待して準備していたような…。 make 時に ARCH_CFLAGS を指定するほうが綺麗なのかも。

configure

$ cd ~/src/git/emacs/nt
$ LANG=C ./configure.bat --with-gcc --no-cygwin --no-debug \
> --cflags=-I/cygdrive/c/Users/yu-ji/src/GnuWin32/DLL \
> --prefix=C:/emacs/23 \
> 2>&1 | tee config.log.yu-ji

うまくいけば "building with PNG support" とかの表示とともに makefile ができあがります。

make して install

$ LANG=C make bootstrap
$ LANG=C make info
$ LANG=C make install

info を作るとき以外は LANG=C の指定いらないかも。tarball からのインストールなら bootstrap は不要らしいです。

bootstrap のあと、../src/oo-spd/i386/emacs.exe が出来てるはずなので -q つけて起動したりして、ちゃんと動くか確認します。

画像用の DLL を PATH の通ったディレクトリか emacs.exe と同じディレクトリにコピーして、NTEmacs 自体のインストールはこれで完了です。

その他の elisp とか

以下はぼくが使っている elisp とかのインストール手順メモ。

emacs-clientw.vbs

上記ページを参考にして emacs-clientw.vbs を使っています。
Emacs の server がいれば emacsclientw -n を、いなければ runemacs するスクリプトです。

'
' C:\emacs\23\bin\emacs-clientw.vbs
'
Set objShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

If WScript.Arguments.Count = 1 Then
  strComputer = "."
  Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
  Set colItems = objWMIService.ExecQuery("Select * From Win32_Process")
  Dim isRunning
  isRunning = False
  For Each objItem in colItems
    If InStr(objItem.CommandLine, "emacs.exe") Then
      isRunning = True
    End If
  Next
  If isRunning Then
    objShell.Run("""" & fso.GetParentFolderName(WScript.ScriptFullName) & "/emacsclientw.exe"" -n """ & WScript.Arguments(0) & """")
  Else
    objShell.Run("""" & fso.GetParentFolderName(WScript.ScriptFullName) & "/runemacs.exe"" """ & WScript.Arguments(0) & """")
  End If
Else
  objShell.Run(fso.GetParentFolderName(WScript.ScriptFullName) & "/runemacs.exe")
End If

個人的には Emacs の外からファイルを開かせることはそれほど無いのですが、やっぱり使えないと困るときもあるので。

APEL

Daredevil SKK で使われている APEL

$ cd ~/src/anoncvs/apel
$ cvs update -dP
$ cvs diff -u makeit.bat | nkf -w
Index: makeit.bat
===================================================================
RCS file: /cvs/root/apel/makeit.bat,v
retrieving revision 1.1
diff -u -r1.1 makeit.bat
--- makeit.bat  1 Feb 2001 03:19:36 -0000       1.1
+++ makeit.bat  25 Mar 2009 01:27:54 -0000
@@ -102,9 +102,10 @@
 rem --- なお、DEFAULT_MAKE_ARG に可能な値は make1.bat を御覧ください。
 rem --- (Please see make1.bat for possible values of DEFAULT_MAKE_ARG.)

-set PREFIX=
-set EMACS=
-set LISPDIR=
+set PREFIX=c:\emacs
+set EMACS=%PREFIX%\23\bin\emacs.exe
+set LISPDIR=%PREFIX%\site-lisp
+set VERSION_SPECIFIC_LISPDIR=%PREFIX%\23\site-lisp
 set DEFAULT_MAKE_ARG=


$ ./makeit.bat install
Daredevil SKK / ddskk

Emacs 内では ddskk を、Windows の他のアプリケーションでは skkime を使っています。

$ cd ~/src/anoncvs/skk/main
$ cvs update -dP
$ cvs diff -u makeit.bat | nkf -w
Index: makeit.bat
===================================================================
RCS file: /circus/cvsroot/skk/main/makeit.bat,v
retrieving revision 1.4
diff -u -r1.4 makeit.bat
--- makeit.bat  3 Oct 2008 15:03:39 -0000       1.4
+++ makeit.bat  25 Mar 2009 01:39:39 -0000
@@ -102,9 +102,10 @@
 rem --- なお、DEFAULT_MAKE_ARG に可能な値は make1.bat を御覧ください。
 rem --- (Please see make1.bat for possible values of DEFAULT_MAKE_ARG.)

-set PREFIX=
-set EMACS=
-set LISPDIR=
+set PREFIX=c:\emacs
+set EMACS=%PREFIX%\23\bin\emacs.exe
+set LISPDIR=%PREFIX%\site-lisp
+set VERSION_SPECIFIC_LISPDIR=%PREFIX%\23\site-lisp
 set DEFAULT_MAKE_ARG=


$ ./makeit.bat install
color-theme

site-lisp 以下に展開するだけ。

emacs-w3m
$ cd ~/src/anoncvs/emacs-w3m
$ cvs update -dP
$ ./configure \
> --with-lispdir=/cygdrive/c/emacs/23/site-lisp/w3m \
> --infodir=/cygdrive/c/emacs/23/info \
> 2>&1 | tee config.log.yu-ji
$ make
$ make install
Mew
$ cd ~/src/anoncvs/mew
$ cvs update -dP
$ ./configure \
 --prefix=/cygdrive/c/emacs/23 \
 --with-elispdir=/cygdrive/c/emacs/23/site-lisp/mew \
 --with-etcdir=/cygdrive/c/emacs/23/site-lisp/mew/etc \
 --infodir=/cygdrive/c/emacs/23/info \
 --mandir=/usr/man \
 2>&1 | tee config.log.yu-ji
$ make
$ make install && make install-info && make install-jinfo

info を自分で作るときは info/Makefile を修正したり、Cygwin じゃなくてコマンドプロンプトから作ったりの手順が必要っぽいです。環境によるかも。ちゃんと調べてないですが。

おしまい。

別の記事で載せてるフォント指定の設定はそのうち整理します。

関連記事

追記@Sun Aug 30 18:17:22 2009

「Emacs 23 で使用する branch は EMACS_23_1_RC」と書いてたのを修正。23.2 で新しい branch を切るか、このまま trunk から出すか、まだ決まってないっぽいです。メンテナは trunk からのつもりっぽい?

追記@Mon Jul 05 10:11:06 2010

この記事は Cygwin 1.5 の gcc 3 系を使って MinGW アプリケーションとして Emacs をビルドするものです。
Cygwin 1.5 の gcc 4 系および Cygwin 1.7 の gcc は MinGW アプリケーションのコンパイルをサポートしていません。

新たにビルド環境を整えるかたには、MSYS + MinGW によるビルドをお薦めします。

"msys mingw gcc emacs" あたりでぐぐってくだささい…。