2013/12/03

우분투 13.10에 Lazarus 설치하기

Ubuntu 13.10 에서 lazarus를 설치하는 방법을 찾아 보았는데 몇가지 방법중 가장 간단한 방법 찾았다.


우선 이미 설치된 경우 이전의 설치된 것을 아래 명령으로 삭제한다.

sudo apt-get purge fpc lazarus

sudo rm -Rf /usr/lib/fpc

sudo rm -Rf /usr/lib/lazarus

sudo rm -Rf /usr/share/fpcsrc

sudo rm -f ~/.fpc

sudo rm -Rf ~/.lazarus


최신 버전의 Lazarus 의 Debian 버전을 다운 받는다.



for 32bit


lazarus_1.0.14-0_i386.deb

fpc-src_2.6.2-0_i386.deb

fpc_2.6.2-0_i386.deb




for 64bit


lazarus_1.0.14-0_amd64.deb

fpc-src_2.6.2-0_amd64.deb

fpc_2.6.2-0_amd64.deb 


Platform에 맞는 파일들을 다운 받고 아래 명령으로 설치를 한다.

sudo dpkg -i *.deb


Alt + F2 키로 lazarus를 검색하면 lazarus IDE 가 검색이 되는데 이를 실행하면 Lazarus를 볼 수 있다.


&

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

2013/11/25

우분투 버전 확인

콘솔창에서 버전 확인 하기

~$ cat /etc/issue
Ubuntu 13.10 \n \l

~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 13.10
Release: 13.10
Codename: saucy
 


우분투 GUI에서 확인하기

 

&

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

2013/11/09

Visual Studio 2010 C++/C# 단축키

Visual Studio 2010 팀 블로그 멤버님들이 만들어 주신 단축키 정리 내용.









Visual Studio 2010 팀 블로그를 방문하면 보다 Visual Studio 2010에 대한 보다 많은 정보를 얻을

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

2013/07/24

InnoSetup 스크립트 - 32비트 64비트 구분하여 설치하기

Inno Setup 을 이용하여 설치 패키기를 만들때 32비트와 64비트를 함께 패키징하여 설치되는 시스템에 맞도록 구분하여 설치되록 하기.


Inno Setup을 설치하고 설치된 경로에 예제 파일(64BitTwoArch.iss)을 참고하면 된다.



 
[Setup]
;
ArchitecturesAllowed=x86 x64
ArchitecturesInstallIn64BitMode=x64

[Files]
Source: "D:\files\x86\*"; DestDir: "{app}"; Check: not Is64BitInstallMode
Source: "D:\files\x64\*"; DestDir: "{app}"; Check: Is64BitInstallMode

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppName}"; Check: not Is64BitInstallMode
Name: "{group}\{#MyAppName} x64"; Filename: "{app}\{#MyAppName}_x64.exe"; Check: Is64BitInstallMode

[Run]
Filename: "{app}\jre-7u25-windows-i586.exe"; Parameters: "/s"; Check: not Is64BitInstallMode
Filename: "{app}\jre-7u25-windows-x64.exe"; Parameters: "/s"; Check: Is64BitInstallMode
<

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

2013/07/23

Android Studio에 기존에 설치한 Android SDK 사용하기

구글에서 발표한 Android Studio 를 설치하면 기본적으로 SDK가 설치된다.



하지만 기존에 개발에 이용을 하던 SDK가 있다면 이를 이용하도록 설정을 하여 사용하면 된다.



그러면 하나의 SDK로 여러 개발툴어서 사용할 수 있어 SDK관리를 좀 더 쉽게 할 수 있다.



설정은 Project Structure 설정 창에서 할 수 있으며 이 창은 Android Studio 의 File 메뉴에 있는 메뉴를 선택하여 호출할 수 있으며 Android Studio 시작시 보여지는 Welcome 대화상자에서 "Configure > Project Defaults > Project Structure" 순으로 선택하면 볼 수 있다.




가운데 리스트위의 녹색 십자가를 선택하여 기존의 SDK 경로를 설정해 주고  Project 설정에서 해당 SDK를 설정한다.



이제 기존 SDK를 사용할 준비가 된 것이다.

이 SDK를 이용하여 프로젝트를 이용하여 Project를 생성할 때 아래와 같은 메시지가 출력되는 경우가 있다.



찾아 본 결과 이 경우는 SDK 에서 Android Support가 설치되지 않아서 발생한 문제이기때문에 "Android Support Repository"와 "Android Support Library"를 설치해 주면 된다.

&

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

2013/07/16

윈도우의 Context Menu를 확장해 주는 FileMenu Tools



윈도우의 Context Menu에 추가되어 다양한 기능을 지원하는 프로그램 이다.



특정 확장자를 특정 프로그램에 연결을 하거나 복사/이동 파일 이름 복사와 속성 변경 파일 영구삭제(복구방지) 기능 등을 기본적으로 지원한다.


필요에 따라 사용자가 메뉴를 추가하는 기능도 지원한다.



FileMenu Tool

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

파일 해쉬값 확인하는 확장 프로그램 - HashTab

HashTab은 파일의 해쉬 값을 쉽게 확인할 수 있도록 파일 속성창에 표시해주는 프로그램이다.

간혹 파일의 해쉬값을 비교하여 동일성 여부를 확인할 때 유용 한 것 같다.



기본적으로 CRC32, MD5, SHA-1 을 확인할 수 있고 설정에따라 더 많은 해쉬값을 확인할 수 있다.




HashTab&

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

2013/07/10

Add/Remove operation is impossible, the code element ‘xxxx’ is read only

Visual C++을 이용하여 작업하는 도중 메시지 핸들러를 추가하려다 "Add/Remove operation is impossible, the code element ‘xxxx’ is read only" 메시지를 마주하게 되는 경우가 있다.


이 때, 프로젝트를 닫고 프로젝트의 .ncb 파일과 .sou 파일을 지우고 프로젝트를 다시 열어 빌드하면 된다.&

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

Visual Studio 2012 Update 3



드디어 정식이 나왔다.

Visual Studio 2012 버전으로 XP호환되는 프로그램을 만들려면 꼭 업데이트가 필요 할 것 같다.


 



http://www.microsoft.com/visualstudio/kor/visual-studio-update 

2013/05/30 - [Dev Story] - Visual Studio 2012 Update 3 RC 2&

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

2013/05/30

Visual Studio 2012 Update 3 RC 2

Visual Studio 2012 버전의 업데이트 패치3 의 두번째 RC 버전이 공개 되었다. 

RC후 바로 정식 공개가 되리가 기대했는데 좀 아쉽다.


Update 3 버전에는 XP 지원에 문제가 패치되어 포함되어 있다.



Visual Studio 2012 Update 3 RC 2  

http://support.microsoft.com/kb/283560

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

2013/05/22

윈도우 7 재설치 없이 AHCI 모드 활성화 하기

메인보드를 업그레이드 할 기회가 있어 기존 설치된 운영체제를 새로 설치하지 않고 시도를 해 보았다. 하지만 업그레이드 후 부팅시 블루스크린이 나타났다.



바이오스에서 기본적으로 AHCI 모드로 설정이 되어있어 발생한 문제로 보였으며 이를 IDE로 설정한 후 해결 되었다. 메인보드 칩셋등 새로운 드라이버를 설치 후 거의 정상화가 되었다.



바이오스에서 ATA모드를 AHCI모드가 아닌 IDE모드로 설정한 것이 마음에 걸려 이를 해결할 수 있는 방법을 찿아 보았는데 의외로 간단하였다.



Windows 7 에는 이미 기본 표준 AHCI 드라이버가 설치가 되어 있어 레지스트리만 변경을 해주만 해당 드라이버로 설정이 된다.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci]
"Start"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\pciide]
"Start"=dword:00000003



설정을 마치고 재부팅 할 때 CMOS에서 ATA모드를 AHCI모드로 변경을 하면 윈도우 부팅후 기본 표준 AHCI드라이버를 메인보드에 맞는 드라어브를 다시 설치해 주면 된다. 



출처: 캐플 블로그 - [윈도우 7] 윈도우 재설치 없이 IDE 모드에서 AHCI 모드로 변경하기 

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

구글에서 공개한 안드로이드 개발 환경 - Android Studio v0.1



2013 Google IO 에서 공개한 Android Studio 0.1 을 설치해 보았다.

Android Studio 는 IntelliJ를 기반으로 안드로이드 개발에 최적화 한 개발 툴이다.

설치는 간단하였다. 설치 파일을 받아 실행만 하면 된다.


Android Studio 에 기본적으로 SDK가 포함되어 기존 SDK와 중복이 되어 관리가 귀찮을 듯 해서 android studio 의 SDK 경로를 기존 SDK 경로로 변경해 주었다.

변경 방법은 시작 대화상자에서 Configure -> Project Defaults -> Project Structure 대화상자에서 설정해 주면 되었다.




기본 프로젝트를 만들고 실행해 보았다.



앞으로의 안드로이드 개발 공부는 Android Studio를 이용하여 봐야겠다.


Getting Started with Android Studio

&

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

2013/05/20

SQLite Release 3.7.17

SQLite 버전이 업데이트 되었다.


SQLite Release 3.7.17 On 2013-05-20 (3.7.17)


  • Add support for memory-mapped I/O.

  • Add the sqlite3_strglob() convenience interface.

  • Assigned the integer at offset 68 in the database header as the
    Application ID for when SQLite is used as an application file-format.
    Added the PRAGMA application_id command to query and set the Application ID.

  • Report rollback recovery in the error log as SQLITE_NOTICE_RECOVER_ROLLBACK.
    Change the error log code for WAL recover from
    SQLITE_OK to SQLITE_NOTICE_RECOVER_WAL.

  • Report the risky uses of unlinked database files and
    database filename aliasing as SQLITE_WARNING messages in the error log.

  • Added the SQLITE_TRACE_SIZE_LIMIT compile-time option.

  • Increase the default value of SQLITE_MAX_SCHEMA_RETRY to 50 and make sure
    that it is honored in every place that a schema change might force a statement
    retry.

  • Add a new test harness called "mptester" used to verify correct operation
    when multiple processes are using the same database file at the same time.

  • Enhance the extension loading mechanism to be more flexible (while
    still maintaining backwards compatibility) in two ways:

    1. If the default entry point "sqlite3_extension_init" is not present in
      the loadable extension, also try an entry point "sqlite3_X_init" where
      "X" is based on the shared library filename. This allows every extension
      to have a different entry point, which allows them to be statically linked
      with no code changes.

    2. The shared library filename passed to sqlite3_load_extension() may
      omit the filename suffix, and an appropriate architecture-dependent
      suffix (".so", ".dylib", or ".dll") will be added automatically.



  • Added many new loadable extensions to the source tree, including
    amatch, closure, fuzzer, ieee754, nextchar, regexp, spellfix,
    and wholenumber. See header comments on each extension source file
    for further information about what that extension does.

  • Enhance FTS3 to avoid using excess stack space when there are a huge
    number of terms on the right-hand side of the MATCH operator. A side-effect
    of this change is that the MATCH operator can only accommodate 12 NEAR
    operators at a time.

  • Enhance the fts4aux virtual table so that it can be a TEMP table.

  • Added the fts3tokenize virtual table to the full-text search logic.

  • Query planner enhancement: Use the transitive property of constraints
    to move constraints into the outer loops of a join whenever possible,
    thereby reducing the amount of work that needs to occur in inner loops.

  • Discontinue the use of posix_fallocate() on unix, as it does not work on all
    filesystems.

  • Improved tracing and debugging facilities in the Windows VFS.

  • Bug fix: Fix a potential database corruption bug
    in shared cache mode when one
    database connection is closed while another is in the middle of a write
    transaction.
    Ticket e636a050b7

  • Bug fix:
    Only consider AS names from the result set as candidates for resolving
    identifiers in the WHERE clause if there are no other matches. In the
    ORDER BY clause, AS names take priority over any column names.
    Ticket 2500cdb9be05

  • Bug fix: Do not allow a virtual table to cancel the ORDER BY clause unless
    all outer loops are guaranteed to return no more than one row result.
    Ticket ba82a4a41eac1.

  • Bug fix: Do not suppress the ORDER BY clause on a virtual table query if
    an IN constraint is used.
    Ticket f69b96e3076e.

  • Bug fix: The command-line shell gives an exit code of 0 when terminated
    using the ".quit" command.

  • Bug fix: Make sure PRAGMA statements appear in sqlite3_trace() output.

  • Bug fix: When a compound query that uses an ORDER BY clause
    with a COLLATE operator, make sure that the sorting occurs
    according to the specified collation and that the comparisons associate with
    the compound query use the native collation. Ticket
    6709574d2a8d8.

  • Bug fix: Makes sure the authorizer callback gets
    a valid pointer to the string "ROWID" for the column-name parameter when
    doing an UPDATE that changes the rowid. Ticket
    0eb70d77cb05bb2272

  • Bug fix: Do not move WHERE clause terms inside OR expressions that are
    contained within an ON clause of a LEFT JOIN. Ticket
    f2369304e4

  • Bug fix: Make sure an error is always reported when attempting to preform
    an operation that requires a collating sequence that is missing.
    Ticket 0fc59f908b


  • SQLITE_SOURCE_ID:
    "2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668"

  • SHA1 for sqlite3.c: 246987605d0503c700a08b9ee99a6b5d67454aab


    Original Post : http://neodreamer-dev.tistory.com/710
  • 2013/05/14

    Visual Studio 에서 바코드 라이브러리 ZXing 빌드하기...

    Open Source 바코드 라이브러를 알아보다가 ZXing을 알게되었고 이 ZXing을 Visual Studio에서 사용하는 방법을 찾아보았다.

    ZXing 관련하여 Visual C++ 환경에서 사용하는 내용은 그리 많지 않았다.

    그러나 최근 소스의 업데이트 내용을 살펴 보다가 cmake 가 적용되었다는 정보를 확인하고 최근 소스를 받아 보았다.



    소스의 cpp 폴더에서 cmake 관련 파일을 볼 수 있어서  cmake 파일을 이용해서 컴파일 해 보았다.

    우선 준비해야 할 것이 ZXing 소스와 더불어 cmake 와 CppUnit 소스가  필요하다.


    cmake 를 실행하여 소스코드를 zxing/cpp 로 Build the Binaries 에 출력 결과를 저장할 폴더를 설정한다.



    configure 버튼으로 한 번 설정하면, CppUnit 관련 에러가 출력된다.

    다운로드해 놓은 CppUnit 경로를 설정하면 에러없이 경고 몇 개만으로 설정할 수 있다.



    마지막으로 Generate 버튼을 눌러 마무리 한다.

    경고 몇 개가 출력되지만 라이브러리 빌드에는 문제가 되지 않았다.



    지정한 Binary 폴더에 생성된 zxing.sln 파일을 Visual Studio로 열어 빌드하면 Static Library를 얻을 수 있었다.


    일단 빌드를 문제 없이 마쳤고 Static Library를 얻을 수 있었다. 라이브러리 사용에 대한 것은 좀더 공부를 해봐야 할

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

    2013/05/09

    [VCPP] 타이틀 바 없는 윈도우 마우스로 이동하기

    // Method #1
    LRESULT CDialogClass::OnNcHitTest(CPoint point)
    {
    return HTCAPTION;
    }

    // Method #2
    void CDialogClass::OnLButtonDown(UINT nFlags, CPoint point)
    {
    PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));

    CDialogEx::OnLButtonDown(nFlags, point);
    }




    타이틀 바가 없는 윈도우를 만들경우 별도의 작업 없이는 이 윈도우를 이동 할 수 없다.

    기존 방법과 같이 마우스 드래그 만으로 윈도우를 이동하는 간단한 방법이 두 가지 있는데,



    첫 번째는 WM_NCHITTEST 메세지 처리 핸들러에서 마우스 커서가 타이틀바에 있는 것처럼 처리(Method #1)하면 쉽게 윈도우를 이동할 수 있다. 하지만 이 방법에는 단점이 있다. 클라이언트 영역에서의 마우스 메세지 핸들링이 원활하지 않게 된다. 마우스 이벤트를 제대로 이용하려면 두 번째 방법을 이용해야 한다.



    두 번째 방법은 마우스 왼쪽 버튼이 눌렸을 경우에 윈도우의 타이틀 바에서 왼쪽 버튼이 눌렸다는 메세지 강제로 보내는

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

    2013/05/08

    Visual Studio 2012의 XP 지원 문제

    Visual Studio 2012 를 설치하고 간단한 프로그램을 작성하여 테스트해 보았는데 XP에서는 실행이 되지 않는 문제가 있었다.


    이 문제는 Visual Studio 2012 의 Update 2 에서 개선이 되어 XP 지원 모드가 추가 되었는데 여전히 문제는 남아 있었다.


    가상PC에 XP를 설치하고 테스트 해 보았는데 어떠한 설정을 해도 XP 지원 모드에서 만들 실행 파일이 아래와 같은 메시지를 내 뿜고 실행이 되지 않았다.


    The procedure entry point InitializeCriticalSectionEx could not be located in the dynamic link library kernel32.dll.


    오늘 새로운 정보를 얻었다. 이미 이 문제는 다는 개발자에의해 보고 되어 수정이 되고 있었다. 발표 준비중인 Update 3 RC 버전에서 이 문제를 해결했다고 한다. 아직 RC 버전이라 업데이트가 꺼려지는데 정식이 나오면 테스트 해 봐야 겠다.



    Visual Studio 2012 Update 3 RC 

    <

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

    2013/05/07

    Intel® HAXM을 이용한 쾌적한 안드로이드 에뮬레이터 구성하기

    인텔의 VT 기술을 이용한 가상화 엔진인 Intel Hardware Accelerated Execution Manager(Intel® HAXM)를 이용하면 느린 안드로이드 에뮬레이터를 보다 쾌적하게 구성할 수 있다고 한다.


    우선 SDK Manager를 이용하여 "Intel x86 Atom System Image"를 설치한다.



    설치 한 후 새로운 에뮬레이터를 생성한다. 이 때 아래 이미지에서 보는 것과 같이 안드로이드 버전을 4.2.2로 설정하고 CPU를 Intel Atom으로 설정한다.



    생성한 에뮬레이터를 실행하면 아래와 같이 Open HAX device failed 메세지와 나오는 경우가 있다.

     

    이 때 Intel Hardware Accelerated Execution Manager를 설치해 주면 해결된다. 

     

    Intel® Atom™ x86 Image for Android* Jelly Bean 4.2 Installation Instructions&

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

    [C#] WPF 윈도우를 마우스 드래그로 이동하기

    private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
    base.OnMouseLeftButtonDown(e);

    this.DragMove();
    }
    <

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

    [C#] 폼을 마우스 드래깅으로 이동하기

    private const int WM_NCHITTEST  = 0x84;
    private const int HTCLIENT = 0x1;
    private const int HTCAPTION = 0x2;

    protected override void WndProc(ref Message m)
    {
    switch (m.Msg)
    {
    case WM_NCHITTEST:
    {
    base.WndProc(ref m);
    if ((int)m.Result == HTCLIENT)
    {
    m.Result = (IntPtr)HTCAPTION;
    }
    return;
    }
    break;
    }

    base.WndProc(ref m);
    }




    출처: http://support.microsoft.com/kb/320687/en-u

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

    2013/05/01

    Visual C++ 2010 에서 OpenCV 변수 이미지 확인하기

    2013/04/07 - [Dev Story] - OpenCV 디버깅을 위한 Visual Studio Plugins


    이전 글에서 Visual C++ 2012 버전에서 동작하는 ImageWatch 라는 확장 기능인 Image Watch 에 대해서 글을 썼었는데 이 확장기능은 오로지 2012 버전만 지원하는 것이어서 2010 버전을 지원하는 확장기능이 있는지 찾아 보았다. 찾은 것이 Native Viewer 이다.

    Visual Studio에 있는 확장기능 관리자에서 Native 로 검색하면 쉽게 찾을 수 있으며 설치할 수 도 있다.



    이 확장 기능을 설치한 후 도구의 옵션에 보면 왼쪽 리스트에 Native Viewer 라는 항목이 생기는데 이 항목의 하위 메뉴에서 개발툴과 통합 설정을 하면 바로 사용할 수 있다.



     

    개발툴과 통합을 하면 마우스 커서를 이미지 변수위에 올리면 보이는 툴 팁이 해당 변수가 갖고 있는 이미지 속성으로 바뀌어 보여준다.



    그리고 Control 키를 누른 채 마우스를 변수로 가져가면 마우스 커서가 가리키는 변수가 갖고 있는 이미지를 볼 수 있다.




    NativeViewer on SourceForge

    NativeViewer Documentation

    <

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

    2013/04/30

    TextCrawler - 간단하고 편리한 텍스트 파일 변환(바꾸기) 프로그램



    OpenCV 64비트용 라이브러리를 만들면서 알게된 프로그램이다. OpenCV가 배포될 때 64비트용 dll과 lib가 배포되지만 32비트용과 64비트용이 이름이 같아 동일 경로에서 사용할 수 없어 이를 구분하기 위해 재 컴파일을 하는데 많은 프로젝트 파일안에 포함되어 있는 이름들을 하나씩 수작업으로 바꾸는 일은 매우 시간이 걸리고 귀찮은 작업이였는데 TextCrawler 를 이용하는 쉽게 해결이 되었다.


    프로그램은 간단한 UI로 구성되어 있지만 많은 기능을 포함하고 있다. 파일 또는 폴더를 지정할 수 있고 폴더의 경우 필터링과 예외파일 지정도 가능 하다.


    바꾸기는  일반적인 바꾸기 기능과 정규식 그리고 배치 처리도 지원하여 쉽게 바꾸지 작업을 할 수 있다.

     


    TextCrawler 포럼

    TextCrawler 2.3 Releas

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

    2013/04/29

    VC++ 2008 이후의 프로젝트 메뉴 폰트 크기 변경하기

    Visual C++ 2008 이후 정확히 말하면 Feature Pack 이 적용된 SP1 시점부터 인 것 같다.

    프로젝트를 생성을 하면 메뉴의 크기가 약간 작게 나온다. 이는 Visual Studio 2008 Feature Pack에 포함된 BCG Soft사의 Control Bar 시스템이 도입이 되었는데 이때문에 기본 폰트 크기가 바뀐 것 같다.



    이를 시스템의 기본 폰트로 바꾸기 위해서는 Visual Studio 2008에 추가된 afxGlobalData 를 이용하면 된다.

    afxGlobalData 는 AFX_GLOBAL_DATA 구조체로 프로젝트 전반적으로 사용되는 색상이나 브러쉬 커서 등의 리소스를 가지고 있으며 유용한 함수도 포함하고 있다.

    LOGFONT logfont = {0};
    ::SystemParametersInfo( SPI_GETICONTITLELOGFONT, sizeof( LOGFONT ), &logfont, 0 );
    afxGlobalData.SetMenuFont( &logfont, TRUE );





    아래 이미지에서 위쪽은 프로젝트 처음 생성시의 폰트이고 아래쪽은 시스템 기본 폰트를 적용한 후의 폰트이다. 크기가 살짝 차이가 난다.



    &

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

    2013/04/25

    Visual C++ 2008, 2010 Samples(2008 Feature Pack)

    Visual C++ 2008 Feature Pack 에 포함되어있는 새로운 UI 클래스들을 활용하려 했는데 내용이 상당히 많아 자세한 정보를 찾아 보았다.


    MSDN에 문서와 샘플 코드가 공개되어 있다.


    Microsoft Visual C++ 2008 SP1 Sample Library

    Visual C++ Samples and Related Documentation for Visual Studio 2010&

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

    2013/04/15

    멀티 모니터 해상도 확인하기

    멀티모니터를 사용하는 경우 각각의 모니터의 해상도와 출력 영역을 확인 하는 방법이다.

    EnumDisplayMonitors 함수를 이용하는 것으로 CallBack 함수인 MyEnumDispMonitorProc 에서 각각 모니터의 정보를 처리한다.

    void Class::Func()
    {
    :
    vector< CRect > vrcMon;
    EnumDisplayMonitors( NULL, NULL, MyEnumDispMonitorProc, (LPARAM)&vrcMon );

    for ( int i = 0; i < (int)vrcMon.size(); ++i )
    {
    TRACE( "Monitor #%d, %dx%d - %dx%d (%dx%d) \n"
    , i, vrcMon[i].left, vrcMon[i].top
    , vrcMon[i].right, vrcMon[i].bottom
    , vrcMon[i].Width(), vrcMon[i].Height() );
    }
    :
    }

    BOOL CALLBACK Class::MyEnumDispMonitorProc(HMONITOR hMon
    , HDC hDC, LPRECT pRect, LPARAM lParam)
    {
    vector< CRect >* pVRcMon = (vector< CRect >*)lParam;

    MONITORINFOEX mi;
    mi.cbSize = sizeof(MONITORINFOEX);
    GetMonitorInfo( hMon, &mi );

    TRACE(
    "Monitor Info (%s)(%s) \n"
    " Monitor %dx%d - %dx%d (%dx%d) \n"
    " Work %dx%d - %dx%d (%dx%d) \n"
    , CStringA(mi.szDevice)
    , (mi.dwFlags == MONITORINFOF_PRIMARY)? "Primary": ""
    , mi.rcMonitor.left, mi.rcMonitor.top
    , mi.rcMonitor.right, mi.rcMonitor.bottom
    , abs(mi.rcMonitor.right - mi.rcMonitor.left)
    , abs(mi.rcMonitor.bottom - mi.rcMonitor.top)
    , mi.rcWork.left, mi.rcWork.top
    , mi.rcWork.right, mi.rcWork.bottom
    , abs(mi.rcWork.right - mi.rcWork.left)
    , abs(mi.rcWork.bottom - mi.rcWork.top)
    );

    CRect rcMon = CRect( pRect );
    pVRcMon->push_back( rcMon );

    return TRUE;
    }

    Output:
    Monitor Info (\.\DISPLAY1)(Primary)
    Monitor 0x0 - 2560x1440 (2560x1440)
    Work 0x0 - 2560x1400 (2560x1400)
    Monitor Info (\.\DISPLAY2)()
    Monitor 2560x416 - 3840x1440 (1280x1024)
    Work 2560x416 - 3840x1440 (1280x1024)
    Monitor #0, 0x0 - 2560x1440 (2560x1440)
    Monitor #1, 2560x416 - 3840x1440 (1280x1024)




    EnumDisplayMonitors function on MSD

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

    2013/04/07

    OpenCV 2.4.5

    OpenCV 2.4.5 버전이 올라왔다.


    아직 홈페이지에는 정식 공지가 올라오지 않았지만 SourceForge에는 2.4.5 버전이 윈도우즈와 안드로이드를 비롯한 여러 플랫폼을 지원하는 파일이 등록이되었다.

    로드맵 상으로 2.4 버전의 마지막 버전이라고 알고 있는데 마지막 일지는 모르겠다.


    바뀐점을 찾아 보려 했지만 보이지 않았다. 공지가 올라와야 알 수 있을 것 같다.


    OpenCV on SourceForg

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

    OpenCV 디버깅을 위한 Visual Studio Plugins

    OpenCV를 하면서 가장 불편한 것 중 하나는 IplImage 변수 내용을 확인할 수 없어 매번 파일로 저장을 하여 그 내용을 확인했었는데 오늘 우연히 Visual Studio Plugin 을 알게 되었다.


    이 Plugin 은 메모리 상태의 OpenCV 변수(cv::Mat, CvMat, IplImage)의 내용을 확인할 수 있다.


    아쉬움 점 이라면 이 Plugin 이 지원하는 Visual Studio 의 버전이 Visual Studio 2012 Professional 에 Update 1 이상을 요구한다.


    Image Watch: viewing in-memory images in the Visual Studio debugge

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

    키보드 상태 확인하기


    키보드 상태를 확인하는 API함수는 GetAsyncKeyState() 함수와 GetKeyState() 함수가 있다.

    두 함수의 차이는 메시지큐를 거치냐의 여부 이다.

    GetAsyncKeyState() 함수는 메시지큐를 거치지 않고 지금 키가 눌렸는지 확인 하고 GetKeyState() 함수는 메시지 큐를 거쳐서 키보드의 상태를 확인하는 함수 이다. 키보드 메시지 처리 후 키보드 상태를 확인하고자 할 경우는 GetKeyState() 즉각적인 키보드 상태를 확인하고자 할 경우 GetAsyncKeyState()를 사용하는 것이 좋다.




    함수의 결과는 키가 눌려지지 않은 상태일 경우 0x0000을 반환하며 0x8000은 현재 키가 눌려진 상태를 의미하며 0x0001은 이전 호출과 이전 호출 사이에 키가 눌려진 적이 있는지 여부 이다.


    GetKeyState on MSDN

    GetAsyncKeyState on MSDN <

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

    2013/01/30

    SQLite Memory DB 속도 테스트

    SQLite 를 이용하여 데이터를 저장하는데 속도 문제가 고민이 되어 Memory DB를 테스트 해 보았다.



    SQLite 를 이용하여 10만개 레코드를 Insert하고 Update 해 보았다.



    테스트를 한 시스템은 Intel Core2Quad CPU Q9550 2.83GHz 이다.



    결과는 Update는 차이가 없었지만 Memory DB가 SSD에 비해 15배, HDD에 비해 19배 빠른 결과가 나왔다. 
     

    MemoryDB 

    MemoryDB Insert: 276.685ms

    MemoryDB Update: 4.503ms




    SSD

    SDD 100000 Insert: 4268.289ms

    SDD 100000 Update: 4.685ms




    HDD

    HDD 100000 Insert: 5302.730ms

    HDD 100000 Update: 5.745ms



    Memory DB를  활용하면 좀 더 빠르게 데이터를 저장할 수 있을 것 같다.



    Memory DB에 올려진 데이터는 백업 함수를 이용하면 쉽고 빠르게 파일로 저장할 수 있다.



    Memory DB와 File DB를 연 상태에서 아래 코드를 수행하면 된다. 

    sqlite3_backup* pBackup = NULL;
    watch.Begin();
    pBackup = sqlite3_backup_init( pFileDB, "main", pMemDB, "main" );
    if ( pBackup )
    {
    sqlite3_backup_step( pBackup, -1 );
    sqlite3_backup_finish( pBackup );
    }


    <

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

    2013/01/10

    C++ 함수 포인터

    함수 포인터를 알고는 있었지만 실제 응용을 하려다 보니 막히는 사항이 있어 다시 공부를 좀 하고 정리를 하였다.



    함수 포인터를 함수를 가리키는 포인터로 아래와 같은 형식으로 선언한다.

    반환형 (*함수포인터이름)(매개변수)



    포인터 이름은 C++의 경우 객체의 멤버일 경우 객체까지 선언한다

    반환형 (클래스::*함수포인터이름)(매개변수)

    // C
    int (*ptFunc)(int, int) = NULL;

    typedef int (*ptFuncDef)(int, int);
    ptFuncDef ptFunc2;


    // C++
    int (MyClass::*ptMemberFunc)(int, int);
    int (MyClass::*ptMemberConstFunc)(int, int) const;

    typedef int (MyClass::*ptMemberFuncDef)(int, int);
    ptMemberFuncDef ptMemberFunc2;



    이렇게 선언된 함수 포인터에 실제 함수의 주소를 할당하여 사용할 수 있다.

    // C
    int foo(int a, int b) { return a + b; }

    ptFunc = foo;
    ptFunc = &foo;
    ptFunc2 = &foo;

    // C++
    class MyClass
    {
    :
    public:
    int foo(int a, int b) { return a + b; };
    int fooConst(int a, int b) const { return a + b; };
    }

    ptMemberFunc = &MyClass::foo;
    ptMemberFunc2 = &MyClass::foo;
    ptMemberConstFunc = &MyClass::fooConst;



    이러한 함수 포인터는 일반 포인터 변수와 마찬가지로 비교 연산이 가능하다.

    그리고 이 함수 포인터에 할당되어 있는 함수를 호출하는 방법은 C형식의 경우 기존 함수 호출방법과 같지만 C++의 경우 객체 생성 방법에 따라 약간 다르다.

    // C
    int result;
    result = ptFunc(1, 2);
    result = (*ptFunc)(1, 2);

    // C++
    MyClass Class;
    result = (Class.*ptMemberFunc)(1, 2);
    result = (*this.*ptMemberFunc)(1, 2);
    result = (this->*ptMemberFunc)(1, 2);

    MyClass pClass = new MyClass;
    result = (pClass->*ptMemberFunc)(1, 2);



    함수 포인터를 특정 함수의 매개변수로 넘기는 방법은 파라메터 입력 부분에 함수 포인터 선언을 해주면 되며 함수내 에서는 포인터 이름으로 해당 함수를 사용할 수있다.


    // 함수 포인터를 첫 번째 매개변수로 받는 함수
    void RunFuncPtr( int (*ptFunc)(int, int), int a, int b)
    {
    int result = (*ptFunc)(a, b);
    }

    //함수 포인터를 매개변수로 받는 함수의 사용 방법
    RunFuncPtr( &foo, 1, 2 );



    함수 포인터는 또한 특정 함수의 반환 값으로 사용될 수 있다.

    아래는 함수 포인터를 반환하는 함수의 선언이다.

    int (*getFuncPtr(int a, int b))(int c, int d)
    {
    :
    return &FuncPtr;
    }

    typedef int (*ptFuncDef)(int, int);
    ptFuncDef getFuncPtr2(int c, int d)
    {
    :
    return &FuncPtr;
    }



    이 함수 포인터는 배열이나 STL의 컨테이너에도 응용하여 사용할 수 있다.<

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

    2013/01/01

    IntelliJ IDEA 에 Son of Obsidian Color Scheme 적용하기



    개인적으로 Son of Obsidian 이라는 문법 강조 색을 좋아한다. 그래서 어느 개발 툴이던지 Son of Obsidian을 적용하여 사용하고 있는데 이번에 테스트 한 IntelliJ에도 Son of Obsidian를 적용 가능한지 찾아 보았는다. 잘 알려진 Color Scheme이라서인지 어렵지 않게 찾을 수 있었다.


    http://www.aremaitchconsulting.com/2011/02/color-schemes-for-intellij-idea/

    위 웹사이트를 접속하면 방법을 찾을 수 있다.

    작성자가 이미 Son of Obsidian을 IntelliJ에 적용할 수 있도록 설정파일을 만들어 공개하였다. 위 사이트에서 SonOfObsidian.zip파일을 다운 받아서 IntelliJ 의 Color을 설정 경로에 풀어 놓고 IntelliJ를 기동하여 Son Of Obsidian 를 선택만 하면 된다.

    IntelliJ 의 색상 설정 경로는 %USERPROFILE%\.IdeaIC12\config\colors 이다. 계정이 IntelliJ 일 경우 운영체제가 C드라이브에 설치된 경우 C:\Users\IntelliJ\.IdeaIC12\config\colors 이다.




    <

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

    IntelliJ IDEA 12로 안드로이드 개발하기 - Hello Android

    2013/01/01 - [Dev Story] - IntelliJ IDEA SDK 설정하기


    IntelliJ 를 사용하게된 이유가 안정정이고 빠른 Java 개발 IDE로 알려졌기 때문이기도 하지만 Android 개발을 지원한다는 것이 더 큰 이유이다.


    다행스럽게도 JetBrains에서 제공하는 IntelliJ 의 두 버전(Ultimate Edition, Community Edition) 모두 안드로이드 개발을 지원한다.


    언어를 처음 접할 때 실습하는 Hello World 유사하게 Hello Android 를 작성하여 보았다.


    우선 IntelliJ 시작하여 "Create New Project"메뉴를 선택한다.



    "New Project" 메뉴에서 프로젝트의 이름과 경로를 설정하고 프로젝트에 사용 될 Android SDK 버전을 설정한 후 다음 단계로 넘어간다.



    Package 이름과 Activity를 설정하고 대상 장치를 설정한다. 설정 후 완료 버튼을 누른다.



    아래 화면은 설정을 마치고 난 후의 IntelliJ의 프로젝트 화면으로 필요한 파일들이 생성된 모습니다.



    아무런 수정 없이 메인 메뉴의 시작 버튼을 눌러 프로그램을 시작해 보았다.



    프로그램을 시작하면 설정된 Emulator가 시작되지 않았을 경우 이를 실행하고 프로그램을 동작 시킨다.

    아래 화면은 프로그램이 실행된 Emulator의 화면이다.



    프로그램 작성은 Eclipse 크게 다르지 않으면 누구나 쉽게 할 수 있는 것 같다. 하지만 안드로이드 개발에 있어 Eclipse 보다 빠르고 안정적인지 보다 다양한 기능을 제공하는지는 좀 더 사용을 해 봐야 알 수 있을

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

    IntelliJ IDEA SDK 설정하기



    Java를 사용하는 경우는 안드로이드 공부를 할 때 밖에는 없지만 eclipse가 많이 느려서 빠르고 안정적인 Java 개발환경이라고 하는 IntelliJ 는 어떤 환경일지 궁금해서  설치를 해 보았다.



    IntelliJ는 무료로 사용할 수 있는 Community Edition과 비용을 지불해야하는 Ultimate Edition으로 나뉘어 있으며 두 버전 모두 홈페이지에서 다운로드 받을 수 있다. 현재 최신 버전은 v12 이다.



    개인적으로 설치형 프로그램을 그리 좋아 하지 않아 이번에도 가상 PC에 설치한 후 설치된 파일을 호스트 PC로 옮겨서 사용을 하였다.



    처음 기동후 프로젝트를 만들어도 정상적인 프로젝트가 만들어지지 않았다. SDK설정이 되어있지 않아서 발생한 문제로 보였다. 기동후 SDK를 설정한 후 프로젝트를 생성하면 문제가 없었다



    IntelliJ를 처음 기동할 때 설정할 수 있고 나중에도 설정이 가능하다. 아래 방법은 IntelliJ를 처음 기동할 때 설정하는 방법이다.



    IntelliJ 처음 기동하는 화면에서 Configure 메뉴의 Project Default 하위 메뉴의 Project Structure 메뉴를 선택한다.





    Project Structure 대화상자에서 좌측 메뉴의 Project를 선택하고 Project SDK 항목의 New... 버튼을 클릭하여 JDK메뉴를 선택하고 시스템에 설치되어 있는 JDK 경로를 설정한다.





    안드로이드 개발을 위해서 같은 방법으로 Android SDK 경로를 설정하고 원하는 플랫폼 버전을 선택한다.



     

    이제 IntelliJ 를 실행하면 설정된 SDK를 기반으로 프로젝트를 생성하게 된다.&

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