2016년 9월 24일 토요일

Cocos2d-x, Error : Assert failed: reference count should be greater than 0

Fatal signal 11 (SIGSEGV)
D/cocos2d-x debug info: Assert failed: reference count should be greater than 0
E/cocos2d-x assert:
/Users/pineoc/Desktop/Game/proj.android-studio/../cocos2d/cocos/./base/CCRef.cpp function:retain line:89

현재 진행 중인 프로젝트에서 이러한 에러가 나오고 있다.

해당 파일에 들어가서 내용을 보면
void Ref::retain()
{
    CCASSERT(_referenceCount > 0, "reference count should be greater than 0");
    ++_referenceCount;
}

레퍼런스 카운트에 대한 문제인 것 같은데, 이 문제는 처음보는 문제라
분석을 해봐야 겠다.

----------------

현재 주 테스트 기기는 Dell Venue 7 인데
갤럭시 계열 기기는에서는 문제 없이 잘 돌아가는데, 유독 Dell Venue에서만 문제가 발생.
메모리 또는 태블릿이라 문제가 있는 것인지 추측해봤지만
메모리쪽은 모바일폰이랑 태블릿이랑 같아서 문제가 되지 않는것 같다.
단순히 성능이나 안드로이드 OS쪽 문제도 아닌 것 같은데 조금 더 분석이 필요한 것 같다.

----------------

로직을 살펴봤는데 아무래도 JniHelper, JNI를 사용하는 함수에서 문제가 있는 것 같다.
NDK쪽을 활용하는 JniHelper 클래스도 확인해보고 Thread Safe문제도 있는지 확인해봤지만
그 쪽 문제는 아닌 것 같다.

----------------
해당 문제를 없애기 위해서 여러가지 다 해봤는데
AndroidManifest.xml 설정부터 내부 로직까지 수정해봤으나 오류는 계속되었다.
JniHelper를 이용해서 함수를 부르는데에 문제가 있는 것 같아서 NDK쪽 문제인가해서
계속 찾아보았는데

테스트 기기가 x86 프로세서...
지금까지 NDK 빌드를 armeabi 버전으로만 빌드한것이 문제.
그래서 Application.mk에
APP_ABI := armeabi x86으로 수정해주고
빌드를 진행, 실행해봤더니 문제해결.

코드에도 문제가 있었을 수 있지만,
핵심은 프로세서 종류문제였다.

해결방법은 간단하게

APP_ABI := armeabi x86
을 추가해주면 끝.

2016년 9월 21일 수요일

정경업: Django로 쇼핑몰 만들자 - PyCon APAC 2016





파이썬에 관심도 있고 장고 공부도 하고싶었는데

구현할게 많고 까다롭다는 쇼핑몰 만들기에 대한 발표내용이네요.



나중에 한번 더 봐야겠어요.ㅎㅎ

2016년 9월 15일 목요일

GitHub profile page가 이뻐졌어요!



원래는 어땠는지 스크린샷을 찍어 놓지 못해서 비교하기가 힘들지만
프로젝트의 정보를 한눈에 이쁘게 볼 수 있게되었습니다.

밑에는 어떤 기여를 했는지 정리해서 볼 수 있네요.


이번 업데이트에는 다른 것들도 추가가 되었는데
프로젝트 안에 칸반 스타일 보드를 추가해서 트렐로(Trello) 처럼 할 일, 이슈를 관리 할 수 있게
Projects 탭이 추가되었습니다.


관련 동영상은 아래에!


깃헙과 함께 즐거운 오픈소스 기여를!


2016년 9월 12일 월요일

스트레스 테스트 툴 - Artillery

https://blog.outsider.ne.kr/1238
아웃사이더님의 블로그를 보고 Artillery 툴이
ab(apache benchmark)보다 뭔가 더 좋은 것 같아서 한 번 공부해봅니다.



이 툴을 테스트해보고 싶었던 가장 큰 이유는
report라는 기능으로 테스트 결과를 html 파일로 보기 좋게 만들어주는 기능이 있기때문..!

한번 테스트해보겠습니다.

1. 설치
$npm install artillery -g

2. 퀵 테스트 실행
$artillery quick -d 60 -r 10 http://pineoc.blogspot.com

Log file: artillery_report_20160912_130365.json
Phase 0 started - duration: 60s

Report for the previous 10s @ 2016-09-12T04:04:09.912Z
  Scenarios launched:  99
  Scenarios completed: 95
  Requests completed:  194
  Concurrent users:    4
  RPS sent: 19.92
  Request latency:
    min: 168.8
    max: 623.9
    median: 188
    p95: 236.5
    p99: 504.6
  Scenario duration:
    min: 473.9
    max: 941.3
    median: 517.2
    p95: 718.9
    p99: 921.6
  Codes:
    200: 96
    302: 98
... 생략
밑에 쭈욱 로그가 나옵니다.

파일이 만들어졌다고 나왔네요. 한번 들여다보면,


이렇게 데이터가 14000줄 정도 나옵니다.
한번 report 명령어로 리포트 뽑아보겠습니다.

3. 리포트 만들기
$artillery report

이렇게 html이 바로 짠하고 나옵니다.





각각의 그래프에 마우스 커서를 올리면 데이터도 확인해볼 수 있구요.
실제로 서비스 개발할 때도 사용해봐야겠습니다.
굿굿

2016년 9월 8일 목요일

Cocos2d-x 3.13 버전 이슈



자주 코코스2dx 쪽 저장소를 들여다 보곤하는데
3.13 버전에서 문제가 몇 개 있나봅니다.

마일스톤이 하나 올라와 있네요.



3.13.1 버전의 마일스톤이 있습니다.
모두 해결이 된 상태라고 하는데 조만간 업데이트 해야겠군요.
무슨 문제가 있었는지 한 번 볼까요.



문제점을 나열해보자면
1. 3.13버전에서 디자인 resolution을 정해주지않으면 앱이 죽는다.
2. text color가 안먹힌다.
3. 안드로이드의 경우, 앱을 백그라운드에서 아이콘을 눌러서 다시 시작하면 죽는다.
4. 자바스크립트의 경우, jsval_to_std_string이라는 함수에 문제가 있었음.
5. 3.13 안드로이드 OpenSLES 에러, 배경음악 파일이 특정 경로에 있을때 재생하면 에러남.
6. 안드로이드 경우, AudioEngine::stop() 이 finished 콜백함수를 부르는데 문제

다 고쳐진 것 같습니다. 위의 마일스톤을 봤을때는요. ㅎㅎ

아직 다운로드 링크는 3.13.1로 안올라간거 같은데 조만간 올라오지 않을까 싶습니다.
즐거운 게임 개발되시길 바라요~

2016년 9월 6일 화요일

Cocos2d-x fork한 저장소 원래 저장소에서 업데이트 받기

fork한 내 저장소를 현재 내가 작업한 내용과 충돌난 경우
저장소에서 그냥 강제로 업데이트해야 할 경우가 있습니다.

저는 아래와 같이 업데이트를 진행해보았습니다.
(다른 저장소의 경우도 아래와 같이 진행해주시면 됩니다)

$ git fetch --all
$ git reset --hard cocos2d/v3
$ git pull cocos2d/v3

원래는 origin/v3 이렇게해야 하는데
cocos2d/v3 한 이유는 리모트 저장소에서 불러와야 하기 때문입니다.

$ git remote -v 하면 아래와 같이 나옵니다.

cocos2d https://github.com/cocos2d/cocos2d-x.git (fetch)
cocos2d https://github.com/cocos2d/cocos2d-x.git (push)
origin https://github.com/pineoc/cocos2d-x.git (fetch)
origin https://github.com/pineoc/cocos2d-x.git (push)

아래 2개는 제 포크한 저장소이고
위에 2개는 리모트 저장소입니다.

위의 리모트 저장소로 fetch를 하고 pull을 해야하는 것이지요.

그리고 cocos2d-x는 서브모듈이 있어서 업데이트 해줘야합니다.
$ git  submodule update

이렇게 업데이트 끝!

다시 cocos2d-x 에 커밋하러 갑니다~

즐거운 개발 되시길바라요 ㅎㅎ

2016년 9월 5일 월요일

영어 스펠링 체크하기 - codespell

https://github.com/lucasdemarchi/codespell

오픈소스 프로젝트 기여하기에는 여러가지 방법이 있는데요.
저는 일단 영어 스펠링 틀린 것 수정하기부터 시작해보았습니다.

여러가지 스펠링 체크해주는 툴이 있는데
저는 현재 맥북을 사용하고 있으니
리눅스 스펠링 체크 툴을 찾아봅니다.

그 전에 찾아서 사용했던 툴 중에 하나가
codespell이라는 툴입니다.

깃헙에서 다운받아서
bin/codespell.py를 사용하시면 됩니다.

디렉토리로도 찾을 수 있고
틀린 것을 바로 수정하는 -w 플래그만 주면 수정할 수 있습니다.



cocos2d-x 스펠링 체크해본 결과입니다.
필요한 부분만 수정해줘야할듯하네요. 변수명은 두고 주석만 수정해야겠습니다.



이렇게 하면 다 수정되어버리는데,
수정되면 안되는 것은 git 명령어를 통해서 ignore 처리하고 커밋합니다.
(다른 명령어 처리방법도 있습니다만 저는 이렇게...)

이렇게 기여하고, 코드 보고 이해하다보면
실제 로직에 참여할 수 있습니다.
모두 화이팅!

2016년 8월 30일 화요일

Cocos2d-x 3.13 version released!

http://blog.cocos2d-x.org/2016/08/cocos2d-x-v3-13-released/

코코스 엔진이 3.13 버전이 릴리즈 되었네요 ㅎㅎ
블로그글을 한번 보겠습니다.
  • added VR plugins for Gear, Deepoon, Google Cardboard and Oculus.
  • support ETC1 alpha channel
  • fix AudioEngine performance for Android 4.2+
  • improve canvas renderer performance with dirty region
  • add Andorid arm-64 support switch to use gcc 4.9
  • upgrade CURL to 7.50.0
  • upgrade Spine to 3.4
  • upgrade GLFW to 3.2
자세한 사항은 위에 릴리즈 노트를 보시면 되겠습니다.

일단 하이라이트 변경점만 보면,
음... 저번에 3.12 버전에서 VR을 지원한다고 하더니
이번에는 VR 플러그인을 좀 더 보충한 느낌입니다.
ETC1 알파 채널은 뭔지 찾아봤는데,
"
ETC1픽셀당 알파없이 4bits로 24bits 원본 대비 1/6의 압축률이며, 대부분의 경우 원본과 차이를 못 느낄 정도로 품질이 좋지만, 알파채널을 지원하지 않는다는 큰 단점이 있다. iOS에서는 지원하지 않으며, 안드로이드 2.2(프로요) 이상의 안드로이드 디바이스는 모두 필수적으로 지원한다. 
이런 포맷을 알파 채널을 지원하게끔 개발했다는 것 같습니다.

#안드로이드 4.2 버전 이상에서 오디오 엔진의 성능 향상.
이 부분은 CPU Usage에 있어서 큰 향상이 있었네요

 

하지만 Preload 해야 성능 향상에 효과가 있을거라고 하네요.
"Should preload first, or there is not performance improved for first time playing of the audio."

#Dirty Region in Canvas renderer
Dirty Region algorithm을 통해서 렌더링을 할 때 캔버스의 모든 부분을
리프레시하지 않고 인접한 부분, 특정 부분만 리프레시하게 향상되었다고 합니다.

#Android arm-64 support
android 빌드할 때 arm 64를 지원한다고 하네요.
arm 64 3rd 라이브러리를 제공하는데, 이 말은 곧 arm 64를 지원한다는 뜻이라고합니다.
cocos run -p android --app-abi arm64-v8a
이렇게 빌드 할  수 있다고 합니다.

#gcc 4.9 on Android
이건 버전 3.12에서 이슈가 생겨서 안드로이드 컴파일러 gcc로 다시 바꿨다고 합니다.
(clang+gnustl_static을 사용하는 중에 문제가 생겼다고 합니다. clang을 사용하는 중에 문제가 생겼던듯하네요.)

#CURL 7.50.0으로 업그레이드
CURL의 그 전 버전에서 버그가 있었습니다.
a bug about connect to IPV4 numerical IP address in NAT64 environment )
수정된 버전이 업그레이드 되었습니다.

그 외에 Spine, GLFW가 업그레이드 되었네요.

더 많은 릴리즈 노트 내용을 보시려면
https://github.com/cocos2d/cocos2d-x/blob/v3/CHANGELOG
체인지 로그를 확인해보시는 것도 좋아요 ㅎㅎ

그럼 즐거운 개발되시길 바랍니다

2016년 8월 29일 월요일

Vorlon.JS - 원격 자바스크립트 디버깅 툴



Homepage: http://vorlonjs.com/
GitHub: https://github.com/MicrosoftDX/Vorlonjs/

원격 자바스크립트 디버깅 툴 이라고 설명은 적어놓았지만
제대로 된 설명은 아래와 같습니다.

"An open source, extensible, platform-agnostic tool for remotely debugging and testing your JavaScript. Powered by node.js and socket.io."

플랫폼에 종속되지 않고 원격으로 자바스크립트를 디버깅, 테스트가 가능한 툴.
(Node.js 와 Socket.io 를 이용함)

현재 버전은 0.3.0 입니다.
앞에 버전 번호가 0 인걸로 봐서 아직 개발이 활발히 진행중인
프로젝트인 것 같습니다.

실제 데모 영상은 다음 링크에 있습니다.
http://www.vorlonjs.com/#demo (유튜브에 올라가 있지 않아서 직접 눌러서 보셔야할 듯 합니다.)

- 설치
$npm install -g vorlon

- 실행
$vorlon

실행 전에 해당 웹 앱 페이지에 스크립트 코드를 넣어주셔야합니다.
<script src="http://localhost:1337/vorlon.js"></script>

이렇게 하면 vorlon에서 사용하는 socket.io에 연결되어서
디버깅, 테스트를 진행 할 수 있습니다.

현재 진행하는 Cordova나 웹 페이지 개발에
테스트, 디버깅에 한번 사용해봐야겠습니다.

2016년 8월 17일 수요일

CSS Selector 공부하기 좋은 사이트 - CSS Diner


http://flukeout.github.io/

CSS Diner라는 사이트인데요.
깃헙 페이지를 통해서 퍼블리싱한 사이트입니다.

CSS Selector를 게임처럼 배울 수 있는 곳 입니다.
enter 버튼이 보이는 줄에 들썩들썩 움직이는 녀석들을
골라 낼 수 있는 코드를 넣어 주면됩니다.



접시에 마우스를 가져다 대면 그 움직이는 물체의 컴포넌트를 볼 수 있습니다.
지금은 접시가 움직이고 있으니
plate라고 입력하고 enter!

다음으로 넘어가면,


bento 박스만 골라내라고 하네요.
이런식으로 움직이는 물체들을 골라내고 enter로 진행하면서
CSS Selector를 공부하게 됩니다.

즐거운 공부가 되겠네요.
즐거운 개발 되시길 바라요~

JIRA Plugin - ScriptRunner 소개 #2

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