Windows 10でRealforce 87Uが日本語配列と誤認されて困った

東プレ REALFORCE87UW 静電容量無接点方式 英語87配列 USB 昇華印刷 Nキーロールオーバー対応 変荷重(30/45/55g) テンキー機能付き ディップスイッチ搭載 ホワイト SE07T0

Windowsマシンでの開発用に、↑のキーボードを買いました(Realforce 87UW)。で、到着したので早速手元にあるWindowsマシンに繋いでみたところ、問題発生。英字配列のキーボードなのに、日本語配列と誤認されるのです。

たとえば、「@」は、US配列なら「Shift + 2」ですが、JIS配列では別の場所にあります。繋いだ直後に入力してみたところ、「Shift + 2」で「”」が表示される状態。つまり、JIS配列のキーボードとして認識されていました。

ちなみに、環境はPanasonic Let’s Note CF-AX2 + Windows 10 Developer Preview英語版という割とレアな環境なので、他の環境では再現しないかもしれません。

修正方法ですが、デバイスマネージャで別のドライバを使用するよう設定変更を行います。Windows 8におけるUSキーボードへの設定方法について というQ&Aで、日本語版Windows 8の設定変更方法が載っています。Windows 10でも、基本的にこの手順でOKでした。キーボードの種類は「Standard PS/2 101/102 Keyboard」を選択。

ちなみに、高速起動(Fast Startup)オプションが原因でキーボードを誤認する、という情報もありますが、少なくとも私の環境では、高速起動オプションのオンオフとキーボードドライバの設定は関係なかったです。

『AngularJSアプリケーション開発ガイド』第2章のサンプルコードの問題点と直し方

AngularJSアプリケーション開発ガイド

一言でいうと

動かない時はオライリーのサイトからサンプルコードを落として読もう

詳細な説明

本書の第2章第6節「ルートと$locationに応じたビューの切り替え」では、AngularJSのルーティング機能を利用しています。

ルーティング機能(ngRoute)は、AngularJS 1.2.0まではAngularJSに同梱されていたのですが、1.2.0以降は別モジュールとして分割された、という経緯があります。

原書の著者がGitHubで公開しているサンプルコードを見ると、読み込んでいるのはv1.0.8のangular.min.jsのみで、ルーティングモジュールは読み込んでいません。

一方、訳書である本書は、訳者によって以下のように変更されています。

本文中には全く登場しないangular-route.jsがしれっと登場していますが、AngularJS 1.2.0以上では、このファイルが無いとサンプルコードは動きません。angular-route.jsはCDNなどから取得するとよいでしょう。たとえば、最新版の1.3.5の場合、以下のコードで取得できます。

また、ngRouteは外部モジュールなので、モジュールを作成する際に依存先として指定しておく必要があります。

ngRouteモジュールの読み込みと、依存先の指定の2点を行えば、第2章第6節(AMail)のサンプルコードは動きます。実際、冒頭で紹介した訳者によるサンプルコードでは、CDNからangular.min.jsとangular-route.jsを読み込んで、[“ngRoute”]しています。ただ、これらの解説は本文中に全くありません。本書が日本のAmazonで低評価になっている一因はここにあります。

Xcodeでは複数のファイルにmain()を書いてるとビルドエラーが出る

XcodeでC++を書いてたら、ビルド時に以下のエラーが発生。

最初なんじゃこりゃと思ったけど、よく読めば簡単。「duplicate symbol _main」って言ってる。実際、プロジェクトの中を見てみたら、複数のファイルにmain()関数が書いてあった。

Xcodeのビルド機能は、単一のファイルをビルドしてるわけではなく、プロジェクト内の全てのファイルをひとまとめにしてビルドするので、main()が複数あったらそりゃあエラーになるよなあ、と。

解決法は、プロジェクトからファイルを除外すること(「Delete > Remove Reference」)。

Xcodeはそもそもプロジェクト単位でソフトウェアを書くためのツールなので、「高機能なエディタ」感覚で使用するのには向いていない。。。