2011/01/30

Linear Algebra Library - Armadillo 테스트

오래전 Matrix 연산을 위해 라이브러리를 찾던 중 알게된 Armadillo 를 오늘에서야 테스트를 해 보았다. Armadillo는 사이트에 게시된 속도테스트 결과에 의하면 IT++NEWMAT 라이브러리와 비교해서 월등히 속도가 빠르다. 그래서 OpenCV 의 Matrix 연산과 비교해 보았다. OpenCV Library 는 2.2 버전을 사용하고 컴파일러는 Visual C++ 2010 버전을 사용하였다.





아래는 테스트에 사용한 코드이다.


CStopWatch watch;

int N = 1000;

// OpenCV
cv::Mat cvA = ( cv::Mat_<double>( 2, 2 ) << 1.0, 2.0, 3.0, 4.0 );
cv::Mat cvB = ( cv::Mat_<double>( 2, 1 ) << 1.0, 2.0 );
cv::Mat cvZ = ( cv::Mat_<double>( 2, 1 ) );

watch.Begin();
for ( int i = 0; i < N; ++i )
{
cvZ = cvA * cvB;
}
watch.End();
TRACE( "OpenCV Matrix : %.6fms \n", watch.GetElapsedMillisecond() );

// Armadillo
arma::mat arA = arma::zeros( 2, 2 );
arma::mat arB = arma::zeros( 2, 1 );
arma::mat arZ = arma::zeros( 2, 1 );

arA( 0, 0 ) = 1.0;
arA( 0, 1 ) = 2.0;
arA( 1, 0 ) = 3.0;
arA( 1, 1 ) = 4.0;

arB( 0, 0 ) = 1.0;
arB( 1, 0 ) = 2.0;

watch.Begin();
for ( int i = 0; i < N; ++i )
{
arZ = arA * arB;
}
watch.End();
TRACE( "Armadillo Matrix : %.6fms \n", watch.GetElapsedMillisecond() );






결과는 의외로 OpenCV 가 더 빠른 결과가 나왔다. 


아래는 위 코드를 열번 반복했을 때 처리 시간이다.


OpenCV Matrix : 1.158083ms 



Armadillo Matrix : 0.946997ms 






OpenCV Matrix : 1.125553ms 


Armadillo Matrix : 0.977720ms 






OpenCV Matrix : 0.932178ms 


Armadillo Matrix : 1.334109ms 






OpenCV Matrix : 1.124107ms 


Armadillo Matrix : 1.342423ms 






OpenCV Matrix : 0.794104ms 


Armadillo Matrix : 0.934708ms 






OpenCV Matrix : 1.126637ms 


Armadillo Matrix : 1.333025ms 






OpenCV Matrix : 1.125553ms 


Armadillo Matrix : 1.332302ms 






OpenCV Matrix : 1.120854ms 


Armadillo Matrix : 1.331218ms 






OpenCV Matrix : 1.124107ms 


Armadillo Matrix : 1.337362ms 






OpenCV Matrix : 1.121216ms 


Armadillo Matrix : 1.332302ms 







실제로 Armadillo 가 가장 빠른지 다른 라이브러리와도 테스트를 해 보아야겠다.

<

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

2011/01/29

작업 표시줄에 Cygwin 아이콘 고정하기

Cygwin 을 설치하면 기본적으로 생성되는 시작메뉴의 Cygwin Bash Shell 을 실행해서 작업표시줄에 고정을 하면 다음에 실행할 때에는 도스 명령창만 실행이 된다. 작업 표시줄에 고정을 하기 위해서는 단축아이콘을 새로 만들어 고정을 하면 된다.



현재 Cygwin 이 설치된 경로는 D:\Dev\Cygwin 이다.




Cygwin 설치 경로에 있는 실행 패치파일(cygwin.bat) 실행하는 단축아이콘을 만든다.

이때 실행 명령은 아래처럼 입력한다.




C:\Windows\System32\cmd.exe /c D:\Dev\Cygwin\Cygwin.bat




단축아이콘 이름을 Cygwin 으로 설정하고 아이콘 설정을 Cygwin 이 설치된 경로의 Cygwin.ico로 설정을 하고 마우스 오른쪽 버튼의 메뉴 중에서 "Pin to Taskbar" 를 선택하여 단축아아콘을 작업표시줄에 고정한다.




아래 이미지는 작업한 순서대로 갈무리한 화면이다.




Cygwin.bat 실행 단축아이콘 만들기

Cygwin.bat 실행 단축아이콘 만들기




단축 아이콘 이름 지정

단축 아이콘 이름 지정




단축아이콘에 아이콘 지정

단축아이콘에 아이콘 지정




작업표시줄에 고정

작업표시줄에 고정




고정된 Cygwin 실행 단축아이콘

고정된 Cygwin 실행 단축아이콘



<

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

2011/01/28

Firebird는 Transaction 처리가 기본!!

요즘 Firebird 를 공부하고 있다. 조금은 당황스러운 경험을 하였다.



Firebird 설치시 포함되어 있는 Interactive SQL(isql.exe) 을 이용하여 몇가지 테스트를 하였다. 두 개의 isql 인스턴스를 실행하고 하나의 데이터베이스 연결을 하였다.




A isql 인스턴스(이하 A) 에서 테이블을 하나 생성 하였다. 그리고 B isql 인스턴스(이하 B)에서 데이블이 존재하는지 SHOW TABLE 명령을 확인해 보니 존재 하는 것으로 보였다. 이 것이 DDL은 자동으로 commit 이 되어 그러는 것으로 알았다. 나중에 알게되었지만 DDL 이라도 isql 환경 설정에서 AutoDDL 을 off 로 두면 자동으로 commit 이 수행되지 않는다.




B 에서 방금 생성한 member 테이블에 데이터가 있는지 확인(SELECT * FROM member;)하여 보았다. 데이터가 없음을 확인하고 A 에서 member 테이블에 데이터를 Insert 하고 B 에서 확인을 하였다. B 에서는 아무런 데이터가 확인 되지 않았다. 당연한 결과로 A 에서 작업을 한 후 commit 을 하지 않았기 때문에 B 에서 확인할 수 없었다. A 에서 commit 을 한 후 B 에서 확인을 해 보아도 보이지 않았다. 이상한 일이였다. B 에서 commit 명령을 내리고서야 A 에서 작업한 내용을 확인할 수 있었다.




이 상황이 잘 이해가 되지 않았다. A 에서 작업(Transaction)이 commit 이 되면 B 에서 당연히 확인이 되어야 하는 것으로 생각을 하였다. 이 상황이 잘 못 된 것인줄 알고 MySQL 의 InnoDB 를 이용하여 Transaction 테스트를 해 보았지만 MySQL 는 나의 예상대로 동작을 하였다.




답을 찾아 헤메던 중 외국의 firebird community 에서 도움을 얻어 이유를 알았다. 예전에 오라클을 공부할 때 들었던 관계형 데이터베이스의 ACID 특성에 대해서 다시 듣게 되었다.

B 에서 A 의 작업이 확인되지 않은 이유는 B 에서 데이터를 확인하기 위해 DML(select)을 수행하면서 B 에서 transaction 이 시작 되었고 transaction 이 시작되면서 ACID 의 Isolation 특성으로 데이터베이스는 transaction 이 시작할때의 상태를 독립적으로 유지하게 되어서 B 의 transaction 이 commit 된 후에 A 에서 가한 데이터베이스의 변경된 사항을 확인할 수 있었던 것이였다. mysql 에서도 이러한 관점에서 다시 테스트를 해 보니 동일한 결과를 얻을 수 있었다.




일반적인 GUI 프로그램을 사용하게 되면 Transaction 관리를 하기 때문에 개별적인 작업에 대한 적용이 이루어지는 것이다.




Firebird 란 놈을 좀 더 공부해 보아야겠다. Open Source 정책으로 운영되고 사용자 층이 두텁지 않아서 자료가 많이 부족해서 공부하기가 어렵다.<

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

2011/01/26

InnoDB 지원 여부 확인하기 및 생성하기

mysql> show variables like 'have_innodb';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_innodb | YES |
+---------------+-------+
1 row in set (0.00 sec)

mysql>CREATE TABLE customers (a INT, b CHAR (20), INDEX (a)) ENGINE=InnoDB;
<

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

2011/01/24

Firebird Table Schema 확인하기

SQL> SHOW TABLE member2;
NAME VARCHAR(20) Nullable
AGE INTEGER Nullable
SQL>
<

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

Firebird 2.5 기본 데이터베이스 경로 설정하기

긴 경로명을 표시하지 않고 기본 설정으로 하는 방법을 찾아 보았다. alias 를 사용하는 것이 아니라 firebird.conf 에 DatabaseAccess 를 설정하는 방법이다.



firebird 설치 경로의 firebird.conf 파일을 열어보면 DatabaseAccess 항목이 있는데 이 항목에 원하는 경로를 설정해 놓으면 데이터베이스 접속시 전체 경로를 입력하지 않고 접속할 수 있다.




DatabaseAccess = Restrict E:\firebirdx64\db




위 처럼 설정을 하고 데이터베이스를 재시작 하면 isql 에서 경로 없이 데이터베이스를 새성하면 지정한 위치에 데이터베이스가 생성이 된다.




SQL>CREATE DATABASE "test.fdb";




위와 같이 입력을 하면 "E:\firebirdx64\db" 위치에 test.fdb 가 생성이 된다.




원격에서 이 데이터베이스를 접속할 때에서 전체 경로설정 없이 아래와 같이 입력을 하면 test.fdb 에 접속할 수 있다.




SQL>CONNECT "IPAddress:test.fdb";




이 방법은 해당 경로에 대한 작업에만 유효하며 하위 폴더에 대한 접근은 이 방법으로 할 수가 없었다.<

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

2011/01/23

Firebird Datetime 필드 값 가져오기

Firebird 를 공부하면서 공부해야 할 게 많은 것 같다. Firebird 는 무료이면서 강력한 기능을 지원하고는 있지만 API를 활용하는 면 에서는 자료가 많지 않아 기술을 습득히가기 너무 힘든 것 같다. 여러가지중 오늘은 날짜형 데이터를 접근하는 것을 해 보았고 기록을 남긴다.



아래 코드는 날짜 필드(Timestamp) 에서 데이터를 가져와서 C 의 날짜형으로 변환하는 코드이다.




ISC_TIMESTAMP tmEnter;
short outFlag_00;

pOutSqlDA->sqlvar[ 0 ].sqldata = (ISC_SCHAR*)&tmEnter;
pOutSqlDA->sqlvar[ 0 ].sqltype = SQL_TIMESTAMP + 1;
pOutSqlDA->sqlvar[ 0 ].sqllen = sizeof(tmEnter);
pOutSqlDA->sqlvar[ 0 ].sqlind = &outFlag_00;

fetch_stat = isc_dsql_fetch( status, &stmt, 1, pOutSqlDA )

tm tmPC;
isc_decode_timestamp( &tmEnter, &tmPC );
<

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

2011/01/21

OpenCV IplImage 를 DC 에 그리기

OpenCV 의 이미지 개체인 IplImage 를 DC에 그리는 것은 OpenCV 안에 포함(2.2 버전 미만)되어 있는 CvvImage 클래스를 이용하면 쉽게 처리할 수 있다. 





하지만 최근 2.2 버전에서는 무슨 이유에서인지 이 클래스가 삭제 되었다. 그래서 다른 방법을 찾아 보았다. 사실 CvvImage 의 존재를 OpenCV 를 다루기 시작한지 오래 되었을 때 알아서 그전에 CvvImage 에 대해서 알지 못하였을 때 쓰던 방법이다.






각각의 Pixel의 값을 읽어들여 DC에 해당 픽셀을 그리는 방법이다.

int CTestOpenCV22Dlg::IplToDC( IplImage* pImage, CDC* pDC )
{
CvRect rcROI = cvGetImageROI( pImage );
CRect rcImage;
rcImage.left = rcROI.x;
rcImage.right = rcImage.left + rcROI.width;
rcImage.top = rcROI.y;
rcImage.bottom = rcImage.top + rcROI.height;

if ( pImage->depth == IPL_DEPTH_8U || pImage->depth == IPL_DEPTH_8S )
{
switch ( pImage->nChannels )
{
case 1:
{
BYTE *pRow;
BYTE byte;

for ( int y = rcImage.top, y2 = 0; y < rcImage.bottom; ++y, ++y2 )
{
pRow = (BYTE *)(pImage->imageData + pImage->widthStep * y);

for ( int x = rcImage.left, x2 = 0; x < rcImage.right; ++x, ++x2 )
{
byte = pRow[ x ];

pDC->SetPixelV( x2, y2, RGB( byte, byte, byte ) );
}
}
}
break;

case 3:
{
BYTE *pRow;
BYTE byte[ 3 ];

for ( int y = rcImage.top, y2 = 0; y < rcImage.bottom; ++y, ++y2 )
{
pRow = (BYTE *)(pImage->imageData + pImage->widthStep * y);

for ( int x = rcImage.left, x2 = 0; x < rcImage.right; ++x, ++x2 )
{
int index = x * 3;
byte[ 0 ] = pRow[ index ]; // B
byte[ 1 ] = pRow[ index + 1 ]; // G
byte[ 2 ] = pRow[ index + 2 ]; // R

pDC->SetPixelV( x2, y2, RGB( byte[2], byte[1], byte[0] ) );
}
}
}
break;
}
}

return NO_ERROR;
}



위 코드는 8Bit 1채널(흑백) 또는 3채널(컬러) 영상을 뿌리는 코드로 알파 채널이 추가된 이미지나 16비트 단위 영상데이트를 출력하는 기능도 추가하면 좋을

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

2011/01/20

OpenCV 2.1 Cheat Sheet


OpenCV 2.1 Cheat Sheet 1/2 Page

OpenCV 2.1 Cheat Sheet 1/2 Page

OpenCV 2.1 Cheat Sheet 2/2 Page

OpenCV 2.1 Cheat Sheet 2/2 Page




자료 출처 : OpenCV Wiki Page


<

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

OpenCV 2.2 라이브러리의 메모리 누수 문제 2

2011/01/19 - [Dev Story] - OpenCV 2.2 라이브러리의 메모리 누수 문제



바로 이전에 OpenCV 2.2 를 사용함에 있어 메모리 누수 문제가 발생한다는 글을 올렸었다. 이를 해결하려고 해봤지만 쉽지 않아 보였다. 




메모리 누수 로그를 살펴 보면 그래픽 파일 라이브러리 때문인 것으로 보여진다. 실제로 로그 처음에 보이는 "JPEG-2000 Code S" 를 보고 JPEG-2000 관련 라이브러리(libjasper, WITH_JASPER) 를 포함하지 않고 빌드하여 보았더니 메모리 누수 패턴이 바뀌었다. JPEG-2000 관련 메시지를 찾을 수 없었고 "Portable Network" 부터 발생을 하였다. "Portable Network"로 유추해 보면 PNG 관련 라이브러리(libpng, WITH_PNG)일 것으로 보여지는데 로그를 모두 살펴 보니 3rd party library 중 이미지 관련라이브러리(libjasper, libjpeg, libpng, libtiff 등)과 관련이 있는 것 같은데 이 모든 이미지 라이브러리를 포함시키지 않는 것은 안될 것 같다.




이와 비슷한 경험을 하신 분의 경험담으로 Release 용 Library(.lib .dll) 파일을 사용하면 메모리 누수 문제가 발생하지 않는다 한다. 실제 테스트를 해 보니 Release 용 Library 사용시에는 문제가 발생하지 않았다.

일단은 Release 용으로 사용을 해야 할 것 같다.<

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

2011/01/19

OpenCV 2.2 라이브러리의 메모리 누수 문제

Visual C++ 2010 에서 OpenCV 2.2 버전을 테스트하고 있는데 라이브러리를 사용을 하기만 하면 메모리 누수가 발생한다.

단순히 이미지만 불러들여 보여주는 것만 하는 코드가 포함된 것 밖에 없는데 이 루틴이 실행이 되는 것도 아닌데도 불구하고 프로그램 종료시 엄청난 메모리 누수가 나오고 있다. 직접 컴파일 한 것 뿐만 아니라 OpenCV 사이트에서 받은 OpenCV-2.2.0-win32-vs2010.exe 를 설치하여 얻은 라이브러리 역시 메모리 누수가 발생한다.


원인을 찾아 봐야겠다. 



Detected memory leaks!
Dumping objects ->
{231} normal block at 0x00737608, 47 bytes long.
Data: <JPEG-2000 Code S> 4A 50 45 47 2D 32 30 30 30 20 43 6F 64 65 20 53
{230} normal block at 0x007375C8, 4 bytes long.
Data: <jpc > 6A 70 63 00
{229} normal block at 0x00737588, 4 bytes long.
Data: <jpc > 6A 70 63 00
{228} normal block at 0x00737518, 51 bytes long.
Data: <JPEG-2000 JP2 Fi> 4A 50 45 47 2D 32 30 30 30 20 4A 50 32 20 46 69
{227} normal block at 0x007374D8, 4 bytes long.
Data: <jp2 > 6A 70 32 00
{226} normal block at 0x00736CB0, 4 bytes long.
Data: <jp2 > 6A 70 32 00
{225} normal block at 0x00737450, 72 bytes long.
Data: <pSs Ts Ws Xs > 70 53 73 00 F0 54 73 00 90 57 73 00 D0 58 73 00
{224} normal block at 0x007373F8, 24 bytes long.
Data: < ss > CD CD CD CD F8 73 73 00 01 00 00 00 CD CD CD CD
{223} normal block at 0x00737398, 32 bytes long.
Data: <JPEG-2000 files > 4A 50 45 47 2D 32 30 30 30 20 66 69 6C 65 73 20
{222} normal block at 0x00737350, 8 bytes long.
Data: < rs > EC 72 73 00 00 00 00 00
{221} normal block at 0x00736AB8, 8 bytes long.
Data: < rs > CC 72 73 00 00 00 00 00
{220} normal block at 0x007372C8, 76 bytes long.
Data: < R js ss > F0 84 E1 52 B8 6A 73 00 98 73 73 00 CD CD CD CD
{219} normal block at 0x00737240, 72 bytes long.
Data: <@Ms Rs Us Vs > 40 4D 73 00 E0 52 73 00 88 55 73 00 F0 56 73 00
{218} normal block at 0x007371E8, 24 bytes long.
Data: < qs > CD CD CD CD E8 71 73 00 01 00 00 00 CD CD CD CD
{209} normal block at 0x007371A0, 8 bytes long.
Data: < ps > B8 70 73 00 00 00 00 00
{208} normal block at 0x00737158, 8 bytes long.
Data: < ps > 98 70 73 00 00 00 00 00
{207} normal block at 0x00737088, 148 bytes long.
Data: < R > 94 84 E1 52 00 00 00 00 00 00 00 00 FF FF FF FF
{206} normal block at 0x00737030, 24 bytes long.
Data: < 0ps > CD CD CD CD CD CD CD CD CD CD CD CD 30 70 73 00
{205} normal block at 0x00736FC0, 48 bytes long.
Data: <Portable Network> 50 6F 72 74 61 62 6C 65 20 4E 65 74 77 6F 72 6B
{204} normal block at 0x00736F78, 8 bytes long.
Data: < ns > CC 6E 73 00 00 00 00 00
{203} normal block at 0x00736F30, 8 bytes long.
Data: < ns > AC 6E 73 00 00 00 00 00
{202} normal block at 0x00736EA8, 76 bytes long.
Data: < R0os os > AC 86 E1 52 30 6F 73 00 C0 6F 73 00 CD CD CD CD
{201} normal block at 0x00736E50, 24 bytes long.
Data: < Pns > CD CD CD CD CD CD CD CD CD CD CD CD 50 6E 73 00
{200} normal block at 0x00736E08, 8 bytes long.
Data: <Pms > 50 6D 73 00 00 00 00 00
{199} normal block at 0x007368E8, 8 bytes long.
Data: <0ms > 30 6D 73 00 00 00 00 00
{198} normal block at 0x00736D20, 168 bytes long.
Data: <T R > 54 86 E1 52 00 00 00 00 00 00 00 00 FF FF FF FF
{196} normal block at 0x00736C58, 24 bytes long.
Data: < Xls > CD CD CD CD 58 6C 73 00 01 00 00 00 CD CD CD CD
{195} normal block at 0x00736BF8, 32 bytes long.
Data: <TIFF Files (*.ti> 54 49 46 46 20 46 69 6C 65 73 20 28 2A 2E 74 69
{194} normal block at 0x00736BB0, 8 bytes long.
Data: <Lks > 4C 6B 73 00 00 00 00 00
{193} normal block at 0x007366E0, 8 bytes long.
Data: <,ks > 2C 6B 73 00 00 00 00 00
{192} normal block at 0x00736B28, 76 bytes long.
Data: <$ R fs ks > 24 8C E1 52 E0 66 73 00 F8 6B 73 00 CD CD CD CD
{190} normal block at 0x00736A60, 24 bytes long.
Data: < `js > CD CD CD CD CD CD CD CD CD CD CD CD 60 6A 73 00
{189} normal block at 0x00736A18, 8 bytes long.
Data: <xis > 78 69 73 00 00 00 00 00
{188} normal block at 0x007360E8, 8 bytes long.
Data: <Xis > 58 69 73 00 00 00 00 00
{187} normal block at 0x00736948, 144 bytes long.
Data: < R > F8 8B E1 52 00 00 00 00 00 00 00 00 FF FF FF FF
{185} normal block at 0x00736890, 24 bytes long.
Data: < hs > CD CD CD CD CD CD CD CD CD CD CD CD 90 68 73 00
{184} normal block at 0x00736810, 64 bytes long.
Data: <Portable image f> 50 6F 72 74 61 62 6C 65 20 69 6D 61 67 65 20 66
{183} normal block at 0x007367C8, 8 bytes long.
Data: <dgs > 64 67 73 00 00 00 00 00
{182} normal block at 0x00735F08, 8 bytes long.
Data: <Dgs > 44 67 73 00 00 00 00 00
{181} normal block at 0x00736740, 76 bytes long.
Data: <0 R _s hs > 30 88 E1 52 08 5F 73 00 10 68 73 00 CD CD CD CD
{179} normal block at 0x00736688, 24 bytes long.
Data: < fs > CD CD CD CD 88 66 73 00 01 00 00 00 CD CD CD CD
{178} normal block at 0x00736640, 8 bytes long.
Data: <pas > 70 61 73 00 00 00 00 00
{177} normal block at 0x00735918, 8 bytes long.
Data: <Pas > 50 61 73 00 00 00 00 00
{176} normal block at 0x00736140, 1216 bytes long.
Data: < R > 04 88 E1 52 00 00 00 00 00 00 00 00 FF FF FF FF
{174} normal block at 0x00736090, 24 bytes long.
Data: < `s > CD CD CD CD CD CD CD CD CD CD CD CD 90 60 73 00
{173} normal block at 0x00736030, 32 bytes long.
Data: <Sun raster files> 53 75 6E 20 72 61 73 74 65 72 20 66 69 6C 65 73
{172} normal block at 0x00735FE8, 8 bytes long.
Data: < _s > 84 5F 73 00 00 00 00 00
{171} normal block at 0x00735740, 8 bytes long.
Data: <d_s > 64 5F 73 00 00 00 00 00
{170} normal block at 0x00735F60, 76 bytes long.
Data: < R@Ws 0`s > 90 8B E1 52 40 57 73 00 30 60 73 00 CD CD CD CD
{168} normal block at 0x00735EB0, 24 bytes long.
Data: < ^s > CD CD CD CD CD CD CD CD CD CD CD CD B0 5E 73 00
{167} normal block at 0x00735E68, 8 bytes long.
Data: < Ys > 98 59 73 00 00 00 00 00
{166} normal block at 0x00735540, 8 bytes long.
Data: <xYs > 78 59 73 00 00 00 00 00
{165} normal block at 0x00735968, 1220 bytes long.
Data: <d R > 64 8B E1 52 00 00 00 00 00 00 00 00 FF FF FF FF
{163} normal block at 0x007358C0, 24 bytes long.
Data: < Xs > CD CD CD CD CD CD CD CD CD CD CD CD C0 58 73 00
{162} normal block at 0x00735860, 32 bytes long.
Data: <JPEG files (*.jp> 4A 50 45 47 20 66 69 6C 65 73 20 28 2A 2E 6A 70
{161} normal block at 0x00735818, 8 bytes long.
Data: < Ws > B4 57 73 00 00 00 00 00
{160} normal block at 0x00735328, 8 bytes long.
Data: < Ws > 94 57 73 00 00 00 00 00
{159} normal block at 0x00735790, 76 bytes long.
Data: < R(Ss `Xs > E0 82 E1 52 28 53 73 00 60 58 73 00 CD CD CD CD
{157} normal block at 0x007356E8, 24 bytes long.
Data: < Vs > CD CD CD CD E8 56 73 00 01 00 00 00 CD CD CD CD
{156} normal block at 0x007356A0, 8 bytes long.
Data: < Us > B8 55 73 00 00 00 00 00
{155} normal block at 0x00735658, 8 bytes long.
Data: < Us > 98 55 73 00 00 00 00 00
{154} normal block at 0x00735588, 148 bytes long.
Data: < R > B4 82 E1 52 00 00 00 00 00 00 00 00 FF FF FF FF
{152} normal block at 0x007354E8, 24 bytes long.
Data: < Ts > CD CD CD CD E8 54 73 00 01 00 00 00 CD CD CD CD
{151} normal block at 0x00735488, 32 bytes long.
Data: <Windows bitmap (> 57 69 6E 64 6F 77 73 20 62 69 74 6D 61 70 20 28
{150} normal block at 0x00735440, 8 bytes long.
Data: < Ss > 94 53 73 00 00 00 00 00
{149} normal block at 0x007353F8, 8 bytes long.
Data: <tSs > 74 53 73 00 00 00 00 00
{148} normal block at 0x00735370, 76 bytes long.
Data: <X R Ss Ts > 58 82 E1 52 F8 53 73 00 88 54 73 00 CD CD CD CD
{146} normal block at 0x007352D0, 24 bytes long.
Data: < Rs > CD CD CD CD CD CD CD CD CD CD CD CD D0 52 73 00
{145} normal block at 0x00735288, 8 bytes long.
Data: <pMs > 70 4D 73 00 00 00 00 00
{144} normal block at 0x00735240, 8 bytes long.
Data: <PMs > 50 4D 73 00 00 00 00 00
{143} normal block at 0x00734D40, 1216 bytes long.
Data: <, R > 2C 82 E1 52 00 00 00 00 00 00 00 00 FF FF FF FF
{142} normal block at 0x00734CF8, 8 bytes long.
Data: < R > 14 99 E6 52 00 00 00 00
{141} normal block at 0x00734CB0, 8 bytes long.
Data: < R > 00 99 E6 52 00 00 00 00
{139} normal block at 0x00734B90, 29 bytes long.
Data: < Ks Ks > 00 00 00 00 A0 4B 73 00 A7 4B 73 00 00 00 00 00
{138} normal block at 0x00734B18, 57 bytes long.
Data: < ( Js > 00 00 00 00 28 00 00 00 00 00 00 00 A0 4A 73 00
{137} normal block at 0x00734AA0, 54 bytes long.
Data: < ( Ks (Js > 00 00 00 00 28 00 00 00 18 4B 73 00 28 4A 73 00
{136} normal block at 0x00734A28, 53 bytes long.
Data: < ( Js Is > 00 00 00 00 28 00 00 00 A0 4A 73 00 A8 49 73 00
{135} normal block at 0x007349A8, 61 bytes long.
Data: < ( (Js 0Is > 00 00 00 00 28 00 00 00 28 4A 73 00 30 49 73 00
{134} normal block at 0x00734930, 53 bytes long.
Data: < ( Is Hs > 00 00 00 00 28 00 00 00 A8 49 73 00 B0 48 73 00
{133} normal block at 0x007348B0, 61 bytes long.
Data: < ( 0Is 8Hs > 00 00 00 00 28 00 00 00 30 49 73 00 38 48 73 00
{132} normal block at 0x00734838, 56 bytes long.
Data: < ( Hs > 00 00 00 00 28 00 00 00 B0 48 73 00 00 00 00 00
Object dump complete.
<

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

2011/01/18

OpenCV 2.2 + Intel TBB 를 VS2010 에서 컴파일하기(32/64비트 분리)

얼마전 공개가 된 OpenCV 2.2 버전을 TBB 와 결합하여 컴파일을 해 보았다.

컴파일 하는 방법은 지난 번에 올리 글에서 소개한 방법과 다르지 않다.


요약하여 정리하면 다음과 같다.




준비 사항


  • OpenCV 2.2 소스 (OpenCV-2.2.0-win.zip 다운로드)

  • CMake 2.8.3 설치파일 (cmake-2.8.3-win32-x86.exe 다운로드)

  • Intel TBB (tbb30_20101215oss_win.zip 다운로드)

  • Visual C++ 2010 Compiler




컴파일


  • CMake 를 설치한다.

  • 임의의 위치에 OpenCV 소스를 x86과 x64폴더에 각각 풀어 놓는다. 

    • F:/Dev/OpenCV/VC2010_TBB

  • 임의의 위치에 Intel TBB 소스를 풀어 놓는다.

    • F:/Dev/OpenCV/VC2010_TBB

  • CMake (cmake-gui) 를 실행한다.

  • CMake source code 경로와 binaries 경로에 각각의 platform 에 맞는 경로를 입력또는 설정한다.


    • x86 : F:/Dev/OpenCV/VC2010_TBB/x86

    • x64 : F:/Dev/OpenCV/VC2010_TBB/x64

  • 변수 목록 하단의 Configure 를 클릭 하고 각각의 platform 에 맞는 컴파일러를 설정한다.

    • x86 : Visual Studio 2010

    • x64 : Visual Studio 2010 Win64

  • 변수 목록 중에서 WITH_TBB 를 설정하고 다시 한 번 Configure 한다.

  • TBB_INCLUDE_DIR 항목이 붉은색으로 나오는데 이 항목에 TBB include 경로를 설정하고 Configure 한다.

    • F:/Dev/OpenCV/VC2010_TBB/tbb30/include

  • TBB_LIB_DIR 항목이 붉은색으로 나오는데 이 항목에 각각의 platform 에 맞는 경로를 설정하고 Configure 한다.

    • x86 : F:/Dev/OpenCV/VC2010_TBB/tbb30/lib/ia32/vc10

    • x64 : F:/Dev/OpenCV/VC2010_TBB/tbb30/lib/intel64/vc10

  • 붉은 색으로 표시되는 항목이 없느면 Generate 를 클릭하여 솔루션(.sln) 파일을 생성한다.

  • 각각의 platform 의 OpenCV 경로에 생성된 OpenCV.sln 파일을 열어서 컴파일 한다.

    • 필요에 따라 아래 방법에 따라 x86과 x64의 라이브러리를 분리 한다.





x86 과 x64 용 라이브러리 분리한다.

표현이 잘 못된 것 같기도 한데 x86과 x64용 .lib 파일과 .dll 파일을 구분되도록 컴파일 하는 것이다. 그러면 OpenCV 를 사용하는 32비트 프로그램과 64비트 프로그램을 같은 경로에 놓고 사용할 수 있다.

x64 platform 안에 있는 모든 .vcxproj 파일 중에서 ALL_BUILD 와 INSTALL 파일을 제외하고 .vcxproj 파일 안에 포함되어 있는 내용중 TargetName 과 .lib 파일에 대하여 32비트(x86)과 구분지어 지도록 수정을 하면 된다.

이 작업에서 64비트(x64)용에는 TargetName 과 .lib 파일명의 뒤에 x64 를 붙여 구분하도록 작업을 하였다. 아래의 내용이 변경 작업을 한 내용이며 굵은 글씨가 추가된 내용이다.




Debug 의 경우


opencv_calib3d220d_x64</TargetName>

opencv_contrib220d_x64</TargetName>

opencv_core220d_x64</TargetName>

opencv_createsamplesd_x64</TargetName>

opencv_features2d220d_x64</TargetName>

opencv_flann220d_x64</TargetName>

opencv_gpu220d_x64</TargetName>

opencv_haartrainingd_x64</TargetName>

opencv_haartraining_engined_x64</TargetName>

opencv_highgui220d_x64</TargetName>

opencv_imgproc220d_x64</TargetName>

opencv_legacy220d_x64</TargetName>

opencv_ml220d_x64</TargetName>

opencv_objdetect220d_x64</TargetName>

opencv_performanced_x64</TargetName>

opencv_traincascaded_x64</TargetName>

opencv_ts220d_x64</TargetName>

opencv_video220d_x64</TargetName>




opencv_calib3d220d_x64.lib

opencv_contrib220d_x64.lib

opencv_core220d_x64.lib

opencv_createsamplesd_x64.lib

opencv_features2d220d_x64.lib

opencv_flann220d_x64.lib

opencv_gpu220d_x64.lib

opencv_haartrainingd_x64.lib

opencv_haartraining_engined_x64.lib

opencv_highgui220d_x64.lib

opencv_imgproc220d_x64.lib

opencv_legacy220d_x64.lib

opencv_ml220d_x64.lib

opencv_objdetect220d_x64.lib

opencv_performanced_x64.lib

opencv_traincascaded_x64.lib

opencv_ts220d_x64.lib

opencv_video220d_x64.lib





Release 의 경우


opencv_calib3d220_x64</TargetName>

opencv_contrib220_x64</TargetName>

opencv_core220_x64</TargetName>

opencv_createsamples_x64<TargetName>

opencv_features2d220_x64</TargetName>

opencv_flann220_x64</TargetName>

opencv_gpu220_x64</TargetName>

opencv_haartraining_x64</TargetName>

opencv_haartraining_engine_x64</TargetName>

opencv_highgui220_x64</TargetName>

opencv_imgproc220_x64</TargetName>

opencv_legacy220_x64</TargetName>

opencv_ml220_x64</TargetName>

opencv_objdetect220_x64</TargetName>

opencv_performance_x64</TargetName>

opencv_traincascade_x64</TargetName>

opencv_ts220_x64</TargetName>

opencv_video220_x64</TargetName>




opencv_calib3d220_x64.lib

opencv_contrib220_x64.lib

opencv_core220_x64.lib

opencv_createsamples_x64.lib

opencv_features2d220_x64.lib

opencv_flann220_x64.lib

opencv_gpu220_x64.lib

opencv_haartraining_x64.lib

opencv_haartraining_engine_x64.lib

opencv_highgui220_x64.lib

opencv_imgproc220_x64.lib

opencv_legacy220_x64.lib

opencv_ml220_x64.lib

opencv_objdetect220_x64.lib

opencv_performance_x64.lib

opencv_traincascade_x64.lib

opencv_ts220_x64.lib

opencv_video220_x64.lib




결과물에 대해서는 아직 테스트를 하지 않았고 용량도 커서 첨부하지 않았다.<

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

2011/01/17

Firebird 2 Cheat Sheet

Firebird 2 Cheat Sheet

Firebird 2 Cheat Sheet (출처: http://www.alberton.info/firebird_cheat_sheet.html)



IBExpert 2011.01.11 available


IBExpert

IBExpert (출처:IBExpert 홈페이지)




이 버전에서 변경된 사항

  • Trace & Audit: new features such as grid view for browsing trace logs, load and analyze trace data from a file, new context menu.

  • Data export now possible to an XML spreadsheet.

  • New and improved IBEBlocks:

    • ibec_Coalesce

    • SELECT ... EXPORT AS now supports export into an XML spreadsheet.

    • Export data sets into an XML spreadsheet with ibec_ds_Export.

    • ibec_RestoreDatabase now supports FIX_FSS_DATA and FIX_FSS_METADATA options.












<

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

2011/01/15

Android Screen Size





































 Low density

ldpi (120)
Medium density

mdpi (160)
High density

hdpi (240)
Extra high density

xhdpi (320)
SmallQVGA (240x320)   
Normal

WQVGA400 (240x400)


WQVGA432 (240x432)

 HVGA (320x480)

WVGA800 (480x800)


WVGA854 (480x854)

 
Large 

WVGA800 (480x800)


WVGA854 (480x854)

  
Extra Large    



<

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

2011/01/13

SQLiteSpy 1.8.16







무료 로컬 데이터베이스인 SQLite 를 효과적으로 관리할 수 있는 관리 프로그램이다.

홈페이지에서 다운로드 받기가 너무 어렵다. 접속이 되지 않을 때가 너무 많다.




홈페이지 http://www.yunqa.de