백업한 사진을 보기가 불편하다

image

(퍼온 이미지임. 내 폰 상태는 이렇게 심플하지 않다.)

아이를 가진 아빠가 되고 나서 휴대폰 카메라를 사용하는 일도 전보다 더 많아졌다.

휴대폰의 메모리 용량은 그리 넉넉하지 못한 편이기 때문에 가끔씩 데스크탑으로 백업한 후 비워주어야 한다. 헌데 미디어 파일들을 복사하면 정말 복사만 될 뿐이지, 파일이 전혀 정리되어 있지 않아서, 나중에 찾아보기가 힘들다는 단점이 있다. OS X와 함께 PhotoStream을 사용한다면 더 근사한 방법이 있는지는 잘 모르겠는데, 윈도우 에서는 달리 대안이 없는 듯.

image

데스크탑으로 복사하면 왼쪽 스샷처럼 정체 모를 이름의 폴더에 파일이 생성된다. 폴더 이름은 iOS 내부에서 사용하는 hash 값? 일 듯 하지만 윈도우로 복사해온 이상 크게 의미가 없다. picasa같은 프로그램을 사용하면 폴더가 어떻게 되어있건 상관없이 날짜 분류를 할 수 있겠으나, 다른 프로그램을 쓰지 않고 윈도우 탐색기 만으로도 어느 정도 파일 분류가 가능하면 좋겠다는 생각이 들었다. 백업을 하더라도 파일을 찾아보기가 힘드니까 사진을 찾아보는 것도 꺼려지게 된다.

처음엔 수작업으로 사진 파일을 분류해 봤다

그래서, 이 미디어 파일들을 찍은 날짜 별로 정리해보자고 마음먹었다. 뭐 어차피 나중에 다시 보려고 찍은 사진이니 감상도 할 겸 하나하나 정리해 보자. 사진을 하나 열어보고, 폴더를 만들고, 옮기고, 다시 다른 것 열어보고, 만들고, 옮기고, … 열어보고…, 만들고…, 옮기고…

image

처음 한두 번 정도는 할 만 했다. 그래 이 날은 참 즐거웠어.. 이 때는 정말 고생했지.. 사진으로 찍어두길 잘했어 하하.. 이러면서 한참을 작업하고 보면 정리한 파일은 겨우 전체 분량의 1~2% 정도 될까 한 수준. 게다가 내 폰 사진 정리가 끝나면 와이프 폰도 하려고 했는데… 아 참 아이패드로도 사진 찍은 게 좀 있지…이 생각을 하니 앞이  깜깜해졌다.

그래서 차라리 파일 정리를 자동화 해주는 툴을 짜기로 결심한다.

사진을 분류해주는 툴을 만들어서 돌려보자

언어는 윈도우 프로그래밍에 가장 무난한 C#을 사용했다. 예전에 비슷한 동작을 하는 툴을 한 번 짠 적이 있었는데, 그 땐 간단하게 만든다고 그냥 싱글스레드로 돌렸더니 CPU는 많이 노는데 실행 시간이 너무 오래 걸렸던 적이 있었다. 그래서 이번에는 멀티 스레딩으로 처리하기 위해 TPL(Task Parallel Library)의 Parallel.ForEach를 이용했다.

카메라로 촬영한 사진에는 Exif 메타 데이터를 읽으면 촬영 날짜를 확인할 수 있는 걸 알고 있었지만 동영상 파일에도 이런 메타 데이터가 있다는 걸 이번에 알았다. 파일 수정날짜로 우선 분류해보고 잘 안되면 mediainfo라는 라이브러리를 써보려고 했는데,  다행히 수정날짜 만으로 적당히 나쁘지 않게 동작해서 그냥 패스. 사진의 exif를 읽는 건 검색해서  적당한 방법을 긁어와 사용했다.

이렇게 사진, 동영상을 날짜 기준으로 한 달치씩 모아 한 폴더에 넣고, 다시 1년치의 폴더를 따로 묶어 보았더니 제법 마음에 들게 정리 되었다.

image

이렇게 쉽게 끝날 것을.

약간의 메모 - TPL

C#에서 멀티스레딩 처리를 해본 것이 처음이었는데, TPL은 정말 심플하고 사용하기 쉬워서 인상적이었다. C++에서 스레딩 처리를 위해 작성해야 하는 코드들과 비교해 보자면 정말 깔끔하다.

처음엔 스레드간 job passing을 위한 큐로 IOCP를 사용하려고 했는데, 아주 당연하게 있을 거라고 생각했던 IOCP API가 C#에 없었다. 대신 ThreadPool이 이 역할을 대신 해주고 있어서 써봤는데 잡다한 것 신경 쓸 필요 없이 job만 던져 넣으면 알아서 실행해주니 무척 편리하다. 요청한 모든 job이 끝났는지 확인해서 다음으로 진행하는 thread join 처리만 조금 신경 써주면 되었다.

그러다가 Parallel.ForEach도 괜찮아 보여 분산처리를 이것으로 다시 변경했다. 정말 감동이었다. 이건 join조차 신경 써줄 필요가 없다. 그냥 For루프 만들듯이 코딩 할 뿐인데 잡다한 분산처리 노가다가 알아서 다 되니 거의 손 안대고 코 푸는 느낌이다.

물론 VC++에도 ThreadPool도 있고 parallel for loop도 있다. ThreadPool은 비스타 부터 win32 api 자체에 지원되기 시작했고, PPL을 사용하면 parallel for도 쓸 수 있다. 헌데 C++로 만드는 프로그램이라면 왠지 정석대로 win32 Thread를 직접 생성/관리 해주어야 할 것 같은 느낌적인 느낌이 있어서 좀 꺼려진다. 개발 언어가 C#이라면 그런 부담감이 좀 덜함.

성능에 크게 민감하지 않으면서 병렬처리가 필요한 코드를 짜야 한다면 C#의 TPL을 쓰는 게 좋겠다. 나중에 기회가 되면 좀 더 제대로 써먹어 봐야지.

 

활용

파일을 정리한 것과 다소 개연성은 좀 떨어지지만(…), 이제 이렇게 정리된 사진 파일을 Synology Nas에 넣는다. 그러면 백업 후 파일을 모두 날려버린 휴대폰에서도 문제없이 사진을 볼 수 있고

Screenshot_2014-05-09-13-12-00

웹에서도

image

TV에서도 똑같이 사진을 볼 수 있게 되었다.

20140509_071622

20140509_071655

사진을 찍을 때마다 백업하고 정리하는 것이 부담이었는데 이제는 툴을 만들어뒀으니 부담 없이 애기 사진 열심히 찍어야지.

IMG_2500

2014년 4월. 신구대 식물원. 1년 전 꼬맹이와 함께.

'잡담' 카테고리의 다른 글

아이폰에서 백업한 사진, 동영상을 정리해보자  (0) 2014.05.07
WikidPad  (0) 2014.04.11
화살표 주석 달기  (0) 2013.12.24
자료 정리  (0) 2013.11.18
최근의 장난감  (0) 2013.06.12
chocolatey  (0) 2013.03.20
Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

WikidPad

2014. 4. 11. 20:26 from 잡담

image

얼마 전 승훈이형 블로그에 갔다가 WikidPad라는 걸 알게 됐는데, 잠깐 사용해보고 아주 마음에 들어 적극 사용하기로 마음먹었다.

WikidPad는 그냥 데스크탑 어플리케이션 형태로 돌아가는 위키 엔진이다. python으로 만들어서 exe로 랩핑만 되어있다. 별도의 웹서버가 필요하지도 않고, DB같은 걸 셋팅할 필요도 없다. 글은 내가 작성한 형태 그대로 텍스트 파일로 저장된다. 글 편집 모드와 읽기 모드의 전환도 엄청나게 빨라서 무척 마음에 든다. 단축키가 잘 붙어있어서 글 적는 중간 중간 포매팅을  preview하기도 쉽다.

public internet에 공개할게 아닌 개인 자료라면 WikidPad에 글을 적고, 이렇게 생성된 로컬 파일을 DropBox나 Google Drive같은 클라우드 솔루션에 넣어 보관하면 개인 컴퓨터 에서만 공유되는 환경을 쉽게 만들 수 있다. 나는 WikidPad + Synology Nas의 조합으로 사용 중.

프로그래밍 관련 개인 자료를 정리하는 솔루션을 moniwiki에서 phpbb로 옮긴지가 얼마 안되었는데, 이걸 다시 WikidPad로 이사 중이다(…). phpbb는 데이터를 mysql에 담는 것이 좀 불만이었기 때문에 안 그래도 다른 솔루션을 찾고 있는 중이었다. 마땅한 녀석이 없으면 octopress로 작성하고 bitbucket에 넣으려고 했는데, WikidPad를 써보니 내가 하려했던 구성보다 훨씬 간편하고 심플하게 처리가 가능하다. (승훈이형 쌩유!)

WikidPad는 글이 그냥 plain text 형태로 저장되니까, 나중에 또 다른 솔루션으로 다시 갈아탄다고 하더라도 포팅을 자동화하기도 쉽다. MySql에 있는 것도 자동으로 포팅 하려고 하면 물론 툴을 짜서 돌릴 수야 있겠으나 그쪽 도메인은 좀 생소해서 꺼려지는데, 윈도우 폴더 안에 남는 텍스트 파일이라면 그까짓 것 손에 익숙한 C#으로 손쉽게 스윽 만들 수 있겠지.

현재 공식페이지에 올라온 stable version은 2.2인데, Windows 8에서는 제대로 호환이 안 되는 것 같다. 베타버전인 2.3을 설치하면 Windows8에서도 무난하게 사용할 수 있다.

사실 개인자료(wiki)와 공개형 자료(blog)모두 plain text 형태의 솔루션으로 이사하고 싶은데, 여기 이 devnote 블로그는 octopress로 이사하려고 생각 중이다. 그래서 C#으로 데이터 컨버터를 조금 만들어보다가 말았는데, 조만간 다시 재개해서 완성하려고 한다. 컨버터가 완성되면 블로그도 이사하고, 툴 제작 후기도 포스팅할 예정. 언제가 될지 모르겠으나 그 날이 하루빨리 오기를 바란다;;

'잡담' 카테고리의 다른 글

아이폰에서 백업한 사진, 동영상을 정리해보자  (0) 2014.05.07
WikidPad  (0) 2014.04.11
화살표 주석 달기  (0) 2013.12.24
자료 정리  (0) 2013.11.18
최근의 장난감  (0) 2013.06.12
chocolatey  (0) 2013.03.20
Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

화살표 주석 달기

2013. 12. 24. 09:31 from 잡담

얼마전에 트위터에서 센스넘치는 주석 스샷을 본 적이 있는데,

완전 참신하다. 여태 십 년 동안 프로그램 짜면서 이런 주석은 처음 봤어.

그래서 오늘 나도 한 번 따라해봄 ㅎ

image

화살표 몸통은 한글 ㅂ 에서 한자키 눌러서 찍은└ 과 ─ 의 조합이다. 트윗에서 본 것처럼 적는건 너무 거창하고 힘들어 보이는데, 이 정도면 적당히 보기도 좋고 괜찮지 않나?

'잡담' 카테고리의 다른 글

아이폰에서 백업한 사진, 동영상을 정리해보자  (0) 2014.05.07
WikidPad  (0) 2014.04.11
화살표 주석 달기  (0) 2013.12.24
자료 정리  (0) 2013.11.18
최근의 장난감  (0) 2013.06.12
chocolatey  (0) 2013.03.20
Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

자료 정리

2013. 11. 18. 17:41 from 잡담

사람들은 자신의 모든 삶을 하드드라이브에 넣는다는 걸 아세요?

- CSI 시즌 3 13편 대사 중.

세월은 정말 물처럼 흘러서

아무것 안하고 멍하니 있어도 삶은 그냥 살아지는데

HDD에 남은 삶의 흔적들은 그저 쌓이기만 할 뿐 정리를 하질 않으니

이게 추억인지, 기억인지, 기록인지, 아니면 쓰레기인지 분간이 되질 않는다.


20대 초반부터 백업해둔 자료들을 들춰보니

제로보드 게시판이 한 꾸러미, tistory 블로그가 세 개, moniwiki 도 세 개

구글 Docs와 SkyDrive, uCloud 등등에 산포된 다양만 포맷의 문서들이 수십 가지...

어떤 건 지금도 돌리면서 잘 쓰고 있기도 하고

어떤 건 zip 파일로 묶여 정말 HDD 안에 처박혀 있기도 한데

이번 기회에 마음먹고 자료들을 대동단결 통합정리 하기로 마음 먹었다.


정리에 앞서 그간의 백업 문서들을 대충 들춰보니 주제도 참 다양도 하다.

십 년 남짓 프로그래머로 지내오면서 참 별별 뻘 짓을 다 했구나.

구슬이 서 말이라도 꿰어야 보배라는데

이제 이 바닥에서 잔뼈도 어느 정도 굵어진 것 같은데

그간의 삽질들로 원기옥을 만들면 이제 대작을 하나 터트릴 때도 되지 않았나.

image

새로운 자료 정리 솔루션은 좀 쌩뚱맞긴 하지만 일단 phpBB 너로 정했다.

'잡담' 카테고리의 다른 글

WikidPad  (0) 2014.04.11
화살표 주석 달기  (0) 2013.12.24
자료 정리  (0) 2013.11.18
최근의 장난감  (0) 2013.06.12
chocolatey  (0) 2013.03.20
담벼락 수집기를 WPF로 재 작성 중  (0) 2012.12.17
Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

최근의 장난감

2013. 6. 12. 23:12 from 잡담

블로그에 한동안 글을 못 적어서 잡담 한 번 올려본다.

image

요즘도 여전히 node.js를 갖고 놀고 있다. 이번엔 node.js로 트윗 데이터를 백업하고, 검색하고, 시각화(visualization)하는 사이트를 만들어보고 있다.

이전까지는 정말 간단한 코드만 짜본 수준이어서 노드를 제대로 다루지 못했는데, 이제는 어느 정도 마음 먹은 대로 코딩할 수 있는 정도가 되니 몹시 재밌다. 그간 참여했던 프로젝트들 중에서 인하우스툴 웹솔루션을 만들 일이 있으면 주로 PHP로 만들었다가, 최근에는 Asp.NET로 작업을 하기도 했었는데, 요번에 다시 한 번 세대 교체. 다음에 껀수가 생기면 Node.js로 만들어 봐야겠다.

골수 C++ 사용자여서 그런지 처음 node.js의 비동기 스타일 API들이 너무 낯설고 적응이 힘들었다. 맨 처음에는 async API를 가지고 내가 만드는 로직은 sync방식으로 돌아가도록 방향을 잡았는데 그러니 영 진도를 나가지 못하고 너무 작업이 힘들었다. 그래서 일단 검색을 좀 해보기 시작했는데, Flow Control in Node.js 이 자료가 정말 큰 도움이 되었다.

node에서 돌아가는 로직 코드들도 전부 비동기로 작성하고, call-back이 너무 깊이 중첩되거나 하면 Async 모듈의 도움을 받을 것. 이 간단한 걸 깨우치고 나니 급속도로 재미가 증가. 이젠 어느 정도 덩치가 있는 프로그램도 제법 그럴싸하게 만들 수 있을 것 같다.

자료에서는 Async의 waterfall 메소드만 주요하게 소개하고 있는데, 이 것 말고도 series, parallel 등의 플로우 처리도 매우 요긴하다. 난 첨엔 waterfall만 있는 줄 알고 제대로 활용을 못 하다가 얼마 전에야 알았는데, 사용해 보려는 사람은 readme를 꼭 읽어보길 권한다.

 

트위터 처음 쓸 때부터 백업툴을 내가 직접 짜봐야지 했었는데, 이제야 하나 장만해놓고 나니 속이 후련하다. 이제 백업 걱정 없이 양껏 트윗할 수 있겠군. 후후.

'잡담' 카테고리의 다른 글

화살표 주석 달기  (0) 2013.12.24
자료 정리  (0) 2013.11.18
최근의 장난감  (0) 2013.06.12
chocolatey  (0) 2013.03.20
담벼락 수집기를 WPF로 재 작성 중  (0) 2012.12.17
다 알아야 만들 수 있는 것은 아니다  (8) 2012.11.14
Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

chocolatey

2013. 3. 20. 00:11 from 잡담

며칠 전에 아주 재미있는 녀석을 알았다. chocolatey 라는 패키지 매니저인데, 리눅스의 apt-get처럼 윈도우 시스템에 개발툴이나 여러 가지 어플리케이션들을 install할 수 있게 해주는 스크립트다. 집에서 쓰는 데스크탑과 회사의 업무망 머신에 깔아봤는데 아주 맘에 든다. 덕분에 오래 전에 설치해둔 node.js 지워버리고 이 녀석으로 v0.10.0을 새로 설치했다. 버전업 하기 귀찮아서 그냥 두고 있었는데 완전 쌩유.

다운받아서 설치된 폴더를 뒤져보면 전부 파워쉘 파일들이다. 파워쉘 잘 쓰면 이런 것도 뚝딱 만드는구나. 멋지다. 내부적으로는 NuGet packaging infrastructure를 사용한다고 적혀있는데, 내부적인 디테일은 모르겠지만 아무튼 멋지다. 체크해 두었다가 좀 더 깊이 살펴봐야겠어. 내부 동작이 궁금하다.

chocolatey가 더 멋진 것은 지원하는 패키지 리스트들이다. git, python, nodejs 같은 command-line base 개발툴들만 지원하는 것이 아니라, 일반적인 어플리케이션도 설치할 수 있어서, Notepad++이라던가, FileZilla, AutoIT, Firefox, Safari, 심지어 gVim에 Steam까지도 설치할 수 있다. packages 리스트를 보면 아마 반할 것이다. 시스템 설치하고 나면 으레 설치하곤 하는 필수 사용 프로그램들이 다수 들어있다. 다음에 윈도우를 새로 깔게 되면 chocolatey 제일 먼저 설치하고, 이것으로 나머지를 설치하지 않을까 함. 윈도우 구성요소나 파이썬 extension도 설치할 수 있다.

요즘은 이런 패키지 매니저 형태의 개발환경 지원이 잘 되어서 좋다. VisualStudio에서도 Extension Manager나 NuGet을 통해 외부 모듈이나 플러그인을 쉽게 사용할 수 있다.

며칠 전부터 한동안 못 보던 웹쪽 기술들을 조금 기웃거려보는 중인데, bower라는 패키지 매니저도 눈에 띄길래 설치해서 사용하고 있다. jQuery나 bootstrap 등을 받을 수 있다.


node.js에서 쓰는 npm도 설치되어 있으니, 어느새 내 컴퓨터에 이런 패키지 매니저 형태의 툴이 3가지나 된다. apt-get을 쓸 수 있는 리눅스를 부러워할 필요가 없다.

mac OS X도 얼마 전부터 쓰고 있는데, 여기엔 또 Homebrew라는 패키지 매니저를 사용하고 있다. OS X에선 이미 유명한 물건인걸로 알고 있다. 이제 어느 OS에서나 sw개발 하면서 써드파티 일일이 다운받아서 수동설치 하는 경우는 점점 줄어드는구나.

'잡담' 카테고리의 다른 글

자료 정리  (0) 2013.11.18
최근의 장난감  (0) 2013.06.12
chocolatey  (0) 2013.03.20
담벼락 수집기를 WPF로 재 작성 중  (0) 2012.12.17
다 알아야 만들 수 있는 것은 아니다  (8) 2012.11.14
[node.js] 아이폰으로 PC를 직접 제어하기  (2) 2012.03.25
Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

아기가 태어난 지 5개월째로 접어 들었고, 이제는 전에 비에 조금씩 개인 시간을 가질 수 있는 여지가 생겼다. 그렇다고 시간을 아주 많이 낼 수 있는 것은 아니지만, 그나마 저녁시간에 조금씩 노트북 붙잡고 앉아있을 시간 정도는 낼 수 있게 됨.

아이가 생기고 나서 혼자 가볍게 공부할 주제로 WPF를 선택했었다. 그 여세를 몰아 자투리 시간 동안에 WinForm으로 만들었던 페이스북 담벼락 수집기를 WPF로 포팅해보고 있다.

↓ 기존의 WinForm GUI

image

↓ 작업중인 WPF GUI

image

새로운 기능들도 넣고 싶어서 머릿속에 구상은 잔뜩 해두었는데, 일단은 기존의 기능을 그대로 이식하는 작업 먼저 진행 중. 요즘 거듭 말하는 거지만 WPF는 확실히 매력 있는 물건이다. 그 동안 윈도우 GUI 개발 라이브러리를 Win32 –> MFC –> WinForm –> WPF 순으로 갈아타 왔는데, WPF에 와서야 뭔가 GUI 개발환경이 완성된 느낌이랄까. 아직 MVVM 패턴 친화적인 방향으로의 개선의 여지는 훨씬 많이 남아있지만, WinForm까지도 존재하지 않던 Binding이라는 개념 덕분에 뷰와 모델의 완벽한 독립이 가능해지고, 깔끔한 코드를 작성할 수 있게 되었다.

처음 WPF를 공부하기 전에는 단지 ‘컨트롤 레이아웃을 구성하기에 조금 수월해진 GUI 작성 방식’ 정도로만 가볍게 생각했는데, Binding이라는 물건이 생각지도 못하게 튀어나오면서 아주 재미있어졌다. 생각한 것보다 공부가 더 어려워 지기도 했지.

윈도우 프로그래머이면서 아직 WPF를 들여다 보지 않은 분들이 있다면 한 번 들여다 볼 것을 권하고 싶다. 내가 아직 WPF를 공부중인지라 크게 도움이 되는 포스팅을 할 순 없겠지만, 처음 감을 잡을 때 나는 개인적으로 이 글이 도움이 되었다. 나는 MFC를 꽤나 좋아하는 편이고, 2010년 Visual Studio 공식 팀 블로그 에서도 MFC 카테고리를 맡아 스터디를 진행했었는데, 이제 WPF를 들여다 본 후로는 두 번 다신 MFC로 GUI 코딩은 안 할 것 같다.

Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

모바일 프로그래밍은 어떻게 하는 건지 한 번 구경이나 해보고 싶다는 마음에 회사 도서관에서 책을 적당히 한 권 빌려다가 집에서 애기 재우는 동안에 들춰보기 시작. 그런데 얼마 안 가서 생판 처음 보는 object-c 코드에 정신이 혼미해지기 시작했다. object-c라고 해봐야 c하고 비슷할 줄 알았는데 notation이 생각보다 많이 생소하더군. 그러던 중에 책에 적혀있던 저자의 말이 큰 위안이 됐다.

뭐든 다 알아야 프로그램을 만들 수 있는 것은 아니다. 만들다 보면 저절로 알게 되는 것도 있고, 만들 줄 알게 되면 쉽게 이해되는 부분도 있다.
열 개를 모를 때 열 개를 다 이해하고 만들려고 하면 시작조차 힘들 수도 있다.

- 시작하세요! cocos2d 아이폰 게임 프로그래밍 中…

오.. 과연 명언이다. 그래, 프로그램은 들이대면서 느는 거지. 아주 새로운 내용도 아니건만 읽으면서 큰 위로가 되어 블로그에도 적어둔다.

최근에는 .NET과 C#을 천천히 익히고 있는 중인데, 그 동안은 늘 C#을 배워야지 하면서도 썩 코딩 스킬이 늘어나지 않았다. 지금 생각해보면 나는 처음부터 너무 많은 걸 이해하고 싶어했고, 그래서 제대로 시작조차 하지 못한 것이었다. C#으로 무언가를 작성해볼까 하다가도, 지금 어설프게 C#으로 짜느니 보단 차라리 익숙한 C++로 짜는 게 훨씬 빠르고 깔끔하게 만들 텐데 하는 생각이 먼저 들었다.

아마도 나는 무의식 중에 ‘C#을 C++만큼 알게 되기 전에는 C#코딩은 이르다’는 생각을 했던 거라고 생각한다. 그런데, C#을 C++만큼 알게 되기까지라니! 아무리 나를 호구 중에 호구라고 가정하더라도 10년간을 C++로 밥 벌어 먹고 살아왔는데, 문법책 가끔씩 뒤적이는 수준으로 해서 C#을 C++만큼 체득할 수가 있는 것인가.

처음 배운 언어로 작성하는 코드는 그런대로 실행은 된다 치더라도 아주 볼품없고 조악하다. 나는 남들이 볼 것도 아닌 토이 프로젝트에서라도 그런 볼썽 사나운 코드를 내 손으로 만들어 내는 것을 창피하게 생각했다. ‘아.. 이걸 C++로 짰으면 훨씬 쉽고 우아하게 짤 수 있을 텐데..’하는 괜한 아쉬움이랄까. C++ 외길인생을 너무 길게 지내왔던 게 다른 언어를 배울 때 무의식적인 벽을 만들고 있었다.

멋모르고 막 만들어댄 코드는 시간이 지나면 훌륭한 리팩토링 연습용 리소스가 된다. 요즘에는 그 동안 C++처럼 짰던 C#코드들을 다시 보면서 이리저리 고치고 다듬기도 하는데, 그러면서도 많은 연습이 된다. 확실히 프로그래밍은 들이대면서 는다. 요즘은 예전과 달리 C#에 재미를 느끼고 자신감이 생겼다.

다 알아야 만들 수 있는 것은 아니다. 만들면서 알아가는 것이다. 어느 방향으로든 극단적인 것은 좋지 않으니 너무 들이대기만 해도 곤란하겠지만, 왠지 나는 요즘 들어 적당한 중용의 감을 잡은 것 같다. 그 동안 배우고 싶지만 선뜻 시작을 하지 못했던 영역이 많이 있는데, 예를 들면 iOS, Android, NaCl 등등… 앞으로는 일단 hello world부터 무조건 찍어봐야겠다 :)

Posted by leafbird 트랙백 0 : 댓글 8

댓글을 달아 주세요

  1. addr | edit/del | reply Favicon of https://catch-22.tistory.com BlogIcon -22 2012.11.15 17:20 신고

    명언이네요!!!!!!!!!!!! ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
    C# 화이팅!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ㅋㅋㅋㅋㅋ

    그런데 아이 재우면서 책 보기가 가능한가요? ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

    • addr | edit/del Favicon of https://devnote.tistory.com BlogIcon leafbird 2012.11.19 13:45 신고

      화이팅 'ㅂ')/
      아기가 잠들기까지는 책을 볼 수는 없는데... 일단 잠들고 나면 애기 옆에 가만히 있다가 뒤척거리거나 깨려고 할 때 토닥토닥 해주기만 하면 되거든요. 잠들었다고 그냥 혼자 놔둬버리면 금방 깨더라고요. 그 때 읽어요 ㅎ

  2. addr | edit/del | reply Favicon of http://soomong.net BlogIcon soomong 2012.11.24 22:13

    object-c 가 부담되시면 cocos2d-x 도 있습니다. C++ 과 Lua 도 가능해요 ^^ 성기님은 둘 다 잘하시니 더 좋을듯!

    • addr | edit/del Favicon of https://devnote.tistory.com BlogIcon leafbird 2012.11.26 15:23 신고

      아 안그래도 -x라는 물건을 이 글 적고 나서 알았어요 ㅎ
      cocos2d는 c++버전으로 보고, object-c는 또 별도로 한 번 볼 생각이예요. 나중에 안드로이드 개발환경에 질문이 생기면 수몽님한테 물어보면 되겠네요 :)

  3. addr | edit/del | reply Favicon of http://www.freeism.co.kr BlogIcon freeism 2013.03.20 10:10

    뻔한 얘기 같아 보이면서도 가슴을 후벼파는 말이네요^^

    • addr | edit/del Favicon of https://devnote.tistory.com BlogIcon leafbird 2013.04.02 09:45 신고

      정말 별 것 아닌 이야기인데 저도 꽤나 마음에 들더군요. 요즘은 덕분에 이것 저것 들이대보고 있는데, 아주 재미있네요 :)

  4. addr | edit/del | reply Favicon of http://blog.naver.com/jungles BlogIcon luke woo 2013.04.01 11:16

    성기씨 잘 지내시죠. 우상혁입니다.

    글이 와닿네요. 제가 항상 새로운 것을 공부 안하면서.... 핑계로 삼고... 장벽이 되었던... 그것이군요...

    일단 해보는 것보다 어느정도 알아야 되지 않나라는 생각을 먼저 했었습니다....

    • addr | edit/del Favicon of https://devnote.tistory.com BlogIcon leafbird 2013.04.02 09:47 신고

      상혁씨 오랜만이네요. 잘 지내고 계시죠?
      책에서 읽은 몇 줄만 딸랑 적어놓기 뭣해서 몇자 더 적어놓은 글인데 의외로 많은 분들이 공감해 주시네요.
      대구에 계신분들 늘 보고싶어요. 다들 안부 전해 주세요 :)

image

아이폰으로 집에 있는 PC를 원격 제어하는 어플은 많이 있다. 보통 가벼운 기능의 무료 버전과 여러가지 기능의 유료 버전으로 나누어져 있는데, 나도 집에서 사용해 보려고 몇 가지 어플들을 찾아서 다운받아 봤지만 개인적으로는 마음에 드는 게 없었다. 오만가지 기능이 모두 들어있어 UI가 복잡한 것도 싫었고, 굳이 안쓰는 기능들까지 모두 달려 있는 어플을 돈주고 다운받아야 되는 것도 별로 내키지 않았다. 그래서 무료로 나온 라이트 버전을 쓰자니 어딘가 한두 가지씩 모자란 기능들이 있고 말이지…

그래서 집에서 TV볼때 쓰는 수신 카드의 번들 SW를 제어할 수 있는 기능을 직접 만들어 보기로 했다. 나는 아이폰을 쓰지만 아직 맥은 없어서 (사고 싶다 맥북 ㅜㅜ) 어플로 만들 수는 없고, Web 서버를 PC에 띄우고 아이폰의 사파리로 접속해서 제어를 보내면 될 거라고 생각했다. 그래서 처음엔 IIS를 설치하고 ASP.NET으로 기능을 만들었는데, 이게 localhost 접속으로는 새로운 프로세스를 생성하는 명령을 내릴 수 있지만 아이폰같이 외부 접속인 경우에는 그런 권한이 제공되지 않았다. 그 뒤로 IIS 설정을 한참을 뒤져봤지만 이를 허용하는 설정은 없는 듯.

그러다가 IIS 서버로는 답이 없을 듯 하여 Node.js로 우회. 기존의 ASP.NET에서 짰던 제어기능을 솔루션 설정만 살짝 바꾸어 별도의 실행파일로 만들고, node.js에서는 입력을 받아 c#으로 만든 별도의 프로그램을 실행하도록 했더니 바로 성공. 다른 말로 하자면 IIS에 비해 기본적인 보안이 취약하다는 말일 수도 있겠으나 내가 무슨 은행 계좌 결제 시스템을 만드는 것도 아니고… 우리집 공유기 안에서는 내 맘대로 난리 부르스를 춰도 뭐라할 사람 없으니 신경 쓸 것 없는 셈이다.

remote_control_n

아이폰 사파리에서 보이는 TV 리모콘은 이렇게 생겼다. 간단하게 TV를 켜거나 끄고, 볼륨과 채널을 조작하는 것만 달아 두었다. node.js의 자바 스크립트 코드는 약 50줄 정도밖에 안 된다. 요청을 받으면 외부 실행파일을 적절히 실행시켜 주는 것 뿐. require( ‘child_process’ )로 모듈을 불러와서 exec( ‘실행할 명령’ ) 함수만 불러주면 끝이다.

PICT1548

같은 식으로, 필요한 기능을 얼마든지 쉽게 만들 수 있다. TV 리모콘 이외에 파워포인트로 발표할 때 슬라이드를 넘기는 컨트롤러도 같은 식으로 만들어보면 아주 유용할 것이다. 요고 조만간 한 번 만들어 볼 생각 :)

Posted by leafbird 트랙백 0 : 댓글 2

댓글을 달아 주세요

  1. addr | edit/del | reply 제갈식 2013.06.01 13:52

    재밌는 시도네요. 그런데 티비수신 카드와 node.js는 티비수신카드 API로 연결하셨나요?

    좀 퍼갑니다. 감사합니다.

    http://cafe.naver.com/iphonediy

    • addr | edit/del Favicon of https://devnote.tistory.com BlogIcon leafbird 2013.06.03 13:15 신고

      아니요. 제가 쓰던 카드의 software는 서로 다른 프로세스끼리의 RPC를 윈도우 메시지를 통해서 하더군요. Spy 툴로 주고받는 메세지를 분석하고 동일한 메시지를 post해서 동작 시켰습니다.

작업 전 임베딩 형식 디자인

image

작업 후 IE9

image

그리고… 작업 후 아이폰4!

세로모드

IMG_1406

가로모드

IMG_1407

 

적용된 영광의 첫 포스팅 링크는 : http://leafbird.tistory.com/506

하하 뿌듯행 ‘ㅂ’)b

Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요