SVX日記
2007-12-15(Sat) Emacs + IIIMECF + ATOK X3 = シアワセ?
しかし、これといって買いたいと思うものがない。PC環境を充実しようにも、愛用のノートPCにはほとんど不満がないし、自宅のサーバは元気だし、バックアップ用のUSB接続のHDDは購入してしまっている。非常に面白そうではあるがPC Engines ALIXは、エンクロージャの発売が遅延している。気に入っているブラウザであるOperaはタダになってしまったし、最新ではないものの、電子辞書、電子地図も揃っている。
知識を得ようと、本を買おうと思っても、Linuxも電子工作も、本で得られる知識などタカがしれているから、買う気にならない。唯一、使用頻度の割に不満があるのはメーラであるが、先日から自作を始めてしまっており、金で解決できない……で、結局、時間を買えればなぁ、という考えに落ち着いてしまうのだ。
昔、オイラはMac(PowerBook550c)で3DCGをやっていた時期があったが、その頃は「トラブルが出たら、相談する前にATOKとRAM Doublerを外せ」という対処が「常識」になるくらい品質が悪かった(当然、買ってない)。しかし、最近はそのような悪い噂は聞かない。むしろ、変換精度には定評があるくらいだ。それなら、少し金をかけるにも悪くない選択肢である。
早速、ジャストシステムのサイトに行ってみる。買うなら、Linux版だな……あった、ATOK X3 for Linux。と、いうか、新バージョンが出たばかりのようだ。
値段は、ダウンロードでAAA優待版というのなら5,000円を切っているが、AAA優待版というものがよくわからない。既存ユーザ向けのアップグレードパッケージのようにも見えるが、インストール時には制限がないようなことも書いてあるし、そもそもLinux環境では制限の掛けようもないような気がする。しかし、金を出した挙げ句に使えなかったらバカバカしいので、通常版を購入した。7,350円。
2007-12-17(Mon) Emacs + IIIMECF + ATOK X3 = シアワセ!?
wbel4-co:/root/atok_install # tar xvfz atokx3.tar.gz
wbel4-co:/root/atok_install/ATOKX3 # ./setupatok.sh
This software is furnished under an end user agreement and may be used
or copied only in accordance with the terms of such license.
If you accept the terms of the license agreement,Please select "Yes".
If you do not accept the terms of the license agreement,Please select "No".
? (yes/no)yes
Preparing... ########################################### [100%]
1:iiimf-client-lib ########################################### [100%]
Preparing... ########################################### [100%]
1:iiimf-gtk ########################################### [100%]
Preparing... ########################################### [100%]
1:iiimf-protocol-lib ########################################### [100%]
Preparing... ########################################### [100%]
1:iiimf-server ########################################### [100%]
Preparing... ########################################### [100%]
1:iiimf-x ########################################### [100%]
"/etc/gtk-2.0/i386-redhat-linux-gnu/gtk.immodules" will be changed.
Preparing... ########################################### [100%]
1:atokx ########################################### [100%]
Installation has been completed.
次はIIIMFの設定。ここは大いにハマった。というか、まずLinuxにおける、日本語入力システムの仕組みがサッパリわかってなかった。一応、オイラはLinuxで飯を食ってはいるが、ウチは主にサーバ用途として売っているから、X上の日本語入力に関する知識はゼロなのだ。
いろいろ苦労して調べたところによるとEmacsとATOKの関係は「Emacs(エディタ)」 → (インクルード) → 「IIIMECF(Lispモジュール)」 → (TCP/IP) → 「IIIMF(入力メソッドデーモン)」 → (ダイナミックリンク) → 「ATOK(漢字変換システムライブラリ)」ということになっているらしい。Xで使う場合のことはよくわからんが、よく聞くSCIM-Anthyというのが、IIIMF-ATOKと同じ次元の概念ということになるな。
IIIMECFは、UnixドメインかTCP/IPのどちらかでIIIMFと通信を行う……のだが、まず、IIIMFをどう起動していいものやらわからない。いろいろ試したところ、単にコマンドラインから「# iiimd」とやれば、デーモンとして起動するみたいだ。
wbel4-co:/etc/iiim # vi iiimd.xml.conf
wbel4-co:/etc/iiim # diff -c iiimd.xml.conf.org iiimd.xml.conf
*** iiimd.xml.conf.org 2007-11-17 12:00:00.000000000 +0900
--- iiimd.xml.conf 2007-12-23 01:27:26.000000000 +0900
***************
*** 7,17 ****
type ... tcp : child directives: <hostname>, <port>
unix: child directives: <file>
-->
- <!--
<listen type="tcp">
! <hostname>localhost</hostname>
<port>9010</port>
</listen>
<listen type="unix">
<file>/var/run/iiim/.iiimp-unix/9010</file>
</listen>
--- 7,17 ----
type ... tcp : child directives: <hostname>, <port>
unix: child directives: <file>
-->
<listen type="tcp">
! <hostname>0.0.0.0</hostname>
<port>9010</port>
</listen>
+ <!--
<listen type="unix">
<file>/var/run/iiim/.iiimp-unix/9010</file>
</listen>
***************
*** 38,43 ****
--- 38,46 ----
<acl type="permit">
<hostname>127.0.0.1</hostname>
</acl>
+ <acl type="permit">
+ <hostname>192.168.1.123</hostname>
+ </acl>
</acls>
<!--
<auth> directive:
wbel4-co:/etc/iiim # iiimd
wbel4-co:/etc/iiim # netstat -an | grep 9010
tcp 0 0 0.0.0.0:9010 0.0.0.0:* LISTEN
次は、Emacsのインストール。ちょっと古いバージョンだが、ディスク上に置いてあったパッケージをそのまま使った。emacs-elをインストールするのは、IIIMFの動作に必要なMule-UCSモジュールが含まれているからである。
wbel4-co:/root # rpm -Uvh /mnt/bin2/WhiteBox/RPMS/emacs-21.3-19.EL.1.i386.rpm /mnt/bin2/WhiteBox/RPMS/emacs-common-21.3-19.EL.1.i386.rpm /mnt/bin4/WhiteBox/RPMS/emacs-el-21.3-19.EL.1.i386.rpm
警告: /mnt/bin2/WhiteBox/RPMS/emacs-21.3-19.EL.1.i386.rpm: V3 DSA signature: NOKEY, key ID 73307de6
Preparing... ########################################### [100%]
1:emacs-common ########################################### [ 33%]
2:emacs ########################################### [ 67%]
3:emacs-el ########################################### [100%]
wbel4-co:/root # emacs test.txt
次はIIIMECFのインストール。パッケージに添付のREADMEにしたがって、バイトコンパイル、インストールする。
wbel4-co:/root/atok_install # tar xvfz IIIMECF-0.73.tar.gz
wbel4-co:/root/atok_install/iiimecf # emacs -q --no-site-file -batch -l iiimcf-comp.el
Remove old byte-compiled files-----
Compiling 1st stage-----
While compiling the end of the data in file /root/atok_install/iiimecf/lisp/iiimp.el:
** The following functions are not known to be defined:
find-coding-system, iiimp-coding-system-or-name-p,
make-network-process, char-to-ucs, ucs-to-char
Wrote /root/atok_install/iiimecf/lisp/iiimp.elc
While compiling the end of the data in file /root/atok_install/iiimecf/lisp/iiimcf.el:
** The following functions are not known to be defined:
event-to-character, character-to-event, event-key,
dispatch-event, next-event,
iiimcf-server-control-get-hotkeys-by-label
Wrote /root/atok_install/iiimecf/lisp/iiimcf.elc
While compiling iiimcf-UI-insert-preedit in file /root/atok_install/iiimecf/lisp/iiimcf-UI.el:
** reference to free variable jit-lock-first-unfontify-pos
** assignment to free variable jit-lock-first-unfontify-pos
Wrote /root/atok_install/iiimecf/lisp/iiimcf-UI.elc
While compiling the end of the data in file /root/atok_install/iiimecf/lisp/EIMIL.el:
** The following functions are not known to be defined:
compiled-function-arglist, compiled-function-instructions,
compiled-function-constants, compiled-function-stack-depth
Wrote /root/atok_install/iiimecf/lisp/EIMIL.elc
Wrote /root/atok_install/iiimecf/lisp/PCE.elc
While compiling the end of the data in file /root/atok_install/iiimecf/lisp/iiimcf-sc.el:
** The following functions are not known to be defined:
line-number-at-pos, maker-position, mark-position
Wrote /root/atok_install/iiimecf/lisp/iiimcf-sc.elc
wbel4-co:/root/atok_install/iiimecf # mkdir -p /usr/share/emacs/site-lisp/iiimecf
wbel4-co:/root/atok_install/iiimecf # cp lisp/* /usr/share/emacs/site-lisp/iiimecf
wbel4-co:/root/atok_install/iiimecf # ls /usr/share/emacs/site-lisp/iiimecf
合計 624
-rw-r--r-- 1 root root 44312 12月 9 08:54 iiimcf.el
-rw-r--r-- 1 root root 26937 12月 9 08:54 iiimcf-sc.el
-rw-r--r-- 1 root root 21739 12月 9 08:54 iiimcf-UI.el
-rw-r--r-- 1 root root 48519 12月 9 08:54 PCE.el
-rw-r--r-- 1 root root 28738 12月 9 08:54 EIMIL.el
-rw-r--r-- 1 root root 60143 12月 9 08:54 ChangeLog
-rw-r--r-- 1 root root 83174 12月 9 11:11 iiimp.el
-rw-r--r-- 1 root root 151532 12月 18 01:41 iiimp.elc
-rw-r--r-- 1 root root 33606 12月 18 01:41 iiimcf.elc
-rw-r--r-- 1 root root 17628 12月 18 01:41 iiimcf-UI.elc
-rw-r--r-- 1 root root 24439 12月 18 01:41 EIMIL.elc
-rw-r--r-- 1 root root 22077 12月 18 01:41 iiimcf-sc.elc
-rw-r--r-- 1 root root 37349 12月 18 01:41 PCE.elc
wbel4-co:/root # vi .emacs
;; .emacs
;;; uncomment this line to disable loading of "default.el" at startup
;; (setq inhibit-default-init t)
;; turn on font-lock mode
(when (fboundp 'global-font-lock-mode)
(global-font-lock-mode t))
;; enable visual feedback on selections
;(setq transient-mark-mode t)
;; default to better frame titles
(setq frame-title-format
(concat "%b - emacs@" system-name))
(global-set-key "\C-h" 'delete-backward-char)
(global-set-key "\C-z" 'scroll-down)
(global-set-key "\C-u" 'undo)
(global-set-key "\C-]" 'call-last-kbd-macro)
(menu-bar-mode nil)
(column-number-mode t)
(setq blink-matching-paren nil)
(setq default-tab-width 4)
(setq default-fill-column 64)
(setq text-mode-hook 'turn-on-auto-fill)
(setq make-backup-files nil)
(setq auto-save-default nil)
;; ATOK X3 for Linux
(setq iiimcf-server-control-hostlist '("localhost:9010"))
(require 'iiimcf-sc)
(setq iiimcf-server-control-default-language "ja")
(setq iiimcf-server-control-default-input-method "atokx3")
(setq default-input-method 'iiim-server-control)
(define-key global-map "\C-q" 'toggle-input-method)
冒頭は、WBELのEmacsパッケージのデフォルト設定。その後ろがオレ用設定。末尾の7行がIIIMECF用の設定なのだが、この設定を付加し、Emacsを起動、Ctrl+qでATOKを起動しようとすると……
Args out of range: 0, 9
2007-12-19(Wed) Emacs + IIIMECF + ATOK X3 = ちょっとシアワセ
で、先日の「Args out of range: 0, 9」を、どうにかしたい今日この頃なのであるが、Emacsは何をどう間違えたか、内部骨格がLISPである。設定ファイルもそうだし、今回のIIIMECFモジュールもそう。そして、問題のエラーを吐いているのもそうであろう。
オイラはLISPに対して、少なくない嫌悪感を抱いている。それは、1984年4月号のOh!mz掲載、祝一平氏としての初原稿「皿までどーぞ」(※LISPをボコボコに叩いている内容)を読んだ際の先入観にまで遡るのであるが、例え先入観なしであっても、カッコの多さだけでゲンナリな言語であることに間違いはない。
この問題解決のためには、多少なりともLISPを理解する必要がありそうだが、これから先の人生もLISPとは「決してお近づきになりたくない」と考えているので、間違っても基礎知識や文法を学ばず「コードの見た目」だけからどうにか回避方法を編み出すことにする。
まず、IIIMECFが起動しているかどうか確かめる……IIIMECFをいったん削除してから、Emacsを起動するというベタな方法で……おっと、挙動が変わった。どうも、IIIMECFは起動しているらしい。この調子でまったりと追い込んでいったところ、そもそもTCP/IPによるiiimdへの接続ができていないっぽいことが判明した。つーことは、アレか。.emacsの……
(setq iiimcf-server-control-hostlist '("localhost:9010"))
……が、効いていないということか。更に膨大な試行錯誤を繰り返すと、iiimcf-server-control-parse-hostnameという関数でコケているらしい。件の関数は、引数である"localhost:9010"から、tcp, localhost, 9010を切り出す処理をしているっぽいが、うまくいってないっぽい。正規表現が問題っぽいが、IIIMECFのバグなのかどうかも、よくわからないっぽいので、ちょっとやそっとイジっても直らないっぽい。なにしろ万事が「……っぽい」という状態なのでサクッとあきらめて、ズバッと10数行の関数を削除し、設定をジカ書きしてムリムリに回避である。
wbel4-co:/root/atok_install/iiimecf # vi lisp/iiimcf-sc.el
wbel4-co:/root/atok_install/iiimecf # diff -c lisp/iiimcf-sc.el.org lisp/iiimcf-sc.el
*** lisp/iiimcf-sc.el.org 2007-12-09 08:54:54.000000000 +0900
--- lisp/iiimcf-sc.el 2007-12-23 03:08:42.000000000 +0900
***************
*** 222,242 ****
;;;
(defun iiimcf-server-control-parse-hostname (hostname)
! (let (proto host port)
! (if (string-match
! (concat "^\\(?:\\(tcp:\\)?\\([a-zA-Z0-9\.-]+\\)\\(:[0-9]+\\)\\)\\|"
! "\\(?:\\(unix:\\)?\\([a-zA-Z0-9\./:-]+\\)\\)$") hostname)
! (progn
! (if (match-string 2)
! (setq proto "tcp"
! host (match-string 2 hostname)
! port (match-string 3 hostname)
! port (if (null port) iiimcf-server-control-default-port
! (string-to-number (substring port 1))))
! (setq proto "unix"
! host (match-string 5 hostname)))
! (list proto host port))
! (error "server name %s is not valid!" hostname))))
(defun iiimcf-server-control-setup-event-flow-mode (mes)
(setq iiimcf-server-control-dynamic-event-flow-p t))
--- 222,228 ----
;;;
(defun iiimcf-server-control-parse-hostname (hostname)
! (list "tcp" "localhost" 9010))
(defun iiimcf-server-control-setup-event-flow-mode (mes)
(setq iiimcf-server-control-dynamic-event-flow-p t))
wbel4-co:/root/atok_install/iiimecf # emacs -q --no-site-file -batch -l iiimcf-comp.el; cp lisp/* /usr/share/emacs/site-lisp/iiimecf
|[でも、]_へんかんしようとすると、じじょがねぇって、おこられるんすよ、あにき_|
-あ連R漢 (wbel4-co)EE-:**-F1 test.txt (Text Fill)--L1--C74--Top----
:: :辞書ファイルが設定されていません
と、またもやトラブルである。これにはまいった。X上で正しく動いているiiimdの「/proc/pid/maps」を見ると、確かにATOKの辞書にアクセスしている。しかし、フツーに自前で上げたデーモンのiiimdは、ATOKの辞書にアクセスしていない。確かに、辞書ファイルが見つからない状態にあるらしい。
iiimdはGPLなので、ATOKのパッケージ内にソースが含まれている。しかし、ATOKの辞書にアクセスするような設定を行っている部分がどうしても見あたらない。設定ファイルやソースに対し手当たり次第に「grep -ri atok *」するが全然出てこない。すると、クローズドソースのATOKライブラリに対する設定が必要なのか? もしそうだとしたら、手が出ないじゃん……と、絶望的な気分になったが、鼻血が出るほど考えてたら、straceで調査できる可能性があることに気づいた。
wbel4-co:/root/atok_install/iiimecf # strace -o iiimd.trace -f -p `pgrep iiimd`
Process 1927 attached with 3 threads - interrupt to quit
Process 1932 attached
Process 1933 attached
Process 1932 detached
Process 1070 detached
wbel4-co:/root/atok_install/iiimecf # pkill -9 strace
wbel4-co:/root/atok_install/iiimecf # view iiimd.trace
1932 stat64("/var/lib/iiim/le/atokx3/users/", 0xb7efea9c) = -1 ENOENT (No such file or directory)
1932 mkdir("/var/lib/iiim/le/atokx3/users/", 0755) = -1 ENOENT (No such file or directory)
1932 mkdir("/var/lib/iiim/le/atokx3/users/root/", 0700) = -1 ENOENT (No such file or directory)
wbel4-co:/root/atok_install/iiimecf # mkdir -p /var/lib/iiim/le/atokx3
wbel4-co:/root/atok_install/iiimecf # pkill iiimd
wbel4-co:/root/atok_install/iiimecf # iiimd
wbel4-co:/root # emacs test.txt
2007-12-20(Thu) Emacs + IIIMECF + ATOK X3 = 結構シアワセ
と、いうのも、オイラはブラインドタッチを習得すると同時に、カーソルキーやファンクションキー等の特殊キーとは訣別しているからである。思えば、ブラインドタッチを習得したのは、オイラが某務員だった頃、職場で一太郎V4をイヤイヤ使っていた頃だ。つまり、何が言いたいかというと、文節の調整、ひらがなカタカナ変換等、すべてコントロールキーによる操作でなければ、思考の流れが中断されてしまい、ATOKによる少々の変換効率の向上などは、全くの無価値になってしまうほど、生産性が落ちてしまうのである。
IIIMECFではデフォルトでこれらのキーが使えない。しかし、チョイチョイとイジればどうにかなりそうな気配を感じさせつつ、そこはそれLISPの文法を知らないオイラには、その小改造が非常に高い壁となってそびえるのである。
wbel4-co:/root/atok_install/iiimecf # vi lisp/iiimcf.el
wbel4-co:/root/atok_install/iiimecf # diff -c lisp/iiimcf.el.org lisp/iiimcf.el
*** lisp/iiimcf.el.org 2007-12-09 08:54:54.000000000 +0900
--- lisp/iiimcf.el 2007-12-23 03:33:55.000000000 +0900
***************
*** 284,289 ****
--- 284,302 ----
(defvar iiimcf-keycode-spec-alist
`((13 10 0)
+
+ (11 37 65535) ; Ctrl + k
+ (12 39 65535) ; Ctrl + l
+ (14 40 65535) ; Ctrl + n
+
+ (21 117 65535) ; Ctrl + u
+ (9 118 65535) ; Ctrl + i
+ (15 119 65535) ; Ctrl + o
+ (16 120 65535) ; Ctrl + p
+
+ (2 38 65535) ; Ctrl + b
+ (7 27 65535) ; Ctrl + g
+
(32 32)
,@(mapcar #'(lambda (x) (list x x 0))
(iiimcf-numseq 1 31))
wbel4-co:/root/atok_install/iiimecf # emacs -q --no-site-file -batch -l iiimcf-comp.el; cp lisp/* /usr/share/emacs/site-lisp/iiimecf
結局、これも書いてみれば、なんということはない修正だが、これまたかなり地獄を這いずり回った成果である。本当はCtrl+nは文節確定ではなく、次文節にしたいところだし、Ctrl+gでなくESCで変換状態解除→IME解除という動作、つまりはイヤイヤながら体に染みついてしまったMS-IMEと同じ動作をさせたいところであるが、とりあえず、LISPを読めないオイラには上記の改造が限度である。
だが、上記の設定が成功したトコロで、別の致命的な問題に突き当たってしまった。それは、IMEがオンの状態だと、半角スペースが入力できないという問題である。ここはShift+SpaceでIMEをスルーして半角スペースを入力できなければならない。特に、仕事で書くメールは等幅フォントでの読みやすさに配慮して、基本的に英単語の前後には半角スペースを置くことが慣例となっている。これまた、改善できないようだと、イチイチIMEを上げ下げする必要が生じ、やっぱり使い物にならない。
だが、この問題には心底疲弊させられた。何をやってもウンともスンともいわない。結局、あまりにも地獄から抜け出せないので、心を少々閻魔様に売り渡してしまった。LISP自体について、少々学び始めてしまったのである。オー、マイガー。
しかし、LISPを学んで、如何にコードを読めど、解決できない。Spaceキーは検知するのだが、どうしてもShiftキーと同時に押しているというコトを検知してくれない。せっかく、信念を曲げてまでLISPを学び始めたのに、この問題が解決できないとなれば、LISPの文法をストアしてしまった左脳の一部はどうすればいいんだ。無駄だ。無駄すぎる。歯磨きのCMで覚えてしまった、グリチルリチン酸ジカリウムという物質を覚えている以上に無駄だ。北京原人の本名であるシナントロプスペキネンシスという学名と一緒に単に捨ててしまいたい記憶に成り下がってしまうのか……。
……と、そこでフト気づいた。オイラはTERATERM上から作業をしているが、実際にどんなキーが飛んでいるのか? Shiftを併用しているのだから、大文字のSpace……が飛ぶワケはないッ!! そこで、わざわざssh接続をtelnet接続に切り替えて、tcpdumpを取ってモニタしてみた……変わってねぇ!! そもそも、端末からShiftが飛んでねぇんじゃん!!
こりゃ、まずはTERATERMをどうにかする必要があるってコトだ。TERATERMのマニュアルを読むと、イニシエのVT100互換の動作をさせるためなのか、特殊キーはすべてカスタマイズ可能になっているようだ。TERATERMはWindows上のどのようなキーの組み合わせも(Fnほか一部のキーは無理だが)、変換テーブルを経由して、接続相手に渡すことができる。それならばShift+Spaceを、いったん使用頻度の低い無関係のキーに割り振って、Emacs側でそれを検知すればいいんじゃねぇか?
SUZAKU:/cygdrive/c/Program Files/TTERMPRO $ diff KEYBOARD.CNF.org KEYBOARD.CNF
78,81c78,81
< ;F11 key
< F11=87
< ;F12 key
< F12=88
---
> ;F11 key (Ctrl + Henkan)
> F11=1145
> ;F12 key (Shift + Space)
> F12=569
ついでに、Ctrlキー+変換キーについても定義してみた。先まで、IMEのオンオフに便宜的にCtrl+qを割り当てていたが、やっぱりコレには変換キーを使いたい。んが、MS-IMEとは独立して利用したいので、Ctrl修飾を入れるのだ。これは、Ctrl+XF1でASKをオンオフするX68000とも少し似ているが、当然ながら、それは偶然ではない。なお、使用頻度の低いキーとしては、F11とF12を選択した。パンピーの中には、Shift+←/→で文節変換をしたい人も多いだろうが、これと同じ方法で可能だろう。
wbel4-co:/root/atok_install/iiimecf # diff -c lisp/iiimcf-sc.el.org lisp/iiimcf-sc.el
*** lisp/iiimcf-sc.el.org 2007-12-09 08:54:54.000000000 +0900
--- lisp/iiimcf-sc.el 2007-12-23 03:33:00.000000000 +0900
***************
*** 148,153 ****
--- 148,154 ----
(define-key map "\C-c\C-\\\C-i" 'iiimcf-server-control-change-input-method)
(define-key map "\C-c\C-\\\C-s" 'iiimcf-server-control-switch-le)
(define-key map "\C-c\C-\\\C-k" 'iiimcf-server-control-switch-keyboard)
+ (define-key map `[f12] 'iiimcf-server-control-keyforward)
map))
;; keymap for preedit state
wbel4-co:/root/atok_install/iiimecf # diff -c lisp/iiimcf.el.org lisp/iiimcf.el
*** lisp/iiimcf.el.org 2007-12-09 08:54:54.000000000 +0900
--- lisp/iiimcf.el 2007-12-23 03:37:06.000000000 +0900
***************
*** 548,553 ****
--- 561,567 ----
kmod (logior kmod
(or (nth 3 slot) 0))))
(if (and (null kcode) (numberp kchar)) (setq kcode 0))
+ (if (eq kcode 123) (setq kcode 32 kmod 1))
(if (numberp kcode)
(list (cons 0 kcode)
(cons 0 kchar)
2007-12-30(Sun) たぶんドルアーガのゴーストが持ってるアレを作る
あまり考えなしに作っていたら、カソードコモンなブツになっていた。こうなると、NPNでなく、PNPで引っ張る必要がある。2SC1815は大量に在庫しているが……と、どうにか、2SA1015が見つかった。よっしゃ。
次はランプの中の容積を考えながら、基板サイズを決定。容積は極めて限定されている。いつものことだが、かなり無理矢理に集積する。でも実は、オイラ的には、この配線パターンのデザインこそ一番楽しくコダわるところかもしれない。詰め将棋とかコードゴルフみたいでオモシロいんだよね。よし。どうにか詰め込んだ。
最近はやや収まったものの、オイラの息子のイッペイは、非常にコロコロと寝床を縦横無尽に転がるので、オイラが寝るときに、踏んだり蹴ったりしないよう、コレを持って寝床に向かうのである。で、枕元に置けば勝手に消える。おぉ、便利。
とりあえず、ファイル一式を置いておく。