@@ -19,3 +19,9 @@ Opensource Game Studio home website. | |||
The site is served at [http://localhost:8000](http://localhost:8000). | |||
### Generate public copy | |||
`cd pelican` | |||
`pelican -s publishconf.py` | |||
@@ -50,61 +50,25 @@ | |||
<table class="table-archive"> | |||
<tbody> | |||
<tr> | |||
<td>Sat 01 July 2017</td> | |||
<td>Ср 16 Август 2017</td> | |||
<td><a href='scripting-research.html'>Scripting research</a></td> | |||
</tr> | |||
<tr> | |||
<td>Пн 17 Июль 2017</td> | |||
<td><a href='openscenegraph-cross-platform-guide.html'>OpenSceneGraph cross-platform guide</a></td> | |||
</tr> | |||
<tr> | |||
<td>Thu 08 June 2017</td> | |||
<td>Чт 08 Июнь 2017</td> | |||
<td><a href='ios-tutorial.html'>iOS tutorial</a></td> | |||
</tr> | |||
<tr> | |||
<td>Sat 03 June 2017</td> | |||
<td>Сб 03 Июнь 2017</td> | |||
<td><a href='pelican-review.html'>Pelican review</a></td> | |||
</tr> | |||
<tr> | |||
<td>Thu 01 June 2017</td> | |||
<td>Чт 01 Июнь 2017</td> | |||
<td><a href='keyboard-review.html'>My first review</a></td> | |||
</tr> | |||
<tr> | |||
<td>Sun 01 January 2017</td> | |||
<td><a href='kr10.html'>kr10</a></td> | |||
</tr> | |||
<tr> | |||
<td>Sun 01 January 2017</td> | |||
<td><a href='kr9.html'>kr9</a></td> | |||
</tr> | |||
<tr> | |||
<td>Sun 01 January 2017</td> | |||
<td><a href='kr8.html'>kr8</a></td> | |||
</tr> | |||
<tr> | |||
<td>Sun 01 January 2017</td> | |||
<td><a href='kr7.html'>kr7</a></td> | |||
</tr> | |||
<tr> | |||
<td>Sun 01 January 2017</td> | |||
<td><a href='kr6.html'>kr6</a></td> | |||
</tr> | |||
<tr> | |||
<td>Sun 01 January 2017</td> | |||
<td><a href='kr5.html'>kr5</a></td> | |||
</tr> | |||
<tr> | |||
<td>Sun 01 January 2017</td> | |||
<td><a href='kr4.html'>kr4</a></td> | |||
</tr> | |||
<tr> | |||
<td>Sun 01 January 2017</td> | |||
<td><a href='kr3.html'>kr3</a></td> | |||
</tr> | |||
<tr> | |||
<td>Sun 01 January 2017</td> | |||
<td><a href='kr2.html'>kr2</a></td> | |||
</tr> | |||
<tr> | |||
<td>Sun 01 January 2017</td> | |||
<td><a href='kr1.html'>kr1</a></td> | |||
</tr> | |||
</tbody> | |||
</table> | |||
@@ -47,52 +47,82 @@ | |||
<article> | |||
<a href="https://ogstudio.github.io/scripting-research.html"><h3 class="article-title">Scripting research</h3></a> | |||
<h6 class="subheader" title="2017-08-16T00:00:00+07:00">Ср 16 Август 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/scripting-research-ru.html">ru</a> | |||
</h6><p><img alt="Scripting research" src="https://ogstudio.github.io/2017-08-scripting-research.png" /></p> | |||
<p>This article describes scripting research in July 2017.</p> | |||
<p><strong>Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.</strong></p> | |||
<p>OGS Editor 0.10 supports Python for such a code thanks to <a href="http://swig.org/">SWIG</a>. SWIG provides a way to wrap almost any C/C++ code and use it in dozens of languages like Python, Ruby, Lua, Java, C#, etc.. SWIG really helped us taste the beauty of platform-independent code. However, SWIG only works one way: from C/C++ to a target language. This means the main application must be in the target language, and C/C++ code can only be used as a library.</p> | |||
<p>Having the main application in Python works fine for the desktop, but not so great for mobile and web, where C and C++ are the only natively supported cross-platform languages. There are projects like <a href="https://kivy.org">Kivy</a>, which allow you to develop cross-platform applications in Python, but they are not supported natively. This means it's a lot of headaches when Android and iOS APIs change.</p> | |||
<p>Having the main application in C/C++ and the need to support scripting means that a scripting language should be interpreted by the application. This is what SWIG, Kivy, and similar projects are not meant to fulfill.</p> | |||
<p><strong>Our secondary goal for using a scripting language was to allow to extend C++ code.</strong></p> | |||
<p>OGS Editor 0.10 has some modules written in C++, and some in Python. The modules are equal from the perspective of the main application; it doesn't care what language the module is written in.</p> | |||
<p>To achieve such flexibility, we introduced a so-called Environment. Each module would register the keys it responds to, and Environment would deliver corresponding messages. | |||
Technically such behaviour is achieved by inheriting a base class and overriding its methods in both C++ and a scripting language.</p> | |||
<p><strong>First, we evaluated Python for the role of cross-platform scripting language.</strong></p> | |||
<p>Since we already used Python, we started to research the possibility to run Python code on every supported platform. The result was disappointing because CPython (the default Python implementation used on the desktop) does not mention mobile and web platforms. We only found some years old forks of CPython that were claimed to work either on Android or iOS. Such a disarray was not suitable for us. | |||
We also had a look at <a href="http://pypy.org">PyPy</a>, another Python implementation. It also did not mention support for mobile and web platforms.</p> | |||
<p>This was a clear indication that Python community doesn't care for mobile and web platforms. Or that nobody had time to provide the information about building Python on such platforms. Either way, it was not acceptable for us.</p> | |||
<p><strong>Second, we evaluated <a href="http://wren.io">Wren</a> for the role of cross-platform scripting language.</strong></p> | |||
<p>Wren was the first scripting language we stumbled upon in the long list of non-mainstream scripting languages.</p> | |||
<p>Wren claimed to be small and easy to learn. Wren also claimed to be intended for embedding in applications. Ironically, the author <a href="http://wren.io/embedding-api.html">had no time to document how to do the embedding in the first place</a>. When <a href="https://github.com/munificent/wren/issues/465">we asked for the time estimates of publishing</a> the critical part of the documentation, <a href="https://github.com/munificent/wren/issues/402">we just got a reference to another issue</a> where the other guy was asking the same question half a year ago!</p> | |||
<p>That's when we ended our relationship with Wren.</p> | |||
<p><strong>Third, we evaluated <a href="http://chaiscript.com">Chai</a> for the role of cross-platform scripting language.</strong></p> | |||
<p>Chai was in the long list of non-mainstream scripting languages, too. Chai was promising because it claimed to be specifically tailored for embedding in a C++ application. | |||
We successfully managed to call a C++ function from inside Chai but failed to call a member function. <a href="http://discourse.chaiscript.com/t/cannot-call-a-function-that-accepts-a-string-and-a-vector/334">We asked for help</a>, but nobody replied.</p> | |||
<p>We had to end our relationship with Chai.</p> | |||
<p><strong>Fourth, we evaluated Lua for the role of cross-platform scripting language.</strong></p> | |||
<p>Lua is the mainstream language for embedding. So we decided to try the obvious choice. Documentation looked promising, too. However, by the end of reading the <a href="https://www.lua.org/pil/24.html">C API</a> chapter we had no clue how to inherit a class inside Lua.</p> | |||
<p>This led us to search for libraries that wrap Lua C API syntax into something more meaningful for C++. That's how we found <a href="http://sol2.rtfd.io">Sol2</a>. Just as before, the first attempt to call a C++ member function from Lua failed. But unlike before, we asked for help and <a href="https://github.com/ThePhD/sol2/issues/465">got the help</a>! This was a refreshing surprise for us. | |||
Next, we tried to inherit a class in Lua and override the class methods. We failed, but <a href="https://github.com/ThePhD/sol2/issues/468">the author helped us out again</a>. In the end, we succeeded in inheriting a class and overriding its behaviour.</p> | |||
<p>That's when we understood it's a start for a long and mutual relationship with Sol2/Lua.</p> | |||
<p><strong>This search for a scripting language taught us one important lesson: people matter, not technologies.</strong></p> | |||
<p>There are lots of scripting languages that look shiny on the outside but are dead. Why? Because some authors don't have time for users. In return, users don't have time for the authors' projects.</p> | |||
<p>That's it for describing scripting research in July 2017.</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/news.html">News</a> | |||
</p> | |||
</article> | |||
<hr class="gradient"/> | |||
<article> | |||
<a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide.html"><h3 class="article-title">OpenSceneGraph cross-platform guide</h3></a> | |||
<h6 class="subheader" title="2017-07-01T00:00:00+07:00">Sat 01 July 2017 | |||
<h6 class="subheader" title="2017-07-17T00:00:00+07:00">Пн 17 Июль 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/openscenegraph-cross-platform-guide-ru.html">ru</a> | |||
</h6><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> | |||
</h6><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png" /></p> | |||
<p>This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.</p> | |||
<p>June marked the finish of <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> with the publishing of the last (initially planned) tutorial. The tutorial describes <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">how to build and run sample OpenSceneGraph application in Web</a> using Emscripten. | |||
In case you missed it, here's a <a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide/">link to the final application</a>. Open it in your web browser.</p> | |||
<p>We started to compose the guide in February when we successfully managed to render a simple model on mobile and web. | |||
We spent 120 hours in five months to produce ten tutorials of the guide.</p> | |||
<p>We have been doing OpenSceneGraph cross-platform guide for two main reasons:</p> | |||
<ol> | |||
<li>Keep OpenSceneGraph cross-platform knowledge in easily accessible and reproducible form</li> | |||
<li>Share the knowledge with OpenSceneGraph community to make it stronger</li> | |||
</ol> | |||
<p>We believe we succeeded in both. Here's why:</p> | |||
<ol> | |||
<li>The guide repository has more <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/stargazers">stars</a> (aka "likes") than any other repository of ours</li> | |||
<li>OpenSceneGraph project leader Robert Osfield said <a href="http://www.mail-archive.com/osg-users@lists.openscenegraph.org/msg74815.html">"Great work"</a>, which means a lot</li> | |||
<li>The guide already has <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues">two issues</a></li> | |||
</ol> | |||
<p>Reaching our goal of researching OpenSceneGraph cross-platform development and providing the knowledge back to the community just made us happier.</p> | |||
<p>However, our journey does not stop here. Using the knowledge of the guide, we now continue to work on bringing our tools to support mobile and web, just as we <a href="http://opengamestudio.org/lang/en/news/2456">promised in January</a>.</p> | |||
<p>That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/news.html">News</a> | |||
In case you missed it, here ...</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/news.html">News</a> | |||
</p> | |||
</article> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/openscenegraph-cross-platform-guide.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/ios-tutorial.html"><h3 class="article-title">iOS tutorial</h3></a> | |||
<h6 class="subheader" title="2017-06-08T10:00:00+07:00">Thu 08 June 2017 | |||
<h6 class="subheader" title="2017-06-08T10:00:00+07:00">Чт 08 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/ios-tutorial-ru.html">ru</a> | |||
</h6><p><img alt="iOS tutorial" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> | |||
</h6><p><img alt="iOS tutorial" src="https://ogstudio.github.io/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 up …</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/news.html">News</a> | |||
<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="https://ogstudio.github.io/category/news.html">News</a> | |||
</p> | |||
@@ -106,7 +136,7 @@ We spent 120 hours in five months to produce ten tutorials of the guide.</p> | |||
<article> | |||
<a href="https://ogstudio.github.io/pelican-review.html"><h3 class="article-title">Pelican review</h3></a> | |||
<h6 class="subheader" title="2017-06-03T22:00:00+07:00">Sat 03 June 2017 | |||
<h6 class="subheader" title="2017-06-03T22:00:00+07:00">Сб 03 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/pelican-review-ru.html">ru</a> | |||
</h6><p>So far so nice. Pelican is really cool, and provides a quick starting guided | |||
@@ -126,7 +156,7 @@ to get up and running real fast.</p> | |||
<article> | |||
<a href="https://ogstudio.github.io/keyboard-review.html"><h3 class="article-title">My first review</h3></a> | |||
<h6 class="subheader" title="2017-06-01T10:20:00+07:00">Thu 01 June 2017 | |||
<h6 class="subheader" title="2017-06-01T10:20:00+07:00">Чт 01 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/keyboard-review-ru.html">ru</a> | |||
</h6><p>Here is a full review, guys.</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
@@ -138,121 +168,12 @@ to get up and running real fast.</p> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr10.html"><h3 class="article-title">kr10</h3></a> | |||
<h6 class="subheader" title="2017-01-01T10:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr10-ru.html">ru</a> | |||
</h6><p>kr10</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr10.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr9.html"><h3 class="article-title">kr9</h3></a> | |||
<h6 class="subheader" title="2017-01-01T09:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr9-ru.html">ru</a> | |||
</h6><p>kr9</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr9.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr8.html"><h3 class="article-title">kr8</h3></a> | |||
<h6 class="subheader" title="2017-01-01T08:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr8-ru.html">ru</a> | |||
</h6><p>kr8</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr8.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr7.html"><h3 class="article-title">kr7</h3></a> | |||
<h6 class="subheader" title="2017-01-01T07:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr7-ru.html">ru</a> | |||
</h6><p>kr7</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr7.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr6.html"><h3 class="article-title">kr6</h3></a> | |||
<h6 class="subheader" title="2017-01-01T06:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr6-ru.html">ru</a> | |||
</h6><p>kr6</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr6.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr5.html"><h3 class="article-title">kr5</h3></a> | |||
<h6 class="subheader" title="2017-01-01T05:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr5-ru.html">ru</a> | |||
</h6><p>kr5</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr5.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<!-- /#posts-list --> | |||
<div class="pagination-centered"> | |||
<h6 class="subheader">Page 1 of 2</h6> | |||
<h6 class="subheader">Page 1 of 1</h6> | |||
<p> | |||
<a href="https://ogstudio.github.io/author/opensource-game-studio2.html">Next »</a> | |||
</p> | |||
</div> | |||
@@ -48,9 +48,27 @@ | |||
<article> | |||
<a href="https://ogstudio.github.io/kr5.html"><h3 class="article-title">kr5</h3></a> | |||
<h6 class="subheader" title="2017-01-01T05:04:00+07:00">Вс 01 Январь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr5-ru.html">ru</a> | |||
</h6><p>kr5</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr5.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr4.html"><h3 class="article-title">kr4</h3></a> | |||
<h6 class="subheader" title="2017-01-01T04:04:00+07:00">Sun 01 January 2017 | |||
<h6 class="subheader" title="2017-01-01T04:04:00+07:00">Вс 01 Январь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr4-ru.html">ru</a> | |||
</h6><p>kr4</p> | |||
@@ -68,7 +86,7 @@ | |||
<article> | |||
<a href="https://ogstudio.github.io/kr3.html"><h3 class="article-title">kr3</h3></a> | |||
<h6 class="subheader" title="2017-01-01T03:04:00+07:00">Sun 01 January 2017 | |||
<h6 class="subheader" title="2017-01-01T03:04:00+07:00">Вс 01 Январь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr3-ru.html">ru</a> | |||
</h6><p>kr3</p> | |||
@@ -86,7 +104,7 @@ | |||
<article> | |||
<a href="https://ogstudio.github.io/kr2.html"><h3 class="article-title">kr2</h3></a> | |||
<h6 class="subheader" title="2017-01-01T02:04:00+07:00">Sun 01 January 2017 | |||
<h6 class="subheader" title="2017-01-01T02:04:00+07:00">Вс 01 Январь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr2-ru.html">ru</a> | |||
</h6><p>kr2</p> | |||
@@ -104,7 +122,7 @@ | |||
<article> | |||
<a href="https://ogstudio.github.io/kr1.html"><h3 class="article-title">kr1</h3></a> | |||
<h6 class="subheader" title="2017-01-01T01:04:00+07:00">Sun 01 January 2017 | |||
<h6 class="subheader" title="2017-01-01T01:04:00+07:00">Вс 01 Январь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr1-ru.html">ru</a> | |||
</h6><p>kr1</p> | |||
@@ -47,52 +47,82 @@ | |||
<article> | |||
<a href="https://ogstudio.github.io/scripting-research.html"><h3 class="article-title">Scripting research</h3></a> | |||
<h6 class="subheader" title="2017-08-16T00:00:00+07:00">Ср 16 Август 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/scripting-research-ru.html">ru</a> | |||
</h6><p><img alt="Scripting research" src="https://ogstudio.github.io/2017-08-scripting-research.png" /></p> | |||
<p>This article describes scripting research in July 2017.</p> | |||
<p><strong>Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.</strong></p> | |||
<p>OGS Editor 0.10 supports Python for such a code thanks to <a href="http://swig.org/">SWIG</a>. SWIG provides a way to wrap almost any C/C++ code and use it in dozens of languages like Python, Ruby, Lua, Java, C#, etc.. SWIG really helped us taste the beauty of platform-independent code. However, SWIG only works one way: from C/C++ to a target language. This means the main application must be in the target language, and C/C++ code can only be used as a library.</p> | |||
<p>Having the main application in Python works fine for the desktop, but not so great for mobile and web, where C and C++ are the only natively supported cross-platform languages. There are projects like <a href="https://kivy.org">Kivy</a>, which allow you to develop cross-platform applications in Python, but they are not supported natively. This means it's a lot of headaches when Android and iOS APIs change.</p> | |||
<p>Having the main application in C/C++ and the need to support scripting means that a scripting language should be interpreted by the application. This is what SWIG, Kivy, and similar projects are not meant to fulfill.</p> | |||
<p><strong>Our secondary goal for using a scripting language was to allow to extend C++ code.</strong></p> | |||
<p>OGS Editor 0.10 has some modules written in C++, and some in Python. The modules are equal from the perspective of the main application; it doesn't care what language the module is written in.</p> | |||
<p>To achieve such flexibility, we introduced a so-called Environment. Each module would register the keys it responds to, and Environment would deliver corresponding messages. | |||
Technically such behaviour is achieved by inheriting a base class and overriding its methods in both C++ and a scripting language.</p> | |||
<p><strong>First, we evaluated Python for the role of cross-platform scripting language.</strong></p> | |||
<p>Since we already used Python, we started to research the possibility to run Python code on every supported platform. The result was disappointing because CPython (the default Python implementation used on the desktop) does not mention mobile and web platforms. We only found some years old forks of CPython that were claimed to work either on Android or iOS. Such a disarray was not suitable for us. | |||
We also had a look at <a href="http://pypy.org">PyPy</a>, another Python implementation. It also did not mention support for mobile and web platforms.</p> | |||
<p>This was a clear indication that Python community doesn't care for mobile and web platforms. Or that nobody had time to provide the information about building Python on such platforms. Either way, it was not acceptable for us.</p> | |||
<p><strong>Second, we evaluated <a href="http://wren.io">Wren</a> for the role of cross-platform scripting language.</strong></p> | |||
<p>Wren was the first scripting language we stumbled upon in the long list of non-mainstream scripting languages.</p> | |||
<p>Wren claimed to be small and easy to learn. Wren also claimed to be intended for embedding in applications. Ironically, the author <a href="http://wren.io/embedding-api.html">had no time to document how to do the embedding in the first place</a>. When <a href="https://github.com/munificent/wren/issues/465">we asked for the time estimates of publishing</a> the critical part of the documentation, <a href="https://github.com/munificent/wren/issues/402">we just got a reference to another issue</a> where the other guy was asking the same question half a year ago!</p> | |||
<p>That's when we ended our relationship with Wren.</p> | |||
<p><strong>Third, we evaluated <a href="http://chaiscript.com">Chai</a> for the role of cross-platform scripting language.</strong></p> | |||
<p>Chai was in the long list of non-mainstream scripting languages, too. Chai was promising because it claimed to be specifically tailored for embedding in a C++ application. | |||
We successfully managed to call a C++ function from inside Chai but failed to call a member function. <a href="http://discourse.chaiscript.com/t/cannot-call-a-function-that-accepts-a-string-and-a-vector/334">We asked for help</a>, but nobody replied.</p> | |||
<p>We had to end our relationship with Chai.</p> | |||
<p><strong>Fourth, we evaluated Lua for the role of cross-platform scripting language.</strong></p> | |||
<p>Lua is the mainstream language for embedding. So we decided to try the obvious choice. Documentation looked promising, too. However, by the end of reading the <a href="https://www.lua.org/pil/24.html">C API</a> chapter we had no clue how to inherit a class inside Lua.</p> | |||
<p>This led us to search for libraries that wrap Lua C API syntax into something more meaningful for C++. That's how we found <a href="http://sol2.rtfd.io">Sol2</a>. Just as before, the first attempt to call a C++ member function from Lua failed. But unlike before, we asked for help and <a href="https://github.com/ThePhD/sol2/issues/465">got the help</a>! This was a refreshing surprise for us. | |||
Next, we tried to inherit a class in Lua and override the class methods. We failed, but <a href="https://github.com/ThePhD/sol2/issues/468">the author helped us out again</a>. In the end, we succeeded in inheriting a class and overriding its behaviour.</p> | |||
<p>That's when we understood it's a start for a long and mutual relationship with Sol2/Lua.</p> | |||
<p><strong>This search for a scripting language taught us one important lesson: people matter, not technologies.</strong></p> | |||
<p>There are lots of scripting languages that look shiny on the outside but are dead. Why? Because some authors don't have time for users. In return, users don't have time for the authors' projects.</p> | |||
<p>That's it for describing scripting research in July 2017.</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/news.html">News</a> | |||
</p> | |||
</article> | |||
<hr class="gradient"/> | |||
<article> | |||
<a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide.html"><h3 class="article-title">OpenSceneGraph cross-platform guide</h3></a> | |||
<h6 class="subheader" title="2017-07-01T00:00:00+07:00">Sat 01 July 2017 | |||
<h6 class="subheader" title="2017-07-17T00:00:00+07:00">Пн 17 Июль 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/openscenegraph-cross-platform-guide-ru.html">ru</a> | |||
</h6><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> | |||
</h6><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png" /></p> | |||
<p>This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.</p> | |||
<p>June marked the finish of <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> with the publishing of the last (initially planned) tutorial. The tutorial describes <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">how to build and run sample OpenSceneGraph application in Web</a> using Emscripten. | |||
In case you missed it, here's a <a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide/">link to the final application</a>. Open it in your web browser.</p> | |||
<p>We started to compose the guide in February when we successfully managed to render a simple model on mobile and web. | |||
We spent 120 hours in five months to produce ten tutorials of the guide.</p> | |||
<p>We have been doing OpenSceneGraph cross-platform guide for two main reasons:</p> | |||
<ol> | |||
<li>Keep OpenSceneGraph cross-platform knowledge in easily accessible and reproducible form</li> | |||
<li>Share the knowledge with OpenSceneGraph community to make it stronger</li> | |||
</ol> | |||
<p>We believe we succeeded in both. Here's why:</p> | |||
<ol> | |||
<li>The guide repository has more <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/stargazers">stars</a> (aka "likes") than any other repository of ours</li> | |||
<li>OpenSceneGraph project leader Robert Osfield said <a href="http://www.mail-archive.com/osg-users@lists.openscenegraph.org/msg74815.html">"Great work"</a>, which means a lot</li> | |||
<li>The guide already has <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues">two issues</a></li> | |||
</ol> | |||
<p>Reaching our goal of researching OpenSceneGraph cross-platform development and providing the knowledge back to the community just made us happier.</p> | |||
<p>However, our journey does not stop here. Using the knowledge of the guide, we now continue to work on bringing our tools to support mobile and web, just as we <a href="http://opengamestudio.org/lang/en/news/2456">promised in January</a>.</p> | |||
<p>That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/news.html">News</a> | |||
In case you missed it, here ...</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/news.html">News</a> | |||
</p> | |||
</article> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/openscenegraph-cross-platform-guide.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/ios-tutorial.html"><h3 class="article-title">iOS tutorial</h3></a> | |||
<h6 class="subheader" title="2017-06-08T10:00:00+07:00">Thu 08 June 2017 | |||
<h6 class="subheader" title="2017-06-08T10:00:00+07:00">Чт 08 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/ios-tutorial-ru.html">ru</a> | |||
</h6><p><img alt="iOS tutorial" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> | |||
</h6><p><img alt="iOS tutorial" src="https://ogstudio.github.io/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 up …</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/news.html">News</a> | |||
<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="https://ogstudio.github.io/category/news.html">News</a> | |||
</p> | |||
@@ -49,7 +49,7 @@ | |||
<article> | |||
<a href="https://ogstudio.github.io/pelican-review.html"><h3 class="article-title">Pelican review</h3></a> | |||
<h6 class="subheader" title="2017-06-03T22:00:00+07:00">Sat 03 June 2017 | |||
<h6 class="subheader" title="2017-06-03T22:00:00+07:00">Сб 03 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/pelican-review-ru.html">ru</a> | |||
</h6><p>So far so nice. Pelican is really cool, and provides a quick starting guided | |||
@@ -71,7 +71,7 @@ to get up and running real fast.</p> | |||
<article> | |||
<a href="https://ogstudio.github.io/keyboard-review.html"><h3 class="article-title">My first review</h3></a> | |||
<h6 class="subheader" title="2017-06-01T10:20:00+07:00">Thu 01 June 2017 | |||
<h6 class="subheader" title="2017-06-01T10:20:00+07:00">Чт 01 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/keyboard-review-ru.html">ru</a> | |||
</h6><p>Here is a full review, guys.</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
@@ -83,157 +83,12 @@ to get up and running real fast.</p> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr10.html"><h3 class="article-title">kr10</h3></a> | |||
<h6 class="subheader" title="2017-01-01T10:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr10-ru.html">ru</a> | |||
</h6><p>kr10</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr10.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr9.html"><h3 class="article-title">kr9</h3></a> | |||
<h6 class="subheader" title="2017-01-01T09:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr9-ru.html">ru</a> | |||
</h6><p>kr9</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr9.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr8.html"><h3 class="article-title">kr8</h3></a> | |||
<h6 class="subheader" title="2017-01-01T08:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr8-ru.html">ru</a> | |||
</h6><p>kr8</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr8.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr7.html"><h3 class="article-title">kr7</h3></a> | |||
<h6 class="subheader" title="2017-01-01T07:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr7-ru.html">ru</a> | |||
</h6><p>kr7</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr7.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr6.html"><h3 class="article-title">kr6</h3></a> | |||
<h6 class="subheader" title="2017-01-01T06:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr6-ru.html">ru</a> | |||
</h6><p>kr6</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr6.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr5.html"><h3 class="article-title">kr5</h3></a> | |||
<h6 class="subheader" title="2017-01-01T05:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr5-ru.html">ru</a> | |||
</h6><p>kr5</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr5.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr4.html"><h3 class="article-title">kr4</h3></a> | |||
<h6 class="subheader" title="2017-01-01T04:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr4-ru.html">ru</a> | |||
</h6><p>kr4</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr4.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr3.html"><h3 class="article-title">kr3</h3></a> | |||
<h6 class="subheader" title="2017-01-01T03:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr3-ru.html">ru</a> | |||
</h6><p>kr3</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr3.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<!-- /#posts-list --> | |||
<div class="pagination-centered"> | |||
<h6 class="subheader">Page 1 of 2</h6> | |||
<h6 class="subheader">Page 1 of 1</h6> | |||
<p> | |||
<a href="https://ogstudio.github.io/category/review2.html">Next »</a> | |||
</p> | |||
</div> | |||
@@ -50,7 +50,7 @@ | |||
<article> | |||
<a href="https://ogstudio.github.io/kr2.html"><h3 class="article-title">kr2</h3></a> | |||
<h6 class="subheader" title="2017-01-01T02:04:00+07:00">Sun 01 January 2017 | |||
<h6 class="subheader" title="2017-01-01T02:04:00+07:00">Вс 01 Январь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr2-ru.html">ru</a> | |||
</h6><p>kr2</p> | |||
@@ -68,7 +68,7 @@ | |||
<article> | |||
<a href="https://ogstudio.github.io/kr1.html"><h3 class="article-title">kr1</h3></a> | |||
<h6 class="subheader" title="2017-01-01T01:04:00+07:00">Sun 01 January 2017 | |||
<h6 class="subheader" title="2017-01-01T01:04:00+07:00">Вс 01 Январь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr1-ru.html">ru</a> | |||
</h6><p>kr1</p> | |||
@@ -1,8 +1,61 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<feed xmlns="http://www.w3.org/2005/Atom"><title>Opensource Game Studio</title><link href="https://ogstudio.github.io/" rel="alternate"></link><link href="https://ogstudio.github.io/feeds/all.atom.xml" rel="self"></link><id>https://ogstudio.github.io/</id><updated>2017-07-01T00:00:00+07:00</updated><entry><title>OpenSceneGraph cross-platform guide</title><link href="https://ogstudio.github.io/openscenegraph-cross-platform-guide.html" rel="alternate"></link><published>2017-07-01T00:00:00+07:00</published><updated>2017-07-01T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-07-01:/openscenegraph-cross-platform-guide.html</id><summary type="html"><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> | |||
<p>This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.</p> | |||
<p>June marked the finish of <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> with the publishing of the last (initially planned) tutorial. The tutorial describes <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">how to build and run sample OpenSceneGraph application in Web</a> using Emscripten. | |||
In case you missed it, here's …</p></summary><content type="html"><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> | |||
<feed xmlns="http://www.w3.org/2005/Atom"><title>Opensource Game Studio</title><link href="https://ogstudio.github.io/" rel="alternate"></link><link href="https://ogstudio.github.io/feeds/all.atom.xml" rel="self"></link><id>https://ogstudio.github.io/</id><updated>2017-08-16T00:00:00+07:00</updated><entry><title>Scripting research</title><link href="https://ogstudio.github.io/scripting-research.html" rel="alternate"></link><updated>2017-08-16T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-08-16:scripting-research.html</id><summary type="html"><p><img alt="Scripting research" src="https://ogstudio.github.io/2017-08-scripting-research.png" /></p> | |||
<p>This article describes scripting research in July 2017.</p> | |||
<p><strong>Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.</strong></p> | |||
<p>OGS Editor 0.10 supports Python for such a code thanks to <a href="http://swig.org/">SWIG</a>. SWIG provides a way to wrap almost any C/C++ code and use it in dozens of languages like Python, Ruby, Lua, Java, C#, etc.. SWIG really helped us taste the beauty of platform-independent code. However, SWIG only works one way: from C/C++ to a target language. This means the main application must be in the target language, and C/C++ code can only be used as a library.</p> | |||
<p>Having the main application in Python works fine for the desktop, but not so great for mobile and web, where C and C++ are the only natively supported cross-platform languages. There are projects like <a href="https://kivy.org">Kivy</a>, which allow you to develop cross-platform applications in Python, but they are not supported natively. This means it's a lot of headaches when Android and iOS APIs change.</p> | |||
<p>Having the main application in C/C++ and the need to support scripting means that a scripting language should be interpreted by the application. This is what SWIG, Kivy, and similar projects are not meant to fulfill.</p> | |||
<p><strong>Our secondary goal for using a scripting language was to allow to extend C++ code.</strong></p> | |||
<p>OGS Editor 0.10 has some modules written in C++, and some in Python. The modules are equal from the perspective of the main application; it doesn't care what language the module is written in.</p> | |||
<p>To achieve such flexibility, we introduced a so-called Environment. Each module would register the keys it responds to, and Environment would deliver corresponding messages. | |||
Technically such behaviour is achieved by inheriting a base class and overriding its methods in both C++ and a scripting language.</p> | |||
<p><strong>First, we evaluated Python for the role of cross-platform scripting language.</strong></p> | |||
<p>Since we already used Python, we started to research the possibility to run Python code on every supported platform. The result was disappointing because CPython (the default Python implementation used on the desktop) does not mention mobile and web platforms. We only found some years old forks of CPython that were claimed to work either on Android or iOS. Such a disarray was not suitable for us. | |||
We also had a look at <a href="http://pypy.org">PyPy</a>, another Python implementation. It also did not mention support for mobile and web platforms.</p> | |||
<p>This was a clear indication that Python community doesn't care for mobile and web platforms. Or that nobody had time to provide the information about building Python on such platforms. Either way, it was not acceptable for us.</p> | |||
<p><strong>Second, we evaluated <a href="http://wren.io">Wren</a> for the role of cross-platform scripting language.</strong></p> | |||
<p>Wren was the first scripting language we stumbled upon in the long list of non-mainstream scripting languages.</p> | |||
<p>Wren claimed to be small and easy to learn. Wren also claimed to be intended for embedding in applications. Ironically, the author <a href="http://wren.io/embedding-api.html">had no time to document how to do the embedding in the first place</a>. When <a href="https://github.com/munificent/wren/issues/465">we asked for the time estimates of publishing</a> the critical part of the documentation, <a href="https://github.com/munificent/wren/issues/402">we just got a reference to another issue</a> where the other guy was asking the same question half a year ago!</p> | |||
<p>That's when we ended our relationship with Wren.</p> | |||
<p><strong>Third, we evaluated <a href="http://chaiscript.com">Chai</a> for the role of cross-platform scripting language.</strong></p> | |||
<p>Chai was in the long list of non-mainstream scripting languages, too. Chai was promising because it claimed to be specifically tailored for embedding in a C++ application. | |||
We successfully managed to call a C++ function from inside Chai but failed to call a member function. <a href="http://discourse.chaiscript.com/t/cannot-call-a-function-that-accepts-a-string-and-a-vector/334">We asked for help</a>, but nobody replied.</p> | |||
<p>We had to end our relationship with Chai.</p> | |||
<p><strong>Fourth, we evaluated Lua for the role of cross-platform scripting language.</strong></p> | |||
<p>Lua is the mainstream language for embedding. So we decided to try the obvious choice. Documentation looked promising, too. However, by the end of reading the <a href="https://www.lua.org/pil/24.html">C API</a> chapter we had no clue how to inherit a class inside Lua.</p> | |||
<p>This led us to search for libraries that wrap Lua C API syntax into something more meaningful for C++. That's how we found <a href="http://sol2.rtfd.io">Sol2</a>. Just as before, the first attempt to call a C++ member function from Lua failed. But unlike before, we asked for help and <a href="https://github.com/ThePhD/sol2/issues/465">got the help</a>! This was a refreshing surprise for us. | |||
Next, we tried to inherit a class in Lua and override the class methods. We failed, but <a href="https://github.com/ThePhD/sol2/issues/468">the author helped us out again</a>. In the end, we succeeded in inheriting a class and overriding its behaviour.</p> | |||
<p>That's when we understood it's a start for a long and mutual relationship with Sol2/Lua.</p> | |||
<p><strong>This search for a scripting language taught us one important lesson: people matter, not technologies.</strong></p> | |||
<p>There are lots of scripting languages that look shiny on the outside but are dead. Why? Because some authors don't have time for users. In return, users don't have time for the authors' projects.</p> | |||
<p>That's it for describing scripting research in July 2017.</p></summary></entry><entry><title>Изучение скриптования</title><link href="https://ogstudio.github.io/scripting-research-ru.html" rel="alternate"></link><updated>2017-08-16T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-08-16:scripting-research-ru.html</id><summary type="html"><p><img alt="Изучение скриптования" src="https://ogstudio.github.io/2017-08-scripting-research.png" /></p> | |||
<p>Эта статья описывает изучение скриптования в июле 2017.</p> | |||
<p><strong>Наша основная цель использования скриптового языка - это наличие платформо-независимого кода, выполняемого без изменений на каждой поддерживаемой платформе.</strong></p> | |||
<p>Редактор 0.10 использует Python в качестве подобного кода с помощью <a href="http://swig.org/">SWIG</a>. SWIG позволяет использовать практически любой код C/C++ из языков вроде Python, Ruby, Lua, Java, C# и т.д.. SWIG помог нам впервые оценить прелесть платформо-независимого кода. К сожалению, SWIG работает лишь в одном направлении: из C/C++ в язык назначения. Это приводит к тому, что основное приложение должно быть написано на языке назначения, а код C/C++ может быть использован лишь в виде библиотеки.</p> | |||
<p>Основное приложение на языке Python вполне подходит для десктопа, но не для мобилок и веба, где языки C и C++ являются единственными языками, поддерживаемыми нативно на каждой платформе. Конечно, существуют проекты вроде <a href="https://kivy.org">Kivy</a>, которые позволяет разрабатывать кросс-платформенные приложения на Python, но они не поддерживаются нативно. Отсутствие нативной поддержки выливается в огромную головную боль при изменении API у Android и iOS.</p> | |||
<p>Необходимость в приложении на C/C++ и поддержке скриптов приводит к обязательному интерпретированию скриптового языка самим приложением. Это как раз то, что SWIG, Kivy и подобные проекты не позволяют сделать.</p> | |||
<p><strong>Наша вторичная цель использования скриптового языка - это возможность расширения кода C++.</strong></p> | |||
<p>Одни модули Редактора 0.10 написаны на C++, а другие на Python. С точки зрения основного приложения, все модули равны. Для приложения нет никакой разницы, на каком языке написан конкретный модуль.</p> | |||
<p>Для достижения этой гибкости мы ввели так называемое Окружение (Environment). Каждый модуль регистрирует ключи (keys), на которые он отвечает, а Окружение доставляет соответствующие сообщения. Технически такое поведение можно достигнуть с помощью наследования базового класса и переопределения его методов как в C++, так и в скриптовом языке.</p> | |||
<p><strong>Python был первым языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.</strong></p> | |||
<p>Т.к. мы уже использовали Python, то логично было начать изучение с него. Мы хотели проверить, можно ли запустить код Python на каждой поддерживаемой платформе. К сожалению, результаты были удручающими, т.к. документация CPython (реализация Python, используемая по умолчанию на десктопе) никак не упоминала ни мобилки, ни веб. Всё, что мы нашли, - это пара форков CPython лохматых годов, которые якобы работают либо на Android, либо на iOS. Такой раздрай нас не устроил. | |||
Мы также рассмотрели <a href="http://pypy.org">PyPy</a>, ещё одну реализацию Python, но она тоже не содержала информации о мобилках и вебе.</p> | |||
<p>Это было чётким сигналом об отсутствии интереса к мобилками и вебу со стороны сообщества Python. Либо об отсутствии времени даже на то, чтобы описать использование Python на данных платформах. В любом случае, такое положение вещей нас не устроило.</p> | |||
<p><strong><a href="http://wren.io">Wren</a> был вторым языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.</strong></p> | |||
<p>Wren был первым языком из длинного списка малоизвестных скриптовых языков.</p> | |||
<p>Wren преподносился как небольшой и простой язык. Согласно документации, основная цель Wren - это быть встроенным в приложение. По иронии судьбы, у автора <a href="http://wren.io/embedding-api.html">не было времени описать в документации встраивание Wren</a> в приложение. Когда мы <a href="https://github.com/munificent/wren/issues/465">спросили о сроках публикации</a> этой критически важной части документации, мы <a href="https://github.com/munificent/wren/issues/402">получили в ответ ссылку на тикет</a>, в котором другой человек спрашивал тот же самый вопрос полгода назад!</p> | |||
<p>На этом мы закончили отношения с Wren.</p> | |||
<p><strong><a href="http://chaiscript.com">Chai</a> был третьим языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.</strong></p> | |||
<p>Chai был в том же длинном списке малоизвестных скриптовых языков. Он преподносился как язык, специально предназначенный для встраивания в приложения C++. Мы без проблем вызвали функцию C++ из Chai, но нам не удалось вызвать метод класса. <a href="http://discourse.chaiscript.com/t/cannot-call-a-function-that-accepts-a-string-and-a-vector/334">Мы попросили о помощи</a>, но ответом была лишь тишина.</p> | |||
<p>Нам пришлось завершить отношения с Chai.</p> | |||
<p><strong>Lua был четвёртым языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.</strong></p> | |||
<p>Lua является популярным языком для встраивания. Мы решили попробовать очевидный вариант. Документация выглядела многообещающе, однако под конец чтения главы <a href="https://www.lua.org/pil/24.html">C API</a> у нас не было ни малейшего представления, как наследовать класс C++ в Lua.</p> | |||
<p>Этот вопрос заставил нас найти библиотеку, которая смогла бы на него ответить: <a href="http://sol2.rtfd.io">Sol2</a>. Первая попытка вызвать функцию C++ из Lua провалилась. Правда, на этот раз наш вопрос был услышан, и <a href="https://github.com/ThePhD/sol2/issues/465">мы получили ответ</a>! Мы были сильно удивлены. | |||
Далее мы попытались наследовать класс C++ в Lua, чтобы переопределить методы класса. Нам это не удалось с первого раза, но автор Sol2 <a href="https://github.com/ThePhD/sol2/issues/468">снова помог нам</a>.</p> | |||
<p>В тот момент мы поняли, что это начало долгого и взаимовыгодного сотрудничества с Sol2/Lua.</p> | |||
<p><strong>Поиск скриптового языка открыл для нас следующую истину: люди важнее технологий.</strong></p> | |||
<p>Существует множество скриптовых языков, которые выглядят привлекательно на первый взгляд, но которые мертвы. Почему? Потому что у некоторых авторов нет времени на пользователей. В ответ пользователи предпочитают не тратить своё время на проекты подобных авторов.</p> | |||
<p>На этом мы заканчиваем описание изучения скриптования в июле 2017.</p></summary></entry><entry><title>OpenSceneGraph cross-platform guide</title><link href="https://ogstudio.github.io/openscenegraph-cross-platform-guide.html" rel="alternate"></link><updated>2017-07-17T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-07-17:openscenegraph-cross-platform-guide.html</id><summary type="html"><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png" /></p> | |||
<p>This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.</p> | |||
<p>June marked the finish of <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> with the publishing of the last (initially planned) tutorial. The tutorial describes <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">how to build and run sample OpenSceneGraph application in Web</a> using Emscripten. | |||
In case you missed it, here's a <a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide/">link to the final application</a>. Open it in your web browser.</p> | |||
@@ -21,10 +74,7 @@ We spent 120 hours in five months to produce ten tutorials of the guide.</p&g | |||
</ol> | |||
<p>Reaching our goal of researching OpenSceneGraph cross-platform development and providing the knowledge back to the community just made us happier.</p> | |||
<p>However, our journey does not stop here. Using the knowledge of the guide, we now continue to work on bringing our tools to support mobile and web, just as we <a href="http://opengamestudio.org/lang/en/news/2456">promised in January</a>.</p> | |||
<p>That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.</p></content></entry><entry><title>OpenSceneGraph cross-platform guide</title><link href="https://ogstudio.github.io/openscenegraph-cross-platform-guide-ru.html" rel="alternate"></link><published>2017-07-01T00:00:00+07:00</published><updated>2017-07-01T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-07-01:/openscenegraph-cross-platform-guide-ru.html</id><summary type="html"><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> | |||
<p>Эта статья резюмирует создание кросс-платформенного руководства OpenSceneGraph.</p> | |||
<p>Июнь ознаменовал собой окончание работы над <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">кросс-платформенным руководством OpenSceneGraph</a>. Мы опубликовали последний самоучитель (из изначально запланированных). Этот самоучитель описывает <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">сборку и запуск примера приложения OpenSceneGraph в вебе</a> с помощью Emscripten. | |||
Если вы упустили этот самоучитель, то вот <a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide/">ссылка на приложение</a> из него. Откройте …</p></summary><content type="html"><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> | |||
<p>That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.</p></summary></entry><entry><title>OpenSceneGraph cross-platform guide</title><link href="https://ogstudio.github.io/openscenegraph-cross-platform-guide-ru.html" rel="alternate"></link><updated>2017-07-17T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-07-17:openscenegraph-cross-platform-guide-ru.html</id><summary type="html"><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png" /></p> | |||
<p>Эта статья резюмирует создание кросс-платформенного руководства OpenSceneGraph.</p> | |||
<p>Июнь ознаменовал собой окончание работы над <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">кросс-платформенным руководством OpenSceneGraph</a>. Мы опубликовали последний самоучитель (из изначально запланированных). Этот самоучитель описывает <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">сборку и запуск примера приложения OpenSceneGraph в вебе</a> с помощью Emscripten. | |||
Если вы упустили этот самоучитель, то вот <a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide/">ссылка на приложение</a> из него. Откройте ссылку в веб-браузере.</p> | |||
@@ -43,9 +93,7 @@ We spent 120 hours in five months to produce ten tutorials of the guide.</p&g | |||
</ol> | |||
<p>В конце концов, мы просто рады тому факту, что изучили кросс-платформенную разработку с OpenSceneGraph и поделились этим знанием с сообществом.</p> | |||
<p>Тем не менее, наше путешествие на этом не окончено. Используя знания руководства, мы продолжаем работу над тем, чтобы добавить в свои инструменты поддержку мобилок и веба, как мы <a href="http://opengamestudio.org/lang/ru/news/2456">обещали в январе</a>.</p> | |||
<p>На этом мы заканчиваем резюме о создании кросс-платформенного руководства OpenSceneGraph.</p></content></entry><entry><title>iOS tutorial</title><link href="https://ogstudio.github.io/ios-tutorial.html" rel="alternate"></link><published>2017-06-08T10:00:00+07:00</published><updated>2017-06-08T10:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-08:/ios-tutorial.html</id><summary type="html"><p><img alt="iOS tutorial" src="https://ogstudio.github.io/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 up …</p></summary><content type="html"><p><img alt="iOS tutorial" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> | |||
<p>На этом мы заканчиваем резюме о создании кросс-платформенного руководства OpenSceneGraph.</p></summary></entry><entry><title>iOS tutorial</title><link href="https://ogstudio.github.io/ios-tutorial.html" rel="alternate"></link><updated>2017-06-08T10:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-08:ios-tutorial.html</id><summary type="html"><p><img alt="iOS tutorial" src="https://ogstudio.github.io/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 up with a hackish demo that works for one person, but it's hard to create a concise example that works for everyone.</p> | |||
<h3>Native library</h3> | |||
@@ -84,9 +132,7 @@ We spent 120 hours in five months to produce ten tutorials of the guide.</p&g | |||
<li>main.h - contains the rest of the sample application code</li> | |||
</ol> | |||
<p>Their contents differ slightly for each platform, but it's easy to see the whole picture now.</p> | |||
<p>That's it for describing problems we faced during the creation of iOS tutorial in May 2017.</p></content></entry><entry><title>Самоучитель iOS</title><link href="https://ogstudio.github.io/ios-tutorial-ru.html" rel="alternate"></link><published>2017-06-08T10:00:00+07:00</published><updated>2017-06-08T10:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-08:/ios-tutorial-ru.html</id><summary type="html"><p><img alt="Самоучитель iOS" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> | |||
<p>Эта статья описывает проблемы, с которыми мы столкнулись во время создания самоучителя для iOS в мае 2017.</p> | |||
<p><a href="https://twitter.com/OpenGameStudio/status/826816343433498627">В феврале</a> мы сумели отобразить простую модель под iOS за считанные дни. Это дало нам уверенность, что самоучитель для iOS мы сделаем столь же быстро. Тем не менее, реальность напомнила нам о простой …</p></summary><content type="html"><p><img alt="Самоучитель iOS" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> | |||
<p>That's it for describing problems we faced during the creation of iOS tutorial in May 2017.</p></summary></entry><entry><title>Самоучитель iOS</title><link href="https://ogstudio.github.io/ios-tutorial-ru.html" rel="alternate"></link><updated>2017-06-08T10:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-08:ios-tutorial-ru.html</id><summary type="html"><p><img alt="Самоучитель iOS" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png" /></p> | |||
<p>Эта статья описывает проблемы, с которыми мы столкнулись во время создания самоучителя для iOS в мае 2017.</p> | |||
<p><a href="https://twitter.com/OpenGameStudio/status/826816343433498627">В феврале</a> мы сумели отобразить простую модель под iOS за считанные дни. Это дало нам уверенность, что самоучитель для iOS мы сделаем столь же быстро. Тем не менее, реальность напомнила нам о простой вещи: быстро сделать можно лишь поделку на коленке, работающую только у самого разработчика; над логически связанным примером, работающим у всех, придётся попотеть.</p> | |||
<h3>Нативная библиотека</h3> | |||
@@ -125,56 +171,10 @@ We spent 120 hours in five months to produce ten tutorials of the guide.</p&g | |||
<li>main.h - содержит остальной код приложения</li> | |||
</ol> | |||
<p>Их содержимое несколько отличается для каждой из платформ, но наличие всего двух файлов позволяет увидеть общую картину.</p> | |||
<p>На этом мы заканчиваем описание проблем, с которыми мы столкнулись во время создания самоучителя для iOS в мае 2017.</p></content></entry><entry><title>Pelican review</title><link href="https://ogstudio.github.io/pelican-review.html" rel="alternate"></link><published>2017-06-03T22:00:00+07:00</published><updated>2017-06-03T22:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-03:/pelican-review.html</id><summary type="html"><p>So far so nice. Pelican is really cool, and provides a quick starting guided | |||
to get up and running real fast.</p> | |||
<p>Much more smooth than Jekyll.</p> | |||
<p>I &lt;3 Python and its ecosystem. Something is just EASIER in Python.</p></summary><content type="html"><p>So far so nice. Pelican is really cool, and provides a quick starting guided | |||
<p>На этом мы заканчиваем описание проблем, с которыми мы столкнулись во время создания самоучителя для iOS в мае 2017.</p></summary></entry><entry><title>Pelican review</title><link href="https://ogstudio.github.io/pelican-review.html" rel="alternate"></link><updated>2017-06-03T22:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-03:pelican-review.html</id><summary type="html"><p>So far so nice. Pelican is really cool, and provides a quick starting guided | |||
to get up and running real fast.</p> | |||
<p>Much more smooth than Jekyll.</p> | |||
<p>I &lt;3 Python and its ecosystem. Something is just EASIER in Python.</p></content></entry><entry><title>Обзор Pelican</title><link href="https://ogstudio.github.io/pelican-review-ru.html" rel="alternate"></link><published>2017-06-03T22:00:00+07:00</published><updated>2017-06-03T22:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-03:/pelican-review-ru.html</id><summary type="html"><p>Пока что полёт нормальный. Pelican действительно крут, позволяет | |||
быстро всё настроить и запуститься.</p> | |||
<p>Намного легче, чем Jekyll.</p> | |||
<p>&lt;3 Python и его экосистему. Что-то просто ЛЕГЧЕ в Python.</p></summary><content type="html"><p>Пока что полёт нормальный. Pelican действительно крут, позволяет | |||
<p>I &lt;3 Python and its ecosystem. Something is just EASIER in Python.</p></summary></entry><entry><title>Обзор Pelican</title><link href="https://ogstudio.github.io/pelican-review-ru.html" rel="alternate"></link><updated>2017-06-03T22:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-03:pelican-review-ru.html</id><summary type="html"><p>Пока что полёт нормальный. Pelican действительно крут, позволяет | |||
быстро всё настроить и запуститься.</p> | |||
<p>Намного легче, чем Jekyll.</p> | |||
<p>&lt;3 Python и его экосистему. Что-то просто ЛЕГЧЕ в Python.</p></content></entry><entry><title>My first review</title><link href="https://ogstudio.github.io/keyboard-review.html" rel="alternate"></link><published>2017-06-01T10:20:00+07:00</published><updated>2017-06-01T10:20:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-01:/keyboard-review.html</id><summary type="html"><p>Here is a full review, guys.</p></summary><content type="html"><p>Here is a full review, guys.</p></content></entry><entry><title>Моё первое ревью</title><link href="https://ogstudio.github.io/keyboard-review-ru.html" rel="alternate"></link><published>2017-06-01T10:20:00+07:00</published><updated>2017-06-01T10:20:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-01:/keyboard-review-ru.html</id><summary type="html"><p>Вот и моё первое ревью, чуввви.</p></summary><content type="html"><p>Вот и моё первое ревью, чуввви.</p></content></entry><entry><title>kr10</title><link href="https://ogstudio.github.io/kr10.html" rel="alternate"></link><published>2017-01-01T10:04:00+07:00</published><updated>2017-01-01T10:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr10.html</id><summary type="html"><p>kr10</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr10</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr10</title><link href="https://ogstudio.github.io/kr10-ru.html" rel="alternate"></link><published>2017-01-01T10:04:00+07:00</published><updated>2017-01-01T10:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr10-ru.html</id><summary type="html"><p>kr10</p> | |||
<p>LANG: ru</p></summary><content type="html"><p>kr10</p> | |||
<p>LANG: ru</p></content></entry><entry><title>kr9</title><link href="https://ogstudio.github.io/kr9.html" rel="alternate"></link><published>2017-01-01T09:04:00+07:00</published><updated>2017-01-01T09:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr9.html</id><summary type="html"><p>kr9</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr9</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr9</title><link href="https://ogstudio.github.io/kr9-ru.html" rel="alternate"></link><published>2017-01-01T09:04:00+07:00</published><updated>2017-01-01T09:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr9-ru.html</id><summary type="html"><p>kr9</p> | |||
<p>LANG: ru</p></summary><content type="html"><p>kr9</p> | |||
<p>LANG: ru</p></content></entry><entry><title>kr8</title><link href="https://ogstudio.github.io/kr8.html" rel="alternate"></link><published>2017-01-01T08:04:00+07:00</published><updated>2017-01-01T08:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr8.html</id><summary type="html"><p>kr8</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr8</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr8</title><link href="https://ogstudio.github.io/kr8-ru.html" rel="alternate"></link><published>2017-01-01T08:04:00+07:00</published><updated>2017-01-01T08:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr8-ru.html</id><summary type="html"><p>kr8</p> | |||
<p>LANG: ru</p></summary><content type="html"><p>kr8</p> | |||
<p>LANG: ru</p></content></entry><entry><title>kr7</title><link href="https://ogstudio.github.io/kr7.html" rel="alternate"></link><published>2017-01-01T07:04:00+07:00</published><updated>2017-01-01T07:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr7.html</id><summary type="html"><p>kr7</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr7</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr7</title><link href="https://ogstudio.github.io/kr7-ru.html" rel="alternate"></link><published>2017-01-01T07:04:00+07:00</published><updated>2017-01-01T07:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr7-ru.html</id><summary type="html"><p>kr7</p> | |||
<p>LANG: ru</p></summary><content type="html"><p>kr7</p> | |||
<p>LANG: ru</p></content></entry><entry><title>kr6</title><link href="https://ogstudio.github.io/kr6.html" rel="alternate"></link><published>2017-01-01T06:04:00+07:00</published><updated>2017-01-01T06:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr6.html</id><summary type="html"><p>kr6</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr6</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr6</title><link href="https://ogstudio.github.io/kr6-ru.html" rel="alternate"></link><published>2017-01-01T06:04:00+07:00</published><updated>2017-01-01T06:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr6-ru.html</id><summary type="html"><p>kr6</p> | |||
<p>LANG: ru</p></summary><content type="html"><p>kr6</p> | |||
<p>LANG: ru</p></content></entry><entry><title>kr5</title><link href="https://ogstudio.github.io/kr5.html" rel="alternate"></link><published>2017-01-01T05:04:00+07:00</published><updated>2017-01-01T05:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr5.html</id><summary type="html"><p>kr5</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr5</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr5</title><link href="https://ogstudio.github.io/kr5-ru.html" rel="alternate"></link><published>2017-01-01T05:04:00+07:00</published><updated>2017-01-01T05:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr5-ru.html</id><summary type="html"><p>kr5</p> | |||
<p>LANG: ru</p></summary><content type="html"><p>kr5</p> | |||
<p>LANG: ru</p></content></entry><entry><title>kr4</title><link href="https://ogstudio.github.io/kr4.html" rel="alternate"></link><published>2017-01-01T04:04:00+07:00</published><updated>2017-01-01T04:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr4.html</id><summary type="html"><p>kr4</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr4</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr4</title><link href="https://ogstudio.github.io/kr4-ru.html" rel="alternate"></link><published>2017-01-01T04:04:00+07:00</published><updated>2017-01-01T04:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr4-ru.html</id><summary type="html"><p>kr4</p> | |||
<p>LANG: ru</p></summary><content type="html"><p>kr4</p> | |||
<p>LANG: ru</p></content></entry><entry><title>kr3</title><link href="https://ogstudio.github.io/kr3.html" rel="alternate"></link><published>2017-01-01T03:04:00+07:00</published><updated>2017-01-01T03:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr3.html</id><summary type="html"><p>kr3</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr3</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr3</title><link href="https://ogstudio.github.io/kr3-ru.html" rel="alternate"></link><published>2017-01-01T03:04:00+07:00</published><updated>2017-01-01T03:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr3-ru.html</id><summary type="html"><p>kr3</p> | |||
<p>LANG: ru</p></summary><content type="html"><p>kr3</p> | |||
<p>LANG: ru</p></content></entry><entry><title>kr2</title><link href="https://ogstudio.github.io/kr2.html" rel="alternate"></link><published>2017-01-01T02:04:00+07:00</published><updated>2017-01-01T02:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr2.html</id><summary type="html"><p>kr2</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr2</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr2</title><link href="https://ogstudio.github.io/kr2-ru.html" rel="alternate"></link><published>2017-01-01T02:04:00+07:00</published><updated>2017-01-01T02:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr2-ru.html</id><summary type="html"><p>kr2</p> | |||
<p>LANG: ru</p></summary><content type="html"><p>kr2</p> | |||
<p>LANG: ru</p></content></entry><entry><title>kr1</title><link href="https://ogstudio.github.io/kr1.html" rel="alternate"></link><published>2017-01-01T01:04:00+07:00</published><updated>2017-01-01T01:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr1.html</id><summary type="html"><p>kr1</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr1</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr1</title><link href="https://ogstudio.github.io/kr1-ru.html" rel="alternate"></link><published>2017-01-01T01:04:00+07:00</published><updated>2017-01-01T01:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr1-ru.html</id><summary type="html"><p>kr1</p> | |||
<p>LANG: ru</p></summary><content type="html"><p>kr1</p> | |||
<p>LANG: ru</p></content></entry></feed> | |||
<p>&lt;3 Python и его экосистему. Что-то просто ЛЕГЧЕ в Python.</p></summary></entry><entry><title>My first review</title><link href="https://ogstudio.github.io/keyboard-review.html" rel="alternate"></link><updated>2017-06-01T10:20:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-01:keyboard-review.html</id><summary type="html"><p>Here is a full review, guys.</p></summary></entry><entry><title>Моё первое ревью</title><link href="https://ogstudio.github.io/keyboard-review-ru.html" rel="alternate"></link><updated>2017-06-01T10:20:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-01:keyboard-review-ru.html</id><summary type="html"><p>Вот и моё первое ревью, чуввви.</p></summary></entry></feed> |
@@ -1,8 +1,34 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<feed xmlns="http://www.w3.org/2005/Atom"><title>Opensource Game Studio - News</title><link href="https://ogstudio.github.io/" rel="alternate"></link><link href="https://ogstudio.github.io/feeds/news.atom.xml" rel="self"></link><id>https://ogstudio.github.io/</id><updated>2017-07-01T00:00:00+07:00</updated><entry><title>OpenSceneGraph cross-platform guide</title><link href="https://ogstudio.github.io/openscenegraph-cross-platform-guide.html" rel="alternate"></link><published>2017-07-01T00:00:00+07:00</published><updated>2017-07-01T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-07-01:/openscenegraph-cross-platform-guide.html</id><summary type="html"><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> | |||
<p>This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.</p> | |||
<p>June marked the finish of <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> with the publishing of the last (initially planned) tutorial. The tutorial describes <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">how to build and run sample OpenSceneGraph application in Web</a> using Emscripten. | |||
In case you missed it, here's …</p></summary><content type="html"><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> | |||
<feed xmlns="http://www.w3.org/2005/Atom"><title>Opensource Game Studio</title><link href="https://ogstudio.github.io/" rel="alternate"></link><link href="https://ogstudio.github.io/feeds/news.atom.xml" rel="self"></link><id>https://ogstudio.github.io/</id><updated>2017-08-16T00:00:00+07:00</updated><entry><title>Scripting research</title><link href="https://ogstudio.github.io/scripting-research.html" rel="alternate"></link><updated>2017-08-16T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-08-16:scripting-research.html</id><summary type="html"><p><img alt="Scripting research" src="https://ogstudio.github.io/2017-08-scripting-research.png" /></p> | |||
<p>This article describes scripting research in July 2017.</p> | |||
<p><strong>Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.</strong></p> | |||
<p>OGS Editor 0.10 supports Python for such a code thanks to <a href="http://swig.org/">SWIG</a>. SWIG provides a way to wrap almost any C/C++ code and use it in dozens of languages like Python, Ruby, Lua, Java, C#, etc.. SWIG really helped us taste the beauty of platform-independent code. However, SWIG only works one way: from C/C++ to a target language. This means the main application must be in the target language, and C/C++ code can only be used as a library.</p> | |||
<p>Having the main application in Python works fine for the desktop, but not so great for mobile and web, where C and C++ are the only natively supported cross-platform languages. There are projects like <a href="https://kivy.org">Kivy</a>, which allow you to develop cross-platform applications in Python, but they are not supported natively. This means it's a lot of headaches when Android and iOS APIs change.</p> | |||
<p>Having the main application in C/C++ and the need to support scripting means that a scripting language should be interpreted by the application. This is what SWIG, Kivy, and similar projects are not meant to fulfill.</p> | |||
<p><strong>Our secondary goal for using a scripting language was to allow to extend C++ code.</strong></p> | |||
<p>OGS Editor 0.10 has some modules written in C++, and some in Python. The modules are equal from the perspective of the main application; it doesn't care what language the module is written in.</p> | |||
<p>To achieve such flexibility, we introduced a so-called Environment. Each module would register the keys it responds to, and Environment would deliver corresponding messages. | |||
Technically such behaviour is achieved by inheriting a base class and overriding its methods in both C++ and a scripting language.</p> | |||
<p><strong>First, we evaluated Python for the role of cross-platform scripting language.</strong></p> | |||
<p>Since we already used Python, we started to research the possibility to run Python code on every supported platform. The result was disappointing because CPython (the default Python implementation used on the desktop) does not mention mobile and web platforms. We only found some years old forks of CPython that were claimed to work either on Android or iOS. Such a disarray was not suitable for us. | |||
We also had a look at <a href="http://pypy.org">PyPy</a>, another Python implementation. It also did not mention support for mobile and web platforms.</p> | |||
<p>This was a clear indication that Python community doesn't care for mobile and web platforms. Or that nobody had time to provide the information about building Python on such platforms. Either way, it was not acceptable for us.</p> | |||
<p><strong>Second, we evaluated <a href="http://wren.io">Wren</a> for the role of cross-platform scripting language.</strong></p> | |||
<p>Wren was the first scripting language we stumbled upon in the long list of non-mainstream scripting languages.</p> | |||
<p>Wren claimed to be small and easy to learn. Wren also claimed to be intended for embedding in applications. Ironically, the author <a href="http://wren.io/embedding-api.html">had no time to document how to do the embedding in the first place</a>. When <a href="https://github.com/munificent/wren/issues/465">we asked for the time estimates of publishing</a> the critical part of the documentation, <a href="https://github.com/munificent/wren/issues/402">we just got a reference to another issue</a> where the other guy was asking the same question half a year ago!</p> | |||
<p>That's when we ended our relationship with Wren.</p> | |||
<p><strong>Third, we evaluated <a href="http://chaiscript.com">Chai</a> for the role of cross-platform scripting language.</strong></p> | |||
<p>Chai was in the long list of non-mainstream scripting languages, too. Chai was promising because it claimed to be specifically tailored for embedding in a C++ application. | |||
We successfully managed to call a C++ function from inside Chai but failed to call a member function. <a href="http://discourse.chaiscript.com/t/cannot-call-a-function-that-accepts-a-string-and-a-vector/334">We asked for help</a>, but nobody replied.</p> | |||
<p>We had to end our relationship with Chai.</p> | |||
<p><strong>Fourth, we evaluated Lua for the role of cross-platform scripting language.</strong></p> | |||
<p>Lua is the mainstream language for embedding. So we decided to try the obvious choice. Documentation looked promising, too. However, by the end of reading the <a href="https://www.lua.org/pil/24.html">C API</a> chapter we had no clue how to inherit a class inside Lua.</p> | |||
<p>This led us to search for libraries that wrap Lua C API syntax into something more meaningful for C++. That's how we found <a href="http://sol2.rtfd.io">Sol2</a>. Just as before, the first attempt to call a C++ member function from Lua failed. But unlike before, we asked for help and <a href="https://github.com/ThePhD/sol2/issues/465">got the help</a>! This was a refreshing surprise for us. | |||
Next, we tried to inherit a class in Lua and override the class methods. We failed, but <a href="https://github.com/ThePhD/sol2/issues/468">the author helped us out again</a>. In the end, we succeeded in inheriting a class and overriding its behaviour.</p> | |||
<p>That's when we understood it's a start for a long and mutual relationship with Sol2/Lua.</p> | |||
<p><strong>This search for a scripting language taught us one important lesson: people matter, not technologies.</strong></p> | |||
<p>There are lots of scripting languages that look shiny on the outside but are dead. Why? Because some authors don't have time for users. In return, users don't have time for the authors' projects.</p> | |||
<p>That's it for describing scripting research in July 2017.</p></summary></entry><entry><title>OpenSceneGraph cross-platform guide</title><link href="https://ogstudio.github.io/openscenegraph-cross-platform-guide.html" rel="alternate"></link><updated>2017-07-17T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-07-17:openscenegraph-cross-platform-guide.html</id><summary type="html"><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png" /></p> | |||
<p>This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.</p> | |||
<p>June marked the finish of <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> with the publishing of the last (initially planned) tutorial. The tutorial describes <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">how to build and run sample OpenSceneGraph application in Web</a> using Emscripten. | |||
In case you missed it, here's a <a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide/">link to the final application</a>. Open it in your web browser.</p> | |||
@@ -21,9 +47,7 @@ We spent 120 hours in five months to produce ten tutorials of the guide.</p&g | |||
</ol> | |||
<p>Reaching our goal of researching OpenSceneGraph cross-platform development and providing the knowledge back to the community just made us happier.</p> | |||
<p>However, our journey does not stop here. Using the knowledge of the guide, we now continue to work on bringing our tools to support mobile and web, just as we <a href="http://opengamestudio.org/lang/en/news/2456">promised in January</a>.</p> | |||
<p>That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.</p></content></entry><entry><title>iOS tutorial</title><link href="https://ogstudio.github.io/ios-tutorial.html" rel="alternate"></link><published>2017-06-08T10:00:00+07:00</published><updated>2017-06-08T10:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-08:/ios-tutorial.html</id><summary type="html"><p><img alt="iOS tutorial" src="https://ogstudio.github.io/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 up …</p></summary><content type="html"><p><img alt="iOS tutorial" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> | |||
<p>That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.</p></summary></entry><entry><title>iOS tutorial</title><link href="https://ogstudio.github.io/ios-tutorial.html" rel="alternate"></link><updated>2017-06-08T10:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-08:ios-tutorial.html</id><summary type="html"><p><img alt="iOS tutorial" src="https://ogstudio.github.io/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 up with a hackish demo that works for one person, but it's hard to create a concise example that works for everyone.</p> | |||
<h3>Native library</h3> | |||
@@ -62,4 +86,4 @@ We spent 120 hours in five months to produce ten tutorials of the guide.</p&g | |||
<li>main.h - contains the rest of the sample application code</li> | |||
</ol> | |||
<p>Their contents differ slightly for each platform, but it's easy to see the whole picture now.</p> | |||
<p>That's it for describing problems we faced during the creation of iOS tutorial in May 2017.</p></content></entry></feed> | |||
<p>That's it for describing problems we faced during the creation of iOS tutorial in May 2017.</p></summary></entry></feed> |
@@ -1,28 +1,5 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<feed xmlns="http://www.w3.org/2005/Atom"><title>Opensource Game Studio - Review</title><link href="https://ogstudio.github.io/" rel="alternate"></link><link href="https://ogstudio.github.io/feeds/review.atom.xml" rel="self"></link><id>https://ogstudio.github.io/</id><updated>2017-06-03T22:00:00+07:00</updated><entry><title>Pelican review</title><link href="https://ogstudio.github.io/pelican-review.html" rel="alternate"></link><published>2017-06-03T22:00:00+07:00</published><updated>2017-06-03T22:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-03:/pelican-review.html</id><summary type="html"><p>So far so nice. Pelican is really cool, and provides a quick starting guided | |||
<feed xmlns="http://www.w3.org/2005/Atom"><title>Opensource Game Studio</title><link href="https://ogstudio.github.io/" rel="alternate"></link><link href="https://ogstudio.github.io/feeds/review.atom.xml" rel="self"></link><id>https://ogstudio.github.io/</id><updated>2017-06-03T22:00:00+07:00</updated><entry><title>Pelican review</title><link href="https://ogstudio.github.io/pelican-review.html" rel="alternate"></link><updated>2017-06-03T22:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-03:pelican-review.html</id><summary type="html"><p>So far so nice. Pelican is really cool, and provides a quick starting guided | |||
to get up and running real fast.</p> | |||
<p>Much more smooth than Jekyll.</p> | |||
<p>I &lt;3 Python and its ecosystem. Something is just EASIER in Python.</p></summary><content type="html"><p>So far so nice. Pelican is really cool, and provides a quick starting guided | |||
to get up and running real fast.</p> | |||
<p>Much more smooth than Jekyll.</p> | |||
<p>I &lt;3 Python and its ecosystem. Something is just EASIER in Python.</p></content></entry><entry><title>My first review</title><link href="https://ogstudio.github.io/keyboard-review.html" rel="alternate"></link><published>2017-06-01T10:20:00+07:00</published><updated>2017-06-01T10:20:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-01:/keyboard-review.html</id><summary type="html"><p>Here is a full review, guys.</p></summary><content type="html"><p>Here is a full review, guys.</p></content></entry><entry><title>kr10</title><link href="https://ogstudio.github.io/kr10.html" rel="alternate"></link><published>2017-01-01T10:04:00+07:00</published><updated>2017-01-01T10:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr10.html</id><summary type="html"><p>kr10</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr10</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr9</title><link href="https://ogstudio.github.io/kr9.html" rel="alternate"></link><published>2017-01-01T09:04:00+07:00</published><updated>2017-01-01T09:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr9.html</id><summary type="html"><p>kr9</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr9</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr8</title><link href="https://ogstudio.github.io/kr8.html" rel="alternate"></link><published>2017-01-01T08:04:00+07:00</published><updated>2017-01-01T08:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr8.html</id><summary type="html"><p>kr8</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr8</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr7</title><link href="https://ogstudio.github.io/kr7.html" rel="alternate"></link><published>2017-01-01T07:04:00+07:00</published><updated>2017-01-01T07:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr7.html</id><summary type="html"><p>kr7</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr7</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr6</title><link href="https://ogstudio.github.io/kr6.html" rel="alternate"></link><published>2017-01-01T06:04:00+07:00</published><updated>2017-01-01T06:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr6.html</id><summary type="html"><p>kr6</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr6</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr5</title><link href="https://ogstudio.github.io/kr5.html" rel="alternate"></link><published>2017-01-01T05:04:00+07:00</published><updated>2017-01-01T05:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr5.html</id><summary type="html"><p>kr5</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr5</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr4</title><link href="https://ogstudio.github.io/kr4.html" rel="alternate"></link><published>2017-01-01T04:04:00+07:00</published><updated>2017-01-01T04:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr4.html</id><summary type="html"><p>kr4</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr4</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr3</title><link href="https://ogstudio.github.io/kr3.html" rel="alternate"></link><published>2017-01-01T03:04:00+07:00</published><updated>2017-01-01T03:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr3.html</id><summary type="html"><p>kr3</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr3</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr2</title><link href="https://ogstudio.github.io/kr2.html" rel="alternate"></link><published>2017-01-01T02:04:00+07:00</published><updated>2017-01-01T02:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr2.html</id><summary type="html"><p>kr2</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr2</p> | |||
<p>LANG: en</p></content></entry><entry><title>kr1</title><link href="https://ogstudio.github.io/kr1.html" rel="alternate"></link><published>2017-01-01T01:04:00+07:00</published><updated>2017-01-01T01:04:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-01-01:/kr1.html</id><summary type="html"><p>kr1</p> | |||
<p>LANG: en</p></summary><content type="html"><p>kr1</p> | |||
<p>LANG: en</p></content></entry></feed> | |||
<p>I &lt;3 Python and its ecosystem. Something is just EASIER in Python.</p></summary></entry><entry><title>My first review</title><link href="https://ogstudio.github.io/keyboard-review.html" rel="alternate"></link><updated>2017-06-01T10:20:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-01:keyboard-review.html</id><summary type="html"><p>Here is a full review, guys.</p></summary></entry></feed> |
@@ -47,52 +47,82 @@ | |||
<article> | |||
<a href="https://ogstudio.github.io/scripting-research.html"><h3 class="article-title">Scripting research</h3></a> | |||
<h6 class="subheader" title="2017-08-16T00:00:00+07:00">Ср 16 Август 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/scripting-research-ru.html">ru</a> | |||
</h6><p><img alt="Scripting research" src="https://ogstudio.github.io/2017-08-scripting-research.png" /></p> | |||
<p>This article describes scripting research in July 2017.</p> | |||
<p><strong>Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.</strong></p> | |||
<p>OGS Editor 0.10 supports Python for such a code thanks to <a href="http://swig.org/">SWIG</a>. SWIG provides a way to wrap almost any C/C++ code and use it in dozens of languages like Python, Ruby, Lua, Java, C#, etc.. SWIG really helped us taste the beauty of platform-independent code. However, SWIG only works one way: from C/C++ to a target language. This means the main application must be in the target language, and C/C++ code can only be used as a library.</p> | |||
<p>Having the main application in Python works fine for the desktop, but not so great for mobile and web, where C and C++ are the only natively supported cross-platform languages. There are projects like <a href="https://kivy.org">Kivy</a>, which allow you to develop cross-platform applications in Python, but they are not supported natively. This means it's a lot of headaches when Android and iOS APIs change.</p> | |||
<p>Having the main application in C/C++ and the need to support scripting means that a scripting language should be interpreted by the application. This is what SWIG, Kivy, and similar projects are not meant to fulfill.</p> | |||
<p><strong>Our secondary goal for using a scripting language was to allow to extend C++ code.</strong></p> | |||
<p>OGS Editor 0.10 has some modules written in C++, and some in Python. The modules are equal from the perspective of the main application; it doesn't care what language the module is written in.</p> | |||
<p>To achieve such flexibility, we introduced a so-called Environment. Each module would register the keys it responds to, and Environment would deliver corresponding messages. | |||
Technically such behaviour is achieved by inheriting a base class and overriding its methods in both C++ and a scripting language.</p> | |||
<p><strong>First, we evaluated Python for the role of cross-platform scripting language.</strong></p> | |||
<p>Since we already used Python, we started to research the possibility to run Python code on every supported platform. The result was disappointing because CPython (the default Python implementation used on the desktop) does not mention mobile and web platforms. We only found some years old forks of CPython that were claimed to work either on Android or iOS. Such a disarray was not suitable for us. | |||
We also had a look at <a href="http://pypy.org">PyPy</a>, another Python implementation. It also did not mention support for mobile and web platforms.</p> | |||
<p>This was a clear indication that Python community doesn't care for mobile and web platforms. Or that nobody had time to provide the information about building Python on such platforms. Either way, it was not acceptable for us.</p> | |||
<p><strong>Second, we evaluated <a href="http://wren.io">Wren</a> for the role of cross-platform scripting language.</strong></p> | |||
<p>Wren was the first scripting language we stumbled upon in the long list of non-mainstream scripting languages.</p> | |||
<p>Wren claimed to be small and easy to learn. Wren also claimed to be intended for embedding in applications. Ironically, the author <a href="http://wren.io/embedding-api.html">had no time to document how to do the embedding in the first place</a>. When <a href="https://github.com/munificent/wren/issues/465">we asked for the time estimates of publishing</a> the critical part of the documentation, <a href="https://github.com/munificent/wren/issues/402">we just got a reference to another issue</a> where the other guy was asking the same question half a year ago!</p> | |||
<p>That's when we ended our relationship with Wren.</p> | |||
<p><strong>Third, we evaluated <a href="http://chaiscript.com">Chai</a> for the role of cross-platform scripting language.</strong></p> | |||
<p>Chai was in the long list of non-mainstream scripting languages, too. Chai was promising because it claimed to be specifically tailored for embedding in a C++ application. | |||
We successfully managed to call a C++ function from inside Chai but failed to call a member function. <a href="http://discourse.chaiscript.com/t/cannot-call-a-function-that-accepts-a-string-and-a-vector/334">We asked for help</a>, but nobody replied.</p> | |||
<p>We had to end our relationship with Chai.</p> | |||
<p><strong>Fourth, we evaluated Lua for the role of cross-platform scripting language.</strong></p> | |||
<p>Lua is the mainstream language for embedding. So we decided to try the obvious choice. Documentation looked promising, too. However, by the end of reading the <a href="https://www.lua.org/pil/24.html">C API</a> chapter we had no clue how to inherit a class inside Lua.</p> | |||
<p>This led us to search for libraries that wrap Lua C API syntax into something more meaningful for C++. That's how we found <a href="http://sol2.rtfd.io">Sol2</a>. Just as before, the first attempt to call a C++ member function from Lua failed. But unlike before, we asked for help and <a href="https://github.com/ThePhD/sol2/issues/465">got the help</a>! This was a refreshing surprise for us. | |||
Next, we tried to inherit a class in Lua and override the class methods. We failed, but <a href="https://github.com/ThePhD/sol2/issues/468">the author helped us out again</a>. In the end, we succeeded in inheriting a class and overriding its behaviour.</p> | |||
<p>That's when we understood it's a start for a long and mutual relationship with Sol2/Lua.</p> | |||
<p><strong>This search for a scripting language taught us one important lesson: people matter, not technologies.</strong></p> | |||
<p>There are lots of scripting languages that look shiny on the outside but are dead. Why? Because some authors don't have time for users. In return, users don't have time for the authors' projects.</p> | |||
<p>That's it for describing scripting research in July 2017.</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/news.html">News</a> | |||
</p> | |||
</article> | |||
<hr class="gradient"/> | |||
<article> | |||
<a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide.html"><h3 class="article-title">OpenSceneGraph cross-platform guide</h3></a> | |||
<h6 class="subheader" title="2017-07-01T00:00:00+07:00">Sat 01 July 2017 | |||
<h6 class="subheader" title="2017-07-17T00:00:00+07:00">Пн 17 Июль 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/openscenegraph-cross-platform-guide-ru.html">ru</a> | |||
</h6><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> | |||
</h6><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png" /></p> | |||
<p>This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.</p> | |||
<p>June marked the finish of <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> with the publishing of the last (initially planned) tutorial. The tutorial describes <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">how to build and run sample OpenSceneGraph application in Web</a> using Emscripten. | |||
In case you missed it, here's a <a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide/">link to the final application</a>. Open it in your web browser.</p> | |||
<p>We started to compose the guide in February when we successfully managed to render a simple model on mobile and web. | |||
We spent 120 hours in five months to produce ten tutorials of the guide.</p> | |||
<p>We have been doing OpenSceneGraph cross-platform guide for two main reasons:</p> | |||
<ol> | |||
<li>Keep OpenSceneGraph cross-platform knowledge in easily accessible and reproducible form</li> | |||
<li>Share the knowledge with OpenSceneGraph community to make it stronger</li> | |||
</ol> | |||
<p>We believe we succeeded in both. Here's why:</p> | |||
<ol> | |||
<li>The guide repository has more <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/stargazers">stars</a> (aka "likes") than any other repository of ours</li> | |||
<li>OpenSceneGraph project leader Robert Osfield said <a href="http://www.mail-archive.com/osg-users@lists.openscenegraph.org/msg74815.html">"Great work"</a>, which means a lot</li> | |||
<li>The guide already has <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues">two issues</a></li> | |||
</ol> | |||
<p>Reaching our goal of researching OpenSceneGraph cross-platform development and providing the knowledge back to the community just made us happier.</p> | |||
<p>However, our journey does not stop here. Using the knowledge of the guide, we now continue to work on bringing our tools to support mobile and web, just as we <a href="http://opengamestudio.org/lang/en/news/2456">promised in January</a>.</p> | |||
<p>That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/news.html">News</a> | |||
In case you missed it, here ...</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/news.html">News</a> | |||
</p> | |||
</article> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/openscenegraph-cross-platform-guide.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/ios-tutorial.html"><h3 class="article-title">iOS tutorial</h3></a> | |||
<h6 class="subheader" title="2017-06-08T10:00:00+07:00">Thu 08 June 2017 | |||
<h6 class="subheader" title="2017-06-08T10:00:00+07:00">Чт 08 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/ios-tutorial-ru.html">ru</a> | |||
</h6><p><img alt="iOS tutorial" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> | |||
</h6><p><img alt="iOS tutorial" src="https://ogstudio.github.io/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 up …</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/news.html">News</a> | |||
<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="https://ogstudio.github.io/category/news.html">News</a> | |||
</p> | |||
@@ -106,7 +136,7 @@ We spent 120 hours in five months to produce ten tutorials of the guide.</p> | |||
<article> | |||
<a href="https://ogstudio.github.io/pelican-review.html"><h3 class="article-title">Pelican review</h3></a> | |||
<h6 class="subheader" title="2017-06-03T22:00:00+07:00">Sat 03 June 2017 | |||
<h6 class="subheader" title="2017-06-03T22:00:00+07:00">Сб 03 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/pelican-review-ru.html">ru</a> | |||
</h6><p>So far so nice. Pelican is really cool, and provides a quick starting guided | |||
@@ -126,7 +156,7 @@ to get up and running real fast.</p> | |||
<article> | |||
<a href="https://ogstudio.github.io/keyboard-review.html"><h3 class="article-title">My first review</h3></a> | |||
<h6 class="subheader" title="2017-06-01T10:20:00+07:00">Thu 01 June 2017 | |||
<h6 class="subheader" title="2017-06-01T10:20:00+07:00">Чт 01 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/keyboard-review-ru.html">ru</a> | |||
</h6><p>Here is a full review, guys.</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
@@ -138,121 +168,12 @@ to get up and running real fast.</p> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr10.html"><h3 class="article-title">kr10</h3></a> | |||
<h6 class="subheader" title="2017-01-01T10:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr10-ru.html">ru</a> | |||
</h6><p>kr10</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr10.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr9.html"><h3 class="article-title">kr9</h3></a> | |||
<h6 class="subheader" title="2017-01-01T09:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr9-ru.html">ru</a> | |||
</h6><p>kr9</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr9.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr8.html"><h3 class="article-title">kr8</h3></a> | |||
<h6 class="subheader" title="2017-01-01T08:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr8-ru.html">ru</a> | |||
</h6><p>kr8</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr8.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr7.html"><h3 class="article-title">kr7</h3></a> | |||
<h6 class="subheader" title="2017-01-01T07:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr7-ru.html">ru</a> | |||
</h6><p>kr7</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr7.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr6.html"><h3 class="article-title">kr6</h3></a> | |||
<h6 class="subheader" title="2017-01-01T06:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr6-ru.html">ru</a> | |||
</h6><p>kr6</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr6.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr5.html"><h3 class="article-title">kr5</h3></a> | |||
<h6 class="subheader" title="2017-01-01T05:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr5-ru.html">ru</a> | |||
</h6><p>kr5</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr5.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<!-- /#posts-list --> | |||
<div class="pagination-centered"> | |||
<h6 class="subheader">Page 1 of 2</h6> | |||
<h6 class="subheader">Page 1 of 1</h6> | |||
<p> | |||
<a href="https://ogstudio.github.io/index2.html">Next »</a> | |||
</p> | |||
</div> | |||
@@ -48,9 +48,27 @@ | |||
<article> | |||
<a href="https://ogstudio.github.io/kr5.html"><h3 class="article-title">kr5</h3></a> | |||
<h6 class="subheader" title="2017-01-01T05:04:00+07:00">Вс 01 Январь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr5-ru.html">ru</a> | |||
</h6><p>kr5</p> | |||
<p>LANG: en</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a> | |||
</p> | |||
<a class="button radius secondary small right" href="https://ogstudio.github.io/kr5.html">Read More</a> | |||
<hr class="gradient"/> | |||
</article> | |||
<article> | |||
<a href="https://ogstudio.github.io/kr4.html"><h3 class="article-title">kr4</h3></a> | |||
<h6 class="subheader" title="2017-01-01T04:04:00+07:00">Sun 01 January 2017 | |||
<h6 class="subheader" title="2017-01-01T04:04:00+07:00">Вс 01 Январь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr4-ru.html">ru</a> | |||
</h6><p>kr4</p> | |||
@@ -68,7 +86,7 @@ | |||
<article> | |||
<a href="https://ogstudio.github.io/kr3.html"><h3 class="article-title">kr3</h3></a> | |||
<h6 class="subheader" title="2017-01-01T03:04:00+07:00">Sun 01 January 2017 | |||
<h6 class="subheader" title="2017-01-01T03:04:00+07:00">Вс 01 Январь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr3-ru.html">ru</a> | |||
</h6><p>kr3</p> | |||
@@ -86,7 +104,7 @@ | |||
<article> | |||
<a href="https://ogstudio.github.io/kr2.html"><h3 class="article-title">kr2</h3></a> | |||
<h6 class="subheader" title="2017-01-01T02:04:00+07:00">Sun 01 January 2017 | |||
<h6 class="subheader" title="2017-01-01T02:04:00+07:00">Вс 01 Январь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr2-ru.html">ru</a> | |||
</h6><p>kr2</p> | |||
@@ -104,7 +122,7 @@ | |||
<article> | |||
<a href="https://ogstudio.github.io/kr1.html"><h3 class="article-title">kr1</h3></a> | |||
<h6 class="subheader" title="2017-01-01T01:04:00+07:00">Sun 01 January 2017 | |||
<h6 class="subheader" title="2017-01-01T01:04:00+07:00">Вс 01 Январь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr1-ru.html">ru</a> | |||
</h6><p>kr1</p> | |||
@@ -50,10 +50,10 @@ | |||
title="Permalink to Самоучитель iOS">Самоучитель iOS</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-06-08T10:00:00+07:00">Thu 08 June 2017 | |||
<h6 class="subheader" title="2017-06-08T10:00:00+07:00">Чт 08 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/ios-tutorial.html">en</a> | |||
</h6> <p><img alt="Самоучитель iOS" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> | |||
</h6> <p><img alt="Самоучитель iOS" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png" /></p> | |||
<p>Эта статья описывает проблемы, с которыми мы столкнулись во время создания самоучителя для iOS в мае 2017.</p> | |||
<p><a href="https://twitter.com/OpenGameStudio/status/826816343433498627">В феврале</a> мы сумели отобразить простую модель под iOS за считанные дни. Это дало нам уверенность, что самоучитель для iOS мы сделаем столь же быстро. Тем не менее, реальность напомнила нам о простой вещи: быстро сделать можно лишь поделку на коленке, работающую только у самого разработчика; над логически связанным примером, работающим у всех, придётся попотеть.</p> | |||
<h3>Нативная библиотека</h3> | |||
@@ -50,10 +50,10 @@ | |||
title="Permalink to iOS tutorial">iOS tutorial</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-06-08T10:00:00+07:00">Thu 08 June 2017 | |||
<h6 class="subheader" title="2017-06-08T10:00:00+07:00">Чт 08 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/ios-tutorial-ru.html">ru</a> | |||
</h6> <p><img alt="iOS tutorial" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> | |||
</h6> <p><img alt="iOS tutorial" src="https://ogstudio.github.io/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 up with a hackish demo that works for one person, but it's hard to create a concise example that works for everyone.</p> | |||
<h3>Native library</h3> | |||
@@ -50,7 +50,7 @@ | |||
title="Permalink to Моё первое ревью">Моё первое ревью</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-06-01T10:20:00+07:00">Thu 01 June 2017 | |||
<h6 class="subheader" title="2017-06-01T10:20:00+07:00">Чт 01 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/keyboard-review.html">en</a> | |||
</h6> <p>Вот и моё первое ревью, чуввви.</p> | |||
@@ -50,7 +50,7 @@ | |||
title="Permalink to My first review">My first review</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-06-01T10:20:00+07:00">Thu 01 June 2017 | |||
<h6 class="subheader" title="2017-06-01T10:20:00+07:00">Чт 01 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/keyboard-review-ru.html">ru</a> | |||
</h6> <p>Here is a full review, guys.</p> | |||
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr1</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr1-ru.html" rel="bookmark" | |||
title="Permalink to kr1">kr1</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T01:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr1.html">en</a> | |||
</h6> <p>kr1</p> | |||
<p>LANG: ru</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr1</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr1.html" rel="bookmark" | |||
title="Permalink to kr1">kr1</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T01:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr1-ru.html">ru</a> | |||
</h6> <p>kr1</p> | |||
<p>LANG: en</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr10</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr10-ru.html" rel="bookmark" | |||
title="Permalink to kr10">kr10</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T10:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr10.html">en</a> | |||
</h6> <p>kr10</p> | |||
<p>LANG: ru</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr10</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr10.html" rel="bookmark" | |||
title="Permalink to kr10">kr10</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T10:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr10-ru.html">ru</a> | |||
</h6> <p>kr10</p> | |||
<p>LANG: en</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr2</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr2-ru.html" rel="bookmark" | |||
title="Permalink to kr2">kr2</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T02:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr2.html">en</a> | |||
</h6> <p>kr2</p> | |||
<p>LANG: ru</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr2</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr2.html" rel="bookmark" | |||
title="Permalink to kr2">kr2</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T02:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr2-ru.html">ru</a> | |||
</h6> <p>kr2</p> | |||
<p>LANG: en</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr3</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr3-ru.html" rel="bookmark" | |||
title="Permalink to kr3">kr3</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T03:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr3.html">en</a> | |||
</h6> <p>kr3</p> | |||
<p>LANG: ru</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr3</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr3.html" rel="bookmark" | |||
title="Permalink to kr3">kr3</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T03:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr3-ru.html">ru</a> | |||
</h6> <p>kr3</p> | |||
<p>LANG: en</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr4</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr4-ru.html" rel="bookmark" | |||
title="Permalink to kr4">kr4</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T04:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr4.html">en</a> | |||
</h6> <p>kr4</p> | |||
<p>LANG: ru</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr4</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr4.html" rel="bookmark" | |||
title="Permalink to kr4">kr4</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T04:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr4-ru.html">ru</a> | |||
</h6> <p>kr4</p> | |||
<p>LANG: en</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr5</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr5-ru.html" rel="bookmark" | |||
title="Permalink to kr5">kr5</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T05:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr5.html">en</a> | |||
</h6> <p>kr5</p> | |||
<p>LANG: ru</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr5</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr5.html" rel="bookmark" | |||
title="Permalink to kr5">kr5</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T05:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr5-ru.html">ru</a> | |||
</h6> <p>kr5</p> | |||
<p>LANG: en</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr6</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr6-ru.html" rel="bookmark" | |||
title="Permalink to kr6">kr6</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T06:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr6.html">en</a> | |||
</h6> <p>kr6</p> | |||
<p>LANG: ru</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr6</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr6.html" rel="bookmark" | |||
title="Permalink to kr6">kr6</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T06:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr6-ru.html">ru</a> | |||
</h6> <p>kr6</p> | |||
<p>LANG: en</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr7</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr7-ru.html" rel="bookmark" | |||
title="Permalink to kr7">kr7</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T07:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr7.html">en</a> | |||
</h6> <p>kr7</p> | |||
<p>LANG: ru</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr7</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr7.html" rel="bookmark" | |||
title="Permalink to kr7">kr7</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T07:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr7-ru.html">ru</a> | |||
</h6> <p>kr7</p> | |||
<p>LANG: en</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr8</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr8-ru.html" rel="bookmark" | |||
title="Permalink to kr8">kr8</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T08:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr8.html">en</a> | |||
</h6> <p>kr8</p> | |||
<p>LANG: ru</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr8</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr8.html" rel="bookmark" | |||
title="Permalink to kr8">kr8</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T08:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr8-ru.html">ru</a> | |||
</h6> <p>kr8</p> | |||
<p>LANG: en</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr9</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr9-ru.html" rel="bookmark" | |||
title="Permalink to kr9">kr9</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T09:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr9.html">en</a> | |||
</h6> <p>kr9</p> | |||
<p>LANG: ru</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -1,113 +0,0 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>kr9</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/kr9.html" rel="bookmark" | |||
title="Permalink to kr9">kr9</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-01-01T09:04:00+07:00">Sun 01 January 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/kr9-ru.html">ru</a> | |||
</h6> <p>kr9</p> | |||
<p>LANG: en</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -50,10 +50,10 @@ | |||
title="Permalink to OpenSceneGraph cross-platform guide">OpenSceneGraph cross-platform guide</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-07-01T00:00:00+07:00">Sat 01 July 2017 | |||
<h6 class="subheader" title="2017-07-17T00:00:00+07:00">Пн 17 Июль 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/openscenegraph-cross-platform-guide.html">en</a> | |||
</h6> <p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> | |||
</h6> <p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png" /></p> | |||
<p>Эта статья резюмирует создание кросс-платформенного руководства OpenSceneGraph.</p> | |||
<p>Июнь ознаменовал собой окончание работы над <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">кросс-платформенным руководством OpenSceneGraph</a>. Мы опубликовали последний самоучитель (из изначально запланированных). Этот самоучитель описывает <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">сборку и запуск примера приложения OpenSceneGraph в вебе</a> с помощью Emscripten. | |||
Если вы упустили этот самоучитель, то вот <a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide/">ссылка на приложение</a> из него. Откройте ссылку в веб-браузере.</p> | |||
@@ -50,10 +50,10 @@ | |||
title="Permalink to OpenSceneGraph cross-platform guide">OpenSceneGraph cross-platform guide</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-07-01T00:00:00+07:00">Sat 01 July 2017 | |||
<h6 class="subheader" title="2017-07-17T00:00:00+07:00">Пн 17 Июль 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/openscenegraph-cross-platform-guide-ru.html">ru</a> | |||
</h6> <p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> | |||
</h6> <p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png" /></p> | |||
<p>This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.</p> | |||
<p>June marked the finish of <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> with the publishing of the last (initially planned) tutorial. The tutorial describes <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">how to build and run sample OpenSceneGraph application in Web</a> using Emscripten. | |||
In case you missed it, here's a <a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide/">link to the final application</a>. Open it in your web browser.</p> | |||
@@ -50,7 +50,7 @@ | |||
title="Permalink to Обзор Pelican">Обзор Pelican</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-06-03T22:00:00+07:00">Sat 03 June 2017 | |||
<h6 class="subheader" title="2017-06-03T22:00:00+07:00">Сб 03 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/pelican-review.html">en</a> | |||
</h6> <p>Пока что полёт нормальный. Pelican действительно крут, позволяет | |||
@@ -50,7 +50,7 @@ | |||
title="Permalink to Pelican review">Pelican review</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-06-03T22:00:00+07:00">Sat 03 June 2017 | |||
<h6 class="subheader" title="2017-06-03T22:00:00+07:00">Сб 03 Июнь 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/pelican-review-ru.html">ru</a> | |||
</h6> <p>So far so nice. Pelican is really cool, and provides a quick starting guided | |||
@@ -1,10 +0,0 @@ | |||
Title: kr1 | |||
Date: 2017-01-01 1:04 | |||
Category: Review | |||
Slug: kr1 | |||
Lang: ru | |||
kr1 | |||
LANG: ru | |||
@@ -1,10 +0,0 @@ | |||
Title: kr1 | |||
Date: 2017-01-01 1:04 | |||
Category: Review | |||
Slug: kr1 | |||
Lang: en | |||
kr1 | |||
LANG: en | |||
@@ -1,10 +0,0 @@ | |||
Title: kr10 | |||
Date: 2017-01-01 10:04 | |||
Category: Review | |||
Slug: kr10 | |||
Lang: ru | |||
kr10 | |||
LANG: ru | |||
@@ -1,10 +0,0 @@ | |||
Title: kr10 | |||
Date: 2017-01-01 10:04 | |||
Category: Review | |||
Slug: kr10 | |||
Lang: en | |||
kr10 | |||
LANG: en | |||
@@ -1,10 +0,0 @@ | |||
Title: kr2 | |||
Date: 2017-01-01 2:04 | |||
Category: Review | |||
Slug: kr2 | |||
Lang: ru | |||
kr2 | |||
LANG: ru | |||
@@ -1,10 +0,0 @@ | |||
Title: kr2 | |||
Date: 2017-01-01 2:04 | |||
Category: Review | |||
Slug: kr2 | |||
Lang: en | |||
kr2 | |||
LANG: en | |||
@@ -1,10 +0,0 @@ | |||
Title: kr3 | |||
Date: 2017-01-01 3:04 | |||
Category: Review | |||
Slug: kr3 | |||
Lang: ru | |||
kr3 | |||
LANG: ru | |||
@@ -1,10 +0,0 @@ | |||
Title: kr3 | |||
Date: 2017-01-01 3:04 | |||
Category: Review | |||
Slug: kr3 | |||
Lang: en | |||
kr3 | |||
LANG: en | |||
@@ -1,10 +0,0 @@ | |||
Title: kr4 | |||
Date: 2017-01-01 4:04 | |||
Category: Review | |||
Slug: kr4 | |||
Lang: ru | |||
kr4 | |||
LANG: ru | |||
@@ -1,10 +0,0 @@ | |||
Title: kr4 | |||
Date: 2017-01-01 4:04 | |||
Category: Review | |||
Slug: kr4 | |||
Lang: en | |||
kr4 | |||
LANG: en | |||
@@ -1,10 +0,0 @@ | |||
Title: kr5 | |||
Date: 2017-01-01 5:04 | |||
Category: Review | |||
Slug: kr5 | |||
Lang: ru | |||
kr5 | |||
LANG: ru | |||
@@ -1,10 +0,0 @@ | |||
Title: kr5 | |||
Date: 2017-01-01 5:04 | |||
Category: Review | |||
Slug: kr5 | |||
Lang: en | |||
kr5 | |||
LANG: en | |||
@@ -1,10 +0,0 @@ | |||
Title: kr6 | |||
Date: 2017-01-01 6:04 | |||
Category: Review | |||
Slug: kr6 | |||
Lang: ru | |||
kr6 | |||
LANG: ru | |||
@@ -1,10 +0,0 @@ | |||
Title: kr6 | |||
Date: 2017-01-01 6:04 | |||
Category: Review | |||
Slug: kr6 | |||
Lang: en | |||
kr6 | |||
LANG: en | |||
@@ -1,10 +0,0 @@ | |||
Title: kr7 | |||
Date: 2017-01-01 7:04 | |||
Category: Review | |||
Slug: kr7 | |||
Lang: ru | |||
kr7 | |||
LANG: ru | |||
@@ -1,10 +0,0 @@ | |||
Title: kr7 | |||
Date: 2017-01-01 7:04 | |||
Category: Review | |||
Slug: kr7 | |||
Lang: en | |||
kr7 | |||
LANG: en | |||
@@ -1,10 +0,0 @@ | |||
Title: kr8 | |||
Date: 2017-01-01 8:04 | |||
Category: Review | |||
Slug: kr8 | |||
Lang: ru | |||
kr8 | |||
LANG: ru | |||
@@ -1,10 +0,0 @@ | |||
Title: kr8 | |||
Date: 2017-01-01 8:04 | |||
Category: Review | |||
Slug: kr8 | |||
Lang: en | |||
kr8 | |||
LANG: en | |||
@@ -1,10 +0,0 @@ | |||
Title: kr9 | |||
Date: 2017-01-01 9:04 | |||
Category: Review | |||
Slug: kr9 | |||
Lang: ru | |||
kr9 | |||
LANG: ru | |||
@@ -1,10 +0,0 @@ | |||
Title: kr9 | |||
Date: 2017-01-01 9:04 | |||
Category: Review | |||
Slug: kr9 | |||
Lang: en | |||
kr9 | |||
LANG: en | |||
@@ -0,0 +1,139 @@ | |||
<!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="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/scripting-research-ru.html" rel="bookmark" | |||
title="Permalink to Изучение скриптования">Изучение скриптования</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-08-16T00:00:00+07:00">Ср 16 Август 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/scripting-research.html">en</a> | |||
</h6> <p><img alt="Изучение скриптования" src="https://ogstudio.github.io/2017-08-scripting-research.png" /></p> | |||
<p>Эта статья описывает изучение скриптования в июле 2017.</p> | |||
<p><strong>Наша основная цель использования скриптового языка - это наличие платформо-независимого кода, выполняемого без изменений на каждой поддерживаемой платформе.</strong></p> | |||
<p>Редактор 0.10 использует Python в качестве подобного кода с помощью <a href="http://swig.org/">SWIG</a>. SWIG позволяет использовать практически любой код C/C++ из языков вроде Python, Ruby, Lua, Java, C# и т.д.. SWIG помог нам впервые оценить прелесть платформо-независимого кода. К сожалению, SWIG работает лишь в одном направлении: из C/C++ в язык назначения. Это приводит к тому, что основное приложение должно быть написано на языке назначения, а код C/C++ может быть использован лишь в виде библиотеки.</p> | |||
<p>Основное приложение на языке Python вполне подходит для десктопа, но не для мобилок и веба, где языки C и C++ являются единственными языками, поддерживаемыми нативно на каждой платформе. Конечно, существуют проекты вроде <a href="https://kivy.org">Kivy</a>, которые позволяет разрабатывать кросс-платформенные приложения на Python, но они не поддерживаются нативно. Отсутствие нативной поддержки выливается в огромную головную боль при изменении API у Android и iOS.</p> | |||
<p>Необходимость в приложении на C/C++ и поддержке скриптов приводит к обязательному интерпретированию скриптового языка самим приложением. Это как раз то, что SWIG, Kivy и подобные проекты не позволяют сделать.</p> | |||
<p><strong>Наша вторичная цель использования скриптового языка - это возможность расширения кода C++.</strong></p> | |||
<p>Одни модули Редактора 0.10 написаны на C++, а другие на Python. С точки зрения основного приложения, все модули равны. Для приложения нет никакой разницы, на каком языке написан конкретный модуль.</p> | |||
<p>Для достижения этой гибкости мы ввели так называемое Окружение (Environment). Каждый модуль регистрирует ключи (keys), на которые он отвечает, а Окружение доставляет соответствующие сообщения. Технически такое поведение можно достигнуть с помощью наследования базового класса и переопределения его методов как в C++, так и в скриптовом языке.</p> | |||
<p><strong>Python был первым языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.</strong></p> | |||
<p>Т.к. мы уже использовали Python, то логично было начать изучение с него. Мы хотели проверить, можно ли запустить код Python на каждой поддерживаемой платформе. К сожалению, результаты были удручающими, т.к. документация CPython (реализация Python, используемая по умолчанию на десктопе) никак не упоминала ни мобилки, ни веб. Всё, что мы нашли, - это пара форков CPython лохматых годов, которые якобы работают либо на Android, либо на iOS. Такой раздрай нас не устроил. | |||
Мы также рассмотрели <a href="http://pypy.org">PyPy</a>, ещё одну реализацию Python, но она тоже не содержала информации о мобилках и вебе.</p> | |||
<p>Это было чётким сигналом об отсутствии интереса к мобилками и вебу со стороны сообщества Python. Либо об отсутствии времени даже на то, чтобы описать использование Python на данных платформах. В любом случае, такое положение вещей нас не устроило.</p> | |||
<p><strong><a href="http://wren.io">Wren</a> был вторым языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.</strong></p> | |||
<p>Wren был первым языком из длинного списка малоизвестных скриптовых языков.</p> | |||
<p>Wren преподносился как небольшой и простой язык. Согласно документации, основная цель Wren - это быть встроенным в приложение. По иронии судьбы, у автора <a href="http://wren.io/embedding-api.html">не было времени описать в документации встраивание Wren</a> в приложение. Когда мы <a href="https://github.com/munificent/wren/issues/465">спросили о сроках публикации</a> этой критически важной части документации, мы <a href="https://github.com/munificent/wren/issues/402">получили в ответ ссылку на тикет</a>, в котором другой человек спрашивал тот же самый вопрос полгода назад!</p> | |||
<p>На этом мы закончили отношения с Wren.</p> | |||
<p><strong><a href="http://chaiscript.com">Chai</a> был третьим языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.</strong></p> | |||
<p>Chai был в том же длинном списке малоизвестных скриптовых языков. Он преподносился как язык, специально предназначенный для встраивания в приложения C++. Мы без проблем вызвали функцию C++ из Chai, но нам не удалось вызвать метод класса. <a href="http://discourse.chaiscript.com/t/cannot-call-a-function-that-accepts-a-string-and-a-vector/334">Мы попросили о помощи</a>, но ответом была лишь тишина.</p> | |||
<p>Нам пришлось завершить отношения с Chai.</p> | |||
<p><strong>Lua был четвёртым языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.</strong></p> | |||
<p>Lua является популярным языком для встраивания. Мы решили попробовать очевидный вариант. Документация выглядела многообещающе, однако под конец чтения главы <a href="https://www.lua.org/pil/24.html">C API</a> у нас не было ни малейшего представления, как наследовать класс C++ в Lua.</p> | |||
<p>Этот вопрос заставил нас найти библиотеку, которая смогла бы на него ответить: <a href="http://sol2.rtfd.io">Sol2</a>. Первая попытка вызвать функцию C++ из Lua провалилась. Правда, на этот раз наш вопрос был услышан, и <a href="https://github.com/ThePhD/sol2/issues/465">мы получили ответ</a>! Мы были сильно удивлены. | |||
Далее мы попытались наследовать класс C++ в Lua, чтобы переопределить методы класса. Нам это не удалось с первого раза, но автор Sol2 <a href="https://github.com/ThePhD/sol2/issues/468">снова помог нам</a>.</p> | |||
<p>В тот момент мы поняли, что это начало долгого и взаимовыгодного сотрудничества с Sol2/Lua.</p> | |||
<p><strong>Поиск скриптового языка открыл для нас следующую истину: люди важнее технологий.</strong></p> | |||
<p>Существует множество скриптовых языков, которые выглядят привлекательно на первый взгляд, но которые мертвы. Почему? Потому что у некоторых авторов нет времени на пользователей. В ответ пользователи предпочитают не тратить своё время на проекты подобных авторов.</p> | |||
<p>На этом мы заканчиваем описание изучения скриптования в июле 2017.</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |
@@ -0,0 +1,141 @@ | |||
<!DOCTYPE html> | |||
<head> | |||
<meta charset="utf-8" /> | |||
<!-- Set the viewport width to device width for mobile --> | |||
<meta name="viewport" content="width=device-width" /> | |||
<title>Scripting research</title> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/normalize.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/foundation.min.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/style.css" /> | |||
<link rel="stylesheet" href="https://ogstudio.github.io/theme/css/pygments.css" /> | |||
<script src="https://ogstudio.github.io/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="https://ogstudio.github.io">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="https://ogstudio.github.io/scripting-research.html" rel="bookmark" | |||
title="Permalink to Scripting research">Scripting research</a></h3> | |||
</header> | |||
<h6 class="subheader" title="2017-08-16T00:00:00+07:00">Ср 16 Август 2017 | |||
<a class="button secondary small translation-button" href="https://ogstudio.github.io/scripting-research-ru.html">ru</a> | |||
</h6> <p><img alt="Scripting research" src="https://ogstudio.github.io/2017-08-scripting-research.png" /></p> | |||
<p>This article describes scripting research in July 2017.</p> | |||
<p><strong>Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.</strong></p> | |||
<p>OGS Editor 0.10 supports Python for such a code thanks to <a href="http://swig.org/">SWIG</a>. SWIG provides a way to wrap almost any C/C++ code and use it in dozens of languages like Python, Ruby, Lua, Java, C#, etc.. SWIG really helped us taste the beauty of platform-independent code. However, SWIG only works one way: from C/C++ to a target language. This means the main application must be in the target language, and C/C++ code can only be used as a library.</p> | |||
<p>Having the main application in Python works fine for the desktop, but not so great for mobile and web, where C and C++ are the only natively supported cross-platform languages. There are projects like <a href="https://kivy.org">Kivy</a>, which allow you to develop cross-platform applications in Python, but they are not supported natively. This means it's a lot of headaches when Android and iOS APIs change.</p> | |||
<p>Having the main application in C/C++ and the need to support scripting means that a scripting language should be interpreted by the application. This is what SWIG, Kivy, and similar projects are not meant to fulfill.</p> | |||
<p><strong>Our secondary goal for using a scripting language was to allow to extend C++ code.</strong></p> | |||
<p>OGS Editor 0.10 has some modules written in C++, and some in Python. The modules are equal from the perspective of the main application; it doesn't care what language the module is written in.</p> | |||
<p>To achieve such flexibility, we introduced a so-called Environment. Each module would register the keys it responds to, and Environment would deliver corresponding messages. | |||
Technically such behaviour is achieved by inheriting a base class and overriding its methods in both C++ and a scripting language.</p> | |||
<p><strong>First, we evaluated Python for the role of cross-platform scripting language.</strong></p> | |||
<p>Since we already used Python, we started to research the possibility to run Python code on every supported platform. The result was disappointing because CPython (the default Python implementation used on the desktop) does not mention mobile and web platforms. We only found some years old forks of CPython that were claimed to work either on Android or iOS. Such a disarray was not suitable for us. | |||
We also had a look at <a href="http://pypy.org">PyPy</a>, another Python implementation. It also did not mention support for mobile and web platforms.</p> | |||
<p>This was a clear indication that Python community doesn't care for mobile and web platforms. Or that nobody had time to provide the information about building Python on such platforms. Either way, it was not acceptable for us.</p> | |||
<p><strong>Second, we evaluated <a href="http://wren.io">Wren</a> for the role of cross-platform scripting language.</strong></p> | |||
<p>Wren was the first scripting language we stumbled upon in the long list of non-mainstream scripting languages.</p> | |||
<p>Wren claimed to be small and easy to learn. Wren also claimed to be intended for embedding in applications. Ironically, the author <a href="http://wren.io/embedding-api.html">had no time to document how to do the embedding in the first place</a>. When <a href="https://github.com/munificent/wren/issues/465">we asked for the time estimates of publishing</a> the critical part of the documentation, <a href="https://github.com/munificent/wren/issues/402">we just got a reference to another issue</a> where the other guy was asking the same question half a year ago!</p> | |||
<p>That's when we ended our relationship with Wren.</p> | |||
<p><strong>Third, we evaluated <a href="http://chaiscript.com">Chai</a> for the role of cross-platform scripting language.</strong></p> | |||
<p>Chai was in the long list of non-mainstream scripting languages, too. Chai was promising because it claimed to be specifically tailored for embedding in a C++ application. | |||
We successfully managed to call a C++ function from inside Chai but failed to call a member function. <a href="http://discourse.chaiscript.com/t/cannot-call-a-function-that-accepts-a-string-and-a-vector/334">We asked for help</a>, but nobody replied.</p> | |||
<p>We had to end our relationship with Chai.</p> | |||
<p><strong>Fourth, we evaluated Lua for the role of cross-platform scripting language.</strong></p> | |||
<p>Lua is the mainstream language for embedding. So we decided to try the obvious choice. Documentation looked promising, too. However, by the end of reading the <a href="https://www.lua.org/pil/24.html">C API</a> chapter we had no clue how to inherit a class inside Lua.</p> | |||
<p>This led us to search for libraries that wrap Lua C API syntax into something more meaningful for C++. That's how we found <a href="http://sol2.rtfd.io">Sol2</a>. Just as before, the first attempt to call a C++ member function from Lua failed. But unlike before, we asked for help and <a href="https://github.com/ThePhD/sol2/issues/465">got the help</a>! This was a refreshing surprise for us. | |||
Next, we tried to inherit a class in Lua and override the class methods. We failed, but <a href="https://github.com/ThePhD/sol2/issues/468">the author helped us out again</a>. In the end, we succeeded in inheriting a class and overriding its behaviour.</p> | |||
<p>That's when we understood it's a start for a long and mutual relationship with Sol2/Lua.</p> | |||
<p><strong>This search for a scripting language taught us one important lesson: people matter, not technologies.</strong></p> | |||
<p>There are lots of scripting languages that look shiny on the outside but are dead. Why? Because some authors don't have time for users. In return, users don't have time for the authors' projects.</p> | |||
<p>That's it for describing scripting research in July 2017.</p> | |||
<p class="subheader">Category: <a href="https://ogstudio.github.io/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="https://ogstudio.github.io/archives.html">Archives</a> | |||
<li><a href="https://ogstudio.github.io/tags.html">Tags</a> | |||
<li><a href="https://ogstudio.github.io/feeds/all.atom.xml" rel="alternate">Atom feed</a></li> | |||
</ul> | |||
<h5 class="sidebar-title">Categories</h5> | |||
<ul class="side-nav"> | |||
<li><a href="https://ogstudio.github.io/category/news.html">News</a></li> | |||
<li><a href="https://ogstudio.github.io/category/review.html">Review</a></li> | |||
</ul> | |||
--> | |||
<h5 class="sidebar-title">Projects</h5> | |||
<ul class="side-nav"> | |||
<li><a href="/pages/ogs-mahjong.html">OGS Mahjong</a></li> | |||
<li><a href="/pages/ogs-editor.html">OGS Editor</a></li> | |||
<li><a href="/pages/openscenegraph-guide.html">OpenSceneGraph guide</a></li> | |||
</ul> | |||
</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> | |||
</footer> |