英語配列キーボードでも英数/かなキーが欲しい

MacBook日本語配列キーボードを使う際、英数キー、かなキーがスペースバーの両横にあるため、一発で英語入力/日本語入力を確実に切り替えることができるのが気に入っていたのですが、最近英語配列キーボードを使い始めたため、これらがなくなってしまい、不便だなあと思っていました。*1 *2


日本語配列  ↓英語配列

調べてみたところ、KeyRemap4MacBookというソフトを導入すれば、左右のコマンドキーを空打ちした場合にそれぞれ英数/かなキーとして振る舞わせることができるとのことで、早速導入してみました。


設定としては、アプリを起動してChange KeyタブにてJapaneseで検索し、「左右のコマンドキーを「英数/かな」としても使う」にチェックを入れるだけです。ついでに「Command_L x2 to EISUU x2」「Command_R x2 to KANA x2」も入れておくと、誤って日本語で入力されてしまった文字列を英字キー2回で英語に再変換したりすることができるようになります(英語→日本語も可能)。


が、ちょっと問題があって、たとえば切り替え直後にnをタイプした場合、コマンドキーから完全に指を離す前にnをタイプすると、ショートカットキーとして認識されてしまい、急に新規ウィンドウが開くなどして煩わしいという欠点が。


そこで、コマンド+オプションキーを空打ちすると、英語入力/日本語入力が切り替わるようにしてみました。(二つのキーをぐちゃっと親指で押す感じ)。


設定方法はこんな感じです。

<?xml version="1.0"?>
<root>
  <item>
    <name>For Japanese</name>
    <item>
      <name>左右のコマンドキー+オプションキー(&#8984;+&#8997;)を「英数/かな」としても使う</name>
      <item>
        <name>When you type Command_L+Option_L only, send EISUU</name>
        <identifier>remap.jis_optionL_commandL2eisuu</identifier>
        <autogen>__KeyOverlaidModifier__ KeyCode::COMMAND_L, VK_OPTION, KeyCode::COMMAND_L, VK_OPTION, KeyCode:: JIS_EISUU</autogen>
        <autogen>__KeyOverlaidModifier__ KeyCode::OPTION_L, VK_COMMAND, KeyCode::OPTION_L, VK_COMMAND, KeyCode:: JIS_EISUU</autogen>
      </item>
      <item>
        <name>When you type Command_R+Option_R only, send KANA</name>
        <identifier>remap.jis_optionR_commandR2kana</identifier>
        <autogen>__KeyOverlaidModifier__ KeyCode::COMMAND_R, VK_OPTION, KeyCode::COMMAND_R, VK_OPTION, KeyCode:: JIS_KANA</autogen>
        <autogen>__KeyOverlaidModifier__ KeyCode::OPTION_R, VK_COMMAND, KeyCode::OPTION_R, VK_COMMAND, KeyCode:: JIS_KANA</autogen>
      </item>
    </item>
  </item>
</root>
    • __KeyOverlaidModifier__はモディファイアキーだけをほかのキーを押さずに入力した場合の設定で、第一引数が置き換えるキー、第二引数がほかのキーを押したときの動作(この場合はそのまま入力)、第三引数が単独で入力した場合の動作(この場合は英数/かなキーに置き換え)を指定しています。
  • Change KeyタブでReload XMLをクリック
  • 新規に追加された「When you type Command_L+Option_L only, send EISUU」「When you type Command_R+Option_R only, send KANA」にチェックをつける


上記のかな/英数の二度押しで誤入力を変換する機能などとも併用できます。


たまに両方のキーを押しそこなって切り替えに失敗することがありますが、突然ウィンドウが開いたり閉じたりするよりはマシかなと思ってこれでしばらく使ってみることにします。

*1:記号の位置については昔英語配列キーボードを使っていたこともあり、あまり問題なかったのですが、トグルでない英数/かなキーはどうしても欲しかった。

*2:WindowsLinux環境でも日本語配列キーボードの変換/無変換をIME on/offに割り当てていたりします。これはMS IMEやmozcの標準機能で設定可能です。

AFPサーバ(netatalk)のLion対応状況

Macとファイルサーバの間でnetatalkのafpdを利用してAFPでファイル共有している場合、Mac OS X 10.7 LionはSnow Leopard以前と対応状況が異り、新しいバージョンが必要になっています。

netatalkを使ったNAS製品等でも、Lionだと接続に制限が出たりしています。

例: http://buffalo.jp/taiou/os/macosx107/01/macosx107_01.html


具体的には、次のような機能に対応している必要があるようです。

用途 必要機能 netatalkバージョン
認証あり(ゲスト以外)の接続: DHX2認証のサポートが必須に (セキュリティ向上) netatalk-2.0.4以降
Time Machine サポート: AFP3.3 (AFP Replay Cache等)への対応要 netatalk-2.2beta3以降


netatalkが古いバージョンだと、「このバージョンのAFPには対応していません」「Time Machineに必要なAFPの機能に対応していません」といったエラーが表示され、接続やTime Machineのバックアップが利用できなくなります。


具体的には、DHX2認証にはnetatalk-2.0.4以降で対応しているようです。 ただし、uams_dhx2.so がビルド*1され、かつafpd.confの-uamlistに含まれている必要があります。
なお、Lion側の設定変更で、セキュリティを甘くして認証をパスする方法もあるようです。
http://www.alexanderwilde.com/2011/04/os-x-lion-connection-error-with-afp-and-workaround/


また、Time Machineに必要なAFP3.3はnetatalk-2.2beta3以降 (現在 2.2beta4 が公開されているのでこちらの方が良いでしょう) が必要です。


新しめのディストリビューションであれば、上記対応バージョンが yum や apt 等でインストールできると思います。


個人的には、古いLinkStation (LS-GL) にシリアルポートをつけて改造して使っていますが、これがLionに対応していなかったため、netatalk-2.2beta4をビルドして入れ替えしたところ、Time Machineも含めて利用できるようになりました。
( 具体的には、Berkeley DB-5.0.32.NC, libgpg-error-1.7, libgcrypto-1.2.4, netatalk-2.2-beta4 を導入。)

*1:libgcryptoに依存、さらにlibgcryptoはlibgpg-errorに依存

ArduinoからApple Remoteの赤外線信号を送信

Apple Remote MC377J/A

ArduinoからApple Remoteの赤外線信号を送信するライブラリを作りました。


ライブラリのダウンロードはこちらから。


ダウンロード後、AppleRemoteIR フォルダを ~/Documents/Arduino/libraries に入れて下さい。


IDEを起動すると、簡単なサンプルスケッチが File > Examples > AppleRemoteIR > AppleRemoteIR から開けます。

AppleRemoteIR ar = AppleRemoteIR(3); // 赤外線LEDのポートを指定

void loop() {
  ar.play();
  delay(2000);
  ...

まず、AppleRemoteIR を作る際に、赤外線LEDを接続するポートを指定します。赤外線LEDは、HIで点灯するように接続します。
あとは、menu(), play(), up(), down(), right(), left() を呼び出せば、そのボタンを押した際の赤外線信号が送出されます。なお、ボタンを押しっぱなしにした時の動作(リピート信号)には対応していません。

ペアリングについて

Apple Remoteは個々にID(1〜255?)を持っており、特定のApple RemoteからしかMacを操作できないようにすることができます。このMacApple Remoteを対応づけをペアリングと呼びます。なお、ペアリングはしなくとも構いません。その場合は全てのApple Remoteから操作可能な状態になります。一方、Macが別のApple Remoteとペアリングされていると、全く反応しません。ペアリングを解除する際は、システム環境設定 > セキュリティ > 一般 > "登録解除" を押します(ロックされている場合は鍵アイコンをクリックして認証が必要です)。


pair() メソッドを呼び出すと、Macとのペアリングを行うことができます。

AppleRemoteIR ar = AppleRemoteIR(3, 0x97); // 赤外線LEDのポート、Apple RemoteのIDを指定

void setup() {
  ar.pair();
}

void loop() {
  ...


作成に当たって、信号のフォーマットについては、以下のページを参考にさせて頂きました。
http://www.ez0.net/2007/11/appleremote%e3%81%ae%e8%b5%a4%e5%a4%96%e7%b7%9a%e4%bf%a1%e5%8f%b7%e3%82%92%e8%a7%a3%e6%9e%90%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f/

Mac OS XでRAMディスクを作る方法

すぐ忘れるのでメモ。


例えば128MBのRAMディスクを作るなら、

% hdid -nomount ram://$((2048*128))
/dev/disk3
% newfs_hfs -v RAMDISK /dev/disk3
Initialized /dev/rdisk3 as a 128 MB HFS Plus volume
% diskutil mount /dev/disk3
Volume RAMDISK on /dev/disk3 mounted


一時ファイルとかを置くのに便利です。

ダウンロードしたソフトをビルド&インストールする時とか。


使い終わったらFinderで「取り出し」を選ぶか、

% hdiutil eject disk3

で消滅します。

MacBook Pro + Fedora 11で無線LANを使うには

MacBook Pro (15"、Penryn搭載の2008年2月モデル) に Fedora 11をBoot Campでインストールしたときの備忘録。

ndiswrapper (WindowsNICドライバのインターフェースをLinux上に実装したもの)を使って、Windows用のドライバで無線LAN(Broadcom 4328を搭載)を使えるようにするための手順です。

0. lspci で無線LANのモデルを確認

私の環境では

# lspci | grep Network
0b:00.0 Network controller: Broadcom Corporation BCM4328 802.11a/b/g/n (rev 05)

と表示されました。

1. まずはrpmfusionのレポジトリを使えるようにする。

http://rpmfusion.org/Configuration にあるリンクからFedora 11用のfreeレポジトリとnon freeレポジトリをそれぞれクリックしてPackage Installで開けばOK。

2. ndiswrapperをインストー
# yum install ndiswrapper

で、rpmfusionから入れられるはずです。ついでに xorg-x11-drv-nvidia も入れておいた。

3. 付属CD-ROMからWindows XP用のドライバをコピー

MacBook Proに付属のOSインストールディスクからBroadcomXPInstaller.exe をコピー。

# mkdir bcm43xx
# cd bcm43xx
# unrar x ../BroadcomXPInstaller.exe

で展開しておきます。

4. ndiswrapperに登録
# ndiswrapper -i bcmwl5.inf
5. 標準ドライバがロードされないようにする

Fedoraだと標準で入っているb43やssbというドライバがロードされてしまう(が動作しない)ため、これらを取り外します。

# rmmod ssb
# rmmod b43

ついでに自動ロードされないように /etc/modprobe.d/blacklist に以下の行を追加しておきます。

# wireless LAN
blacklist b43
blacklist ssb
6. ロードしてみる
# ndiswrapper -m

で、/etc/modprobe.d/ndiswrapper に alias wlan0 ndiswrapper という行が追加されるはず。この状態で

# modprobe wlan0

とすれば、ndiswrapperがロードされ、ifconfig に wlan0 というインターフェースが現れます。

あとはNetworkManagerで無線LANのAPや認証の設定をすれば接続できるはずです。

絵で見て分かる、簡単WebKitアプリの作り方

最近WebKitがいろいろなWebブラウザで使われるようになってきています。Safariはもちろん、GoogleChromeAndroidAdobe AIRなどなど。
MacCocoaアプリケーションでは、簡単にWebKitをHTMLレンダラ(JavaScriptも対応)にとして組み込めるようになっています。そこで簡単なシングルウィンドウ(タブもなし)のWebブラウザを作ってみます。


このブラウザの用途としては、Webアプリを普通のアプリのように利用できるようにすることが挙げげられます。例えば、twicliを動かせばTwitterクライアント・アプリの出来上がり、Gmailならメーラー…などなど。


というわけで、絵で見て分かる(?)Cocoa版シングルウィンドウWebブラウザの作り方をどうぞ。なお、事前にXcodeインストールが必要です。

続きを読む

DNSプリフェッチでSafariを高速化


 まず始めに、ChromeDNSによる名前解決結果のキャッシュと「DNSプリフェッチ」技術を用いて、名前解決処理にかかる時間を短縮している。DNSプリフェッチとは、Webページ上にあるリンク先ホスト名を先読みし、あらかじめ名前解決を行って結果をキャッシュしておく機能だ。Chromeでは、このDNSプリフェッチ機能が初期設定で有効になっている。

そんなに速くなるのならと思って、MacSafariでも、UserJSを使ってDNSプリフェッチを実現してみました。


任意のWebページのロード完了後3秒経ったら、GreaseKitを使ってJavaScriptを走らせ、ページ内の全てのリンクのドメイン一覧を取得します。それをローカルで動くDNSPrefetchサーバに送信し、サーバ側であらかじめDNS解決を行うことで自分のMac内のDNSキャッシュを作っておくというものです。
JavaScriptだけで名前解決できればもうちょっと簡単になるのですが良い方法が解らない)


効果は、仕掛けが大げさな割には、まあ多少は早いかな?という感じ。
Googleの検索結果からのジャンプだと特に別ドメインに移動する可能性が高い分、快適になる気がします。

まあChromeも他に工夫はいろいろしているでしょうし。参考:Chromeはなぜ速いのか − @IT



# どっちかというと、GreaseKit入れたついでにoAutopagerize入れた方が快適さup度は大かも。
## そしてAutopagerizeなしでは生きられない体に。

動かし方:

  1. 以下のUserJSとperlスクリプト(DNSPrefetchサーバ)をファイルに保存。
  2. SIMBLをインストールしていない場合はインストール(GreaseKitが使用)。
  3. GreaseKitを入れていない場合はインストール。
  4. perlモジュールのHTTP::DaemonやHTTP::Statusが無い場合はCPANなどでインストール。
  5. ターミナル上で DNSPrefetch.pl を起動 (perl DNSPrefetch.pl )。& + disown でバックグラウンドに回したり端末から切り離しても良いです。
  6. UserJSをSafariで開き、GreaseKitに追加。
  7. アンインストールする時はGreaseKitのManage Scripts...から。

コード

続きを読む