2013년 이후로 글이 없는 이 블로그는 사실 죽은건 아니었습니다. 그 때 저는 기술적인 글을 대체 나 같은 쪼렙이 써서 뭐하겠느냐는 생각에 이 곳은 방치를 해두고, 다른 블로그에 글을 써왔었습니다. 


근데 이제 그냥 여기다가 글을 쓰는게 맞는 것 같아요. 요새 흥미 있는 두 가지 주제를 먼저 공부해가면서 글을 쓰려고 합니다.


안드로이드 개발 그리고 파이썬 !


항상 무언가를 만든다는 행위는 저의 스트레스를 줄여주더라구요. 게다가 회사 일이 엉망진창이어도, 늘 희망차게(?) 퇴근 이후를 꾸며갈 수 있겠다는 생각이 듭니다.


언제나 그렇듯, 살살... 앞으로 가보도록 하겠습니다.


덧붙임으로, 이 티스토리 스킨이 좋긴 한데 카테고리가 표시가 안되어 수정해야겠습니다. 헛헛...

HackerNews 보다가 우연히 보게 된 사이트입니다. 정규 표현식을 다이어그램으로 보여주는 사이트인데요. Finite automata였던가로 바꿔줍니다. 아래 보시면 아시겠지만 많이 예쁘게 뽑아주는 편이죠. 


http://www.regexper.com/


사실, 정규식을 자주 쓰지는 않는데요, 쓸 때마다 유용함을 엄청 느끼면서 사용하고 있습니다. 

(최근 Tcl을 공부해서 그런지도 모르겠습니다)


그러던 와중에 이런 사이트를 발견해서 너무 예쁘게 뽑아주는걸 보고 반해서 포스팅하게 되었습니다. 저는 이 사이트와 관계가 없어요(...) 그래도 홍보하는거라고 보시면 되겠습니다. 사이트가 워낙 심플하고 인상적이어서... 



(github는 여기)



그나저나 일년에 하나씩 글을 쓰는 것 같은데, 블로그에 글 쓰는 버릇이라도 들여야 할 것 같습니다. 안 그러면 아주 바보가 되는 느낌이 들 것 같아서 그렇습니다(T^T) 


종종 새 글을 올릴 수 있으면 좋겠습니다. 새 글에서 뵙겠습니다!

 

$ adb devices를 쳤을 때,

???? 이러면서 디바이스의 권한이 없다고 하는 경우가 있습니다.

 

이 때는 디바이스를 인식하고 있지 못하는 겁니다. 그러나, 리눅스가 어떤 존재입니까. 하면 다 됩니다. 그것도 텍스트 파일로 설정 고친다는 좋은 특성이 있죠.

 

$ lsusb

Bus 002 Device 017: ID 0461:4d15 Primax Electronics, Ltd Dell Optical Mouse

Bus 002 Device 014: ID 05c6:9025 Qualcomm, Inc.

Bus 002 Device 007: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port

Bus 002 Device 005: ID 413c:2003 Dell Computer Corp. Keyboard

Bus 002 Device 003: ID 1a40:0101 TERMINUS TECHNOLOGY INC.

Bus 002 Device 002: ID 8087:0020

Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 001 Device 013: ID 04e8:685e Samsung Electronics Co., Ltd

Bus 001 Device 004: ID 05ac:1293 Apple, Inc.

Bus 001 Device 002: ID 8087:0020

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

해보면 뭐가 많습니다.

위의 퀄컴은 사용하고 있는 개발보드, 아래는 갤S2입니다. 둘다 인식을 못해서, 인식 시키려구요.

 

자, 파일을 새로 만들어 줍니다.

 

$ sudo vi /etc/udev/rules.d/ii-android.rules

(사실 ii-android.rules 아니고 99-였는데;)

 

이름이야 어찌되었던 하여튼 거기

 

SUBSYSTEMS=="usb", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="685e", MODE="0666"

SUBSYSTEMS=="usb", ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9025", MODE="0666"

 

라고 적습니다. 그냥, 색깔 맞춰서 적어주시면 됩니다. 설명도 적당히 되어있네요. (idVendor! idProduct!)

 

그리고선

 

adb kill-server

sudo adb start-server

adb devices

 

해보시면 제대로 출력되는걸 보실 수 있습니다.

 

그리고 기타 등등 adb 명령에 대한 것들은

(영문)

http://developer.android.com/guide/developing/tools/adb.html

(블루아이님 정리, 한글)

http://blog.naver.com/PostView.nhn?blogId=blueeye2424&logNo=70116985833

 

참고 하시면 되겠습니다.

안드로이드를 빌드하기 위해서 이런저런 세팅을 하다가 이건 정리해놔야겠다 싶어서 적어보겠습니다.

일반적으로, 우분투 10.04를 설치하고 나면 sun-java6-jdk 설치가 잘 안됩니다. 이게 있어야 안드로이드가 빌드가 된다던데.
결국 두번의 실패를 딛고 마지막에 성공했습니다.
급한 분들은 맨 밑만 보면 됩니다.


뭐 일단 아래 이런 패키지는 그냥 설치하실 수 있으니까 그러려니 하면서 설치 해 줍니다.

$ sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev  ant gcc-multilib g++-multilib

 
이 메시지를 보게 됩니다.

$ sudo vi /etc/apt/source.list
에서 캐노니컬에 해당하는 라인의 주석을 빼줍니다. 대략 45, 46라인이겠네요.

$ sudo apt-get update

<$ sudo apt-get install sun-java6-jdk
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
sun-java6-jdk 패키지를 사용할 수 없습니다.  하지만 다른 패키지가 참조하고 있습니다.
해당 패키지가 누락되었거나 지워졌다는 뜻입니다. 아니면 또 다른 곳에서
패키지를 받아와야 하는 경우일 수도 있습니다.
E: sun-java6-jdk 패키지는 설치할 수 있는 후보가 없습니다

아, 짜증이 밀려옵니다. 아마도 OpenJDK를 밀기 위한 것인듯 한데. 

또 찾아봤습니다. (참고:http://ammoguy.springnote.com/pages/354463)

sudo add-apt-repository "deb http://archive.canonical.com/ubuntu maverick partner"

추가해줍니다. 아까 한 sudo apt-get update 도 잊지 마시고...
또 안됩니다. 다시 찾았습니다 -_-^
왜 다른 분들 방법이 제겐 안 통하는지. (아마 시간의 힘으로 패키지에서 빠져나간 탓이 제일 클거라 생각합니다.)

그래서 결론은 이 세줄입니다. (참고:http://blog.daum.net/pharosee/14853351)

sudo add-apt-repository ppa:sun-java-community-team/sun-java6

sudo apt-get update

sudo apt-get install sun-java6-jdk



출처는 각각 명시했습니다. 
 
문득 이클립스(Galileo)를 켤 때마다 오류가 하나씩 생깁니다. 아무래도 너무 드문드문 켜서 그런 것 같습니다. 이번에는 SDT 관련 문제입니다.

Android DDMS    16.0.1.v201112150204-238534
Android Development Tools    16.0.1.v201112150204-238534
Android Hierarchy Viewer    16.0.1.v201112150204-238534
Android Traceview    16.0.1.v201112150204-238534

에 대해서 아래의 오류가 발생합니다.

Cannot complete the install because one or more required items could not be found.
  Software being installed: Android Traceview 16.0.1.v201112150204-238534 (com.android.ide.eclipse.traceview.feature.group 16.0.1.v201112150204-238534)
  Missing requirement: Android Traceview 16.0.1.v201112150204-238534 (com.android.ide.eclipse.traceview.feature.group 16.0.1.v201112150204-238534) requires 'org.eclipse.ui 3.6.2' but it could not be found

이클립스 UI 3.6.2라는 것은 이클립스의 버전 그 자체를 의미합니다. 그래서 메뉴중에 [Help] - [About Eclipse SDK]에서 버전을 확인했습니다. (참고:http://forjustin.egloos.com/1070695)


3.5.2네요! 갈릴레오 버전이죠 :$

그래서 업그레이드를 실시했습니다. 헬리오스로...

아래의 이 방법을 쓰려다가 그냥 쿨하게 삭제 후 재설치 했습니다.

To upgrade installed software, do the following:

  1. Help > Check for Updates.
  2. If updates are found, proceed through the install wizard and click Finish at the end.
  3. If you are upgrading the platform itself, when you are prompted to restart it is strongly recommended to do so. A restart many not be required when updating other features, but always select to restart if you are unsure.

Note, to upgrade from Galileo(3.5) to Helios (3.6), you first need to add the Helios software repository as follows:

  1. Window > Preferences > Install/Update > Available Software Sites.
  2. Click “Add”.
  3. Enter
  4. http://download.eclipse.org/releases/helios
  5. Click “Ok”.

쿨하게 시냅틱 패키지 관리자에서 삭제 후 재설치 (참고:문허니님 블로그)

http://www.eclipse.org 에 접속하여 맘에 드는 놈을 다운 받습니다. 저는 Eclipse for Java EE Developer 버전을 다운 받았습니다. 그냥 Java Developer 버전도 상관은 없을것 같았지만. 왠지 찝찝해서 제일 패키지 많이 포함된걸로 받은거지요 :)

1. 압축을 풀고 디렉토리를 이동시킵니다. 압축 푸는건 유저 권한으로 되지만 나머지는 슈퍼유저로 해야합니다. 앞으로 쭉~ 슈퍼유저 권한을 사용합니다.

tar xvzfp eclipse-jee-helios-SR2-linux-gtk-x86_64.tar.gz

mv eclipse /usr/local/
cd /usr/local
chmod +x eclipse/

2. 스크립트를 만듭니다. 실행하려면 있어야겠죠?

(파일을 만듭니다)
vi /usr/bin/eclipse

(파일 내용)
#!/bin/sh
export ECLIPSE_HOME="/usr/local/eclipse"
$ECLIPSE_HOME/eclipse $*

(권한 지정)
chmod 755 /usr/bin/eclipse


3. 아이콘을 만드는 작업을 합니다.
(데스크탑 메뉴의 아이콘을 만듭니다. 파일 생성)
vi /usr/share/applications/eclipse.desktop

(파일 내용)
[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE
Exec=eclipse
Icon=/usr/local/eclipse/icon.xpm
Terminal=false
Type=Application
Categories=GNOME;Application;Development;
StartupNotify=true

4. 그리고는 우분투 메뉴중 [프로그램] - [개발]에 아이콘이 생긴걸 확인합니다.
만약 실행이 제대로 되지 않는다면 권한 문제일 가능성이 큽니다. chmod 같은 명령이 제대로 들어갔는지 확인합니다.

그리고는 ADT 설정을 다시 해줘야 합니다. 아흑. ADT부터 다운 받습니다. SDK는 일단 새로 받긴 했는데 쓰던걸로 쓰려고 -ㅅ- 꼼수를 씁니다.

[Help] - [Install Software..]에 https://dl-ssl.google.com/android/eclipse/를 추가하고나면 Pending이 끝나고 목록이 보입니다. 그냥 설치합니다. 이 과정을 거치면 이전에 쓰던 설정이 모두 남아있는 것을 보실 수 있습니다.

DDMS나 Debug에 문제가 생겨서 Perspective가 안 뜨는 상황이 있을 수는 있지만... 리셋해주면 잘 뜹니다!!

즐거운 코딩 하시길 :D



이건 이 나름대로의 쓸모가 있기 때문에 적어두겠습니다. 환경은 우분투 10.10입니다.

흔히 터미널을 띄워서 응용 프로그램을 실행하면, 터미널 안에서 실행되는 애들은 괜찮은데 - 창을 그대로 사용하잖아요 - 그렇지 않은 프로그램들은 터미널에서 프로세스로 도느라 터미널은 못 씁니다. 그래서, 준비했습니다.

바로 Alt + F2 를 누르면 실행 창이 뜹니다. 바로 Windows에서의 '실행'창과 같은 역할을 하는 창입니다. 여기에서 프로그램을 경로 지정해서 실행시킬 수 있어요. 예를 들어 일전에 포스팅한 DrRacket이라던가... ('ㅅ')

쉘 명령도 먹겠죠? 그래서 참조 한 사이트(Kevin님 블로그)에서는 gnome-terminal을 실행할 수 있다고 해 두셨습니다.

뭐 기타 등등도 먹습니다.

덧붙임으로 좀 더 내용을 적자면, Ctrl + Alt + F1~F7 까지는 tty1~7까지입니다. 눌러보면 깜짝 놀랍니다. 검정색 터미널 화면으로 바뀌어서. startx 해도 안 먹어요. tty7에 해당하는 Ctrl + Alt + F7이 바로 X-window 환경으로 돌아오는 단축키 입니다.(F7로 안되면 F8이 되는 환경도 있다고도 하네요)

이제... 안 까먹겠죠? 그럴거에요.
제목에 적은대로 SICP(시습이라고 읽습니다)이라는 굉장히 유명한 프로그래밍에 대한 책이 있습니다. 사실은 프로그램의 구조와 같은 것에 대한 책입니다. MIT, 서울대, 카이스트에서 교재로 사용된 책이라고 하는데요.

우연한 기회에 소프트웨어에 대한 감을 잃지 않고자 공부를 시작하게 되었습니다. (연구실 나왔는데 놀긴 싫고 한건 이유가 아님) 근데 이게 LISP라는 언어를 사용합니다. 정확히는 Scheme라는 LISP의 방언이라고 합니다.

근데 요거 64Bit 환경하에서는 실습환경 설치하기가 만만치가 않습니다. 다만, 64Bit 환경에서는 그 지원이 미흡하다는 이유가 있더군요. 저는 우분투(Ubuntu) 10.10을 쓰는데 패키지가 없습니다. mit-scheme이라고 하는 패키지가 있다는데. 64Bit에는 없어없더라구요.

그래서 대안을 찾아 헤맸습니다.

그 방법이라는건 DrRacket이라는 과거 DrScheme이었던 LISP 툴(?)을 쓰는겁니다. 이건 환경도 제공합니다. 따라서 http://www.racket-lang.org/ 요기 들어가서 Download에서 알맞는 버전을 받습니다. 우분투는 debian lenny 정도 받으면 되겠습니다. 제 랩탑에서는 저정도면 되더라구요.

그리고는 권한을 바꿔줍니다. 대강 chmod를 사용해서 744정도로 Execute 권한만 넣어 주시면 되요. 쉘 코드라서 설치할 땐 실행 권한이 필요하니까요.

다음으로는 블라블라 하는데 경로랑, 링킹에 관련한 겁니다. 입맛대로 골라줍니다.

그리고는 설치 경로(제 경우엔 /usr/racket)에 bin(그러니까 /usr/racket/bin)에 들어가서 ./drracket을 실행하면 환경이 뜹니다. 위에 보이는 창이 정의창(Definition window)이고 아래가 명령창입니다.

일단은 언어를 설정을 해야하는데요, how to do program의 고급 학생(...)정도로 일단 세팅을 하고 실행을 해서 적용합니다. 그 후에 여기에서 #lang planet neil/sicp 이라고 정의창에 쓰고 실행을 시켜주면~ 알아서 언어 설정을 받아옵니다. 그럼 환경을 재실행 해보면 언어 세팅에! SICP이 뜹니다!!

세팅이 잘 되었으면 정의창에 (define size 2) 쳐 보시고~ 명령창에 size 쳐 보세요!

2가 뜨면 성공입니다 :)


DRY(Don't repeat yourself) 게시물입니다.

안드로이드 프로젝트는 생성할 때 적어줘야 하는 것이 많은 편입니다. 이클립스로 개발을 잘 안해봐서 그런지 좀 낯설어기도 하구요.

그래서 일단 정리를 좀 해두려고 합니다. 외워도 외워도 안 외워지는건 써봐야 한다는 지론에 따라서요.

Application Name은 말 그대로 앱 이름입니다.
Package Name은 패키징 될 때의 이름입니다. 이 것을 가지고 다른 데에서도 접근할 수 있는 것으로 알고 있습니다. 자바의 import 관련한 실험(?)도 일전에 해봤는데 그 프로젝트 찾으면 포스팅 해봐야겠네요.

그리고 Activity는 안드로이드의 4대 특징 중 하나인데 까먹었-_-습니다.
하여튼 이것도 이름을 지정해야 합니다. 얘는 띄어쓰기가 들어가면 안되더군요. 아무래도 파일 이름에 관련되기 때문인 것 같습니다.

Package Name의 경우가 좀 특이한데, 이 패키지 이름은 겹치지 않게 하는게 중요하기 때문에 회사의 경우에는 자신의 홈페이지 주소를 거꾸로 써서 적용을 시킨다고 들었습니다. (www.google.com = com.googlr.~~)

그래서 개인적으로 개발을 하는 저는 pe.util.(blabla) 라고 패키지 이름을 정하고는 합니다.

이렇게 정리 해 놓으면 될 것 같네요.

아래는 제가 전에 실습했던 화면의 캡쳐입니다.


블로그를 부지런하게 하지 않는 사람의 아주 게으른 포스팅. 일이 있어야만 쓴다는 사실이 조금은 마음에 들진 않지만(스스로도)... 우분투 10.04에 대한 포스팅입니다.

원래는 노트북을 가지고 다니면서 쓰는데 모니터가 솔직히 너무 좁아서 -_- 집에 있는 컴퓨터 모니터에 연결해서 써보기로 했습니다. 하지만! 해상도가 제대로 나오지 않는 불상사가 발생했죠.

그러니까, 1368 x 800 쯤의 16:9 해상도가 뜨고, 모니터는 '알 수 없음'으로 인식하더라구요. 이 모니터 19인치짜리에 1280이 최적인데... 4:3이고.

그래서 xorg.conf(/etc/X11/xorg.conf)를 수정하려고 디렉토리에 접근하니까 그 파일이 없었습니다(!!!).

구글링 결과, 다음과 같은 글을 찾았습니다.

출처는 아마도 한국 우분투 포럼이었던 것 같구요.

일단 Ctrl + Alt + F1을 눌러서 tty1로 이동합니다. 터미널이죠. 로그인이 필요하면 사용자 이름으로 로그인 하시면 되구요.

$ sudo service gdm stop
$ sudo Xorg -configure

를 입력하면 현재 디렉토리 위치에 xorg.conf.new가 생깁니다.

$ sudo mv ~/xorg.conf.new /etc/X11/xorg.conf
해서 옮겨주시고, 다시 시작합니다. 시스템 혹은 gdm을..

$ sudo shutdown -r now
혹은
$ sudo service gdm start

위와 같이 해 주면, 그 뒤로는 인식을 합니다. 모니터 인식하는거 보니까 Goldstar company... 이게 엘지 플래트론인데, 아마도 내부적으로는 역시 골드스타 인가봅니다.

그래서 만족하면서 사용하고 있지요. 큰데서 보니까 좋기는 합니다. 헛..

여러가지 이유가 존재하겠지만 제 경우에는

sudo apt-get install tftpd tftp xinetd

하고서

설정파일을 만들어 주고
service tftp {

    socket_type = dgram
    protocol = udp
    wait = yes
    user = root
    server = /usr/sbin/in.tftpd
    server_args = -s /tftpboot
    disable = no
    per_source = 11
    cps = 100 2
    flags = IPv4
   
}

/etc/init.d/xinetd restart 해 주고 나니

Error code 2: Access violation

(울컥)

찾은 해결책은 아래와 같습니다. (/etc/inetd.conf를 수정합니다)
저 파일의 내용물-_-중 tftp관련 줄을 #(주석처리) 해 주고

tftp dgram udp wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot(혹은 원하는 디렉토리..)
라고 하고 다시 xinetd restart.

그러면 됩니다. get, put 모두모두. 놀라운 삽질력으로 해결 <-


+ Recent posts