Wednesday, November 7, 2012

Visual Studio 헤더/소스(.h, .cpp) 파일 이동

비주얼 스튜디오에서 소스 파일 이동을 위해 아래 방식으로 자주 사용해 왔다.

  1. 파일간 이동 (Ctrl+Tab, Ctrl+Shft+Tab)
  2. 헤더 파일과 소스 파일 이동 (Ctrl+Q 커스텀 키 매핑)
  3. 북마크 통해 이동 (Ctrl+F2, F2, Shift+F2)
  4. 찾기를 이용한 이동(Ctrl+F3 ..., Ctrl+D ...)


헤더 파일과 소스 파일 이동 기능은 VS에서 기본적으로 제공해주지 않으므로, 매크로 또는 애드인을 설치하여 Ctrl+Q 키맵핑후 사용하였다.

이렇게 키매핑하면 Ctrl+Tab 과 Ctrl+Q를 이용하여 파일간 이동이 매우 편해진다. Tab과 Q 키는 바로 옆에 있으므로 빠르게 누를 수 있기 때문에...

참고로 XCode에서는 헤더/소스 파일 이동 단축키를 지원하지만, 북마크 기능을 제공하지 않는다. VS에서는 북마크 기능을 지원하지만 헤더/소스 파일 이동 기능을 지원하지 않는다.

VS에서는 애드인으로, XCode에서 북마크 기능은 브레이크 포인트를 이용하여 대체하고 있다...

VS에 "Quick Launch(Ctrl+Q)"가 추가되었는데, 손이 많이 가고 느린 기능보다 헤더/소스 이동 기능을 추가해주기를 바래본다.

추가...
윈도우8 환경을 세팅하면서, 헤더/소스 이동 키매핑을 추가하기 위해 애드인을 찾아 VS 2012용으로 적절히 수정후 빌드를 하였으나 레지스트리 등록 과정에서 실패했다.
이전 기억이 떠올라 regsvr32 를 설정하여 디버깅을 시도했으나 실행조차 되지 않았다. depends.exe 를 찾기 위해 "시작"버튼을 찾으니 윈8이라 시작버튼도 없다.

시작버튼을 달아야겠다는 생각에 "Classic Shell"을 설치한 후(신기함...) VS 메뉴를 찾아보니 없다. VS설치 폴더로 이동하여 찾아도 발견할 수 없었다. 검색하니 VS패키지에서 빠졌단다. 인터넷 검색후 "http://www.dependencywalker.com/"에서 접속하려 했으나 연결되지 않는다. 결국 누군가 올려놓은 depends 설치 파일을 다운로드했다.

depends.exe 를 실행하니 "IESHIMS.DLL"이 없다고 한다. 구글링해도 별 도움되지 않는 말만 검색된다.

투덜거리다 생각난 것이 어드민 권한이였다. VS를 어드민권한으로 수행, 컴파일후 등록과정에서 레지스트리에 등록되었다. cmd도 동일하게 어드민권한으로 수해하면 등록할 수 있다.

이래저래 해결후 생각해보니 예전에 비스타 대응할 때 모두 경험했던 것들이다...

Sunday, November 4, 2012

Visual Studio 2012 에 WTL 설치하기


  1. WTL 다운로드 (http://wtl.svn.sourceforge.net/viewvc/wtl/trunk/) 및 적절한 위치에 복사.
  2. wtl\Wizards\AppWiz\setup110.js 실행(Express 버전은 setup110x.js)
  3. Include 설정

C:\Users\(사용자)\AppData\Local\Microsoft\MSBuild\v4.0\
Microsoft.Cpp.(Platform).user.props 파일을 아래 형태로 수정.


<propertygroup>
  <includepath>D:\workspace\library\wtl\include;$(IncludePath)</includepath>
</propertygroup>


주의 - XML 태그가 정확하게 닫혔는지 확인할 것.

http://msdn.microsoft.com/en-us/library/a4xbdz1e.aspx

Tuesday, July 3, 2012

iOS에서 google-api-objectivec-client 사용하기

이전 GData 대신하여 REST api를 제공하는 라이브러리입니다.

 http://code.google.com/p/google-api-objectivec-client


  1.  프로젝트 소스에서 svn을 이용하여 체크아웃합니다. 
  2.  GTL.xcodeproj 파일을 사용할 프로젝트로 드래그앤드롭합니다. 
  3.  기존 프로젝트 “build Phases” 에서 “Link Binary With Libraries”에 추가합니다. 
  4.  빌드를 수행하면 헤더파일이 XCode에 설정된 디렉토리에 생성됩니다. 
  5.  헤더 파일을 프로젝트에 추가합니다.
  6. “Other Linker Flags” 에 “-ObjC -all_load” 를 추가합니다.










Friday, April 6, 2012

블로거에 syntax highlight 붙이기

블로거에 문법 강조를 붙이기 위해서 아래 링크의 자바스크립트를 이용하기로 하였다.

http://alexgorbatchev.com/SyntaxHighlighter/

설치 및 사용방법은 간단하다.
아래 코드를 템플릿>>html 수정에서 </head> 태그 이전에 붙여넣는다.






그리고, 블로깅시 <pre> 태그를 이용하여 코드를 작성한다.
단점은 HTML Escape를 직접 해야한다.ㅡㅡ;;;
<pre class="brush:xml">
<link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css"></link>
<script type='text/javascript'>
  SyntaxHighlighter.config.bloggerMode = true;
  SyntaxHighlighter.all();
</script>
</pre>

Boost spirit 샘플 예제를 추가해본다.
/*=============================================================================
 Copyright (c) 2002-2010 Joel de Guzman
 
 Distributed under the Boost Software License, Version 1.0. (See accompanying
 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
///////////////////////////////////////////////////////////////////////////////
//
//  This sample demontrates a parser for a comma separated list of numbers.
//  No actions.
//
//  [ JDG May 10, 2002 ]    spirit1
//  [ JDG March 24, 2007 ]  spirit2
//
///////////////////////////////////////////////////////////////////////////////

#include <boost/config/warning_disable.hpp>
#include <boost/spirit/qi.hpp>

#include <iostream>
#include <string>
#include <vector>

namespace client
{
    namespace qi = boost::spirit::qi;
    namespace ascii = boost::spirit::ascii;
 
    ///////////////////////////////////////////////////////////////////////////
    //  Our number list parser
    ///////////////////////////////////////////////////////////////////////////
    //[tutorial_numlist1
    template <typename iterator>
    bool parse_numbers(Iterator first, Iterator last)
    {
        using qi::double_;
        using qi::phrase_parse;
        using ascii::space;
  
        bool r = phrase_parse(
         first,                          /*< start iterator >*/
         last,                           /*< end iterator >*/
         double_ >> *(',' >> double_),   /*< the parser >*/
         space                           /*< the skip-parser >*/
         );
        if (first != last) // fail if we did not get a full match
            return false;
        return r;
    }
    //]
}

////////////////////////////////////////////////////////////////////////////
//  Main program
////////////////////////////////////////////////////////////////////////////
int
main()
{
    std::cout << "/////////////////////////////////////////////////////////\n\n";
    std::cout << "\t\tA comma separated list parser for Spirit...\n\n";
    std::cout << "/////////////////////////////////////////////////////////\n\n";
 
    std::cout << "Give me a comma separated list of numbers.\n";
    std::cout << "Type [q or Q] to quit\n\n";
 
    std::string str;
    while (getline(std::cin, str))
    {
        if (str.empty() || str[0] == 'q' || str[0] == 'Q')
            break;
  
        if (client::parse_numbers(str.begin(), str.end()))
        {
            std::cout << "-------------------------\n";
            std::cout << "Parsing succeeded\n";
            std::cout << str << " Parses OK: " << std::endl;
        }
        else
        {
            std::cout << "-------------------------\n";
            std::cout << "Parsing failed\n";
            std::cout << "-------------------------\n";
        }
    }
 
    std::cout << "Bye... :-) \n\n";
    return 0;
}

Saturday, January 7, 2012

ruby plist

맥 개발에서는 plist를 자주 다루게 된다.

반복적이고 단순한 형태의 큰 데이트를 다룰 때,

게으른 프로그래머라면 스크립트를 이용할 것이다.

루비에서 plist를 다루는 방법은 아래와 같다.

http://plist.rubyforge.org/

sudo gem install plist

require 'rubygems'

require 'plist'

$KCODE = "u"

obj = [1, :two, {'c' => 0xd}]

puts obj.to_plist

bibles = [{'bookId'=>3,'title'=>'창세기','cover'=>'img_book_bs01.jpg'},

{'bookId'=>4,'title'=>'출애굽기','cover'=>'img_book_bs02.jpg'}]

puts bibles.to_plist

<?xml version=“1.0” encoding=“UTF-8”?>

<!DOCTYPE plist PUBLIC “-//Apple Computer//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>

<plist version=“1.0”>

<array>

        <integer>1</integer>

        <string>two</string>

        <dict>

                <key>c</key>

                <integer>13</integer>

        </dict>

</array>

</plist>

<?xml version=“1.0” encoding=“UTF-8”?>

<!DOCTYPE plist PUBLIC “-//Apple Computer//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>

<plist version=“1.0”>

<array>

        <dict>

                <key>bookId</key>

                <integer>3</integer>

                <key>cover</key>

                <string>img_book_bs01.jpg</string>

                <key>title</key>

                <string>창세기</string>

        </dict>

        <dict>

                <key>bookId</key>

                <integer>4</integer>

                <key>cover</key>

                <string>img_book_bs02.jpg</string>

                <key>title</key>

                <string>출애굽기</string>

        </dict>

</array>

</plist>