Emacsのキーバインディング設定

2012年1月16日 20:06

 Emacsの設定ファイル(.emacsなど)でキーバインディングを設定する場合の作法はググると色々なものが出てくるのだが、最近ではkbd関数を利用するのが一般的なようだ。コントロールキー同時押しや特殊キーに関数を割り当てる場合、一昔前は分かりにくい表記で書いていたが、kbd関数を使うと割と簡潔にキーを指定できる。

 たとえばCtrl+Shift+Insertというキーに「add-anchor」関数を割り当てる場合は下記のようにする。

(global-set-key (kbd "C-S-<insert>") 'add-anchor)

 あと、global-set-key関数を使う以外に、define-key関数を「global-map」引数付きを使う人もいるようだが、こちらについてはどちらも意味的には同じ。たとえば上記の例をdefine-keyを使って書くと、次のようになる。

(define-keyglobal-map (kbd "C-S-<insert>") 'add-anchor)

 「global-map」の代わりに「current-global-map」を使っても、基本的には同じ。Emacsのマニュアル中、キーマップ周りは「Commands for Binding Keys」にあるのでこちらもご参照を。

iMac(Early 2009、20インチ)の光学ドライブを交換する

[] [] []
2011年12月13日 15:45

 自宅のメインマシンは20インチiMac(Early 2009)なのだが、2年前くらいから光学ドライブの調子が悪い。このiMacは整備済み製品として購入したもので、HDDとメモリが増量されている。整備済み製品はときどき記載されているスペックよりも上のものが届くことがあってラッキー感があるのだが、1年間の特別保証が切れた直後あたりに調子が悪いことに気付いてしまった。

 現象としては、CDを挿入しても認識されず、ウンウンうなったあとで排出されるというもの。ちょうど手持ちの音楽CDをすべてリッピングしようと思ってたときで、1日に10枚ペースで200枚くらいのCDをリッピングしたのが良くなかったような気がする。しかも、ときどきは認識されるからタチが悪い。認識されても、リッピングされた音源にノイズが載るという現象が出るため実質的に使えない状態。

 有償修理に出すことも考えたのだが、お値段が数万円コースとなるため放置、外付けのドライブを付けてごまかしてたのだが、来年で購入してから3年目になるということもあり、買い換えを視野に入れて交換を行うことにした。

 作業手順はASCII.jpに載っているとおり。iFixitも写真が多くて参考になる。実際に作業してみて感じたコツだが、フレームや液晶の取り外しは本体を寝かせた状態ではなく、立てた状態で作業をしたほうがやりやすい。寝かせると自重で本体がやや歪むためのようだ。

 交換に使用したのは、Sony OptiarcのAD-7640S。元々搭載されているのはAD-5670Sというモデルだが、OEM専用なので入手が難しい。AD-7640SはVintage ComputerでもiMac用に販売されているし、2011年12月現在国内でも入手しやすい。自分は九十九電機で購入。

 スロットイン型のモデルだが、ベゼルがついているので取り外して使用する。また、左側にイジェクトスイッチが付いているが、内蔵で使う場合不要。自分ははさみで切り取ってしまった。単純なスイッチなので動作上は問題ないと思われる。

 さて、換装自体は無難に完了したのだが、どうもうまく動かなかった。ブート直後、丸いインジケータが表示されるまではディスクをセットできるのだが、OSの起動後はディスクを挿入しようとしてもドライブが吸い込んでくれない。OS上からドライブは正しく認識されているのだが。

 再度ばらしたり組み直したりと色々試行錯誤した結果、電源投入時にディスクをセットしておくと、起動後も問題なく動作するということが判明。また、電源投入後で動作しなくなった場合、ディスクをドライブに突っ込んだ状態でスリープ状態から復帰させるとディスクを吸い込み、その後利用できるようになることも分かった。

ちなみに純正のドライブでは、スリープからの復帰時にドライブの音が鳴らないようになっているが、本ドライブでは鳴る。どうもファームウェアの問題のような気がしているのだが、Appleが提供するSuperDriveファームウェア・アップデート3.0は適用できなかった。

ということで問題の解決に向けて依然情報収集中である。

VirtualBoxでGNOME Shellを使う(Fedora 16)

2011年12月6日 01:31

 VirtualBoxでFedora 16のデスクトップを使う場合、デフォルトだとGNOME Shellが利用できない。GNOME Shellの利用にはハードウェアアクセラレーションが必要なためだ。VirtualBoxの場合、Guest Additionをインストールすればハードウェアアクセラレーションが利用可能になり、GNOME Shellが利用可能になる。

VirtualBox Guest Additionのインストール

 基本的な設定はInstall Fedora 16 VirtualBox Guest Additions and Get Working Gnome Shell Inside Virtual Machineという記事にある通り。

1. 仮想マシンの設定の「ディスプレイ」項目で、ビデオメモリを128MBに設定、「3Dアクセラレーションを有効化」にチェックを入れる。
VirtualBoxの設定

VirtualBoxの設定

2. Guest Additionのインストールにはカーネルモジュールのビルドが必要なので、カーネルヘッダーや開発ツールをインストールしておく。
# yum install kernel-devel kernel-headers dkms gcc-c++
3. VirtualBoxの「デバイス」−「Guest Additionsのインストール」を選択してGuest Additionsをマウントする。
4. 下記を実行
# cd /media/VBOXADDITIONS_4.1.6_74713/
# ./VBoxLinuxAdditions.sh
5. SELinuxの設定変更

 インストールされるVirtualBox Guest Addition関連ファイルのSELinuxラベルが不適切なので、変更する。

# cd /opt/VBoxGuestAdditions-4.1.6/lib/
# /sbin/restorecon -v *.so

 実行後、ls -Zでラベルが「textrel_shlib_t」になっていることを確認する

$ ls -Z
drwxr-xr-x. root root unconfined_u:object_r:usr_t:s0   VBoxGuestAdditions
-rwxr-xr-x. root root unconfined_u:object_r:textrel_shlib_t:s0 VBoxOGLarrayspu.so
-rwxr-xr-x. root root unconfined_u:object_r:textrel_shlib_t:s0 VBoxOGLcrutil.so
-rwxr-xr-x. root root unconfined_u:object_r:textrel_shlib_t:s0 VBoxOGLerrorspu.so
-rwxr-xr-x. root root unconfined_u:object_r:textrel_shlib_t:s0 VBoxOGLfeedbackspu.so
-rwxr-xr-x. root root unconfined_u:object_r:textrel_shlib_t:s0 VBoxOGLpackspu.so
-rwxr-xr-x. root root unconfined_u:object_r:textrel_shlib_t:s0 VBoxOGLpassthroughspu.so
-rwxr-xr-x. root root unconfined_u:object_r:textrel_shlib_t:s0 VBoxOGL.so
6. ログアウトして再ログインする

 以上で作業完了。

VirtualBox上のFedoraでGNOME Shellが動作している

VirtualBox上のFedoraでGNOME Shellが動作している

CentOS 5.6上でXenを使って仮想環境を作るための基本設定

2011年5月26日 19:43

 先日MSDNを契約、テスト用に自由にOSを使えるようになったので、テスト用のCore i7マシンにXenを導入して仮想マシン上でテスト環境を作ろう、という話。いままではテスト環境が必要になったら実環境上にインストール→不要になったら削除、を繰り返していたんだけど、仮想環境を使えばスナップショットも取れるし便利だろう、ということで。

 ベースの環境はCentOS 5.6。CentOS 5.6上にXen環境を構築する解説はネット上にたくさんあるわけですが、その多くがGUIを使ったセットアップ方法を解説していて、コンソールベースのCentOS環境でインストールする方法の解説は少なかったので以下に手順をメモしておきます。

 まず、仮想化関連パッケージを導入。

# yum groupinstall Virtualization
# yum install kernel-xen

 Xenを動かすには専用カーネルが必要なので、/boot/grub/menu.lstを確認してXen対応カーネル(2.6.xx-xxx.x.x.el5xen)でブートされるように設定してリブート。また、xendおよびxendomainsサービスを起動するように設定しておく。

# /sbin/chkconfig xend on
# /sbin/chkconfig xendomains on
# /sbin/service xend start
# /sbin/sercice xendomains start

 仮想マシンの作成とOSインストールは「virt-install」コマンドで行える。Fedora 15をインストールするなら下記のような感じに。

# /usr/sbin/virt-install --nographics --prompt
Would you like a fully virtualized guest (yes or no)? This will allow you to run unmodified operating systems. no
 What is the name of your virtual machine? fedora
 How much RAM should be allocated (in megabytes)? 1024
 What would you like to use as the disk (file path)? /var/lib/xen/images/fedora.img
 How large would you like the disk (/var/lib/xen/images/fedora.img) to be (in gigabytes)? 10
 What is the install URL? http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/releases/15/Fedora/i386/os/
 :
 :
インストールを開始しています...
ファイル .treeinfo を読出中...                             |  906 B     00:00
ファイル vmlinuz-PAE を読出中...                           | 3.7 MB     00:00     TA
ファイル initrd-PAE.img を読出中...                        |  94 MB     00:40     TA
ストレージファイルを作成中...                         |  10 GB     00:00
ドメインを作成中...                                        |    0 B     00:04
Connected to domain fedora
エスケープ文字は  ^] です
[    0.000000] Reserving virtual address space above 0xf5800000
[    0.000000] Initializing cgroup subsys cpuset
 :
 :

 コンソール上で仮想環境上のコンソールが表示され、インストールを行える。

コンソール上でFedoraのインストーラを操作する

コンソール上でFedoraのインストーラを操作する

 インストール完了語は、Ctrl-]でコンソールを抜けられる。稼働中の仮想マシンは「xm list」コマンドで確認可能。

# /usr/sbin/xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     2012     8 r-----    780.4
fedora                                     2     1024     1 -b----      9.9

 仮想マシンのコンソールに接続するには、「xm console <仮想マシン名>」を実行すればよい。コンソール接続の終了は先と同様Crtl-]。

# /usr/sbin/xm console fedora

nuttcpでネットワークスループットを測る

2011年5月18日 18:40

 ネットワークのスループットを測るツールには色々ある。SourceForge.JP Magazineの翻訳記事(ネットワークのベンチマーク・ツールを試す – nepim、LMbench、nuttcp)でいくつか紹介されているのだが、その中でも自分が比較的よく使っているのがnuttcpだ。ということで簡易的な使い方メモ。

インストール

 ソースコードからビルドしても良いが、nuttcpのダウンロードサイトにはRPMパッケージもあるので、こちらを利用するのが楽である。

ベンチマークの実行

 nuttcpはクライアント/サーバー型のベンチマークツールである。つまり、帯域測定をしたいネットワークの片側でサーバーを動かし、もう片側でクライアントを実行してベンチマークを行う。

 サーバー側では「-S」オプション付きでnuttcpを実行しておく。

# nuttcp -S

 クライアント側では、サーバーのIPアドレス付きでnuttcpを実行する。上り速度を測定するには「-B」を、下り速度を測定するには「-D」オプションを使う。「-i<数字>」オプションを付けると、数字で指定した間隔で途中経過を表示する。「-v」や「-vv」で経過や結果の詳細表示。

 次の例はクライアントからサーバーへの上り速度を測定する場合。

$ nuttcp -B -i1 183.181.28.64
    7.1875 MB /   1.00 sec =   60.2683 Mbps     0 retrans
    7.1875 MB /   1.00 sec =   60.2960 Mbps     0 retrans
    7.6875 MB /   1.00 sec =   64.4898 Mbps     0 retrans
    7.7500 MB /   1.00 sec =   65.0148 Mbps     0 retrans
    8.0000 MB /   1.00 sec =   67.1111 Mbps     0 retrans
    8.1250 MB /   1.00 sec =   68.0925 Mbps     0 retrans
    7.8750 MB /   1.00 sec =   66.0627 Mbps     0 retrans
    7.6875 MB /   1.00 sec =   64.4892 Mbps     0 retrans
    7.5000 MB /   1.00 sec =   62.9117 Mbps     0 retrans
    8.1875 MB /   1.00 sec =   68.6899 Mbps     0 retrans

   77.6250 MB /  10.07 sec =   64.6675 Mbps 0 %TX 6 %RX 0 retrans 9.35 msRTT

 下り速度の測定は次のような感じ。

$ nuttcp -D -i1 183.181.28.64
    6.1250 MB /   1.00 sec =   51.3391 Mbps     0 retrans
    7.5625 MB /   1.00 sec =   63.4470 Mbps     0 retrans
    7.3750 MB /   1.00 sec =   61.8740 Mbps     0 retrans
    7.3125 MB /   1.00 sec =   61.3443 Mbps     0 retrans
    6.9375 MB /   1.00 sec =   58.1962 Mbps     0 retrans
    7.1875 MB /   1.00 sec =   60.2891 Mbps     0 retrans
    7.3750 MB /   1.00 sec =   61.8149 Mbps     0 retrans
    7.7500 MB /   1.00 sec =   65.0144 Mbps     0 retrans
    7.5625 MB /   1.00 sec =   63.4413 Mbps     0 retrans
    7.5625 MB /   1.00 sec =   63.4363 Mbps     0 retrans

   73.2500 MB /  10.07 sec =   60.9941 Mbps 0 %TX 5 %RX 0 retrans 9.11 msRTT