레이블이 공부인 게시물을 표시합니다. 모든 게시물 표시
레이블이 공부인 게시물을 표시합니다. 모든 게시물 표시

2018년 1월 19일 금요일

GitLab CI 해보자!





미디엄: https://medium.freecodecamp.org/how-to-setup-ci-on-gitlab-using-docker-66e1e04dcdc2
GitLab CI quick start: https://gitlab.com/help/ci/quick_start/README
GitLab CI Demo: https://gitlab.com/ykyuen/gitlab-ci-demo

이번에 GitLab에서 CI를 자체적으로 지원해준다고 해서 한번 해보자!
하는 마음으로 시작하는 CI 설정!

쉽게 정리해보자면, 설정 순서는 다음과 같습니다.

0. 빌드하고자하는 환경을 설정
1. .gitlab-ci.yml 설정
2. gitlab에 push!
3. 빌드됨!

여기서 가장 어렵다고 생각이 드는 것은 빌드하고자 하는 환경을 설정하는 것이라고 생각합니다.
그런데 freecodecamp 미디엄 글에서는 도커 이미지를 사용해서 설정하는군요.

일단 저는 Cordova 앱을 빌드하기 위해 필요한 환경설정이 무엇인지 살펴보고자 합니다.
필요한 세팅은 아래와 같을겁니다.

Cordova Android 문서를 참고해보았습니다.
- JDK 8 이상
- Android SDK, Android SDK Packages
- Node.js 8.9.4 (NPM)
- Cordova

정리하고 나니 위에 4개 정도 필요하네요. (추가적으로는 환경변수 설정도 있겠습니다.)

미디엄 글에서 나온 것은 docker 이미지를 사용해서 CI를 설정하고 있어서 편하게 되어 있습니다.
저도 그래서 찾아봤습니다. cordova 관련한 docker 이미지가 있는지!

있습니다!
https://hub.docker.com/r/beevelop/cordova/

요거 써서 설정되어 있는 이미지를 사용하면 편할 것 같습니다.

그래서 제가 작업한 저장소는 아래에!
https://gitlab.com/pineoc/cordova-ci-demo

기본적인 프로젝트 구성은 아래와 같이 만들어졌습니다.

0. .gitignore는 platforms, plugins를 포함해서 기본적인 세팅을 했습니다.
1. npm i -g cordova
2. cordova create ci-test com.pineoc.citest ciTest
3. cordova platform add android
4. .gitlab-ci.yml 세팅

.gitlab-ci.yml 파일은 아래와 같습니다.


image: beevelop/cordova:latest

before_script:
  - cordova platform add android

stages:
  - build

build:
  stage: build
  script:
    - cordova build android


이렇게 .gitlab-ci.yml을 작성하고 올려두면 자동적으로 파일을 인식, 빌드를 시작합니다.

https://gitlab.com/pineoc/cordova-ci-demo/-/jobs/48618903

이것처럼 쭉 로그가 나오고 빌드 결과는 passed, failed로 나옵니다.
그렇게 어렵지 않게 기본 프로젝트 빌드는 세팅해보았지만
추가적인 설정이 들어가면 어려워질 수 있을 것 같네요.
(플러그인을 추가, iOS 빌드 시스템)

도움이 되었으면 좋겠습니다.

2018년 1월 8일 월요일

2017년 회고

2017년 회고

2018년 1월에 쓰는 2017년의 회고! (마치 일기 몰아쓰기를 하는 것 같다.)
2017년은 다사다난했다. 2016년에는 어땠는지 기억해보면 2017년보다는 덜 혼란했던 것 같다.
시간별로 한번 쭉 정리해보고 각 이슈 별로 이야기를 해보려한다.

타임라인

타임라인으로 적어보려 했지만… 기억이 많이 나지 않는다. 큰 이슈별로 정리해보면.

  1. 01.01 - 새해가 밝았다!
  2. 05.22 - 월천상회 퇴사
  3. 05.29 - 스마트스터디 입사
  4. 06.13 ~ 16 - 사이판 워크샵
  5. 06.22 - 개발본부 개발자로
  6. 09.06부터 - 한국사이버성폭력대응센터 기술 지원
  7. 09.16 - J2S Conference 2017
  8. 12.18 - 스마트스터디 퇴사
  9. 12.27 - 플루토 방송국 첫방송!

생각보다 중간중간의 기억이 비어있어서 적는동안 당황했다.
실제로 업무이야기라 그런 것도 있고 진짜 기억나지않는게 대부분이라 캘린더도 뒤져보고 회고록도 뒤적뒤적..

월천상회 퇴사

월천상회는 학교 다닐 때 휴학하고 참여를 하면서 2017년 5월까지 일했던 힘들었지만 재미있던 경험을 준 회사다.
월천상회에서는 키즈 매거진 앱인 킹콩로켓56, 한글놀이 앱인 한글코끼리 등 유아 컨텐츠를 담은 앱들을 개발했었다.
안드로이드, iOS에 각각 런칭하기위에 크로스플랫폼 프레임워크들을 사용했다.
놀이 앱에 대해서는 Cocos2d-x를 사용했었고 키즈매거진 앱은 HTML 형식의 컨텐츠를 담기위해 Cordova를 사용해서 개발했었다.
이직하기 전에 월천상회에서는 책도 출판하는 등 같이 많이 노력했지만 내가 생각했던 소프트웨어를 만들어 성장할 수 있는 곳은 아니라고 생각하게되었고, 이직을 준비하게 되었다.

스마트스터디 입사

학교를 졸업하기 전부터 일해왔던 월천상회 에서 퇴사하고 스마트스터디로 이직하게되었다.
월천상회에서 일할 때 부터 관심있게 봐왔던 회사로 저기서도 꼭 다른 개발자들이랑 일해보고 싶다! 했었다.
내가 지원했던 포지션은 앱 개발자로 Cocos2d-x 앱을 만드는 쪽으로 지원했었다.
붙었으니 이야기하는 거지만 처음에 이력서를 너무 성의없게 내서 서류탈락했었지만..
메일로 피드백 요청을 드렸고 너무나 감사하게도 부족한 부분을 알려주셔서 수정해서 다시 지원했었다.

서류를 통과하고 기술면접, 임원면접 후에 5월 29일에 입사!
라이브 팀에서 일을 시작했다. 얼마 있지 않아서 6월 13 ~ 16까지 사이판 워크숍을 다녀왔다.
(아직 적응도 다 하지 못한 상태에서 다녀온 느낌이었지만 룸메이트였던 가이님이나 다른 개발자분들과 재미있게 보낼 수 있었다.)

스마트스터디 기술 본부의 개발자로

사이판을 다녀온 뒤에 조직개편이 있었다. 따로 있던 개발자들이 모여 기술 본부가 생겼고
기술 본부는 인프라, 내부 서비스, 앱 등에 대한 개발을 담당하게 되었다. 
(원래 각자 담당하던 일을 본부로 조직을 통합해서 개발자들이 시너지를 낼 수 있게!)

나는 원래 라이브 팀에 있다가 기술 본부의 개발자로 앱 개발에 대한 일을 했다.
주로 앱 프로젝트에 없는 문서를 문서화하고 앱을 관리하는데에 필요한 정보들을 정리했다.
앱 빌드하는데에 오래걸리는 문제도 있었는데 Cocos2d-x의 앱 빌드 경우 cpp 파일들을 다 컴파일 하느라
오래걸리는 문제가 있었는데 NDK 빌드할 때 CPU 코어만큼 빌드 태스크를 만들면 빨라지는 방식으로 그래들 스크립트를 업데이트 했었다. (일해라 컴퓨터! 일해라 CPU!)

이후에 앱도 CI(Continuous Integration)를 적용해보고 싶었는데..
어찌하다보니 해보지 못한게 아직도 아쉽다.

입사하고 3개월 동안은 수습기간이었는데, 이 때 불안한 생각이 좀 많았었다.
내가 정말 잘하고 있는게 맞는지, 이 회사에서 내가 일을 잘 맡아서하고 있는건지.
그래서 6월, 7월, 8월 각 월마다 회고록을 쓰고 무슨 일을 했었는지 정리했다. 쓰고나서 본부 사람들에게 공유도 하고..
(정규직이 되고싶어! 하는 몸부림이었을 수도 있겠다. 8월까지만 쓴 것은 아니고 10월까지는 쓰긴했지만 11월, 12월은 못쓰고 넘어가버렸다.)

나중에는 기술 본부에서도 서비스실, 시스템실 이렇게 나눠지고 각각 팀이 만들어졌는데
서비스실, 서비스 2팀의 개발자였다. (앱 개발팀)
앱 팀은 그동안 일해온 특성상 한사람당 하나 이상의 프로젝트를 맡아서 개발해와서 협업한다는 느낌이 별로 없었다.
(정보 공유는 어느정도 있었으나 많지는 않았던 것 같다.)
서비스실에서는 그래도 실 안에 있는 사람들이 각자 어떤 일을 하는지는 알면 좋겠다 는 의미로 각자 맡은 프로젝트의 리뷰를 하고자 했는데 일정상 몇개만 할 수 있었다.

여러가지 프로젝트 개발을 해볼 수는 없었지만 불꽃남자님이 Jira를 잘 사용하는 방법, 이슈 만들기, 프로젝트는 어떻게 진행해야하는가 같은 것을 잘 알려주셔서 그동안 배우지못한 협업 프로세스를 배울 수 있었다.
실제로 프로젝트 진행하면서 프로젝트 구성원들과 함께 배운 것도 하나하나 적지 못하지만 너무나 배운 것이 많았다.

한국사이버성폭력대응센터 기술 지원

엄청 큰 기술 지원은 아니었다. 
사이버성폭력이 일어나는 사이트들에 대한 자문이나 홈페이지 리뉴얼을 위한 지원을 했다.
사실 처음 한국사이버성폭력대응센터 줄여서 한사성, 홈페이지를 가봤는데 반응형도 아니었고 화면 크기도 맞지않아
문제가 조금 있었다. 9월에 처음 한사성팀과 미팅을 했었고 그 이후 계속 지원하고 있다.

J2S 컨퍼런스 참석

타임라인에 적어두어서 발표한 것 같지만 가서 듣고온 일이다.
주니어로 시니어분들이 어떻게 생각하는지, 어떻게 성장해왔는지 궁금해서 들으러 가고 싶었는데 금방 신청이 끝나서 우울해하고 있던 차에 불꽃남자님이 발표자셔서 참석권을 얻을 수 있었다!
가서 듣고 온 이야기에서 느꼈던 것만 정리해보면,

  • 회사는 개인의 이력을 관리해주지 않는다.
  • 자기가 성장해야한다.
  • 애자일은 테스트를 안해서 망했다.(?)
  • 테스트가 없는 리택토링은 리팩토링이 아니다.
  • 의도적 수련! 토이 프로젝트도 해보자!

불꽃남자님은 리모트, 재택근무에 대한 이야기를 해주셨는데 회사에서 잘 실천하고 있나 확인하며 들었었다.

스마트스터디 퇴사

입사한지 정말 얼마안되서 퇴사를 하게 되었다. (약 6개월)
많은 개발자분들과 함께해서 즐거웠고 다 같이 또 모여서 개발했으면 좋겠다는 생각을 많이했다.

플루토 방송국 첫 방송!

퇴사 이후에 더 많이 만나는 (전)스마트스터디 개발자분들과 플루토 방송국을 같이 만들어가고 있다.
지금까지 2회 방송! 앞으로도 꾸준히 방송할 수 있었으면 좋겠다. 모두 좋은 회사에 취직해서 그 곳에서도 방송해보고!
(시간이 될 수 있을지는 모르겠지만)


회고 후기

2017년 돌아보니 많은 일이 있었던 것 같지만 내 욕심보다 성장을 많이 하지 못해서 아쉬운 한 해였다.
2018년, 올해에는 좀 더 많은 성장, 즐거운 이야기가 가득한 한 해가 되었으면 좋겠다.
이 글을 읽어주신 모든 분들도 큰 성장, 많은 즐거운 이야기가 함께하기를 바랍니다.

2017년 9월 30일 토요일

Cocos2d 커뮤니티에서 일어나고 있는 이야기들

제가 요즘 관심있게 보고 있는 토픽입니다. 
내가 사용하는 엔진이 미래가 있는가.

앱을 개발하기 시작해서부터 연속적으로 사용하지 않았지만, 
지금까지 써온 게임 엔진은 Cocos2d-x 입니다. (한 4년정도..?)

최근에 Cocos2d-x 엔진은 어떤 로드맵을 가지고 개발을 하고 있지?
내가 하는 프로젝트, 회사에서 쓰는 프로젝트가 cocos2d-x를 사용하는데 
같이 성장할 수 있는 엔진일까? 하는 생각이 들었습니다.
그러다가 블로그에 정리하면서 커뮤니티에 올라오는 글들을 보고 있는데 
이런 고민들이 전 부터 있었다는 걸 알 수 있었습니다.

맨 처음에는 이 글을 보았습니다. (엔진 vs 에디터)
http://discuss.cocos2d-x.org/t/we-need-a-friendly-eng…/33651
투표를 하면서 이야기를 하지만 C++이 짱이야! 하는 사람때문에 모두가 힘들어했던 쓰레드와
http://discuss.cocos2d-x.org/t/vote-cocos2d-x-future-…/38364
나중에는 Cocos2d-x Founder, walzer가 답변한 것 까지
http://discuss.cocos2d-x.org/t/answering-the-question…/38665

논의가 많이 길고 영어 글이라서 추석동안 한번 어떻게 돌아가는지 알아봐야겠습니다.
(사실 영어 글을 읽고 있으니 저게 진짜 트롤링인지 아닌지 한참을 봐야 알수 있었습니다. ㅠㅠ)

지금도 위의 3개 쓰레드를 보고 글을 작성하고 있는데 논의되는 내용이 많아서 천천히 써봐야겠습니다.

2017년 9월 23일 토요일

Cocos2d-x의 개발방향, 현재 상태, 적합성 등에 대한 분석



제가 앱을 개발하는데에 사용하는 Cocos2d-x에 대해 그동안 생각해보지 못한게 있었고,
그부분을 정리하고자 글을 적어봅니다.
플랫폼, 엔진 등을 프로젝트 개발에 사용하기위해 고려되어야하는 부분이 몇 가지 있다고 생각합니다.

- 참고할 자료가 많은가 (책, 커뮤니티)
- 업데이트가 주기적으로 되는가 (살아있는 프로젝트인가)
- 사용하고자 하는 플랫폼, 엔진에 대한 기본적인 이해 (적어도 도메인 지식에 대한 이해)
- 만들고자하는 프로젝트에 적당한 엔진인가 (2D, 3D, 게임 종류 등등에 대한 고려)
- 개발 방향, 로드맵은 어떻게되는가

크게는 이렇게 보고 Cocos2d-x 는 어떻게 프로젝트를 진행하고 있는지, 내가 만드는 앱에 적합한지를
확인해보고자 합니다.

참고할 자료가 많은가

프로젝트를 개발하면서 정보를 얻을 일이 많습니다. 예를 들면, 내가 개발한 코드에 문제가 생긴 상황에서 보통 구글에 검색을 하죠.
하지만 검색해도 결과가 안나온다면? 혼자 삽질을 많이 하게 되겠죠.
그래서 참고할 자료가 웹 상에 많은지, 커뮤니티가 있는지,
커뮤니티가 있더라도 그 안에 정보 업데이트가 잘 되는지를 봐야합니다. (질문을 했는데 답이 없으면 커뮤니티가 있더라도 소용 없으니까요.)

구글에서는 Cocos2d-x 로 검색하면 많은 결과를 얻을 수 있습니다.
물론 좀 생소한 이슈를 검색하면 중국어 OR 일본어 자료를 볼 수 있습니다. 이 부분은 번역기로 극복..!

Cocos2d-x 는 커뮤니티가 있습니다. (다행히)
http://discuss.cocos2d-x.org/ 이 커뮤니티는 영어지만.. 번역기를 잘 돌려서 질문만 한다면 어느정도
원하는 답변을 얻을 수 있습니다. (영어 잘 하시는분은 그냥 질문을..!)
어느정도 답변을 해주는 편이기도 해서 일단은 자료를 얻을 수 있어서 다행입니다.

우리나라 커뮤니티는 네이버 카페 Cocos2d-x 사용자모임(http://cafe.naver.com/cocos2dxusers)
최근에 글이 올라오지 않는 것으로 보아 우리나라에서는 Cocos2d-x 사용자는 점점 줄어드는 것으로
보입니다. (추측이지만 Unity로 넘어가는 것으로 보입니다.)

그 외에 스택오버플로우에서 많은 문제를 확인할 수 있으며
엔진의 버그도 Cocos2d-x GitHub 이슈나 PR에서 확인할 수 있어서
자료(정보)에 대한 걱정은 덜어도 괜찮을 것 같네요.

Youtube에는 Sonar Systems 강좌도 있습니다.
https://www.youtube.com/playlist?list=PLRtjMdoYXLf4od_bOKN3WjAPr7snPXzoe

문제는 영어...

아, 추가적으로 책도 몇 권 있습니다.
- 시작하세요! Cocos2d-x 프로그래밍
- Cocos2d-x 3 모바일 게임 프로그래밍
- 등등..
최신 업데이트 사항은 포함되어 있지 않지만 한글 자료도 많습니다.

업데이트가 주기적으로 되는가

Cocos2d-x 는 업데이트가 보통 3-4개월 또는 급한 업데이트는 버그 픽스 버전업으로 올라옵니다.
최근 버전은 3.15.1 버전으로 3.15 버전 업데이트 후 버그가 있어 업데이트한 버전 입니다.



릴리즈 업데이트 말고 다른 지표들을 보겠습니다.





'코드의 변화도', '한 달동안 머지된 PR', '이슈들이 어떻게 처리되고 있는가'에 대한 이미지입니다.
중간에 코드 변화도가 크게 올라가 있는데 이 부분은 v2 -> v3 으로 메이저 버전업이 있었을 때
코드의 변화가 컸기 때문입니다.
2016년 이후로는 큰 변화 없이 개발되고 있습니다. 주로 버그 수정 및 로드맵에 따라 개발되고 있는데,
밑에서 Cocos2d-x는 어떤 로드맵으로 개발되고 있는지 더 살펴보겠습니다.
(사실 어떤 로드맵으로 개발되고 있는지 잘 모르겠어요...)

사용하고자 하는 플랫폼, 엔진에 대한 기본적인 이해

기본적으로 Cocos2d-x로 C++, Lua, Javascript 3가지 언어로 게임을 개발할 수 있습니다.
처음에는 C++, Lua로 개발할 수 있었는데, 웹으로도 만들 수 있게 Javascript도 지원하기 시작한지
1년 정도된 것 같습니다.
Cocos2d-x 는 맨 처음 Cocos2d로 시작된 프로젝트인데 크로스플랫폼 엔진 프로젝트로 전환,
지금까지 진행되어 왔습니다.


[Cocos2D - Objective C로 개발하던 프로젝트]

글쓰면서 찾게된 python으로 개발할 수 있는 Cocos2d 도 있네요.
http://python.cocos2d.org/index.html

이야기를 하다보니 Cocos2d 의 히스토리를 살짝 훑어보고 가도 될 것 같지만
일단 본론으로 돌아가겠습니다. (나중에 한번 정리해서 다른 포스트로..!)

https://en.wikipedia.org/wiki/Cocos2d 위키를 보면 세 종류의 프로젝트가 있는데
제가 사용하고 있는 것은 Cocos2d-x, 크로스 플랫폼을 위한 프로젝트입니다.

Cocos2d-x 엔진에 대해 알 수 있는 문서들이 많이 있어서 정리해보겠습니다.
- 기본 개념 문서: http://cocos2d-x.org/docs/programmers-guide/basic_concepts/
- API 문서: http://cocos2d-x.org/docs/api-ref/index.html
- PDF 문서: http://www.cocos2d-x.org/docs/ProgrammersGuide.pdf

그 외에 알 수 있는 내용은 많지만 전체적으로는 C++ 개념이 크게 작용한 엔진입니다.
(+Objective C 개념)

만들고자하는 프로젝트에 적당한 엔진인가

저는 주로 Cocos2d-x를 2D 게임 만드는데에 사용하고 있습니다.
3D 게임에는 그다지 맞지 않는 느낌이 들지만 기능으로는 지원하고 있습니다.
(앞으로도 계속 개발해서 지원하려는 움직임이 보이기도 합니다.)

Sprite라는 개념을 사용하고 2D 게임으로 가볍게 개발할 수 있는 엔진으로
고성능의 게임도 개발할 수 있겠지만 개인적으로는 2D, 2.5D 수준으로 끝낼 수 있는 프로젝트가 적당하다고 생각합니다.

3D는 언리얼이나 유니티가 다 잡고 있기에 그렇기도 하구요.
언리얼이나 유니티보다 기본적으로 가볍고 쉽게 만들 수 있다는게 비교적 장점인 것 같습니다.
(C++이 쉽지 않은게 단점)

개발 방향, 로드맵은 어떻게되는가

추가적으로 Cocos2d-x의 개발 로드맵은 어떤지 한번 확인해봤습니다.
https://trello.com/b/Np6obnuE/cocos2d-x-roadmap



최종 수정일이... 2017년 2월 15일이네요.
업데이트가 되고 있지 않습니다. (지금 개발 버전은 3.16 버전인데 그에 대한 내용도 없네요)

최근에는 Cocos Creator를 밀고 있는 것 같습니다.
유니티처럼 에디터에서 개발할 수 있게 툴을 만들고 있는데, C++은 지원하지 않고
Javascript만 지원하고 있습니다. (CoffeeScript도...)

음... 다른 프로젝트는 로드맵이 있는지부터 확인을 해봐야겠습니다.
유니티 프로젝트는 어떤지 한번 보겠습니다.
https://unity3d.com/kr/unity/roadmap

유니티는 각 기능(이슈) 별로 리스트를 만들고 관리를 하고 있네요.
2017 버전이 나오면서 어떤게 업데이트가 되었는지, 앞으로 어떤 업데이트가 있는지는
찾아보고 있지만 찾기 힘드네요.

음... 일단은 비교는 했습니다만 Cocos2d-x 로드맵이 관리가 안되고 있다가 결론이네요.
현재는 잘 사용하고 있지만 Cocos2d 그룹에서 어떻게 개발이 진행되고 있는지,
로드맵은 어떤지에 대해 이야기해봐야겠습니다.
(현재 상태가 나쁘지는 않지만 어떤 방향으로 개발하고 있는지 잘 모르겠네요.)

이상 개인적인 분석글이었습니다.
긴 글 읽어주셔서 고맙습니다 :)

PS. 틀린부분이 있다면 가감없이 이야기해주세요. 수정하겠습니다.


2017년 6월 20일 화요일

개인적인 Gradle 공부


요즘 Gradle을 많이 보고 다룰 일이 생겨서 개인적으로 공부해보기로 했습니다.

Gradle, 그래들이라고 불리는 이건 뭘까요?
위키에는 뭐라고 써있는지 보겠습니다.
Gradle은 Groovy를 이용한 빌드 시스템이다. Groovy와 유사한 도메인 언어를 채용하였으며, 현재 안드로이드 앱을 만드는데 필요한 안드로이드 스튜디오의 공식 빌드 시스템이기도 하다. Java, C/C++, Python 등과 같은 여러 가지 언어를 지원한다.
한국 위키는 설명이 좀 부실하네요. 영문 위키가 더 자세히 잘 설명되어있습니다.
https://en.wikipedia.org/wiki/Gradle

그래들이 그루비를 이용한 빌드 시스템이라고 하는데 그럼 그루비는?
https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%A3%A8%EB%B9%84

설명이 꽤나 길군요. 요약해보자면,
자바에 파이썬, 루비, 스몰토크 등의 특징을 더한 
동적 객체 지향 프로그래밍 언어

그래들은 이러한 특징을 가진 그루비를 기반으로 하는 언어를 사용한다고 합니다.
그리고 자바뿐만 아니라 다른 언어를 빌드하는데에도 많이 사용된다고 합니다만,
저는 안드로이드 빌드 때문에 Gradle을 공부하고 싶기때문에
안드로이드 빌드를 중심으로 보겠습니다.

제가 참고한 곳은 안드로이드 개발자 홈페이지 입니다.
https://developer.android.com/studio/build/index.html#detailed-build

빌드의 일반적인 흐름은 다음과 같습니다.


그래들은 이런 빌드 과정을 설정하고 자동화할 수 있도록 해줍니다.
종속성을 어떻게 관리할 것인지, 빌드를 하고 나서 어떻게 처리를 할 것인지,
배포 빌드, 테스트 빌드 등 설정을 할 수가 있습니다.

빌드 구성 파일의 구조는 아래와 같습니다.


제일 위에 있는 build.gradle은 프로젝트의 모든 모듈의 빌드 세팅을 정의합니다.

/**
 * The buildscript {} block is where you configure the repositories and
 * dependencies for Gradle itself--meaning, you should not include dependencies
 * for your modules here. For example, this block includes the Android plugin for
 * Gradle as a dependency because it provides the additional instructions Gradle
 * needs to build Android app modules.
 */

buildscript {

    /**
     * The repositories {} block configures the repositories Gradle uses to
     * search or download the dependencies. Gradle pre-configures support for remote
     * repositories such as JCenter, Maven Central, and Ivy. You can also use local
     * repositories or define your own remote repositories. The code below defines
     * JCenter as the repository Gradle should use to look for its dependencies.
     */

    repositories {
        jcenter()
    }

    /**
     * The dependencies {} block configures the dependencies Gradle needs to use
     * to build your project. The following line adds Android Plugin for Gradle
     * version 2.3.2 as a classpath dependency.
     */

    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.2'
    }
}
/**
 * The allprojects {} block is where you configure the repositories and
 * dependencies used by all modules in your project, such as third-party plugins
 * or libraries. Dependencies that are not required by all the modules in the
 * project should be configured in module-level build.gradle files. For new
 * projects, Android Studio configures JCenter as the default repository, but it
 * does not configure any dependencies.
 */

allprojects {
   repositories {
       jcenter()
   }
}
최상위 build.gradle은 프로젝트의 모든 모듈에 공통되는 gradle 저장소와 종속성을 정의하기 위해 buildscript {} 블록을 사용합니다.

모듈 레벨 빌드파일도 한번 보겠습니다. 보통의 안드로이드 앱 프로젝트라면,
project/app/build.gradle 파일을 말합니다.

/**
 * The first line in the build configuration applies the Android plugin for
 * Gradle to this build and makes the android {} block available to specify
 * Android-specific build options.
 */

apply plugin: 'com.android.application'
/**
 * The android {} block is where you configure all your Android-specific
 * build options.
 */

android {

  /**
   * compileSdkVersion specifies the Android API level Gradle should use to
   * compile your app. This means your app can use the API features included in
   * this API level and lower.
   *
   * buildToolsVersion specifies the version of the SDK build tools, command-line
   * utilities, and compiler that Gradle should use to build your app. You need to
   * download the build tools using the SDK Manager.
   */

  compileSdkVersion 25
  buildToolsVersion "25.0.3"

  /**
   * The defaultConfig {} block encapsulates default settings and entries for all
   * build variants, and can override some attributes in main/AndroidManifest.xml
   * dynamically from the build system. You can configure product flavors to override
   * these values for different versions of your app.
   */

  defaultConfig {

    /**
     * applicationId uniquely identifies the package for publishing.
     * However, your source code should still reference the package name
     * defined by the package attribute in the main/AndroidManifest.xml file.
     */

    applicationId 'com.example.myapp'

    // Defines the minimum API level required to run the app.
    minSdkVersion 15

    // Specifies the API level used to test the app.
    targetSdkVersion 25

    // Defines the version number of your app.
    versionCode 1

    // Defines a user-friendly version name for your app.
    versionName "1.0"
  }

  /**
   * The buildTypes {} block is where you can configure multiple build types.
   * By default, the build system defines two build types: debug and release. The
   * debug build type is not explicitly shown in the default build configuration,
   * but it includes debugging tools and is signed with the debug key. The release
   * build type applies Proguard settings and is not signed by default.
   */

  buildTypes {

    /**
     * By default, Android Studio configures the release build type to enable code
     * shrinking, using minifyEnabled, and specifies the Proguard settings file.
     */

    release {
        minifyEnabled true // Enables code shrinking for the release build type.
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }

  /**
   * The productFlavors {} block is where you can configure multiple product
   * flavors. This allows you to create different versions of your app that can
   * override defaultConfig {} with their own settings. Product flavors are
   * optional, and the build system does not create them by default. This example
   * creates a free and paid product flavor. Each product flavor then specifies
   * its own application ID, so that they can exist on the Google Play Store, or
   * an Android device, simultaneously.
   */

  productFlavors {
    free {
      applicationId 'com.example.myapp.free'
    }

    paid {
      applicationId 'com.example.myapp.paid'
    }
  }

  /**
   * The splits {} block is where you can configure different APK builds that
   * each contain only code and resources for a supported screen density or
   * ABI. You'll also need to configure your build so that each APK has a
   * different versionCode.
   */

  splits {
    // Screen density split settings
    density {

      // Enable or disable the density split mechanism
      enable false

      // Exclude these densities from splits
      exclude "ldpi", "tvdpi", "xxxhdpi", "400dpi", "560dpi"
    }
  }
}
/**
 * The dependencies {} block in the module-level build configuration file
 * only specifies dependencies required to build the module itself.
 */

dependencies {
    compile project(":lib")
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

제가 보통 보는 블록은 defaultConfig, buildType, dependencies 정도인 것 같네요.
splits나 productFlavors를 잘 사용하면 무료, 유료 앱 따로 빌드하기나 
화면 해상도에 따른 빌드 설정을 각각해줄 수 있을 것 같네요.

그리고 추가적으로, 빌드할 때 필요한 설정을 가지고 있는 파일들이 있습니다.
- gradle.properties: 프로젝트 범위의 그래들 설정을 함. 예, gradle daemon 힙 크기 설정
- local.properties: 빌드 시스템의 로컬 환경을 구성. 예, sdk, ndk 경로 설정

뭔가 간단한 앱을 만들때는 build.gradle 파일을 많이 수정할 일이 없었는데
모듈을 만들어서 붙이고, 다른 플러그인도 같이 사용하게되면
종속성이나 여러가지 신경써야할 포인트가 많은 것 같습니다.

이 포스트를 시작으로 책도 좀 보고 더 깊게 공부해봐야겠습니다.

Gradle의 GitHub 주소를 남기고 글 마치겠습니다.

2017년 5월 11일 목요일

OpenGL Super Bible 7th 공부해볼까...

https://doc.lagout.org/programmation/OpenGL/OpenGL%20SuperBible_%20Comprehensive%20Tutorial%20and%20Reference%20%287th%20ed.%29%20%5BSellers%2C%20Wright%20%26%20Haemel%202015-07-31%5D.pdf

영어 책이라 이해가 전혀 안되진 않겠지만 힘들게 읽을거 같은데 고민...

일단 적어놓고 공부해봐야겠다.

추가, apple 문서 쪽에 openGL ES 에 대한 문서가 있는데
https://developer.apple.com/library/content/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/Introduction/Introduction.html
같이 곁들여 보면 좋을듯.

2017년 4월 7일 금요일

2017년 1월 5일 목요일

pod install 시 abort 문제

iOS에서 Firebase를 세팅하는 중에 문제가 생겼습니다.
정확한 로그가 뜨지는 않았으나

➜  proj.ios_mac pod install
Analyzing dependencies
Downloading dependencies
Installing Firebase (3.8.0)
Installing FirebaseAnalytics (3.5.1)
Installing FirebaseCore (3.4.4)
Installing FirebaseInstanceID (1.0.8)
Installing GoogleInterchangeUtilities (1.2.2)
Installing GoogleSymbolUtilities (1.1.2)
Installing GoogleToolboxForMac (2.1.0)
Generating Pods project
[1]    18783 abort      pod install

이런식으로 마지막에 설치가 완료되는것이 아닌 abort가 일어납니다.

찾아봤더니,
http://stackoverflow.com/questions/40581749/xcode8-1-cocoapods-abort-trap6
trap 6 abort는 아니지만
cocoapods 을 재설치하랍니다.

아마 예상되는 원인은 Xcode 8.1버전이라서 버전이 안맞아서 그런 것 같습니다.

$gem uninstall cocoapods
$gem install cocoapods --pre

이렇게 진행했더니 성공했습니다.
아마 개발진행중인데 정식버전으로는 아직 올라오지 않은 것 같네요.

어쨌든 해결했습니다!

2016년 12월 30일 금요일

Arachni 설치 & 실행기




Mac 에 Arachni 설치하기
현재 맥북 버전 10.12 시에라

우선 Arachni가 무엇인지 알아봅시다.
Web Vulnerability Scanner(WVS), 웹 취약점 스캐너 툴 중에 하나로
오픈소스 프레임워크 입니다.
https://www.owasp.org/index.php/Category:Vulnerability_Scanning_Tools
수 많은 WVS가 있는데 오픈소스지만 성능이 상위 5위 안에 드는 툴입니다.
아, WVS는 무엇인지도 알아볼까요?

"Web Application Vulnerability Scanners are automated tools that scan web applications, normally from the outside, to look for security vulnerabilities such as Cross-site scriptingSQL InjectionCommand InjectionPath Traversal and insecure server configuration. This category of tools is frequently referred to as Dynamic Application Security Testing (DAST) Tools. A large number of both commercial and open source tools of this type are available and all of these tools have their own strengths and weaknesses. If you are interested in the effectiveness of DAST tools, check out the OWASP Benchmark project, which is scientifically measuring the effectiveness of all types of vulnerability detection tools, including DAST." - OWASP.org
해석해봅시다. :)

"웹 응용 프로그램 취약성 검사기는 일반적으로 외부에서 웹 응용 프로그램을 검색하여 교차 사이트 스크립팅, SQL 삽입, 명령 삽입, 경로 탐색 및 안전하지 않은 서버 구성과 같은 보안 취약성을 찾는 자동화 된 도구입니다. 이 범주의 도구는 종종 DAST (Dynamic Application Security Testing) 도구라고합니다. 이 유형의 상용 및 오픈 소스 도구가 많이 있으며 이러한 도구는 모두 자체 강점과 약점이 있습니다. DAST 도구의 효과에 관심이 있다면 DAST를 포함한 모든 종류의 취약점 탐지 도구의 효과를 과학적으로 측정하는 OWASP Benchmark 프로젝트를 확인하십시오." - produced by 구글 번역

이렇게 알아봤으니 설치를 해보겠습니다.

설치파일을 다운로드.
링크 : http://www.arachni-scanner.com/download/


arachni-1.4-0.5.10-darwin-x86_64.tar.gz
이라는 파일을 받았습니다.

압축을 해제하면,



bin, system 폴더가 있고 그 외에 라이센스, 리드미 등과 같은 파일이 있습니다.
우리가 사용할 아나크니의 실행파일은 bin에 있습니다.
bin에는



우선 맨 앞에 있는 실행파일인 arachni를 실행해볼까요?



그냥 실행하면 URL이 필요하다고 합니다.
당연히 arachni는 웹 보안 취약점 테스트 툴이기 때문에
테스트를 할 URL을 넣어야합니다.

# 맥에서 설치할때 에러가 있음
이슈 : https://github.com/Arachni/arachni/issues/777
위의 링크에서 https://gist.github.com/Zapotek/26b1150c4c52eaeb4984ab60e2d4ce1d
이 파일을 system/environment파일로 교체해서 실행하면 에러 없이 진행할 수 있습니다.

아라크니를 실행해봅시다.
커맨드라인(CLI) 가이드: https://github.com/Arachni/arachni/wiki/Command-line-user-interface

http://example.com 이라는 사이트에 테스트를 해보겠습니다.
$./arachni http://example.com

실행 결과:


이렇게 봐서는 어떤 문제가 있는지 어떻게 체크되었는지 잘 알기 힘들 수 있는 것 같습니다.

그래서 리포트 문서를 아래와 같이 명령어를 진행해서 이쁘게 볼 수 있습니다.

$arachni --output-verbose --scope-include-subdomains http://example.com --report-save-path=example.com.afr

$arachni_reporter example.com.afr --reporter=html:outfile=my_report.html.zip

이렇게 하고 저 압축파일을 풀면 html 파일이 나옵니다.
실행한 결과는 아래와 같습니다.



# 현재 테스트중에 에러가 몇가지가 났는데 확인해보니
[Arachni::Browser::Error::Spawn] Could not start the browser process.
이런 에러가 나오고 있었네요.
검색해보니 몇가지 이슈가 있었나봅니다.
이슈 링크: https://github.com/Arachni/arachni/issues/737

확인해보니 파일을 다시 받아서 진행해보라고 해서 개발버전을 다운받아 진행했더니
잘 됩니다.
링크 : http://downloads.arachni-scanner.com/nightlies/

테스트를 진행할 사이트(데모 사이트)가 있습니다.
http://testfire.net/
해킹 데모를 할 수 있는 사이트같은데 지금 스캐너를 돌리는데 한참걸리네요.

결과:
데모 사이트로 테스트했더니 1시간 이상 걸려서 중간에 중단했습니다.

테스트 결과 파일은 아래에 있습니다.
https://drive.google.com/file/d/0B8QyETofNTcvVDhsbVNieFI5aGM/view?usp=sharing

그리고 HTML로 변환하는 명령어로 만든 파일도 첨부하겠습니다.
(명령어 :
$arachni_reporter testfire.net\ 2016-12-30\ 19_44_07\ +0900.afr --reporter=html:outfile=my_report.html.zip)
https://drive.google.com/file/d/0B8QyETofNTcvMzd2eUdueU5hZHc/view?usp=sharing

HTML파일로 만들어서 본 화면입니다.



각각의 차트, 이슈, 보완해야하는 부분 등을 볼 수 있습니다.
좋은 보안 오픈소스 프로젝트입니다.
추천추천

2016년 12월 14일 수요일

Git trend - monitoring the popularity and the truck factor of GitHub projects



http://gittrends.io/#/

Git에서 트렌드로 올라와 있는 프로젝트들의 유명함, 성장 패턴, 예상, 트럭 팩터(?)를
볼 수 있는 서비스입니다.

예시로 리누즈 토발즈의 리눅스를 한번 볼까요?



star(별)을 얼마나 받았는지, 각종 수치를 볼 수 있습니다.
그 외에도 트럭 팩터, 랭킹, 컨트리뷰터 등에 대한 정보도 볼 수 있습니다.





각종 재미있는 수치들을 볼 수 있는데, 여기서 트럭 팩터란,

"Truck Factor (aka Bus Factor) is the minimal number of developers that have to be hit by a truck (or quit) before a project is incapacitated. It reveals the concentration of knowledge in individual developers."

Truck Factor (aka Bus Factor)는 프로젝트가 무능력 해지기 전에 트럭에 타격을 가해 야하는 최소한의 개발자 수입니다. 그것은 개별 개발자의 지식 집중을 나타냅니다.

위키의 설명 링크 입니다. ( https://en.wikipedia.org/wiki/Bus_factor )
"Bus Factor"는 전문 지식이 부족하거나 유능한 직원이 부족하여 프로젝트가 중단되기 전에 갑자기 프로젝트에서 사라져야하는 팀 구성원의 최소 수입니다.

이렇다고 하네요. 이런 용어도 있는 것을 처음 알았습니다. ㅎㅎ
다시말해서, 프로젝트가 망해가기전에 제 할일을 못하고 있는 컨트리뷰터를
얼마나 잘라야하는 것 인가에 대한 수치인 것이네요.

어쨋든, 재미있는 인사이트를 주는 서비스인 것 같습니다.
GOOD GOOD SERVICE!

2016년 12월 11일 일요일

CakeResume-Make Resume like make cake! 케이크를 만들듯이 레쥬메를!


https://www.cakeresume.com/v2
자기소개서 (레쥬메)를 케이크 만들듯이 만들어보는 서비스입니다.
신기하고 재미있는 솔루션 같습니다.



드래그 앤 드롭으로 컴포넌트 컨텐츠를 구성하고 다운받아볼수 있는
포트폴리오 만들어주기 서비스라고 볼수도 있겠습니다.

제가 만들어본 예시는 링크로 보실 수 있습니다.
https://www.cakeresume.com/yun-seok-lee
PDF로도 다운받을 수 있고 좋은 서비스인 것 같습니다.

굿굿

2016년 12월 3일 토요일

Chrome version 55 updated

크롬이 메모리에 대한 최적화를 통해
메모리를 많이 먹던 문제를 해결한 55 버전이 업데이트되었습니다.


(신난다!)

그 전에는 탭을 여러개 열어놓으면 메모리가 80%이상으로 올라갔었는데
업데이트하면서 현재는 45%, 메모리 할당량이 현저하게 줄어들었네요.

업데이트에 대한 이야기는 크롬 블로그에 올라왔네요.
https://googlechromereleases.blogspot.kr/2016/12/stable-channel-update-for-desktop.html

http://v8project.blogspot.kr/2016/10/fall-cleaning-optimizing-v8-memory.html
이 V8엔진 블로그 글에 따르면,
V8엔진의 자바스크립트 힙 크기를 최적화하는데에 가비지 컬렉션에서의 부하와
메모리 사용량이 트레이드 오프 관계가 있는데 그 부분을 최적화하여
결과적으로 힙 크기를 줄인 것 같습니다.(기기 메모리가 작은 환경에서)
전체적으로 메모리 사용량이 줄은 것 같은데,
54버전에서는 페이스북 탭을 1개만 열어도 메모리가 70%까지 올라갔던것에 비해
55버전에서는 페이스북 탭을 6개 열어도 메모리가 51%정도라는 것에 대해
많이 최적화된것으로 보입니다.

2016년 11월 9일 수요일

안드로이드 보이스 액션(Ok Google, Google Now)


요즘 '오케이 구글'로 검색하고 알림 설정하는데에 재미가 들려서
이렇게 명령을 실행하는 기능의 이름이 뭘까하고 찾아봤습니다.

'보이스 액션' 또는 '구글 나우 액션' 이라고 하네요.
구글 개발자 페이지를 보면 알 수 있었습니다.
https://developers.google.com/voice-actions/system/

그리고 보이스 액션을 사용한다면 어떻게 구현해야하는지도 나와있네요.
https://developers.google.com/voice-actions/system/#step_1_define_an_intent_filter

알람이나 전화걸기, 사진을 가져오는 등에 대한 액션은 이미 정의되어 있어서
어렵지 않게 구현할 수 있을 것 같은데요.

우리가 만든 앱의 특정기능을 실행하는 액션은 어려울 것 같아보입니다.
(한번 해봐야 알겠지만요.)

https://developers.google.com/voice-actions/system/#step_3_update_your_app_completion_status
위의 링크에는 앱 인덱싱을 포함한 빌더를 통해 알람을 세팅할 수 있는
예시코드가 포함되어 있습니다.

시간이 된다면 예시코드와 함께 포스팅을 해봐야겠습니다.

2016년 10월 13일 목요일

JekyII를 이용해서 GitHub Page를 블로그로 만들기



https://help.github.com/articles/using-jekyll-as-a-static-site-generator-with-github-pages/

이 홈페이지를 보고 만들었습니다.
차근차근 따라가다 보면 만들 수 있습니다.

<만들기>

* 준비물
- ruby 2.0.0+
- git

* 설치
(이미 깃헙 페이지가 생성되어있는다는 가정하에 진행하겠습니다.
깃헙 페이지 만들기 : https://pineoc.blogspot.kr/2016/03/make-githubio-page.html )

1. bundler 설치
$gem install bundler

2. Gemfile 만들기
이 파일은 jekyll을 설치하기 위한 makefile 같은 녀석인데
아래의 내용을 넣어주시면 됩니다.
source 'https://rubygems.org'
gem 'github-pages', group: :jekyll_plugins

3. bundle install 실행
$bundle install
이 명령어를 치면 설치가 진행됩니다.
여기까지가 jekyll 설치가 기본적으로는 완료되었습니다.
추가적으로 설치를 몇 개 더 하셔야합니다.

#jekyll site 파일 세팅하기 : step-3-optional-generate-jekyll-site-files
#jekyll theme 추가하기 : adding-a-jekyll-theme-to-your-site

#주의할 점은
Gemfile의 텍스트는
1. GitHub page에 올릴경우
source "https://rubygems.org"
ruby RUBY_VERSION

# Hello! This is where you manage which Jekyll version is used to run.
# When you want to use a different version, change it below, save the
# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
#
#     bundle exec jekyll serve
#
# This will help ensure the proper Jekyll version is running.
# Happy Jekylling!
#gem "jekyll", "3.2.1"

# This is the default theme for new Jekyll sites. You may change this to anything you like.
gem "minima"

# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
# uncomment the line below. To upgrade, run `bundle update github-pages`.
gem "github-pages", group: :jekyll_plugins

# If you have any plugins, put them here!
# group :jekyll_plugins do
#   gem "jekyll-github-metadata", "~> 1.0"
# end
2. Local에서 확인할 경우
source "https://rubygems.org"
ruby RUBY_VERSION

# Hello! This is where you manage which Jekyll version is used to run.
# When you want to use a different version, change it below, save the
# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
#
#     bundle exec jekyll serve
#
# This will help ensure the proper Jekyll version is running.
# Happy Jekylling!
gem "jekyll", "3.2.1"

# This is the default theme for new Jekyll sites. You may change this to anything you like.
gem "minima"

# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
# uncomment the line below. To upgrade, run `bundle update github-pages`.
# gem "github-pages", group: :jekyll_plugins

# If you have any plugins, put them here!
# group :jekyll_plugins do
#   gem "jekyll-github-metadata", "~> 1.0"
# end

이렇게 세팅하고
$bundle install
$bundle exec jekyll serve

결과화면은 아래와 같습니다.




제 결과 페이지 입니다.
https://pineoc.github.io/

글을 올리는 방법은 다음 포스트에서 진행해봐야겠습니다.
I hope this will help you!

JIRA Plugin - ScriptRunner 소개 #2

관련 글 소개 #1:  https://pineoc.blogspot.com/2019/03/scriptrunner-1.html ScriptRunner 소개 #2 지난 글에서는 Behaviours를 보았고 다음 내용인 콘솔, 리스너 등을 ...