読者です 読者をやめる 読者になる 読者になる

プログラミングの魔物

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

無題

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

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分かかるという例を挙げた。 しかし、そのうち頭を使う必要があるのはコーディングと修正部分の確認だけである。微修正をコーディングと確認だけで済…

ゲームの開発速度は十分ですか?

スクリプト言語による効率的ゲーム開発 1章この本はスクリプト言語を使ってしあわせになろうという本。 例としてLua&C++での作り方が載っている。 「スクリプト言語なんて使わなくてもC++で組めばいいじゃん。速いし」 そう考えるのはちょっと早い。 ゲーム…

Luaのモジュールを穴が空くまで見つめてみる

Lua

Luaで組むならモジュールは避けて通れない。必須と言ってもいい。 今回はそんなモジュールについての解説・・・というか、自分が今理解している内容の確認のためにプログラムを組んでみる。 追記: Lua5.2からはコンセプトが変わり、module関数とsetfenv関数…

リファクタリングの原則

リファクタリング 2章リファクタリングの重要な原則を改めて振り返り、リファクタリングを実践する上で考慮すべき点をみる。 一応ノートを取りながら読んでみたけど、ほとんど概念だから読むだけでもよかった。 リファクタリングの定義 名詞としての定義 「…

iphone上でLuaのバイトコードを生成する

cocos2d-xで使うLuaをバイトコードへ変換する方法を探ってみた。 バイトコードへ変換するとロード速度が上がる。また、難読化にも繋がる。 一般的な方法ではバイトコードの生成にluacを使う。 コマンドをたった1行打つだけでLuaのバイトコードを生成すること…

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

Lua

先日の考察ではLuaのクラスでプライベート変数を扱った。 しかし、以前のプログラムではオブジェクトの解放後もプライベート変数がメモリ上に残ったままになってしまう。 private.lua local _M = {} local _ = {} --プライベート変数を保持するテーブル func…

ブログ記事整理

Lua

Programming in Luaに関する記事を削除した。このブログでは主に読んだ本の内容を元に記事を書いている。 しかしLua本の記事は自分の言葉で書いた部分があまりにも少なかったため、いずれ削除しようと思っていた。 ちょうど新しい本も読み始めたので、これを…

リファクタリングとは?

リファクタリング 1章第1章ではJavaで作られたプログラムを例として、リファクタリングの過程を説明している。 実際に打たないと感覚が掴みにくそうだったので、Luaで例題のプログラムを組んで修正しながら読みすすめた。 汚いプログラムは何が問題か? ろく…

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

Lua

昨日の記事ではLuaのモジュールでクラス定義とプライベート変数を扱う方法について考察した。 今回はモジュールで継承とプライベート関数を表現する方法を考える。 ディレクトリ構成 libs/mod.lua libs/sub.lua main.lua 親クラス(mod.lua) local _M = {} …

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

Lua

モジュールでクラス定義を行う方法。 ついでにプライベート変数を定義する方法も。※この記事のプライベート変数定義には問題があるため考察3も参照 モジュール定義(mod.lua) local _M = {} local _ = {} --プライベート変数を保持するテーブル function _M…

cocos2d-x Lua RPGのサンプルほぼ完成

iPhone/iPad/iPod touchプログラミングバイブルのサンプルゲームをLuaで組んでみる。の続き(iOS5版のサンプルプログラム) マップ移動、戦闘、ゲームオーバー、エンディングと言ったひと通りのロジックを作成した。今回のRPGの作成ではC++側はノータッチ。…

cocos2dでUIButtonを表示する

以前cocos2dでイメージピッカーを使うためにUIKitを利用した時の方法を覚書。 サンプルはボタンだけど要領は同じ。 { UIButton *button; } -(id) init { if( (self=[super init]) ) { button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; button.f…

Luaの統合開発環境「Lua Development Tools」を試す

Lua

trinity.vimプラグインを入れるとVimをIDEのように使うことができるようになる。 そこでふと、LuaのIDEにはどのようなものがあるのかと思い調べてみたら「Lua Development Tools」というのがあったので入れてみた。 窓の杜の紹介記事 http://www.forest.impr…

vimでLuaのソースからC関数のソースへジャンプ

Luaで組んでいるとcocos2d-xの関数のソースを見たくなることがよくある。 今まではxcodeを同時起動して探していたけれど、ctagsで探せるようになったのでやり方をメモ。 若干重いのでまだ試用段階。 MacPortsでExuberant Ctagsを入れる Exuberant Ctagsのイ…

Bundle

久しぶりにVIMプラグインを入れようとしたらコマンドを忘れていたのでメモ インストール :BundleInstall アップデート :BundleInstall! アンインストール :BundleClean ヘルプ作成 :helptags ~/.vim/vundle.git/doc

cocos2d-x Luaでゲーム作り2

RPGの続き マップ移動と当たり判定を組んだ あとはパラメータと戦闘を組んで終わり。 ちょっとアレっと思ったのはgetPostionがCCPoinstではなく複数の戻り値を返すこと。 CCPointで欲しい時はobj:getPositionLua()を呼ぶか、cpp(obj:getPosition())のような…

cocos2d-x Luaでテクスチャアトラス

今回はこちらのサイトを参考にした。 cocos2d-xにおいてTexture Atlasを利用する方法(iOS, Android)C++でのコードは次のようになる。以下転載 アプリで画像ファイルを用意する場合、Texture Atlasを利用することで メモリを大幅に節約することが可能です。…

ニュース等の巡回

あまりIT関連のニュースを見ないので頭が古くなっているのを感じる。 他の人はどうやって情報を取り入れてるんだろうか? RSSとかかな? 自分用のニュースアプリでも作ってしまおうか。詳細については実際に使う時に調べるとして、 とりあえずいくつかの記事…

cocos2d-x Luaでゲーム作り

iPhone/iPad/iPod touchプログラミングバイブルのサンプルゲームをLuaで組んでみる。手元にあるiOS5版はアクションゲームとRPGのサンプルが載っているので、それをcocos2d-x Luaで書いてみる。 そのまま移植してもつまらないので、とりあえず外部仕様を見な…

さらにListView

C#

VirtualListSizeは仮想リストビューの全体の数を表すプロパティだが、項目数を減らそうとして小さい数を代入するとたまにNullReferenceExceptionという例外が発生する。 ひょっとしたら同じエラーで悩む人もいるかもしれないのでメモっておく。 listView1.Be…

正規表現でパターンの否定

メモメモ True if pattern /PAT/ does not match, like $var !~ /PAT/: /^(?:(?!PAT).)*$/sTrue if pattern BAD does not match, but pattern GOOD does: /(?=^(?:(?!BAD).)*$)GOOD/s http://d.hatena.ne.jp/amt/20060728/Hitei VirtualModeでShift+クリッ…