LEOPOLD FC200R (US赤軸テンキーレス)

FILCOのUS赤軸テンキーレスが再販未定のため韓国Leopold社のFC200Rというキーボードを輸入しました。本体価格は2011年11月現在のレートで約8300円。質感はなかなか良く、アーキサイトで赤軸を取り扱ってくれるようになれば言うことはないですね。アーキサイトの黒軸/茶軸/青軸の希望小売価格は7980円ですし(I-T Touchは見る限りLeopoldのOEMだと思いますが、間違っていたらごめんなさい)。

さて、Macintosh(Snow Leopard)につないで一見何の問題もなく動いているように見えたのですが、システム環境設定のキーボードから修飾キーの入れ替えをしてもログアウトすると設定が消えてしまうという問題が発生しました。それまで使っていたStrong Man製のSMK-88EM/JMというキーボードでは、再起動で正しく設定がリロードされていたのですが。

検索してみたところ、修飾キーの設定の保存場所は「~/Library/Preferences/ByHost/.GlobalPreferences.XXXX.plist」だということがわかりました(XXXXの場所には英数字をハイフンでつないだ長い文字列が入ります)。このplistを開いてみるとcom.apple.keyboard.modifiermapping.1423-38002-0とcom.apple.keyboard.modifiermapping.0-0-0という項目が存在しました。

念のためシステムをLeopardに切り替えて、FC200Rを接続してシステム環境設定で修飾キーを入れ替えてからplistを見てみると、今度はcom.apple.keyboard.modifiermappingとcom.apple.keyboard.modifiermapping.1204-257-0という項目が見つかりました。再ログインしても設定は正しくリロードされます。

ここでうまく勘が働いて、1423-38002-0と1204-257-0はデバイスのIDだろうなと。FC200RとSMK-88の2つのキーボードを接続してシステムプロファイラで見てみるとビンゴ!

FC200R  製品ID:0x0101  製造元ID:0x04b4
SMK-88  製品ID:0x9472  製造元ID:0x058f

16進数を10進数に直せば0x0101は257、0x04b4は1204、0x9472は38002、0x058fは1423となります。Leopardのplistから1204-257-0のついた項目をSnow Leopardのplistにコピペして保存後、再ログインしてみるとばっちりOKでした。修飾キーの設定が保存されないのはSnow Leopardのバグなのかな?

FC200RのCapsLockとCtrl、WindowsキーとAltをそれぞれ入れ替えたplistのxml版は以下の通りです。




	com.apple.keyboard.modifiermapping.1204-257-0
	
		
			HIDKeyboardModifierMappingDst
			2
			HIDKeyboardModifierMappingSrc
			0
		
		
			HIDKeyboardModifierMappingDst
			0
			HIDKeyboardModifierMappingSrc
			2
		
		
			HIDKeyboardModifierMappingDst
			0
			HIDKeyboardModifierMappingSrc
			10
		
		
			HIDKeyboardModifierMappingDst
			4
			HIDKeyboardModifierMappingSrc
			3
		
		
			HIDKeyboardModifierMappingDst
			12
			HIDKeyboardModifierMappingSrc
			11
		
		
			HIDKeyboardModifierMappingDst
			3
			HIDKeyboardModifierMappingSrc
			4
		
		
			HIDKeyboardModifierMappingDst
			11
			HIDKeyboardModifierMappingSrc
			12
		
	


PostgreSQL Client Library (libpq) for iPhone/iPad

iPhone/iPadアプリでPostgreSQLサーバに接続するためにライブラリをビルドしたときのメモです。開発環境はXcode 3.2.3 and iOS SDK 4.0.1を使用しています。とにかくライブラリを使いたいだけという人はここからダウンロードしてください。

libpqソースコードのダウンロード

libpqPostgreSQL本体のソースコードに含まれていて、2010/8/6現在のバージョンは8.4.4です。postgresql-8.4.4.tar.bz2からダウンロードして解凍しておきます。

libpqのビルド

libpqは以下のようにconfigureからダイレクトにarm用にmakeすることも可能ですが、ここではXcodeのプロジェクトを作成してビルドすることにします。

#!/bin/bash

DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer
SDKROOT=$DEVROOT/SDKs/iPhoneOS3.2.sdk
PATH=$DEVROOT/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin
DARWIN=arm-apple-darwin10
ARCH="-arch armv6 -arch armv7"
./configure --host=arm-apple-darwin --without-readline --disable-ipv6 CC=$DEVROOT/usr/bin/gcc-4.2 \
CPPFLAGS="-I$SDKROOT/usr/lib/gcc/$DARWIN/4.2.1/include/ -I$SDKROOT/usr/include/" \
CFLAGS="$CPPFLAGS $ARCH -pipe -no-cpp-precomp -isysroot $SDKROOT" CPP="$DEVROOT/usr/bin/cpp $CPPFLAGS" \
LD=$DEVROOT/usr/bin/ld && make -C src/interfaces/libpq

ライブラリに必要なファイルの一覧を得るためにosx用にビルドします。ターミナルを起動し、postgresql-8.4.4フォルダに移動して以下のコマンドを実行します。

./configure
make -C src/interfaces/libpq
ar -t src/interfaces/libpq/libpq.a

この結果、必要なファイルは以下のものであることがわかります。

fe-auth.o  fe-connect.o  fe-exec.o  fe-misc.o  fe-print.o  fe-lobj.o  fe-protocol2.o
fe-protocol3.o  pqexpbuffer.o  pqsignal.o  fe-secure.o  libpq-events.o  md5.o  ip.o
wchar.o  encnames.o  noblock.o  pgstrcasecmp.o  thread.o
Xcodeプロジェクトの作成

Xcodeを起動し、新規プロジェクトを作成します。テンプレートはiPhone OSのLibraryから"Cocoa Touch Static Library"を選び、「選択...」ボタンをクリックして"pq"という名前を付けて適当な場所に保存します。この時できたpqフォルダ配下にpostgresql-8.4.4フォルダを入れておきます(別にどこにあってもよいのですが、相対パスで指定しておいてまとめて移動可能にするためです)。
以下はフォルダ名とその中にあるファイルのリストです。すべてプロジェクトに追加してください。

postgresql-8.4.4/src/interfaces/libpq
fe-auth.c  fe-connect.c  fe-exec.c  fe-misc.c  fe-print.c  fe-lobj.c  fe-protocol2.c
fe-protocol3.c  pqexpbuffer.c  pqsignal.c  fe-secure.c  libpq-events.c
postgresql-8.4.4/src/backend/libpq
md5.c  ip.c
postgresql-8.4.4/src/backend/utils/mb
wchar.c  encnames.c
postgresql-8.4.4/src/port
noblock.c  pgstrcasecmp.c  thread.c

プロジェクトメニューから「プロジェクト設定を編集」を選び、ビルドタブで「ユーザヘッダ検索パス」に以下のパスを追加し、「再帰的」にチェックを入れておきます。

$(SRCROOT)/postgresql-8.4.4/src/

pq_Prefix.pchに以下の1行を追加します。

#define FRONTEND 1

もちろんプロジェクト設定の「その他のCフラグ(OTHER_CFLAGS)」に"-DFRONTEND=1"を指定してもかまいません。ここまででライブラリがビルド可能になっているはずです。

ユニバーサルバイナリの作成

構成をReleaseにしてDeviceとSimulatorの両方でビルドした後、pqプロジェクトフォルダ内でターミナルから以下のコマンドを実行してユニバーサルバイナリを作成します。

lipo -create build/Release-iphone*/libpq.a -output libpq.a

ビルドフェーズとしてスクリプトの実行を追加してもよいでしょう。このプロジェクト自体を使用するアプリケーションのプロジェクトに登録して依存関係を設定する場合は、自動的に必要なバイナリがビルド/リンクされるので気にしなくてもかまいません。
このライブラリを使う場合に使用するヘッダは以下の2つです。

postgresql-8.4.4/src/interfaces/libpq/libpq-fe.h
postgresql-8.4.4/src/include/postgres_ext.h
●プロジェクトのダウンロード

以下の場所に設定済みプロジェクトを置いてあります。
http://www1.axfc.net/uploader/Si/so/81229.zip&key=libpq

MySQL Connector/C (libmysql) for iPhone/iPad

iPhone/iPadアプリでMySQLサーバに接続するためにライブラリをビルドしたときのメモです。開発環境はXcode 3.2.3 and iOS SDK 4.0.1を使用しています。とにかくライブラリを使いたいだけという人はここからダウンロードしてください。

●事前準備

CMakeをインストールしておいてください。OSX用のユニバーサルバイナリまたはソースコードから。

●Connector/Cのダウンロード

MySQL :: Download Connector/C (libmysqlclient)のSelect PlatformからSource Codeを選択しDownloadボタンを押します。ログインや登録をしたくなければ、「» No thanks, just take me to the downloads!」をクリックするとミラーの一覧が表示されるので適当な場所からダウンロードしてください。2010/8/3現在のバージョンは6.0.2となっています。

●CMakeによるXcodeプロジェクトの作成

ターミナルを起動し、mysql-connector-c-6.0.2.tar.gzを解凍してできたmysql-connector-c-6.0.2フォルダに移動してください。Finderで開いているフォルダをカレントディレクトリにしてターミナルウィンドウを開けるcdtoをインストールしておくと便利です。以下のコマンドを実行して数分待つとmysql-connector-c-6.0.2フォルダ内にlibmysql.xcodeprojができあがります。

cmake -G Xcode
Xcodeプロジェクトの作成

上で作成されたプロジェクトはOSX用なのでiPhone/iPad用にはそのままではビルドできません。また、かなり設定を変更してみてもエラーが消えなかったので、iPhoneOS用にきれいな設定を作り直し、コンパイルすべきファイルの一覧だけいただく、という方向でいきます。
Xcodeを起動し、新規プロジェクトを作成します。テンプレートはiPhone OSのLibraryから"Cocoa Touch Static Library"を選び、「選択...」ボタンをクリックして"mysqlclient"という名前を付けて適当な場所に保存します。この時できたmysqlclientフォルダ配下にmysql-connector-c-6.0.2フォルダを入れておきます(別にどこにあってもよいのですが、相対パスで指定しておいてまとめて移動可能にするためです)。

Xcodeのプロジェクトメニューから「プロジェクト設定を編集」を選択します。ビルドタブの「ヘッダ検索パス」に

$(SRCROOT)/mysql-connector-c-6.0.2/include

を設定します。また、「ユーザヘッダ検索パス」に

$(SRCROOT)/mysql-connector-c-6.0.2/extlib/yassl/taocrypt/include
$(SRCROOT)/mysql-connector-c-6.0.2/extlib/yassl/taocrypt/mySTL
$(SRCROOT)/mysql-connector-c-6.0.2/extlib/yassl/include

の3フォルダを設定します。

●ヘッダファイルの修正

mysql-connector-c-6.0.2/include/my_config.h
 HAVE_FDATASYNCの行をコメントアウトします。

#define HAVE_FDATASYNC 1

  ↓

//#define HAVE_FDATASYNC 1

mysql-connector-c-6.0.2/include/my_net.h
 ベースSDKが3.2でSimulator用にコンパイルが通らないので以下のように2行コメントアウトします。

#include <netinet/in_systm.h>
#include <netinet/in.h>
#include <netinet/ip.h>

  ↓

//#include <netinet/in_systm.h>
#include <netinet/in.h>
//#include <netinet/ip.h>

mysql-connector-c-6.0.2/include/my_global.h
 以下の行をarmでもコンパイルされるようにします。

#  if defined(__i386__) || defined(__ppc__)

  ↓

#  if defined(__i386__) || defined(__ppc__) || defined(__arm__)
●ソースファイルの登録

自分で作成したmysqlclientプロジェクトは開いたまま、最初にcmakeで作成したmysql-connector-c-6.0.2フォルダ内にあるlibmysql.xcodeprojをXcodeで開き見やすく並べておきます。
libmysqlプロジェクトのグループとファイルペインにあるlibmysqlの下にあるSourcesを展開してmysqlclientというグループを見つけクリックします。右側のファイル一覧ペインに表示されたファイルのどれかをクリックした後、⌘+Aですべてのファイルを選択します。
そしてこのファイル全体をドラッグしてmysqlclientプロジェクトのグループとファイルペインのmysqlclient配下の適当な場所(Other Sourcesあたり)にドロップし、ダイアログの追加ボタンを押せば完了です。

ユニバーサルバイナリの作成

構成をReleaseにしてDeviceとSimulatorの両方でビルドした後、mysqlclientプロジェクトフォルダ内でターミナルから以下のコマンドを実行してユニバーサルバイナリを作成します。

lipo -create build/Release-iphone*/libmysqlclient.a -output libmysqlclient.a

ビルドフェーズとしてスクリプトの実行を追加してもよいでしょう。このプロジェクト自体を使用するアプリケーションのプロジェクトに登録して依存関係を設定する場合は、自動的に必要なバイナリがビルド/リンクされるので気にしなくてもかまいません。
このライブラリを使う場合に使用するヘッダは、

mysqlclient/mysql-connector-c-6.0.2/include

にあります。

●プロジェクトのダウンロード

以下の場所に設定済みプロジェクトを置いてあります。
http://www1.axfc.net/uploader/Li/so/73895.zip&key=libmysql