ある種のプログラミング言語学

foo, bar, baz..
Fooの語源(RFC3092)
 
ほげ(hoge),ふが(fuga),ぴよ(piyo)…
ほげを考えるページ
 
foobar 派ですが、ほげを考えるページの

4.「ほげ」を英国語に訳すときは foo で良いのでしょうか?
違います。「ほげ」を英国語に訳した場合は hoge です。

には笑ってしまいました。男前。
 
ドメインではexample.com,example.net,example.org(RFC2606)ですね。
参考:
メタ構文変数(wikipedia)
example.com(Wikipedia)

ランダムポートは個人を特定しやすくなる、ということ

P2P の実用性について書かれている高木さんの記事が面白かった。
 
ドワンゴ勉強会でお話ししたこと
 
その中で得に気になったのは、匿名性のためにはランダムポートでなく固定ポートで待ち受けるべき、という話です。
 
待ち受けるポートをランダムにすると、ポート単位規制の回避、接続ポートを知らない不特定のクライアントからのアクセス防止といったメリットがある反面、ユーザの少ないネットワークにおいてIPが変わってもポート番号でユーザを結びつけて追跡されうるデメリットがあるとのこと。実際、氏は「ダウンロード違法化反対家の知られるべき実像(高木博光@自宅の日記)」にてこの手法で追跡を行っている。
 
ユーザの匿名性・安全性を考えた対応が、逆にユーザの追跡を容易にさせてしまうというのが皮肉です。

フリーで使える駅の座標情報データベース

http://www.ekidata.jp/
– 無料ダウンロード「駅データ.jp」
 
駅の情報(都道府県、駅名、路線、会社、地図座標等)がCSV形式でダウンロードできます。商用でも使え、最新の駅にも対応しているのがいいですね。

Zinnia – 手書き文字入力エンジン

Zinnia
http://zinnia.sourceforge.net/index-ja.html
 
書き順と座標のデータから一致する候補の文字を取得するライブラリ。
特徴はフィードバックすることで精度が上がる機械学習を採用している点と、
汎用性を持たせるためにあえて描画周りの実装を一切していないという点。
 
参考:
Flash との連携例 – http://blog.isocchi.com/2009/01/flexair-zinnia.html

ひこにゃんに学ぶ著作権

今朝ニュースを見ていたら、第二のおふくろさん騒動ともいえるニュースが流れていました。
 
ひこにゃんピンチ!…作者、彦根市に使用中止求める(YOMIURI ONLINE) より引用:

もへろんさん(22)が「適正なキャラクター管理を怠った」などとして、市と同祭実行委員会に祭終了後の使用中止を求める調停を彦根簡裁に申し立てたが、市は9日、ひこにゃんを今後も市のマスコットとして使用すると発表した。
 
 実行委は祭のキャラクターとして2006年1月、もへろんさんが応募したネコをモチーフにした3種類の図柄を採用。実行委が許可した団体の出版物などへの利用を許可してきた。
 
 しかし、申立書によると、実行委は「お肉が好物」「特技はひこにゃんじゃんけん」など作者の意図しないひこにゃんの性格づけをしたと主張。粗悪品が出回りかねないのに無制限に使用を承認しているなどとしている。

 
財産権である著作権を持つ彦根市に対して、作者のもへろん氏が著作者人格権のうちの同一性保持権を行使している形ですね。
 
著作権は譲渡可能ですが、著作者人格権は Wikipedia の言葉を借りると「一身専属性を有する権利であるため他人に譲渡できない」権利であるとされているため、勝手な性質の追加に対して異義を唱える事は妥当である、と思います。
 
しかし、前述の記事のように「祭終了後の使用中止を求め」たり、スポニチアネックスの記事にあるように、営利目的の利用や対して「相当額の支払いを求め」たりということまで要求できるかは、祭以外の利用や営利目的の利用が、著作者の名誉声望を害するかは微妙なところではないでしょうか。
 
今回の事例が教えてくれることは、クリエイター、デザイナー、エンジニアなど個人と企業の間での契約では、個人が作成した成果物の著作権は企業が所有する、という契約が多いと思いますが、この契約上でも個人が著作物に対して著作者人格権を行使することができるということです。
 
 ちなみに、プログラムについては「特定のコンピュータで利用できるようにしたり、より効果的に利用し得るようにするために必要な改変(Wikipedia)」であれば同一性保持権でいう改変にはあたりません。
 
とりあえず彦根市の問題については、ひこにゃんは個人的にも好きなキャラクターですし、町興し成功の好例なので、当事者間でうまく話がまとまるといいなと思っています。
参考:
著作権法(Wikipedia)
著作者人格権

プロジェクト内ファイルが増えて Eclipse が重い

既存のバージョン管理されていない、それなりに大きい規模のプロジェクトを SVN でバージョン管理しようとしている今日この頃。
 
手始めに現状のリソースの一部を Eclipse(+Subclipse) に 1プロジェクトとしていれてプロジェクトまるごとリポジトリに突っ込んだ結果、SVN を見に行く処理の度に激しく重くなってしまいました。
 
現時点でプロジェクトフォルダ内にあるファイル数は約 50000 個、フォルダは約 2500個、データ量 1.85GB。
 
いくら Eclipse が昔に比べパフォーマンスがよくなったとはいえ、この数を扱うとさすがに重い。そのせいなのか同期に失敗したり(というか反映が激しく遅かったり)、ところどころ動作が怪しい。
 
このままでは作業に支障がでる、ということでリポジトリから部分チェックアウトして別個プロジェクトとして作業することにし、無事軽快さを取り戻しました。
.project を svnignore に追加しておけばリポジトリとの齟齬もありません。
 
難点は現状チェックアウトフォルダがプロジェクトルートじゃないと同期がとれなくなることでしょうか。ある親フォルダの、一部の子フォルダのみバージョン管理させたい場合は子フォルダごとにプロジェクトを分けるか、親フォルダでチェックアウトして svnignore で更新フォルダを限定するかのどちらかの対応しかなさそうです。
 
前者で対応する場合、作業セット(working set)(パッケージエクスプローラの右上の▽ボタン)を使うと、VS.NET のソリューションみたくパッケージエクスプローラの表示をフィルタリングできるのでよさそうです。
 
ナビゲーターフィルターもそれなりに使えそうですが、こちらは表示しないものを選択するネガティブフィルタリングであることと、編集が若干手間なのがネックです。
 
[[|Eclipseのナビゲーターのフィルターパターン追加http://fenrir.naruoka.org/archives/000530.html]](Fenrir’s BLog)

MeCabのコンパイルでエラー

mecab-0.94 をインストールしようとしたところ、make で

no matching function for call to `basic_string,__default_alloc_template >::clear ()’

というエラーが出たので調べたところ
こちら(CJ?ごろうのひとりごとかも?)によると、GCC 2.X にはstring.clear() がないためにエラーになっているとのこと。
 
作業環境に GCC3.4 があり、ports でインストールしようとしていたので

cd /usr/ports/japanese/mecab
make USE_GCC=3.4

として無事解決しました。

RDBMS で任意のレコードが、指定した条件、順序の時に何番目になるかを調べる SQL 文について

SELECT * FROM a_table WHERE condition ORDER BY a, b DESC, c

の場合は、ID の a,b,c の値をそれぞれ an, bn, cn とした時、
前からの位置 n
{n| 0 <= n < (SELECT COUNT(*) FROM a_table)}は

SELECT COUNT(*) AS n FROM a_table WHERE
 condition AND
 (
   (a < an) OR
   (a = an AND b > bn) OR
   (a = an AND b = bn AND c < AS cn )
 ) — … (A)

の結果となる。
 
例:

NO: 0 1 2 3 4 5 6 7 8 9 10 11
ID: 0 1 3 5 7 9 10 11 15 20 21 23
 a: 1 1 1 1 2 2 2 2 3 3 3 3
 b: 4 4 2 0 3 2 1 1 4 3 3 3
 c: 0 1 0 2 3 3 2 3 2 3 3 4

テーブルの内容が上記の NO を除いた ID, a, b, c を属性として持ち
検体の ID が 10 の時
a < an を満たす要素は an == 2 なので 4 個 ..(1)
a = an AND b > n を満たす要素は bn == 1 なので 2 個 ..(2)
a = an AND b = bn AND c < AS cn を満たす要素は cn == 2 なので 0 個 ..(3)
全ての計算は排他なので (A) の結果は (1)+(2)+(3) = 6
これは 0 番目から数えた時の 位置 NO に一致する。