2013-01-01から1年間の記事一覧

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> テキストフィールドに何も入力されていない場合空白文字が保存される。…

String の + 演算 vs StringBuilder#append(String)

String は immutable なオブジェクトなので、例えば "1" + "2" というコードを書くと "1" の領域の最後に "2" がくっつくわけではなく "12" という新しいインスタンスが割り当てられる。だが "1" + "2" + "3" と書くと、"12" という String がまずできて、そ…

Integer.parseInt(String, int) にご注意

0xFFFFFFFF は 32 bit int で、型が符号付きなら -1 です。Java は符号なし int はないので、常に -1 なのですが、ちょっとした罠があります。以下は文字列 "FFFFFFFF" を int に直そうとするコードです。これを実行するとどうなるでしょう。 public class P…

WeakReference と ReferenceQueue

今日は新しい技を会得したぞ!Java のオブジェクトが GC で回収されたことを検知したい場合、いくつかの方法があります。対象のオブジェクトに finalize() を実装しておく、というのは最も簡単な方法ですが、副作用があるし、何より自分で実装したクラスじゃ…

printf と write の同期

フレームワークが write システムコールで標準出力にログ出力、そのフレームワーク上で動作するアプリケーションは printf で標準出力にログ出力し、アプリケーションはマルチスレッドで動作するというケースにおいて、write の出力が printf の出力で潰され…

始発で帰る

久しぶりに会社に泊まってしまった。バグを残したまま週末をまたぐと色々と忘れてしまうから、もう少し、あと少し、としているうちに、終電がなくなってしまった。バグがとれたのでよかったんだけど。 始発が始まるまでの間、はてなダイアリーの下書きに眠っ…

Java の総称型は便利だけどちょっと残念

Java の総称型はかなり便利で、いやそれまでが不便だったんだけど、それに気がつかなかったということかも知れない。たとえばこういう宣言を見ると、ちょっと苦痛に感じる。 List list = new ArrayList(); このリストには何が入ってんだよ? 参照するときキ…

各種テキストエディタのデータ構造と処理を邪推する

IT

鈴川エディタというテキストエディタをご存知でしょうか。私はついさっき*1知りました。触れ込みは以下の通り。 小さいメモリ(50MB以下)で大規模テキストファイル(300GB、2,000億行)を編集できる世界唯一の超巨大テキストエディター http://www.szkwjp.c…

正規表現エンジンメモ #2

IT

正規表現エンジンメモ - satosystemsの日記 の続きです。 SRegex http://www.syuhitu.org/other/regex/regex.html 「主筆」という Solaris で動作するテキストエディタを作成されている方の、主筆のための正規表現エンジン。 世の中に存在する正規表現ライブ…

JDK のソースコードのコピーライトがヒドイ

Sun Microsystems のコピーライト条項に問題があったのか、以下のようにバッサリ削られている。 全部見たわけではないけど、多分全部こうだ。もう少しマシな消し方があったのではないか。

Open Group の正規表現実装

IT C

こちらのサイト(http://www.syuhitu.org/other/regex/regex.html)を読んでいたら、気になる文章を発見。 (余談だが、ANSIの規格ではCのライブラリに正規表現ライブラリが含まれることとなっているらしい。 そのため、Borland C++ Compiler 5.5.1では使用…

Wink でキャプチャ、ffmpeg でエンコード、VLC Player で H264 に変換

IT

動画作成のメモ。僕は Wink というキャプチャソフトで SWF(flv ではない)を作成していたんだけど、お客様がそろそろ Flash をやめたいという意向があって、メジャーな動画形式にするということになった。Wink はものすごく使いやすいというわけではないん…

構造体のメンバのオフセットを取得する offsetof

Android のソースツリー内に頻繁に見かけられる offsetof というマクロ。構造体のメンバのオフセットを取得するマクロなんだけど、よく考えられてるなと感心した。 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) もっとも、構造体のオフ…

Prolog の紹介

IT

フィボナッチで各種言語をベンチマーク - satosystemsの日記 で Prolog のフィボナッチを以下のように実装しました。 fib(0, 0). fib(1, 1). fib(N, NF) :- A is N - 2, B is N - 1, fib(A, AF), fib(B, BF), NF is AF + BF. goal :- fib(38, NF), write([NF…