2010년 1월 21일 목요일

Android 에서 Handler와 Message 란?

Android(안드로이드) 개발시 사용되는 Handler(핸들러)와 통신에 사용되는 Message(메시지)에 대해서 알아보자.

 

핸들러란?

 

안드로이드의 시스템은 사용자가 작성한 UI에서 빠른 응답을 요구하고 있다.

만약 5초 이상의 응당이 없을 경우 최악의 경우 작성된 프로그램이 강제로 종료가 되는 경우도 발생할 수 있다.

이런 상황을 방지하기 위해서 시간이 오래걸리는 작업이 필요한 경우 두가지의 방법으로 해결을 할 수 있다.

첫번째는 시간이 오래걸리는 작업은 서비스로 만들어서 처리하는 방법

두번째는 새로운 쓰레드로 처리를 하는 방법

 

두번째 방법으로 쓰레드를 생성해서 데이터 처리등의 시간이 오래걸리는 작업을 지원하기 위한 클래스가 존재하는데 그것이 핸들러(Handdler)이다.

 

간략하게 요약을 해보면

  • 백그라운드 쓰레드 생성을 위한 가장 유연한 방법이다.
  • 인스턴스 생성시 자동으로 안드로이드가 실행 관리한다.
  • 메시지를 전달받게 되면 호출 되는 handlerMessage()에 실제 처리내용을 구현한다.
  • post(), postDelayed()를 통해서 인자로 실행하고 자하는 Runnable객체를 전달할 수 있다.
  • View단에도 Runnable객처를 인자로 전달가능하고 이럴경우 코드가 심플해지는 경우도 있을수 있지만 Handler를 추천한다.

 

 

메시지(Message)란?

 

UI등에서 실제로 처리를 담당하는 쓰레드로 데이터를 전송하거나 작업을 요청하기 위해서 전달하는 객체이다.

 

  • 핸들러로 전달되는 객체이다.
  • 전달된 메시지는 메시지 Queue를 통해서 핸들러가 가져다 사용한다.
  • 메시지를 전달하기 위해선 핸들러의 obtainMessage()호출해서 메시지 풀의 메시지를 획득해서 전달해야한다.
  • 메시지를 전달하기 위해서는 sendMessage() 등을 사용한다.

 

메시지 전달 방식의 종류

  • sendMessage() - 큐의 마지막에 메시지를 삽입한다.
  • sendMessageAtFrontQueue() - 큐의 맨앞에 메시지를 삽입한다.(우선처리)
  • sendMessageAtTime() - 장비기동시간을 기준으로 삽입한다.(SystemClock.uptimeMillis()참고)
  • sendMessageDelayed() - 특정시간만큼 지연 삽입한다.

 

 

2010년 1월 20일 수요일

TOW(Track On Windows) 사용하기 - 설치

개요

 

프로젝트를 관리하기 위한 툴들은 많이 존재한다.

그중 무료소프트웨어로 Track가 있는데 이 프로그램의 설치가 만만치 않다.

하지만! 국내 개발자가 원샷으로 설치가 가능하게 패키징해서 배포하고 있다.

바로 TOW(Trac On Windows)라는 패키지로 요기(http://trac.tistory.com/)에서 확인할 수 있다.

 

공식 블로그 : http://trac.tistory.com/

 

이제 설치해보도록 하자

 

설치하기

 

1. 다운로드

   TOW 0.2.2.a - http://sourceforge.net/project/showfiles.php?group_id=192688&package_id=254120&release_id=579291

   위의 링크에서 Standard-ko버전을 다운받도록 하자

 

2. 설치

  기본적으로 TOW는 C드라이브에서 작동되도록 설정되어 있으나

  필자는 C드라이브에 개발 프로그램 설치를 하지 않으므로 D드라이브에 저장한다.

 

  a. 다운받은 파일을 D드라이브의 압축을 풀어준다.(D:\TOW)

 

  b. TOW폴더에서 set-tow.bat파일을 열어서 아래와 같이 수정한다.

  

set TOW_HOME=D:\TOW

 


  c. 아파치의 설정 변경을 한다.

  

D:\TOW\Apache\conf\httpd.conf 파일을 연다.
"C:/TOW" 를 "D:/TOW" 로 치환한다. (16개 항목이 치환된다.)
저장한다.

 

 

  d. 아파치의 포트를 변경한다.(Option)

      TOW는 기본적으로 80포트를 사용하나 필자의 경우 8080포트는 이미 사용중이므로 8000포트로 변경한다.

      (포트8080을 쓰려는 유저는 이번 항목은 무시한다.)

 

D:\TOW\Apache\conf\httpd.conf 파일을 연다.
"Listen 8080"  부분을 "Listen 8000" 으로 변경한다. (53Line)
"ServerName tow.localhost:8080"  부분을 "ServerName tow.localhost:8000" 으로 변경한다.(142Line)
저장한다.

 

  e. 기본 템플릿 파일을 변경한다.

 

D:\TOW\Setup\TracRepo\Projects\HelloTOW\conf\ 폴더의 *.tpl 파일을 연다.(4개파일)

"C:\TOW" 를 "D:\TOW" 로 치환한다. (2개파일 2개 항목)
"C:\\TOW" 를 "D:\\TOW" 로 치환한다.(4개파일 8개 항목)

 

 

  f. Repository 경로를 변경한다.

 

D:\TOW\create-svn-repo.bat 파일을 연다.
"C:/TOW" 를 "D:/TOW"로 치환한다.(1개항목)
저장한다.

 

 

  g. Python 경로를 변경한다.

      이부분은 무시하도록 하자. Python의 경로 변경이 정상적으로 되지 않는다.

     추후 변경 방법이 생기면 보충하도록 하겠다.

      경로 변경은 레지스트리를 손대야 하므로 아래 2개의 레지스트리 파일을 만들어서 수정한다.

      (레지스트리 파일은 첨부파일 참고)

      PortablePython.reg

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Python]
[HKEY_CURRENT_USER\Software\Python\PythonCore]
[HKEY_CURRENT_USER\Software\Python\PythonCore\2.5]
[HKEY_CURRENT_USER\Software\Python\PythonCore\2.5\InstallPath]
@="D:\\TOW\\Python"
[HKEY_CURRENT_USER\Software\Python\PythonCore\2.5\InstallPath\InstallGroup]
@="Python 2.5"
[HKEY_CURRENT_USER\Software\Python\PythonCore\2.5\Modules]
[HKEY_CURRENT_USER\Software\Python\PythonCore\2.5\PythonPath]
@="D:\\TOW\\Python\\Lib;D:\\TOW\\Python\\DLLs;D:\\TOW\\Python\\Lib\\lib-tk"

 

      PortablePythonHome.reg

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment]
"PYTHONHOME"="D:\\TOW\\Python"

 

 

  g. Python폴더 위치 이동

 

D:\TOW\Python 폴더를 C:\TOW\Python 으로 이동한다.

 


  h. D:\TOW의 start-tow.bat 를 실행한다.

 

 

  i. 브라우저를 열고 http://localhost:8000/projects 를 열면 HelloTOW의 기본 프로젝트 페이지가 있으면 된다

 

 

 

3. 서비스 등록

  부팅후 서비스를 등록해서 처리해야 하나 필자는 서비스 등록이 귀찮아 패스한다.

  관련 링크는 아래와 같다.

 

이상으로 설치에 관련된 내용을 마치며

다음 번에는 기본적으로 사용할 프로젝트의 대한 설정을 해보도록 하겠다.

 

2010년 1월 11일 월요일

틀리기 쉬운 한글 맞춤법

잊기 쉬운 / 틀리기 쉬움 맞춤법

  1.  모음이나 ㄴ받침 뒤에 이어지는 렬/율 은 열/율로 표기한다.
    • 백분율, 투표율, 규율 /  합격률, 성장률, 확률
    • 나열, 분열 / 작렬
  2. 않/안의 구분
    • - '아니하다'의 준말
    • - '아니다'의 준말
      • 좋지 않다 / 안 좋다
  3. 어떻게 / 어떡해의 구분
    • 어떻게 -  방법
    • 어떡해 -  어떻게 해의 준말
      • 어떻게 먹니?  / 어떻게 해야할지 모르겠다
      • 힘들어서 어떡해 ( = 힘들어서 어떻게 해)
      • 나 어떡해 ( = 나 어떻게 해)
      • 어떻하지? / 어떻해

 

 

 

 

2010년 1월 6일 수요일

2010년 독서 목록(15권)

롱테일 법칙/스가야 요시히로/재인 - ★☆☆☆☆

 

동급생/히가시노 게이고/창해 - ★★☆☆☆

  평 : 역시 초창기의 작품이라 그런지 근래의 작품과는 다르게 특유의 날카로움이 적게 나타난다. 어떻게 보면 연결이 된 사건들이지만 치밀하지 못한 억지의 느낌을 지울 수가 없다.

 

개를 훔치는 완벽한 방법/바바라 오코너/다산책방 - ★★☆☆☆

  평 : 발상은 좋은 느낌이었다. 이기심과 순수한 어린소녀의 내면을 잘 표현했다. 하지만 청소년추천 도서 답게 너무 뻔한 등장인물과 다소 심심한 결말이 아쉽다.

 

  마음속 어디에선가 양심이라는 게 나타나 '안 돼, 나쁜 짓이야'라고 자꾸만 속삭였지만, 나는 그것 역시 마음 안쪽 깊숙한 곳에 밀어 넣어버렸다.

 

  떄론 살아갈날보다 살아온 날들의 발자취가 더 중요한 법이야. 내게 돈이 필요한 것보다 세상이 내 힘이 필요로 할 때가 더 많으니까

 

 

개밥바라기별/황석영/문학동네 - ★★☆☆☆

  평 : 아버지 세대의 풍경을 느낄 수 있게 하는 문체와 50년대의 흑백 풍경 사진을 떠오르게 하는 내용이었다. 또한 세대간의 차이를 느낄 수 있게 하는 책이었다. 내가 잘 모르던 그시절의 풍경과 느낌, 문제가 색달랐다. 그리고 그 세대들 또한 나름대로의 젊음과 방황을 가지고 삶을 살아온 것을 보면 묘한 동질감을 느꼈다. 하지만 작가가 전달하고자 하는 의미를 쉽게 이해하지 못한건 나의 문학적 소양이 부족하기 때문일까?

 

  뭣 땜에 살아야 하는지 모르겠어. 그냥 온 세계가 무심해. 나만 빼놓고 저희끼리 굴러가.

 

  어디에서나 기억은 거기 있는 사람과 함께 남는다.

 

  목마르고 굶주린자의 식사처럼 맛있고 매순간이 소중한 그런 삶은 어디에 있는가

 

  사람은 씨팔...... 누구든지 오늘을 사는거야

 

  고해 같은 세상살이도 오롯이 자기의 것이며 남에게 줄 수 없다는 것이다.

 

  잘 나갈 때는 샛별, 저렇게 우리처럼 쏠리고 몰릴 때면 개밥바라기.

 

모방범1,2,3/미야베 미유키/문학동네 ..ing

  평 : 너무 두껍고 길다. 비정상적인 환경 속에서 불안한 정서를 가진 자들의 사회. 그런 모습속을 보면서 삼류드라마에 몰입해서 느끼는 분노를 느낀다. 그런 분노를 느끼는 나  또한 불안한 면을 가지고 있을 지도 모른다. 모방범! 창의력대장이 되고 싶은가?

 

오 해피데이/오쿠다 히데오/재인 - ★★★☆☆

  평 : 무료하고 따분하다고 생각되는 일상생활속에서 찾을 수 있는 소소한 즐거움을 다시 한번 생각해볼 수 있었다.

 

걸/오쿠다 히데오/북스토리 - ★★★☆☆

  평 : 여자들이 겪을 수 있는 이야기들을 단편식으로 엮어 놓았다. 특정한 사건에 대한 여자의 입장에서 여자의 속마음을 기술한 방식이 독특했던.. 하지만 난 남자라 공감은 그닥 가지 않았다.

 

은행원 니시키의 행방/이케이도 준/media2.0 - ★★★☆☆

  평 : 승진과 진급에 매달리는 은행원의 애환을 통해서 조직 사회의 무서운 일면이 잘 드러난다

 

모든 게 다 우울한 밤에/나카무라 후미노리/이룸 - ★☆☆☆☆

  평 : 우울하다

 

개미 1,2,3 /베르나르 베르베르/열린책들 - ★★★★☆

  평 : 초반의 굉장한 흡입력. 아직 다 읽지 않았지만...

 

1Q84 1,2/3 무라카미 하루키/문학동네 - ★★★★☆

  평 : 이어지지 않는 인연이 과연 공기번데기를 통해서 이어질까? 아니면 슬픈 기억으로 남을것인가? 아니 그 인연의 공간조차 다 꿈인건가?