리눅스 & 안드로이드2011. 12. 9. 14:10
Putty 터미널에서 한글이 깨지는 경우, 아래와 같이 설정하면 해결 된다.

Change Settings... > Window > Translation 메뉴에서,
"Received data assumed to be in which character set:" 아래의 drop down 목록 가운데 UTF-8을 선택

 
Posted by 세월의돌
리눅스 & 안드로이드2011. 12. 3. 14:13
이클립스에서 변수나 클래스 등 키워드(keyword)를 더블클릭(double click)하면, 동일한 키워드를 모두 하이라이트(highlight) 해주는 기능이 있었는데, 어느 순간부터 이 기능이 사라져 버렸다.

뭐가 문제인지 몰라 그냥 불편하게 사용하고 있다가, 꼭 필요한(?)상황이 있어서 구글링을 좀 해 보았다.

다음은 그 해결 방법!

(1) 이클립스 메뉴의 Window > Preferences를 선택한 후 열리는 설정 윈도우에서, 좌측의 선택 항목에서 Java > Editor > Mark Occurrences를 선택. (또는 상단의 검색입력필드 ' type filter text'에 Mark Occurrences를 입력)

(2) 우측에 나타나는 체크박스들을 선택(활성화)하면 된다.


Posted by 세월의돌
리눅스 & 안드로이드2011. 12. 1. 20:04
안드로이드 Activity의 onTouchEvent에서 pinch zoom in&out을 구현하는 방법은 다음과 같다.

@Override

public boolean onTouchEvent(MotionEvent event) {

final int pointerCount = event.getPointerCount();

final int actionMasked = event.getActionMasked();


if (pointerCount == 2 && actionMasked == MotionEvent.ACTION_MOVE) {

final float distX = event.getX(1) - event.getX(0);

final float distY = event.getY(1) - event.getY(0);

final float distance = (float) Math.sqrt(distX * distX + distY * distY);

float diff = 0;


if (mLastDistance == Float.MIN_VALUE) {

mLastDistance = distance;

} else {

diff = distance - mLastDistance;

mLastDistance = distance;

}


return true;

} else if (actionMasked == MotionEvent.ACTION_POINTER_UP) {

mLastDistance = Float.MIN_VALUE;

}

}


diff 에 MotionEvent.ACTION_MOVE 이벤트 마다, 실제 pinch gesture에 의해 변환된 차이가 저장된다.
이 값을 이용하여 적절히 활용하면 된다.

실제 거리가 아닌 비율이 필요하다면, 제곱근 연산을 제거할 수 도 있겠다.

Posted by 세월의돌
리눅스 & 안드로이드2011. 12. 1. 15:01
이클립스의 E-git 플러그인이 svn 플러그인 정도의 기능을 지원하고 있다면 아무런 문제가 안되겠지만,
E-git을 사용하면서 엄청난 삽질을 하고 좌절을 하고 결국에는 접어 버렸다.

Local에서 svn으로 소스를 관리하고, 중간중간 git에 소스를 반영하는 방식으로 하려고 한다.
아직 git을 잘 몰라, 얼마나 강력한 기능이 있는지는 잘 모르겠지만, svn만큼 사용성이 편리하지는 않은 것 같다.
(단순히 gerrit system을 이용한 review 기능이 훌륭(?)한 것이라면... 좀 별로-_-;)

어쨌든, Git 여러줄로 commit 메시지를 작성하는 방법은 몇 가지가 있는 것 같다.

1. (Linux) bash의 특성(?)을 이용한 방법
  - 메시지 작성 시 따옴표(")를 시작하고, 닫지 않은 상태에서 엔터를 입력하면 여러줄로 작성이 가능하다.

user@domain:~$ git commit -a -m "
> Commit Title
> Description
> Etc.
> "

 
2. vi(m)를 이용하는 방법
 - commit 할 때, -m "..." 옵션을 추가하지 않으면 기본적으로 vi(m)을 실행한다.
 - 단,  $GIT_EDITOR, $VISUAL, $EDITOR 환경변수와 .gitconfig 파일의 core.editor 설정변수가 정의되어 있지 않아야 한다.
   이 말은 곧, 위의 환경변수나 설정변수를 설정하면 다른 편집기도 사용할 수 있다는 이야기 인듯
 - vi(m)을 이용할 때의 장점은, 편집이 쉽다(?)는 것도 있지만, 현재 commit의 변경파일 목록이
    자동으로 추가되어, commit 메시지를 작성할 때 이용할 수 있다는 것이다.

Posted by 세월의돌
리눅스 & 안드로이드2011. 11. 21. 14:08
iPhone3GS를 사용하다가 옵티머스Q2로 바꾼지 대략 한 달 가량이 되었다.

나름 만족하며 사용하고 있지만, 배터리가 빨리 소모되는 문제는 어느 단말이나 비슷한것 같다.
그 주요 원인들 가운데 하나는 바로 종료를 시켜도 계속 실행되는 App.들.
많은 사람들이 이런 부분들을 수정하기위해 루팅을 하기도 하는 것 같다.

그래서 루팅을 생각 해 봤는데, 소심한 사람인지라 지웠다가 문제가되면 어쩌나 하는 생각에 지우지도 못하고 있다.
그러다 발견한게 Optimize Toolbox 라는 안드로이드 시스템 관리 프로그램이다.
가장 마음에 드는것은 자동실행되는 App.을 제어할 수 있다는 것이다. (다만 superuser 권한이 필요하다)

안드로이드 마켓 링크: https://market.android.com/details?id=cn.opda.a.phonoalbumshoushou



다양한 기능을 지원하고 있는 것 같은데, 문제는 언어!
마켓에서 다운로드를 하면, 중국어로 된 프로그램이 설치되어 버린다.
(요즘 즐겨 보고 있는 '뿌리깊은 나무'의 세종대왕께 새삼 고마운 마음을 느낀다)
개발자가 2.1.0 버전을 마켓에 올리면서 중국어로된 버전만 지원을 하기로 했나보다.

그래서 찾아보니 영어로 된 버전이 있었다. 버전은 좀 낮은 2.0.9 버전!
(중국어보다 영어에 익숙하다는것... 한글은 지원이 안된다는 것... 좀 씁쓸하네;;)
영어버전 다운로드는 아래 링크를 참조!

off market Android apps: http://androidunderground.clanteam.com/androidfiles/files/optimize_toolbox.html
Direct file download link: http://androidunderground.clanteam.com/androidfiles/files/optimize_toolbox_2.0.9.zip

Posted by 세월의돌
리눅스 & 안드로이드2011. 11. 8. 17:27
Eclipse에서 처음 보는 에러를 발견.
프로젝트가 아예 단말로 설치도 되지 않아서 난감했다.
FindBugs plug-in을 설치한 직후라서, 그게 원인인가 고민도 했지만, 바로 구글링 시도.
아래와 같은 답변을 찾았다!

Delete your debug certificate under ~/.android/debug.keystore (on Linux and Mac OS X); the directory is something like %USERPROFILE%/.android on Windows.


The Eclipse plugin should then generate a new certificate when you next try to build a debug package. You may need to clean and then build to generate the certificate.


즉, 개인 홈 디렉토리의 .android 디렉토리에 위치한 debug.keystore 파일을 제거하면 된다.
아마도 에러 문구의 "Debug Certificate expired"는 debug.keysotre의 유효기간이 만료 되었다는 의미인듯.

Posted by 세월의돌
리눅스 & 안드로이드2011. 8. 31. 11:24
요즘 진행중인 업무에서 생성한 클래스가 너무 많고 방대하다 보니, 가면 갈 수록 나 자신도 전체 구조를 보기가 너무 힘들어 져 버렸다.
그래서 클래스 다이어그램을 출력해서 큰 그림을 좀 보면서 작업해야겠다고 결심하고, Eclipse에서 사용할 수 있는 UML 관련 plug-in을 좀 찾아 보았다.

처음 찾아본건 Soyatec의 eUML2 였는데, 이건 등록을 하지 않으면 20개의 element만 추가할 수 있는 제약이 있었다. -_-;

그래서 다시 찾아본것이 ObjectAid UML Explorer!
이 plug-in은 class diagram은 그냥 사용할 수 있는 것 같고, sequence diagram은 license가 있어야 되는 것 같다.

설치는 다음과 같이...

1. Eclipse의 Help > Install New Software... 메뉴를 실행한다.


2. Dialog Window에서 우측 상단의 Add... 버튼을 누른 후 아래 내용을 입력하여 설치하면 된다.

* Name: ObjectAid UML Explorer
* URL: http://www.objectaid.com/update






사용방법은,

1. Eclipse에서 File > New > Others(CTRL+N)를 실행하고,
2. ObjectAid UML Diagram > Class Diagram을 선택하여 *.ucls 파일을 생성한다.
3. 새로 생성되어 추가된 (ucls 파일이 열린) 윈도우(?)에 프로젝트의 소스파일들을 drag & drop 하면 끝!
(보통의 화면 구성에서 보면, 왼쪽에 프로젝트 탐색윈도우가, 오른쪽에 소스 윈도우가 있으므로, 왼쪽에서 *.java 파일들을 SHIFT 또는 CTRL로 여러개 선택 후, 화면의 오른쪽 소스 윈도우에 열려있는 ucls 파일로 drag & drop!)

[2011.10.03 추가]

왜 그런지 모르겠지만, 소스 윈도우에 열려있는 파일(.java 등)을 추가하려고 하면 잘 안되는 경우가 있다.
그런 경우, ucls 파일을 제외한 열려있는 모든 소스 윈도우를 닫고 추가하면 잘 되는 듯.
이건 eclipse의 특성 때문에 발생하는 문제인 것 같다.

Posted by 세월의돌
리눅스 & 안드로이드2011. 8. 11. 10:11
Google에서 RenderScript 강화 하는듯 하다.
이미 HoneyComb이 릴리즈 되면서 부터 RenderScript도 공식적으로 사용할 수 있게 되어 있다.

그런데 관련된 자료가 많지 않다.
강화 한다고 하면 Google에서 대대적으로 자료를 공개하고 널리널리 전파해야 하는거 아닌가?
Microsoft와는 너무도 다른 행보...

아직 준비가 덜 되었을 수도 있고, 정리가 덜 되었을 수도 있고...
암튼, RenderScript에서 사용할 수 있다는 A3D File Format에 대해 분석 해 본다.
(HoneyComb 소스가 있는것도 아니고, 그렇다고 HoneyComb device가 있는것도 아니고, 그냥 Froyo의 framework source에 있는 파일들로 분석 해 본다. 소가 뒷 걸음질 치다가 쥐를 잡기를 바라며...)


우선 아래 세 개의 파일에서부터 시작 해 보자.

android/frameworks/base/libs/rs/rsFileA3D.h
android/frameworks/base/libs/rs/rsFileA3D.cpp
android/frameworks/base/libs/rs/rsMesh.h




[Phase #1] A3DIndexEntry Vector를 완성하는 단계
 

12 bytes: magic string "Android3D_ff"

4 bytes: major version
4 bytes: minor version
4 bytes: flag
(64bit data type 사용여부, 0 아니면 1)
8 bytes: data size
(실제로는 파일 크기와 동일
flag에따라 4 bytes 또는 8 bytes가 될 수 있음
여기서는 flag 값을 1로 간주하고 8 bytes로 표시)
8 bytes: index offset
8 bytes:  string offset

<12 bytes + index offset> -----> mIndex Vector를 구성
4 bytes: index entry count

A3DIndexEntry
4 bytes:  string index
4 bytes: A3DChunkType

8 bytes: offset
... chunk type에 따라 Phase #2에서 처럼 추가 data가 존재할 수 있을 듯 ...
... 실제 A3D sample file을 구해서 까보지 않는 이상은 두루뭉술하게-_-; ...

...
(index entry count 개수 만큼)
...

A3DIndexEntry
4 bytes:  string index
4 bytes: A3DChunkType

8 bytes: offset
... chunk type에 따라 Phase #2에서 처럼 추가 data가 존재할 수 있을 듯 ...
... 실제 A3D sample file을 구해서 까보지 않는 이상은 두루뭉술하게-_-; ...

<12 bytes + string offset> -----> mStrings Vector를 구성
4 bytes: string entry count
4 bytes: string type (반드시 0)

8 bytes: offset for string entry data
4 bytes: string length N (실제로는 12 bytes + offset for string entry data)
N bytes: string data 

...
(string entry count 개수 만큼)
...

8 bytes: offset for string entry data
4 bytes: string length N (실제로는 12 bytes + offset for string entry data)
N bytes: string data


[참고1] 3 개의 Vector로 구성 됨
* mStrings - Vector of String8
* mStringsIndexValues - Vector of uint32_t
* mIndex - Vector of A3DIndexEntry

[참고2] A3DIndexEntry의 구성
.mID = mStrings[string index]
.mType = A3DChunkType
.mOffset = 8 bytes offset

[참고3] mStringIndexValues Vector는 mStrings Vector와 mIndex를 mapping하는 역할을 한다
mIndex

mStringIndexValues


mStrings
 A3DIndexEntry [0]
0 [0] ------------ [0] string8
A3DIndexEntry  [1] 3 [1] ------------ [1] string8
A3DIndexEntry  [2] 2 [2] ------------ [2] string8
A3DIndexEntry [3] 1 [3] ------------ [3] string8
A3DIndexEntry [4]
5 [4] ------------ [4] string8
A3DIndexEntry [5]
4 [5] ------------ [5] string8
* mStringIndexValues[string index] = mIndex Vector의 index
* 대각선을 그릴 수 없어 색상으로 mapping :-)



[Phase #2] A3DIndexEntry Vector entry 각각을 처리하는 단계

앞서 Phase #1에서 완성 된 mIndex Vector의 각 항목에 대해 index entry count 개수만큼 반복하여 수행된다.

<CHUNK_ELEMENT>
comment 처리가 되어 있어 skip! 앞으로 어떻게 바뀔지 모른다!


<CHUNK_ELEMENT_SOURCE>
4 bytes: index
4 bytes: count
sizeof(float) *
   count bytes: data


<CHUNK_VERTICIES>
4 bytes: allocation count
4 * allocation count bytes: indices of mIndex Vector 


<CHUNK_MESH>
4 bytes: primitives count
4  * primitives count bytes: indices of mIndex Vector


<CHUNK_PRIMITIVE>
4 bytes: index count
4 bytes: index of mIndex Vector for the verticies
2 bytes: restart counts
1 byte: bits (8 / 16 / 32)
1 byte: primitive type


bits * index count bytes: indices for primitive
bits * restart counts bytes: indices for restart ??? (restart counts가 0보다 큰 경우)


Posted by 세월의돌
Posted by 세월의돌
리눅스 & 안드로이드2011. 6. 30. 07:53
Emulated Device KeyKeyboard Key
Home HOME
Menu (left softkey) F2 or Page-up button
Star (right softkey) Shift-F2 or Page Down
Back ESC
Call/dial button F3
Hangup/end call button F4
Search F5
Power button F7
Audio volume up button KEYPAD_PLUS, Ctrl-5
Audio volume down button KEYPAD_MINUS, Ctrl-F6
Camera button Ctrl-KEYPAD_5, Ctrl-F3
Switch to previous layout orientation (for example, portrait, landscape) KEYPAD_7, Ctrl-F11
Switch to next layout orientation (for example, portrait, landscape) KEYPAD_9, Ctrl-F12
Toggle cell networking on/off F8
Toggle code profiling F9 (only with -trace startup option)
Toggle fullscreen mode Alt-Enter
Toggle trackball mode F6
Enter trackball mode temporarily (while key is pressed) Delete
DPad left/up/right/down KEYPAD_4/8/6/2
DPad center click KEYPAD_5
Onion alpha increase/decrease KEYPAD_MULTIPLY(*) / KEYPAD_DIVIDE(/)

'리눅스 & 안드로이드' 카테고리의 다른 글

RenderScript A3D File Format  (0) 2011.08.11
Thanks for the memory  (0) 2011.07.04
Linux 디렉토리 용량/크기 확인  (0) 2011.06.23
NVIDIA Debug Manager for Android NDK  (0) 2011.06.10
binary 종류 확인방법  (0) 2011.06.01
Posted by 세월의돌