2011/12/25

간단하게 Android App 아이콘 만들기

안드로이드 앱을 만들 때 가장 고민거리고 아이콘 만들기 인데, 이 아이콘을 간단하고 쉽게 만드는 웹사이트를 찾았다.


Android Asset Studio 사이트는 쉽고 간단하게 만들 수 있다.

아이콘은 종류별로 Launcher, Menu, Action bar, Tab, Notification icons 을 지원한다. 각각의 아이콘은 이미지와 클립아트 그리고 텍스트 형태의 아이콘을 지원한다.




Android Asset Studi

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

2011/12/20

Doxygen 1.7.x.x 한글 출력 문제

Doxygen 1.7.6.1 버전을 이용하여 소스 문서화를 테스트하는데 아래 이미지와 같이 한글이 자꾸만 깨지는 현상이 발생 했다.



Doxygen 설정 중에서 DOXYFILE_ENCODING(=UTF-8) 과 OUTPUT_LANGUAGE(=English) 를 아무리 바꾸어 보아도 현상은 달라지지 않았다.

OUTPUT_LANGUAGE를 Korean으로 변경을 하면 기본적인 문자는 한글로 잘 보여지는데 코드상 작성한 문서는 한글이 깨져서 보인다.


변경하던 중 Input 항목에서 INPUT_ENCODING 이 기본 값으로 UTF-8로 설정이 되어 있는데 본인이 작업중인 소스 파일(Visual Studio)은 UTF-8 형식이 아닌 일반 ASCII 파일 이다. 그래서 이 부분을 EUC-KR로 변경을 하니 한글이 잘 출력이 되었다.



혹시나 해서 INPUT_ENCODING 항목을 CP949 로 설정을 하여도 한글 출력에 문제가 없었다.<

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

Eclipse 용 Doxygen 플러그 인 - eclox 사용하기

2011/12/20 - [Dev Story/Tips] - Eclipse 용 Doxygen 플러그 인 - eclox 설치하기



eclox 를 설치한 후 프로젝트에 doc라는 폴더를 생성한다.

프로젝트에서 마우서 오른쪽 버튼을 눌러 나오는 메뉴에서 폴더를 생성할 수 있다.



툴바의 실행 버튼과 함께 있는 Doxygen 메뉴를 선택한다.



기존의 Doxygen 설정 파일이 없을 경우 생성하는 절차를 거치게 되는데 이때 위에서 생성한 경로에 Doxygen 파일을 생성한다.



Doxygen 파일을 생성하고 툴바 메뉴를 선택하면 문서가 작성이 된다.



작성된 문서는 설정에 따라 doc 하위에 생성이 된다.



Doxygen 에 대한 설정은 만들어진 doxygen 파일을 더블클릭하면 편집기 창에서 편집할 수 있다.



<

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

Eclipse 용 Doxygen 플러그 인 - eclox 설치하기

Eclipse 에서 사용할 수 있는 Doxygen 플러그인 을 찾다가 발견한 것이다. 개발은 2008년으로 중지되어 있는 것 같다. 마지막 버전은 2008년 8월 버전인 0.8.0 버전이다. 사용상 문제가 없는지 설치해 보았다.


설치는 Eclipse 의 Help 메뉴의 "Install New Software..." 메뉴를 통해서 할 수 있다. (Eclipse 버전은 3.7 버전을 사용하였으며 이미 Doxygen 1.7.6.1 버전을 설치한 상태이다.)


설치 대화상자에 eclox 의 Repository 주소를 입력하고 설치를 진행하면 된다.



설치 후에는 Eclipse 의 Preferences 대화 상자에 Doxygen 관련 메뉴가 추가 되고 실행 버튼 옆에 툴바 메뉴가 추가 된다.






eclox Homepage<

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

2011/12/10

Android Collection for Pencil

Pencil 프로그램에서 사용할 수 있는 Android Collection을 찾다가 Google code 의 Android UI Utils 프로젝트에서 배포하는 것을 발견하였다.




4가지로 분리하여 배포 하고 있었다. 모든 파일들을 다운 받아 수동으로 Collection을 설치하면 Pencil 1.3.2 버전에서 사용할 수 있다.

2011/12/10 - [Dev Story/Apps] - Pencil 1.3x 버전에서 Native 및 WindowsXP Collection 사용하기




http://code.google.com/p/android-ui-utils/downloads/list


<

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

Pencil 1.3x 버전에서 Native 및 WindowsXP Collection 사용하기



Pencil 최신 버전인 1.3.2 버전에는 기존의 몇개의 Collection 이 빠진채 배포 된다.



빠진 Collection 은  윈도우 프로그램 디자인에 필요한 GTK, Native, WindowsXP 이다. 이 Collection 들을 1.3.2 버전에서 사용할 수 있는 방법을 찾아 보았다.



우선 1.2 버전을 다운 받아 압축을 해제하고 그 안에 Pencil_1.2\app\chrome\content\Stencil 폴더에 포함되어 있는 Gtk.GUI, Native.GUI, WindowsXP-GUI 폴더를 1.3 버전의 Pencil\app\content\pencil\stencil 폴더에 복사를 한다.



그리고  Pencil\app\content\pencil\definition 경로의 collectionManager.js 파일을 편집기로 열어서 100번째 줄 쯤의 Collection 을 로드하는 부분을 확인한다.



Collection 을 로드하는 부분에 주석으로 처리된 부분의 주석을 해제하고 Pencil 을 다시 실행하면 아래의 화면 처럼 Native 와 WindowsXp 그리고 GTK collection을 볼 수 있다.



이와 같은 방법으로 다른 Collection 들을 수동으로 설치할 수 있다.

Google Code 페이지에서 다운 받은 Android Collection을 위와 같은 방법으로 설치하니 pencil 최신 버전에서 사용할 수 있었다.





아래 파일들은 1.2 버전에서 추출한 Collection 들이다.






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

Pencil 설치하지 않고 임의의 폴더에 압축 풀어 사용하기



프로그램을 설치하기 싫어해서 필요한 프로그램이 있을 경우 설치 없이 사용할 수 있는 방법을 찾곤 한다.


요즘 관심을 두고 있는 SW Mockup 프로그램인 Pencil을 설치 없이 사용할 수 있는 방법을 알아 보았다.


그 방법을 그리 어렵지 않다.


다운 받은 Pencil-1.3.2.win32.installer.exe 파일을 7zip 압축프로그램으로 열어서 필요한 파일을 찾는다.




압축 파일 안의 $_OUTDIR 폴더 안에 포함되어 있는 아래 파일들만 특정 폴더에 압축을 풀어 사용하면 된다.

 

 

압축을 푼 후 pencil.exe 를 실행하면 된다.




<

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

2011/12/08

SW GUI 목업 프로그램 Pencil



Pencil은 SW GUI를 설계할 때 아주 유용한 프로그램 이다.


현재 1.3.2 버전까지 공개가 되었는데 기본적으로 설치되는 Collection을 보면 이전 버전인 1.2 버전을 사용하는 것이 더 유용하다.


1.3.2 버전은 기본적으로 설치되는 디자인 object가 1.2 버전에 비해서 매우 한 정적이다. 1.2 버전은 XP에 대한 Object를 기본 제공하고 있다.


1.2버전이나 1.3.2 버전 모두 추가 Collection 설치가 원활하지 않아 추가 Collection 사용이 어렵다. 방법을 찾아 보려하는데 쉽지가 않다.


Pencil 1.3.2

Pencil 1.3.2

 

Pencil 1.2

Pencil 1.2



Pencil Project 홈페이지에서는 1.3.2 버전만 다운로드 받을 수 있는데 Google Code의 Pencil Project 사이트를 방문하면 1.2 버전도 받을 수 있다.


Pencil Project

Pencil Project on Google Cod

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

2011/11/21

[OpenCV] Linear Least Square calculation using OpenCV

출처: http://mariotapilouw.blogspot.com/2011/04/least-square-using-opencv.html



OpenCV를 이용한 Linear Least Square 를 계산하는 방법에 대한 글이다. 이 내용은 Fitting 을 하기 위해 중요한 것으로 기록 차원에서 발췌해 두었다. 역시 실제 참고는 원문을 이용하기 바란다.



내용보기

[OpenCV] Plane Fitting using OpenCV

출처 : http://mariotapilouw.blogspot.com/2011/05/plane-fitting-using-opencv.html



OpenCV를 이용한 Plane Fitting 방법을 소개한 글을 찾아서 기록차원에서 일부를 발췌하였다. 아래는 기록용으로 발췌하여 기록한 것이므로 참고는 위 링크의 원문을 참고하기 바란다.



내용 일부 보기

<

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

[OpenCV] cvFitLine 사용하기

OpenCV 에서는 2D와 3D 데이터에 대한 Fitting 함수로 cvFitLine 함수를 제공 한다. cvFitLine 함수는 OpenCV 문서상 설명은 아래와 같이 되어있다.



FitLine

Fits line to 2D or 3D point set



void  cvFitLine( const CvArr* points, int dist_type, double param,
                 double reps, double aeps, float* line );

points

     Sequence or array of 2D or 3D points with 32-bit integer or floating-point coordinates.

dist_type

     The distance used for fitting (see the discussion).

param

     Numerical parameter (C) for some types of distances, if 0 then some optimal value is chosen.

reps, aeps

     Sufficient accuracy for radius (distance between the coordinate origin and the line) and angle, respectively, 0.01 would be a good defaults for both.

line

     The output line parameters. In case of 2d fitting it is array of 4 floats (vx, vy, x0, y0) where (vx, vy) is a normalized vector collinear to the line and (x0, y0) is some point on the line. In case of 3D fitting it is array of 6 floats (vx, vy, vz, x0, y0, z0) where (vx, vy, vz) is a normalized vector collinear to the line and (x0, y0, z0) is some point on the line.

The function cvFitLine fits line to 2D or 3D point set by minimizing sumiρ(ri), where ri is distance between i-th point and the line and ρ(r) is a distance function, one of:



dist_type=CV_DIST_L2 (L2):

ρ(r)=r2/2 (the simplest and the fastest least-squares method)



dist_type=CV_DIST_L1 (L1):

ρ(r)=r



dist_type=CV_DIST_L12 (L1-L2):

ρ(r)=2?[sqrt(1+r2/2) - 1]



dist_type=CV_DIST_FAIR (Fair):

ρ(r)=C2?[r/C - log(1 + r/C)],  C=1.3998



dist_type=CV_DIST_WELSCH (Welsch):

ρ(r)=C2/2?[1 - exp(-(r/C)2)],  C=2.9846



dist_type=CV_DIST_HUBER (Huber):

ρ(r)= r2/2,   if r < C

      C?(r-C/2),   otherwise;   C=1.345



하지만 문서상 어디에도 어떻게 사용하는지 설명이 되어 있지 않다.

인터넷에서 찾아 아래와 같은 결론에 이르렀다.

int nStart = (ptStart.y < ptEnd.y)? ptStart.y: ptEnd.y;
int nEnd = (ptStart.y > ptEnd.y)? ptStart.y: ptEnd.y;

int nCount = 0;
for ( int row = nStart; row < nEnd; ++row )
{
CvPoint2D32f p;
p.x = (float)nCount++;
p.y = m_pfData[ row * nWidth + ptStart.x ];
cvSeqPush( seq, &p );

TRACE("%.6f\n", p.y);
}

float fLine[4];
cvFitLine( seq, CV_DIST_L1, 1, 0.01, 0.01, fLine );
TRACE("Line > %.6f, %.6f, %.6f, %.6f\n",fLine[0] ,fLine[1],fLine[2],fLine[3]);

float fSlope = fLine[1] / fLine[0];
float fIntercept = fLine[3] - fSlope * fLine[2];





위 코드는 cvFitLine 을 사용한 일부분이다.

2D 데이터에 의한 Fitting을 하기 위해 32비트 Float 형식의 CvPoint2D32f 를 사용하였다.

데이터를 저장하기위한 메모리를 만들고 (cvCreateMemStorage) 시퀀스를 생성하였다. 그리고 Fitting에 필요한 데이터를 시퀀스에 담는다.

두 번째 인자는 Fitting 방법으로 거리 계산 방법인데 이에 대한 자세한 것은 아직 모르겠다. 세 번째는 두 번째 인자에서 지정한 거리 계산방법에 사용할 상수를 정하는 것으로 몇몇 거리계산 방법에는 적용되지 않는 것으로 보인다.  네 번째와 다섯 번째는 직선을 구하는 정확도를 의미하며 OpenCV 문서에서는 0.01로 지정하도록 권장하고 있다.



함수의 결과는 2D Fitting의 경우 결과 값으로 4개의 float 데이터가 반환된다.

두 개 단위로 값이 의미를 갖는데 첫 번째 두 개는 직선과 평행한  정규화된 벡터이고 다음 두 개는 이 벡터의 연장선상에 존재하는 한 점의 좌표를 의미한다.


3D Fitting에 대해서는 좀 더 공부를 해 봐야겠다.<

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

2011/11/16

Khronos Releases OpenCL 1.2 Specification

OpenCL 1.2 버전이 공개 되었다.



멀티 프로세싱쪽에 관심을 두고 있는데 짬이 없어 머뭇거리는 사이 OpenCL 1.2 버전이 공개 되었다.

OpenCL 의 경우 GPU까지 활용할 수 있어 OpenMP 보다 좋은 성능을 보여줄 것 같은데 아직 이렇다할 진행을 하지 못하고 있다.

틈틈히 관련 정보를 봐 두어야겠다.



OpenCL

OpenCL 1.2 Specification

OpenCL 1.2 Quick Reference&

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

2011/11/10

Google Reader 를 위한 Firefox Add-ons - Google Reader Plus



오랜만에 Firefox 를 사용해 보았다.

브라우징 속도는 많이 빨라진 것 같은데 아직 Chrome 속도는 못 따라 오는 것 같았다.

Firefox로 Google Reader 보는데 Chrome의 확장 기능인 Super Full Feeds for Google Reader™에 익숙해져 Reader 에서 모든 내용을 보는게 편했다. 그래서 Firefox에 그러한 기능을 하는 Add-on이 있는지 찾아 보았다.


걸려든 녀석은 바로 Google Reader Plus 이다.

전체 글을 볼 수 있는 기능 외에도 많은 기능을 지원하고 있다. 아래 슬라이드는 Google Reader Plus의 설정 창이다.












내가 찾던 Reader 에서 모든 글을 보는 기능은 콤보박스 형태와 키보드 단축키를 이용하여 지원하고 있다.

콤보박스 메뉴 해당 글의 타이틀 우측에 표시하며 전체글과 IFrame을 이용한 블로그 전체보기 기능을 지원한다.



Google Reader Plus for Firefox<

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

2011/11/09

Visual C++ 2005 에서 OpenCV 2.3.1 버전 사용하기

현재 배포되는 최신 버전의 OpenCV 2.3.1은 Visual C++ 2008과 2010 버전에 대해서만 바이너리 빌드를 제공 하고 있다.

2005에서 사용을 하려면 Visual C++ 2008 버전을 사용하거나 2005 버전으로 직접 컴파일 해야 한다.

직접 컴파일 하는 방법은 어렵지 않으며 아래 글을 참고하여 만들면 된다.



2010/10/17 - [Dev Story] - OpenCV 2.1 + TBB 를 Visual Studio 2010 에서 컴파일하기



먼저 OpenCV 2.3.1 버전을 테스트하기 위해 MFC Dialog 기반 프로젝트를 만들고 프로젝트 폴더에 OpenCV 2.3.1 패키지 않에 포함되어 있는 include 폴더(\build\include)와 직접 만든 lib 파일 또는 패키지 안에 있는 Visual C++ 2008 버전 용 라이브러리 파일(\build\x86\vc9\lib)들을 Project의 opencv 폴더에 복사해 아래 이미지와 같은 구조로 만들 었다.



마지막으로 프로젝트 루트 폴더에 패키지에 포함되어 있는 (\build\x86\vc9\bin) DLL 파일 이나 직접 만든 DLL 파일들을 복사해 둔다.



opencv_calib3d231.dll


opencv_contrib231.dll


opencv_core231.dll


opencv_features2d231.dll


opencv_ffmpeg.dll


opencv_flann231.dll


opencv_gpu231.dll


opencv_highgui231.dll


opencv_imgproc231.dll


opencv_legacy231.dll


opencv_ml231.dll


opencv_objdetect231.dll


opencv_ts231.dll


opencv_video231.dll


윈도우 시스템 경로에 두는 것도 한 방법이지만 프로그램을 배포하거나 프로젝트를 이리저리 옮기는 겨우 다시 복사를 해야하는 불편함이 있는 기본적으로 프로젝트 경로에 두고 사용한다.



디버그용 라이브러리와 DLL을 사용할 경우 메모리 누수 문제가 있어 테스트 프로젝트에는 릴리즈용만 사용하였다.

Debug 모드와 Release 모두 동일하게 아래와 같이 설정을 한다.



먼저  추가 포함 디릭토리에 프로젝트 하위로 복사한 include 폴더(.\opencv\include)를 지정한다.



그리고 링커 메뉴에서 추가 포함 라이브러리 폴더 역시 라이브러리를 복사해 둔 경로(.\opencv\lib)를 지정한다.



그리고 추가 라이브러리 파일 목록에 아래 파일들을 입력 한다.



opencv_calib3d231.lib


opencv_contrib231.lib


opencv_core231.lib


opencv_features2d231.lib


opencv_flann231.lib


opencv_gpu231.lib


opencv_haartraining_engine.lib


opencv_highgui231.lib


opencv_imgproc231.lib


opencv_legacy231.lib


opencv_ml231.lib


opencv_objdetect231.lib


opencv_ts231.lib


opencv_video231.lib




처음부터 모든 파일이 필요한 것은 아니고 필요한 기능에 따라 사용하지 않는 파일들도 있지만 모든 기능을 테스트해 보기 위해서는 모두 입력을 해 두는 것이 좋을 것 같다.



프로젝트 설정은 모두 끝났고 아래 코드는 간단하게 OpenCV 2.3.1 버전을 사용하는 예이다.

// stdafx.h
// For OpenCV
#include "opencv/cv.h"
#include "opencv/highgui.h"


void COpenCV231TestDlg::OnBnClickedButtonLoadImage()
{
CFileDialog dlgFile(TRUE);

if ( dlgFile.DoModal() == IDOK )
{
CStringA strFile = CStringA(dlgFile.GetPathName());

IplImage* pIplImage = cvLoadImage( strFile );

cvNamedWindow( "Image" );
cvShowImage( "Image", pIplImage );

cvReleaseImage( &pIplImage );
}
}





프로젝트를 실행하고 메인 다이얼로그의 버튼을 누르면 이미지 선택 대화상자가 활성화 되고 이미지를 선택하면 화면에 보여준다.

<

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

2011/11/03

OpenCV 2.x Memory Leak 문제

OpenCv 2.2 부터인가 배포할 때 .lib 파일과 .dll 파일을 포함해서 배포하고 있는데 Visual C++ 2005 버전은 제외되었다. 그래서 2.3.1버전을 받아서 직접 만들어 사용을 하여야 해서 직접 컴파일을 하여 테스트 했다.



2.2버전을 사용할 때에도 메모리 누수 문제가 발생하였는데 2.3.1버전에서도 여전히 문제가 발생하였다.



메모리 누수 로그 더보기



 원인은 MFC 라이브러리가 로드 되기전에 OpenCV core 라이브러리가 로드되어서 발생하는 문제로 OpenCV의 core 프로젝트 설정에서 use MFC 를 Shared DLL로 설정하고 System.cpp 파일에 아래 내용을 추가해 주면 해결 된다고 한다.(http://tech.groups.yahoo.com/group/OpenCV/message/78198)

#ifdef _DEBUG
// required for including afh.h
#undef _WINDOWS_
#include <afx.h>
// Force linking to MFC.
static BOOL unused = afxTraceEnabled;
#endif





하지만 2.3.1 버전에서는 통하지 않는 것으로 보인다. 

이 문제는 프로젝트의 MFC 사용 설정을 Static 으로 설정하면 되지만 기존의 프로젝트가 Static으로 설정할 수 없는 경우는 소용이 없다.

현재로서는 Release 용 lib와 dll을 사용하거나 무시하는 방법 밖에 없어 보인다. 실제 배포하는 파일을 이용해도 동일한 현상이 발생하는데 왜 수정되지 않는지

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

2011/11/02

넌 누구냐! -1.#IND00

-1.#IND00 은 NaN 이다.



NaN 은 Not a Number의 약자이고 연산의 결과값이 불명확한 경우 -1.#IND00 또는 1.#IND00 가 발생한다.

IND는 indeterminate의 약자이다.



NaN을 유도하려면  sqrt(-1.0) log(-1.0)를 수행하면 된다.



참고로  1.#INF00 의 경우 overflow가 발생하는 경우이다. (inf는 infinite로 유추된다.)

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

SQLite 3.7.9 Release (include Library)

SQLite Release 3.7.9 On 2011 November 1 (3.7.9)

  • If a search token (on the right-hand side of the MATCH operator) in FTS4 begins with "^" then that token must be the first in its field of the document. ** Potentially Incompatible Change **

  • Added options SQLITE_DBSTATUS_CACHE_HIT and SQLITE_DBSTATUS_CACHE_MISS to the sqlite3_db_status() interface.

  • Removed support for SQLITE_ENABLE_STAT2, replacing it with the much more capable SQLITE_ENABLE_STAT3 option.

  • Enhancements to the sqlite3_analyzer utility program, including the --pageinfo and --stats options and support for multiplexed databases.

  • Enhance the sqlite3_data_count() interface so that it can be used to determine if SQLITE_DONE has been seen on the prepared statement.

  • Added the SQLITE_FCNTL_OVERWRITE file-control by which the SQLite core indicates to the VFS that the current transaction will overwrite the entire database file.

  • Increase the default lookaside memory allocator allocation size from 100 to 128 bytes.

  • Enhanced the query planner so that it can factor terms in and out of OR expressions in the WHERE clause in an effort to find better indices.

  • Added the SQLITE_DIRECT_OVERFLOW_READ compile-time option, causing overflow pages to be read directly from the database file, bypassing the page cache.

  • Remove limits on the magnitude of precision and width value in the format specifiers of the sqlite3_mprintf() family of string rendering routines.

  • Fix a bug that prevent ALTER TABLE ... RENAME from working on some virtual tables in a database with a UTF16 encoding.

  • Fix a bug in ASCII-to-float conversion that causes slow performance and incorrect results when converting numbers with ridiculously large exponents.

  • Fix a bug that causes incorrect results in aggregate queries that use multiple aggregate functions whose arguments contain complicated expressions that differ only in the case of string literals contained within those expressions.

  • Fix a bug that prevented the page_count and quick_check pragmas from working correctly if their names were capitalized.

  • Fix a bug that caused VACUUM to fail if the count_changes pragma was engaged.

  • Fix a bug in virtual table implementation that causes a crash if an FTS4 table is dropped inside a transaction and a SAVEPOINT occurs afterwards.


SQLITE_SOURCE_ID: "2011-11-01 00:52:41 c7c6050ef060877ebe77b41d959e9df13f8c9b5e"


SHA1 for sqlite3.c: becd16877f4f9b281b91c97e106089497d71bb47




SQLite website




<

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