プログラミングの魔物

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

ListViewの続き

C#

やはりファイル数が多いのでListViewにVirtualModeをサクッと導入することにした。その前にWindows環境にGitを入れてバージョン管理してみることに。 今までTortoiseSVNを入れていたのでその流れでTortoiseGitを入れた。 http://code.google.com/p/tortoiseg…

C#のListView

C#

ちょっとしたツールを作るためにListViewを使用中。そのメモ。公式のヘルプ。 http://msdn.microsoft.com/ja-jp/library/ms750972.aspx@ITの記事 http://www.atmarkit.co.jp/fdotnet/dotnettips/336listviewimage/listviewimage.htmlLargeIconを表示する場…

cocos2d-x LuaでCCNodeにLuaのコールバック関数を登録する方法

cocos2d-xでLua関数をコールバックする時の参考用にメモ。ソースを読んでみるとCCNodeは最初からLua関数をコールバックできるように作られている。 ここに説明が書いてある(しかしサンプルは古い様子) http://www.cocos2d-x.org/projects/cocos2d-x/wiki/N…

プログラミング言語の習得方法について

何事もポジティブに取り組む 楽しんだほうが覚えるのは早い。 基本的な言語仕様を押さえる 宣言や演算子、条件判断、制御文などの基本仕様を把握する。 言語によっては同じコードがまったく別の意味を持つこともあるので、複数の言語を習得する場合は特に注…

cocos2d-x覚書

CCArrayから取得したオブジェクトを使用するにはtolua.castする local str = arr:objectAtIndex(0) str = tolua.cast (str, "CCString") http://www.cocos2d-x.org/boards/11/topics/14344 BGMが流れていない場合でもバックグラウンド時には SimpleAudioEngi…

cocos2d-x2.0-xでRetina Display対応

cocos2d-xではサフィックス(Suffix)によるリソースの切り替え(@2xや-hd)を推奨していない。 cocos2d-xはクロスプラットフォーム開発環境なのでiOSだけではなくAndroidにも対応している必要がある。 Androidのリソース管理方法としてサフィックスは適して…

portのアップデート

# port selfupdate# port sync

autocomplpop.vim調整中

Vim

リアルタイムで入力補完 Ctrl+pやCtrl+nでも入力補完できるが、リアルタイムでできたらxcodeライクになってもっと便利だろうと思って入れた。 とりあえず辞書を作るためのLuaでも書こうかな。参考 http://d.hatena.ne.jp/rdera/20090113/1231819016追記: そ…

iCloud、Storyboad、ARC

iPhone/iPad/iPod touchプログラミングバイブル8章 いま読んでいるのは1つ前の版なので、最新のiOS6版とは内容が異なる。 たとえばiOS6版ではiCloudについて5章で書かれているが、iOS5版では8章で解説されている。また9章のアプリケーションの作成の章でも少…

iOS サウンドとムービーとアニメーション

iPhone/iPad/iPod touchプログラミングバイブル7章 サウンドの再生 CoreAudioフレームワークの追加 フレームワーク 意味 AVFoundation シンプルなオーディオ再生/録音とセッション管理の機能を提供 AudioToolbox オーディオ及びストリームの再生/録音、セッ…

C++マルチバイトの文字カウント

#include <locale> size_t wlen(const char* str){ int len = 0; for(; *str; len++){ str += mblen(str, MB_CUR_MAX); } return len; } //wlenを使う前にロケールをセットしておく setlocale(LC_CTYPE, "ja_JP.UTF-8"); std::string str = "123あああいいい"; std::</locale>…

iOSのデバイス制御

iPhone/iPad/iPod touchプログラミングバイブル6章プログラムの内容を追いながらメモ。 カメラとフォトアルバム 利用可能チェック イメージピッカー作成 イメージピッカーを表示 イメージ取得/キャンセル カメラとフォトアルバムはsourceTypeが異なるだけで…

astah* community

UMLが描けるフリーのツール。有料版もある。 デザインパターンのクラス図を書くために使用。 フリー版は画像出力時にロゴが入るものの、商用利用も可能らしい。 http://astah.change-vision.com/ja/product/astah-community.html ショートカット クラス図を…

iOSのデータの読み書き

iPhone/iPad/iPod touchプログラミングバイブル5章 ファイルの読み書き アプリから直接読み書き可能なフォルダ *******.app Documents/ tmp/シミュレータでは /Users/<Macのユーザ名>/Library/Application Support/iPhone Simulator/<シミュレータのバージョン>/Application</macのユーザ名>…

iOSのインターフェース

iPhone/iPad/iPod touchプログラミングバイブル4章 MVCアーキテクチャ iOSアプリはMVCで構成されている。 モデル(Model)アプリで処理するデータ ビュー(View)モデルの内容を表示したり、ユーザーからの操作を受け取る コントローラー(Controller)モデ…

iPhone/iPad/iPod touchプログラミングバイブル3章 基本APIの解説

iPhone/iPad/iPod touchプログラミングバイブル3章Cocoa touchグラフィックスとCore Graphics(Quartz)での描画関連、タッチ、タイマー。当分はcocos2dでアプリを作るので、「何ができるのか」だけざっと読んでおくことにする。 何ができるのかさえ知っていれ…

vimコマンド覚書

チートシートに載ってない奴。自分用[オペレータ][数値][モーション] 例:)d2w・・・削除を2単語分行う。2dwでも同じ 移動 コマンド 機能 e 単語の終端へ移動 gg 文頭へ G 文末へ [数値]G 指定行へ H 画面の最上行へ M 画面の中央行へ L 画面の最下行へ 挿…

xcodeショートカット覚書

XVim入れようか迷う。 キー配置 jisキー&キーボードの設定でCtrlとCmdを入れ替えている。 たまに混乱するのでちゃんと書いておこう。 Mac Win Cmd Ctrl Ctrl Winキー Opt Alt 以下ショートカット一覧 git コマンド 機能 Opt+Cmd+C commit Opt+Cmd+X pull フ…

iPhone/iPad/iPod touchプログラミングバイブル1章、2章 アプリ作成の基礎と文法

iPhone/iPad/iPod touchプログラミングバイブル1章、2章 1章 xcodeの機能説明から始まり、HelloWorldアプリを作る。 後半ではデバイス上で動かすための設定を解説している。 xcodeのメニューなどの解説 xcodeを触り始めて数ヶ月経つのに、未だに触ってないボ…

tolua++の使い方(主にMac)

tolua++とは何か LuaにC++の関数やクラスを公開するにはグルーコードを書く必要がある。 けど、グルーコードを毎回書くのは大変! ↓ tolua++でグルーコードを自動生成。C++の関数やクラスをLuaで使えるように(バインド)する。 tolua++でバインド可能なもの…

xcodeでLuaのシンタックスハイライト

Add Lua Support to Xcode 4 http://velluminteractive.com/add-lua-support-to-xcode-4/1.githubからLua-In-Xcodeを落とす https://github.com/breinhart/Lua-In-Xcode2.シェルスクリプト実行 sudo ./Add-Lua.sh 3.xcodeを再起動して対象ファイルを開いた後…

cocos2d ピンボールゲーム

cocos2dで作るiPhone&iPadゲームプログラミング13章 シェイプ:凸形と逆時計回り 衝突ポリゴンは 反時計回りで定義される頂点 凸型のポリゴン VertexHelper シェイプを定義するためのツール 生成されたテキストをソースコードにコピーする。ピンボール台の作…

xcodeでライブラリのソースを直接プロジェクトに取り込む

xcodeに直接ライブラリのソースを入れる場合、#includeや#importのパスが問題になる。 #include <Library/hoge.h> //hoge.hが見つからない等エラーが出る 回避手順 1.BuildSettingsでAlwaysSearchUserPathsをYES、UserHeaderSearchPathsにライブラリを置くディレクトリのパ</library/hoge.h>…

C++テンプレートテクニック 特殊化、部分特殊化

最近読んだ本だがあまり頭に入っていないようなので、読みなおして復習する。特殊化 template<typename T> bool equal(T x, T y){ return x==y; } //const char*特殊化 template<> bool equal(const char*x, const char*y){ return std::strcmp(x,y) == 0; } 部分特殊化 </typename>…

付録D デザインパターンQ&A

デザインパターンとは ソフトウェアでよくある問題の解法。GoFと呼ばれる4人によってまとめられた23のパターンが有名。新しいパターンは続々生まれている。 デザインパターンは万能? No。すべての問題を解決できるわけではない。 適切なデザインパターンの…

23.Interpreter 文法規則をクラスで表現する

デザインパターンの目的の一つはクラスの再利用性を高めること。再利用性とは、一度作成したクラスをあまり修正せずに(できれば全く修正せずに)何度も使えるようにすること。 Interpreterパターンでは解決しようとしている問題を「ミニ言語」で表現する。…

22.Command 命令をクラスにする

命令を表すクラスのインスタンスという1個の「もの」として表現 履歴やマクロはそのインスタンスの集合。 CommandはEventと呼ばれることもある。Command・・・命令のAPI ConcreteCommand・・・Command実装 Receiver・・・命令の実行対象。命令を受けてアクシ…

21.Proxy 必要になってから作る

proxy=代理人 たとえばコンストラクタが重い場合はproxyパターンの適用対象となる。 使う前にインスタンスを作成しても実際に使われない限りはコンストラクト処理にかかった時間が無駄になる。そこで対象クラスと同じインターフェースを持つproxyクラスによ…

20.Flyweight 同じ物を共有して無駄をなくす

メモリ消費を減らす。 インスタンスをできるだけ共有して無駄にnewしない。Flyweight・・・共有するクラス(メモリ食う) FlyweightFactory・・・工場。内部にインスタンスをコンテナに格納。 Client・・・FlyweightFactoryを使ってFlyweightを作り出し、そ…

19.State 状態をクラスとして表現する

同一のインターフェースを持ったクラスを状態ごとに作成する。状態に応じてクラスを切り替えることで、状態の変化を表すと同時に状態に応じた振る舞いを表現する。State・・・状態に依存した振る舞いをするAPI ConcreteState・・・Stateの実装。 Context・・…

18.Memento 状態を保存する

アンドゥ(もとに戻す)、リドゥ(やり直し)、ヒストリー(履歴)、スナップショット(現在の状態の保存)の提供。 インスタンスを復元するには内部の情報にアクセスする必要がある。しかし不用意にアクセスを許可すると内部構造に依存したコードが散乱する…

17.Observer 状態の変化を通知する

Observerは観察者。観察対象が変化すると観察者に対して通知。Subject・・・観察される側。Observerを登録・削除するメソッドと、登録されているObserverへ通知するメソッドを持つ。また、Subjectの状態を取得するAPIの宣言をする ConcreteSubject・・・具体…

16.Mediator 相手は相談役一人だけ

メンバーはみんな相談役だけに報告し、メンバーの指示は相談役だけからくる。 メンバー同士が状況を探り合ったり指示する必要がなくなる。Mediator・・・Colleagueと通信して調整を行うAPI ConcreteMediator・・・Mediatorの実装を行い、実際の調整をする Co…

15.Facade シンプルな窓口

ファサードパターン。フランス語で建物の正面という意味らしい。 シンプルな窓口というくらいだからページ数も少ない。 ごちゃごちゃした詳細をまとめ、高レベルのAPIを提供する。システムの外側にシンプルなAPIを見せる。Facade・・・システムを構成してい…

14.ChainOfResponsibility 責任のたらい回し

ある要求を処理するオブジェクトをダイレクトに決められない場合に、オブジェクトを鎖のようにつないでおき、そのオブジェクトを順次渡り歩いて目的のオブジェクトを決定する。Handler・・・要求を処理するAPI。次の人(Handler)を保持しておき、自分で処理…

13.Visitor 構造を渡り歩きながら仕事をする

データ構造と処理を分離Visitor・・・コンテナの要素ごとに処理を行うメソッドを宣言 ConcreteVisitor・・・Visitorの実装。 Element・・・Visitorの訪問先。訪問者を受け入れるメソッドを宣言 ConcreteElement・・・Elementの実装 ObjectStructure・・・Ele…

12.Decorator 飾り枠と中身の同一視

透過的なインターフェース。ComponentをいくらDecoratorで包んでも、APIは隠されない。 中身を変えずに機能追加ができる。 動的な機能追加ができる。 単純な品揃ででも多様な機能追加ができる。 デメリットは小さいクラスが増えてしまうこと。Component・・…

11.Composite 容器と中身の同一視

ディレクトリなどの再帰的な構造。Leaf・・・中身。この中には入れられない Composite・・・容器。LeafとCompositeを格納 Component・・・LeafとCompositeを同一視するための役。 Client・・・Compositeの利用者 関連しているパターン Command・・・マクロを…

10.Strategy アルゴリズムをごっそり切り替える

委譲によってアルゴリズムを切り替える プログラムは問題を解くために書かれている。問題を解くための手法を交換できるようにしたのがStrategyパターン。Strategy・・・戦略を利用するためのAPI ConcreteStrategy・・・Strategyの実装。具体的な戦略 Context…

9.Bridge 機能の階層と実装の階層を分ける

機能の階層=新しい機能を追加するためのクラス階層。ネストすることが多い 実装の階層=具体的な実装を定義するクラス階層。インターフェースあるいは抽象クラスから枝分かれすることが多い あるシステムの階層に機能と実装の階層が混じっていたらそれをBri…

8.AbstractFactory 関連する部品を組み合わせて製品を作る

抽象的な工場では、抽象的な部品を組み合わせて抽象的な製品を作る。 実装には注目せず、APIに注目する。APIだけを使って部品を組み立てて製品にまとめる。 製品を得るために必要な手順と情報を実装から切り離す。AbstractProduct・・・抽象的な部品や製品の…

7.Builder 複雑なインスタンスを組み立てる

インターフェースのAPIを利用してロジックという枠組みを作り、具体的な実装を外部に任せることで、複雑なインスタンスを作成する。Builder・・・インスタンスを作成するためのAPI。インスタンスの各部分を作るためのメソッドを用意 ConcreteBuilder・・・Bu…

6.Prototype コピーしてインスタンスを作る

1つずつnewすると大変な場合にインスタンスを複製して新しいインスタンスを作りたい。 種類が多すぎてクラスにまとめられない クラスからインスタンスを作るのが難しい フレームワークと生成するインスタンスを分けたい newでインスタンスを作成する場合は…

5.Singleton たった1つのインスタンス

指定したクラスのインスタンスが絶対に1個しか存在しないことを保証したい インスタンスが1個しか存在しないことをプログラム上で表現したい コンストラクタをプライベートにすることで外部でnewできなくする。Singleton・・・自分自身のインスタンスをsta…

4.FactoryMethod インスタンス生成をサブクラスに任せる

インスタンスの作り方をスーパークラスで定め、肉付けをサブクラスに任せる。Product・・・生成されるインスタンスが持つべきAPI Creator・・・Productを生成する抽象クラス。抽象メソッドを使ってProductを作る。実際のインスタンス生成はConcreteCreatorに…

3.TemplateMethod 具体的な処理をサブクラスに任せる

スーパークラスで抽象メソッドを使ったロジック(テンプレートメソッド)の構築、サブクラスで抽象メソッドの実装。AbstractClass・・・テンプレートメソッドを実装し、抽象メソッドの宣言 ConcreteClass・・・抽象メソッドの実装ロジックが共通化できる。ア…

2.Adapter 一皮かぶせて再利用

異なるインターフェース間の仲介を行うためにインターフェースをラッピングする。 継承と委譲の2種類がある。Target・・・必要とされるAPIの定義 Client・・・Targetのメソッドを使って仕事をする Adaptee・・・すでに用意されている実装。変更が困難 Adapt…

1.Iterator 1つ1つ数え上げる

配列、集合など要素の集まり(コンテナ)を走査するための仕組みを提供するパターン。Iterator・・・要素を1つずつ走査するためのAPI ConcreteIterator・・・Iteratorの実装 Aggregate・・・Iteratorを作り出すAPI。コンテナを走査するためのIteratorを返す…

luaの汎用グルーコード

luabindを使おうとした所、LLVMでは動かすのに一苦労&最近更新されていないようなので、簡単な汎用グルーコードを書いてみることにした。 C++11のラムダ式を使えば書けそうだ! と軽く考えてやってみる。 まずグルーコードをラムダ式で置き換える。 しかし…

xcode覚書。cocos2d-xにLuaを手動で導入

typeid(???).name()が実行時エラーになるので原因を調べてみたら xcodeのBuild SettingsでApple LLVM compiler 4.1 - LanguageセクションのEnable C++ Runtime TypesがNoになっていた。実行時型情報。 このセクションでは他にもC++Language DialectでC++11を…