2013년 12월 5일 목요일

ubuntu 에서 library 없을 때 찾는 법

#sudo apt-cache search "찾을 것"

Android Camera device 를 사용한 app 개발 일기 2

오랫만에 글을 적는다. 생각보다 난이도가 있는 작업이었다.
한 달여간 작업 후에 손을 땐 상태가 되었다가 연말이 되어 한 해를 돌아보며 생각난 김에 적어둔다.

trello 후기
상당히 괜찮은 툴이다. 개인적으로 모바일에서도 pc 처럼 사용할 수 있어서 출퇴근하며 확인하고 아이디어 추가하고 하기 좋았다.

app 개발내용
# camera app 에 intent 날려서 mp4 파일 얻는 방식은 그다지 의미가 없었다.
일단 이 방식은 카메라 프리뷰 화면을 마음대로 할 수 없는 게 마음에 안들었다.
또한, 다양한 기기마다 만들어주는 해상도가 다르다는 것도 문제였고...
마음대로 필터를 넣을 수도 없었다.

# 결국 camera device 를 직접 접근해서 preview 받아오고 그걸 또 인코딩해서 mp4 로 만들어내도록 프로그래밍해 넣었다.

# 인코딩하는 방식이 여러가지 였는데, android 에서 기본적으로 제공하는 class 인 mediaRecoder 를 사용했다. 근데... 이 class 마음에 안든다. 카메라의 영상을 담아서 인코딩하는건 잘 되는데, 파일을 열어서 디코딩한 영상을 필터 먹이고 다시 인코딩 하려니까 잘 안되더라. 아 Nexus 7 에서는 잘 되었다. Galaxy S3, LG opG 는 안되서... 결국 필터는 포기..

# 안드로이드에는 기본적으로 제공하는 카메라 필터들이 존재한다. 이건 필수가 아니어서 제조사에서 구현한 (지원하는) 애들만 쓸 수 있다. 쿼리해서 지원하냐고 물어보고 한다고 하면 쓸 수 있는 방식.

# mp4 파일들을 이어 붙여야 했는데 이건 mp4parser 라는 opensource java library 가 있어서 그거 가져다가 썼다. 잘된다. 훌륭함. 단점은 인코딩 방식이 모두 같아야 한다는 것.

일단은 여기까지 적어두고 나중에 또.. 이어서.. 적다보니 일기가 아니라 그냥 후기가 되고 있군...

2013년 7월 30일 화요일

Android Camera device 를 사용한 app 개발 일기

app 개발에 대해서는 아무것도 모르는 채로 시작했다고 해도 과언이 아니다.

다만, 업무상 android framework 소스를 봐왔었다는 자신감으로 생각없이 막 시작했었다.

시작할 때의 마음가짐은 'app 개발 하는데 대충 웹질하면서 긁어 붙이면 금방 만들겠지.' 였다.

그렇지만 아직 alpha 버전도 못만들어내고 있는 걸로 봐서 너무 자만했나보다.

문제는 아직도 저런 마인드가 좀 남아있다는 것;;;

한 달 가량 개발을 하면서 프로그래밍 실력이 모자라다는 것을 반복해서 깨닫고 있다.

어떻게 class 를 나눌지 어떤 일 단위로 activity 로 쪼갤지 계속해서 헷갈린다.

여튼, 본격적인 개발 일기로 정리를 해야겠다.

3명이서 만들자고 시작했고, 이번 app 의 경우 내가 메인 개발자이다.

처음 한 일

github 만들기
가입하고 사람들한테 권한 주면 완료. 자세한 설정은 동료형님이 해줬다. 평소에 git을 써오던 터라 금방 한 듯 ㅎㅎㅎ

trello 만들기
역시 가입하고 사람들 초대하면 끝. 내가 했다.
알아내야 할 것,to do, doing, done,complete 정도로 관리하고 있다. 조금 엉망이 되어가는 느낌이지만 뭐...

app 개발 환경 만들기
linux 사용하고 있던 거에 android developer site 가서 이클립스만 받았음. 다른 애들은 원래 깔려있었는데 요즘보니 걍 원클릭으로 다 받아지는듯? 게다가 그냥 프로젝트 만들자마자 돌리면 hello world 뜬다. ㅎㅎㅎ 가상머신 쓰기 싫어서 그냥 가지고 있는 실제 기계에 올려서 테스트하기 시작.

app 개발 내용
아마 이 내용이 쭉 이어질 것 같다.

# 버튼 만드는 법 웹에서 긁어오면서 이해했다. 버튼 하나 넣는데도 은근히 귀찮은 작업.
# 다른 activity로 string array list 전달하는 방법. 괜히 putExtra로 고생할 뻔했지만 더 편한게 있었음. 키워드는 putStringArrayListExtra
# intent 날려서 camera app 을 구동시켜 output 얻어오기. camera에 대하여 일체 신경쓰지 않고 mp4 ,3gp 파일을 얻어올 수 있다. 시간제한, 용량제한 가능하고.. 근데 결론적으로 현시점에서는 안쓰게 되었다. 이거는 웹에 예제가 많긴 한데 모르면 괜히 헤맨다. 키워드는 android.media.action.VIDEO_CAPTURE

 to be continue




2013년 7월 17일 수요일

git stash 작업 tip

 stash 활용

오늘 얻은 내용정리

"현재 작업과 상관없는 급한 일을 처리해야할 때"

git stash
vi ... 급한일
git commit -a -m "급한 작업내용"
git stash pop
vi ... 원래 하던 일

stash apply, drop, pop,list 등 사용가능

stash 했던 내용과 현재 내용과 diff  보는 법

git stash show -p stash@{0}

뒤에 stash@{0} 은 stash list 로 확인하여 해당하는 stash 와 비교가 가능하다.


2013년 5월 6일 월요일

git 유용한 명령어들

git diff 가지고 패치하기


$git diff --no-prefix > patchfile
$cd path/to/top/                 
$patch -p0 < patchfile           

$git diff  > patchfile
$patch -p1< patchfile

commit 취소하기

$git reset HEAD^

$git reset HEAD^2

$git reset --hard HEAD^ (작업내용 날리면서 원복)

git reset 한 것 되돌리기


$ git branch <new branch> HEAD@{1}
$ git branch mybranch HEAD@{1}

지운 branch  되살리기


Deleted branch temp (was 4160aa).
$ git branch <new branch> <commit>
$ git branch mybranch 4160aa

2013년 4월 1일 월요일

ld : cannot find lz

Complie Android in Ubuntu 64

error message :

ld : cannot find lz

solution:

apt-get install lib32z-dev

or

apt-get install lib32z1-dev

2013년 3월 19일 화요일

Android app 이 3D 화면을 출력하는 과정 (surface flinger 와 EGL, GRALLOC)

app 이 surface flinger 에게 그릴 공간을 달라고 한다.

surface flinger 가 gralloc 에게 메모리를 달라고 한다.

gralloc(제조사가 만든다. 대부분 코드 비공개)이 메모리를 할당한다.

surface flinger 는 받은 메모리를 surface 로 만든다.
(struct surface 에 정보를 채우고 메모리 연결)

app 은 surface 를 받아왔다고 EGL 에게 알린다.

EGL(제조사가 만든다. 대부분 코드 비공개) 은 OpenGL ES 가 surface 에 달린 메모리를 사용할 있도록 한다.

이 때 부터 app 은 정상적으로 OpenGL API 를 사용할 수 있다.

app 이 여러 OpenGL API 를 통해서 surface 에 그림을 그리고 EGL 에게 다그렸다고 알린다.
실제 그림 그린 메모리가 반영된다.

그리고 나면 surface flinger 가 메모리(surface)를 가져다가 다른 app 들의 surface 와 합쳐서
화면에 출력한다.



2013년 3월 6일 수요일

bash 에서 return 값 확인하기

bash shell script 를 사용할 때 여러 개의 script 를 연결하다가 보면

"특정 script가 실패했을 때" 라는 조건을 걸고 싶을 때가 있다.

일반적으로는 내가 만든 script 가 내부적으로 실행했던 script 가 실패하면,

내가 만든 scrpit 까지 동작이 멈춰버린다.

이 때 return 값을 check 하게 하니 내부적을 실행한 scrpit 가 실패해도

내 scrpit 가 계속 진행한다.
(예시: VAL=`test.sh; echo $?` 하면 test.sh 가 실패해도 계속 진행한다.)

bash 에서 return 값을 check 하는 방법은

$?

를 보면 된다.

2013년 2월 19일 화요일

ubuntu 에 jdk 간편하게 설치하기

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer

$ sudo add-apt-repository ppa:ferramroberto/java
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk sun-java6-plugin