2010년 4월 23일 금요일

UAC, User Account Control

windows7 을 써보니 좀 성가신게 생겼네. program files 아래 writing 이 기본적으로 막혀있어서 자동업데이트나 로깅이나 등등을 기존과는 좀 다르게 해야 하더라. vista 때부터 이게 성가시단 소문은 들었는데 내가 윈도에서 코딩하게 될줄이야 그땐 몰랐지... 어쨋건 관련 글을 좀 찾아봤다.


내래 주로 cmake  를 쓰니까 이렇게 링커옵션을 추가해서 실행시 권한올리란 창이 뜨는것까지 확인해봤다.
[code]
# requireAdministrator
set_target_properties(main PROPERTIES LINK_FLAGS
  "/MANIFESTUAC:level='requireAdministrator'"
)
[/code]

물론 이거 존내 성가시니 가능하면 낮은 권한만으로 모든 작업이 해결되도록 해야겠지.
그렇다고 개인폴더에 설치를 해서 자동업데이트 하는건 다른 계정 유저에 문제가 있을테고..
vista 이후 스페셜폴더 들이 어떻게 변경/추가됐는지 함 찾아봐야 겠다.

2010년 4월 14일 수요일

플래폼 SDK? 윈도우 SDK?



내가 윈도코딩하던 시절은 그냥 플래폼 SDK 였는데 지금은 닷넷 SDK 와 함께  윈도 SDK 로 합쳐진 모양.
정확한 용어를 알고 사용해야겠지.

http://en.wikipedia.org/wiki/Microsoft_Windows_SDK

The difference between these three SDKs lies in their area of specialization: Platform SDK specializes in developing applications for Windows 2000, XP and Windows Server 2003. .NET Framework SDK is dedicated to developing applications for .NET Framework 1.1 and .NET Framework 2.0. Windows SDK is the successor of the two and supports developing applications for Windows XP, Windows Vista, Windows 7, Windows Server 2008, .NET Framework 3.0 and .NET Framework 3.5.[2]It contains extensive documentation and nearly 1000 samples.



분명 내기억에는 플래폼 SDK 이고 버전도 연도로 붙던것으로 기억하는데 최근들어 뒤져보니 WinSDK 7.0 뭐 이런식으로 불리고 있길래 궁금해서 찾아봤다.

windows 7 에어로 스냅인 어케 끄는겨?

WM_SIZING 받아 조절해서 일정 비율에 맞게 리사이징 되도록 했는데 이 빌어먹을 스냅인 이란 새 기능은 이걸 뛰어넘어서 리사이징을 해버리네. 여기저기 검색해도 유저입장에서 끄는 방법(제어판, 레지스트리등등)만 나오고..

열심히 msdn 을 뒤져서 아래 페이지를 찾았는데(고생했다. snapin 은 너무 일반적인 단어라 검색이 힘들고 레지스트리 수정방법에서 이런 기능을 윈도우 어래인징 이라고 부르는걸 알게되서 이걸로 검색해낸것)
SystemParametersInfo Function

SPI_SETWINARRANGING, SPI_SETSNAPSIZING 를 쓰면 뭔가 될거 같은데 저놈의 값을 아직 알수가 없네. 다음번 플래폼 SDK 가 나올때까지 일단 보류.


아 그리고 참고로.. 보통 에어로 기능이라고 하는것에 대해서는 DWM 으로 검색하면 된다.
Enable and Control DWM Composition 읽어보자

추가.
WinSDK 7.0 을 받는중... 이었는데 취소. 곧 7.1 이 나온다 하니 기다렸다가 해결해보자.

2010년 4월 4일 일요일

hash 벤치마크



재미난 벤치마크네.
적어둔다.
난 주로 boost 쪽의 unordered 들을 쓰는 편.

http://incise.org/hash-table-benchmarks.html
reddit

2010년 4월 1일 목요일

window 에서 emacs 와 cscope 사용을 위한 준비



전에도 위키등에 몇번 적었는데 이번에 새로 세팅을 하게되서 최소한의 절차만 적어둔다.
후에 내가 읽어보는게 목적.

  1. cscope 다운로드
    http://code.google.com/p/cscope-win32/
    이번에 다시 뒤져보니 win32 port 가 다시 진행되는듯? 이전엔 16.0 이던가 하는 이상한 버전으로 오랫동안 멈춰있어서 쓰기가 좀 거북했었는데.. 우왕굿.
  2. xcscope.el 세팅
    나야 emacs 설정들을 mercurial 로 관리하고 있고 리파지토리를 dropbox 로 들고있으니 새로 받을 일은 없지만 적어둔다.
    [code]
    (require 'xcscope)[/code]
  3. cscope-indexer 설치
    나는 주로 c:/bin 또는 c:/opt/bin 에 넣어둔다. 이쪽 툴들도 dropbox 에 짱박아야 겠군...

    펼쳐두기..

  4. cscope-indexer 가 쉘스크립트이므로 msys shell 을 깔아준다.
    나야 어차피 mingw 를 자주 쓰니 문제 없지만 혹시나 cscope 때문에 쉘까지 까는게 싫다면 다른 방식으로 스크립트를 만들면 해결될듯. 목록만들고 cscope -b 돌리는게 전부다.
  5. emacs 가 cscope-indexer 를 실행할수 있도록 cscope-indexer.bat 파일을 만든다. 역시 c:/bin 또는 c:/opt/bin 을 애용중
    [code]
    C:\msys\1.0\bin\sh cscope-indexer %1 %2 %3 %4 %5 %6 %7 %8 %9[/code]
  6. 시스템헤더랄까? 윈도쪽에선 뭐라고 해야 하나 어쨌건 프로젝트마다 공통적으로 쓰는 헤더들을 찾도록 cscope-database-regexps 를 지정해준다. 아래는 간단한 예제
    [code]
    (setq cscope-database-regexps
          '(
            ;; 이런식으로 추가해 나가자. 상세한것은 C-h v cscope-database-regexps
            ("C:/HOME/src/foo/src"
             (t)
             ("C:/HOME/src/foo/extlibs"))
            ;; more
            ;; default
            ("."
             (t)
             ("C:/Boost/include/boost-1_42/boost")
             ("C:/Program Files/Microsoft SDKs/Windows/v6.0A/Include")
             ("C:/Program Files/Microsoft Visual Studio 9.0/VC/include")
             t)))[/code]
  7. 위에서 지정한 세개의 기본검색 경로에 각각 cscope.out 을 만들어준다. 간단히 emacs 에서 C-c s I 로 지정해줘도 되지만 C++ 표준헤더의 경우 확장자가 없어서 이방법으로는 누락이 되니 직접 cscope.files 를 만들고 이를 통해 cscope.out 을 뽑는 수고를 해야 한다. gnu find 등을 쓰면 간단.


우왕ㅋ굳ㅋ
현재 나는 gnu global 이 주력 태깅툴이고 cscope 는 cscope-database-regexps 때문에 프로젝트 외부 코드를 따라갈때 쓴다. 즉 어떤 프로젝트 루트가 foo 일때 foo 이하는 빌드시 gtags 를 매번 돌려서 태깅을 해두고 코딩시 내가 찾으려는 심볼이 프로젝트 내부의 것인지 외부것인지 정도는 머리속에 들어있으니 상황따라 global, cscope 를 구분해서 쓰는 편.