2016년 3월 15일 화요일

Android app WebView 의 local html file 에서 CORS(Cross-Origin Resource Sharing) 문제 해결하기

CORS 는 다른 도메인에서 요청을 보내는 것을 말한다. 자세한 내용은 검색하면 무슨 의미인지 금방 알 수 있을 것이다. 정보도 많고... 여튼, 이 요청에 대한 spec에 따라

App REST api 요청을 보낼때 (WebView html 통하여)
http request header 에 내가 누군지 (origin 이라는 항목에 내용을 http://www.google.com 같은 url 정보로 채우도록) 를 적게 되어있다. 이 정보는 WebView (정확히는 Android Web engine) 이 자동으로 적어준다.

위와 같은 정보를 적어서 보내면 server 에서 http request header 를 열어서 origin 을 확인하고 해당 요청을 허용해 줄 지 말지 결정한다.

그래서 일단 sever (Django) 에 작업을 해야했다.

우선 server 설정을 모든 origin 에 대하여 통과하도록 해두었다. 
(https://github.com/ottoyiu/django-cors-headers 을 이용)

그런데 특정 핸드폰에서는 origin 을 null 로 setting 해서 보낸다.
server 에 origin null 이 들어오면 설정이고 뭐고 그냥 error 가 return 된다.
(local html 파일에서의 요청 경우에 origin 설정에 대한 spec 이 없기 때문이다.)

그래서 명시적으로 WebView 설정을 해주어야 안전하다.

webSettings.setAllowFileAccess(true);
webSettings.setAllowContentAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
이렇게 해주면 local html 에서의 CORS 요청에도 origin 값을 설정해서 보내게 되어 어느 폰에서나 정상적인 처리가 가능하다.
(모든 폰을 다 해보지 못했으나, 안되던 기기에서 저 설정 후 되는 것을 확인했다.)


2016년 3월 11일 금요일

maria DB (mySQL) python 으로 접근하기

maria DB 설정은 다 되어있다고 하고 시작

shell 에서

$pip install MySQL-python

이걸하면 MySQLdb 를 사용할 수 있음.

그리고 아래와 같이 구현

https://github.com/kjunu/hello/blob/master/python/mariaDB.py



2015년 7월 28일 화요일

visual studio 2013 을 이용한 windows kernel driver 개발환경 만들기

visual studio 를 이용해서 windows kernel driver 를 만들고 debugger 붙이기

우선, kernel driver test PC 를 준비해야한다.
개발용 PC 에 직접 Test 를 실행하다가는 개발용 PC 를 포맷해야하는 일이 일어날 수도 있다. 이 경우 작업내용도 다 같이 날아갈 수도 :$

test PC 는 남아도는 PC 를 하나 구해도 상관없지만, 난 그런 자원이 없으므로 Virtual machine (VM) 을 하나 만든다. 그리고 개발용 PC 를 구한다. 그런데 내 개발용 PC 가 ubuntu 인 관계로 개발용 VM 을 하나 또 만들었다.

즉, 내 환경은 ubuntu 위의 virtual box : 개발용 VM1, Test 용 VM2

우선 VM1 에 windows 7 을 설치했다.
그리고 대충 업데이트들 하고
windows WDK 8.1 를 설치!
( https://msdn.microsoft.com/en-us/windows/hardware/gg454513.aspx )
그리고 clone 해서 VM2 를 만들었다. VM2의 컴퓨터 이름은 미리 바꿔주자. 나중에 헷갈림

이후 VM1 은 cpu 랑 ram 을 가능한 크게 주고, VM2 는 조금만 주었다.
Network 설정은 bridge 로 설정하였는데, NAT network 로 묶어도 된다.
( 여튼 서로 network 으로 VM1 에서 VM2 로 통신할 수 있게만 해주면 된다.
윈도우탐색기에서 네트워크를 클릭했을때 서로 보이면 ok )

그리고 VM1 과 VM2 를 serial 로 연결해준다.
( https://www.howtoforge.com/how-to-set-up-a-serial-port-between-two-virtual-machines-in-virtualbox )
이 과정을 지나면 VM1 을 켜야지만 VM2를 켤 수 있다.

이제 hardware 설정은 끝났고, 필요한 software 들을 설치한다.
VM1 에는 개발툴인 vs2013 을 설치~
VM2 에는 WDK target 설정을 위해 아래 패키지를 설치한다.
( C:\Program Files\Windows Kits\8.1\Remote\x86\WDK Test Target Setup x86-x86_en-us.msi
 당연히 x86 부분은 본인의 arch 에 맞는 걸로 변경해서... ㅎㅎㅎ)


자, 그러면 VM1 vs2013 을 켜고
Driver > Test > Configure Computers..., 선택 후 Add a new computer.
Computer name 에 VM2의 이름 (네트워크상의 컴퓨터이름) 을 입력하고
2번째 항목 (Provision computer and choose debugger settings) 선택 후 다음
com port 설정이 맞는 지 확인하고 또 다음.
그러면 VM2 에 이런 저런 창들이 떴다 없어졌다 하면서 리부팅도하고 설정이 된다.
이 때 VM2 의 windows 사용자 계정에는 반드시 password 를 설정되어 있어야한다.
도중에 한 분 물어보는데 password가 없으면 통과가 안된다.

이 과정이 잘 안된다는 사람들이 많은데,
네트워크 설정이랑 serial 설정만 제대로 되어있다면 문제 없이 동작한다. 잘 안되는 것 같으면 이 두 가지 설정을 다시 확인하자.

아래 링크대로 따라서 hello driver 를 하나 만든다.
https://msdn.microsoft.com/ko-kr/library/windows/hardware/hh439665(v=vs.85).aspx )
동작확인이 끝나면 개발환경 세팅 끝!





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 와 비교가 가능하다.