@@ -39,8 +39,9 @@ To publish new content: | |||||
pelican -s publishconf.py | pelican -s publishconf.py | ||||
``` | ``` | ||||
* upload it to GitHub with the following command: | |||||
* upload it to GitHub with the following commands: | |||||
``` | ``` | ||||
git add . | |||||
git push | git push | ||||
``` | ``` | ||||
@@ -49,6 +49,10 @@ | |||||
<table class="table-archive"> | <table class="table-archive"> | ||||
<tbody> | <tbody> | ||||
<tr> | |||||
<td>Ср 27 Июнь 2018</td> | |||||
<td><a href='example-driven-development.html'>Example-driven development</a></td> | |||||
</tr> | |||||
<tr> | <tr> | ||||
<td>Пт 20 Апрель 2018</td> | <td>Пт 20 Апрель 2018</td> | ||||
<td><a href='openscenegraph-examples.html'>OpenSceneGraph cross-platform examples</a></td> | <td><a href='openscenegraph-examples.html'>OpenSceneGraph cross-platform examples</a></td> | ||||
@@ -47,6 +47,67 @@ | |||||
<article> | |||||
<a href="http://opengamestudio.org/example-driven-development.html"><h3 class="article-title">Example-driven development</h3></a> | |||||
<h6 class="subheader" title="2018-06-27T00:00:00+03:00">Ср 27 Июнь 2018 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/example-driven-development-ru.html">ru</a> | |||||
</h6><p><img alt="Screenshot" src="http://opengamestudio.org/2018-06-27-example-driven-development.png" /></p> | |||||
<p>This article explains how the third OpenSceneGraph cross-platform example | |||||
opened our eyes to example-driven development.</p> | |||||
<p><strong>The third OpenSceneGraph cross-platform example</strong></p> | |||||
<p>The third OpenSceneGraph cross-platform example explains how to implement | |||||
<a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/03.RemoteDebugging">remote debugging across platforms</a>. This example is less about | |||||
OpenSceneGraph and more about different platforms.</p> | |||||
<p>Remote anything nowadays assumes the use of HTTP(s) over TCP/IP. Thus, the | |||||
first idea was to embed HTTP server into an application and let HTTP clients | |||||
interact with the server. However, serving HTTP across all platforms is | |||||
complicated:</p> | |||||
<ul> | |||||
<li>desktops have firewalls</li> | |||||
<li>mobiles have restrictions on background processes</li> | |||||
<li>web browsers are HTTP clients by design</li> | |||||
</ul> | |||||
<p>That's why we decided to create a mediator between debugged application and UI. | |||||
<a href="https://github.com/OGStudio/debug-broker">Debug broker</a>, a small Node.js application, became that mediator. | |||||
Debug broker uses no external dependencies, so it's easy to run virtually | |||||
anywhere. Also, since debug broker is a server application, you can configure | |||||
it once and use it for any number of applications.</p> | |||||
<p>Both <a href="https://github.com/OGStudio/debug-ui">debug UI</a> and <a href="https://github.com/OGStudio/debug-broker">debug broker</a> use JavaScript | |||||
because we wanted these tools to be accessible from anywhere with no prior | |||||
installation. This decision limited us to web browser solution. Providing | |||||
any sort of desktop application would incur additional installation and | |||||
maintenance effort, which would only complicate the tools.</p> | |||||
<p><strong>Example-driven development establishment</strong></p> | |||||
<p>Once the third example was implemented, we realized how important and | |||||
beneficial it is to develop new features outside the main project:</p> | |||||
<ul> | |||||
<li>the main project is freed from excessive commit noise</li> | |||||
<li>a new feature is publicly shared for everyone to learn, criticize, and improve</li> | |||||
</ul> | |||||
<p>When we publicly share our knowledge:</p> | |||||
<ul> | |||||
<li>we must create documentation for everyone (including ourselves later) to understand what's going on</li> | |||||
<li>we must not use hacks because that would break your trust in us</li> | |||||
</ul> | |||||
<p>From now on, all new features like input handling, Mahjong layout loading, | |||||
resource caching, etc. are going to be first implemented as examples. | |||||
We call this example-driven development.</p> | |||||
<p>That's it for explaining how the third OpenSceneGraph cross-platform example | |||||
opened our eyes to example-driven development.</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
</article> | |||||
<hr class="gradient"/> | |||||
<article> | <article> | ||||
<a href="http://opengamestudio.org/openscenegraph-examples.html"><h3 class="article-title">OpenSceneGraph cross-platform examples</h3></a> | <a href="http://opengamestudio.org/openscenegraph-examples.html"><h3 class="article-title">OpenSceneGraph cross-platform examples</h3></a> | ||||
<h6 class="subheader" title="2018-04-20T00:00:00+03:00">Пт 20 Апрель 2018 | <h6 class="subheader" title="2018-04-20T00:00:00+03:00">Пт 20 Апрель 2018 | ||||
@@ -58,35 +119,14 @@ cross-platform OpenSceneGraph examples.</p> | |||||
<p>By the time <a href="http://opengamestudio.org/mahjong-techdemo1-gameplay.html">the first technology demonstration of OGS Mahjong 2</a> | <p>By the time <a href="http://opengamestudio.org/mahjong-techdemo1-gameplay.html">the first technology demonstration of OGS Mahjong 2</a> | ||||
has been released, we've already had <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues/4">issue request</a> | has been released, we've already had <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues/4">issue request</a> | ||||
(to explain how to load images with OpenSceneGraph on Android) hanging for some | (to explain how to load images with OpenSceneGraph on Android) hanging for some | ||||
time. We considered creating a new tutorial for | |||||
<a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> at first. However, we realized | |||||
that it's time-consuming and excessive for such a tiny topic (compared to | |||||
what an average game has) as image loading. We decided to continue sharing our | |||||
knowledge in the form of concrete examples. That's how | |||||
<a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples">OpenSceneGraph cross-platform examples</a> were born.</p> | |||||
<p>Each example:</p> | |||||
<ul> | |||||
<li>explains crucial code necessary to perform a specific task</li> | |||||
<li>accents platform-specific nuances</li> | |||||
<li>provides implementations to cover desktop, mobile, and web platforms</li> | |||||
<li>provides a web build to showcase results</li> | |||||
</ul> | |||||
<p>The first two examples cover the following topics:</p> | |||||
<ul> | |||||
<li>Embed resource into executable: this greatly simplifies resource handling across platforms</li> | |||||
<li>Use PNG images with PNG plugins: this explains the requirements necessary to build and use PNG plugins</li> | |||||
</ul> | |||||
<p>We will be adding new examples as we proceed with OGS Mahjong 2 development.</p> | |||||
<p>That's it for summarizing the work we did to produce the first two cross-platform OpenSceneGraph examples.</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
time. We ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | </p> | ||||
</article> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/openscenegraph-examples.html">Read More</a> | |||||
<hr class="gradient"/> | <hr class="gradient"/> | ||||
</article> | |||||
@@ -271,25 +311,6 @@ In case you missed it, here ...</p><p class="subheader">Category: <a href="http: | |||||
<hr class="gradient"/> | <hr class="gradient"/> | ||||
</article> | </article> | ||||
<article> | |||||
<a href="http://opengamestudio.org/ios-tutorial.html"><h3 class="article-title">iOS tutorial</h3></a> | |||||
<h6 class="subheader" title="2017-06-08T10:00:00+03:00">Чт 08 Июнь 2017 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/ios-tutorial-ru.html">ru</a> | |||||
</h6><p><img alt="iOS tutorial" src="http://opengamestudio.org/2017-06-08-ios-refactoring.png" /></p> | |||||
<p>This article describes problems we faced during the creation of iOS tutorial in May 2017.</p> | |||||
<p><a href="https://twitter.com/OpenGameStudio/status/826816343433498627">This February</a> we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/ios-tutorial.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<!-- /#posts-list --> | <!-- /#posts-list --> | ||||
<div class="pagination-centered"> | <div class="pagination-centered"> | ||||
<h6 class="subheader">Page 1 of 4</h6> | <h6 class="subheader">Page 1 of 4</h6> | ||||
@@ -48,6 +48,25 @@ | |||||
<article> | |||||
<a href="http://opengamestudio.org/ios-tutorial.html"><h3 class="article-title">iOS tutorial</h3></a> | |||||
<h6 class="subheader" title="2017-06-08T10:00:00+03:00">Чт 08 Июнь 2017 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/ios-tutorial-ru.html">ru</a> | |||||
</h6><p><img alt="iOS tutorial" src="http://opengamestudio.org/2017-06-08-ios-refactoring.png" /></p> | |||||
<p>This article describes problems we faced during the creation of iOS tutorial in May 2017.</p> | |||||
<p><a href="https://twitter.com/OpenGameStudio/status/826816343433498627">This February</a> we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/ios-tutorial.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<article> | <article> | ||||
<a href="http://opengamestudio.org/osg-sample.html"><h3 class="article-title">OpenSceneGraph sample</h3></a> | <a href="http://opengamestudio.org/osg-sample.html"><h3 class="article-title">OpenSceneGraph sample</h3></a> | ||||
<h6 class="subheader" title="2017-05-12T00:00:00+03:00">Пт 12 Май 2017 | <h6 class="subheader" title="2017-05-12T00:00:00+03:00">Пт 12 Май 2017 | ||||
@@ -226,27 +245,6 @@ We have conducted ...</p><p class="subheader">Category: <a href="http://opengame | |||||
<hr class="gradient"/> | <hr class="gradient"/> | ||||
</article> | </article> | ||||
<article> | |||||
<a href="http://opengamestudio.org/ogs-editor-0.10.html"><h3 class="article-title">OGS Editor 0.10 and live session materials</h3></a> | |||||
<h6 class="subheader" title="2016-10-03T00:00:00+03:00">Пн 03 Октябрь 2016 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/ogs-editor-0.10-ru.html">ru</a> | |||||
</h6><p><img alt="ogs-editor-0.10" src="http://opengamestudio.org/2016-10-03_ogs-editor-0.10.png" /></p> | |||||
<p>Note: we won't release 0.10 for macOS due to technical difficulties with the build system. macOS support will be back for 0.11.</p> | |||||
<ul> | |||||
<li><strong>OGS Editor 0.10</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/51_2016-10-01_06-39-48_0.10.0/">is available at SourceForge</a>. Simply unpack the archive and launch the run script.</li> | |||||
<li><strong>Mahjong Solitaire game</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Games/MahjongSolitaire/">is available at SourceForge</a>, too ...</li></ul><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/ogs-editor-0.10.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<!-- /#posts-list --> | <!-- /#posts-list --> | ||||
<div class="pagination-centered"> | <div class="pagination-centered"> | ||||
<h6 class="subheader">Page 2 of 4</h6> | <h6 class="subheader">Page 2 of 4</h6> | ||||
@@ -48,6 +48,27 @@ | |||||
<article> | |||||
<a href="http://opengamestudio.org/ogs-editor-0.10.html"><h3 class="article-title">OGS Editor 0.10 and live session materials</h3></a> | |||||
<h6 class="subheader" title="2016-10-03T00:00:00+03:00">Пн 03 Октябрь 2016 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/ogs-editor-0.10-ru.html">ru</a> | |||||
</h6><p><img alt="ogs-editor-0.10" src="http://opengamestudio.org/2016-10-03_ogs-editor-0.10.png" /></p> | |||||
<p>Note: we won't release 0.10 for macOS due to technical difficulties with the build system. macOS support will be back for 0.11.</p> | |||||
<ul> | |||||
<li><strong>OGS Editor 0.10</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/51_2016-10-01_06-39-48_0.10.0/">is available at SourceForge</a>. Simply unpack the archive and launch the run script.</li> | |||||
<li><strong>Mahjong Solitaire game</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Games/MahjongSolitaire/">is available at SourceForge</a>, too ...</li></ul><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/ogs-editor-0.10.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<article> | <article> | ||||
<a href="http://opengamestudio.org/yesterdays-live-session-short-overview.html"><h3 class="article-title">A few words about live session yesterday</h3></a> | <a href="http://opengamestudio.org/yesterdays-live-session-short-overview.html"><h3 class="article-title">A few words about live session yesterday</h3></a> | ||||
<h6 class="subheader" title="2016-09-26T00:00:00+03:00">Пн 26 Сентябрь 2016 | <h6 class="subheader" title="2016-09-26T00:00:00+03:00">Пн 26 Сентябрь 2016 | ||||
@@ -218,30 +239,6 @@ It's time to create simple Mahjong solitaire game.</p><p class="subheader">Categ | |||||
<hr class="gradient"/> | <hr class="gradient"/> | ||||
</article> | </article> | ||||
<article> | |||||
<a href="http://opengamestudio.org/rolling-ball.html"><h3 class="article-title">"Rolling ball" live session videos and downloads</h3></a> | |||||
<h6 class="subheader" title="2016-02-10T00:00:00+03:00">Ср 10 Февраль 2016 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/rolling-ball-ru.html">ru</a> | |||||
</h6><p>Since we held 2 live sessions to create "Rolling ball" game, here are 2 YouTube videos of the process:</p> | |||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/70Jny1xJxK8" frameborder="0" allowfullscreen></iframe> | |||||
<iframe width="560" height="315" src="http://www.youtube.com/embed/851IlFT7y18" frameborder="0" allowfullscreen></iframe> | |||||
<p>"Rolling ball" game for Linux (Debian based), OS X (10.9+), Windows <a title="SourceForge" href="http://sourceforge.net/projects/osrpgcreation/files/Games/RollingBall/">is available at SourceForge</a>. | |||||
Simply unpack it and launch the run script.</p> | |||||
<p>Editor 0.8 <a title="SourceForge" href="http://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/46_2016-01-30_22-20-41_0.8.0/">is available at SourceForge ...</a></p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/rolling-ball.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<!-- /#posts-list --> | <!-- /#posts-list --> | ||||
<div class="pagination-centered"> | <div class="pagination-centered"> | ||||
<h6 class="subheader">Page 3 of 4</h6> | <h6 class="subheader">Page 3 of 4</h6> | ||||
@@ -48,6 +48,30 @@ | |||||
<article> | |||||
<a href="http://opengamestudio.org/rolling-ball.html"><h3 class="article-title">"Rolling ball" live session videos and downloads</h3></a> | |||||
<h6 class="subheader" title="2016-02-10T00:00:00+03:00">Ср 10 Февраль 2016 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/rolling-ball-ru.html">ru</a> | |||||
</h6><p>Since we held 2 live sessions to create "Rolling ball" game, here are 2 YouTube videos of the process:</p> | |||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/70Jny1xJxK8" frameborder="0" allowfullscreen></iframe> | |||||
<iframe width="560" height="315" src="http://www.youtube.com/embed/851IlFT7y18" frameborder="0" allowfullscreen></iframe> | |||||
<p>"Rolling ball" game for Linux (Debian based), OS X (10.9+), Windows <a title="SourceForge" href="http://sourceforge.net/projects/osrpgcreation/files/Games/RollingBall/">is available at SourceForge</a>. | |||||
Simply unpack it and launch the run script.</p> | |||||
<p>Editor 0.8 <a title="SourceForge" href="http://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/46_2016-01-30_22-20-41_0.8.0/">is available at SourceForge ...</a></p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/rolling-ball.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<article> | <article> | ||||
<a href="http://opengamestudio.org/rolling-ball-live-session-pt2.html"><h3 class="article-title">Game creation live session (part 2): 7 February 2016</h3></a> | <a href="http://opengamestudio.org/rolling-ball-live-session-pt2.html"><h3 class="article-title">Game creation live session (part 2): 7 February 2016</h3></a> | ||||
<h6 class="subheader" title="2016-02-02T00:00:00+03:00">Вт 02 Февраль 2016 | <h6 class="subheader" title="2016-02-02T00:00:00+03:00">Вт 02 Февраль 2016 | ||||
@@ -47,6 +47,67 @@ | |||||
<article> | |||||
<a href="http://opengamestudio.org/example-driven-development.html"><h3 class="article-title">Example-driven development</h3></a> | |||||
<h6 class="subheader" title="2018-06-27T00:00:00+03:00">Ср 27 Июнь 2018 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/example-driven-development-ru.html">ru</a> | |||||
</h6><p><img alt="Screenshot" src="http://opengamestudio.org/2018-06-27-example-driven-development.png" /></p> | |||||
<p>This article explains how the third OpenSceneGraph cross-platform example | |||||
opened our eyes to example-driven development.</p> | |||||
<p><strong>The third OpenSceneGraph cross-platform example</strong></p> | |||||
<p>The third OpenSceneGraph cross-platform example explains how to implement | |||||
<a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/03.RemoteDebugging">remote debugging across platforms</a>. This example is less about | |||||
OpenSceneGraph and more about different platforms.</p> | |||||
<p>Remote anything nowadays assumes the use of HTTP(s) over TCP/IP. Thus, the | |||||
first idea was to embed HTTP server into an application and let HTTP clients | |||||
interact with the server. However, serving HTTP across all platforms is | |||||
complicated:</p> | |||||
<ul> | |||||
<li>desktops have firewalls</li> | |||||
<li>mobiles have restrictions on background processes</li> | |||||
<li>web browsers are HTTP clients by design</li> | |||||
</ul> | |||||
<p>That's why we decided to create a mediator between debugged application and UI. | |||||
<a href="https://github.com/OGStudio/debug-broker">Debug broker</a>, a small Node.js application, became that mediator. | |||||
Debug broker uses no external dependencies, so it's easy to run virtually | |||||
anywhere. Also, since debug broker is a server application, you can configure | |||||
it once and use it for any number of applications.</p> | |||||
<p>Both <a href="https://github.com/OGStudio/debug-ui">debug UI</a> and <a href="https://github.com/OGStudio/debug-broker">debug broker</a> use JavaScript | |||||
because we wanted these tools to be accessible from anywhere with no prior | |||||
installation. This decision limited us to web browser solution. Providing | |||||
any sort of desktop application would incur additional installation and | |||||
maintenance effort, which would only complicate the tools.</p> | |||||
<p><strong>Example-driven development establishment</strong></p> | |||||
<p>Once the third example was implemented, we realized how important and | |||||
beneficial it is to develop new features outside the main project:</p> | |||||
<ul> | |||||
<li>the main project is freed from excessive commit noise</li> | |||||
<li>a new feature is publicly shared for everyone to learn, criticize, and improve</li> | |||||
</ul> | |||||
<p>When we publicly share our knowledge:</p> | |||||
<ul> | |||||
<li>we must create documentation for everyone (including ourselves later) to understand what's going on</li> | |||||
<li>we must not use hacks because that would break your trust in us</li> | |||||
</ul> | |||||
<p>From now on, all new features like input handling, Mahjong layout loading, | |||||
resource caching, etc. are going to be first implemented as examples. | |||||
We call this example-driven development.</p> | |||||
<p>That's it for explaining how the third OpenSceneGraph cross-platform example | |||||
opened our eyes to example-driven development.</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
</article> | |||||
<hr class="gradient"/> | |||||
<article> | <article> | ||||
<a href="http://opengamestudio.org/openscenegraph-examples.html"><h3 class="article-title">OpenSceneGraph cross-platform examples</h3></a> | <a href="http://opengamestudio.org/openscenegraph-examples.html"><h3 class="article-title">OpenSceneGraph cross-platform examples</h3></a> | ||||
<h6 class="subheader" title="2018-04-20T00:00:00+03:00">Пт 20 Апрель 2018 | <h6 class="subheader" title="2018-04-20T00:00:00+03:00">Пт 20 Апрель 2018 | ||||
@@ -58,35 +119,14 @@ cross-platform OpenSceneGraph examples.</p> | |||||
<p>By the time <a href="http://opengamestudio.org/mahjong-techdemo1-gameplay.html">the first technology demonstration of OGS Mahjong 2</a> | <p>By the time <a href="http://opengamestudio.org/mahjong-techdemo1-gameplay.html">the first technology demonstration of OGS Mahjong 2</a> | ||||
has been released, we've already had <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues/4">issue request</a> | has been released, we've already had <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues/4">issue request</a> | ||||
(to explain how to load images with OpenSceneGraph on Android) hanging for some | (to explain how to load images with OpenSceneGraph on Android) hanging for some | ||||
time. We considered creating a new tutorial for | |||||
<a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> at first. However, we realized | |||||
that it's time-consuming and excessive for such a tiny topic (compared to | |||||
what an average game has) as image loading. We decided to continue sharing our | |||||
knowledge in the form of concrete examples. That's how | |||||
<a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples">OpenSceneGraph cross-platform examples</a> were born.</p> | |||||
<p>Each example:</p> | |||||
<ul> | |||||
<li>explains crucial code necessary to perform a specific task</li> | |||||
<li>accents platform-specific nuances</li> | |||||
<li>provides implementations to cover desktop, mobile, and web platforms</li> | |||||
<li>provides a web build to showcase results</li> | |||||
</ul> | |||||
<p>The first two examples cover the following topics:</p> | |||||
<ul> | |||||
<li>Embed resource into executable: this greatly simplifies resource handling across platforms</li> | |||||
<li>Use PNG images with PNG plugins: this explains the requirements necessary to build and use PNG plugins</li> | |||||
</ul> | |||||
<p>We will be adding new examples as we proceed with OGS Mahjong 2 development.</p> | |||||
<p>That's it for summarizing the work we did to produce the first two cross-platform OpenSceneGraph examples.</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
time. We ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | </p> | ||||
</article> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/openscenegraph-examples.html">Read More</a> | |||||
<hr class="gradient"/> | <hr class="gradient"/> | ||||
</article> | |||||
@@ -271,25 +311,6 @@ In case you missed it, here ...</p><p class="subheader">Category: <a href="http: | |||||
<hr class="gradient"/> | <hr class="gradient"/> | ||||
</article> | </article> | ||||
<article> | |||||
<a href="http://opengamestudio.org/ios-tutorial.html"><h3 class="article-title">iOS tutorial</h3></a> | |||||
<h6 class="subheader" title="2017-06-08T10:00:00+03:00">Чт 08 Июнь 2017 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/ios-tutorial-ru.html">ru</a> | |||||
</h6><p><img alt="iOS tutorial" src="http://opengamestudio.org/2017-06-08-ios-refactoring.png" /></p> | |||||
<p>This article describes problems we faced during the creation of iOS tutorial in May 2017.</p> | |||||
<p><a href="https://twitter.com/OpenGameStudio/status/826816343433498627">This February</a> we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/ios-tutorial.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<!-- /#posts-list --> | <!-- /#posts-list --> | ||||
<div class="pagination-centered"> | <div class="pagination-centered"> | ||||
<h6 class="subheader">Page 1 of 4</h6> | <h6 class="subheader">Page 1 of 4</h6> | ||||
@@ -48,6 +48,25 @@ | |||||
<article> | |||||
<a href="http://opengamestudio.org/ios-tutorial.html"><h3 class="article-title">iOS tutorial</h3></a> | |||||
<h6 class="subheader" title="2017-06-08T10:00:00+03:00">Чт 08 Июнь 2017 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/ios-tutorial-ru.html">ru</a> | |||||
</h6><p><img alt="iOS tutorial" src="http://opengamestudio.org/2017-06-08-ios-refactoring.png" /></p> | |||||
<p>This article describes problems we faced during the creation of iOS tutorial in May 2017.</p> | |||||
<p><a href="https://twitter.com/OpenGameStudio/status/826816343433498627">This February</a> we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/ios-tutorial.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<article> | <article> | ||||
<a href="http://opengamestudio.org/osg-sample.html"><h3 class="article-title">OpenSceneGraph sample</h3></a> | <a href="http://opengamestudio.org/osg-sample.html"><h3 class="article-title">OpenSceneGraph sample</h3></a> | ||||
<h6 class="subheader" title="2017-05-12T00:00:00+03:00">Пт 12 Май 2017 | <h6 class="subheader" title="2017-05-12T00:00:00+03:00">Пт 12 Май 2017 | ||||
@@ -226,27 +245,6 @@ We have conducted ...</p><p class="subheader">Category: <a href="http://opengame | |||||
<hr class="gradient"/> | <hr class="gradient"/> | ||||
</article> | </article> | ||||
<article> | |||||
<a href="http://opengamestudio.org/ogs-editor-0.10.html"><h3 class="article-title">OGS Editor 0.10 and live session materials</h3></a> | |||||
<h6 class="subheader" title="2016-10-03T00:00:00+03:00">Пн 03 Октябрь 2016 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/ogs-editor-0.10-ru.html">ru</a> | |||||
</h6><p><img alt="ogs-editor-0.10" src="http://opengamestudio.org/2016-10-03_ogs-editor-0.10.png" /></p> | |||||
<p>Note: we won't release 0.10 for macOS due to technical difficulties with the build system. macOS support will be back for 0.11.</p> | |||||
<ul> | |||||
<li><strong>OGS Editor 0.10</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/51_2016-10-01_06-39-48_0.10.0/">is available at SourceForge</a>. Simply unpack the archive and launch the run script.</li> | |||||
<li><strong>Mahjong Solitaire game</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Games/MahjongSolitaire/">is available at SourceForge</a>, too ...</li></ul><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/ogs-editor-0.10.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<!-- /#posts-list --> | <!-- /#posts-list --> | ||||
<div class="pagination-centered"> | <div class="pagination-centered"> | ||||
<h6 class="subheader">Page 2 of 4</h6> | <h6 class="subheader">Page 2 of 4</h6> | ||||
@@ -48,6 +48,27 @@ | |||||
<article> | |||||
<a href="http://opengamestudio.org/ogs-editor-0.10.html"><h3 class="article-title">OGS Editor 0.10 and live session materials</h3></a> | |||||
<h6 class="subheader" title="2016-10-03T00:00:00+03:00">Пн 03 Октябрь 2016 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/ogs-editor-0.10-ru.html">ru</a> | |||||
</h6><p><img alt="ogs-editor-0.10" src="http://opengamestudio.org/2016-10-03_ogs-editor-0.10.png" /></p> | |||||
<p>Note: we won't release 0.10 for macOS due to technical difficulties with the build system. macOS support will be back for 0.11.</p> | |||||
<ul> | |||||
<li><strong>OGS Editor 0.10</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/51_2016-10-01_06-39-48_0.10.0/">is available at SourceForge</a>. Simply unpack the archive and launch the run script.</li> | |||||
<li><strong>Mahjong Solitaire game</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Games/MahjongSolitaire/">is available at SourceForge</a>, too ...</li></ul><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/ogs-editor-0.10.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<article> | <article> | ||||
<a href="http://opengamestudio.org/yesterdays-live-session-short-overview.html"><h3 class="article-title">A few words about live session yesterday</h3></a> | <a href="http://opengamestudio.org/yesterdays-live-session-short-overview.html"><h3 class="article-title">A few words about live session yesterday</h3></a> | ||||
<h6 class="subheader" title="2016-09-26T00:00:00+03:00">Пн 26 Сентябрь 2016 | <h6 class="subheader" title="2016-09-26T00:00:00+03:00">Пн 26 Сентябрь 2016 | ||||
@@ -218,30 +239,6 @@ It's time to create simple Mahjong solitaire game.</p><p class="subheader">Categ | |||||
<hr class="gradient"/> | <hr class="gradient"/> | ||||
</article> | </article> | ||||
<article> | |||||
<a href="http://opengamestudio.org/rolling-ball.html"><h3 class="article-title">"Rolling ball" live session videos and downloads</h3></a> | |||||
<h6 class="subheader" title="2016-02-10T00:00:00+03:00">Ср 10 Февраль 2016 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/rolling-ball-ru.html">ru</a> | |||||
</h6><p>Since we held 2 live sessions to create "Rolling ball" game, here are 2 YouTube videos of the process:</p> | |||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/70Jny1xJxK8" frameborder="0" allowfullscreen></iframe> | |||||
<iframe width="560" height="315" src="http://www.youtube.com/embed/851IlFT7y18" frameborder="0" allowfullscreen></iframe> | |||||
<p>"Rolling ball" game for Linux (Debian based), OS X (10.9+), Windows <a title="SourceForge" href="http://sourceforge.net/projects/osrpgcreation/files/Games/RollingBall/">is available at SourceForge</a>. | |||||
Simply unpack it and launch the run script.</p> | |||||
<p>Editor 0.8 <a title="SourceForge" href="http://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/46_2016-01-30_22-20-41_0.8.0/">is available at SourceForge ...</a></p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/rolling-ball.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<!-- /#posts-list --> | <!-- /#posts-list --> | ||||
<div class="pagination-centered"> | <div class="pagination-centered"> | ||||
<h6 class="subheader">Page 3 of 4</h6> | <h6 class="subheader">Page 3 of 4</h6> | ||||
@@ -48,6 +48,30 @@ | |||||
<article> | |||||
<a href="http://opengamestudio.org/rolling-ball.html"><h3 class="article-title">"Rolling ball" live session videos and downloads</h3></a> | |||||
<h6 class="subheader" title="2016-02-10T00:00:00+03:00">Ср 10 Февраль 2016 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/rolling-ball-ru.html">ru</a> | |||||
</h6><p>Since we held 2 live sessions to create "Rolling ball" game, here are 2 YouTube videos of the process:</p> | |||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/70Jny1xJxK8" frameborder="0" allowfullscreen></iframe> | |||||
<iframe width="560" height="315" src="http://www.youtube.com/embed/851IlFT7y18" frameborder="0" allowfullscreen></iframe> | |||||
<p>"Rolling ball" game for Linux (Debian based), OS X (10.9+), Windows <a title="SourceForge" href="http://sourceforge.net/projects/osrpgcreation/files/Games/RollingBall/">is available at SourceForge</a>. | |||||
Simply unpack it and launch the run script.</p> | |||||
<p>Editor 0.8 <a title="SourceForge" href="http://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/46_2016-01-30_22-20-41_0.8.0/">is available at SourceForge ...</a></p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/rolling-ball.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<article> | <article> | ||||
<a href="http://opengamestudio.org/rolling-ball-live-session-pt2.html"><h3 class="article-title">Game creation live session (part 2): 7 February 2016</h3></a> | <a href="http://opengamestudio.org/rolling-ball-live-session-pt2.html"><h3 class="article-title">Game creation live session (part 2): 7 February 2016</h3></a> | ||||
<h6 class="subheader" title="2016-02-02T00:00:00+03:00">Вт 02 Февраль 2016 | <h6 class="subheader" title="2016-02-02T00:00:00+03:00">Вт 02 Февраль 2016 | ||||
@@ -0,0 +1,174 @@ | |||||
<!DOCTYPE html> | |||||
<head> | |||||
<meta charset="utf-8" /> | |||||
<!-- Set the viewport width to device width for mobile --> | |||||
<meta name="viewport" content="width=device-width" /> | |||||
<title>Разработка через создание примеров</title> | |||||
<link rel="stylesheet" href="http://opengamestudio.org/theme/css/normalize.css" /> | |||||
<link rel="stylesheet" href="http://opengamestudio.org/theme/css/foundation.min.css" /> | |||||
<link rel="stylesheet" href="http://opengamestudio.org/theme/css/style.css" /> | |||||
<link rel="stylesheet" href="http://opengamestudio.org/theme/css/pygments.css" /> | |||||
<script src="http://opengamestudio.org/theme/js/custom.modernizr.js"></script> | |||||
<!-- So Firefox can bookmark->"abo this site" --> | |||||
<link href="feeds/all.atom.xml" rel="alternate" title="Opensource Game Studio" type="application/atom+xml"> | |||||
</head> | |||||
<body> | |||||
<!-- Nav Bar --> | |||||
<nav> | |||||
<!-- Show menu items and pages --> | |||||
<div class="row"> | |||||
<div class="large-12 columns top-bar"> | |||||
<h1><a href="http://opengamestudio.org">Opensource Game Studio</a></h1> | |||||
</div> | |||||
</div> | |||||
<div class="row top-menu"> | |||||
<div class="large-12 columns"> | |||||
<a href="/pages/projects.html" class="menu-button secondary">Projects</a> | |||||
<a href="/pages/about.html" class="menu-button secondary">About</a> | |||||
</div> | |||||
</div> | |||||
</nav> | |||||
<!-- End Nav --> | |||||
<!-- Main Page Content and Sidebar --> | |||||
<div class="row"> | |||||
<!-- Main Blog Content --> | |||||
<div class="large-9 columns"> | |||||
<article> | |||||
<header> | |||||
<h3 class="article-title"><a href="http://opengamestudio.org/example-driven-development-ru.html" rel="bookmark" | |||||
title="Permalink to Разработка через создание примеров">Разработка через создание примеров</a></h3> | |||||
</header> | |||||
<h6 class="subheader" title="2018-06-27T00:00:00+03:00">Ср 27 Июнь 2018 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/example-driven-development.html">en</a> | |||||
</h6> <p><img alt="Screenshot" src="http://opengamestudio.org/2018-06-27-example-driven-development.png" /></p> | |||||
<p>Эта статья описывает то, как создание третьего кросс-платформенного примера | |||||
OpenSceneGraph привело нас к разработке через создание примеров.</p> | |||||
<p><strong>Третий кросс-платформенный пример OpenSceneGraph</strong></p> | |||||
<p>Третий кросс-платформенный пример OpenSceneGraph содержит реализацию | |||||
<a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/03.RemoteDebugging">удалённой отладки, работающей на всех поддерживаемых платформах</a>. | |||||
Этот пример относится не столько к OpenSceneGraph, сколько к поддержке | |||||
различных платформ.</p> | |||||
<p>Удалённое взаимодействие ныне предполагает использование HTTP(s) поверх | |||||
TCP/IP. Таким образом, первая идея реализации подразумевала встраивание сервера | |||||
HTTP в приложение, чтобы клиенты HTTP могли взаимодействовать с этим сервером. | |||||
Однако, раздача HTTP на различных платформах имеет свои сложности:</p> | |||||
<ul> | |||||
<li>на десктопах есть межсетевые экраны (firewalls)</li> | |||||
<li>на мобилках есть ограничения по работе фоновых процессов</li> | |||||
<li>веб-браузеры являются клиентами HTTP по дизайну</li> | |||||
</ul> | |||||
<p>Эти ограничения подтолкнули нас к созданию посредника между отлаживаемым | |||||
приложением и пользовательским интерфейсом отладки. | |||||
<a href="https://github.com/OGStudio/debug-broker">Брокер отладки</a>, небольшое приложение Node.js, стало тем самым | |||||
посредником. Брокер отладки не имеет внешних зависимостей, поэтому его легко | |||||
использовать практически везде. Благодаря тому, что брокер отладки - это | |||||
серверное приложение, его достаточно настроить лишь раз и использовать для | |||||
любого количества приложений.</p> | |||||
<p>И <a href="https://github.com/OGStudio/debug-ui">пользовательский интерфейс отладки</a>, | |||||
и <a href="https://github.com/OGStudio/debug-broker">брокер отладки</a> используют JavaScript, т.к. мы хотели сделать | |||||
эти инструменты максимально доступными без предварительной установки. Данное | |||||
решение привело нас к реализации инструментов именно для веб-браузеров. | |||||
Десктопное приложение потребовало бы дополнительных усилий на установку и | |||||
поддержку, что лишь усложнило бы работу с инструментами.</p> | |||||
<p><strong>Разработка через создание примеров</strong></p> | |||||
<p>После создания третьего примера мы осознали важность и достоинства разработки | |||||
новых функций вне основного проекта:</p> | |||||
<ul> | |||||
<li>освобождение основного проекта от шума изменений (commit noise)</li> | |||||
<li>публичное освещение новой функции приглашает всех к её изучению, критике и улучшению</li> | |||||
</ul> | |||||
<p>Когда мы делимся нашими знаниями:</p> | |||||
<ul> | |||||
<li>мы обязаны создавать документацию, объясняющую происходящее (в том числе для нас самих позже)</li> | |||||
<li>мы обязаны сторониться непродуманных решений, т.к. они повредят нашей репутации</li> | |||||
</ul> | |||||
<p>С этого момента все новые функции вроде обработки ввода, загрузки раскладок | |||||
Маджонга, кэширования ресурсов и т.п. мы будем сначала реализовывать в виде | |||||
примеров. Мы называем этот подход разработкой через создание примеров.</p> | |||||
<p>На этом мы заканчиваем описание того, как создание третьего | |||||
кросс-платформенного примера OpenSceneGraph привело нас к разработке через | |||||
создание примеров.</p> | |||||
<p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
</article> | |||||
</div> | |||||
<!-- End Main Content --> | |||||
<!-- Sidebar --> | |||||
<aside class="large-3 columns"> | |||||
<!--k | |||||
<h5 class="sidebar-title">Site</h5> | |||||
<ul class="side-nav"> | |||||
<li><a href="http://opengamestudio.org/archives.html">Archives</a> | |||||
<li><a href="http://opengamestudio.org/tags.html">Tags</a> | |||||
<li><a href="http://opengamestudio.org/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||||
</ul> | |||||
<h5 class="sidebar-title">Categories</h5> | |||||
<ul class="side-nav"> | |||||
<li><a href="http://opengamestudio.org/category/news.html">News</a></li> | |||||
</ul> | |||||
--> | |||||
<h5 class="sidebar-title">Ads</h5> | |||||
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> | |||||
<!-- ogs2 --> | |||||
<ins class="adsbygoogle" | |||||
style="display:block" | |||||
data-ad-client="ca-pub-4473792248813084" | |||||
data-ad-slot="9024247127" | |||||
data-ad-format="auto"></ins> | |||||
<script> | |||||
(adsbygoogle = window.adsbygoogle || []).push({}); | |||||
</script> | |||||
</aside> <!-- End Sidebar --> | |||||
</div> <!-- End Main Content and Sidebar --> | |||||
<!-- Footer --> | |||||
<footer class="row"> | |||||
<div class="large-12 columns"> | |||||
<hr /> | |||||
<div class="row"> | |||||
<div class="large-7 columns"> | |||||
<p>Proudly powered by <a href="http://getpelican.com">Pelican</a>, which takes great advantage of <a href="http://python.org">Python</a>.</p> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<script type="text/javascript"> | |||||
var _gaq = _gaq || []; | |||||
_gaq.push(['_setAccount', 'UA-3773114-1']); | |||||
_gaq.push(['_trackPageview']); | |||||
(function() { | |||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; | |||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; | |||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); | |||||
})(); | |||||
</script> | |||||
</footer> |
@@ -0,0 +1,169 @@ | |||||
<!DOCTYPE html> | |||||
<head> | |||||
<meta charset="utf-8" /> | |||||
<!-- Set the viewport width to device width for mobile --> | |||||
<meta name="viewport" content="width=device-width" /> | |||||
<title>Example-driven development</title> | |||||
<link rel="stylesheet" href="http://opengamestudio.org/theme/css/normalize.css" /> | |||||
<link rel="stylesheet" href="http://opengamestudio.org/theme/css/foundation.min.css" /> | |||||
<link rel="stylesheet" href="http://opengamestudio.org/theme/css/style.css" /> | |||||
<link rel="stylesheet" href="http://opengamestudio.org/theme/css/pygments.css" /> | |||||
<script src="http://opengamestudio.org/theme/js/custom.modernizr.js"></script> | |||||
<!-- So Firefox can bookmark->"abo this site" --> | |||||
<link href="feeds/all.atom.xml" rel="alternate" title="Opensource Game Studio" type="application/atom+xml"> | |||||
</head> | |||||
<body> | |||||
<!-- Nav Bar --> | |||||
<nav> | |||||
<!-- Show menu items and pages --> | |||||
<div class="row"> | |||||
<div class="large-12 columns top-bar"> | |||||
<h1><a href="http://opengamestudio.org">Opensource Game Studio</a></h1> | |||||
</div> | |||||
</div> | |||||
<div class="row top-menu"> | |||||
<div class="large-12 columns"> | |||||
<a href="/pages/projects.html" class="menu-button secondary">Projects</a> | |||||
<a href="/pages/about.html" class="menu-button secondary">About</a> | |||||
</div> | |||||
</div> | |||||
</nav> | |||||
<!-- End Nav --> | |||||
<!-- Main Page Content and Sidebar --> | |||||
<div class="row"> | |||||
<!-- Main Blog Content --> | |||||
<div class="large-9 columns"> | |||||
<article> | |||||
<header> | |||||
<h3 class="article-title"><a href="http://opengamestudio.org/example-driven-development.html" rel="bookmark" | |||||
title="Permalink to Example-driven development">Example-driven development</a></h3> | |||||
</header> | |||||
<h6 class="subheader" title="2018-06-27T00:00:00+03:00">Ср 27 Июнь 2018 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/example-driven-development-ru.html">ru</a> | |||||
</h6> <p><img alt="Screenshot" src="http://opengamestudio.org/2018-06-27-example-driven-development.png" /></p> | |||||
<p>This article explains how the third OpenSceneGraph cross-platform example | |||||
opened our eyes to example-driven development.</p> | |||||
<p><strong>The third OpenSceneGraph cross-platform example</strong></p> | |||||
<p>The third OpenSceneGraph cross-platform example explains how to implement | |||||
<a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/03.RemoteDebugging">remote debugging across platforms</a>. This example is less about | |||||
OpenSceneGraph and more about different platforms.</p> | |||||
<p>Remote anything nowadays assumes the use of HTTP(s) over TCP/IP. Thus, the | |||||
first idea was to embed HTTP server into an application and let HTTP clients | |||||
interact with the server. However, serving HTTP across all platforms is | |||||
complicated:</p> | |||||
<ul> | |||||
<li>desktops have firewalls</li> | |||||
<li>mobiles have restrictions on background processes</li> | |||||
<li>web browsers are HTTP clients by design</li> | |||||
</ul> | |||||
<p>That's why we decided to create a mediator between debugged application and UI. | |||||
<a href="https://github.com/OGStudio/debug-broker">Debug broker</a>, a small Node.js application, became that mediator. | |||||
Debug broker uses no external dependencies, so it's easy to run virtually | |||||
anywhere. Also, since debug broker is a server application, you can configure | |||||
it once and use it for any number of applications.</p> | |||||
<p>Both <a href="https://github.com/OGStudio/debug-ui">debug UI</a> and <a href="https://github.com/OGStudio/debug-broker">debug broker</a> use JavaScript | |||||
because we wanted these tools to be accessible from anywhere with no prior | |||||
installation. This decision limited us to web browser solution. Providing | |||||
any sort of desktop application would incur additional installation and | |||||
maintenance effort, which would only complicate the tools.</p> | |||||
<p><strong>Example-driven development establishment</strong></p> | |||||
<p>Once the third example was implemented, we realized how important and | |||||
beneficial it is to develop new features outside the main project:</p> | |||||
<ul> | |||||
<li>the main project is freed from excessive commit noise</li> | |||||
<li>a new feature is publicly shared for everyone to learn, criticize, and improve</li> | |||||
</ul> | |||||
<p>When we publicly share our knowledge:</p> | |||||
<ul> | |||||
<li>we must create documentation for everyone (including ourselves later) to understand what's going on</li> | |||||
<li>we must not use hacks because that would break your trust in us</li> | |||||
</ul> | |||||
<p>From now on, all new features like input handling, Mahjong layout loading, | |||||
resource caching, etc. are going to be first implemented as examples. | |||||
We call this example-driven development.</p> | |||||
<p>That's it for explaining how the third OpenSceneGraph cross-platform example | |||||
opened our eyes to example-driven development.</p> | |||||
<p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
</article> | |||||
</div> | |||||
<!-- End Main Content --> | |||||
<!-- Sidebar --> | |||||
<aside class="large-3 columns"> | |||||
<!--k | |||||
<h5 class="sidebar-title">Site</h5> | |||||
<ul class="side-nav"> | |||||
<li><a href="http://opengamestudio.org/archives.html">Archives</a> | |||||
<li><a href="http://opengamestudio.org/tags.html">Tags</a> | |||||
<li><a href="http://opengamestudio.org/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||||
</ul> | |||||
<h5 class="sidebar-title">Categories</h5> | |||||
<ul class="side-nav"> | |||||
<li><a href="http://opengamestudio.org/category/news.html">News</a></li> | |||||
</ul> | |||||
--> | |||||
<h5 class="sidebar-title">Ads</h5> | |||||
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> | |||||
<!-- ogs2 --> | |||||
<ins class="adsbygoogle" | |||||
style="display:block" | |||||
data-ad-client="ca-pub-4473792248813084" | |||||
data-ad-slot="9024247127" | |||||
data-ad-format="auto"></ins> | |||||
<script> | |||||
(adsbygoogle = window.adsbygoogle || []).push({}); | |||||
</script> | |||||
</aside> <!-- End Sidebar --> | |||||
</div> <!-- End Main Content and Sidebar --> | |||||
<!-- Footer --> | |||||
<footer class="row"> | |||||
<div class="large-12 columns"> | |||||
<hr /> | |||||
<div class="row"> | |||||
<div class="large-7 columns"> | |||||
<p>Proudly powered by <a href="http://getpelican.com">Pelican</a>, which takes great advantage of <a href="http://python.org">Python</a>.</p> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<script type="text/javascript"> | |||||
var _gaq = _gaq || []; | |||||
_gaq.push(['_setAccount', 'UA-3773114-1']); | |||||
_gaq.push(['_trackPageview']); | |||||
(function() { | |||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; | |||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; | |||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); | |||||
})(); | |||||
</script> | |||||
</footer> |
@@ -1,5 +1,94 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||
<feed xmlns="http://www.w3.org/2005/Atom"><title>Opensource Game Studio</title><link href="http://opengamestudio.org/" rel="alternate"></link><link href="http://opengamestudio.org/feeds/all.atom.xml" rel="self"></link><id>http://opengamestudio.org/</id><updated>2018-04-20T00:00:00+03:00</updated><entry><title>OpenSceneGraph cross-platform examples</title><link href="http://opengamestudio.org/openscenegraph-examples.html" rel="alternate"></link><updated>2018-04-20T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2018-04-20:openscenegraph-examples.html</id><summary type="html"><p><img alt="Screenshot" src="http://opengamestudio.org/2018-04-20-openscenegraph-examples.png" /></p> | |||||
<feed xmlns="http://www.w3.org/2005/Atom"><title>Opensource Game Studio</title><link href="http://opengamestudio.org/" rel="alternate"></link><link href="http://opengamestudio.org/feeds/all.atom.xml" rel="self"></link><id>http://opengamestudio.org/</id><updated>2018-06-27T00:00:00+03:00</updated><entry><title>Example-driven development</title><link href="http://opengamestudio.org/example-driven-development.html" rel="alternate"></link><updated>2018-06-27T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2018-06-27:example-driven-development.html</id><summary type="html"><p><img alt="Screenshot" src="http://opengamestudio.org/2018-06-27-example-driven-development.png" /></p> | |||||
<p>This article explains how the third OpenSceneGraph cross-platform example | |||||
opened our eyes to example-driven development.</p> | |||||
<p><strong>The third OpenSceneGraph cross-platform example</strong></p> | |||||
<p>The third OpenSceneGraph cross-platform example explains how to implement | |||||
<a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/03.RemoteDebugging">remote debugging across platforms</a>. This example is less about | |||||
OpenSceneGraph and more about different platforms.</p> | |||||
<p>Remote anything nowadays assumes the use of HTTP(s) over TCP/IP. Thus, the | |||||
first idea was to embed HTTP server into an application and let HTTP clients | |||||
interact with the server. However, serving HTTP across all platforms is | |||||
complicated:</p> | |||||
<ul> | |||||
<li>desktops have firewalls</li> | |||||
<li>mobiles have restrictions on background processes</li> | |||||
<li>web browsers are HTTP clients by design</li> | |||||
</ul> | |||||
<p>That's why we decided to create a mediator between debugged application and UI. | |||||
<a href="https://github.com/OGStudio/debug-broker">Debug broker</a>, a small Node.js application, became that mediator. | |||||
Debug broker uses no external dependencies, so it's easy to run virtually | |||||
anywhere. Also, since debug broker is a server application, you can configure | |||||
it once and use it for any number of applications.</p> | |||||
<p>Both <a href="https://github.com/OGStudio/debug-ui">debug UI</a> and <a href="https://github.com/OGStudio/debug-broker">debug broker</a> use JavaScript | |||||
because we wanted these tools to be accessible from anywhere with no prior | |||||
installation. This decision limited us to web browser solution. Providing | |||||
any sort of desktop application would incur additional installation and | |||||
maintenance effort, which would only complicate the tools.</p> | |||||
<p><strong>Example-driven development establishment</strong></p> | |||||
<p>Once the third example was implemented, we realized how important and | |||||
beneficial it is to develop new features outside the main project:</p> | |||||
<ul> | |||||
<li>the main project is freed from excessive commit noise</li> | |||||
<li>a new feature is publicly shared for everyone to learn, criticize, and improve</li> | |||||
</ul> | |||||
<p>When we publicly share our knowledge:</p> | |||||
<ul> | |||||
<li>we must create documentation for everyone (including ourselves later) to understand what's going on</li> | |||||
<li>we must not use hacks because that would break your trust in us</li> | |||||
</ul> | |||||
<p>From now on, all new features like input handling, Mahjong layout loading, | |||||
resource caching, etc. are going to be first implemented as examples. | |||||
We call this example-driven development.</p> | |||||
<p>That's it for explaining how the third OpenSceneGraph cross-platform example | |||||
opened our eyes to example-driven development.</p></summary></entry><entry><title>Разработка через создание примеров</title><link href="http://opengamestudio.org/example-driven-development-ru.html" rel="alternate"></link><updated>2018-06-27T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2018-06-27:example-driven-development-ru.html</id><summary type="html"><p><img alt="Screenshot" src="http://opengamestudio.org/2018-06-27-example-driven-development.png" /></p> | |||||
<p>Эта статья описывает то, как создание третьего кросс-платформенного примера | |||||
OpenSceneGraph привело нас к разработке через создание примеров.</p> | |||||
<p><strong>Третий кросс-платформенный пример OpenSceneGraph</strong></p> | |||||
<p>Третий кросс-платформенный пример OpenSceneGraph содержит реализацию | |||||
<a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/03.RemoteDebugging">удалённой отладки, работающей на всех поддерживаемых платформах</a>. | |||||
Этот пример относится не столько к OpenSceneGraph, сколько к поддержке | |||||
различных платформ.</p> | |||||
<p>Удалённое взаимодействие ныне предполагает использование HTTP(s) поверх | |||||
TCP/IP. Таким образом, первая идея реализации подразумевала встраивание сервера | |||||
HTTP в приложение, чтобы клиенты HTTP могли взаимодействовать с этим сервером. | |||||
Однако, раздача HTTP на различных платформах имеет свои сложности:</p> | |||||
<ul> | |||||
<li>на десктопах есть межсетевые экраны (firewalls)</li> | |||||
<li>на мобилках есть ограничения по работе фоновых процессов</li> | |||||
<li>веб-браузеры являются клиентами HTTP по дизайну</li> | |||||
</ul> | |||||
<p>Эти ограничения подтолкнули нас к созданию посредника между отлаживаемым | |||||
приложением и пользовательским интерфейсом отладки. | |||||
<a href="https://github.com/OGStudio/debug-broker">Брокер отладки</a>, небольшое приложение Node.js, стало тем самым | |||||
посредником. Брокер отладки не имеет внешних зависимостей, поэтому его легко | |||||
использовать практически везде. Благодаря тому, что брокер отладки - это | |||||
серверное приложение, его достаточно настроить лишь раз и использовать для | |||||
любого количества приложений.</p> | |||||
<p>И <a href="https://github.com/OGStudio/debug-ui">пользовательский интерфейс отладки</a>, | |||||
и <a href="https://github.com/OGStudio/debug-broker">брокер отладки</a> используют JavaScript, т.к. мы хотели сделать | |||||
эти инструменты максимально доступными без предварительной установки. Данное | |||||
решение привело нас к реализации инструментов именно для веб-браузеров. | |||||
Десктопное приложение потребовало бы дополнительных усилий на установку и | |||||
поддержку, что лишь усложнило бы работу с инструментами.</p> | |||||
<p><strong>Разработка через создание примеров</strong></p> | |||||
<p>После создания третьего примера мы осознали важность и достоинства разработки | |||||
новых функций вне основного проекта:</p> | |||||
<ul> | |||||
<li>освобождение основного проекта от шума изменений (commit noise)</li> | |||||
<li>публичное освещение новой функции приглашает всех к её изучению, критике и улучшению</li> | |||||
</ul> | |||||
<p>Когда мы делимся нашими знаниями:</p> | |||||
<ul> | |||||
<li>мы обязаны создавать документацию, объясняющую происходящее (в том числе для нас самих позже)</li> | |||||
<li>мы обязаны сторониться непродуманных решений, т.к. они повредят нашей репутации</li> | |||||
</ul> | |||||
<p>С этого момента все новые функции вроде обработки ввода, загрузки раскладок | |||||
Маджонга, кэширования ресурсов и т.п. мы будем сначала реализовывать в виде | |||||
примеров. Мы называем этот подход разработкой через создание примеров.</p> | |||||
<p>На этом мы заканчиваем описание того, как создание третьего | |||||
кросс-платформенного примера OpenSceneGraph привело нас к разработке через | |||||
создание примеров.</p></summary></entry><entry><title>OpenSceneGraph cross-platform examples</title><link href="http://opengamestudio.org/openscenegraph-examples.html" rel="alternate"></link><updated>2018-04-20T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2018-04-20:openscenegraph-examples.html</id><summary type="html"><p><img alt="Screenshot" src="http://opengamestudio.org/2018-04-20-openscenegraph-examples.png" /></p> | |||||
<p>This article summarizes the work we did to produce the first two | <p>This article summarizes the work we did to produce the first two | ||||
cross-platform OpenSceneGraph examples.</p> | cross-platform OpenSceneGraph examples.</p> | ||||
<p>By the time <a href="http://opengamestudio.org/mahjong-techdemo1-gameplay.html">the first technology demonstration of OGS Mahjong 2</a> | <p>By the time <a href="http://opengamestudio.org/mahjong-techdemo1-gameplay.html">the first technology demonstration of OGS Mahjong 2</a> | ||||
@@ -1,5 +1,47 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||
<feed xmlns="http://www.w3.org/2005/Atom"><title>Opensource Game Studio</title><link href="http://opengamestudio.org/" rel="alternate"></link><link href="http://opengamestudio.org/feeds/news.atom.xml" rel="self"></link><id>http://opengamestudio.org/</id><updated>2018-04-20T00:00:00+03:00</updated><entry><title>OpenSceneGraph cross-platform examples</title><link href="http://opengamestudio.org/openscenegraph-examples.html" rel="alternate"></link><updated>2018-04-20T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2018-04-20:openscenegraph-examples.html</id><summary type="html"><p><img alt="Screenshot" src="http://opengamestudio.org/2018-04-20-openscenegraph-examples.png" /></p> | |||||
<feed xmlns="http://www.w3.org/2005/Atom"><title>Opensource Game Studio</title><link href="http://opengamestudio.org/" rel="alternate"></link><link href="http://opengamestudio.org/feeds/news.atom.xml" rel="self"></link><id>http://opengamestudio.org/</id><updated>2018-06-27T00:00:00+03:00</updated><entry><title>Example-driven development</title><link href="http://opengamestudio.org/example-driven-development.html" rel="alternate"></link><updated>2018-06-27T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2018-06-27:example-driven-development.html</id><summary type="html"><p><img alt="Screenshot" src="http://opengamestudio.org/2018-06-27-example-driven-development.png" /></p> | |||||
<p>This article explains how the third OpenSceneGraph cross-platform example | |||||
opened our eyes to example-driven development.</p> | |||||
<p><strong>The third OpenSceneGraph cross-platform example</strong></p> | |||||
<p>The third OpenSceneGraph cross-platform example explains how to implement | |||||
<a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/03.RemoteDebugging">remote debugging across platforms</a>. This example is less about | |||||
OpenSceneGraph and more about different platforms.</p> | |||||
<p>Remote anything nowadays assumes the use of HTTP(s) over TCP/IP. Thus, the | |||||
first idea was to embed HTTP server into an application and let HTTP clients | |||||
interact with the server. However, serving HTTP across all platforms is | |||||
complicated:</p> | |||||
<ul> | |||||
<li>desktops have firewalls</li> | |||||
<li>mobiles have restrictions on background processes</li> | |||||
<li>web browsers are HTTP clients by design</li> | |||||
</ul> | |||||
<p>That's why we decided to create a mediator between debugged application and UI. | |||||
<a href="https://github.com/OGStudio/debug-broker">Debug broker</a>, a small Node.js application, became that mediator. | |||||
Debug broker uses no external dependencies, so it's easy to run virtually | |||||
anywhere. Also, since debug broker is a server application, you can configure | |||||
it once and use it for any number of applications.</p> | |||||
<p>Both <a href="https://github.com/OGStudio/debug-ui">debug UI</a> and <a href="https://github.com/OGStudio/debug-broker">debug broker</a> use JavaScript | |||||
because we wanted these tools to be accessible from anywhere with no prior | |||||
installation. This decision limited us to web browser solution. Providing | |||||
any sort of desktop application would incur additional installation and | |||||
maintenance effort, which would only complicate the tools.</p> | |||||
<p><strong>Example-driven development establishment</strong></p> | |||||
<p>Once the third example was implemented, we realized how important and | |||||
beneficial it is to develop new features outside the main project:</p> | |||||
<ul> | |||||
<li>the main project is freed from excessive commit noise</li> | |||||
<li>a new feature is publicly shared for everyone to learn, criticize, and improve</li> | |||||
</ul> | |||||
<p>When we publicly share our knowledge:</p> | |||||
<ul> | |||||
<li>we must create documentation for everyone (including ourselves later) to understand what's going on</li> | |||||
<li>we must not use hacks because that would break your trust in us</li> | |||||
</ul> | |||||
<p>From now on, all new features like input handling, Mahjong layout loading, | |||||
resource caching, etc. are going to be first implemented as examples. | |||||
We call this example-driven development.</p> | |||||
<p>That's it for explaining how the third OpenSceneGraph cross-platform example | |||||
opened our eyes to example-driven development.</p></summary></entry><entry><title>OpenSceneGraph cross-platform examples</title><link href="http://opengamestudio.org/openscenegraph-examples.html" rel="alternate"></link><updated>2018-04-20T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2018-04-20:openscenegraph-examples.html</id><summary type="html"><p><img alt="Screenshot" src="http://opengamestudio.org/2018-04-20-openscenegraph-examples.png" /></p> | |||||
<p>This article summarizes the work we did to produce the first two | <p>This article summarizes the work we did to produce the first two | ||||
cross-platform OpenSceneGraph examples.</p> | cross-platform OpenSceneGraph examples.</p> | ||||
<p>By the time <a href="http://opengamestudio.org/mahjong-techdemo1-gameplay.html">the first technology demonstration of OGS Mahjong 2</a> | <p>By the time <a href="http://opengamestudio.org/mahjong-techdemo1-gameplay.html">the first technology demonstration of OGS Mahjong 2</a> | ||||
@@ -47,6 +47,67 @@ | |||||
<article> | |||||
<a href="http://opengamestudio.org/example-driven-development.html"><h3 class="article-title">Example-driven development</h3></a> | |||||
<h6 class="subheader" title="2018-06-27T00:00:00+03:00">Ср 27 Июнь 2018 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/example-driven-development-ru.html">ru</a> | |||||
</h6><p><img alt="Screenshot" src="http://opengamestudio.org/2018-06-27-example-driven-development.png" /></p> | |||||
<p>This article explains how the third OpenSceneGraph cross-platform example | |||||
opened our eyes to example-driven development.</p> | |||||
<p><strong>The third OpenSceneGraph cross-platform example</strong></p> | |||||
<p>The third OpenSceneGraph cross-platform example explains how to implement | |||||
<a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/03.RemoteDebugging">remote debugging across platforms</a>. This example is less about | |||||
OpenSceneGraph and more about different platforms.</p> | |||||
<p>Remote anything nowadays assumes the use of HTTP(s) over TCP/IP. Thus, the | |||||
first idea was to embed HTTP server into an application and let HTTP clients | |||||
interact with the server. However, serving HTTP across all platforms is | |||||
complicated:</p> | |||||
<ul> | |||||
<li>desktops have firewalls</li> | |||||
<li>mobiles have restrictions on background processes</li> | |||||
<li>web browsers are HTTP clients by design</li> | |||||
</ul> | |||||
<p>That's why we decided to create a mediator between debugged application and UI. | |||||
<a href="https://github.com/OGStudio/debug-broker">Debug broker</a>, a small Node.js application, became that mediator. | |||||
Debug broker uses no external dependencies, so it's easy to run virtually | |||||
anywhere. Also, since debug broker is a server application, you can configure | |||||
it once and use it for any number of applications.</p> | |||||
<p>Both <a href="https://github.com/OGStudio/debug-ui">debug UI</a> and <a href="https://github.com/OGStudio/debug-broker">debug broker</a> use JavaScript | |||||
because we wanted these tools to be accessible from anywhere with no prior | |||||
installation. This decision limited us to web browser solution. Providing | |||||
any sort of desktop application would incur additional installation and | |||||
maintenance effort, which would only complicate the tools.</p> | |||||
<p><strong>Example-driven development establishment</strong></p> | |||||
<p>Once the third example was implemented, we realized how important and | |||||
beneficial it is to develop new features outside the main project:</p> | |||||
<ul> | |||||
<li>the main project is freed from excessive commit noise</li> | |||||
<li>a new feature is publicly shared for everyone to learn, criticize, and improve</li> | |||||
</ul> | |||||
<p>When we publicly share our knowledge:</p> | |||||
<ul> | |||||
<li>we must create documentation for everyone (including ourselves later) to understand what's going on</li> | |||||
<li>we must not use hacks because that would break your trust in us</li> | |||||
</ul> | |||||
<p>From now on, all new features like input handling, Mahjong layout loading, | |||||
resource caching, etc. are going to be first implemented as examples. | |||||
We call this example-driven development.</p> | |||||
<p>That's it for explaining how the third OpenSceneGraph cross-platform example | |||||
opened our eyes to example-driven development.</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
</article> | |||||
<hr class="gradient"/> | |||||
<article> | <article> | ||||
<a href="http://opengamestudio.org/openscenegraph-examples.html"><h3 class="article-title">OpenSceneGraph cross-platform examples</h3></a> | <a href="http://opengamestudio.org/openscenegraph-examples.html"><h3 class="article-title">OpenSceneGraph cross-platform examples</h3></a> | ||||
<h6 class="subheader" title="2018-04-20T00:00:00+03:00">Пт 20 Апрель 2018 | <h6 class="subheader" title="2018-04-20T00:00:00+03:00">Пт 20 Апрель 2018 | ||||
@@ -58,35 +119,14 @@ cross-platform OpenSceneGraph examples.</p> | |||||
<p>By the time <a href="http://opengamestudio.org/mahjong-techdemo1-gameplay.html">the first technology demonstration of OGS Mahjong 2</a> | <p>By the time <a href="http://opengamestudio.org/mahjong-techdemo1-gameplay.html">the first technology demonstration of OGS Mahjong 2</a> | ||||
has been released, we've already had <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues/4">issue request</a> | has been released, we've already had <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues/4">issue request</a> | ||||
(to explain how to load images with OpenSceneGraph on Android) hanging for some | (to explain how to load images with OpenSceneGraph on Android) hanging for some | ||||
time. We considered creating a new tutorial for | |||||
<a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> at first. However, we realized | |||||
that it's time-consuming and excessive for such a tiny topic (compared to | |||||
what an average game has) as image loading. We decided to continue sharing our | |||||
knowledge in the form of concrete examples. That's how | |||||
<a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples">OpenSceneGraph cross-platform examples</a> were born.</p> | |||||
<p>Each example:</p> | |||||
<ul> | |||||
<li>explains crucial code necessary to perform a specific task</li> | |||||
<li>accents platform-specific nuances</li> | |||||
<li>provides implementations to cover desktop, mobile, and web platforms</li> | |||||
<li>provides a web build to showcase results</li> | |||||
</ul> | |||||
<p>The first two examples cover the following topics:</p> | |||||
<ul> | |||||
<li>Embed resource into executable: this greatly simplifies resource handling across platforms</li> | |||||
<li>Use PNG images with PNG plugins: this explains the requirements necessary to build and use PNG plugins</li> | |||||
</ul> | |||||
<p>We will be adding new examples as we proceed with OGS Mahjong 2 development.</p> | |||||
<p>That's it for summarizing the work we did to produce the first two cross-platform OpenSceneGraph examples.</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
time. We ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | </p> | ||||
</article> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/openscenegraph-examples.html">Read More</a> | |||||
<hr class="gradient"/> | <hr class="gradient"/> | ||||
</article> | |||||
@@ -271,25 +311,6 @@ In case you missed it, here ...</p><p class="subheader">Category: <a href="http: | |||||
<hr class="gradient"/> | <hr class="gradient"/> | ||||
</article> | </article> | ||||
<article> | |||||
<a href="http://opengamestudio.org/ios-tutorial.html"><h3 class="article-title">iOS tutorial</h3></a> | |||||
<h6 class="subheader" title="2017-06-08T10:00:00+03:00">Чт 08 Июнь 2017 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/ios-tutorial-ru.html">ru</a> | |||||
</h6><p><img alt="iOS tutorial" src="http://opengamestudio.org/2017-06-08-ios-refactoring.png" /></p> | |||||
<p>This article describes problems we faced during the creation of iOS tutorial in May 2017.</p> | |||||
<p><a href="https://twitter.com/OpenGameStudio/status/826816343433498627">This February</a> we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/ios-tutorial.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<!-- /#posts-list --> | <!-- /#posts-list --> | ||||
<div class="pagination-centered"> | <div class="pagination-centered"> | ||||
<h6 class="subheader">Page 1 of 4</h6> | <h6 class="subheader">Page 1 of 4</h6> | ||||
@@ -48,6 +48,25 @@ | |||||
<article> | |||||
<a href="http://opengamestudio.org/ios-tutorial.html"><h3 class="article-title">iOS tutorial</h3></a> | |||||
<h6 class="subheader" title="2017-06-08T10:00:00+03:00">Чт 08 Июнь 2017 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/ios-tutorial-ru.html">ru</a> | |||||
</h6><p><img alt="iOS tutorial" src="http://opengamestudio.org/2017-06-08-ios-refactoring.png" /></p> | |||||
<p>This article describes problems we faced during the creation of iOS tutorial in May 2017.</p> | |||||
<p><a href="https://twitter.com/OpenGameStudio/status/826816343433498627">This February</a> we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/ios-tutorial.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<article> | <article> | ||||
<a href="http://opengamestudio.org/osg-sample.html"><h3 class="article-title">OpenSceneGraph sample</h3></a> | <a href="http://opengamestudio.org/osg-sample.html"><h3 class="article-title">OpenSceneGraph sample</h3></a> | ||||
<h6 class="subheader" title="2017-05-12T00:00:00+03:00">Пт 12 Май 2017 | <h6 class="subheader" title="2017-05-12T00:00:00+03:00">Пт 12 Май 2017 | ||||
@@ -226,27 +245,6 @@ We have conducted ...</p><p class="subheader">Category: <a href="http://opengame | |||||
<hr class="gradient"/> | <hr class="gradient"/> | ||||
</article> | </article> | ||||
<article> | |||||
<a href="http://opengamestudio.org/ogs-editor-0.10.html"><h3 class="article-title">OGS Editor 0.10 and live session materials</h3></a> | |||||
<h6 class="subheader" title="2016-10-03T00:00:00+03:00">Пн 03 Октябрь 2016 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/ogs-editor-0.10-ru.html">ru</a> | |||||
</h6><p><img alt="ogs-editor-0.10" src="http://opengamestudio.org/2016-10-03_ogs-editor-0.10.png" /></p> | |||||
<p>Note: we won't release 0.10 for macOS due to technical difficulties with the build system. macOS support will be back for 0.11.</p> | |||||
<ul> | |||||
<li><strong>OGS Editor 0.10</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/51_2016-10-01_06-39-48_0.10.0/">is available at SourceForge</a>. Simply unpack the archive and launch the run script.</li> | |||||
<li><strong>Mahjong Solitaire game</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Games/MahjongSolitaire/">is available at SourceForge</a>, too ...</li></ul><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/ogs-editor-0.10.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<!-- /#posts-list --> | <!-- /#posts-list --> | ||||
<div class="pagination-centered"> | <div class="pagination-centered"> | ||||
<h6 class="subheader">Page 2 of 4</h6> | <h6 class="subheader">Page 2 of 4</h6> | ||||
@@ -48,6 +48,27 @@ | |||||
<article> | |||||
<a href="http://opengamestudio.org/ogs-editor-0.10.html"><h3 class="article-title">OGS Editor 0.10 and live session materials</h3></a> | |||||
<h6 class="subheader" title="2016-10-03T00:00:00+03:00">Пн 03 Октябрь 2016 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/ogs-editor-0.10-ru.html">ru</a> | |||||
</h6><p><img alt="ogs-editor-0.10" src="http://opengamestudio.org/2016-10-03_ogs-editor-0.10.png" /></p> | |||||
<p>Note: we won't release 0.10 for macOS due to technical difficulties with the build system. macOS support will be back for 0.11.</p> | |||||
<ul> | |||||
<li><strong>OGS Editor 0.10</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/51_2016-10-01_06-39-48_0.10.0/">is available at SourceForge</a>. Simply unpack the archive and launch the run script.</li> | |||||
<li><strong>Mahjong Solitaire game</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Games/MahjongSolitaire/">is available at SourceForge</a>, too ...</li></ul><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/ogs-editor-0.10.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<article> | <article> | ||||
<a href="http://opengamestudio.org/yesterdays-live-session-short-overview.html"><h3 class="article-title">A few words about live session yesterday</h3></a> | <a href="http://opengamestudio.org/yesterdays-live-session-short-overview.html"><h3 class="article-title">A few words about live session yesterday</h3></a> | ||||
<h6 class="subheader" title="2016-09-26T00:00:00+03:00">Пн 26 Сентябрь 2016 | <h6 class="subheader" title="2016-09-26T00:00:00+03:00">Пн 26 Сентябрь 2016 | ||||
@@ -218,30 +239,6 @@ It's time to create simple Mahjong solitaire game.</p><p class="subheader">Categ | |||||
<hr class="gradient"/> | <hr class="gradient"/> | ||||
</article> | </article> | ||||
<article> | |||||
<a href="http://opengamestudio.org/rolling-ball.html"><h3 class="article-title">"Rolling ball" live session videos and downloads</h3></a> | |||||
<h6 class="subheader" title="2016-02-10T00:00:00+03:00">Ср 10 Февраль 2016 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/rolling-ball-ru.html">ru</a> | |||||
</h6><p>Since we held 2 live sessions to create "Rolling ball" game, here are 2 YouTube videos of the process:</p> | |||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/70Jny1xJxK8" frameborder="0" allowfullscreen></iframe> | |||||
<iframe width="560" height="315" src="http://www.youtube.com/embed/851IlFT7y18" frameborder="0" allowfullscreen></iframe> | |||||
<p>"Rolling ball" game for Linux (Debian based), OS X (10.9+), Windows <a title="SourceForge" href="http://sourceforge.net/projects/osrpgcreation/files/Games/RollingBall/">is available at SourceForge</a>. | |||||
Simply unpack it and launch the run script.</p> | |||||
<p>Editor 0.8 <a title="SourceForge" href="http://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/46_2016-01-30_22-20-41_0.8.0/">is available at SourceForge ...</a></p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/rolling-ball.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<!-- /#posts-list --> | <!-- /#posts-list --> | ||||
<div class="pagination-centered"> | <div class="pagination-centered"> | ||||
<h6 class="subheader">Page 3 of 4</h6> | <h6 class="subheader">Page 3 of 4</h6> | ||||
@@ -48,6 +48,30 @@ | |||||
<article> | |||||
<a href="http://opengamestudio.org/rolling-ball.html"><h3 class="article-title">"Rolling ball" live session videos and downloads</h3></a> | |||||
<h6 class="subheader" title="2016-02-10T00:00:00+03:00">Ср 10 Февраль 2016 | |||||
<a class="button secondary small translation-button" href="http://opengamestudio.org/rolling-ball-ru.html">ru</a> | |||||
</h6><p>Since we held 2 live sessions to create "Rolling ball" game, here are 2 YouTube videos of the process:</p> | |||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/70Jny1xJxK8" frameborder="0" allowfullscreen></iframe> | |||||
<iframe width="560" height="315" src="http://www.youtube.com/embed/851IlFT7y18" frameborder="0" allowfullscreen></iframe> | |||||
<p>"Rolling ball" game for Linux (Debian based), OS X (10.9+), Windows <a title="SourceForge" href="http://sourceforge.net/projects/osrpgcreation/files/Games/RollingBall/">is available at SourceForge</a>. | |||||
Simply unpack it and launch the run script.</p> | |||||
<p>Editor 0.8 <a title="SourceForge" href="http://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/46_2016-01-30_22-20-41_0.8.0/">is available at SourceForge ...</a></p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a> | |||||
</p> | |||||
<a class="button radius secondary small right" href="http://opengamestudio.org/rolling-ball.html">Read More</a> | |||||
<hr class="gradient"/> | |||||
</article> | |||||
<article> | <article> | ||||
<a href="http://opengamestudio.org/rolling-ball-live-session-pt2.html"><h3 class="article-title">Game creation live session (part 2): 7 February 2016</h3></a> | <a href="http://opengamestudio.org/rolling-ball-live-session-pt2.html"><h3 class="article-title">Game creation live session (part 2): 7 February 2016</h3></a> | ||||
<h6 class="subheader" title="2016-02-02T00:00:00+03:00">Вт 02 Февраль 2016 | <h6 class="subheader" title="2016-02-02T00:00:00+03:00">Вт 02 Февраль 2016 | ||||
@@ -0,0 +1,70 @@ | |||||
Title: Разработка через создание примеров | |||||
Date: 2018-06-27 00:00 | |||||
Category: News | |||||
Slug: example-driven-development | |||||
Lang: ru | |||||
![Screenshot][screenshot] | |||||
Эта статья описывает то, как создание третьего кросс-платформенного примера | |||||
OpenSceneGraph привело нас к разработке через создание примеров. | |||||
**Третий кросс-платформенный пример OpenSceneGraph** | |||||
Третий кросс-платформенный пример OpenSceneGraph содержит реализацию | |||||
[удалённой отладки, работающей на всех поддерживаемых платформах][osgcpe-03]. | |||||
Этот пример относится не столько к OpenSceneGraph, сколько к поддержке | |||||
различных платформ. | |||||
Удалённое взаимодействие ныне предполагает использование HTTP(s) поверх | |||||
TCP/IP. Таким образом, первая идея реализации подразумевала встраивание сервера | |||||
HTTP в приложение, чтобы клиенты HTTP могли взаимодействовать с этим сервером. | |||||
Однако, раздача HTTP на различных платформах имеет свои сложности: | |||||
* на десктопах есть межсетевые экраны (firewalls) | |||||
* на мобилках есть ограничения по работе фоновых процессов | |||||
* веб-браузеры являются клиентами HTTP по дизайну | |||||
Эти ограничения подтолкнули нас к созданию посредника между отлаживаемым | |||||
приложением и пользовательским интерфейсом отладки. | |||||
[Брокер отладки][debug-broker], небольшое приложение Node.js, стало тем самым | |||||
посредником. Брокер отладки не имеет внешних зависимостей, поэтому его легко | |||||
использовать практически везде. Благодаря тому, что брокер отладки - это | |||||
серверное приложение, его достаточно настроить лишь раз и использовать для | |||||
любого количества приложений. | |||||
И [пользовательский интерфейс отладки][debug-ui], | |||||
и [брокер отладки][debug-broker] используют JavaScript, т.к. мы хотели сделать | |||||
эти инструменты максимально доступными без предварительной установки. Данное | |||||
решение привело нас к реализации инструментов именно для веб-браузеров. | |||||
Десктопное приложение потребовало бы дополнительных усилий на установку и | |||||
поддержку, что лишь усложнило бы работу с инструментами. | |||||
**Разработка через создание примеров** | |||||
После создания третьего примера мы осознали важность и достоинства разработки | |||||
новых функций вне основного проекта: | |||||
* освобождение основного проекта от шума изменений (commit noise) | |||||
* публичное освещение новой функции приглашает всех к её изучению, критике и улучшению | |||||
Когда мы делимся нашими знаниями: | |||||
* мы обязаны создавать документацию, объясняющую происходящее (в том числе для нас самих позже) | |||||
* мы обязаны сторониться непродуманных решений, т.к. они повредят нашей репутации | |||||
С этого момента все новые функции вроде обработки ввода, загрузки раскладок | |||||
Маджонга, кэширования ресурсов и т.п. мы будем сначала реализовывать в виде | |||||
примеров. Мы называем этот подход разработкой через создание примеров. | |||||
На этом мы заканчиваем описание того, как создание третьего | |||||
кросс-платформенного примера OpenSceneGraph привело нас к разработке через | |||||
создание примеров. | |||||
[screenshot]: {attach}/images/2018-06-27-example-driven-development.png | |||||
[osgcpe-03]: https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/03.RemoteDebugging | |||||
[debug-broker]: https://github.com/OGStudio/debug-broker | |||||
[debug-ui]: https://github.com/OGStudio/debug-ui | |||||
@@ -0,0 +1,64 @@ | |||||
Title: Example-driven development | |||||
Date: 2018-06-27 00:00 | |||||
Category: News | |||||
Slug: example-driven-development | |||||
Lang: en | |||||
![Screenshot][screenshot] | |||||
This article explains how the third OpenSceneGraph cross-platform example | |||||
opened our eyes to example-driven development. | |||||
**The third OpenSceneGraph cross-platform example** | |||||
The third OpenSceneGraph cross-platform example explains how to implement | |||||
[remote debugging across platforms][osgcpe-03]. This example is less about | |||||
OpenSceneGraph and more about different platforms. | |||||
Remote anything nowadays assumes the use of HTTP(s) over TCP/IP. Thus, the | |||||
first idea was to embed HTTP server into an application and let HTTP clients | |||||
interact with the server. However, serving HTTP across all platforms is | |||||
complicated: | |||||
* desktops have firewalls | |||||
* mobiles have restrictions on background processes | |||||
* web browsers are HTTP clients by design | |||||
That's why we decided to create a mediator between debugged application and UI. | |||||
[Debug broker][debug-broker], a small Node.js application, became that mediator. | |||||
Debug broker uses no external dependencies, so it's easy to run virtually | |||||
anywhere. Also, since debug broker is a server application, you can configure | |||||
it once and use it for any number of applications. | |||||
Both [debug UI][debug-ui] and [debug broker][debug-broker] use JavaScript | |||||
because we wanted these tools to be accessible from anywhere with no prior | |||||
installation. This decision limited us to web browser solution. Providing | |||||
any sort of desktop application would incur additional installation and | |||||
maintenance effort, which would only complicate the tools. | |||||
**Example-driven development establishment** | |||||
Once the third example was implemented, we realized how important and | |||||
beneficial it is to develop new features outside the main project: | |||||
* the main project is freed from excessive commit noise | |||||
* a new feature is publicly shared for everyone to learn, criticize, and improve | |||||
When we publicly share our knowledge: | |||||
* we must create documentation for everyone (including ourselves later) to understand what's going on | |||||
* we must not use hacks because that would break your trust in us | |||||
From now on, all new features like input handling, Mahjong layout loading, | |||||
resource caching, etc. are going to be first implemented as examples. | |||||
We call this example-driven development. | |||||
That's it for explaining how the third OpenSceneGraph cross-platform example | |||||
opened our eyes to example-driven development. | |||||
[screenshot]: {attach}/images/2018-06-27-example-driven-development.png | |||||
[osgcpe-03]: https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/03.RemoteDebugging | |||||
[debug-broker]: https://github.com/OGStudio/debug-broker | |||||
[debug-ui]: https://github.com/OGStudio/debug-ui | |||||