2014年12月28日

やってしまった

zlib を使ったコードを Visual C++ で書いて Xcode でテストしていたのですが、謎のエラーに悩まされました。Visual C++ で実行しているときは何もないのですが、Xcode で実行すると落ちるんです。やっとのことで原因をみつけだしてみると...


uint32_t destsize = ...
...
int zerr = ::uncompress(destbuf, (uLongf *)&destsize, sourcebuf, sourcesize);

とかやっていたのが原因でした。問題は (uLongf *)&size の部分です。uLongf は zlib で typedef されている型で、実体は unsigned long です。

Visual C++ だと uint32_t も long も同じ 32 ビットだったのですが、Xcode だと long は 64 ビットなんですよね…

たしかに int とか long は環境によってサイズが異なる、というのはCの常識としてあったわけだけですが、いつの間にかそういう常識も忘れてしまうという話でした。ああ、うん、安易にキャストするものじゃないですよね。ハイ。

(なんか昔 wchar_t のサイズが 2 バイトだと思い込んでいたせいで困ったことになった記憶があるのですが、その教訓は生かされなかったようです)
posted by JUNOSOFT at 03:26| Comment(0) | プログラミング

2014年12月17日

フルスクリーンでのデバッグ中にフリーズした場合の復帰

パソコン1台、モニタ1台の環境で問題になるのが、フルスクリーンゲームのデバッグです。
フルスクリーンでゲーム実行中にブレークポイントに差し掛かったり、フリーズしたりすると、わりとどうしようもないことになります。
デバッガの画面を見たいけとフルスクリーン状態でフリーズしたウィンドウが邪魔で見れない、
デバッグをあきらめ、強制終了しようとしてタスクマネージャを起動しても、タスクマネージャの画面すら隠れてしまうと。
そんなときはもうWindowsを再起動するか、サインアウトするしかなかったのですが、最近少しだけましな方法を発見しました。
Windows8.1限定かもしれませんが、フルスクリーンでフリーズした状態で Ctrl+Alt+Del でメニューを出し、「ユーザー切り替え」を選択し、現在利用中のユーザーを改めて選ぶとデスクトップ画面に復帰することができます。

たとえばフルスクリーン時に 640x480 の解像度にしていた場合、デスクトップ左上の 640x480 の部分は引き続きゲームによって占領されていますが、それ以外の領域は普通に使うことができます。
そのため、エラーダイアログをチェックするなり、デバッガから強制終了するなり、どうにか操作することができます(ただし、フルスクリーン時の解像度がデスクトップ解像度に近い場合、やはり画面の大部分が操作不能のまま残ることになりそうですが…)。
ただ、この方法も100%うまくいくわけではなく、フリーズ内容によっては引き続き画面全体が操作不可能な状態になります

まあ、それでもだいぶ助かりますけどね。
posted by JUNOSOFT at 15:30| Comment(0) | プログラミング

2014年12月08日

バイナリ―オプション

どうやら数年前から話題にはなっていたようなのですが、某所でバイナリ―オプション取引というものがネタになっていて、初めてその存在を知りました。通過が10分後に値上がりするか値下がりするかの二者択一で予想するだけ、というヤツです。

そこで話題になっていた取引サイトは bo-box.com というところだったのですが、なんと倍率は 1.75 倍です。例えば 1000 円払って「値上がり」を購入したとして、その 10 分後、通貨が値上がりしていれば 1750 円戻ってきます。驚くことに倍率は固定で、たとえ購入した全員の予想が当たったとしても、戻ってくる金額に変化はありません。話がうますぎてなんとも不安になるじゃありませんか。

いったいどんなものなのか気になり、bo-box.com にフリーのメアドで登録だけしてみたのですが、なるほど単純でわかりやすく、ほとんどゲーム感覚で取引することができるみたいですね。
これって普通に現金を使ったギャンブルゲームに見えるのですが…確かにハマる人はハマりそうです。

で、自分はそんなものに手を出す余裕も勇気もないので、代わりに過去のチャートから次の値動きを予想するプログラムを組んでみました。「自分だったらここでこれを買うなあ」というのをそのままアルゴリズムにした感じです。

さっそく「過去2日間にわたり、5分毎にひたすら取引を繰り返した」という設定で実行してみたところ、勝率が 50.8% という極めて微妙な値になりました…。うん。サイコロ振って決めるのと変わらないですね。
というかこんなプログラムひとつで稼げるならだれも苦労はしないわけで。

なんとも当り前な結論になりました。
posted by JUNOSOFT at 18:51| Comment(0) | 雑談