Visual Studio 계열은 C++ 표준인 std::string 보다는 CString을 더 많이 사용한다. 그런데, VC6의 CString::Replace()는 뭔가 문제가 있었던 것 같다. VC6에서 Unicode 프로젝트를 돌리며 여러번 확인했었는데, Replace()는 문자열 치환을 한 번만 수행했다. 즉, CString cs = _T("Hello World !"); cs.Replace(_T(" "), _T(" dirty ")); MessageBox(cs); 를 실행하면 Hello dirty World ! 가 출력되었다. 도움말을 찾아보지도 않고 그러려니하고 써왔었는데, 우연한 기회에 VS2013에서 테스트해보니 정상적으로 동작했다. 속으로 '아… MS가 이런 변화를 별도로 공지하지 않았나…' ..
iTrans나 Any to MP3 등은 내부적으로 배치파일을 만들어 돌린 결과를 리다이렉트해서 화면에 출력하도록 만들었다.배치파일은 오로지 ANSI 포맷으로만 만들 수 있었기때문에 8.3 이름을 추출해서 배치파일을 생성한다. 그런데, 알고 보니 그 제약은 XP까지만 존재했고, 비스타 이후는 UTF-8 포맷의 배치파일도 인식하도록 수정되었다.무려 8년이나 지난 얘기를 이제야 알았다니… 그래서 두 프로그램 모두 이 내용을 반영해서 수정 중이다.이제 윈도우 비스타 이상에서는 어떠한 파일명의 미디어 파일라도 정상적으로 처리가 가능한 거시다!!
한 집안에 있는 카메라가 끽해야 두어대이던 시절이 있었다. 수학여행 간다고 아버지가 애지중지하시던 카메라를 빌려갔던 기억도 난다. 그런데, 요즘은 디지털카메라가 넘쳐난다. 우리 집만 해도 디카와 폰카를 다 합치니 여섯 대가 나온다. 난 사진을 날짜/시간순으로 정렬하고 폴더에 정리하는데, 디카가 여러대인데다 사진 장수도 많아 쉽지가 않다. 더군다나, 디카마다 시간이 미묘하게 다른데, 이게 가끔 신경이 쓰인다. 1. 동영상 변환 아이폰/아이패드 처럼 동영상을 mp4/H.264로 깔끔하게 떠주는 디카는 아직도 많지 않다. 여전히 AVI/mjpeg의 커다란 파일로 만들어주는 경우가 더 많다. 화질에 대비해 파일의 크기가 너무 크다… 그래서, iDevice용 동영상 변환기 iTrans v10.3a를 사용한다. 변..
VS2012에서 구버전 VS의 프로젝트를 사용할 때 가끔 다음과 같은 메시지를 만날 수 있다. warning C4005: '__useHeader' : macro redefinition warning C4005: '__on_failure' : macro redefinition 이 문제는 VC11의 헤더와 SDK 7.1a의 헤더가 달라서 발생하는 것이라고 한다. .rc 파일 맨 앞부분에 다음 내용을 추가하면 이 메시지를 볼 일이 없다. #define _USING_V110_SDK71_ 1 참고 사이트: stackoverflow
지난 3월 5일 모질라에서는 mozjpeg라는 프로젝트를 발표했다. 이것은 기존 JPEG의 규격을 그대로 유지하면서 JPEG 압축률을 대폭 향상시키는 프로젝트다. 즉, 구글 WebP의 커다란 걸림돌이 나타난 것이다. 이번에 발표된 1.0을 직접 컴파일해보니 VS에서는 약간의 오류 수정이 필요했다. 제대로 동작하게 하려면 두 개의 파일을 수정해야 한다. 1. CMakeLists.txt 488행은 다음과 같다. SOURCES libjpeg-turbo.nsi) 이것을 아래와 같이 수정해야 한다. SOURCES libmozjpeg.nsi) 2. jcparam.c 741행부터는 다음과 같다. GLOBAL(void) jpeg_simple_progression (j_compress_ptr cinfo) { if (ci..
Static duration means that the object or variable is allocated when the program starts and is deallocated when the program ends.- MSDN iTrans 버그 리포트 중에 아주 이상한 내용을 하나 들었다.같은 자막을 두 번 변환하면 가 추가된다는 것… 제보해주신 분들과 연락을 해보니 static으로 선언한 어떤 부분의 데이터가 깨지는 게 원인이었다. bool CSami2Srt::convISO88591(LPCTSTR lp, TCHAR &tc, int &len){ static LPCTSTR lpEntityNames[] = { _T("quot"), _T("apos"), _T("amp"), _T("lt"), _T..
어플이 실행되는 OS의 버전을 인식하게 하려면 GetVersionEx() 함수를 쓰면 되었다. 그런데, Windows 8.1에서는 여러가지 이유로 이 함수를 deprecate 시켰다. 대신 VersionHelpers라는 API를 통해 훨씬 간단하게 OS 버전을 확인하도록 만들었다. 그럼에도 불구하고, 굳이 GetVersionEx()로 버전을 정확히 인식하려면 매니페스트에 몇 줄을 추가하면 된다. 위와 같은 파일을 하나 만들어 적절한 위치에 저장한 뒤에 이를 추가 매니페스트로 지정하면 끝임. 덧. 원래 iTrans의 문제를 해결하려고 시작했지만, 정작 OS 정보는 레지스트리에서 직접 읽었다는 게 함정
Visual Studio 2010/2012에선 도구상자가 분실(?)되는 사건이 종종 발생한다. 이 문제를 해결하려면 다음 순서를 따르면 된다. 1. 도구 상자 다시 설정 - 도구 상자에서 오른쪽 클릭을 한 뒤 도구 상자 다시 설정(E)를 클릭한다. 2. Visual Studio 종료 3. 탐색기에서 다음 위치로 이동해 .TBD 파일들을 삭제 [사용자 폴더]\AppData\Local\Microsoft\VisualStudio\[VS버전] 4. 레지스트리 편집기에서 다음 키들의 내용을 삭제 HKCU\Software\Microsoft\VisualStudio\[VS버전]\ToolboxControlsInstaller_AssemblyFoldersExCacheHKCU\Software\Microsoft\VisualStu..
Visual C++에서 개발하다 보면 리소스 ID가 종종 꼬이는 문제가 생긴다.리소스 ID를 수작업으로 정리하며 이런 툴을 하나 만들어볼까 했는데… 아니나 다를까 이미 있었다. Riverblade에서는 Code Project에는 VC 5.0/6.0/.Net 용을 2001년에 공개했고…이후, 이를 ResOrg라는 이름으로 업그레이드해서 상용 버전으로 공개했다. 상용 버전은 플러그인 형태로 VS2012에도 적용할 수 있고, 공개 버전 역시 VS2012에서 사용 가능하다.
난 여전히 VC++ 6.0을 사용해왔다. 컴파일된 실행파일을 어떤 윈도우(물론 2K 이상)에서도 실행할 수 있다는 점이 가장 큰 이유다. 물론, 정적 라이브러리에서 MFC 사용으로 설정하면 되지만, 실행파일의 크기가 너무 커진다. 그런데, 이제 보니 컴파일러 설정 등을 조금만 손대면 VS2005 이상에서도 유사한 결과를 만들 수 있었다. 우선, targetver.h을 수정한다. XP에서 동작하는 프로그램을 원하면 이 정도면 된다. #pragma once #include #define _WIN32_WINNT _WIN32_WINNT_WINXP #include 그리고, 프로젝트 속성에서 다음 부분을 손대면 된다. - 일반 → MFC 사용: 표준 Windows 라이브러리 사용 - C/C++ → 코드 생성 → 런..
그동안 10년 넘게 생사고락을 함께한 Visual C++ 6.0을 버리기로 했다. 새로운 파트너는 Visual Studio 2010. 그런데, VS2010은 그냥 쓰기엔 뭔가 살짝 아쉬워서 몇 가지를 준비해야 했다. 1. 인텔리센스 끄기 뭔가를 많이 도와준다는데, 너무 느리다. 마치 허접한 컴퓨터의 보안을 도와주기 위해 설치한 nProtect와 키보드 보안 프로그램의 느낌. 인텔리센스를 끄려면 메뉴에서 Tools → Options → Text Editor → C++ → Advanced를 찾아가서… Disable Database와 Disable IntelliSense를 False로 설정한다. ※ 이렇게 인텔리센스를 끄면 리소스뷰와 클래스뷰가 제대로 나오지 않는 치명적 버그가 있음. ㄷㄷㄷ 2. 빌드 넘버 ..
우리집 네트워크 구성은 ipTIME이 주력이다. 얼마 전 가짜 안테나에 대한 얘기도 있긴 했지만, 어쨌거나 전체적으로 신뢰성 있는 건 사실이고. 중심에는 2.4GHz/5Ghz를 모두 지원하는 N904가 있고, 무선 랜 어댑터도 ipTime 제품들이다. 라즈베리 파이를 구성하는 과정에서 구매한 NCUBIC부터… 300Mbps를 지원하는 N600UA까지… 그런데… 이렇게 구성하고 쓰다보니, 어느 순간엔가 데이터가 계속 깨진다는 사실을 알게 됐다. 처음엔 잠깐 발생한 일시적 현상이라 생각했는데, 시간이 지나도 계속 반복적으로 벌어졌다. 문제의 원인을 찾기 위해 오류를 계속 확인할 수 있는 시나리오를 찾기로 했다. 몇 번의 시행착오를 거친 결과 한컴샵에서 이지포토3을 다운받는 게 제일 적절하다는 걸 확인했다. ..
2012/08/12 - [IT/잡담] - 이상한 한/글(한컴)의 데이터 구조 #12012/08/12 - [IT/잡담] - 이상한 한/글(한컴)의 데이터 구조 #2 9개월 전 쯤 아래아한글(이하 한/글)의 데이터 구조에 대한 불만을 포스팅했다.불만은 두 가지였는데, 압축을 이상하게 한다는 점과 굳이 BMP 이미지를 zlib으로 압축한다는 점이었다. 이후, 한컴에 문의한 결과 첫번째 불만에 대해서는 제대로 된 답변을 들었다. zlib로 압축을 풀 때(inflate 할 때) inflateInit()가 아니라, inflateInit2()로 초기화를 해야 된다는 것이다.이를 적용해보니 압축이 잘 풀렸다.덕분에 압축 푸는 부분이 복잡했는데, 단순하고 깔끔하게 정리할 수 있었다. 덧. 한컴에선 두 번째 질문을 아마도..
매년 구글은 만우절만 되면 쓸고퀄의 극치인 장난을 많이 친다.특히, 구글 맵스는 주 타겟이다. (2012년은 8비트 버전의 구글 맵스를 보여줬음) 보물 찾기 모드는 당연히 첫 화면부터 다르다. 보물만 찾으면 될 것 같다. ㄷㄷㄷ 서울로 가보면 아주 난리도 아니다.국회의사당에서는 태권 브이가 튀어나오고 강남에선 싸이가 말춤을 추고 있다. 창원시 진해구 모 장소를 찍어보니 아래와 같다.평범한 곳인데 뭔가 모험심 돋는다. 이제 해외로 눈을 돌려봤다.우선 벡스 맥주의 고향 브레멘. 화면 한 가운데가 벡스 본사다. 파리로 가보면 정말로 보물지도 돋는다.에펠탑, 루브르는 물론이고 샹젤리제 거리도 뭔가 달라보인다. 지난 포스팅에서도 다뤘던 [골든아이] 오프닝에서 007이 번지점프를 했던 스위스 베르차스카(Verzas..
하드 디스크 하나가 맛이 살짝 갔다.문제는 그게 C 드라이브였다는 것. 이거 다 포맷하고 윈도우 새로 깔고… 하려니 엄두가 안 나서 약간의 꼼수를 사용해서 복원했다.맛이 간 드라이브의 내용을 멀쩡한 드라이브로 옮긴 뒤 맛이 간 것을 제거하는 쪽으로. 작업 과정은 대략 아래와 같았다.(설치 OS는 Windows 7임) 1. 드라이브 복제 EaseUS Partition Master Home Edition은 개인 사용자에겐 무료다.이 툴을 이용해서 C 드라이브의 내용을 다른 드라이브에 복제한다.이 때 Logical Partition으로 설정하지 않도록만 유의하면 된다.Primary Partition에서만 부팅이 가능하다. 2. 새 부트 드라이브에 부트로더 설치 드라이브를 복제했지만, 그 드라이브로는 부팅을 할..
근 5년만에 그동안 써오던 Q6600+DDR2 6GB를 업그레이드 했다.Q6600은 당시 쿼드코어 출시시기 경쟁에서 밀린 인텔이 조급하게 만든 듀얼x2 구조의 CPU였다.비록 순수한 쿼드는 아니었으나, 엄청난 가성비를 자랑하며 근 5년 정도 잘 써왔다. 이제 쿼드코어 CPU를 적절한 가격에 쉽게 구할 수 있기도 하고, 메모리 역시 저렴해서 업그레이드하기로 했다. - CPU: AMD A8 3870K Black Edition (쿼드코어)- M/B: Gigabyte A75M-S2V- Mem: AMD DDR3 4GB PC3-12800 (2EA) 언제나 핵심은 CPU… 대략 이렇게 생겼다.오랜만에, 아마도 근 10년만에 써보는 AMD인 것 같다. 받은 3가지만 조립한 결과는 이렇다.AMD 메모리가 은근히 눈에 띈..
이전글에서 계속 2. 그런다고 압축을 제대로 하지도 않음 아래 보이는 그림을 보자. 한/글에서 추출한, 압축된 BMP의 압축을 풀었다 다시 압축한 결과이다. 압축된 원본의 크기는 96KB이고, 압축을 풀자 1,148KB의 BMP가 나왔다.이를 JPEG로 변환(Q=95)하자 88KB가 되었다.즉, JPEG로 변환하자 8% 정도 크기가 줄어든 것이다. 그런데, 웃긴 것은 1,148KB의 BMP를 zlib로 다시 압축하자 59KB가 되었다는 것이다.(level은 기본값인 Z_DEFAULT_COMPRESSION 적용) 대체 압축 라이브러리를 어떻게 적용한 것인지 모르겠다. 한/글의 이미지 처리는 커다란 개선의 여지가 있다.무엇보다 포함된 이미지가 BMP인 경우 PNG로 자동변환해주는 기능이 필요하다.옵션으로 (..
2012/08/11 - 한/글(한컴) 파일의 크기를 줄여주는 프로그램 HIS 공개 2010년 6월 한글과 컴퓨터는 한/글의 파일 포맷을 공개했다. 한글과컴퓨터는 한/글 문서의 바이너리 파일(.Hwp) 형식 공개 계획을 밝힌 바 있으며 이를 차질 없이 진행하였으며 Hwp의 XML 포맷인 HwpML의 국가표준(KS)화도 현재 진행되고 있습니다. 그런데, 막상 공개를 하고 나니 많은 프로그래머들이 포맷 공개에 대해 비판했다.공개된 포맷만으로는 아무런 프로그램도 만들 수 없다는 내용이 주였다. 수년의 세월을 걸쳐 개발한 것을 기껏 공개했더니 반응이 그런 식이라니… 1. 압축 파일의 이유 모를 왜곡 그런데, 이전 포스팅을 작성하기 위해 HwpML(이하 HML)의 자료를 분석하다보니 이상한 점이 발견되었다.압축을 ..
무려 3개월이나 지난 얘기지만, PC를 뒤지다가 발견한 재미있는 구글의 만우절 장난 캡쳐… 지난 만우절에 구글은 8비트 NES 환경에서 돌아가는(?) 구글 맵스를 공개했다. 이 때 캡쳐해놓았던 화면이 있었는데, 이제야 포스팅… 우선은 울 처가 근처… 다음은 유럽과 아시아를 연결하는 터키의 보스포러스 및 다르다넬스 해협… 그 다음은 그 유명한 영국의 템즈 강 주변… 여기는 [골든아이] 오프닝에서 007이 번지점프를 했던 러시아스위스 베르차스카(Verzasca) 댐… 마지막으로 독일, 프랑스, 스위스, 이탈리아 전체… 좌우지간, 지도는 구글이 킹왕짱인 거다…