Doxygen の文字化け

IT

現在の最新版 Doxygen 1.8.6 で不可解な文字化けに遭遇したのでメモ。 /** * @file * This header file provides useful functions for handling UTF-8 and UTF-16 string. * * @section VALID_UTF8 Valid UTF-8 sequences. * * <pre> * +--------------------+--</pre>…

Java JNI の GetStringUTFChars は古い Unicode 仕様のシーケンスを返す

Unicode サロゲートペア範囲の "𡈽" という文字は、コードポイントが U+0002123D、UTF-8 のシーケンスだと [F0, A1, 88, BD] になる。JNI で "𡈽" のみで構成される String を以下のように UTF-8 に変換すると: const char *utf8 = env->GetStringUTFChars(…

Java でネイティブメソッドをオーバーライドして、インナークラスを引数で渡す場合の注意点

Java で以下のように native メソッドを定義する。 public class JniTest { static { System.loadLibrary("JniTest"); } class Inner { } native void hello(Inner inner); public static void main(String[] args) { JniTest test = new JniTest(); test.he…

Integer.parseInt(String, int) の使用上の注意

Integer.parseInt(String, int) には使用上注意しなければならない挙動があり、結果が負の値になる 16 進数文字列をパースすると NumberFormatException が発生する。わかりやすいのは以下の例。 Integer.parseInt("80", 16); // 128 Integer.parseInt("FFFF…

実行中の JVM のビットモード判定

実行中の JVM が 32bit なのか 64bit なのかを判定したい。以下のエントリのメソッドがシンプルに実装されていて良い感じ。 [java]動作中のJavaVMが32Bitか64Bitかを判別 - maachangの日記 上記エントリにも書かれているが、プロパティの名前と意味がわかり…

Editor component まとめ

IT

「テキストエディタ実装したい病」が再発したので、いろいろ調べてみたまとめ。 SWT StyledText SWT StyledText は Canvas を継承して実装されている。継承してしまえば描画はやりたい放題で、文字以外の描画も自由自在。ただし、残念なことに特定のフォント…

各プラットフォームのフォントの高さについて

IT

フォントの高さ、というのがプラットフォーム毎に少しずつ違うようなので、簡単にまとめてみた。ここで言う「高さ」とは、一行表示する際に必要になる高さのこと。つまり、次の行との余白は含まない。 Microsoft (Win32 API) の場合 Height = Ascent + Desce…

SWT の StyledText について調べたまとめ

SWT の StyledText は、簡単に言えば指定した範囲に任意の色を付けられるテキスト編集コントロール。Eclipse のエディタも、上位にドキュメントフレームワークがかぶさってはいるものの、基本的にこのコントロールが使用されている。この StyledText は、Can…

Windows 7 の環境変数 PATH

IT

XP の頃は: c:\hoge\bin;%PATH%みたいな感じでシステム環境変数をユーザ環境変数で上書きできたのに、Windows 7 ではそれができず、上のように書くと: %PATH%;c:\hoge\bin;%PATH%こんな感じで展開されてしまう。要するに、ユーザ環境変数の先頭に自動的に…

UUID の重複する可能性

IT

UUID Wikipedia 日本語版によると UUIDは、分散システム上でどこかが統制を取らずとも、一意に特定可能な識別子の作成を目的としており、UUIDは重複や偶然の一致が起こりえないと確信して用いることができる。 UUID - Wikipedia という。しかしながら、高々 …

マウスジェスチャーとかコンテキストメニューを dispatchEvent で表示させようとした調査とか

かざぐるマウスという Windows 向けのマウスジェスチャーアプリがありました。現在は公開が中止されていて、ドメインも手放されたようです(その後同一ドメインが怪しいサービスに取られてしまっているので、アクセスしないようにしてください)。Chrome の…

D 言語の isOutputRange の解せぬ挙動

D

なんで以下の 7 行目で AssertError が発生するのでしょうか。 import std.range; void main() { assert(isInputRange!(bool[])); assert(isOutputRange!(bool[], bool)); assert(isInputRange!(char[])); assert(isOutputRange!(char[], char)); // これが…

Ajax クロスドメイン with jQuery

jQuery で Ajax を行うのにあたり、同一ドメインにアクセスする際には問題ないけど、違うドメインにアクセスしようとする場合、何らかの対応が必要になります。対応方法が3つあるので、簡単にまとめておきます。 ベース実装 まず、今回のエントリのベース実…

Haskell でファイルシステムの変更を検出する

この記事は Haskell Advent Calendar 2013 の 15 日目の記事です。Haskell でファイルシステムの変更を検出する方法を調査してみました。いきなり Java で恐縮ですが、イメージとしては以下の様な感じです。 import java.nio.file.*; import static java.nio…

HEAD タグを 2 回書く

IT

昨日、<meta http-equiv=""> の仕様を調査していて同僚が見つけたページ。 http://support.microsoft.com/kb/222064/ja 驚いたのは、この問題の解決方法として <html> <head> </head> <body> </body> <head> 解決案 </head> </html> という具合に、HEAD タグを 2 回書いちゃってるところ。これが HTML の各バージョンで許容されている</meta>…

East Asian Ambiguous Character Width の確認を ICU4C で行う

特にターミナル上で作業するにあたり、East Asian Ambiguous Character Width 問題は頭がいたい。以下は vim のスクリーンショット。■とα、きれいに表示されているだろ。ウソみたいだろ。全角なんだぜ、それで・・・*1 という訳で、文字種によって、East Asi…

gcc のリンカエラーはライブラリ指定が末尾にないため

リンカのエラーが発生した場合のオプションを末尾に記述しなければいけない理由は不明です。 Cygwinでのncursesの使用について - あいや☆ぱぶりっしゅぶろぐ! うわ、これは知らなかった・・・。1 時間以上ハマってしまった・・・。

メモリの浪費を避けるコーディング、を読んだ感想

【JavaScript】メモリの浪費を避けるコーディング | ヘッドウォータースのブログ TechNote を読んだ感想。最初にお詫びしておきます。かなり批判的になってしまいました。 JavaScriptオブジェクトについては、ガベージコレクタ方式が採用されています。ガベ…

Word 2010 の Ctrl + ホイールで拡大・縮小しないようにしたい

Ctrl + ホイールでの拡大・縮小は、直感的で使いやすい一方、Ctrl + S で保存してすぐにスクロールすると、保存に時間がかかるためにスクロール時に Ctrl が押されている判定をしてしまい、意図しない拡大・縮小が発生してしまう。Word の設定とヘルプをくま…

jQuery でラジオボタンのチェック判定に attr を使用すべきではない

動かしてみるのが一番わかり易いのでサンプルを作ってみた。 2013-10-23 1st - jsdo.it - Share JavaScript, HTML5 and CSS このサンプルでは、ラジオボタンの状態を jQuery の $("input[name='lang']:checked").val() $("input[name='lang']").filter(":che…

人の恨みは怖い

人の恨みは怖い。 妻はその時からずっと、同じ状況になったら全く同じ言動をしてやろうと思っていたそうです。 背筋が氷りました。 8年間も復讐の機会をうかがっていたなんて。 妻が長年抱えていた黒い感情について : 男性から発信するトピ : 発言小町 : 読…

Thread の割り込みフラグは InterruptedException の throw によりクリアされる

例えば自身で作っているコード内で、呼び出し元の処理をブロックしたいようなケースはよくある。 String send(final String msg) throws IOException { Thread thread = new Thread() { private response; public void run() { os.print(msg); // 送信に不定…

JavaScript のグラフライブラリメモ

Android タブレットで表示できる JavaScript ベースのチャートライブラリを探したメモ。探しているものは、棒グラフと折れ線グラフのコンボチャートを表示できて、できればデータを差分追加することできれいに差分更新されるもの。描画検証に使ったのは Andr…

JavaScript で文字列の幅を取得する

ブラウザ上に表示される文字列の幅を取得する必要があり、以下のサイトにたどり着いた。javascriptで文字列の描画幅を取得する方法 - Qiita最小のサンプルにすると、以下のようになる。 <html> <head> <script type="text/javascript" src="jquery-1.9.1.min.js"></script> <script> function strWidth(str) { var e = $("#ruler"), width = e.text(</head></html>…

sleep() と WaitForSingleObject() と割り込み

C

既存の実装に: while (condition) { sleep(2); } みたいな条件を満たしているかどうかを 2 秒間隔で確かめるコードがあったが、処理が最遅で 2 秒遅れるので、以下のように書き換えた。 WaitForSingleObject(hHandle, INFINITE); 条件が満たされた時点で Re…

wait() したい場合は、専用のオブジェクトで wait() しなければならない

今日遭遇した問題。以下のコードは、起動引数に何かを与えるとスレッドを起動して無限に待ち、何も与えないとスレッドを起動せずに無限に待つ。 public class Wait extends Thread { public static void main(String[] args) throws Exception { Wait w = ne…

Haskell で XML と JSON をパースする方法

調査がひと段落ついたので冒険の書にセーブ。 XML のパース Haskell の XML パーサは結構種類が豊富です。Which Haskell XML library to use? - Stack Overflow によると、 xml: 処理が簡単なら haxml: 処理が複雑なら hxt: 矢印が好きなら hexpat: パフォー…

vim で lua を使えるようにビルドしたメモ

Lua

ここでは Cygwin 上に構築するものとして説明します。 Lua の設定 まず、最新の Lua を以下よりダウンロードします。 Lua: download 本日時点で 5.2.2 です。僕は拙作の UTF-8 対応版(GitHub - satosystems/lua-5.2.2-utf8: Lua 5.2.2 with UTF-8)を使用し…

ファイル名に使用できない文字、使用できない名前

IT

ユーザが入力したファイル名が、その OS で使用できない文字を含んでいるかを事前にチェックして、ダメならユーザにメッセージを表示する」という要件があった。Windows なら サイト URL、フォルダ名、ファイル名に使用できない文字 あたりに情報がまとまっ…

Chrome と IE の Cookie の空白文字列の扱いの違いについて

JS

Chrome と IE で Cookie の扱いが違うことに気が付いた。jQuery で以下のようにテキストフィールドの内容を Cookie に保存する場合: <input type="text" id="foo"> <script> document.cookie = "foo=" + $("#foo").val(); </script> テキストフィールドに何も入力されていない場合空白文字が保存される。…