您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

169 行
6.7KB

  1. <!DOCTYPE html>
  2. <head>
  3. <meta charset="utf-8" />
  4. <!-- Set the viewport width to device width for mobile -->
  5. <meta name="viewport" content="width=device-width" />
  6. <title>Example-driven development</title>
  7. <link rel="stylesheet" href="http://opengamestudio.org/theme/css/normalize.css" />
  8. <link rel="stylesheet" href="http://opengamestudio.org/theme/css/foundation.min.css" />
  9. <link rel="stylesheet" href="http://opengamestudio.org/theme/css/style.css" />
  10. <link rel="stylesheet" href="http://opengamestudio.org/theme/css/pygments.css" />
  11. <script src="http://opengamestudio.org/theme/js/custom.modernizr.js"></script>
  12. <!-- So Firefox can bookmark->"abo this site" -->
  13. <link href="feeds/all.atom.xml" rel="alternate" title="Opensource Game Studio" type="application/atom+xml">
  14. </head>
  15. <body>
  16. <!-- Nav Bar -->
  17. <nav>
  18. <!-- Show menu items and pages -->
  19. <div class="row">
  20. <div class="large-12 columns top-bar">
  21. <h1><a href="http://opengamestudio.org">Opensource Game Studio</a></h1>
  22. </div>
  23. </div>
  24. <div class="row top-menu">
  25. <div class="large-12 columns">
  26. <a href="/pages/projects.html" class="menu-button secondary">Projects</a>
  27. <a href="/pages/about.html" class="menu-button secondary">About</a>
  28. </div>
  29. </div>
  30. </nav>
  31. <!-- End Nav -->
  32. <!-- Main Page Content and Sidebar -->
  33. <div class="row">
  34. <!-- Main Blog Content -->
  35. <div class="large-9 columns">
  36. <article>
  37. <header>
  38. <h3 class="article-title"><a href="http://opengamestudio.org/example-driven-development.html" rel="bookmark"
  39. title="Permalink to Example-driven development">Example-driven development</a></h3>
  40. </header>
  41. <h6 class="subheader" title="2018-06-27T00:00:00+03:00">Ср 27 Июнь 2018
  42. <a class="button secondary small translation-button" href="http://opengamestudio.org/example-driven-development-ru.html">ru</a>
  43. </h6> <p><img alt="Screenshot" src="http://opengamestudio.org/2018-06-27-example-driven-development.png" /></p>
  44. <p>This article explains how the third OpenSceneGraph cross-platform example
  45. opened our eyes to example-driven development.</p>
  46. <p><strong>The third OpenSceneGraph cross-platform example</strong></p>
  47. <p>The third OpenSceneGraph cross-platform example explains how to implement
  48. <a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/03.RemoteDebugging">remote debugging across platforms</a>. This example is less about
  49. OpenSceneGraph and more about different platforms.</p>
  50. <p>Remote anything nowadays assumes the use of HTTP(s) over TCP/IP. Thus, the
  51. first idea was to embed HTTP server into an application and let HTTP clients
  52. interact with the server. However, serving HTTP across all platforms is
  53. complicated:</p>
  54. <ul>
  55. <li>desktops have firewalls</li>
  56. <li>mobiles have restrictions on background processes</li>
  57. <li>web browsers are HTTP clients by design</li>
  58. </ul>
  59. <p>That's why we decided to create a mediator between debugged application and UI.
  60. <a href="https://github.com/OGStudio/debug-broker">Debug broker</a>, a small Node.js application, became that mediator.
  61. Debug broker uses no external dependencies, so it's easy to run virtually
  62. anywhere. Also, since debug broker is a server application, you can configure
  63. it once and use it for any number of applications.</p>
  64. <p>Both <a href="https://github.com/OGStudio/debug-ui">debug UI</a> and <a href="https://github.com/OGStudio/debug-broker">debug broker</a> use JavaScript
  65. because we wanted these tools to be accessible from anywhere with no prior
  66. installation. This decision limited us to web browser solution. Providing
  67. any sort of desktop application would incur additional installation and
  68. maintenance effort, which would only complicate the tools.</p>
  69. <p><strong>Example-driven development establishment</strong></p>
  70. <p>Once the third example was implemented, we realized how important and
  71. beneficial it is to develop new features outside the main project:</p>
  72. <ul>
  73. <li>the main project is freed from excessive commit noise</li>
  74. <li>a new feature is publicly shared for everyone to learn, criticize, and improve</li>
  75. </ul>
  76. <p>When we publicly share our knowledge:</p>
  77. <ul>
  78. <li>we must create documentation for everyone (including ourselves later) to understand what's going on</li>
  79. <li>we must not use hacks because that would break your trust in us</li>
  80. </ul>
  81. <p>From now on, all new features like input handling, Mahjong layout loading,
  82. resource caching, etc. are going to be first implemented as examples.
  83. We call this example-driven development.</p>
  84. <p>That's it for explaining how the third OpenSceneGraph cross-platform example
  85. opened our eyes to example-driven development.</p>
  86. <p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>
  87. </p>
  88. </article>
  89. </div>
  90. <!-- End Main Content -->
  91. <!-- Sidebar -->
  92. <aside class="large-3 columns">
  93. <!--k
  94. <h5 class="sidebar-title">Site</h5>
  95. <ul class="side-nav">
  96. <li><a href="http://opengamestudio.org/archives.html">Archives</a>
  97. <li><a href="http://opengamestudio.org/tags.html">Tags</a>
  98. <li><a href="http://opengamestudio.org/feeds/all.atom.xml" rel="alternate">Atom feed</a></li>
  99. </ul>
  100. <h5 class="sidebar-title">Categories</h5>
  101. <ul class="side-nav">
  102. <li><a href="http://opengamestudio.org/category/news.html">News</a></li>
  103. </ul>
  104. -->
  105. <h5 class="sidebar-title">Ads</h5>
  106. <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
  107. <!-- ogs2 -->
  108. <ins class="adsbygoogle"
  109. style="display:block"
  110. data-ad-client="ca-pub-4473792248813084"
  111. data-ad-slot="9024247127"
  112. data-ad-format="auto"></ins>
  113. <script>
  114. (adsbygoogle = window.adsbygoogle || []).push({});
  115. </script>
  116. </aside> <!-- End Sidebar -->
  117. </div> <!-- End Main Content and Sidebar -->
  118. <!-- Footer -->
  119. <footer class="row">
  120. <div class="large-12 columns">
  121. <hr />
  122. <div class="row">
  123. <div class="large-7 columns">
  124. <p>Proudly powered by <a href="http://getpelican.com">Pelican</a>, which takes great advantage of <a href="http://python.org">Python</a>.</p>
  125. </div>
  126. </div>
  127. </div>
  128. <script type="text/javascript">
  129. var _gaq = _gaq || [];
  130. _gaq.push(['_setAccount', 'UA-3773114-1']);
  131. _gaq.push(['_trackPageview']);
  132. (function() {
  133. var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  134. ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  135. var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  136. })();
  137. </script>
  138. </footer>