tag:blogger.com,1999:blog-65766063344738242072024-03-14T09:08:57.306+09:00Pineoc BlogDevelop All Thingspineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.comBlogger262125tag:blogger.com,1999:blog-6576606334473824207.post-82200643773629895132019-04-01T00:05:00.002+09:002019-04-01T22:02:07.927+09:00JIRA Plugin - ScriptRunner 소개 #2<h3>
관련 글</h3>
<div>
<ul>
<li>소개 #1: <a href="https://pineoc.blogspot.com/2019/03/scriptrunner-1.html">https://pineoc.blogspot.com/2019/03/scriptrunner-1.html</a></li>
</ul>
<h3>
ScriptRunner 소개 #2</h3>
</div>
<div>
지난 글에서는 Behaviours를 보았고 다음 내용인 콘솔, 리스너 등을 보겠습니다.</div>
<div>
<ul>
<li>Administration > Add-ons > ScriptRunner</li>
<ul>
<li>Script Console</li>
<li>Built-in Scripts</li>
<li>Script Listeners</li>
<li>Script Fields</li>
<li>REST Endpoints</li>
<li>Script Fragments</li>
<li>Escalation Services</li>
<li>Script JQL Functions</li>
</ul>
</ul>
<h4>
Script Console</h4>
</div>
<div>
Script Console은 실시간으로 스크립트를 작성하고 결과를 볼 수 있는 곳 입니다.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSzJvS9LVEoXYnz1PVt_UFhv-LaoDe07TvQ6G9cOedHlQ0JV0Exd00ZAMJMqVzppcouofbDah-lUcwCm60AhsndhjysymmH87enJUhlSPArPzGNvHCTM-9aZI1A49Un5VyurmZmrwcTPQ/s1600/script+console.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="527" data-original-width="1005" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSzJvS9LVEoXYnz1PVt_UFhv-LaoDe07TvQ6G9cOedHlQ0JV0Exd00ZAMJMqVzppcouofbDah-lUcwCm60AhsndhjysymmH87enJUhlSPArPzGNvHCTM-9aZI1A49Un5VyurmZmrwcTPQ/s640/script+console.png" width="640" /></a></div>
<div>
실제로 스크립트를 작성해보고 실행해본 모습입니다.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyfMeGwEFfxPli2DA6awXmuO9LIanCM7jJE3nWB-1aSHxLLpTURZ2QNswkKhuxEXXXBNMQqpuwPkZTWaPPSzpj7ZvAz7XCkGKJQTu8UQ8voODVGjG428zME9yAPRr9T83v7aju19fQLn4/s1600/script+console2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="561" data-original-width="1008" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyfMeGwEFfxPli2DA6awXmuO9LIanCM7jJE3nWB-1aSHxLLpTURZ2QNswkKhuxEXXXBNMQqpuwPkZTWaPPSzpj7ZvAz7XCkGKJQTu8UQ8voODVGjG428zME9yAPRr9T83v7aju19fQLn4/s640/script+console2.png" width="640" /></a></div>
<div>
<br /></div>
<div>
<ol>
<li>스크립트를 작성하는 곳 입니다.</li>
<ul>
<li>자동 완성 기능은 없지만 없는 변수나 없는 함수 등은 오류를 보여줍니다.</li>
</ul>
<li>스크립트를 작성한 뒤에 Run 버튼으로 실행할 수 있습니다.</li>
<li>Result / Logs / Timing 값을 각각 볼 수 있습니다.</li>
<ul>
<li>Result: 스크립트에서 나온 결과물을 볼 수 있습니다.</li>
<li>Logs: 스크립트에서 출력한 log들을 볼 수 있습니다.</li>
</ul>
<ul>
<li>Timing: Elapsed: 208 ms / CPU time: 78 ms 와 같은 내용을 볼 수 있습니다.</li>
</ul>
</ol>
</div>
아래는 의도적으로 함수명을 다르게 입력하면 볼 수 있는 에러 화면 입니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcVAbkUHO9Wm_Vh8Ov4zZ762IerPBLPfkdj_4ifJxGseq_dT-IjxGtnFlRiF9qNPNQ11zWBsckpDX2BuxAEwsTBoHbFf2Er0sPyfv_wqE0Lj6iEXQpuhFySn583gNEKiZriXpAm2aXZBY/s1600/console3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="558" data-original-width="1006" height="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcVAbkUHO9Wm_Vh8Ov4zZ762IerPBLPfkdj_4ifJxGseq_dT-IjxGtnFlRiF9qNPNQ11zWBsckpDX2BuxAEwsTBoHbFf2Er0sPyfv_wqE0Lj6iEXQpuhFySn583gNEKiZriXpAm2aXZBY/s640/console3.png" width="640" /></a></div>
<br />
정적 타입 체크 밖에 해주지 못하지만 최소한의 체크는 할 수 있기에<br />
스크립트 작성은 할 수 있습니다.<br />
<br />
<h4>
Built-in Scripts</h4>
<div>
ScriptRunner 에 이미 설정(구현)되어 있는 스크립트들을 사용할 수 있는 메뉴입니다.<br />
아래 참고 문서에서 사용할 수 있는 스크립트 리스트를 볼 수 있습니다.<br />
참고 문서: <a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html">https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB2NK97-khlFDM5FcpbB9tIGvdAu7QjlDgq0ILgOuYT-s6iF3k5Kp3PDwVlyHCfljc2ckOtNlGJfrNcVQkm3Wv_LqEVtScGHjDMwGuamDeyGXwnrTDVG_-qSooNoVBTvhErkBPEEohqnQ/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+4.26.35.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1113" data-original-width="1600" height="444" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB2NK97-khlFDM5FcpbB9tIGvdAu7QjlDgq0ILgOuYT-s6iF3k5Kp3PDwVlyHCfljc2ckOtNlGJfrNcVQkm3Wv_LqEVtScGHjDMwGuamDeyGXwnrTDVG_-qSooNoVBTvhErkBPEEohqnQ/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+4.26.35.png" width="640" /></a></div>
<div style="text-align: center;">
<아래에 더 많은 스크립트가 있습니다></div>
<br />
위 화면의 스크립트 중 <b>"Bulk Fix Resolutions"</b> 스크립트를 확인해보겠습니다.<br />
이 스크립트는 Filter에 있는 티켓들의 Resolution을 변경할 수 있습니다.<br />
참고 링크: <a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html?utm_source=product-help#_escalation_service">Bulk Fix Resolutions</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSRWVoDm44e476E7jtP4f0MwHeMPth8wFI8epk9K2lVuQWXyK5AycNqj4_BkctXCHsfRBbyizv0Io-iqJH4tc5OlAzltnTpnwX5lefeRNOGHCnzJY4zZ7OSTbALw3w2XGEpmOZkj7PF78/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+4.28.31.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="598" data-original-width="1600" height="238" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSRWVoDm44e476E7jtP4f0MwHeMPth8wFI8epk9K2lVuQWXyK5AycNqj4_BkctXCHsfRBbyizv0Io-iqJH4tc5OlAzltnTpnwX5lefeRNOGHCnzJY4zZ7OSTbALw3w2XGEpmOZkj7PF78/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+4.28.31.png" width="640" /></a></div>
<div style="text-align: center;">
<filter id="" resolution=""></filter></div>
<br />
JQL을 바로 작성하는 것은 아니며 기존에 만들어둔 Filter를 사용하여 동작하는 스크립트 입니다.<br />
그 외에 다른 스크립트의 목록은 아래와 같습니다.<br />
<ul>
<li><a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html?utm_source=product-help#_escalation_service">Escalation Service</a></li>
<li><a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html?utm_source=product-help#_escalation_service">Switch User</a></li>
<li><a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html?utm_source=product-help#_escalation_service">Change dashboard or filter ownership</a></li>
<li><a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html?utm_source=product-help#_escalation_service">Copy Project</a></li>
<li><a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html?utm_source=product-help#_escalation_service">Copy Custom Field Values</a></li>
<li><a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html?utm_source=product-help#_escalation_service">Bulk Import Custom Field Values</a></li>
<li><a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html?utm_source=product-help#_escalation_service">Split Custom Field Context</a></li>
<li><a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html?utm_source=product-help#_escalation_service">Script Registry</a></li>
<li><a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html?utm_source=product-help#_escalation_service">Condition Tester</a></li>
<li><a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html?utm_source=product-help#_escalation_service">Clear JIRA or Groovy Caches</a></li>
<li><a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html?utm_source=product-help#_escalation_service">Bulk Copy SLAs</a></li>
<li><a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html?utm_source=product-help#_escalation_service">List scheduled jobs</a></li>
<li><a href="https://scriptrunner.adaptavist.com/latest/jira/builtin-scripts.html?utm_source=product-help#_escalation_service">View server log files</a></li>
</ul>
<h4>
Listeners</h4>
<div>
Listeners는 JIRA에서 일어나는 이벤트에 따라 스크립트를 동작하게 합니다.</div>
<div>
프로젝트, 특정 이슈, 특정 이벤트에 따라 동작할 수 있도록 설정할 수 있습니다.</div>
<div>
참고 문서: <a href="https://scriptrunner.adaptavist.com/latest/jira/listeners.html">https://scriptrunner.adaptavist.com/latest/jira/listeners.html</a></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKY_3pulDMtCdEWMAOnzV5PA_8Vv1ud9FQTdZstP4cum-o3zorlNmfvm7-C_vF1IYeM6-7fYSvmlnt_mBy1BSaRN0JyupenXRpSuF3gQbcjheNSEXYpnMOglSymaloOJtWgORd1p3PhXg/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+5.02.39.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1084" data-original-width="1600" height="432" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKY_3pulDMtCdEWMAOnzV5PA_8Vv1ud9FQTdZstP4cum-o3zorlNmfvm7-C_vF1IYeM6-7fYSvmlnt_mBy1BSaRN0JyupenXRpSuF3gQbcjheNSEXYpnMOglSymaloOJtWgORd1p3PhXg/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+5.02.39.png" width="640" /></a></div>
<div style="text-align: center;">
<여러가지 리스너를 추가할 수 있습니다></div>
</div>
<div>
<br /></div>
<div>
이미 있는 리스너 타입을 사용해도 되고</div>
<div>
아예 이벤트를 받는 처음부터 스크립트 마무리까지 관리하는 Custom listener를 사용할 수도 있습니다.</div>
<div>
<br /></div>
<div>
이미 있는 리스너 타입 하나를 한번 보겠습니다.</div>
<div>
<a href="https://scriptrunner.adaptavist.com/5.4.39/jira/builtin-scripts.html">https://scriptrunner.adaptavist.com/5.4.39/jira/builtin-scripts.html</a></div>
<div>
Create a sub-task: Create a sub-task, Will Optionally reopen a matching sub-task</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7CRb38pvsblegBi-oX34YNciUurHTH8MuS-vhF86aihs4NPsBvcjaSeEXgnKtADCKxHBm6q5fpftSjfVdEDf2XHXqiDGeFIDvoAm0f9_gQ-taZrIaDvpTe0oqGoBAfg1JkgutDDoHPqc/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+5.14.14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1116" data-original-width="1600" height="446" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7CRb38pvsblegBi-oX34YNciUurHTH8MuS-vhF86aihs4NPsBvcjaSeEXgnKtADCKxHBm6q5fpftSjfVdEDf2XHXqiDGeFIDvoAm0f9_gQ-taZrIaDvpTe0oqGoBAfg1JkgutDDoHPqc/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+5.14.14.png" width="640" /></a></div>
<div>
<div style="text-align: center;">
<특정 이벤트에서 Sub-task를 만들 수 있는 리스너 입니다></div>
</div>
<div>
<br />
<div>
<br /></div>
<div>
Create a sub-task Listener를 등록하는 화면의 각각 입력 필드에 대해 알아보겠습니다.</div>
<ul>
<li><b>Note</b>: Listener 등록시 해당 설명으로 Listener 리스트에서 설명을 볼 수 있습니다.</li>
<li><b>Project(s)</b>: 해당 이벤트가 발생하는 프로젝트를 설정합니다.</li>
<ul>
<li>프로젝트는 자동 완성되어 입력할 수 있습니다.</li>
</ul>
<li><b>Events</b>: 어떤 이벤트를 받아서 처리할 것인지 이벤트를 설정합니다.</li>
<ul>
<li>All Issue Events, Issue Created, Issue Updated 등의 이벤트를 추가할 수 있습니다.</li>
</ul>
<li><b>Condition</b>: 해당 이벤트가 발생했을 경우, True / False를 판단할 스크립트를 설정합니다.</li>
<ul>
<li><span style="font-family: inherit;">'Show examples'를 누르면 예시 코드를 볼 수 있습니다.</span></li>
<li><span style="font-family: inherit;">'Priority changed to Major (Listeners only)' - Listeners 에서만 동작하는 코드로 <b>priority가 Major로 변경되었을 경우 True를 반환</b>하는 스크립트 입니다.</span></li>
<li>그 외에 많은 예제 스크립트가 있으니 참고하여 작성하면 됩니다.</li>
</ul>
</ul>
<ul><ul></ul>
<li><b>Target Issue Type</b>: Sub-task 카테고리의 이슈 타입을 설정합니다.</li>
<li><b>Subtask Summary</b>: 생성할 Sub-task 제목(Summary)를 설정합니다.</li>
<li><b>Fields to copy</b>: All / None / Custom 으로 상위 태스크의 필드 값을 복사할 것인지 설정합니다.</li>
<li><b>As User</b>: 어떤 유저로 티켓 생성을 할 것인지 설정합니다.</li>
<ul>
<li>값이 없을 경우 현재 유저로 설정합니다.</li>
</ul>
<li><b>Additional issue action</b>: Sub-task 생성 이후 타겟 이슈(부모 이슈)에 대해 추가적인 작업을 하도록 설정합니다.</li>
<ul>
<li>Condition과는 달리 추가적인 작업을 할 수 있도록 하는 스크립트 입력 필드입니다.</li>
<li>제목을 바꾸거나 팝업 메세지를 따로 띄우거나 할 수 있습니다.</li>
<li>'Show examples'를 누르면 예시 코드를 볼 수 있습니다.</li>
</ul>
<li><b>Subtask Action</b>: 이미 생성된 Subtask가 있을 경우 transition을 진행할 것인지 설정합니다.</li>
<ul>
<li>주의할 점은 적용하고자하는 프로젝트의 서브 태스크가 어떤 워크플로우를 쓰는가를 확인하여 적용해야 합니다.</li>
</ul>
</ul>
<div>
Create a sub-task 외에 다른 listener 타입이 있으며 아예 커스텀한 listener도 만들 수 있습니다.</div>
</div>
<div>
Custom listener의 경우 다음과 같이 만들 수 있습니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuLX88opPpPrcw9xKoBwPuaB7IQHAO1d1ojwrgOmzqk5YDUfBm9H6u5H311k2JvI-bsERoh8KYTD97r7KpS3GTgYonFzhYQhyphenhyphenKiiQEwIetfXhwfZEb5mGa5tCHKvoonWfmyVREdJQP-1A/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+9.18.54.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1019" data-original-width="1600" height="406" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuLX88opPpPrcw9xKoBwPuaB7IQHAO1d1ojwrgOmzqk5YDUfBm9H6u5H311k2JvI-bsERoh8KYTD97r7KpS3GTgYonFzhYQhyphenhyphenKiiQEwIetfXhwfZEb5mGa5tCHKvoonWfmyVREdJQP-1A/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+9.18.54.png" width="640" /></a></div>
<div style="text-align: center;">
<inline listener="" script=""></inline></div>
<br />
이 listener는 앞서 설명드린 create a sub-task 와 프로젝트, 이벤트 필드 설정하는 것은 같지만<br />
이벤트를 받고 처리하는 방식이 다릅니다.<br />
발생한 이벤트에서 각종 데이터를 받아 처리해야하는 listener 타입 입니다.<br />
listener에 필요한 listener 타입이 없다면 커스텀하게 만들어서 사용하면 됩니다.<br />
<br />
// Listener 중 <span style="background-color: white; color: #333333; font-family: "open sans" , "clear sans" , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 16px; white-space: pre-wrap;">Remote Custom listener는 JIRA에 등록되어있는 application에도 scriptRunner를 설치해야 사용할 수 있습니다.</span><br />
<span style="background-color: white; color: #333333; font-family: "open sans" , "clear sans" , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 16px; white-space: pre-wrap;"><br /></span>
<br />
<h4 style="orphans: 4;">
<span style="color: #333333; font-family: "open sans" , "clear sans" , "helvetica neue" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; caret-color: rgb(51, 51, 51); white-space: pre-wrap;">Script Fields</span></span></h4>
<div>
<span style="color: #333333; font-family: "open sans" , "clear sans" , "helvetica neue" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; caret-color: rgb(51, 51, 51); white-space: pre-wrap;">Script fields는 아래와 같이 설명이 나와있습니다.</span></span></div>
<blockquote class="tr_bq">
<span style="background-color: white; color: #333333; font-family: "open sans" , "clear sans" , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 16px; white-space: pre-wrap;">A script field is a custom field that allows you to automatically display a value according to the results of a ScriptRunner script.</span></blockquote>
<div style="orphans: 4;">
<span style="color: #333333; font-family: "open sans" , "clear sans" , "helvetica neue" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; caret-color: rgb(51, 51, 51); white-space: pre-wrap;">요약하자면, "<b>스크립트러너의 스크립트 결과를 보여주는 </b></span></span><span style="background-color: white; color: #333333; font-family: "open sans" , "clear sans" , "helvetica neue" , "helvetica" , "arial" , sans-serif; white-space: pre-wrap;"><b>Custom field</b>" 입니다.</span></div>
<div style="orphans: 4;">
<span style="background-color: white; caret-color: rgb(51, 51, 51); white-space: pre-wrap;"><span style="color: #333333; font-family: "open sans" , "clear sans" , "helvetica neue" , "helvetica" , "arial" , sans-serif;">참고 문서: <a href="https://scriptrunner.adaptavist.com/latest/jira/scripted-fields.html">https://scriptrunner.adaptavist.com/latest/jira/scripted-fields.html</a></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyWJbet2wC4zESULs23orlGlCs1nCvr8idySIfEHucxRmqRWN_6dwqhoE_cab0eHEAvF35Wkzs9J_AKkrELpEMoV2Kvi1W09Na1FIFLReLt0QxSi4DY3TJBJdXXwwBnN_yWBAwqzWGdoU/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+9.45.39.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="776" data-original-width="1600" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyWJbet2wC4zESULs23orlGlCs1nCvr8idySIfEHucxRmqRWN_6dwqhoE_cab0eHEAvF35Wkzs9J_AKkrELpEMoV2Kvi1W09Na1FIFLReLt0QxSi4DY3TJBJdXXwwBnN_yWBAwqzWGdoU/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+9.45.39.png" width="640" /></a></div>
<div style="orphans: 4; text-align: center;">
<span style="background-color: white; color: #333333; font-family: "open sans" , "clear sans" , "helvetica neue" , "helvetica" , "arial" , sans-serif; white-space: pre-wrap;"><script fields=""></span></p>
<p>
<span style="background-color: rgb(255, 255, 255); color: rgb(51, 51, 51); font-family: "Open Sans", "Clear Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; orphans: 4; white-space: pre-wrap; caret-color: rgb(51, 51, 51);"><br></span></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);">"Add New Item" 버튼을 누르면 아래와 같은 항목들을 볼 수 있습니다.</span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><br></span></font></p>
<p class="separator" style="text-align: center; clear: both;">
<a imageanchor="1" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRZOHKk-8gxrfzel-WCfRRMbNJNi85FUW-yyujE8QM0onagpi3l-VdTaUWlSCNmW8EhQWgPpB2T_89jSQ2ahDfCcKvC4ymvcQREaXiHcYdC3cbIw5TlrHKylSNqk48Js-se6nNJmXOIm0/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+9.47.33.png" style="margin-left: 1em; margin-right: 1em;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRZOHKk-8gxrfzel-WCfRRMbNJNi85FUW-yyujE8QM0onagpi3l-VdTaUWlSCNmW8EhQWgPpB2T_89jSQ2ahDfCcKvC4ymvcQREaXiHcYdC3cbIw5TlrHKylSNqk48Js-se6nNJmXOIm0/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+9.47.33.png" border="0" data-original-width="1600" data-original-height="921" style="" width="640" height="368"></a></p>
<p style="text-align: center; orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><script Fields items list></span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><br></span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);">Listeners 보다는 예시로 사용할 내용이나 항목이 적지만 커스텀하게 만들 수 있는 항목이 있습니다.</span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);">Custom Script Field를 보기 전에 다른 것 부터 보겠습니다.</span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><br></span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);">Issue(s) picker 항목을 눌러 필드를 어떻게 생성하는지 보겠습니다.</span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);">참고 링크: </span><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51);"><a href="https://scriptrunner.adaptavist.com/5.5.0/jira/script-fields/issue-picker.html">https://scriptrunner.adaptavist.com/5.5.0/jira/script-fields/issue-picker.html</a></span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><br></span></font></p>
<p class="separator" style="text-align: center; clear: both;">
<a imageanchor="1" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5peUu64_tbhpR9EAptHDBNoYNc09jXvedkdRyPKZFD-5BJ-6hdNGMUpsf13rHFiWSfJZ-FPaLgYpqf_n7aTQJKBjmGZc22VhHE8RgSzvz8jE9ZhJk7qE1qCnDJ9VOR4zWMNYtDQ03_cs/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+9.52.00.png" style="margin-left: 1em; margin-right: 1em;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5peUu64_tbhpR9EAptHDBNoYNc09jXvedkdRyPKZFD-5BJ-6hdNGMUpsf13rHFiWSfJZ-FPaLgYpqf_n7aTQJKBjmGZc22VhHE8RgSzvz8jE9ZhJk7qE1qCnDJ9VOR4zWMNYtDQ03_cs/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+9.52.00.png" border="0" data-original-width="1600" data-original-height="1175" style="" width="640" height="468"></a></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><br></span></font></p>
<p class="separator" style="text-align: center; clear: both;">
</p>
<p style="text-align: center; orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><Issue(s) picker 스크립트 필드 생성 화면></span></font></p>
<p style="text-align: left; orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><br></span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><b>Issue(s) picker</b> 스크립트 필드는 다른 이슈를 선택할 수 있는 필드 입니다.</span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);">옵션으로는 JQL 쿼리로 다른 이슈 선택을 제약(constrained) 할 수 있습니다.</span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);">예를 들어, issuetype = Bug 이런 식으로 말이죠. 이렇게 JQL 필드에 넣어두면 <b>버그 타입 issue</b>만 picker에 보이게 될 것 입니다.</span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><br></span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><b>Custom Script Field</b>도 한번 보겠습니다.</span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><br></span></font></p>
<p class="separator" style="text-align: center; clear: both;">
<a imageanchor="1" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXkiFN-h9Vkx8ALoK95FCeOnc1u0PfTKprbSfcrwf6h1vBsS6NbppzYWPEEpXylQhX4eqDytL0EFlD79k8WewN7I4-VPzmRwXKcbFakY_sD7FTR2sOURcUZFa0fGHJ6kPdUBPsDX-vtwk/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+11.04.56.png" style="margin-left: 1em; margin-right: 1em;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXkiFN-h9Vkx8ALoK95FCeOnc1u0PfTKprbSfcrwf6h1vBsS6NbppzYWPEEpXylQhX4eqDytL0EFlD79k8WewN7I4-VPzmRwXKcbFakY_sD7FTR2sOURcUZFa0fGHJ6kPdUBPsDX-vtwk/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+11.04.56.png" border="0" data-original-width="1600" data-original-height="1158" style="" width="640" height="462"></a></p>
<p style="text-align: center; orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><custom Script Field 생성 화면></span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><br></span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);">Custom Script Field 생성 화면에서는 필드 이름, 필드 설명, Note (스크립트 필드 설명)는 앞서 보여드린 Issue picker에도 있지만, Template 필드 값을 통해 필드 타입을 설정할 수 있습니다.</span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);">아래는 템플릿에 있는 필드 타입 리스트 입니다.</span></font></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><br></span></font></p>
<p class="separator" style="text-align: center; clear: both;">
<a imageanchor="1" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJYJ5ZOzkhY17HdV4URJgMYlrUp3-pG6YI8sFCLV4UPAYiJg7xPagfiLsRy6IeptYu1kxV8T6TsGdCPOtMKJaYTyvVQ7ryi5795-P2SPrWjbSo9fSK8etOdqtNEVagS92kUI3tJOp21ws/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+11.11.16.png" style="margin-left: 1em; margin-right: 1em;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJYJ5ZOzkhY17HdV4URJgMYlrUp3-pG6YI8sFCLV4UPAYiJg7xPagfiLsRy6IeptYu1kxV8T6TsGdCPOtMKJaYTyvVQ7ryi5795-P2SPrWjbSo9fSK8etOdqtNEVagS92kUI3tJOp21ws/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+11.11.16.png" border="0" data-original-width="1420" data-original-height="576" style="" width="640" height="258"></a></p>
<p style="text-align: center; orphans: 4;">
<custom Script Field: Template list></p>
<p style="text-align: left; orphans: 4;">
<br></p>
<p style="text-align: left; orphans: 4;">
Custom Script Field에서 Custom이 또 있는데 보여주는 형식도 커스텀하게 설정할 수 있습니다.</p>
<p style="text-align: left; orphans: 4;">
(커스텀 필드가 보여주는 값을 커스텀하게 보여주는 것으로 보면 되겠습니다.(?))</p>
<p style="text-align: left; orphans: 4;">
<br></p>
<p style="text-align: left; orphans: 4;">
아래와 같이 예시로 작성해보면 첫번째 값만 보여지도록 할 수 있습니다.</p>
<p style="text-align: left; orphans: 4;">
inline script에 있는 값으로 보여지게 되는 것인데 자세한 내용은 아래 링크를 참고해주세요.</p>
<p style="text-align: left; orphans: 4;">
<a href="https://scriptrunner.adaptavist.com/5.5.0/jira/scripted-fields.html#_custom_templates">https://scriptrunner.adaptavist.com/5.5.0/jira/scripted-fields.html#_custom_templates</a></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><br></span></font></p>
<p class="separator" style="text-align: center; clear: both;">
<a imageanchor="1" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNW9HXBeJGI_izwPhYTjSqxkvuVZ3MWWnWIzZzifjL3YPKv6mUv3-mb08BEonkJlVROoV1h2vJJa1BVfcfXZv9bzB9WGhZF9Mm75rrFBjptrVgyRhg6P_PPrrbVP0Yw6oZ_kcyCgIKhPw/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+11.29.26.png" style="margin-left: 1em; margin-right: 1em;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNW9HXBeJGI_izwPhYTjSqxkvuVZ3MWWnWIzZzifjL3YPKv6mUv3-mb08BEonkJlVROoV1h2vJJa1BVfcfXZv9bzB9WGhZF9Mm75rrFBjptrVgyRhg6P_PPrrbVP0Yw6oZ_kcyCgIKhPw/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-03-31+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+11.29.26.png" border="0" data-original-width="1600" data-original-height="1199" style="" width="640" height="478"></a></p>
<p style="orphans: 4;">
<font color="#333333" face="Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif"><span style="white-space: pre-wrap; caret-color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);"><br></span></font></p>
<p class="separator" style="text-align: center; clear: both;">
<a imageanchor="1" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfcwxBvyH2krXTgaVaDAv8Q8PmkDavH8T1rOrFgoQacaNOqSP_0KU6zNaQ4IfQLbip2f7tS1aO2smqtGeFu5viIkilIVgfYx5uHsFko-Wj-19mMcg8s8TsCswGkO8vMPUNdbD5v1KMS2w/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-04-01+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%258C%25E1%2585%25A5%25E1%2586%25AB+12.03.52.png" style="margin-left: 1em; margin-right: 1em;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfcwxBvyH2krXTgaVaDAv8Q8PmkDavH8T1rOrFgoQacaNOqSP_0KU6zNaQ4IfQLbip2f7tS1aO2smqtGeFu5viIkilIVgfYx5uHsFko-Wj-19mMcg8s8TsCswGkO8vMPUNdbD5v1KMS2w/s400/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2019-04-01+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%258C%25E1%2585%25A5%25E1%2586%25AB+12.03.52.png" border="0" data-original-width="1434" data-original-height="676" style="" width="400" height="187"></a></p>
<p style="orphans: 4;">
<br></p>
<p style="orphans: 4;">
이번 포스트도 많이 길어졌네요.</p>
<p style="orphans: 4;">
다음 포스트에서는 REST Endpoints 부터 다루겠습니다.</p>
<p style="orphans: 4;">
<br></p>
<p style="orphans: 4;">
궁금하신 내용이 있다면 댓글로 문의해주세요. :)</p>
</div>
</script></span></div>
</div>
pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-2037791253925317532019-03-25T22:34:00.003+09:002019-03-30T17:01:54.092+09:00JIRA Plugin - ScriptRunner 소개 #1업무에서 요즘 많이 사용하는 'ScriptRunner' 라는 플러그인을 소개하려 합니다.<br />
이 포스트에서 다루는 내용은 JIRA 환경을 기준으로 작성되었습니다.<br />
(한국 문서로는 많이 볼 수 없어서 공부 및 소개 겸 포스트 작성합니다.)<br />
<h3>
ScriptRunner란?</h3>
<div>
<img alt="Adaptavist ScriptRunner" height="51" src="https://scriptrunner.adaptavist.com/latest/images/SR-web-logo.png" width="320" /></div>
<div>
<ul>
<li>메인 페이지: <a href="https://scriptrunner.adaptavist.com/latest/index.html">https://scriptrunner.adaptavist.com/latest/index.html</a></li>
<li>Adaptavist 라는 회사에서 만든 스크립트 플러그인</li>
<ul>
<li>Adaptavist inc: <a href="https://www.adaptavist.com/">https://www.adaptavist.com/</a></li>
<li>ScriptRunner, Test Management, SmartDraw 등 Atlassian 소프트웨어 플러그인 개발사</li>
</ul>
<li>JIRA, Confluence, Bitbucket에서 커스텀 스크립트를 사용할 수 있는 플러그인</li>
<li>플러그인 설치 시 기본적으로 스크립트 함수, 필드 지원</li>
<li>스크립트 언어는 Groovy를 사용</li>
</ul>
<h3>
ScriptRunner 가이드</h3>
<div>
가이드 문서는 모두 영어로 되어있으며, JIRA Server, JIRA Cloud로 나눠져있습니다.</div>
<div>
Server 설치 버전과 Cloud 버전이 달라 기능도 약간씩 다르니 그 부분은 참고하여 사용해야합니다.</div>
<div>
<ul>
<li>메인 페이지: <a href="https://scriptrunner.adaptavist.com/latest/index.html">https://scriptrunner.adaptavist.com/latest/index.html</a></li>
<li>Server 버전: <a href="https://scriptrunner.adaptavist.com/latest/jira/quickstart.html">https://scriptrunner.adaptavist.com/latest/jira/quickstart.html</a></li>
<li>Cloud 버전: <a href="http://scriptrunner-docs.connect.adaptavist.com/jiracloud/quickstart.html">http://scriptrunner-docs.connect.adaptavist.com/jiracloud/quickstart.html</a></li>
</ul>
<div>
ScriptRunner 플러그인을 처음 시작한다면 다음 자료들을 보면 좋습니다.</div>
<ul>
<li>기본 컨셉: <a href="https://scriptrunner.adaptavist.com/latest/jira/">https://scriptrunner.adaptavist.com/latest/jira/</a></li>
<li>tutorialspoint/Groovy: <a href="https://www.tutorialspoint.com/groovy/index.htm">https://www.tutorialspoint.com/groovy/index.htm</a></li>
<li>webinar: <a href="https://www.youtube.com/watch?v=ufNACtDxyD8">https://www.youtube.com/watch?v=ufNACtDxyD8</a></li>
<li>ScriptRunner 소개 영상: <a href="https://www.youtube.com/watch?v=sJa_bFmPoLU">https://www.youtube.com/watch?v=sJa_bFmPoLU</a></li>
</ul>
<div>
Adaptavist에서는 따로 교육과정도 있으니 참고하세요.</div>
</div>
<div>
<ul>
<li><a href="https://learn.adaptavist.com/course-library/getting-started-with-sr4js">https://learn.adaptavist.com/course-library/getting-started-with-sr4js</a></li>
<ul>
<li>4시간짜리 강좌로 JQL, Built-in Script, Behaviours 등을 배울 수 있습니다.</li>
<li>ScriptRunner 강좌는 이 강좌 밖에 없습니다.</li>
</ul>
<li>전체 강좌: <a href="https://learn.adaptavist.com/course-library">https://learn.adaptavist.com/course-library</a></li>
<li>가격은 개인 결제시 350$ 이며 러닝 사이트 내에 있는 모든 강좌를 들을 수 있습니다.</li>
<ul>
<li>결제를 위해 카드 정보까지 다 입력시 계정이 생성되는 것으로 보입니다.<br />(포스팅 시 결제까지 진행하지 않아 모르겠습니다.)</li>
</ul>
</ul>
</div>
<h3>
ScriptRunner 스크립트 작성</h3>
</div>
<div>
ScriptRunner 플러그인으로 스크립트를 작성할 수 있는 곳은 JIRA 기준으로 다음과 같습니다.</div>
<div>
<ul>
<li>Administration > Add-ons > Behaviours</li>
<li>Administration > Add-ons > ScriptRunner</li>
<ul>
<li>Script Console</li>
<li>Built-in Scripts</li>
<li>Script Listeners</li>
<li>Script Fields</li>
<li>REST Endpoints</li>
<li>Script Fragments</li>
<li>Escalation Services</li>
<li>Script JQL Functions</li>
</ul>
</ul>
<div>
각 메뉴에서 할 수 있는 일을 정리해보겠습니다.</div>
<h4>
Behaviours</h4>
<div>
<ul>
<li><a href="https://scriptrunner.adaptavist.com/5.5.0/jira/behaviours-overview.html">https://scriptrunner.adaptavist.com/5.5.0/jira/behaviours-overview.html</a></li>
<li>위의 링크를 참고하면 예제를 따라하면서 어떻게 사용해야할지 알 수 있습니다.</li>
<li>설명은 다음과 같이 나와있습니다.</li>
</ul>
</div>
behaviours 기능을 통해 관리자는 하나 이상의 behaviours를 만들 수 있습니다. <b>behaviours</b>는 주어진 프로젝트 또는 이슈에서 <b>이슈에 대한 필드가 동작하는 방식</b>을 정의합니다. 아래는 예시입니다.<br />
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'}
</style>
<br />
예시:<br />
<ul>
<li>이슈 화면에 입력된 다른 데이터(즉, 이슈 생성 또는 이슈 전환 중)에 따라 필드를 필수 항목으로 지정.</li>
<li>사용자 역할 또는 그룹에 따라 필드를 읽기 전용으로 설정</li>
<li>이슈 화면(스크린)이 제출되기 전에 필드 데이터를 서버 측이 검증 수행</li>
<li>다른 이슈 화면(스크린) 데이터에 따라 필드 값 설정</li>
</ul>
<ul>
</ul>
<div>
<a href="https://scriptrunner.adaptavist.com/5.5.0/jira/behaviours-overview.html#_examples">https://scriptrunner.adaptavist.com/5.5.0/jira/behaviours-overview.html#_examples</a><br />
링크에서는 예시로 좋은 설명이 1, 2 있습니다.</div>
<div>
1. 이슈 생성 시 기본 Description(설명) 포맷 값 설정</div>
<div>
2. Resolved 처리 시 Resolution이 Fixed 일 경우, Fix Version 입력을 꼭 할 수 있도록 스크린 설정</div>
<div>
3. Live Editing (실시간 코드 작성)</div>
<div>
<br /></div>
<div>
작성하다보니 내용이 많아졌네요.</div>
<div>
ScriptRunner 소개 #2 포스트에서 다음 내용들을 다루겠습니다.</div>
<div>
<br /></div>
<ul style="box-sizing: border-box; direction: ltr; line-height: 1.6; list-style-position: outside; margin: 0px 0px 1.25em 1.5em; padding: 0px;">
</ul>
</div>
pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-15087232786485167912018-01-19T14:43:00.002+09:002018-01-19T14:43:53.777+09:00GitLab CI 해보자!<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzyoeXWpQxpbWvpgAWWCxw5-aNKAhuxs-hLGMzFji9SjY1_A1wjnCiW87To9MpdIUNGRiWVwgcWQ_KZV926BdPmSRxaR7o1wesQAlY7qd2jQI3i2oOmsn1RIpJU0JnfpTgCqb4nS6KcrM/s1600/%25E1%2584%258B%25E1%2585%25B5%25E1%2584%2585%25E1%2585%25B3%25E1%2586%25B7+%25E1%2584%258B%25E1%2585%25A5%25E1%2586%25B9%25E1%2584%258B%25E1%2585%25B3%25E1%2586%25B7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="400" data-original-width="800" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzyoeXWpQxpbWvpgAWWCxw5-aNKAhuxs-hLGMzFji9SjY1_A1wjnCiW87To9MpdIUNGRiWVwgcWQ_KZV926BdPmSRxaR7o1wesQAlY7qd2jQI3i2oOmsn1RIpJU0JnfpTgCqb4nS6KcrM/s640/%25E1%2584%258B%25E1%2585%25B5%25E1%2584%2585%25E1%2585%25B3%25E1%2586%25B7+%25E1%2584%258B%25E1%2585%25A5%25E1%2586%25B9%25E1%2584%258B%25E1%2585%25B3%25E1%2586%25B7.jpg" width="640" /></a></div>
<br />
<br />
<br />
미디엄: <a href="https://medium.freecodecamp.org/how-to-setup-ci-on-gitlab-using-docker-66e1e04dcdc2">https://medium.freecodecamp.org/how-to-setup-ci-on-gitlab-using-docker-66e1e04dcdc2</a><br />
GitLab CI quick start: <a href="https://gitlab.com/help/ci/quick_start/README">https://gitlab.com/help/ci/quick_start/README</a><br />
GitLab CI Demo: <a href="https://gitlab.com/ykyuen/gitlab-ci-demo">https://gitlab.com/ykyuen/gitlab-ci-demo</a><br />
<br />
이번에 GitLab에서 CI를 자체적으로 지원해준다고 해서 한번 해보자!<br />
하는 마음으로 시작하는 CI 설정!<br />
<br />
쉽게 정리해보자면, 설정 순서는 다음과 같습니다.<br />
<br />
0. 빌드하고자하는 환경을 설정<br />
1. .gitlab-ci.yml 설정<br />
2. gitlab에 push!<br />
3. 빌드됨!<br />
<br />
여기서 가장 어렵다고 생각이 드는 것은 <b>빌드하고자 하는 환경을 설정</b>하는 것이라고 생각합니다.<br />
그런데 freecodecamp 미디엄 글에서는 도커 이미지를 사용해서 설정하는군요.<br />
<br />
일단 저는 Cordova 앱을 빌드하기 위해 필요한 환경설정이 무엇인지 살펴보고자 합니다.<br />
필요한 세팅은 아래와 같을겁니다.<br />
<br />
Cordova Android <a href="https://cordova.apache.org/docs/en/7.x/guide/platforms/android/index.html#installing-the-requirements">문서</a>를 참고해보았습니다.<br />
- JDK 8 이상<br />
- Android SDK, Android SDK Packages<br />
- Node.js 8.9.4 (NPM)<br />
- Cordova<br />
<br />
정리하고 나니 위에 4개 정도 필요하네요. (추가적으로는 환경변수 설정도 있겠습니다.)<br />
<br />
미디엄 글에서 나온 것은 docker 이미지를 사용해서 CI를 설정하고 있어서 편하게 되어 있습니다.<br />
저도 그래서 찾아봤습니다. cordova 관련한 docker 이미지가 있는지!<br />
<br />
있습니다!<br />
<a href="https://hub.docker.com/r/beevelop/cordova/">https://hub.docker.com/r/beevelop/cordova/</a><br />
<br />
요거 써서 설정되어 있는 이미지를 사용하면 편할 것 같습니다.<br />
<br />
그래서 제가 작업한 저장소는 아래에!<br />
<a href="https://gitlab.com/pineoc/cordova-ci-demo">https://gitlab.com/pineoc/cordova-ci-demo</a><br />
<br />
기본적인 프로젝트 구성은 아래와 같이 만들어졌습니다.<br />
<br />
0. .gitignore는 platforms, plugins를 포함해서 기본적인 세팅을 했습니다.<br />
1. npm i -g cordova<br />
2. cordova create ci-test com.pineoc.citest ciTest<br />
3. cordova platform add android<br />
4. .gitlab-ci.yml 세팅<br />
<br />
<b>.gitlab-ci.yml</b> 파일은 아래와 같습니다.<br />
<br />
<pre><code class="yaml">
image: beevelop/cordova:latest
before_script:
- cordova platform add android
stages:
- build
build:
stage: build
script:
- cordova build android
</code>
</pre>
<br />
이렇게 .gitlab-ci.yml을 작성하고 올려두면 자동적으로 파일을 인식, 빌드를 시작합니다.<br />
<br />
<a href="https://gitlab.com/pineoc/cordova-ci-demo/-/jobs/48618903">https://gitlab.com/pineoc/cordova-ci-demo/-/jobs/48618903</a><br />
<br />
이것처럼 쭉 로그가 나오고 빌드 결과는 passed, failed로 나옵니다.<br />
그렇게 어렵지 않게 기본 프로젝트 빌드는 세팅해보았지만<br />
추가적인 설정이 들어가면 어려워질 수 있을 것 같네요.<br />
(플러그인을 추가, iOS 빌드 시스템)<br />
<br />
도움이 되었으면 좋겠습니다.pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-31495201511761066572018-01-13T02:46:00.003+09:002019-03-23T18:48:45.625+09:00Android Weekly #282 번역글<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsDr1yWUQfL0dqfmI7z5sYA8iQV4yIe1jGsDc6mB26hxVl89kVxAG9GF5je2Wrp2YHLMYPz14C66ftoCvNCKW7Bp5FuUZSwDEDFoz_D99KiHizjETHRErrKhzNd0_ImUDUJQxdNWFAxwY/s1600/logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsDr1yWUQfL0dqfmI7z5sYA8iQV4yIe1jGsDc6mB26hxVl89kVxAG9GF5je2Wrp2YHLMYPz14C66ftoCvNCKW7Bp5FuUZSwDEDFoz_D99KiHizjETHRErrKhzNd0_ImUDUJQxdNWFAxwY/s320/logo.png" width="320" /></a></div>
<br />
<br />
원본: <a href="http://mailchi.mp/androidweekly/android-weekly-282?e=cae561fb9f">http://mailchi.mp/androidweekly/android-weekly-282?e=cae561fb9f</a><br />
<br />
<br />
<div>
<h2>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">ARTICLES & TUTORIALS</span></h2>
</div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">Dagger에서 Koin으로</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-lparen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-lparen">(</span><span class="attrlink url author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"><a class="attrlink" data-target-href="https://android.jlelse.eu/moving-from-dagger-to-koin-simplify-your-android-development-e8c61d80cddb" href="https://android.jlelse.eu/moving-from-dagger-to-koin-simplify-your-android-development-e8c61d80cddb" rel="noreferrer nofollow noopener" target="_blank">미디엄 링크</a></span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">)</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">이 게시물에서 Arnaud Giuliani는 Dagger에서 Kotlin 기반 종속성 주입 프레임 워크 Koin으로 마이그레이션하는 방법을 설명합니다. 프록시 / CGLib 없고, 코드 생성 없고, introspection 없음. Kotlin 기능 및 DSL 매직을 이야기합니다.</span></div>
<div>
</div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">Firebase Predictions 탐험 (<a href="https://medium.com/@hitherejoe/exploring-firebase-predictions-fa22d093f98d">링크</a>)</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">Joe Birch는 새로운 Firebase Predictions에 대해 설명합니다. Firebase Predictions를 사용하면 응용 프로그램의 사용자 행동을 예측하고 이를 사용하여 응용 프로그램의 유지를 향상시킬 수 있습니다.</span></div>
<div>
<br /></div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">아키텍쳐 컴포넌트 함정</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-hyphen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-hyphen">-</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"> 1부 (<a href="https://medium.com/@BladeCoder/architecture-components-pitfalls-part-1-9300dd969808">링크</a>)</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">Christophe Beyls는 대부분 문서화되지 않았고 거의 논의되지 않는 중요한 함정에 중점을 두고 있으며, 놓친 경우 응용 프로그램에 문제를 일으킬 수 있습니다.</span></div>
<div>
<br /></div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">안드로이드에서 높이 다루기 (<a href="https://blog.usejournal.com/playing-with-elevation-in-android-91af4f3be596">링크</a>)</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">Sebastiano Poggi는 높이가 올라가면서 UI 요소의 그림자를 조정할 수 있음을 보여줍니다.</span></div>
<div>
<br /></div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">Grox: 상태의 예술 (<a href="https://medium.com/groupon-eng/grox-the-art-of-the-state-b5223f48d696">링크</a>)</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">이 블로그 포스트에서 Alin Turcu는 최신 Groupon Open Source Library : Grox를 소개합니다. Grox는 모든 애플리케이션의 상태를 유지하는 데 도움을줍니다. Grox의 개념은 Redux 또는 Flux와 같은 JavaScript 프레임워크와 비교할 수 있습니다. 이는 단방향 데이터 흐름이며 불변의 데이터 구조를 뒷받침합니다.</span></div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">Canvas: 진정한 놀이터! (<a href="https://medium.com/@saurabhpant/canvas-the-real-play-ground-android-c0faa4b79943">링크</a>)</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">이 포스트에서 Saurabh Pant는 뷰 캔버스에 직접 그리는 방법을 설명합니다.</span></div>
<div>
<br /></div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">RadialGradient</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-hyphen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-hyphen">-</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"> Layers (<a href="https://blog.stylingandroid.com/radialgradient-layers/">링크</a>)</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">이전 글에서는, RadialGradiant 렌더링은 하드웨어 계층이 아닌 소프트웨어 계층을 사용하여 수행되었습니다. 이 짧은 시리즈에서 Mark Allison은 차이점이 무엇인지 살펴 봅니다.</span></div>
<div>
<br /></div>
<div>
<h2>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">라이브러리 & 코드</span></h2>
</div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">Rings</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z url"><a class="dynamiclink" href="https://github.com/lalongooo/rings" rel="noreferrer nofollow noopener" target="_blank">https://github.com/lalongooo/rings</a></span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">링크가 사라진 라이브러리입니다..</span></div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">ads1015</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z url"><a class="dynamiclink" href="https://github.com/blundell/ads1015" rel="noreferrer nofollow noopener" target="_blank">https://github.com/blundell/ads1015</a></span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">AndroidThings I2C 프로토콜을 사용하는 ADS1015 주변 장치를 지원하는 아날로그 - 디지털 변환기 드라이버입니다.</span></div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">kotlinconf-app</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z url"><a class="dynamiclink" href="https://github.com/JetBrains/kotlinconf-app" rel="noreferrer nofollow noopener" target="_blank">https://github.com/JetBrains/kotlinconf-app</a></span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">공식 KotlinConf 응용 프로그램입니다! 응용 프로그램의 모든 부분은 Kotlin으로 구현됩니다. 백엔드, 프론트엔드 및 모바일 응용 프로그램 등등!</span></div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">grox</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z url"><a class="dynamiclink" href="https://github.com/groupon/grox" rel="noreferrer nofollow noopener" target="_blank">https://github.com/groupon/grox</a></span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">Grox는 Java / Android 앱의 상태를 유지하는 데 도움을 줍니다.</span></div>
<div>
<br /></div>
<div>
<h2>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">뉴스</span></h2>
</div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">Kotlin 공식 가이드</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z url"><a class="dynamiclink" href="https://android.github.io/kotlin-guides/" rel="noreferrer nofollow noopener" target="_blank">https://android.github.io/kotlin-guides/</a></span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">이 사이트에는 Android 용 Kotlin Style 및 Java Interop(interoperability) Guides가 포함되어 있습니다.</span></div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">Kotlin 업데이트</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z url"><a class="dynamiclink" href="https://android-developers.googleblog.com/2017/11/update-on-kotlin-for-android.html" rel="noreferrer nofollow noopener" target="_blank">https://android-developers.googleblog.com/2017/11/update-on-kotlin-for-android.html</a></span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">Android에서 최신 Kotlin 지원 상태에 대한 Google의 업데이트.</span></div>
<div>
<br /></div>
<div>
<h2>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">비디오 & 팟캐스트</span></h2>
</div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">droidcon NYC 2017</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z url"><a class="dynamiclink" href="https://www.youtube.com/playlist?list=PLdb5m83JnoaATBUkWTVxT_kGyhYBozZ4F" rel="noreferrer nofollow noopener" target="_blank">https://www.youtube.com/playlist?list=PLdb5m83JnoaATBUkWTVxT_kGyhYBozZ4F</a></span></div>
<div>
<br /></div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">Kotlin visibility modifiers, internal modifier, modules</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z url"><a class="dynamiclink" href="http://fragmentedpodcast.com/episodes/101/" rel="noreferrer nofollow noopener" target="_blank">http://fragmentedpodcast.com/episodes/101/</a></span></div>
<div>
<br /></div>
<div>
<h3>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">droidcon London 2017</span></h3>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z url"><a class="dynamiclink" href="https://skillsmatter.com/conferences/8265-droidcon-london-2017" rel="noreferrer nofollow noopener" target="_blank">https://skillsmatter.com/conferences/8265-droidcon-london-2017</a></span></div>
pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-54580342594615832632018-01-08T11:54:00.003+09:002018-01-08T11:54:40.023+09:002017년 회고<div>
<h1 class="ace-copy-paste-skip-this-tag">
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">2017년 회고</span></h1>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">2018년 1월에 쓰는 2017년의 회고!</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-lparen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-lparen">(</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">마치 일기 몰아쓰기를 하는 것 같다.)</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">2017년은 다사다난했다. 2016년에는 어땠는지 기억해보면 2017년보다는 덜 혼란했던 것 같다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">시간별로 한번 쭉 정리해보고 각 이슈 별로 이야기를 해보려한다.</span></div>
<div>
<h1 data-usually-unique-id="213726624101568830197175">
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">타임라인</span></h1>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">타임라인으로 적어보려 했지만… 기억이 많이 나지 않는다. 큰 이슈별로 정리해보면.</span></div>
<div>
<br /></div>
<ol class="listtype-number listindent1 list-number1" start="1">
<li><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">01.01</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-hyphen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-hyphen">-</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"> 새해가 밝았다!</span></li>
<li><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">05.22</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-hyphen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-hyphen">-</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"> 월천상회 퇴사</span></li>
<li><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">05.29</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-hyphen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-hyphen">-</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"> 스마트스터디 입사</span></li>
<li><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">06.13 ~ 16</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-hyphen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-hyphen">-</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"> 사이판 워크샵</span></li>
<li><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">06.22</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-hyphen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-hyphen">-</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"> 개발본부 개발자로</span></li>
<li><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">09.06부터</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-hyphen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-hyphen">-</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"> 한국사이버성폭력대응센터 기술 지원</span></li>
<li><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">09.16</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-hyphen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-hyphen">-</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"> J2S Conference 2017</span></li>
<li><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">12.18</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-hyphen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-hyphen">-</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"> 스마트스터디 퇴사</span></li>
<li><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">12.27</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-hyphen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-hyphen">-</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"> 플루토 방송국 첫방송!</span></li>
</ol>
<div>
<br /></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">생각보다 중간중간의 기억이 비어있어서 적는동안 당황했다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">실제로 업무이야기라 그런 것도 있고 진짜 기억나지않는게 대부분이라 캘린더도 뒤져보고 회고록도 뒤적뒤적..</span></div>
<div>
<h2 data-usually-unique-id="272414595058210779225545">
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">월천상회 퇴사</span></h2>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">월천상회는 학교 다닐 때 휴학하고 참여를 하면서 2017년 5월까지 일했던 힘들었지만 재미있던 경험을 준 회사다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">월천상회에서는 키즈 매거진 앱인 킹콩로켓56, 한글놀이 앱인 한글코끼리 등 유아 컨텐츠를 담은 앱들을 개발했었다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">안드로이드, iOS에 각각 런칭하기위에 크로스플랫폼 프레임워크들을 사용했다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">놀이 앱에 대해서는 </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"><b>Cocos2d-x</b></span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">를 사용했었고 키즈매거진 앱은 HTML 형식의 컨텐츠를 담기위해 </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"><b>Cordova</b></span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">를 사용해서 개발했었다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">이직하기 전에 월천상회에서는 책도 출판하는 등 같이 많이 노력했지만 내가 생각했던 소프트웨어를 만들어 성장할 수 있는 곳은 아니라고 생각하게되었고, 이직을 준비하게 되었다.</span></div>
<div>
<br /></div>
<div>
<h2 data-usually-unique-id="947899747402118331383647">
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">스마트스터디 입사</span></h2>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">학교를 졸업하기 전부터 일해왔던 </span><span class="inline-code author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"><span style="background-color: #f7f9fa; border: 1px solid rgba(208,212,217,0.5); color: #1b2733; font-family: monospace;">월천상회</span></span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"> 에서 퇴사하고 </span><span class="inline-code author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"><span style="background-color: #f7f9fa; border: 1px solid rgba(208,212,217,0.5); color: #1b2733; font-family: monospace;">스마트스터디</span></span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">로 이직하게되었다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">월천상회에서 일할 때 부터 관심있게 봐왔던 회사로 </span><span class="inline-code author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"><span style="background-color: #f7f9fa; border: 1px solid rgba(208,212,217,0.5); color: #1b2733; font-family: monospace;">저기서도 꼭 다른 개발자들이랑 일해보고 싶다!</span></span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"> 했었다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">내가 지원했던 포지션은 앱 개발자로 Cocos2d-x 앱을 만드는 쪽으로 지원했었다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">붙었으니 이야기하는 거지만 처음에 이력서를 너무 성의없게 내서 서류탈락했었지만..</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">메일로 피드백 요청을 드렸고 너무나 감사하게도 부족한 부분을 알려주셔서 수정해서 다시 지원했었다.</span></div>
<div>
<br /></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">서류를 통과하고 기술면접, 임원면접 후에 5월 29일에 입사!</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">라이브 팀에서 일을 시작했다. 얼마 있지 않아서 6월 13 ~ 16까지 사이판 워크숍을 다녀왔다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">(아직 적응도 다 하지 못한 상태에서 다녀온 느낌이었지만 룸메이트였던 가이님이나 다른 개발자분들과 재미있게 보낼 수 있었다.)</span></div>
<div>
<br /></div>
<div>
<h2 data-usually-unique-id="167941215100730559784916">
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">스마트스터디 기술 본부의 개발자로</span></h2>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">사이판을 다녀온 뒤에 조직개편이 있었다. 따로 있던 개발자들이 모여 기술 본부가 생겼고</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">기술 본부는 인프라, 내부 서비스, 앱 등에 대한 개발을 담당하게 되었다. </span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">(원래 각자 담당하던 일을 본부로 조직을 통합해서 개발자들이 시너지를 낼 수 있게!)</span></div>
<div>
<br /></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">나는 원래 라이브 팀에 있다가 기술 본부의 개발자로 앱 개발에 대한 일을 했다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">주로 앱 프로젝트에 없는 문서를 문서화하고 앱을 관리하는데에 필요한 정보들을 정리했다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">앱 빌드하는데에 오래걸리는 문제도 있었는데 Cocos2d-x의 앱 빌드 경우 cpp 파일들을 다 컴파일 하느라</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">오래걸리는 문제가 있었는데 NDK 빌드할 때 CPU 코어만큼 빌드 태스크를 만들면 빨라지는 방식으로 그래들 스크립트를 업데이트 했었다.</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-lparen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-lparen">(</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">일해라 컴퓨터! 일해라 CPU!)</span></div>
<div>
<br /></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">이후에 앱도 CI(Continuous Integration)를 적용해보고 싶었는데..</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">어찌하다보니 해보지 못한게 아직도 아쉽다.</span></div>
<div>
<br /></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">입사하고 3개월 동안은 수습기간이었는데, 이 때 불안한 생각이 좀 많았었다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">내가 정말 잘하고 있는게 맞는지, 이 회사에서 내가 일을 잘 맡아서하고 있는건지.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">그래서 6월, 7월, 8월 각 월마다 회고록을 쓰고 무슨 일을 했었는지 정리했다. 쓰고나서 본부 사람들에게 공유도 하고..</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">(정규직이 되고싶어! 하는 몸부림이었을 수도 있겠다. 8월까지만 쓴 것은 아니고 10월까지는 쓰긴했지만 11월, 12월은 못쓰고 넘어가버렸다.)</span></div>
<div>
<br /></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">나중에는 기술 본부에서도 서비스실, 시스템실 이렇게 나눠지고 각각 팀이 만들어졌는데</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">서비스실, 서비스 2팀의 개발자였다.</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-lparen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-lparen">(</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">앱 개발팀)</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">앱 팀은 그동안 일해온 특성상 한사람당 하나 이상의 프로젝트를 맡아서 개발해와서 협업한다는 느낌이 별로 없었다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">(정보 공유는 어느정도 있었으나 많지는 않았던 것 같다.)</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">서비스실에서는 그래도 실 안에 있는 사람들이 </span><span class="inline-code author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"><span style="background-color: #f7f9fa; border: 1px solid rgba(208,212,217,0.5); color: #1b2733; font-family: monospace;">각자 어떤 일을 하는지는 알면 좋겠다</span></span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"> 는 의미로 각자 맡은 프로젝트의 리뷰를 하고자 했는데 일정상 몇개만 할 수 있었다.</span></div>
<div>
<br /></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">여러가지 프로젝트 개발을 해볼 수는 없었지만 불꽃남자님이 Jira를 잘 사용하는 방법, 이슈 만들기, 프로젝트는 어떻게 진행해야하는가 같은 것을 잘 알려주셔서 그동안 배우지못한 협업 프로세스를 배울 수 있었다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">실제로 프로젝트 진행하면서 프로젝트 구성원들과 함께 배운 것도 하나하나 적지 못하지만 너무나 배운 것이 많았다.</span></div>
<div>
<br /></div>
<div>
<h2 data-usually-unique-id="201672900854517852244988">
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">한국사이버성폭력대응센터 기술 지원</span></h2>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">엄청 큰 기술 지원은 아니었다. </span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">사이버성폭력이 일어나는 사이트들에 대한 자문이나 홈페이지 리뉴얼을 위한 지원을 했다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">사실 처음 한국사이버성폭력대응센터 줄여서 한사성, 홈페이지를 가봤는데 반응형도 아니었고 화면 크기도 맞지않아</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">문제가 조금 있었다. 9월에 처음 한사성팀과 미팅을 했었고 그 이후 계속 지원하고 있다.</span></div>
<div>
<br /></div>
<div>
<h2 data-usually-unique-id="585514897737112464165227">
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">J2S 컨퍼런스 참석</span></h2>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">타임라인에 적어두어서 발표한 것 같지만 가서 듣고온 일이다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">주니어로 시니어분들이 어떻게 생각하는지, 어떻게 성장해왔는지 궁금해서 들으러 가고 싶었는데 금방 신청이 끝나서 우울해하고 있던 차에 불꽃남자님이 발표자셔서 참석권을 얻을 수 있었다!</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">가서 듣고 온 이야기에서 느꼈던 것만 정리해보면,</span></div>
<div>
<br /></div>
<ul class="listtype-bullet listindent1 list-bullet1">
<li><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">회사는 개인의 이력을 관리해주지 않는다.</span></li>
<li><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">자기가 성장해야한다.</span></li>
<li><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">애자일은 테스트를 안해서 망했다.(?)</span></li>
<li><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">테스트가 없는 리택토링은 리팩토링이 아니다.</span></li>
<li><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">의도적 수련! 토이 프로젝트도 해보자!</span></li>
</ul>
<div>
<br /></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">불꽃남자님은 리모트, 재택근무에 대한 이야기를 해주셨는데 회사에서 잘 실천하고 있나 확인하며 들었었다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">자세한 내용은 링크에! </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z url"><a class="dynamiclink" href="https://github.com/pineoc/study/tree/master/j2s-2017" rel="noreferrer nofollow noopener" target="_blank">https://github.com/pineoc/study/tree/master/j2s-2017</a></span></div>
<div>
<br /></div>
<div>
<h2 data-usually-unique-id="037356317640542363903475">
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">스마트스터디 퇴사</span></h2>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">입사한지 정말 얼마안되서 퇴사를 하게 되었다.</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-lparen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-lparen">(</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">약 6개월)</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">많은 개발자분들과 함께해서 즐거웠고 다 같이 또 모여서 개발했으면 좋겠다는 생각을 많이했다.</span></div>
<div>
<br /></div>
<div>
<span class="gallery author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"><img src="https://d2mxuefqeaa7sj.cloudfront.net/s_A24000F08DFA7602F320A5363D864C521B499566E6A31FC02D0D64853A668C65_1515379577426_25586824_1746836342033608_1650377993792163058_o.jpg" style="margin: 5px; max-height: 500px; max-width: 100%; vertical-align: middle;" /></span></div>
<div>
<h2 data-usually-unique-id="699207171625486431875698">
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">플루토 방송국 첫 방송!</span></h2>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">퇴사 이후에 더 많이 만나는</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z s-lparen"> </span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z h-lparen">(</span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">전)스마트스터디 개발자분들과 </span><span class="attrlink url author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z"><a class="attrlink" data-target-href="https://www.youtube.com/channel/UC8JVpZGSvoIwO6usKUYItHA" href="https://www.youtube.com/channel/UC8JVpZGSvoIwO6usKUYItHA" rel="noreferrer nofollow noopener" target="_blank">플루토 방송국</a></span><span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">을 같이 만들어가고 있다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">지금까지 2회 방송! 앞으로도 꾸준히 방송할 수 있었으면 좋겠다. 모두 좋은 회사에 취직해서 그 곳에서도 방송해보고!</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">(시간이 될 수 있을지는 모르겠지만)</span></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/RcSpXhs68g0/0.jpg" src="https://www.youtube.com/embed/RcSpXhs68g0?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<a class="attrlink" data-target-href="https://youtu.be/RcSpXhs68g0" href="https://youtu.be/RcSpXhs68g0" rel="noreferrer nofollow noopener" style="text-align: start;" target="_blank">https://youtu.be/RcSpXhs68g0</a></div>
<div>
<br /></div>
<div>
<h2 data-usually-unique-id="231679013400709589510554">
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">회고 후기</span></h2>
</div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">2017년 돌아보니 많은 일이 있었던 것 같지만 내 욕심보다 성장을 많이 하지 못해서 아쉬운 한 해였다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">2018년, 올해에는 좀 더 많은 성장, 즐거운 이야기가 가득한 한 해가 되었으면 좋겠다.</span></div>
<div>
<span class=" author-d-iz88z86z86za0dz67zz78zz78zz74zz68zjz80zz71z9iz90z95lz90z8cz89zdz86z3z81zm1xk735z81zz69zkqyz73zobd8z86zz82zz83z">이 글을 읽어주신 모든 분들도 큰 성장, 많은 즐거운 이야기가 함께하기를 바랍니다.</span></div>
pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-27344795531570526832018-01-02T01:14:00.006+09:002018-01-02T01:15:20.316+09:00Firebase node-gyp error최근에 파이어베이스 호스팅과 Functions를 이용해서 사이트를 만들어보고자 했지만<br />
firebase 커맨드라인에 문제가 생겨서 글을 남겨봅니다.<br />
<br />
<br />
Error Name: <b>ERR! Pre-built binaries not found for grpc@1.6.6 and node@9.3.0 (node-v59 ABI) (falling back to source compile with node-gyp)</b><br />
<b><br /></b>
위와 같은 에러가 났는데요.<br />
몇가지 글이 나오지 않는데 GitHub에 이슈가 올라온 것으로 확인했습니다.<br />
<br />
<a href="https://github.com/firebase/functions-samples/issues/267">https://github.com/firebase/functions-samples/issues/267</a><br />
<br />
저는 아래와 같이 해결했습니다.<br />
<br />
$ npm install -g firebase-tools<br />
<br />
또 project-folder/functions 폴더로 가서 node_modules를 지우고 다시 명령어를 해주었습니다.<br />
<br />
$ npm install<br />
<br />
그리고 디플로이! 잘 진행해볼 수 있었습니다.<br />
<br />
$ functions firebase deploy<br />
<br />
=== Deploying to 'webpage-test'...<br />
<br />
i deploying functions, hosting<br />
i functions: ensuring necessary APIs are enabled...<br />
✔ functions: all necessary APIs are enabled<br />
i functions: preparing functions directory for uploading...<br />
i functions: packaged functions (29.15 KB) for uploading<br />
✔ functions: functions folder uploaded successfully<br />
i hosting: preparing public directory for upload...<br />
⚠ Warning: Public directory does not contain index.html<br />
✔ hosting: 2 files uploaded successfully<br />
i functions: updating function app...<br />
✔ functions[app]: Successful update operation.<br />
Function URL (app):<br />
<br />
✔ Deploy complete!<br />
<br />
Project Console: ---<br />
Hosting URL: ---pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-42616929330999232862017-12-28T00:13:00.001+09:002017-12-28T00:13:25.242+09:00Cocos2d-x 7주년<div class="separator" style="clear: both; text-align: center;">
<a href="http://discuss.cocos2d-x.org/uploads/default/optimized/3X/f/2/f260e1845473767ca4b11d7f261023f008f6eddb_1_666x500.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://discuss.cocos2d-x.org/uploads/default/optimized/3X/f/2/f260e1845473767ca4b11d7f261023f008f6eddb_1_666x500.jpg" data-original-height="500" data-original-width="666" height="480" width="640" /></a></div>
<br />
<br />
<a href="http://discuss.cocos2d-x.org/t/happy-7th-birthday-cocos2d-x/40271">http://discuss.cocos2d-x.org/t/happy-7th-birthday-cocos2d-x/40271</a><br />
<br />
Cocos2d-x 가 올해 12월로 7주년을 맞이했다고 합니다.<br />
<br />
2018년에는 코코스 크리에이터(Cocos Creator)를 어떻게 만들어갈 것인지,<br />
지금까지 얼마나 많은 사용자가 사용하고 있는지 등을 보여주고 있습니다.<br />
<br />
<blockquote class="tr_bq">
make games easier to develop</blockquote>
위와 같은 목표로 Cocos 엔진을 만들어갈 것이라고 합니다.<br />
<br />
내년도 Cocos 지켜보겠습니다.pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-46470311307100232362017-12-21T00:59:00.003+09:002017-12-21T00:59:52.382+09:00Cocos2d-x 3.17에 대한 테스트 요청 글이 올라왔네요.<a href="http://discuss.cocos2d-x.org/t/we-need-help-testing-v3-17/40609">http://discuss.cocos2d-x.org/t/we-need-help-testing-v3-17/40609</a><br />
<br />
<br />
slackmoehrle의 글이 올라왔습니다.<br />현재 3.17버전 개발이 마무리 단계로 보이는데 테스트가 필요하다고 하네요.<br />
<br />
3.17버전의 마일스톤은 12.31로 며칠 남지 않은 상태긴합니다.<br />
<a href="https://github.com/cocos2d/cocos2d-x/milestone/37">https://github.com/cocos2d/cocos2d-x/milestone/37</a><br />
<br />
dumganhar가 많은 이슈를 처리하고 있는데 31일까지 다 완료가 가능할지 모르겠습니다.<br />
<br />
이번 업데이트에는<br />
- clang+libc++ 컴파일<br />
- proj.android-studio가 안드로이드 프로젝트 기본 폴더로<br />
- Third party 라이브러리들 업데이트<br />
- NDK r16+ 사용<br />
<br />
이렇게 커뮤니티에 올려져있었습니다.<br />
업데이트 후에 CHANGELOG를 봐야하긴 하겠지만 큰 변화보다 엔진을 안정화시키는<br />
업데이트가 될 것 같습니다.pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-19882882071512522902017-10-13T02:14:00.000+09:002017-10-13T02:14:25.763+09:00Cocos2dx 블로그, 3.16 업데이트 포스팅공식 블로그에 올라오기 전에 작성했던 글:<br />
<a href="https://pineoc.blogspot.kr/2017/10/cocos2d-x-316.html">https://pineoc.blogspot.kr/2017/10/cocos2d-x-316.html</a><br />
<br />
Cocos2dx blog에 올라온 3.16 업데이트에 대한 글:<br />
<a href="http://blog.cocos2d-x.org/2017/10/cocos2d-x-v3-16-released/">http://blog.cocos2d-x.org/2017/10/cocos2d-x-v3-16-released/</a><br />
<br />
앞서 업데이트가 진행되기 전에 글에서 이야기했던 내용을 보면,<br />
<br />
<blockquote class="tr_bq">
<span style="background-color: white; color: #757575; font-family: Roboto, sans-serif; font-size: 15px;">Cocos Creator에서 만든 것을 C++로 가져올 수 있다는 점과</span><br style="background-color: white; color: #757575; font-family: Roboto, sans-serif; font-size: 15px;" /><span style="background-color: white; color: #757575; font-family: Roboto, sans-serif; font-size: 15px;">prebuilt를 사용해서 bullet 빌드하는 컴파일 속도를 올렸다는 점을 볼 수 있을 것 같습니다.</span><br style="background-color: white; color: #757575; font-family: Roboto, sans-serif; font-size: 15px;" /><span style="background-color: white; color: #757575; font-family: Roboto, sans-serif; font-size: 15px;">(윈도우 10, 윈도우 폰, 타이젠 지원 중지도 크다면 큰 변경사항이네요.)</span></blockquote>
<br />
업데이트 전, 릴리즈노트와 달라진 점은 없습니다.<br />
추가적인 정보를 위해서 포스팅하게되었습니다.<br />
<br />
<b>C++ 사용자를 위한 코코스 크리에이터 플러그인</b>: <a href="https://github.com/cocos2d/creator_to_cocos2dx">https://github.com/cocos2d/creator_to_cocos2dx</a><br />
이 플러그인을 사용해서 export하면 에디터에서 만든 결과를 사용할 수 있습니다.<br />
단지 0.2 버전으로 안정적이지는 않지만 사용할 수 있게 되었다는게 크다고 생각됩니다.<br />
(<a href="https://github.com/cocos2d/creator_to_cocos2dx#limitations">https://github.com/cocos2d/creator_to_cocos2dx#limitations</a>, 이 리스트만 지원됨.)<br />
<br />
<b>LayerRadialGradient</b> 라는 Layer를 추가했다는데 이 레이어는 LayerColor 레이어와 비슷하지만,<br />
둥글게 색칠하는게 다르다고 합니다. (어디에 사용할지는 잘 모르겠군요.)<br />
<br />
<b>Bullet 라이브러리가 prebuilt로</b> 들어갔다고 합니다.<br />
개발자들이 잘 사용하지 않는 라이브러리인데 빌드할 때 같이 빌드되는 바람에 시간이 많이 들었는데<br />
좋은 업데이트인 것 같습니다.<br />
<br />
<b>Windows 10 metro, Windows Phones, Tizen 지원 중단.</b><br />
윈도우폰은 중단될 줄은 알았지만, 윈도우즈 지원을 전면 중단했습니다.<br />
(타이젠도 더불어 중단.. 시장 점유율도 0%인걸요..)<br />
<br />
전체 CHANGELOG 링크 추가하고 마칩니다.<br />
<a href="https://github.com/cocos2d/cocos2d-x/blob/v3/CHANGELOG">https://github.com/cocos2d/cocos2d-x/blob/v3/CHANGELOG</a>pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-48436228593695152992017-10-05T17:27:00.001+09:002017-10-05T17:27:30.884+09:00Cocos2d-x 엔진에 대한 토론 쓰레드(2)<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIX-rdDH-47iH9jJ_3Hq2nWMzseQRzf1Vthpn2ZvyhMdKMYEfcwu3E9MiH9hrL03byj6ahAw4ntBtOfd-ocYTpfXpNZMTxGFSc3uwJbnqJ_nQ_Qr1r3qZpNo04TqGi20E0GHdh537F4s0/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2017-10-05+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+4.19.32.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="362" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIX-rdDH-47iH9jJ_3Hq2nWMzseQRzf1Vthpn2ZvyhMdKMYEfcwu3E9MiH9hrL03byj6ahAw4ntBtOfd-ocYTpfXpNZMTxGFSc3uwJbnqJ_nQ_Qr1r3qZpNo04TqGi20E0GHdh537F4s0/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2017-10-05+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+4.19.32.png" width="640" /></a><br />
<br />
<a href="https://pineoc.blogspot.kr/2017/10/cocos2d-x.html">https://pineoc.blogspot.kr/2017/10/cocos2d-x.html</a><br />
앞선 글에 이은 글 입니다. 이번에는 cocos2d-x founder walzer의 글을 한번 보도록 하겠습니다.<br />
<br />
<a href="http://discuss.cocos2d-x.org/t/answering-the-questions-about-cocos-creator-the-engine-and-editor/38665">http://discuss.cocos2d-x.org/t/answering-the-questions-about-cocos-creator-the-engine-and-editor/38665</a><br />
<br />
이번 글은 Cocos Creator에 대한 내용과 Cocos 엔진의 미래에 대한 내용을 다루고 있습니다.<br />
글에서는 아래와 같은 내용을 담고 있었는데요.<br />
<br />
<b>Cocos 엔진 미래</b><br />
- Chukong Technologies 에서 Xiamen Cocos Software inc로 큰 변화가 있을 것.<br />
- 게임 엔진에 더 많은 개발자가 참여할 것이고, slackmoehrle가 다시 참여할 것.<br />
- 자금을 아래와 같이 사용할 것<br />
- 커뮤니티, 문서, 비디오 튜토리얼, 포럼 등에 지원<br />
- C++, Lua 개발자들을 위해 Creator 지원<br />
- 3D 개발을 Creator에서 개발할 수 있게 지원<br />
- cocos2d-x 4.0!<br />
<br />
<b>Cocos Creator 이야기</b><br />
- 퍼포먼스에 대한 이야기<br />
- R&D Edge, 3D 지원 등에 대한 이야기<br />
- Cocos Creator 미래.<br />
- HTML5, 자바스크립트의 상승세 등<br />
- 이 에디터를 마지막으로 생각하고 개발중이다! 안되면 게임업계 Quit!<br />
- We need a friendly ENGINE, no dysfunction EDITOR.<br />
- 이 글에 대한 것은 전에 중국 커뮤니티에서도 이야기나온 것들이 있음. (성능, 언어 지원 등등)<br />
- '유니티와 너무 비슷하다', '바퀴를 왜 다시 만드나' 에 대한 대답은 '우리 엔진에 맞는 에디터가 필요하다' 도 인 것 같습니다. (있는 것을 왜 개발하냐고 묻는 것과는 다른 의미를 생각하고 개발할 수 있는 것)<br />
- Cocos2d-x Future: C++ or Javascript<br />
- cocos2d에서 Objective C vs C++논의가 있었다면 Objective C를 선택했을 것.<br />
- 큰 의미가 있는 논의가 아니다.<br />
- Cocos Creator를 사용해야하는 이유에 대한 투표<br />
- C++를 지원하지 않는다는점, Cocos Creator가 Opensource가 아니라는 점, 영어 문서가 잘 안되어 있는점 때문에 사용하기 힘듬.<br />
<br />
위와 같이 정리를 해보았습니다. 이해할 수 없는 내용이나 어려운 내용은 없었지만<br />
중간에 왜 있는 도구를 다시 개발해야하나하는 내용은 제대로 이해하기 힘든 점도 있었습니다.<br />
<br />
이 첫글 이후에 이야기된 내용은 약 75개 정도 있는데 중간에 KAMIKAZE가 트롤링이 심해서<br />
대화가 닫히는 일도 일어나기도 했습니다.<br />
(게임엔진은 C++이 최고다! C++, C++ ... 이랬다가 지금은 삭제하고 조용한 상태입니다.)<br />
<br />
정보에 대한 공유가 이뤄지고 있는 점에 대해 좋다고 생각합니다. 커뮤니티와 이야기하고<br />
토론한다는 점에서 아직 Cocos 그룹이 살아있다는 것을 보여주고 있다고도 생각합니다.<br />
<br />
전체적으로 3D를 지원한다, JS를 밀어주려한다 등등에 대한 것은 이해하지만<br />
Cocos2d-x 버전 4.0 계획은 조금 이해가 가지 않습니다.<br />
로드맵이 업데이트가 되지 않고 있어서 추후에 3D를 추가한다, VR 등등 다른 부분을 많이 추가할 것이다, 이런 자세한 부분이 공유가 되지 않고 있어서 혼란스럽기도 하구요.<br />
<br />
커뮤니티에서는 이렇게 이야기가 진행되고 있었고 앞으로 Cocos 그룹이 어떻게 프로젝트를 진행할지는<br />
지켜봐야할 것 같습니다.<br />
<br />
다른 이야기들이 진행된다면 다른 포스트로 공유하겠습니다.<br />
고맙습니다 :)pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-77813867967940243612017-10-03T01:32:00.002+09:002017-10-05T17:28:42.167+09:00Cocos2d-x 엔진에 대한 토론 쓰레드<a href="http://discuss.cocos2d-x.org/t/we-need-a-friendly-engine-not-a-dysfunction-editor/33651">http://discuss.cocos2d-x.org/t/we-need-a-friendly-engine-not-a-dysfunction-editor/33651</a><br />
<br />
최근 한달 전까지 이루어진 토론인데 쭉 읽어보면서 내용을 정리해보려합니다.<br />
일단 제목부터...<br />
<blockquote class="tr_bq">
We need a friendly engine not a dysfunction editor.<br />
(우리는 부작용 에디터가 아닌 친숙한 엔진이 필요합니다.)</blockquote>
구글 번역기로 돌려서 그런지 이상하지만 의역을 해보자면,<br />
<blockquote class="tr_bq">
우리는 작동이 잘 되지 않는 에디터보다 친숙한 엔진이 필요하다. </blockquote>
이렇게 해석할 수 있을 것 같습니다.<br />
<br />
현재 Cocos2d 팀은 Cocos Creator에 힘을 집중하고 있는데 그에 대한 유저들의 생각,<br />
이야기들을 볼 수 있는 쓰레드입니다.<br />
<br />
저도 코드로만 짜고 중간에 Cocos Studio를 사용해서 한번 앱을 개발해본 적이 있었지만,<br />
코드로 짜는게 편하다고 느끼는 편입니다.<br />
(저도 저 쓰레드를 만든 사람과 같은 생각으로 엔진 본연에 더 집중해줬으면 하는게 바람이었지만,<br />
에디터를 만들어서 조금 더 확장해보려는 시도는 나쁘지 않다고 생각합니다.)<br />
<br />
저는 Cocos2d-x 를 깊게까지 사용하지 않는 개발자라고 생각하는데도 엔진에 집중하고 있지 않다고 생각합니다.<br />
마이너 버전 업할 때 마다 버그가 있어서 bugfix 버전이 금방 나오곤해서 그것도 문제라고 생각하구요.<br />
(물론 오픈소스 엔진이니까 유저들이 관심을 가지고 PR, Issue 잘 수정해서 올리고 그러면 완성도가 올라가긴 하겠습니다만..)<br />
<br />
이 쓰레드는 엔진에 집중하지 않고 왜 에디터를 더 밀고 있냐하는 이야기로 시작되었습니다.<br />
308개의 쓰레드를 다 번역해서 올리기는 힘들 것 같고 큰 이야기 흐름에 대해 정리해보겠습니다.<br />
(<span style="background-color: #f9f9f9; color: #222222; font-family: "helvetica" , "arial" , sans-serif; font-size: 14px;">There are </span><b style="background-color: #f9f9f9; color: #222222; font-family: Helvetica, Arial, sans-serif; font-size: 14px;">307</b><span style="background-color: #f9f9f9; color: #222222; font-family: "helvetica" , "arial" , sans-serif; font-size: 14px;"> replies with an estimated read time of </span><b style="background-color: #f9f9f9; color: #222222; font-family: Helvetica, Arial, sans-serif; font-size: 14px;">85 minutes</b><span style="background-color: #f9f9f9; color: #222222; font-family: "helvetica" , "arial" , sans-serif; font-size: 14px;">.</span>) 읽는데에 85분 걸릴거라고 하는데,<br />
아마 해석하느라 2~3배정도 걸리지 않을까 예상해봅니다..ㅎㅎㅎ<br />
<br />
시작해봅시다! (의역과 모호한 해석이 넘쳐날 수 있습니다;;)<br />
<br />
맨 처음 글은<br />
<blockquote class="tr_bq">
"요즘 엔진보다 에디터에 힘을 쓰고 있는 것 같다. 다양한 것을 시도하는 것도 좋지만 cocos2d가 가지고 있는 엔진으로써의 장점을 잘 살려야한다고 생각한다. 에디터보다 엔진에 집중하는게 좋지 않을까?"</blockquote>
라는 글 이었습니다.<br />
<br />
그 이후로 이야기가 진행되었는데요, 너무 많아서 대략적인 내용을 정리해보면,<br />
<br />
"엔진 개발도 중요하지만 쉽게 개발하기 위해, 엔진 사용자들이 더 쉽게 개발할 수 있게 에디터 개발도 좋은 방향이라고 생각한다." vs "하지만 엔진에도 수정해야하고 발전해야하는 부분이 많은데 에디터에 힘을 쏟는 것은 이상하다."<br />
<br />
중간에 커뮤니티 에반젤리스트인 <b>Slackmoehrle</b>이 와서 이야기를 진행합니다.<br />
<br />
"엔진 만드는 것도 중요합니다, 하지만 에디터로 프로토타입을 만들고 게임, 앱을 만드는데에 본질을 집중할 수 있게 에디터가 필요하다고 생각합니다. 다른 엔진들도 에디터가 있지만 우리 엔진은 에디터가 없는 것도 개발자들에게 장벽이라고 생각합니다."<br />
<br />
<b>글 작성자</b> 외에 <b>다른 개발자</b>들이 하는 말은<br />
"이미 있는 바퀴를 또 다시 만드는 것은 멍청한 것이다. (있는 도구를 또 만드는 것)"<br />
<b><br /></b>
<b>Slackmoehrles</b>는<br />
"몇 달마다 에디터를 만드는데에 우려를 표하는 글이 올라오지만 우리는 에디터를 만드는데에 소신을 가지고 만들고 있다. 사람들이 우려하는 내용은 별 의미 없는 우려가 많았다. 에디터 만드는 것은 중요하다고 생각한다."(많이 추리긴 했지만 이런 느낌의 글 흐름이 있었습니다.)<br />
<br />
<b>글 작성자</b>는<br />
"Cocos Studio, Cocos Builder 같은 경우는 Open되서 개발되었는데 Cocos Creator는 Unity처럼 캡슐 상태로 개발이 되고 있는 것에 대해 우려가된다."<br />
<br />
<b>Slackmoehrles</b><br />
"우리의 엔진은 오픈소스이며 에디터가 캡슐 상태(private) 인 것은 문제가 되지 않는다."<br />
<br />
다른 글에서는 이후로 튜토리얼이나 엔진에 대한 문서, 튜토리얼 이야기가 나왔습니다.<br />
아직 문서나 그런 자료들이 많이 부족해서 초보 개발자들이 개발하기 힘들다는 점에 대해 이야기가 있었고, 계속해서 많은 노력이 필요하다는게 전체적인 이야기였습니다.<br />
<br />
그 이후에는 <b>walzer</b> , Cocos founder가 이야기합니다.<br />
<a href="http://discuss.cocos2d-x.org/t/we-need-a-friendly-engine-not-a-dysfunction-editor/33651/140">http://discuss.cocos2d-x.org/t/we-need-a-friendly-engine-not-a-dysfunction-editor/33651/140</a><br />
<br />
긴 이야기를 했지만 요지는<br />
"JS를 지원하고 에디터를 만드는 것은 많은 개발자가 Cocos2d를 사용하기 좋은 환경으로 만들어가고 싶다!"<br />
<br />
이에 대해 많은 이야기가 오고갔습니다.<br />
에디터와 엔진의 <b>코드베이스</b>, <b>현재 사용자</b>와 <b>앞으로 사용할 사용자</b>의 차이, 에디터는 어떤언어로 개발되어야하냐부터 자잘한 이야기까지 있었습니다.<br />
모든글을 영어로 읽어보지 못했지만, 전체적인 이야기는 <b>에디터 정말 필요한가?</b><br />
<br />
이어지는 글을 보고 정리한 결론을 따로 포스팅해야겠습니다.<br />
<br />
이어지는 글 :<br />
- Answering the questions about Cocos Creator, the engine and editor: <a href="http://discuss.cocos2d-x.org/t/answering-the-questions-about-cocos-creator-the-engine-and-editor/38665">Link</a><br />
- Vote cocos2d-x future C or Javascript: <a href="http://discuss.cocos2d-x.org/t/vote-cocos2d-x-future-c-or-javascript/38364">Link</a><br />
- <a href="http://pineoc.blogspot.com/2017/10/cocos2d-x-2.html">http://pineoc.blogspot.com/2017/10/cocos2d-x-2.html</a>pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-63472954051424050262017-10-02T23:27:00.003+09:002017-10-10T11:53:27.309+09:00Cocos2d-x 3.16 업데이트<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghPw3Ix84NxdQqvLe5Id84mKmeBk_iGLKAxDDZK7gchkDqaTODul1ckGEMkRu-hUwnMD0FWrbEOPkWqo5F8Y2JMUyudSL3wNX74fCc6kOkczmxDLvIVdL1pNojj7fWHCBt3psOwG8RwpI/s1600/KakaoTalk_2017-10-02-22-51-31_Photo_25.jpeg" imageanchor="1"><img border="0" height="486" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghPw3Ix84NxdQqvLe5Id84mKmeBk_iGLKAxDDZK7gchkDqaTODul1ckGEMkRu-hUwnMD0FWrbEOPkWqo5F8Y2JMUyudSL3wNX74fCc6kOkczmxDLvIVdL1pNojj7fWHCBt3psOwG8RwpI/s640/KakaoTalk_2017-10-02-22-51-31_Photo_25.jpeg" width="640" /></a><br />
<br />
마일스톤을 보면 9/30일에 릴리즈 예정입니다.<br />
<br />
이번 업데이트에는 어떤 변경점이 있는지 궁금하네요.<br />
요즘에는 큰 변경사항은 없고 엔진 안정성을 올리는 것으로 진행되었습니다.<br />
3.15버전에서 액션 버그, Label 버그 등등이 있었는데 수정되었는지 지켜봐야겠습니다.<br />
<br />
해결된 이슈리스트만 봐도 어느정도 해결은 된 것으로 보이지만<br />
릴리즈된 결과물을 확인해봐야 알수있겠죠.<br />
<br />
2일이 지났지만 아직 릴리즈는 안됐습니다.<br />
앞으로 업데이트될 내용을 한번 확인해보겠습니다. (3.16 브랜치에 있는 릴리즈노트를 확인)<br />
2017/10/1 - <a href="https://github.com/cocos2d/cocos2d-x/blob/v3.16/docs/RELEASE_NOTES.md">[v3.16 브랜치] 릴리즈노트</a><br />
<br />
<h2 style="border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, system-ui, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;">
Highlights</h2>
<ul style="box-sizing: border-box; color: #24292e; font-family: -apple-system, system-ui, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;">
<li style="box-sizing: border-box;">better support <a href="https://github.com/cocos2d/creator_to_cocos2dx" style="box-sizing: border-box; color: #0366d6; text-decoration-line: none;"><code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">creator_to_cocos2dx</code></a> creator plugin</li>
<li style="box-sizing: border-box; margin-top: 0.25em;">add <span style="box-sizing: border-box; font-weight: 600;">LayerRadiaGradientLayer</span></li>
<li style="box-sizing: border-box; margin-top: 0.25em;">update to support Android Studio 2.3.3</li>
<li style="box-sizing: border-box; margin-top: 0.25em;">fix the issue that lua projects will crash on iOS simulator with Xcode 8.0+</li>
<li style="box-sizing: border-box; margin-top: 0.25em;">revert CocosStudio reader and flatbuffer</li>
<li style="box-sizing: border-box; margin-top: 0.25em;">fix compling error with iOS 11</li>
<li style="box-sizing: border-box; margin-top: 0.25em;">use prebuit bullet to improve compiling speed</li>
<li style="box-sizing: border-box; margin-top: 0.25em;">remove supporting of Windows 10 metro, Windows Phones and Tizen</li>
<li style="box-sizing: border-box; margin-top: 0.25em;">update to Spine v3.5.35 and support skeleton batching in web engine</li>
</ul>
<br />
위의 하이라이트를 보면 가장 큰 업데이트라고 볼 수 있는<br />
Cocos Creator에서 만든 것을 C++로 가져올 수 있다는 점과<br />
prebuilt를 사용해서 bullet 빌드하는 컴파일 속도를 올렸다는 점을 볼 수 있을 것 같습니다.<br />
(윈도우 10, 윈도우 폰, 타이젠 지원 중지도 크다면 큰 변경사항이네요.)<br />
<br />
아직 공식 업데이트가 되지 않아서 변경될 수 있지만 하이라이트 사항은 큰 변경은 없을 것으로 보입니다.<br />
<br />
전체 릴리즈 노트는<br />
아직 올라오지 않았네요... 정식 릴리즈 때 업데이트 하겠습니다.<br />
그럼 글 마치겠습니다. :)<br />
<br />
# 업데이트<br />
10월 9일 오전 10시 30분 쯤에 3.16버전 업데이트되었습니다.<br />
<a href="https://github.com/cocos2d/cocos2d-x/releases/tag/cocos2d-x-3.16">https://github.com/cocos2d/cocos2d-x/releases/tag/cocos2d-x-3.16</a><br />
<br />
<br />pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-59070532384068659092017-09-30T01:45:00.004+09:002017-09-30T01:46:03.553+09:00Cocos2d 커뮤니티에서 일어나고 있는 이야기들<div style="background-color: white; color: #1d2129; font-family: "SF Optimized", system-ui, -apple-system, system-ui, ".SFNSText-Regular", sans-serif; font-size: 14px; letter-spacing: -0.12px; margin-bottom: 6px;">
제가 요즘 관심있게 보고 있는 토픽입니다. </div>
<blockquote class="tr_bq" style="background-color: white; color: #1d2129; font-family: "SF Optimized", system-ui, -apple-system, system-ui, ".SFNSText-Regular", sans-serif; font-size: 14px; letter-spacing: -0.12px; margin-bottom: 6px;">
내가 사용하는 엔진이 미래가 있는가.</blockquote>
<div style="background-color: white; color: #1d2129; font-family: "SF Optimized", system-ui, -apple-system, system-ui, ".SFNSText-Regular", sans-serif; font-size: 14px; letter-spacing: -0.12px; margin-bottom: 6px;">
<br /></div>
<div style="background-color: white; color: #1d2129; font-family: "SF Optimized", system-ui, -apple-system, system-ui, ".SFNSText-Regular", sans-serif; font-size: 14px; letter-spacing: -0.12px; margin-bottom: 6px;">
앱을 개발하기 시작해서부터 연속적으로 사용하지 않았지만, </div>
<div style="background-color: white; color: #1d2129; font-family: "SF Optimized", system-ui, -apple-system, system-ui, ".SFNSText-Regular", sans-serif; font-size: 14px; letter-spacing: -0.12px; margin-bottom: 6px;">
지금까지 써온 게임 엔진은 Cocos2d-x 입니다. (한 4년정도..?)</div>
<div style="background-color: white; color: #1d2129; font-family: "SF Optimized", system-ui, -apple-system, system-ui, ".SFNSText-Regular", sans-serif; font-size: 14px; letter-spacing: -0.12px; margin-bottom: 6px;">
<br /></div>
<div style="background-color: white; color: #1d2129; font-family: "SF Optimized", system-ui, -apple-system, system-ui, ".SFNSText-Regular", sans-serif; font-size: 14px; letter-spacing: -0.12px; margin-bottom: 6px; margin-top: 6px;">
최근에 Cocos2d-x 엔진은 어떤 로드맵을 가지고 개발을 하고 있지?<br />
내가 하는 프로젝트, 회사에서 쓰는 프로젝트가 cocos2d-x를 사용하는데 </div>
<div style="background-color: white; color: #1d2129; font-family: "SF Optimized", system-ui, -apple-system, system-ui, ".SFNSText-Regular", sans-serif; font-size: 14px; letter-spacing: -0.12px; margin-bottom: 6px; margin-top: 6px;">
같이 성장할 수 있는 엔진일까? 하는 생각이 들었습니다.</div>
<div class="text_exposed_show" style="background-color: white; color: #1d2129; display: inline; font-family: "SF Optimized", system-ui, -apple-system, system-ui, ".SFNSText-Regular", sans-serif; font-size: 14px; letter-spacing: -0.12px;">
<div style="font-family: inherit; margin-bottom: 6px;">
그러다가 블로그에 정리하면서 커뮤니티에 올라오는 글들을 보고 있는데 </div>
<div style="font-family: inherit; margin-bottom: 6px;">
이런 고민들이 전 부터 있었다는 걸 알 수 있었습니다.</div>
<div style="font-family: inherit; margin-bottom: 6px;">
<br /></div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
맨 처음에는 이 글을 보았습니다. (엔진 vs 에디터)<br />
<a data-ft="{"tn":"-U"}" data-lynx-mode="async" data-lynx-uri="https://l.facebook.com/l.php?u=http%3A%2F%2Fdiscuss.cocos2d-x.org%2Ft%2Fwe-need-a-friendly-engine-not-a-dysfunction-editor%2F33651&h=ATMQRMFOGp2wwf28VzIE-FmiKONEsMxcIuKzj53aR1IDoFKKFMufkE9xGUj4gywKXLoWdE6pkc1jDWwWaUZO_9JRLuCaK43uNKcIKbccByzJHslqhMy-Mu5TAGAmF7nr6tVcaq_ddjyyJJ5RUMEp_XZ43qz4t4nLcyNQNqUBlARYf3XZB-x0F_17mkgzbWquVpkU4ES8S7pSbl8pcsbyQzYZ6_vaFXTW5EkLKKlXps8SqbiD60hoHwap9FzqU9avRrEw1ASt4ktw3nfMafmDZWi2m25xlNoBSqf0BvpT17fXRKAgitsd" href="http://discuss.cocos2d-x.org/t/we-need-a-friendly-engine-not-a-dysfunction-editor/33651" rel="noopener" style="color: #365899; cursor: pointer; font-family: inherit; text-decoration-line: none;" target="_blank">http://discuss.cocos2d-x.org/t/we-need-a-friendly-eng…/33651</a></div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
투표를 하면서 이야기를 하지만 C++이 짱이야! 하는 사람때문에 모두가 힘들어했던 쓰레드와<br />
<a data-ft="{"tn":"-U"}" data-lynx-mode="async" data-lynx-uri="https://l.facebook.com/l.php?u=http%3A%2F%2Fdiscuss.cocos2d-x.org%2Ft%2Fvote-cocos2d-x-future-c-or-javascript%2F38364&h=ATNvjROq36vHnR314W5gPPEbjVJ_tuLL3ubo0GlD236sjE3r3Gyg2vYsSZtGOuk1KjtywXbROqS5E2U73717dgnIdwDOf2N_0Gs0gRlqjlpeGoBZ157cdQ-pF79y8ngkMJbi2hkWMseb2uMA4kKxnWq8p5uGeTsRl5anZnIM9hs_QFZXd994fGqQIbe323svb_4GSxBxL_qb26yUUMk96hdcX47g--mSEa-achcG672zIycDLaVxx14L3k5Tp-LURpcPNuJlBsGx-8JzcDDEbwsyrVw02XZbHJTYCS_VrSSBEnHD7Q4C" href="http://discuss.cocos2d-x.org/t/vote-cocos2d-x-future-c-or-javascript/38364" rel="noopener" style="color: #365899; cursor: pointer; font-family: inherit; text-decoration-line: none;" target="_blank">http://discuss.cocos2d-x.org/t/vote-cocos2d-x-future-…/38364</a></div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
나중에는 Cocos2d-x Founder, walzer가 답변한 것 까지<br />
<a data-ft="{"tn":"-U"}" data-lynx-mode="async" data-lynx-uri="https://l.facebook.com/l.php?u=http%3A%2F%2Fdiscuss.cocos2d-x.org%2Ft%2Fanswering-the-questions-about-cocos-creator-the-engine-and-editor%2F38665&h=ATNsCmWVENkZ7ICwth15v2OhgeguVKU_kiPg-4ZBlQz1GA6lEPjfdCE-PGODVspll6mlOpwXatWrBg1fk0GrYjC3y5zp01jgZkycoIR3WOOl_AmIkmuBoOmz5PIvuJwji9jkA8zKcZwjq2Jt0RI1IxCjYBTe2-LzTOxpH0eWvOT7GOYvjaRgMI6AT65qRZiLcS2CxXV91C8LZXJlhZPUtA3PJ8jvZnf0rnjcm9Ig4rkOdci7jM7cqtB9hxNrHb_m1CX4COgwoQr8fRRrcLHQb6hxAD6tMoRkzxexeCq87BA5YABO5v8D" href="http://discuss.cocos2d-x.org/t/answering-the-questions-about-cocos-creator-the-engine-and-editor/38665" rel="noopener" style="color: #365899; cursor: pointer; font-family: inherit; text-decoration-line: none;" target="_blank">http://discuss.cocos2d-x.org/t/answering-the-question…/38665</a></div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<br /></div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
논의가 많이 길고 영어 글이라서 추석동안 한번 어떻게 돌아가는지 알아봐야겠습니다.<br />
(사실 영어 글을 읽고 있으니 저게 진짜 트롤링인지 아닌지 한참을 봐야 알수 있었습니다. ㅠㅠ)</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<br /></div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
지금도 위의 3개 쓰레드를 보고 글을 작성하고 있는데 논의되는 내용이 많아서 천천히 써봐야겠습니다.</div>
</div>
pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-19447492557744836672017-09-29T18:24:00.002+09:002017-09-29T18:24:10.608+09:00Cocos2d의 역사<h2>
한눈에 볼 수 있는 Cocos2d의 역사<br />(The history of Cocos2d in a glimpse)</h2>
<br />
원글: <a href="https://retro.moe/2017/04/16/cocos2d-in-a-glimpse/">https://retro.moe/2017/04/16/cocos2d-in-a-glimpse/</a><br />
<br />
Cocos2d 만든 Ricardo Quesada의 Cocos2d의 역사에 대한 블로그를 번역했습니다.<br />
<br />
2008년 2월, 아르헨티나 코르도바의 Los Cocos에서 우리는 "Los Cocos" Python 게임 엔진을 시작했습니다.<br />
나중에 Cocos2d로 이름을 변경했습니다. 아이디어는 우리가 <a href="https://pyweek.org/">PyWeek</a> 용으로 게임을 만들기 위한 게임 엔진을 만드는 것이었습니다. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/vhpMrsnv9CAOcbB_ZSSFIxOgP-Soh8FoACuQkQBAk5XU9MN84oekftn9Ai4uvaHTAQBzY4FH0LeDubielKw-iseyHkyv75Z-UmeV_PnzMgsh4WYRqCz9LIBIx0duYzsVpicyCLU" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="340" data-original-width="512" height="265" src="https://2.bp.blogspot.com/vhpMrsnv9CAOcbB_ZSSFIxOgP-Soh8FoACuQkQBAk5XU9MN84oekftn9Ai4uvaHTAQBzY4FH0LeDubielKw-iseyHkyv75Z-UmeV_PnzMgsh4WYRqCz9LIBIx0duYzsVpicyCLU" width="400" /></a></div>
<div style="text-align: center;">
PyCamp 2008. Centro Allen Gardiner, Los Cocos, Córdoba, Argentina</div>
<br />
Alejandro Cura와 <a href="http://www.python.org.ar/">PyAr</a>의 다른 멤버들의 도움을 받아 Lucio Torre, Daniel Moisset, Rayentray Tappa 그리고 제가 게임 엔진 개발을 시작했습니다.<br />
2008년 3월, 우리는 PyCon Chicago에서 라이트닝 토크에서 발표한 베타 버전(또는 알파 버전?)을 발표했습니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/GCz9OlGCZMHuVauHqN7hoLZ5oZpKNtsJTojnjKkoz26GUGMmqM3x1Q5BVAlMijg4b_dD99jJT8EFfbE_TAfDcnlyw_RTY5eOqw3t-eZfRG0HiXN6wLWmKHdYolZUD_Q1HUnDHM8=w1024-h681-no" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="681" data-original-width="1024" height="265" src="https://1.bp.blogspot.com/GCz9OlGCZMHuVauHqN7hoLZ5oZpKNtsJTojnjKkoz26GUGMmqM3x1Q5BVAlMijg4b_dD99jJT8EFfbE_TAfDcnlyw_RTY5eOqw3t-eZfRG0HiXN6wLWmKHdYolZUD_Q1HUnDHM8=w1024-h681-no" width="400" /></a></div>
<div style="text-align: center;">
PyCon March 2008, Chicago. We announced Cocos2d in a lightning talk.</div>
<br />
2008년 7월, Lucio와 저는 Euro Python에서 Cocos2d를 발표했습니다. (v0.3 버전?) <br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/kgl7EbCPt_B-ZN44mSTblpdUN7TSNX9mnIa23QIqbfAv02pMxYoaQvZurHDot7d39bZv7Qh5WoDedxnSs7_iOg0WyXKGKRKFcgBQ_zHVZgSiRBHw5T7vI3IF2icSY-2OzXMsI80" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="384" data-original-width="512" height="300" src="https://4.bp.blogspot.com/kgl7EbCPt_B-ZN44mSTblpdUN7TSNX9mnIa23QIqbfAv02pMxYoaQvZurHDot7d39bZv7Qh5WoDedxnSs7_iOg0WyXKGKRKFcgBQ_zHVZgSiRBHw5T7vI3IF2icSY-2OzXMsI80" width="400" /></a></div>
<div style="text-align: center;">
With Lucio Torre at Euro Python 2008 presenting Cocos2d.Vilnius, Lithuania, July 2008</div>
<br />
또한 Lucio와 저는 <a href="https://twitter.com/pyconar">PyCon Ar</a> 2008 및 2009에서 Cocos2d를 발표했습니다.<br />
2010년에는 Claudio Canepa가 새로운 Cocos2d 개발자/관리자가 되었습니다.<br />
<br />
<h3>
<b>Cocos2d-iPhone
</b></h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/4Ou3F7RI7FCsvr3R7iFMSmpmWLZYwVJNSxE9LM4vZEt0vwnpUO20eZVDgAl5AkFtHJSaykuq7FbacZK57lTTIrEqNqkq8TLxoQvQUaAndIbTsvYoFuQKb2IjJ0w6L7ucQfrgsOg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="512" data-original-width="512" height="200" src="https://1.bp.blogspot.com/4Ou3F7RI7FCsvr3R7iFMSmpmWLZYwVJNSxE9LM4vZEt0vwnpUO20eZVDgAl5AkFtHJSaykuq7FbacZK57lTTIrEqNqkq8TLxoQvQUaAndIbTsvYoFuQKb2IjJ0w6L7ucQfrgsOg" width="200" /></a></div>
2008년 초쯤에, 애플은 아이폰에 스토어가 있다고 발표했습니다. (앱스토어)<br />
애플은 수익의 30%만을 가져갔습니다. (그 당시에는 통신사가 약 90 %를 차지하고 있었습니다).<br />
게다가 아이폰은 OpenGL ES에 의해 구동되었고, OS는 유닉스 기반이었습니다.<br />
<br />
이 무렵, 저는 돈을 벌 수 있는 앱을 만들고 싶었습니다.<br />
저는 이전의 웹(플래시) 및 피처 폰(J2ME)을 가능한 시장으로 봤습니다.<br />
하지만 애플의 발표 이후, 아이폰 전용 게임을 개발하기로 결정했습니다.<br />
<br />
저의 iPhone 게임을 만들기 위해 게임 엔진이 필요했기 때문에 Objective-C로 Cocos2d를 다시 작성했습니다.<br />
높은 수준의 디자인은 동일하게 유지되었지만 iPhone에서 동작하도록 실질적인 변화를 만들어야 했습니다. 이것이 바로 "cocos2d-iphone"이 탄생한 입니다.<br />
첫 번째 cocos2d-iphone 버전 (v0.1)은 2008년 6월에 출시되었습니다.<br />
<br />
2008년 3월, 저는 iPhone 개발자 라이센스를 얻기 위해 라이센스를 신청했으며,<br />
마침내 2008년 7월에 라이센스를 받았습니다. (지금은 몇 분 안에 얻을 수 있는 반면, 저는 4개월이 걸렸습니다.)<br />
라이센스없이 iPhone 앱에 게임을 게시하는 것은 불가능했습니다.<br />
라이센스를 기다리는 동안 계약 업무도 하고, cocos2d-iphone을 사용하여 써드 파티를 위한 게임을 개발하였습니다.<br />
<br />
제 iPhone 개발자 라이센스를 받으면서 저의 첫 번째 게임인 아이폰 용 Sapus Tongue를 만들었습니다.<br />
그러나 상업용 게임을 만드는 것이 저에게는 그다지 재미있지 않다고 생각했습니다. 어느 누구도 쉽게 찾을 수 없었습니다.<br />
cocos2d-iphone이 이미 유명해졌기 때문에, 저는 이 엔진에 풀타임으로 일하기로 결정했습니다.<br />
제가 이렇게 결정할 수 있는 이유는 제가 실제로 cocos2d-iphone을 위한 <a href="https://web-beta.archive.org/web/20110529144259/http://www.sapusmedia.com:80/products/">두 개의 상업적 도구</a>인<br />
LevelSVG(cocos2d 상위에 있는 에디터 + 물리엔진)와 <a href="https://github.com/sapusmedia/Sapus-Tongue">Sapus Tongue 소스 코드</a>를 판매함으로써 실제로 생계를 꾸려 나가고 있기 때문입니다.<br />
<br />
2009년 초에는 이미 cocos2d-iphone을 사용하여 개발된 앱이 100개 이상 있었습니다.<br />
iPhone App Store에서 1등에 도달한 첫 번째 앱은 <a href="http://www.erichartzog.com/blog/creating-stickwars">Stick Wars</a>입니다. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/5F8wGUMT8E3nXmVZVbLVK4kG_bIBbuQHa0cwI9VAZIN0dm2d8Hd6YkCZK0H2y8Zp8N_771QHJunbIJ8vFr5onjx7m-heWEWNdsxKmQ5w16yTJ6wSuF1o9aNlF-A71Dz86bcV4ek" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="320" data-original-width="480" height="266" src="https://4.bp.blogspot.com/5F8wGUMT8E3nXmVZVbLVK4kG_bIBbuQHa0cwI9VAZIN0dm2d8Hd6YkCZK0H2y8Zp8N_771QHJunbIJ8vFr5onjx7m-heWEWNdsxKmQ5w16yTJ6wSuF1o9aNlF-A71Dz86bcV4ek" width="400" /></a></div>
<br />
<div style="text-align: center;">
Stick Wars: The first cocos2d-iphone game to reach #1 at the iPhone App Store</div>
<br />
그 후 많은 cocos2d-iphone 게임이 1위를 차지했습니다.<br />
그리고 대부분의 시간 동안 Top 10에는 적어도 하나의 cocos2d-iphone 게임이 있었습니다.<br />
저는 이것이 2009년부터 2011년 말까지의 사례라고 생각합니다.<br />
<br />
cocos2d-iphone은 게임은 뿐만 아니라 애니메이션 책, 사진 응용 프로그램 등을 만들 수 있었습니다.<br />
일부 cocos2d-iphone 게임과 응용 프로그램은 WWDC 2010에서 선보였습니다.<br />
Apple이 자랑스럽게 "Apple 라이브러리를 사용하여 제작한" 게임이라고 설명했으며, 실제로도 cocos2d-iphone으로 제작되었습니다. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/0LiIWU6XLeTLX9GpSVnfciX3tVvWv4G9PXpoHISh95vq5z8MQiCBlUNtlnqB-x0tUa0CDjuP1Xp7Nw5eoPz_sh7q8Xv7nR-18UUcSBJEbNUzMm3ONj1F07EpQtzpY9Tcja-hpCU" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="288" data-original-width="512" height="225" src="https://2.bp.blogspot.com/0LiIWU6XLeTLX9GpSVnfciX3tVvWv4G9PXpoHISh95vq5z8MQiCBlUNtlnqB-x0tUa0CDjuP1Xp7Nw5eoPz_sh7q8Xv7nR-18UUcSBJEbNUzMm3ONj1F07EpQtzpY9Tcja-hpCU" width="400" /></a></div>
<div style="text-align: center;">
WWDC 2010. Steve Jobs presenting Elements, a cocos2d-iphone application</div>
<br />
많은 <a href="https://web.archive.org/web/20111021045559/http://www.cocos2d-iphone.org/archives/1155">cocos2d-iphone forks/ports/bindings도 생성</a>되었습니다.<br />
* 적어도 2개의 자바로 포팅된 프로젝트: cocos2d-android and cocos2d-android-1<br />
* C++로 포팅된 프로젝트 : Cocos2d-x<br />
* 2개의 자바스크립트로 포팅된 프로젝트: Cocos2d-HTML5 and Cocos2d-JavaScript<br />
* C#으로 포팅된 프로젝트: CocosNet, Cocos2d-XNA, CocosSharp<br />
* Go로 포팅된 프로젝트: Gocos2d<br />
* Python로 바인딩, 포팅된 프로젝트<br />
* Ruby로 바인딩된 프로젝트: ShinyCocos and support for RubyMotion<br />
<br />
2011년 7월, cocos2d-iphone을 3년 이상 사용해본 것과 커뮤니티의 도움을 받아 cocos2d-iphone v1.0을 출시했습니다.<br />
통계 : ~140명의 컨트리뷰터, ~2600개의 커밋 및 63개의 내부 릴리즈.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/REVtNKHCueWY1eyvzBgQsAHTIV7LKnU2hBy2DEAWY0XVmAZgDv8NipIuYR2cmvBZRfrvUh14f3nFuQonQW8vbFhvyUk0M3JcIlh4WkUstj0-NxYKZM3dk9trZ180vVlX0bZ82MQ" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="512" data-original-width="512" height="320" src="https://3.bp.blogspot.com/REVtNKHCueWY1eyvzBgQsAHTIV7LKnU2hBy2DEAWY0XVmAZgDv8NipIuYR2cmvBZRfrvUh14f3nFuQonQW8vbFhvyUk0M3JcIlh4WkUstj0-NxYKZM3dk9trZ180vVlX0bZ82MQ" width="320" /></a></div>
<br />
<div style="text-align: center;">
cocos2d-iphone v1.0 was released in July 2011</div>
<br />
많은 사람들이 서로 돕고, 버그 보고서를 열며, Pull Request를 보내고, 기능을 제안하는 등 커뮤니티는 매우 건강했습니다.<br />
cocos2d-iphone을 둘러싼 생태계도 매우 건강했습니다. 많은 cocos2d-iphone 서적이 출판되었고,<br />
많은 편집자 / 도구 (상업용 및 무료 / 오픈 소스 모두)가 cocos2d-iphone을 지원했습니다.<br />
많은 회사가 cocos2d-iphone 개발자를 찾고 있었습니다.<br />
<br />
2011년 5월 저는 Zynga에 입사했습니다. Zynga의 일부 iOS 게임에는 cocos2d-iphone을 사용했습니다.<br />
그들을 Android로 이식하기 위해 AndEngine을 사용하여 일부를 다시 작성하고<br />
다른 것들은 AppPortable의 Objective-C/UIKit 스택을 사용하여 이식했습니다.<br />
<br />
<br />
2012년에 Android는 이미 강세였습니다. 저는 안드로이드를 기본적으로 지원하고 싶었습니다.<br />
(그리고 다른 플랫폼에서도), 3가지 옵션이 있었는데,<br />
1. cocos2d-iphone 개발을 중단하고 Cocos2d-x (the C++ fork) 개발.<br />
2. cocos2d-iphone을 계속 개발하고 Android 용 Cocos2d-iphone을 포팅할 수 있도록 타사 상용 Objective-C 스택 (StellaSDK, NoodleCake 또는 AppPortable 등)을 사용.<br />
3. cocos2d-iphone을 계속 개발하고 cocos2d-iphone을 Android에 포팅하는 오픈 소스 Objective-C 스택을 개발.<br />
<br />
저는 써드파티 상용 툴에 의존하기를 원하지 않았고, Objective-C 스택을 작성할 시간이 없었습니다.<br />
Cocos2d-x는 이미 인기가 있었습니다. 그래서 Cocos2d-x 팀을 돕기로 결정했습니다.<br />
우리는 Zynga에서 Cocos2d-x를 사용하기 시작했습니다. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/K05MOzKn8QE3Vn8s64X1p7CfrWuMfNaQyweNLpwMsa7E_J50l-MFEXYxEV2N0XcsCbFdMQkqCl4L6_PDJYc0NNptx3ojm9qkVpDaSfjAN5rfqQwdc5BNwSvlxMkmHtzXvmlDH1E" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="307" data-original-width="512" height="238" src="https://3.bp.blogspot.com/K05MOzKn8QE3Vn8s64X1p7CfrWuMfNaQyweNLpwMsa7E_J50l-MFEXYxEV2N0XcsCbFdMQkqCl4L6_PDJYc0NNptx3ojm9qkVpDaSfjAN5rfqQwdc5BNwSvlxMkmHtzXvmlDH1E" width="400" /></a></div>
<div style="text-align: center;">
2012, at Zynga. With Rolando Abarca and Zhe Wang discussing Cocos2d-x’s and cocos2d-iphone’s roadmaps.</div>
<br />
Zynga에서 Cocos2d-x 팀의 도움을 받아 우리는 매우 매력적인 툴링 개발했습니다.:<br />
* Cocos2d-x 및 cocos2d-iphone은 기능 호환이 가능합니다. API는 거의 동일했습니다 (물론 C++과 Objective-C 중 하나)<br />
* Viktor Lidholt가 만든 CocosBuilder에는 Scene 에디터, 키 프레임 애니메이션 에디터, JavaScript 스크립팅 등 많은 유용한 기능이 포함되어 있습니다.<br />
* CocosBuilder에서 내보낸 Scene은 cocos2d-iphone과 Cocos2d-x에서 모두 사용할 수 있습니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/TCOj1fzRAc9uQVCfFWksM3BFI2SImRIUutG0kJYhJwtZAURrYRsuI0mFdOw5xF3QfMEbCca7icesfykHTIXQ1_GMyuY4pw_Pl1r0JZYjC9skZQBBaBTa4Ss9f0ViTFeVU_gPpkA" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="315" data-original-width="512" height="245" src="https://3.bp.blogspot.com/TCOj1fzRAc9uQVCfFWksM3BFI2SImRIUutG0kJYhJwtZAURrYRsuI0mFdOw5xF3QfMEbCca7icesfykHTIXQ1_GMyuY4pw_Pl1r0JZYjC9skZQBBaBTa4Ss9f0ViTFeVU_gPpkA" width="400" /></a></div>
<div style="text-align: center;">
CocosBuilder editor</div>
<br />
유일한 단점은 Cocos2d-x와 cocos2d-iphone 간에 기능 호환을 유지하는 것이 비용이 많이 들었기 때문에<br />
이를 해결하기 위해 기능을 두 번 작성해야 한다는 것입니다.<br />
또한 CocosBuilder는 cocos2d-iphone을 기반으로 만들어졌기 때문에 Mac 용 (Windows 버전 없음)에서만 사용할 수 있었으며<br />
이것도 기능을 두 번 작성해야했습니다. Windows 지원은 많은 Cocos2d-x 사용자에게 중요했습니다.<br />
<br />
저는 2013년 6월까지 cocos2d-iphone을 계속 개발했고,<br />
그다음에 Lars Birkemose (2016년에 Andrei Volodin에게 다시 전달)에 그 성화를 전달했습니다.<br />
2013년 8월에 나는 Chukong에 입사했습니다.<br />
<br />
<h3>
<b>Cocos2d-x
</b></h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/M8T3KLjlbcbJEspL6Ye56OJiD07pAYjF-DwlVt16gYRjYxs5HhO37psec-PLSh-ewTa_PVuzNO0rVh-8Vi3oW7yMZPigAMzKBA4CIqm4nAvIMolVcUODqjnxmEpC8Rg4yaVOKv8" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="512" data-original-width="512" height="200" src="https://3.bp.blogspot.com/M8T3KLjlbcbJEspL6Ye56OJiD07pAYjF-DwlVt16gYRjYxs5HhO37psec-PLSh-ewTa_PVuzNO0rVh-8Vi3oW7yMZPigAMzKBA4CIqm4nAvIMolVcUODqjnxmEpC8Rg4yaVOKv8" width="200" /></a></div>
Note: Cocos2d-x와 Cocos Studio 뒤에 있는 Chukong은 베이징에 본사를 두고 있는 중국 회사입니다.<br />
Cocos Studio는 베이징에서 개발되었습니다.<br />
Cocos2d-x는 Xiamen (중국 남부)에서 개발 중입니다.<br />
우리는 모든 것을 다했기 때문에 캘리포니아 사무실에 합류했습니다.<br />
<br />
Cocos2d-x는 2010년 7월 Zhe Wang에 의해 시작되었습니다.<br />
이것은 cocos2d-iphone의 복제본이었지만 Objective-C 대신 C++로 코딩되었습니다.<br />
그의 목표는 cocos2d-iphone 게임을 uPhone (나중에 취소된 phone 프로젝트)으로 포팅하는 것을 용이하게 하는 SDK를 만드는것이 었습니다.<br />
이식을 용이하게 하기 위해 Cocos2d-x에는 cocos2d-iphone에서 발견된 모든 Objective-C 패턴이 포함되었습니다. 2012년쯤에 (또는 2011 년) Cocos2d-x팀이 Chukong에 합류했습니다.<br />
Chukong은 Cocos2d-x를 세계적 수준의 게임 엔진 / tooling으로 만드는 자원, 의지 및 위치를 확보했습니다.<br />
2013년 Cocos2d-x는 중국 시장 점유율의 약 70%~80%를 차지했습니다.<br />
<br />
Chukong에서 우리는 코드에서 Objective-C 패턴 제거, 최신 C++ API 사용, 렌더러 업데이트 (Nite), 3D 기능 추가 (Tony 및 Harrison) 등<br />
Cocos2d-x v3을 설계하고 프로그래머 가이드 문서 작성 (Jason)을 했습니다.<br />
<br />
그러나 가장 중요한 것은 에디터였습니다. 우리에게는 에디터가 필요했습니다. Chukong은 Cocos Studio에 많은 리소스를 투자했습니다.<br />
그것은 많은 특징을 가지고 있었지만 UX는 미국/서구 시장에 호소력이 없었으며 Windows에만 있었습니다.<br />
<br />
그래서 미국 지사에서 Justin, Nite, Kai는 Cocos2d-x 편집기를 처음부터 개발 시작하여 중국 및 미국/서양 시장을 목표로 했습니다.<br />
(CocosBuilder와 유사하지만 Cocos2d-x 및 Windows 및 Mac과 호환되는 Qt가 이 용도로 사용되었습니다.)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/DDR2MQcx7Q1NUbubS4IliNRXrXAImRmSjDAD-5en6vPfM9-2kzy8Jq86bSlg4_N6Dt7xAoJ8ngrN5pKF30t8-qC1kVO7rXPfiEF6RdNVpGVSQnmpF7Qyp9eOlA-2FrjaXC2keyU" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="384" data-original-width="512" height="300" src="https://3.bp.blogspot.com/DDR2MQcx7Q1NUbubS4IliNRXrXAImRmSjDAD-5en6vPfM9-2kzy8Jq86bSlg4_N6Dt7xAoJ8ngrN5pKF30t8-qC1kVO7rXPfiEF6RdNVpGVSQnmpF7Qyp9eOlA-2FrjaXC2keyU" width="400" /></a></div>
<div style="text-align: center;">
At Beijing, with Hao Wu, Shun Lin, Harrison, Zhe Wang, Nite Luo, Justin Graham.</div>
<br />
불행히도 새 에디터는 취소되었습니다. 우리가 Cocos Studio의 UX를 향상 시키려고 노력했지만, 미국/서구 시장을 유치하지 못했습니다. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/aTN3pClyIDTAaVbwomLmeQ5U96U0dIJfjIES8mywJBZGZLIRk-vFJq77u5EiHcxVGeAE7PtHhaFkrSvHY2Efe-Trp_9fuWxOloFaDZVd5pZ8AuqiErf9rRpUaVLqBnQCYZo8kL8" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="367" data-original-width="512" height="286" src="https://4.bp.blogspot.com/aTN3pClyIDTAaVbwomLmeQ5U96U0dIJfjIES8mywJBZGZLIRk-vFJq77u5EiHcxVGeAE7PtHhaFkrSvHY2Efe-Trp_9fuWxOloFaDZVd5pZ8AuqiErf9rRpUaVLqBnQCYZo8kL8" width="400" /></a></div>
<div style="text-align: center;">
Mac version of Cocos Studio with an improved UX</div>
<br />
Cocos2d-HTML5 v4, Cocos2d-x v4 렌더러 + HAL, Cocos2d-x 런처, Cocos IDE와 같은 다른 프로젝트도 취소되었습니다.<br />
Cocos Studio조차 취소되었습니다. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/jjFLcUgkM9VN8-_CsruQmdju4aBZ-HPDjYGCKQSodQa_XD1SsPJvx331-mBf-FrzAjLwOjGyMO1O3SmvI8T3xD49G1rIh1Cg0g8Nc0fp0heR2hr5TnEValfZiZe9gljxVR7igzU" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="384" data-original-width="512" height="300" src="https://2.bp.blogspot.com/jjFLcUgkM9VN8-_CsruQmdju4aBZ-HPDjYGCKQSodQa_XD1SsPJvx331-mBf-FrzAjLwOjGyMO1O3SmvI8T3xD49G1rIh1Cg0g8Nc0fp0heR2hr5TnEValfZiZe9gljxVR7igzU" width="400" /></a></div>
<div style="text-align: center;">
At Xiamen, with Zhe Wang, Ibon Tolosana and Kai Zhao. November 2014</div>
<br />
특히 프로젝트가 거의 완료되어가는 중에 프로젝트가 취소되면 실망할 수 있습니다. 그러나 우리의 주요 과제는 훌륭한 비즈니스 모델을 찾는 것이었습니다.<br />
우리는 다른 것을 시도했지만 좋은 것을 찾지 못했습니다.<br />
<br />
뒤늦은 시야에서, 이것들은 우리가 해야 한다고 생각한 것들입니다.<br />
* 하나의 에디터에서 작업하세요: Qt 에디터는 Cocos Studio를 대체해야합니다.<br />
* 데이터 내에서 SDKBOX 및 기타 서비스를 제공해야 합니다.<br />
* Focus : 캐주얼/미드 코어 기능 (VR 또는 기타 산만 기능 제외)에서만 동작합니다. 그 범주에서 가장 좋은 것이 되도록 노력해야 합니다.<br />
<br />
Cocos2d에서 9년을 일한 후 최근 사건이 발발하여 다른 일을 할 시간이 되었습니다.<br />
다음에 저는 무엇을 해야 할까요? 어떤 사람들은 미래가 IoT라고 말하고 또 다른 사람들은 기계 학습이라고 말하고 나머지는 VR/AR이라고 말합니다. 그들은 모두 잘못되었습니다. 미래는 Commodore 64입니다. See you soon.pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-16269664608926100762017-09-27T23:35:00.001+09:002017-09-27T23:35:33.049+09:00Cocos2d-x, Xcode 9에서 빌드시 에러이번에 Xcode가 버전 업데이트 되면서 Cocos2d-x 빌드할 때 에러가 발생합니다.<br />
에러의 내용은 다음과 같습니다.<br />
<h4>
<span style="background-color: white; color: #24292e; font-family: , , "segoe ui" , "helvetica" , "arial" , sans-serif , "apple color emoji" , "segoe ui emoji" , "segoe ui symbol"; font-size: 14px;">platform/CCFileUtils.cpp, </span><span style="background-color: white; color: #24292e; font-family: , , "segoe ui" , "helvetica" , "arial" , sans-serif , "apple color emoji" , "segoe ui emoji" , "segoe ui symbol"; font-size: 14px;">line 1429: </span><span style="background-color: white; color: #24292e; font-family: , , "segoe ui" , "helvetica" , "arial" , sans-serif , "apple color emoji" , "segoe ui emoji" , "segoe ui symbol"; font-size: 14px;">Call to unavailable function 'system': not available on iOS</span></h4>
이 에러를 처음 접하고나서 저게 무슨 에러인데? 하고 바로 검색해보았죠.
<br />
그럼 누군가가 먼저 이슈를 만들어 놓았는데 이 이슈입니다.<br />
GitHub Issue: <a href="https://github.com/cocos2d/cocos2d-x/issues/17907">https://github.com/cocos2d/cocos2d-x/issues/17907</a><br />
<br />
그리고 나서 금방 고쳐졌죠. 하지만 3.15.1 버전에는 포함되어 있지 않은 상태에서<br />
에러가 생기는 바람에 GitHub에 있는 PR을 보고 수정해야합니다.<br />
<br />
PR: <a href="https://github.com/cocos2d/cocos2d-x/pull/17921">https://github.com/cocos2d/cocos2d-x/pull/17921</a><br />
<br />
간단하게 CCFileUtils.cpp 파일만 수정해주면 됩니다. 약 30줄 정도 수정해주면 됩니다.<br />
<br />
파일보기: <a href="https://github.com/cocos2d/cocos2d-x/pull/17921/files">https://github.com/cocos2d/cocos2d-x/pull/17921/files</a><br />
수정된 부분을 잘 추가해주시면 빌드가 잘 되는 것을 볼 수 있습니다.<br />
<br />
3.16 버전에는 수정되서 업데이트될 예정인데요.<br />
3.16 버전은 9월 30일이라고 합니다. 이번 업데이트는 어떤 내용이 있을지 릴리즈 노트 나오기전에<br />
한번 훑어봐야겠습니다.<br />
<br />
그럼 이만 마치겠습니다.<br />
Thanks.pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-46367485940381953782017-09-23T22:46:00.000+09:002017-09-24T01:17:13.303+09:00Cocos2d-x의 개발방향, 현재 상태, 적합성 등에 대한 분석<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCnYxQsGgZRfO_NYtmnI3zUMPctUcBlTRifbN4BoxDzjZfelZXbrr_-OmyoqjhGHdyNRANiLR7l6EgcuF6-a0hgETB1WNkA9z0mntnoRGC43c0_6f0En9vV6eciWHl9185kvMTcBtHcWI/s1600/cocos2dx_landscape.png" imageanchor="1"><img border="0" height="168" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCnYxQsGgZRfO_NYtmnI3zUMPctUcBlTRifbN4BoxDzjZfelZXbrr_-OmyoqjhGHdyNRANiLR7l6EgcuF6-a0hgETB1WNkA9z0mntnoRGC43c0_6f0En9vV6eciWHl9185kvMTcBtHcWI/s640/cocos2dx_landscape.png" width="640" /></a><br />
<br />
제가 앱을 개발하는데에 사용하는 Cocos2d-x에 대해 그동안 생각해보지 못한게 있었고,<br />
그부분을 정리하고자 글을 적어봅니다.<br />
플랫폼, 엔진 등을 프로젝트 개발에 사용하기위해 고려되어야하는 부분이 몇 가지 있다고 생각합니다.<br />
<br />
- 참고할 자료가 많은가 (책, 커뮤니티)<br />
- 업데이트가 주기적으로 되는가 (살아있는 프로젝트인가)<br />
- 사용하고자 하는 플랫폼, 엔진에 대한 기본적인 이해 (적어도 도메인 지식에 대한 이해)<br />
- 만들고자하는 프로젝트에 적당한 엔진인가 (2D, 3D, 게임 종류 등등에 대한 고려)<br />
- 개발 방향, 로드맵은 어떻게되는가<br />
<br />
크게는 이렇게 보고 Cocos2d-x 는 어떻게 프로젝트를 진행하고 있는지, 내가 만드는 앱에 적합한지를<br />
확인해보고자 합니다.<br />
<br />
<h3>
참고할 자료가 많은가</h3>
프로젝트를 개발하면서 정보를 얻을 일이 많습니다. 예를 들면, 내가 개발한 코드에 문제가 생긴 상황에서 보통 구글에 검색을 하죠.<br />
하지만 검색해도 결과가 안나온다면? 혼자 삽질을 많이 하게 되겠죠.<br />
그래서 참고할 자료가 웹 상에 많은지, 커뮤니티가 있는지,<br />
커뮤니티가 있더라도 그 안에 정보 업데이트가 잘 되는지를 봐야합니다. (질문을 했는데 답이 없으면 커뮤니티가 있더라도 소용 없으니까요.)<br />
<br />
구글에서는 Cocos2d-x 로 검색하면 많은 결과를 얻을 수 있습니다.<br />
물론 좀 생소한 이슈를 검색하면 중국어 OR 일본어 자료를 볼 수 있습니다. 이 부분은 번역기로 극복..!<br />
<br />
Cocos2d-x 는 커뮤니티가 있습니다. (다행히)<br />
<a href="http://discuss.cocos2d-x.org/">http://discuss.cocos2d-x.org/</a> 이 커뮤니티는 영어지만.. 번역기를 잘 돌려서 질문만 한다면 어느정도<br />
원하는 답변을 얻을 수 있습니다. (영어 잘 하시는분은 그냥 질문을..!)<br />
어느정도 답변을 해주는 편이기도 해서 일단은 자료를 얻을 수 있어서 다행입니다.<br />
<br />
우리나라 커뮤니티는 네이버 카페 <b>Cocos2d-x 사용자모임</b>(<a href="http://cafe.naver.com/cocos2dxusers">http://cafe.naver.com/cocos2dxusers</a>)<br />
최근에 글이 올라오지 않는 것으로 보아 우리나라에서는 Cocos2d-x 사용자는 점점 줄어드는 것으로<br />
보입니다. (추측이지만 Unity로 넘어가는 것으로 보입니다.)<br />
<br />
그 외에 스택오버플로우에서 많은 문제를 확인할 수 있으며<br />
엔진의 버그도 Cocos2d-x GitHub 이슈나 PR에서 확인할 수 있어서<br />
자료(정보)에 대한 걱정은 덜어도 괜찮을 것 같네요.<br />
<br />
Youtube에는 Sonar Systems 강좌도 있습니다.<br />
<a href="https://www.youtube.com/playlist?list=PLRtjMdoYXLf4od_bOKN3WjAPr7snPXzoe">https://www.youtube.com/playlist?list=PLRtjMdoYXLf4od_bOKN3WjAPr7snPXzoe</a><br />
<br />
<strike>문제는 영어...</strike><br />
<br />
아, 추가적으로 책도 몇 권 있습니다.<br />
- 시작하세요! Cocos2d-x 프로그래밍<br />
- Cocos2d-x 3 모바일 게임 프로그래밍<br />
- 등등..<br />
최신 업데이트 사항은 포함되어 있지 않지만 한글 자료도 많습니다.<br />
<br />
<h3>
업데이트가 주기적으로 되는가</h3>
Cocos2d-x 는 업데이트가 보통 3-4개월 또는 급한 업데이트는 버그 픽스 버전업으로 올라옵니다.<br />
최근 버전은 3.15.1 버전으로 3.15 버전 업데이트 후 버그가 있어 업데이트한 버전 입니다.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsAdJovN792i7GGRwLfFQ27PFwDN3NYxk4JCqTUJyidNa-a-zxZyV2P1iANokKfnpXyp84masrVnlb_OFejxAIvz2ecJ3Kd9e462JzVgVVhK6c1kAAplODzxs_lZ95GqT3qaaw26d_WzQ/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2017-09-23+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+8.54.53.png" imageanchor="1"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsAdJovN792i7GGRwLfFQ27PFwDN3NYxk4JCqTUJyidNa-a-zxZyV2P1iANokKfnpXyp84masrVnlb_OFejxAIvz2ecJ3Kd9e462JzVgVVhK6c1kAAplODzxs_lZ95GqT3qaaw26d_WzQ/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2017-09-23+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+8.54.53.png" width="379" /></a><br />
<br />
릴리즈 업데이트 말고 다른 지표들을 보겠습니다.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn7Pq9pU6FSZb8bAKw_LSn5L2SWUyIHNaD9yor2q6MIYwxWMxtSNINa4BVax38Yyg8HUlW5o3-8zC6-5-ZTQnVV_Vek9JZSHwRdIb3Tbsr-BelZhAikmx31fdvzP6vcONgIz8T6br5mho/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2017-09-23+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+8.58.59.png" imageanchor="1"><img border="0" height="420" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn7Pq9pU6FSZb8bAKw_LSn5L2SWUyIHNaD9yor2q6MIYwxWMxtSNINa4BVax38Yyg8HUlW5o3-8zC6-5-ZTQnVV_Vek9JZSHwRdIb3Tbsr-BelZhAikmx31fdvzP6vcONgIz8T6br5mho/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2017-09-23+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+8.58.59.png" width="640" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCnIZUiiIHLBCiEfcLSIaSI_U5vLNPoYNHZeCC1EZ-JEjUwZ2MO87xKv0-0hNkbHiLra6vehf-XvHFL2XisfocVlJ07PzNmlmmyK1FTcADeSs8YvonKY8lcL8lHCyMTk8qb1gzCFcFQ2c/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2017-09-23+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+8.57.05.png" imageanchor="1"><img border="0" height="308" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCnIZUiiIHLBCiEfcLSIaSI_U5vLNPoYNHZeCC1EZ-JEjUwZ2MO87xKv0-0hNkbHiLra6vehf-XvHFL2XisfocVlJ07PzNmlmmyK1FTcADeSs8YvonKY8lcL8lHCyMTk8qb1gzCFcFQ2c/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2017-09-23+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+8.57.05.png" width="640" /></a><br />
<br />
'<u>코드의 변화도</u>', '<u>한 달동안 머지된 PR</u>', '<u>이슈들이 어떻게 처리되고 있는가</u>'에 대한 이미지입니다.<br />
중간에 코드 변화도가 크게 올라가 있는데 이 부분은 v2 -> v3 으로 메이저 버전업이 있었을 때<br />
코드의 변화가 컸기 때문입니다.<br />
2016년 이후로는 큰 변화 없이 개발되고 있습니다. 주로 버그 수정 및 로드맵에 따라 개발되고 있는데,<br />
밑에서 Cocos2d-x는 어떤 로드맵으로 개발되고 있는지 더 살펴보겠습니다.<br />
<strike>(사실 어떤 로드맵으로 개발되고 있는지 잘 모르겠어요...)</strike><br />
<h3>
사용하고자 하는 플랫폼, 엔진에 대한 기본적인 이해</h3>
기본적으로 Cocos2d-x로 C++, Lua, Javascript 3가지 언어로 게임을 개발할 수 있습니다.<br />
처음에는 C++, Lua로 개발할 수 있었는데, 웹으로도 만들 수 있게 Javascript도 지원하기 시작한지<br />
1년 정도된 것 같습니다.<br />
Cocos2d-x 는 맨 처음 Cocos2d로 시작된 프로젝트인데 크로스플랫폼 엔진 프로젝트로 전환,<br />
지금까지 진행되어 왔습니다.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHRl-XLBeJk734rfA-xidzKMHSknvntUu133jdPhHzPdVnzrSQgyYq2pIzDqMwsgNXn8hYYHbt5U_Nv10aXwGRZuGso_NskJ1aEBvkrp8I749J5S9rWu4JpfIqGzEtjLXNFihW4Wwl700/s1600/header-site2.png" imageanchor="1"><img border="0" height="100" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHRl-XLBeJk734rfA-xidzKMHSknvntUu133jdPhHzPdVnzrSQgyYq2pIzDqMwsgNXn8hYYHbt5U_Nv10aXwGRZuGso_NskJ1aEBvkrp8I749J5S9rWu4JpfIqGzEtjLXNFihW4Wwl700/s320/header-site2.png" width="320" /></a><br />
[Cocos2D - Objective C로 개발하던 프로젝트]<br />
<br />
글쓰면서 찾게된 python으로 개발할 수 있는 Cocos2d 도 있네요.<br />
<a href="http://python.cocos2d.org/index.html">http://python.cocos2d.org/index.html</a><br />
<br />
이야기를 하다보니 Cocos2d 의 히스토리를 살짝 훑어보고 가도 될 것 같지만<br />
일단 본론으로 돌아가겠습니다. (나중에 한번 정리해서 다른 포스트로..!)<br />
<br />
<a href="https://en.wikipedia.org/wiki/Cocos2d">https://en.wikipedia.org/wiki/Cocos2d</a> 위키를 보면 세 종류의 프로젝트가 있는데<br />
제가 사용하고 있는 것은 Cocos2d-x, 크로스 플랫폼을 위한 프로젝트입니다.<br />
<br />
Cocos2d-x 엔진에 대해 알 수 있는 문서들이 많이 있어서 정리해보겠습니다.<br />
- 기본 개념 문서: <a href="http://cocos2d-x.org/docs/programmers-guide/basic_concepts/">http://cocos2d-x.org/docs/programmers-guide/basic_concepts/</a><br />
- API 문서: <a href="http://cocos2d-x.org/docs/api-ref/index.html">http://cocos2d-x.org/docs/api-ref/index.html</a><br />
- PDF 문서: <a href="http://www.cocos2d-x.org/docs/ProgrammersGuide.pdf">http://www.cocos2d-x.org/docs/ProgrammersGuide.pdf</a><br />
<br />
그 외에 알 수 있는 내용은 많지만 전체적으로는 C++ 개념이 크게 작용한 엔진입니다.<br />
(+Objective C 개념)<br />
<h3>
만들고자하는 프로젝트에 적당한 엔진인가</h3>
저는 주로 Cocos2d-x를 2D 게임 만드는데에 사용하고 있습니다.<br />
3D 게임에는 그다지 맞지 않는 느낌이 들지만 기능으로는 지원하고 있습니다.<br />
(앞으로도 계속 개발해서 지원하려는 움직임이 보이기도 합니다.)<br />
<br />
Sprite라는 개념을 사용하고 2D 게임으로 가볍게 개발할 수 있는 엔진으로<br />
고성능의 게임도 개발할 수 있겠지만 개인적으로는 2D, 2.5D 수준으로 끝낼 수 있는 프로젝트가 적당하다고 생각합니다.<br />
<br />
3D는 언리얼이나 유니티가 다 잡고 있기에 그렇기도 하구요.<br />
언리얼이나 유니티보다 기본적으로 가볍고 쉽게 만들 수 있다는게 비교적 장점인 것 같습니다.<br />
(C++이 쉽지 않은게 단점)<br />
<br />
<h3>
개발 방향, 로드맵은 어떻게되는가</h3>
추가적으로 Cocos2d-x의 개발 로드맵은 어떤지 한번 확인해봤습니다.<br />
<a href="https://trello.com/b/Np6obnuE/cocos2d-x-roadmap">https://trello.com/b/Np6obnuE/cocos2d-x-roadmap</a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUQErbrYWAzr3ZahPM-Z6oeFDen9ffso27vCP4XJiLBmaRabL6qVeXhdmNtF6mgNzPR2F_7MQB9PEhCqdDfyorHuNax0buNX7U3YBxrvo8fp9GfJeZBSoR_nunC8snucIn71LPCAeEY-4/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2017-09-23+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+10.26.00.png" imageanchor="1"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUQErbrYWAzr3ZahPM-Z6oeFDen9ffso27vCP4XJiLBmaRabL6qVeXhdmNtF6mgNzPR2F_7MQB9PEhCqdDfyorHuNax0buNX7U3YBxrvo8fp9GfJeZBSoR_nunC8snucIn71LPCAeEY-4/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2017-09-23+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+10.26.00.png" width="640" /></a><br />
<br />
최종 수정일이... 2017년 2월 15일이네요.<br />
업데이트가 되고 있지 않습니다. (지금 개발 버전은 3.16 버전인데 그에 대한 내용도 없네요)<br />
<br />
최근에는 Cocos Creator를 밀고 있는 것 같습니다.<br />
유니티처럼 에디터에서 개발할 수 있게 툴을 만들고 있는데, C++은 지원하지 않고<br />
Javascript만 지원하고 있습니다. (CoffeeScript도...)<br />
<br />
음... 다른 프로젝트는 로드맵이 있는지부터 확인을 해봐야겠습니다.<br />
유니티 프로젝트는 어떤지 한번 보겠습니다.<br />
<a href="https://unity3d.com/kr/unity/roadmap">https://unity3d.com/kr/unity/roadmap</a><br />
<br />
유니티는 각 기능(이슈) 별로 리스트를 만들고 관리를 하고 있네요.<br />
2017 버전이 나오면서 어떤게 업데이트가 되었는지, 앞으로 어떤 업데이트가 있는지는<br />
찾아보고 있지만 찾기 힘드네요.<br />
<br />
음... 일단은 비교는 했습니다만 Cocos2d-x 로드맵이 관리가 안되고 있다가 결론이네요.<br />
현재는 잘 사용하고 있지만 Cocos2d 그룹에서 어떻게 개발이 진행되고 있는지,<br />
로드맵은 어떤지에 대해 이야기해봐야겠습니다.<br />
(현재 상태가 나쁘지는 않지만 어떤 방향으로 개발하고 있는지 잘 모르겠네요.)<br />
<br />
이상 개인적인 분석글이었습니다.<br />
긴 글 읽어주셔서 고맙습니다 :)<br />
<br />
PS. 틀린부분이 있다면 가감없이 이야기해주세요. 수정하겠습니다.<br />
<br />
<br />pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-29699397288396966862017-07-16T21:08:00.000+09:002017-07-16T21:27:10.672+09:00책 리뷰, 핵심 C++ 표준 라이브러리<br />
<div style="clear: left; text-align: left;">
<div style="float: left; margin: 0 15px 5px 0;">
<a href="http://www.yes24.com/24/Goods/41852961" style="border: solid 1px #ccc; display: inline-block; overflow: hidden;" target="_blank"><img alt="핵심 C++ 표준 라이브러리" border="0" src="http://image.yes24.com/goods/41852961/M" style="margin: -1px; vertical-align: top;" /></a></div>
<div>
<div style="color: #333333; font-size: 14px; font-weight: bold; line-height: 1.2em;">
핵심 C++ 표준 라이브러리</div>
<div style="color: #666666; line-height: 1.2em; margin-top: 5px;">
<a href="http://www.yes24.com//SearchCorner/Result?domain=ALL&author_yn=Y&query=%b6%f3%c0%cc%b3%ca+%b1%d7%b8%b2" target="_blank">라이너 그림</a> 저 / <a href="http://www.yes24.com//SearchCorner/Result?domain=ALL&author_yn=Y&query=%b7%f9%b1%a4" target="_blank">류광</a> 역</div>
<div style="color: #999999; line-height: 1.5em; margin-top: 14px; text-align: justify;">
“전문 C++ 프로그래머라면 알아야 할 C++ 표준 라이브러리의 핵심을 담은 책”<br />
<br />
『핵심 C++ 표준 라이브러리』는 독자가 C++ 표준 라이브러리의 주요 구성요소를 간결하게 훑어보고 참조할 수 있는 요약 참고서이다. C++ 자체에 익숙한 독자라면 이 책의 장점을 최대로 누릴 수 있을 것이다. C++에 익숙하지 않은 독자라면 먼저 C++ 언어의 핵심 내용에 관한 책을 충분히 익힌 후, 이 책을 통해서 한층 더 높은 수준으로 발돋움할 수 있을 것이다. 이 책은 독자의 학습 편의를 위해 이론과 실제를 연결해 주는 짧...</div>
</div>
</div>
<br />
<br />
평소에 C++에 관심도 많고 C++ 이용한 프로젝트들도 많이해서 살까 싶었던 책이었습니다.<br />
최근에 리뷰어 이벤트를 하길래 신청했는데 당첨되어서 즐겁게 읽고 있지요 ㅎㅎ<br />
(전에 샀던 책 중에 Effective Modern C++ 이라는 책이 있는데 그 책도 류광님이 번역한 책이더군요.)<br />
<br />
이 책에서 다루는 내용은 <b>C++ 표준 라이브러리에는 무엇이 있는가 </b>입니다.<br />
C++ 11, C++ 14 에서 표준으로 사용되는 라이브러리를 다루고 있는데<br />
책을 읽으면서 저는 "아, 내가 학교에서 배우고 지금 사용하고 있는 스타일을 보면 C++11 보다는 낮은 스타일을 사용하고 있구나"하고 느꼈습니다.<br />
<br />
책의 내용을 나눠서 보자면,<br />
1. C++11, C++14 표준 라이브러리 소개 및 팁.<br />
2. C++17 표준 라이브러리 소개.<br />
<br />
<b>표준 라이브러리 소개 및 팁에서는</b><br />
- 각 기능의 사용법.<br />
- 이런 기능을 사용할 때의 주의점과 팁.<br />
- 그리고 성능.<br />
<br />
C++17 표준 라이브러리 소개는 부록에 있는데,<br />
이 내용은 원서에는 없는 내용이다. 번역서에만 있는 내용이라고 하네요.<br />
C++17은 현재 draft 상태지만 올해 3월에 동결되었다고 하며 옮긴이의 정리글입니다.<br />
주로 소개하고 있는 내용은 아래와 같습니다.<br />
<br />
<ul>
<li>문자열에 대한 비소유 참조, std::string_view</li>
<li>없을 수도 있는 값을 나타내는 std::optional</li>
<li>아무 형식이나 담을 수 있는 std::any</li>
<li>형식에 안전한 공용체, std::variant</li>
<li>파일 시스템 라이브러리, <filesystem></filesystem></li>
<li>알고리즘의 병렬화</li>
<li>새로 추가된 알고리즘, for_each_n, sample, reduce, transform_reduce, ...</li>
<li>기타 변경 사항</li>
</ul>
<br />
책을 다보고 내용을 다 머릿속에 넣을 수는 없었지만 책장에 두고 개발하면서 꺼내볼만한 책입니다.<br />
주로 사용하는 vector나 string, list, map 말고 다른 기능들을 알 수 있어서 좋았습니다.<br />
중간중간 사용해볼만한 라이브러리를 기억해두고 나중에 쓰기위해 포스트잇을 붙여뒀는데<br />
이렇게 해두면 나중에 잘 찾아볼수 있겠죠?!<br />
<br />
C++ 표준 라이브러리는 뭐가 있는지, 어떻게 사용해야할지 모르겠다면 한번 살펴보면 좋을 책입니다!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyETAMX_iOTY0-tO2cf9Mv6j3V1miaImQVp5N3OPSBrpoWrZdbN8a5PukdraGIEgWz78GFw2Iba3xSkAv5c7Jj2fVEK4wh4cstnD_C5oPj0jNccOsWELm4tfbhBVsRt68yudtG36bEUHw/s1600/19667546_1564103160306928_2600740262455701564_o.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1200" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyETAMX_iOTY0-tO2cf9Mv6j3V1miaImQVp5N3OPSBrpoWrZdbN8a5PukdraGIEgWz78GFw2Iba3xSkAv5c7Jj2fVEK4wh4cstnD_C5oPj0jNccOsWELm4tfbhBVsRt68yudtG36bEUHw/s320/19667546_1564103160306928_2600740262455701564_o.jpg" width="240" /></a></div>
<br />pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-78670196056480345922017-07-02T23:58:00.000+09:002017-07-02T23:58:14.645+09:00책 리뷰, 글로벌 소프트웨어를 꿈꾸다<br />
<div style="clear: left; text-align: left;">
<div style="float: left; margin: 0 15px 5px 0;">
<a href="http://www.yes24.com/24/Goods/4224880" style="border: solid 1px #ccc; display: inline-block; overflow: hidden;" target="_blank"><img alt="글로벌 소프트웨어를 꿈꾸다" border="0" src="http://image.yes24.com/goods/4224880/M" style="margin: -1px; vertical-align: top;" /></a></div>
<div>
<div style="color: #333333; font-size: 14px; font-weight: bold; line-height: 1.2em;">
글로벌 소프트웨어를 꿈꾸다</div>
<div style="color: #666666; line-height: 1.2em; margin-top: 5px;">
<a href="http://www.yes24.com//SearchCorner/Result?domain=ALL&author_yn=Y&query=%b1%e8%c0%cd%c8%af" target="_blank">김익환</a> 저</div>
<div style="color: #999999; line-height: 1.5em; margin-top: 14px; text-align: justify;">
이 책은 실리콘밸리의 소프트웨어 회사와 국내 소프트웨어 회사의 차이점이 무엇인지 살펴보고, 그 차이점을 일으키는 것이 무엇인가에 대하여 이야기 하고 있다. 저자는 그것이 지식과 기술보다는 바로 '개발문화, 기업문화'에 있다고 말한다. 이 책에서는 세계 수준에 근접한 기술과 기법은 그에 걸맞은 균형 잡힌 사고와 문화 수준이 어우러질 때 극대화될 수 있다는 것을 극명하게 보여주고 있다. 따라서 이 책에서는 우리나라의 소프트웨어 회사가 어떻게 소프트웨어 회사로 성장할 수 있을 것인지 그 필요한 사항들을 세심히 짚어준다. 이 책은 특히...</div>
</div>
</div>
<br />
<br />
"글로벌 소프트웨어를 말하다. 지혜" 편과 시리즈는 아니지만 그전에 나온 책입니다.<br />
소프트웨어 회사에서 개발문화, 기업문화가 중요하다는 이야기, 개발자들도 어떤 방식으로 일을 해야하는가에 대해 접근합니다. 개발문화는 어떻게 생각하고 만들어가야하는가에 대한 생각을 정리할때 좋은 책입니다.<br />
<br />
개인적인 감상은 조금 답답한 책이었습니다.<br />
그 답답함의 이유는 책이 답답하다는 것이 아닌 상황을 바꾸기 힘든 요소들을 어떻게 고쳐나갈 것인가,<br />
어떻게 좋은 개발문화, 기업문화를 만들 것 인가에 대한 답답함이었습니다.<br />
정론을 말해주고 있지만 그 정론에 도달하기위해서는 많은 노력이 필요하고 끊임없이 닦아내야 할 것을 알기 때문일지도 모르겠습니다.<br />
<br />
두고두고 보면서 개발문화의 방향을 생각해볼 수 있는 책입니다.pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-43232364794854854662017-07-01T23:02:00.004+09:002017-07-01T23:02:34.093+09:00책 리뷰, 글로벌 소프트웨어를 말하다.<div style="clear: left; text-align: left;">
<div style="float: left; margin: 0 15px 5px 0;">
<a href="http://www.yes24.com/24/Goods/13230097" style="border: solid 1px #ccc; display: inline-block; overflow: hidden;" target="_blank"><img alt="글로벌 소프트웨어를 말하다, 지혜" border="0" src="http://image.yes24.com/goods/13230097/M" style="margin: -1px; vertical-align: top;" /></a></div>
<div>
<div style="color: #333333; font-size: 14px; font-weight: bold; line-height: 1.2em;">
글로벌 소프트웨어를 말하다, 지혜</div>
<div style="color: #666666; line-height: 1.2em; margin-top: 5px;">
<a href="http://www.yes24.com//SearchCorner/Result?domain=ALL&author_yn=Y&query=%b1%e8%c0%cd%c8%af" target="_blank">김익환</a> 저</div>
<div style="color: #999999; line-height: 1.5em; margin-top: 14px; text-align: justify;">
기후와 토양에 따라 귤이 되기도 하고, 탱자가 되기도 하듯이 지혜에 따라 글로벌 소프트웨어가 되기도 하고, 국내 소프트웨어로 머물기도 한다. 소프트웨어에 대한 근본적인 이해, 통찰력, 그것이 바로 지혜다. 국내를 넘어선, 글로벌 소프트웨어를 향한 지혜의 세계로 여러분을 안내한다.</div>
</div>
</div>
<br />
<br />
<br />
<br />
<br />
<b>주 내용</b><br />
이 책은 제목에서 말하듯이 글로벌 소프트웨어를 만들고자 한다면 어떤 생각을 가지고<br />
어떻게 개발해나가야 하는가에 대해 이야기한다.<br />
우리나라에서 개발환경과 실리콘밸리에서의 개발환경의 차이점을 이야기하면서<br />
우리나라에서 개발하기 힘든점 등을 이야기하고 이를 극복하기위해서 이렇게 해야한다 라는<br />
방향성을 말하고 있다.<br />
<br />
개인적으로는 이 책에서 하는 말이 다 맞는 말이라는 걸 알면서도 고치기 힘들어서 다시 그 길을 걸어가는게 어쩔 수 없다는 생각을 했다.<br />
예를 들면 작은 소프트웨어들을 만드는 작은 회사에서 제품상세문서, 이슈 트래킹, 코드 리뷰 등을 다 할 수 없는 것 같지만 이 부분도 필자는 알고 있는 것 같다.<br />
(하지만 이 문제는 글로벌 소프트웨어를 만들고 싶다면 꼭 해야한다는 점을 공감한다.)<br />
<br />
개발자가 어떻게 생각하고 개발해야하는가 할 때 읽어보면 좋은 책이다.<br />
개발 프로세스를 어떻게 잡아야하는지에 대한 자세한 내용은 없지만 어떤 방향으로,<br />
어떻게 생각해서 개발해야한다는 알 수 있는 책이다.<br />
<br />pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-85116674438295908042017-06-20T23:47:00.002+09:002017-06-20T23:47:35.798+09:00개인적인 Gradle 공부<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggrD2_SGlquH8rYzeF47tNqv_gUFO1SvmqutRi0d-mv7AyVsycbo0MGzoSUiPjvzU8ok3jLIHV8etQJu4WWV4IfDbb2FfqMBvKqXJWWZbSlwDsStBUC9UgkItPiKWFXxsYNmEZoJ0W3iU/s1600/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2017-06-20+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+10.50.05.png" imageanchor="1"><img border="0" height="154" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggrD2_SGlquH8rYzeF47tNqv_gUFO1SvmqutRi0d-mv7AyVsycbo0MGzoSUiPjvzU8ok3jLIHV8etQJu4WWV4IfDbb2FfqMBvKqXJWWZbSlwDsStBUC9UgkItPiKWFXxsYNmEZoJ0W3iU/s640/%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA+2017-06-20+%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE+10.50.05.png" width="640" /></a><br />
요즘 Gradle을 많이 보고 다룰 일이 생겨서 개인적으로 공부해보기로 했습니다.<br />
<br />
Gradle, 그래들이라고 불리는 이건 뭘까요?<br />
위키에는 뭐라고 써있는지 보겠습니다.<br />
<blockquote class="tr_bq">
<span style="background-color: white; color: #222222; font-family: sans-serif; font-size: 14px;">Gradle은 Groovy를 이용한 빌드 시스템이다. Groovy와 유사한 도메인 언어를 채용하였으며, 현재 안드로이드 앱을 만드는데 필요한 안드로이드 스튜디오의 공식 빌드 시스템이기도 하다. Java, C/C++, Python 등과 같은 여러 가지 언어를 지원한다.</span></blockquote>
<span id="goog_476642833"></span><a href="https://www.blogger.com/"></a><span id="goog_476642834"></span>한국 위키는 설명이 좀 부실하네요. 영문 위키가 더 자세히 잘 설명되어있습니다.<br />
<a href="https://en.wikipedia.org/wiki/Gradle">https://en.wikipedia.org/wiki/Gradle</a><br />
<br />
그래들이 그루비를 이용한 빌드 시스템이라고 하는데 그럼 그루비는?<br />
<a href="https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%A3%A8%EB%B9%84">https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%A3%A8%EB%B9%84</a><br />
<br />
설명이 꽤나 길군요. 요약해보자면,<br />
<blockquote class="tr_bq">
자바에 파이썬, 루비, 스몰토크 등의 특징을 더한 </blockquote>
<blockquote class="tr_bq">
동적 객체 지향 프로그래밍 언어</blockquote>
<br />
그래들은 이러한 특징을 가진 그루비를 기반으로 하는 언어를 사용한다고 합니다.<br />
그리고 자바뿐만 아니라 다른 언어를 빌드하는데에도 많이 사용된다고 합니다만,<br />
저는 안드로이드 빌드 때문에 Gradle을 공부하고 싶기때문에<br />
안드로이드 빌드를 중심으로 보겠습니다.<br />
<br />
제가 참고한 곳은 안드로이드 개발자 홈페이지 입니다.<br />
<a href="https://developer.android.com/studio/build/index.html#detailed-build">https://developer.android.com/studio/build/index.html#detailed-build</a><br />
<br />
빌드의 일반적인 흐름은 다음과 같습니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://developer.android.com/images/tools/studio/build-process_2x.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="800" data-original-width="712" height="320" src="https://developer.android.com/images/tools/studio/build-process_2x.png" width="284" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
그래들은 이런 빌드 과정을 설정하고 자동화할 수 있도록 해줍니다.<br />
종속성을 어떻게 관리할 것인지, 빌드를 하고 나서 어떻게 처리를 할 것인지,<br />
배포 빌드, 테스트 빌드 등 설정을 할 수가 있습니다.<br />
<br />
빌드 구성 파일의 구조는 아래와 같습니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://developer.android.com/images/tools/studio/project-structure_2x.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="800" data-original-width="584" height="320" src="https://developer.android.com/images/tools/studio/project-structure_2x.png" width="233" /></a></div>
<br />
제일 위에 있는 build.gradle은 프로젝트의 모든 모듈의 빌드 세팅을 정의합니다.<br />
<br />
<pre class="prettyprint" style="-webkit-font-smoothing: subpixel-antialiased; background: rgb(247, 247, 247); border: 1px solid rgb(221, 221, 221); color: #006600; font-family: Consolas, "Liberation Mono", Menlo, Monaco, Courier, monospace; font-size: 13px; font-stretch: normal; line-height: 18px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="com">/**
* 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.
*/</span><span class="pln" style="color: black;">
buildscript </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="com">/**
* 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.
*/</span><span class="pln" style="color: black;">
repositories </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
jcenter</span><span class="pun" style="color: #666600;">()</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="com">/**
* 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.
*/</span><span class="pln" style="color: black;">
dependencies </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
classpath </span><span class="str" style="color: #880000;">'com.android.tools.build:gradle:2.3.2'</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="com">/**
* 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.
*/</span><span class="pln" style="color: black;">
allprojects </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
repositories </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
jcenter</span><span class="pun" style="color: #666600;">()</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
<div>
최상위 build.gradle은 프로젝트의 모든 모듈에 공통되는 gradle 저장소와 종속성을 정의하기 위해 buildscript {} 블록을 사용합니다.<br />
<br />
모듈 레벨 빌드파일도 한번 보겠습니다. 보통의 안드로이드 앱 프로젝트라면,<br />
project/app/build.gradle 파일을 말합니다.<br />
<br />
<pre class="prettyprint" style="-webkit-font-smoothing: subpixel-antialiased; background: rgb(247, 247, 247); border: 1px solid rgb(221, 221, 221); color: #006600; font-family: Consolas, "Liberation Mono", Menlo, Monaco, Courier, monospace; font-size: 13px; font-stretch: normal; line-height: 18px; margin-bottom: 1em; overflow: auto; padding: 1em;"><span class="com">/**
* 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.
*/</span><span class="pln" style="color: black;">
apply plugin</span><span class="pun" style="color: #666600;">:</span><span class="pln" style="color: black;"> </span><span class="str" style="color: #880000;">'com.android.application'</span><span class="pln" style="color: black;">
</span><span class="com">/**
* The android {} block is where you configure all your Android-specific
* build options.
*/</span><span class="pln" style="color: black;">
android </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="com">/**
* 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.
*/</span><span class="pln" style="color: black;">
compileSdkVersion </span><span class="lit" style="color: #006666;">25</span><span class="pln" style="color: black;">
buildToolsVersion </span><span class="str" style="color: #880000;">"25.0.3"</span><span class="pln" style="color: black;">
</span><span class="com">/**
* 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.
*/</span><span class="pln" style="color: black;">
defaultConfig </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="com">/**
* 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.
*/</span><span class="pln" style="color: black;">
applicationId </span><span class="str" style="color: #880000;">'com.example.myapp'</span><span class="pln" style="color: black;">
</span><span class="com">// Defines the minimum API level required to run the app.</span><span class="pln" style="color: black;">
minSdkVersion </span><span class="lit" style="color: #006666;">15</span><span class="pln" style="color: black;">
</span><span class="com">// Specifies the API level used to test the app.</span><span class="pln" style="color: black;">
targetSdkVersion </span><span class="lit" style="color: #006666;">25</span><span class="pln" style="color: black;">
</span><span class="com">// Defines the version number of your app.</span><span class="pln" style="color: black;">
versionCode </span><span class="lit" style="color: #006666;">1</span><span class="pln" style="color: black;">
</span><span class="com">// Defines a user-friendly version name for your app.</span><span class="pln" style="color: black;">
versionName </span><span class="str" style="color: #880000;">"1.0"</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="com">/**
* 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.
*/</span><span class="pln" style="color: black;">
buildTypes </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="com">/**
* By default, Android Studio configures the release build type to enable code
* shrinking, using minifyEnabled, and specifies the Proguard settings file.
*/</span><span class="pln" style="color: black;">
release </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
minifyEnabled </span><span class="kwd" style="color: #000088;">true</span><span class="pln" style="color: black;"> </span><span class="com">// Enables code shrinking for the release build type.</span><span class="pln" style="color: black;">
proguardFiles getDefaultProguardFile</span><span class="pun" style="color: #666600;">(</span><span class="str" style="color: #880000;">'proguard-android.txt'</span><span class="pun" style="color: #666600;">),</span><span class="pln" style="color: black;"> </span><span class="str" style="color: #880000;">'proguard-rules.pro'</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="com">/**
* 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.
*/</span><span class="pln" style="color: black;">
productFlavors </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
free </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
applicationId </span><span class="str" style="color: #880000;">'com.example.myapp.free'</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
paid </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
applicationId </span><span class="str" style="color: #880000;">'com.example.myapp.paid'</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="com">/**
* 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.
*/</span><span class="pln" style="color: black;">
splits </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="com">// Screen density split settings</span><span class="pln" style="color: black;">
density </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
</span><span class="com">// Enable or disable the density split mechanism</span><span class="pln" style="color: black;">
enable </span><span class="kwd" style="color: #000088;">false</span><span class="pln" style="color: black;">
</span><span class="com">// Exclude these densities from splits</span><span class="pln" style="color: black;">
exclude </span><span class="str" style="color: #880000;">"ldpi"</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> </span><span class="str" style="color: #880000;">"tvdpi"</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> </span><span class="str" style="color: #880000;">"xxxhdpi"</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> </span><span class="str" style="color: #880000;">"400dpi"</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> </span><span class="str" style="color: #880000;">"560dpi"</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span><span class="pln" style="color: black;">
</span><span class="com">/**
* The dependencies {} block in the module-level build configuration file
* only specifies dependencies required to build the module itself.
*/</span><span class="pln" style="color: black;">
dependencies </span><span class="pun" style="color: #666600;">{</span><span class="pln" style="color: black;">
compile project</span><span class="pun" style="color: #666600;">(</span><span class="str" style="color: #880000;">":lib"</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: black;">
compile </span><span class="str" style="color: #880000;">'com.android.support:appcompat-v7:25.3.1'</span><span class="pln" style="color: black;">
compile fileTree</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: black;">dir</span><span class="pun" style="color: #666600;">:</span><span class="pln" style="color: black;"> </span><span class="str" style="color: #880000;">'libs'</span><span class="pun" style="color: #666600;">,</span><span class="pln" style="color: black;"> include</span><span class="pun" style="color: #666600;">:</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;">[</span><span class="str" style="color: #880000;">'*.jar'</span><span class="pun" style="color: #666600;">])</span><span class="pln" style="color: black;">
</span><span class="pun" style="color: #666600;">}</span></pre>
</div>
<div>
<br /></div>
<div>
제가 보통 보는 블록은 defaultConfig, buildType, dependencies 정도인 것 같네요.</div>
<div>
splits나 productFlavors를 잘 사용하면 무료, 유료 앱 따로 빌드하기나 </div>
<div>
화면 해상도에 따른 빌드 설정을 각각해줄 수 있을 것 같네요.</div>
<div>
<br /></div>
<div>
그리고 추가적으로, 빌드할 때 필요한 설정을 가지고 있는 파일들이 있습니다.</div>
<div>
- gradle.properties: 프로젝트 범위의 그래들 설정을 함. 예, gradle daemon 힙 크기 설정</div>
<div>
- local.properties: 빌드 시스템의 로컬 환경을 구성. 예, sdk, ndk 경로 설정</div>
<div>
<br /></div>
<div>
뭔가 간단한 앱을 만들때는 build.gradle 파일을 많이 수정할 일이 없었는데</div>
<div>
모듈을 만들어서 붙이고, 다른 플러그인도 같이 사용하게되면</div>
<div>
종속성이나 여러가지 신경써야할 포인트가 많은 것 같습니다.</div>
<div>
<br /></div>
<div>
이 포스트를 시작으로 책도 좀 보고 더 깊게 공부해봐야겠습니다.</div>
<div>
<br /></div>
<div>
Gradle의 GitHub 주소를 남기고 글 마치겠습니다.</div>
<div>
<a href="https://github.com/gradle/gradle">https://github.com/gradle/gradle</a></div>
pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-31161380446906565762017-06-20T00:52:00.000+09:002017-06-20T00:52:03.344+09:00Google Analytics Update!<a href="https://analytics.googleblog.com/2017/04/effortless-analytics-new-google.html">https://analytics.googleblog.com/2017/04/effortless-analytics-new-google.html</a><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/hB3lwjnbWd0/0.jpg" src="https://www.youtube.com/embed/hB3lwjnbWd0?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-73571847734608606062017-05-20T01:38:00.001+09:002017-05-20T01:38:14.969+09:00OpenGL ES 버전 2.0과 3.0 차이(1)<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYDm9t4n70DBXvkroem47-Ba3My4r9Q2LZW03EQFkV-oE7tSb1ffpKaYWMR8_C2DEoqbWq9G9Qm2vuvr1xAMexhlDDAMVkPWKcLlFwLjNdY6p6P5UjtMclEb7QmuITknqUXL_9MtjegQ4/s1600/opengl.png" imageanchor="1"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYDm9t4n70DBXvkroem47-Ba3My4r9Q2LZW03EQFkV-oE7tSb1ffpKaYWMR8_C2DEoqbWq9G9Qm2vuvr1xAMexhlDDAMVkPWKcLlFwLjNdY6p6P5UjtMclEb7QmuITknqUXL_9MtjegQ4/s640/opengl.png" width="640" /></a><br />
<br />
Cocos2d-x 버전 차이에 대해서 공부하던 중에 그 기반이 되는 OpenGL ES의 버전에도<br />
큰 차이가 있지 않을까하여 공부해봤습니다.<br />
<br />
우선 OpenGL ES란, (<a href="https://ko.wikipedia.org/wiki/OpenGL_ES">Wikipedia-ko</a>)<br />
<blockquote class="tr_bq">
<b style="background-color: white; color: #222222; font-family: sans-serif;">OpenGL ES</b><span style="background-color: white; color: #222222; font-family: sans-serif;"> (임베디드 단말을 위한 OpenGL)는 </span><a href="https://ko.wikipedia.org/wiki/%ED%81%AC%EB%A1%9C%EB%85%B8%EC%8A%A4_%EA%B7%B8%EB%A3%B9" style="background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; text-decoration-line: none;" title="크로노스 그룹">크로노스 그룹</a><span style="background-color: white; color: #222222; font-family: sans-serif;">이 정의한 3차원 컴퓨터 그래픽스 API인 OpenGL의 서브셋으로, 휴대전화, PDA 등과 같은 임베디드 단말을 위한 API이다.</span></blockquote>
<span style="color: #222222; font-family: sans-serif;"><span style="background-color: white;">한글로 작성된 위키는 짧군요.</span></span><br />
<span style="color: #222222; font-family: sans-serif;"><span style="background-color: white;">영어로 작성된 위키를 더 보겠습니다. (<a href="https://en.wikipedia.org/wiki/OpenGL_ES">Wikipedia-en</a>)</span></span><br />
<span style="color: #222222; font-family: sans-serif;"><span style="background-color: white;"><br /></span></span>
<br />
<blockquote class="tr_bq" style="background-color: white; color: #222222; font-family: sans-serif; line-height: inherit; margin-bottom: 0.5em; margin-top: 0.5em;">
<b>OpenGL for Embedded Systems</b> (<b>OpenGL ES</b> or <b>GLES</b>) is a subset<sup class="reference" id="cite_ref-2" style="line-height: 1; unicode-bidi: isolate; white-space: nowrap;"><a href="https://en.wikipedia.org/wiki/OpenGL_ES#cite_note-2" style="background: none; color: #0b0080; text-decoration-line: none;">[2]</a></sup> of the <a href="https://en.wikipedia.org/wiki/OpenGL" style="background: none; color: #0b0080; text-decoration-line: none;" title="OpenGL">OpenGL</a> <a href="https://en.wikipedia.org/wiki/Rendering_(computer_graphics)" style="background: none; color: #0b0080; text-decoration-line: none;" title="Rendering (computer graphics)">computer graphics rendering</a> <a href="https://en.wikipedia.org/wiki/Application_programming_interface" style="background: none; color: #0b0080; text-decoration-line: none;" title="Application programming interface">application programming interface</a> (API) for rendering <a href="https://en.wikipedia.org/wiki/2D_computer_graphics" style="background: none; color: #0b0080; text-decoration-line: none;" title="2D computer graphics">2D</a> and <a href="https://en.wikipedia.org/wiki/3D_computer_graphics" style="background: none; color: #0b0080; text-decoration-line: none;" title="3D computer graphics">3D computer graphics</a> such as those used by <a href="https://en.wikipedia.org/wiki/Video_game" style="background: none; color: #0b0080; text-decoration-line: none;" title="Video game">video games</a>, typically <a href="https://en.wikipedia.org/wiki/Hardware_acceleration" style="background: none; color: #0b0080; text-decoration-line: none;" title="Hardware acceleration">hardware-accelerated</a> using a <a href="https://en.wikipedia.org/wiki/Graphics_processing_unit" style="background: none; color: #0b0080; text-decoration-line: none;" title="Graphics processing unit">graphics processing unit</a> (GPU). It is designed for <a class="mw-redirect" href="https://en.wikipedia.org/wiki/Embedded_systems" style="background: none; color: #0b0080; text-decoration-line: none;" title="Embedded systems">embedded systems</a> like <a class="mw-redirect" href="https://en.wikipedia.org/wiki/Smartphones" style="background: none; color: #0b0080; text-decoration-line: none;" title="Smartphones">smartphones</a>, <a class="mw-redirect" href="https://en.wikipedia.org/wiki/Computer_tablet" style="background: none; color: #0b0080; text-decoration-line: none;" title="Computer tablet">computer tablets</a>, <a href="https://en.wikipedia.org/wiki/Video_game_console" style="background: none; color: #0b0080; text-decoration-line: none;" title="Video game console">video game consoles</a> and <a href="https://en.wikipedia.org/wiki/Personal_digital_assistant" style="background: none; color: #0b0080; text-decoration-line: none;" title="Personal digital assistant">PDAs</a>. OpenGL ES is the "most widely deployed 3D graphics API in history".<sup class="reference" id="cite_ref-3D-BOF-SIGGRAPH_Aug15_3-0" style="line-height: 1; unicode-bidi: isolate; white-space: nowrap;"><a href="https://en.wikipedia.org/wiki/OpenGL_ES#cite_note-3D-BOF-SIGGRAPH_Aug15-3" style="background: none; color: #0b0080; text-decoration-line: none;">[3]</a></sup>The API is <a href="https://en.wikipedia.org/wiki/Language-independent_specification" style="background: none; color: #0b0080; text-decoration-line: none;" title="Language-independent specification">cross-language</a> and <a href="https://en.wikipedia.org/wiki/Cross-platform" style="background: none; color: #0b0080; text-decoration-line: none;" title="Cross-platform">multi-platform</a>. The libraries <a href="https://en.wikipedia.org/wiki/OpenGL_Utility_Toolkit" style="background: none; color: #0b0080; text-decoration-line: none;" title="OpenGL Utility Toolkit">GLUT</a> and <a href="https://en.wikipedia.org/wiki/OpenGL_Utility_Library" style="background: none; color: #0b0080; text-decoration-line: none;" title="OpenGL Utility Library">GLU</a> are not available for OpenGL ES. OpenGL ES is managed by the <a class="mw-redirect" href="https://en.wikipedia.org/wiki/Non-profit_organization" style="background: none; color: #0b0080; text-decoration-line: none;" title="Non-profit organization">non-profit</a> technology <a href="https://en.wikipedia.org/wiki/Consortium" style="background: none; color: #0b0080; text-decoration-line: none;" title="Consortium">consortium</a> <a href="https://en.wikipedia.org/wiki/Khronos_Group" style="background: none; color: #0b0080; text-decoration-line: none;" title="Khronos Group">Khronos Group</a>. <a href="https://en.wikipedia.org/wiki/Vulkan_(API)" style="background: none; color: #0b0080; text-decoration-line: none;" title="Vulkan (API)">Vulkan</a>, a next-generation API from Khronos, is made for simpler high performance drivers for mobile and desktop devices.<sup class="reference" id="cite_ref-4" style="line-height: 1; unicode-bidi: isolate; white-space: nowrap;"><a href="https://en.wikipedia.org/wiki/OpenGL_ES#cite_note-4" style="background: none; color: #0b0080; text-decoration-line: none;">[4]</a></sup></blockquote>
<span style="color: #222222; font-family: sans-serif;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: sans-serif;"><span style="background-color: white;">설명에 큰 차이는 없지만, API에 대한 설명에는 크로스 랭귀지, 멀티 플랫폼이 들어가있습니다.</span></span><br />
<span style="color: #222222; font-family: sans-serif;"><span style="background-color: white;">OpenGL에서 사용할 수 있는 GLUT, GLU는 OpenGL ES에서는 사용할 수 없다. 정도네요.</span></span><br />
<span style="color: #222222; font-family: sans-serif;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: sans-serif;"><span style="background-color: white;">각 버전별 설명도 잘 나와있는 영문 위키를 보면,</span></span><br />
<span style="color: #222222; font-family: sans-serif;"><span style="background-color: white;"><br /></span></span>
<span style="color: #222222; font-family: sans-serif;"><span style="background-color: white;"><b>OpenGL ES 2.0</b></span></span><br />
<span style="background-color: white; color: #222222; font-family: sans-serif; font-size: 14px;">OpenGL ES 2.0 was publicly released in March 2007.</span><sup class="reference" id="cite_ref-6" style="background-color: white; color: #222222; font-family: sans-serif; font-size: 11.2px; line-height: 1; unicode-bidi: isolate; white-space: nowrap;"><a href="https://en.wikipedia.org/wiki/OpenGL_ES#cite_note-6" style="background: none; color: #0b0080; text-decoration-line: none;">[6]</a></sup><span style="background-color: white; color: #222222; font-family: sans-serif; font-size: 14px;"> It is based roughly on OpenGL 2.0, but it eliminates most of the fixed-function rendering pipeline in favor of a programmable one in a move similar to transition from OpenGL 3.0 to 3.1.</span><sup class="reference" id="cite_ref-7" style="background-color: white; color: #222222; font-family: sans-serif; font-size: 11.2px; line-height: 1; unicode-bidi: isolate; white-space: nowrap;"><a href="https://en.wikipedia.org/wiki/OpenGL_ES#cite_note-7" style="background: none; color: #0b0080; text-decoration-line: none;">[7]</a></sup><span style="background-color: white; color: #222222; font-family: sans-serif; font-size: 14px;"> Control flow in shaders is generally limited to forward branching and to loops where the maximum number of iterations can easily be determined at compile time.</span><sup class="reference" id="cite_ref-8" style="background-color: white; color: #222222; font-family: sans-serif; font-size: 11.2px; line-height: 1; unicode-bidi: isolate; white-space: nowrap;"><a href="https://en.wikipedia.org/wiki/OpenGL_ES#cite_note-8" style="background: none; color: #0b0080; text-decoration-line: none;">[8]</a></sup><span style="background-color: white; color: #222222; font-family: sans-serif; font-size: 14px;"> Almost all rendering features of the transform and lighting stage, such as the specification of materials and light parameters formerly specified by the fixed-function API, are replaced by </span><a href="https://en.wikipedia.org/wiki/Shader" style="background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration-line: none;" title="Shader">shaders</a><span style="background-color: white; color: #222222; font-family: sans-serif; font-size: 14px;"> written by the graphics programmer. As a result, OpenGL ES 2.0 is not </span><a href="https://en.wikipedia.org/wiki/Backward_compatibility" style="background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration-line: none;" title="Backward compatibility">backward compatible</a><span style="background-color: white; color: #222222; font-family: sans-serif; font-size: 14px;"> with OpenGL ES 1.1. Some incompatibilities between the desktop version of OpenGL and OpenGL ES 2.0 persisted until OpenGL 4.1, which added the </span><code style="background-color: #f8f9fa; border-radius: 2px; border: 1px solid rgb(234, 236, 240); font-family: monospace, Courier; font-size: 14px; padding: 1px 4px;">GL_ARB_ES2_compatibility</code><span style="background-color: white; color: #222222; font-family: sans-serif; font-size: 14px;"> extension.</span><sup class="reference" id="cite_ref-9" style="background-color: white; color: #222222; font-family: sans-serif; font-size: 11.2px; line-height: 1; unicode-bidi: isolate; white-space: nowrap;"><a href="https://en.wikipedia.org/wiki/OpenGL_ES#cite_note-9" style="background: none; color: #0b0080; text-decoration-line: none;">[9]</a></sup><br />
<span style="color: #222222; font-family: sans-serif;"><span style="background-color: white;"><br /></span></span>
<span style="background-color: white; color: #222222; font-family: sans-serif;"><b>OpenGL ES 3.0</b></span><br />
<div style="background-color: white; color: #222222; font-family: sans-serif; font-size: 14px; line-height: inherit; margin-bottom: 0.5em; margin-top: 0.5em;">
The OpenGL ES 3.0 specification<sup class="reference" id="cite_ref-10" style="font-size: 11.2px; line-height: 1; unicode-bidi: isolate; white-space: nowrap;"><a href="https://en.wikipedia.org/wiki/OpenGL_ES#cite_note-10" style="background: none; color: #0b0080; text-decoration-line: none;">[10]</a></sup> was publicly released in August 2012.<sup class="reference" id="cite_ref-11" style="font-size: 11.2px; line-height: 1; unicode-bidi: isolate; white-space: nowrap;"><a href="https://en.wikipedia.org/wiki/OpenGL_ES#cite_note-11" style="background: none; color: #0b0080; text-decoration-line: none;">[11]</a></sup> OpenGL ES 3.0 is backwards compatible with OpenGL ES 2.0, enabling applications to incrementally add new visual features to applications. OpenGL 4.3 provides full compatibility with OpenGL ES 3.0. Version 3.0 is also base of <a href="https://en.wikipedia.org/wiki/WebGL" style="background: none; color: #0b0080; text-decoration-line: none;" title="WebGL">WebGL</a> 2.0.<sup class="reference" id="cite_ref-12" style="font-size: 11.2px; line-height: 1; unicode-bidi: isolate; white-space: nowrap;"><a href="https://en.wikipedia.org/wiki/OpenGL_ES#cite_note-12" style="background: none; color: #0b0080; text-decoration-line: none;">[12]</a></sup></div>
<div style="background-color: white; color: #222222; font-family: sans-serif; font-size: 14px; line-height: inherit; margin-bottom: 0.5em; margin-top: 0.5em;">
New functionality in the OpenGL ES 3.0 specification includes:</div>
<ul style="background-color: white; color: #222222; font-family: sans-serif; font-size: 14px; list-style-image: url("data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%225%22%20height%3D%2213%22%3E%0A%3Ccircle%20cx%3D%222.5%22%20cy%3D%229.5%22%20r%3D%222.5%22%20fill%3D%22%2300528c%22%2F%3E%0A%3C%2Fsvg%3E%0A"); margin: 0.3em 0px 0px 1.6em; padding: 0px;">
<li style="margin-bottom: 0.1em;">multiple enhancements to the <a class="mw-redirect" href="https://en.wikipedia.org/wiki/Rendering_pipeline" style="background: none; color: #0b0080; text-decoration-line: none;" title="Rendering pipeline">rendering pipeline</a> to enable acceleration of advanced visual effects including: <a class="mw-redirect" href="https://en.wikipedia.org/wiki/Occlusion_queries" style="background: none; color: #0b0080; text-decoration-line: none;" title="Occlusion queries">occlusion queries</a>, <a class="mw-redirect" href="https://en.wikipedia.org/wiki/Transform_feedback" style="background: none; color: #0b0080; text-decoration-line: none;" title="Transform feedback">transform feedback</a>, <a href="https://en.wikipedia.org/wiki/Geometry_instancing" style="background: none; color: #0b0080; text-decoration-line: none;" title="Geometry instancing">instanced rendering</a> and support for four or more <a href="https://en.wikipedia.org/wiki/Render_Target" style="background: none; color: #0b0080; text-decoration-line: none;" title="Render Target">rendering targets</a>,</li>
<li style="margin-bottom: 0.1em;">high quality <a href="https://en.wikipedia.org/wiki/Ericsson_Texture_Compression#ETC2_and_EAC" style="background: none; color: #0b0080; text-decoration-line: none;" title="Ericsson Texture Compression">ETC2 / EAC</a> <a href="https://en.wikipedia.org/wiki/Texture_compression" style="background: none; color: #0b0080; text-decoration-line: none;" title="Texture compression">texture compression</a> as a standard feature, eliminating the need for a different set of <a href="https://en.wikipedia.org/wiki/Texture_mapping" style="background: none; color: #0b0080; text-decoration-line: none;" title="Texture mapping">textures</a> for each platform,</li>
<li style="margin-bottom: 0.1em;">a new version of the GLSL ES <a href="https://en.wikipedia.org/wiki/Shading_language" style="background: none; color: #0b0080; text-decoration-line: none;" title="Shading language">shading language</a><sup class="reference" id="cite_ref-13" style="font-size: 11.2px; line-height: 1; unicode-bidi: isolate; white-space: nowrap;"><a href="https://en.wikipedia.org/wiki/OpenGL_ES#cite_note-13" style="background: none; color: #0b0080; text-decoration-line: none;">[13]</a></sup> with full support for integer and <a href="https://en.wikipedia.org/wiki/32-bit" style="background: none; color: #0b0080; text-decoration-line: none;" title="32-bit">32-bit</a> <a class="mw-redirect" href="https://en.wikipedia.org/wiki/Floating_point" style="background: none; color: #0b0080; text-decoration-line: none;" title="Floating point">floating point</a> operations;</li>
<li style="margin-bottom: 0.1em;">greatly enhanced <a href="https://en.wikipedia.org/wiki/Texture_mapping" style="background: none; color: #0b0080; text-decoration-line: none;" title="Texture mapping">texturing</a> functionality including guaranteed support for <a class="mw-redirect" href="https://en.wikipedia.org/wiki/Floating_point" style="background: none; color: #0b0080; text-decoration-line: none;" title="Floating point">floating point</a> textures, 3D textures, depth textures, vertex textures, NPOT textures, R/RG textures, immutable textures, 2D array textures, <a href="https://en.wikipedia.org/wiki/Swizzling_(computer_graphics)" style="background: none; color: #0b0080; text-decoration-line: none;" title="Swizzling (computer graphics)">swizzles</a>, <a href="https://en.wikipedia.org/wiki/Level_of_detail" style="background: none; color: #0b0080; text-decoration-line: none;" title="Level of detail">LOD</a> and <a href="https://en.wikipedia.org/wiki/Mipmap" style="background: none; color: #0b0080; text-decoration-line: none;" title="Mipmap">mip level</a> clamps, seamless <a href="https://en.wikipedia.org/wiki/Cube_mapping" style="background: none; color: #0b0080; text-decoration-line: none;" title="Cube mapping">cube maps</a> and sampler objects,</li>
<li style="margin-bottom: 0.1em;">an extensive set of required, explicitly sized <a href="https://en.wikipedia.org/wiki/Texture_mapping" style="background: none; color: #0b0080; text-decoration-line: none;" title="Texture mapping">texture</a> and render-buffer formats, reducing implementation variability and making it much easier to write portable applications.</li>
</ul>
<br />
(참고, <a href="http://www.informit.com/articles/article.aspx?p=2181697&seqNum=2">http://www.informit.com/articles/article.aspx?p=2181697&seqNum=2</a>)<br />
<br />
음, 각각 살펴보고 정리해보겠습니다.<br />
<br />
<b>OpenGL ES 2.0을 먼저 살펴보면,</b><br />
2007년 3월에 출시되었습니다. OpenGL 2.0을 기반으로 하지만 OpenGL 3.0에서 3.1로 업데이트 될 때와 비슷하게 고정 렌더링 파이프라인을 제거하였습니다. 셰이더의 제어 흐름은 컴파일할 때에 쉽게 결정할 수 있는 순방향 분기, 루프로 제한됩니다.<br />
이전에 고정 함수 API에 의해 지정된 재질 및 조명 매개 변수와 같은 변형 및 조명 스테이지의 거의 모든 렌더링 기능은 그래픽 프로그래머가 작성한 쉐이더로 대체되었습니다. 따라서 OpenGL ES 2.0은 OpenGL ES 1.1과 호환되지 않습니다. OpenGL과 OpenGL ES 2.0 데스크톱 버전 간의 일부 비 호환성은 GL_ARB_ES2_compatibility 확장을 추가 한 OpenGL 4.1까지 지속됩니다.<br />
<br />
<b>OpenGL ES 3.0은 어떨까요.</b><br />
OpenGL ES 3.0 사양은 2012년 8월에 공개되었습니다. OpenGL ES 3.0은 OpenGL ES 2.0과 하위 호환되므로 응용 프로그램이 응용 프로그램에 점진적으로 새로운 시각적 기능을 추가할 수 있습니다.<br />
OpenGL 4.3은 OpenGL ES 3.0과 완벽한 호환성을 제공합니다.<br />
버전 3.0은 WebGL 2.0의 기반이기도합니다.<br />
새로운 기능은 아래와 같습니다.<br />
<ul>
<li>오클루전 쿼리, 변환 피드백, 인스턴스 렌더링 및 4개 이상의 렌더링 대상에 대한 지원을 비롯하여 고급 시각 효과를 가속화 할 수 있도록 렌더링 파이프 라인에 대한 여러 가지 향상된 기능을 제공합니다.</li>
<li>고품질 ETC2/EAC 텍스처 압축을 표준 기능으로 지원하여 각 플랫폼에 다른 텍스처 세트가 필요하지 않습니다.</li>
<li>부동 소수점 텍스처, 3D 텍스처, 깊이 텍스처, 정점 텍스처, NPOT 텍스처, R/RG 텍스처, 불변 텍스처, 2D 배열 텍스처, 스위즐, LOD 및 밉 레벨 클램프, 매끄러운 큐브 맵 및 샘플러 객체에 대한 보장된 지원을 포함하여 크게 향상된 텍스처링 기능을 포함합니다.</li>
<li>명시적으로 크기가 필요한 텍스처 및 렌더링 버퍼 형식의 광범위한 세트로, 구현 변동성을 줄이고 모바일 앱을 훨씬 쉽게 개발할 수 있습니다.</li>
</ul>
구글 번역기의 도움을 받아 해석해봤는데, 전반적으로 기능, 성능향상이 있어보입니다.<br />
퍼포먼스 테스트 자료가 있으면 좋겠는데.. 없네요. 한번 테스트를 해봐야겠습니다.<br />
<br />
OpenGL ES 버전 차이가 어떤가에 대해 개괄적인 내용이었지만<br />
렌더링 방식, 텍스처 처리방식, 버퍼 크기등에 대한 차이가 있었네요.<br />
다음 글에서는 성능 차이에 대한 이야기를 해보겠습니다.<br />
<br />pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-69012136969301018992017-05-14T01:43:00.005+09:002017-05-14T01:49:07.485+09:00Cocos2d-x version difference between 2.x vs 3.x<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtk5W0ID50Ht3P8YZ9IdpOWP3_VniJjh_cIEKMKsl1R1h_1IxKWW74z-kZ-vm4UHq_2uxst1ZKAQNnDcL0ZlBa8n65KzqxVS8BhGL-UwOWKtwX8m3usCvE2hJjOANnRLZcQyYl-8Gb7uE/s1600/cocos.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtk5W0ID50Ht3P8YZ9IdpOWP3_VniJjh_cIEKMKsl1R1h_1IxKWW74z-kZ-vm4UHq_2uxst1ZKAQNnDcL0ZlBa8n65KzqxVS8BhGL-UwOWKtwX8m3usCvE2hJjOANnRLZcQyYl-8Gb7uE/s640/cocos.jpg" width="640" /></a></div>
<a href="http://cocos2d-x.org/">http://cocos2d-x.org/</a><br />
<br />
Cocos2d-x는 현재 두개의 버전을 지원하고있는데요.<br />
2.2.6 버전과 3.15 버전을 지원하고 있습니다.<br />
<br />
최근에 이 두개의 버전은 어떤 차이가 있고, 성능차이가 있는가에 대해 궁금해져서<br />
이렇게 포스팅을 하게 되었습니다.<br />
<br />
우선 크게 바뀐 것 부터 정리해보자면,<br />
Release Note on GitHub: <a href="https://github.com/cocos2d/cocos2d-x/blob/77c03fcf114369bc2dda138daedc13c93b132367/docs/RELEASE_NOTES.md">Cocos2d-x-v3.0-ReleaseNote.md</a><br />
참고: <a href="http://vallista.tistory.com/entry/Cocos2dx-3x-%EB%8C%80%EC%99%80-2x%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EB%B0%8F-%EB%B3%80%EA%B2%BD%EC%A0%90" target="_blank">VallistA님의 블로그</a><span id="goog_1373422462"></span><a href="https://www.blogger.com/"></a><span id="goog_1373422463"></span><br />
<br />
<b>1. Python을 사용한 크로스 플랫폼 개발 지원(Cocos console)</b><br />
Cocos2d-x 2.x 버전에서는 Cygwin을 이용한 리눅스 환경에서 작업을 했다면,<br />
3.x 버전에서는 파이썬을 이용한 cocos console을 이용해서 작업할 수 있게 되었습니다.<br />
이를 통해 쉽게 크로스 플랫폼 환경에서 편하게 프로젝트를 만들고 컴파일할 수 있게 되었습니다.<br />
<b><br /></b>
<b>2. Objective-C 패턴 제거(Objective-C pattern removed)</b><br />
<br />
<ol>
<li>cocos2d라는 namespace를 사용하게 되면서, 더이상 CC라는 prefix를 사용할 필요가 없게되었습니다.</li>
<ul>
<li>CCSprite -> Sprite, CCFrame -> Frame, CCScene -> Scene, CCDirector -> Director 등으로 변경되었습니다.</li>
</ul>
<li>copy() 함수 대신에 clone() 함수를 사용합니다.</li>
<li>Singleton은 getInstance(), destoryInstance() 함수명을 사용하여 인스턴스를 관리합니다.</li>
<ul>
<li>그전에는 sharedDirector()와 같은 함수를 사용했었습니다.</li>
</ul>
<li>Object 클래스 -> Ref로 변경</li>
<ul>
<li>Object라는 이름이 모호한 점이 있어 Ref로 변경되었습니다.</li>
</ul>
<li>Getter 함수들이 get prefix를 가집니다.</li>
<li>POD type의 변수를 const로 전달합니다.</li>
</ol>
<br />
<br />
<b>3. C++11 features를 따름</b><br />
C++ 11 버전을 지원하게 되어서 여러가지 기능을 사용 가능하고, 따르게 되었습니다.<br />
- auto 키워드를 사용가능 (보다 적극적으로 사용하게 되었습니다.)<br />
- lambda식을 사용가능.<br />
- enum(strongly typed enum)을 사용.<br />
(CCPointZero -> Point::ZERO 로 변경)<br />
- override, final 키워드를 사용.<br />
<br />
<b>4. 새로운 Renderer</b><br />
Cocos2d-x 2.2버전은 현재 문제는 없지만 최적화를 하거나 새로운 함수 추가,<br />
새로운 플랫폼 추가하기가 힘듭니다. 이런 문제를 해결하기 위해 새로운 렌더러를 만들었습니다.<br />
새로운 렌더러는 다음과 같은 기능을 가집니다.<br />
<ul style="box-sizing: border-box; color: #24292e; font-family: -apple-system, system-ui, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;">
<li style="box-sizing: border-box;">It has been decoupled from the Scene Graph. The <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">draw()</code> method, instead of "drawing" it sends a <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">RenderCommand</code> to the <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">Renderer</code>, and <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">Renderer</code> is responsible for drawing the queued <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">RenderCommand </code>commands.</li>
<li style="box-sizing: border-box; margin-top: 0.25em;"><code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">QuadCommands</code> (used by <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">Sprite</code> and <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">ParticleSystem</code> objects) will be automatically batched.</li>
<li style="box-sizing: border-box; margin-top: 0.25em;"><code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">CustomCommand</code> objects allow the user to use custom OpenGL code, using a API similar to v2.2</li>
<li style="box-sizing: border-box; margin-top: 0.25em;"><code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">GroupCommand</code> objects allow to have "stacks" in the Renderer with different OpenGL values.</li>
<li style="box-sizing: border-box; margin-top: 0.25em;">Auto-culling for <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">Sprite</code> objects (although, technically, Auto-culling is not performed in <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">Renderer</code> code, but in the <code style="background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; box-sizing: border-box; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;">Sprite</code> code)</li>
<li style="box-sizing: border-box; margin-top: 0.25em;">Global Z ordering (local Z ordering is still supported)</li>
</ul>
좀 더 살펴보면,<br />
<br />
- Auto-batching<br />
batch 작업을 많이하면 할 수록 성능이 안좋아지는데 이를 최적화합니다.<br />
- Auto-culling(view frustum culling)<br />
Sprite에 대해 처리를 하는 작업입니다. Sprite가 화면에서 나갈경우 draw가 실행되지 않도록합니다.<br />
- Global Z order<br />
setZOrder(), getZOrder()을 deprecate하고<br />
setGlobalZOrder(), getGlobalZOrder(), setLocalZOrder(), getLocalZOrder()을 만들었습니다.<br />
화면 전체에 대해 Zorder를 정할 것인지, 그 노드에서 Zorder를 정할 것인지를 세팅할 수 있습니다.<br />
<br />
<b>* Sprite vs SpriteBatchNode</b><br />
2.2 버전에서는 Sprite를 효율적으로 처리하기 위해서, SpriteBatchNode를 사용하라고 권장 했었습니다.<br />
3.0 버전에 올라와서는 SpriteBatchNode를 사용하지 않더라도 Sprite를 만들때 TextureID를 같게 만든다면 큰 성능 이슈는 없습니다.<br />
만약 성능을 올리고 싶다면 SpriteBatchNode를 사용하는게 여전히 좋습니다.<br />
<br />
<b>5. LabelTTF / LabelBMFont / LabelAtlas 개선</b><br />
Label에 대한 구현이 Label 클래스로 통합되었습니다.<br />
<br />
<b>6. 새로운 EventDispatcher</b><br />
touch event, keyboard event, acceleration event, custom event에 대한 디스패쳐가 삭제되었습니다.<br />
EventDispatcher로 통합되었는데, 모든 이벤트는 EventDispatcher로 처리합니다.<br />
<br />
<b>7. 물리엔진 개선(Physics Integration)</b><br />
Box2D로 구현했던 물리엔진 기능이 Chipmunk2D로 통합, 바뀌었습니다.<br />
<br />
정리해놓고 보니까 꽤 많은 변화가 있었지만, 2.2.6 버전도 지금까지 어떤 변화가 있었는지<br />
그에 대한 정리가 필요해보입니다.<br />
<br />
그 외에 OpenGL 버전 업은 어떻게 되었는지도 궁금하지만 릴리즈 노트에는 없으니<br />
따로 찾아봐야겠습니다.<br />
<br />
ARM에서 Ricardo Quesada 님이 발표한 내용이 있어서 공유합니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/0iE85w8gFR0/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/0iE85w8gFR0?feature=player_embedded" width="320"></iframe></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
다음엔 OpenGL 버전과 Cocos2d-x 버전과의 상관관계를 알아봐야겠습니다.<br />
<br />
<br />pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-39147653971875270752017-05-11T00:40:00.002+09:002017-05-11T01:10:00.852+09:00OpenGL 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<br />
<br />
영어 책이라 이해가 전혀 안되진 않겠지만 힘들게 읽을거 같은데 고민...<br />
<br />
일단 적어놓고 공부해봐야겠다.<br />
<br />
추가, apple 문서 쪽에 openGL ES 에 대한 문서가 있는데<br />
https://developer.apple.com/library/content/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/Introduction/Introduction.html<br />
같이 곁들여 보면 좋을듯.pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0tag:blogger.com,1999:blog-6576606334473824207.post-68913858607095641052017-04-28T14:54:00.000+09:002017-04-28T14:54:21.687+09:00Cocos2d-x 3.15 version updated<div style="background-color: white; border: 0px; color: #555555; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;">
이번에 Cocos2d-x 3.15 버전 업데이트가 진행되었다고 합니다.<br />링크: <a href="https://github.com/cocos2d/cocos2d-x/blob/v3.15/docs/RELEASE_NOTES.md#cocos2d-x-315-release-notes" rel="external" style="border: 0px; color: #258fb8; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration-line: none; vertical-align: baseline;" target="_blank">release notes</a></div>
<div style="background-color: white; border: 0px; color: #555555; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;">
주요 업데이트 내용은 아래와 같습니다.</div>
<ul style="background-color: white; border: 0px; color: #555555; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; list-style-image: initial; list-style-position: initial; margin: 1.6em 20px; outline: 0px; padding: 0px; vertical-align: baseline;">
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">full <strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Android Studio</strong> supports: include editing, compiling and debugging c++ codes: <a href="https://github.com/chukong/cocos-docs/blob/v3-unified-documentation/installation/Android-Studio.md" rel="external" style="border: 0px; color: #258fb8; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration-line: none; vertical-align: baseline;" target="_blank">doc</a></li>
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">audio engine uses <a href="http://wss.co.uk/pinknoise/tremolo/" rel="external" style="border: 0px; color: #258fb8; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration-line: none; vertical-align: baseline;" target="_blank">tremolo</a> and <strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">MP3 Decoder Library</strong> to decode audio files on Android: high performance and more adaptable to different Android devices</li>
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">WebSockets</strong> and <strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">SocketIO</strong> supports SSL</li>
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">AssetsManagerEx is more stable</li>
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">update <strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Spine runtime</strong> to v3.5.35</li>
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">update <strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">flatbuffer</strong> to v1.5</li>
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">remove support for Windows 8.1 store and phone</li>
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">update <strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">OpenSSL</strong> to v1.1.0</li>
<li style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">remove linux 32-bit support</li>
</ul>
<div style="background-color: white; border: 0px; color: #555555; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;">
가장 큰 변화로는 안드로이드 스튜디오를 정식으로 지원하는 점입니다.<br />Xcode로 개발할 경우에는 C++ 디버깅을 할 수 있었는데, 안드로이드 스튜디오에서는 하기 힘들었습니다.<br />(C++을 디버깅하기 위해서는 여러 가지 설정해야 하는 부분이 있었습니다.)<br />이번 업데이트를 통해서 안드로이드 스튜디오에서 C++ 코드를 디버깅할 수 있는 환경이 공식적으로 지원됩니다.</div>
<div style="background-color: white; border: 0px; color: #555555; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;">
자세한 사항은 위의 doc 링크를 참조하시면 좋을 것 같습니다.</div>
<div style="background-color: white; border: 0px; color: #555555; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;">
AudioEngine 쪽 성능 향상과 많은 안드로이드 디바이스 호환성을 위해 tremolo라는 mp3 디코더 라이브러리를<br />안드로이드 쪽에 추가했다고 합니다.</div>
<div style="background-color: white; border: 0px; color: #555555; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;">
<a class="fancybox" href="https://raw.githubusercontent.com/minggo/Pictures/master/AudioDecodingPerfTest.png" rel="article0" style="border: 0px; color: #258fb8; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration-line: none; vertical-align: baseline;" title="audio performance"><img alt="audio performance" src="https://raw.githubusercontent.com/minggo/Pictures/master/AudioDecodingPerfTest.png" style="border: none; display: block; font-family: inherit; font-style: inherit; font-weight: inherit; height: auto; margin: auto; max-width: 100%; outline: 0px; padding: 0px; vertical-align: baseline;" /></a><span class="caption" style="border: 0px; color: #999999; display: block; font-family: inherit; font-size: 0.9em; font-style: inherit; font-weight: inherit; margin: 0.5em 0px 0px; outline: 0px; padding: 0px; position: relative; text-align: center; vertical-align: baseline;">audio performance</span></div>
<div style="background-color: white; border: 0px; color: #555555; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;">
그래프만 봤을 때 SimpleAudioEngine은 더 이상 쓰면 안 될 것 같은 느낌이네요.<br />저도 어서 업데이트를 해야겠습니다.</div>
<div style="background-color: white; border: 0px; color: #555555; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;">
그 외에 웹소켓, Spine, flat buffer, openSSL 업데이트가 되었습니다.</div>
pineochttp://www.blogger.com/profile/08551781003790847440noreply@blogger.com0