Browse Source

Publish 2017-09 article about the birth of MJIN world

pull/1/head
parent
commit
3ea9f88371
25 changed files with 422 additions and 217 deletions
  1. BIN
      2017-09-mjin-world-birth.png
  2. +6
    -6
      archives.html
  3. +48
    -57
      author/opensource-game-studio.html
  4. +2
    -2
      categories.html
  5. +43
    -32
      category/news.html
  6. +22
    -15
      category/stub.html
  7. +42
    -8
      feeds/all.atom.xml
  8. +21
    -1
      feeds/news.atom.xml
  9. +2
    -0
      feeds/stub.atom.xml
  10. +48
    -57
      index.html
  11. +1
    -1
      ios-tutorial-ru.html
  12. +1
    -1
      ios-tutorial.html
  13. +132
    -0
      mjin-world-birth-ru.html
  14. +29
    -12
      mjin-world-birth.html
  15. +1
    -1
      openscenegraph-cross-platform-guide-ru.html
  16. +1
    -1
      openscenegraph-cross-platform-guide.html
  17. +1
    -1
      pages/about-ru.html
  18. +1
    -1
      pages/about.html
  19. +1
    -1
      pages/projects-ru.html
  20. +1
    -1
      pages/projects.html
  21. +1
    -1
      scripting-research-ru.html
  22. +1
    -1
      scripting-research.html
  23. +8
    -8
      stub-ru.html
  24. +8
    -8
      stub.html
  25. +1
    -1
      tags.html

BIN
2017-09-mjin-world-birth.png View File

Before After
Width: 1024  |  Height: 768  |  Size: 585KB

+ 6
- 6
archives.html View File

@@ -49,6 +49,10 @@

<table class="table-archive">
<tbody>
<tr>
<td>Вс 10 Сентябрь 2017</td>
<td><a href='mjin-world-birth.html'>The birth of MJIN world</a></td>
</tr>
<tr>
<td>Ср 16 Август 2017</td>
<td><a href='scripting-research.html'>Scripting research</a></td>
@@ -63,11 +67,7 @@
</tr>
<tr>
<td>Сб 03 Июнь 2017</td>
<td><a href='pelican-review.html'>Pelican review</a></td>
</tr>
<tr>
<td>Чт 01 Июнь 2017</td>
<td><a href='keyboard-review.html'>My first review</a></td>
<td><a href='stub.html'>Stub</a></td>
</tr>
</tbody>
</table>
@@ -91,7 +91,7 @@
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


+ 48
- 57
author/opensource-game-studio.html View File

@@ -47,6 +47,45 @@

<article>
<a href="https://ogstudio.github.io/mjin-world-birth.html"><h3 class="article-title">The birth of MJIN world</h3></a>
<h6 class="subheader" title="2017-09-10T00:00:00+07:00">Вс 10 Сентябрь 2017
<a class="button secondary small translation-button" href="https://ogstudio.github.io/mjin-world-birth-ru.html">ru</a>

</h6><p><img alt="The birth of MJIN world" src="https://ogstudio.github.io/2017-09-mjin-world-birth.png" /></p>
<p>This article describes the birth of MJIN world in August 2017.</p>
<p><strong>mjin-player</strong></p>
<p>As you know, <a href="https://ogstudio.github.io/scripting-research.html">we spent July to research scripting</a>. We found a solution that satisfies the following criteria. Scripts should:</p>
<ol>
<li>run unchanged on all supported platforms</li>
<li>allow extending C++ code</li>
</ol>
<p>We have verified the second criterion by writing a sample application. The first criterion was taken for granted because it SHOULD be true.</p>
<p>At the time, we saw two ways to verify the first criterion:</p>
<ol>
<li>create one sample application for each platform to verify scripting only</li>
<li>create a single cross-platform application, which can run any code</li>
</ol>
<p>We chose the second approach because it is more beneficial in the long run. As you might have guessed, <a href="https://bitbucket.org/ogstudio/mjin-player">mjin-player</a> is that application.</p>
<p>mjin-player serves as a base for the rest of MJIN projects to make them run on all supported platforms. However, there's no magic trick to hide the projects from the platform, and there was no such intention. Instead, mjin-player provides a consistent set of rules how other MJIN projects should be structured to be able to run on all supported platforms.</p>
<p><strong>mjin-application</strong></p>
<p>This set of rules for MJIN projects is packaged into <a href="https://bitbucket.org/ogstudio/mjin-application">mjin-application</a>. mjin-application is a library that provides basic functionality every MJIN project would need and nothing more. For instance, mjin-application does not and will not contain scripting or any other specific functionality.</p>
<p><strong>MJIN world</strong></p>
<p>So what is <a href="https://bitbucket.org/ogstudio/mjin">MJIN world</a>? It's a set of projects that constitute our game development tools. mjin-player and mjin-application are the first bricks of the newly born MJIN world. A lot more to come. Stay tuned for the brighter MJIN future.</p>
<p>That's it for describing the birth of MJIN world in August 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/scripting-research.html"><h3 class="article-title">Scripting research</h3></a>
<h6 class="subheader" title="2017-08-16T00:00:00+07:00">Ср 16 Август 2017
@@ -55,42 +94,14 @@
</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>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 ...</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/scripting-research.html">Read More</a>
<hr class="gradient"/>
</article>


@@ -135,36 +146,16 @@ In case you missed it, here ...</p><p class="subheader">Category: <a href="https


<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">Сб 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
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><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/pelican-review.html">Read More</a>
<hr class="gradient"/>
</article>



<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">Чт 01 Июнь 2017
<a class="button secondary small translation-button" href="https://ogstudio.github.io/keyboard-review-ru.html">ru</a>
<a href="https://ogstudio.github.io/stub.html"><h3 class="article-title">Stub</h3></a>
<h6 class="subheader" title="2017-06-03T00:00:00+07:00">Сб 03 Июнь 2017
<a class="button secondary small translation-button" href="https://ogstudio.github.io/stub-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>
</h6><p>TODO Import previous Opensource Game Studio articles from Wordpress.</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/stub.html">Stub</a>

</p>


<a class="button radius secondary small right" href="https://ogstudio.github.io/keyboard-review.html">Read More</a>
<a class="button radius secondary small right" href="https://ogstudio.github.io/stub.html">Read More</a>
<hr class="gradient"/>
</article>

@@ -196,7 +187,7 @@ to get up and running real fast.</p>
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


+ 2
- 2
categories.html View File

@@ -46,7 +46,7 @@
<div class="large-9 columns">
<ul class="circle">
<li><a href="category/news.html">News</a></li>
<li><a href="category/review.html">Review</a></li>
<li><a href="category/stub.html">Stub</a></li>
</ul>
</div>
<!-- End Main Content -->
@@ -67,7 +67,7 @@
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


+ 43
- 32
category/news.html View File

@@ -47,6 +47,45 @@

<article>
<a href="https://ogstudio.github.io/mjin-world-birth.html"><h3 class="article-title">The birth of MJIN world</h3></a>
<h6 class="subheader" title="2017-09-10T00:00:00+07:00">Вс 10 Сентябрь 2017
<a class="button secondary small translation-button" href="https://ogstudio.github.io/mjin-world-birth-ru.html">ru</a>

</h6><p><img alt="The birth of MJIN world" src="https://ogstudio.github.io/2017-09-mjin-world-birth.png" /></p>
<p>This article describes the birth of MJIN world in August 2017.</p>
<p><strong>mjin-player</strong></p>
<p>As you know, <a href="https://ogstudio.github.io/scripting-research.html">we spent July to research scripting</a>. We found a solution that satisfies the following criteria. Scripts should:</p>
<ol>
<li>run unchanged on all supported platforms</li>
<li>allow extending C++ code</li>
</ol>
<p>We have verified the second criterion by writing a sample application. The first criterion was taken for granted because it SHOULD be true.</p>
<p>At the time, we saw two ways to verify the first criterion:</p>
<ol>
<li>create one sample application for each platform to verify scripting only</li>
<li>create a single cross-platform application, which can run any code</li>
</ol>
<p>We chose the second approach because it is more beneficial in the long run. As you might have guessed, <a href="https://bitbucket.org/ogstudio/mjin-player">mjin-player</a> is that application.</p>
<p>mjin-player serves as a base for the rest of MJIN projects to make them run on all supported platforms. However, there's no magic trick to hide the projects from the platform, and there was no such intention. Instead, mjin-player provides a consistent set of rules how other MJIN projects should be structured to be able to run on all supported platforms.</p>
<p><strong>mjin-application</strong></p>
<p>This set of rules for MJIN projects is packaged into <a href="https://bitbucket.org/ogstudio/mjin-application">mjin-application</a>. mjin-application is a library that provides basic functionality every MJIN project would need and nothing more. For instance, mjin-application does not and will not contain scripting or any other specific functionality.</p>
<p><strong>MJIN world</strong></p>
<p>So what is <a href="https://bitbucket.org/ogstudio/mjin">MJIN world</a>? It's a set of projects that constitute our game development tools. mjin-player and mjin-application are the first bricks of the newly born MJIN world. A lot more to come. Stay tuned for the brighter MJIN future.</p>
<p>That's it for describing the birth of MJIN world in August 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/scripting-research.html"><h3 class="article-title">Scripting research</h3></a>
<h6 class="subheader" title="2017-08-16T00:00:00+07:00">Ср 16 Август 2017
@@ -55,42 +94,14 @@
</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>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 ...</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/scripting-research.html">Read More</a>
<hr class="gradient"/>
</article>


@@ -159,7 +170,7 @@ In case you missed it, here ...</p><p class="subheader">Category: <a href="https
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


pelican-review.html → category/stub.html View File

@@ -4,7 +4,7 @@
<!-- Set the viewport width to device width for mobile -->
<meta name="viewport" content="width=device-width" />

<title>Pelican review</title>
<title>Opensource Game Studio - Stub</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" />
@@ -44,26 +44,33 @@

<!-- Main Blog Content -->
<div class="large-9 columns">
<article>
<header>
<h3 class="article-title"><a href="https://ogstudio.github.io/pelican-review.html" rel="bookmark"
title="Permalink to Pelican review">Pelican review</a></h3>
</header>

<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>
<article>
<a href="https://ogstudio.github.io/stub.html"><h3 class="article-title">Stub</h3></a>
<h6 class="subheader" title="2017-06-03T00:00:00+07:00">Сб 03 Июнь 2017
<a class="button secondary small translation-button" href="https://ogstudio.github.io/stub-ru.html">ru</a>

</h6> <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>
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a>
</h6><p>TODO Import previous Opensource Game Studio articles from Wordpress.</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/stub.html">Stub</a>

</p>


</article>

<div class="pagination-centered">
<h6 class="subheader">Page 1 of 1</h6>

<p>

</p>
</div>



<!-- /#posts-list -->

</article>
</div>
<!-- End Main Content -->

@@ -83,7 +90,7 @@ to get up and running real fast.</p>
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->

+ 42
- 8
feeds/all.atom.xml View File

@@ -1,5 +1,45 @@
<?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-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">&lt;p&gt;&lt;img alt="Scripting research" src="https://ogstudio.github.io/2017-08-scripting-research.png" /&gt;&lt;/p&gt;
<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-09-10T00:00:00+07:00</updated><entry><title>The birth of MJIN world</title><link href="https://ogstudio.github.io/mjin-world-birth.html" rel="alternate"></link><updated>2017-09-10T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-09-10:mjin-world-birth.html</id><summary type="html">&lt;p&gt;&lt;img alt="The birth of MJIN world" src="https://ogstudio.github.io/2017-09-mjin-world-birth.png" /&gt;&lt;/p&gt;
&lt;p&gt;This article describes the birth of MJIN world in August 2017.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mjin-player&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As you know, &lt;a href="https://ogstudio.github.io/scripting-research.html"&gt;we spent July to research scripting&lt;/a&gt;. We found a solution that satisfies the following criteria. Scripts should:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;run unchanged on all supported platforms&lt;/li&gt;
&lt;li&gt;allow extending C++ code&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We have verified the second criterion by writing a sample application. The first criterion was taken for granted because it SHOULD be true.&lt;/p&gt;
&lt;p&gt;At the time, we saw two ways to verify the first criterion:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;create one sample application for each platform to verify scripting only&lt;/li&gt;
&lt;li&gt;create a single cross-platform application, which can run any code&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We chose the second approach because it is more beneficial in the long run. As you might have guessed, &lt;a href="https://bitbucket.org/ogstudio/mjin-player"&gt;mjin-player&lt;/a&gt; is that application.&lt;/p&gt;
&lt;p&gt;mjin-player serves as a base for the rest of MJIN projects to make them run on all supported platforms. However, there's no magic trick to hide the projects from the platform, and there was no such intention. Instead, mjin-player provides a consistent set of rules how other MJIN projects should be structured to be able to run on all supported platforms.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mjin-application&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This set of rules for MJIN projects is packaged into &lt;a href="https://bitbucket.org/ogstudio/mjin-application"&gt;mjin-application&lt;/a&gt;. mjin-application is a library that provides basic functionality every MJIN project would need and nothing more. For instance, mjin-application does not and will not contain scripting or any other specific functionality.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MJIN world&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So what is &lt;a href="https://bitbucket.org/ogstudio/mjin"&gt;MJIN world&lt;/a&gt;? It's a set of projects that constitute our game development tools. mjin-player and mjin-application are the first bricks of the newly born MJIN world. A lot more to come. Stay tuned for the brighter MJIN future.&lt;/p&gt;
&lt;p&gt;That's it for describing the birth of MJIN world in August 2017.&lt;/p&gt;</summary></entry><entry><title>Рождение вселенной MJIN</title><link href="https://ogstudio.github.io/mjin-world-birth-ru.html" rel="alternate"></link><updated>2017-09-10T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-09-10:mjin-world-birth-ru.html</id><summary type="html">&lt;p&gt;&lt;img alt="Рождение вселенной MJIN" src="https://ogstudio.github.io/2017-09-mjin-world-birth.png" /&gt;&lt;/p&gt;
&lt;p&gt;Эта статья описывает рождение вселенной MJIN в августе 2017.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mjin-player&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Как вы знаете, &lt;a href="https://ogstudio.github.io/scripting-research-ru.html"&gt;в июле мы изучали скриптование&lt;/a&gt;. Мы нашли решение, которое удовлетворяет следующим критериям. Скрипты должны:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;исполняться в исходном виде без изменений на всех поддерживаемых платформах&lt;/li&gt;
&lt;li&gt;позволять расширять код C++&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Мы проверили второй критерий в рамках тестового приложения. В первый критерий мы просто поверили, т.к. он ДОЛЖЕН быть верен.&lt;/p&gt;
&lt;p&gt;В тот момент мы видели два варианта проверки первого критерия:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;создать по одному тестовому приложению под каждую платформу для проверки лишь этого критерия&lt;/li&gt;
&lt;li&gt;создать одно кросс-платформенное приложение, которому можно скормить практически любой код&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Мы выбрали второй подход, т.к. он выгоднее в долгосрочной перспективе. Как вы уже догадались, &lt;a href="https://bitbucket.org/ogstudio/mjin-player"&gt;mjin-player&lt;/a&gt; является тем самым кросс-платформенным приложением.&lt;/p&gt;
&lt;p&gt;mjin-player служит базой для остальных проектов MJIN, которая позволяет этим проектам работать на всех поддерживаемых платформах. Тем не менее, в mjin-player нет никакой магии, проекты никак не скрыты от деталей платформ, да и не было такой задачи. Вместо скрытия деталей платформы mjin-player предоставляет набор правил, которым должны удовлетворять проекты MJIN для работы на всех поддерживаемых платформах.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mjin-application&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Этот набор правил представлен в виде &lt;a href="https://bitbucket.org/ogstudio/mjin-application"&gt;mjin-application&lt;/a&gt;. mjin-application является библиотекой с базовым функционалом, необходимым для каждого проекта MJIN, но не более. Например, mjin-application не содержит и никогда не будет содержать скриптования или подобного специфического функционала.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Вселенная MJIN&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Так что же такое &lt;a href="https://bitbucket.org/ogstudio/mjin"&gt;вселенная MJIN&lt;/a&gt;? Это множество проектов, которые являются нашими средствами для разработки игр. mjin-player и mjin-application - первые кирпичики недавно появившейся вселенной MJIN. А будет их намного больше. Оставайтесь на связи, нас ждёт светлое будущее с MJIN.&lt;/p&gt;
&lt;p&gt;На этом мы заканчиваем описание рождения вселенной MJIN в августе 2017.&lt;/p&gt;</summary></entry><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">&lt;p&gt;&lt;img alt="Scripting research" src="https://ogstudio.github.io/2017-08-scripting-research.png" /&gt;&lt;/p&gt;
&lt;p&gt;This article describes scripting research in July 2017.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;OGS Editor 0.10 supports Python for such a code thanks to &lt;a href="http://swig.org/"&gt;SWIG&lt;/a&gt;. 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.&lt;/p&gt;
@@ -171,10 +211,4 @@ We spent 120 hours in five months to produce ten tutorials of the guide.&lt;/p&g
&lt;li&gt;main.h - содержит остальной код приложения&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Их содержимое несколько отличается для каждой из платформ, но наличие всего двух файлов позволяет увидеть общую картину.&lt;/p&gt;
&lt;p&gt;На этом мы заканчиваем описание проблем, с которыми мы столкнулись во время создания самоучителя для iOS в мае 2017.&lt;/p&gt;</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">&lt;p&gt;So far so nice. Pelican is really cool, and provides a quick starting guided
to get up and running real fast.&lt;/p&gt;
&lt;p&gt;Much more smooth than Jekyll.&lt;/p&gt;
&lt;p&gt;I &amp;lt;3 Python and its ecosystem. Something is just EASIER in Python.&lt;/p&gt;</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">&lt;p&gt;Пока что полёт нормальный. Pelican действительно крут, позволяет
быстро всё настроить и запуститься.&lt;/p&gt;
&lt;p&gt;Намного легче, чем Jekyll.&lt;/p&gt;
&lt;p&gt;&amp;lt;3 Python и его экосистему. Что-то просто ЛЕГЧЕ в Python.&lt;/p&gt;</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">&lt;p&gt;Here is a full review, guys.&lt;/p&gt;</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">&lt;p&gt;Вот и моё первое ревью, чуввви.&lt;/p&gt;</summary></entry></feed>
&lt;p&gt;На этом мы заканчиваем описание проблем, с которыми мы столкнулись во время создания самоучителя для iOS в мае 2017.&lt;/p&gt;</summary></entry><entry><title>Stub</title><link href="https://ogstudio.github.io/stub.html" rel="alternate"></link><updated>2017-06-03T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-03:stub.html</id><summary type="html">&lt;p&gt;TODO Import previous Opensource Game Studio articles from Wordpress.&lt;/p&gt;</summary></entry><entry><title>Заглушка</title><link href="https://ogstudio.github.io/stub-ru.html" rel="alternate"></link><updated>2017-06-03T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-03:stub-ru.html</id><summary type="html">&lt;p&gt;TODO Импортировать предыдущие статьи Opensource Game Studio с Wordpress.&lt;/p&gt;</summary></entry></feed>

+ 21
- 1
feeds/news.atom.xml View File

@@ -1,5 +1,25 @@
<?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/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">&lt;p&gt;&lt;img alt="Scripting research" src="https://ogstudio.github.io/2017-08-scripting-research.png" /&gt;&lt;/p&gt;
<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-09-10T00:00:00+07:00</updated><entry><title>The birth of MJIN world</title><link href="https://ogstudio.github.io/mjin-world-birth.html" rel="alternate"></link><updated>2017-09-10T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-09-10:mjin-world-birth.html</id><summary type="html">&lt;p&gt;&lt;img alt="The birth of MJIN world" src="https://ogstudio.github.io/2017-09-mjin-world-birth.png" /&gt;&lt;/p&gt;
&lt;p&gt;This article describes the birth of MJIN world in August 2017.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mjin-player&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As you know, &lt;a href="https://ogstudio.github.io/scripting-research.html"&gt;we spent July to research scripting&lt;/a&gt;. We found a solution that satisfies the following criteria. Scripts should:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;run unchanged on all supported platforms&lt;/li&gt;
&lt;li&gt;allow extending C++ code&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We have verified the second criterion by writing a sample application. The first criterion was taken for granted because it SHOULD be true.&lt;/p&gt;
&lt;p&gt;At the time, we saw two ways to verify the first criterion:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;create one sample application for each platform to verify scripting only&lt;/li&gt;
&lt;li&gt;create a single cross-platform application, which can run any code&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We chose the second approach because it is more beneficial in the long run. As you might have guessed, &lt;a href="https://bitbucket.org/ogstudio/mjin-player"&gt;mjin-player&lt;/a&gt; is that application.&lt;/p&gt;
&lt;p&gt;mjin-player serves as a base for the rest of MJIN projects to make them run on all supported platforms. However, there's no magic trick to hide the projects from the platform, and there was no such intention. Instead, mjin-player provides a consistent set of rules how other MJIN projects should be structured to be able to run on all supported platforms.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mjin-application&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This set of rules for MJIN projects is packaged into &lt;a href="https://bitbucket.org/ogstudio/mjin-application"&gt;mjin-application&lt;/a&gt;. mjin-application is a library that provides basic functionality every MJIN project would need and nothing more. For instance, mjin-application does not and will not contain scripting or any other specific functionality.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MJIN world&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So what is &lt;a href="https://bitbucket.org/ogstudio/mjin"&gt;MJIN world&lt;/a&gt;? It's a set of projects that constitute our game development tools. mjin-player and mjin-application are the first bricks of the newly born MJIN world. A lot more to come. Stay tuned for the brighter MJIN future.&lt;/p&gt;
&lt;p&gt;That's it for describing the birth of MJIN world in August 2017.&lt;/p&gt;</summary></entry><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">&lt;p&gt;&lt;img alt="Scripting research" src="https://ogstudio.github.io/2017-08-scripting-research.png" /&gt;&lt;/p&gt;
&lt;p&gt;This article describes scripting research in July 2017.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;OGS Editor 0.10 supports Python for such a code thanks to &lt;a href="http://swig.org/"&gt;SWIG&lt;/a&gt;. 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.&lt;/p&gt;


+ 2
- 0
feeds/stub.atom.xml View File

@@ -0,0 +1,2 @@
<?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/stub.atom.xml" rel="self"></link><id>https://ogstudio.github.io/</id><updated>2017-06-03T00:00:00+07:00</updated><entry><title>Stub</title><link href="https://ogstudio.github.io/stub.html" rel="alternate"></link><updated>2017-06-03T00:00:00+07:00</updated><author><name>Opensource Game Studio</name></author><id>tag:ogstudio.github.io,2017-06-03:stub.html</id><summary type="html">&lt;p&gt;TODO Import previous Opensource Game Studio articles from Wordpress.&lt;/p&gt;</summary></entry></feed>

+ 48
- 57
index.html View File

@@ -47,6 +47,45 @@

<article>
<a href="https://ogstudio.github.io/mjin-world-birth.html"><h3 class="article-title">The birth of MJIN world</h3></a>
<h6 class="subheader" title="2017-09-10T00:00:00+07:00">Вс 10 Сентябрь 2017
<a class="button secondary small translation-button" href="https://ogstudio.github.io/mjin-world-birth-ru.html">ru</a>

</h6><p><img alt="The birth of MJIN world" src="https://ogstudio.github.io/2017-09-mjin-world-birth.png" /></p>
<p>This article describes the birth of MJIN world in August 2017.</p>
<p><strong>mjin-player</strong></p>
<p>As you know, <a href="https://ogstudio.github.io/scripting-research.html">we spent July to research scripting</a>. We found a solution that satisfies the following criteria. Scripts should:</p>
<ol>
<li>run unchanged on all supported platforms</li>
<li>allow extending C++ code</li>
</ol>
<p>We have verified the second criterion by writing a sample application. The first criterion was taken for granted because it SHOULD be true.</p>
<p>At the time, we saw two ways to verify the first criterion:</p>
<ol>
<li>create one sample application for each platform to verify scripting only</li>
<li>create a single cross-platform application, which can run any code</li>
</ol>
<p>We chose the second approach because it is more beneficial in the long run. As you might have guessed, <a href="https://bitbucket.org/ogstudio/mjin-player">mjin-player</a> is that application.</p>
<p>mjin-player serves as a base for the rest of MJIN projects to make them run on all supported platforms. However, there's no magic trick to hide the projects from the platform, and there was no such intention. Instead, mjin-player provides a consistent set of rules how other MJIN projects should be structured to be able to run on all supported platforms.</p>
<p><strong>mjin-application</strong></p>
<p>This set of rules for MJIN projects is packaged into <a href="https://bitbucket.org/ogstudio/mjin-application">mjin-application</a>. mjin-application is a library that provides basic functionality every MJIN project would need and nothing more. For instance, mjin-application does not and will not contain scripting or any other specific functionality.</p>
<p><strong>MJIN world</strong></p>
<p>So what is <a href="https://bitbucket.org/ogstudio/mjin">MJIN world</a>? It's a set of projects that constitute our game development tools. mjin-player and mjin-application are the first bricks of the newly born MJIN world. A lot more to come. Stay tuned for the brighter MJIN future.</p>
<p>That's it for describing the birth of MJIN world in August 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/scripting-research.html"><h3 class="article-title">Scripting research</h3></a>
<h6 class="subheader" title="2017-08-16T00:00:00+07:00">Ср 16 Август 2017
@@ -55,42 +94,14 @@
</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>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 ...</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/scripting-research.html">Read More</a>
<hr class="gradient"/>
</article>


@@ -135,36 +146,16 @@ In case you missed it, here ...</p><p class="subheader">Category: <a href="https


<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">Сб 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
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><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/pelican-review.html">Read More</a>
<hr class="gradient"/>
</article>



<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">Чт 01 Июнь 2017
<a class="button secondary small translation-button" href="https://ogstudio.github.io/keyboard-review-ru.html">ru</a>
<a href="https://ogstudio.github.io/stub.html"><h3 class="article-title">Stub</h3></a>
<h6 class="subheader" title="2017-06-03T00:00:00+07:00">Сб 03 Июнь 2017
<a class="button secondary small translation-button" href="https://ogstudio.github.io/stub-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>
</h6><p>TODO Import previous Opensource Game Studio articles from Wordpress.</p><p class="subheader">Category: <a href="https://ogstudio.github.io/category/stub.html">Stub</a>

</p>


<a class="button radius secondary small right" href="https://ogstudio.github.io/keyboard-review.html">Read More</a>
<a class="button radius secondary small right" href="https://ogstudio.github.io/stub.html">Read More</a>
<hr class="gradient"/>
</article>

@@ -196,7 +187,7 @@ to get up and running real fast.</p>
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


+ 1
- 1
ios-tutorial-ru.html View File

@@ -119,7 +119,7 @@
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


+ 1
- 1
ios-tutorial.html View File

@@ -119,7 +119,7 @@
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


+ 132
- 0
mjin-world-birth-ru.html View File

@@ -0,0 +1,132 @@
<!DOCTYPE html>
<head>
<meta charset="utf-8" />
<!-- Set the viewport width to device width for mobile -->
<meta name="viewport" content="width=device-width" />

<title>Рождение вселенной MJIN</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/mjin-world-birth-ru.html" rel="bookmark"
title="Permalink to Рождение вселенной MJIN">Рождение вселенной MJIN</a></h3>
</header>

<h6 class="subheader" title="2017-09-10T00:00:00+07:00">Вс 10 Сентябрь 2017
<a class="button secondary small translation-button" href="https://ogstudio.github.io/mjin-world-birth.html">en</a>

</h6> <p><img alt="Рождение вселенной MJIN" src="https://ogstudio.github.io/2017-09-mjin-world-birth.png" /></p>
<p>Эта статья описывает рождение вселенной MJIN в августе 2017.</p>
<p><strong>mjin-player</strong></p>
<p>Как вы знаете, <a href="https://ogstudio.github.io/scripting-research-ru.html">в июле мы изучали скриптование</a>. Мы нашли решение, которое удовлетворяет следующим критериям. Скрипты должны:</p>
<ol>
<li>исполняться в исходном виде без изменений на всех поддерживаемых платформах</li>
<li>позволять расширять код C++</li>
</ol>
<p>Мы проверили второй критерий в рамках тестового приложения. В первый критерий мы просто поверили, т.к. он ДОЛЖЕН быть верен.</p>
<p>В тот момент мы видели два варианта проверки первого критерия:</p>
<ol>
<li>создать по одному тестовому приложению под каждую платформу для проверки лишь этого критерия</li>
<li>создать одно кросс-платформенное приложение, которому можно скормить практически любой код</li>
</ol>
<p>Мы выбрали второй подход, т.к. он выгоднее в долгосрочной перспективе. Как вы уже догадались, <a href="https://bitbucket.org/ogstudio/mjin-player">mjin-player</a> является тем самым кросс-платформенным приложением.</p>
<p>mjin-player служит базой для остальных проектов MJIN, которая позволяет этим проектам работать на всех поддерживаемых платформах. Тем не менее, в mjin-player нет никакой магии, проекты никак не скрыты от деталей платформ, да и не было такой задачи. Вместо скрытия деталей платформы mjin-player предоставляет набор правил, которым должны удовлетворять проекты MJIN для работы на всех поддерживаемых платформах.</p>
<p><strong>mjin-application</strong></p>
<p>Этот набор правил представлен в виде <a href="https://bitbucket.org/ogstudio/mjin-application">mjin-application</a>. mjin-application является библиотекой с базовым функционалом, необходимым для каждого проекта MJIN, но не более. Например, mjin-application не содержит и никогда не будет содержать скриптования или подобного специфического функционала.</p>
<p><strong>Вселенная MJIN</strong></p>
<p>Так что же такое <a href="https://bitbucket.org/ogstudio/mjin">вселенная MJIN</a>? Это множество проектов, которые являются нашими средствами для разработки игр. mjin-player и mjin-application - первые кирпичики недавно появившейся вселенной MJIN. А будет их намного больше. Оставайтесь на связи, нас ждёт светлое будущее с MJIN.</p>
<p>На этом мы заканчиваем описание рождения вселенной MJIN в августе 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/stub.html">Stub</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>

pelican-review-ru.html → mjin-world-birth.html View File

@@ -4,7 +4,7 @@
<!-- Set the viewport width to device width for mobile -->
<meta name="viewport" content="width=device-width" />

<title>Обзор Pelican</title>
<title>The birth of MJIN world</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" />
@@ -46,18 +46,35 @@
<div class="large-9 columns">
<article>
<header>
<h3 class="article-title"><a href="https://ogstudio.github.io/pelican-review-ru.html" rel="bookmark"
title="Permalink to Обзор Pelican">Обзор Pelican</a></h3>
<h3 class="article-title"><a href="https://ogstudio.github.io/mjin-world-birth.html" rel="bookmark"
title="Permalink to The birth of MJIN world">The birth of MJIN world</a></h3>
</header>

<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 действительно крут, позволяет
быстро всё настроить и запуститься.</p>
<p>Намного легче, чем Jekyll.</p>
<p>&lt;3 Python и его экосистему. Что-то просто ЛЕГЧЕ в Python.</p>
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a>
<h6 class="subheader" title="2017-09-10T00:00:00+07:00">Вс 10 Сентябрь 2017
<a class="button secondary small translation-button" href="https://ogstudio.github.io/mjin-world-birth-ru.html">ru</a>

</h6> <p><img alt="The birth of MJIN world" src="https://ogstudio.github.io/2017-09-mjin-world-birth.png" /></p>
<p>This article describes the birth of MJIN world in August 2017.</p>
<p><strong>mjin-player</strong></p>
<p>As you know, <a href="https://ogstudio.github.io/scripting-research.html">we spent July to research scripting</a>. We found a solution that satisfies the following criteria. Scripts should:</p>
<ol>
<li>run unchanged on all supported platforms</li>
<li>allow extending C++ code</li>
</ol>
<p>We have verified the second criterion by writing a sample application. The first criterion was taken for granted because it SHOULD be true.</p>
<p>At the time, we saw two ways to verify the first criterion:</p>
<ol>
<li>create one sample application for each platform to verify scripting only</li>
<li>create a single cross-platform application, which can run any code</li>
</ol>
<p>We chose the second approach because it is more beneficial in the long run. As you might have guessed, <a href="https://bitbucket.org/ogstudio/mjin-player">mjin-player</a> is that application.</p>
<p>mjin-player serves as a base for the rest of MJIN projects to make them run on all supported platforms. However, there's no magic trick to hide the projects from the platform, and there was no such intention. Instead, mjin-player provides a consistent set of rules how other MJIN projects should be structured to be able to run on all supported platforms.</p>
<p><strong>mjin-application</strong></p>
<p>This set of rules for MJIN projects is packaged into <a href="https://bitbucket.org/ogstudio/mjin-application">mjin-application</a>. mjin-application is a library that provides basic functionality every MJIN project would need and nothing more. For instance, mjin-application does not and will not contain scripting or any other specific functionality.</p>
<p><strong>MJIN world</strong></p>
<p>So what is <a href="https://bitbucket.org/ogstudio/mjin">MJIN world</a>? It's a set of projects that constitute our game development tools. mjin-player and mjin-application are the first bricks of the newly born MJIN world. A lot more to come. Stay tuned for the brighter MJIN future.</p>
<p>That's it for describing the birth of MJIN world in August 2017.</p>
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/news.html">News</a>

</p>

@@ -83,7 +100,7 @@
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->

+ 1
- 1
openscenegraph-cross-platform-guide-ru.html View File

@@ -99,7 +99,7 @@
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


+ 1
- 1
openscenegraph-cross-platform-guide.html View File

@@ -99,7 +99,7 @@ We spent 120 hours in five months to produce ten tutorials of the guide.</p>
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


+ 1
- 1
pages/about-ru.html View File

@@ -69,7 +69,7 @@
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


+ 1
- 1
pages/about.html View File

@@ -69,7 +69,7 @@
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


+ 1
- 1
pages/projects-ru.html View File

@@ -71,7 +71,7 @@
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


+ 1
- 1
pages/projects.html View File

@@ -71,7 +71,7 @@
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


+ 1
- 1
scripting-research-ru.html View File

@@ -107,7 +107,7 @@
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


+ 1
- 1
scripting-research.html View File

@@ -109,7 +109,7 @@ Next, we tried to inherit a class in Lua and override the class methods. We fail
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


keyboard-review-ru.html → stub-ru.html View File

@@ -4,7 +4,7 @@
<!-- Set the viewport width to device width for mobile -->
<meta name="viewport" content="width=device-width" />

<title>Моё первое ревью</title>
<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" />
@@ -46,15 +46,15 @@
<div class="large-9 columns">
<article>
<header>
<h3 class="article-title"><a href="https://ogstudio.github.io/keyboard-review-ru.html" rel="bookmark"
title="Permalink to Моё первое ревью">Моё первое ревью</a></h3>
<h3 class="article-title"><a href="https://ogstudio.github.io/stub-ru.html" rel="bookmark"
title="Permalink to Заглушка">Заглушка</a></h3>
</header>

<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 class="subheader" title="2017-06-03T00:00:00+07:00">Сб 03 Июнь 2017
<a class="button secondary small translation-button" href="https://ogstudio.github.io/stub.html">en</a>

</h6> <p>Вот и моё первое ревью, чуввви.</p>
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/review.html">Review</a>
</h6> <p>TODO Импортировать предыдущие статьи Opensource Game Studio с Wordpress.</p>
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/stub.html">Stub</a>

</p>

@@ -80,7 +80,7 @@
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->

keyboard-review.html → stub.html View File

@@ -4,7 +4,7 @@
<!-- Set the viewport width to device width for mobile -->
<meta name="viewport" content="width=device-width" />

<title>My first review</title>
<title>Stub</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" />
@@ -46,15 +46,15 @@
<div class="large-9 columns">
<article>
<header>
<h3 class="article-title"><a href="https://ogstudio.github.io/keyboard-review.html" rel="bookmark"
title="Permalink to My first review">My first review</a></h3>
<h3 class="article-title"><a href="https://ogstudio.github.io/stub.html" rel="bookmark"
title="Permalink to Stub">Stub</a></h3>
</header>

<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 class="subheader" title="2017-06-03T00:00:00+07:00">Сб 03 Июнь 2017
<a class="button secondary small translation-button" href="https://ogstudio.github.io/stub-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>
</h6> <p>TODO Import previous Opensource Game Studio articles from Wordpress.</p>
<p class="subheader">Category: <a href="https://ogstudio.github.io/category/stub.html">Stub</a>

</p>

@@ -80,7 +80,7 @@
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->

+ 1
- 1
tags.html View File

@@ -67,7 +67,7 @@
<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>
<li><a href="https://ogstudio.github.io/category/stub.html">Stub</a></li>
</ul>
-->


Loading…
Cancel
Save