퀴즈 게임 프리마베라입니다.DX9 기반으로 작업한 버전입니다.
일반적으로 다양한 형태의 포인터를 담기 위해 사용하는 방법 중에 주로 사용되는 방식은 두 방식입니다. 첫번째로 void *로 담는 방법과, 두번째로 상위 클래스를 두고 해당 클래스를 상속 받고, 상위 클래스 포인터로 관리하는 방법이 있죠. void*로 담는 방식의 단점은, 원본 포인터형이 아닌 다른 포인터형으로 캐스팅 하는 실수를 방지하기 어려운 문제가 있습니다. 상위 클래스 포인터로 다루는 방식은, 상속이 가능한 자료구조에만 사용 가능하다는 점과, 불필요한 상속을 유발하는 경우도 발생한다는 문제가 있습니다. 주로 포인터 변환은 콜백에서 많이 이루어지는데요, 제대로된 변환을 시도하느냐 그렇지 않느냐에 따라 변환 성공 여부를 반환해준다면 좋겠죠? 이에 대한 대안으로 AnyPtr이라는 것이 있습니다. 포인터..
pdb를 배포하는 것은 너무나 쉽게 리버싱을 허용하는 것이기 때문에, 조금이라도 리버싱을 어렵게 하기 위해선 exe 파일만 배포해야 합니다. 보통 서버의 경우 디버깅 정보를 매칭 시키는 수단으로 pdb도 바이너리와 같이 두기도 하는데요, 이렇게 하는 것에는 장단점이 있기에 이에 대한 코멘트는 생략하겠습니다. pdb가 없을때와 있을때 VS2005를 통한 덤프 확인시에 어떻게 다른지 보여드리겠습니다. 정상적으로 매칭되는 pdb 파일이 존재할 때 남은 덤프 파일의 콜스택과 스레드 소스 코드 매칭 정보. pdb 파일이 존재하지 않을때 남은 덤프 파일의 콜스택과 스레드. 이렇게 차이가 납니다. 실제로 pdb 파일이 없을 시에는 어느 함수에서 크래시가 났는지 확인하기 매우 어렵죠. 위에 크래시 난 곳의 주소를 보시..
SQLite http://www.sqlite.org/ Cpp와 연동하기 위해선, CppSQLite는 좋은 선택이 될 수 있습니다. 예제도 충분한 편이기에, 여러 용도로 무리 없이 사용하실 수 있을겁니다. CppSQLite http://www.codeproject.com/KB/database/CppSQLite.aspx 아무래도 CppSQLite만으로는, app에서 사용하기엔 무리 없다해도, 접근성이나 생산성면에서 제약이 있겠죠? 툴을 쓰신다면 조금 더 편리할 것입니다. SQLite Spy http://www.yunqa.de/delphi/doku.php/products/sqlitespy/index?do=recent&DokuWiki=au2jggc68n7lvqkjus1rpb4ii1 자~!! 모두 편리한 파일 D..
Open-Close 원칙 - 객체는 수정(modification)에는 닫혀있고(Close), 확장(extension)에는 열려있어야(Open) 한다. 중복을 제거하라 - 같은 기능을 하는 코드를 묶어, 중복을 제거하자는 원칙. 메소드 간소화 - 메소드는 두가지 일을 하게 만들지 말아라. - 메소드의 이름에서 벗어나는 일을 하지 말라. - 큰 규모의 행동이 필요하다면, 더 큰 범위의 단어로 메소드 명을 짓고, 그 큰 동작을 완성 시키기 위한 메소드의 연결만으로 구현하라. 직교성 - 클래스 끼리의 의존도를 낮춰, 해당 클래스가 변화를 국소화 시키고, 재사용을 촉진하라 가역성 - 변하지 않는 것은 없다. 코드도, 설계도 변화에 대비하라. 계약에 의한 설계 - 이 함수에 들어오기 전에 기대하는 선행 조건(Pre..
캐싱의 기본은 지역성에 근거하는데요, 이는 프로그래밍단의 최적화에서도 유명한 80-20법칙과도 일맥상통하는 이야기죠. 지역성(locality)은 아래 추정에 근거합니다. 1. 지금 읽힌 데이터는 이후에도 자주 사용될 가능성이 높다. 2. 지금 읽힌 데이터와 인접한 데이터는 이어서 사용될 가능성이 높다. 이는 코드 실행시 스택 처리를 통해 얻게 되는 장점과 유사합니다. 단일 코어가 아닌 멀티 코어 CPU는 데이터를 읽어올때, 캐시 라인 (cache line)이란 단위로 읽어옵니다. 캐시 라인이라 함은 지역성에 근거해 인접한 데이터를 미리 읽어옴으로써 속도향상을 노리는 것이지요. 하지만 이는 장점이자 독이 되기도 합니다. 멀티코어에서는 A스레드와 B스레드에서 인접 메모리를 접근할때, 캐시에 있던 내용을 메모..
Visual C++로 프로젝트를 작성시, 예제 프로그램을 작성해야 될일이 종종 있습니다. 특히 특정 라이브러리를 사용하는 프로젝트 생성시에는 같은 작업을 반복 해주어야 합니다. 저같은 귀차니스트에게는, 같은 작업 반복은 너무나도 짜증나는 일입니다. 코드 생성기가 괜히 있나요~ 자동화를 위한 시간 투자는 추후에 편해지기 위한(게을러 지기 위한) 노력입니다. 이를 위해 Custom Wizard라는 것을 VS에서는 제공해주고 있습니다. 그 중에서도 제가 자주 사용하는 VS2005를 바탕으로 설명 드리겠습니다. Custom Wizard를 통해서 정해진 옵션의 project 파일 및 소스 코드를 생성하는 것은 밑에 글을 참고하시면 됩니다. Create a Visual C++ Wizard for Visual Stu..
서버 개발시에 DBMS의 지원을 받지 않는 것은 불가능에 가깝습니다. 특히나 트랜잭션을 C/C++ 레벨에서 구현하기란 보통 어려운게 아닙니다. DBMS에서는 시스템 단에서 지원해주기 때문에 손쉽게 트랜잭션을 사용 할 수 있죠. 데이터를 저장하고 불러 오는 것 역시 파일 시스템보다 DBMS가 훨씬 더 효율이 좋죠. 물론 그것도 잘 만들고, 잘 사용하고, 잘 관리했을때 이야기지만 말이죠. 다음은 게임 서버에서 DBMS를 이용할 때의 유의 사항입니다. 1. 반드시 측정하라. 쿼리 프로파일러 등을 통해서 DB 부하를 측정하라. 원하는 목표치를 수립하고, 그 목표치에 달성 할 수 있게끔 노력하라. 목표치가 너무 높거나 낮을 수도 있지만, 목표치가 없이 무작정 빠르게보다 동기부여도 되고, 성취감도 생기기 때문에 반..
- Total
- Today
- Yesterday
- TDD
- 리버스 엔지니어링
- ftp
- 멀티스레드
- 게임데브포에버
- 바로가기 프로그램
- RoR
- EzShortcut
- 디자인 패턴
- 임백준
- 디버깅
- TraceRoute
- 엘키
- EasyExec
- Rails
- 게임개발포에버
- CppSQLite
- 조엘 온 소프트웨어
- NDC2013
- 좋은 프로그래머
- 루비
- perfmon
- ruby
- 루비 온 레일즈
- Ruby on Rails
- c언어
- MS-SQL
- SDL
- svn
- SQLite Spy
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |