예전 Windows App을 API 기반의 C 로 만들거나, MFC로 만들 때, 각종 Event 처리를 위해, 독자적인 ID를 만들었다. 그런데, 미처 인식을 못한 것이, 어떤 ID를 사용해서 운영을 해야 겹치는 경우 없이 제대로 되는지 정하지 않고 임의대로 했다.

그 중 WM_USER 값이다.
WM_USER는 사용자가 정의해서 쓸 수 있는 ID 정도로만 인식하고 있었다. 이 값으로 시작해서 최대 0x7c00 까지 정의해서 쓸 수 있다. 10진수로 한다면, 1024 ~ 31744 까지 정의해서 쓸 수 있다. 그래서 예전에는 사용할 ID 값을 아래와 같이 정의하곤 했다.

#define WM_CUSTOMUPDATE WM_USER + 100

즉 1024 + 100 = 1124 를 WM_CUSTOMUPDATE 라는 이벤트 ID로 사용한다는 의미.
하지만, 내가 안 쓰더라도, 별도로 사용되는 컨트롤이나, 3th-Party의 컨트롤의 경우 저 이벤트를 사용하는 경우가 종종 있어 자칫 종종 겹치는 경우가 있었다. 그래서 위 처럼 + 100 정도가 아닌, 5000 정도로 팍팍 띄워서 정의하기도 했다.

그런데, 알고 보니, WM_APP 라는 값이 있었다. 이 값은 최소한 컨트롤 같은 곳에서 사용하지 않는 완전 App 개발자 용으로 남겨놓은 영역이라고 한다. 이 값은 0x8000 ~ 0xBFFF 값이다. 10진수로 한다면 32768 ~ 49151 으로 볼 수 있다.

이번에 C#으로 이것저것 만들다가, 결국 unmanaged code들을 짜게 되었는데, 이 때 Windows Message를 주로 핸들링 하게 되었는데, 이벤트 ID를 대충 대충 정해서 구현한 것 같았다. 가급적 저 ID 정의 Rule에 맞추어서 정의해야 할 것 같다.

이 내용은 아래 링크에서 참고해  정리했다.(EUC-KR 이여서, 일부 Web Browser에서 종종 깨져 보인다.)

http://winapi.co.kr/reference/Message/WM_USER.htm

728x90

만들고 싶은게 무척 많은데, 간단한 것 부터 출발하자는 생각으로 시작했다.

메인 아이디어는 Google Calendar의 기념일 관리도구를 하나 만들려고 한다.
다만, 음력으로 된 기념일을 등록/수정/삭제가 가능한 도구이라는 것.

전에 ical 파일을 만들어 이 파일을 Google Calendar에 등록하는 방법이 있어 해봤다.
원리는 음력의 기념일을 기준으로 매년 양력일자를 ical 내에 미리 넣어주는 방법.
그래서 해당 양력일자의 일정을 Google Calendar에 우겨 넣는 것이다.

다 좋은데, 문제는 일정 수정이나 삭제할 때, 우겨 넣은 모든 일정을 일일히 찾아 지워야 한다는 점이다.

예를 들어 음력 6월 1일이라고 하면, 그에 맞는 양력 일자를 2011년, 2012년, 2013년... 2020년 양력 날짜가 쫙 생긴다. 11년에서 20년까지면 무려 9개. 그 9개의 날짜가 조금만 틀려도 매년 달력으로 넘어가서 수정/삭제를 해줘야 한다.
기념일이 한 개정도면 귀찮아서 그렇지 그냥 그냥 하면 되지만, 이게 20개 정도만 되면, 슬슬 머리가 아파오기 시작한다.

그래서 이것을 Windows 기반의 어플리케이션으로 만들어 관리하려고 한다. 그리고 그 관리도구를 만들기 위한 장소를 네이버 개발자에 넣었고, 네이버 개발자 사이트에서 제공하는 SVN에 등록하려고 한다.

사이트는 http://dev.naver.com/projects/googlecalendarm 이며, 틈 나는 대로 적용하려고 한다.

728x90

Google 에서 제공되는 서비스들은 거의 대부분 API를 제공하고 있다.
ATOM - 우리가 보통 말하는 SOAP과 같은 형태로 규격화된 XML로 구성된 형태와 JavaScript에서 쓰기 편한 JSON 형태들, 결과값도 다양한 형태로 제공한다.
(우리나라 포털은 이런 것과는 전혀 반대로 가고 있다. 뭐 다음이나, 네이버에는 개발자 들이 많으니, 외부 개발자들이 끼어들 필요가 없어서 그런듯... 애플 앱스토어 같은 성공 모델도, 이들에게는 큰 감흥이 없는 것 같다.)

이 중 Google Calendar 값을 가져와서 편집하려는 .NET 기반 툴을 만들려고 생각 중이였다.

 http://code.google.com/apis/calendar/data/2.0/developers_guide_protocol.html

난 맨처음 ATOM 기반의 데이터를 보았기 때문에, XMLDocument Reader로 읽어서 원하는 값들을 뽑으려고 했다.
하지만, 내용이 너무 방대하고 많아서 이 내용들을 정리할 생각에 뒷목이 뻣뻣함이 느껴졌는데,
알고보니까, 언어별로 이미 패키지화 해버렸다.
패키지는 다음 URL에서 받으면 된다.

http://code.google.com/p/google-gdata/downloads/list

MSI 파일로 설치를 하면 기본 경로로 C:\Program Files\Google\Google Data API SDK 위치에 설치된다.
Calendar 뿐만 아니라, Google 에서 제공하는 각종 기능들을 다룰 때 사용하는 대부분의 기능들을 담은 패키지를 제공한다.

그 중 완벽 정리된, .NET 코드로 작성하는 방법은 아래의 URL에서 참고하면 된다.

http://code.google.com/apis/calendar/data/2.0/developers_guide_dotnet.html

거의 완벽 정리. ( 문제는 언어 장벽! ㅠ.ㅠ )

각종 Open API 기반 서비스는 Google 기반으로 동작하게 할 수 밖에 없을 것 같다.
다음도, 네이버도 결국 이런 서비스를 제공하는 것은 요원한 일이 될테니..

구글 서비스나 잘 구성해서 써야 겠다.

 

Google Calendar 내용을 모두 열어 보는 코드를 간단하게 짜보면 아래와 같다.


Google.GData.Client.GDataCredentials m_credential 
= new Google.GData.Client.GDataCredentials("구글아이디", "구글암호");

Google.GData.Calendar.CalendarService svc = new Google.GData.Calendar.CalendarService("지금 만들고 있는 프로그램의 이름");
svc.Credentials = m_credential;

Google.GData.Calendar.EventQuery query
= new Google.GData.Calendar.EventQuery(http://www.google.com/calendar/feeds/default/private/full);

query.StartDate = DateTime.MinValue;
query.EndDate = DateTime.MaxValue;
Google.GData.Calendar.EventFeed feed = svc.Query(query);

foreach (Google.GData.Calendar.EventEntry entry in feed.Entries)
{
     if (entry.Times.Count > 0)
     {
            entry.Times[0].AllDay;  // 종일 이벤트인지?
            entry.Times[0].StartTime;  // 시작일
            entry.Times[0].EndTime;   // 종료일
      }
      entry.Title.Text; // 이벤트 제목
}

저 코드면 맨 마지막에 나오는 값들로 표시를 하거나 정리를 할 수 있게 된다.

그런데 특이한 점은 일정에서 날짜와 시간이 반드시 들어갈 줄 알았는데, 알고 보니까,
외부에서 파일을 import 해서 넣은 일정들은 저 entry.Times 값이 없는 경우가 있다.
그래서 entry.Times 에서 갯수를 파악한 뒤 내용을 꺼냈다.  - 주의가 필요 -

728x90

어제 우연히 웹 검색을 하다가, Gsong's Blog에 방문하게 되었는데, 아주 재미있는 포스팅을 보았다.

URL은 http://www.gsong.pe.kr/wp/?p=3959 인데, 제목이 SFE Prezi sildes 라는 포스팅.

시나리오 기반 개발이라는 내용의 프리젠테이션인데, Play 버튼을 클릭하면(한번 누르면 계속 진행되는게 아니고, 계속 눌러줘야 한다.) 이야기가 시작되는데, 자신이 원하는 포인트에 줌인 하고, 이동할 때는 줌 아웃하다가, 다음 위치에서 줌인 되는 스타일.

말로 설명을 하면 좀 이상하긴 한데, 뭔가 역동적인 슬라이드라고나 할까?

image

기반은 Flash 기반으로 되어 있다.

http://prezi.com/ dp 에 가면 나오는데, 여기서 자신의 슬라이드를 그릴 수 있다.

나중에 내 생각을 이런 곳에다 그려보는것도 즐거울듯.

무료로 사용하면, 이 Prezi 슬라이드 파일이 무조건 공개되고, 해당 파일은 반드시 Prezi 서버에 저장된다. 그것도 100Mb 한도로.

나중에 Professional 서비스를 신청하면, 오프라인 버전도 쓸 수 있다는데.. 모르겠다.

잘 쓸 수나 있는지 체크해보고. 생각해 봐야 할듯.

예제 Prezi 가 아래와 같다.

728x90

전에 미국 쪽에 계시는 이사님과의 원활한 자료 송수신을 위해 DropBox를 사용했다. 일단 DropBox 자체가 미국에 있는 서버다 보니, 파일 송수신을 할 때, 미국에서 그나마 접근하기 쉽다는 이유 때문일듯.

DropBox의 기본 개념은 하나의 폴더를 동기화라는 개념으로 자동적으로 서버와 동기화를 한다. 그래서 다른 위치의 다른 컴퓨터에서 DropBox를 설치하면, 최소한 서버와 동기화를 갖춘 파일들은 모조리 동기화를 한다. 파일이 변하거나, 파일이 추가되거나, 삭제되면 그 즉시 Dropbox가 설치된 컴퓨터에서는 동일한 반응을 보인다.
더욱이 이 DropBox의 훌륭한 점은 다양한 플랫폼의 지원이다. PC는 물론이고, MAC도 지원을 하며, 안드로이드 폰에 아이폰까지 다방면의 미디어로 사용할 수 있다. 보통 이 DropBox의 최대 활용점은 스마트폰에 파일을 송수신 하는 것. PC나 MAC에서 생산된 자료들을 동기화 설정된 폴더에 옮겨만 놓으면, 원하는 스마트폰 장치에서 쉽게 접근하여 받을 수 있다. (물론 스마트폰과 같은 용량적/통신적 제약이 있는데서는 파일이 변했다고해서 반드시 변경사항이 적용된 파일을 그 즉시 받지는 않는다.). 역으로 스마트폰 장치에서 만들어진 파일 ( 특히 사진 )들을 DropBox에 얹으면, 그 즉시 DropBox가 설치/연결된 PC와 MAC에서도 볼 수 있다.

하지만, 최대의 단점이 있으니, 바로 속도. 짐작컨데, 미국으로 연결되는 경우 그 속도는 가히 환상적으로 환장하게 만드는 경우가 있다. 얼마 크지도 않은 파일이 동기화를 하는데 최대 10분 이상 소요되는 경우도 발생한다. (물론 요즘은 즉시 즉시 반영되기도 한다.) 또 하나는 용량. 기본적으로 주는 용량이, 2G 이다. 사실 상당히 큰 용량이라고 볼 수도 있지만, 최소한 국내 클라우드 업체들이 제공하는 기본 용량에 비하면 턱없이 부족한 양이다. 광고에도 나오지 않는가? 50G.....

그래서 뒤적 뒤적 찾던 중, UCloud 를 설치해봤는데, Dropbox의 개념이 아닌, Backup&Restore 개념에 가까웠다. 원하는 PC의 특정 폴더들(기본적으로 내 문서, 내 음악, 내 사진 등등)을 설정하면, 그 PC에 대해서 파일이 변하면 자동으로 동기화를 한다. 위급한 상황이 닥치거나 아무 생각 없이 Format 한 이후에 원상복귀할 때는 좋을 것 같다.
하지만, 위에서 언급한 Dropbox 처럼 쓰기가, 참 애매했다. 스마트폰에서 파일 접근하기도 수월치 않고, 파일을 서로 동기화 시켜서 정리할 수도 없었다.

그러던 중 다음 클라우드를 보았고, 잠시 사용해봤다. 완전히 한국형 DropBox. 동일한 기능에 무려 50G. 서버는 당근 한국에 있으니 속도적인 우위도 차지할 듯.

자세한 찌라시는 http://daummail.tistory.com/319 를 보면 된다.

중요 개념 설명용 이미지는 이런 것!

피시1~1

처음에 내가 잘못 본 건지, 처음에는 Windows만 지원하는 것으로 알고 있었는데, 오늘 들어가보니, MAC와 Linux까지 지원. 훌륭했다.

그래서 지금 낼름 설치하고, 기존에 Dropbox를 통해서 송수신했던 파일들을 정리하고 있다.

 

만족 만족!!

50G의 여유는 쉽게 소진될 것 같지만, 지금 내가 가진 넥서스S자체가 16G 밖에 안되기에, 굳이 큰 용량이 필요로 하지않는다. 또 서버에 올리는 파일도 대부분은 10M 안쪽이고..훗훗.

일단, 파일들을 완존 정리를 해봐야 겠다.

image_2

728x90
드디어 모바일에서도 글을 올릴 수 있군요.
전에는 보기만 가능했는데..
장족의 발전이라고 해야하나?

이벤트라고해서 @tistory.com 메일을 만들면 200기가 용량을 추첨해서 준다고 하는데
뭐 그 용량이 필요할지는 모르겠지만..

여튼 모바일에서 직접 글을 올릴 수 있다는데 ㅋ 이제 앱으로만 나오면 딱 일듯
728x90

로그 파일을 읽는 경우가 종종 있는데, 로그 중에 계속 쌓이는 로그를 연속으로 볼 때가 있다.
이 경우 tail viewer 혹은 log tail viewer 들이 있는데, 그 툴을 활용하면, 계속 쌓이는 로그를 실시간으로 볼 수 있다.
과거 떠돌이 프로젝트 수행 중에 받았던 파일이 있다. WinTail 이라는 프로그램 인데, 그 프로그램이 그런 역할을 수행해줬다. 속도도 빠르고 좋았던 기억.

문제는 한글이 깨져서 나온다. 한글로 적힌 로그가 나오면 그대로 깨져서 나온다는..
아마도 C++로 만든거 같은데, 과거 인코딩과 거리가 멀던 그 시절에 만들어진 프로그램 같다.
이번에 작성 중인 프로그램도 로그 파일을 쌓고 있는데, 문제는 로그 내용을 한글로 적었다는 것. 
결국 무슨 말인지 알 길이 없어서, 직접 만들어야 겠다는 생각이 들었다.

image_2

 

.NET Framework 2.0을 기반으로 하며, C#으로 짰다. 모든 Visual Studio 2010 에서 작업했다.

처음에는 ListBox를 사용하여 로그 파일을 열었다. 
최소한 내가 만드는 로그 보는데는 문제가 없었다.
그래서 자신만만(?)하게 지인인 호박양에게 전달했는데,
왠걸...IIS 로그를 넣어 봤는데, All Stop 이라고 Report 해줬다.

즉, NET 기본 컨트롤로는 로그 Viewer로 쓰기에는 너무나 부적합했다는 것이다. 결국 이렇게 저렇게 검색을 하다가 우연히 발견한 오픈소스 기반의 Text Viewer인 Scintilla 를 찾았다. 이 Viewer는 C++로 되어 있으며, Win32와 GTK+ 기반으로 되어 있다. 소스 코드 에디터 처럼 특정 문자에 색을 입히거나, 코드를 묶어서 접고 펼치기 등, 다양한 소스코드 관련 Editor Viewer로 활용되는 유명한 솔루션. (현재 2.27 버전이며, 2011년 6월 20일이 최종 수정)

그것을 .NET으로 포팅한 프로젝트가 있었으니, 그것이 ScintillaNET 이였다.
일단 ScinitillaNET의 코드를 특별히 수정할 필요는 없었고, Binary 파일( http://scintillanet.codeplex.com/releases/view/34393#DownloadId=88753 )을 직접 받았다. 이 구성요소를 가지고 프로그래밍을 하려면, 최소한 SciLexer.dll 파일이 System32 에 위치해야 한다. 그리고 ScintillaNet.dll 파일을 프로젝트에 Reference를 걸어주면 된다. 물론 배포 할 때는 저 두 개의 파일이 실행되는 파일과 같은 경로에만 있으면 된다.

그래서 한번 돌려봤더니..

image_4

특정 경로의 파일을 열고, Start 하면 된다. 중간에 화면 Clear가 필요하면 Clear 로그를, Log 파일 내용을 완전히 지우고 싶으면 Trunc 로그를 하면 된다.

사용법은 그렇게 어려운편은 아니니 Pass.

소스 파일과 실행파일 묶음은 첨부로 올린다.
아, 이거 돌릴려면 최소한 .NET Framework 2.0 이상이 설치되어 있어야 한다.

728x90

자동 빌드를 적용 중에 자주 설정을 바꾸게 되는데, 이상하게 다음과 같은 문제가 자주 발생된다.

Summary
Other Errors and Warnings
1 error(s), 0 warning(s)
      -> The path D:\BuildPlace\BuildProcessTemplates is already mapped in workspace 18_23_builder-PC.

특정 소스 위치가 이미 연결된 상태라며 문제가 발생하는 것 같다. 그래서 더 이상 빌드가 안된다. 이 문제는 아마도 빌드 전에 모든 Source를 Get Lasted Version을 하게 되는데, 그 연결이 남아 있는 상태로 다시 받으려니 문제가 발생되는 문제이다.

안그래도 이 내용을 구글을 통해서 찾아 보니까, 아래와 같은 URL을 찾을 수 있었다.

http://stackoverflow.com/questions/226288/team-build-error-the-path-is-already-mapped-to-workspace

TF.EXE 라는 Team Explorer 에서 제공하는 유틸리티를 이용해서 처리할 수 있다는 것이다.

처리 방법은 아래와 같다.

  1. 먼저 Visual Studio 에서 제공하는 CMD창을 띄운다.
  2. 다음은 다음 명령어를 넣는다. 그러면 현재 MAP 된 정보를 모두 보여준다.
    c:\>tf workspaces /owner:*

    image
    맨 앞부분이 Workspace 이름이고, 그 다음이 Workspace를 생성한 계정. 그리고 그 다음이 Workspace가 생성된 PC 이름이다.
  3. 위의 정보를 가지고 하나씩 삭제 한다. 삭제하는 방법은 CMD 창에 아래와 같이 입력한다.
    C:\>tf workspace /delete workspace_name
    만일 5_15_builder_pc 라는 Workspace를 삭제하려면 아래와 같이 입력하면 된다.
    C:\>tf workspace /delete 5_15_builder_pc
    혹시 현재 로그인 한 계정이 다르다면 아래와 같이 추가적으로 입력한다.
    C:\>tf workspace /delete 5_15_builder_pc /login:tfsadmin

    암호 입력은 별도로 띄우게 되는 NTLM 창이 뜨는데, 그 곳에다 넣으면 된다.
728x90

+ Recent posts

728x90