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

Haskell と SDL #2

Haskell と SDL - satosystemsの日記 の続きです。マウスイベントをハンドリングして画像を描画するようにしてみました。今までは main 関数内に直接記述していた描画コードを、以下のように関数として切り出しました。 drawImage :: SDL.Window -> Ptr SDL.…

Unicode の正規化でハマった話

IT

まずは以下のコードを見てください。 import java.io.File import java.io.FileOutputStream val file1 = new File("\u30C9ラえもん.txt") val fos1 = new FileOutputStream(file1) fos1.write("ぼく、ドラえもん。".getBytes("UTF-8")) fos1.close() val fi…

Haskell と SDL

この記事は Haskell Advent Calendar 2014 の 8 日目の記事です。Haskell で SDL を利用してゲーム的な何かを作成するための入門記事です。 環境構築(Haskell Platform) Haskell の開発環境は Windows/Mac/Linux いずれでも構築可能です。僕は普段は Haske…

Mac Book Air のキーボード配列を設定したらめちゃくちゃはかどった

Mac Book Pro および Mac Book Air のキーボードは、数年使っているけどなかなか慣れないけど、何とかなった、という話。悩みだったのは以下。 Mac のノートは、右手側に option がないので、左手が死にそう control と caps の配置が Windows とは逆で、頭…

あるポーカーの手役で最善手を検証してみる

Haskell でポーカー役判定処理を作ったので、これを使って遊んでみる。以下の手札があったとする。よくある感じの手札だと思う。ここから、何をどう切ると、どれぐらいの期待値で勝利するのか、というのを検証してみたい。ルールは以下とする。 一回だけチェ…

Haskell でポーカーの役判定処理 #3

Haskell でポーカーの役判定処理 #2 - satosystemsの日記 の続き。だいぶ良くなったと思う。改善したのは以下の箇所。 Maybe をモナドとして使用するようにした リストに対してリスト操作関数を適切に使用するようにした ジョーカーを使うとフルハウスで勝敗…

Haskell でポーカーの役判定処理 #2

Haskell でポーカーの役判定処理 - satosystemsの日記 の続き。ポーカーの役判定処理をイチから書き直した。 改善されたのは以下。 エースが数値で最も強いルールに改善 絵柄による役の強さに改善 ジョーカーがあっても判定できるように改善 いくつかのバグ…

Haskell でポーカーの役判定処理

麻雀の役判定処理を Haskell で書いてみようかと思って、スモールスタートとしてポーカーの役判定処理を書いてみた。最初はすべてのカードをデータコンストラクタとして定義する方法を検討していたんだけど、データコンストラクタが多くなりすぎてパターンマ…

Haskell で作成した DLL を秀丸マクロから呼び出す

秀丸で Haskell 開発環境をパワーアップさせるために、マクロから呼び出す DLL を Haskell で書ければハッピーになれると思い、調べた結果をまとめておきます。 環境 OS: Windows 7 Haskell: Haskell Platform 2013 2.0 GHC: ghc 7.6.3 秀丸: 8.35 32bit は…

adb で簡単に YYYYMMDD-HHMMSS.png という日時ファイル名のスクリーンショットを取る方法

Windows の場合。以下の内容を cap.cmd という名前で保存。 setlocal set file=/sdcard/%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2%.png adb shell screencap -p %file% adb pull %file% . adb shell rm %file% endlocal実行はコ…

Ubuntu One サービス終了

IT

Ubuntu One がサービス終了となるようだ。 2014年4月4日号 Ubuntu Oneのサービス終了とサーバーサイドソース公開・ECS LIVA・MinnowBoard MAX・UWN#361:Ubuntu Weekly Topics|gihyo.jp … 技術評論社 6/1 でサービス終了、7/31 まではデータが保存されるそ…

xterm で cls

IT

コマンドプロンプトで cls を多用する。xterm にはメニューにバッファクリアはあるものの、マウスで選択したりするのは面倒で、なにか良い方法はないかと思っていたのだが、stackoverflow でズバリそのものの質疑応答を見つけた。unix - What commands can I…

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つあるので、簡単にまとめておきます。 ベース実装 まず、今回のエントリのベース実…