개발 49

Adobe Alchemy 컴파일 환경 설정하기

Adobe Alchemy는 C/C++ 코드를 컴파일해서 ActionScript Virtual Machine(AVM2)에서 사용하게 해주는 툴로 기존 C/C++ 라이브러리를 Adobe Flash나 Adobe AIR에서 사용할 수 있도록 해준다. Windows에서 컴파일 환경 설정 방법이 간단하지 않아 정리해보았다. Cygwin을 다운로드하고 설치한다. http://cygwin.com/install.html Cygwin setup.exe를 실행한다. Select packages에서 perl, zip, gcc-g++, [gdb, make]를 선택한다. Cygwin 설치를 완료한다. JAVA를 설치한다. http://www.oracle.com/technetwork/java/javase/downloads/inde..

개발 2012.05.03

Qt 네트워크 프로그래밍 팁

Qt로 네트워크 프로그래밍을 할 때 주의하거나 참고할 만한 팁들을 정리해보았다. Qt 4.7.0 버전 대상이라 다른 버전에서는 조금 다를 수도 있다. Http를 위해 사용하는 QNetworkAccessManager에서 Persistent Cookie를 지원하지 않는다. QNetworkCookieJar를 상속해서 별도로 구현해야 한다. 아래 툴 소스에서 구현 예제를 찾을 수 있다.(PersistentCookieJar)qt/tools/qml/qmlruntime.cpp 바로가기 파일(.lnk)가 심볼릭 링크로 처리된다. QFileInfo::isDir(), QFileInfo::exists() 등의 함수가 바로가기 파일이 아니라 대상 파일의 속성이 나오니 주의해야 한다. Signal, slot 연결 시 멀티스레드..

개발 2011.06.11

AIR 네이티브 인스톨러 사일런트 설치

air application을 프로젝트의 일부로 사용하거나 별도의 설치파일로 설치할 필요가 있을 경우 아래의 방법으로 설치할 수 있습니다. 먼저 release할 때 native installer로 export하거나 .air 파일을 .exe로 변환합니다. adt -package -target native installer_file air_file 사일런트 모드로 설치합니다. installer_file -silent -location "\"설치경로\"" -allowDownload 실제 설치 위치는 설치경로 하위에 프로그램 디렉토리가 하나 만들어지고 그 위치에 설치됩니다. 설치 시점에서 실제 설치 위치(설치경로\프로그램 디렉토리)는 존재하지 않아야 합니다. 설치경로에 공백 문자가 있다면 반드시 앞 뒤에 \"을..

개발 2010.11.29

Adobe AIR 2의 새로운 기능

네이티브 프로세스 네이티브 프로세스를 실행하고 통신할 수 있도록 해준다. 통신은 표준입출력과 에러출력을 통해서 한다. flash.desktop.NativeProcess flash.desktop.NativeProcessStartupInfo flash.events.NativeProcessExitEvent 기본 연결 프로그램으로 파일 열기 기본 연결로 등록된 파일을 열 수 있다. flash.filesystem.File.openWithDefaultApplication() 향상된 드래그 앤 드롭 특정 URL을 로컬 파일 처럼 로컬 머신으로 드래그 아웃할 수 있도록 해준다. air.desktop.URLFilePromise 로컬 마이크 입력 서버 지원 없이 로컬 마이크 입력 오디오를 기록할 수 있다. flash.me..

개발 2010.07.08

goto 대신에 do { ... } while (false)를 사용한 에러처리

C/C++ 코딩을 하다보면 흔히 아래와 같은 에러처리 코드를 만나게 된다. ... if (!condition1) goto cleanup; ... if (!condition2) goto cleanup; ... if (!condition3) goto cleanup; ... if (!condition4) goto cleanup; ... cleanup: // 메모리 해제등의 정리 작업 고급 언어에서는 goto를 사용하지 말라고 많이 하고 실제 goto의 사용이 스파게티 코드를 만드는 경우가 많기 때문에 사용하지 않는 것이 좋지만 C/C++에서는 finally를 지원하지 않기 때문에 위와 같은 코드는 묵인해주는 경우가 많다. 그래도 goto를 피하고 싶기 때문에 아래처럼 하기도 한다. ... if (!condit..

개발 2010.03.25

Windows Phone 7 SDK 공개

마이크로소프트가 MIX10에서 Windows Phone 7 SDK를 공개했습니다. 설치해서 잠깐 사용해봤는데 쉽게 Windows Phone 7 애플리케이션을 만들 수 있도록 되어 있습니다. Windows 7에서만 설치할 수 있고 아래 URL에서 다운로드할 수 있습니다. http://developer.windowsphone.com/ http://go.microsoft.com/?linkid=9713250 http://www.microsoft.com/downloads/details.aspx?FamilyID=2338b5d1-79d8-46af-b828-380b0f854203&displaylang=en 아직 CTP 버전이긴 하지만 기본적인 Windows Phone 7의 모습을 살펴 볼 수 있었고 예상대로 C# 기반..

개발 2010.03.19

Flex Image에서 리사이즈 화질 문제

Flex에서 이미지를 리사이징해서 보여 주는 경우 부드럽게 안 나오고 깨져 보이는 현상이 있다. 해결 방법을 찾아보니 의외로 그렇게 간단하지 않았다. 1. BlurFilter를 이용해 적당히 블러를 준다. 2. Image content(Bitmap)의 smoothing Property를 true로 변경한다. 3. 별도의 인터폴레이션 알고리즘을 구현하거나 구현한 라이브러리를 사용한다. 위의 이미지가 왼쪽부터 각각 그냥 이미지를 리사이징한 경우, BlurFilter를 사용한 경우, smoothing Property를 사용한 경우이다. 3번은 알고리즘을 구현하거나 라이브러리를 사용하는 것은 꼭 필요한 경우가 아니라면 별로 사용하고 싶지 않아서 테스트해보지 않았다. 1번 BlurFilter를 사용하는 경우 어떤..

개발 2009.05.20

Flex Builder로 AIR 어플리케이션 만들기

AIR 도움말에 있는 Flex Builder로 간단한 Hello World를 만드는 예제를 직접 따라해봤다. Flex Builder를 실행해 AIR 프로젝트 만들기 1. Flex Builder 3를 실행한다. 2. 메뉴에서 File > New > Flex Project를 선택한다. 3. Project name을 AIRHelloWorld로 입력한다. 4. Application type을 Desktop Application으로 선택한다. 5. Finish를 눌러 완료한다. 코드 작성하기 1. WindowedApplication 컴포넌트의 title 속성을 "Hello World"로 입력한다. 2. Label 컴포넌트를 추가하고 text 속성을 "Hello AIR"로 설정하고 가운데 정렬로 배치한다. 3. 아..

개발 2009.05.14

IE 보호 모드에서 비보호 모드 프로세스 실행

UAC 환경(Windows Vista, Windows 7)의 IE7, IE8 보호모드에서 동작하는 ActiveX에서 실행 파일을 실행할 경우(브로커 프로세스) 비보호 모드로 열린다는 보안 경고창이 나온다. 이 문제를 해결하려면 아래와 같이 자동 권한 상승 정책을 레지스트리에 등록해주어야 한다. {347DAD60-9849-4921-89B6-16FA1B7936CC}는 임의의 GUID값이다. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Low Rights\ElevationPolicy\{347DAD60-9849-4921-89B6-16FA1B7936CC}] "AppName"="실행 파일명" "AppPath"="실행 파일 위치(디렉토리)" "Policy"=d..

개발 2009.05.13

Local PC의 IP 리스트 얻기

Local PC의 IP를 얻기 위해서 WinSock의 gethostbyname을 사용하는 경우 "localhost"를 파라미터로 주면 원하는 실제 IP가 아닌 127.0.0.1이 나온다. PC의 실제 IP를 얻으려면 실제 호스트 이름을 사용해야 하는데 아래와 같은 방법으로 가능하다. char hostname[512]; gethostname(hostname, 512); hostent* host = gethostbyname(hostname); 또는 "localhost"로 gethostbyname을 하면 실제 호스트이름을 알 수 있기 때문에 아래처럼 할 수도 있다. hostent* localhost = gethostbyname("localhost"); hostent* host = gethostbyname(lo..

개발 2009.04.24