You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

159 line
15KB

  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. /*
  57. figure
  58. {
  59. margin: 0px;
  60. padding: 0px;
  61. }
  62. */
  63. img
  64. {
  65. width: 720px;
  66. }
  67. a
  68. {
  69. color: #3A91CB;
  70. text-decoration: none;
  71. }
  72. table
  73. {
  74. border-collapse: collapse;
  75. }
  76. table, th, td
  77. {
  78. border: 1px solid #aaa;
  79. padding: 0.5em;
  80. margin-top: 0.5em;
  81. margin-bottom: 0.5em;
  82. }
  83. </style>
  84. </head>
  85. <body>
  86. <div id="header">
  87. <strong id="title">Open Game Studio</strong>
  88. <a href="../../ru/news/index.html">Новости</a>
  89. <a href="../../ru/game/index.html">Игры</a>
  90. <a href="../../ru/tool/index.html">Инструменты</a>
  91. <a href="../../ru/page/about.html">О нас</a>
  92. <div id="lang">
  93. <a href="../../en/news/on-the-way-to-durable-applications.html">EN</a>
  94. <a href="../../ru/news/on-the-way-to-durable-applications.html">RU</a>
  95. </div>
  96. </div>
  97. <center>
  98. <h1>В новостях...</h1>
  99. <div class="news_item">
  100. <h2 class="news_item_title">
  101. <a href="on-the-way-to-durable-applications.html">На пути к долговечным приложениям</a>
  102. </h2>
  103. <p class="news_item_date">
  104. 2019-08-05 00:00
  105. </p>
  106. <div class="news_item_contents">
  107. <p><img src="../../images/2019-08-05_on-the-way-to-durable-applications.jpg" alt="Псковское вече" /></p>
  108. <p>В этой статье мы расскажем о нашем первом долговечном приложении для настольных ПК - генераторе статических сайтов ПСКОВ.</p>
  109. <p><strong>Долговечность</strong></p>
  110. <p>Под долговечным приложением мы понимаем такое приложение, которое работает без единого изменения на операционных системах, выпущенных в период 2010-2030 годов. Иными словами, долговечное приложение обладает 10-летней обратной совместимостью и 10-летней прочностью. Впрочем, <a href="http://opengamestudio.org/pskov/ru">ПСКОВ</a> работает даже на Windows 2000, так что у него 19-летняя обратная совместимость.</p>
  111. <p>Технически ПСКОВ представляет из себя один файл HTML с упакованными в нём разметкой (HTML), стилями (CSS) и кодом (JavaScript). ПСКОВ исполняется строго в веб-браузере без взаимодействия с сервером.</p>
  112. <p>Подобная организация даёт ПСКОВУ следующие возможности:</p>
  113. <ul>
  114. <li>его можно копировать без ограничений</li>
  115. <li>его можно размещать на любом хостинге</li>
  116. <li>его можно запускать локально</li>
  117. <li>он может работать без Интернета</li>
  118. </ul>
  119. <p>10-летнюю прочность мы гарантировать не можем, т.к. будущим не владеем. Вместе с тем, история развития HTML, CSS, JavaScript говорит о том, что указанные технологии развиваются с максимально возможной обратной совместимостью. Во-первых, новые возможности JavaScript не отменяют старые. Во-вторых, производители веб-браузеров заинтересованы в том, чтобы их веб-браузеры работали с как можно большим числом сайтов. В результате, например, <a href="https://www.w3schools.com/tags/tag_center.asp">тэг &lt;center&gt;</a>, объявленный устаревшим в 2014-м году, без проблем работает 5 лет спустя в 2019-м.</p>
  120. <p>В то же время у любого приложения в веб-браузере есть серьёзное ограничение - клетка, обманчиво именуемая песочницей. Эта клетка запрещает доступ как к локальной файловой системе пользователя, так и почти ко всем ресурсам в Интернете без санкции владельца ресурса (CORS). В итоге что-либо отдать приложение может либо определённому серверу, либо пользователю в виде файла для скачивания. Файлы скачивать по одному или архивом неудобно, поэтому в мире нынче преобладает серверный подход, проблем которого мы коснёмся чуть позже.</p>
  121. <p>Для освобождения ПСКОВА из клетки пришлось создать <a href="http://opengamestudio.org/lfsa/ru">ЛФСД</a>, крошечный скрипт на Python, который необходимо запускать руками на время работы ПСКОВА. ЛФСД даёт возможность ПСКОВУ работать с локальной файловой системой пользователя. Python выбран ввиду его наличия по умолчанию на Linux и macOS, а также возможности поставить на Windows (даже Windows 2000).</p>
  122. <p><strong>Послужной список</strong></p>
  123. <p>ПСКОВ успешно опробован для создания следующих небольших сайтов:</p>
  124. <ul>
  125. <li><a href="http://opengamestudio.org/ru">сайт проекта по созданию открытых игр</a></li>
  126. <li><a href="http://opengamestudio.org/pskov/ru">сам ПСКОВ</a></li>
  127. <li><a href="http://opengamestudio.org/lfsa/ru">ЛФСД</a></li>
  128. <li><a href="http://opengamestudio.org/pskov/sample/03.Blog/ru/blog/index.html">пример простейшего блога</a></li>
  129. </ul>
  130. <p>Теперь о причинах создания ПСКОВА именно в виде долговечного приложения для веб-браузера.</p>
  131. <p><strong>Причина №1: накопление и сохранение знаний в доступном виде</strong></p>
  132. <p>Уже не первый год мы трудимся над созданием удобных средств разработки игр. До недавнего времени накопленные знания представляли из себя <a href="../game/ogs-mahjong-1.html">родные приложения</a> для настольных ПК, <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">обучающие статьи</a> по смежным технологиям либо <a href="https://youtu.be/_t8TGhSgJG4">видео результатов</a>. Указанные виды накопленных знаний отличает то, что знания эти по сути мертвы:</p>
  133. <ul>
  134. <li>единицы людей скачают себе неизвестное приложение</li>
  135. <li>единицы людей прочтут хотя бы часть статей</li>
  136. <li>единицы людей посмотрят хотя бы часть видео</li>
  137. </ul>
  138. <p>Во многом эта смерть обусловлена недоступностью: нужно приложить неизвестное количество усилий для достижения неизвестного результата. Врядли таким можно кого-либо нынче заманить. Совсем иначе дело обстоит с приложением в браузере, которое потенциально работает везде: необходимо приложить известное усилие - открыть ссылку - для достижения неизвестного результата. История проведения <a href="https://ru.wikipedia.org/wiki/%D0%A2%D0%B2%D0%B8%D1%82%D1%82%D0%B5%D1%80-%D1%80%D0%B5%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D1%8F">твиттер-революций</a> говорит о том, что открывать ссылки и ставить лайки за смену "кровавого режима" умеют практически все.</p>
  139. <p><strong>Причина №2: народовластие</strong></p>
  140. <p>Нынче любой чих в Интернете осуществляется посредством сервисов, которые почти всегда принадлежат какой-то компании: <a href="http://twitter.com">сообщения</a>, <a href="http://2gis.ru">карты</a>, <a href="http://google.com">поиск</a>, <a href="http://music.yandex.ru">музыка</a>, <a href="http://github.com">исходный код</a> и т.д.. Следствием подобной узурпации власти становится <a href="https://techcrunch.com/2015/03/13/google-kills-off-google-code/">закрытие</a> тех <a href="https://www.reddit.com/r/sysadmin/comments/62orq9/codeplex_shutting_down_and_fosshub_is_sad/">сервисов</a>, которые контролирующая компания считает нерентабельным. Причём без какого-либо обсуждения с теми пользователям, без которых этот сервис никогда бы не взлетел.</p>
  141. <p>В других случаях компания может просто запретить конкурирующему браузеру использовать свой сервис, как это недавно <a href="https://www.reddit.com/r/firefox/comments/aw1umv/skype_web_is_now_blocked_in_firefox/">случилось с веб-версией Скайпа</a>. Вместе с тем, существуют люди, не согласные с такой политикой. Благодаря им появляются <a href="https://addons.mozilla.org/ru/firefox/addon/firefox-web-skype/">инструменты отключения</a> блокировок.</p>
  142. <p>На наш взгляд, подобное положение вещей недопустимо. Однако, вина в этом лежит не только лишь на одичавшем бизнесе, но и простых пользователях, каждом из нас. Вы можете возразить, что у пользователей нет выбора, что кто-то другой (власть, рептилоиды, нужное подчеркнуть) сделал этот мир несправедливым. Кто-то может даже прямо винить власть/рептилоидов и веровать в то, что вот без них-то мы заживём. К сожалению, история человечества <a href="https://ria.ru/20190723/1556775012.html">говорит обратное</a>: "<strong>государство</strong> — это не какая-то вражья орда, оккупировавшая общество, а то, что <strong>растет из общества и зеркально его отражает</strong>".</p>
  143. <p>Будучи частью народа, мы начали с себя и решили употребить свою власть во благо: создавать необходимые нам приложения так, чтобы они работали для всех везде и всегда. ПСКОВ является первой попыткой, которая более чем превзошла наши ожидания. Конечно, у ПСКОВА есть свои ограничения в виде ЛФСД и работы по HTTP без шифрования; предстоит ещё многое сделать для увеличения доступности ПСКОВА, но уже сейчас мы готовы поспорить с любым: ПСКОВ через 10 лет будет работать без единого изменения. Как говорится, запомните этот твит.</p>
  144. <p>На этом мы заканчиваем рассказ о нашем первом долговечном приложении для настольных ПК - генераторе статических сайтов ПСКОВ.</p>
  145. </div>
  146. </div>
  147. <div id="footer">
  148. Сайт сгенерирован <a href="http://opengamestudio.org/pskov/ru">ПСКОВОМ</a>
  149. из <a href="http://github.com/ogstudio/site-opengamestudio">этого исходного кода</a>.
  150. Сайт размещён на <a href="https://pages.github.com">GitHub Pages</a>.
  151. </div>
  152. </center>
  153. </body>
  154. </html>