ソースを参照

Add 2016 november recap

pull/1/head
コミット
ebb11bb49c
12個のファイルの変更569行の追加2行の削除
  1. バイナリ
      2016-12-15_2016-november-recap.png
  2. +157
    -0
      2016-november-recap-ru.html
  3. +156
    -0
      2016-november-recap.html
  4. +4
    -0
      archives.html
  5. +19
    -0
      author/opensource-game-studio2.html
  6. +19
    -0
      category/news2.html
  7. +60
    -1
      feeds/all.atom.xml
  8. +30
    -1
      feeds/news.atom.xml
  9. +19
    -0
      index2.html
  10. +53
    -0
      pelican/content/articles/2016-12-15_2016-november-recap-ru.md
  11. +52
    -0
      pelican/content/articles/2016-12-15_2016-november-recap.md
  12. バイナリ
      pelican/content/images/2016-12-15_2016-november-recap.png

バイナリ
2016-12-15_2016-november-recap.png ファイルの表示

変更前 変更後
幅: 1134  |  高さ: 850  |  サイズ: 322KB

+ 157
- 0
2016-november-recap-ru.html ファイルの表示

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

<title>Ноябрь 2016 кратко</title>

<link rel="stylesheet" href="http://opengamestudio.org/theme/css/normalize.css" />
<link rel="stylesheet" href="http://opengamestudio.org/theme/css/foundation.min.css" />
<link rel="stylesheet" href="http://opengamestudio.org/theme/css/style.css" />
<link rel="stylesheet" href="http://opengamestudio.org/theme/css/pygments.css" />
<script src="http://opengamestudio.org/theme/js/custom.modernizr.js"></script>

<!-- So Firefox can bookmark->"abo this site" -->
<link href="feeds/all.atom.xml" rel="alternate" title="Opensource Game Studio" type="application/atom+xml">

</head>

<body>

<!-- Nav Bar -->
<nav>

<!-- Show menu items and pages -->
<div class="row">
<div class="large-12 columns top-bar">
<h1><a href="http://opengamestudio.org">Opensource Game Studio</a></h1>
</div>
</div>
<div class="row top-menu">
<div class="large-12 columns">
<a href="/pages/projects.html" class="menu-button secondary">Projects</a>
<a href="/pages/about.html" class="menu-button secondary">About</a>

</div>
</div>
</nav>
<!-- End Nav -->


<!-- Main Page Content and Sidebar -->
<div class="row">

<!-- Main Blog Content -->
<div class="large-9 columns">
<article>
<header>
<h3 class="article-title"><a href="http://opengamestudio.org/2016-november-recap-ru.html" rel="bookmark"
title="Permalink to Ноябрь 2016 кратко">Ноябрь 2016 кратко</a></h3>
</header>

<h6 class="subheader" title="2016-12-15T00:00:00+03:00">Чт 15 Декабрь 2016
<a class="button secondary small translation-button" href="http://opengamestudio.org/2016-november-recap.html">en</a>

</h6> <p><img alt="November recap" src="http://opengamestudio.org/2016-12-15_2016-november-recap.png" /></p>
<p>Эта статья описывает начало разделения библиотеки MJIN на модули.</p>
<p>Как только мы собрали OpenSceneGraph для Android, стало очевидно, что часть функционала MJIN не нужна на Android. Например, UIQt - это основа интерфейса Редактора. Раз Редактор - это приложение для ПК, то UIQt не нужен на Android.</p>
<p>Мы решили рассмотреть два подхода к разделению MJIN на модули: во время сборки (build-time) и исполнения (run-time).
Разделение <strong>во время сборки</strong> означает гибкую систему настроек MJIN, что позволит собирать её различно под каждую платформу.
Разделение <strong>во время исполнения</strong> означает разделение MJIN на несколько небольших библиотек с последующим соединением во время исполнения, что позволит легко менять функционал без повторной сборки.</p>
<p><strong>Исследование разделения во время исполнения.</strong></p>
<p>Т.к. разделение во время исполнения имеет больше преимуществ, мы начали с этого подхода.
Самый простой способ достичь его заключался в использовании C API, т.к. правила C ABI намного проще правил C++ ABI.</p>
<p>Мы создали маленький проект, включающий в себя приложение, библиотеку и плагин.
<strong>Приложение</strong> было слинковано с библиотекой и использовало её для загрузки плагина.
<strong>Библиотека</strong> предоставляла функции для регистрации плагина и вызывала его функции.
<strong>Плагин</strong> предоставлял функции для библиотеки и вызывал её функции.</p>
<p>Исследование прошло на ура: проект работал в полном соответствии с нашими ожиданиями на Linux и Windows.
Тем не менее, т.к. MJIN на текущий момент является большой монолитной сущностью, мы отложили применение C API до окончания разделения во время сборки.</p>
<p><strong>Начало разделения во время сборки.</strong></p>
<p>Мы выделили следующие модули из MJIN:</p>
<ul>
<li>
<p>Android: предоставляет Java Native Interface (JNI) к MJIN</p>
</li>
<li>
<p>Sound: предоставляет доступ к OpenAL</p>
</li>
<li>
<p>UIQt: предоставляет доступ к Qt</p>
</li>
</ul>
<p>Модули Sound и UIQt на текущий момент статически линкуются в MJIN, тогда как модуль Android линкуется динамически из-за ограничений JNI.</p>
<p>В следующем году мы изменим структуру MJIN так, чтобы её можно было легче собрать под разные платформы.</p>
<p>На этом мы заканчиваем статью о начале разделения библиотеки MJIN на модули.</p>
<p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>

</p>



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

<!-- Sidebar -->
<aside class="large-3 columns">
<!--k
<h5 class="sidebar-title">Site</h5>
<ul class="side-nav">
<li><a href="http://opengamestudio.org/archives.html">Archives</a>
<li><a href="http://opengamestudio.org/tags.html">Tags</a>


<li><a href="http://opengamestudio.org/feeds/all.atom.xml" rel="alternate">Atom feed</a></li>
</ul>

<h5 class="sidebar-title">Categories</h5>
<ul class="side-nav">
<li><a href="http://opengamestudio.org/category/news.html">News</a></li>
</ul>
-->


<h5 class="sidebar-title">Ads</h5>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- ogs2 -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-4473792248813084"
data-ad-slot="9024247127"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

</aside> <!-- End Sidebar -->

</div> <!-- End Main Content and Sidebar -->


<!-- Footer -->
<footer class="row">
<div class="large-12 columns">
<hr />
<div class="row">
<div class="large-7 columns">
<p>Proudly powered by <a href="http://getpelican.com">Pelican</a>, which takes great advantage of <a href="http://python.org">Python</a>.</p>
</div>
</div>
</div>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-3773114-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</footer>

+ 156
- 0
2016-november-recap.html ファイルの表示

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

<title>November 2016 recap</title>

<link rel="stylesheet" href="http://opengamestudio.org/theme/css/normalize.css" />
<link rel="stylesheet" href="http://opengamestudio.org/theme/css/foundation.min.css" />
<link rel="stylesheet" href="http://opengamestudio.org/theme/css/style.css" />
<link rel="stylesheet" href="http://opengamestudio.org/theme/css/pygments.css" />
<script src="http://opengamestudio.org/theme/js/custom.modernizr.js"></script>

<!-- So Firefox can bookmark->"abo this site" -->
<link href="feeds/all.atom.xml" rel="alternate" title="Opensource Game Studio" type="application/atom+xml">

</head>

<body>

<!-- Nav Bar -->
<nav>

<!-- Show menu items and pages -->
<div class="row">
<div class="large-12 columns top-bar">
<h1><a href="http://opengamestudio.org">Opensource Game Studio</a></h1>
</div>
</div>
<div class="row top-menu">
<div class="large-12 columns">
<a href="/pages/projects.html" class="menu-button secondary">Projects</a>
<a href="/pages/about.html" class="menu-button secondary">About</a>

</div>
</div>
</nav>
<!-- End Nav -->


<!-- Main Page Content and Sidebar -->
<div class="row">

<!-- Main Blog Content -->
<div class="large-9 columns">
<article>
<header>
<h3 class="article-title"><a href="http://opengamestudio.org/2016-november-recap.html" rel="bookmark"
title="Permalink to November 2016 recap">November 2016 recap</a></h3>
</header>

<h6 class="subheader" title="2016-12-15T00:00:00+03:00">Чт 15 Декабрь 2016
<a class="button secondary small translation-button" href="http://opengamestudio.org/2016-november-recap-ru.html">ru</a>

</h6> <p><img alt="November recap" src="http://opengamestudio.org/2016-12-15_2016-november-recap.png" /></p>
<p>This article describes the start of MJIN library separation into modules.</p>
<p>Once we built OpenSceneGraph for Android, it became obvious that some MJIN functionality is not suitable for Android. For example, UIQt provides a basis for OGS Editor UI. Since OGS Editor is a desktop application, we don't need UIQt for Android.</p>
<p>We decided to have a look at two approaches to separate MJIN into modules: build-time separation and run-time one.
<strong>Build-time</strong> separation means MJIN becomes highly configurable and each platform gets specifically tailored MJIN build.
<strong>Run-time</strong> separation means MJIN is divided into smaller libraries that are connected at run-time, which makes it easy to change functionality without rebuilding.</p>
<p><strong>Run-time separation research.</strong></p>
<p>Since run-time separation has more benefits, we started researching it first.
The easiest way to achieve it was to use C API, because C ABI rules are much simpler than C++ one's.</p>
<p>We created a sample project consisting of the application, library, and plugin.
<strong>The application</strong> has been linked to the library and used it to load the plugin.
<strong>The library</strong> provided functions to register plugins and call their functions.
<strong>The plugin</strong> provided functions for the library and called library functions.</p>
<p>The research was successful: the sample project worked correctly under Linux and Windows. However, since MJIN is currently a single large entity, we postponed C API application until we finish build-time separation.</p>
<p><strong>Build-time separation start.</strong></p>
<p>We extracted the following modules from MJIN:</p>
<ul>
<li>
<p>Android: provides Java Native Interface (JNI) to MJIN</p>
</li>
<li>
<p>Sound: provides access to OpenAL</p>
</li>
<li>
<p>UIQt: provides access to Qt UI</p>
</li>
</ul>
<p>Sound and UIQt modules are currently statically linked into MJIN library, while Android module is already a separate library due to JNI requirements.</p>
<p>In the coming year, we're going to significantly restructure MJIN so that it suits as many platforms as possible.</p>
<p>That's it for describing the start of MJIN library separation into modules.</p>
<p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>

</p>



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

<!-- Sidebar -->
<aside class="large-3 columns">
<!--k
<h5 class="sidebar-title">Site</h5>
<ul class="side-nav">
<li><a href="http://opengamestudio.org/archives.html">Archives</a>
<li><a href="http://opengamestudio.org/tags.html">Tags</a>


<li><a href="http://opengamestudio.org/feeds/all.atom.xml" rel="alternate">Atom feed</a></li>
</ul>

<h5 class="sidebar-title">Categories</h5>
<ul class="side-nav">
<li><a href="http://opengamestudio.org/category/news.html">News</a></li>
</ul>
-->


<h5 class="sidebar-title">Ads</h5>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- ogs2 -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-4473792248813084"
data-ad-slot="9024247127"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

</aside> <!-- End Sidebar -->

</div> <!-- End Main Content and Sidebar -->


<!-- Footer -->
<footer class="row">
<div class="large-12 columns">
<hr />
<div class="row">
<div class="large-7 columns">
<p>Proudly powered by <a href="http://getpelican.com">Pelican</a>, which takes great advantage of <a href="http://python.org">Python</a>.</p>
</div>
</div>
</div>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-3773114-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</footer>

+ 4
- 0
archives.html ファイルの表示

@@ -93,6 +93,10 @@
<td>Сб 31 Декабрь 2016</td>
<td><a href='2017-happy-new-year.html'>Happy 2017</a></td>
</tr>
<tr>
<td>Чт 15 Декабрь 2016</td>
<td><a href='2016-november-recap.html'>November 2016 recap</a></td>
</tr>
</tbody>
</table>



+ 19
- 0
author/opensource-game-studio2.html ファイルの表示

@@ -64,6 +64,25 @@
<hr class="gradient"/>
</article>



<article>
<a href="http://opengamestudio.org/2016-november-recap.html"><h3 class="article-title">November 2016 recap</h3></a>
<h6 class="subheader" title="2016-12-15T00:00:00+03:00">Чт 15 Декабрь 2016
<a class="button secondary small translation-button" href="http://opengamestudio.org/2016-november-recap-ru.html">ru</a>

</h6><p><img alt="November recap" src="http://opengamestudio.org/2016-12-15_2016-november-recap.png" /></p>
<p>This article describes the start of MJIN library separation into modules.</p>
<p>Once we built OpenSceneGraph for Android, it became obvious that some MJIN functionality is not suitable for Android. For example, UIQt provides a basis for OGS Editor UI. Since OGS Editor is a desktop application, we don't need ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>

</p>


<a class="button radius secondary small right" href="http://opengamestudio.org/2016-november-recap.html">Read More</a>
<hr class="gradient"/>
</article>

<!-- /#posts-list -->
<div class="pagination-centered">
<h6 class="subheader">Page 2 of 2</h6>


+ 19
- 0
category/news2.html ファイルの表示

@@ -64,6 +64,25 @@
<hr class="gradient"/>
</article>



<article>
<a href="http://opengamestudio.org/2016-november-recap.html"><h3 class="article-title">November 2016 recap</h3></a>
<h6 class="subheader" title="2016-12-15T00:00:00+03:00">Чт 15 Декабрь 2016
<a class="button secondary small translation-button" href="http://opengamestudio.org/2016-november-recap-ru.html">ru</a>

</h6><p><img alt="November recap" src="http://opengamestudio.org/2016-12-15_2016-november-recap.png" /></p>
<p>This article describes the start of MJIN library separation into modules.</p>
<p>Once we built OpenSceneGraph for Android, it became obvious that some MJIN functionality is not suitable for Android. For example, UIQt provides a basis for OGS Editor UI. Since OGS Editor is a desktop application, we don't need ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>

</p>


<a class="button radius secondary small right" href="http://opengamestudio.org/2016-november-recap.html">Read More</a>
<hr class="gradient"/>
</article>

<!-- /#posts-list -->
<div class="pagination-centered">
<h6 class="subheader">Page 2 of 2</h6>


+ 60
- 1
feeds/all.atom.xml ファイルの表示

@@ -450,4 +450,63 @@ We will. Stay tuned.&lt;/p&gt;
Итак, вы хотите, чтобы наша игра стала реальностью? Присоединяйтесь к нам. Вместе мы будем править галактикой. Или можете просто подождать. Мы не бросили все это несколько лет назад. Не станем и сейчас.
В конце концов, есть только один способ создать годный инструмент (а это наша первоначальная цель, если вы помните) - мы должны использовать его сами.
Мы будем. Следите за новостями.&lt;/p&gt;
&lt;p&gt;Счастливого 2017-го. Пусть он будет простым.&lt;/p&gt;</summary></entry></feed>
&lt;p&gt;Счастливого 2017-го. Пусть он будет простым.&lt;/p&gt;</summary></entry><entry><title>November 2016 recap</title><link href="http://opengamestudio.org/2016-november-recap.html" rel="alternate"></link><updated>2016-12-15T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2016-12-15:2016-november-recap.html</id><summary type="html">&lt;p&gt;&lt;img alt="November recap" src="http://opengamestudio.org/2016-12-15_2016-november-recap.png" /&gt;&lt;/p&gt;
&lt;p&gt;This article describes the start of MJIN library separation into modules.&lt;/p&gt;
&lt;p&gt;Once we built OpenSceneGraph for Android, it became obvious that some MJIN functionality is not suitable for Android. For example, UIQt provides a basis for OGS Editor UI. Since OGS Editor is a desktop application, we don't need UIQt for Android.&lt;/p&gt;
&lt;p&gt;We decided to have a look at two approaches to separate MJIN into modules: build-time separation and run-time one.
&lt;strong&gt;Build-time&lt;/strong&gt; separation means MJIN becomes highly configurable and each platform gets specifically tailored MJIN build.
&lt;strong&gt;Run-time&lt;/strong&gt; separation means MJIN is divided into smaller libraries that are connected at run-time, which makes it easy to change functionality without rebuilding.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Run-time separation research.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since run-time separation has more benefits, we started researching it first.
The easiest way to achieve it was to use C API, because C ABI rules are much simpler than C++ one's.&lt;/p&gt;
&lt;p&gt;We created a sample project consisting of the application, library, and plugin.
&lt;strong&gt;The application&lt;/strong&gt; has been linked to the library and used it to load the plugin.
&lt;strong&gt;The library&lt;/strong&gt; provided functions to register plugins and call their functions.
&lt;strong&gt;The plugin&lt;/strong&gt; provided functions for the library and called library functions.&lt;/p&gt;
&lt;p&gt;The research was successful: the sample project worked correctly under Linux and Windows. However, since MJIN is currently a single large entity, we postponed C API application until we finish build-time separation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Build-time separation start.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We extracted the following modules from MJIN:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Android: provides Java Native Interface (JNI) to MJIN&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sound: provides access to OpenAL&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;UIQt: provides access to Qt UI&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sound and UIQt modules are currently statically linked into MJIN library, while Android module is already a separate library due to JNI requirements.&lt;/p&gt;
&lt;p&gt;In the coming year, we're going to significantly restructure MJIN so that it suits as many platforms as possible.&lt;/p&gt;
&lt;p&gt;That's it for describing the start of MJIN library separation into modules.&lt;/p&gt;</summary></entry><entry><title>Ноябрь 2016 кратко</title><link href="http://opengamestudio.org/2016-november-recap-ru.html" rel="alternate"></link><updated>2016-12-15T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2016-12-15:2016-november-recap-ru.html</id><summary type="html">&lt;p&gt;&lt;img alt="November recap" src="http://opengamestudio.org/2016-12-15_2016-november-recap.png" /&gt;&lt;/p&gt;
&lt;p&gt;Эта статья описывает начало разделения библиотеки MJIN на модули.&lt;/p&gt;
&lt;p&gt;Как только мы собрали OpenSceneGraph для Android, стало очевидно, что часть функционала MJIN не нужна на Android. Например, UIQt - это основа интерфейса Редактора. Раз Редактор - это приложение для ПК, то UIQt не нужен на Android.&lt;/p&gt;
&lt;p&gt;Мы решили рассмотреть два подхода к разделению MJIN на модули: во время сборки (build-time) и исполнения (run-time).
Разделение &lt;strong&gt;во время сборки&lt;/strong&gt; означает гибкую систему настроек MJIN, что позволит собирать её различно под каждую платформу.
Разделение &lt;strong&gt;во время исполнения&lt;/strong&gt; означает разделение MJIN на несколько небольших библиотек с последующим соединением во время исполнения, что позволит легко менять функционал без повторной сборки.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Исследование разделения во время исполнения.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Т.к. разделение во время исполнения имеет больше преимуществ, мы начали с этого подхода.
Самый простой способ достичь его заключался в использовании C API, т.к. правила C ABI намного проще правил C++ ABI.&lt;/p&gt;
&lt;p&gt;Мы создали маленький проект, включающий в себя приложение, библиотеку и плагин.
&lt;strong&gt;Приложение&lt;/strong&gt; было слинковано с библиотекой и использовало её для загрузки плагина.
&lt;strong&gt;Библиотека&lt;/strong&gt; предоставляла функции для регистрации плагина и вызывала его функции.
&lt;strong&gt;Плагин&lt;/strong&gt; предоставлял функции для библиотеки и вызывал её функции.&lt;/p&gt;
&lt;p&gt;Исследование прошло на ура: проект работал в полном соответствии с нашими ожиданиями на Linux и Windows.
Тем не менее, т.к. MJIN на текущий момент является большой монолитной сущностью, мы отложили применение C API до окончания разделения во время сборки.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Начало разделения во время сборки.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Мы выделили следующие модули из MJIN:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Android: предоставляет Java Native Interface (JNI) к MJIN&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sound: предоставляет доступ к OpenAL&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;UIQt: предоставляет доступ к Qt&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Модули Sound и UIQt на текущий момент статически линкуются в MJIN, тогда как модуль Android линкуется динамически из-за ограничений JNI.&lt;/p&gt;
&lt;p&gt;В следующем году мы изменим структуру MJIN так, чтобы её можно было легче собрать под разные платформы.&lt;/p&gt;
&lt;p&gt;На этом мы заканчиваем статью о начале разделения библиотеки MJIN на модули.&lt;/p&gt;</summary></entry></feed>

+ 30
- 1
feeds/news.atom.xml ファイルの表示

@@ -226,4 +226,33 @@ At the same time, such a harsh environment highlighted weak spots in our technol
So. You want our game to become a reality? Join us. Together we will rule the galaxy. Or just wait and see. We didn't stop several years ago. We won't stop now.
After all, there is only one way to create a fine tool (and it's our initial goal if you remember) - we need to use it ourselves.
We will. Stay tuned.&lt;/p&gt;
&lt;p&gt;Happy 2017. Let it be simple.&lt;/p&gt;</summary></entry></feed>
&lt;p&gt;Happy 2017. Let it be simple.&lt;/p&gt;</summary></entry><entry><title>November 2016 recap</title><link href="http://opengamestudio.org/2016-november-recap.html" rel="alternate"></link><updated>2016-12-15T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2016-12-15:2016-november-recap.html</id><summary type="html">&lt;p&gt;&lt;img alt="November recap" src="http://opengamestudio.org/2016-12-15_2016-november-recap.png" /&gt;&lt;/p&gt;
&lt;p&gt;This article describes the start of MJIN library separation into modules.&lt;/p&gt;
&lt;p&gt;Once we built OpenSceneGraph for Android, it became obvious that some MJIN functionality is not suitable for Android. For example, UIQt provides a basis for OGS Editor UI. Since OGS Editor is a desktop application, we don't need UIQt for Android.&lt;/p&gt;
&lt;p&gt;We decided to have a look at two approaches to separate MJIN into modules: build-time separation and run-time one.
&lt;strong&gt;Build-time&lt;/strong&gt; separation means MJIN becomes highly configurable and each platform gets specifically tailored MJIN build.
&lt;strong&gt;Run-time&lt;/strong&gt; separation means MJIN is divided into smaller libraries that are connected at run-time, which makes it easy to change functionality without rebuilding.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Run-time separation research.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since run-time separation has more benefits, we started researching it first.
The easiest way to achieve it was to use C API, because C ABI rules are much simpler than C++ one's.&lt;/p&gt;
&lt;p&gt;We created a sample project consisting of the application, library, and plugin.
&lt;strong&gt;The application&lt;/strong&gt; has been linked to the library and used it to load the plugin.
&lt;strong&gt;The library&lt;/strong&gt; provided functions to register plugins and call their functions.
&lt;strong&gt;The plugin&lt;/strong&gt; provided functions for the library and called library functions.&lt;/p&gt;
&lt;p&gt;The research was successful: the sample project worked correctly under Linux and Windows. However, since MJIN is currently a single large entity, we postponed C API application until we finish build-time separation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Build-time separation start.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We extracted the following modules from MJIN:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Android: provides Java Native Interface (JNI) to MJIN&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sound: provides access to OpenAL&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;UIQt: provides access to Qt UI&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sound and UIQt modules are currently statically linked into MJIN library, while Android module is already a separate library due to JNI requirements.&lt;/p&gt;
&lt;p&gt;In the coming year, we're going to significantly restructure MJIN so that it suits as many platforms as possible.&lt;/p&gt;
&lt;p&gt;That's it for describing the start of MJIN library separation into modules.&lt;/p&gt;</summary></entry></feed>

+ 19
- 0
index2.html ファイルの表示

@@ -64,6 +64,25 @@
<hr class="gradient"/>
</article>



<article>
<a href="http://opengamestudio.org/2016-november-recap.html"><h3 class="article-title">November 2016 recap</h3></a>
<h6 class="subheader" title="2016-12-15T00:00:00+03:00">Чт 15 Декабрь 2016
<a class="button secondary small translation-button" href="http://opengamestudio.org/2016-november-recap-ru.html">ru</a>

</h6><p><img alt="November recap" src="http://opengamestudio.org/2016-12-15_2016-november-recap.png" /></p>
<p>This article describes the start of MJIN library separation into modules.</p>
<p>Once we built OpenSceneGraph for Android, it became obvious that some MJIN functionality is not suitable for Android. For example, UIQt provides a basis for OGS Editor UI. Since OGS Editor is a desktop application, we don't need ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>

</p>


<a class="button radius secondary small right" href="http://opengamestudio.org/2016-november-recap.html">Read More</a>
<hr class="gradient"/>
</article>

<!-- /#posts-list -->
<div class="pagination-centered">
<h6 class="subheader">Page 2 of 2</h6>


+ 53
- 0
pelican/content/articles/2016-12-15_2016-november-recap-ru.md ファイルの表示

@@ -0,0 +1,53 @@
Title: Ноябрь 2016 кратко
Date: 2016-12-15 00:00
Category: News
Slug: 2016-november-recap
Lang: ru

![November recap][screenshot]


Эта статья описывает начало разделения библиотеки MJIN на модули.

Как только мы собрали OpenSceneGraph для Android, стало очевидно, что часть функционала MJIN не нужна на Android. Например, UIQt - это основа интерфейса Редактора. Раз Редактор - это приложение для ПК, то UIQt не нужен на Android.

Мы решили рассмотреть два подхода к разделению MJIN на модули: во время сборки (build-time) и исполнения (run-time).
Разделение **во время сборки** означает гибкую систему настроек MJIN, что позволит собирать её различно под каждую платформу.
Разделение **во время исполнения** означает разделение MJIN на несколько небольших библиотек с последующим соединением во время исполнения, что позволит легко менять функционал без повторной сборки.

**Исследование разделения во время исполнения.**

Т.к. разделение во время исполнения имеет больше преимуществ, мы начали с этого подхода.
Самый простой способ достичь его заключался в использовании C API, т.к. правила C ABI намного проще правил C++ ABI.

Мы создали маленький проект, включающий в себя приложение, библиотеку и плагин.
**Приложение** было слинковано с библиотекой и использовало её для загрузки плагина.
**Библиотека** предоставляла функции для регистрации плагина и вызывала его функции.
**Плагин** предоставлял функции для библиотеки и вызывал её функции.

Исследование прошло на ура: проект работал в полном соответствии с нашими ожиданиями на Linux и Windows.
Тем не менее, т.к. MJIN на текущий момент является большой монолитной сущностью, мы отложили применение C API до окончания разделения во время сборки.

**Начало разделения во время сборки.**

Мы выделили следующие модули из MJIN:

*
Android: предоставляет Java Native Interface (JNI) к MJIN

*
Sound: предоставляет доступ к OpenAL

*
UIQt: предоставляет доступ к Qt




Модули Sound и UIQt на текущий момент статически линкуются в MJIN, тогда как модуль Android линкуется динамически из-за ограничений JNI.

В следующем году мы изменим структуру MJIN так, чтобы её можно было легче собрать под разные платформы.

На этом мы заканчиваем статью о начале разделения библиотеки MJIN на модули.

[screenshot]: {attach}/images/2016-12-15_2016-november-recap.png

+ 52
- 0
pelican/content/articles/2016-12-15_2016-november-recap.md ファイルの表示

@@ -0,0 +1,52 @@
Title: November 2016 recap
Date: 2016-12-15 00:00
Category: News
Slug: 2016-november-recap
Lang: en

![November recap][screenshot]


This article describes the start of MJIN library separation into modules.

Once we built OpenSceneGraph for Android, it became obvious that some MJIN functionality is not suitable for Android. For example, UIQt provides a basis for OGS Editor UI. Since OGS Editor is a desktop application, we don't need UIQt for Android.

We decided to have a look at two approaches to separate MJIN into modules: build-time separation and run-time one.
**Build-time** separation means MJIN becomes highly configurable and each platform gets specifically tailored MJIN build.
**Run-time** separation means MJIN is divided into smaller libraries that are connected at run-time, which makes it easy to change functionality without rebuilding.

**Run-time separation research.**

Since run-time separation has more benefits, we started researching it first.
The easiest way to achieve it was to use C API, because C ABI rules are much simpler than C++ one's.

We created a sample project consisting of the application, library, and plugin.
**The application** has been linked to the library and used it to load the plugin.
**The library** provided functions to register plugins and call their functions.
**The plugin** provided functions for the library and called library functions.

The research was successful: the sample project worked correctly under Linux and Windows. However, since MJIN is currently a single large entity, we postponed C API application until we finish build-time separation.

**Build-time separation start.**

We extracted the following modules from MJIN:

*
Android: provides Java Native Interface (JNI) to MJIN

*
Sound: provides access to OpenAL

*
UIQt: provides access to Qt UI




Sound and UIQt modules are currently statically linked into MJIN library, while Android module is already a separate library due to JNI requirements.

In the coming year, we're going to significantly restructure MJIN so that it suits as many platforms as possible.

That's it for describing the start of MJIN library separation into modules.

[screenshot]: {attach}/images/2016-12-15_2016-november-recap.png

バイナリ
pelican/content/images/2016-12-15_2016-november-recap.png ファイルの表示

変更前 変更後
幅: 1134  |  高さ: 850  |  サイズ: 322KB

読み込み中…
キャンセル
保存