選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

news.atom.xml 60KB

7年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <feed xmlns="http://www.w3.org/2005/Atom"><title>Opensource Game Studio</title><link href="http://opengamestudio.org/" rel="alternate"></link><link href="http://opengamestudio.org/feeds/news.atom.xml" rel="self"></link><id>http://opengamestudio.org/</id><updated>2017-11-22T00:00:00+03:00</updated><entry><title>2017 summary</title><link href="http://opengamestudio.org/2017-summary.html" rel="alternate"></link><updated>2017-11-22T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2017-11-22:2017-summary.html</id><summary type="html">&lt;p&gt;&lt;img alt="Screenshot" src="http://opengamestudio.org/2017-11-22-2017-summary.png" /&gt;&lt;/p&gt;
  3. &lt;p&gt;It's time to step back to see our accomplishments in 2017 and how they connect to the overall goal of Opensource Game Studio project.&lt;/p&gt;
  4. &lt;p&gt;&lt;strong&gt;Brief history&lt;/strong&gt;&lt;/p&gt;
  5. &lt;p&gt;Opensource Game Studio project is 12 years old now.&lt;/p&gt;
  6. &lt;p&gt;&lt;strong&gt;2005.&lt;/strong&gt; We started the project with a &lt;a href="https://www.linuxquestions.org/questions/general-10/the-creation-of-the-best-rpg-355858/"&gt;fanatic call&lt;/a&gt; to create the best game ever. Probably right after finishing Half-Life 2 or Morrowind. 99.99% of those who wanted to participate weathered during a couple of years leaving only the two of us: Michael (coding) and Ivan (the rest).
  7. The project was in a constant turmoil because we had no clear purpose and discipline. Thus, we only got a handful of demonstrations during that period.&lt;/p&gt;
  8. &lt;p&gt;&lt;strong&gt;2010.&lt;/strong&gt; The first year for us to admit we failed big time. After accepting the failure, we have set Mahjong game as our initial target. We also realized that if we want the game out, we must work every day. We didn't get anywhere by working on weekends because they often collided with family time.&lt;/p&gt;
  9. &lt;p&gt;&lt;strong&gt;2012, 2013.&lt;/strong&gt; We released Mahjong 1.0 and Mahjong 1.1 correspondingly. We created a complete, polished game in 3-4 years after failing to provide anything of value during previous 5 years. To this date, Mahjong is the best and only game we released so far. We're still proud of it because it still feels great.&lt;/p&gt;
  10. &lt;p&gt;&lt;strong&gt;2015.&lt;/strong&gt; We showcased the first version of our game toolset. After releasing Mahjong, we decided to spend time on building toolset that would allow us to develop games faster.&lt;/p&gt;
  11. &lt;p&gt;&lt;strong&gt;2016.&lt;/strong&gt; We recreated Mahjong gameplay with our game toolset. However, we quickly realized that desktop only game toolset is a dead end. It led us to research mobile platforms.&lt;/p&gt;
  12. &lt;p&gt;&lt;strong&gt;Last year&lt;/strong&gt;&lt;/p&gt;
  13. &lt;p&gt;&lt;strong&gt;2016, October.&lt;/strong&gt; We started mobile platforms' research by making simple straightforward OpenSceneGraph application run under Android.&lt;/p&gt;
  14. &lt;p&gt;&lt;strong&gt;2017, January.&lt;/strong&gt; We got the Android version working and started iOS and Web research.&lt;/p&gt;
  15. &lt;p&gt;&lt;strong&gt;2017, February.&lt;/strong&gt; We made the sample application work everywhere: desktop, mobile, web.&lt;/p&gt;
  16. &lt;p&gt;Researching mobile and web took us about five months. We spent that much time because there was no documentation on how to run OpenSceneGraph across platforms. We had to step in and create said documentation.&lt;/p&gt;
  17. &lt;p&gt;&lt;strong&gt;2017, July.&lt;/strong&gt; We published &lt;a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide"&gt;OpenSceneGraph cross-platform guide&lt;/a&gt;, which describes how to create a simple OpenSceneGraph application and make it run on desktop, mobile, and web. To this date, this is our most popular GitHub repository.&lt;/p&gt;
  18. &lt;p&gt;&lt;strong&gt;2017, November.&lt;/strong&gt; We published simple &lt;a href="https://ogstudio.github.io/game-memory-colors/tutorial-5.3/mjin-player.html"&gt;Memory: Colors game&lt;/a&gt; and the &lt;a href="https://bitbucket.org/ogstudio-games/memory-colors"&gt;guide&lt;/a&gt; on how to create the game from scratch. The game is powered by MJIN, our new cross-platform game toolset that we started this summer.&lt;/p&gt;
  19. &lt;p&gt;Currently MJIN toolset is in its infancy. MJIN needs a real game to flourish. That's why we are already working on cross-platform Mahjong. We'll do our best to make Mahjong faster this time.&lt;/p&gt;</summary></entry><entry><title>Back to the Static</title><link href="http://opengamestudio.org/back-to-the-static.html" rel="alternate"></link><updated>2017-10-16T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2017-10-16:back-to-the-static.html</id><summary type="html">&lt;p&gt;&lt;img alt="Back to the Static" src="http://opengamestudio.org/2017-10-16-back-to-the-static.png" /&gt;&lt;/p&gt;
  20. &lt;p&gt;We have been using Wordpress as our website engine for more than seven years. And now it's time to move forward. Or backward.
  21. For some time we've been tracking the development of the new breed of website engines - static site generators.
  22. It seems that this is the technology capable of changing past into future.&lt;/p&gt;
  23. &lt;p&gt;A static website is more straightforward, quicker and more secure. And with the help of generators, it is also as easy to manage, as the dynamic website.
  24. So, we are starting our site anew with the help of the &lt;a href="https://blog.getpelican.com/"&gt;Pelican&lt;/a&gt;.
  25. Right now it doesn't have all the content from our old site, but we'll add most of it soon.&lt;/p&gt;</summary></entry><entry><title>The birth of MJIN world</title><link href="http://opengamestudio.org/mjin-world-birth.html" rel="alternate"></link><updated>2017-09-10T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2017-09-10:mjin-world-birth.html</id><summary type="html">&lt;p&gt;&lt;img alt="The birth of MJIN world" src="http://opengamestudio.org/2017-09-mjin-world-birth.png" /&gt;&lt;/p&gt;
  26. &lt;p&gt;This article describes the birth of MJIN world in August 2017.&lt;/p&gt;
  27. &lt;p&gt;&lt;strong&gt;mjin-player&lt;/strong&gt;&lt;/p&gt;
  28. &lt;p&gt;As you know, &lt;a href="http://opengamestudio.org/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;
  29. &lt;ol&gt;
  30. &lt;li&gt;run unchanged on all supported platforms&lt;/li&gt;
  31. &lt;li&gt;allow extending C++ code&lt;/li&gt;
  32. &lt;/ol&gt;
  33. &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;
  34. &lt;p&gt;At the time, we saw two ways to verify the first criterion:&lt;/p&gt;
  35. &lt;ol&gt;
  36. &lt;li&gt;create one sample application for each platform to verify scripting only&lt;/li&gt;
  37. &lt;li&gt;create a single cross-platform application, which can run any code&lt;/li&gt;
  38. &lt;/ol&gt;
  39. &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;
  40. &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;
  41. &lt;p&gt;&lt;strong&gt;mjin-application&lt;/strong&gt;&lt;/p&gt;
  42. &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;
  43. &lt;p&gt;&lt;strong&gt;MJIN world&lt;/strong&gt;&lt;/p&gt;
  44. &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;
  45. &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="http://opengamestudio.org/scripting-research.html" rel="alternate"></link><updated>2017-08-16T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2017-08-16:scripting-research.html</id><summary type="html">&lt;p&gt;&lt;img alt="Scripting research" src="http://opengamestudio.org/2017-08-scripting-research.png" /&gt;&lt;/p&gt;
  46. &lt;p&gt;This article describes scripting research in July 2017.&lt;/p&gt;
  47. &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;
  48. &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;
  49. &lt;p&gt;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 &lt;a href="https://kivy.org"&gt;Kivy&lt;/a&gt;, 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.&lt;/p&gt;
  50. &lt;p&gt;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.&lt;/p&gt;
  51. &lt;p&gt;&lt;strong&gt;Our secondary goal for using a scripting language was to allow to extend C++ code.&lt;/strong&gt;&lt;/p&gt;
  52. &lt;p&gt;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.&lt;/p&gt;
  53. &lt;p&gt;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.
  54. Technically such behaviour is achieved by inheriting a base class and overriding its methods in both C++ and a scripting language.&lt;/p&gt;
  55. &lt;p&gt;&lt;strong&gt;First, we evaluated Python for the role of cross-platform scripting language.&lt;/strong&gt;&lt;/p&gt;
  56. &lt;p&gt;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.
  57. We also had a look at &lt;a href="http://pypy.org"&gt;PyPy&lt;/a&gt;, another Python implementation. It also did not mention support for mobile and web platforms.&lt;/p&gt;
  58. &lt;p&gt;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.&lt;/p&gt;
  59. &lt;p&gt;&lt;strong&gt;Second, we evaluated &lt;a href="http://wren.io"&gt;Wren&lt;/a&gt; for the role of cross-platform scripting language.&lt;/strong&gt;&lt;/p&gt;
  60. &lt;p&gt;Wren was the first scripting language we stumbled upon in the long list of non-mainstream scripting languages.&lt;/p&gt;
  61. &lt;p&gt;Wren claimed to be small and easy to learn. Wren also claimed to be intended for embedding in applications. Ironically, the author &lt;a href="http://wren.io/embedding-api.html"&gt;had no time to document how to do the embedding in the first place&lt;/a&gt;. When &lt;a href="https://github.com/munificent/wren/issues/465"&gt;we asked for the time estimates of publishing&lt;/a&gt; the critical part of the documentation, &lt;a href="https://github.com/munificent/wren/issues/402"&gt;we just got a reference to another issue&lt;/a&gt; where the other guy was asking the same question half a year ago!&lt;/p&gt;
  62. &lt;p&gt;That's when we ended our relationship with Wren.&lt;/p&gt;
  63. &lt;p&gt;&lt;strong&gt;Third, we evaluated &lt;a href="http://chaiscript.com"&gt;Chai&lt;/a&gt; for the role of cross-platform scripting language.&lt;/strong&gt;&lt;/p&gt;
  64. &lt;p&gt;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.
  65. We successfully managed to call a C++ function from inside Chai but failed to call a member function. &lt;a href="http://discourse.chaiscript.com/t/cannot-call-a-function-that-accepts-a-string-and-a-vector/334"&gt;We asked for help&lt;/a&gt;, but nobody replied.&lt;/p&gt;
  66. &lt;p&gt;We had to end our relationship with Chai.&lt;/p&gt;
  67. &lt;p&gt;&lt;strong&gt;Fourth, we evaluated Lua for the role of cross-platform scripting language.&lt;/strong&gt;&lt;/p&gt;
  68. &lt;p&gt;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 &lt;a href="https://www.lua.org/pil/24.html"&gt;C API&lt;/a&gt; chapter we had no clue how to inherit a class inside Lua.&lt;/p&gt;
  69. &lt;p&gt;This led us to search for libraries that wrap Lua C API syntax into something more meaningful for C++. That's how we found &lt;a href="http://sol2.rtfd.io"&gt;Sol2&lt;/a&gt;. Just as before, the first attempt to call a C++ member function from Lua failed. But unlike before, we asked for help and &lt;a href="https://github.com/ThePhD/sol2/issues/465"&gt;got the help&lt;/a&gt;! This was a refreshing surprise for us.
  70. Next, we tried to inherit a class in Lua and override the class methods. We failed, but &lt;a href="https://github.com/ThePhD/sol2/issues/468"&gt;the author helped us out again&lt;/a&gt;. In the end, we succeeded in inheriting a class and overriding its behaviour.&lt;/p&gt;
  71. &lt;p&gt;That's when we understood it's a start for a long and mutual relationship with Sol2/Lua.&lt;/p&gt;
  72. &lt;p&gt;&lt;strong&gt;This search for a scripting language taught us one important lesson: people matter, not technologies.&lt;/strong&gt;&lt;/p&gt;
  73. &lt;p&gt;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.&lt;/p&gt;
  74. &lt;p&gt;That's it for describing scripting research in July 2017.&lt;/p&gt;</summary></entry><entry><title>OpenSceneGraph cross-platform guide</title><link href="http://opengamestudio.org/openscenegraph-cross-platform-guide.html" rel="alternate"></link><updated>2017-07-17T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2017-07-17:openscenegraph-cross-platform-guide.html</id><summary type="html">&lt;p&gt;&lt;img alt="OpenSceneGraph guide" src="http://opengamestudio.org/2017-07-openscenegraph-guide.png" /&gt;&lt;/p&gt;
  75. &lt;p&gt;This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.&lt;/p&gt;
  76. &lt;p&gt;June marked the finish of &lt;a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide"&gt;OpenSceneGraph cross-platform guide&lt;/a&gt; with the publishing of the last (initially planned) tutorial. The tutorial describes &lt;a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb"&gt;how to build and run sample OpenSceneGraph application in Web&lt;/a&gt; using Emscripten.
  77. In case you missed it, here's a &lt;a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide/"&gt;link to the final application&lt;/a&gt;. Open it in your web browser.&lt;/p&gt;
  78. &lt;p&gt;We started to compose the guide in February when we successfully managed to render a simple model on mobile and web.
  79. We spent 120 hours in five months to produce ten tutorials of the guide.&lt;/p&gt;
  80. &lt;p&gt;We have been doing OpenSceneGraph cross-platform guide for two main reasons:&lt;/p&gt;
  81. &lt;ol&gt;
  82. &lt;li&gt;Keep OpenSceneGraph cross-platform knowledge in easily accessible and reproducible form&lt;/li&gt;
  83. &lt;li&gt;Share the knowledge with OpenSceneGraph community to make it stronger&lt;/li&gt;
  84. &lt;/ol&gt;
  85. &lt;p&gt;We believe we succeeded in both. Here's why:&lt;/p&gt;
  86. &lt;ol&gt;
  87. &lt;li&gt;The guide repository has more &lt;a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/stargazers"&gt;stars&lt;/a&gt; (aka "likes") than any other repository of ours&lt;/li&gt;
  88. &lt;li&gt;OpenSceneGraph project leader Robert Osfield said &lt;a href="http://www.mail-archive.com/osg-users@lists.openscenegraph.org/msg74815.html"&gt;"Great work"&lt;/a&gt;, which means a lot&lt;/li&gt;
  89. &lt;li&gt;The guide already has &lt;a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues"&gt;two issues&lt;/a&gt;&lt;/li&gt;
  90. &lt;/ol&gt;
  91. &lt;p&gt;Reaching our goal of researching OpenSceneGraph cross-platform development and providing the knowledge back to the community just made us happier.&lt;/p&gt;
  92. &lt;p&gt;However, our journey does not stop here. Using the knowledge of the guide, we now continue to work on bringing our tools to support mobile and web, just as we &lt;a href="http://opengamestudio.org/lang/en/news/2456"&gt;promised in January&lt;/a&gt;.&lt;/p&gt;
  93. &lt;p&gt;That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.&lt;/p&gt;</summary></entry><entry><title>iOS tutorial</title><link href="http://opengamestudio.org/ios-tutorial.html" rel="alternate"></link><updated>2017-06-08T10:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2017-06-08:ios-tutorial.html</id><summary type="html">&lt;p&gt;&lt;img alt="iOS tutorial" src="http://opengamestudio.org/2017-06-08-ios-refactoring.png" /&gt;&lt;/p&gt;
  94. &lt;p&gt;This article describes problems we faced during the creation of iOS tutorial in May 2017.&lt;/p&gt;
  95. &lt;p&gt;&lt;a href="https://twitter.com/OpenGameStudio/status/826816343433498627"&gt;This February&lt;/a&gt; we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come up with a hackish demo that works for one person, but it's hard to create a concise example that works for everyone.&lt;/p&gt;
  96. &lt;h3&gt;Native library&lt;/h3&gt;
  97. &lt;p&gt;The first question we had to answer was: should the sample application be part of Xcode project or be a separately built library?&lt;/p&gt;
  98. &lt;p&gt;We had to consider the following facts:&lt;/p&gt;
  99. &lt;ol&gt;
  100. &lt;li&gt;Xcode project can use C++ directly (thanks to Objective-C++) without stuff like JNI&lt;ul&gt;
  101. &lt;li&gt;There's no need for a separate library (+ application)&lt;/li&gt;
  102. &lt;li&gt;Creating a separate library is an additional work (- library)&lt;/li&gt;
  103. &lt;/ul&gt;
  104. &lt;/li&gt;
  105. &lt;li&gt;OpenSceneGraph builds libraries&lt;ul&gt;
  106. &lt;li&gt;It's easier to use standard build process (+ library)&lt;/li&gt;
  107. &lt;li&gt;It's harder to create custom build process just for a single platform (- application)&lt;/li&gt;
  108. &lt;/ul&gt;
  109. &lt;/li&gt;
  110. &lt;li&gt;OpenSceneGraph uses CMake build system, which is not supported by Xcode&lt;ul&gt;
  111. &lt;li&gt;Xcode project can't include CMake files (- application)&lt;/li&gt;
  112. &lt;li&gt;It's easy to create custom CMake file that includes OpenSceneGraph CMake file to build a single library (+ library)&lt;/li&gt;
  113. &lt;/ul&gt;
  114. &lt;/li&gt;
  115. &lt;li&gt;CMake can generate Xcode project&lt;ul&gt;
  116. &lt;li&gt;It's possible to create a CMake file that builds both OpenSceneGraph and the sample application (+ application)&lt;/li&gt;
  117. &lt;li&gt;Xcode is the de-facto tool to create Xcode projects; it's easier to use standard build process (+ library)&lt;/li&gt;
  118. &lt;/ul&gt;
  119. &lt;/li&gt;
  120. &lt;/ol&gt;
  121. &lt;p&gt;After evaluating the pros and cons of each approach, we decided to turn the sample application into a library and include it in Xcode project. The downside of this approach is that simulator and real device builds need separate library builds.&lt;/p&gt;
  122. &lt;h3&gt;Refactoring&lt;/h3&gt;
  123. &lt;p&gt;The second question we had to answer was: should there be a single source code base for all platforms or several ones, one for each platform?&lt;/p&gt;
  124. &lt;p&gt;While doing Android tutorial we used single source code base because it worked fine for desktop and Android. As we started to work through iOS tutorial, it became apparent that particular features may or may not work on some platforms. For example, one feature may work on desktop and iOS, but not Android. Another feature may work on iOS and Android, but not desktop. Since we didn't want to pollute the code with #ifdefs, we started to put each platform combination into a separate file. The number of files grew rapidly. The files were reusable, but it became extremely hard to see the whole picture.&lt;/p&gt;
  125. &lt;p&gt;At this point, we realized there's the second question. We reminded ourselves that the main purpose of the sample source code is to teach how to do basic OpenSceneGraph things, not create a reusable library with API that is stable across several years.&lt;/p&gt;
  126. &lt;p&gt;That's when our home grown feature tool came into play. With its help, we separated the code into several parts, which in the end produce just two files for each platform:&lt;/p&gt;
  127. &lt;ol&gt;
  128. &lt;li&gt;functions.h - contains reusable classless functions&lt;/li&gt;
  129. &lt;li&gt;main.h - contains the rest of the sample application code&lt;/li&gt;
  130. &lt;/ol&gt;
  131. &lt;p&gt;Their contents differ slightly for each platform, but it's easy to see the whole picture now.&lt;/p&gt;
  132. &lt;p&gt;That's it for describing problems we faced during the creation of iOS tutorial in May 2017.&lt;/p&gt;</summary></entry><entry><title>OpenSceneGraph sample</title><link href="http://opengamestudio.org/osg-sample.html" rel="alternate"></link><updated>2017-05-12T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2017-05-12:osg-sample.html</id><summary type="html">&lt;p&gt;&lt;img alt="OSG sample" src="http://opengamestudio.org/2017-05_osg-sample.png" /&gt;&lt;/p&gt;
  133. &lt;p&gt;This article describes creation of the tutorials for building sample OpenSceneGraph application under Linux, macOS, Windows, and Android in April 2017.&lt;/p&gt;
  134. &lt;p&gt;Previous tutorials described how to install OpenSceneGraph under Linux, macOS, Windows and render a model using the standard &lt;strong&gt;osgviewer&lt;/strong&gt; tool. This time we worked on a &lt;a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide-application"&gt;sample OpenSceneGraph application&lt;/a&gt; that would run under Linux, macOS, Windows, and Android.&lt;/p&gt;
  135. &lt;p&gt;The application is very basic and has the following features:&lt;/p&gt;
  136. &lt;ol&gt;
  137. &lt;li&gt;Render window creation&lt;/li&gt;
  138. &lt;li&gt;Model loading&lt;/li&gt;
  139. &lt;li&gt;Model rendering with simple GLSL shaders&lt;/li&gt;
  140. &lt;li&gt;Model motion with a mouse under Linux, macOS, Windows and a finger under Android&lt;/li&gt;
  141. &lt;/ol&gt;
  142. &lt;p&gt;Creating the tutorials for Linux, macOS, Windows was so easy and straightforward, that it only took us half a month. We spent the second half of the month creating Android tutorial.&lt;/p&gt;
  143. &lt;p&gt;Our &lt;a href="http://opengamestudio.org/2016-october-recap.html"&gt;first successful Android build&lt;/a&gt; last year included hacks and non-obvious steps to make OpenSceneGraph run under Android. This time we wanted a cleaner, faster, and cheaper approach.&lt;/p&gt;
  144. &lt;p&gt;The approach we ended up with requires just a few files and a few changes to the original Android Studio project (with C++ support) to make sample OpenSceneGraph application run under Android.&lt;/p&gt;
  145. &lt;p&gt;Here's a quick rundown of the files:&lt;/p&gt;
  146. &lt;ol&gt;
  147. &lt;li&gt;GLES2 surface&lt;/li&gt;
  148. &lt;li&gt;Render activity to render to the surface&lt;/li&gt;
  149. &lt;li&gt;Native library Java interface&lt;/li&gt;
  150. &lt;li&gt;Native library C++ implementation&lt;/li&gt;
  151. &lt;li&gt;CMake file to build native library&lt;/li&gt;
  152. &lt;li&gt;Render activity layout&lt;/li&gt;
  153. &lt;li&gt;Model to display&lt;/li&gt;
  154. &lt;/ol&gt;
  155. &lt;p&gt;Here's a quick rundown of the project changes:&lt;/p&gt;
  156. &lt;ol&gt;
  157. &lt;li&gt;Update Android manifest to use GLES2 and render activity&lt;/li&gt;
  158. &lt;li&gt;Reference native library's CMake file in the project's CMake file&lt;/li&gt;
  159. &lt;/ol&gt;
  160. &lt;p&gt;OpenSceneGraph documentation suggests building OpenSceneGraph outside Android Studio with CMake. However, this approach has the following limitations:&lt;/p&gt;
  161. &lt;ol&gt;
  162. &lt;li&gt;You have to build OpenSceneGraph for each target architecture&lt;/li&gt;
  163. &lt;li&gt;You have to manually copy/reference built OpenSceneGraph libraries into Android Studio project&lt;/li&gt;
  164. &lt;/ol&gt;
  165. &lt;p&gt;Our approach includes building OpenSceneGraph for those target architectures that Android Studio project is built for. Also, OpenSceneGraph is already referenced, so no extra work is required: you just need to rebuild the project, and you're done.&lt;/p&gt;
  166. &lt;p&gt;That's it for describing the creation of the tutorials for building sample OpenSceneGraph application under Linux, macOS, Windows, and Android in April 2017.&lt;/p&gt;</summary></entry><entry><title>It's all fine</title><link href="http://opengamestudio.org/its-all-fine.html" rel="alternate"></link><updated>2017-04-07T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2017-04-07:its-all-fine.html</id><summary type="html">&lt;p&gt;&lt;img alt="ItsAllFine" src="http://opengamestudio.org/2017-04_its-all-fine.png" /&gt;&lt;/p&gt;
  167. &lt;p&gt;This article describes creation of the first four OpenSceneGraph tutorials in March 2017.&lt;/p&gt;
  168. &lt;p&gt;The &lt;a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/"&gt;first four OpenSceneGraph tutorials&lt;/a&gt; explain how to create a cube model with Blender and display the model under Linux, macOS, or Windows using OpenSceneGraph tool called osgviewer.&lt;/p&gt;
  169. &lt;p&gt;The whole process of creating a single tutorial turned out to be pretty daunting because it includes several tasks:&lt;/p&gt;
  170. &lt;ol&gt;
  171. &lt;li&gt;Record original video depicting one or more steps&lt;/li&gt;
  172. &lt;li&gt;Name the steps as clear as possible&lt;/li&gt;
  173. &lt;li&gt;Select the parts of the video that display the step&lt;/li&gt;
  174. &lt;li&gt;Remove the parts of the video that bare no value, e.g., waiting in the middle of compilation&lt;/li&gt;
  175. &lt;li&gt;Select a single frame to best represent current step, e.g., typing a specific command&lt;/li&gt;
  176. &lt;li&gt;Add a detailed description to article, why current step should have been taken&lt;/li&gt;
  177. &lt;li&gt;Proof-read the article&lt;/li&gt;
  178. &lt;li&gt;Correct typos and video timing&lt;/li&gt;
  179. &lt;li&gt;Review the whole video&lt;/li&gt;
  180. &lt;li&gt;Upload the video to YouTube with timestamps of steps for easier navigation&lt;/li&gt;
  181. &lt;/ol&gt;
  182. &lt;p&gt;Some of those tasks had to be repeated multiple times until the combination of video, text, and article was clear and logical.&lt;/p&gt;
  183. &lt;p&gt;Overall, it took us 30 hours to create the tutorials. The whole process gave us a lot of experience, which will help us in shaping learning materials for our technologies in the future. We don't know how they will look like exactly, but they will definitely be better.&lt;/p&gt;
  184. &lt;p&gt;That's it for describing creation of the first four OpenSceneGraph tutorials in March 2017.&lt;/p&gt;</summary></entry><entry><title>Let's go</title><link href="http://opengamestudio.org/lets-go.html" rel="alternate"></link><updated>2017-03-16T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2017-03-16:lets-go.html</id><summary type="html">&lt;p&gt;&lt;img alt="Let's go" src="http://opengamestudio.org/2017-03_lets-go.png" /&gt;&lt;/p&gt;
  185. &lt;p&gt;In this article we describe our progress in January and February of 2017: rendering under iOS/Web and a new tutorial tool.&lt;/p&gt;
  186. &lt;p&gt;&lt;strong&gt;Rendering under iOS/Web&lt;/strong&gt;&lt;/p&gt;
  187. &lt;p&gt;To our surprise, we got a simple red cube rendered under &lt;a href="https://twitter.com/OpenGameStudio/status/826816343433498627"&gt;iOS&lt;/a&gt; and &lt;a href="https://twitter.com/OpenGameStudio/status/829731986264698881"&gt;Web&lt;/a&gt; pretty fast: in early February. However, this is only the beginning of this year's challenge to support Android, iOS, and Web platforms. There's a long and bumpy road ahead of us as we need a lot more on each platform before we can claim a success: visual effects, Python scripting, data archives.&lt;/p&gt;
  188. &lt;p&gt;Since it took us about four months to get to mobile and web platforms, we decided to share our knowledge and help OpenSceneGraph community with a guide that shows how to use OpenSceneGraph on desktop, mobile, and web. We believe the more widespread OpenSceneGraph is, the stronger our technology becomes. As Isaac Newton said, "If I have seen further, it is by standing on the shoulders of giants." OpenSceneGraph is our giant.&lt;/p&gt;
  189. &lt;p&gt;&lt;strong&gt;Tutorial tool&lt;/strong&gt;&lt;/p&gt;
  190. &lt;p&gt;Having conducted four live sessions before, it was clear the guide needs videos depicting every nuance. However, bare video alone is only good for showing what to do and not for explaining why do it in a certain way. That's why we decided to combine video with text in the forms of video subtitles and separate articles.&lt;/p&gt;
  191. &lt;p&gt;To combine text and video, we first tried &lt;a href="http://openshotvideo.com"&gt;OpenShot&lt;/a&gt;. It worked well, but we quickly saw its limitations:&lt;/p&gt;
  192. &lt;ul&gt;
  193. &lt;li&gt;Too much time is spent on adjusting time frames and animations&lt;/li&gt;
  194. &lt;li&gt;Project file and original resources are hard to track with VCS&lt;/li&gt;
  195. &lt;/ul&gt;
  196. &lt;p&gt;Since OpenSceneGraph cross-platform guide would consist of several tutorials, we decided to automate the process. Brief research revealed a great multimedia framework called &lt;a href="http://mltframework.org"&gt;MLT&lt;/a&gt;, which powers OpenShot itself. With MLT we got our tutorial tool in no time.&lt;/p&gt;
  197. &lt;p&gt;Currently, the tutorial tool allows anyone to combine text and video using a simple text file like this:&lt;/p&gt;
  198. &lt;div class="highlight"&gt;&lt;pre&gt;background bg.png
  199. text 5 Let&amp;#39;s install Blender
  200. video 0:6 install_blender.mp4
  201. text 5 Installing it with apt
  202. video 6:26 install_blender.mp4
  203. text 5 We&amp;#39;re still installing it
  204. video 26:56 install_blender.mp4
  205. text 5 Congratulations! We just finished installing Blender
  206. &lt;/pre&gt;&lt;/div&gt;
  207. &lt;p&gt;This is the actual script. See the final result &lt;a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/tutorial-tool"&gt;here&lt;/a&gt;.&lt;/p&gt;
  208. &lt;p&gt;That's it for describing our progress in January and February of 2017: rendering under iOS/Web and the new tutorial tool.&lt;/p&gt;</summary></entry><entry><title>The year of challenges</title><link href="http://opengamestudio.org/the-year-of-challenges.html" rel="alternate"></link><updated>2017-01-25T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2017-01-25:the-year-of-challenges.html</id><summary type="html">&lt;p&gt;&lt;img alt="The year of challenges" src="http://opengamestudio.org/2017-01_the-year-of-challenges.png" /&gt;&lt;/p&gt;
  209. &lt;p&gt;This article describes our plans for 2017.&lt;/p&gt;
  210. &lt;p&gt;Our past plans suggested we would have Android platform support by this time. However, we have a long way to go, before we can declare Android support. See for yourself:&lt;/p&gt;
  211. &lt;p&gt;&lt;img alt="Android rendering" src="http://opengamestudio.org/2017-01_mjin-android-gles.png" /&gt;&lt;/p&gt;
  212. &lt;p&gt;Some people would consider this a failure. We don't. We see a chance to start low and jump high!&lt;/p&gt;
  213. &lt;p&gt;Having only worked with liberal and forgiving desktop environments, Android was a complete surprise for us. Android punished us for everything: memory, resources, graphics. The usual Android response was either a crash, or an empty screen.
  214. At the same time, such a harsh environment highlighted weak spots in our technologies and helped us see where to go next.&lt;/p&gt;
  215. &lt;p&gt;This month we start working on iOS platform support, even though we have only scratched Android. Why? Because it's a lot easier to get those red cubes rendered on iOS without polishing Android first. We don't want to spend months polishing Android only to find out later we had to implement certain feature differently so that it works on all supported platforms.&lt;/p&gt;
  216. &lt;p&gt;And right after we get those cubes rendered on iOS, we start to work on bringing them to Web.&lt;/p&gt;
  217. &lt;p&gt;&lt;strong&gt;You got it right: we challenge ourselves with support for Android, iOS, and Web this year.&lt;/strong&gt;&lt;/p&gt;
  218. &lt;p&gt;That's it for describing our plans for 2017.&lt;/p&gt;</summary></entry><entry><title>Happy 2017</title><link href="http://opengamestudio.org/2017-happy-new-year.html" rel="alternate"></link><updated>2016-12-31T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2016-12-31:2017-happy-new-year.html</id><summary type="html">&lt;p&gt;&lt;img alt="Happy new year" src="http://opengamestudio.org/2016-12-31_happy-new-year.png" /&gt;&lt;/p&gt;
  219. &lt;p&gt;Okay. It's been a hard year for everyone in the team. And it's almost over. Praise it ends! Praise the new one!&lt;/p&gt;
  220. &lt;p&gt;It may seem, that our progress stalled. Three years ago we announced the beginning of a new project (two to be precise), and now we still working on the engine and editor, haven't even started creating the actual game.&lt;/p&gt;
  221. &lt;p&gt;If you were monitoring our news during the year, you know that we held several live sessions, showing in the real time how to use our tools to create some simple games. Each session was a step in a long road to our goal. While preparing for these live sessions, we added necessary building blocks, that will be needed to create almost any game.&lt;/p&gt;
  222. &lt;p&gt;Future live sessions and technical previews will add even more, so at some point in future (i hope not very distant), we will have everything we need to sit down and build our planned game from these blocks.&lt;/p&gt;
  223. &lt;p&gt;So, the project isn't dead; the idea was not thrown away. But there is a lot of work to be done before we can start making the game, and there are only two of us, using our spare time.
  224. 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.
  225. 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.
  226. We will. Stay tuned.&lt;/p&gt;
  227. &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;
  228. &lt;p&gt;This article describes the start of MJIN library separation into modules.&lt;/p&gt;
  229. &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;
  230. &lt;p&gt;We decided to have a look at two approaches to separate MJIN into modules: build-time separation and run-time one.
  231. &lt;strong&gt;Build-time&lt;/strong&gt; separation means MJIN becomes highly configurable and each platform gets specifically tailored MJIN build.
  232. &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;
  233. &lt;p&gt;&lt;strong&gt;Run-time separation research.&lt;/strong&gt;&lt;/p&gt;
  234. &lt;p&gt;Since run-time separation has more benefits, we started researching it first.
  235. 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;
  236. &lt;p&gt;We created a sample project consisting of the application, library, and plugin.
  237. &lt;strong&gt;The application&lt;/strong&gt; has been linked to the library and used it to load the plugin.
  238. &lt;strong&gt;The library&lt;/strong&gt; provided functions to register plugins and call their functions.
  239. &lt;strong&gt;The plugin&lt;/strong&gt; provided functions for the library and called library functions.&lt;/p&gt;
  240. &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;
  241. &lt;p&gt;&lt;strong&gt;Build-time separation start.&lt;/strong&gt;&lt;/p&gt;
  242. &lt;p&gt;We extracted the following modules from MJIN:&lt;/p&gt;
  243. &lt;ul&gt;
  244. &lt;li&gt;
  245. &lt;p&gt;Android: provides Java Native Interface (JNI) to MJIN&lt;/p&gt;
  246. &lt;/li&gt;
  247. &lt;li&gt;
  248. &lt;p&gt;Sound: provides access to OpenAL&lt;/p&gt;
  249. &lt;/li&gt;
  250. &lt;li&gt;
  251. &lt;p&gt;UIQt: provides access to Qt UI&lt;/p&gt;
  252. &lt;/li&gt;
  253. &lt;/ul&gt;
  254. &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;
  255. &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;
  256. &lt;p&gt;That's it for describing the start of MJIN library separation into modules.&lt;/p&gt;</summary></entry><entry><title>October 2016 recap</title><link href="http://opengamestudio.org/2016-october-recap.html" rel="alternate"></link><updated>2016-11-19T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2016-11-19:2016-october-recap.html</id><summary type="html">&lt;p&gt;&lt;img alt="October recap" src="http://opengamestudio.org/2016-11-19_2016-october-recap.png" /&gt;&lt;/p&gt;
  257. &lt;p&gt;This article describes how we spent a month building OpenSceneGraph (OSG) for Android: the first attempt to build OSG, the search for OSG alternatives, and the success in building OSG.&lt;/p&gt;
  258. &lt;p&gt;&lt;strong&gt;First attempt to build OSG.&lt;/strong&gt;&lt;/p&gt;
  259. &lt;p&gt;Having no prior knowledge of Android development, we grabbed the latest Android Studio and started doing beginner tutorials.
  260. We passed Java part pretty fast. Everything worked out of the box. Then came C++ part and related problems.&lt;/p&gt;
  261. &lt;p&gt;&lt;strong&gt;CMake. &lt;/strong&gt;To work with C++, Android Studio uses custom CMake, which conflicts with the system one. This was a clear indication that we had to set up a separate development environment specifically for Android.&lt;/p&gt;
  262. &lt;p&gt;&lt;strong&gt;KVM. &lt;/strong&gt;We got Ubuntu under VirtualBox installed. All went fine until we tried to use Android Emulator. Turned out, VirtualBox could not run Android Emulator, because a virtual machine cannot provide kernel virtualization inside already virtualized environment.&lt;/p&gt;
  263. &lt;p&gt;&lt;strong&gt;Chroot for Android. &lt;/strong&gt;Since we had a successful experience with chroot to build OGS Editor before, we decided to place Android development environment into chroot. With minor tweaking, we could finally run Android Emulator and build C++ project.&lt;/p&gt;
  264. &lt;p&gt;&lt;strong&gt;OSG. &lt;/strong&gt;Building OSG seemed like a piece of cake at the time. However, all we got was a crash. Thinking that we got it wrong the first time, we tried to rebuild OSG once again. And the same crash again.
  265. Searching for the problem did not reveal any hint.
  266. Nobody helped us at the OSG mailing list.&lt;/p&gt;
  267. &lt;p&gt;We were in despair.&lt;/p&gt;
  268. &lt;p&gt;&lt;strong&gt;The search for OSG alternatives.&lt;/strong&gt;&lt;/p&gt;
  269. &lt;p&gt;Since OSG community did not help us, we decided to search for an alternative open source project to fit our Android needs (and may be more).&lt;/p&gt;
  270. &lt;p&gt;And we found it: &lt;a href="http://babylonhx.gamestudiohx.com/"&gt;BabylonHX&lt;/a&gt;. The home page looked awesome: it rendered WebGL in the background!
  271. We thought we finally found the gem we were looking for. However, the example on the home page simply did not work.&lt;/p&gt;
  272. &lt;p&gt;You can probably understand our feelings at the time.&lt;/p&gt;
  273. &lt;p&gt;&lt;strong&gt;The success in building OSG.&lt;/strong&gt;&lt;/p&gt;
  274. &lt;p&gt;We realized nobody would make OSG work under Android for us. We had to do it ourselves.&lt;/p&gt;
  275. &lt;p&gt;Since &lt;a href="http://www.openscenegraph.org/index.php/documentation/platform-specifics/android/178-building-openscenegraph-for-android-3-4"&gt;OSG 3.4 document&lt;/a&gt; on building for Android was very short, we no longer trusted it and headed to &lt;a href="http://www.openscenegraph.org/index.php/documentation/platform-specifics/android/44-building-openscenegraph-for-android-3-0-3-0-1"&gt;original OSG 3.0 document&lt;/a&gt;.
  276. While following it, we faced a dead link to third party dependencies.
  277. The search for an alternative download link lead us to a &lt;a href="https://xinyustudio.wordpress.com/2013/09/24/install-osg-for-android-on-ubuntu-13-04-step-by-step-tutorials/"&gt;2013 tutorial&lt;/a&gt; on building OSG 3.0 for Android.&lt;/p&gt;
  278. &lt;p&gt;After following the tutorial, we finally got OSG to run under Android!
  279. But there was a nuance: both OSG and Android tools used in the tutorial were ancient.
  280. In a few days, we gradually updated both OSG and Android tools to their latest versions.&lt;/p&gt;
  281. &lt;p&gt;During the update process, we learned two things that prevented us from having OSG to work in the first place:&lt;/p&gt;
  282. &lt;ul&gt;
  283. &lt;li&gt;Android API headers changed in NDK r12&lt;/li&gt;
  284. &lt;li&gt;OSG only works as a static library under Android&lt;/li&gt;
  285. &lt;/ul&gt;
  286. &lt;p&gt;That's it for describing how we spent the month building OSG for Android: the first attempt to build OSG, the search for OSG alternatives, and the success in building OSG.&lt;/p&gt;</summary></entry><entry><title>Technology showcases</title><link href="http://opengamestudio.org/2016-tech-showcases.html" rel="alternate"></link><updated>2016-10-31T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2016-10-31:2016-tech-showcases.html</id><summary type="html">&lt;p&gt;&lt;img alt="TechShowcases" src="http://opengamestudio.org/2016-10-31_tech-showcases.png" /&gt;&lt;/p&gt;
  287. &lt;p&gt;In this article, we take another look at 2015-2016 live sessions' format and introduce a new showcase format for 2017.&lt;/p&gt;
  288. &lt;p&gt;&lt;strong&gt;2015 and 2016: live sessions.&lt;/strong&gt;&lt;/p&gt;
  289. &lt;p&gt;As you know, we use live sessions to show the state of our technology and create a small functional game from scratch.
  290. We have conducted four live sessions in the past year, which gave birth to the following small games:
  291. &lt;table&gt;
  292. &lt;tr&gt;
  293. &lt;th&gt;&lt;strong&gt;№&lt;/strong&gt;&lt;/th&gt;
  294. &lt;th&gt;&lt;strong&gt;Created game&lt;/strong&gt;&lt;/th&gt;
  295. &lt;th&gt;&lt;strong&gt;Live session date&lt;/strong&gt;&lt;/th&gt;
  296. &lt;/tr&gt;
  297. &lt;tr&gt;
  298. &lt;td&gt;1&lt;/td&gt;
  299. &lt;td&gt;Whac-a-mole&lt;/td&gt;
  300. &lt;td&gt;November 2015&lt;/td&gt;
  301. &lt;/tr&gt;
  302. &lt;tr&gt;
  303. &lt;td&gt;2&lt;/td&gt;
  304. &lt;td&gt;Rolling ball&lt;/td&gt;
  305. &lt;td&gt;February 2016&lt;/td&gt;
  306. &lt;/tr&gt;
  307. &lt;tr&gt;
  308. &lt;td&gt;3&lt;/td&gt;
  309. &lt;td&gt;Domino&lt;/td&gt;
  310. &lt;td&gt;May 2016&lt;/td&gt;
  311. &lt;/tr&gt;
  312. &lt;tr&gt;
  313. &lt;td&gt;4&lt;/td&gt;
  314. &lt;td&gt;Mahjong Solitaire&lt;/td&gt;
  315. &lt;td&gt;September 2016&lt;/td&gt;
  316. &lt;/tr&gt;
  317. &lt;/table&gt;&lt;/p&gt;
  318. &lt;p&gt;We spent four months to prepare for these live sessions.
  319. It has been an extremely useful experience for us. However, 2017 will have only 2 live sessions.
  320. Why? We want to spend more time on actual development!&lt;/p&gt;
  321. &lt;p&gt;&lt;strong&gt;2017: live sessions + technical previews.&lt;/strong&gt;&lt;/p&gt;
  322. &lt;p&gt;Starting next year, we will be doing technical previews twice a year. A technical preview is another way to show the state of our technology, but without creating new games and conducting live sessions.&lt;/p&gt;
  323. &lt;p&gt;Here's an approximate schedule of technical previews and live sessions for 2017:
  324. &lt;table&gt;
  325. &lt;tr&gt;
  326. &lt;th&gt;&lt;strong&gt;№&lt;/strong&gt;&lt;/th&gt;
  327. &lt;th&gt;&lt;strong&gt;Month&lt;/strong&gt;&lt;/th&gt;
  328. &lt;th&gt;&lt;strong&gt;Showcase type&lt;/strong&gt;&lt;/th&gt;
  329. &lt;th&gt;&lt;strong&gt;Topic&lt;/strong&gt;&lt;/th&gt;
  330. &lt;/tr&gt;
  331. &lt;tr&gt;
  332. &lt;td&gt;1&lt;/td&gt;
  333. &lt;td&gt;January&lt;/td&gt;
  334. &lt;td&gt;Technical preview&lt;/td&gt;
  335. &lt;td&gt;Android platform support&lt;/td&gt;
  336. &lt;/tr&gt;
  337. &lt;tr&gt;
  338. &lt;td&gt;2&lt;/td&gt;
  339. &lt;td&gt;April&lt;/td&gt;
  340. &lt;td&gt;Live session&lt;/td&gt;
  341. &lt;td&gt;Android game creation&lt;/td&gt;
  342. &lt;/tr&gt;
  343. &lt;tr&gt;
  344. &lt;td&gt;3&lt;/td&gt;
  345. &lt;td&gt;July&lt;/td&gt;
  346. &lt;td&gt;Technical preview&lt;/td&gt;
  347. &lt;td&gt;To be announced&lt;/td&gt;
  348. &lt;/tr&gt;
  349. &lt;tr&gt;
  350. &lt;td&gt;4&lt;/td&gt;
  351. &lt;td&gt;October&lt;/td&gt;
  352. &lt;td&gt;Live session&lt;/td&gt;
  353. &lt;td&gt;To be announced&lt;/td&gt;
  354. &lt;/tr&gt;
  355. &lt;/table&gt;&lt;/p&gt;
  356. &lt;p&gt;That's it for taking another look at 2015-2016 live sessions' format and introducing the new showcase format for 2017.&lt;/p&gt;</summary></entry><entry><title>September 2016 recap</title><link href="http://opengamestudio.org/2016-september-recap.html" rel="alternate"></link><updated>2016-10-11T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2016-10-11:2016-september-recap.html</id><summary type="html">&lt;p&gt;&lt;img alt="September recap" src="http://opengamestudio.org/2016-10-11_september-recap.png" /&gt;&lt;/p&gt;
  357. &lt;p&gt;This article explains September 2016 live session stages: draft, rehearsal, live session itself, and publishing.&lt;/p&gt;
  358. &lt;p&gt;Even though live session takes only a few hours, we devote a whole month to prepare for it. Let's have a look at live session stages in detail.&lt;/p&gt;
  359. &lt;ol&gt;
  360. &lt;li&gt;
  361. &lt;p&gt;&lt;strong&gt;Draft.&lt;/strong&gt; Game creation for the first time.&lt;/p&gt;
  362. &lt;p&gt;Purposes:&lt;/p&gt;
  363. &lt;ul&gt;
  364. &lt;li&gt;test our technologies and fix major bugs;&lt;/li&gt;
  365. &lt;li&gt;discover usability issues to fix in the next development iteration;&lt;/li&gt;
  366. &lt;li&gt;list exact steps to reproduce the game later;&lt;/li&gt;
  367. &lt;li&gt;create draft version of the game assets (models, textures, sounds, scripts).&lt;/li&gt;
  368. &lt;/ul&gt;
  369. &lt;p&gt;Upon stage completion, we announce live session date and show you the game preview.&lt;/p&gt;
  370. &lt;/li&gt;
  371. &lt;li&gt;
  372. &lt;p&gt;&lt;strong&gt;Rehearsal.&lt;/strong&gt; Game recreation.&lt;/p&gt;
  373. &lt;p&gt;Purposes:&lt;/p&gt;
  374. &lt;ul&gt;
  375. &lt;li&gt;make sure we have no major bugs left;&lt;/li&gt;
  376. &lt;li&gt;record the whole process of the game creation;&lt;/li&gt;
  377. &lt;li&gt;create final game assets.&lt;/li&gt;
  378. &lt;/ul&gt;
  379. &lt;p&gt;This is 99% the game we publish later.&lt;/p&gt;
  380. &lt;/li&gt;
  381. &lt;li&gt;
  382. &lt;p&gt;&lt;strong&gt;Live session.&lt;/strong&gt; Reassembling the game live in front of you.&lt;/p&gt;
  383. &lt;p&gt;Purposes:&lt;/p&gt;
  384. &lt;ul&gt;
  385. &lt;li&gt;show how easy it is to create a game;&lt;/li&gt;
  386. &lt;li&gt;walk you through nuances of game creation;&lt;/li&gt;
  387. &lt;li&gt;get feedback from you;&lt;/li&gt;
  388. &lt;li&gt;answer your questions.&lt;/li&gt;
  389. &lt;/ul&gt;
  390. &lt;p&gt;We take game assets from the rehearsal and use them to quickly reassemble the game in just a few hours.&lt;/p&gt;
  391. &lt;/li&gt;
  392. &lt;li&gt;
  393. &lt;p&gt;&lt;strong&gt;Publishing.&lt;/strong&gt; The release of our technologies' last version, live session materials, and stand alone game.&lt;/p&gt;
  394. &lt;/li&gt;
  395. &lt;/ol&gt;
  396. &lt;p&gt;That's it for explaining September 2016 live session stages: draft, rehearsal, live session itself, and publishing.&lt;/p&gt;</summary></entry><entry><title>OGS Editor 0.10 and live session materials</title><link href="http://opengamestudio.org/ogs-editor-0.10.html" rel="alternate"></link><updated>2016-10-03T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2016-10-03:ogs-editor-0.10.html</id><summary type="html">&lt;p&gt;&lt;img alt="ogs-editor-0.10" src="http://opengamestudio.org/2016-10-03_ogs-editor-0.10.png" /&gt;&lt;/p&gt;
  397. &lt;p&gt;Note: we won't release 0.10 for macOS due to technical difficulties with the build system. macOS support will be back for 0.11.&lt;/p&gt;
  398. &lt;ul&gt;
  399. &lt;li&gt;&lt;strong&gt;OGS Editor 0.10&lt;/strong&gt; &lt;a href="https://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/51_2016-10-01_06-39-48_0.10.0/"&gt;is available at SourceForge&lt;/a&gt;. Simply unpack the archive and launch the run script.&lt;/li&gt;
  400. &lt;li&gt;&lt;strong&gt;Mahjong Solitaire game&lt;/strong&gt; &lt;a href="https://sourceforge.net/projects/osrpgcreation/files/Games/MahjongSolitaire/"&gt;is available at SourceForge&lt;/a&gt;, too. Simply unpack the archive and launch the run script.&lt;/li&gt;
  401. &lt;li&gt;&lt;strong&gt;Live session project&lt;/strong&gt; &lt;a href="https://github.com/OGStudio/mahjong-solitaire-livesession"&gt;is available at GitHub&lt;/a&gt;.&lt;/li&gt;
  402. &lt;li&gt;&lt;strong&gt;Live session recording&lt;/strong&gt; &lt;a href="https://youtu.be/g8Tyj_YH2Qc?list=PLWMTZqE4MAMJzBnXS9qU_ObWnzJuskI3F"&gt;is available at YouTube&lt;/a&gt;. The video depicts the whole process of creating Mahjong Solitaire from scratch using &lt;a href="https://github.com/OGStudio/mahjong-solitaire-rehearsal"&gt;rehearsal project&lt;/a&gt; resources.&lt;/li&gt;
  403. &lt;/ul&gt;</summary></entry><entry><title>A few words about live session yesterday</title><link href="http://opengamestudio.org/yesterdays-live-session-short-overview.html" rel="alternate"></link><updated>2016-09-26T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2016-09-26:yesterdays-live-session-short-overview.html</id><summary type="html">&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/_t8TGhSgJG4" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
  404. &lt;p&gt;Mahjong Solitaire was successfully created, and it took less than 4 hours.
  405. We will publish live session materials later this week.&lt;/p&gt;
  406. &lt;p&gt;Thank you for joining us.&lt;/p&gt;</summary></entry><entry><title>Live session is in 24 hours</title><link href="http://opengamestudio.org/september-live-session-announcement-tomorrow.html" rel="alternate"></link><updated>2016-09-24T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2016-09-24:september-live-session-announcement-tomorrow.html</id><summary type="html">&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/Fj4yHG-mV1U" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
  407. &lt;p&gt;Get ready for &lt;a href="https://www.livecoding.tv/kornerr"&gt;live session&lt;/a&gt;, it's about to happen in 24 hours!&lt;/p&gt;</summary></entry><entry><title>Live session: 25 September 2016</title><link href="http://opengamestudio.org/september-live-session-announcement.html" rel="alternate"></link><updated>2016-09-17T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2016-09-17:september-live-session-announcement.html</id><summary type="html">&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/Y5hOGKcQ8wA" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
  408. &lt;p&gt;We will hold &lt;a href="https://www.livecoding.tv/kornerr"&gt;live session&lt;/a&gt; on &lt;a href="http://www.timeanddate.com/worldclock/fixedtime.html?msg=Open+Game+Studio+September+2016+live+session&amp;amp;iso=20160925T12&amp;amp;p1=37&amp;amp;ah=2"&gt;25 September 2016 at 12:00 CEST&lt;/a&gt;
  409. It's time to create simple Mahjong solitaire game.&lt;/p&gt;</summary></entry><entry><title>August 2016 recap</title><link href="http://opengamestudio.org/2016-august-recap.html" rel="alternate"></link><updated>2016-09-03T00:00:00+03:00</updated><author><name>Opensource Game Studio</name></author><id>tag:opengamestudio.org,2016-09-03:2016-august-recap.html</id><summary type="html">&lt;p&gt;&lt;img alt="2016-august-recap" src="http://opengamestudio.org/2016-09-03_august-recap.png" /&gt;&lt;/p&gt;
  410. &lt;p&gt;This article explains the most important technical details about development in August: UIQt module, its refactoring, a new feature based development approach, and its benefits.&lt;/p&gt;
  411. &lt;p&gt;&lt;strong&gt;UIQt module&lt;/strong&gt; is a collection of UI components backed by Qt. We only use it for Editor UI at the moment.&lt;/p&gt;
  412. &lt;p&gt;Here is a list of UIQt module components with their description and current code size:&lt;table&gt;
  413. &lt;tr&gt;
  414. &lt;th&gt;&lt;strong&gt;№&lt;/strong&gt;&lt;/th&gt;
  415. &lt;th&gt;&lt;strong&gt;Component&lt;/strong&gt;&lt;/th&gt;
  416. &lt;th&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
  417. &lt;th&gt;&lt;strong&gt;Size (B)&lt;/strong&gt;&lt;/th&gt;
  418. &lt;th&gt;&lt;strong&gt;Size (%)&lt;/strong&gt;&lt;/th&gt;
  419. &lt;/tr&gt;
  420. &lt;tr&gt;
  421. &lt;td&gt;1&lt;/td&gt;
  422. &lt;td&gt;UIQtAction&lt;/td&gt;
  423. &lt;td&gt;Actions (events) for menus&lt;/td&gt;
  424. &lt;td&gt;11224&lt;/td&gt;
  425. &lt;td&gt;9&lt;/td&gt;
  426. &lt;/tr&gt;
  427. &lt;tr&gt;
  428. &lt;td&gt;2&lt;/td&gt;
  429. &lt;td&gt;UIQtAux&lt;/td&gt;
  430. &lt;td&gt;Initializes Qt and main window. Provides widget resolution by name to other components&lt;/td&gt;
  431. &lt;td&gt;15518&lt;/td&gt;
  432. &lt;td&gt;12&lt;/td&gt;
  433. &lt;/tr&gt;
  434. &lt;tr&gt;
  435. &lt;td&gt;3&lt;/td&gt;
  436. &lt;td&gt;UIQtDock&lt;/td&gt;
  437. &lt;td&gt;Widget docks&lt;/td&gt;
  438. &lt;td&gt;5273&lt;/td&gt;
  439. &lt;td&gt;4&lt;/td&gt;
  440. &lt;/tr&gt;
  441. &lt;tr&gt;
  442. &lt;td&gt;4&lt;/td&gt;
  443. &lt;td&gt;UIQtFileDialog&lt;/td&gt;
  444. &lt;td&gt;File selection dialogs&lt;/td&gt;
  445. &lt;td&gt;8960&lt;/td&gt;
  446. &lt;td&gt;7&lt;/td&gt;
  447. &lt;/tr&gt;
  448. &lt;tr&gt;
  449. &lt;td&gt;5&lt;/td&gt;
  450. &lt;td&gt;UIQtMenu&lt;/td&gt;
  451. &lt;td&gt;Menus for main window and pop-ups (like node's add/copy/paste/delete menu)&lt;/td&gt;
  452. &lt;td&gt;4566&lt;/td&gt;
  453. &lt;td&gt;3&lt;/td&gt;
  454. &lt;/tr&gt;
  455. &lt;tr&gt;
  456. &lt;td&gt;6&lt;/td&gt;
  457. &lt;td&gt;UIQtMenuBar&lt;/td&gt;
  458. &lt;td&gt;Menu bar for main window&lt;/td&gt;
  459. &lt;td&gt;4222&lt;/td&gt;
  460. &lt;td&gt;3&lt;/td&gt;
  461. &lt;/tr&gt;
  462. &lt;tr&gt;
  463. &lt;td&gt;7&lt;/td&gt;
  464. &lt;td&gt;UIQtRunner&lt;/td&gt;
  465. &lt;td&gt;Allows to start QApplication&lt;/td&gt;
  466. &lt;td&gt;2450&lt;/td&gt;
  467. &lt;td&gt;2&lt;/td&gt;
  468. &lt;/tr&gt;
  469. &lt;tr&gt;
  470. &lt;td&gt;8&lt;/td&gt;
  471. &lt;td&gt;UIQtThumbnailDialog&lt;/td&gt;
  472. &lt;td&gt;Dialog with thumbnail images&lt;/td&gt;
  473. &lt;td&gt;18615&lt;/td&gt;
  474. &lt;td&gt;14&lt;/td&gt;
  475. &lt;/tr&gt;
  476. &lt;tr&gt;
  477. &lt;td&gt;9&lt;/td&gt;
  478. &lt;td&gt;UIQtToolBar&lt;/td&gt;
  479. &lt;td&gt;Tool bar for main window&lt;/td&gt;
  480. &lt;td&gt;4276&lt;/td&gt;
  481. &lt;td&gt;3&lt;/td&gt;
  482. &lt;/tr&gt;
  483. &lt;tr&gt;
  484. &lt;td&gt;10&lt;/td&gt;
  485. &lt;td&gt;UIQtTree&lt;/td&gt;
  486. &lt;td&gt;Provides complex widgets like Scene tree and Property browser&lt;/td&gt;
  487. &lt;td&gt;51216&lt;/td&gt;
  488. &lt;td&gt;39&lt;/td&gt;
  489. &lt;/tr&gt;
  490. &lt;tr&gt;
  491. &lt;td&gt;11&lt;/td&gt;
  492. &lt;td&gt;UIQtWidget&lt;/td&gt;
  493. &lt;td&gt;Common widget properties like focus and visibility&lt;/td&gt;
  494. &lt;td&gt;5465&lt;/td&gt;
  495. &lt;td&gt;4&lt;/td&gt;
  496. &lt;/tr&gt;
  497. &lt;/table&gt;&lt;/p&gt;
  498. &lt;p&gt;&lt;strong&gt;UIQt module refactoring&lt;/strong&gt; purpose was to replace old State API with new Environment API, which allows to achieve the same functionality with less code, i.e., makes development easier and faster.&lt;/p&gt;
  499. &lt;p&gt;Refactoring started in July and should have been done the same month. However, we only finished the work in August. Initial plan assumed 28 hours would be enough, but we spent 65 instead. We estimated planned time by relying on the number of public API calls of each component. That worked fine for small components, because the number of their public API calls was roughly equal to the number of their features, and features themselves were very small. However, it totally failed for UIQtTree, which contains 39% of UIQt module code, because there was no direct connection between public API and features.&lt;/p&gt;
  500. &lt;p&gt;&lt;strong&gt;Feature based development approach&lt;/strong&gt; was born as a result of UIQtTree refactoring struggle. Since Qt uses MVC, UIQtTree component consists of several classes. By the time UIQtTree could display and manage a hierarchy of items, the component was already 27K in size. We noticed UIQtTree started to require abnormal amount of development time even for tiny features. This was an obvious &lt;a href="http://kornerr.blogspot.com/2012/04/complexity-conservation-law-complexity.html"&gt;quantitative complexity&lt;/a&gt; manifestation.&lt;/p&gt;
  501. &lt;p&gt;We decided to separate UIQtTree into base part and additional ones. Base would only contain minimal code required by all features. Addition would contain specific feature code and could be safely modified. In the case of UIQtTree, item hierarchy display and modification is the minimal functionality, while item renaming is an addition.&lt;/p&gt;
  502. &lt;p&gt;Here is a list of current UIQtTree features:&lt;/p&gt;
  503. &lt;table&gt;
  504. &lt;tr&gt;
  505. &lt;th&gt;**№**&lt;/th&gt;
  506. &lt;th&gt;**Feature**&lt;/th&gt;
  507. &lt;th&gt;**Description**&lt;/th&gt;
  508. &lt;th&gt;**Size (B)**&lt;/th&gt;
  509. &lt;th&gt;**Size (%)**&lt;/th&gt;
  510. &lt;/tr&gt;
  511. &lt;tr&gt;
  512. &lt;td&gt;1&lt;/td&gt;
  513. &lt;td&gt;Base&lt;/td&gt;
  514. &lt;td&gt;Allows to construct item hierarchy, modify it, and display it&lt;/td&gt;
  515. &lt;td&gt;26966&lt;/td&gt;
  516. &lt;td&gt;52&lt;/td&gt;
  517. &lt;/tr&gt;
  518. &lt;tr&gt;
  519. &lt;td&gt;2&lt;/td&gt;
  520. &lt;td&gt;Item open state&lt;/td&gt;
  521. &lt;td&gt;Keeps track of collapsed/expanded item properties&lt;/td&gt;
  522. &lt;td&gt;3094&lt;/td&gt;
  523. &lt;td&gt;6&lt;/td&gt;
  524. &lt;/tr&gt;
  525. &lt;tr&gt;
  526. &lt;td&gt;3&lt;/td&gt;
  527. &lt;td&gt;Item renaming&lt;/td&gt;
  528. &lt;td&gt;Allows to rename an item&lt;/td&gt;
  529. &lt;td&gt;3471&lt;/td&gt;
  530. &lt;td&gt;7&lt;/td&gt;
  531. &lt;/tr&gt;
  532. &lt;tr&gt;
  533. &lt;td&gt;4&lt;/td&gt;
  534. &lt;td&gt;Item selection&lt;/td&gt;
  535. &lt;td&gt;Allows to get/set selected item&lt;/td&gt;
  536. &lt;td&gt;2338&lt;/td&gt;
  537. &lt;td&gt;5&lt;/td&gt;
  538. &lt;/tr&gt;
  539. &lt;tr&gt;
  540. &lt;td&gt;5&lt;/td&gt;
  541. &lt;td&gt;Item value&lt;/td&gt;
  542. &lt;td&gt;Provides 2nd and the rest columns for items, used by Property browser&lt;/td&gt;
  543. &lt;td&gt;1307&lt;/td&gt;
  544. &lt;td&gt;3&lt;/td&gt;
  545. &lt;/tr&gt;
  546. &lt;tr&gt;
  547. &lt;td&gt;6&lt;/td&gt;
  548. &lt;td&gt;Item value editing&lt;/td&gt;
  549. &lt;td&gt;Allows to edit item values with a default editor widget&lt;/td&gt;
  550. &lt;td&gt;1996&lt;/td&gt;
  551. &lt;td&gt;4&lt;/td&gt;
  552. &lt;/tr&gt;
  553. &lt;tr&gt;
  554. &lt;td&gt;7&lt;/td&gt;
  555. &lt;td&gt;Item value editing with combobox&lt;/td&gt;
  556. &lt;td&gt;Provides combobox editor&lt;/td&gt;
  557. &lt;td&gt;5819&lt;/td&gt;
  558. &lt;td&gt;11&lt;/td&gt;
  559. &lt;/tr&gt;
  560. &lt;tr&gt;
  561. &lt;td&gt;8&lt;/td&gt;
  562. &lt;td&gt;Item value editing with spinner&lt;/td&gt;
  563. &lt;td&gt;Provides spinbox editor&lt;/td&gt;
  564. &lt;td&gt;5290&lt;/td&gt;
  565. &lt;td&gt;10&lt;/td&gt;
  566. &lt;/tr&gt;
  567. &lt;tr&gt;
  568. &lt;td&gt;9&lt;/td&gt;
  569. &lt;td&gt;Menu&lt;/td&gt;
  570. &lt;td&gt;Provides pop-up menu&lt;/td&gt;
  571. &lt;td&gt;1248&lt;/td&gt;
  572. &lt;td&gt;2&lt;/td&gt;
  573. &lt;/tr&gt;
  574. &lt;/table&gt;
  575. &lt;p&gt;Here's an example of UIQtTree Menu feature file: &lt;a href="https://bitbucket.org/ogstudio-history/mjin/src/0c4cc3c3213f4687c0f3bd6a5426a6054cadd79b/f/TREE_MENU.cpp?at=Studio+0.10&amp;amp;fileviewer=file-view-default"&gt;TREE_MENU&lt;/a&gt;.&lt;/p&gt;
  576. &lt;p&gt;&lt;strong&gt;Benefits of the approach&lt;/strong&gt; include:&lt;/p&gt;
  577. &lt;ol&gt;
  578. &lt;li&gt;Faster code reading/understanding due to small size&lt;/li&gt;
  579. &lt;li&gt;Easier and safer modification due to isolated code&lt;/li&gt;
  580. &lt;/ol&gt;
  581. &lt;p&gt;There's a drawback, too: new approach requires learning.&lt;/p&gt;
  582. &lt;p&gt;That's it for the most important technical details about development in August: UIQt module, its refactoring, a new feature based development approach, and its benefits.&lt;/p&gt;</summary></entry></feed>