소프트웨어, 누가 이렇게 개떡같이 만든거야 - 데이비드 플랫

2009. 7. 12. 13:05

 

저자 : 데이비드 플랫

역주 : 윤성준

출판사 : 인사이트

원서 : Why Software Sucks... and what you can do about it

출판 : 2008. 04. 04 ( 국내 초판 )

          2006. 00. 00 ( 원서 초판 )

--------------------------------------------------------

 

읽은 날 : 2009. 07. 02 ~ 07. 11

대여 장소 : 삼성 소프트웨어 (부산) 멤버십

 

  소프트웨어, 누가 이렇게 개떡같이 만든거야 ( 부제 : 사용성을 제대로 이해하는 유쾌한 통찰 ). 제목부터가 화끈하다. 우스꽝스러운 책 제목덕에 쉽게 눈에 들어 집어들었고, 마침 Microsoft Evangelist 중 한명이신 Winkey(김영욱님)께서 보낸 메일에서 이 책을 추천해주셨다.

 

  개발자가 아니더라도 누구나 소프트웨어 또는 웹에서 불편한 점을 느껴본 적이 있다. 나 또한 사용자 입장에서

누가 이렇게 개떡같은 프로그램을 만든거야라고 짜증낸 적이 한두번이 아니다. 이 책에선 이같은 예를 들어가면서 사용자에게는 개발라에게로의 피드백을, 개발자에게는 사용자입장에서의 훌륭한 UX를 구현할 것을 요구한다.

 

  이 책을 읽으면서 뜨끔한게, 나도 간단한 어플리케이션을 만들 때, 나름 사용자를 고려한 인터페이스를 구현한다하면서도, '아, 귀찮아. 이정도면 사용자가 알아서 이해하겠지'라고 생각한 적이 많다. 깊이있게 UX를 위한 고민을 덜 했던 것이 사실이다. 사용자는 나같은 개발자가 아니고, 프로그램의 동작 원리같은 것은 다 필요없다. 오로지 잘 작동하는 것, 그것만이 중요한 것이다. 하지만 개발할 때, 여자저차한 이유로 구현이 어렵거나 귀찮은 부분은 사용자들이 불편함을 감수하더라도 어쩔 수 없다는 식으로 넘긴 면이 없지 않아 있었는데, 이 책에게 난 딱 걸린거다.

 

  이번엔 사용자 입장에 서서 보자.

개떡같은 소프트웨어와 웹들. 특히 요즘 여러 웹사이트들에서 ㅅㅂ 소리가 절로 나오는 개떡같은 구조를 찾을 수 있다. 그중 가장 짜증나는 경우가 회원가입을 하는 경우다. 필요 이상의 정보를 요구하는 한국의 회원가입 양식도 저질이지만 보안상의 이유로 비밀번호 설정에 너무 많은 제한을 걸고 있다. 집전화번호 부분이 들어가면 안되고, 아이디랑 비슷해서도 안되고... 아 제기랄, 그러면 비밀번호 표준을 좀 정해놓던가!

 

 

  G마켓 회원가입 페이지다. 옥션 개인정보 유출 사건 이후 G마켓을 이용하려 했는데 이 망할 비밀번호 제한 덕에 회원가입을 포기했다. 보안상의 이유라면서 특수문자는 왜 사용할 수 없는건지. 내가 주로 사용하는 비밀번호에는 특수문자가 들어간다. 그런데 여기서는 특수문자가 들어가서도 안되고, 전화번호나 주민번호, 아이디와 비슷해도 안된단다. 빌어먹을, 그럼 내가 쓰던 몇개의 비밀번호 왜에 또 새로운 비밀번호를 만들어야한다. 새 비밀 번호는 또 어떻게 기억하지? 포스트잇에 써서 컴퓨터 옆에 붙여놔야하냐고!

 

  이제 다른 보안상의 문제에 대해 살펴보자. 이 책에서는 주로 MS를 까고, Google을 칭송하고 있다. Windows의 개떡같은 소프트웨어들에 대한 불평들과 Google 웹페이지의 사용자 편의성에 대한 칭찬들이다.

 

 

  MS의 인터넷 익스플로러로 인터넷 상에서 원하는 파일을 바로 다운받아 실행 할 때 나오는 경고이다. 게시자를 확인할 수 없단다. 그래서 어쩌라고? 내가 이 소프트웨어를 실행하려 하는데 이 경고를 띄운다고 해서 내 의도가 달라질 것이라고 생각하는건가? 이 경고 창에서 게시자를 확인해 주는 것도 아니다. 아무런 정보를 제공해주지도 못하면서 그저 나의 마우스 클릭 (또는 엔터키 한번)을 더 유도하는 꼴 밖에 되지 않는다.

  이렇게 여러 개떡같은 MS의 소프트웨어들에 대해 욕을 한참 하고 있다. 물론 나도 다 공감하고 있던 것들이다.

 

  구글에 대한 칭찬이란 무엇을 말하는 것일까? 구글의 웹페이지 주소는 www.google.com 이다. 그런데 내가 이 URL을 입력하면 구글코리아로 접속이 된다. 내 IP주소가 한국의 IP주소임을 자동 인식하고 www.google.co.kr로 연결해주는 것이다. 혹시라도 내가 영문 또는 다른 언어의 구글사이트로 접속하기를 원한다면 첫페이지에서 바로 타언어 사이트로 이동할 수 있다. 이 기능은 구글 말고도 야후! 등 다른 여러 웹사이트에서도 지원하는 방식인데, 저자는 구글을 예로 들고 있다.

 

  저자는 구글을 칭송했지만 나는 구글을 한번 까봐야겠다. 이 책에는 보안 문제에 대한 언급도 상당히 많은데 이 책이 출판된 후 구글에서 배포한 크롬이라는 웹브라우저에 치명적 보안 문제가 있다.

 

구글 크롬의 옵션 창

 

각 사이트들에 등록된 아이디 목록

 

  구글 크롬의 옵션 창에서 환경설정 탭을 보면 저장된 비밀 번호 보기 라는 버튼이 있다. 이 버튼을 클릭하면 비밀번호 창이 뜨는데 여기서 각 사이트들에 등록된 아이디 목록이 나온다. 이 중에 원하는 목록을 클릭하고 오른쪽의 비밀번호 표시 버튼을 클릭하자. 버튼 바로 아래, 해당 아이디의 비밀 번호가 적나라하게 나온다. 이렇게 되면 크롬은 더이상 완전 개인용 웹브라우저에서 벗어날 수가 없다. PC방에서 크롬을 사용한다고 가정해보자. nProtect같은 해킹 방지툴 따위도 아무 필요도 없게 되는 것이다. 내 비밀 번호는 이것입니다 라고 적나라하게 드러난다. 이 것을 사용자가 비밀 번호를 잊어버렸을 때를 대비한 친절한 배려로 봐야 하는 것일까? 구글에서 이런 초보같은 실수를 할 리는 없을 텐데 말이다.

 

  개발자 입장에서 사용자 입장을 고려할 때, 그 사용자는 개발자인 사용자가 될 것이다. 하지만 실제 사용자는 개발자인 사용자가 아니다. 개발하고는 거리가 먼 일반 사용자일 뿐이다. 이 책은 바로 이것을 말하고 있다. 실제 사용자 입장에서 편리하도록 소프트웨어를 개발하자. 그리고 사용자는 자신의 불편함을 개발자에게 알려야 한다. 그러면 좀 더 나은 소프트웨어 발전이 이루어질 것이다.

박상근 여가생활/책

구글 검색 타임 - 우수상 당첨!

2009. 7. 10. 01:06

구글에서 6월 29일~ 7월 17일까지 퀴즈 이벤트를 진행중이다.

 

이벤트 기간 2009년 6월 29일(월) – 7월 17일(금)
참가 자격 만 19세 이상 대한민국 국민 누구나
참가 방법 본 사이트의 퀴즈 3 문제를 푼 뒤 정답 제출
(퀴즈는 월~금 매일 낮 12시에 업데이트, 정답 제출은 다음 날 아침 8시까지 가능)
시상 방법

대상 - 이벤트 기간 동안 제출된 정답의 누적점수를 합산하여 상위 5명 선발

우수상 - 매일 정답자 중 추첨 (3문제 모두 정답자)
참가상 - 이벤트 기간 동안 정답자 중 추첨
시상 내역

대상 5명 - 100만원 여행 상품권 5명

우수상 300명 (매일 20명씩) - 디지털 액자, 스타벅스 상품권, 노트북 가방,
                                         컴퓨터용 스피커 중 하나

참가상 50명 - 구글 기념품 세트

대상에 대한 제세공과금은 수상자 부담입니다
우수상 상품은 주최사에서 결정합니다.
결과 발표 대상 및 참가상: 7월 24일(금) 개별 통보 및 사이트에 게시
우수상: 이벤트 기간 동안 매일 개별 통보 및 사이트에 게시
   

 

https://services.google.com/fb/forms/searchtime/

 

자세한 소식과 구글 검색 타임 퀴즈 이벤트는 위 링크를 클릭!

 

이 이벤트를 알게 되고, 참여한지 며칠 안되었는데 오늘 아침에 확인해보니 구글에서 메일이 도착했다.

 

설마설마 하면서 구글 검색 타임 참여 페이지에서 당첨자 내역을 확인하니 내 이름이 있다.

 

  으하하 내가 이런 이벤트에 당첨이 되다니.

아슬아슬하게 맨 마지막 당첨자 명단에 올라있다. 이런 행운이...

 

  디지털 액자, 스피커, 스타벅스 상품권, 노트북 가방 중에 노트북 가방에 당첨되엇다. 그냥 일주일 내로 노트북 가방이 배송된다고만 나와있어서 어떤 노트북 가방인지 자세히는 잘 모르겠다. 완전 기대중. 하하. 지금 쓰고있는 15.4인치 노트북용은 가방이 2개나 있어서 필요없다., 12인치 노트북용 가방으로 왔으면 좋겠다. 고급 파우치면 더 좋고. 공짜로 받는 주제에 너무 많은걸 바라는 것인가. 여하튼 뭐가 오든 공짜니까. 정 안되면 바로 팔지 뭐.

 

여러분들도 참여해보세요.

우수상은 매일매일 20명입니다~.

( 7월 말에는 참가상도 준데요! )

박상근 일상다반사

거북이 달린다 - 이연우

2009. 7. 9. 01:38

개봉 : 2009. 06 .11

장르 : 범죄, 코미디, 액션

감독 : 이연우

출연 : 김윤식, 정경호, 견미리, 선우선

상영 : 117분

제한 : 15세 관람가

공식사이트 : http://www.run2009.co.kr/

 

-------------------------------------

 

CGV 진주

관람일자 : 2009. 07. 05

 

  일요일 아침이라 그런지 오전 시간인데도 사람들이 북적거렸다. 특히나 가족단위, 자녀들 손을 붙잡고 영화보러 온 가족단위 관람객들이 대다수다. 아마도 링스어드벤처 애니매이션을 보러 온 사람들인 듯. 아니면 트랜스포머2라던가... 원래 트랜스포머2, 거북이 달린다 중 뭘 볼지 고르려 했는데, 저 수많은 초딩과 함께 트랜스포머2를 보느니 차라리 조용히 영화를 관람할 수 있는 거북이 달린다를 택했다.

 

  타짜에 이어 추격자를 통해 스타급 배우로 인정받은 김윤식이 주연을 맡았다. 추격자에서 보여 주었던 김윤식의 캐릭터 그대로 나온다. 이번엔 형사다. 투캅스의 FM형사가 아니라 느낌이 꼭 강철중 같은 형사다. 뇌물같은 것도 받고, 집안이 그리 넉넉치 않고, 고집 세고... 그런데 싸움은 못한다. 아무래도 강철중은 유도대표 출신이었으니까.

 

  참 철없어 보이는 형사인 김윤식이 현상금이 1억기 걸린 탈옥수에게 천만원이 넘는 돈을 도둑맞게 되고 이 돈을 찾기 위해서 탈옥수를 잡으려는데 매번 실패하는 이야기다. 그냥 총으로 쏴버리면 되는데 그놈의 고집이 문제다. 한판 붙자고, 한판 붙자고. 자기 손으로 꼭 잡는다고 설치는 이야기. 이 과정에서의 안타깝고 우스운 에피소드들이

이 영화를 보는 내내 즐겁게 만든다.

 

  솔직히 작품성이 뛰어나다 뭐 이런건 모르겠고, 그저 영화를 보는 내내 유쾌하게 웃으며 즐겼다.

조조할인이라 싸게 봤고, 같이 영화본 여자친구도 기분 좋게 본 것 같아서 만족한다. 으하하

 

  그런데 거북이 달린다 라는 제목은 어디서 나온거지. 탈옥수라는 토끼를 쫓는 거북이 김윤식인가...

느려터진 거북이지만 열심히 달린다는 의미인가... 뭔가 감독 나름대로 의미있게 지었겠지만 제목을 보고 영화를 짐작 할 수 있는게 아니라 영화를 다 보고나서 제목을 해석해야하는 느낌이다. 영화를 본 사람들 사이에도 의견이 분분하다. 왜일까.

 

  뭐 거북이가 달리든, 토끼가 달리든

나나 잘해야지. 내가 달리자~

박상근 여가생활/영화

킹콩을 들다 (2009) - 박건용

2009. 7. 5. 07:06

개봉 : 2009. 07. 01

장르 : 드라마

감독 : 박건용

출연 : 이범수, 조안

상영 : 120분

제한 : 전체 관람가

공식사이트 : www.kingkong2009.co.kr

 

------------------------------------

 

롯데시네마 진주

관람 일자 : 2009. 07. 04

 

  간만에 여유가 생겨서 뭐 볼만한 영화 없을까 찾아보데, 새로 개봉한 영화 중에 특이한 제목 하나가 눈에 띈다.

킹콩을 들다. 응? ... 킹콩을 왜 드나 했는데 예고편을 보니 역도영화다. 2008 베이징 올림픽 때 수많은 스타 역도선수들이 알려지면서 역도에 대한 사람들의 관심이 급증 했었지...

 

  이 영화도 우생순처럼 실화를 바탕으로 한 스포츠 영화다. 어느 홍보 문구에서는 우생순을 능가할 최고의 감동 드라마라고도 하더라. 정말 우생순을 능가할 영화인지 궁금하기도 하고,  난 인간극장 같은 삶을 주제로 한 다큐들을 굉장히 좋아해서 이 영화를 놓칠 수가 없었다. 누구나 예상할 수 있는 뻔한 이야기 - 힘겨운 환경에서 열심히 노력해서 원하는 바를 이루는 감동 - 이지만 그 뻔한 이야기에도 내가 열광 하는 이유는 나도 노력하면 저렇게 성공할 수 있겠지라는 생각을 다시금 하게 하기 때문이다. 힘들어도 좀 더 노력할 수 있도록 말이다.

 

  아쉽게도 영화를 전부 끝까지 놓치지 않고 다 보지를 못했다. 영화 시작 약 10분 후 쯔음에 화재 비상벨이 울려서 영화를 보다가 우르르 밖으로 대피하는 소동이 있었다. 다행히 실제 화재가 아니라 기기 오작동이었다. 영화를 다 보고 나올때 영화관 측에서 사과의 의미로 평일 관람권을 주더라. 순간 내가 롯데시네마 창원관에서 아르바이트를 할 때, 상영 사고가 나서 내가 관객분들 표 환불해주며 욕들어먹던 생각이 오버랩되었다. 벌써 2년전이다.

 

  내가 놓친 부분은 새로 생긴 역도부의 부원들을 모집하는 부분. 힘든 환경의 학생들을 모아서 역도부를 만든 것 같았다. 내가 다시 영화를 보기 시작했을 땐 이미 첫 대회 출전을 준비하는 장면이었다. 뭐 놓친 부분은 놓친거니 어쩔 수 없지. 무료관람권 받고 뭐... 손해본 느낌은 아니니까.

 

  메달을 따지는 못했지만, 최고의 감동을 보여주었던 이배영 선수가 까메오로 등장하기도 했다. 좀 더 비중있는 역할을 주지, 단순히 역도 연맹 간부급의 역할로 나오던데, 영화에서의 비중은 별로였던 듯. 한 두장면 정도 되던가.

 

  영화는 박영자(조안)가 대회에서 바벨을 힘껏 들어올리는 장면에서 끝이 나고, 그 때부터는 이 영화의 모티브가 된 실제 이야기를 들려준다. 2000년 한 학교의 5명 선수가 대회에 출전하여 15개 메달중 14개 금, 1개 동을 따고, 4명이 3관왕을 차지하는 유래 없을 실제 사건. 이 때의 코치와 선수들은 지금,  과로사한 코치, 현재에도 계속 역도 코치를 하고 있는 다른 코치님들, 그리고 아직 역도를 놓치 않고 있는 선수, 그리고 이젠 역도를 놓고 한 가정의 어머니가 되어있는 사람들...

 

  우생순은 내용이 실화와 거의 비슷했었는데, 킹콩을 들다는 단지 모티브만 가져오고 픽션이 많이 가미되었기에 실제 이야기랑은 많이 다른 부분이 있었다. 영화에선 이범수 혼자 코치로 나오는데 실제로는 여럿 코치가 계셨고, 이범수처럼 역도를 들다가 부상을 당한 코치도 없었다. 여기에 2008 역도 메달 리스트 윤진희 선수가 메달을 따고

인터뷰때 울면서 선생님이 보고싶다고 했던 것까지 잘 배합해서 만들어진 것 같다.

 

  영화를 보고 나오면서...

아, 이 영화 실제 다큐멘터리로 제작되었으면 최고의 감동일텐데 라는 생각이 들었다.

당연 불가능에 가깝겠지만, 이런 다큐멘터리라면 당장 DVD로 구입해서 소장해야 할 것이다.

박상근 여가생활/영화

마더 (2009) - 봉준호

2009. 7. 5. 07:06

개봉 : 2009. 05. 28

장르 : 미스터리, 드라마

감독 : 봉준호

출연 : 김혜자, 원빈, 진구, 윤제문 등

상영 : 128분

제한 : 18세 관람가

공식사이트 : http://www.mother2009.co.kr/

 

----------------------------------------

 

CGV 진주

상영 일자 : 2009. 06. 25

 

  봉준호 감독의 마더가 개봉했다는 소식을 한달여 전부터 들었지만 시험기간이다 뭐다 해서 한동안 극장을 찾지 못하고 있었다. 트랜스포머2 개봉에 밀려서 영화관에서의 마더 상영 횟수가 엄청나게 줄어든 것을 확인하고나니 얼른 내리기 전에 봐야겠다는 생각이 들었다.

  

  마더. 제목부터 일단 끌렸다. 포스터만 봐도 엄마의 엄청난 모성애를 보여주겠다는 포스가 느껴진다.

난 개인적으로 제목이 마더(Mather)가 아닌 엄마가 더 낫지 않았나 생각하는데. 하필 왜 영어제목으로 했을까. 예전에 괴물몬스터라고 이름짓지 않았는데 말이다.

 

  원빈은 모자란 아들, 김혜자는 이 아들을 지극정성으로 보살피는 엄마. 진구는 원빈과 어울리는 동네 양아치.

일단 주연급 배우들의 역할은 이렇고, 내용은 살인범으로 잡힌 아들의 누명을 벗기기 위해 사방 팔방으로 힘쓰는 엄마의 모습을 다루고 있다.

 

  일단 소재 자체가 살인 사건을 다루고, 이 누명을 벗기기 위해 애쓰는 엄마를 다루다 보니, 어느 정도는 공포영화 분위기 또는 스릴러 분위기가 난다. 애절한 모성애가 아니라, 끔찍한 모성애다. 영화에 빠져들면 빠져들수록 모성애를 통한 눈물의 도가니탕과는 멀어져만 갔다. 내가 생각 했던 감동의 모성애는 아니지만, 어휴, 그래도 빠져든다.

 

  당연히 아들이 범인이 아니라 굳게 믿겠지. 엄마니까. 그리고 실제 범인을 찾아 나선다. 아무도 믿지 않고, 직접.

그나마 아들과 친분이 있던 진구의 도움으로 사건의 실마리가 하나씩 풀려나가고, 이제 살인 사건의 진짜 범인이 밝혀지는구나 라고 생각하는 순간 관객에게 돌아오는 반전. 그런데 관객입장에선 그 반전을 그저 받아들이기에는 뭔가 꺼림찍한 느낌을 지울 수가 없다.

 

  영화를 보고나서는 항상 다른 사람들의 블로그에서 영화 리뷰등을 찾아본다. 내가 놓친 부분이 있지 않나 싶어서.

이번에도 역시 마더를 검색해서 다른 사람들의 리뷰를 보는데, 어허 참... 각자에 따라 기가 막한 해석들이 넘친다.

나는 미처 생각도 못하고 넘어갔던 부분, 영화를 서너번은 봐야 내가 찾을 수 있을 법한 세밀한 부분까지 다 찾고, 복선으로 의미를 부여하여, 영화에서 제시되어진 사건의 결말에 다시 한번 반전의 메시지를 던진다. 그럴 듯 하다.

정말 그렇게 해석할 수도 있겠다. 관객 각자의 시각에 따라 영화가 틀려지는 이 영화의 매력.

 

  나는 그저 보이는 것만 보고 있었는데, 아직 영화들을 더 깊이있게 즐기기에는 내 내공이 부족함을 느꼈다.

마더, 멋진 작품이다. 내 내공이 모자라서 더 깊이있께 느끼지 못한 것이 한스러울 만큼.

박상근 여가생활/영화

BlogAPI의 이해와 활용

2009. 7. 3. 06:11

6월 23일.

삼성 소프트웨어 멤버십에 들어오고나서 나의 첫 기술세미나를 가졌다. 세미나 주제는 신입 단기과제때 잠시 다뤄보았던 BlogAPI. 이를 이용하여 MS Windows Live Writer같은 원격 블로깅 프로그램을 만들어보자!
 

BlogAPI에 대해 알아보기 전에 XML-RPC에 대해서 알아볼 필요가 있다. XML-RPC란, RPC(Remote Procedure Call) 프로토콜의 일종으로서, 인코딩 형식에서는 XML을 채택하고, 전송 방식에서는 HTTP 프로토콜을 사용하고 있다. XML-RPC는 매우 단순한 규약으로서, 작은 데이터 형식이나 명령을 정의하는 정도로만 사용하고 있으며, 사양서도 A4 2매 정도로 꽤나 단순한 편이다. 이는 대다수의 RPC 프로토콜 시스템이 수많은 규격을 규정하고, 실제 사용할 때에도 엄청난 양의 코딩을 요구하는 것과 비교하면 눈에 띄는 특징이라고 할 수 있다. 간단히 말해 서로 다른 운영체제, 프로그래밍 언어 간에도 웹을 통해 데이터를 주고 받을 수 있도록 해주는 표준 프로토콜을 의미한다.

 

< XML-RPC 아키텍쳐 >


XML-RPC 중 특히 블로깅과 관련된 기능을 지원하는 것을
BlogAPI 라고 하며, 블로그에 직접 접속하지 않고도 원격으로 포스팅이 가능하고, 포스팅 한 글의 편집, 삭제 등등 블로깅 전반에 걸친 여러 함수들을 제공한다.


BlogAPI
에는 MetaWeblog API, Blogger API, MovableType API 등등 여러 종류의 BlogAPI가 있다. 티스토리 블로그는 위의 세 BlogAPI를 모두 지원하며 각 블로그 서비스마다 지원하는 BlogAPI가 조금씩 틀리다. 여기서는 가장 널리 지원되고 있는 MetaWeblog API를 이용하여, C# 언어로 티스토리 블로그에 원격 블로깅을 할 수 있는 간단한 예제를 구현해본다.


http://www.xml-rpc.net/
에 접속하면 첫페이지 상단에서 XML-RPC.NET Ver.2.4.0 을 다운받을 수 있다. 압축을 풀면 여러 폴더와 파일들이 나오는데, 다 필요없고 bin1_0 폴더 안의 CookComputing.XmlRpc.dll 파일만이 필요하다.




위 그림처럼 using CookComputing.XmlRpc 을 위해서CookComputing.XmlRpc.dll 파일을 프로젝트에 참조시킨다. 이 dll 파일안에 MetaWeblog API들이 포함되어있다. 우리는 그냥 가져다 쓰기만 하면 된다. 
 
 
위에 첨부된 MetaWeblog.cs 파일을 다운받아 프로젝트에 추가하도록 하자. MetaWeblog API를 C#에서 바로 쓸 수 있게 만들어진 클래스다. 와... 이 정도면 그냥 거져 먹는거다. 간단하게 MetaWeblog.cs 의 내용에 대하여 살펴보자. 블로그와 관련된 구조체들이 선언되어 있고, 본격적으로 XmlRpc에 구현된 함수들을 C#에서 맛있게 먹도록 해줄 클래스가 있다. 
구조체 선언부와 클래스 선언부 사이에 보면 [XmlRpcUrl("http://parksk.tistory.com/api")] 라는 부분이 있다. 티스토리 블로그의 경우에는 자신의 블로그 주소 뒤에 "/api"를 붙이면 되고, 이글루스 블로그 같은 경우에는[XmlRpcUrl(http://rpc.egloos.com/rpc1)] 로 수정하면 된다. 자신이 이용하는 블로그 서비스의 BlogAPI 설정을 참고하도록 한다. 이제 클래스 내의 여러 함수 중, 새 글을 포스팅하는 함수인 newPost함수에 대해 자세히 알아보자. 

[XmlRpcMethod("metaWeblog.newPost")] 
public string newPost( 
string blogid, 
string username, 
string password, 
Post content, 
bool publish) 
    return (string)this.Invoke("newPost", new object[] { blogid, username, password, content, publish }); 
}



newPost 함수는 blogid, username, password, content, publish 를 매개변수로 가지며, 각 매개변수를 이용하여 자신의 블로그에 원격 포스팅을 한다. 각 매개변수에 대해서 알아보자.


blogid
각 블로그 서비스마다 틀린데, 티스토리같은 경우 관리자 환경설정에서 BlogAPI메뉴를 보면 84258 등의 숫자로 되어있는 자신의 blogid를 알 수 있다.

username  블로그 아이디
password  블로그 비밀번호. 티스토리는 그냥 실제 자신의 비밀번호를 입력하면 된다.  이글루스는 비밀번호를 직접 입력하지 않고 따로 API Key를 제공받아 password로 사용한다. 아마도 실제 비밀번호가 노출되는 것을 막기 위한 듯

contents 포스팅 될 글의 제목과 내용. 실제 포스팅되는 중심부분
publish 포스팅의 공개 유무


자 이제 C#으로 원격 블로깅 프로그램을 구현할 준비가 다 되었다. 
이제 아주 간단하게 만들어 본... 포스팅 정도는 할 수 있는 코드를 살펴보자.

 

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using CookComputing.XmlRpc; 
using System.Net;

 

namespace blogapi 
    public partial class Main : Form 
    { 
        MetaWeblog mw = new MetaWeblog();


        string username; 
        string password; 
        string blogid;

 

        string postid;

 

        public Main() 
        { 
            InitializeComponent(); 
            mw.Credentials = new NetworkCredential(username, password); 
        }

 

        private void btn_posting_Click(object sender, EventArgs e) 
        { 
            username = tb_blogid.Text; 
            password = tb_blogpw.Text; 
            blogid = tb_blogapiid.Text;

 

            try 
            { 
                Post post = new Post(); 
                post.categories = new string[] { "Test Posts" }; 
                post.title = tb_title.Text; 
                post.description = tb_contents.Text; 
                post.dateCreated = DateTime.Now;

                postid = mw.newPost(blogid, username, password, post, true); 
            } 
            catch (XmlRpcFaultException xrfe) 
            { 
                MessageBox.Show("ERROR : " + xrfe.ToString()); 
                return; 
            } 
            MessageBox.Show("Posting is Completed"); 
        }

      

        private void btn_file_Click(object sender, EventArgs e) 
        { 
            username = tb_blogid.Text; 
            password = tb_blogpw.Text; 
            blogid = tb_blogapiid.Text;

            MediaObjectUrl url =

            mw.newMediaObject(blogid, username, password, mw.GetMediaObject("c:\\me.jpg"));

           

            Post post = new Post(); 
            post.categories = new string[] { "Test" }; 
            post.title = "TEST"; 
            post.description = "<img src=" + url.url.ToString() + ">"; 
            post.dateCreated = DateTime.Now;

           

            string id = mw.newPost(blogid, username, password, post, false); 
            MessageBox.Show("File Upload & Posting Completed"); 
        }

 

        private void btn_del_Click(object sender, EventArgs e) 
        { 
            username = tb_blogid.Text; 
            password = tb_blogpw.Text; 
            blogid = tb_blogapiid.Text;

            try 
            { 
                Post post = new Post(); 
                post.categories = new string[] { "Test Posts" }; 
                post.title = tb_title.Text; 
                post.description = tb_contents.Text; 
                post.dateCreated = DateTime.Now;

                mw.deletePost(String.Empty, postid, username, password, true); 
            } 
            catch (XmlRpcFaultException xrfe) 
            { 
                MessageBox.Show("ERROR : " + xrfe.ToString()); 
                return; 
            } 
            MessageBox.Show("Deleting is Completed"); 
        } 
    } 
}

 

Windows Form 응용 프로그램 프로젝트 중 코드부분만 붙였다.

위 코드중 newMediaObject함수에 의해 리턴되는 url은 포스팅할 때 자신이 올린 파일의 주소이다. 이 주소를 이용해서 이미지 태그를 사용하여 이미지를 올린다던가 파일을 다운받을 수 있게 만드는 것이 가능하다. 여기까지 BlogAPI와 간단한 활용에 대해 알아보았다. C#을 조금이라도 아는 초보개발자라면 누구나 이해할 수 있을 정도로 쉽다. BlogAPI 별거 없다.

<참고자료>
http://msdn.microsoft.com/ko-kr/library/aa905670.aspx

박상근 프로그래밍/.NET (C#)

구글 웹 엘레멘트 이벤트 참여 - 선물 받다!

2009. 6. 27. 07:49

일주일 전에 구글 웹 엘레멘트 이벤트에 참여했더니, Google 담요를 보내줬네요.

이벤트 참여하면 준다던 선물이 도착할 때가 되었는데... 하던 참에 자고 일어나보니 택배 도착!

 

자고 일어나보니 제 책상에 구글코리아 종이가방에 선물이 올려져 있었습니다. 와우!

 

 

작은 책만한 담요주머니에 담겨있네요. 컬러풀한 구글 로고가 선명합니다. ㅎㅎ

 

 

 

딱 무릎을 덮을만한 크기의 담요. 여자분을 치마입고 앉을 때 덮는 용으로 딱 좋은 크기인 듯

이 담요에도 구글 로고가 흰색으로 박혀있습니다. 방금 막 꺼내서 좀 쭈글쭈글한 상태.

 

7월 말까지 계속 행사를 진행한다고 합니다.

여러분들도 다같이 행사에 참여해보아요!

아래 링크는 이번 구글 웹엘레멘트 이벤트 블로그페이지입니다.

http://adsense-ko.blogspot.com/2009/06/google_24.html

 

요 아래 링크로 가시면 구글에서 제공하는 여러 웹엘레멘트들이 나옵니다.

각 엘레멘트들을 클릭하시면 해당 HTML 소스가 나오는데, 이 소스를 복사해서

포스팅시에 붙여넣기 하시면 자동으로 웹 엘레멘트가 해당 포스팅에 표시됩니다.

http://www.google.com/webelements/

 

이렇게 자신의 블로그에 웹엘레멘트를 적용하신 후 이벤트 블로그페이지에 소개된대로

publisher.event@gmail.com 로 적용한 페이지의 URL, 이름, 연락처, 주소 등을 보내면

약 10일뒤에 여러분들도 구글 담요를 받으실 수 있습니다.

 

여러분들도 이벤트 참여하시고 구글 담요 하나 마련하세요~

박상근 일상다반사

티스토리 초대장 배포합니다 [매진]

2009. 6. 21. 00:45

초대장 배포 매진되었습니다. 아쉽게도 메일주소 안남겨주신분은 보내드리질 못했네요. 남는 초대장은 없고 ㅠ_ㅠ 이번에 제가 초대 못하신 분들은, 다른 초대장 배포하시는 분 많으니까 금방 얻으실꺼예요. 다들 즐블로깅~

--------------------------------------------------------------------------------------------------------

이틀 전에 포스팅 했던 글인데, 달랑 한분께서 초대장을 원하셔서, 아직 무려 8장이라는 많은 초대장이 남았습니다.
방금 포스팅된 티스토리 초대장 배포글에 댓글들이 금방 달리는걸 보니, 필요하신 분이 많은 것 같아서 재포스팅합니다.

--------------------------------------------------------------------------------------------------------

요즘 슬슬 블로깅을 즐겨하기 시작했습니다. 기말고사 끝나고 갑자기 붕 떠버린 시간들을 블로깅에 쓰는 듯.

티스토리나 올블로그, 블로그코리아 등의 메타블로그 사이트를 가면 저는 주로 IT 쪽 포스팅들을 구경합니다.

오늘도 IT 디렉토리를 클릭해서 IT관련 포스팅들 중에 뭐 재미난 것이 없으려나 찾던 중에 티스토리 초대장을 배포한다는 포스팅을 봤습니다. 이런거 어제도 두어개 올라왔는데...

 

티스토리 초대장 배포 포스팅을 읽어보면, 최근 초대장이 생겼으니 필요하신분은 댓글을 다세요 라는 식의 포스팅들인데, 실제로 티스토리 초대장이 필요해서 댓글을 다는 사람들이 아주 많은 것이었습니다. 아직 티스토리 블로그를 초대장 없이는 가입할 수 없다는 것, 그리고 티스토리 블로그 초대장을 필요로 하는 사람들이 이렇게나 많다는 것에 깜짝 놀랐습니다. 저는 초대장이 남아돌아서 그냥 방치해두고 있었는데, 이렇게 필요한 사람이 많았으면 진작에 좀 뿌릴것을...

 

 

지금 새벽 4시가 넘었는데... 자기전에 티스토리 초대장 배포 포스팅 하나 합니다.

필요하신 분은 댓글로 메일주소 남겨주세요. 누구든 상관없습니다.

그냥 제가 보내드린 초대장 썩히지 않고 즐겁게 블로깅 하실 분이라면 환영합니다.

9장밖에 가진 것이 없어서, 9명까지만 받겠습니다.

 

지금 자면 해가 중천쯤에 떠야 일어날 수 있을 듯 하네요.

일어나는대로 댓글 확인 후 초대장 배포하겠습니다.

다같이 즐블로깅~

박상근 일상다반사

MS Windows Live Writer 를 이용한 원격 포스팅

2009. 6. 18. 00:47


삼성 소프트웨어 멤버십 신입 단기과제 때의 일이다.

스마트폰으로 찍은 사진을 블로그로 원격 포스팅하는 부분을 내가 담당하게 되어 BlogAPI에 대해서 알아볼 일이 있었다. 팀원중 자기 블로그를 관리해본 경험이 있는 사람도 딱히 나밖에 없었고,  우리가 개발하는 모바일 어플리케이션 상에서 원격 블로깅이 가능하다는 사실이 흥미롭게 다가왔다.

 

그 때야, 내가 가진 스마트폰에서 원격 블로깅을 해야했기에 BlogAPI를 이용하여 직접 코딩했었지만, 사실 이미 완벽에 가깝게 만들어져서 공개되어있는 원격 블로깅 프로그램들이 많이 있다.

 

'뭐하러 귀찮게 그런 프로그램들을 쓸까, 그냥 블로그에 접속해서 직접 쓰면되지' 라고 생각했었는데 엊그제 간만에 포스팅 한건 하려는데 Tistory 서버 점검이었다. 따로 워드 프로그램으로 작성해놓을까 했는데, 나중에 서버 점검 끝나면 또 옮겨서 이것저것 수정도 해야할 것 같고 해서 그만뒀었다. 그 때 내가 원격 블로깅 프로그램을 설치했었더라면 서버 점검중일때 포스팅할 글을 미리 작성해놓고, 서버 점검 후에 바로 포스팅을 했으면 편했을텐데...

 

그래서 방금 막 MS Windows Live Writer 라는 원격 블로깅 프로그램을 설치해서 첫 원격 블로깅을 하는 중이다. 

티스토리에서 직접 쓸때보다 표나 미디어 파일들 삽입하기가 훨씬 간단하고 편리하다. 태그 지정도 바로 가능하고 트랙백까지 바로 보낼 수가 있다. 따로 파일로 저장하는건 아니고 로컬이나 웹 로그에 임시저장이 된다. 그냥 일반 문서 프로그램처럼 글을 쓰다가 방금 웹 레이아웃으로 설정을 맞추니까, 지금 포스팅하는 문서 화면이 내 블로그에서 미리보기 하였을 때 보여지는 화면으로 셋팅이 되서, 내가 포스팅을 하면 어떻게 글이 보이겠구나 라는걸 바로 알 수가 있다. 귀찮게 미리보기를 해보지 않더라도. 오호... 이거 꽤나 매력있는 듯

http://download.live.com/writer
위 링크를 클릭해가면 각 언어별 MS Live Writer를 다운받을 수 있다. 

삽입 메뉴를 보니 표, 사진, 동영상, 지도.... 뭐?! 지도?!!!

지도 삽입을 클릭하니 구글어스 같은 Vitual Earth 라는걸로 내 지역을 찾아서 삽입이 가능하다.

삽입을 하니 바로 아래 처럼 지도보기 라는게 생겼다. 한번 클릭해보자. 어떻게 나오는지...

 

 

음, 그런데 글꼴 색상을 바꾸려다보니, 도구 모음에 글꼴 크기, 색상, 폰트 등은 없다. 폰트 관련하여선 진하게, 기울기, 밑줄 등만 있고, 글꼴 색상을 예로들면, 이를 바꾸기 위해서는 직접 메뉴의 서식을 클릭하여 글꼴 색을 클릭하여 글꼴 색 선택 창을 띄워서 색상을 골라야만 글꼴 색 변경이 가능하다. 게다가 글자를 복사/붙여넣기 하니 그 글에 적용되었던 글꼴 색은 없어지고 본래의 글꼴 색으로 돌아오고만다.

 

이제 글을 슬슬 마무리 짓고 게시하려하니까 또 단점이 보인다.

티스토리에서 게시하기 직전에 저작권 관련이라던가 발행하기 등등의 옵션들은 여기선 건드릴 수가 없다.

뭐 MS Windows Live Writer가 Tistory에 특화된 건 아니니깐 어쩔 수 없이 원격 포스팅 이후에 내 블로그에 접속해서 관리자모드로 로그인 후 설정해야한다는 귀차니즘이 필요하다. 이런 설정 없이 그냥 게시하였을때 이런 사항들이 기본으로 어떻게 셋팅되어있을까.

 

지금까지 간단하게 MS Windows Live Writer에 대한 나의 리뷰를 적어보았다.

이 외에도 MS Word 2007로도 원격 포스팅이 가능하고, Zoundry 라던가... MAC OS용의 ECTO,

그리고 ScribeFire Blog Editor라는 FireFox Plugin 등 BlogAPI를 이용한 수많은 프로그램들이 있다.

나는 아무 이유없이 그냥 MS Windows Live Writer 를 이용했지만, 여러분들은 각자 입맛에 맞는 프로그램을 찾길 바란다.

 

 

 

MS Windows Live Writer 를 이용할 분들을 위한 다운로드/설치 안내

이 글을 보시는 블로거들이라면 당연히 자신의 블로그(웹 로그)가 있을 것이다.

웹 로그 있음을 선택하고 다음!

혹시나 블로그가 없어서 MS의 라이브 스페이스라는 블로그를 만들겠다면 내 스페이스 만들기를 선택하고 다음!

 

자신이 사용하는 블로그에 맞춰서 선택. Tistory, Egloos, Naver 블로그들은 당연히 기타 웹 로그 서비스입니다.

 

자신의 블로그 주소를 적고, 이 블로그에 대한 자신의 관리자 아이디(사용자 이름), 암호를 입력합니다.

 

웹 로그 설정들을 받아옵니다.

 

웹 로그 설정 검색중 갑자기 이런 창이 뜹니다. 원격 포스팅을 하면서 미리보기도 하고 해야하니 를 선택

(싫으시면 아니오를 하셔도 상관없습니다. 각자 기호에 맞게...)

 

방금 자신이 등록한 블로그를 MS Windows Live Writer에서 구분하기 위한 이름을 입력합니다.

그리고 자신의 블로그가 정상적으로 설정되었는지 확인합니다.

 

자 이제 편집화면입니다. 맘껏 원격 블로깅을 즐겨보아요~♬

----------------------------------------------------------------------------------

PS.
MS Windows Live Writer로 포스팅 하고 난 후, 직접 Tistory에 로그인해보니
발행시 공개설정은 그냥 일반 공개로 되어있었고 CCL(저작권)설정은 없었다.
이를 위해서 직접 발행을 선택하고 CCL설정은 상업적이용 불가로 설정했다.
이정도 외에는 따로 설정할 것 없이 깔끔하게 잘 포스팅 된 듯. 만족~

PS2.

티스토리에서 원격 블로깅을 하기 위해서는 환경설정에서 BlogAPI 을 사용하기로 설정해야한다.

아래 화면에서 [사용하기]를 클릭하여 사용중으로 변경하면 BlogAPI 를 사용할 수 있게된다.


박상근 프로그래밍/.NET (C#)

블랙잭 개발환경 구축하기 ( Windows Mobile 6 )

2009. 6. 6. 20:12


막연히 모바일 개발이 해보고싶다라고 생각만 했었는데,
삼성 소프트웨어 멤버십 19기로 합격하고 단기과제를 진행하면서 Windows Mobile 6 기반에서 개발할 기회가 생겼다.

Museum Assitst
박물관에서 각 작품의 해당 정보를 얻기 위해 자신의 스마트폰에서 지정된 작품 번호를 입력하면
해당 작품의 정보를 텍스트, 이미지 뿐 아니라 음성으로 바로 안내를 받을 수 있는 시스템

Museum Assist 에서 내가 스마트폰 개발 파트를 담당하게 되었다.
옴니아같은 스마트폰은 100여만원... 너무 비싸고, 무난히 쓸만한 블랙잭 ( SCH-M620 )을 구매했다..
상태도 깨끗했고 4GB MicroSD 칩 포함해서 직거래 12만원에 ㅎㅎㅎ. 중고매매 처음해봤다.

스마트폰이 준비되었으니 이제는 개발환경을 구축할 차례다.
블랙잭은 기본으로 Windows Mobile 5 가 깔려있는데 Windows Mobile 6 으로 롬업했다.

Visual Studio 2008 은 미리 준비되어 있었고, 스마트폰 개발을 위한 Windosw Mobile 6 SDK 를 다운받자.

http://www.microsoft.com/downloads/details.aspx?FamilyID=06111a3a-a651-4745-88ef-3d48091a390b&DisplayLang=en
Windows Mobile 6 Professional SDK 는 터치가 가능한 스마트폰용이고 블랙잭은 터치가 안되기때문에
Windows Mobile 6 Standard SDK 를 다운받아서 설치하면 된다.

이제 블랙잭을 위한 에뮬레이터 이미지를 다운받아야한다.
일단 윈도우 폼 개발에서의 Form 형태를, 스마트폰 개발에서는 각 폰 형태에 맞게 이미지를 지정해줘야한다.
각 폰마다 액정의 크기도 틀리고, 키패드 배열 등도 틀리기 때문이다.

http://www.microsoft.com/downloads/details.aspx?familyid=38C46AA8-1DD7-426F-A913-4F370A65A582&displaylang=en
위 링크에서 0412/Windows Mobile 6 Standard Images (KOR).msj 를 다운받아 설치하자.


자, 이제 스마트폰 개발을 위한 새 프로젝트를 생성해본다. Visual Studio 2008 을 설치하고
파일 -> 새로만들기 -> 새 프로젝트 를 하면 위 그림과 같은 새 프로젝트 창이 뜬다.
본인은 Visual C# 으로 개발할 생각이었으므로 Visual C# -> 스마트 장치 를 선택했다.
이 스마트 장치가 바로 스마트폰을 의미한다. ( PDA 개발도 포함 )


새 프로젝트에서 이름과 위치 등을 설정하고 확인을 누르면 위와 같은 스마트 장치에 대한 설정 창이 뜬다.
대상 플랫폼을 Windows Mobile 6 Standard SDK로 설정하고 .NET Compack Framework는 각자 자신에 맞게.
장치 응용 프로그램을 선택하고 확인을 클릭해보자.

 
 
좌측이 Windows Mobile 6 Standard SDK, 우측이 Windows Mobile 6 Standard Landscape QVGA 폼 이미지이다.

처음 프로젝트를 생성하면 폼 속성의 FormFackor 가 Windows Mobile 6 Standard SDK 로 되어있으므로
블랙잭 폼 이미지를 사용하기 위해서는 Windows Mobile 6 Standard Landscape QVGA 폼 이미지로 변경한다.


자, 이제 에뮬레이터도 블랙잭으로 설정을 바꿔보자.
프로젝트의 속성에서 장치 탭을 보면 배포 옵션의 대상 장치를 선택할 수 있다.
이것도 폼 속성의 FormFackor 를 변경했던것과 마찬가지로, 위 그림과 같이 바꿔준다.


자 이것이 에뮬레이터 동작 화면이다.
디버깅 하면 저 에뮬레이터가 동작하게된다. 블랙잭과 아주 유사하지 않은가?

이제 블랙잭 폰에 맞춘 스마트폰 개발환경을 마쳤다.

휴... 4달 전 단기과제 시작할 때의 기억을 더듬어 쓰려니 힘들다.
그 땐 정말 아무것도 몰랐는데, 한번 해봤다고 프로젝트 있을 때마다 스마트폰 관련 기능을 넣어서
내 폰으로 어찌어찌 아웃풋을 내보려는 내 모습을 보면 조금 우습기도 하다. 하하하~

내가 지금 이럴때가 아니지. 시험기간인데...


박상근 프로그래밍/.NET (C#)

터미네이터4 - 미래 전쟁의 시작

2009. 5. 25. 08:58

2009. 5. 22
CGV 진주

----------

어떤 영화를 볼까 하다가 제목만 들어도 누구나 아하 싶을 터미네이터4를 보기로 했다.
사실 터미네이터1은 봤어도 2, 3 는 보지도 않았고, 터미네이터1을 본 것도 10여년전이라 내용도 기억이 안나지만
단지 유명하다는 이유만으로 자연스레 이 영화를 고르게 된 것이다.

영화 상영 시간은 2시간짜리인데,
세상에, 2시간이 마치 20분처럼 시간이 빨리 지나갔다.
로봇과 저항군간의 화려한 전투씬들만 봐도, 역시 돈 많이 들인 헐리우드영화가 틀리긴 틀리구나 라고 감탄하게 된다.
난 대규모 전투를 기대했었는데, 소수vs소수의 전투씬들 뿐이라 조금 아쉽긴 했지만 ...

마커스가 사형선고를 받았을 때, 시신 기증을 부탁하던 그 박사는 왜 마커스를 기계화 하려 했을까?
터미네이터로 이용될 것을 알고 일부로 그런 기술을 개발했던 것일까?
존 코너의 아버지와 함께 있던 스타 라는 아이의 정체는 뭐지?
존 코너의 아버지는 왜 청소년으로 존재하고 있을까?

전편들을 안보거나 제대로 이해 하지 못하고 이번 4편을 봐서 그런지
이해가지 않는 부분들이 많았지만
뭐 애당초 스토리를 이해할 생각은 없었다.
내가 원한건 단지 스트레스를 시원하게 날려줄 액션이었으니까.

네이버 영화 리뷰들을 보니까 개봉한지 사흘이 지났는데 평점 8점대에
재밌다는 사람 vs 재미없다는 사람의 비율이 5 : 1 정도 인 듯...
뭐 이런 평점따위 알바인지 뭐하는놈인지 알 수 없는 것들로 인해 조작된다는 느낌이 강해서 믿지도 않는데
아무래도 스토리를 기대했던 사람들은 이번 영화를 조금 안좋게 본 듯 하고
나처럼 화려한 액션을 기대했던 사람들은 이번 영화를 재밌게 관람한 듯 하다.

한번씩은 이런 화끈한 영화를 봐주는 것도 좋은 것같다.
트랜스포머2 도 올해 개봉한다는 것 같던데, 벌써부터 기대되기 시작한다. ㅎㅎㅎ


박상근 여가생활/영화

좋은 코딩 나쁜 코딩

2009. 5. 12. 03:02

저       자 : 박진수
발행 년도 : 2004
출  판  사 : 한빛미디어

--------------------

1학년을 막 마치고, 군대 가기전에 서점에 들러 컴퓨터서적 앞에서 어슬렁 거리다가
막 C를 배운 나같은 사람들이 보면 좋을 것 같은 책이다 싶어서 다음에 사봐야지 하던 책인데
몇년이 지난 후 멤버십 도서관에서 이 책을 다시 보게 되었다.

그 때에 비해서는 코딩 실력이나 경험, 다루는 언어들 등등 많은 발전이 있었지만
내 코드를 남에게 보여준다거나, 남의 코드를 보는 일은 거의 없었기에
코드의 가독성, 효율성에 대해서 깊이 생각해 본 적이 거의 없었던 것 같다.

막상 책을 읽어보니
주석달기, 들여쓰기, 기타 여러 가독성을 위한 한줄 비우기 등까지 포함하여
내가 대부분 잘 하고 있던 코딩법들 이었다.

하지만 완벽할 수는 없는 법!!!
내가 미처 간과하지 못했던 부분들에 대해 알게 된 점들도 많았다.

1. 포인터 연산자를 변수 이름쪽에 붙여서 써라.

1) int* i;
2) int *i;

위 두가지 방법 중, 난 항상 첫번째 방법으로 포인터를 선언하곤 했었다.
int형을 가르키는 포인터 자료형인 i 라는 뜻으로, 나름 내가 알아보기 쉬운 코딩법이라고 생각했다.

int* i, j;

위 코드를 보면 i와 j가 int형 포인터일 것이라고 착각 할 수 있다.
하지만 위 코드는 int형 포인터 i와 int형 j이라는 사실...!

2. 치환 문자열은 반드시 괄호로 씌워라.

#define SORT(n) n*n

위의 매크로 함수를 보면 n*n 부분이 괄호로 씌워져 있지 않다.
이 때

x = SORT( 1+2 );

x 에는 어떤 값이 들어갈까? 3*3 인 9의 값이 들어갈 것이라고 생각했는데
괄호의 부재로 인하여

x  = 1 + 2 * 1 + 2 = 1 + ( 2 * 1 ) + 2

결국 x 에는 5라는 값이 들어가게 되는 일이 발생한다.
아래와 같이 치환문자열은 반드시 괄호로 채우도록 하자.

#define SORT(n) (n*n)

박상근 여가생활/책

7급 공무원

2009. 5. 10. 17:11
2009. 5. 2
진주 CGV

간만에 생긴 여유에, 여자친구와 가볍게 볼 수 있는 영화를 찾던 중
요즘 한참 인기있다는 7급 공무원을 고르게 되었다.
난 액션을 좋아하지만 여자친구가 코믹쪽을 좋아라 해서 ㅎㅎㅎ

영화에서의 7급 공무원은 국가정보원을 말하는데,
군대에 있을때 국가정보원과 아주 조금 관련된 곳에 두어달 있던 경험이 있어서
국가정보원 하면 친근감이 가기도 하고...
아버지께서 국가정보원인 지인도 있고... 뭐 그래서 영화의 소재 자체가 친근하게 다가왔다.

자신의 신분을 속인채 연애를 하는 수지(김하늘),
이에 답답해하다가 결국 그녀 곁을 떠나고 마는 재준(강지환) -> 자기도 국가정보원이 되어 다시 나타난다.

둘은 서로의 신분을 알지 못한 채 지내다가
하나의 연관된 사건을 두고, 각자의 국정원 소속팀이 다 그 사건을 담당하게 되면서 일이 꼬이게 된다.
수지의 팀에서는 재준을, 재준의 팀에서는 수지를 적으로 오해를 하게 되는데...

이러한 과정에서의 우당탕탕 좌충우돌 사건들이 터진다.

자신의 컴퓨터의 데이터 암호를 "팀장님 개새끼" 로 설정해놓는다던가
한국에서는 택시뒤를 따라가는게 제일 빠르다며 재준이 운전하는 택시를 뒤쫓는 범죄조직들 등등
뭐 약간은 억지스럽기도 하지만 빵빵 터지는 코믹요소들이 재밌었다.
아마 그냥 친구들이랑 봤으면 별 재미 없었을 수도 있는 것들인데
여자친구랑 봐서 그런지 옆에서 막 웃으니까 나도 따라 재밌고 으하하

역시 데이트에는 코믹이 제맛인 것 같다.


박상근 여가생활/영화

트랜스포터 - 라스트미션

2009. 1. 21. 12:12

여자친구와의 300일을 기념하는 데이트에서, 볼만한 로맨스 영화 없나 알아아보는데
로맨스는 온데간데 없고 액션이랑 애니매이션 영화들만 난무했다.

결국 그나마 볼만한 액션이겠다 싶어서 트랜스포터- 라스트미션을 보는데
영화가 꼭 스피드 + 007 이다.

좀 머리 벗겨지고 나이든 아저씨가 싸움을 엄청 잘한다.
운전도 엄청 잘한다. 심지어 자전거도 미친듯이 잘 타더라.
총 싸움하면 절대 안맞아. 자기는 백발백중이야.

영화 내용은 누군가가 자신한테 물건 배달을 의뢰하면서 주인공의 팔목에 폭탄팔찌를 달아준다.
주인공의 차와 25m 이상 떨어지면 대폭발하는 팔찌다. 물론 팔찌 열쇠는 의뢰인이 가지고있다.
이 차가 아우디란다. 꽤 좋은 차라는데 나는 차에는 별 관심이 없어서 모르겠고,
그냥 좋더라. 속도도 금방 올라가고 빠르더라. 튼튼하고.
차 추격전이 벌어지는데 자신 차 한쪽을 들어올려서 바퀴 2개로만 운전을 하더니만
대형화물차 사이를 지나간다. 왕년에 레이서였던가...?
기관총에 여러발 맞아도 차는 뭐 끄떡도 없다.

007에 본드걸이 있듯, 여기도 여자 조연이 한명 나오는데
어휴... 주근깨가 엄청난다. 피부병 걸린 여자인 줄 알았네
서양에선 주근깨 있는건 귀엽게 좋게 본다던데 이건 뭐 피부를 덮었더만.
미의 기준이 다르긴 다른가보더라.

스펙타클한 액션씬들이 있음에도 불구하고
나와 내 여자친구는 중간중간 졸아가면서 ㅋㅋㅋ
금방 영화는 끝나고, 어휴 ... 이런 300일 기념일에 액션영화는 역시나 어울리지 않는 것 같다.
트랜스포머 인줄 알고 보던 여자친구에게 좀 미안하기도 하고 ㅋㅋㅋ

박상근 여가생활/영화

09년(上) 삼성전자 SW멤버십 기술면접

2009. 1. 17. 02:40

얼떨결에 삼성 소프트웨어 멤버쉽 1차 서류전형을 합격하고 기술면접을 보게되었다.
서류 전형 합격(8일) 후 기술면접(15일)까지 남은 기간은 1주일.
이 기간안에 최대한 빨리 프로그램을 마무리 짓고 PPT 발표 자료를 만들고, 발표 연습을 끝내야했다.

TOEIC 단어 스터디, 어학원 TOEIC R/C강좌를 일주일간 그만두고서까지 매달렸지만
결국 면접보기 하루 전날 까지 버그와의 싸움을 하느라 코딩을 멈출 수가 없었다.
틈틈이 PPT를 손보면서 발표내용을 살짝 정리해놓은게 천만 다행이었다.

서류전형에 합격할 줄 알았더라면 서류전형 지원하고나서 1주일동안 좀 놀지 않고
열심히 작품 완성도를 더 높였을텐데, 고작 서류전형 하나 내놓고 큰 일 하나 치룬듯 쉬었던게 부끄럽다.

나는 부산멤버쉽에 지원했기에 같이 서류전형에 합격하여 15일에 면접을 보는 동기들이랑 하루 전에 올라와
기술면접실에 직접가서 내 노트북이랑 연결도 해보고 바로 근처에 모텔을 잡았다.
면접실에선 고등학교 컴퓨터동아리 선배를 만났었다. 18기로 있던데... 이런데서 아는 사람을 만날줄이야.
군대서 고등학교선배를 만났을때처럼 반갑더라. ㅋㅋㅋ 뭔가 좀 안정되는 느낌

모텔인데 인터넷도 되고 벽걸이형 TV에... 시설이 좋더라. 두명 쓰는 방에 4만원줬는데 괜찮은 듯.

새벽 늦게까지 기술면접 준비를 하느라 잠을 못잤다.
PPT발표 준비랑 시연 준비,
그리고 삼성소프트웨어 기술면접 후기를 검색했더니 C,C++ 의 기분문법 같은 수준의 질문도 많이 하는 것 같길래
내 프로그램과 관련하여 후킹이라던가 .NET FRAMEWORK 의 구조와 특징, 델리게이트 등등...
예상 질문에 대한 대답 등을 연습하다보니 어느덧 새벽 3시. 그리고는 기절하듯 잠들어버렸다.

아침 9시에 첫번째로 면접을 보게 된 친구가 한시간도 채 지나지 않아 면접을 보고 모텔로 돌아왔다.
면접관이 프로그램에 대해서 구체적으로 캐묻기도 하고 그런다는데 어휴, 이때부터 나도 좀 긴장되기 시작한다.
다들 오전에 면접인데 나만 오후2시 30분... 나도 얼른 면접 보고 끝내고 싶은데.

어영부영 시간은 가고 점심을 먹고서 다들 먼저 진주로 내려가고,
내 순서 30분 전에 면접실에 도착했다.
어제 만났던 고등학교 선배가 1층에서 도우미를 하고 계시다가 격려 해주시고
마침 건물에서 나가시던 우리과 선배 두분도 만나서 잘 하라고 격려 해주시고...

흠흠.
면접대기실에 갔었는데 다른 사람들이 자기 면접 시간 제대로 안지키고...
뭐 급한일 있다고 먼저 본다고 하고...
내 차례 되서 들어갔더니만 어제 랜선 준비해달라고 말도 했었고 오늘 와서 물어보니 셋팅도 되있다더니만
면접실 들어가니깐 되있기는 뭐 -_- 어제 그대로더만... 랜선이 바로 준비가 안되서 난 순서 밀리고...
결국 그날 맨 마지막 면접자가 되버렸다.

드디어 내 차례가 되어 면접실에 들어가고, 면접 시작!
준비한 PPT 발표는 순조롭게 진행되었다.
중간중간에 두어개 질문을 하시기는 했는데 뭐 무난하게 대답했다. 뭘 질문하셨는지는 기억이 안나고 ㅡ.ㅡ
모르는 부분에 대해서는 아는 정도까지만 대답을 하고 더 자세히는 모른다고 솔직히 말했다.

내가 이제 내세울 부분들은 열정과 가능성.
그 부분을 강하게 어필하기 위해 목소리도 나름 씩씩하고 자신있게 내고, 태도도 당당하게 보이려 애썼다.

시연 도중에 USB메모리를 해제하면 바로 경보음이 발생해야하는데 USB메모리 연결을 했는데...
아무런 반응이 없더라. 연결하고 다시 해제하고... 이러길 두어번.
정적이 흐르고...
이러다 갑자기 윈도우메시지가 한번에 몰려서 전달된듯 버벅이더니만 경고음이 나온다.
휴우ㅠ_ㅠ

내 프로그램과 관련하여 계속 질문을 하셨는데 대부분 다 자신있게 내 프로그램에 대해 설명했었고
음소거 상태일때도 경보음이 발생되냐고 질문하시길래 난 음소거가 볼륨이 0이 되는 개념인지 알고
당연히 볼륨을 최대볼륨으로 하여 경보음을 발생시키기때문에 음소거를 하더라도 상관없다고 말했다.
보여달라 하시길래 음소거를 하고 시연해보니... 경보음이 안난다 -_-
음소거가 볼륨을 0을 만드는게 아니라 아예 사운드를 차단하는 듯... 휴우 =3 ...

기술 외적인 질문으로는

Q : 준비해온 작품 외에 다른 프로젝트 경험은?
A : 학부과정으로 C, C++, JAVA를 배우면서 했던 과제 수준의 프로젝트 외에는 없고
     이 프로그램이 처음으로 프로그램에 대한 내 열정이 깃들여진 처녀작입니다.

Q : 학교가 진주인데 부산까지 다니려면 힘들지 않을까?
A : 휴학하고 멤버쉽생활에 더 집중하고 멤버쉽 수료후 복학하여 학교를 졸업하겠습니다
( 난 이때까지 멤버쉽은 1년이나 2년정도 수료를 하는거지 학교생활과는 별개인줄 알았다 -_- )
Q : (웃으시며) 여긴 그런 곳이 아니다. 학교생활도 같이 병행해야한다.
A : 그렇다면 수업을 월화수요일 등으로 몰아서 들으면서 멤버쉽생활을 하여 지장이 없도록 하겠습니다.

Q : 경상대 컴퓨터과라면, CSSM 이라는 동아리 소속인가?
A : 동아리라기보다는 과 내의 소모임입니다.
Q : SSM을 통해 삼성전자로 들어오려는 목적으로 변질될 가능성도 있을 것 같은데.
A : SSM이 창의력과 열정 들을 보고 멤버를 뽑듯이 CSSM(Computer Science Software Membership)도
     그러한 프로그래밍에 대한 열정 등을 보고 선발하며, 그런 가능성을 최대한 배제시키려 노력중입니다.

음... 이 질문들 말고 다른 질문들도 있었던 것같은데 잘 기억이 나지 않는다.
나머지는 다 내 작품과 관련된 질문들이었으니까.'

굉장히 편안한 분위기에서 면접을 볼 수 있었다.
내가 잘 모르는 부분에 대해서는 설명해주시며 가르쳐주시기도 하고,
내 프로그램이 더 발전하기 위핸 방향도 제시해 주시기도 하셨다.
난 이상하게 다른 문법적이나 기술적인 용어 등에 대한 질문은 없었다. 다행인건지 불행인건지...

시간이 어떻게 흘렀는지도 모른채 면접은 끝났다.
홀가분한 기분.
완벽했다고는 할 수 없지만 나름대로 최선을 다 했던 면접이었다.
이정도면 내가 할 수 있는 만큼 한 것 같다.
즐거웠고, 재밌고, 유익한 경험이었다.

고등학교 선배가 나 면접 끝날때까지 기다려주시고 밥까지 사주셔서
밥먹으며 이런 저런 멤버쉽관련 이야기를 나누고 ... 날이 저물어서야 진주로 내려왔다.

진인사 대천명

최선을 다 했다.
이제는 조용히 결과를 기다릴 뿐.
다음주 목요일. 얼마 머지 않았다.

그래도, 사람 욕심은 끝이 없는건가.
좋은 결과가 나왔으면 좋겠다 ㅎㅎㅎ

박상근 프로그래밍/Laptop Guard

삼성 SW멤버쉽 1차 서류전형 결과 안내

2009. 1. 8. 17:01
어잌후,
열심히 노력해서 준비해서 서류전형 지원을 했지만 아직 실력이 많이 모자라다고 생각했기에
이렇게 합격할 것이라고 큰 기대 안하고 있었다.

발표 예정 시각인 5시가 되길 기다리다가 4시 30분에 무심코 메일확인을 해보았는데

받은편지함(1)
09년(上) 삼성전자 SW멤버십 1차 서류전형 결과 안내

심호흡 한번 하고 ....


아 이제 딱 일주일 남았구나.

나는 할 수 있다.

박상근 프로그래밍/Laptop Guard

노트북 도난 방지 12/22

2008. 12. 23. 09:39
동아리에서 단체로 삼성소프트웨어멤버쉽(SSM)에 지원하는 날이 바로 코앞으로 다가왔다.
1월 4일까지.

한달간을 기말고사에 투자하느라 코딩은 커녕, Visual Studio 도 못켜본 것 같은데
내 프로그램이지만 기억도 가물가물한 것이...ㅠ_ㅠ
부랴부랴 작품설명과 시스템구조도를 그린다는 것이 어휴. 하루종일 걸려서 겨우 완성했는데
선배한테 검토받고나니 이것저것 고칠것이 한두가지가 아니다.


내 생에 첫 시스템 구조도다.
하하하, 내가 봐도 뭔 말인지, 복잡하구나

얼마 남지 않았다.
아직 손 볼 것도 많고... 어휴

그래도 최선을 다한다면 후회는 없다!

박상근 프로그래밍/Laptop Guard

내 서버에 제로보드 설치하기

2008. 11. 24. 05:59

고등학생때 1년짜리 싸구려 웹호스팅을 얻어서 제로보드를 설치해봤던 기억이 어렴풋이 남아있다.
아니, 대학 1학년때였던가...?
여하튼 대략 5년전 일인지라 가물가물한데
이번에는 내가 직접 구축한 리눅스서버에 제로보드를 설치를 해본다.

내 서버에는 미리 APM을 설치해뒀다. ( apache2, php5, mysql )

[제로보드] 홈페이지에 가면 뭐 더이상 설명이 필요없을 정도로 설명이 잘되어있다.
초보자를 위한 동영상 설명까지 있을정도로.

일단 제로보드 최신 버전을 다운받아 설치하고 메뉴얼을 조금씩 참고하면서
내 서버의 user 계정 ( localhost/~user ) 에 제로보드를 올렸는데
제로보드를 처음 실행하면 나오는 설정화면이 나오질 않는다.

도대체 왜?

혹시나해서 user계정이 아닌 localhost에 제로보드를 올려보니 설정화면이 잘만 나오는데
사용자계정에 올려서 접속하면 이건 대체 뭐때문인지 Interval Server Error 페이지가 뜬다.

이유인 즉,
apache2 를 설치할때 사용자계정마다 public_html 을 두어 따로 웹페이지를 만들려면
뭔가 설정을 해야 했듯이
이번에는 apache2 의 mod-rewirte 기능을 활성화시켜야 한단다.

$sudo gedit /etc/apache2/sites-enabled/000-default

000-default 파일의

<Directory "/var/www">
...
...
<Directory>

부분을 찾아서 아래처럼 내용을 고친다.
 
<Directory "/var/www">
Options FollowSymLinks
AllowOverride FileInfo
</Directory>

그리고 mod_rewirte 를 설치하고 활성화하는 명령어를 입력한다.

$sudo a2enmod rewrite
$sudo /etc/init.d/apache2 force-reload

이제 user계정에 제로보드를 설치할 수 있게 되었다.
http://localhost/~user/zbxe 에 처음 접속을 하면 제로보드 설정화면이 뜬다.

이제부터 다시 제로보드 홈페이지의 메뉴얼을 참고하면서 설정을 완료하면 끝!

박상근 리눅스

노트북 도난방지 1122

2008. 11. 22. 08:36

bool existAttachment = true
private void SendLog()                                  // 메일 보내기
        {
            try
            {
                MailMessage message = new MailMessage();

                message.From = new MailAddress(tb_smtp_id.Text + "@gmail.com", "상근이", Encoding.UTF8);
                message.To.Add(new MailAddress(tb_smtp_id.Text + "@gmail.com", "You", Encoding.UTF8));

                message.Subject = "Concentrate on THIS LOG of Labtop which was stolen by thief";
                message.SubjectEncoding = Encoding.UTF8;
                message.Body = "This is the thief's log\n\n";
                message.Body += strLog;
                message.BodyEncoding = System.Text.Encoding.UTF8;
                message.Priority = MailPriority.Normal;

                if (existAttachment == true)
                {
                   
String file = "scene.jpg";
                    Attachment attachment = new Attachment(file, MediaTypeNames.Application.Octet);
                    message.Attachments.Add(attachment);

                }

                SmtpClient smtp = new SmtpClient("smtp.gmail.com");
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtp.Credentials = CredentialCache.DefaultNetworkCredentials;
                smtp.EnableSsl = true;
                smtp.UseDefaultCredentials = true;
                smtp.Credentials = new NetworkCredential(tb_smtp_id.Text, tb_smtp_pw.Text);

                smtp.Timeout = 20000;

                smtp.Send(message);
            }
            catch (FileNotFoundException ee)    // 파일 없으면 파일첨부 안하고 보내기
            {
                MessageBox.Show(ee.ToString());
                existAttachment == false;
                SendLog();
                return;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
                return;
            }
            finally
            {
                MessageBox.Show("Sending Log has been complete");
            }
        }

전에 전역후킹 키로그 파일을 메일로 보내는 것까지 구현했었는데
이번에 내 프로그램에 웹캠을 이용한 촬영기능까지 넣으면서 jpg파일을 메일로 첨부할 필요가 생겼다.
노트북 절도자의 얼굴까지 사진으로 찍어서 메일로 오면 그야말로 금상첨화!!!

파일 첨부를 해서 메일을 보내니 자꾸 전송이 실패되길래 왜 안되나 하고 종일 삽질했었는데
알고보니 내가 파일명을 잘못적었었다. 이런 멍청한 -_-

원래 로그만 전송할땐 2~3초 정도 버벅거렸었기에
'우와 달랑 1kb도 안될 로그를 전송하는데 이렇게 버벅이면 100kb넘는 그림파일은 얼마나 버벅이려나 했는데'
한 5초 정도밖에 버벅이지 않았다. 뭐 버벅인다기보다는 마우스 움직임이 조금씩 끊기는 정도의...(ㅠ_ㅠ)a

메일 전송 테스트하다가 방금 알게된건데...
IP주소까지 전송시키게 해놨더니 공유기의 내부 IP가 날아온다. 192.168... -_-
외부IP를 저장시켜서 전송시켜야겠다.
이건 또 어떻게 한담~ 휴우~

박상근 프로그래밍/Laptop Guard

메일서버 구축하기 - postfix

2008. 11. 19. 04:48

 

SSH, FTP 등의 구축은 손쉽게 해왔는데 메일서버는 시간 날 때마다 조금씩 손봐왔음에도 불구하고...
실패였다. 왜 안되지?!
그냥 뭐 내 서버 내의 계정들끼리만 주거니 받거니...

내가 하고 있는게 메일서버 구축이 맞는건지도 제대로 모른채
무작정 검색하고 따라하고 검색하고 따라하기의 반복.

새벽 3시경. 드디어 성공했다.
아, 바로 이거 말하는 거였구나.
으이구. 머리가 나쁘면 손발이 고생이라더니,
뭔지도 모르고 무작정 덤벼든게 잘못이었다. 이렇게 쉬운걸 어휴...

결정적으로 메일서버를 운영하려면 도메인이 필요하다는 것을 모르고 있었던 것이다.
그걸 알게되고서야 부랴부랴 메일서버를 지원하는 무료계정을 찾아 만들고서
다시 우분투에 메일서버를 구축하였다.

메일서버를 지원하는 무료계정은 www.dnip.net 에서 회워가입 후 받을 수 있다.
나는 pskalyber.dnip.net 으로 계정을 받았으며, 아래 설명에도 내 계정을 사용하여 예를 들었다.


이제 우분투에 기본으로 설치되어있는 에볼루션메일을 이용하여 메일을 보내고 받을 수 있도록 설정해보자.
에볼루션메일을 실행 후, 편집-기본 설정에서 [추가]를 눌러서 새 메일 계정을 추가한다
pop은 pskalyber.dnip.net 으로 설정했고 smtp는 pskalyber.dnip.net 으로 하니까 메일 송신이 안되길래
smtp대신에 sendmail을 하니까 메일 송신이 되었다. (왜 그런지는 나도 잘 ...-_-)
여하튼 일단 잘 보내지니까 왜 그런지는 나중에 생각해볼 일이고.


메일 송수신이 잘 되는 것을 확인!!!
OK!!!

복잡했다. 특히나 postfix설정 부분이 엄청 복잡했다.
저걸 다 저렇게 설정을 해야되는 것 같지는 않은데. 분명 쓸떼없는 설정 부분도 있겠지만
내가 일일이 그런 부분을 찾아볼 시간은 없었기 때문에 그냥 시키는대로 다 해버렸다.

투자한 시간은 많은데, 아무리 해도 안되길래 엄청 짜증났었지만
그래도 성공하고 보니 그만큼 보람이 있다.

아 좋아!

<참고 사이트>
https://help.ubuntu.com/community/PostfixBasicSetupHowto
https://help.ubuntu.com/community/Postfix



박상근 리눅스