2017년 5월 14일 일요일

Cocos2d-x version difference between 2.x vs 3.x

http://cocos2d-x.org/

Cocos2d-x는 현재 두개의 버전을 지원하고있는데요.
2.2.6 버전과 3.15 버전을 지원하고 있습니다.

최근에 이 두개의 버전은 어떤 차이가 있고, 성능차이가 있는가에 대해 궁금해져서
이렇게 포스팅을 하게 되었습니다.

우선 크게 바뀐 것 부터 정리해보자면,
Release Note on GitHub: Cocos2d-x-v3.0-ReleaseNote.md
참고: VallistA님의 블로그

1. Python을 사용한 크로스 플랫폼 개발 지원(Cocos console)
Cocos2d-x 2.x 버전에서는 Cygwin을 이용한 리눅스 환경에서 작업을 했다면,
3.x 버전에서는 파이썬을 이용한 cocos console을 이용해서 작업할 수 있게 되었습니다.
이를 통해 쉽게 크로스 플랫폼 환경에서 편하게 프로젝트를 만들고 컴파일할 수 있게 되었습니다.

2. Objective-C 패턴 제거(Objective-C pattern removed)

  1. cocos2d라는 namespace를 사용하게 되면서, 더이상 CC라는 prefix를 사용할 필요가 없게되었습니다.
    • CCSprite -> Sprite, CCFrame -> Frame, CCScene -> Scene, CCDirector -> Director 등으로 변경되었습니다.
  2. copy() 함수 대신에 clone() 함수를 사용합니다.
  3. Singleton은 getInstance(), destoryInstance() 함수명을 사용하여 인스턴스를 관리합니다.
    • 그전에는 sharedDirector()와 같은 함수를 사용했었습니다.
  4. Object 클래스 -> Ref로 변경
    • Object라는 이름이 모호한 점이 있어 Ref로 변경되었습니다.
  5. Getter 함수들이 get prefix를 가집니다.
  6. POD type의 변수를 const로 전달합니다.


3. C++11 features를 따름
C++ 11 버전을 지원하게 되어서 여러가지 기능을 사용 가능하고, 따르게 되었습니다.
- auto 키워드를 사용가능 (보다 적극적으로 사용하게 되었습니다.)
- lambda식을 사용가능.
- enum(strongly typed enum)을 사용.
        (CCPointZero -> Point::ZERO 로 변경)
- override, final 키워드를 사용.

4. 새로운 Renderer
Cocos2d-x 2.2버전은 현재 문제는 없지만 최적화를 하거나 새로운 함수 추가,
새로운 플랫폼 추가하기가 힘듭니다. 이런 문제를 해결하기 위해 새로운 렌더러를 만들었습니다.
새로운 렌더러는 다음과 같은 기능을 가집니다.
  • It has been decoupled from the Scene Graph. The draw() method, instead of "drawing" it sends a RenderCommand to the Renderer, and Renderer is responsible for drawing the queued RenderCommand commands.
  • QuadCommands (used by Sprite and ParticleSystem objects) will be automatically batched.
  • CustomCommand objects allow the user to use custom OpenGL code, using a API similar to v2.2
  • GroupCommand objects allow to have "stacks" in the Renderer with different OpenGL values.
  • Auto-culling for Sprite objects (although, technically, Auto-culling is not performed in Renderer code, but in the Sprite code)
  • Global Z ordering (local Z ordering is still supported)
좀 더 살펴보면,

- Auto-batching
batch 작업을 많이하면 할 수록 성능이 안좋아지는데 이를 최적화합니다.
- Auto-culling(view frustum culling)
Sprite에 대해 처리를 하는 작업입니다. Sprite가 화면에서 나갈경우 draw가 실행되지 않도록합니다.
- Global Z order
setZOrder(), getZOrder()을 deprecate하고
setGlobalZOrder(), getGlobalZOrder(), setLocalZOrder(), getLocalZOrder()을 만들었습니다.
화면 전체에 대해 Zorder를 정할 것인지, 그 노드에서 Zorder를 정할 것인지를 세팅할 수 있습니다.

* Sprite vs SpriteBatchNode
2.2 버전에서는 Sprite를 효율적으로 처리하기 위해서, SpriteBatchNode를 사용하라고 권장 했었습니다.
3.0 버전에 올라와서는 SpriteBatchNode를 사용하지 않더라도 Sprite를 만들때 TextureID를 같게 만든다면 큰 성능 이슈는 없습니다.
만약 성능을 올리고 싶다면 SpriteBatchNode를 사용하는게 여전히 좋습니다.

5. LabelTTF / LabelBMFont / LabelAtlas 개선
Label에 대한 구현이 Label 클래스로 통합되었습니다.

6. 새로운 EventDispatcher
touch event, keyboard event, acceleration event, custom event에 대한 디스패쳐가 삭제되었습니다.
EventDispatcher로 통합되었는데, 모든 이벤트는 EventDispatcher로 처리합니다.

7. 물리엔진 개선(Physics Integration)
Box2D로 구현했던 물리엔진 기능이 Chipmunk2D로 통합, 바뀌었습니다.

정리해놓고 보니까 꽤 많은 변화가 있었지만, 2.2.6 버전도 지금까지 어떤 변화가 있었는지
그에 대한 정리가 필요해보입니다.

그 외에  OpenGL 버전 업은 어떻게 되었는지도 궁금하지만 릴리즈 노트에는 없으니
따로 찾아봐야겠습니다.

ARM에서 Ricardo Quesada 님이 발표한 내용이 있어서 공유합니다.


다음엔 OpenGL 버전과 Cocos2d-x 버전과의 상관관계를 알아봐야겠습니다.


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월 28일 금요일

Cocos2d-x 3.15 version updated

이번에 Cocos2d-x 3.15 버전 업데이트가 진행되었다고 합니다.
링크: release notes
주요 업데이트 내용은 아래와 같습니다.
  • full Android Studio supports: include editing, compiling and debugging c++ codes: doc
  • audio engine uses tremolo and MP3 Decoder Library to decode audio files on Android: high performance and more adaptable to different Android devices
  • WebSockets and SocketIO supports SSL
  • AssetsManagerEx is more stable
  • update Spine runtime to v3.5.35
  • update flatbuffer to v1.5
  • remove support for Windows 8.1 store and phone
  • update OpenSSL to v1.1.0
  • remove linux 32-bit support
가장 큰 변화로는 안드로이드 스튜디오를 정식으로 지원하는 점입니다.
Xcode로 개발할 경우에는 C++ 디버깅을 할 수 있었는데, 안드로이드 스튜디오에서는 하기 힘들었습니다.
(C++을 디버깅하기 위해서는 여러 가지 설정해야 하는 부분이 있었습니다.)
이번 업데이트를 통해서 안드로이드 스튜디오에서 C++ 코드를 디버깅할 수 있는 환경이 공식적으로 지원됩니다.
자세한 사항은 위의 doc 링크를 참조하시면 좋을 것 같습니다.
AudioEngine 쪽 성능 향상과 많은 안드로이드 디바이스 호환성을 위해 tremolo라는 mp3 디코더 라이브러리를
안드로이드 쪽에 추가했다고 합니다.
audio performanceaudio performance
그래프만 봤을 때 SimpleAudioEngine은 더 이상 쓰면 안 될 것 같은 느낌이네요.
저도 어서 업데이트를 해야겠습니다.
그 외에 웹소켓, Spine, flat buffer, openSSL 업데이트가 되었습니다.

2017년 4월 7일 금요일

2017년 3월 9일 목요일

Kite Compositor - 애니메이션과 프로토타이핑 툴





https://kiteapp.co/

sketch 앱과 보통 함께 쓰이는 것 같은데 강력한 툴인 것 같습니다.
일단 포스팅해두고 나중에 써보는걸로!






동영상 첨부하고
저는 사용해봐야겠습니다. ㅎㅎ

2017년 1월 12일 목요일

Admob banner not showing on app started issue on Android 6.0

Cocos2d-x 로 게임을 개발하던 중에 배너를 달았지만
앱 시작 시에 바로 나오지않고 1분 뒤에 새로고침될 때에 나오거나 앱이 resume 될 때 
광고가 나오는 현상이 발생했다.

모든 OS에서 그런 줄 알았는데 마시멜로우 버전 이상에서만 발생한다.

여기저기 찾아보던중

아래와 같은 코드가 자꾸 있길래 지웠는데 혹시나해서 그냥 해봤더니
처음 시작부터 광고가 잘나오기 시작한다.

adView.setBackgroundColor(Color.BLACK);
adView.setBackgroundColor(0);

...

이렇게 하니 모든 OS 버전에서 앱 시작과 동시에  광고가 잘 나온다.
어쨌든 해결.

2017년 1월 5일 목요일

Cocos2d-x v3.14 released!


cocos2d-x가 3.14버전이 업데이트 되었습니다!
(버전 넘버링이 3.14 = Pi라서 이미지에 파이 기호가 있네요.ㅎㅎ)

릴리즈 글 링크 :
cocos2d-x forum : http://discuss.cocos2d-x.org/t/cocos2d-x-v3-14-released/34307
Github note : https://github.com/cocos2d/cocos2d-x/blob/v3/docs/RELEASE_NOTES.md
Github CHANGELOG : https://github.com/cocos2d/cocos2d-x/blob/v3/CHANGELOG

주요 업데이트 내용입니다.

  • [NEW] Add Spine binary file format support
  • [NEW] Action: add a method to get the number of actions running in a given node with specific tag
  • [NEW] Action: new actions: ResizeBy and ResizeTo
  • [NEW] Button: can set title label
  • [NEW] Can disable multi touch on Android
  • [NEW] EventDispatcher: Add hasEventListener to check listener existance
  • [NEW] EditBox: add horizontal text alignment
  • [NEW] EventDispatcher: added hasEvent() to check if an event is added
  • [NEW] Sprite: support slice9 feature
  • [NEW] Slider: add methods to get _slidBallNormalRenderer
  • [NEW] Desktop: add a method to toggle between fullscreen and windowed
  • [NEW] Desktop: add events for window resize, focus and unfocus
  • [NEW] Mac: supports game controller
  • [NEW] JSB: add cc.sys.now() and perfromance.now(), the last one is more accurate
  • [NEW] Lua: add cc.vec3 functions: add, sub and dot
  • [NEW] Lua: use luajit 2.1.0-beta2
  • [NEW] Web: Add cc.CONCURRENCY_HTTP_REQUEST_COUNT to control max concurrent task count for XMLHttpRequest

정리해보자면 새롭게 추가된 것은 아래와 같습니다.
- Spine 바이너리 파일 형식 지원.
- 모든 플랫폼에 luajit 2.1.0-beta2 사용
- ResizeBy 및 ResizeTo 액션 추가
- Android에서 멀티 터치를 사용 중지 할 수 있음.
- Sprite는 slice9 기능을 지원.
- Action: 특정 태그가 있는 노드에서 실행 중인 액션의 수를 가져 오는 메소드가 추가.
- Button의 제목 레이블을 설정 가능.
- EditBox는 가로 텍스트 정렬 지원.
- Mac에서 게임 컨트롤러 지원

그 외에 수정된 사항도 많은데
1. DrawNode에서 line width를 설정 할 수 없었는데 설정 가능하게 되었습니다.
2. AudioEngine에서 .ogg 파일이 재생이 안되는 버그가 있었는데 해결되었습니다.

버그도 많이 수정되었고 기능도 추가가 많이 되어서
기쁘게 업데이트해야겠습니다. :)

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로도 다운받을 수 있고 좋은 서비스인 것 같습니다.

굿굿

JIRA Plugin - ScriptRunner 소개 #2

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