Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

on-the-way-to-durable-applications.html 10.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <!DOCTYPE html>
  2. <html>
  3. <meta charset="utf-8">
  4. <head>
  5. <style>
  6. #header
  7. {
  8. background: #2BA6E3;
  9. padding: 0.7em;
  10. text-align: left;
  11. }
  12. #header a
  13. {
  14. color: white;
  15. text-decoration: none;
  16. padding: 0.5em 1em 0.5em 1em;
  17. }
  18. #lang
  19. {
  20. float: right;
  21. }
  22. .news_item
  23. {
  24. background: #FFFFFF;
  25. width: 720px;
  26. padding: 1em;
  27. margin-top: 2em;
  28. margin-bottom: 2em;
  29. border: 1px solid #E0E0E0;
  30. text-align: left;
  31. }
  32. .news_item_contents
  33. {
  34. color: #444;
  35. line-height: 1.5em;
  36. }
  37. .news_item_date
  38. {
  39. margin-bottom: 2em;
  40. color: #aaa;
  41. }
  42. html
  43. {
  44. font-family: sans-serif;
  45. }
  46. body
  47. {
  48. background: #FAFAFA;
  49. }
  50. code, pre
  51. {
  52. font-family: monospace, serif;
  53. font-size: 1em;
  54. color: #7f0a0c;
  55. }
  56. img
  57. {
  58. width: 720px;
  59. }
  60. a
  61. {
  62. color: #3A91CB;
  63. text-decoration: none;
  64. }
  65. table
  66. {
  67. border-collapse: collapse;
  68. }
  69. table, th, td
  70. {
  71. border: 1px solid #aaa;
  72. padding: 0.5em;
  73. margin-top: 0.5em;
  74. margin-bottom: 0.5em;
  75. }
  76. </style>
  77. </head>
  78. <body>
  79. <div id="header">
  80. <strong id="title">Open Game Studio</strong>
  81. <a href="../../en/news/index.html">News</a>
  82. <a href="../../en/game/index.html">Games</a>
  83. <a href="../../en/tool/index.html">Tools</a>
  84. <a href="../../en/page/about.html">About</a>
  85. <div id="lang">
  86. <a href="../../en/news/on-the-way-to-durable-applications.html">EN</a>
  87. <a href="../../ru/news/on-the-way-to-durable-applications.html">RU</a>
  88. </div>
  89. </div>
  90. <center>
  91. <h1>In the news...</h1>
  92. <div class="news_item">
  93. <h2 class="news_item_title">
  94. <a href="on-the-way-to-durable-applications.html">On the way to durable applications</a>
  95. </h2>
  96. <p class="news_item_date">
  97. 2019-08-05 00:00
  98. </p>
  99. <div class="news_item_contents">
  100. <p><img src="../../images/2019-08-05_on-the-way-to-durable-applications.jpg" alt="Pskov's veche" /></p>
  101. <p>This article describes our first durable application for desktop PCs: PSKOV static site generator.</p>
  102. <p><strong>Durability</strong></p>
  103. <p>A durable application is an application that functions without a single change on operating systems released in years 2010-2030. In other words, a durable application has backward compatibility of 10 years and has the stability to run for 10 years. Actually, <a href="http://opengamestudio.org/pskov">PSKOV</a> runs even under Windows 2000, so PSKOV has backward compatibility of 19 years.</p>
  104. <p>From technical side, PSKOV is a single HTML file with layout (HTML), styles (CSS), and code (JavaScript) packed inside. PSKOV runs strictly inside a web browser without connecting to any server.</p>
  105. <p>Such an implementation gives PSKOV the following features:</p>
  106. <ul>
  107. <li>it can be copied without restrictions</li>
  108. <li>it can be hosted anywhere</li>
  109. <li>it can run locally</li>
  110. <li>it can operate without Internet</li>
  111. </ul>
  112. <p>We can't guarantee stability for 10 years because we can't control the future. However, the history of HTML, CSS, and JavaScript evolution tells us these technologies are developed with maximum backward compatibility. First, new JavaScript features leave older ones still working. Second, web browser developers are interested in making their web browsers work with as many web sites as possible. For example, <a href="https://www.w3schools.com/tags/tag_center.asp">&lt;center&gt; tag</a>, being declared deprecated in 2014, still works as expected 5 years since, in 2019.</p>
  113. <p>At the same time, each web browser application has a serious restriction called sandbox, a deceptive name for a cage. The cage prevents access to both local file system of users and almost any Internet resource without its owner's explicit permission (CORS). As a result, the application can only communicate with users either through the distinct server, or by offering files to download manually. Downloading files one by one or as an archive is inconvenient, that's why nowadays server oriented approach reigns the world. We'll touch problems of that approach in a moment.</p>
  114. <p>To free PSKOV from the cage, <a href="http://opengamestudio.org/lfsa">LFSA</a> was created, a tiny Python script that needs to be run manually while PSKOV is running. LFSA allows PSKOV to access the user’s local file system. Python was selected because Linux and macOS have Python installed by default, and users can easily install Python on Windows (even Windows 2000).</p>
  115. <p><strong>Track record</strong></p>
  116. <p>PSKOV has been successfully used to create the following small sites:</p>
  117. <ul>
  118. <li><a href="http://opengamestudio.org">open game studio project site</a></li>
  119. <li><a href="http://opengamestudio.org/pskov">PSKOV itself</a></li>
  120. <li><a href="http://opengamestudio.org/lfsa">LFSA</a></li>
  121. <li><a href="http://opengamestudio.org/pskov/sample/03.Blog/en/blog/index.html">example of a simple blog</a></li>
  122. </ul>
  123. <p>Now let's see why PSKOV was created as a durable application for web browsers.</p>
  124. <p><strong>Reason №1: collect and keep knowledge in an accessible form</strong></p>
  125. <p>We have been creating convenient game development tools for several years now. So far the collected knowledge was represented by <a href="../game/ogs-mahjong-1.html">native applications</a> for desktop PCs, <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">education articles</a> for related technologies, and <a href="https://youtu.be/_t8TGhSgJG4">showcase videos</a>. Such forms of the collected knowledge are basically dead:</p>
  126. <ul>
  127. <li>few would download an unknown application</li>
  128. <li>few would watch some videos</li>
  129. <li>even fewer would read some articles</li>
  130. </ul>
  131. <p>In many ways, this death is due to inaccessibility: one has to make an unknown amount of effort to achieve an unknown result. Hardly anyone would have interest in this. A web browser application, potentially accessible anywhere, is a totally different deal: you only need to make a known effort, click a link, to achieve an unknown result. The history of conducting <a href="https://en.wikipedia.org/wiki/Twitter_Revolution">twitter revolutions</a> proves that almost anyone can open a link and "like" the change of a "bloody regime".</p>
  132. <p><strong>Reason №2: rule by people</strong></p>
  133. <p>Nowadays any Internet activity is performed by the means of services that almost always belong to some company: <a href="http://twitter.com">messages</a>, <a href="http://2gis.ru">maps</a>, <a href="http://google.com">search</a>, <a href="http://music.yandex.ru">music</a>, <a href="http://github.com">source code</a>, etc. Such power usurpation leads to <a href="https://techcrunch.com/2015/03/13/google-kills-off-google-code/">shutdowns</a> of <a href="https://www.reddit.com/r/sysadmin/comments/62orq9/codeplex_shutting_down_and_fosshub_is_sad/">services</a> that their owning companies deem unprofitable. They usually do it without any consent with those users who brought life to these services in the first place.</p>
  134. <p>Other times companies simply block competing browsers from accessing their service, as it was recently the <a href="https://www.reddit.com/r/firefox/comments/aw1umv/skype_web_is_now_blocked_in_firefox/">case with the web version of Skype</a>. Luckily there are people who don’t agree with such politics. Thanks to them, <a href="https://addons.mozilla.org/ru/firefox/addon/firefox-web-skype/">unlocking tools</a> appear.</p>
  135. <p>As for us, we deem such a way of handling things as inappropriate. However, savage business is not the only one to blame here; average users, every one of us is guilty, too. You may argue that users have no choice, that someone else (government, aliens, underline what you like) made this world unfair. Some people even blame government/aliens directly and believe that without them, life would be amazing. However, human history <a href="https://translate.google.com/translate?sl=ru&amp;tl=en&amp;u=https%3A%2F%2Fria.ru%2F20190723%2F1556775012.html">tells us a different story</a>: "<strong>the state</strong> is not some enemy horde that occupied the society, but that which <strong>grows out of society and mirrors it</strong>".</p>
  136. <p>Being part of the people, we decided to start with ourselves and use our power for the best: create applications that we need in such a way to make them usable and accessible to everyone everywhere. PSKOV is the first attempt, which already exceeded our expectations. Sure, PSKOV has limitations like LFSA and unencrypted HTTP; there's a lot to do to increase the accessibility of PSKOV, however, we're ready to dare anyone: current PSKOV version will keep functioning for 10 years to come without any maintenance.</p>
  137. <p>That's it for describing our first durable application for desktop PCs: PSKOV static site generator.</p>
  138. </div>
  139. </div>
  140. <div id="footer">
  141. The site has been generated by <a href="http://opengamestudio.org/pskov">PSKOV</a>
  142. from <a href="http://github.com/ogstudio/site-opengamestudio">this source code</a>.
  143. The site is hosted by <a href="https://pages.github.com">GitHub Pages</a>.
  144. </div>
  145. </center>
  146. </body>
  147. </html>