Pages - Menu

2012-11-27

XML 基本的な注意点メモ

XML構造

ルート要素は文書内でユニークなものでなければならない。

NG例
<?xml version="1.0" encoding="utf-8"?>
<book>
    <title>abc</title>
</book>
<book>
    <title>efg</title>
</book>
ルートエレメント(book)がユニークでないので、XMLパーサがエラーを返してくる:The markup in the document following the root element must be well-formed.

ルートエレメント<books>でまとめればOK。
<?xml version="1.0" encoding="utf-8"?>
<books>
    <book>
        <title>abc</title>
    </book>
    <book>
        <title>efg</title>
    </book>
</books>

DTDの記述

エレメントの宣言を忘れていたりすると、"Element type *** must be declared."といったエラーが返ってくる。特にルートエレメントの宣言忘れに注意。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE books[
<!ELEMENT books (book)*>
<!ELEMENT book (title)*>
<!ELEMENT title (#PCDATA)>
]>
<books>
    <book>
        <title>abc</title>
    </book>
    <book>
        <title>efg</title>
    </book>
</books>

2012-11-12

[Win7] ログイン画面の背景画像の設定

次の方法で背景画像を設定できる

  1. レジストリエディタで以下のキーの値を設定
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background OEMBackground (DWORD) = 1
  2. 以下のディレクトリに画像をおく(形式はjpg、250KBまで)
    C:\Windows\System32\oobe\info\backgrounds\backgroundDefault.jpg
参考
[Windows7] ログオン画面の背景をかっこいい画像に変更する方法

2012-10-29

Photoshopで名刺づくり

Photoshop(またはIllustrator)で名刺をデザインし、名刺用紙(A4, 10枚分)で印刷する方法
※ここではPS7.0を使用
  1. 91mm×55mmのカンバスサイズで名刺をデザイン、psdで保存
  2.  別名で保存(画像を統合後は再編集できないため)
  3. レイヤー > 「画像を統合」
  4. (背景)レイヤーを複製して名刺レイヤーとする
  5. 「カンバスサイズの変更」 > 182mm×275mmに変更
  6. ガイドを作成(x=91mm, y=55, 110, 165, 220)
  7. 名刺レイヤーを複製し、ガイドにしたがって配置(2×5)
  8. プリントプレビュー > 「画像を中央に配置」にチェック
  9. プリンタの設定を確認して印刷

2012-10-27

複数行にマッチする正規表現

JavaScriptのString.matchメソッドでは、1行しかマッチングが行われない。
正規表現内に\nを含めても良いが、次のように書くことですべての行でマッチングが行われる。
String.match(/[\s\S]/)

参考
FFFF JavaScriptで改行にもマッチする正規表現Add Star

2012-10-19

invalid XML character

An invalid XML character (Unicode: 0x1e) was found in ...
というエラーメッセージを吐くことがある。
原因はよく分からないが、とりあえず、replaceAllメソッドで回避することは可能。
String.replaceAll("\\x1e", "")
\x1eは、16進数コード1eの文字。

ついでに、ネットでコードを調べているとよく出てくる"\"は、文字コードの問題でスラッシュになっているが、"¥"のことである。

2012-10-18

Protegeの関連付けができない問題

何かしらの条件で、Protegeを拡張子に関連付けられなくなる問題があるようである。
症状は次の通り。
  • 「ファイルを開くプログラムの選択」でProtege.exeを指定しても、エクスプローラが反応しない
  • コンパネの「既定のプログラム」 も同様に変更不可
原因は不明。
(私の場合、Protege.3.4.6を一旦アンインストールし、Protege3.4.8をインストールし直したところ、この症状になった)

仕方ないのでレジストリを直接いじって修正。
(レジストリの変更は自己責任で)

  1.  Protegeを開き、適当にプロジェクトを保存する
  2. *.owl *.pprj が作成される
    (*.owlのアイコンがProtege(またはLaunchAnywhere)→解決)
  3. *.pprjは少なくともProtegeに関連付けされてるのを確認
  4. Regeditを起動
  5. タスクマネージャーのプロセスでexplorer.exeを終了
  6. 次のキーを開く
    \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
  7. ここで、.owl以下のサブキーすべてを、.pprjと同じになるように変更する
  8. Regedit終了
  9. タスクマネージャー(win7/Ctrl+Shift+Esc winXP/Ctrl+Alt+Delete)を開き
    新しいタスクの実行からExplorerを実行

以上で関連付けが行われる。

String.splitメソッドによるOutOfBoundsException

String.splitメソッドで分割すると、値を代入する配列全体が初期化される。
例えば
String[] str = {"a", "b", "c"};
String x = "abcde";
str = x.split("g", 2);
としたとき、当然文字列xには"g"は含まれない。そのため、
str[0] -> "abcde"
となる。
ところで、予め初期化しておいた配列の第2・3要素は開放されてしまうことに注意する。
つまり、参照しようとするとエラーとなる。
str[1] -> OutOfBoundsException : 1
str[2] -> OutOfBoundsException : 2
そのため、第2以降の要素を用いる場合は、ほぼ必ずstr.lengthの判定が必要ということになる。