2018년 2월 25일 일요일

Vim Plugin manager 설치

Vim Plugin manager 설치

다양한 Plugin을 편하게 설치하기 위해서는 대표적인 Vim Plugin manager인 Vunlde을 이용하는 것이 좋다.
다음 명령을 통해 Vundle을 설치한다.
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

출처: http://hochulshin.com/osx-vi-javascript/ 

2016년 3월 30일 수요일

FUSE (Filesystem in Userspace) 에 대한 이해

일반적으로 filesystem 은 kernel layer 에서 개발하는데, 이 경우 kernel 에 대한 높은 이해가 필요하다.

kernel 에 대한 이해 없이 디버깅의 편리성, 시스템 안정성 향상, 개발 속도 같은 것들을 우선하는 filesystem 을 만들고 싶을 때 사용하는 것이 FUSE 가 되겠다.

즉 FUSE 는 filesystem 을 user layer 에서 개발할 수 있도록 도와주는 framework 이다.

일반적으로 linux, mac 등에서는 FUSE, windows 에서는 dokan 이 fuse 같은 framework 을 제공한다.

FUSE 를 구현하는 법은 간단하다.

예를 들어 user program 으로 read 를 구현하고

그것을 FUSE framework 에 넘기면, 내부적으로 kernel layer 에 read 가 불릴때 user program 에 구현된 read 를 불러준다.

(function pointer 달아가지고 fuse_main 호출하면 끝이다.)

쉽게 생각하면 user program 에서 libfuse 를 가져다쓰는 것이다.



그런데 libfuse 를 가져다 쓰지 않고 구현할 수도 있다.

libfuse 에서 해주는 일은 /dev/fuse 를 열고 주기적으로 해당 노드를 read 하여

(kernel 에서 부터 요청이 온 request 를 읽어서) 적절한 user function 을 호출하는 일을 한다.

(즉,  fuse kernel module 이 하는 일은 kernel에 filesystem operation 들을 /dev/fuse 에 써주는 역할이다.)

이 내용을 직접 user program 에서 작성하여 더 빠르게 request 를 처리하도록 설정할 수 있다는 것이다.

(thread 를 여러개 둬서 /dev/fuse 를 마구 읽어서 처리한다던지...)

user filesystem 에 한계는 명확히 존재하지만 libfuse 를 직접 구현하면 mmap 등을 이용해

kernel - user copy를 줄일 여지가 더 생기는 등 괜찮은 filesystem 을 만들 수 있다.










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 가 있어서 그거 가져다가 썼다. 잘된다. 훌륭함. 단점은 인코딩 방식이 모두 같아야 한다는 것.

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