プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

無題

どこかで区切りを見つけないといつまでも本読みを再開できそうにない。 とりあえず一段落したら再開しよう。

PHP Simple HTML DOM Parser

PHP

PHP Simple HTML DOM Parserはその名の通りHTMLのパーサー。 スクレイピングするために使用している。 比較検討したわけではないのでひょっとしたらもっと優れたものがあるかも知れないけど、今のところ満足している。 マニュアル http://simplehtmldom.sour…

近況

なんだかんだで3月中に終わらせようと思っていた作業が結構な時間を食っている。 一番難しいのは作業に対するモチベーションを上げることだったりする。一日ごとに目標を決めて進めているが、最近はそのハードルを低くしすぎているため遅々として進まない。…

メソッド呼び出しの単純化

リファクタリング 10章インターフェースをより直接的にするためのリファクタリング メソッド名の変更 メソッドの名前がその目的を正しく表現できていない → メソッドの名前を変更する メソッドにつけるコメントを考え、それをメソッド名にする 良い名前を思…

条件記述の単純化

リファクタリング 9章条件ロジックは分かりにくくなる宿命にあり、それを単純化するリファクタリングが多数存在する。 条件記述の分解 複雑な条件記述がある → その条件記述部とthen部およびelse部から、メソッドを抽出する 条件の中の式あるいはコードブロ…

データの再編成

リファクタリング 8章本読みの再開。作業と交互に読みすすめるので、今までよりペースは落ちると思う。 自己カプセル化フィールド フィールドを直接アクセスしているが、結合関係が煩わしくなってきた → フィールドに対するget,setを作ってそれだけでアクセ…

無題

今月は別の作業に集中するので、本読みは4月頃再開予定。 まあ3月中に終わらなければ伸びる可能性もあるけど、とりあえず3月中を目処に作業中。あと暇な時にでも次に作成するプログラムの資料用に構文解析のアルゴリズムなどを調べて載せるかも知れない。 効…

アドベンチャーゲームのアルゴリズム

遊びのレシピの2章を読みながら適当にメモ アドベンチャーゲームとは? 小説のようなゲームから育成ゲームなど幅広い種類のゲームがある。 システムに手を加えることで別の種類のゲームを作ることが出来る。 他のゲームの基礎となる仕組みを持ったゲーム。 …

オブジェクト間での特性の移動

リファクタリング 7章オブジェクト指向の設計では責任をどこに置くかで悩む。 リファクタリングによって以前の決定を変えられるので、悩みを軽減できる。 メソッドの移動 クラスの内部に他のクラスへの依存性が高いメソッドが存在する → メソッドを他のクラ…

WindowsでのLua開発(Macでも可)

Lua

Windows上でLuaの開発環境をいくつか使ってみた感想。 それぞれの開発環境のメリットデメリット。よく考えてみたら全部Macでも使えるツールだった。 VimにTrinityプラグインとlua-supportプラグインを導入 メリット ctagsが使える(Macしか試してない) Vim…

本読み

遊びのレシピの1章を読んだ。10年以上前の本で内容も古いけど、アルゴリズムは(あまり)変化しないので、参考になる部分もあるだろうと思い中古で購入。 1章の内容はC++なのに何故かポリモーフィズムの代わりに関数ポインタを使っていたりする。 アルゴリズ…

メソッドの構成

リファクタリング 6章5章は6章以降にあるリファクタリングカタログの導入部なのでノートを取らず読むだけ。 メソッドの抽出 ひとまとめにできるコードの断片に、その目的を表すような名前をつける うまく命名されたメソッドは再利用しやすくなる 上位のメソ…

日経ソフトウェア4月号の記事とスクリプト言語による効率的ゲーム開発7章を読んで

Lua

ゲームシステムを内部DSLで記述したら面白そうだと思いました。 DSLというのはドメイン特化言語といって、SQLのように特定の分野に特化した言語のこと。 また、SQLのように独立した言語を外部DSL、言語内において新たに定義された文法を内部DSLと呼ぶ。内部D…

Luaの文法で遊ぶ2「リファレンスチェーン」

Lua

リファレンスチェーンを簡単に利用できるように分解してみた。 サンプルプログラム --リファレンスチェーン生成関数 local function ref(t, call) return setmetatable({t}, { __index = function (self, k) table.insert(self, k) return self end, __call …

Luaの文法で遊ぶ

Lua

昨日のクエリクラスは__indexを利用して、オブジェクトと"."で参照された要素名を処理関数に渡すという手法で作成した。 クエリクラスの実装は非効率的だが、呼び出しの文法は中々面白い形になったと思う。 速度の必要の無い部分であれば導入してもよさそう…

Luaでレコードアクセス2

Lua

前回の記事ではレコードの集合から条件に一致したものを抽出するメタテーブルを作成した。 しかし前回の方法は条件と等しいレコード("==")の抽出にしか対応していないため、あまり有用ではない。 そこで今回は抽出方法を拡張し、もっと柔軟にレコード操作…

Luaでレコードアクセス

Lua

遊びで書いたコードなので実用的ではないけど、発展させれば面白いかも知れない。 SQLとは文法が違うけど意図としてはそういう感じ。たとえばLuaで以下の様なレコードがあった時に records = { {name="takashi", age=20}, {name="takeshi", age=21}, {name="…

LuaをC/C++プログラムに組み込む

スクリプト言語による効率的ゲーム開発 5章5章はどのような内容かというと、VistualStudioでLuaを組み込む所から始まり、RPGに出てくるような「道具屋」をテキストベースで作成する。 この章にはC関数をLuaへ公開するためのグルーコードを自分で組む手順も載…

スクリプト言語Lua

スクリプト言語による効率的ゲーム開発 4章4章はLuaの文法のまとめだったのでサラッと流すことにした。 一応Luaと他の言語の違いを紹介しておく。 配列のインデックスは1から始める。 変数に宣言と型は要らない 条件の偽はnilとfalseのみ 数値型は通常だと実…

Luaのオブジェクト指向プログラミング考察4

Lua

Luaのポリモーフィズム。 オブジェクト指向シリーズということで多様性についての考察。 --クラス定義 a = {f = function (self) print("aのメソッド") end} b = {f = function (self) print("bのメソッド") end} --o:f() --> 初期化前に呼ぶとエラー --汎用…

Luaで列挙型(enum)

Lua

Luaではグローバル変数の宣言が必要ないため、スペルミスしてもすぐには気づけない。 たとえ変数名が間違っていたとしても、nil値として判定されてしまうからだ。以前にグローバル変数で定数を定義した時に、綴りを間違えてしまいバグが発生したことがある。…

テストの構築

リファクタリング 4章テストを作るとプログラミングが加速する。 ※ただしゲームの場合は難しい。あくまでテストの自動化が可能なコードにおける話。 自己テストコードの意義 プログラミングはデバッグにかかる時間が多い クラス自身にテストさせる(testメソ…

Lua5.1とLua5.2の互換性

Lua

現在はLua5.1を使用中。まだ5.2へ移行する予定はないが、いつでも移行できるように注意すべきポイントを把握しておこうと思う。 具体的にはココを読んでおけばオッケー(手抜き) http://milkpot.sakura.ne.jp/lua/lua52_manual_ja.html#8.1 とりあえずLua5.…

Luaでメソッドチェーン2

Lua

大した話ではないけど前回の続き。 アクションクラスの一部を修正する function Action:die() print(self.name .. "は死んだ") coroutine.yield(true) return self end メイン taro = Action:new{name = "太郎"} move = coroutine.wrap(function () taro:lef…

Luaでメソッドチェーン

Lua

jQueryのようなメソッドチェーンを作る。 ていうか作るのは簡単だけど使い所を見つけるのが難しいような気がする。 パスを書いたりアクションを記述するには良いかもしれない。 アクションクラス Action = {} function Action:new(o) self.__index = self re…

リファクタリング「コードの不吉な匂い」

リファクタリング 3章リファクタリングを行うタイミングについては明確な定義を持つことが出来ない。 だから経験の中から「匂い」を感じて時期を決める。この章と本の裏表紙にある表にはいつリファクタリングを行うかのヒントが書かれている。 重複したコー…

cocos2d-x JavaScriptのサンプルを動かしてみた所感

JavaScriptは結構好きな言語。 プログラムは一行でも短く書けると嬉しい病気なので、JavaScriptのように言語制約が緩くて変態文法が可能な言語は好物と言える。cocos2d-xのjsテンプレートはJavaScriptでiOSゲームを開発できる。 組み込みにはSpiderMonkeyを…

cocos2d-x LuaでBox2D+sqlite3

OpenQuickというライブラリを組み込むことでBox2Dとsqlite3のLuaAPIを利用できる。 http://www.cocos2d-x.org/news/88MITライセンスでオープンソース。 まだ試してないけど期待。ZeroBrane StudioのIDEで開発できるらしい。 ZeroBrane Studioは使用したこと…

スクリプト言語の選択

スクリプト言語による効率的ゲーム開発 3章ゲームに組み込むことができる汎用スクリプト言語はいくつか存在する。 それらの言語の選択基準についての解説の章。 流し読みする。 ライセンス 規約によってはソースの開示が必須だったりする。 比較的商用利用し…

ゲーム開発をスピードアップする

スクリプト言語による効率的ゲーム開発 2章 30回の微修正を25分で行う方法 前章では30回の微修正に1時間25分かかるという例を挙げた。 しかし、そのうち頭を使う必要があるのはコーディングと修正部分の確認だけである。微修正をコーディングと確認だけで済…