CMake に入門&対処事例

Visual Studio の各バージョンごとに vcxproj を用意して… というのが辛くなったため、 CMake によるプロジェクト生成という流派にちょっと入門してみました。
現時点において、 Visual Studio のバージョンが違っても割とプロジェクトは開くことが出来ますし、ツールセットなどの設定をプルダウンメニューから変更する程度で対応できるような状態になっているため、以前ほど対応に時間がかかるような問題ではありません。

しかしながら、ユーザーの操作が伴いますし、各バージョンごとにビルドチェックしたい!といった点ではできないようなので、 CMake 方式に変更してみた次第です。

事例色々

ここでは入門してみて、Visual Studio でのあれそれが、 CMake ではどうやるの?といったことを挙げていきたいと思います。
また、こんなところに躓きました、という点も合わせて上げていきます。これがこれからの CMake やる人への助けになればいいなと思います。

そもそもとして CMake についての書籍があればそれを紹介&読んでみようと思うのですが見当たらず・・・。 gnu make は書籍があるのに残念です。
基本的な点については自分が把握していないこともあるので、別の解説サイトにお任せしたいと思います。

一応自分はこのようにして対処したというものなので、もっと良い方法がある可能性は大いにあります。また、ある状況ではうまくいかないということもあるかもしれません。

続きを読む


Python 開発環境としての VSCode

Python での開発をやりやすくするために、 Visual Studio Code で Python 開発環境を準備してみました。

必要なもののインストール

VSCode

Visual Studio Code をインストールします。
VSCode は https://code.visualstudio.com/ から取得可能です。
この記事を作成しているときには 1.13 というバージョンのものでした。

Python

Python をインストールします。 Anaconda のほうではなく本家の Python をインストールしました。
そして、今後の取り扱いのことを考えて、 virtualenv も準備ししておきます。そのためには Python のインストール時に pip もインストールされるようにしておきます。

インストールが終わったら、 pip を使って virtualenv をインストールします。

続きを読む


django で json 送受のメモ

Python のフレームワークで JSON のデータを送受したいことがあり、記述に困ったのでメモとして残しておきます。
同じように困っている人の助けになれば幸いです。

JSON をクライアントへ送信

“Data” というのはデータ保持しているクラスです。いわゆるモデルです。

JSON を受け取る

django 側が JSON を受け取る場合です。以下のコードでは受け取ったものを表示しているだけになります。

以下のように curl からテストをした際に CSRF 関連でエラーとしてはじかれるため、CRSF 無効にするデコレータをつけています。


ビルドの近代化

VisualStudio のバージョン問題に苦しめられていた、「ゲームプログラマーになる前に覚えておきたい技術」ですが、ようやく CMake を使って書き直すことで対処することができました。少々手間は増えますが、これから先の VisualStudio のバージョン追従がずいぶんとやりやすくなったと思います。

こちら勝手にやらせてもらったので、作者の方の方針とずれてるかもしれませんが、きっと大丈夫でしょう。
念のため、ソースコードを含んだ状態で GitHub に上がることについては了解を得ております。

近代化プロジェクト

CMake で苦労した色々な点については、別記事で公開を予定しています。

今回のこの対応により、今まで配布していたプロジェクト差分ファイルなどは近日中に削除してしまおうと思います。
この後は、上記のページからたどれる GitHub 側のプロジェクトを使用してもらう方向でいきたいと思います。ついでにバグなどもそちらで直していければと思います。


本屋で物色中

最短で C# 入門して、らしいコードにするために

プログラミングには慣れている人が C# へ入門する際に何かいい書籍がないかなと思って探していたところ、見つけました。
C# に慣れている人から見ると、イマイチ感がありそうな感じなものです。しかしそこが今回の対象としている人に向けてはちょうどいい具合になっていると感じました。

広く、そして割と浅く書かれているため、今ほしい”とある”機能を実装するのに役だったり、さっさと入門を済ませてしまいたい人にこれが向いていそうです。
C# のバージョンも 6.0 あたりまで入っていそうなので、そのあたりも含めて割と最近のコードスタイルで記述できるように最短で導いてくれそうです。

ゲームエンジンアーキテクチャ (2)

ゲームエンジンアーキテクチャ 第2版 を購入しました。初版を持っていますが意外とアップデートが多く、買っておくか感が上回ったため買っちゃいました。
さらりと確認したところでは、サウンド関連の追加と、 PlayStation4, XBoxOne の記述が増えていたりとでしょうか。

CGとゲームの技術

ゲームエンジンとは対照的に、もっと薄いけど幅広くゲーム関連を知るにはこの本もよさそうでした。プログラミングというよりは割と教科書なので、これからこの分野に進もうとする人にはオススメできそうです。

出版元がコロナ社なので、教科書として割と長く出版してくれそうな雰囲気を感じます。絶版になってしまう書籍が多い中で助かりそうです。



DwmGetDxSharedSurface を使ってみた

Windows の隠し API である DwmGetDxSharedSurface を使ってみました。
これは Windows7 以降で存在するようで、無事に Windows10 の環境でも使えました。
そのまま素直に使おうとするといくつか課題はありますが、面白い機能だと思ったので紹介することにしました。なお Undocumented API の1つなので、ご利用は自己責任で。

これは何?

指定されたウィンドウの画像をキャプチャすることが出来る API です。ウィンドウが他のウィンドウで隠されていても内容をキャプチャすることが出来ます。

続きを読む


iptables で Symmetric NAT

ずいぶん久しぶりに Linux を使っての NAT Box を作成しました。
手持ちのブロードバンドルーターが Symmetric NAT のタイプではなかったので、検証のために Linux で Symmetric NAT を作成しました。

NATの種類

NATには、いくつか種類があって フルコーン、アドレス制限、アドレスポート制限、シンメトリック と4種類ほどに大別されます。
・・・というのが数年前のお話でした。実はこれでは現実問題対応出来ないとのことで、現在ではこの区別はレガシー扱いとなっています。

今は、NATのマッピング規則と、フィルタリング規則という2つの観点からルーターNATの特性を判定します。
手持ちのルーターでは、エンドポイント非依存マッピングで、アドレスポート依存フィルタリングというシロモノでした。
というわけで P2P のゲームやアプリにおいては割と都合の良い感じになっています。
しかしプログラムの作成立場としては、ある程度のケースが欲しいもので今回シンメトリックNAT を作ることにしました。

マッピング規則、フィルタリング規則、これらについては検索すると多くの情報が見つかり、わかりやすい記述を見つけることが出来ると思うので、ここでは説明を省略します。
続きを読む



IPv6 only ネットワーク を作ってみる

VMware Workstaion 12.5 を使って、複数の仮想マシンで構成されるネットワークを作っていきます。このネットワークは今流行の IPv6 only のネットワークにしてみたいと思います。この過程で NAT64/DNS64 をセットアップしていきます。

構成について

VMware Workstaion で新規仮想マシンを作る際に、ネットワーク接続を LAN セグメント で作成します。
外とやりとりを行う NAT64 の部分についてのみネットワークアダプタを2つ準備して、一方を NAT なり, ブリッジなりのタイプを設定して外との通信をできるようにします。
そして、作成した “LAN セグメント” の部分を IPv6 only のネットワークとします。ここに所属する仮想マシンは IPv6 のみをもって通信を行います。

これらの関係を図にすると以下のような感じになります。

IPv6 only ネットワークのキモはこの NAT64, DNS64 を担当する Linux サーバーということになります。図中では記入漏れていますが、このサーバーでは IPv6 の DHCP も担当させています。

お断りですが、IPv6 only といっても自分の現環境が IPv4 のみのネットワークのため、IPv6 で外部との通信を行う部分について 実験できずです。
続きを読む