Visual Studio 2010이 출시되었다. 물론 난 가난한 개발자(일명 Hungry Developer)이기 때문에, 유일한 방법인 Visual Studio 2010 C# Express를 설치하였다. 첫 설치의 느낌은 느리다.

어쩌튼 Visual Studio 2010에 관한 정보들은 넘처나니깐 넘어가고,
OpenCV를 이용한 개발을 하기 위해 환경 구축 중 Build할 때 에러가 발생하였다.

OpenCVSharp Error Message


에러 메시지를 보고 바로 이유를 알았다. "C#에서는 32bit로 만들어진 C++ DLL을 사용하기 위해서는 x86으로 타겟 플랫폼을 설정해야한다." 라는 생각이 들었다. (이 문제로 엄청 오랜 시간을 소요한 적이 있어서 바로 알 수 있었다.)

하지만, 두둥!
Visual Studio 2010 C# Express에서 프로젝트 설정 > 속성 의 값을 확인하였는데 타겟 플랫폼을 설정하는 란이 없었다.

Visual Studio 2010 C# Express build configuration


위의 사진처럼 타겟 플랫폼에 관한 정보가 없었다. 단지 무료 Express 버젼이라서 그런 것도 없는 것이야!
하고 고민하였지만 해결 방법은 매우 쉬웠다.

Tools > Options > Project & Solution 선택 후 오른쪽의 체크 박스 중 Show advanced build configurations 체크

만약 위의 Project & Solution 메뉴가 없다면 아래쪽의 Show all settings를 체크하면 나타날 것이다.
왜 이렇게 감춰둔게 많아진거니? VS2010!!

위의 작업을 마치면 이제 원하는 Build 옵션, 타겟 플랫폼을 설정할 수 있다.


Visual Studio 2010 뭔가 디자인도 이쁘고, 쾌적한 느낌이지만...
속도는 확실히 느리다. 뭔가 방법이 없니?

바보였다. 위의 에러는 내가 OpenCV 2.0 파일을 넣어두는 바람에 발생했던 것이었다 ㅠ_ㅠ
2010/05/07 15:28 2010/05/07 15:28

C#에서 Property의 이름을 string으로 반환하는 방법,
본 글은
How to get C# property names without magic string-static relfection 이라는 글을 참고로 한 것이다.

C#에서는 Reflection이라는 아주 재미있는 녀석이 존재한다. Reflection은 클래스를 캡슐화 하는 Type이라는 객체 타입을 제공함으로서 다양한 기능들을 제공한다. 이런 많은 기능들을 다 언급할 수는 없지만 (응용 분야가 무궁무진한 것 같다.) 그 중에서도 이번에는 Property를 사용할 때 Property의 이름(string)이 필요한 경우, 그 값을 구하는 방법이다.

개인적으로는 NHibernate를 사용할 때 Criteria 조건을 설정할 때, Property의 이름이 필요했는데 이를 직접 적지 않고 코드상으로 구현하고 싶어 찾게 된 것이다.

이 때는 LINQ가 사용된다. 솔직히 LINQ에 대해서 공부를 한 적이 없어서 정확하게 모른다. 하지만 아래와 같은 코드로 Property의 이름을 가져올 수 있다.


간단하게 테스트를 위한 코드만 작성하였다. 위에서 보는 것과 같이 strPropertyName의 값에 정상적으로 TitleName 라는 값을 받는 것을 확인 할 수 있었다. 매우 신기하다. LINQ의 Expression에 대해서 공부를 해야지 위의 코드가 모두 이해될 것이지만 대충 이해는 갈 것이다.

위의 코드를 응용하여 쉽게 C#에서 Property의 이름을 가져올 수 있다. 단순히 클래스의 전체 Property의 이름 등을 가져올 때는 Reflection을 이용하는 것이 더 편리할 것이다.

2010/04/15 23:59 2010/04/15 23:59
NHibernate를 사용할 때 검색조건을 사용할 필요성이 있다. DB 사용에서 최고의 중점은 결국 조건검색인 것은 당연하다. 하지만 NHibernate는 많은 클래스들로 이를 사용하게 해두어서 정확하게 어떻게 검색 제약 조건을 걸 수 있는지 알기가 어려웠다.

그래서 간단하게 NHibernate에서 사용되는 검색 제약 조건에 대해서 정리를 하였다.


1. 간단한 검색 조건 추가 방법(Restrictions Class)


위의 코드가 바로 가장 기초적인 Equal 구문, SQL 상에서 보면 Where ID = 'MyID' 을 생성해주는 구문이다. t1List, t2List의 결과는 동일하다.

AbstractCriterion 추상클래스는 NHibernate의 조건 검색을 위한 것으로 Restrictions 클래스을 통해 조건에 대한 인스턴스를 가진다. 위에서 사용된 Eq 함수 외에도 Between, Like, Gt(GreaterThan), Ge(GreaterThanEqual) 등 다양한 함수들이 존재한다. Restrictions에 속하는 함수들은 아래와 같다.


2. AND 조건 OR 조건 추가방법(Junction Class)

NHibernate에서 AND조건, OR조건을 사용하기 위해서는 Junction이라는 클래스를 사용한다. Junction은 위의 Restrictions 클래스들의 집합이라고 생각하면 된다. Junction에는  Disjunction, Conjuntion 두 가지가 존재한다.
  • AND = Conjunction
  • OR = Disjunction

이렇게 생각하면 쉽게 이해되고 아래의 예제를 보면 바로 활용할 수 있을 것이다.


Restrictions.Disjunction()은 추가되는 모든 조건들을 OR로 엮는 것이고 Conjunction은 AND로 엮어준다.

위의 코드는 AND 조건과 OR 조건을 사용한 간단한 조건 검색문 예제이다. 마지막의 junctionWhere의 멤버변수를 확인한 값은 다음과 같다. {((ID = pb and PW = studio) and (LEVEL = A or LEVEL = D))} 처음 의도한 조건을 그대로 가지고 있는 것을 확인할 수 있다.

NHibernate를 이용하면 참 쉬운데...
요즘 개발자들이 사라진 듯하다.ㅠㅠ

Visual Studio 2010이 나왔던데 Entity Framework로 넘어가야되는 것인가?
2010/04/14 00:18 2010/04/14 00:18

이 글의 목적은 외부에 있는 오라클 DB에 ODBC를 이용하여 접근하기 위한 세팅이다.

오라클은 뭘해도 귀찮다.역시 독보적인 기업이란 것의 이름만큼 독단적인 면이 있는 것 같다.
MFC에서 지원하는 쉬운 ODBC세팅들을 바로 이용할 수 없고 Oracle 서버와 연동하기 위한 Instant Client Package를 설치해야한다. Basic 패키지, ODBC 패키지 두번이나 설치해야 MFC에서 ODBC를 이용하여 개발이 가능하다.

물론, OCI(Oracle Communication Interface)를 이용한 가장 빠른 방법이 있지만 개발 시간이 더 걸리기만 하는 불필요한 작업인 것 같다. DB활용도가 높은 편이 아니다면 역시 쉬운 ODBC 강추, 나중에 DB교체도 쉽기 때문에 ODBC로 개발하기로 하였다.

예전에는 Oracle Client를 깔아야만 오라클과 연동이 가능하였지만 현재는 Instant Client만으로도 쉽게 접속이 가능하다. 하지만 관련자료가 조금(?) 부족해서 힘들었다.



1. Instant Client 의 다운로드

다운주소 : http://www.oracle.com/technology/tech/oci/instantclient/instantclient.html

  • instantclient-basic-win32-11.1.0.7.0.zip (46,734,555 bytes)
  • instantclient-odbc-win32-11.1.0.7.0.zip (728,899 bytes)

  위의 두 파일을 공통된 폴더에 압축을 푼다. 기본적으로 위의 버젼일 경우에는 instantclient_11_1 을 기준으로 풀리게 되어있다. 나중에 환경변수 설정을 용이하게 C:\Oracle\instantclient_11_1 로 해제하여 모아두었다.


2. 오라클 ODBC 드라이버의 설치

  odbc_install.exe 파일을 클릭하면 쉽게 ODBC드라이버가 자동으로 설치된다. 실패할 경우에는 dll 파일이 정상적으로 존재하는지 확인하고 부족하다면 새로 다운 받아 설치하자.

  설치 후엔 ODBC드라이버에서 아래와 같이 "Oracle in instantclient_11_1" 이 뜨는지 확인하면 설치완료.
  ( 제어판 > 관리도구 > 데이터원본(ODBC) > 드라이버 )

Oracle ODBC 드라이버



3. 환경변수 설정

  basic 패키지를 사용하기 위해서는 환경변수의 설정이 필요하다. 윈도우 환경변수 설정란으로 들어가서 아래와 같이 설치된 위치를 적어주자.

  • Path                   C:\Oracle\instantclient_11_1
  • NLS_LANG           KOREAN_KOREA.AL32UTF8
  • ORACLE_HOME    C:\Oracle\instantclient_11_1
  • TNS_ADMIN         C:\Oracle\instantclient_11_1


4. tnsnames.ora 설정

  tnsnames.ora는 PC에서 Oracle로 붙기 위한 설정 파일이라고 생각하면 된다. 아래의 샘플을 보고 자신의 서버에 맞게 세팅하자. 아래의 설정은 외부서버에 접속하기 위한 기본세팅.

 ORCL=
 (DESCRIPTION=
  (ADDRESS_LIST=
   (ADDRESS=(PROTOCOL=TCP)(HOST=아이피)(PORT=포트))
  )
  (CONNECT_DATA=
   (SERVER=DEDICATED)
   (SID=SID네임)
  )
 )

5. ODBC의 추가

  위의 ORCL은 tnsnames.ora에서 사용하는 이름이다. 이것을 ODBC에서 실질적으로 사용하는 시스템DSN으로 바꾸기 위해서 ODBC를 추가해준다. 기본적으로 시스템에서 사용하기 때문에 시스템DNS에 아래와 같이 새로 추가한다.

ODBC Oracle


6. 사용하기

사용하기는 쉽다. 역시 생각되로 그냥 CDatabase 로 ODBC 프로그래밍을 한다면 쉽게 처리가 된다.
자세한 정보는 인터넷 검색-ㅅ-;


2009/11/04 12:07 2009/11/04 12:07
말도 안되는 에러가 발생했다.
딱 2시간 전에도 컴파일 되던 동일한 프로젝트가 VS2008에서 에러가 발생한 것이다.
에러메시지는 아래와 같다.

'cmd.exe'을(를) 생성하는 동안 오류가 발생했습니다.

살다가 저런 오류는 본 적도 없다.
여러 사이트를 검색 후 찾은 것은 두가지의 해결방법!



1. 매니페스트(Manifest)의 사용으로 발생 가능
프로젝트 속성 > 매니페스트 도구 > 입력 및 출력 >패니페스트 포함 > 아니요
'예'를 '아니요'로 변경하면 다시 컴파일이 가능하다.



2. 환경변수의 변경

아마도 원인은 NSIS일 것이라고 생각된다. 이후 변해버렸다고 하는 사람들이 몇명 있다.

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\IDE;C:\Program Files\TortoiseSVN\bin;C:\Program Files\NSIS;

위와 같이 VS8의 주소란에 \\으로 되어있어서 제대로 파싱을 못 하는 경우가 있다. 이 경우에는 아래와 같이 \\을 \로 변경하면 정상적으로 컴파일이 된다.

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\TortoiseSVN\bin;C:\Program Files\NSIS;


아직도 이 현상의 범인은 알 수가 없지만 새로운 에러 상황에 대한 대처로는 충분할 것이라고 생각한다.

2009/11/02 19:58 2009/11/02 19:58
 졸업작품으로 영상처리 구현을 할 필요가 있어서 생판 첨해보는 영상처리를 당장 이번에 오는 월요일까지 만들어내야만 했다. 일단 간단한 프로토타입 프로그램이라도 만들어내라니깐 빨리 만들기 위해서 영상처리 관련 정보를 찾다보니 제일 많이 걸리는 것이 OpenCV였다.

 솔직히 내가 사용하는 것이 어디서 만들던 그런 것은 중요한 것이 아니다.  제작해주신 많은 오픈소스 업체와 관련자 분들께 죄송합니다 (__) 꾸벅, 어쩔 수 없잖아. 바쁜데 ㅠㅠ
Download : http://sourceforge.net/projects/opencvlibrary

위의 주소에서 일단 OpenCV 라이브러리를 다운 받는다.  역시 윈도우가 이런 면에서 편한 것 같다. 부담없이 윈도우용으로 패키지 된 OpenCV_1.1pre1a.exe (오늘 2009.05.15) 을 다운 받아서 바로 설치하였다.

[ Visual Studio 6.0 설정]

1. VS6.0 Option 설정 (한번만 하면 됨!)

1) Tools > Options > Directories(탭) 을 선택한다. 그리고 아래와 같이 Show directores for: 의 값을 Include files로 선택한다.

#01 VS6.0 Option 설정 - Include files 

그리고 아래의 값들을 추가시켜준다.
"C:\Program Files\OpenCV\cv\include"
"C:\Program Files\OpenCV\cxcore\include"
"C:\Program Files\OpenCV\otherlibs\highgui"
"C:\Program Files\OpenCV\cvaux\include"
"C:\Program Files\OpenCV\otherlibs\_graphics\include"

2) Show directores for: 의 값을 Library files

#02 VS6.0 Option 설정 - Library files

위의 화면처럼 아래의 값을 추가하여준다.
"C:\Program Files\OpenCV\lib"

3) Show directores for: 의 값을 Source files
"C:\Program Files\OpenCV\cv\src"
"C:\Program Files\OpenCV\cxcore\src"
"C:\Program Files\OpenCV\cvaux\src"
"C:\Program Files\OpenCV\otherlibs\highgui"
"C:\Program Files\OpenCV\otherlibs\_graphics\src"

위와 동일하게 설정하면 된다.

#03 VS6.0 Option 설정 - Source files 



2. VS6.0 프로젝트 설정 (OpenCV를 사용하는 프로젝트마다 필요)

#04 VS6.0 Project 설정

Project > Settings > Link(탭) 으로 들어가서 Object/library modules 에
cv.lib cxcore.lib highgui.lib

을 넣어준다. 그리고 이제 프로그래밍을 하면 된다^ㅡ^v

 

3. 간단한 소스




4. 에러(0xc0150002)의 발생

#05 OpenCV 컴파일&실행 중 에러

위의 세팅되로 다 하였지만 에러가 떠버렸다. 이건 뭥미! (-- );

(0xc0150002) 에러의 발생 알아보니 OpenCV_1.1pre1a.exe 버젼의 경우에는 Visual Studio 2005를 기반으로 개발되어있다고 한다.  그래서 DLL 파일 자체게 2005에서 만들어져서 VS6.0에서 사용할 때는 "초기화 할 수 없습니다" 라는 에러를 발생한다.

-0- 너무 최신 버젼(?)이라서 생기는 단점이다. 이를 해결하기 위해서는 아래에 MS사에서 제공되는 패치를 설치하면 해결할 수 있다.

Download : http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=en

그렇게 패치까지 하고 나니깐 성공적으로 컴파일이 되었다 :)

#06 OpenCV 이미지 뛰우기 성공

드디어 캠을 통한 영상처리의 첫 발걸음 중... OpenCV를 설치하는 순간이다!
2009/05/15 18:22 2009/05/15 18:22
대구버스도착정보 위젯


기능
  • 버스 정거장 이름 검색을 통한 버스도착정보
  • Dashboard 열릴 때마다 현재정보 최신화


버젼
  • 2009.03.11 PureDaeguBus v0.1.0 // 처음이자 마지막일 수 있는 버젼^^;


업데이트 하고 싶은 항목
  1. iPod Touch에서 사파리로 쉽게 접속해서 볼 수 있는 웹페에지( php )
  2. 버스번호 검색 기능 : 당연한 건데 왜 없지?
  3. 지하철 도착 시간 기능 : 구현은 쉽지만 지하철 홈페이지에서 시간 따는 노가다가 힘들어서 누가 따 준다면 당장 만들겠습니다 T-T
  4. 지하철 막차 정보 : 나에게 꼭 필요한 정보, 자주 막차를 탄다-_-;
  5. 자주가는 정거장 저장기능
  6. 성능 개선 : 약간 느린듯?
  7. 지역 변경 기능


개발후기

꽤 오래전에 위젯에 대해서 간단하게 공부하면서 만들었던 대구버스도착정보 위젯이다.

당연히 MacOS X에서 사용할 수 있는 Dashboard용 위젯이다. 윈도우 비스타 버젼으로도 만들어볼까? 하였지만 귀찮니즘과.. 과연 누가 필요로 할까? (대구의 웬만한 역에 버스도착정보 전광판이 설치되었다) 라는 하찮은 생각... 그리고 좌절스러운 토익성적 때문에 잠정적 보류에 빠져든 위젯이다.

이 녀석을 위해서 나름 디자인에도 신경쓰고 열심히 만들었다. 사용법은 매우 간단하다!

검색창에 자신이 조사할려고 하는 "정거장 이름" 을 입력하면 된다. 아직 버스번호를 통한 검색은 지원되지 않는다. 왜냐하면 ... 역시나 귀찮아서 안 만들고 있다. 혹시라도 원하는 사람이 5명 이상만 된다면 만들겠다! (혹은 윈도우 버젼을 원하는 사람이 5명 이상만 된다면... )

혹시라도 원하는 분들은 댓글을...

뭐 어찌되었던 만들면서 AJAX 개념도 살짝 잡을 수 있었고 이런 저런 욕심도 많았다. 앞으로 언젠가는 더 발전 된 모습의 버젼이 나타날 것이다. 현재는 ... 무한대기, 자극이 필요함!
2009/03/11 20:37 2009/03/11 20:37