椿の日記

たぶんプログラムの話をします

プログラミング

MinGWからDirect3D11を呼び出す

色々知らないことが多くて大変でした… 忘れないようにメモを残します。 MinGWのバージョン $ g++ --version g++.exe (GCC) 3.4.5 (mingw-vista special r3) d3d11.hのコンパイルを通す まずコンパイル通すためだけにテスト用のソースを作ります。 // compile…

OpenGL

を、唐突に使い始めました。 今までOpenGLを使ったことが無かったので資料漁るところから…。 とりあえず、ウィンドウ開いて画面クリアするまでは、glutを使ったら超簡単でした。 雑多なデモを作ったりするときは重宝しそう。

boost::variantと関数型

C++で書いてると、色んな型に変化するようなオブジェクトを扱うときに基底クラス作って派生させて…みたいなこと考えるのが凄い嫌だったんですがboost::variantを使うと関数型のような感じで書けるということに気づいたC++で書くツールなら確実に使えるなあ。…

wxHaskellでカスタムコントロールを作ってみた

作り方が分かると凄く簡単でした。IOだの状態だの使いまくったためHaskellっぽくない気もするのですが、そこらへんの部分をカスタムコントロールで吸収しきれば幸せな人生が待ってる、と信じることにしたので作るのは苦行にはなりませんでした。作ったのはヘ…

wxHaskellのカスタムコントロールの作り方

Viewのコードを再利用したくなって、こりゃカスタムコントロールを作らなきゃならんなぁ…と思ったものの、wxHaskellでのカスタムコントロールの作り方がわからんちん。特に、カスタム属性の保存とか取得って一体どうやってやるの? と思ってたのですがこんな…

Hackageのドキュメントが新しくなってた

前のほうが見やすかったような。

wxHaskellのListCtrl

デフォルトの状態でListCtrlを構築してクリックするとWindowsのサウンドで設定されているエラー音が何故か鳴ったり、 カーソルをアイテムの上に載せて右クリックを続けるとon clickRightイベントとon listEvent+ListItemRightClickイベントが交互に呼ばれた…

wxHaskellでマウスの位置取得

こんな初歩的なことでもドキュメントを漁らないとならん(笑)美しく書けるのは嬉しいんだけど、大半の関数が知らない関数なので、何をするにもまずドキュメント、という感じになってしまいます。wxHaskellでマウスの位置を取得するには大雑把に2通りの方法が…

haskellの変数に付けるコーディング規約とか

実際にHaskellでアプリを書いていて気になりはじめたんだけど、色んなものの命名規則を決めておかないとコード書くたびに悩んでしまって駄目ですね。Haskellはxだのxsだの短い変数をつけるのが慣習みたいですが自分はそういう命名が嫌いなので長い名前を付け…

wxHaskellのイベントハンドラと、アプリケーションの状態の記憶

wxHaskellでは、ウィンドウでのイベントをIOモナドの関数で処理するための仕組みがあります。 例えば「ファイル→終了」のメニューアイテムに「close f」というウィンドウfを閉じる処理を割り当てるなら次のようなIOモナドによってイベントハンドラを設定しま…

wxHaskellがIOモナドだらけ

ドキュメントを見れば見るほど、やたらとIOモナドが目に付いてしまう。関数型言語でGUIを使えるようにした結果がこれでは、がっかりにもほどがあります…。IOモナド汚染から逃れるために、外側でIOの"殻"を外してしまえばいいのだろうけど、そもそも、楽にプ…

ビットマップの部分描画

wxHaskellでBitmapを部分描画しようとおもったんだけど、関数が見つからない。Data.BitmapにcopySubImageという関数がある。これを使ったらいけるだろうか、と思ったら、Data.BitmapとwxHaskellのBitmapは型的に別物だったり。検索してみたら同様のことで悩…

wxHaskellを再インストールするときは

wxWidgetsの設定を少し変えてwxHaskellを再インストールするときは、次のようにwxcoreを忘れず更新します。 $ cabal install wxcore --reinstall $ cabal install wx --reinstall おそらく、wxcoreがC側とのやり取りをしてるので、こっちだけでいいのかもし…

wxHaskellインストール手順

こちらを参考にして進めます。 http://d.hatena.ne.jp/sirocco/20100620/1276999507 wxWidgetsのインストール ここからwxWidgetsの最新(現時点で2.8.11)をダウンロードして、適当なところで展開します。 http://www.wxwidgets.org/downloads/ MSYS環境で、展…

WPFのGridSplitterが他のコントロールバーと重なる

GridSplitterを中央に配置して、左側にマップ画面、右側にチップ画面という感じで配置しようとしたけどGridSplitter自体が他のコントロールに重なってうまくいきません。 専用の枠を作って、そこにGridSplitterを入れる、ということをするらしいです。 http:…

WPFはじめました

世間の波にのって、私もWPFを勉強し始めました。 WPFが今までと何が違うのか、というのを理解するには経験が足りなすぎるので、ひとまずアプリを作ってみます。 とりあえず、ヘックスのマップエディタが欲しかったということにして、作ってみましょう。

Akinatorとアジャイル開発

「あなたの欲しかったシステムは○○ですか?」 「あなたの欲しかったシステムは△△ですか?」 「あなたの欲しかったシステムは□□ですか?」 「あなたの欲しかったシステムはこれですね?」→No 以下、無限ループ。

Akinatorの仕組みが気になる

何を言ってるんだか分からなかったからこっそり修正...http://jp.akinator.com/これは面白いですね。内部的な実装はどうなってるのでしょうか…キャラクタの全集合を、出来るだけ素早く、かつ確実に削っていける質問を選択しているから最初に「女性か」「男性…

std::stringbufでNULL文字

stringstreamでNULL文字を扱うときの挙動はどうなるんだろう? と不安に駆られてテストしてみたのですが、終端文字としては扱われないようで、安心しました。 void main() { std::stringstream s; const char text[] = "\0asdf"; s.write( text, sizeof(text…

std::stringbufの長さの伸び方

std::stringstreamを使う用事が出てきたのですが、メモリの確保の仕方はどうなってんのかなー、 と思ってソースを追っかけたら、std::basic_stringbuf::overflowの中がこんな感じになっていました。 (環境はVC2005です) size_t _Inc = _Newsize / 2 < _MINSI…

リファクタリングしまくり

とある数値解析の処理を勉強してたのですが、教科書に書かれている解説が分かりにくいんで、具体的に書かれている添付プログラムを読んで理解の助けにしようと思ったのですが… このソースがまた汚い(笑) Pascalで書かれてるんですが、自分はPascal知らないし…