2009/12/28

2009년 Best 프로그래밍 서적

흥배님의 블로그(合理的 Programmer jacking)에서 "2009년 Best 프로그래밍 서적"이란 글을 읽고 발췌해 놓았다. 다양한 분야에 대해서(나에 비해) 정리를 해 놓으셨는데 내가 읽어 보아야 할 책도 여러권 보였다.

  • Objective-C 오브젝티브 C: 맥과 아이폰 애플리케이션 프로그래밍
  • 제프리 리처의 Windows via C/C++
  • CLR via C# 2nd Edition
  • More Joel on Software 조엘 온 소프트웨어를 넘어서
  • Head First Software Development
  • WinDbg로 쉽게 배우는 Windows Debugging 윈도우 디버깅
  • 드리밍 인 코드: 천국과 지옥을 넘나드는 소프트웨어 개발 이야기
  • C++ 템플릿 가이드: 똑똑한 프로그래밍을 위한

    Original Post : http://neodreamer-dev.tistory.com/352

2009/12/23

CodeGear IDE Fix Pack 2009/2010 2.9 Released

Embarcadero의 RAD Studio IDE의 패치인 IDE Fix Pack 이 새 버전을 공개하였다.
아래 내용은 IDE Fix Pack 2.9에 대한 설명으로 홈페이지에서 발췌를 하였다.

The IDE Fix Pack 2009/2010 installs is a DLL-Expert that fixes the following Delphi/C++Builder 2009/2010 bugs at runtime. All changes are done in memory. No file on disk is modified. None of your projects are modified or benefit from the IDE Fix Pack.

RAD Studio 2010 fixes:
  • Undo destroys editor buffer
  • F1 key doesn’t work if invoked from the ObjectInspector
  • Vista compatible icons (256×256) aren’t supported
  • Stepping through the code can be slow

RAD Studio 2009 fixes:
  • Stepping through the code can be slow
  • Vista compatible icons (256×256) aren’t supported
  • Undo destroys editor buffer
  • 64 bit Debugger assertion (see also hotfix from Embarcadero for 2009)
  • QC #75738: Debugging extremly slow
  • QC #71575: Delphi 2009 literal string assigment
  • QC #47242: Possible AV when shutting down the IDE
  • QC #47807: Error insight fails to find TObject class
  • Possible deadlock when Error Insight calls ProcessMessages
  • QC #68493: Switching away and back to Delphi orphans focus on Code Editor
  • QC #37462: IDE may select the wrong file when performing a ctrl + left-click on a filename in the editor
  • QC #22880: Cannot resolve unit name
  • QC #58045: Component captions and component icons disappear from form designer
  • QC #69456: IDE dead lock when updating the editors
  • QC #55910: TDBText.Color always reverts to Parent.Color
  • QC #59963: Closing non-modal forms after a task switch can deactivate the application
  • QC #56252: TPageControl flickers a lot with active theming
  • QC #68730: TLabel is not painted on a themed, double-buffered TTabSheet in Vista
  • ToolsAPI IOTAProjectOptions.GetOptionNames destroys options.
  • QC #74646: Buffer overflow in TCustomClientDataSet.DataConvert with ftWideString

IDE Fix Pack 2009/2010 2.9
Original Post :
http://neodreamer-dev.tistory.com/351

2009/12/22

삼성 모바일 플랫폼 "바다" - API Reference 문서

기사 검색을 하던 도중 삼성 모바일 플랫폼에 대한 기사를 읽고 바다 사이트를 다시 방문해 보았다. 삼성의 글로벌 정책으로 인해서 인지 바다의 웹사이트는 온통 영어로만 되어 있다.(맘에 안 든다.)

플랫폼 바다를 발표하고 사이트를 방문했을 때와는 조금 바뀌었다. SDK나 다운 받아서 Hello bada 를 해 보려 했지만 삼성에서는 아직까지는 개인 개발자까지는 공개하지 않았다. 아직까지는 완성도라고 할만한 정도까지 만들어지지는 않았나 보다.

오늘은 사이트를 둘러보다 API 문서를 볼 수 있어서 링크를 걸어 두었다. 짬이 날 때 살짝 둘러 보아야 겠다.

bada API Refeence<

Original Post :
http://neodreamer-dev.tistory.com/350

Project 'xxx' is missing required source folder: 'gen' 해결하기

Hello Android 프로젝트를 하면서 프로젝트 생성시 발생하는 두 개의 에러를 해결하기 위한 방법이다.

프로젝트의 Property 대화상자에서 Java Build Path 의 내용 중 프로젝트에 해당하는 Android 버전을 가장 상위로 올려 준다.

그러면 두 개의 에러가 사라

Original Post : http://neodreamer-dev.tistory.com/349

Hello Android

안드로이드 개발 환경을 구축하고 난 뒤, 언어를 처음 배울 때 빠질 수 없는 Hello World 의 안드로이드 버전 Hello Android 를 출력 해 보았다.

설치된 Eclipse를 실행하여 Android 프로젝트를 생성한다.
사용자 삽입 이미지


프로젝트 이름은 HelloAndroid 를 하였고 Build Target 은 안드로이드 최신버전 2.0.1로 선택하였다. 프로젝트의 속성으로 Application name 을 HelloAndroid, Package name 을 임의로 com.android.hello 그리고 Activity 를 HelloAndroid로 설정 하고 Finish 를 선택하면 프로젝트가 만들어진다.
Eclipse의 Welcome 페이지를 닫으면 생성된 프로젝트를 볼 수 있다.
사용자 삽입 이미지



하지만 생성된 프로젝트에는 두 개의 에러가 있었다.
사용자 삽입 이미지


발생된 두 개의 에러를 조치하는 방법을 찾아 보았지만 찾을 수 없었다. Eclipse를 다시 시작하여 프로젝트를 열면 잠시 후 에러가 사라지는데 그 이유는 모르겠다. 좀 더 분석을 해 보아야겠다.

에러가 사라지고 난 후 프로젝트를 실행하면 실행하기 위한 가상 장치기 없을 경우 생성 여부를 묻는 대화상자가 나온다.
사용자 삽입 이미지
사용자 삽입 이미지


최고 해상도로 만들어진 프로젝트와 맞는 Target을 설정하여 가상 장치를 생성 하였다.
사용자 삽입 이미지


만들고 나면 장치를 선택하는 대화상자가 나오는데 이때 가상 장치를 선택하고 Refresh 버튼을 누르면 방금 전에 생성한 장치가 목록에 올라오는데 이때 이를 선택한다.
장치를 선택하면 안드로이드 가상 장치가 기동을 한다. 시뮬레이션 프로그램이라서 인지 부팅 속도가 많이 느리다.
사용자 삽입 이미지
사용자 삽입 이미지


드디어 부팅을 완료하고 프로그램이 기동된 모습이 나왔다.
사용자 삽입 이미지


이 상태 에서는 프로그램을 수정하고 실행을 하면 부팅과정을 거치지 않고 프로그램이 에뮬레이터에 실행이 된다. 하지만 그래도 컴파일 및 동작 속도는 많이 느린감이

Original Post : http://neodreamer-dev.tistory.com/348

2009/12/19

안드로이드 개발 환경 만들기 (윈도우즈 기반)

안드로이드 플랫폼에서 동작하는 프로그램을 만들기 위한 개발 환경을 만들어 보았다.
 
개발 환경에 필요한 사항은 다음과 같다.
  • JDK
  • Android SDK
  • eclipse IDE
 
Java Development Kit 설치하기
아래 주소에서 Java Development Kit (JDK) 를 설치하려는 PC에 맞는 것으로 다운 받는다.
http://java.sun.com/javase/downloads/widget/jdk6.jsp
JDK 버전 선택
현재 개발 환경을 꾸미기 위한 PC 는 Windows 7 64비트로 64비트용으로 다운 받았다. 다운 받을 때 로그인 대화상자가 나오는데 이는 무시(skip)하면 된다.
 


Android SDK 설치하기
아래의 주소에서  윈도우즈 용 Android SDK(android-sdk_r04-windows.zip) 를 다운 받는다.
http://developer.android.com/sdk/index.html
image
다운 받은 SDK(android-sdk_r04-windows.zip)를 하드디스크에 압축을 풀어 놓는다.
압축을 풀고 SDK setup.exe 를 실행시킨다. setup 프로그램이 실행이 되면 설치 가능한 Package가 있는지 인터넷을통해 확인을 하는데 아래와 같은 에러 메세지를 만날 때가 있다.
image
이때 Setting 에서 Force https://... source to be ftched using http:// 를 선택하여 http 프로토콜을 사용하도록 하고 Avaliable Packages 를 다시 확인해 본다.
image
image
여러 Package 중에서 Document 와 최신 API 그리고 USB 드라이버를 선택하여 설치 한다.
imageimage
 
eclipse IDE 설치하기
실제 개발 환경(IDE)로 사용할 eclipse 를 아래 주소에서 다운받아 하드디스크에 풀어 놓는다.
image
본인은 여러가지 버전 중에서 Classic 버전을 선택하였다.
이때 주의 할 점이 있다. JDK 나 JRE 가 64비트 버전만 설치되어 있다면 Eclipse도 64비트용을 사용하여야 한다. Windows 용 64비트 Eclipse는 Other downloads 에서 Latest Release 의 빌드 번호를 선택하여 나오는 페이지에 있다.
image
image
 
Eclipse 는 다운 받아 압축을 푸는 것으로 일단 설치가 끝난다. 그리고 나서 Eclipse 용 안드로이드 개발 툴킷을 설치한다.
Help 메뉴의 Install New Software... 를 선택하고 작업 경로를 추가 한다.
http://dl-ssl.google.com/android/eclipse/
image
추가를 하면 해당 경로에서 설치 가능한 프로그램 목록이 나온다.
image
개발 툴 항목을 모두 선택하고 Next 를 선택하여 설치를 한다. 설치 후 Eclipse 를 재시작 한 후 Preference 의 Android 탭을 선택하여 Android SDK 의 경로를 설정하고 Apply 를 선택하여 리스트가 갱신 되는 것을 확인한다.
image 
이것으로 안드로이드 개발에 필요한 프로그램들의 설치가 끝

Original Post : http://neodreamer-dev.tistory.com/347

2009/12/14

SQLite 3.6.21 Library ( VC x86, VC x64, BCC )

SQLite 3.6.21 버전의 라이브러리 파일이다.



VC 의 동적라이브러리는 새롭게 알게된 방법으로 만들었으며 테스트도 해 보았다.










+ 2009/12/16

이상하게도 Windows 7 에서 만들어진 Library가 XP 에서 정상동작을 하지 않는 것 같다. Visual C++ 을 최신 업데이트를 하면 동작을 하는 것 같은데 아직 확실치 않아서 Visual C++ 용 라이브러리를 XP 에서 다시 만들었다.



SQLite homepage<

Original Post : http://neodreamer-dev.tistory.com/346

2009/12/09

크기 조절이 가능한 CDialog 의 최소 크기 정하기

WM_GETMINMAXINFO 메시지 핸들러를 작성하여 최소 크기를 지정하면 된다.


void CxxDialog::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
// Minimum Dialog Size
lpMMI->ptMinTrackSize.x = 800;
lpMMI->ptMinTrackSize.y = 600;

CDialog::OnGetMinMaxInfo(lpMMI);
}

Original Post : http://neodreamer-dev.tistory.com/345

SQLite3.dll 만들기 (Win32 & x64 with VC++ 2005)

얼마전에도 SQLite3.dll 을 만드는 방법에 대한 글을 올린적이 있었는데 그 글을 토대로 만들어진 64 비트용 dll 파일을 사용해 보려 했는데 동작을 하지 않아서 다른 방법을 찾아서 다리 정리를 해 보았다.


이 방법은 이전 방법과 유사하지만 보다 간단하고 정상 독작하는 64비트용 dll 을 만들 수 있다. ^^*


우선 필요한 파일은 아래와 같다.

sqlite-amalgamation-3_6_21.zip

     - sqlite3.c

     - sqlite3.h

     - sqlite3ext.h


sqlitedll-3_6_21.zip

     - sqlite3.def


이 작업은 Visual C++ 2005 에서 작업을 하였다.


먼저 Win32 콘솔 프로젝트를 sqlite3 이름으로 생성한다.



프로젝트 생성시 아래와 같이 설정을 한다.



생성된 프로젝트 폴더에 sqlite-amalgamation-3_6_21.zip에 압축된 파일들 과 sqlitedll-3_6_21.zip에 압축된 파일 중 sqlite3.def 파일을 풀어 놓고 프로로젝트에 소스 파일들을 추가 한다.



그리고 전처리기 정의에 아래의 세가지를 추가한다.

SQLITE_ENABLE_FTS3

SQLITE_ENABLE_RTREE

SQLITE_ENABLE_COLUMN_METADATA



이를 추가 하지 않으면 아래와 같은 링크 에러가 발생한다.

1>fts3_tokenizer.obj : error LNK2005: _sqlite3_api이(가) fts3.obj에 이미 정의되어 있습니다.

1>rtree.obj : error LNK2005: _sqlite3_extension_init이(가) fts3.obj에 이미 정의되어 있습니다.

1>rtree.obj : error LNK2005: _sqlite3_api이(가) fts3.obj에 이미 정의되어 있습니다.

1>sqlite3.def : error LNK2001: sqlite3_column_database_name 외부 기호를 확인할 수 없습니다.

1>sqlite3.def : error LNK2001: sqlite3_column_database_name16 외부 기호를 확인할 수 없습니다.

1>sqlite3.def : error LNK2001: sqlite3_column_origin_name 외부 기호를 확인할 수 없습니다.

1>sqlite3.def : error LNK2001: sqlite3_column_origin_name16 외부 기호를 확인할 수 없습니다.

1>sqlite3.def : error LNK2001: sqlite3_column_table_name 외부 기호를 확인할 수 없습니다.

1>sqlite3.def : error LNK2001: sqlite3_column_table_name16 외부 기호를 확인할 수 없습니다.

1>sqlite3.def : error LNK2001: sqlite3_table_column_metadata 외부 기호를 확인할 수 없습니다.

1>D:\MyProject\VS\sqlite3\Debug\sqlite3.lib : fatal error LNK1120: 7개의 확인할 수 없는 외부 참조입니다.


마지막으로 sqlite3.lib 파일을 생성하기 위해 링크옵션의 모듈 정의 파일(Module Definition File)에 sqlite3.def 를 추가한다.



위와 같은 설정을 Debug 와 Release에 동일하게 해 주고 프로젝트를 빌드하면 Debug 및 Release 폴더에 dll 과 lib 파일을 볼 수 있다.


다음으로 64비트용을 작업한다.

먼저 64비트를 위핸 Configuration 을 추가한다.(Win32 설정으로부터 복사)







생성된 x64 Configuration 에서 전처리기 설정에서 WIN32를 WIN64로 변경한다. (Debug/Release 공통)



이제 빌드만 하면 된다

Original Post : http://neodreamer-dev.tistory.com/344

2009/12/06

Delphi IDE Fix Pack 2009/2010 2.8 Released

Embacadero RAD Studio 2009/2010 의 통합 개발 환경(IDE)의 버그를 수정한 IDE Fix Pack 이 2.8 버전을 공개하였다.

이번 버전에서 수정된 사항

RAD Studio 2010 fixes:
  • Undo destroys editor buffer
  • F1 key doesn’t work if invoked from the ObjectInspector
  • Vista compatible icons (256×256) aren’t supported
  • Stepping through the code can be slow

RAD Studio 2009 fixes:
  • Stepping through the code can be slow
  • Vista compatible icons (256×256) aren’t supported
  • Undo destroys editor buffer
  • 64 bit Debugger assertion
  • QC #71575: Delphi 2009 literal string assigment
  • QC #47242: Possible AV when shutting down the IDE
  • QC #47807: Error insight fails to find TObject class
  • Possible deadlock when Error Insight calls ProcessMessages
  • QC #37462: IDE may select the wrong file when performing a ctrl + left-click on a filename in the editor
  • QC #22880: Cannot resolve unit name
  • QC #58045: Component captions and component icons disappear from form designer
  • QC #69456: IDE dead lock when updating the editors
  • QC #55910: TDBText.Color always reverts to Parent.Color
  • QC #59963: Closing non-modal forms after a task switch can deactivate the application
  • QC #56252: TPageControl flickers a lot with active theming
  • QC #68730: TLabel is not painted on a themed, double-buffered TTabSheet in Vista
  • ToolsAPI IOTAProjectOptions.GetOptionNames destroys options.
  • QC #74646: Buffer overflow in TCustomClientDataSet.DataConvert with ftWideString
IDE Fix Pack 2.8 webpage
Original Post :
http://neodreamer-dev.tistory.com/343

2009/12/02

Firebird C API 데이터베이스 연결하기

char *szDBName = "e:\test.fdb";

char szSQL[2048] = {0,};
isc_db_handle db = NULL; // database handle
isc_tr_handle trans = NULL; // transaction handle
ISC_STATUS_ARRAY status; // status vector
long sqlcode; // SQLCODE
char *dpb_buffer = 0; // Database Parameter Buffer
short dpb_length = 0;

// Prepare parameter buffer
dpb_buffer = (char *)malloc(1);
*dpb_buffer = isc_dpb_version1;
dpb_length = 1;

// Set parameter User Name and Password
isc_expand_dpb( &dpb_buffer, &dpb_length
, isc_dpb_user_name, "SYSDBA"
, isc_dpb_password, "masterkey"
);

// Connect database
isc_attach_database( status, (int)strlen( szDBName ), szDBName, &db, dpb_length, dpb_buffer );

sqlcode = isc_sqlcode( status );
if ( status[0] == 1 && status[1] )
{
// Error occured
TRACE( "Fail to connect Database : %d\n", sqlcode );
return;
}

// Disconnect database
isc_detach_database( status, &db );

// Release parameter buffer
isc_free( dpb_buffer );


+ 2009/12/06
위의 코드는 메모리 1byte 의 메모리 누수가 생긴다. 누수가 발생하는 부분은 12번째 줄의 parameter buffer 에 버퍼 버전을 할당하는 부분으로 이부분을 주석처리하면 메모리 누수가 발생하지 않고 동작을 하게 된다. 버전을 명시하지 않아도 문제가 되는지 그리고 버전을 명시하고서도 메모리 누수가 발생하지 않도록 하는 방법이 있는지는 확인을 해 보아야 겠다

Original Post : http://neodreamer-dev.tistory.com/342

2009/12/01

Firebird C API를 이용하여 데이터베이스 생성하기


isc_db_handle db = NULL; /* database handle */
isc_tr_handle trans = NULL; /* transaction handle */
ISC_STATUS_ARRAY status; /* status vector */
long sqlcode; /* SQLCODE */

char *szSQL = "CREATE DATABASE 'e:\\ew.fdb' USER 'sysdba' PASSWORD 'masterkey';";

if ( isc_dsql_execute_immediate(status, &db, &trans, 0, szSQL, 1, NULL) )
{
sqlcode = isc_sqlcode(status);

TRACE( "Fail to create database : %d\n", sqlcode );
}
else
{
TRACE( "Database created!!!\n" );
}

Original Post : http://neodreamer-dev.tistory.com/341