2016년 5월 27일 금요일

docker 첫 걸음


왜 도커를 사용해야 하는가? - 혹은 왜 다들 도커도커 하는가?

그 이유를 python을 사용하면서 알게 되었다.
python은 버전2와 3이 차이가 제법 있다.

처음 python을 설치하면서 3.5.1 버전을 설치했고,
거기서 첫 코드를 작성했던 것이 문제였다.

나중에 프로젝트에 사용될 기술들을 정했는데,
mac el capitan에 기본적으로 설치되어 있는 녀석이 2.7이고,
그냥 그 2.7 버전을 쓰기로 합의가 된 것이었다.

아무튼 2.7이 설치되어 있는 mac에다가 3.5.1을
virtualenv를 사용해서 설치해보려고 하다가 주화입마에 빠져버렸다.
아직 python에 대한 이해도가 낮은게 문제이겠지만
2.7, 3.5.1이 짬뽕이 되어서 library가 날 뛰는 것이 아닌가.

하물며 개발 환경에서도 이런데,
실제 운영 환경에서는 또 얼마만한 삽질을 해야 할 것인가?

아 이래서 개발 환경과 운영 환경을 통합해버릴 수 있는 도커가 각광을 받게 된 것이구나.
클라우드 환경에서 서버 가상화로 관리가 편해지는 이점도 있고!

그래서 또 이틀간에 걸친 삽질 끝에
원하는 docker 이미지를 만들어 내는데 성공했다.

알고보니 간단한데사실 알고나면 다 간단하지만
이걸 통해 더 간단히(?) 서버 설정을 할 수 있을 거라 생각하니 기쁘기 한량없더라.

운영 환경일때 삽질은 뭐 나중에 해보면 될것이고,
어쨌거나 지금 시점에서는 만족함.





2016년 5월 18일 수요일

세상은 넓고...

고수도 많고,
시간은 없어서
마음만 급하네.

2016년 5월 11일 수요일

android gradle buildtime 줄이기

프로젝트 빌드 타임이 4분 30초가 넘어가면서 인내심도 바닥나 버렸다.

만사를 제쳐놓고 빌드 타임을 줄이기 위한 방법을 찾아봤는데,
3가지가 해법인 것 같다.

gradle daemon, parallel, large heap

mac이나 unix 라면 ~/.gradle,
윈도우라면 /Users/%user%/,gradle

아래에 다음과 같은 파일을 만든다.



그다음, android studio 에서
Settings / Build, Execution, Deployment / Build Tools / Compiler에서

Compile independent modules in parallel (may require larger heap size)
을 체크하고

Command-line Options에

--offline

을 추가한다.


이렇게 하고 4분 30초 정도 걸리던 빌드타임이 6초로 줄었다?
잘못쟀나...
잘못 잰게 맞는 것 같다. ㅜㅜ

2016년 4월 27일 수요일

android versionCode, versionName은 어디에 위치해야 하는가


android studio를 활용해서 새로운 프로젝트를 생성했을 경우에,
이녀석은 너무나 당연하게 app/build.gradle 안에 groovy code로 versionCode, versionName을 생성한다.

그래서 당연히 build.gradle 안에 저 녀석들이 있어야 하는 걸로 알고 있었고, 버전 관리할때마다 반겨주는 메세지를 만나야 했다.

Gradle files have changed since last project sync. A project sync may be necessary for the IDE to work properly.  Sync Now

그런데 문제는 저 gradle build가 매우 느리다는 것이다 :(

덕분에 릴리즈 버전별로 브랜치를 관리하다 보면, 브랜치 스위칭하면서 빌드빌드빌드빌드를 하게 되는데 아. 쓰기만 해도 괴롭다. 아무튼 저 versionCode, versionName을 AndroidManifests.xml로 옮길 수 있다는 사실을 알게 되었다.

!!!!!!!!!!!!!!!!!!!!!

그리고 AndroidManifests.xml은 수정해봐야 재빌드 안한다!

왜 이걸 이제 알았을까.

아무튼 versionCode, versionName은 AndroidManifests.xml로 옮깁시다!

2016년 4월 12일 화요일

ormlite foreigncollectionfield에 대해

1 to many 관계에서 눈여겨 볼 일 없이 그냥 가져다가 썼었다.

그러다가 queryBuilder로 join을 했는데,
limit
orderBy
등이 전혀 먹히지 않는 것이 아닌가.

왜 이런 일이 벌어지는것인가! 나는 햄보칼수가 없어!


하루종일 삽질하다가
생성된 테이블 구조를 살펴보고야 이유를 짐작해냈다.

SomeEntity database table에 DetailEntity table에 대한 참조키가 생성되지 않는 거였다.
ormlite가 lazyForeignCollection으로 Set을 모조리 갖다 붙이는 거였음.

그래서 그냥 java code로 2차 가공하기로 했다.

profit(?)

2016년 3월 31일 목요일

Windows10 Bash shell 포팅 소식을 들으며

윈도우 노트북 SSD가 달랑 128GB라 늘 하드가 부족한데 이놈의 윈도우는 뭐가 윈도우만 용량이 25GB를 잡아먹고 있더라. (안드로이드 SDK가 25GB인것도 함정. 슬프다) 그 덕분에 git command 쓸 일이 있을 때마다 cd 로 폴더명 일일이 치고 있을 때마다 게이지가 차오르는 것을 느낀다. 어쨌거나 적어도 좀 터미널은 편하게 쓸 수 있게 되는가 보다. --------------------------------------------------- 헐. 윈도우에도 powershell이라는 녀석이 내장되어 있었다니! 전혀 몰랐다 -_-;... 그동안 cd 명령어로 삽질을 하고 있었구나 ㅠㅠ...

2016년 2월 26일 금요일

android studio에서 jar 만들기

android studio에서 module들을 jar 파일로 export 해보자.


towwaygridview를 jar로 만들 예정이다


jar로 만들 module의 build.gradle 파일을 열어서 다음을 입력하자.

task deleteOldJar(type: Delete) {
    delete 'libs/{moduleName}.jar'
}

//task to export contents as jar
task exportJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('libs/')
    include('classes.jar')
    ///Give whatever name you want to give
    rename('classes.jar', '{moduleName}.jar')
}

exportJar.dependsOn(deleteOldJar, build)


그 이후에 Gradle 탭을 열어보자.

Gradle 탭을 열면...

jar로 만들 module을 연다

Tasks > other > ...

exportJar를 실행


위 gradle code로 task를 만든 exportJar 메뉴가 있다.
이 녀석을 실행하면



뭐 이런 녀석이 나오고

towwaygridview / libs / towwaygridview.jar 파일이 생성된다.

이 녀석을 복사해서 사용하면 되겠다.


** android resource 를 사용한 경우에는 jar 대신 aar을 사용해야 한다.