2014年5月25日日曜日

Common Lisp のスレッド処理




Common Lispにおけるスレッド処理は処理系依存であり、利用する場合はなかなか悩ましい問題です。そんな頭痛の種を解決してくれる一つの手段として、bordeaux-threads というライブラリがあります。

bordeaux-threads は処理系依存のスレッド処理をラップして、共通の記述が可能となる事を目的として開発されたライブラリです。bordeaux-threads は QuickLisp から導入可能です。
(ql:quickload :bordeaux-threads)

利用イメージは以下となります。



2014年5月20日火曜日

*突然*キーボード*英語*配列*




Red Hat Enterprise Linux, CentOS, Fedora 関係なく起こります。

OSを再起動したら突然、キーボードの配列が英語モードになってる現象。特にメディアからインストールした直後の環境を yum update すると起きる気がします。

多分何かのパッケージがアップデートされる時に pre/post スクリプトが走って設定が変更されてしまうんだと思います。

直すのは簡単で、system-config-keyboard を起動して、再度日本語キーボードを選択してやればOKです。

このコマンドは yum install system-config-keyboard でインストールできます。

MacBook AirにFedoraをインストールしたら久々に発生したのでメモです。


2014年5月19日月曜日

Fedora20 on Mac Book Air Late 2010




ちょいと古めのMBA2010を借りたのですが、Mac OS X の使い勝手に慣れる事ができず、我慢できず半日で Fedora20 をインストールしてしまいました。


インストール自体は簡単で、

・USBドライブを接続し
・FedoraのメディアをDVDへ焼いものを突っ込んで
・起動時に Option キーを押しっぱなし
・ブートメニューが出てきたら「UEFI」を選択
・Linuxインストーラーが起動 → あとは普通にインストール

パーティションは以下のようにした(Mac OSは削除
Device           Start          End   Size Type
/dev/sda1         2048       411647   200M Apple HFS/HFS+
/dev/sda2       411648      1435647   500M Microsoft basic data
/dev/sda3      1435648      9627647   3.9G Linux swap
/dev/sda4      9627648    214427647  97.7G Microsoft basic data
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       200M   15M  186M   8% /boot/efi
/dev/sda2       477M   96M  352M  22% /boot
/dev/sda4        96G  7.4G   84G   9% /
sda2,sda4 のパーティションが変ですが、ext4 で普通に使えてます。

インストール直後の状態で、モニタ出力、WiFiは問題なく使えています。
スピーカーとカメラも使えます。内蔵マイクは認識して使えるのですが、ゲインが低い?のか拾った音がやけに小さいです。こちらは後で調査します。

キーマップは jp106 として認識され、英数・かなキーは機能していません。
ファンクションキーはそのまま押すと、音量UP/Down、輝度UP/DOWNとなりちゃんと動きます。普通のF1,2として使う場合は、Fnキーと合わせて押すと使えます。
Zenkaku_Hankaku がないのは不便なので、以下のように割り当てました。また、Alt_Lの位置が使いにくいので、英数キーもAlt_Lとして機能するように設定してあります。

~/.xmodmaprc
keycode 130 = Zenkaku_Hankaku
keycode 131 = Alt_L
pointer = 1 2 3 5 4 7 6 8 9 10 11 12

最後の pointer は、タッチパッドを Natural Scrolling
ちなみに option キーは キーコード64でデフォルトはAlt_Lにマップされ、左commondキーは133でSuper_Lになります。別のキーにマップする場合はこのコードを操作してください。

F18以降は$HOME/.xmodmaprc を自動で読み込まなくなっていまるので、 gnome-session-properties から セッション起動時に読み込まれるコマンドを追加してあげてください。

タッチパッドは予想外にちゃんと機能します。2本クリックで右クリック、3本クリックで真ん中クリックとなります。2本スライドでUP/DOWNスクロールしてくれます。ただしデフォルトではMacとは逆方向のスクロールになるので、上記の pointer 設定をいれると Mac と同じように動作します。

ふたを閉じるとスリープして、開けると復活するのもMBAと同じように挙動します。

あとは、MiniDisplayポートの出力が試したいのですが、デバイスを持っていないので今度試すことにします。


まだ1日ほど設定の入れ込みを含めて使っただけですが、個人的にはかなり良いです。ThinkPad がノートPCとして終わってしまったので、後継機としてMBAは十分ありな選択肢な気がします。


2014年5月15日木曜日

「オープンソース・クラウド基盤 OpenStack入門」を執筆しました




中井さんと共同執筆させていただきました。Amazonにて予約が可能となっています。前書きと目次についてはこちらで紹介されています。

まだ発売前ですが、ベストセラーの1位となっていました。この時点ではまだ表紙ができていなかったので、下の画像ははめ込みです。

前書きでも書きましたが、OpenStackは進歩が早く、まとまった情報を(特に日本語で)入手することが難しいのが現状です。この書籍でそんな状況が少しでも改善されればと考え中井さんと共に執筆いたしました。OpenStackやクラウドに興味のある方はぜひ読んでみてください。


2014年5月11日日曜日

gnupack devel 12.03 非公式アップデート




*gnupack 非公式アップデート版に関する最新バージョンは こちら をご確認ください*

アップデートの概要 12.02 to 12.03

・term.el系(term/ansi-term/multi-term)で起動時、もしくは特定ディレクトリへの cd でエラーになる
・term.el系(term/ansi-term/multi-term)で、コマンド実行時に C:/bin/bash を呼び出そうとしてエラー

以下の問題を修正したものになります。
gnupack devel 12.02 非公式アップデート で確認されている不具合

ダウンロードはこちらから。
gnupack_devel-12.03-unofficial.exe


2014年5月10日土曜日

gnupack devel 12.02 非公式アップデート で確認されている不具合




gnupack devel 12.01 非公式アップデート にて確認している不具合です。次回リリースで修正する予定です。

■term.el系(term/ansi-term/multi-term)で起動時、もしくは特定ディレクトリへの cd でエラーになる
No such directory found via CDPATH environment variable
http://aikotobaha.blogspot.jp/2014/05/term-ansi-term-multi-term-cygwin.html で回避できます。


■term.el系(term/ansi-term/multi-term)で、コマンド実行時に C:/bin/bash を呼び出そうとしてエラーになる
私は多段SSHを呼び出したときに発生しました。init.el もしくは、init-loader 化に以下を加えると回避できます。
(setenv "SHELL" "/bin/bash")


term, ansi-term, multi-term + cygwin-mount.el で発生する No such directory found via CDPATH environment variable について




少々長いタイトルになってしまいましたが、題記の通りです。cygwin-mount.el を有効化した環境で、term.el系を起動したタイミングや、特定ディレクトリへ cd したタイミングで発生します。

No such directory found via CDPATH environment variable

この現象は、ターミナル側の cd を捕捉して、Emacs 側でも cd を動かそうとして発生しますので、.emacs や init.el で、

;; term側 cd 捕捉によるEmacs側の cd を抑制(term.elで定義されている関数)
(fset 'term-command-hook '(lambda (x)))

として、ターミナル側の入力をキャッチしている関数を無効化すると、とりあえずは現象を回避できます。

この根本原因は、cygwin-mount.el によって変換される cygwin マウントポイント となるディレクトリを直接指定する場合に、末尾に / つきパスでないと変換してくれない、という仕様によるもののようです。

このようなマウントポイントの場合、
(shell-command "df -h")

ファイルシス                                 サイズ  使用  残り 使用% マウント位置
C:/gnupack_devel-12.02/app/cygwin/cygwin/bin   230G  153G   77G   67% /usr/bin
C:/gnupack_devel-12.02/app/cygwin/cygwin/lib   230G  153G   77G   67% /usr/lib
C:/gnupack_devel-12.02/app/cygwin/cygwin       230G  153G   77G   67% /
C:/gnupack_devel-12.02/app/cygwin/local        230G  153G   77G   67% /usr/local
C:/gnupack_devel-12.02/home                    230G  153G   77G   67% /home


これは上手くいきますが、
(cd "/home/")

"c:/gnupack_devel-12.02/home/"

これはエラーになります。
(cd "/home")

Debugger entered--Lisp error: (error "No such directory found via CDPATH environment variable")
  signal(error ("No such directory found via CDPATH environment variable"))
  error("No such directory found via CDPATH environment variable")
  ad-Orig-cd("/home")
  cd("/home")
  eval((cd "/home") nil)
  eval-last-sexp-1(t)
  eval-last-sexp(t)
  eval-print-last-sexp()
  call-interactively(eval-print-last-sexp nil nil)


このあたりをいじるとよくなるかもしれないですが、どんな影響があるかわからないので、今回の対策としました。

cygwin-mount-activate is an interactive Lisp function in
`cygwin-mount.el'.

(cygwin-mount-activate)

Activate cygwin-mount- and cygwin-style-handling.

file-name-handler-alist

(("\\(?:\\.dz\\|\\.xz\\|\\.lzma\\|\\.lz\\|\\.g?z\\|\\.\\(?:tgz\\|svgz\\|sifz\\)\\|\\.tbz2?\\|\\.bz2\\|\\.Z\\)\\(?:~\\|\\.~[-[:alnum:]:#@^._]+\\(?:~[[:digit:]]+\\)?~\\)?\\'" . jka-compr-handler)
 ("\\.gpg\\(~\\|\\.~[0-9]+~\\)?\\'" . epa-file-handler)
 ("\\`/[^/]\\{2,\\}\\'" . tramp-completion-file-name-handler)
 ("\\`/\\([^[/|:]\\{2,\\}\\|[^/|]\\{2,\\}]\\):" . tramp-file-name-handler)
 ("\\.lnk\\'" . w32-symlinks-file-name-handler)
 ("^/cygdrive/[A-Za-z]/" . cygwin-mount-map-drive-hook-function)
 ("^//[A-Za-z]/" . cygwin-mount-map-drive-hook-function)
 ("^/[^:@]*$\\|^/|/[^/:]+\\(\\'\\|/\\)" . cygwin-mount-name-hook-function)
 ("\\`/:" . file-name-non-special))


2014年5月8日木曜日

gnupack devel 12.02 非公式アップデート




*gnupack 非公式アップデート版に関する最新バージョンは こちら をご確認ください*

アップデートの概要 12.01 to 12.02

・Emacsの画面描画で問題があったため、Emacsのみ12.00へ戻しました。
・そのほかは 12.01 の通りとなっております。

ダウンロードはこちらから。
gnupack_devel-12.02-unofficial.exe


2014年5月7日水曜日

gnupack devel 12.01 非公式アップデート




*gnupack 非公式アップデート版に関する最新バージョンは こちら をご確認ください*

アップデートの概要 12.00 to 12.01

・Emacs24.3を再コンパイル(cmgemo.dllをリンクするようにコンパイル)
・UTF-8での使い勝手を向上
・いくつかのパッケージを追加
・上記にともない、ruby, python, perl, clisp の全てを利用可能に。

ダウンロードはこちらから(Emacsに問題があったため、12.02を利用してください)
gnupack_devel-12.01-unofficial.exe

アップデートの詳細


2014年5月4日日曜日

Helm から Hyerspec/CLtL2 を引く




** 2014/05/11 slime をバージョンアップ したらHyperSpec が引けなくなったので修正

HyperSpec と CLtL2 を Helm から引けるようにします。 anything とまったく一緒です。

HyperSpec は ANSI Common Lispのリファレンス、CLtL2 は Common Lisp the Language, 2nd Editionの略記で仕様書風の読み物。CLTL1 → ANSI と仕様がFIXするまでの経緯等にもついて記載されているらしいです。私はほぼ HyperSpec しか使っていません。


設定方法は以下


gnupack devel 12.00 非公式アップデート




*gnupack 非公式アップデート版に関する最新バージョンは こちら をご確認ください*

アップデートの概要 11.10 to 12.00

・tdm/mingwをバージョンアップ
・上記に伴いEmacs24.3を再コンパイル
・UTF-8を使うように変更
・Cygwinパッケージを追加
・上記に伴い全体のサイズが約650MB(11.10)→1,100MB(12.00)と増加

ダウンロードはこちらから(DL数カウントのため google shortener経由にしました。実態はDropboxへ配置)
gnupack_devel-12.00-unofficial.exe

アップデートの詳細


2014年5月3日土曜日

gnupack devel 11.10 非公式アップデート




*gnupack 非公式アップデート版に関する最新バージョンは こちら をご確認ください*

gnupack を愛用しているのですが、最近更新がとまってしまったので、非公式のアップデート版を作成しました。

ダウンロードはこちらから(DL数カウントのため google shortener経由にしました。実態はDropboxへ配置)
gnupack_devel-11.10-unofficial.exe

アップデートの概要は以下です。

・Emacsのバージョンを24.2 => 24.3
・Cygwinのバージョンを 1.7.17-1 => 1.7.29-2
・apt-cyg をバージョンアップ

以下の問題を解決しています。

apt-cygが失敗します
Win8.1/x86 でのemacs


アップデート内容に関する詳細は付属のREADMEに記載しています。