From d46501c2557d79ee37e66fd8fa43bcc90e63bc3b Mon Sep 17 00:00:00 2001 From: Michael Kapelko Date: Mon, 5 Aug 2019 13:22:05 +0300 Subject: [PATCH] Publish durable applications --- en/game/index.html | 131 +++++ en/game/index.template | 106 ++++ en/game/item.template | 111 ++++ en/game/mahjong.html | 112 ++++ en/game/mahjong.md | 10 + en/game/ogs-mahjong-1.html | 144 +++++ en/game/ogs-mahjong-1.md | 43 ++ en/game/pagination.next.template | 4 + en/game/pagination.prev.template | 4 + en/game/pagination.template | 5 + en/game/preview.template | 11 + .../2014-12-31_2014-another-year-passed.md | 13 + .../2014-12-31_user-servey-finish-promise.md | 15 + en/news/2014-another-year-passed.html | 70 ++- en/news/2015-01-13_editor-0.4.0-plans.md | 11 + ...2015-03-07_editor-0.4.0-and-0.5.0-plans.md | 19 + en/news/2015-04-15_editor-06-roadmap.md | 22 + en/news/2015-06-28_editor-06.md | 20 + en/news/2015-07-19_2015-roadmap.md | 18 + .../2015-07-22_test-chamber-for-everyone.md | 10 + ...015-07-23_bye-desura-hello-humblebundle.md | 14 + ...2015-11-02_soon-game-creation-editor-07.md | 15 + en/news/2015-11-09_livesession-editor-07.md | 7 + ...5-11-15_livesession-materials-editor-07.md | 21 + en/news/2015-12-26_2016-roadmap.md | 15 + en/news/2015-roadmap.html | 76 ++- ...016-01-21_january-live-session-decision.md | 9 + ...01-25_january-live-session-announcement.md | 7 + ...016-02-02_rolling-ball-live-session-pt2.md | 9 + en/news/2016-02-10_rolling-ball.md | 27 + .../2016-04-24_may-live-session-decision.md | 12 + ...016-05-17_may-live-session-announcement.md | 7 + en/news/2016-05-29_ogs-editor-0.9.md | 14 + .../2016-08-10_once-mahjong-always-mahjong.md | 15 + en/news/2016-08-18_back-to-social-networks.md | 9 + en/news/2016-09-03_2016-august-recap.md | 196 +++++++ ...-17_september-live-session-announcement.md | 9 + ...mber-live-session-announcement-tomorrow.md | 8 + ..._yesterdays-live-session-short-overview.md | 12 + en/news/2016-10-03_ogs-editor-0.10.md | 16 + en/news/2016-10-11_2016-september-recap.md | 50 ++ en/news/2016-10-31_2016-tech-showcases.md | 85 +++ en/news/2016-11-19_2016-october-recap.md | 54 ++ en/news/2016-12-15_2016-november-recap.md | 47 ++ en/news/2016-12-31_2017-happy-new-year.md | 24 + en/news/2016-august-recap.html | 523 +++++------------- en/news/2016-november-recap.html | 82 ++- en/news/2016-october-recap.html | 82 ++- en/news/2016-roadmap.html | 74 ++- en/news/2016-september-recap.html | 87 ++- en/news/2016-tech-showcases.html | 218 +++----- en/news/2017-01-25_the-year-of-challenges.md | 31 ++ en/news/2017-03-16_lets-go.md | 48 ++ en/news/2017-04-07_its-all-fine.md | 35 ++ en/news/2017-05-12_osg-sample.md | 60 ++ en/news/2017-06-08-ios-refactoring.md | 50 ++ en/news/2017-07-openscenegraph-guide.md | 31 ++ en/news/2017-08-scripting-research.md | 62 +++ en/news/2017-09-mjin-world-birth.md | 38 ++ en/news/2017-10-16-back-to-the-static.md | 13 + en/news/2017-11-22-2017-summary.md | 45 ++ en/news/2017-12-31-new-year.md | 19 + en/news/2017-happy-new-year.html | 79 ++- en/news/2017-summary.html | 80 ++- .../2018-01-26-mahjong-recreation-start.md | 75 +++ .../2018-02-16-mahjong-techdemo1-gameplay.md | 36 ++ en/news/2018-04-20-openscenegraph-examples.md | 36 ++ .../2018-06-27-example-driven-development.md | 51 ++ .../2018-08-21-examples-and-dependencies.md | 59 ++ en/news/2018-10-02-mahjong-demo2.md | 43 ++ en/news/2018-11-19-ideal-gamedev.md | 60 ++ en/news/2019-01-01_year-of-rethinking.md | 19 + .../2019-02-04_teaching-kids-to-program.md | 250 +++++++++ en/news/2019-04-16_defense.md | 55 ++ ...8-05_on-the-way-to-durable-applications.md | 83 +++ en/news/2019-year-of-rethinking.html | 74 ++- en/news/back-to-social-networks.html | 68 ++- en/news/back-to-the-static.html | 74 ++- en/news/bye-desura-hello-humblebundle.html | 73 ++- en/news/defending-availability.html | 76 ++- en/news/editor-0.4.0-and-0.5.0-plans.html | 76 ++- en/news/editor-0.4.0-plans.html | 70 ++- en/news/editor-06-roadmap.html | 70 ++- en/news/editor-06.html | 72 ++- en/news/example-driven-development.html | 78 ++- en/news/examples-and-dependencies.html | 90 ++- en/news/ideal-gamedev.html | 79 ++- en/news/index.html | 361 ++++++------ en/news/index.template | 107 ++++ en/news/index2.html | 353 ++++++------ en/news/index3.html | 355 ++++++------ en/news/index4.html | 335 ++++++----- en/news/index5.html | 323 ++++++----- en/news/index6.html | 303 +++++----- en/news/ios-tutorial.html | 118 ++-- en/news/item.template | 114 ++++ en/news/its-all-fine.html | 76 ++- .../january-live-session-announcement.html | 68 ++- en/news/january-live-session-decision.html | 68 ++- en/news/lets-go.html | 85 ++- en/news/livesession-editor-07.html | 68 ++- en/news/livesession-materials-editor-07.html | 75 +-- en/news/mahjong-demo2.html | 74 ++- en/news/mahjong-recreation-start.html | 76 ++- en/news/mahjong-techdemo1-gameplay.html | 72 ++- en/news/may-live-session-announcement.html | 68 ++- en/news/may-live-session-decision.html | 73 ++- en/news/mjin-world-birth.html | 80 ++- en/news/ogs-editor-0.10.html | 72 ++- en/news/ogs-editor-0.9.html | 71 ++- .../on-the-way-to-durable-applications.html | 151 +++++ en/news/once-mahjong-always-mahjong.html | 70 ++- .../openscenegraph-cross-platform-guide.html | 85 ++- en/news/openscenegraph-examples.html | 74 ++- en/news/osg-sample.html | 88 ++- en/news/pagination.next.template | 4 + en/news/pagination.prev.template | 4 + en/news/pagination.template | 5 + en/news/preview.template | 14 + en/news/rolling-ball-live-session-pt2.html | 70 ++- en/news/rolling-ball.html | 78 ++- en/news/scripting-research.html | 96 ++-- ...er-live-session-announcement-tomorrow.html | 71 ++- .../september-live-session-announcement.html | 72 ++- en/news/soon-game-creation-editor-07.html | 74 ++- en/news/teaching-kids-to-program.html | 231 ++++---- en/news/test-chamber-for-everyone.html | 68 ++- en/news/the-year-of-challenges.html | 83 ++- en/news/the-year-of-lessons.html | 76 ++- en/news/user-servey-finish-promise.html | 74 ++- ...esterdays-live-session-short-overview.html | 69 ++- en/page/about.html | 64 +-- en/page/about.md | 38 ++ en/page/item.template | 108 ++++ en/page/ogs-mahjong-1.html | 142 +---- en/tool/100-zipbase64.md | 8 + en/tool/500-lfsa.md | 8 + en/tool/900-pskov.md | 8 + en/tool/index.html | 142 +++++ en/tool/index.template | 106 ++++ en/tool/item.template | 111 ++++ en/tool/lfsa.html | 111 ++++ en/tool/pagination.next.template | 4 + en/tool/pagination.prev.template | 4 + en/tool/pagination.template | 5 + en/tool/preview.template | 11 + en/tool/pskov.html | 111 ++++ en/tool/zipbase64.html | 111 ++++ ...-05_on-the-way-to-durable-applications.jpg | Bin 0 -> 733486 bytes ru/game/index.html | 131 +++++ ru/game/index.template | 106 ++++ ru/game/item.template | 118 ++++ ru/game/mahjong.html | 119 ++++ ru/game/mahjong.md | 10 + ru/game/ogs-mahjong-1.html | 150 +++++ ru/game/ogs-mahjong-1.md | 42 ++ ru/game/pagination.next.template | 4 + ru/game/pagination.prev.template | 4 + ru/game/pagination.template | 5 + ru/game/preview.template | 11 + ru/index.html | 4 + .../2014-12-31_2014-another-year-passed.md | 13 + .../2014-12-31_user-servey-finish-promise.md | 15 + ru/news/2014-another-year-passed.html | 67 +-- ru/news/2015-01-13_editor-0.4.0-plans.md | 11 + ...2015-03-07_editor-0.4.0-and-0.5.0-plans.md | 19 + ru/news/2015-04-15_editor-06-roadmap.md | 22 + ru/news/2015-06-28_editor-06.md | 20 + ru/news/2015-07-19_2015-roadmap.md | 18 + .../2015-07-22_test-chamber-for-everyone.md | 10 + ...015-07-23_bye-desura-hello-humblebundle.md | 15 + ...2015-11-02_soon-game-creation-editor-07.md | 15 + ru/news/2015-11-09_livesession-editor-07.md | 7 + ...5-11-15_livesession-materials-editor-07.md | 22 + ru/news/2015-12-26_2016-roadmap.md | 15 + ru/news/2015-roadmap.html | 67 +-- ...016-01-21_january-live-session-decision.md | 9 + ...01-25_january-live-session-announcement.md | 7 + ...016-02-02_rolling-ball-live-session-pt2.md | 9 + ru/news/2016-02-10_rolling-ball.md | 27 + .../2016-04-24_may-live-session-decision.md | 12 + ...016-05-17_may-live-session-announcement.md | 7 + ru/news/2016-05-29_ogs-editor-0.9.md | 12 + .../2016-08-10_once-mahjong-always-mahjong.md | 15 + ru/news/2016-08-18_back-to-social-networks.md | 9 + ru/news/2016-09-03_2016-august-recap.md | 197 +++++++ ...-17_september-live-session-announcement.md | 9 + ...mber-live-session-announcement-tomorrow.md | 8 + ..._yesterdays-live-session-short-overview.md | 12 + ru/news/2016-10-03_ogs-editor-0.10.md | 16 + ru/news/2016-10-11_2016-september-recap.md | 50 ++ ru/news/2016-10-31_2016-tech-showcases.md | 85 +++ ru/news/2016-11-19_2016-october-recap.md | 52 ++ ru/news/2016-12-15_2016-november-recap.md | 47 ++ ru/news/2016-12-31_2017-happy-new-year.md | 24 + ru/news/2016-august-recap.html | 516 +++++------------ ru/news/2016-november-recap.html | 71 +-- ru/news/2016-october-recap.html | 75 +-- ru/news/2016-roadmap.html | 71 +-- ru/news/2016-september-recap.html | 78 +-- ru/news/2016-tech-showcases.html | 211 +++---- ru/news/2017-01-25_the-year-of-challenges.md | 30 + ru/news/2017-03-16_lets-go.md | 49 ++ ru/news/2017-04-07_its-all-fine.md | 35 ++ ru/news/2017-05-12_osg-sample.md | 60 ++ ru/news/2017-06-08-ios-refactoring.md | 50 ++ ru/news/2017-07-openscenegraph-guide.md | 31 ++ ru/news/2017-08-scripting-research.md | 60 ++ ru/news/2017-09-mjin-world-birth.md | 38 ++ ru/news/2017-10-16-back-to-the-static.md | 13 + ru/news/2017-11-22-2017-summary.md | 45 ++ ru/news/2017-12-31-new-year.md | 19 + ru/news/2017-happy-new-year.html | 74 +-- ru/news/2017-summary.html | 73 +-- .../2018-01-26-mahjong-recreation-start.md | 72 +++ .../2018-02-16-mahjong-techdemo1-gameplay.md | 34 ++ ru/news/2018-04-20-openscenegraph-examples.md | 36 ++ .../2018-06-27-example-driven-development.md | 52 ++ .../2018-08-21-examples-and-dependencies.md | 59 ++ ru/news/2018-10-02-mahjong-demo2.md | 44 ++ ru/news/2018-11-19-ideal-gamedev.md | 59 ++ ru/news/2019-01-01_year-of-rethinking.md | 21 + .../2019-02-04_teaching-kids-to-program.md | 242 ++++++++ ru/news/2019-04-16_defense.md | 55 ++ ...8-05_on-the-way-to-durable-applications.md | 83 +++ ru/news/2019-year-of-rethinking.html | 67 +-- ru/news/back-to-social-networks.html | 65 ++- ru/news/back-to-the-static.html | 67 +-- ru/news/bye-desura-hello-humblebundle.html | 69 +-- ru/news/defending-availability.html | 67 +-- ru/news/editor-0.4.0-and-0.5.0-plans.html | 69 +-- ru/news/editor-0.4.0-plans.html | 65 ++- ru/news/editor-06-roadmap.html | 67 +-- ru/news/editor-06.html | 67 +-- ru/news/example-driven-development.html | 69 +-- ru/news/examples-and-dependencies.html | 83 ++- ru/news/ideal-gamedev.html | 67 +-- ru/news/index.html | 354 ++++++------ ru/news/index.template | 107 ++++ ru/news/index2.html | 351 ++++++------ ru/news/index3.html | 351 ++++++------ ru/news/index4.html | 330 ++++++----- ru/news/index5.html | 320 ++++++----- ru/news/index6.html | 300 +++++----- ru/news/ios-tutorial.html | 99 ++-- ru/news/item.template | 121 ++++ ru/news/its-all-fine.html | 69 +-- .../january-live-session-announcement.html | 65 ++- ru/news/january-live-session-decision.html | 65 ++- ru/news/lets-go.html | 76 +-- ru/news/livesession-editor-07.html | 65 ++- ru/news/livesession-materials-editor-07.html | 72 +-- ru/news/mahjong-demo2.html | 69 +-- ru/news/mahjong-recreation-start.html | 70 +-- ru/news/mahjong-techdemo1-gameplay.html | 67 +-- ru/news/may-live-session-announcement.html | 65 ++- ru/news/may-live-session-decision.html | 68 +-- ru/news/mjin-world-birth.html | 71 +-- ru/news/ogs-editor-0.10.html | 67 +-- ru/news/ogs-editor-0.9.html | 68 +-- .../on-the-way-to-durable-applications.html | 158 ++++++ ru/news/once-mahjong-always-mahjong.html | 67 +-- .../openscenegraph-cross-platform-guide.html | 77 +-- ru/news/openscenegraph-examples.html | 67 +-- ru/news/osg-sample.html | 75 +-- ru/news/pagination.next.template | 4 + ru/news/pagination.prev.template | 4 + ru/news/pagination.template | 5 + ru/news/preview.template | 14 + ru/news/rolling-ball-live-session-pt2.html | 65 ++- ru/news/rolling-ball.html | 76 +-- ru/news/scripting-research.html | 73 +-- ...er-live-session-announcement-tomorrow.html | 66 +-- .../september-live-session-announcement.html | 69 +-- ru/news/soon-game-creation-editor-07.html | 69 +-- ru/news/teaching-kids-to-program.html | 190 +++---- ru/news/test-chamber-for-everyone.html | 65 ++- ru/news/the-year-of-challenges.html | 74 +-- ru/news/the-year-of-lessons.html | 67 +-- ru/news/user-servey-finish-promise.html | 65 ++- ...esterdays-live-session-short-overview.html | 66 +-- ru/page/about.html | 64 +-- ru/page/about.md | 38 ++ ru/page/item.template | 108 ++++ ru/page/ogs-mahjong-1.html | 143 +---- ru/tool/100-zipbase64.md | 8 + ru/tool/500-lfsa.md | 8 + ru/tool/900-pskov.md | 8 + ru/tool/index.html | 142 +++++ ru/tool/index.template | 106 ++++ ru/tool/item.template | 118 ++++ ru/tool/lfsa.html | 118 ++++ ru/tool/pagination.next.template | 4 + ru/tool/pagination.prev.template | 4 + ru/tool/pagination.template | 5 + ru/tool/preview.template | 11 + ru/tool/pskov.html | 118 ++++ ru/tool/zipbase64.html | 118 ++++ 298 files changed, 14278 insertions(+), 7379 deletions(-) create mode 100644 en/game/index.html create mode 100644 en/game/index.template create mode 100644 en/game/item.template create mode 100644 en/game/mahjong.html create mode 100644 en/game/mahjong.md create mode 100644 en/game/ogs-mahjong-1.html create mode 100644 en/game/ogs-mahjong-1.md create mode 100644 en/game/pagination.next.template create mode 100644 en/game/pagination.prev.template create mode 100644 en/game/pagination.template create mode 100644 en/game/preview.template create mode 100644 en/news/2014-12-31_2014-another-year-passed.md create mode 100644 en/news/2014-12-31_user-servey-finish-promise.md create mode 100644 en/news/2015-01-13_editor-0.4.0-plans.md create mode 100644 en/news/2015-03-07_editor-0.4.0-and-0.5.0-plans.md create mode 100644 en/news/2015-04-15_editor-06-roadmap.md create mode 100644 en/news/2015-06-28_editor-06.md create mode 100644 en/news/2015-07-19_2015-roadmap.md create mode 100644 en/news/2015-07-22_test-chamber-for-everyone.md create mode 100644 en/news/2015-07-23_bye-desura-hello-humblebundle.md create mode 100644 en/news/2015-11-02_soon-game-creation-editor-07.md create mode 100644 en/news/2015-11-09_livesession-editor-07.md create mode 100644 en/news/2015-11-15_livesession-materials-editor-07.md create mode 100644 en/news/2015-12-26_2016-roadmap.md create mode 100644 en/news/2016-01-21_january-live-session-decision.md create mode 100644 en/news/2016-01-25_january-live-session-announcement.md create mode 100644 en/news/2016-02-02_rolling-ball-live-session-pt2.md create mode 100644 en/news/2016-02-10_rolling-ball.md create mode 100644 en/news/2016-04-24_may-live-session-decision.md create mode 100644 en/news/2016-05-17_may-live-session-announcement.md create mode 100644 en/news/2016-05-29_ogs-editor-0.9.md create mode 100644 en/news/2016-08-10_once-mahjong-always-mahjong.md create mode 100644 en/news/2016-08-18_back-to-social-networks.md create mode 100644 en/news/2016-09-03_2016-august-recap.md create mode 100644 en/news/2016-09-17_september-live-session-announcement.md create mode 100644 en/news/2016-09-24_september-live-session-announcement-tomorrow.md create mode 100644 en/news/2016-09-26_yesterdays-live-session-short-overview.md create mode 100644 en/news/2016-10-03_ogs-editor-0.10.md create mode 100644 en/news/2016-10-11_2016-september-recap.md create mode 100644 en/news/2016-10-31_2016-tech-showcases.md create mode 100644 en/news/2016-11-19_2016-october-recap.md create mode 100644 en/news/2016-12-15_2016-november-recap.md create mode 100644 en/news/2016-12-31_2017-happy-new-year.md create mode 100644 en/news/2017-01-25_the-year-of-challenges.md create mode 100644 en/news/2017-03-16_lets-go.md create mode 100644 en/news/2017-04-07_its-all-fine.md create mode 100644 en/news/2017-05-12_osg-sample.md create mode 100644 en/news/2017-06-08-ios-refactoring.md create mode 100644 en/news/2017-07-openscenegraph-guide.md create mode 100644 en/news/2017-08-scripting-research.md create mode 100644 en/news/2017-09-mjin-world-birth.md create mode 100644 en/news/2017-10-16-back-to-the-static.md create mode 100644 en/news/2017-11-22-2017-summary.md create mode 100644 en/news/2017-12-31-new-year.md create mode 100644 en/news/2018-01-26-mahjong-recreation-start.md create mode 100644 en/news/2018-02-16-mahjong-techdemo1-gameplay.md create mode 100644 en/news/2018-04-20-openscenegraph-examples.md create mode 100644 en/news/2018-06-27-example-driven-development.md create mode 100644 en/news/2018-08-21-examples-and-dependencies.md create mode 100644 en/news/2018-10-02-mahjong-demo2.md create mode 100644 en/news/2018-11-19-ideal-gamedev.md create mode 100644 en/news/2019-01-01_year-of-rethinking.md create mode 100644 en/news/2019-02-04_teaching-kids-to-program.md create mode 100644 en/news/2019-04-16_defense.md create mode 100644 en/news/2019-08-05_on-the-way-to-durable-applications.md create mode 100644 en/news/index.template create mode 100644 en/news/item.template create mode 100644 en/news/on-the-way-to-durable-applications.html create mode 100644 en/news/pagination.next.template create mode 100644 en/news/pagination.prev.template create mode 100644 en/news/pagination.template create mode 100644 en/news/preview.template create mode 100644 en/page/about.md create mode 100644 en/page/item.template create mode 100644 en/tool/100-zipbase64.md create mode 100644 en/tool/500-lfsa.md create mode 100644 en/tool/900-pskov.md create mode 100644 en/tool/index.html create mode 100644 en/tool/index.template create mode 100644 en/tool/item.template create mode 100644 en/tool/lfsa.html create mode 100644 en/tool/pagination.next.template create mode 100644 en/tool/pagination.prev.template create mode 100644 en/tool/pagination.template create mode 100644 en/tool/preview.template create mode 100644 en/tool/pskov.html create mode 100644 en/tool/zipbase64.html create mode 100644 images/2019-08-05_on-the-way-to-durable-applications.jpg create mode 100644 ru/game/index.html create mode 100644 ru/game/index.template create mode 100644 ru/game/item.template create mode 100644 ru/game/mahjong.html create mode 100644 ru/game/mahjong.md create mode 100644 ru/game/ogs-mahjong-1.html create mode 100644 ru/game/ogs-mahjong-1.md create mode 100644 ru/game/pagination.next.template create mode 100644 ru/game/pagination.prev.template create mode 100644 ru/game/pagination.template create mode 100644 ru/game/preview.template create mode 100644 ru/index.html create mode 100644 ru/news/2014-12-31_2014-another-year-passed.md create mode 100644 ru/news/2014-12-31_user-servey-finish-promise.md create mode 100644 ru/news/2015-01-13_editor-0.4.0-plans.md create mode 100644 ru/news/2015-03-07_editor-0.4.0-and-0.5.0-plans.md create mode 100644 ru/news/2015-04-15_editor-06-roadmap.md create mode 100644 ru/news/2015-06-28_editor-06.md create mode 100644 ru/news/2015-07-19_2015-roadmap.md create mode 100644 ru/news/2015-07-22_test-chamber-for-everyone.md create mode 100644 ru/news/2015-07-23_bye-desura-hello-humblebundle.md create mode 100644 ru/news/2015-11-02_soon-game-creation-editor-07.md create mode 100644 ru/news/2015-11-09_livesession-editor-07.md create mode 100644 ru/news/2015-11-15_livesession-materials-editor-07.md create mode 100644 ru/news/2015-12-26_2016-roadmap.md create mode 100644 ru/news/2016-01-21_january-live-session-decision.md create mode 100644 ru/news/2016-01-25_january-live-session-announcement.md create mode 100644 ru/news/2016-02-02_rolling-ball-live-session-pt2.md create mode 100644 ru/news/2016-02-10_rolling-ball.md create mode 100644 ru/news/2016-04-24_may-live-session-decision.md create mode 100644 ru/news/2016-05-17_may-live-session-announcement.md create mode 100644 ru/news/2016-05-29_ogs-editor-0.9.md create mode 100644 ru/news/2016-08-10_once-mahjong-always-mahjong.md create mode 100644 ru/news/2016-08-18_back-to-social-networks.md create mode 100644 ru/news/2016-09-03_2016-august-recap.md create mode 100644 ru/news/2016-09-17_september-live-session-announcement.md create mode 100644 ru/news/2016-09-24_september-live-session-announcement-tomorrow.md create mode 100644 ru/news/2016-09-26_yesterdays-live-session-short-overview.md create mode 100644 ru/news/2016-10-03_ogs-editor-0.10.md create mode 100644 ru/news/2016-10-11_2016-september-recap.md create mode 100644 ru/news/2016-10-31_2016-tech-showcases.md create mode 100644 ru/news/2016-11-19_2016-october-recap.md create mode 100644 ru/news/2016-12-15_2016-november-recap.md create mode 100644 ru/news/2016-12-31_2017-happy-new-year.md create mode 100644 ru/news/2017-01-25_the-year-of-challenges.md create mode 100644 ru/news/2017-03-16_lets-go.md create mode 100644 ru/news/2017-04-07_its-all-fine.md create mode 100644 ru/news/2017-05-12_osg-sample.md create mode 100644 ru/news/2017-06-08-ios-refactoring.md create mode 100644 ru/news/2017-07-openscenegraph-guide.md create mode 100644 ru/news/2017-08-scripting-research.md create mode 100644 ru/news/2017-09-mjin-world-birth.md create mode 100644 ru/news/2017-10-16-back-to-the-static.md create mode 100644 ru/news/2017-11-22-2017-summary.md create mode 100644 ru/news/2017-12-31-new-year.md create mode 100644 ru/news/2018-01-26-mahjong-recreation-start.md create mode 100644 ru/news/2018-02-16-mahjong-techdemo1-gameplay.md create mode 100644 ru/news/2018-04-20-openscenegraph-examples.md create mode 100644 ru/news/2018-06-27-example-driven-development.md create mode 100644 ru/news/2018-08-21-examples-and-dependencies.md create mode 100644 ru/news/2018-10-02-mahjong-demo2.md create mode 100644 ru/news/2018-11-19-ideal-gamedev.md create mode 100644 ru/news/2019-01-01_year-of-rethinking.md create mode 100644 ru/news/2019-02-04_teaching-kids-to-program.md create mode 100644 ru/news/2019-04-16_defense.md create mode 100644 ru/news/2019-08-05_on-the-way-to-durable-applications.md create mode 100644 ru/news/index.template create mode 100644 ru/news/item.template create mode 100644 ru/news/on-the-way-to-durable-applications.html create mode 100644 ru/news/pagination.next.template create mode 100644 ru/news/pagination.prev.template create mode 100644 ru/news/pagination.template create mode 100644 ru/news/preview.template create mode 100644 ru/page/about.md create mode 100644 ru/page/item.template create mode 100644 ru/tool/100-zipbase64.md create mode 100644 ru/tool/500-lfsa.md create mode 100644 ru/tool/900-pskov.md create mode 100644 ru/tool/index.html create mode 100644 ru/tool/index.template create mode 100644 ru/tool/item.template create mode 100644 ru/tool/lfsa.html create mode 100644 ru/tool/pagination.next.template create mode 100644 ru/tool/pagination.prev.template create mode 100644 ru/tool/pagination.template create mode 100644 ru/tool/preview.template create mode 100644 ru/tool/pskov.html create mode 100644 ru/tool/zipbase64.html diff --git a/en/game/index.html b/en/game/index.html new file mode 100644 index 0000000..c79ce13 --- /dev/null +++ b/en/game/index.html @@ -0,0 +1,131 @@ + + + + + + + + +
+

Games

+ +
+

+ OGS Mahjong 1 +

+
+ +

Mahjong solitaire and shisen-sho game with nice 3D graphics and relaxing soundtrack.. . .

+
+ +
+
+

+ Mahjong 2 (in development) +

+
+

Mahjong screenshot

+

Remake of OGS Mahjong 1 that runs inside your web browser. Try it now!

+

. . .

+
+ +
+ + + +
+ + diff --git a/en/game/index.template b/en/game/index.template new file mode 100644 index 0000000..87cd551 --- /dev/null +++ b/en/game/index.template @@ -0,0 +1,106 @@ + + + + + + + + +
+

Games

+ +PSKOV_PREVIEWS + + +
+ + diff --git a/en/game/item.template b/en/game/item.template new file mode 100644 index 0000000..45934d5 --- /dev/null +++ b/en/game/item.template @@ -0,0 +1,111 @@ + + + + + + + + +
+

In the games...

+
+

+ PSKOV_ITEM_TITLE +

+
+PSKOV_ITEM_CONTENTS +
+
+ +
+ + diff --git a/en/game/mahjong.html b/en/game/mahjong.html new file mode 100644 index 0000000..a3bcc7e --- /dev/null +++ b/en/game/mahjong.html @@ -0,0 +1,112 @@ + + + + + + + + +
+

In the games...

+
+

+ Mahjong 2 (in development) +

+
+

Mahjong screenshot

+

Remake of OGS Mahjong 1 that runs inside your web browser. Try it now!

+
+
+ +
+ + diff --git a/en/game/mahjong.md b/en/game/mahjong.md new file mode 100644 index 0000000..a7e9c7c --- /dev/null +++ b/en/game/mahjong.md @@ -0,0 +1,10 @@ +Title: Mahjong 2 (in development) +Slug: mahjong +Lang: en + +![Mahjong screenshot][mahjong-screenshot] + +Remake of OGS Mahjong 1 that runs inside your web browser. [Try it now!][mahjong] + +[mahjong-screenshot]: ../../images/ogs-mahjong-2-screenshot.png +[mahjong]: http://opengamestudio.org/mahjong diff --git a/en/game/ogs-mahjong-1.html b/en/game/ogs-mahjong-1.html new file mode 100644 index 0000000..2f9f180 --- /dev/null +++ b/en/game/ogs-mahjong-1.html @@ -0,0 +1,144 @@ + + + + + + + + +
+

In the games...

+
+

+ OGS Mahjong 1 +

+
+ +

Mahjong solitaire and shisen-sho game with nice 3D graphics and relaxing soundtrack.

+

Features

+
    +
  • 3 game modes: Mahjong Solitaire, Shisen-sho and Shisen-sho with gravity.
  • +
  • More than 150 layouts. Layouts format is compatible with KMahjongg.
  • +
  • Support for multiple tilesets.
  • +
  • 4 themes: "Classic", "Neo-classic", "Flowers", "Distros".
  • +
  • Support for background scenes.
  • +
  • 3 scenes: "Room", "Room Lite" and "Inside the computer".
  • +
  • Save and load.
  • +
  • Hints and shuffle.
  • +
  • Unlimited number of undos.
  • +
  • Camera animations and dynamic camera (cursor tracking).
  • +
  • Layers highlighting.
  • +
  • 6 languages: Russian, English, German, French, Spanish and Hindi.
  • +
  • Online leaderboard.
  • +
  • Adapting the game settings to your computer configuration during the first game launch.
  • +
+

Basic version

+ +

Deluxe version

+

If you like our work, you can support us by buying the Deluxe version. +It will help us keep the things running and, maybe, hire some freelance +artists to make our future games a bit better.

+

OGS Mahjong Deluxe contains two additional tilesets: "Eastern" and "Sport".

+ +
+
+ +
+ + diff --git a/en/game/ogs-mahjong-1.md b/en/game/ogs-mahjong-1.md new file mode 100644 index 0000000..f52d5c7 --- /dev/null +++ b/en/game/ogs-mahjong-1.md @@ -0,0 +1,43 @@ +Title: OGS Mahjong 1 +Slug: ogs-mahjong-1 +Lang: en + + + +Mahjong solitaire and shisen-sho game with nice 3D graphics and relaxing soundtrack. + +**Features** + +* 3 game modes: Mahjong Solitaire, Shisen-sho and Shisen-sho with gravity. +* More than 150 layouts. Layouts format is compatible with KMahjongg. +* Support for multiple tilesets. +* 4 themes: "Classic", "Neo-classic", "Flowers", "Distros". +* Support for background scenes. +* 3 scenes: "Room", "Room Lite" and "Inside the computer". +* Save and load. +* Hints and shuffle. +* Unlimited number of undos. +* Camera animations and dynamic camera (cursor tracking). +* Layers highlighting. +* 6 languages: Russian, English, German, French, Spanish and Hindi. +* Online leaderboard. +* Adapting the game settings to your computer configuration during the first game launch. + +**Basic version** + +- [For Windows (exe)](http://sourceforge.net/projects/osrpgcreation/files/Mahjong/1.1.0/ogs-mahjong-1.1.0-windows32.exe/download "Download ogs-mahjong-1.1.0-windows32.exe") (40 MB) +- [For Windows, with editor and additional music (exe)](http://sourceforge.net/projects/osrpgcreation/files/Mahjong/1.1.0/ogs-mahjong-full-1.1.0-windows32.exe/download "Download ogs-mahjong-1.1.0-full-windows32.exe") (123 MB) +- [For Linux64 (tar.lzma)](http://sourceforge.net/projects/osrpgcreation/files/Mahjong/1.1.0/ogs-mahjong-1.1.0-linux64.tar.lzma/download "Download ogs-mahjong-1.1.0-linux64.tar.lzma") (37 MB) +- [For Linux64, with editor and additional music (tar.lzma)](http://sourceforge.net/projects/osrpgcreation/files/Mahjong/1.1.0/ogs-mahjong-full-1.1.0-linux64.tar.lzma/download "Download ogs-mahjong-1.1.0-full-linux64.tar.lzma") (110 MB) +- [For Linux32 (tar.lzma)](http://sourceforge.net/projects/osrpgcreation/files/Mahjong/1.1.0/ogs-mahjong-1.1.0-linux32.tar.lzma/download "Download ogs-mahjong-1.1.0-linux32.tar.lzma") (37 MB) +- [For Linux32, with editor and additional music (tar.lzma)](http://sourceforge.net/projects/osrpgcreation/files/Mahjong/1.1.0/ogs-mahjong-full-1.1.0-linux32.tar.lzma/download "Download ogs-mahjong-1.1.0-full-linux32.tar.lzma") (110 MB) + +**Deluxe version** + +If you like our work, you can support us by buying the Deluxe version. +It will help us keep the things running and, maybe, hire some freelance +artists to make our future games a bit better. + +**OGS Mahjong Deluxe** contains two additional tilesets: "Eastern" and "Sport". + + diff --git a/en/game/pagination.next.template b/en/game/pagination.next.template new file mode 100644 index 0000000..e63f7e1 --- /dev/null +++ b/en/game/pagination.next.template @@ -0,0 +1,4 @@ +

Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT

+

+ Older » +

diff --git a/en/game/pagination.prev.template b/en/game/pagination.prev.template new file mode 100644 index 0000000..0b6dba1 --- /dev/null +++ b/en/game/pagination.prev.template @@ -0,0 +1,4 @@ +

Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT

+

+ « Newer +

diff --git a/en/game/pagination.template b/en/game/pagination.template new file mode 100644 index 0000000..7b69dde --- /dev/null +++ b/en/game/pagination.template @@ -0,0 +1,5 @@ +

Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT

+

+ « Newer + Older » +

diff --git a/en/game/preview.template b/en/game/preview.template new file mode 100644 index 0000000..f67fe3c --- /dev/null +++ b/en/game/preview.template @@ -0,0 +1,11 @@ +
+

+ PSKOV_ITEM_TITLE +

+
+PSKOV_PREVIEW +
+ +
diff --git a/en/news/2014-12-31_2014-another-year-passed.md b/en/news/2014-12-31_2014-another-year-passed.md new file mode 100644 index 0000000..5a3a19f --- /dev/null +++ b/en/news/2014-12-31_2014-another-year-passed.md @@ -0,0 +1,13 @@ +Title: And another year has passed +Date: 2014-12-31 12:00 +Category: News +Slug: 2014-another-year-passed +Lang: en + +Hello! + +So, this year comes to the end. There were very little publications from us during this year. We haven't stopped working, but right now our work is in the phase, when we have nothing to show. And the spare time of the team members is rarely more then 30-40 hours a month. + +But our work continues. And you can find out some details in the new [article from our programmer Michael Kapelko][exaggerated-expectations]. + +[exaggerated-expectations]: exaggerated-expectations.html diff --git a/en/news/2014-12-31_user-servey-finish-promise.md b/en/news/2014-12-31_user-servey-finish-promise.md new file mode 100644 index 0000000..0d09fae --- /dev/null +++ b/en/news/2014-12-31_user-servey-finish-promise.md @@ -0,0 +1,15 @@ +Title: User survey ends today +Date: 2014-12-31 11:00 +Category: News +Slug: user-servey-finish-promise +Lang: en + +About a year ago, we started the user survey, in order to find out what do you think of the Open Source in general and about our project in particular. Today we're closing this survey. It took time, but we've got plenty of answers. Thank you for that. + +We'll share our thought about the results of the survey in one of the future articles. + +After the survey, every one of you has got the code. With this code, you'll be able to access the alpha test of the OGS Mahjong 2, as soon as we'll be ready to start it (i can't promise anything, but we're planning to do it in 2015). Also, you'll be able to choose between the deluxe version of OGS Mahjong 2 and the deluxe version of Shuan, as soon as we'll be ready to release these games. + +We wish you all a Happy New Year. Thank you for being with us. See you next year. + +P.S. If you have lost your code - write us a letter, we'll figure something out. diff --git a/en/news/2014-another-year-passed.html b/en/news/2014-another-year-passed.html index e912863..e4df340 100644 --- a/en/news/2014-another-year-passed.html +++ b/en/news/2014-another-year-passed.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,31 +80,37 @@ -
-

In the news

-
-

- And another year has passed -

-

- 2014-12-31 12:00 -

-
-

Hello!

-

So, this year comes to the end. There were very little publications from us during this year. We haven’t stopped working, but right now our work is in the phase, when we have nothing to show. And the spare time of the team members is rarely more then 30-40 hours a month.

+
+

In the news...

+
+

+ And another year has passed +

+

+ 2014-12-31 12:00 +

+
+

Hello!

+

So, this year comes to the end. There were very little publications from us during this year. We haven't stopped working, but right now our work is in the phase, when we have nothing to show. And the spare time of the team members is rarely more then 30-40 hours a month.

But our work continues. And you can find out some details in the new article from our programmer Michael Kapelko.

- -
+
+
diff --git a/en/news/2015-01-13_editor-0.4.0-plans.md b/en/news/2015-01-13_editor-0.4.0-plans.md new file mode 100644 index 0000000..05f0379 --- /dev/null +++ b/en/news/2015-01-13_editor-0.4.0-plans.md @@ -0,0 +1,11 @@ +Title: Editor roadmap for 0.4.0 +Date: 2015-01-13 00:00 +Category: News +Slug: editor-0.4.0-plans +Lang: en + +The development of Editor 0.3.0 showed us, that usage of custom GUI was not a perfect idea. A few months ago, custom GUI seemed as a simpler way to do things, but it turned out to lack many little features, that are crucial if you're planning to make a convenient tool. + +In the end, we decided to do what we wanted to do in the first place - to use Qt library as the GUI library for our editor. + +So, we'll rewrite the Editor with Qt interface and a little bit refreshed project concept in mind. We plan to release the editor with new GUI and a set of basic features like loading and saving projects in May. diff --git a/en/news/2015-03-07_editor-0.4.0-and-0.5.0-plans.md b/en/news/2015-03-07_editor-0.4.0-and-0.5.0-plans.md new file mode 100644 index 0000000..47f1d02 --- /dev/null +++ b/en/news/2015-03-07_editor-0.4.0-and-0.5.0-plans.md @@ -0,0 +1,19 @@ +Title: Editor 0.4.0 and plans for 0.5.0 +Date: 2015-03-07 00:00 +Category: News +Slug: editor-0.4.0-and-0.5.0-plans +Lang: en + +We completed Editor 0.4.0 in January. As it was planned, it only contains basic abilities to open and save a project. The major goal was to make MJIN, Python and Qt work together (we were unable to use PyQt or PySide due to technical difficulties). + +You can see 0.4.0 in action here. + +We started Editor 0.5.0 development in February. It's 45% ready at the moment. + +Editor 0.5.0 planned features: + +1. Scene node tree editing +1. Property browser with nodes' position and model editing +1. Qt5 support for the sake of easy building on various Linux distributions + +We estimate to complete it in April. diff --git a/en/news/2015-04-15_editor-06-roadmap.md b/en/news/2015-04-15_editor-06-roadmap.md new file mode 100644 index 0000000..4c6a2d4 --- /dev/null +++ b/en/news/2015-04-15_editor-06-roadmap.md @@ -0,0 +1,22 @@ +Title: Editor 0.5.0 and plans for 0.6.0 +Date: 2015-04-15 00:00 +Category: News +Slug: editor-06-roadmap +Lang: en + +We completed Editor 0.5.0. As it was planned, it has scene node tree editing, property browser, and Qt5 support. You can see 0.5.0 in action here. + +Also, we have just started Editor 0.6.0 development. + +Editor 0.6.0 planned features: + +1. Camera node editing +1. Light node editing +1. Node rotation editing +1. Node scripting support +1. Thumbnail dialog to preview materials and models when editing scene node material and model properties +1. Copying and pasting of scene nodes +1. Scene node selection by clicking a mouse in the scene + + +We estimate to complete it in August. diff --git a/en/news/2015-06-28_editor-06.md b/en/news/2015-06-28_editor-06.md new file mode 100644 index 0000000..a63b76c --- /dev/null +++ b/en/news/2015-06-28_editor-06.md @@ -0,0 +1,20 @@ +Title: Editor 0.6.0 +Date: 2015-06-28 00:00 +Category: News +Slug: editor-06 +Lang: en + +We completed Editor 0.6.0. You can see 0.6.0 in action here. + +Editor 0.6.0 got the following new features: + +1. Camera and light node positioning +1. Node rotation along X axis +1. Node scripting support +1. Thumbnail dialog to preview models when editing scene node model properties +1. Node copying and pasting +1. Node selection by LMB click in the scene +1. Window geometry and state restoration after restart + + +We don't have 0.7.0 completion date at the moment, because we decided to take some time to set up a roadmap for Shuan and Mahjong 2. Once done, we will share 0.7.0 completion date and its feature list along with the roadmap. diff --git a/en/news/2015-07-19_2015-roadmap.md b/en/news/2015-07-19_2015-roadmap.md new file mode 100644 index 0000000..ea92777 --- /dev/null +++ b/en/news/2015-07-19_2015-roadmap.md @@ -0,0 +1,18 @@ +Title: Roadmap for 2015-2016 +Date: 2015-07-19 00:00 +Category: News +Slug: 2015-roadmap +Lang: en + +As promised, we have come up with a list of milestones and their approximate dates for the coming year: + +1. Editor 0.7.0 (October 2015) - Actions' system: we recreate the test chamber +1. Editor 0.8.0 (December 2015) - Sound system +1. Editor 0.9.0 (February 2016) - Particles' system and minimal UI +1. Editor 0.10.0, Player 0.1.0 (April 2016) - Player to play what Editor produced: we create Shuan prototype with our engine +1. Editor 0.11.0, Player 0.2.0 (June 2016) - Networking: we create Classic 4-player Mahjong prototype + + +These approximate dates presume one coder spends 40 hours a month. That's about 1 work week at full-time job. Not much, but that's the only time we have. + +We will post more details about Editor 0.7.0 shortly: we need to decide what features deserve 80 hours of our time for the next 2 months. diff --git a/en/news/2015-07-22_test-chamber-for-everyone.md b/en/news/2015-07-22_test-chamber-for-everyone.md new file mode 100644 index 0000000..eb4b684 --- /dev/null +++ b/en/news/2015-07-22_test-chamber-for-everyone.md @@ -0,0 +1,10 @@ +Title: Test chamber for everyone (Editor 0.7.0) +Date: 2015-07-22 00:00 +Category: News +Slug: test-chamber-for-everyone +Lang: en + + +As you know, the main goal of Editor 0.7.0 is the ability to create the test chamber with it. It needs Actions' system and a few stability fixes for that. We are going to publish a detailed article describing how to create the test chamber, too, so that anyone could create their own test chamber! + +We estimate to complete it in October. diff --git a/en/news/2015-07-23_bye-desura-hello-humblebundle.md b/en/news/2015-07-23_bye-desura-hello-humblebundle.md new file mode 100644 index 0000000..dd1c8fe --- /dev/null +++ b/en/news/2015-07-23_bye-desura-hello-humblebundle.md @@ -0,0 +1,14 @@ +Title: Desura no more, hello Humble Bundle Widget +Date: 2015-07-23 00:00 +Category: News +Slug: bye-desura-hello-humblebundle +Lang: en + + +After the recent bankruptcy of Desura's parent company, we decided, that we need a new place for our Deluxe version. Something better, more modern and more trustworthy. We have chosen the Humble Widget, with which you can buy the deluxe version of the game without leaving our site. + +Here it is: + + + +We haven't received a single penny from Desura (due to the minimal cache out limitations), but if you bought the deluxe version from them and experiencing any problems with downloading it (right now we see no problems with that), send us a letter, tell your name on Desura, we'll figure something out. diff --git a/en/news/2015-11-02_soon-game-creation-editor-07.md b/en/news/2015-11-02_soon-game-creation-editor-07.md new file mode 100644 index 0000000..28444c9 --- /dev/null +++ b/en/news/2015-11-02_soon-game-creation-editor-07.md @@ -0,0 +1,15 @@ +Title: SOON: Creating a simple game live (Editor 0.7) +Date: 2015-11-02 00:00 +Category: News +Slug: soon-game-creation-editor-07 +Lang: en + +As we have promised, we are ready to give you Editor 0.7 which is capable of creating the complete test chamber. However, after recreating the test chamber ourselves, it became clear that: + +1. it takes more than 8 hours to recreate it (too long) +1. it's inappropriate to be presented in the form of an article (too boring) + + +Therefore we decided to hold a live session at LiveCoding SOON to show you how to create a simple whac-a-mole like game from scratch. + +Currently we are busy making final preparations, so we'll tell you the exact time and date this week. Stay tuned! diff --git a/en/news/2015-11-09_livesession-editor-07.md b/en/news/2015-11-09_livesession-editor-07.md new file mode 100644 index 0000000..e135c77 --- /dev/null +++ b/en/news/2015-11-09_livesession-editor-07.md @@ -0,0 +1,7 @@ +Title: Creating a simple game live: 15 November 2015 +Date: 2015-11-09 00:00 +Category: News +Slug: livesession-editor-07 +Lang: en + +We're glad to annouce that the LiveCoding session will take place on 15 November 2015 at 12:00 CET. Join us! diff --git a/en/news/2015-11-15_livesession-materials-editor-07.md b/en/news/2015-11-15_livesession-materials-editor-07.md new file mode 100644 index 0000000..98a326a --- /dev/null +++ b/en/news/2015-11-15_livesession-materials-editor-07.md @@ -0,0 +1,21 @@ +Title: Live session video and downloads +Date: 2015-11-15 00:00 +Category: News +Slug: livesession-materials-editor-07 +Lang: en + +If you missed the live session, you can watch it here: +[https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/](https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/) + +You can download the resulting project here: +[https://github.com/OGStudio/liveSessionWhacAMole/archive/master.zip](https://github.com/OGStudio/liveSessionWhacAMole/archive/master.zip) + +The latest editor can be found here: +[http://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/42_2015-11-13_08-16-46_0.7.4/](http://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/42_2015-11-13_08-16-46_0.7.4/) + +Download the editor archive, unpack, delete the wam.ogs folder, copy wam.ogs from the live session archive to the editor folder. + +* in Windows - run the `run.bat` file. +* in Linux and OSX - run the `run` file. + + diff --git a/en/news/2015-12-26_2016-roadmap.md b/en/news/2015-12-26_2016-roadmap.md new file mode 100644 index 0000000..f379153 --- /dev/null +++ b/en/news/2015-12-26_2016-roadmap.md @@ -0,0 +1,15 @@ +Title: Roadmap for 2016 +Date: 2015-12-26 00:00 +Category: News +Slug: 2016-roadmap +Lang: en + +As you know, according to the [previously published roadmap][roadmap-2015-2016], we now have sound system in place. However, we decided to go further and implement the first version of Player. We wanted to get it done by December, but, unfortunately, more work resulted in the change of dates. + +Here's the revised roadmap for the first half of 2016: + +1. Editor + Player 0.8.0 (January 2016): Sound system, Whac-a-mole game with sounds +1. Editor + Player 0.9.0 (April 2016): Networking system, simple ping pong game for 2 players over the net +1. Editor + Player 0.10.0 (July 2016): Polishing, "Shuan" prototype + +[roadmap-2015-2016]: 2015-roadmap.html diff --git a/en/news/2015-roadmap.html b/en/news/2015-roadmap.html index 444e3ad..f9e92bc 100644 --- a/en/news/2015-roadmap.html +++ b/en/news/2015-roadmap.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,38 +80,44 @@ -
-

In the news

-
-

- Roadmap for 2015-2016 -

-

- 2015-07-19 00:00 -

-
-

As promised, we have come up with a list of milestones and their approximate dates for the coming year:

-
    -
  1. Editor 0.7.0 (October 2015) - Actions’ system: we recreate the test chamber
  2. +
    +

    In the news...

    +
    +

    + Roadmap for 2015-2016 +

    +

    + 2015-07-19 00:00 +

    +
    +

    As promised, we have come up with a list of milestones and their approximate dates for the coming year:

    +
      +
    1. Editor 0.7.0 (October 2015) - Actions' system: we recreate the test chamber
    2. Editor 0.8.0 (December 2015) - Sound system
    3. -
    4. Editor 0.9.0 (February 2016) - Particles’ system and minimal UI
    5. +
    6. Editor 0.9.0 (February 2016) - Particles' system and minimal UI
    7. Editor 0.10.0, Player 0.1.0 (April 2016) - Player to play what Editor produced: we create Shuan prototype with our engine
    8. Editor 0.11.0, Player 0.2.0 (June 2016) - Networking: we create Classic 4-player Mahjong prototype
    -

    These approximate dates presume one coder spends 40 hours a month. That’s about 1 work week at full-time job. Not much, but that’s the only time we have.

    +

    These approximate dates presume one coder spends 40 hours a month. That's about 1 work week at full-time job. Not much, but that's the only time we have.

    We will post more details about Editor 0.7.0 shortly: we need to decide what features deserve 80 hours of our time for the next 2 months.

    - -
    +
+
diff --git a/en/news/2016-01-21_january-live-session-decision.md b/en/news/2016-01-21_january-live-session-decision.md new file mode 100644 index 0000000..151cbca --- /dev/null +++ b/en/news/2016-01-21_january-live-session-decision.md @@ -0,0 +1,9 @@ +Title: SOON: Creating a simple game live (Editor 0.8) +Date: 2016-01-21 00:00 +Category: News +Slug: january-live-session-decision +Lang: en + +We are ready to present Editor 0.8 with Player. The live session will be held at LiveCoding SOON. We will show you how to create a simple game with sounds from scratch. And this time it will not need an Editor to run. + +The exact date and time is to be announced in the coming days. Stay tuned! diff --git a/en/news/2016-01-25_january-live-session-announcement.md b/en/news/2016-01-25_january-live-session-announcement.md new file mode 100644 index 0000000..a244165 --- /dev/null +++ b/en/news/2016-01-25_january-live-session-announcement.md @@ -0,0 +1,7 @@ +Title: Game creation live session: 31 January 2016 +Date: 2016-01-25 00:00 +Category: News +Slug: january-live-session-announcement +Lang: en + +We're glad to annouce that the LiveCoding session will take place on 31 January 2016 at 12:00 CET. Join us! diff --git a/en/news/2016-02-02_rolling-ball-live-session-pt2.md b/en/news/2016-02-02_rolling-ball-live-session-pt2.md new file mode 100644 index 0000000..d9b8c73 --- /dev/null +++ b/en/news/2016-02-02_rolling-ball-live-session-pt2.md @@ -0,0 +1,9 @@ +Title: Game creation live session (part 2): 7 February 2016 +Date: 2016-02-02 00:00 +Category: News +Slug: rolling-ball-live-session-pt2 +Lang: en + +Unfortunately, we have failed to finish creation of the simple "Rolling ball" game in 3 hours. That's why we will hold the second LiveCoding session on 7 February 2016 at 12:00 CET. + +Let's finish the game! diff --git a/en/news/2016-02-10_rolling-ball.md b/en/news/2016-02-10_rolling-ball.md new file mode 100644 index 0000000..b8c9e0a --- /dev/null +++ b/en/news/2016-02-10_rolling-ball.md @@ -0,0 +1,27 @@ +Title: "Rolling ball" live session videos and downloads +Date: 2016-02-10 00:00 +Category: News +Slug: rolling-ball +Lang: en + +Since we held 2 live sessions to create "Rolling ball" game, here are 2 YouTube videos of the process: + + + + + + +"Rolling ball" game for Linux (Debian based), OS X (10.9+), Windows is available at SourceForge. + +Simply unpack it and launch the run script. + +Editor 0.8 is available at SourceForge, too. + +"Rolling ball" project for the Editor is available at GitHub. + +To open it in the Editor: + +* replace slideDown.ogs with rollingBall.ogs you downloaded +* rename rollingBall.ogs to slideDown.ogs + +Since live session took us so long, we decided to concentrate on polishing. Editor already has a lot of features, but their use is inconvenient. We will fix major obstacles for the next Editor release. diff --git a/en/news/2016-04-24_may-live-session-decision.md b/en/news/2016-04-24_may-live-session-decision.md new file mode 100644 index 0000000..7005cb8 --- /dev/null +++ b/en/news/2016-04-24_may-live-session-decision.md @@ -0,0 +1,12 @@ +Title: May live session (Editor 0.9) +Date: 2016-04-24 00:00 +Category: News +Slug: may-live-session-decision +Lang: en + +As you know, the previously published roadmap assumed, that we would hold a live session in April and it would feature a ping-pong game created with Editor 0.9. + +We have to admit, our abilities to plan are not yet good enough. That's why the next live session will take place by the end of May. The exact date will be announced later. + +Here's a short preview of the coming game: + diff --git a/en/news/2016-05-17_may-live-session-announcement.md b/en/news/2016-05-17_may-live-session-announcement.md new file mode 100644 index 0000000..ccb4b24 --- /dev/null +++ b/en/news/2016-05-17_may-live-session-announcement.md @@ -0,0 +1,7 @@ +Title: Live session: 28 May 2016 +Date: 2016-05-17 00:00 +Category: News +Slug: may-live-session-announcement +Lang: en + +We're glad to annouce that the LiveCoding session will take place on 28 May 2016 at 12:00 CEST. Join us! diff --git a/en/news/2016-05-29_ogs-editor-0.9.md b/en/news/2016-05-29_ogs-editor-0.9.md new file mode 100644 index 0000000..499e64c --- /dev/null +++ b/en/news/2016-05-29_ogs-editor-0.9.md @@ -0,0 +1,14 @@ +Title: May 2016 live session materials +Date: 2016-05-29 00:00 +Category: News +Slug: ogs-editor-0.9 +Lang: en + + +This time we have shown how to create a simple Domino based game. Below you can find all materials related to the game creation. + +1. Editor 0.9 for Linux (Debian based), OS X (10.9+), Windows is available at SourceForge. Simply unpack it and launch the run script. +2. Domino project created during live session is available at GitHub. +3. Domino rehearsal videos referenced during live session are available at YouTube + +The next live session will be held in September 2016. diff --git a/en/news/2016-08-10_once-mahjong-always-mahjong.md b/en/news/2016-08-10_once-mahjong-always-mahjong.md new file mode 100644 index 0000000..8cca02a --- /dev/null +++ b/en/news/2016-08-10_once-mahjong-always-mahjong.md @@ -0,0 +1,15 @@ +Title: Once Mahjong – always Mahjong +Date: 2016-08-10 00:00 +Category: News +Slug: once-mahjong-always-mahjong +Lang: en + +We started Opensource Game Studio project a long time ago. We wanted to provide open source community with tools to create games. However, it was unclear what tools' purpose was. So we decided to start small: create a game first. + +It took us 3 years to reach the first goal: we released OGS Mahjong 1.0 in 2012. Even for a hobby project (we spend about 40 hours a month) it's too long. + +Upon the game release we got it: **Tools are means to save development time**. + +We spent 4 more years to develop them. Now is the time to prove they are worth every single day spent. How? We will **recreate Mahjong solitaire mode** in just a few hours! + +Join our next live session in September. diff --git a/en/news/2016-08-18_back-to-social-networks.md b/en/news/2016-08-18_back-to-social-networks.md new file mode 100644 index 0000000..ca8c878 --- /dev/null +++ b/en/news/2016-08-18_back-to-social-networks.md @@ -0,0 +1,9 @@ +Title: We’re back to social networks +Date: 2016-08-18 00:00 +Category: News +Slug: back-to-social-networks +Lang: en + +If you follow us on [Facebook](https://www.facebook.com/groups/162611230470183/), [Twitter](https://twitter.com/OpenGameStudio), or [VK](https://new.vk.com/opengamestudo) you noticed we started to use them again. That's no coincidence: we're finally ready to communicate our progress verbally after 4 years of almost silent development. + +Follow us to stay up-to-date! diff --git a/en/news/2016-09-03_2016-august-recap.md b/en/news/2016-09-03_2016-august-recap.md new file mode 100644 index 0000000..dd0749b --- /dev/null +++ b/en/news/2016-09-03_2016-august-recap.md @@ -0,0 +1,196 @@ +Title: August 2016 recap +Date: 2016-09-03 00:00 +Category: News +Slug: 2016-august-recap +Lang: en + +![OGS Editor with a spherical scene node][screenshot] + + +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. + +**UIQt module** is a collection of UI components backed by Qt. We only use it for Editor UI at the moment. + +Here is a list of UIQt module components with their description and current code size: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**№****Component****Description****Size (B)****Size (%)**
1UIQtActionActions (events) for menus112249
2UIQtAuxInitializes Qt and main window. Provides widget resolution by name to other components1551812
3UIQtDockWidget docks52734
4UIQtFileDialogFile selection dialogs89607
5UIQtMenuMenus for main window and pop-ups (like node's add/copy/paste/delete menu)45663
6UIQtMenuBarMenu bar for main window42223
7UIQtRunnerAllows to start QApplication24502
8UIQtThumbnailDialogDialog with thumbnail images1861514
9UIQtToolBarTool bar for main window42763
10UIQtTreeProvides complex widgets like Scene tree and Property browser5121639
11UIQtWidgetCommon widget properties like focus and visibility54654
+ +**UIQt module refactoring** 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. + +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. + +**Feature based development approach** 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 [quantitative complexity](http://kornerr.blogspot.com/2012/04/complexity-conservation-law-complexity.html) manifestation. + +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. + +Here is a list of current UIQtTree features: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**№****Feature****Description****Size (B)****Size (%)**
1BaseAllows to construct item hierarchy, modify it, and display it2696652
2Item open stateKeeps track of collapsed/expanded item properties30946
3Item renamingAllows to rename an item34717
4Item selectionAllows to get/set selected item23385
5Item valueProvides 2nd and the rest columns for items, used by Property browser13073
6Item value editingAllows to edit item values with a default editor widget19964
7Item value editing with comboboxProvides combobox editor581911
8Item value editing with spinnerProvides spinbox editor529010
9MenuProvides pop-up menu12482
+ +Here's an example of UIQtTree Menu feature file: [TREE_MENU](https://bitbucket.org/ogstudio-history/mjin-pre-pre/src/0c4cc3c3213f4687c0f3bd6a5426a6054cadd79b/f/TREE_MENU.cpp?at=Studio+0.10&fileviewer=file-view-default). + +**Benefits of the approach** include: + +1. Faster code reading/understanding due to small size +1. Easier and safer modification due to isolated code + + +There's a drawback, too: new approach requires learning. + +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. + +[screenshot]: ../../images/2016-09-03_august-recap.png diff --git a/en/news/2016-09-17_september-live-session-announcement.md b/en/news/2016-09-17_september-live-session-announcement.md new file mode 100644 index 0000000..cd49e03 --- /dev/null +++ b/en/news/2016-09-17_september-live-session-announcement.md @@ -0,0 +1,9 @@ +Title: Live session: 25 September 2016 +Date: 2016-09-17 00:00 +Category: News +Slug: september-live-session-announcement +Lang: en + + +We will hold [live session](https://www.livecoding.tv/kornerr) on [25 September 2016 at 12:00 CEST](http://www.timeanddate.com/worldclock/fixedtime.html?msg=Open+Game+Studio+September+2016+live+session&iso=20160925T12&p1=37&ah=2) +It's time to create simple Mahjong solitaire game. diff --git a/en/news/2016-09-24_september-live-session-announcement-tomorrow.md b/en/news/2016-09-24_september-live-session-announcement-tomorrow.md new file mode 100644 index 0000000..6161e3c --- /dev/null +++ b/en/news/2016-09-24_september-live-session-announcement-tomorrow.md @@ -0,0 +1,8 @@ +Title: Live session is in 24 hours +Date: 2016-09-24 00:00 +Category: News +Slug: september-live-session-announcement-tomorrow +Lang: en + + +Get ready for [live session](https://www.livecoding.tv/kornerr), it's about to happen in 24 hours! diff --git a/en/news/2016-09-26_yesterdays-live-session-short-overview.md b/en/news/2016-09-26_yesterdays-live-session-short-overview.md new file mode 100644 index 0000000..39d99d3 --- /dev/null +++ b/en/news/2016-09-26_yesterdays-live-session-short-overview.md @@ -0,0 +1,12 @@ +Title: A few words about live session yesterday +Date: 2016-09-26 00:00 +Category: News +Slug: yesterdays-live-session-short-overview +Lang: en + + +Mahjong Solitaire was successfully created, and it took less than 4 hours. + +We will publish live session materials later this week. + +Thank you for joining us. diff --git a/en/news/2016-10-03_ogs-editor-0.10.md b/en/news/2016-10-03_ogs-editor-0.10.md new file mode 100644 index 0000000..924c058 --- /dev/null +++ b/en/news/2016-10-03_ogs-editor-0.10.md @@ -0,0 +1,16 @@ +Title: OGS Editor 0.10 and live session materials +Date: 2016-10-03 00:00 +Category: News +Slug: ogs-editor-0.10 +Lang: en + +![OGS Editor with Mahjong game][screenshot] + +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. + +* **OGS Editor 0.10** [is available at SourceForge](https://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/51_2016-10-01_06-39-48_0.10.0/). Simply unpack the archive and launch the run script. +* **Mahjong Solitaire game** [is available at SourceForge](https://sourceforge.net/projects/osrpgcreation/files/Games/MahjongSolitaire/), too. Simply unpack the archive and launch the run script. +* **Live session project** [is available at GitHub](https://github.com/OGStudio/mahjong-solitaire-livesession). +* **Live session recording** [is available at YouTube](https://youtu.be/g8Tyj_YH2Qc?list=PLWMTZqE4MAMJzBnXS9qU_ObWnzJuskI3F). The video depicts the whole process of creating Mahjong Solitaire from scratch. + +[screenshot]: ../../images/2016-10-03_ogs-editor-0.10.png diff --git a/en/news/2016-10-11_2016-september-recap.md b/en/news/2016-10-11_2016-september-recap.md new file mode 100644 index 0000000..07bc000 --- /dev/null +++ b/en/news/2016-10-11_2016-september-recap.md @@ -0,0 +1,50 @@ +Title: September 2016 recap +Date: 2016-10-11 00:00 +Category: News +Slug: 2016-september-recap +Lang: en + +![Mahjong created during live session][screenshot] + + +This article explains September 2016 live session stages: draft, rehearsal, live session itself, and publishing. + +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. + +1. **Draft.** Game creation for the first time. + + Purposes: + + * test our technologies and fix major bugs; + * discover usability issues to fix in the next development iteration; + * list exact steps to reproduce the game later; + * create draft version of the game assets (models, textures, sounds, scripts). + + Upon stage completion, we announce live session date and show you the game preview. + +1. **Rehearsal.** Game recreation. + + Purposes: + + * make sure we have no major bugs left; + * record the whole process of the game creation; + * create final game assets. + + This is 99% the game we publish later. + +1. **Live session.** Reassembling the game live in front of you. + + Purposes: + + * show how easy it is to create a game; + * walk you through nuances of game creation; + * get feedback from you; + * answer your questions. + + We take game assets from the rehearsal and use them to quickly reassemble the game in just a few hours. + +1. **Publishing.** The release of our technologies' last version, live session materials, and stand alone game. + +That's it for explaining September 2016 live session stages: draft, rehearsal, live session itself, and publishing. + +[screenshot]: ../../images/2016-10-11_september-recap.png diff --git a/en/news/2016-10-31_2016-tech-showcases.md b/en/news/2016-10-31_2016-tech-showcases.md new file mode 100644 index 0000000..8e6e16f --- /dev/null +++ b/en/news/2016-10-31_2016-tech-showcases.md @@ -0,0 +1,85 @@ +Title: Technology showcases +Date: 2016-10-31 00:00 +Category: News +Slug: 2016-tech-showcases +Lang: en + +![Feature file in the background][screenshot] + + +In this article, we take another look at 2015-2016 live sessions' format and introduce a new showcase format for 2017. + +**2015 and 2016: live sessions.** + +As you know, we use live sessions to show the state of our technology and create a small functional game from scratch. We have conducted four live sessions in the past year, which gave birth to the following small games: + + + + + + + + + + + + + + + + + + + + + + + + + + +
**№****Created game****Live session date**
1Whac-a-moleNovember 2015
2Rolling ballFebruary 2016
3DominoMay 2016
4Mahjong SolitaireSeptember 2016
+ +We spent four months to prepare for these live sessions. It has been an extremely useful experience for us. However, 2017 will have only 2 live sessions. Why? We want to spend more time on actual development! + +**2017: live sessions + technical previews.** + +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. + +Here's an approximate schedule of technical previews and live sessions for 2017: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
**№****Month****Showcase type****Topic**
1JanuaryTechnical previewAndroid platform support
2AprilLive sessionAndroid game creation
3JulyTechnical previewTo be announced
4OctoberLive sessionTo be announced
+ +That's it for taking another look at 2015-2016 live sessions' format and introducing the new showcase format for 2017. + +[screenshot]: ../../images/2016-10-31_tech-showcases.png diff --git a/en/news/2016-11-19_2016-october-recap.md b/en/news/2016-11-19_2016-october-recap.md new file mode 100644 index 0000000..04a8611 --- /dev/null +++ b/en/news/2016-11-19_2016-october-recap.md @@ -0,0 +1,54 @@ +Title: October 2016 recap +Date: 2016-11-19 00:00 +Category: News +Slug: 2016-october-recap +Lang: en + +![Gaining Android support was like climbing a mountain for us][screenshot] + + +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. + +**First attempt to build OSG.** + +Having no prior knowledge of Android development, we grabbed the latest Android Studio and started doing beginner tutorials. We passed Java part pretty fast. Everything worked out of the box. Then came C++ part and related problems. + +**CMake. **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. + +**KVM. **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. + +**Chroot for Android. **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. + +**OSG. **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. +Searching for the problem did not reveal any hint. +Nobody helped us at the OSG mailing list. + +We were in despair. + +**The search for OSG alternatives.** + +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). + +And we found it: [BabylonHX](http://babylonhx.gamestudiohx.com/). The home page looked awesome: it rendered WebGL in the background! We thought we finally found the gem we were looking for. However, the example on the home page simply did not work. + +You can probably understand our feelings at the time. + +**The success in building OSG.** + +We realized nobody would make OSG work under Android for us. We had to do it ourselves. + +Since [OSG 3.4 document](http://www.openscenegraph.org/index.php/documentation/platform-specifics/android/178-building-openscenegraph-for-android-3-4) on building for Android was very short, we no longer trusted it and headed to [original OSG 3.0 document](http://www.openscenegraph.org/index.php/documentation/platform-specifics/android/44-building-openscenegraph-for-android-3-0-3-0-1). While following it, we faced a dead link to third party dependencies. The search for an alternative download link lead us to a [2013 tutorial](https://xinyustudio.wordpress.com/2013/09/24/install-osg-for-android-on-ubuntu-13-04-step-by-step-tutorials/) on building OSG 3.0 for Android. + +After following the tutorial, we finally got OSG to run under Android! But there was a nuance: both OSG and Android tools used in the tutorial were ancient. In a few days, we gradually updated both OSG and Android tools to their latest versions. + +During the update process, we learned two things that prevented us from having OSG to work in the first place: + +* Android API headers changed in NDK r12 +* OSG only works as a static library under Android + + + +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. + +[screenshot]: ../../images/2016-11-19_2016-october-recap.png + diff --git a/en/news/2016-12-15_2016-november-recap.md b/en/news/2016-12-15_2016-november-recap.md new file mode 100644 index 0000000..4b76b91 --- /dev/null +++ b/en/news/2016-12-15_2016-november-recap.md @@ -0,0 +1,47 @@ +Title: November 2016 recap +Date: 2016-12-15 00:00 +Category: News +Slug: 2016-november-recap +Lang: en + +![Construction of a building][screenshot] + + +This article describes the start of MJIN library separation into modules. + +Once we built OpenSceneGraph for Android, it became obvious that some MJIN functionality is not suitable for Android. For example, UIQt provides a basis for OGS Editor UI. Since OGS Editor is a desktop application, we don't need UIQt for Android. + +We decided to have a look at two approaches to separate MJIN into modules: build-time separation and run-time one. +**Build-time** separation means MJIN becomes highly configurable and each platform gets specifically tailored MJIN build. +**Run-time** separation means MJIN is divided into smaller libraries that are connected at run-time, which makes it easy to change functionality without rebuilding. + +**Run-time separation research.** + +Since run-time separation has more benefits, we started researching it first. The easiest way to achieve it was to use C API, because C ABI rules are much simpler than C++ one's. + +We created a sample project consisting of the application, library, and plugin: + +* **The application** has been linked to the library and used it to load the plugin. +* **The library** provided functions to register plugins and call their functions. +* **The plugin** provided functions for the library and called library functions. + +The research was successful: the sample project worked correctly under Linux and Windows. However, since MJIN is currently a single large entity, we postponed C API application until we finish build-time separation. + +**Build-time separation start.** + +We extracted the following modules from MJIN: + +* Android: provides Java Native Interface (JNI) to MJIN +* Sound: provides access to OpenAL +* UIQt: provides access to Qt UI + + + + +Sound and UIQt modules are currently statically linked into MJIN library, while Android module is already a separate library due to JNI requirements. + +In the coming year, we're going to significantly restructure MJIN so that it suits as many platforms as possible. + +That's it for describing the start of MJIN library separation into modules. + +[screenshot]: ../../images/2016-12-15_2016-november-recap.png diff --git a/en/news/2016-12-31_2017-happy-new-year.md b/en/news/2016-12-31_2017-happy-new-year.md new file mode 100644 index 0000000..c19dbf4 --- /dev/null +++ b/en/news/2016-12-31_2017-happy-new-year.md @@ -0,0 +1,24 @@ +Title: Happy 2017 +Date: 2016-12-31 00:00 +Category: News +Slug: 2017-happy-new-year +Lang: en + +![Christmas tree][screenshot] + +Okay. It's been a hard year for everyone in the team. And it's almost over. Praise it ends! Praise the new one! + +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. + +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. + +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. + +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. +So. You want our game to become a reality? Join us. Together we will rule the galaxy. Or just wait and see. We didn't stop several years ago. We won't stop now. +After all, there is only one way to create a fine tool (and it's our initial goal if you remember) - we need to use it ourselves. +We will. Stay tuned. + +Happy 2017. Let it be simple. + +[screenshot]: ../../images/2016-12-31_happy-new-year.png diff --git a/en/news/2016-august-recap.html b/en/news/2016-august-recap.html index 93a1233..4cdc6a1 100644 --- a/en/news/2016-august-recap.html +++ b/en/news/2016-august-recap.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,237 +80,116 @@ -
-

In the news

-
-

- August 2016 recap -

-

- 2016-09-03 00:00 -

-
-
-OGS Editor with a spherical scene node
OGS Editor with a spherical scene node
-
+
+

In the news...

+
+

+ August 2016 recap +

+

+ 2016-09-03 00:00 +

+
+

OGS Editor with a spherical scene node

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.

UIQt module is a collection of UI components backed by Qt. We only use it for Editor UI at the moment.

-Here is a list of UIQt module components with their description and current code size: - +

Here is a list of UIQt module components with their description and current code size:

- - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + -
- - -Component - -Description - -Size (B) - -Size (%) -ComponentDescriptionSize (B)Size (%)
-1 - -UIQtAction - -Actions (events) for menus - -11224 - -9 -1UIQtActionActions (events) for menus112249
-2 - -UIQtAux - -Initializes Qt and main window. Provides widget resolution by name to other components - -15518 - -12 -2UIQtAuxInitializes Qt and main window. Provides widget resolution by name to other components1551812
-3 - -UIQtDock - -Widget docks - -5273 - -4 -3UIQtDockWidget docks52734
-4 - -UIQtFileDialog - -File selection dialogs - -8960 - -7 -4UIQtFileDialogFile selection dialogs89607
-5 - -UIQtMenu - -Menus for main window and pop-ups (like node’s add/copy/paste/delete menu) - -4566 - -3 -5UIQtMenuMenus for main window and pop-ups (like node's add/copy/paste/delete menu)45663
-6 - -UIQtMenuBar - -Menu bar for main window - -4222 - -3 -6UIQtMenuBarMenu bar for main window42223
-7 - -UIQtRunner - -Allows to start QApplication - -2450 - -2 -7UIQtRunnerAllows to start QApplication24502
-8 - -UIQtThumbnailDialog - -Dialog with thumbnail images - -18615 - -14 -8UIQtThumbnailDialogDialog with thumbnail images1861514
-9 - -UIQtToolBar - -Tool bar for main window - -4276 - -3 -9UIQtToolBarTool bar for main window42763
-10 - -UIQtTree - -Provides complex widgets like Scene tree and Property browser - -51216 - -39 -10UIQtTreeProvides complex widgets like Scene tree and Property browser5121639
-11 - -UIQtWidget - -Common widget properties like focus and visibility - -5465 - -4 -11UIQtWidgetCommon widget properties like focus and visibility54654
+

UIQt module refactoring 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.

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.

Feature based development approach 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 quantitative complexity manifestation.

@@ -326,187 +197,91 @@ Common widget properties like focus and visibility

Here is a list of current UIQtTree features:

- - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + +
- - -Feature - -Description - -Size (B) - -Size (%) -**№****Feature****Description****Size (B)****Size (%)**
-1 - -Base - -Allows to construct item hierarchy, modify it, and display it - -26966 - -52 -1BaseAllows to construct item hierarchy, modify it, and display it2696652
-2 - -Item open state - -Keeps track of collapsed/expanded item properties - -3094 - -6 -2Item open stateKeeps track of collapsed/expanded item properties30946
-3 - -Item renaming - -Allows to rename an item - -3471 - -7 -3Item renamingAllows to rename an item34717
-4 - -Item selection - -Allows to get/set selected item - -2338 - -5 -4Item selectionAllows to get/set selected item23385
-5 - -Item value - -Provides 2nd and the rest columns for items, used by Property browser - -1307 - -3 -5Item valueProvides 2nd and the rest columns for items, used by Property browser13073
-6 - -Item value editing - -Allows to edit item values with a default editor widget - -1996 - -4 -6Item value editingAllows to edit item values with a default editor widget19964
-7 - -Item value editing with combobox - -Provides combobox editor - -5819 - -11 -7Item value editing with comboboxProvides combobox editor581911
-8 - -Item value editing with spinner - -Provides spinbox editor - -5290 - -10 -8Item value editing with spinnerProvides spinbox editor529010
-9 - -Menu - -Provides pop-up menu - -1248 - -2 -9MenuProvides pop-up menu12482
-

Here’s an example of UIQtTree Menu feature file: TREE_MENU.

+

Here's an example of UIQtTree Menu feature file: TREE_MENU.

Benefits of the approach include:

-
    +
    1. Faster code reading/understanding due to small size
    2. Easier and safer modification due to isolated code
    -

    There’s a drawback, too: new approach requires learning.

    -

    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.

    - -
+

There's a drawback, too: new approach requires learning.

+

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.

+
+
diff --git a/en/news/2016-november-recap.html b/en/news/2016-november-recap.html index 7419649..48104b4 100644 --- a/en/news/2016-november-recap.html +++ b/en/news/2016-november-recap.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,33 +80,35 @@ -
-

In the news

-
-

- November 2016 recap -

-

- 2016-12-15 00:00 -

-
-
-Construction of a building
Construction of a building
-
+
+

In the news...

+
+

+ November 2016 recap +

+

+ 2016-12-15 00:00 +

+
+

Construction of a building

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

-

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

-

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

+

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

+

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

Run-time separation research.

-

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

+

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

We created a sample project consisting of the application, library, and plugin:

  • The application has been linked to the library and used it to load the plugin.
  • @@ -130,11 +124,15 @@
  • UIQt: provides access to Qt UI

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

-

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

-

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

- -
+

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

+

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

+
+
diff --git a/en/news/2016-october-recap.html b/en/news/2016-october-recap.html index de7b296..549d301 100644 --- a/en/news/2016-october-recap.html +++ b/en/news/2016-october-recap.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,35 +80,37 @@ -
-

In the news

-
-

- October 2016 recap -

-

- 2016-11-19 00:00 -

-
-
-Gaining Android support was like climbing a mountain for us
Gaining Android support was like climbing a mountain for us
-
+
+

In the news...

+
+

+ October 2016 recap +

+

+ 2016-11-19 00:00 +

+
+

Gaining Android support was like climbing a mountain for us

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.

First attempt to build OSG.

Having no prior knowledge of Android development, we grabbed the latest Android Studio and started doing beginner tutorials. We passed Java part pretty fast. Everything worked out of the box. Then came C++ part and related problems.

-

CMake. 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.

-

KVM. 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.

-

Chroot for Android. 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.

-

OSG. 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. Searching for the problem did not reveal any hint. Nobody helped us at the OSG mailing list.

+

**CMake. **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.

+

**KVM. **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.

+

**Chroot for Android. **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.

+

**OSG. **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. +Searching for the problem did not reveal any hint. +Nobody helped us at the OSG mailing list.

We were in despair.

The search for OSG alternatives.

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).

@@ -131,10 +125,14 @@
  • Android API headers changed in NDK r12
  • OSG only works as a static library under Android
  • -

    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.

    - -
    +

    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.

    +
    +
    diff --git a/en/news/2016-roadmap.html b/en/news/2016-roadmap.html index 5c20ede..a3d6222 100644 --- a/en/news/2016-roadmap.html +++ b/en/news/2016-roadmap.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,35 +80,41 @@ -
    -

    In the news

    -
    -

    - Roadmap for 2016 -

    -

    - 2015-12-26 00:00 -

    -
    -

    As you know, according to the previously published roadmap, we now have sound system in place. However, we decided to go further and implement the first version of Player. We wanted to get it done by December, but, unfortunately, more work resulted in the change of dates.

    -

    Here’s the revised roadmap for the first half of 2016:

    -
      +
      +

      In the news...

      +
      +

      + Roadmap for 2016 +

      +

      + 2015-12-26 00:00 +

      +
      +

      As you know, according to the previously published roadmap, we now have sound system in place. However, we decided to go further and implement the first version of Player. We wanted to get it done by December, but, unfortunately, more work resulted in the change of dates.

      +

      Here's the revised roadmap for the first half of 2016:

      +
      1. Editor + Player 0.8.0 (January 2016): Sound system, Whac-a-mole game with sounds
      2. Editor + Player 0.9.0 (April 2016): Networking system, simple ping pong game for 2 players over the net
      3. -
      4. Editor + Player 0.10.0 (July 2016): Polishing, “Shuan” prototype
      5. +
      6. Editor + Player 0.10.0 (July 2016): Polishing, "Shuan" prototype
      - -
      +
    +
    diff --git a/en/news/2016-september-recap.html b/en/news/2016-september-recap.html index 852c7df..b6c0187 100644 --- a/en/news/2016-september-recap.html +++ b/en/news/2016-september-recap.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,47 +80,45 @@ -
    -

    In the news

    -
    -

    - September 2016 recap -

    -

    - 2016-10-11 00:00 -

    -
    -
    -Mahjong created during live session
    Mahjong created during live session
    -
    +
    +

    In the news...

    +
    +

    + September 2016 recap +

    +

    + 2016-10-11 00:00 +

    +
    +

    Mahjong created during live session

    This article explains September 2016 live session stages: draft, rehearsal, live session itself, and publishing.

    -

    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.

    -
      +

      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.

      +
      1. Draft. Game creation for the first time.

        Purposes:

        • test our technologies and fix major bugs;
        • discover usability issues to fix in the next development iteration;
        • list exact steps to reproduce the game later;
        • -
        • create draft version of the game assets (models, textures, sounds, scripts).
        • -
        +
      2. create draft version of the game assets (models, textures, sounds, scripts).
      3. Upon stage completion, we announce live session date and show you the game preview.

      4. Rehearsal. Game recreation.

        Purposes:

        • make sure we have no major bugs left;
        • record the whole process of the game creation;
        • -
        • create final game assets.
        • -
        +
      5. create final game assets.
      6. This is 99% the game we publish later.

      7. Live session. Reassembling the game live in front of you.

        Purposes:

        @@ -136,15 +126,18 @@
      8. show how easy it is to create a game;
      9. walk you through nuances of game creation;
      10. get feedback from you;
      11. -
      12. answer your questions.
      13. - +
      14. answer your questions.
      15. We take game assets from the rehearsal and use them to quickly reassemble the game in just a few hours.

        -
      16. Publishing. The release of our technologies’ last version, live session materials, and stand alone game.

      17. +
      18. Publishing. The release of our technologies' last version, live session materials, and stand alone game.

      -

      That’s it for explaining September 2016 live session stages: draft, rehearsal, live session itself, and publishing.

      - -
    +

    That's it for explaining September 2016 live session stages: draft, rehearsal, live session itself, and publishing.

    +
    +
    diff --git a/en/news/2016-tech-showcases.html b/en/news/2016-tech-showcases.html index 52a670b..e1d68c2 100644 --- a/en/news/2016-tech-showcases.html +++ b/en/news/2016-tech-showcases.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,168 +80,102 @@ -
    -

    In the news

    -
    -

    - Technology showcases -

    -

    - 2016-10-31 00:00 -

    -
    -
    -Feature file in the background
    Feature file in the background
    -
    -

    In this article, we take another look at 2015-2016 live sessions’ format and introduce a new showcase format for 2017.

    +
    +

    In the news...

    +
    +

    + Technology showcases +

    +

    + 2016-10-31 00:00 +

    +
    +

    Feature file in the background

    +

    In this article, we take another look at 2015-2016 live sessions' format and introduce a new showcase format for 2017.

    2015 and 2016: live sessions.

    -As you know, we use live sessions to show the state of our technology and create a small functional game from scratch. We have conducted four live sessions in the past year, which gave birth to the following small games: +

    As you know, we use live sessions to show the state of our technology and create a small functional game from scratch. We have conducted four live sessions in the past year, which gave birth to the following small games:

    - - - + + + - - - + + + - - - + + + - - - + + + - - - + + +
    - - -Created game - -Live session date -**№****Created game****Live session date**
    -1 - -Whac-a-mole - -November 2015 -1Whac-a-moleNovember 2015
    -2 - -Rolling ball - -February 2016 -2Rolling ballFebruary 2016
    -3 - -Domino - -May 2016 -3DominoMay 2016
    -4 - -Mahjong Solitaire - -September 2016 -4Mahjong SolitaireSeptember 2016

    We spent four months to prepare for these live sessions. It has been an extremely useful experience for us. However, 2017 will have only 2 live sessions. Why? We want to spend more time on actual development!

    2017: live sessions + technical previews.

    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.

    -Here’s an approximate schedule of technical previews and live sessions for 2017: +

    Here's an approximate schedule of technical previews and live sessions for 2017:

    - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + +
    - - -Month - -Showcase type - -Topic -**№****Month****Showcase type****Topic**
    -1 - -January - -Technical preview - -Android platform support -1JanuaryTechnical previewAndroid platform support
    -2 - -April - -Live session - -Android game creation -2AprilLive sessionAndroid game creation
    -3 - -July - -Technical preview - -To be announced -3JulyTechnical previewTo be announced
    -4 - -October - -Live session - -To be announced -4OctoberLive sessionTo be announced
    -

    That’s it for taking another look at 2015-2016 live sessions’ format and introducing the new showcase format for 2017.

    - -
    +

    That's it for taking another look at 2015-2016 live sessions' format and introducing the new showcase format for 2017.

    +
    +
    diff --git a/en/news/2017-01-25_the-year-of-challenges.md b/en/news/2017-01-25_the-year-of-challenges.md new file mode 100644 index 0000000..d0580db --- /dev/null +++ b/en/news/2017-01-25_the-year-of-challenges.md @@ -0,0 +1,31 @@ +Title: The year of challenges +Date: 2017-01-25 00:00 +Category: News +Slug: the-year-of-challenges +Lang: en + +![Rocket launch at Baikonur][screenshot] + + +This article describes our plans for 2017. + +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: + +![Rendering cubes on Android][android-rendering] + +Some people would consider this a failure. We don't. We see a chance to start low and jump high! + +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. +At the same time, such a harsh environment highlighted weak spots in our technologies and helped us see where to go next. + +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. + +And right after we get those cubes rendered on iOS, we start to work on bringing them to Web. + +**You got it right: we challenge ourselves with support for Android, iOS, and Web this year.** + +That's it for describing our plans for 2017. + +[screenshot]: ../../images/2017-01_the-year-of-challenges.png +[android-rendering]: ../../images/2017-01_mjin-android-gles.png + diff --git a/en/news/2017-03-16_lets-go.md b/en/news/2017-03-16_lets-go.md new file mode 100644 index 0000000..38f0f62 --- /dev/null +++ b/en/news/2017-03-16_lets-go.md @@ -0,0 +1,48 @@ +Title: Let's go +Date: 2017-03-16 00:00 +Category: News +Slug: lets-go +Lang: en + +![Gagarin's words][screenshot] + + +In this article we describe our progress in January and February of 2017: rendering under iOS/Web and a new tutorial tool. + +**Rendering under iOS/Web** + +To our surprise, we got a simple red cube rendered under [iOS](https://twitter.com/OpenGameStudio/status/826816343433498627) and [Web](https://twitter.com/OpenGameStudio/status/829731986264698881) 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. + +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. + + +**Tutorial tool** + +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. + +To combine text and video, we first tried [OpenShot](http://openshotvideo.com). It worked well, but we quickly saw its limitations: + +* Too much time is spent on adjusting time frames and animations +* Project file and original resources are hard to track with VCS + + + +Since OpenSceneGraph cross-platform guide would consist of several tutorials, we decided to automate the process. Brief research revealed a great multimedia framework called [MLT](http://mltframework.org), which powers OpenShot itself. With MLT we got our tutorial tool in no time. + +Currently, the tutorial tool allows anyone to combine text and video using a simple text file like this: +``` +background bg.png +text 5 Let's install Blender +video 0:6 install_blender.mp4 +text 5 Installing it with apt +video 6:26 install_blender.mp4 +text 5 We're still installing it +video 26:56 install_blender.mp4 +text 5 Congratulations! We just finished installing Blender +``` + +This is the actual script. See the final result [here](https://github.com/ogstudio/tutorial-tool). + +That's it for describing our progress in January and February of 2017: rendering under iOS/Web and the new tutorial tool. + +[screenshot]: ../../images/2017-03_lets-go.png diff --git a/en/news/2017-04-07_its-all-fine.md b/en/news/2017-04-07_its-all-fine.md new file mode 100644 index 0000000..f3a65a0 --- /dev/null +++ b/en/news/2017-04-07_its-all-fine.md @@ -0,0 +1,35 @@ +Title: It's all fine +Date: 2017-04-07 00:00 +Category: News +Slug: its-all-fine +Lang: en + +![Flight of a rocket][screenshot] + + +This article describes creation of the first four OpenSceneGraph tutorials in March 2017. + +The [first four OpenSceneGraph tutorials](https://github.com/OGStudio/openscenegraph-cross-platform-guide/) explain how to create a cube model with Blender and display the model under Linux, macOS, or Windows using OpenSceneGraph tool called osgviewer. + +The whole process of creating a single tutorial turned out to be pretty daunting because it includes several tasks: + +1. Record original video depicting one or more steps +1. Name the steps as clear as possible +1. Select the parts of the video that display the step +1. Remove the parts of the video that bare no value, e.g., waiting in the middle of compilation +1. Select a single frame to best represent current step, e.g., typing a specific command +1. Add a detailed description to article, why current step should have been taken +1. Proof-read the article +1. Correct typos and video timing +1. Review the whole video +1. Upload the video to YouTube with timestamps of steps for easier navigation + + + +Some of those tasks had to be repeated multiple times until the combination of video, text, and article was clear and logical. + +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. + +That's it for describing creation of the first four OpenSceneGraph tutorials in March 2017. + +[screenshot]: ../../images/2017-04_its-all-fine.png diff --git a/en/news/2017-05-12_osg-sample.md b/en/news/2017-05-12_osg-sample.md new file mode 100644 index 0000000..24b8cd6 --- /dev/null +++ b/en/news/2017-05-12_osg-sample.md @@ -0,0 +1,60 @@ +Title: OpenSceneGraph sample +Date: 2017-05-12 00:00 +Category: News +Slug: osg-sample +Lang: en + +![Rocket in the distance][screenshot] + + +This article describes creation of the tutorials for building sample OpenSceneGraph application under Linux, macOS, Windows, and Android in April 2017. + +Previous tutorials described how to install OpenSceneGraph under Linux, macOS, Windows and render a model using the standard **osgviewer** tool. This time we worked on a [sample OpenSceneGraph application](https://github.com/OGStudio/openscenegraph-cross-platform-guide-application) that would run under Linux, macOS, Windows, and Android. + +The application is very basic and has the following features: + +1. Render window creation +1. Model loading +1. Model rendering with simple GLSL shaders +1. Model motion with a mouse under Linux, macOS, Windows and a finger under Android + + + +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. + +Our [first successful Android build][oct16_article] last year included hacks and non-obvious steps to make OpenSceneGraph run under Android. This time we wanted a cleaner, faster, and cheaper approach. + +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. + +Here's a quick rundown of the files: + +1. GLES2 surface +1. Render activity to render to the surface +1. Native library Java interface +1. Native library C++ implementation +1. CMake file to build native library +1. Render activity layout +1. Model to display + + + +Here's a quick rundown of the project changes: + +1. Update Android manifest to use GLES2 and render activity +1. Reference native library's CMake file in the project's CMake file + + + +OpenSceneGraph documentation suggests building OpenSceneGraph outside Android Studio with CMake. However, this approach has the following limitations: + +1. You have to build OpenSceneGraph for each target architecture +1. You have to manually copy/reference built OpenSceneGraph libraries into Android Studio project + + + +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. + +That's it for describing the creation of the tutorials for building sample OpenSceneGraph application under Linux, macOS, Windows, and Android in April 2017. + +[screenshot]: ../../images/2017-05_osg-sample.png +[oct16_article]: 2016-october-recap.html diff --git a/en/news/2017-06-08-ios-refactoring.md b/en/news/2017-06-08-ios-refactoring.md new file mode 100644 index 0000000..5cab6bd --- /dev/null +++ b/en/news/2017-06-08-ios-refactoring.md @@ -0,0 +1,50 @@ +Title: iOS tutorial +Date: 2017-06-08 10:00 +Category: News +Slug: ios-tutorial +Lang: en + +![Earth and a rocket](../../images/2017-06-08-ios-refactoring.png) + +This article describes problems we faced during the creation of iOS tutorial in May 2017. + +[This February](https://twitter.com/OpenGameStudio/status/826816343433498627) 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. + +**Native library** + +The first question we had to answer was: should the sample application be part of Xcode project or be a separately built library? + +We had to consider the following facts: + +1. Xcode project can use C++ directly (thanks to Objective-C++) without stuff like JNI + * There's no need for a separate library (+ application) + * Creating a separate library is an additional work (- library) +1. OpenSceneGraph builds libraries + * It's easier to use standard build process (+ library) + * It's harder to create custom build process just for a single platform (- application) +1. OpenSceneGraph uses CMake build system, which is not supported by Xcode + * Xcode project can't include CMake files (- application) + * It's easy to create custom CMake file that includes OpenSceneGraph CMake file to build a single library (+ library) +1. CMake can generate Xcode project + * It's possible to create a CMake file that builds both OpenSceneGraph and the sample application (+ application) + * Xcode is the de-facto tool to create Xcode projects; it's easier to use standard build process (+ library) + +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. + +**Refactoring** + +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? + +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. + +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. + +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: + +1. functions.h - contains reusable classless functions +1. main.h - contains the rest of the sample application code + +Their contents differ slightly for each platform, but it's easy to see the whole picture now. + +That's it for describing problems we faced during the creation of iOS tutorial in May 2017. + diff --git a/en/news/2017-07-openscenegraph-guide.md b/en/news/2017-07-openscenegraph-guide.md new file mode 100644 index 0000000..23b7b13 --- /dev/null +++ b/en/news/2017-07-openscenegraph-guide.md @@ -0,0 +1,31 @@ +Title: OpenSceneGraph cross-platform guide +Date: 2017-07-17 00:00 +Category: News +Slug: openscenegraph-cross-platform-guide +Lang: en + +![OpenSceneGraph sample application in desktop and mobile](../../images/2017-07-openscenegraph-guide.png) + +This article summarizes the work we did to produce OpenSceneGraph cross-platform guide. + +June marked the finish of [OpenSceneGraph cross-platform guide](https://github.com/OGStudio/openscenegraph-cross-platform-guide) with the publishing of the last (initially planned) tutorial. The tutorial describes [how to build and run sample OpenSceneGraph application in Web](https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb) using Emscripten. +In case you missed it, here's a [link to the final application](https://ogstudio.github.io/openscenegraph-cross-platform-guide/). Open it in your web browser. + +We started to compose the guide in February when we successfully managed to render a simple model on mobile and web. We spent 120 hours in five months to produce ten tutorials of the guide. + +We have been doing OpenSceneGraph cross-platform guide for two main reasons: + +1. Keep OpenSceneGraph cross-platform knowledge in easily accessible and reproducible form +1. Share the knowledge with OpenSceneGraph community to make it stronger + +We believe we succeeded in both. Here's why: + +1. The guide repository has more [stars](https://github.com/OGStudio/openscenegraph-cross-platform-guide/stargazers) (aka "likes") than any other repository of ours +1. OpenSceneGraph project leader Robert Osfield said ["Great work"](http://www.mail-archive.com/osg-users@lists.openscenegraph.org/msg74815.html), which means a lot +1. The guide already has [two issues](https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues) + +Reaching our goal of researching OpenSceneGraph cross-platform development and providing the knowledge back to the community just made us happier. + +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 [promised in January](the-year-of-challenges.html). + +That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide. diff --git a/en/news/2017-08-scripting-research.md b/en/news/2017-08-scripting-research.md new file mode 100644 index 0000000..7de8284 --- /dev/null +++ b/en/news/2017-08-scripting-research.md @@ -0,0 +1,62 @@ +Title: Scripting research +Date: 2017-08-16 00:00 +Category: News +Slug: scripting-research +Lang: en + +![Textbook with a text](../../images/2017-08-scripting-research.png) + +This article describes scripting research in July 2017. + +**Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.** + +OGS Editor 0.10 supports Python for such a code thanks to [SWIG](http://swig.org/). 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. + +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 [Kivy](https://kivy.org), 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. + +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. + +**Our secondary goal for using a scripting language was to allow to extend C++ code.** + +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. + +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. +Technically such behaviour is achieved by inheriting a base class and overriding its methods in both C++ and a scripting language. + +**First, we evaluated Python for the role of cross-platform scripting language.** + +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. +We also had a look at [PyPy](http://pypy.org), another Python implementation. It also did not mention support for mobile and web platforms. + +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. + +**Second, we evaluated [Wren](http://wren.io) for the role of cross-platform scripting language.** + +Wren was the first scripting language we stumbled upon in the long list of non-mainstream scripting languages. + +Wren claimed to be small and easy to learn. Wren also claimed to be intended for embedding in applications. Ironically, the author [had no time to document how to do the embedding in the first place](http://wren.io/embedding-api.html). When [we asked for the time estimates of publishing](https://github.com/munificent/wren/issues/465) the critical part of the documentation, [we just got a reference to another issue](https://github.com/munificent/wren/issues/402) where the other guy was asking the same question half a year ago! + +That's when we ended our relationship with Wren. + +**Third, we evaluated [Chai](http://chaiscript.com) for the role of cross-platform scripting language.** + +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. +We successfully managed to call a C++ function from inside Chai but failed to call a member function. [We asked for help](http://discourse.chaiscript.com/t/cannot-call-a-function-that-accepts-a-string-and-a-vector/334), but nobody replied. + +We had to end our relationship with Chai. + +**Fourth, we evaluated Lua for the role of cross-platform scripting language.** + +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 [C API](https://www.lua.org/pil/24.html) chapter we had no clue how to inherit a class inside Lua. + +This led us to search for libraries that wrap Lua C API syntax into something more meaningful for C++. That's how we found [Sol2](http://sol2.rtfd.io). Just as before, the first attempt to call a C++ member function from Lua failed. But unlike before, we asked for help and [got the help](https://github.com/ThePhD/sol2/issues/465)! This was a refreshing surprise for us. +Next, we tried to inherit a class in Lua and override the class methods. We failed, but [the author helped us out again](https://github.com/ThePhD/sol2/issues/468). In the end, we succeeded in inheriting a class and overriding its behaviour. + +That's when we understood it's a start for a long and mutual relationship with Sol2/Lua. + +**This search for a scripting language taught us one important lesson: people matter, not technologies.** + +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. + +That's it for describing scripting research in July 2017. + diff --git a/en/news/2017-09-mjin-world-birth.md b/en/news/2017-09-mjin-world-birth.md new file mode 100644 index 0000000..0a9058b --- /dev/null +++ b/en/news/2017-09-mjin-world-birth.md @@ -0,0 +1,38 @@ +Title: The birth of MJIN world +Date: 2017-09-10 00:00 +Category: News +Slug: mjin-world-birth +Lang: en + +![An explosion giving birth to something new](../../images/2017-09-mjin-world-birth.png) + +This article describes the birth of MJIN world in August 2017. + +**mjin-player** + +As you know, [we spent July to research scripting](scripting-research.html). We found a solution that satisfies the following criteria. Scripts should: + +1. run unchanged on all supported platforms +1. allow extending C++ code + +We have verified the second criterion by writing a sample application. The first criterion was taken for granted because it SHOULD be true. + +At the time, we saw two ways to verify the first criterion: + +1. create one sample application for each platform to verify scripting only +1. create a single cross-platform application, which can run any code + +We chose the second approach because it is more beneficial in the long run. As you might have guessed, [mjin-player](https://bitbucket.org/ogstudio/mjin-player) is that application. + +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. + +**mjin-application** + +This set of rules for MJIN projects is packaged into [mjin-application](https://bitbucket.org/ogstudio/mjin-application). 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. + +**MJIN world** + +So what is [MJIN world](https://bitbucket.org/ogstudio/mjin)? 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. + +That's it for describing the birth of MJIN world in August 2017. + diff --git a/en/news/2017-10-16-back-to-the-static.md b/en/news/2017-10-16-back-to-the-static.md new file mode 100644 index 0000000..81ea016 --- /dev/null +++ b/en/news/2017-10-16-back-to-the-static.md @@ -0,0 +1,13 @@ +Title: Back to the Static +Date: 2017-10-16 00:00 +Category: News +Slug: back-to-the-static +Lang: en + +![Static and dynamic unite](../../images/2017-10-16-back-to-the-static.png) + +We have been using Wordpress as our website engine for more than seven years. And now it's time to move forward. Or backward. For some time we've been tracking the development of the new breed of website engines - static site generators. It seems that this is the technology capable of changing past into future. + +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. So, we are starting our site anew with the help of the [Pelican](https://blog.getpelican.com/). + +Right now it doesn't have all the content from our old site, but we'll add most of it soon. diff --git a/en/news/2017-11-22-2017-summary.md b/en/news/2017-11-22-2017-summary.md new file mode 100644 index 0000000..4b3f6ae --- /dev/null +++ b/en/news/2017-11-22-2017-summary.md @@ -0,0 +1,45 @@ +Title: 2017 summary +Date: 2017-11-22 00:00 +Category: News +Slug: 2017-summary +Lang: en + +![Memory game in the background][screenshot] + +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. + +**Brief history** + +Opensource Game Studio project is 12 years old now. + +**2005.** We started the project with a [fanatic call][fanatic_call] 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). 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. + +**2010.** 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. + +**2012, 2013.** 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. + +**2015.** 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. + +**2016.** 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. + +**Last year** + +**2016, October.** We started mobile platforms' research by making simple straightforward OpenSceneGraph application run under Android. + +**2017, January.** We got the Android version working and started iOS and Web research. + +**2017, February.** We made the sample application work everywhere: desktop, mobile, web. + +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. + +**2017, July.** We published [OpenSceneGraph cross-platform guide][osgcp_guide], 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. + +**2017, November.** We published simple [Memory: Colors game][memory-colors] and the [guide][memory-colors-guide] 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. + +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. + +[screenshot]: ../../images/2017-11-22-2017-summary.png +[fanatic_call]: https://www.linuxquestions.org/questions/general-10/the-creation-of-the-best-rpg-355858/ +[osgcp_guide]: https://github.com/OGStudio/openscenegraph-cross-platform-guide +[memory-colors]: https://ogstudio.github.io/game-memory-colors/tutorial-5.3/mjin-player.html +[memory-colors-guide]: https://bitbucket.org/ogstudio-games/memory-colors diff --git a/en/news/2017-12-31-new-year.md b/en/news/2017-12-31-new-year.md new file mode 100644 index 0000000..3e29cb7 --- /dev/null +++ b/en/news/2017-12-31-new-year.md @@ -0,0 +1,19 @@ +Title: The year of lessons +Date: 2017-12-31 22:00 +Category: News +Slug: the-year-of-lessons +Lang: en + +![Sparkler](../../images/2017-12-31-celebration.jpg) + +So, the year 2017 is approaching its finale, the year's results have already been summed up. We're going to take a break from igniting the fireworks or preparation of the champagne so that we can designate our goal for the following year. + +As it may be clear from other articles on the site, half of our plans in 2017 were destined to be completed at least approximately as we assumed. The other half was changed significantly. + +During the year, people joined the team and left it. As a result, we meet the end of the year with exactly the same team as 365 days ago. It made us think. A lot. But We'll save the story for another time. + +There will be exactly one goal for 2018. We will take all the results, and then we will make a new mahjong game. We're already know how to make a mahjong solitaire so we will begin with it. This time, it will be cross-platform. We will definitely try to cover Windows, Linux, macOs, Web, and Android. We can't promis anything about the iOS right now (although we'll see what we can do). + +There is no point in writing more than We want to say. We learned a lot for this year, and we will try to apply all this knowledge to achieve more in the next one. We wish everyone a Happy New Year. Stay tuned. + +The Opensource Game Studio Team. diff --git a/en/news/2017-happy-new-year.html b/en/news/2017-happy-new-year.html index 1500ed4..79eb581 100644 --- a/en/news/2017-happy-new-year.html +++ b/en/news/2017-happy-new-year.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,37 +80,44 @@ -
    -

    In the news

    -
    -

    - Happy 2017 -

    -

    - 2016-12-31 00:00 -

    -
    -
    -Christmas tree
    Christmas tree
    -
    -

    Okay. It’s been a hard year for everyone in the team. And it’s almost over. Praise it ends! Praise the new one!

    -

    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.

    +
    +

    In the news...

    +
    +

    + Happy 2017 +

    +

    + 2016-12-31 00:00 +

    +
    +

    Christmas tree

    +

    Okay. It's been a hard year for everyone in the team. And it's almost over. Praise it ends! Praise the new one!

    +

    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.

    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.

    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.

    -

    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. So. You want our game to become a reality? Join us. Together we will rule the galaxy. Or just wait and see. We didn’t stop several years ago. We won’t stop now. After all, there is only one way to create a fine tool (and it’s our initial goal if you remember) - we need to use it ourselves. We will. Stay tuned.

    +

    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. +So. You want our game to become a reality? Join us. Together we will rule the galaxy. Or just wait and see. We didn't stop several years ago. We won't stop now. +After all, there is only one way to create a fine tool (and it's our initial goal if you remember) - we need to use it ourselves. +We will. Stay tuned.

    Happy 2017. Let it be simple.

    - -
    +
    +
    diff --git a/en/news/2017-summary.html b/en/news/2017-summary.html index 6015555..c0f595b 100644 --- a/en/news/2017-summary.html +++ b/en/news/2017-summary.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,47 +80,51 @@ -
    -

    In the news

    -
    -

    - 2017 summary -

    -

    - 2017-11-22 00:00 -

    -
    -
    -Memory game in the background
    Memory game in the background
    -
    -

    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.

    +
    +

    In the news...

    +
    +

    + 2017 summary +

    +

    + 2017-11-22 00:00 +

    +
    +

    Memory game in the background

    +

    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.

    Brief history

    Opensource Game Studio project is 12 years old now.

    2005. We started the project with a fanatic call 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). 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.

    -

    2010. 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.

    -

    2012, 2013. 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.

    +

    2010. 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.

    +

    2012, 2013. 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.

    2015. 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.

    2016. 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.

    Last year

    -

    2016, October. We started mobile platforms’ research by making simple straightforward OpenSceneGraph application run under Android.

    +

    2016, October. We started mobile platforms' research by making simple straightforward OpenSceneGraph application run under Android.

    2017, January. We got the Android version working and started iOS and Web research.

    2017, February. We made the sample application work everywhere: desktop, mobile, web.

    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.

    2017, July. We published OpenSceneGraph cross-platform guide, 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.

    2017, November. We published simple Memory: Colors game and the guide 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.

    -

    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.

    - -
    +

    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.

    +
    +
    diff --git a/en/news/2018-01-26-mahjong-recreation-start.md b/en/news/2018-01-26-mahjong-recreation-start.md new file mode 100644 index 0000000..ccec90c --- /dev/null +++ b/en/news/2018-01-26-mahjong-recreation-start.md @@ -0,0 +1,75 @@ +Title: Mahjong recreation start +Date: 2018-01-26 00:00 +Category: News +Slug: mahjong-recreation-start +Lang: en + +![Spherical tiles in a Mahjong layout][screenshot] + +This article describes the start of Mahjong game recreation. + +**Plan** + +We started Mahjong recreation endeavour by composing a brief plan to get gameplay with minimal graphics: + +* Load single layout +* Place tiles in layout positions +* Distinguish tiles +* Implement selection +* Implement matching + +Just like any other plan, this one looked fine at first sight. However, once you get down to work, new details start to come out. This plan was no exception. Below are a few problems that came out during development. + +**Problem №1: provide binary resources across supported platforms** + +Mahjong is going to be available on desktop, mobile, and web. Each of these platforms has its constraints on accessing external files: + +* Desktop can access almost any file +* Android/iOS have limited access to file system +* Web does not have any file system at all + +To provide a unified way for accessing resources, we decided to include them into final executable. This decision led to the birth of **mjin-resource** and **mahjong-data** projects. + +[mjin-resource][mjin-resource]: + +* converts binary files to C header files with the help of **xxd** utility +* generates MJIN project that contains generated headers to be compiled into static library +* provides C++ interface for accessing generated resources + +[mahjong-data][mahjong-data] is an example of such generated MJIN project that is referenced by [mahjong][mahjong] project. + +**Problem №2: load PNG images across supported platforms** + +To load PNG, we use corresponding OpenSceneGraph plugin. We built it for desktop with no issues. Building for web (Emscripten) turned out to be more difficult: Emscripten provides its own version of **libpng**, which OpenSceneGraph build script can't detect. We had to work around several OpenSceneGraph checks to successfully build the plugin for Emscripten. + +Building the plugin for Android and iOS is still waiting for us. Once we get PNG plugin working across supported platforms, we are going to publish a new tutorial for [OpenSceneGraph cross-platform guide][osgcp_guide] to cover PNG image loading. We already got a [request to describe image loading][img_loading_issue]. + +**Development** + +[As you know][lets-go], we published OpenSceneGraph cross-platform guide to make OpenSceneGraph community stronger. We value education, and we love to share our knowledge. That's why we decided to develop Mahjong in small reproducible chunks uniquely identified by internal versions. These versions are available in [mahjong repository][mahjong]. + +We also provide [version history and web releases of each internal version][web-releases] for the following reasons: + +* education: show how development looks like internally +* accessibility: provide older versions for comparison + +**Current Mahjong game status** + +As of the time of this writing, we have implemented tile selection. [Try it in your browser!][mahjong-version-tile-selection] + +Once we finish tile matching implementation, we are going to publish the intermediate result for all supported platforms. + +That's it for describing the start of Mahjong game recreation. + + +[screenshot]: ../../images/2018-01-26-mahjong-recreation-start.png + +[mjin-resource]: https://bitbucket.org/ogstudio/mjin-resource +[mahjong]: https://bitbucket.org/ogstudio-games/ogs-mahjong +[mahjong-data]: https://bitbucket.org/ogstudio-games/mahjong-data +[osgcp_guide]: https://github.com/ogstudio/openscenegraph-cross-platform-guide +[img_loading_issue]: https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues/4 +[lets-go]: lets-go.html +[web-releases]: http://ogstudio.github.io/game-mahjong +[mahjong-version-tile-selection]: https://ogstudio.github.io/game-mahjong/versions/010/mjin-player.html + diff --git a/en/news/2018-02-16-mahjong-techdemo1-gameplay.md b/en/news/2018-02-16-mahjong-techdemo1-gameplay.md new file mode 100644 index 0000000..ff3a4e1 --- /dev/null +++ b/en/news/2018-02-16-mahjong-techdemo1-gameplay.md @@ -0,0 +1,36 @@ +Title: First techdemo of OGS Mahjong 2: Gameplay +Date: 2018-02-16 00:00 +Category: News +Slug: mahjong-techdemo1-gameplay +Lang: en + +![End of a Mahjong party][screenshot] + +We are glad to announce the release of the first technical demonstration of OGS Mahjong 2. The purpose of this release was to verify gameplay across supported platforms. + +Get techdemo for your platform: + +* Run [Web version][tech-demo-1-web] in your browser +* Get [Android version][tech-demo-1-android] +* Get [Windows version][tech-demo-1-windows] +* Get [Linux version][tech-demo-1-linux] +* Get [macOS version][tech-demo-1-macos] + +Notes: + +* iOS version is not released because it cannot be easily shared outside AppStore. +* Launch `run` script under Linux and macOS. +* Linux version is only available in 64-bit variant. +* macOS version should run on macOS Sierra or newer. + +That's it for now, have a nice testing! + + +[screenshot]: ../../images/2018-02-16-mahjong-techdemo1-gameplay.png + +[tech-demo-1-web]: https://ogstudio.github.io/game-mahjong/versions/013/mjin-player.html +[tech-demo-1-android]: https://drive.google.com/open?id=1KW8IEN8Dpz8ODeg8BctVSJyzj9-AL9hR +[tech-demo-1-windows]: https://drive.google.com/open?id=1oj0-OXSmEatttzn86u2vgP9SRAIC0ozB +[tech-demo-1-linux]: https://drive.google.com/open?id=1EX7kLIThLiMz9_W7VmBPySms3mlrF-i6 +[tech-demo-1-macos]: https://drive.google.com/open?id=1KWnvbHzan8MpMcZPG2QC-7KWoEYbqrM2 + diff --git a/en/news/2018-04-20-openscenegraph-examples.md b/en/news/2018-04-20-openscenegraph-examples.md new file mode 100644 index 0000000..8f5464c --- /dev/null +++ b/en/news/2018-04-20-openscenegraph-examples.md @@ -0,0 +1,36 @@ +Title: OpenSceneGraph cross-platform examples +Date: 2018-04-20 00:00 +Category: News +Slug: openscenegraph-examples +Lang: en + +![iOS Simulator renders a cube][screenshot] + +This article summarizes the work we did to produce the first two cross-platform OpenSceneGraph examples. + +By the time [the first technology demonstration of OGS Mahjong 2][tech-demo-1] has been released, we've already had [issue request][android-image-issue] (to explain how to load images with OpenSceneGraph on Android) hanging for some time. We considered creating a new tutorial for [OpenSceneGraph cross-platform guide][osgcpg] at first. However, we realized that it's time-consuming and excessive for such a tiny topic (compared to what an average game has) as image loading. We decided to continue sharing our knowledge in the form of concrete examples. That's how [OpenSceneGraph cross-platform examples][osgcpe] were born. + +Each example: + +* explains crucial code necessary to perform a specific task +* accents platform-specific nuances +* provides implementations to cover desktop, mobile, and web platforms +* provides a web build to showcase results + +The first two examples cover the following topics: + +* Embed resource into executable: this greatly simplifies resource handling across platforms +* Use PNG images with PNG plugins: this explains the requirements necessary to build and use PNG plugins + +We will be adding new examples as we proceed with OGS Mahjong 2 development. + +That's it for summarizing the work we did to produce the first two cross-platform OpenSceneGraph examples. + + +[screenshot]: ../../images/2018-04-20-openscenegraph-examples.png + +[tech-demo-1]: mahjong-techdemo1-gameplay.html +[android-image-issue]: https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues/4 +[osgcpg]: https://github.com/OGStudio/openscenegraph-cross-platform-guide +[osgcpe]: https://github.com/OGStudio/openscenegraph-cross-platform-examples + diff --git a/en/news/2018-06-27-example-driven-development.md b/en/news/2018-06-27-example-driven-development.md new file mode 100644 index 0000000..bf67dbb --- /dev/null +++ b/en/news/2018-06-27-example-driven-development.md @@ -0,0 +1,51 @@ +Title: Example-driven development +Date: 2018-06-27 00:00 +Category: News +Slug: example-driven-development +Lang: en + +![Debug broker][screenshot] + +This article explains how the third OpenSceneGraph cross-platform example opened our eyes to example-driven development. + +**2018-08 EDIT**: the third example has been renamed to the fourth one due to the reasons described in the [next article][article-2018-august]. + +**The third OpenSceneGraph cross-platform example** + +The third OpenSceneGraph cross-platform example explains how to implement [remote debugging across platforms][osgcpe-04]. This example is less about OpenSceneGraph and more about different platforms. + +Remote anything nowadays assumes the use of HTTP(s) over TCP/IP. Thus, the first idea was to embed HTTP server into an application and let HTTP clients interact with the server. + +However, serving HTTP across all platforms is complicated: + +* desktops have firewalls +* mobiles have restrictions on background processes +* web browsers are HTTP clients by design + +That's why we decided to create a mediator between debugged application and UI. [Debug broker][debug-broker], a small Node.js application, became that mediator. Debug broker uses no external dependencies, so it's easy to run virtually anywhere. Also, since debug broker is a server application, you can configure it once and use it for any number of applications. + +Both [debug UI][debug-ui] and [debug broker][debug-broker] use JavaScript because we wanted these tools to be accessible from anywhere with no prior installation. This decision limited us to web browser solution. Providing any sort of desktop application would incur additional installation and maintenance effort, which would only complicate the tools. + +**Example-driven development establishment** + +Once the third example was implemented, we realized how important and beneficial it is to develop new features outside the main project: + +* the main project is freed from excessive commit noise +* a new feature is publicly shared for everyone to learn, criticize, and improve + +When we publicly share our knowledge: + +* we must create documentation for everyone (including ourselves later) to understand what's going on +* we must not use hacks because that would break your trust in us + +From now on, all new features like input handling, Mahjong layout loading, resource caching, etc. are going to be first implemented as examples. We call this example-driven development. + +That's it for explaining how the third OpenSceneGraph cross-platform example opened our eyes to example-driven development. + +[screenshot]: ../../images/2018-06-27-example-driven-development.png +[article-2018-august]: examples-and-dependencies.html + +[osgcpe-04]: https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/04.RemoteDebugging +[debug-broker]: https://github.com/OGStudio/debug-broker +[debug-ui]: https://github.com/OGStudio/debug-ui + diff --git a/en/news/2018-08-21-examples-and-dependencies.md b/en/news/2018-08-21-examples-and-dependencies.md new file mode 100644 index 0000000..246f865 --- /dev/null +++ b/en/news/2018-08-21-examples-and-dependencies.md @@ -0,0 +1,59 @@ +Title: Examples and dependencies +Date: 2018-08-21 00:00 +Category: News +Slug: examples-and-dependencies +Lang: en + +![Cloud][screenshot] + +This article describes two new OpenSceneGraph cross-platform examples and the change in handling dependencies. + +**Examples of HTTP client and node selection** + +Once we finished working on [the remote debugging example][osgcpe-04] and [reported its completion][article-2018-june], we were surprised by the fact that secure HTTP connection between a debugged application and debug broker was only working in the web version of the example. Desktop and mobile versions only worked with insecure HTTP. + +Since current debug scheme has no authentication, insecure debugging over HTTP doesn't really hurt. However, if we want to access resources located at popular sites like GitHub and BitBucket, we have to support secure HTTP. + +The need to support HTTPS on each platform spurred us to create [HTTP client example][osgcpe-03]. Turned out, each platform had its own preferred way of doing secure HTTP: + +* web (Emscripten) provides Fetch API +* desktop is fine with Mongoose and OpenSSL +* Android provides HttpUrlConnection in Java +* iOS provides NSURLSession in Objective-C + +The need to support different languages on different platforms resulted in the creation of so-called 'host-guest' pattern: + +* guest (platform agnostic) + * provides networking representation + * used by cross-platform C++ code +* host (specific platform) + * polls guest for pending requests + * processes them + * reports results back to the guest + +[Node selection example][osgcpe-05] was straightforward and caused no troubles. + +**The change in handling dependencies** + +For over a year we had to deal with the following [shortcomings][osg-shortcomings] when building OpenSceneGraph across platforms using conventional methods: + +* macOS builds failing due to certain compile flags we use +* hacking PNG plugin safety guards to have PNG support under Android +* iOS simulator and device builds of the same example being in separate Xcode projects +* OpenSceneGraph taking 20-30 minutes to build + +These shortcomings were slowing us down and complicating the development of new examples. Upon hitting these problems ten more times this month we decided it was time to solve them once and for all. Now OpenSceneGraph is built as part of each example in 2-3 minutes, and there's no more dependency magic involved. We took the same approach of building dependencies as part of each example to other external libraries like Mongoose and libpng-android, too. + +With these obstacles out of the way, we can now iterate faster. Just in time for the next technical demonstration of Mahjong 2! + +That's it for describing two new OpenSceneGraph cross-platform examples and the change in handling dependencies. + +[screenshot]: ../../images/2018-08-21-examples-and-dependencies.png + +[article-2018-june]: example-driven-development.html + +[osgcpe-03]: https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/03.HTTPClient +[osgcpe-04]: https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/04.RemoteDebugging +[osgcpe-05]: https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/05.NodeSelection + +[osg-shortcomings]: http://forum.openscenegraph.org/viewtopic.php?t=17443 diff --git a/en/news/2018-10-02-mahjong-demo2.md b/en/news/2018-10-02-mahjong-demo2.md new file mode 100644 index 0000000..de40edc --- /dev/null +++ b/en/news/2018-10-02-mahjong-demo2.md @@ -0,0 +1,43 @@ +Title: OGS Mahjong 2: Demo 2 +Date: 2018-10-02 00:00 +Category: News +Slug: mahjong-demo2 +Lang: en + +![Start of a Mahjong party][screenshot] + +We are glad to announce the release of the second demonstration of OGS Mahjong 2. The purposes of this release were to refine our development techniques and build a solid cross-platform foundation. + +**Release** + +Run the latest version of OGS Mahjong 2 in your web browser: [http://ogstudio.github.io/ogs-mahjong](http://ogstudio.github.io/ogs-mahjong) + +You are encouraged to run the game with `seed` parameter like this: [http://ogstudio.github.io/ogs-mahjong?seed=0](http://ogstudio.github.io/ogs-mahjong?seed=0) + +This allows you to play the same layout each time you launch the game. + +Each seed uniquely identifies the placement of tiles. Thus, different seeds give you a different experience. + +**Development techniques and foundation** + +During the second demonstration development, we switched from standard development to [example-driven one][article-2018-june]. This resulted in the creation of three distinct repositories to back the development of OGS Mahjong 2: + +* [OpenSceneGraph cross-platform examples][osgcpe] repository provides cross-platform foundation like resource handling, render window setup, etc. +* [OGS Mahjong components][omc] repository provides Mahjong specific functionality like parsing layout, matching tiles, etc. +* [OGS Mahjong][ogs-mahjong] repository contains snapshots of `OGS Mahjong components` features that comprise specific game version. E.g., `Demo 2` version is almost identical to [05.ColorfulStatus][omc-05] example of `OGS Mahjong components`. + +**Beyond Mahjong solitaire** + +In addition to `seed` parameter, you can let the game use remote layout hosted at GitHub: [http://ogstudio.github.io/ogs-mahjong?seed=0&layout=github://OGStudio/ogs-mahjong-components/data/cat.layout](http://ogstudio.github.io/ogs-mahjong?seed=0&layout=github://OGStudio/ogs-mahjong-components/data/cat.layout) + +Utilizing remote resources is an extremely powerful approach allowing anyone to create a layout of his/her choice and see the layout in action instantly. + +Our next step is to turn game logic into a resource, too. + +[screenshot]: ../../images/2018-10-02-mahjong-demo2.png + +[article-2018-june]: example-driven-development.html +[osgcpe]: https://github.com/OGStudio/openscenegraph-cross-platform-examples +[omc]: https://github.com/OGStudio/ogs-mahjong-components +[ogs-mahjong]: https://bitbucket.org/ogstudio-games/ogs-mahjong +[omc-05]: https://github.com/OGStudio/ogs-mahjong-components/tree/master/05.ColorfulStatus diff --git a/en/news/2018-11-19-ideal-gamedev.md b/en/news/2018-11-19-ideal-gamedev.md new file mode 100644 index 0000000..7441ab3 --- /dev/null +++ b/en/news/2018-11-19-ideal-gamedev.md @@ -0,0 +1,60 @@ +Title: Ideal games and game development tools +Date: 2018-11-19 00:00 +Category: News +Slug: ideal-gamedev +Lang: en + +![A man without and with tools][screenshot] + +In this article, we discuss how ideal video game and video game development tool look like, in our opinion. + +**Questions** + +As you know, the [goals of Opensource Game Studio][ogs-goals] are: + +* creation of free video game development tools +* making video games with those tools +* preparing video game development tutorials + +This time we asked ourselves two simple questions: + +* What is an ideal video game? +* What is an ideal video game development tool? + +The best answers we could think of are below. + +**Answer 1: A video game is ideal if it delivers maximum pleasure possible** + +While content is probably the most important aspect to keep a player invested into the game, the technical side is the transport to deliver that content. There are quite a few technical problems that may damage otherwise excellent content of a game: + +* insufficient accessibility: the game does not run on your hardware +* insufficient optimization: the game is slow +* critical bugs: the game crashes from time to time + +We work hard to make sure the games we create are accessible everywhere. That's why we released +[the second demonstration of OGS Mahjong 2][mahjong-demo2] only for the web: because you can run web version virtually anywhere. + +**Answer 2: A video game development tool is ideal if it lets you create a video game of your dream in the shortest time possible** + +Even though we put a lot of effort into sharing our knowledge through [guides][osgcpg] and [tutorials][osgcpe], we understand that those take a lot of time to study. One can't possibly make even a simple video game like [Memory][concentration] without performing the following steps: + +* configure the development environment +* write code +* build an application +* debug the application +* repeat `write-build-debug` steps as many times as necessary + +Writing code and debugging are probably the ultimate forms of input and output of any software, so we can't escape those. However, there are ways to completely remove (or at least significantly decrease) the need for `development environment setup` and `build` steps. And this is what we are going to do in the coming months. + +Our goal for the coming months is to create a video game development tool that would allow any programmer (or sufficiently skilled person) to create the [Memory][concentration] video game from scratch in an hour. + +That's it for discussing how ideal video game and video game development tool look like, in our opinion. + + +[screenshot]: ../../images/2018-11-19-ideal-gamedev.png + +[ogs-goals]: ../../en/page/about.html +[mahjong-demo2]: mahjong-demo2.html +[osgcpg]: https://github.com/OGStudio/openscenegraph-cross-platform-guide +[osgcpe]: https://github.com/OGStudio/openscenegraph-cross-platform-examples +[concentration]: https://en.wikipedia.org/wiki/Concentration_(game) diff --git a/en/news/2019-01-01_year-of-rethinking.md b/en/news/2019-01-01_year-of-rethinking.md new file mode 100644 index 0000000..8fd4aa0 --- /dev/null +++ b/en/news/2019-01-01_year-of-rethinking.md @@ -0,0 +1,19 @@ +Title: Year of rethinking +Date: 2019-01-01 0:01 +Category: News +Slug: 2019-year-of-rethinking +Lang: en + +![Sparkler](../../images/2017-12-31-celebration.jpg) + +It was a year of reimagining and rethinking. As some of you may remember, we started this project to make a game development tool. During the years, the idea evolved from one form to another, sometimes the changes were significant, other times we threw away all the code and started anew. + +As a result of all these changes, we came to the end of the year 2018 without a tool, but with a clear understanding of what tool are we making. + +There are plenty of fine game development tools out there. Some of them are even open source. We spent plenty of time trying them, and some are quite good. + +We can't, and we don't want to compete with them. Our targets are maximal accessibility and simplicity. Our goal is to make a tool suitable for teaching children, but powerful enough to be used for prototyping. To use any powerful development tool, you need a PC or a laptop. We want to make the toolset, that can be used anywhere. We already made some steps in this direction, and we will continue this course. + +So, we're beginning a new year without precise plans, but with clear knowledge of our goal instead. Let's wait and see if this approach works better. + +Happy New Year to all of you! See you soon! diff --git a/en/news/2019-02-04_teaching-kids-to-program.md b/en/news/2019-02-04_teaching-kids-to-program.md new file mode 100644 index 0000000..25c1e04 --- /dev/null +++ b/en/news/2019-02-04_teaching-kids-to-program.md @@ -0,0 +1,250 @@ +Title: Teaching kids to program +Date: 2019-02-04 00:00 +Category: News +Slug: teaching-kids-to-program +Lang: en + +![Students and teachers][screenshot] + +In this article, Michael shares his experience of teaching kids to program. + +Here's what he covers: + +- organization of the learning process +- learning plan +- memory game +- development tools +- lessons +- results and plans + +**Organization of the learning process** + +The learning process is conducted as part of corporate social responsibility: a company provides a room with equipment and connects employees that want to try themselves in the role of teachers with employees that want their kids educated. All this is done voluntarily. + +Potential teachers are divided into groups so that each group contains three teachers: experienced one and two novice ones. Such a group of three teachers leads a group of students. Students are divided into groups by age and skills. + +I participated in the program as a teacher for the second time in 2018. The kids were around ten years old. Our group was active from October to December of 2018 each Saturday, 10:00-12:00. Using my position as a teacher, I've also brought my wife in as a student. + +**Learning plan** + +The first time I participated in the program, our group taught kids rather mindlessly: we were coming up with simple tasks to explain different operators. By the end of the course we had nothing concrete to evaluate, analyze, and share. + +This second time I decided we are going to create a memory game with kids. I decided to consider the course successful if by the end of the course each kid would be able to create a simple memory game from scratch in an hour. + +To achieve that, we were recreating the same game from scratch each lesson. I'd like to stress that we did not use personal accounts to save progress. Our task was to save the skill of game creation in the head, not a PC. + +**Memory game** + +Let's see what the memory game is. + +**1)** In the simplest case we have 16 cards, only 8 of them are unique, the rest 8 are duplicates of the unique ones. + +![Cards face up][all-cards-face-up] + +As you can see, we only have two cards with a cat, only two cards with a dog, etc.. + +**2)** At the start we shuffle the cards and place them with their faces down. + +![Cards face down][all-cards-face-down] + +**3)** The first game player turns a pair of cards. + +![A pair of cards][first-pair] + +**4)** If the cards differ they are once again turned face down. + +![Cards face down][all-cards-face-down] + +**5)** The next player turns another pair of cards. + +![Second pair of cards][second-pair] + +**6)** If the cards are the same, they are removed from the field. + +![A pair of matching cards has been removed][remove-pair] + +The goal of the game is to remove all cards from the field. There's no competition here so the game can be played alone. + +From one hand, the memory game is rather simple. From the other hand, the game implementation requires essential functionality each more or less complex game has: + +- creation of items +- arrangement of items +- selection of items +- comparison of items +- removal of matching items + +**Development tools** + +We used Scratch as our development tool. [Scratch][scratch] is a great tool to teach kids to program because each action, each operation is represented graphically. + +For example, you can rotate a cat 360 degrees in 1 second using the following script: + +![Script][cat-script] + +Here's how it looks like in action: + +![Animation][cat-animation] + +I'd like to stress that Scratch is a rather successful solution to represent code graphically. For example, a paid solution by SAP uses similar concept of cubes to program logic: + +![SAP UI][sap-ui] + +Users can only input values into predefined fields. If users want more functionality they have to resort to scripts. + +Personally, I have never witnessed any slowdown in Scratch, and there were many in SAP's solution. + +**The first lesson** + +The first lesson was introductory, we didn't use PCs. + +The plan was to: + +1. Meet +2. Play the memory game with cards +3. Learn the concept of algorithm +4. Detail the game's algorithm +5. Analyze the lesson + +**1)** Meeting + +Both teachers and students stand in a circle. This equalizes everyone and makes everyone a team member. + +The first team member tells his name and why he decided to take the course. The second team member and the rest first repeat the name and the story of each previous team member before telling their own names and stories. + +Here's how it looks like: + +1. John: "My name is John, I am going to study Scratch because my father forces me to" +2. Alex: "This is John, he's doing Scratch because his father wants him to do it. My name is Alex, and this is my fourth year with Scratch" +3. Ann: "That's John, his parents force him to do Scratch. This is Alex, he's a Scratch veteran. And I'm Ann, a novice teacher, so I'm going to learn together with you all" + +Such a format of meeting has the following objectives: + +- Getting to know each other + - Each team member should know other team members by name +- Common space + - Everyone is in the circle, not at a working desk, this prevents distraction of kids by PC games +- Equality + - Both teachers and students are in the same circle, this equalizes everyone as a team member without hierarchy +- Attention + - Each team member should listen carefully to be able to correctly repeat what others said +- Feedback + - Each team member should be as clear as possible when expressing thoughts, otherwise nobody would be able to repeat them +- Fun + - Memorization problems produce lots of laughter + +**2)** Memory game with cards + +1. Take 8 pairs of the same cards from two decks of cards +2. Place the cards in 4 x 4 grid, faces down +3. Students stand up around single table +4. Each student, one by one, turns a pair of cards + - If cards match, they are taken off the field + - If cards differ, they are once again turned face down + +Students are eager to play tabletop games. During the game party teachers say out loud each step in the game's algorithm. + +After a couple of parties it's time to find out what algorithm is. + +**3)** The concept of algorithm + +1. Ask students first, hear them out to find out their level +2. Correct what students say if they were close to an expected answer +3. Ask students to write an algorithm to move a man from "stands outside a room" state into "sits and works at a PC" one + +Students like to go to blackboard and write, so we ask each student to come and write a single step of the algorithm at a time. The most active student should execute the algorithm by following it strictly. + +**4)** The algorithm of the game + +Ask students to compose the game's algorithm. Again, let students come to the blackboard and add one step of the algorithm at a time. Once the algorithm is ready, play the game with cards once again. Now, each student should say the algorithm's step he executes. + +Here's how it looks like: + +1. John: "Place 16 cards faces down" +2. Alex: "Turn a pair of cards" +3. Paul: "If the cards differ, turn them faces down again" +4. Dan: "Turn another pair of cards" +5. Mike: "If the cards match, take them off the field" + +**5)** Analyze the lesson + +That's it for the first lesson. Teachers finally have time to discuss the lesson: discuss the kids, approaches to shy and active kids, plan next lessons. + +We had the following decisions: + +1. Arrange students so that active ones sit next to shy ones as "active-shy-active-shy-etc" so that we don't end up with two groups of shy and active students at different sides of a room, which would hamper productivity. +2. Only accept accurate answers from students because active students like to wriggle, which hampers discipline. + +**The second and the third lessons** + +We were beginning each lesson with the same meeting: we would stand up in a circle, tell our names and what we did. Those who did nothing should have said why. Just as before, everyone should first repeat what previous team members said. + +We spent the second lesson to create requirements for an item of the playfield and then create the item in Scratch. This was moderately successful. + +We spent the third lesson trying to create 16 items and arrange them in 4x4 grid. We failed miserably because we could not explain coordinate system to students. It became apparent that lesson plans were only plans, reality had its own demands. + +We saw two ways to approach the problem: + +1. Keep on studying the coordinate system risking not to get the game done by the end of the course +2. Change the game requirements so that coordinate system is not necessary + +We went the second way because, after all, we're not a school, our goal was to teach kids to create the game, i.e., use skills in practice, not theory. That's why we replaced 4x4 grid with a circle of 16 items. + +This solution sparkled a few thoughts in my head: + +1. One can often find a simpler path to solve an issue +2. This path is simpler to understand, albeit less flexible +3. One can go the harder path to increase flexibility much later when it becomes absolutely necessary +4. Simplification moves one closer to the goal, complexification moves one in the opposite direction + +**The fourth and the rest of the lessons** + +The fourth lesson marked the end of coming up with requirements in class because doing so started to take too much time. We chose practice over theory once again to meet the deadline. This time all requirements were conducted before the lesson. Still, nobody read them. + +We spent the fourth and the fifth lessons to create 16 items in circle, select a pair of items and match them. + +We started recreating complete game from scratch on the sixth lesson. Each time students were recreating complete game faster and faster. On the eighth lesson we introduced a leaderboard to track how fast each student recreates a specific part of the game. + +**The last lesson** + +When the last lesson approached everyone was able to create the memory game from scratch more or less independently in two hours. + +Here's the leaderboard of the last lesson (names are hidden): + +![Leaderboard][leaderboard] + +The leaderboard is in Russian, here are the captions translated: + +- Name +- Circle of items +- Selection of pairs +- Hide all +- Hide a pair + +Here you can witness the creation of the memory game from scratch by the fastest student: in just half an hour. + + +
    + +**Results and plans** + +The results surpassed my expectations: + +- three students made it in an hour or faster +- two students made it in an hour and a half or faster + +This year I plan on doing another round of the memory game recreation. However, I'm going to replace Scratch with Opensource Game Studio tools: the students will use Lua, Git, and GitHub Pages. + +That's it for sharing Michael's experience of teaching kids to program. + +[screenshot]: ../../images/2019-02-04_teaching-kids-to-program-team.png + +[all-cards-face-up]: ../../images/2019-02-04_teaching-kids-to-program-all-cards-face-up.png +[all-cards-face-down]: ../../images/2019-02-04_teaching-kids-to-program-all-cards-face-down.png +[first-pair]: ../../images/2019-02-04_teaching-kids-to-program-first-pair.png +[second-pair]: ../../images/2019-02-04_teaching-kids-to-program-second-pair.png +[remove-pair]: ../../images/2019-02-04_teaching-kids-to-program-remove-pair.png +[scratch]: https://scratch.mit.edu/ +[cat-script]: ../../images/2019-02-04_teaching-kids-to-program-cat-script.png +[cat-animation]: ../../images/2019-02-04_teaching-kids-to-program-cat-animation.gif +[sap-ui]: ../../images/2019-02-04_teaching-kids-to-program-sap-ui.png +[leaderboard]: ../../images/2019-02-04_teaching-kids-to-program-leaderboard.png diff --git a/en/news/2019-04-16_defense.md b/en/news/2019-04-16_defense.md new file mode 100644 index 0000000..b819074 --- /dev/null +++ b/en/news/2019-04-16_defense.md @@ -0,0 +1,55 @@ +Title: Defending availability +Date: 2019-04-16 00:00 +Category: News +Slug: defending-availability +Lang: en + +![Altai's Katun river][screenshot] + +In this article, we describe the beginning of our efforts to protect ourselves from third-party solutions. + +Since day one of Opensource Game Studio project, we rely heavily on third-party solutions to help us achieve the goal of creating the best game development tools. To this date, we used forums, task trackers, mailing lists, social networks, code version control systems, hosting providers, compiler suites, libraries, and so on. Each third-party solution we used had its own lifespan. + +There are two main reasons why we changed third-party solutions: + +* Change in our needs +* Solution shutdown + +The shutdown of [Google Code][google-code] in 2016 was the first time we experienced the deadly business hand. We were using SVN, Mercurial, and Google issue tracker. We were forced to let all of them go. + +We transferred our source code into both [BitBucket][bitbucket] and [GitHub][github] because we didn't want to put all eggs into one basket. We became wiser thanks to Google Code shutdown experience. + +Issue tracking had a different fate. At first, we used Bugzilla to manager our issues. However, Bugzilla was so inconvenient that we dropped it in favor of Google Sheets. To this date, we use Google Sheets to plan and log our work on the project. We also use Google Docs to write this very news and review it before publishing. + +The shutdown of [goo.gl][goo-gl] (URL shortener) in 2019 was the second time we experienced that same deadly business hand. We were using goo.gl to shorten Google Docs URLs internally. Not really big damage was done, however, this only proved that third-party solutions are not ours, but theirs. + +Microsoft [acquired GitHub][github-acquisition] in 2018. So far (April 2019) Microsoft is doing a really good job by empowering GitHub with the [release of GitPod][gitpod] to allow developers to build GitHub projects in a single click. However, Microsoft is also known for shutting down [Codeplex][codeplex] in 2017. + +This short track of shutdowns and acquisitions in the course of the past four years highlights the business' main objective: making profits. Personally, we have no problem with that objective. It's really hard to live in the 21st century without earning money. We are no exception to this, we pay bills, too. However, a much more humane option would be to let the source code go into the wild, to let interested developers continue the development of those solutions if they want to. Though, this would lead to even more competition with the business itself, something the business tries to avoid at all costs. + +We are no business, we make no profits off our tools. Our goals are only to create tools and let them go into the wild, so you can use them. Currently, we use GitHub to host some of our [tutorials][tutorials] and [guides][guides]. Now imagine that two years from now Microsoft decides to decommission GitHub. Why? Maybe because [people gradually migrate][migration] from GitHub to GitLab. + +How are we to protect ourselves from the deadly business hand? We consolidate our tools, tutorials, and games into this very site. The first step, now complete, was to create a static site generator to generate this very site. + +So far the generated site has the following functionality: + +* news that span multiple pages +* standalone pages +* sitewide language selection + +We will make the site even more convenient during this year. Stay tuned! + +That's it for describing the beginning of our efforts to protect ourselves from third-party solutions. + + +[screenshot]: ../../images/2019-04-16_defending-availability.jpg +[google-code]: https://code.google.com/archive/ +[bitbucket]: https://bitbucket.org/ogstudio/ +[github]: https://github.com/ogstudio/ +[goo-gl]: https://developers.googleblog.com/2018/03/transitioning-google-url-shortener.html +[github-acquisition]: https://github.blog/2018-10-26-github-and-microsoft/ +[gitpod]: https://www.gitpod.io/blog/gitpod-launch/ +[codeplex]: https://devblogs.microsoft.com/bharry/shutting-down-codeplex/ +[tutorials]: https://github.com/OGStudio/openscenegraph-cross-platform-examples +[guides]: https://github.com/OGStudio/openscenegraph-cross-platform-guide +[migration]: https://hackernoon.com/git-wars-why-im-switching-to-gitlab-e471f5e8be2c diff --git a/en/news/2019-08-05_on-the-way-to-durable-applications.md b/en/news/2019-08-05_on-the-way-to-durable-applications.md new file mode 100644 index 0000000..4464cd7 --- /dev/null +++ b/en/news/2019-08-05_on-the-way-to-durable-applications.md @@ -0,0 +1,83 @@ +Title: On the way to durable applications +Date: 2019-08-05 00:00 +Category: News +Slug: on-the-way-to-durable-applications +Lang: en + +![Pskov's veche][screenshot] + +This article describes our first durable application for desktop PCs: PSKOV static site generator. + +**Durability** + +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, [PSKOV][pskov] runs even under Windows 2000, so PSKOV has backward compatibility of 19 years. + +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. + +Such an implementation gives PSKOV the following features: + +* it can be copied without restrictions +* it can be hosted anywhere +* it can run locally +* it can operate without Internet + +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, [<center> tag][center-tag], being declared deprecated in 2014, still works as expected 5 years since, in 2019. + +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. + +To free PSKOV from the cage, [LFSA][lfsa] 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). + +**Track record** + +PSKOV has been successfully used to create the following small sites: + +* [open game studio project site][ogs] +* [PSKOV itself][pskov] +* [LFSA][lfsa] +* [example of a simple blog][pskov-sample] + +Now let's see why PSKOV was created as a durable application for web browsers. + +**Reason №1: collect and keep knowledge in an accessible form** + +We have been creating convenient game development tools for several years now. So far the collected knowledge was represented by [native applications][ogs-mahjong-1] for desktop PCs, [education articles][osgcpg] for related technologies, and [showcase videos][showcase]. Such forms of the collected knowledge are basically dead: + +* few would download an unknown application +* few would watch some videos +* even fewer would read some articles + +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 [twitter revolutions][twitter-revolutions] proves that almost anyone can open a link and "like" the change of a "bloody regime". + +**Reason №2: rule by people** + +Nowadays any Internet activity is performed by the means of services that almost always belong to some company: [messages][msg], [maps][map], [search][search], [music][music], [source code][src], etc. Such power usurpation leads to [shutdowns][shutdown-01] of [services][shutdown-02] 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. + +Other times companies simply block competing browsers from accessing their service, as it was recently the [case with the web version of Skype][skype-block]. Luckily there are people who don’t agree with such politics. Thanks to them, [unlocking tools][skype-free] appear. + +As for me, I 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 [tells us a different story][story]: "**the state** is not some enemy horde that occupied the society, but that which **grows out of society and mirrors it**". + +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. + +That's it for describing our first durable application for desktop PCs: PSKOV static site generator. + +[screenshot]: ../../images/2019-08-05_on-the-way-to-durable-applications.jpg + +[pskov]: http://opengamestudio.org/pskov +[center-tag]: https://www.w3schools.com/tags/tag_center.asp +[lfsa]: http://opengamestudio.org/lfsa +[ogs]: http://opengamestudio.org +[pskov-sample]: http://opengamestudio.org/pskov/sample/03.Blog/en/blog/index.html +[ogs-mahjong-1]: ../game/ogs-mahjong-1.html +[osgcpg]: https://github.com/OGStudio/openscenegraph-cross-platform-guide +[showcase]: https://youtu.be/_t8TGhSgJG4 +[twitter-revolutions]: https://en.wikipedia.org/wiki/Twitter_Revolution +[msg]: http://twitter.com +[map]: http://2gis.ru +[search]: http://google.com +[music]: http://music.yandex.ru +[src]: http://github.com +[shutdown-01]: https://techcrunch.com/2015/03/13/google-kills-off-google-code/ +[shutdown-02]: https://www.reddit.com/r/sysadmin/comments/62orq9/codeplex_shutting_down_and_fosshub_is_sad/ +[skype-block]: https://www.reddit.com/r/firefox/comments/aw1umv/skype_web_is_now_blocked_in_firefox/ +[skype-free]: https://addons.mozilla.org/ru/firefox/addon/firefox-web-skype/ +[story]: https://translate.google.com/translate?sl=ru&tl=en&u=https%3A%2F%2Fria.ru%2F20190723%2F1556775012.html diff --git a/en/news/2019-year-of-rethinking.html b/en/news/2019-year-of-rethinking.html index 08d0944..72e1175 100644 --- a/en/news/2019-year-of-rethinking.html +++ b/en/news/2019-year-of-rethinking.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,37 +80,41 @@ -
    -

    In the news

    -
    -

    - Year of rethinking -

    -

    - 2019-01-01 0:01 -

    -
    -
    -Sparkler
    Sparkler
    -
    +
    +

    In the news...

    +
    +

    + Year of rethinking +

    +

    + 2019-01-01 0:01 +

    +
    +

    Sparkler

    It was a year of reimagining and rethinking. As some of you may remember, we started this project to make a game development tool. During the years, the idea evolved from one form to another, sometimes the changes were significant, other times we threw away all the code and started anew.

    As a result of all these changes, we came to the end of the year 2018 without a tool, but with a clear understanding of what tool are we making.

    There are plenty of fine game development tools out there. Some of them are even open source. We spent plenty of time trying them, and some are quite good.

    -

    We can’t, and we don’t want to compete with them. Our targets are maximal accessibility and simplicity. Our goal is to make a tool suitable for teaching children, but powerful enough to be used for prototyping. To use any powerful development tool, you need a PC or a laptop. We want to make the toolset, that can be used anywhere. We already made some steps in this direction, and we will continue this course.

    -

    So, we’re beginning a new year without precise plans, but with clear knowledge of our goal instead. Let’s wait and see if this approach works better.

    +

    We can't, and we don't want to compete with them. Our targets are maximal accessibility and simplicity. Our goal is to make a tool suitable for teaching children, but powerful enough to be used for prototyping. To use any powerful development tool, you need a PC or a laptop. We want to make the toolset, that can be used anywhere. We already made some steps in this direction, and we will continue this course.

    +

    So, we're beginning a new year without precise plans, but with clear knowledge of our goal instead. Let's wait and see if this approach works better.

    Happy New Year to all of you! See you soon!

    - -
    +
    +
    diff --git a/en/news/back-to-social-networks.html b/en/news/back-to-social-networks.html index 9542260..6898e9a 100644 --- a/en/news/back-to-social-networks.html +++ b/en/news/back-to-social-networks.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,30 +80,36 @@ -
    -

    In the news

    -
    -

    - We’re back to social networks -

    -

    - 2016-08-18 00:00 -

    -
    -

    If you follow us on Facebook, Twitter, or VK you noticed we started to use them again. That’s no coincidence: we’re finally ready to communicate our progress verbally after 4 years of almost silent development.

    +
    +

    In the news...

    +
    +

    + We’re back to social networks +

    +

    + 2016-08-18 00:00 +

    +
    +

    If you follow us on Facebook, Twitter, or VK you noticed we started to use them again. That's no coincidence: we're finally ready to communicate our progress verbally after 4 years of almost silent development.

    Follow us to stay up-to-date!

    - -
    +
    +
    diff --git a/en/news/back-to-the-static.html b/en/news/back-to-the-static.html index 50a312c..3bd8910 100644 --- a/en/news/back-to-the-static.html +++ b/en/news/back-to-the-static.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,34 +80,38 @@ -
    -

    In the news

    -
    -

    - Back to the Static -

    -

    - 2017-10-16 00:00 -

    -
    -
    -Static and dynamic unite
    Static and dynamic unite
    -
    -

    We have been using Wordpress as our website engine for more than seven years. And now it’s time to move forward. Or backward. For some time we’ve been tracking the development of the new breed of website engines - static site generators. It seems that this is the technology capable of changing past into future.

    +
    +

    In the news...

    +
    +

    + Back to the Static +

    +

    + 2017-10-16 00:00 +

    +
    +

    Static and dynamic unite

    +

    We have been using Wordpress as our website engine for more than seven years. And now it's time to move forward. Or backward. For some time we've been tracking the development of the new breed of website engines - static site generators. It seems that this is the technology capable of changing past into future.

    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. So, we are starting our site anew with the help of the Pelican.

    -

    Right now it doesn’t have all the content from our old site, but we’ll add most of it soon.

    - -
    +

    Right now it doesn't have all the content from our old site, but we'll add most of it soon.

    +
    +
    diff --git a/en/news/bye-desura-hello-humblebundle.html b/en/news/bye-desura-hello-humblebundle.html index bdf989d..86c277f 100644 --- a/en/news/bye-desura-hello-humblebundle.html +++ b/en/news/bye-desura-hello-humblebundle.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,33 +80,38 @@ -
    -

    In the news

    -
    -

    - Desura no more, hello Humble Bundle Widget -

    -

    - 2015-07-23 00:00 -

    -
    -

    After the recent bankruptcy of Desura’s parent company, we decided, that we need a new place for our Deluxe version. Something better, more modern and more trustworthy. We have chosen the Humble Widget, with which you can buy the deluxe version of the game without leaving our site.

    +
    +

    In the news...

    +
    +

    + Desura no more, hello Humble Bundle Widget +

    +

    + 2015-07-23 00:00 +

    +
    +

    After the recent bankruptcy of Desura's parent company, we decided, that we need a new place for our Deluxe version. Something better, more modern and more trustworthy. We have chosen the Humble Widget, with which you can buy the deluxe version of the game without leaving our site.

    Here it is:

    - -

    We haven’t received a single penny from Desura (due to the minimal cache out limitations), but if you bought the deluxe version from them and experiencing any problems with downloading it (right now we see no problems with that), send us a letter, tell your name on Desura, we’ll figure something out.

    - -
    + +

    We haven't received a single penny from Desura (due to the minimal cache out limitations), but if you bought the deluxe version from them and experiencing any problems with downloading it (right now we see no problems with that), send us a letter, tell your name on Desura, we'll figure something out.

    +
    +
    diff --git a/en/news/defending-availability.html b/en/news/defending-availability.html index 49a8565..a6f22bd 100644 --- a/en/news/defending-availability.html +++ b/en/news/defending-availability.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +80,28 @@ -
    -

    In the news

    -
    -

    - Defending availability -

    -

    - 2019-04-16 00:00 -

    -
    -
    -Altai’s Katun river
    Altai’s Katun river
    -
    +
    +

    In the news...

    +
    +

    + Defending availability +

    +

    + 2019-04-16 00:00 +

    +
    +

    Altai's Katun river

    In this article, we describe the beginning of our efforts to protect ourselves from third-party solutions.

    Since day one of Opensource Game Studio project, we rely heavily on third-party solutions to help us achieve the goal of creating the best game development tools. To this date, we used forums, task trackers, mailing lists, social networks, code version control systems, hosting providers, compiler suites, libraries, and so on. Each third-party solution we used had its own lifespan.

    There are two main reasons why we changed third-party solutions:

    @@ -118,11 +110,11 @@
  • Solution shutdown
  • The shutdown of Google Code in 2016 was the first time we experienced the deadly business hand. We were using SVN, Mercurial, and Google issue tracker. We were forced to let all of them go.

    -

    We transferred our source code into both BitBucket and GitHub because we didn’t want to put all eggs into one basket. We became wiser thanks to Google Code shutdown experience.

    +

    We transferred our source code into both BitBucket and GitHub because we didn't want to put all eggs into one basket. We became wiser thanks to Google Code shutdown experience.

    Issue tracking had a different fate. At first, we used Bugzilla to manager our issues. However, Bugzilla was so inconvenient that we dropped it in favor of Google Sheets. To this date, we use Google Sheets to plan and log our work on the project. We also use Google Docs to write this very news and review it before publishing.

    The shutdown of goo.gl (URL shortener) in 2019 was the second time we experienced that same deadly business hand. We were using goo.gl to shorten Google Docs URLs internally. Not really big damage was done, however, this only proved that third-party solutions are not ours, but theirs.

    Microsoft acquired GitHub in 2018. So far (April 2019) Microsoft is doing a really good job by empowering GitHub with the release of GitPod to allow developers to build GitHub projects in a single click. However, Microsoft is also known for shutting down Codeplex in 2017.

    -

    This short track of shutdowns and acquisitions in the course of the past four years highlights the business’ main objective: making profits. Personally, we have no problem with that objective. It’s really hard to live in the 21st century without earning money. We are no exception to this, we pay bills, too. However, a much more humane option would be to let the source code go into the wild, to let interested developers continue the development of those solutions if they want to. Though, this would lead to even more competition with the business itself, something the business tries to avoid at all costs.

    +

    This short track of shutdowns and acquisitions in the course of the past four years highlights the business' main objective: making profits. Personally, we have no problem with that objective. It's really hard to live in the 21st century without earning money. We are no exception to this, we pay bills, too. However, a much more humane option would be to let the source code go into the wild, to let interested developers continue the development of those solutions if they want to. Though, this would lead to even more competition with the business itself, something the business tries to avoid at all costs.

    We are no business, we make no profits off our tools. Our goals are only to create tools and let them go into the wild, so you can use them. Currently, we use GitHub to host some of our tutorials and guides. Now imagine that two years from now Microsoft decides to decommission GitHub. Why? Maybe because people gradually migrate from GitHub to GitLab.

    How are we to protect ourselves from the deadly business hand? We consolidate our tools, tutorials, and games into this very site. The first step, now complete, was to create a static site generator to generate this very site.

    So far the generated site has the following functionality:

    @@ -132,10 +124,14 @@
  • sitewide language selection
  • We will make the site even more convenient during this year. Stay tuned!

    -

    That’s it for describing the beginning of our efforts to protect ourselves from third-party solutions.

    - -
    +

    That's it for describing the beginning of our efforts to protect ourselves from third-party solutions.

    +
    +
    diff --git a/en/news/editor-0.4.0-and-0.5.0-plans.html b/en/news/editor-0.4.0-and-0.5.0-plans.html index 5b0ccb6..e31b68e 100644 --- a/en/news/editor-0.4.0-and-0.5.0-plans.html +++ b/en/news/editor-0.4.0-and-0.5.0-plans.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,38 +80,44 @@ -
    -

    In the news

    -
    -

    - Editor 0.4.0 and plans for 0.5.0 -

    -

    - 2015-03-07 00:00 -

    -
    -

    We completed Editor 0.4.0 in January. As it was planned, it only contains basic abilities to open and save a project. The major goal was to make MJIN, Python and Qt work together (we were unable to use PyQt or PySide due to technical difficulties).

    -

    You can see 0.4.0 in action here.

    -

    We started Editor 0.5.0 development in February. It’s 45% ready at the moment.

    +
    +

    In the news...

    +
    +

    + Editor 0.4.0 and plans for 0.5.0 +

    +

    + 2015-03-07 00:00 +

    +
    +

    We completed Editor 0.4.0 in January. As it was planned, it only contains basic abilities to open and save a project. The major goal was to make MJIN, Python and Qt work together (we were unable to use PyQt or PySide due to technical difficulties).

    +

    You can see 0.4.0 in action here.

    +

    We started Editor 0.5.0 development in February. It's 45% ready at the moment.

    Editor 0.5.0 planned features:

    -
      +
      1. Scene node tree editing
      2. -
      3. Property browser with nodes’ position and model editing
      4. +
      5. Property browser with nodes' position and model editing
      6. Qt5 support for the sake of easy building on various Linux distributions

      We estimate to complete it in April.

      - -
    +
    +
    diff --git a/en/news/editor-0.4.0-plans.html b/en/news/editor-0.4.0-plans.html index 8497a30..35501e2 100644 --- a/en/news/editor-0.4.0-plans.html +++ b/en/news/editor-0.4.0-plans.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,31 +80,37 @@ -
    -

    In the news

    -
    -

    - Editor roadmap for 0.4.0 -

    -

    - 2015-01-13 00:00 -

    -
    -

    The development of Editor 0.3.0 showed us, that usage of custom GUI was not a perfect idea. A few months ago, custom GUI seemed as a simpler way to do things, but it turned out to lack many little features, that are crucial if you’re planning to make a convenient tool.

    +
    +

    In the news...

    +
    +

    + Editor roadmap for 0.4.0 +

    +

    + 2015-01-13 00:00 +

    +
    +

    The development of Editor 0.3.0 showed us, that usage of custom GUI was not a perfect idea. A few months ago, custom GUI seemed as a simpler way to do things, but it turned out to lack many little features, that are crucial if you're planning to make a convenient tool.

    In the end, we decided to do what we wanted to do in the first place - to use Qt library as the GUI library for our editor.

    -

    So, we’ll rewrite the Editor with Qt interface and a little bit refreshed project concept in mind. We plan to release the editor with new GUI and a set of basic features like loading and saving projects in May.

    - -
    +

    So, we'll rewrite the Editor with Qt interface and a little bit refreshed project concept in mind. We plan to release the editor with new GUI and a set of basic features like loading and saving projects in May.

    +
    +
    diff --git a/en/news/editor-06-roadmap.html b/en/news/editor-06-roadmap.html index 26cd517..789a7b5 100644 --- a/en/news/editor-06-roadmap.html +++ b/en/news/editor-06-roadmap.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,29 +80,31 @@ -
    -

    In the news

    -
    -

    - Editor 0.5.0 and plans for 0.6.0 -

    -

    - 2015-04-15 00:00 -

    -
    -

    We completed Editor 0.5.0. As it was planned, it has scene node tree editing, property browser, and Qt5 support. You can see 0.5.0 in action here.

    +
    +

    In the news...

    +
    +

    + Editor 0.5.0 and plans for 0.6.0 +

    +

    + 2015-04-15 00:00 +

    +
    +

    We completed Editor 0.5.0. As it was planned, it has scene node tree editing, property browser, and Qt5 support. You can see 0.5.0 in action here.

    Also, we have just started Editor 0.6.0 development.

    Editor 0.6.0 planned features:

    -
      +
      1. Camera node editing
      2. Light node editing
      3. Node rotation editing
      4. @@ -120,9 +114,13 @@
      5. Scene node selection by clicking a mouse in the scene

      We estimate to complete it in August.

      - -
    +
    +
    diff --git a/en/news/editor-06.html b/en/news/editor-06.html index a66abd3..32b3c3a 100644 --- a/en/news/editor-06.html +++ b/en/news/editor-06.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +80,30 @@ -
    -

    In the news

    -
    -

    - Editor 0.6.0 -

    -

    - 2015-06-28 00:00 -

    -
    -

    We completed Editor 0.6.0. You can see 0.6.0 in action here.

    +
    +

    In the news...

    +
    +

    + Editor 0.6.0 +

    +

    + 2015-06-28 00:00 +

    +
    +

    We completed Editor 0.6.0. You can see 0.6.0 in action here.

    Editor 0.6.0 got the following new features:

    -
      +
      1. Camera and light node positioning
      2. Node rotation along X axis
      3. Node scripting support
      4. @@ -118,10 +112,14 @@
      5. Node selection by LMB click in the scene
      6. Window geometry and state restoration after restart
      -

      We don’t have 0.7.0 completion date at the moment, because we decided to take some time to set up a roadmap for Shuan and Mahjong 2. Once done, we will share 0.7.0 completion date and its feature list along with the roadmap.

      - -
    +

    We don't have 0.7.0 completion date at the moment, because we decided to take some time to set up a roadmap for Shuan and Mahjong 2. Once done, we will share 0.7.0 completion date and its feature list along with the roadmap.

    +
    +
    diff --git a/en/news/example-driven-development.html b/en/news/example-driven-development.html index be26dc1..95b9434 100644 --- a/en/news/example-driven-development.html +++ b/en/news/example-driven-development.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +80,28 @@ -
    -

    In the news

    -
    -

    - Example-driven development -

    -

    - 2018-06-27 00:00 -

    -
    -
    -Debug broker
    Debug broker
    -
    +
    +

    In the news...

    +
    +

    + Example-driven development +

    +

    + 2018-06-27 00:00 +

    +
    +

    Debug broker

    This article explains how the third OpenSceneGraph cross-platform example opened our eyes to example-driven development.

    2018-08 EDIT: the third example has been renamed to the fourth one due to the reasons described in the next article.

    The third OpenSceneGraph cross-platform example

    @@ -121,7 +113,7 @@
  • mobiles have restrictions on background processes
  • web browsers are HTTP clients by design
  • -

    That’s why we decided to create a mediator between debugged application and UI. Debug broker, a small Node.js application, became that mediator. Debug broker uses no external dependencies, so it’s easy to run virtually anywhere. Also, since debug broker is a server application, you can configure it once and use it for any number of applications.

    +

    That's why we decided to create a mediator between debugged application and UI. Debug broker, a small Node.js application, became that mediator. Debug broker uses no external dependencies, so it's easy to run virtually anywhere. Also, since debug broker is a server application, you can configure it once and use it for any number of applications.

    Both debug UI and debug broker use JavaScript because we wanted these tools to be accessible from anywhere with no prior installation. This decision limited us to web browser solution. Providing any sort of desktop application would incur additional installation and maintenance effort, which would only complicate the tools.

    Example-driven development establishment

    Once the third example was implemented, we realized how important and beneficial it is to develop new features outside the main project:

    @@ -131,14 +123,18 @@

    When we publicly share our knowledge:

      -
    • we must create documentation for everyone (including ourselves later) to understand what’s going on
    • +
    • we must create documentation for everyone (including ourselves later) to understand what's going on
    • we must not use hacks because that would break your trust in us
    -

    From now on, all new features like input handling, Mahjong layout loading, resource caching, etc. are going to be first implemented as examples. We call this example-driven development.

    -

    That’s it for explaining how the third OpenSceneGraph cross-platform example opened our eyes to example-driven development.

    - -
    +

    From now on, all new features like input handling, Mahjong layout loading, resource caching, etc. are going to be first implemented as examples. We call this example-driven development.

    +

    That's it for explaining how the third OpenSceneGraph cross-platform example opened our eyes to example-driven development.

    +
    +
    diff --git a/en/news/examples-and-dependencies.html b/en/news/examples-and-dependencies.html index 25ed6d3..ff7b242 100644 --- a/en/news/examples-and-dependencies.html +++ b/en/news/examples-and-dependencies.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,32 +80,32 @@ -
    -

    In the news

    -
    -

    - Examples and dependencies -

    -

    - 2018-08-21 00:00 -

    -
    -
    -Cloud
    Cloud
    -
    +
    +

    In the news...

    +
    +

    + Examples and dependencies +

    +

    + 2018-08-21 00:00 +

    +
    +

    Cloud

    This article describes two new OpenSceneGraph cross-platform examples and the change in handling dependencies.

    Examples of HTTP client and node selection

    Once we finished working on the remote debugging example and reported its completion, we were surprised by the fact that secure HTTP connection between a debugged application and debug broker was only working in the web version of the example. Desktop and mobile versions only worked with insecure HTTP.

    -

    Since current debug scheme has no authentication, insecure debugging over HTTP doesn’t really hurt. However, if we want to access resources located at popular sites like GitHub and BitBucket, we have to support secure HTTP.

    +

    Since current debug scheme has no authentication, insecure debugging over HTTP doesn't really hurt. However, if we want to access resources located at popular sites like GitHub and BitBucket, we have to support secure HTTP.

    The need to support HTTPS on each platform spurred us to create HTTP client example. Turned out, each platform had its own preferred way of doing secure HTTP:

    • web (Emscripten) provides Fetch API
    • @@ -121,19 +113,15 @@
    • Android provides HttpUrlConnection in Java
    • iOS provides NSURLSession in Objective-C
    -

    The need to support different languages on different platforms resulted in the creation of so-called ‘host-guest’ pattern:

    -
      -
    • guest (platform agnostic) +

      The need to support different languages on different platforms resulted in the creation of so-called 'host-guest' pattern:

        +
      • guest (platform agnostic)
        • provides networking representation
        • -
        • used by cross-platform C++ code
        • -
      • -
      • host (specific platform) -
          +
        • used by cross-platform C++ code
      • +
      • host (specific platform)
        • polls guest for pending requests
        • processes them
        • -
        • reports results back to the guest
        • -
      • +
      • reports results back to the guest

    Node selection example was straightforward and caused no troubles.

    The change in handling dependencies

    @@ -144,12 +132,16 @@
  • iOS simulator and device builds of the same example being in separate Xcode projects
  • OpenSceneGraph taking 20-30 minutes to build
  • -

    These shortcomings were slowing us down and complicating the development of new examples. Upon hitting these problems ten more times this month we decided it was time to solve them once and for all. Now OpenSceneGraph is built as part of each example in 2-3 minutes, and there’s no more dependency magic involved. We took the same approach of building dependencies as part of each example to other external libraries like Mongoose and libpng-android, too.

    +

    These shortcomings were slowing us down and complicating the development of new examples. Upon hitting these problems ten more times this month we decided it was time to solve them once and for all. Now OpenSceneGraph is built as part of each example in 2-3 minutes, and there's no more dependency magic involved. We took the same approach of building dependencies as part of each example to other external libraries like Mongoose and libpng-android, too.

    With these obstacles out of the way, we can now iterate faster. Just in time for the next technical demonstration of Mahjong 2!

    -

    That’s it for describing two new OpenSceneGraph cross-platform examples and the change in handling dependencies.

    - -
    +

    That's it for describing two new OpenSceneGraph cross-platform examples and the change in handling dependencies.

    +
    +
    diff --git a/en/news/ideal-gamedev.html b/en/news/ideal-gamedev.html index 1b4a0c8..8c1d9ed 100644 --- a/en/news/ideal-gamedev.html +++ b/en/news/ideal-gamedev.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +80,28 @@ -
    -

    In the news

    -
    -

    - Ideal games and game development tools -

    -

    - 2018-11-19 00:00 -

    -
    -
    -A man without and with tools
    A man without and with tools
    -
    +
    +

    In the news...

    +
    +

    + Ideal games and game development tools +

    +

    + 2018-11-19 00:00 +

    +
    +

    A man without and with tools

    In this article, we discuss how ideal video game and video game development tool look like, in our opinion.

    Questions

    As you know, the goals of Opensource Game Studio are:

    @@ -131,9 +123,10 @@
  • insufficient optimization: the game is slow
  • critical bugs: the game crashes from time to time
  • -

    We work hard to make sure the games we create are accessible everywhere. That’s why we released the second demonstration of OGS Mahjong 2 only for the web: because you can run web version virtually anywhere.

    +

    We work hard to make sure the games we create are accessible everywhere. That's why we released +the second demonstration of OGS Mahjong 2 only for the web: because you can run web version virtually anywhere.

    Answer 2: A video game development tool is ideal if it lets you create a video game of your dream in the shortest time possible

    -

    Even though we put a lot of effort into sharing our knowledge through guides and tutorials, we understand that those take a lot of time to study. One can’t possibly make even a simple video game like Memory without performing the following steps:

    +

    Even though we put a lot of effort into sharing our knowledge through guides and tutorials, we understand that those take a lot of time to study. One can't possibly make even a simple video game like Memory without performing the following steps:

    • configure the development environment
    • write code
    • @@ -141,12 +134,16 @@
    • debug the application
    • repeat write-build-debug steps as many times as necessary
    -

    Writing code and debugging are probably the ultimate forms of input and output of any software, so we can’t escape those. However, there are ways to completely remove (or at least significantly decrease) the need for development environment setup and build steps. And this is what we are going to do in the coming months.

    +

    Writing code and debugging are probably the ultimate forms of input and output of any software, so we can't escape those. However, there are ways to completely remove (or at least significantly decrease) the need for development environment setup and build steps. And this is what we are going to do in the coming months.

    Our goal for the coming months is to create a video game development tool that would allow any programmer (or sufficiently skilled person) to create the Memory video game from scratch in an hour.

    -

    That’s it for discussing how ideal video game and video game development tool look like, in our opinion.

    - -
    +

    That's it for discussing how ideal video game and video game development tool look like, in our opinion.

    +
    +
    diff --git a/en/news/index.html b/en/news/index.html index bf14220..909a6c7 100644 --- a/en/news/index.html +++ b/en/news/index.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,211 +80,182 @@ -
    -

    News

    +
    +

    News

    -
    -

    - Defending availability -

    -

    - 2019-04-16 00:00 -

    -
    -
    -Altai’s Katun river
    Altai’s Katun river
    -
    +
    +

    + On the way to durable applications +

    +

    + 2019-08-05 00:00 +

    +
    +

    Pskov's veche

    +

    This article describes our first durable application for desktop PCs: PSKOV static site generator.

    +

    Durability

    +

    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, PSKOV runs even under Windows 2000, so PSKOV has backward compatibility of 19 years.. . .

    +
    + +
    +
    +

    + Defending availability +

    +

    + 2019-04-16 00:00 +

    +
    +

    Altai's Katun river

    In this article, we describe the beginning of our efforts to protect ourselves from third-party solutions.

    -

    Since day one of Opensource Game Studio project, we rely heavily on third-party solutions to help us achieve the goal of creating the best game development tools. To this date, we used forums, task trackers, mailing lists, social networks, code version control systems, hosting providers, compiler suites, libraries, and so on. Each third-party solution we used had its own lifespan. …

    - -
    - -
    -
    -

    - Teaching kids to program -

    -

    - 2019-02-04 00:00 -

    -
    -
    -Students and teachers
    Students and teachers
    -
    +

    Since day one of Opensource Game Studio project, we rely heavily on third-party solutions to help us achieve the goal of creating the best game development tools. To this date, we used forums, task trackers, mailing lists, social networks, code version control systems, hosting providers, compiler suites, libraries, and so on. Each third-party solution we used had its own lifespan.. . .

    +
    + +
    +
    +

    + Teaching kids to program +

    +

    + 2019-02-04 00:00 +

    +
    +

    Students and teachers

    In this article, Michael shares his experience of teaching kids to program.

    -

    Here’s what he covers:

    +

    Here's what he covers:

    • organization of the learning process
    • learning plan
    • -
    • memory game
    • -
    • development tools
    • -
    • lessons
    • -
    • results and plans …
    • +
    • memory game. . .
    - -
    - -
    -
    -

    - Year of rethinking -

    -

    - 2019-01-01 0:01 -

    -
    -
    -Sparkler
    Sparkler
    -
    -

    It was a year of reimagining and rethinking. As some of you may remember, we started this project to make a game development tool. During the years, the idea evolved from one form to another, sometimes the changes were significant, other times we threw away all the code and started anew. …

    - -
    - -
    -
    -

    - Ideal games and game development tools -

    -

    - 2018-11-19 00:00 -

    -
    -
    -A man without and with tools
    A man without and with tools
    -
    +
    + +
    +
    +

    + Year of rethinking +

    +

    + 2019-01-01 0:01 +

    +
    +

    Sparkler

    +

    It was a year of reimagining and rethinking. As some of you may remember, we started this project to make a game development tool. During the years, the idea evolved from one form to another, sometimes the changes were significant, other times we threw away all the code and started anew.. . .

    +
    + +
    +
    +

    + Ideal games and game development tools +

    +

    + 2018-11-19 00:00 +

    +
    +

    A man without and with tools

    In this article, we discuss how ideal video game and video game development tool look like, in our opinion.

    Questions

    -

    As you know, the goals of Opensource Game Studio are:

    -
      -
    • creation of free video game development tools …
    • -
    - -
    - -
    -
    -

    - OGS Mahjong 2: Demo 2 -

    -

    - 2018-10-02 00:00 -

    -
    -
    -Start of a Mahjong party
    Start of a Mahjong party
    -
    -

    We are glad to announce the release of the second demonstration of OGS Mahjong 2. The purposes of this release were to refine our development techniques and build a solid cross-platform foundation.

    -

    Release

    - -
    - -
    -
    -

    - Examples and dependencies -

    -

    - 2018-08-21 00:00 -

    -
    -
    -Cloud
    Cloud
    -
    +

    As you know, the goals of Opensource Game Studio are:. . .

    +
    + +
    +
    +

    + OGS Mahjong 2: Demo 2 +

    +

    + 2018-10-02 00:00 +

    +
    +

    Start of a Mahjong party

    +

    We are glad to announce the release of the second demonstration of OGS Mahjong 2. The purposes of this release were to refine our development techniques and build a solid cross-platform foundation.. . .

    +
    + +
    +
    +

    + Examples and dependencies +

    +

    + 2018-08-21 00:00 +

    +
    +

    Cloud

    This article describes two new OpenSceneGraph cross-platform examples and the change in handling dependencies.

    Examples of HTTP client and node selection

    -

    Once we finished working on the remote debugging example and reported its completion, we were surprised by the fact that secure HTTP connection between a debugged application and debug broker was only working in the web version of the example. Desktop and mobile versions only worked with insecure HTTP. …

    - -
    - -
    -
    -

    - Example-driven development -

    -

    - 2018-06-27 00:00 -

    -
    -
    -Debug broker
    Debug broker
    -
    +

    Once we finished working on the remote debugging example and reported its completion, we were surprised by the fact that secure HTTP connection between a debugged application and debug broker was only working in the web version of the example. Desktop and mobile versions only worked with insecure HTTP.. . .

    +
    + +
    +
    +

    + Example-driven development +

    +

    + 2018-06-27 00:00 +

    +
    +

    Debug broker

    This article explains how the third OpenSceneGraph cross-platform example opened our eyes to example-driven development.

    -

    2018-08 EDIT: the third example has been renamed to the fourth one due to the reasons described in the next article. …

    - -
    - -
    -
    -

    - OpenSceneGraph cross-platform examples -

    -

    - 2018-04-20 00:00 -

    -
    -
    -iOS Simulator renders a cube
    iOS Simulator renders a cube
    -
    +

    2018-08 EDIT: the third example has been renamed to the fourth one due to the reasons described in the next article.. . .

    +
    + +
    +
    +

    + OpenSceneGraph cross-platform examples +

    +

    + 2018-04-20 00:00 +

    +
    +

    iOS Simulator renders a cube

    This article summarizes the work we did to produce the first two cross-platform OpenSceneGraph examples.

    -

    By the time the first technology demonstration of OGS Mahjong 2 has been released, we’ve already had issue request (to explain how to load images with OpenSceneGraph on Android) hanging for some time. We considered creating a new tutorial for OpenSceneGraph cross-platform guide at first. However, we realized that it’s time-consuming and excessive for such a tiny topic (compared to what an average game has) as image loading. We decided to continue sharing our knowledge in the form of concrete examples. That’s how OpenSceneGraph cross-platform examples were born. …

    +

    By the time the first technology demonstration of OGS Mahjong 2 has been released, we've already had issue request (to explain how to load images with OpenSceneGraph on Android) hanging for some time. We considered creating a new tutorial for OpenSceneGraph cross-platform guide at first. However, we realized that it's time-consuming and excessive for such a tiny topic (compared to what an average game has) as image loading. We decided to continue sharing our knowledge in the form of concrete examples. That's how OpenSceneGraph cross-platform examples were born.. . .

    +
    + +
    -
    - -
    -
    -

    - First techdemo of OGS Mahjong 2: Gameplay -

    -

    - 2018-02-16 00:00 -

    -
    -
    -End of a Mahjong party
    End of a Mahjong party
    -
    -

    We are glad to announce the release of the first technical demonstration of OGS Mahjong 2. The purpose of this release was to verify gameplay across supported platforms.

    -

    Get techdemo for your platform:

    - - -
    - -
    - -

    Page 1 of 6

    +

    Page 1 of 6

    Older »

    +
    diff --git a/en/news/index.template b/en/news/index.template new file mode 100644 index 0000000..42ed0ef --- /dev/null +++ b/en/news/index.template @@ -0,0 +1,107 @@ + + + + + + + + +
    +

    News

    + +PSKOV_PREVIEWS +PSKOV_PAGINATION + + +
    + + diff --git a/en/news/index2.html b/en/news/index2.html index 5e21132..d9bfc64 100644 --- a/en/news/index2.html +++ b/en/news/index2.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,201 +80,176 @@ -
    -

    News

    +
    +

    News

    -
    -

    - Mahjong recreation start -

    -

    - 2018-01-26 00:00 -

    -
    -
    -Spherical tiles in a Mahjong layout
    Spherical tiles in a Mahjong layout
    -
    +
    +

    + First techdemo of OGS Mahjong 2: Gameplay +

    +

    + 2018-02-16 00:00 +

    +
    +

    End of a Mahjong party

    +

    We are glad to announce the release of the first technical demonstration of OGS Mahjong 2. The purpose of this release was to verify gameplay across supported platforms.. . .

    +
    + +
    +
    +

    + Mahjong recreation start +

    +

    + 2018-01-26 00:00 +

    +
    +

    Spherical tiles in a Mahjong layout

    This article describes the start of Mahjong game recreation.

    Plan

    -

    We started Mahjong recreation endeavour by composing a brief plan to get gameplay with minimal graphics:

    -
      -
    • Load single layout …
    • -
    - -
    - -
    -
    -

    - The year of lessons -

    -

    - 2017-12-31 22:00 -

    -
    -
    -Sparkler
    Sparkler
    -
    -

    So, the year 2017 is approaching its finale, the year’s results have already been summed up. We’re going to take a break from igniting the fireworks or preparation of the champagne so that we can designate our goal for the following year. …

    - -
    - -
    -
    -

    - 2017 summary -

    -

    - 2017-11-22 00:00 -

    -
    -
    -Memory game in the background
    Memory game in the background
    -
    -

    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.

    -

    Brief history

    -

    Opensource Game Studio project is 12 years old now. …

    - -
    - -
    -
    -

    - Back to the Static -

    -

    - 2017-10-16 00:00 -

    -
    -
    -Static and dynamic unite
    Static and dynamic unite
    -
    -

    We have been using Wordpress as our website engine for more than seven years. And now it’s time to move forward. Or backward. For some time we’ve been tracking the development of the new breed of website engines - static site generators. It seems that this is the technology capable of changing past into future. …

    - -
    - -
    -
    -

    - The birth of MJIN world -

    -

    - 2017-09-10 00:00 -

    -
    -
    -An explosion giving birth to something new
    An explosion giving birth to something new
    -
    +

    We started Mahjong recreation endeavour by composing a brief plan to get gameplay with minimal graphics:. . .

    +
    + +
    +
    +

    + The year of lessons +

    +

    + 2017-12-31 22:00 +

    +
    +

    Sparkler

    +

    So, the year 2017 is approaching its finale, the year's results have already been summed up. We're going to take a break from igniting the fireworks or preparation of the champagne so that we can designate our goal for the following year.. . .

    +
    + +
    +
    +

    + 2017 summary +

    +

    + 2017-11-22 00:00 +

    +
    +

    Memory game in the background

    +

    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.

    +

    Brief history. . .

    +
    + +
    +
    +

    + Back to the Static +

    +

    + 2017-10-16 00:00 +

    +
    +

    Static and dynamic unite

    +

    We have been using Wordpress as our website engine for more than seven years. And now it's time to move forward. Or backward. For some time we've been tracking the development of the new breed of website engines - static site generators. It seems that this is the technology capable of changing past into future.. . .

    +
    + +
    +
    +

    + The birth of MJIN world +

    +

    + 2017-09-10 00:00 +

    +
    +

    An explosion giving birth to something new

    This article describes the birth of MJIN world in August 2017.

    mjin-player

    -

    As you know, we spent July to research scripting. We found a solution that satisfies the following criteria. Scripts should: …

    - -
    - -
    -
    -

    - Scripting research -

    -

    - 2017-08-16 00:00 -

    -
    -
    -Textbook with a text
    Textbook with a text
    -
    +

    As you know, we spent July to research scripting. We found a solution that satisfies the following criteria. Scripts should:. . .

    +
    + +
    +
    +

    + Scripting research +

    +

    + 2017-08-16 00:00 +

    +
    +

    Textbook with a text

    This article describes scripting research in July 2017.

    -

    Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.

    - -
    - -
    -
    -

    - OpenSceneGraph cross-platform guide -

    -

    - 2017-07-17 00:00 -

    -
    -
    -OpenSceneGraph sample application in desktop and mobile
    OpenSceneGraph sample application in desktop and mobile
    -
    +

    Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.. . .

    +
    + +
    +
    +

    + OpenSceneGraph cross-platform guide +

    +

    + 2017-07-17 00:00 +

    +
    +

    OpenSceneGraph sample application in desktop and mobile

    This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.

    -

    June marked the finish of OpenSceneGraph cross-platform guide with the publishing of the last (initially planned) tutorial. The tutorial describes how to build and run sample OpenSceneGraph application in Web using Emscripten. …

    - -
    - -
    -
    -

    - iOS tutorial -

    -

    - 2017-06-08 10:00 -

    -
    -
    -Earth and a rocket
    Earth and a rocket
    -
    +

    June marked the finish of OpenSceneGraph cross-platform guide with the publishing of the last (initially planned) tutorial. The tutorial describes how to build and run sample OpenSceneGraph application in Web using Emscripten.. . .

    +
    + +
    +
    +

    + iOS tutorial +

    +

    + 2017-06-08 10:00 +

    +
    +

    Earth and a rocket

    This article describes problems we faced during the creation of iOS tutorial in May 2017.

    -

    This February 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. …

    - -
    - -
    -
    -

    - OpenSceneGraph sample -

    -

    - 2017-05-12 00:00 -

    -
    -
    -Rocket in the distance
    Rocket in the distance
    -
    -

    This article describes creation of the tutorials for building sample OpenSceneGraph application under Linux, macOS, Windows, and Android in April 2017.

    -

    Previous tutorials described how to install OpenSceneGraph under Linux, macOS, Windows and render a model using the standard osgviewer tool. This time we worked on a sample OpenSceneGraph application that would run under Linux, macOS, Windows, and Android. …

    - -
    - -
    +

    This February 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.. . .

    +
    + +
    -

    Page 2 of 6

    +

    Page 2 of 6

    « Newer Older »

    +
    diff --git a/en/news/index3.html b/en/news/index3.html index 1942d15..811666b 100644 --- a/en/news/index3.html +++ b/en/news/index3.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,200 +80,177 @@ -
    -

    News

    +
    +

    News

    -
    -

    - It's all fine -

    -

    - 2017-04-07 00:00 -

    -
    -
    -Flight of a rocket
    Flight of a rocket
    -
    +
    +

    + OpenSceneGraph sample +

    +

    + 2017-05-12 00:00 +

    +
    +

    Rocket in the distance

    +

    This article describes creation of the tutorials for building sample OpenSceneGraph application under Linux, macOS, Windows, and Android in April 2017.

    +

    Previous tutorials described how to install OpenSceneGraph under Linux, macOS, Windows and render a model using the standard osgviewer tool. This time we worked on a sample OpenSceneGraph application that would run under Linux, macOS, Windows, and Android.. . .

    +
    + +
    +
    +

    + It's all fine +

    +

    + 2017-04-07 00:00 +

    +
    +

    Flight of a rocket

    This article describes creation of the first four OpenSceneGraph tutorials in March 2017.

    -

    The first four OpenSceneGraph tutorials explain how to create a cube model with Blender and display the model under Linux, macOS, or Windows using OpenSceneGraph tool called osgviewer. …

    - -
    - -
    -
    -

    - Let's go -

    -

    - 2017-03-16 00:00 -

    -
    -
    -Gagarin’s words
    Gagarin’s words
    -
    +

    The first four OpenSceneGraph tutorials explain how to create a cube model with Blender and display the model under Linux, macOS, or Windows using OpenSceneGraph tool called osgviewer.. . .

    +
    + +
    +
    +

    + Let's go +

    +

    + 2017-03-16 00:00 +

    +
    +

    Gagarin's words

    In this article we describe our progress in January and February of 2017: rendering under iOS/Web and a new tutorial tool.

    Rendering under iOS/Web

    -

    To our surprise, we got a simple red cube rendered under iOS and Web 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. …

    - -
    - -
    -
    -

    - The year of challenges -

    -

    - 2017-01-25 00:00 -

    -
    -
    -Rocket launch at Baikonur
    Rocket launch at Baikonur
    -
    +

    To our surprise, we got a simple red cube rendered under iOS and Web 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.. . .

    +
    + +
    +
    +

    + The year of challenges +

    +

    + 2017-01-25 00:00 +

    +
    +

    Rocket launch at Baikonur

    This article describes our plans for 2017.

    -

    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: …

    - -
    - -
    -
    -

    - Happy 2017 -

    -

    - 2016-12-31 00:00 -

    -
    -
    -Christmas tree
    Christmas tree
    -
    -

    Okay. It’s been a hard year for everyone in the team. And it’s almost over. Praise it ends! Praise the new one!

    -

    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. …

    - -
    - -
    -
    -

    - November 2016 recap -

    -

    - 2016-12-15 00:00 -

    -
    -
    -Construction of a building
    Construction of a building
    -
    +

    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:. . .

    +
    + +
    +
    +

    + Happy 2017 +

    +

    + 2016-12-31 00:00 +

    +
    +

    Christmas tree

    +

    Okay. It's been a hard year for everyone in the team. And it's almost over. Praise it ends! Praise the new one!

    +

    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.. . .

    +
    + +
    +
    +

    + November 2016 recap +

    +

    + 2016-12-15 00:00 +

    +
    +

    Construction of a building

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

    -

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

    - -
    - -
    -
    -

    - October 2016 recap -

    -

    - 2016-11-19 00:00 -

    -
    -
    -Gaining Android support was like climbing a mountain for us
    Gaining Android support was like climbing a mountain for us
    -
    -

    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. …

    - -
    - -
    -
    -

    - Technology showcases -

    -

    - 2016-10-31 00:00 -

    -
    -
    -Feature file in the background
    Feature file in the background
    -
    -

    In this article, we take another look at 2015-2016 live sessions’ format and introduce a new showcase format for 2017.

    -

    2015 and 2016: live sessions.

    -

    As you know, we use live sessions to show the state of our technology and create a small functional game from scratch. We have conducted four live sessions in the past year, which gave birth to the following small games: …

    - -
    - -
    -
    -

    - September 2016 recap -

    -

    - 2016-10-11 00:00 -

    -
    -
    -Mahjong created during live session
    Mahjong created during live session
    -
    +

    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.. . .

    +
    + +
    +
    +

    + October 2016 recap +

    +

    + 2016-11-19 00:00 +

    +
    +

    Gaining Android support was like climbing a mountain for us

    +

    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.. . .

    +
    + +
    +
    +

    + Technology showcases +

    +

    + 2016-10-31 00:00 +

    +
    +

    Feature file in the background

    +

    In this article, we take another look at 2015-2016 live sessions' format and introduce a new showcase format for 2017.

    +

    2015 and 2016: live sessions.. . .

    +
    + +
    +
    +

    + September 2016 recap +

    +

    + 2016-10-11 00:00 +

    +
    +

    Mahjong created during live session

    This article explains September 2016 live session stages: draft, rehearsal, live session itself, and publishing.

    -

    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. …

    - -
    - -
    -
    -

    - OGS Editor 0.10 and live session materials -

    -

    - 2016-10-03 00:00 -

    -
    -
    -OGS Editor with Mahjong game
    OGS Editor with Mahjong game
    -
    -

    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.

    - - -
    - -
    +

    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.. . .

    +
    + +
    -

    Page 3 of 6

    +

    Page 3 of 6

    « Newer Older »

    +
    diff --git a/en/news/index4.html b/en/news/index4.html index b6ef4e9..f13ef3f 100644 --- a/en/news/index4.html +++ b/en/news/index4.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,176 +80,169 @@ -
    -

    News

    - -
    -

    - A few words about live session yesterday -

    -

    - 2016-09-26 00:00 -

    -
    - -

    Mahjong Solitaire was successfully created, and it took less than 4 hours.

    -

    We will publish live session materials later this week. …

    - -
    - -
    -
    -

    - Live session is in 24 hours -

    -

    - 2016-09-24 00:00 -

    -
    - -

    Get ready for live session, it’s about to happen in 24 hours! …

    - -
    - -
    -
    -

    - Live session: 25 September 2016 -

    -

    - 2016-09-17 00:00 -

    -
    - -

    We will hold live session on 25 September 2016 at 12:00 CEST

    - -
    - -
    -
    -

    - August 2016 recap -

    -

    - 2016-09-03 00:00 -

    -
    -
    -OGS Editor with a spherical scene node
    OGS Editor with a spherical scene node
    -
    -

    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.

    -

    UIQt module is a collection of UI components backed by Qt. We only use it for Editor UI at the moment. …

    - -
    - -
    -
    -

    - We’re back to social networks -

    -

    - 2016-08-18 00:00 -

    -
    -

    If you follow us on Facebook, Twitter, or VK you noticed we started to use them again. That’s no coincidence: we’re finally ready to communicate our progress verbally after 4 years of almost silent development. …

    - -
    - -
    -
    -

    - Once Mahjong – always Mahjong -

    -

    - 2016-08-10 00:00 -

    -
    -

    We started Opensource Game Studio project a long time ago. We wanted to provide open source community with tools to create games. However, it was unclear what tools’ purpose was. So we decided to start small: create a game first.

    -

    It took us 3 years to reach the first goal: we released OGS Mahjong 1.0 in 2012. Even for a hobby project (we spend about 40 hours a month) it’s too long. …

    - -
    - -
    -
    -

    - May 2016 live session materials -

    -

    - 2016-05-29 00:00 -

    -
    - -

    This time we have shown how to create a simple Domino based game. Below you can find all materials related to the game creation. …

    - -
    - -
    -
    -

    - Live session: 28 May 2016 -

    -

    - 2016-05-17 00:00 -

    -
    -

    We’re glad to annouce that the LiveCoding session will take place on 28 May 2016 at 12:00 CEST. Join us! …

    - -
    - -
    -
    -

    - May live session (Editor 0.9) -

    -

    - 2016-04-24 00:00 -

    -
    -

    As you know, the previously published roadmap assumed, that we would hold a live session in April and it would feature a ping-pong game created with Editor 0.9.

    -

    We have to admit, our abilities to plan are not yet good enough. That’s why the next live session will take place by the end of May. The exact date will be announced later. …

    +
    +

    News

    -
    - -
    +
    +

    + OGS Editor 0.10 and live session materials +

    +

    + 2016-10-03 00:00 +

    +
    +

    OGS Editor with Mahjong game

    +

    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.

    + +
    + +
    +
    +

    + A few words about live session yesterday +

    +

    + 2016-09-26 00:00 +

    +
    + +

    Mahjong Solitaire was successfully created, and it took less than 4 hours. +. . .

    +
    + +
    +
    +

    + Live session is in 24 hours +

    +

    + 2016-09-24 00:00 +

    +
    + +

    Get ready for live session, it's about to happen in 24 hours!. . .

    +
    + +
    +
    +

    + Live session: 25 September 2016 +

    +

    + 2016-09-17 00:00 +

    +
    + +

    We will hold live session on 25 September 2016 at 12:00 CEST. . .

    +
    + +
    +
    +

    + August 2016 recap +

    +

    + 2016-09-03 00:00 +

    +
    +

    OGS Editor with a spherical scene node

    +

    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.. . .

    +
    + +
    +
    +

    + We’re back to social networks +

    +

    + 2016-08-18 00:00 +

    +
    +

    If you follow us on Facebook, Twitter, or VK you noticed we started to use them again. That's no coincidence: we're finally ready to communicate our progress verbally after 4 years of almost silent development.. . .

    +
    + +
    +
    +

    + Once Mahjong – always Mahjong +

    +

    + 2016-08-10 00:00 +

    +
    +

    We started Opensource Game Studio project a long time ago. We wanted to provide open source community with tools to create games. However, it was unclear what tools' purpose was. So we decided to start small: create a game first.. . .

    +
    + +
    +
    +

    + May 2016 live session materials +

    +

    + 2016-05-29 00:00 +

    +
    + +

    This time we have shown how to create a simple Domino based game. Below you can find all materials related to the game creation.. . .

    +
    + +
    +
    +

    + Live session: 28 May 2016 +

    +

    + 2016-05-17 00:00 +

    +
    +

    We're glad to annouce that the LiveCoding session will take place on 28 May 2016 at 12:00 CEST. Join us!. . .

    +
    + +
    -

    Page 4 of 6

    +

    Page 4 of 6

    « Newer Older »

    +
    diff --git a/en/news/index5.html b/en/news/index5.html index 3313a6e..cc779e7 100644 --- a/en/news/index5.html +++ b/en/news/index5.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,171 +80,166 @@ -
    -

    News

    - -
    -

    - "Rolling ball" live session videos and downloads -

    -

    - 2016-02-10 00:00 -

    -
    -

    Since we held 2 live sessions to create “Rolling ball” game, here are 2 YouTube videos of the process:

    - - -

    - -
    - -
    -
    -

    - Game creation live session (part 2): 7 February 2016 -

    -

    - 2016-02-02 00:00 -

    -
    -

    Unfortunately, we have failed to finish creation of the simple “Rolling ball” game in 3 hours. That’s why we will hold the second LiveCoding session on 7 February 2016 at 12:00 CET. …

    - -
    - -
    -
    -

    - Game creation live session: 31 January 2016 -

    -

    - 2016-01-25 00:00 -

    -
    -

    We’re glad to annouce that the LiveCoding session will take place on 31 January 2016 at 12:00 CET. Join us! …

    - -
    - -
    -
    -

    - SOON: Creating a simple game live (Editor 0.8) -

    -

    - 2016-01-21 00:00 -

    -
    -

    We are ready to present Editor 0.8 with Player. The live session will be held at LiveCoding SOON. We will show you how to create a simple game with sounds from scratch. And this time it will not need an Editor to run. …

    - -
    - -
    -
    -

    - Roadmap for 2016 -

    -

    - 2015-12-26 00:00 -

    -
    -

    As you know, according to the previously published roadmap, we now have sound system in place. However, we decided to go further and implement the first version of Player. We wanted to get it done by December, but, unfortunately, more work resulted in the change of dates. …

    - -
    - -
    -
    -

    - Live session video and downloads -

    -

    - 2015-11-15 00:00 -

    -
    -

    If you missed the live session, you can watch it here: https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/

    -

    You can download the resulting project here: …

    - -
    - -
    -
    -

    - Creating a simple game live: 15 November 2015 -

    -

    - 2015-11-09 00:00 -

    -
    -

    We’re glad to annouce that the LiveCoding session will take place on 15 November 2015 at 12:00 CET. Join us! …

    +
    +

    News

    -
    - -
    -
    -

    - SOON: Creating a simple game live (Editor 0.7) -

    -

    - 2015-11-02 00:00 -

    -
    +
    +

    + May live session (Editor 0.9) +

    +

    + 2016-04-24 00:00 +

    +
    +

    As you know, the previously published roadmap assumed, that we would hold a live session in April and it would feature a ping-pong game created with Editor 0.9.

    +

    We have to admit, our abilities to plan are not yet good enough. That's why the next live session will take place by the end of May. The exact date will be announced later.. . .

    +
    + +
    +
    +

    + "Rolling ball" live session videos and downloads +

    +

    + 2016-02-10 00:00 +

    +
    +

    Since we held 2 live sessions to create "Rolling ball" game, here are 2 YouTube videos of the process:

    + +

    . . .

    +
    + +
    +
    +

    + Game creation live session (part 2): 7 February 2016 +

    +

    + 2016-02-02 00:00 +

    +
    +

    Unfortunately, we have failed to finish creation of the simple "Rolling ball" game in 3 hours. That's why we will hold the second LiveCoding session on 7 February 2016 at 12:00 CET.. . .

    +
    + +
    +
    +

    + Game creation live session: 31 January 2016 +

    +

    + 2016-01-25 00:00 +

    +
    +

    We're glad to annouce that the LiveCoding session will take place on 31 January 2016 at 12:00 CET. Join us!. . .

    +
    + +
    +
    +

    + SOON: Creating a simple game live (Editor 0.8) +

    +

    + 2016-01-21 00:00 +

    +
    +

    We are ready to present Editor 0.8 with Player. The live session will be held at LiveCoding SOON. We will show you how to create a simple game with sounds from scratch. And this time it will not need an Editor to run.. . .

    +
    + +
    +
    +

    + Roadmap for 2016 +

    +

    + 2015-12-26 00:00 +

    +
    +

    As you know, according to the previously published roadmap, we now have sound system in place. However, we decided to go further and implement the first version of Player. We wanted to get it done by December, but, unfortunately, more work resulted in the change of dates.. . .

    +
    + +
    +
    +

    + Live session video and downloads +

    +

    + 2015-11-15 00:00 +

    +
    +

    If you missed the live session, you can watch it here: +https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/. . .

    +
    + +
    +
    +

    + Creating a simple game live: 15 November 2015 +

    +

    + 2015-11-09 00:00 +

    +
    +

    We're glad to annouce that the LiveCoding session will take place on 15 November 2015 at 12:00 CET. Join us!. . .

    +
    + +
    +
    +

    + SOON: Creating a simple game live (Editor 0.7) +

    +

    + 2015-11-02 00:00 +

    +

    As we have promised, we are ready to give you Editor 0.7 which is capable of creating the complete test chamber. However, after recreating the test chamber ourselves, it became clear that:

    -
      -
    1. it takes more than 8 hours to recreate it (too long)
    2. -
    3. it’s inappropriate to be presented in the form of an article (too boring) …
    4. +
        +
      1. it takes more than 8 hours to recreate it (too long). . .
      +
    + +
    -
    - -
    -
    -

    - Desura no more, hello Humble Bundle Widget -

    -

    - 2015-07-23 00:00 -

    -
    -

    After the recent bankruptcy of Desura’s parent company, we decided, that we need a new place for our Deluxe version. Something better, more modern and more trustworthy. We have chosen the Humble Widget, with which you can buy the deluxe version of the game without leaving our site. …

    - -
    - -
    - -

    Page 5 of 6

    +

    Page 5 of 6

    « Newer Older »

    +
    diff --git a/en/news/index6.html b/en/news/index6.html index f29eb79..81f158e 100644 --- a/en/news/index6.html +++ b/en/news/index6.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,155 +80,166 @@ -
    -

    News

    - -
    -

    - Test chamber for everyone (Editor 0.7.0) -

    -

    - 2015-07-22 00:00 -

    -
    -

    As you know, the main goal of Editor 0.7.0 is the ability to create the test chamber with it. It needs Actions’ system and a few stability fixes for that. We are going to publish a detailed article describing how to create the test chamber, too, so that anyone could create their own test chamber! …

    +
    +

    News

    -
    - -
    -
    -

    - Roadmap for 2015-2016 -

    -

    - 2015-07-19 00:00 -

    -
    +
    +

    + Desura no more, hello Humble Bundle Widget +

    +

    + 2015-07-23 00:00 +

    +
    +

    After the recent bankruptcy of Desura's parent company, we decided, that we need a new place for our Deluxe version. Something better, more modern and more trustworthy. We have chosen the Humble Widget, with which you can buy the deluxe version of the game without leaving our site.. . .

    +
    + +
    +
    +

    + Test chamber for everyone (Editor 0.7.0) +

    +

    + 2015-07-22 00:00 +

    +
    +

    As you know, the main goal of Editor 0.7.0 is the ability to create the test chamber with it. It needs Actions' system and a few stability fixes for that. We are going to publish a detailed article describing how to create the test chamber, too, so that anyone could create their own test chamber!. . .

    +
    + +
    +
    +

    + Roadmap for 2015-2016 +

    +

    + 2015-07-19 00:00 +

    +

    As promised, we have come up with a list of milestones and their approximate dates for the coming year:

    -
      -
    1. Editor 0.7.0 (October 2015) - Actions’ system: we recreate the test chamber
    2. +
        +
      1. Editor 0.7.0 (October 2015) - Actions' system: we recreate the test chamber. . .
      - -
    - -
    -
    -

    - Editor 0.6.0 -

    -

    - 2015-06-28 00:00 -

    -
    -

    We completed Editor 0.6.0. You can see 0.6.0 in action here.

    +
    + +
    +
    +

    + Editor 0.6.0 +

    +

    + 2015-06-28 00:00 +

    +
    +

    We completed Editor 0.6.0. You can see 0.6.0 in action here.

    Editor 0.6.0 got the following new features:

    -
      -
    1. Camera and light node positioning
    2. -
    3. Node rotation along X axis …
    4. +
        +
      1. Camera and light node positioning. . .
      - -
    - -
    -
    -

    - Editor 0.5.0 and plans for 0.6.0 -

    -

    - 2015-04-15 00:00 -

    -
    -

    We completed Editor 0.5.0. As it was planned, it has scene node tree editing, property browser, and Qt5 support. You can see 0.5.0 in action here.

    -

    Also, we have just started Editor 0.6.0 development. …

    - -
    - -
    -
    -

    - Editor 0.4.0 and plans for 0.5.0 -

    -

    - 2015-03-07 00:00 -

    -
    -

    We completed Editor 0.4.0 in January. As it was planned, it only contains basic abilities to open and save a project. The major goal was to make MJIN, Python and Qt work together (we were unable to use PyQt or PySide due to technical difficulties). …

    - -
    - -
    -
    -

    - Editor roadmap for 0.4.0 -

    -

    - 2015-01-13 00:00 -

    -
    -

    The development of Editor 0.3.0 showed us, that usage of custom GUI was not a perfect idea. A few months ago, custom GUI seemed as a simpler way to do things, but it turned out to lack many little features, that are crucial if you’re planning to make a convenient tool. …

    - -
    - -
    -
    -

    - And another year has passed -

    -

    - 2014-12-31 12:00 -

    -
    +
    + +
    +
    +

    + Editor 0.5.0 and plans for 0.6.0 +

    +

    + 2015-04-15 00:00 +

    +
    +

    We completed Editor 0.5.0. As it was planned, it has scene node tree editing, property browser, and Qt5 support. You can see 0.5.0 in action here. . . .

    +
    + +
    +
    +

    + Editor 0.4.0 and plans for 0.5.0 +

    +

    + 2015-03-07 00:00 +

    +
    +

    We completed Editor 0.4.0 in January. As it was planned, it only contains basic abilities to open and save a project. The major goal was to make MJIN, Python and Qt work together (we were unable to use PyQt or PySide due to technical difficulties).. . .

    +
    + +
    +
    +

    + Editor roadmap for 0.4.0 +

    +

    + 2015-01-13 00:00 +

    +
    +

    The development of Editor 0.3.0 showed us, that usage of custom GUI was not a perfect idea. A few months ago, custom GUI seemed as a simpler way to do things, but it turned out to lack many little features, that are crucial if you're planning to make a convenient tool.. . .

    +
    + +
    +
    +

    + User survey ends today +

    +

    + 2014-12-31 11:00 +

    +
    +

    About a year ago, we started the user survey, in order to find out what do you think of the Open Source in general and about our project in particular. Today we're closing this survey. It took time, but we've got plenty of answers. Thank you for that.. . .

    +
    + +
    +
    +

    + And another year has passed +

    +

    + 2014-12-31 12:00 +

    +

    Hello!

    -

    So, this year comes to the end. There were very little publications from us during this year. We haven’t stopped working, but right now our work is in the phase, when we have nothing to show. And the spare time of the team members is rarely more then 30-40 hours a month. …

    +

    So, this year comes to the end. There were very little publications from us during this year. We haven't stopped working, but right now our work is in the phase, when we have nothing to show. And the spare time of the team members is rarely more then 30-40 hours a month.. . .

    +
    + +
    -
    - -
    -
    -

    - User survey ends today -

    -

    - 2014-12-31 11:00 -

    -
    -

    About a year ago, we started the user survey, in order to find out what do you think of the Open Source in general and about our project in particular. Today we’re closing this survey. It took time, but we’ve got plenty of answers. Thank you for that. …

    - -
    - -
    - -

    Page 6 of 6

    +

    Page 6 of 6

    « Newer

    +
    diff --git a/en/news/ios-tutorial.html b/en/news/ios-tutorial.html index 2f8542c..ea1e409 100644 --- a/en/news/ios-tutorial.html +++ b/en/news/ios-tutorial.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,70 +80,66 @@ -
    -

    In the news

    -
    -

    - iOS tutorial -

    -

    - 2017-06-08 10:00 -

    -
    -
    -Earth and a rocket
    Earth and a rocket
    -
    +
    +

    In the news...

    +
    +

    + iOS tutorial +

    +

    + 2017-06-08 10:00 +

    +
    +

    Earth and a rocket

    This article describes problems we faced during the creation of iOS tutorial in May 2017.

    -

    This February 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.

    +

    This February 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.

    Native library

    The first question we had to answer was: should the sample application be part of Xcode project or be a separately built library?

    We had to consider the following facts:

    -
      -
    1. Xcode project can use C++ directly (thanks to Objective-C++) without stuff like JNI -
        -
      • There’s no need for a separate library (+ application)
      • -
      • Creating a separate library is an additional work (- library)
      • -
    2. -
    3. OpenSceneGraph builds libraries -
        -
      • It’s easier to use standard build process (+ library)
      • -
      • It’s harder to create custom build process just for a single platform (- application)
      • -
    4. -
    5. OpenSceneGraph uses CMake build system, which is not supported by Xcode -
        -
      • Xcode project can’t include CMake files (- application)
      • -
      • It’s easy to create custom CMake file that includes OpenSceneGraph CMake file to build a single library (+ library)
      • -
    6. -
    7. CMake can generate Xcode project -
        -
      • It’s possible to create a CMake file that builds both OpenSceneGraph and the sample application (+ application)
      • -
      • Xcode is the de-facto tool to create Xcode projects; it’s easier to use standard build process (+ library)
      • -
    8. +
        +
      1. Xcode project can use C++ directly (thanks to Objective-C++) without stuff like JNI
          +
        • There's no need for a separate library (+ application)
        • +
        • Creating a separate library is an additional work (- library)
      2. +
      3. OpenSceneGraph builds libraries
          +
        • It's easier to use standard build process (+ library)
        • +
        • It's harder to create custom build process just for a single platform (- application)
      4. +
      5. OpenSceneGraph uses CMake build system, which is not supported by Xcode
          +
        • Xcode project can't include CMake files (- application)
        • +
        • It's easy to create custom CMake file that includes OpenSceneGraph CMake file to build a single library (+ library)
      6. +
      7. CMake can generate Xcode project
          +
        • It's possible to create a CMake file that builds both OpenSceneGraph and the sample application (+ application)
        • +
        • Xcode is the de-facto tool to create Xcode projects; it's easier to use standard build process (+ library)

      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.

      Refactoring

      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?

      -

      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.

      -

      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.

      -

      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:

      -
        +

        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.

        +

        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.

        +

        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:

        +
        1. functions.h - contains reusable classless functions
        2. main.h - contains the rest of the sample application code
        -

        Their contents differ slightly for each platform, but it’s easy to see the whole picture now.

        -

        That’s it for describing problems we faced during the creation of iOS tutorial in May 2017.

        - -
    +

    Their contents differ slightly for each platform, but it's easy to see the whole picture now.

    +

    That's it for describing problems we faced during the creation of iOS tutorial in May 2017.

    +
    +
    diff --git a/en/news/item.template b/en/news/item.template new file mode 100644 index 0000000..e78d408 --- /dev/null +++ b/en/news/item.template @@ -0,0 +1,114 @@ + + + + + + + + +
    +

    In the news...

    +
    +

    + PSKOV_ITEM_TITLE +

    +

    + PSKOV_ITEM_DATE +

    +
    +PSKOV_ITEM_CONTENTS +
    +
    + +
    + + diff --git a/en/news/its-all-fine.html b/en/news/its-all-fine.html index 900055f..74f5e40 100644 --- a/en/news/its-all-fine.html +++ b/en/news/its-all-fine.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,32 +80,32 @@ -
    -

    In the news

    -
    -

    - It's all fine -

    -

    - 2017-04-07 00:00 -

    -
    -
    -Flight of a rocket
    Flight of a rocket
    -
    +
    +

    In the news...

    +
    +

    + It's all fine +

    +

    + 2017-04-07 00:00 +

    +
    +

    Flight of a rocket

    This article describes creation of the first four OpenSceneGraph tutorials in March 2017.

    The first four OpenSceneGraph tutorials explain how to create a cube model with Blender and display the model under Linux, macOS, or Windows using OpenSceneGraph tool called osgviewer.

    The whole process of creating a single tutorial turned out to be pretty daunting because it includes several tasks:

    -
      +
      1. Record original video depicting one or more steps
      2. Name the steps as clear as possible
      3. Select the parts of the video that display the step
      4. @@ -126,11 +118,15 @@
      5. Upload the video to YouTube with timestamps of steps for easier navigation

      Some of those tasks had to be repeated multiple times until the combination of video, text, and article was clear and logical.

      -

      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.

      -

      That’s it for describing creation of the first four OpenSceneGraph tutorials in March 2017.

      - -
    +

    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.

    +

    That's it for describing creation of the first four OpenSceneGraph tutorials in March 2017.

    +
    +
    diff --git a/en/news/january-live-session-announcement.html b/en/news/january-live-session-announcement.html index c3ba541..fc388e4 100644 --- a/en/news/january-live-session-announcement.html +++ b/en/news/january-live-session-announcement.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,29 +80,35 @@ -
    -

    In the news

    -
    -

    - Game creation live session: 31 January 2016 -

    -

    - 2016-01-25 00:00 -

    -
    -

    We’re glad to annouce that the LiveCoding session will take place on 31 January 2016 at 12:00 CET. Join us!

    - -
    +
    +

    In the news...

    +
    +

    + Game creation live session: 31 January 2016 +

    +

    + 2016-01-25 00:00 +

    +
    +

    We're glad to annouce that the LiveCoding session will take place on 31 January 2016 at 12:00 CET. Join us!

    +
    +
    diff --git a/en/news/january-live-session-decision.html b/en/news/january-live-session-decision.html index 4423872..d9cd74c 100644 --- a/en/news/january-live-session-decision.html +++ b/en/news/january-live-session-decision.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,30 +80,36 @@ -
    -

    In the news

    -
    -

    - SOON: Creating a simple game live (Editor 0.8) -

    -

    - 2016-01-21 00:00 -

    -
    -

    We are ready to present Editor 0.8 with Player. The live session will be held at LiveCoding SOON. We will show you how to create a simple game with sounds from scratch. And this time it will not need an Editor to run.

    +
    +

    In the news...

    +
    +

    + SOON: Creating a simple game live (Editor 0.8) +

    +

    + 2016-01-21 00:00 +

    +
    +

    We are ready to present Editor 0.8 with Player. The live session will be held at LiveCoding SOON. We will show you how to create a simple game with sounds from scratch. And this time it will not need an Editor to run.

    The exact date and time is to be announced in the coming days. Stay tuned!

    - -
    +
    +
    diff --git a/en/news/lets-go.html b/en/news/lets-go.html index e668a5c..760a1a7 100644 --- a/en/news/lets-go.html +++ b/en/news/lets-go.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,34 +80,34 @@ -
    -

    In the news

    -
    -

    - Let's go -

    -

    - 2017-03-16 00:00 -

    -
    -
    -Gagarin’s words
    Gagarin’s words
    -
    +
    +

    In the news...

    +
    +

    + Let's go +

    +

    + 2017-03-16 00:00 +

    +
    +

    Gagarin's words

    In this article we describe our progress in January and February of 2017: rendering under iOS/Web and a new tutorial tool.

    Rendering under iOS/Web

    -

    To our surprise, we got a simple red cube rendered under iOS and Web 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.

    -

    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.

    +

    To our surprise, we got a simple red cube rendered under iOS and Web 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.

    +

    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.

    Tutorial tool

    -

    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.

    +

    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.

    To combine text and video, we first tried OpenShot. It worked well, but we quickly saw its limitations:

    • Too much time is spent on adjusting time frames and animations
    • @@ -124,18 +116,23 @@

      Since OpenSceneGraph cross-platform guide would consist of several tutorials, we decided to automate the process. Brief research revealed a great multimedia framework called MLT, which powers OpenShot itself. With MLT we got our tutorial tool in no time.

      Currently, the tutorial tool allows anyone to combine text and video using a simple text file like this:

      background bg.png
      -text 5 Let's install Blender
      +text 5 Let's install Blender
       video 0:6 install_blender.mp4
       text 5 Installing it with apt
       video 6:26 install_blender.mp4
      -text 5 We're still installing it
      +text 5 We're still installing it
       video 26:56 install_blender.mp4
      -text 5 Congratulations! We just finished installing Blender
      +text 5 Congratulations! We just finished installing Blender +

      This is the actual script. See the final result here.

      -

      That’s it for describing our progress in January and February of 2017: rendering under iOS/Web and the new tutorial tool.

      - -
    +

    That's it for describing our progress in January and February of 2017: rendering under iOS/Web and the new tutorial tool.

    +
    +
    diff --git a/en/news/livesession-editor-07.html b/en/news/livesession-editor-07.html index a7e7dc2..f13030f 100644 --- a/en/news/livesession-editor-07.html +++ b/en/news/livesession-editor-07.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,29 +80,35 @@ -
    -

    In the news

    -
    -

    - Creating a simple game live: 15 November 2015 -

    -

    - 2015-11-09 00:00 -

    -
    -

    We’re glad to annouce that the LiveCoding session will take place on 15 November 2015 at 12:00 CET. Join us!

    - -
    +
    +

    In the news...

    +
    +

    + Creating a simple game live: 15 November 2015 +

    +

    + 2015-11-09 00:00 +

    +
    +

    We're glad to annouce that the LiveCoding session will take place on 15 November 2015 at 12:00 CET. Join us!

    +
    +
    diff --git a/en/news/livesession-materials-editor-07.html b/en/news/livesession-materials-editor-07.html index 0cbc34f..a9095a2 100644 --- a/en/news/livesession-materials-editor-07.html +++ b/en/news/livesession-materials-editor-07.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,36 +80,45 @@ -
    -

    In the news

    -
    -

    - Live session video and downloads -

    -

    - 2015-11-15 00:00 -

    -
    -

    If you missed the live session, you can watch it here: https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/

    -

    You can download the resulting project here: https://github.com/OGStudio/liveSessionWhacAMole/archive/master.zip

    -

    The latest editor can be found here: http://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/42_2015-11-13_08-16-46_0.7.4/

    +
    +

    In the news...

    +
    +

    + Live session video and downloads +

    +

    + 2015-11-15 00:00 +

    +
    +

    If you missed the live session, you can watch it here: +https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/

    +

    You can download the resulting project here: +https://github.com/OGStudio/liveSessionWhacAMole/archive/master.zip

    +

    The latest editor can be found here: +http://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/422015-11-1308-16-46_0.7.4/

    Download the editor archive, unpack, delete the wam.ogs folder, copy wam.ogs from the live session archive to the editor folder.

    • in Windows - run the run.bat file.
    • in Linux and OSX - run the run file.
    - -
    +
    +
    diff --git a/en/news/mahjong-demo2.html b/en/news/mahjong-demo2.html index 7b88139..3fb8a0e 100644 --- a/en/news/mahjong-demo2.html +++ b/en/news/mahjong-demo2.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,29 +80,29 @@ -
    -

    In the news

    -
    -

    - OGS Mahjong 2: Demo 2 -

    -

    - 2018-10-02 00:00 -

    -
    -
    -Start of a Mahjong party
    Start of a Mahjong party
    -
    -

    We are glad to announce the release of the second demonstration of OGS Mahjong 2. The purposes of this release were to refine our development techniques and build a solid cross-platform foundation.

    +
    +

    In the news...

    +
    +

    + OGS Mahjong 2: Demo 2 +

    +

    + 2018-10-02 00:00 +

    +
    +

    Start of a Mahjong party

    +

    We are glad to announce the release of the second demonstration of OGS Mahjong 2. The purposes of this release were to refine our development techniques and build a solid cross-platform foundation.

    Release

    Run the latest version of OGS Mahjong 2 in your web browser: http://ogstudio.github.io/ogs-mahjong

    You are encouraged to run the game with seed parameter like this: http://ogstudio.github.io/ogs-mahjong?seed=0

    @@ -124,12 +116,16 @@
  • OGS Mahjong repository contains snapshots of OGS Mahjong components features that comprise specific game version. E.g., Demo 2 version is almost identical to 05.ColorfulStatus example of OGS Mahjong components.
  • Beyond Mahjong solitaire

    -

    In addition to seed parameter, you can let the game use remote layout hosted at GitHub: http://ogstudio.github.io/ogs-mahjong?seed=0&layout=github://OGStudio/ogs-mahjong-components/data/cat.layout

    +

    In addition to seed parameter, you can let the game use remote layout hosted at GitHub: http://ogstudio.github.io/ogs-mahjong?seed=0&layout=github://OGStudio/ogs-mahjong-components/data/cat.layout

    Utilizing remote resources is an extremely powerful approach allowing anyone to create a layout of his/her choice and see the layout in action instantly.

    Our next step is to turn game logic into a resource, too.

    - -
    +
    +
    diff --git a/en/news/mahjong-recreation-start.html b/en/news/mahjong-recreation-start.html index feb1ed4..6dfb45d 100644 --- a/en/news/mahjong-recreation-start.html +++ b/en/news/mahjong-recreation-start.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +80,28 @@ -
    -

    In the news

    -
    -

    - Mahjong recreation start -

    -

    - 2018-01-26 00:00 -

    -
    -
    -Spherical tiles in a Mahjong layout
    Spherical tiles in a Mahjong layout
    -
    +
    +

    In the news...

    +
    +

    + Mahjong recreation start +

    +

    + 2018-01-26 00:00 +

    +
    +

    Spherical tiles in a Mahjong layout

    This article describes the start of Mahjong game recreation.

    Plan

    We started Mahjong recreation endeavour by composing a brief plan to get gameplay with minimal graphics:

    @@ -137,10 +129,10 @@

    mahjong-data is an example of such generated MJIN project that is referenced by mahjong project.

    Problem №2: load PNG images across supported platforms

    -

    To load PNG, we use corresponding OpenSceneGraph plugin. We built it for desktop with no issues. Building for web (Emscripten) turned out to be more difficult: Emscripten provides its own version of libpng, which OpenSceneGraph build script can’t detect. We had to work around several OpenSceneGraph checks to successfully build the plugin for Emscripten.

    +

    To load PNG, we use corresponding OpenSceneGraph plugin. We built it for desktop with no issues. Building for web (Emscripten) turned out to be more difficult: Emscripten provides its own version of libpng, which OpenSceneGraph build script can't detect. We had to work around several OpenSceneGraph checks to successfully build the plugin for Emscripten.

    Building the plugin for Android and iOS is still waiting for us. Once we get PNG plugin working across supported platforms, we are going to publish a new tutorial for OpenSceneGraph cross-platform guide to cover PNG image loading. We already got a request to describe image loading.

    Development

    -

    As you know, we published OpenSceneGraph cross-platform guide to make OpenSceneGraph community stronger. We value education, and we love to share our knowledge. That’s why we decided to develop Mahjong in small reproducible chunks uniquely identified by internal versions. These versions are available in mahjong repository.

    +

    As you know, we published OpenSceneGraph cross-platform guide to make OpenSceneGraph community stronger. We value education, and we love to share our knowledge. That's why we decided to develop Mahjong in small reproducible chunks uniquely identified by internal versions. These versions are available in mahjong repository.

    We also provide version history and web releases of each internal version for the following reasons:

    • education: show how development looks like internally
    • @@ -149,10 +141,14 @@

      Current Mahjong game status

      As of the time of this writing, we have implemented tile selection. Try it in your browser!

      Once we finish tile matching implementation, we are going to publish the intermediate result for all supported platforms.

      -

      That’s it for describing the start of Mahjong game recreation.

      - -
    +

    That's it for describing the start of Mahjong game recreation.

    +
    +
    diff --git a/en/news/mahjong-techdemo1-gameplay.html b/en/news/mahjong-techdemo1-gameplay.html index 8b78b42..8de5665 100644 --- a/en/news/mahjong-techdemo1-gameplay.html +++ b/en/news/mahjong-techdemo1-gameplay.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +80,28 @@ -
    -

    In the news

    -
    -

    - First techdemo of OGS Mahjong 2: Gameplay -

    -

    - 2018-02-16 00:00 -

    -
    -
    -End of a Mahjong party
    End of a Mahjong party
    -
    +
    +

    In the news...

    +
    +

    + First techdemo of OGS Mahjong 2: Gameplay +

    +

    + 2018-02-16 00:00 +

    +
    +

    End of a Mahjong party

    We are glad to announce the release of the first technical demonstration of OGS Mahjong 2. The purpose of this release was to verify gameplay across supported platforms.

    Get techdemo for your platform:

      @@ -126,10 +118,14 @@
    • Linux version is only available in 64-bit variant.
    • macOS version should run on macOS Sierra or newer.
    -

    That’s it for now, have a nice testing!

    - -
    +

    That's it for now, have a nice testing!

    +
    +
    diff --git a/en/news/may-live-session-announcement.html b/en/news/may-live-session-announcement.html index a147c66..e921408 100644 --- a/en/news/may-live-session-announcement.html +++ b/en/news/may-live-session-announcement.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,29 +80,35 @@ -
    -

    In the news

    -
    -

    - Live session: 28 May 2016 -

    -

    - 2016-05-17 00:00 -

    -
    -

    We’re glad to annouce that the LiveCoding session will take place on 28 May 2016 at 12:00 CEST. Join us!

    - -
    +
    +

    In the news...

    +
    +

    + Live session: 28 May 2016 +

    +

    + 2016-05-17 00:00 +

    +
    +

    We're glad to annouce that the LiveCoding session will take place on 28 May 2016 at 12:00 CEST. Join us!

    +
    +
    diff --git a/en/news/may-live-session-decision.html b/en/news/may-live-session-decision.html index 3d61333..181c050 100644 --- a/en/news/may-live-session-decision.html +++ b/en/news/may-live-session-decision.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,31 +80,38 @@ -
    -

    In the news

    -
    -

    - May live session (Editor 0.9) -

    -

    - 2016-04-24 00:00 -

    -
    -

    As you know, the previously published roadmap assumed, that we would hold a live session in April and it would feature a ping-pong game created with Editor 0.9.

    -

    We have to admit, our abilities to plan are not yet good enough. That’s why the next live session will take place by the end of May. The exact date will be announced later.

    -

    Here’s a short preview of the coming game:

    - -
    +
    +

    In the news...

    +
    +

    + May live session (Editor 0.9) +

    +

    + 2016-04-24 00:00 +

    +
    +

    As you know, the previously published roadmap assumed, that we would hold a live session in April and it would feature a ping-pong game created with Editor 0.9.

    +

    We have to admit, our abilities to plan are not yet good enough. That's why the next live session will take place by the end of May. The exact date will be announced later.

    +

    Here's a short preview of the coming game:

    +
    +
    +
    diff --git a/en/news/mjin-world-birth.html b/en/news/mjin-world-birth.html index 9d6d489..e951c86 100644 --- a/en/news/mjin-world-birth.html +++ b/en/news/mjin-world-birth.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,51 +80,55 @@ -
    -

    In the news

    -
    -

    - The birth of MJIN world -

    -

    - 2017-09-10 00:00 -

    -
    -
    -An explosion giving birth to something new
    An explosion giving birth to something new
    -
    +
    +

    In the news...

    +
    +

    + The birth of MJIN world +

    +

    + 2017-09-10 00:00 +

    +
    +

    An explosion giving birth to something new

    This article describes the birth of MJIN world in August 2017.

    mjin-player

    As you know, we spent July to research scripting. We found a solution that satisfies the following criteria. Scripts should:

    -
      +
      1. run unchanged on all supported platforms
      2. allow extending C++ code

      We have verified the second criterion by writing a sample application. The first criterion was taken for granted because it SHOULD be true.

      At the time, we saw two ways to verify the first criterion:

      -
        +
        1. create one sample application for each platform to verify scripting only
        2. create a single cross-platform application, which can run any code

        We chose the second approach because it is more beneficial in the long run. As you might have guessed, mjin-player is that application.

        -

        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.

        +

        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.

        mjin-application

        This set of rules for MJIN projects is packaged into mjin-application. 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.

        MJIN world

        -

        So what is MJIN world? 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.

        -

        That’s it for describing the birth of MJIN world in August 2017.

        - -
    +

    So what is MJIN world? 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.

    +

    That's it for describing the birth of MJIN world in August 2017.

    +
    +
    diff --git a/en/news/ogs-editor-0.10.html b/en/news/ogs-editor-0.10.html index 1c336cd..d2a4993 100644 --- a/en/news/ogs-editor-0.10.html +++ b/en/news/ogs-editor-0.10.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,38 +80,42 @@ -
    -

    In the news

    -
    -

    - OGS Editor 0.10 and live session materials -

    -

    - 2016-10-03 00:00 -

    -
    -
    -OGS Editor with Mahjong game
    OGS Editor with Mahjong game
    -
    -

    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.

    +
    +

    In the news...

    +
    +

    + OGS Editor 0.10 and live session materials +

    +

    + 2016-10-03 00:00 +

    +
    +

    OGS Editor with Mahjong game

    +

    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.

    - -
    +
    +
    diff --git a/en/news/ogs-editor-0.9.html b/en/news/ogs-editor-0.9.html index 6f070cb..0268b20 100644 --- a/en/news/ogs-editor-0.9.html +++ b/en/news/ogs-editor-0.9.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,37 +80,42 @@ -
    -

    In the news

    -
    -

    - May 2016 live session materials -

    -

    - 2016-05-29 00:00 -

    -
    - +
    +

    In the news...

    +
    +

    + May 2016 live session materials +

    +

    + 2016-05-29 00:00 +

    +
    +

    This time we have shown how to create a simple Domino based game. Below you can find all materials related to the game creation.

    -
      +
      1. Editor 0.9 for Linux (Debian based), OS X (10.9+), Windows is available at SourceForge. Simply unpack it and launch the run script.
      2. Domino project created during live session is available at GitHub.
      3. Domino rehearsal videos referenced during live session are available at YouTube

      The next live session will be held in September 2016.

      - -
    +
    +
    diff --git a/en/news/on-the-way-to-durable-applications.html b/en/news/on-the-way-to-durable-applications.html new file mode 100644 index 0000000..cc93092 --- /dev/null +++ b/en/news/on-the-way-to-durable-applications.html @@ -0,0 +1,151 @@ + + + + + + + + +
    +

    In the news...

    +
    +

    + On the way to durable applications +

    +

    + 2019-08-05 00:00 +

    +
    +

    Pskov's veche

    +

    This article describes our first durable application for desktop PCs: PSKOV static site generator.

    +

    Durability

    +

    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, PSKOV runs even under Windows 2000, so PSKOV has backward compatibility of 19 years.

    +

    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.

    +

    Such an implementation gives PSKOV the following features:

    +
      +
    • it can be copied without restrictions
    • +
    • it can be hosted anywhere
    • +
    • it can run locally
    • +
    • it can operate without Internet
    • +
    +

    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, <center> tag, being declared deprecated in 2014, still works as expected 5 years since, in 2019.

    +

    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.

    +

    To free PSKOV from the cage, LFSA 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).

    +

    Track record

    +

    PSKOV has been successfully used to create the following small sites:

    + +

    Now let's see why PSKOV was created as a durable application for web browsers.

    +

    Reason №1: collect and keep knowledge in an accessible form

    +

    We have been creating convenient game development tools for several years now. So far the collected knowledge was represented by native applications for desktop PCs, education articles for related technologies, and showcase videos. Such forms of the collected knowledge are basically dead:

    +
      +
    • few would download an unknown application
    • +
    • few would watch some videos
    • +
    • even fewer would read some articles
    • +
    +

    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 twitter revolutions proves that almost anyone can open a link and "like" the change of a "bloody regime".

    +

    Reason №2: rule by people

    +

    Nowadays any Internet activity is performed by the means of services that almost always belong to some company: messages, maps, search, music, source code, etc. Such power usurpation leads to shutdowns of services 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.

    +

    Other times companies simply block competing browsers from accessing their service, as it was recently the case with the web version of Skype. Luckily there are people who don’t agree with such politics. Thanks to them, unlocking tools appear.

    +

    As for me, I 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 tells us a different story: "the state is not some enemy horde that occupied the society, but that which grows out of society and mirrors it".

    +

    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.

    +

    That's it for describing our first durable application for desktop PCs: PSKOV static site generator.

    +
    +
    + +
    + + diff --git a/en/news/once-mahjong-always-mahjong.html b/en/news/once-mahjong-always-mahjong.html index 19b28c7..df25bb3 100644 --- a/en/news/once-mahjong-always-mahjong.html +++ b/en/news/once-mahjong-always-mahjong.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,33 +80,39 @@ -
    -

    In the news

    -
    -

    - Once Mahjong – always Mahjong -

    -

    - 2016-08-10 00:00 -

    -
    -

    We started Opensource Game Studio project a long time ago. We wanted to provide open source community with tools to create games. However, it was unclear what tools’ purpose was. So we decided to start small: create a game first.

    -

    It took us 3 years to reach the first goal: we released OGS Mahjong 1.0 in 2012. Even for a hobby project (we spend about 40 hours a month) it’s too long.

    +
    +

    In the news...

    +
    +

    + Once Mahjong – always Mahjong +

    +

    + 2016-08-10 00:00 +

    +
    +

    We started Opensource Game Studio project a long time ago. We wanted to provide open source community with tools to create games. However, it was unclear what tools' purpose was. So we decided to start small: create a game first.

    +

    It took us 3 years to reach the first goal: we released OGS Mahjong 1.0 in 2012. Even for a hobby project (we spend about 40 hours a month) it's too long.

    Upon the game release we got it: Tools are means to save development time.

    We spent 4 more years to develop them. Now is the time to prove they are worth every single day spent. How? We will recreate Mahjong solitaire mode in just a few hours!

    Join our next live session in September.

    - -
    +
    +
    diff --git a/en/news/openscenegraph-cross-platform-guide.html b/en/news/openscenegraph-cross-platform-guide.html index c34f57c..6b34bfc 100644 --- a/en/news/openscenegraph-cross-platform-guide.html +++ b/en/news/openscenegraph-cross-platform-guide.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,48 +80,53 @@ -
    -

    In the news

    -
    -

    - OpenSceneGraph cross-platform guide -

    -

    - 2017-07-17 00:00 -

    -
    -
    -OpenSceneGraph sample application in desktop and mobile
    OpenSceneGraph sample application in desktop and mobile
    -
    +
    +

    In the news...

    +
    +

    + OpenSceneGraph cross-platform guide +

    +

    + 2017-07-17 00:00 +

    +
    +

    OpenSceneGraph sample application in desktop and mobile

    This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.

    -

    June marked the finish of OpenSceneGraph cross-platform guide with the publishing of the last (initially planned) tutorial. The tutorial describes how to build and run sample OpenSceneGraph application in Web using Emscripten. In case you missed it, here’s a link to the final application. Open it in your web browser.

    +

    June marked the finish of OpenSceneGraph cross-platform guide with the publishing of the last (initially planned) tutorial. The tutorial describes how to build and run sample OpenSceneGraph application in Web using Emscripten. +In case you missed it, here's a link to the final application. Open it in your web browser.

    We started to compose the guide in February when we successfully managed to render a simple model on mobile and web. We spent 120 hours in five months to produce ten tutorials of the guide.

    We have been doing OpenSceneGraph cross-platform guide for two main reasons:

    -
      +
      1. Keep OpenSceneGraph cross-platform knowledge in easily accessible and reproducible form
      2. Share the knowledge with OpenSceneGraph community to make it stronger
      -

      We believe we succeeded in both. Here’s why:

      -
        -
      1. The guide repository has more stars (aka “likes”) than any other repository of ours
      2. -
      3. OpenSceneGraph project leader Robert Osfield said “Great work”, which means a lot
      4. +

        We believe we succeeded in both. Here's why:

        +
          +
        1. The guide repository has more stars (aka "likes") than any other repository of ours
        2. +
        3. OpenSceneGraph project leader Robert Osfield said "Great work", which means a lot
        4. The guide already has two issues

        Reaching our goal of researching OpenSceneGraph cross-platform development and providing the knowledge back to the community just made us happier.

        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 promised in January.

        -

        That’s it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.

        - -
    +

    That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.

    +
    +
    diff --git a/en/news/openscenegraph-examples.html b/en/news/openscenegraph-examples.html index afd4991..1413b8e 100644 --- a/en/news/openscenegraph-examples.html +++ b/en/news/openscenegraph-examples.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,30 +80,30 @@ -
    -

    In the news

    -
    -

    - OpenSceneGraph cross-platform examples -

    -

    - 2018-04-20 00:00 -

    -
    -
    -iOS Simulator renders a cube
    iOS Simulator renders a cube
    -
    +
    +

    In the news...

    +
    +

    + OpenSceneGraph cross-platform examples +

    +

    + 2018-04-20 00:00 +

    +
    +

    iOS Simulator renders a cube

    This article summarizes the work we did to produce the first two cross-platform OpenSceneGraph examples.

    -

    By the time the first technology demonstration of OGS Mahjong 2 has been released, we’ve already had issue request (to explain how to load images with OpenSceneGraph on Android) hanging for some time. We considered creating a new tutorial for OpenSceneGraph cross-platform guide at first. However, we realized that it’s time-consuming and excessive for such a tiny topic (compared to what an average game has) as image loading. We decided to continue sharing our knowledge in the form of concrete examples. That’s how OpenSceneGraph cross-platform examples were born.

    +

    By the time the first technology demonstration of OGS Mahjong 2 has been released, we've already had issue request (to explain how to load images with OpenSceneGraph on Android) hanging for some time. We considered creating a new tutorial for OpenSceneGraph cross-platform guide at first. However, we realized that it's time-consuming and excessive for such a tiny topic (compared to what an average game has) as image loading. We decided to continue sharing our knowledge in the form of concrete examples. That's how OpenSceneGraph cross-platform examples were born.

    Each example:

    • explains crucial code necessary to perform a specific task
    • @@ -125,10 +117,14 @@
    • Use PNG images with PNG plugins: this explains the requirements necessary to build and use PNG plugins

    We will be adding new examples as we proceed with OGS Mahjong 2 development.

    -

    That’s it for summarizing the work we did to produce the first two cross-platform OpenSceneGraph examples.

    - -
    +

    That's it for summarizing the work we did to produce the first two cross-platform OpenSceneGraph examples.

    +
    +
    diff --git a/en/news/osg-sample.html b/en/news/osg-sample.html index c5b5403..9ce722d 100644 --- a/en/news/osg-sample.html +++ b/en/news/osg-sample.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,32 +80,32 @@ -
    -

    In the news

    -
    -

    - OpenSceneGraph sample -

    -

    - 2017-05-12 00:00 -

    -
    -
    -Rocket in the distance
    Rocket in the distance
    -
    +
    +

    In the news...

    +
    +

    + OpenSceneGraph sample +

    +

    + 2017-05-12 00:00 +

    +
    +

    Rocket in the distance

    This article describes creation of the tutorials for building sample OpenSceneGraph application under Linux, macOS, Windows, and Android in April 2017.

    Previous tutorials described how to install OpenSceneGraph under Linux, macOS, Windows and render a model using the standard osgviewer tool. This time we worked on a sample OpenSceneGraph application that would run under Linux, macOS, Windows, and Android.

    The application is very basic and has the following features:

    -
      +
      1. Render window creation
      2. Model loading
      3. Model rendering with simple GLSL shaders
      4. @@ -122,8 +114,8 @@

        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.

        Our first successful Android build last year included hacks and non-obvious steps to make OpenSceneGraph run under Android. This time we wanted a cleaner, faster, and cheaper approach.

        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.

        -

        Here’s a quick rundown of the files:

        -
          +

          Here's a quick rundown of the files:

          +
          1. GLES2 surface
          2. Render activity to render to the surface
          3. Native library Java interface
          4. @@ -132,21 +124,25 @@
          5. Render activity layout
          6. Model to display
          -

          Here’s a quick rundown of the project changes:

          -
            +

            Here's a quick rundown of the project changes:

            +
            1. Update Android manifest to use GLES2 and render activity
            2. -
            3. Reference native library’s CMake file in the project’s CMake file
            4. +
            5. Reference native library's CMake file in the project's CMake file

            OpenSceneGraph documentation suggests building OpenSceneGraph outside Android Studio with CMake. However, this approach has the following limitations:

            -
              +
              1. You have to build OpenSceneGraph for each target architecture
              2. You have to manually copy/reference built OpenSceneGraph libraries into Android Studio project
              -

              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.

              -

              That’s it for describing the creation of the tutorials for building sample OpenSceneGraph application under Linux, macOS, Windows, and Android in April 2017.

              - -
    +

    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.

    +

    That's it for describing the creation of the tutorials for building sample OpenSceneGraph application under Linux, macOS, Windows, and Android in April 2017.

    +
    +
    diff --git a/en/news/pagination.next.template b/en/news/pagination.next.template new file mode 100644 index 0000000..e63f7e1 --- /dev/null +++ b/en/news/pagination.next.template @@ -0,0 +1,4 @@ +

    Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT

    +

    + Older » +

    diff --git a/en/news/pagination.prev.template b/en/news/pagination.prev.template new file mode 100644 index 0000000..0b6dba1 --- /dev/null +++ b/en/news/pagination.prev.template @@ -0,0 +1,4 @@ +

    Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT

    +

    + « Newer +

    diff --git a/en/news/pagination.template b/en/news/pagination.template new file mode 100644 index 0000000..7b69dde --- /dev/null +++ b/en/news/pagination.template @@ -0,0 +1,5 @@ +

    Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT

    +

    + « Newer + Older » +

    diff --git a/en/news/preview.template b/en/news/preview.template new file mode 100644 index 0000000..6a193a9 --- /dev/null +++ b/en/news/preview.template @@ -0,0 +1,14 @@ +
    +

    + PSKOV_ITEM_TITLE +

    +

    + PSKOV_ITEM_DATE +

    +
    +PSKOV_PREVIEW +
    + +
    diff --git a/en/news/rolling-ball-live-session-pt2.html b/en/news/rolling-ball-live-session-pt2.html index 0047705..7ea54d1 100644 --- a/en/news/rolling-ball-live-session-pt2.html +++ b/en/news/rolling-ball-live-session-pt2.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,30 +80,36 @@ -
    -

    In the news

    -
    -

    - Game creation live session (part 2): 7 February 2016 -

    -

    - 2016-02-02 00:00 -

    -
    -

    Unfortunately, we have failed to finish creation of the simple “Rolling ball” game in 3 hours. That’s why we will hold the second LiveCoding session on 7 February 2016 at 12:00 CET.

    -

    Let’s finish the game!

    - -
    +
    +

    In the news...

    +
    +

    + Game creation live session (part 2): 7 February 2016 +

    +

    + 2016-02-02 00:00 +

    +
    +

    Unfortunately, we have failed to finish creation of the simple "Rolling ball" game in 3 hours. That's why we will hold the second LiveCoding session on 7 February 2016 at 12:00 CET.

    +

    Let's finish the game!

    +
    +
    diff --git a/en/news/rolling-ball.html b/en/news/rolling-ball.html index 51bbe6a..5cc85bc 100644 --- a/en/news/rolling-ball.html +++ b/en/news/rolling-ball.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,43 +80,47 @@ -
    -

    In the news

    -
    -

    - "Rolling ball" live session videos and downloads -

    -

    - 2016-02-10 00:00 -

    -
    -

    Since we held 2 live sessions to create “Rolling ball” game, here are 2 YouTube videos of the process:

    - - -

    “Rolling ball” game for Linux (Debian based), OS X (10.9+), Windows is available at SourceForge.

    +
    +

    In the news...

    +
    +

    + "Rolling ball" live session videos and downloads +

    +

    + 2016-02-10 00:00 +

    +
    +

    Since we held 2 live sessions to create "Rolling ball" game, here are 2 YouTube videos of the process:

    + + +

    "Rolling ball" game for Linux (Debian based), OS X (10.9+), Windows is available at SourceForge.

    Simply unpack it and launch the run script.

    Editor 0.8 is available at SourceForge, too.

    -

    “Rolling ball” project for the Editor is available at GitHub.

    +

    "Rolling ball" project for the Editor is available at GitHub.

    To open it in the Editor:

    • replace slideDown.ogs with rollingBall.ogs you downloaded
    • rename rollingBall.ogs to slideDown.ogs

    Since live session took us so long, we decided to concentrate on polishing. Editor already has a lot of features, but their use is inconvenient. We will fix major obstacles for the next Editor release.

    - -
    +
    +
    diff --git a/en/news/scripting-research.html b/en/news/scripting-research.html index 024b2cf..30dc783 100644 --- a/en/news/scripting-research.html +++ b/en/news/scripting-research.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,56 +80,64 @@ -
    -

    In the news

    -
    -

    - Scripting research -

    -

    - 2017-08-16 00:00 -

    -
    -
    -Textbook with a text
    Textbook with a text
    -
    +
    +

    In the news...

    +
    +

    + Scripting research +

    +

    + 2017-08-16 00:00 +

    +
    +

    Textbook with a text

    This article describes scripting research in July 2017.

    Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.

    OGS Editor 0.10 supports Python for such a code thanks to SWIG. 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.

    -

    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 Kivy, 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.

    +

    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 Kivy, 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.

    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.

    Our secondary goal for using a scripting language was to allow to extend C++ code.

    -

    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.

    -

    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. Technically such behaviour is achieved by inheriting a base class and overriding its methods in both C++ and a scripting language.

    +

    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.

    +

    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. +Technically such behaviour is achieved by inheriting a base class and overriding its methods in both C++ and a scripting language.

    First, we evaluated Python for the role of cross-platform scripting language.

    -

    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. We also had a look at PyPy, another Python implementation. It also did not mention support for mobile and web platforms.

    -

    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.

    +

    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. +We also had a look at PyPy, another Python implementation. It also did not mention support for mobile and web platforms.

    +

    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.

    Second, we evaluated Wren for the role of cross-platform scripting language.

    Wren was the first scripting language we stumbled upon in the long list of non-mainstream scripting languages.

    Wren claimed to be small and easy to learn. Wren also claimed to be intended for embedding in applications. Ironically, the author had no time to document how to do the embedding in the first place. When we asked for the time estimates of publishing the critical part of the documentation, we just got a reference to another issue where the other guy was asking the same question half a year ago!

    -

    That’s when we ended our relationship with Wren.

    +

    That's when we ended our relationship with Wren.

    Third, we evaluated Chai for the role of cross-platform scripting language.

    -

    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. We successfully managed to call a C++ function from inside Chai but failed to call a member function. We asked for help, but nobody replied.

    +

    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. +We successfully managed to call a C++ function from inside Chai but failed to call a member function. We asked for help, but nobody replied.

    We had to end our relationship with Chai.

    Fourth, we evaluated Lua for the role of cross-platform scripting language.

    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 C API chapter we had no clue how to inherit a class inside Lua.

    -

    This led us to search for libraries that wrap Lua C API syntax into something more meaningful for C++. That’s how we found Sol2. Just as before, the first attempt to call a C++ member function from Lua failed. But unlike before, we asked for help and got the help! This was a refreshing surprise for us. Next, we tried to inherit a class in Lua and override the class methods. We failed, but the author helped us out again. In the end, we succeeded in inheriting a class and overriding its behaviour.

    -

    That’s when we understood it’s a start for a long and mutual relationship with Sol2/Lua.

    +

    This led us to search for libraries that wrap Lua C API syntax into something more meaningful for C++. That's how we found Sol2. Just as before, the first attempt to call a C++ member function from Lua failed. But unlike before, we asked for help and got the help! This was a refreshing surprise for us. +Next, we tried to inherit a class in Lua and override the class methods. We failed, but the author helped us out again. In the end, we succeeded in inheriting a class and overriding its behaviour.

    +

    That's when we understood it's a start for a long and mutual relationship with Sol2/Lua.

    This search for a scripting language taught us one important lesson: people matter, not technologies.

    -

    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.

    -

    That’s it for describing scripting research in July 2017.

    - -
    +

    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.

    +

    That's it for describing scripting research in July 2017.

    +
    +
    diff --git a/en/news/september-live-session-announcement-tomorrow.html b/en/news/september-live-session-announcement-tomorrow.html index dc8178c..ab793d4 100644 --- a/en/news/september-live-session-announcement-tomorrow.html +++ b/en/news/september-live-session-announcement-tomorrow.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,31 +80,36 @@ -
    -

    In the news

    -
    -

    - Live session is in 24 hours -

    -

    - 2016-09-24 00:00 -

    -
    - -

    Get ready for live session, it’s about to happen in 24 hours!

    - -
    +
    +

    In the news...

    +
    +

    + Live session is in 24 hours +

    +

    + 2016-09-24 00:00 +

    +
    + +

    Get ready for live session, it's about to happen in 24 hours!

    +
    +
    diff --git a/en/news/september-live-session-announcement.html b/en/news/september-live-session-announcement.html index 16f5fde..6f5cb0b 100644 --- a/en/news/september-live-session-announcement.html +++ b/en/news/september-live-session-announcement.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,31 +80,37 @@ -
    -

    In the news

    -
    -

    - Live session: 25 September 2016 -

    -

    - 2016-09-17 00:00 -

    -
    - -

    We will hold live session on 25 September 2016 at 12:00 CEST It’s time to create simple Mahjong solitaire game.

    - -
    +
    +

    In the news...

    +
    +

    + Live session: 25 September 2016 +

    +

    + 2016-09-17 00:00 +

    +
    + +

    We will hold live session on 25 September 2016 at 12:00 CEST +It's time to create simple Mahjong solitaire game.

    +
    +
    diff --git a/en/news/soon-game-creation-editor-07.html b/en/news/soon-game-creation-editor-07.html index 5797369..5ca0ef0 100644 --- a/en/news/soon-game-creation-editor-07.html +++ b/en/news/soon-game-creation-editor-07.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,35 +80,41 @@ -
    -

    In the news

    -
    -

    - SOON: Creating a simple game live (Editor 0.7) -

    -

    - 2015-11-02 00:00 -

    -
    -

    As we have promised, we are ready to give you Editor 0.7 which is capable of creating the complete test chamber. However, after recreating the test chamber ourselves, it became clear that:

    -
      +
      +

      In the news...

      +
      +

      + SOON: Creating a simple game live (Editor 0.7) +

      +

      + 2015-11-02 00:00 +

      +
      +

      As we have promised, we are ready to give you Editor 0.7 which is capable of creating the complete test chamber. However, after recreating the test chamber ourselves, it became clear that:

      +
      1. it takes more than 8 hours to recreate it (too long)
      2. -
      3. it’s inappropriate to be presented in the form of an article (too boring)
      4. +
      5. it's inappropriate to be presented in the form of an article (too boring)

      Therefore we decided to hold a live session at LiveCoding SOON to show you how to create a simple whac-a-mole like game from scratch.

      -

      Currently we are busy making final preparations, so we’ll tell you the exact time and date this week. Stay tuned!

      - -
      +

      Currently we are busy making final preparations, so we'll tell you the exact time and date this week. Stay tuned!

      +
    +
    diff --git a/en/news/teaching-kids-to-program.html b/en/news/teaching-kids-to-program.html index 692fac2..8a6b909 100644 --- a/en/news/teaching-kids-to-program.html +++ b/en/news/teaching-kids-to-program.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,30 +80,30 @@ -
    -

    In the news

    -
    -

    - Teaching kids to program -

    -

    - 2019-02-04 00:00 -

    -
    -
    -Students and teachers
    Students and teachers
    -
    +
    +

    In the news...

    +
    +

    + Teaching kids to program +

    +

    + 2019-02-04 00:00 +

    +
    +

    Students and teachers

    In this article, Michael shares his experience of teaching kids to program.

    -

    Here’s what he covers:

    +

    Here's what he covers:

    • organization of the learning process
    • learning plan
    • @@ -123,39 +115,27 @@

      Organization of the learning process

      The learning process is conducted as part of corporate social responsibility: a company provides a room with equipment and connects employees that want to try themselves in the role of teachers with employees that want their kids educated. All this is done voluntarily.

      Potential teachers are divided into groups so that each group contains three teachers: experienced one and two novice ones. Such a group of three teachers leads a group of students. Students are divided into groups by age and skills.

      -

      I participated in the program as a teacher for the second time in 2018. The kids were around ten years old. Our group was active from October to December of 2018 each Saturday, 10:00-12:00. Using my position as a teacher, I’ve also brought my wife in as a student.

      +

      I participated in the program as a teacher for the second time in 2018. The kids were around ten years old. Our group was active from October to December of 2018 each Saturday, 10:00-12:00. Using my position as a teacher, I've also brought my wife in as a student.

      Learning plan

      The first time I participated in the program, our group taught kids rather mindlessly: we were coming up with simple tasks to explain different operators. By the end of the course we had nothing concrete to evaluate, analyze, and share.

      This second time I decided we are going to create a memory game with kids. I decided to consider the course successful if by the end of the course each kid would be able to create a simple memory game from scratch in an hour.

      -

      To achieve that, we were recreating the same game from scratch each lesson. I’d like to stress that we did not use personal accounts to save progress. Our task was to save the skill of game creation in the head, not a PC.

      +

      To achieve that, we were recreating the same game from scratch each lesson. I'd like to stress that we did not use personal accounts to save progress. Our task was to save the skill of game creation in the head, not a PC.

      Memory game

      -

      Let’s see what the memory game is.

      +

      Let's see what the memory game is.

      1) In the simplest case we have 16 cards, only 8 of them are unique, the rest 8 are duplicates of the unique ones.

      -
      -Cards face up
      Cards face up
      -
      +

      Cards face up

      As you can see, we only have two cards with a cat, only two cards with a dog, etc..

      2) At the start we shuffle the cards and place them with their faces down.

      -
      -Cards face down
      Cards face down
      -
      +

      Cards face down

      3) The first game player turns a pair of cards.

      -
      -A pair of cards
      A pair of cards
      -
      +

      A pair of cards

      4) If the cards differ they are once again turned face down.

      -
      -Cards face down
      Cards face down
      -
      +

      Cards face down

      5) The next player turns another pair of cards.

      -
      -Second pair of cards
      Second pair of cards
      -
      +

      Second pair of cards

      6) If the cards are the same, they are removed from the field.

      -
      -A pair of matching cards has been removed
      A pair of matching cards has been removed
      -
      -

      The goal of the game is to remove all cards from the field. There’s no competition here so the game can be played alone.

      +

      A pair of matching cards has been removed

      +

      The goal of the game is to remove all cards from the field. There's no competition here so the game can be played alone.

      From one hand, the memory game is rather simple. From the other hand, the game implementation requires essential functionality each more or less complex game has:

      • creation of items
      • @@ -167,100 +147,80 @@

        Development tools

        We used Scratch as our development tool. Scratch is a great tool to teach kids to program because each action, each operation is represented graphically.

        For example, you can rotate a cat 360 degrees in 1 second using the following script:

        -
        -Script
        Script
        -
        -

        Here’s how it looks like in action:

        -
        -Animation
        Animation
        -
        -

        I’d like to stress that Scratch is a rather successful solution to represent code graphically. For example, a paid solution by SAP uses similar concept of cubes to program logic:

        -
        -SAP UI
        SAP UI
        -
        +

        Script

        +

        Here's how it looks like in action:

        +

        Animation

        +

        I'd like to stress that Scratch is a rather successful solution to represent code graphically. For example, a paid solution by SAP uses similar concept of cubes to program logic:

        +

        SAP UI

        Users can only input values into predefined fields. If users want more functionality they have to resort to scripts.

        -

        Personally, I have never witnessed any slowdown in Scratch, and there were many in SAP’s solution.

        +

        Personally, I have never witnessed any slowdown in Scratch, and there were many in SAP's solution.

        The first lesson

        -

        The first lesson was introductory, we didn’t use PCs.

        +

        The first lesson was introductory, we didn't use PCs.

        The plan was to:

        -
          +
          1. Meet
          2. Play the memory game with cards
          3. Learn the concept of algorithm
          4. -
          5. Detail the game’s algorithm
          6. +
          7. Detail the game's algorithm
          8. Analyze the lesson

          1) Meeting

          Both teachers and students stand in a circle. This equalizes everyone and makes everyone a team member.

          The first team member tells his name and why he decided to take the course. The second team member and the rest first repeat the name and the story of each previous team member before telling their own names and stories.

          -

          Here’s how it looks like:

          -
            -
          1. John: “My name is John, I am going to study Scratch because my father forces me to”
          2. -
          3. Alex: “This is John, he’s doing Scratch because his father wants him to do it. My name is Alex, and this is my fourth year with Scratch”
          4. -
          5. Ann: “That’s John, his parents force him to do Scratch. This is Alex, he’s a Scratch veteran. And I’m Ann, a novice teacher, so I’m going to learn together with you all”
          6. +

            Here's how it looks like:

            +
              +
            1. John: "My name is John, I am going to study Scratch because my father forces me to"
            2. +
            3. Alex: "This is John, he's doing Scratch because his father wants him to do it. My name is Alex, and this is my fourth year with Scratch"
            4. +
            5. Ann: "That's John, his parents force him to do Scratch. This is Alex, he's a Scratch veteran. And I'm Ann, a novice teacher, so I'm going to learn together with you all"

            Such a format of meeting has the following objectives:

              -
            • Getting to know each other -
                -
              • Each team member should know other team members by name
              • -
            • -
            • Common space -
                -
              • Everyone is in the circle, not at a working desk, this prevents distraction of kids by PC games
              • -
            • -
            • Equality -
                -
              • Both teachers and students are in the same circle, this equalizes everyone as a team member without hierarchy
              • -
            • -
            • Attention -
                -
              • Each team member should listen carefully to be able to correctly repeat what others said
              • -
            • -
            • Feedback -
                -
              • Each team member should be as clear as possible when expressing thoughts, otherwise nobody would be able to repeat them
              • -
            • -
            • Fun -
                -
              • Memorization problems produce lots of laughter
              • -
            • +
            • Getting to know each other
                +
              • Each team member should know other team members by name
            • +
            • Common space
                +
              • Everyone is in the circle, not at a working desk, this prevents distraction of kids by PC games
            • +
            • Equality
                +
              • Both teachers and students are in the same circle, this equalizes everyone as a team member without hierarchy
            • +
            • Attention
                +
              • Each team member should listen carefully to be able to correctly repeat what others said
            • +
            • Feedback
                +
              • Each team member should be as clear as possible when expressing thoughts, otherwise nobody would be able to repeat them
            • +
            • Fun
                +
              • Memorization problems produce lots of laughter

            2) Memory game with cards

            -
              +
              1. Take 8 pairs of the same cards from two decks of cards
              2. Place the cards in 4 x 4 grid, faces down
              3. Students stand up around single table
              4. -
              5. Each student, one by one, turns a pair of cards -
                  +
                • Each student, one by one, turns a pair of cards
                  • If cards match, they are taken off the field
                  • -
                  • If cards differ, they are once again turned face down
                  • -
                • +
                • If cards differ, they are once again turned face down
              -

              Students are eager to play tabletop games. During the game party teachers say out loud each step in the game’s algorithm.

              -

              After a couple of parties it’s time to find out what algorithm is.

              +

              Students are eager to play tabletop games. During the game party teachers say out loud each step in the game's algorithm.

              +

              After a couple of parties it's time to find out what algorithm is.

              3) The concept of algorithm

              -
                +
                1. Ask students first, hear them out to find out their level
                2. Correct what students say if they were close to an expected answer
                3. -
                4. Ask students to write an algorithm to move a man from “stands outside a room” state into “sits and works at a PC” one
                5. +
                6. Ask students to write an algorithm to move a man from "stands outside a room" state into "sits and works at a PC" one

                Students like to go to blackboard and write, so we ask each student to come and write a single step of the algorithm at a time. The most active student should execute the algorithm by following it strictly.

                4) The algorithm of the game

                -

                Ask students to compose the game’s algorithm. Again, let students come to the blackboard and add one step of the algorithm at a time. Once the algorithm is ready, play the game with cards once again. Now, each student should say the algorithm’s step he executes.

                -

                Here’s how it looks like:

                -
                  -
                1. John: “Place 16 cards faces down”
                2. -
                3. Alex: “Turn a pair of cards”
                4. -
                5. Paul: “If the cards differ, turn them faces down again”
                6. -
                7. Dan: “Turn another pair of cards”
                8. -
                9. Mike: “If the cards match, take them off the field”
                10. +

                  Ask students to compose the game's algorithm. Again, let students come to the blackboard and add one step of the algorithm at a time. Once the algorithm is ready, play the game with cards once again. Now, each student should say the algorithm's step he executes.

                  +

                  Here's how it looks like:

                  +
                    +
                  1. John: "Place 16 cards faces down"
                  2. +
                  3. Alex: "Turn a pair of cards"
                  4. +
                  5. Paul: "If the cards differ, turn them faces down again"
                  6. +
                  7. Dan: "Turn another pair of cards"
                  8. +
                  9. Mike: "If the cards match, take them off the field"

                  5) Analyze the lesson

                  -

                  That’s it for the first lesson. Teachers finally have time to discuss the lesson: discuss the kids, approaches to shy and active kids, plan next lessons.

                  +

                  That's it for the first lesson. Teachers finally have time to discuss the lesson: discuss the kids, approaches to shy and active kids, plan next lessons.

                  We had the following decisions:

                  -
                    -
                  1. Arrange students so that active ones sit next to shy ones as “active-shy-active-shy-etc” so that we don’t end up with two groups of shy and active students at different sides of a room, which would hamper productivity.
                  2. +
                      +
                    1. Arrange students so that active ones sit next to shy ones as "active-shy-active-shy-etc" so that we don't end up with two groups of shy and active students at different sides of a room, which would hamper productivity.
                    2. Only accept accurate answers from students because active students like to wriggle, which hampers discipline.

                    The second and the third lessons

                    @@ -268,13 +228,13 @@

                    We spent the second lesson to create requirements for an item of the playfield and then create the item in Scratch. This was moderately successful.

                    We spent the third lesson trying to create 16 items and arrange them in 4x4 grid. We failed miserably because we could not explain coordinate system to students. It became apparent that lesson plans were only plans, reality had its own demands.

                    We saw two ways to approach the problem:

                    -
                      +
                      1. Keep on studying the coordinate system risking not to get the game done by the end of the course
                      2. Change the game requirements so that coordinate system is not necessary
                      -

                      We went the second way because, after all, we’re not a school, our goal was to teach kids to create the game, i.e., use skills in practice, not theory. That’s why we replaced 4x4 grid with a circle of 16 items.

                      +

                      We went the second way because, after all, we're not a school, our goal was to teach kids to create the game, i.e., use skills in practice, not theory. That's why we replaced 4x4 grid with a circle of 16 items.

                      This solution sparkled a few thoughts in my head:

                      -
                        +
                        1. One can often find a simpler path to solve an issue
                        2. This path is simpler to understand, albeit less flexible
                        3. One can go the harder path to increase flexibility much later when it becomes absolutely necessary
                        4. @@ -286,10 +246,8 @@

                          We started recreating complete game from scratch on the sixth lesson. Each time students were recreating complete game faster and faster. On the eighth lesson we introduced a leaderboard to track how fast each student recreates a specific part of the game.

                          The last lesson

                          When the last lesson approached everyone was able to create the memory game from scratch more or less independently in two hours.

                          -

                          Here’s the leaderboard of the last lesson (names are hidden):

                          -
                          -Leaderboard
                          Leaderboard
                          -
                          +

                          Here's the leaderboard of the last lesson (names are hidden):

                          +

                          Leaderboard

                          The leaderboard is in Russian, here are the captions translated:

                          • Name
                          • @@ -299,8 +257,7 @@
                          • Hide a pair

                          Here you can witness the creation of the memory game from scratch by the fastest student: in just half an hour.

                          - +


                          Results and plans

                          The results surpassed my expectations:

                          @@ -308,11 +265,15 @@
                        5. three students made it in an hour or faster
                        6. two students made it in an hour and a half or faster
      -

      This year I plan on doing another round of the memory game recreation. However, I’m going to replace Scratch with Opensource Game Studio tools: the students will use Lua, Git, and GitHub Pages.

      -

      That’s it for sharing Michael’s experience of teaching kids to program.

      - -
    +

    This year I plan on doing another round of the memory game recreation. However, I'm going to replace Scratch with Opensource Game Studio tools: the students will use Lua, Git, and GitHub Pages.

    +

    That's it for sharing Michael's experience of teaching kids to program.

    +
    +
    diff --git a/en/news/test-chamber-for-everyone.html b/en/news/test-chamber-for-everyone.html index 752382e..ed117ed 100644 --- a/en/news/test-chamber-for-everyone.html +++ b/en/news/test-chamber-for-everyone.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,30 +80,36 @@ -
    -

    In the news

    -
    -

    - Test chamber for everyone (Editor 0.7.0) -

    -

    - 2015-07-22 00:00 -

    -
    -

    As you know, the main goal of Editor 0.7.0 is the ability to create the test chamber with it. It needs Actions’ system and a few stability fixes for that. We are going to publish a detailed article describing how to create the test chamber, too, so that anyone could create their own test chamber!

    +
    +

    In the news...

    +
    +

    + Test chamber for everyone (Editor 0.7.0) +

    +

    + 2015-07-22 00:00 +

    +
    +

    As you know, the main goal of Editor 0.7.0 is the ability to create the test chamber with it. It needs Actions' system and a few stability fixes for that. We are going to publish a detailed article describing how to create the test chamber, too, so that anyone could create their own test chamber!

    We estimate to complete it in October.

    - -
    +
    +
    diff --git a/en/news/the-year-of-challenges.html b/en/news/the-year-of-challenges.html index 3143bde..4b2ca87 100644 --- a/en/news/the-year-of-challenges.html +++ b/en/news/the-year-of-challenges.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,42 +80,45 @@ -
    -

    In the news

    -
    -

    - The year of challenges -

    -

    - 2017-01-25 00:00 -

    -
    -
    -Rocket launch at Baikonur
    Rocket launch at Baikonur
    -
    +
    +

    In the news...

    +
    +

    + The year of challenges +

    +

    + 2017-01-25 00:00 +

    +
    +

    Rocket launch at Baikonur

    This article describes our plans for 2017.

    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:

    -
    -Rendering cubes on Android
    Rendering cubes on Android
    -
    -

    Some people would consider this a failure. We don’t. We see a chance to start low and jump high!

    -

    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. At the same time, such a harsh environment highlighted weak spots in our technologies and helped us see where to go next.

    -

    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.

    +

    Rendering cubes on Android

    +

    Some people would consider this a failure. We don't. We see a chance to start low and jump high!

    +

    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. +At the same time, such a harsh environment highlighted weak spots in our technologies and helped us see where to go next.

    +

    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.

    And right after we get those cubes rendered on iOS, we start to work on bringing them to Web.

    You got it right: we challenge ourselves with support for Android, iOS, and Web this year.

    -

    That’s it for describing our plans for 2017.

    - -
    +

    That's it for describing our plans for 2017.

    +
    +
    diff --git a/en/news/the-year-of-lessons.html b/en/news/the-year-of-lessons.html index e5a5d5d..1191273 100644 --- a/en/news/the-year-of-lessons.html +++ b/en/news/the-year-of-lessons.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,37 +80,41 @@ -
    -

    In the news

    -
    -

    - The year of lessons -

    -

    - 2017-12-31 22:00 -

    -
    -
    -Sparkler
    Sparkler
    -
    -

    So, the year 2017 is approaching its finale, the year’s results have already been summed up. We’re going to take a break from igniting the fireworks or preparation of the champagne so that we can designate our goal for the following year.

    +
    +

    In the news...

    +
    +

    + The year of lessons +

    +

    + 2017-12-31 22:00 +

    +
    +

    Sparkler

    +

    So, the year 2017 is approaching its finale, the year's results have already been summed up. We're going to take a break from igniting the fireworks or preparation of the champagne so that we can designate our goal for the following year.

    As it may be clear from other articles on the site, half of our plans in 2017 were destined to be completed at least approximately as we assumed. The other half was changed significantly.

    -

    During the year, people joined the team and left it. As a result, we meet the end of the year with exactly the same team as 365 days ago. It made us think. A lot. But We’ll save the story for another time.

    -

    There will be exactly one goal for 2018. We will take all the results, and then we will make a new mahjong game. We’re already know how to make a mahjong solitaire so we will begin with it. This time, it will be cross-platform. We will definitely try to cover Windows, Linux, macOs, Web, and Android. We can’t promis anything about the iOS right now (although we’ll see what we can do).

    +

    During the year, people joined the team and left it. As a result, we meet the end of the year with exactly the same team as 365 days ago. It made us think. A lot. But We'll save the story for another time.

    +

    There will be exactly one goal for 2018. We will take all the results, and then we will make a new mahjong game. We're already know how to make a mahjong solitaire so we will begin with it. This time, it will be cross-platform. We will definitely try to cover Windows, Linux, macOs, Web, and Android. We can't promis anything about the iOS right now (although we'll see what we can do).

    There is no point in writing more than We want to say. We learned a lot for this year, and we will try to apply all this knowledge to achieve more in the next one. We wish everyone a Happy New Year. Stay tuned.

    The Opensource Game Studio Team.

    - -
    +
    +
    diff --git a/en/news/user-servey-finish-promise.html b/en/news/user-servey-finish-promise.html index 65c745e..ec370a9 100644 --- a/en/news/user-servey-finish-promise.html +++ b/en/news/user-servey-finish-promise.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,33 +80,39 @@ -
    -

    In the news

    -
    -

    - User survey ends today -

    -

    - 2014-12-31 11:00 -

    -
    -

    About a year ago, we started the user survey, in order to find out what do you think of the Open Source in general and about our project in particular. Today we’re closing this survey. It took time, but we’ve got plenty of answers. Thank you for that.

    -

    We’ll share our thought about the results of the survey in one of the future articles.

    -

    After the survey, every one of you has got the code. With this code, you’ll be able to access the alpha test of the OGS Mahjong 2, as soon as we’ll be ready to start it (i can’t promise anything, but we’re planning to do it in 2015). Also, you’ll be able to choose between the deluxe version of OGS Mahjong 2 and the deluxe version of Shuan, as soon as we’ll be ready to release these games.

    +
    +

    In the news...

    +
    +

    + User survey ends today +

    +

    + 2014-12-31 11:00 +

    +
    +

    About a year ago, we started the user survey, in order to find out what do you think of the Open Source in general and about our project in particular. Today we're closing this survey. It took time, but we've got plenty of answers. Thank you for that.

    +

    We'll share our thought about the results of the survey in one of the future articles.

    +

    After the survey, every one of you has got the code. With this code, you'll be able to access the alpha test of the OGS Mahjong 2, as soon as we'll be ready to start it (i can't promise anything, but we're planning to do it in 2015). Also, you'll be able to choose between the deluxe version of OGS Mahjong 2 and the deluxe version of Shuan, as soon as we'll be ready to release these games.

    We wish you all a Happy New Year. Thank you for being with us. See you next year.

    -

    P.S. If you have lost your code - write us a letter, we’ll figure something out.

    - -
    +

    P.S. If you have lost your code - write us a letter, we'll figure something out.

    +
    +
    diff --git a/en/news/yesterdays-live-session-short-overview.html b/en/news/yesterdays-live-session-short-overview.html index 98eab66..3a1ba36 100644 --- a/en/news/yesterdays-live-session-short-overview.html +++ b/en/news/yesterdays-live-session-short-overview.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,33 +80,38 @@ -
    -

    In the news

    -
    -

    - A few words about live session yesterday -

    -

    - 2016-09-26 00:00 -

    -
    - +
    +

    In the news...

    +
    +

    + A few words about live session yesterday +

    +

    + 2016-09-26 00:00 +

    +
    +

    Mahjong Solitaire was successfully created, and it took less than 4 hours.

    We will publish live session materials later this week.

    Thank you for joining us.

    - -
    +
    +
    diff --git a/en/page/about.html b/en/page/about.html index fa63a1e..7189711 100644 --- a/en/page/about.html +++ b/en/page/about.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,27 +80,30 @@ -
    -

    About

    -
    -
    -

    Goals

    -

    The goals of Opensource Game Studio are:

    +
    +

    About us

    +
    +
    +

    Goals

    +

    The goals of Open Game Studio are:

    • creation of free video game development tools
    • making video games with those tools
    • preparing video game development tutorials
    -

    To this date, we have released OGS Mahjong 1. It’s a solitaire game and the first step in the long path towards full-scale RPG.

    +

    To this date, we have released OGS Mahjong 1. It's a solitaire game and the +first step in the long path towards full-scale RPG.

    Team

    • Michael “kornerr” Kapelko – software engineer, co-founder
    • @@ -123,10 +118,15 @@
    • Thierry Delaunay, Miguel de Dios, Dirk Pervolz, Jurgen Rauscher – translators

    Support us

    -

    If you like what we do, support us by joining our group at Twitter, Facebook, or VK. One day we’ll need your help.

    - -
    +

    If you like what we do, support us by joining our group at +VK, Twitter, or Facebook.

    +
    +
    diff --git a/en/page/about.md b/en/page/about.md new file mode 100644 index 0000000..6225d80 --- /dev/null +++ b/en/page/about.md @@ -0,0 +1,38 @@ +Title: About us +Date: 2019-07-31 00:00 +Category: Page +Slug: about +Lang: en + +**Goals** + +The goals of Open Game Studio are: + +* creation of free video game development tools +* making video games with those tools +* preparing video game development tutorials + +To this date, we have released OGS Mahjong 1. It's a solitaire game and the +first step in the long path towards full-scale RPG. + +**Team** + +* Michael “kornerr” Kapelko – software engineer, co-founder +* Ivan “Kai SD” Korystin – game designer, QA, PM, co-founder + +**Contributors** + +* Maxim Zaretsky – writer +* Tatyana Artemyeva – QA +* devALEX – software engineer +* Timur “Sora” Malikin, Anton “Kif” Chernov- 3D modellers +* Thierry Delaunay, Miguel de Dios, Dirk Pervolz, Jurgen Rauscher – translators + +**Support us** + +If you like what we do, support us by joining our group at +[VK][vk], [Twitter][tw], or [Facebook][fb]. + +[vk]: https://vk.com/opengamestudo +[tw]: https://twitter.com/OpenGameStudio +[fb]: https://www.facebook.com/groups/162611230470183 diff --git a/en/page/item.template b/en/page/item.template new file mode 100644 index 0000000..442979d --- /dev/null +++ b/en/page/item.template @@ -0,0 +1,108 @@ + + + + + + + + +
    +

    PSKOV_ITEM_TITLE

    +
    +
    +PSKOV_ITEM_CONTENTS +
    +
    + +
    + + diff --git a/en/page/ogs-mahjong-1.html b/en/page/ogs-mahjong-1.html index 37e3a75..e53ffd4 100644 --- a/en/page/ogs-mahjong-1.html +++ b/en/page/ogs-mahjong-1.html @@ -1,144 +1,4 @@ - - - - - -
    - -

    OGS Mahjong 1

    -
    -
    -

    Mahjong solitaire and shisen-sho game with nice 3D graphics and relaxing soundtrack.

    - -


    -

    Features

    -
      -
    • 3 game modes: Mahjong Solitaire, Shisen-sho and Shisen-sho with gravity.
    • -
    • More than 150 layouts. Layouts format is compatible with KMahjongg.
    • -
    • Support for multiple tilesets.
    • -
    • 4 themes: “Classic”, “Neo-classic”, “Flowers”, “Distros”.
    • -
    • Support for background scenes.
    • -
    • 3 scenes: “Room”, “Room Lite” and “Inside the computer”.
    • -
    • Save and load.
    • -
    • Hints and shuffle.
    • -
    • Unlimited number of undos.
    • -
    • Camera animations and dynamic camera (cursor tracking).
    • -
    • Layers highlighting.
    • -
    • 6 languages: Russian, English, German, French, Spanish and Hindi.
    • -
    • Online leaderboard.
    • -
    • Adapting the game settings to your computer configuration during the first game launch.
    • -
    -

    Basic version

    - -

    Deluxe version

    -

    If you like our work, you can support us by buying the Deluxe version. It will help us keep the things running and, maybe, hire some freelance artists to make our future games a bit better.

    -

    OGS Mahjong Deluxe contains two additional tilesets: “Eastern” and “Sport”.

    - - -
    -
    -
    - + diff --git a/en/tool/100-zipbase64.md b/en/tool/100-zipbase64.md new file mode 100644 index 0000000..fabe0a0 --- /dev/null +++ b/en/tool/100-zipbase64.md @@ -0,0 +1,8 @@ +Title: ZipBase64 +Category: Tool +Slug: zipbase64 +Lang: en + +[ZipBase64][zb64] converts strings to Base64 or Zip + Base64. Runs in your web browser. + +[zb64]: http://opengamestudio.org/zipbase64 diff --git a/en/tool/500-lfsa.md b/en/tool/500-lfsa.md new file mode 100644 index 0000000..8a7b2fd --- /dev/null +++ b/en/tool/500-lfsa.md @@ -0,0 +1,8 @@ +Title: LFSA +Category: Tool +Slug: lfsa +Lang: en + +[LFSA][lfsa] (**L**ocal **F**ile **S**ystem **A**ccess) allows client side JS access local file system. + +[lfsa]: http://opengamestudio.org/lfsa diff --git a/en/tool/900-pskov.md b/en/tool/900-pskov.md new file mode 100644 index 0000000..10848c8 --- /dev/null +++ b/en/tool/900-pskov.md @@ -0,0 +1,8 @@ +Title: PSKOV +Category: Tool +Slug: pskov +Lang: en + +[PSKOV][pskov] is a static site generator that runs in your web browser. + +[pskov]: http://opengamestudio.org/pskov diff --git a/en/tool/index.html b/en/tool/index.html new file mode 100644 index 0000000..3267605 --- /dev/null +++ b/en/tool/index.html @@ -0,0 +1,142 @@ + + + + + + + + +
    +

    Tools

    + +
    +

    + PSKOV +

    +
    +

    PSKOV is a static site generator that runs in your web browser.

    +

    . . .

    +
    + +
    +
    +

    + LFSA +

    +
    +

    LFSA (Local File System Access) allows client side JS access local file system.

    +

    . . .

    +
    + +
    +
    +

    + ZipBase64 +

    +
    +

    ZipBase64 converts strings to Base64 or Zip + Base64. Runs in your web browser.

    +

    . . .

    +
    + +
    + + + +
    + + diff --git a/en/tool/index.template b/en/tool/index.template new file mode 100644 index 0000000..26d113c --- /dev/null +++ b/en/tool/index.template @@ -0,0 +1,106 @@ + + + + + + + + +
    +

    Tools

    + +PSKOV_PREVIEWS + + +
    + + diff --git a/en/tool/item.template b/en/tool/item.template new file mode 100644 index 0000000..ea7233d --- /dev/null +++ b/en/tool/item.template @@ -0,0 +1,111 @@ + + + + + + + + +
    +

    In the tools...

    +
    +

    + PSKOV_ITEM_TITLE +

    +
    +PSKOV_ITEM_CONTENTS +
    +
    + +
    + + diff --git a/en/tool/lfsa.html b/en/tool/lfsa.html new file mode 100644 index 0000000..8195e34 --- /dev/null +++ b/en/tool/lfsa.html @@ -0,0 +1,111 @@ + + + + + + + + +
    +

    In the tools...

    +
    +

    + LFSA +

    +
    +

    LFSA (Local File System Access) allows client side JS access local file system.

    +
    +
    + +
    + + diff --git a/en/tool/pagination.next.template b/en/tool/pagination.next.template new file mode 100644 index 0000000..e63f7e1 --- /dev/null +++ b/en/tool/pagination.next.template @@ -0,0 +1,4 @@ +

    Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT

    +

    + Older » +

    diff --git a/en/tool/pagination.prev.template b/en/tool/pagination.prev.template new file mode 100644 index 0000000..0b6dba1 --- /dev/null +++ b/en/tool/pagination.prev.template @@ -0,0 +1,4 @@ +

    Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT

    +

    + « Newer +

    diff --git a/en/tool/pagination.template b/en/tool/pagination.template new file mode 100644 index 0000000..7b69dde --- /dev/null +++ b/en/tool/pagination.template @@ -0,0 +1,5 @@ +

    Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT

    +

    + « Newer + Older » +

    diff --git a/en/tool/preview.template b/en/tool/preview.template new file mode 100644 index 0000000..f67fe3c --- /dev/null +++ b/en/tool/preview.template @@ -0,0 +1,11 @@ +
    +

    + PSKOV_ITEM_TITLE +

    +
    +PSKOV_PREVIEW +
    + +
    diff --git a/en/tool/pskov.html b/en/tool/pskov.html new file mode 100644 index 0000000..655be17 --- /dev/null +++ b/en/tool/pskov.html @@ -0,0 +1,111 @@ + + + + + + + + +
    +

    In the tools...

    +
    +

    + PSKOV +

    +
    +

    PSKOV is a static site generator that runs in your web browser.

    +
    +
    + +
    + + diff --git a/en/tool/zipbase64.html b/en/tool/zipbase64.html new file mode 100644 index 0000000..dbded93 --- /dev/null +++ b/en/tool/zipbase64.html @@ -0,0 +1,111 @@ + + + + + + + + +
    +

    In the tools...

    +
    +

    + ZipBase64 +

    +
    +

    ZipBase64 converts strings to Base64 or Zip + Base64. Runs in your web browser.

    +
    +
    + +
    + + diff --git a/images/2019-08-05_on-the-way-to-durable-applications.jpg b/images/2019-08-05_on-the-way-to-durable-applications.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b2b950b49b47c2b2834915691da51e8ae712ab5 GIT binary patch literal 733486 zcmeFZX;_n2yEYuPR;#tts^CzK)jBbX3MdMB9FPJ66&WN9smvh^B81U!Kdn<0k%~eT zgvbyPLWqz_5+JRLC=??@5)uqikRd=ALnPD9w|Mq`_wye6czsr@3uk%`qxvshQh;N-wI-Nu;TC@o93Vb2vKCE_gNXCXC5U#EWV*~=R9PuS$C1NqS z+6n#$TJ#-a3AkPaz7UHn|LghR7w!Ak^;*!T>KYdD#lPAhmOmT*9h_a8if_@A}fx7X6zcCV%F-h*2$Ep07rZ1?R$Ain%#$^T*{tH1x_i~qXb zn|=FV*Gp_H5s2*Ue_uab^lx_aZ|3sVxAWFnU@reJ`sl)#7Z6xLU;%*z1QrnZHv<2S zZS1$TvPS%$o&$Ocj6j}pIC^5MXJ~LlOl(waI5sqXt5Zy{`BraB^SzcpaIqYUNJuzu zYhe)+Z+t5IM$3r8qKc!v>J(KF@8Jvm>J`}PGWxs00k!0KC==0H`3Fo#ZM@PlP+a}v>``6uV z!S(#p7TfHPTnGuX^*C|zKU;vm?6&=9Uy_oN%#-$;$6g4xusn3=kj3787W?*@ffi=* zDKQD>lFee`xBur2PK3q>U%;MEz{bXGoxkC^pjdo@-8MWP8)6%FF3c(@B*e-r=-mDg zGfT^mb7tp4_FI~T?B5?^V`X`8Uzlakw*S?^==1;e@&89Cz~_M>*&e?TdJZr}&)C=~ z`~ML+JYw?*)1XursIDmia|AoiGhkO>u3veyK^;rmfR^tWlT7c`b5csUd3*NN=*JmN{S&bLG zYXPp$Lg2F+FL>7iT%U!&XEk2%t_8S03xUsSyx?66aD5g6pVfH5yB6U3ECfEQ@q%|P z!1Y-Od{*NH?^=NCvk>^K#tYuH0M}$4E}ti}u8wE)*= zA@Es^7rg8LI$ZxgwGkQvj%p-565`zFhwG zim$(3xnkwYRo{H~?W%89f3tGsw}#)YUbA-Hx^-V07_B#4yZ*bi>(0aWOTj+^ng3rP|M^(7 z81(VWWy`->u@W?3ev4SVXvvbrUo4sLHE2x$uOq%#z4W^uERTM<=JdH`+v3*l`}KCw z^6kf}|61qKHu2;BpbNi!wZhP7{f3P@cJA7}$M}Giwavjpw#QF6oOJxj$@z?@m$%PZ zUvzLtXjpgzHZnc|pO}=Kl6vX#m8;i&zkVb8&fT0`;=TKM#U-WWM`e%8D{ANrCX4;F zmh5{(-?E`S9e_v~ouEX;!V79~U^(`ya#luaW(? zajgd9TKvTqOTJh(KdwcKlfciC)n6?A!Sc)Rj-Fn2E^f`XeZMYWd+c^m^+n2f z6ip&!g~=yJU78nD%ZR^dANoz*aAX<0gpgfzW|=N^qpQT(?pY&7x3tUyJ%{LK_9KI| z(KhBDMO%Ve$vsfNqzip!4$(IOwJ^_Uks32H^#IiLY7UVV$S7}C{c2Cbajw9Gino+pTA=qf)k@2$L!`F26>1$;g)g0nP zSvXvPHBF!KCyd~5+4lLmZPY$VMOHmlSrp*pRFvDKOIr~m)1*|e>J8u?4+~vw+m=6` zjv?iysJ1bzEEe_AYq+FazcKqlzq6Zajj3P2)n3^;Z{gU-nObsjNi=QBMr z_}YtQt@a-h98`Qw3g(p;#jg|>JF6}L4KKkc!ed>!$hRrqsTrg3nM3?&v_bWH4ly{W z_9R82re`##o2a%G<^em@F!k4^1=7EidgD)$@EG=?IRq^bXFd%dsSps)9J^aG=`yYN zGe`=_fFhC8)0)$`#7$ITIzv;2O>vjF1)Mxf&+CKJ_oR2C1_vl}h!&a-K8@Bo*_S%( z*8SLXUP(b=pZ5Jahj6ztg0tJ^5ax{f(!x>y>rsv>nkrIsAEnc!GYw+Z%8FcQ2pXz? ztjZpHo6(^L6)2_)q5$q}!*@nAykVvO4vp zeTD)VA4XhI=V2nAGDlGpJ1f-0EuD>fItfI*5lw9Ap|H>894b9m6V3iCMGIY%IjuYb1mb@q*+1f;}e4uSGaA+95Z1NY$#b>{N0Tn;c9`gP}>;nqXJU3Vkn zd*W3jB}Se25h?{^!TN(40_Fvq(?X{+s||BY;3G{syGlYk&melS4h25icjPygZC`A?Z5x z;8EGJCKdIQW|w%(heY;;CHV?WnAQV6_HcTcxZ0foU~^YiioVCWJ?fZ4wDZ(II9n3F zvX@#7`jK^4{2BFk;ItJ*a|qCdrA+r@$Lf?E?N+Ad3@Qa*L7?!z>=>;#+4yE!A#nqqs)?_AluYzzyp5V_ zBB}Az?cSB8B}Pxx=WvXeIYg8bfB?BBYgSdF4RSeLggajX+u^<*dPtQD%Pzs!Rr^68 zJqIErPpvG^Nu_+?s)y{obdMobj!XizZv&Q!Mc0QD(xgj&(eWa+U^d$qRPZIElPbzD z%eCfEo27qb!!89%Z!(AY!#Zc)dtTY(!LiQMyU=B3 zVyV<`6YiN=%`)-t14MX@++k20<68ADtQH5YI~%DQsq|HJM*U=zOLj!gA&k&@b`y0N zW=5r$q-^%G^pe-U)R2YNg3(X%@S@`9?W6E?(0CJ3nB)lCWs>3n?t-Pnn^xSG7M>D^ zs?MlfqNnMxZ}Tq5dGRS zAb>2)f^Tx}GnqB56<>#gMGAv&GHv=+(Q=R)&4ASBhyr;c+|b7c_vS$3-Ci!J>w8Ix zUrFjO<`7MSUxxY(Brqa=M69R->!lU(bX1rdcK*UUuNY|M7o%5toZ z|4}7L?fxd#;`hd1vXqDYT>SDYrE`dme(H`}Pb{KFZ&|8}RP}7qBY0)mRVrs+d5mgl~|EWt3hS5zR0=_VZ7~(~8 zLA<1CQp-zjzHmC^-PVwYop$n%d)9ud>F6BdD?DE}$)+GDh&u}YTxC_O4R~XA0k?Rn zd2p0BIpaBrEg2>z`RqbQg30JY_xk?io{MO`Om`jSS<2Z=((M2XXh(gR@2tjTgxhl1 zmx@-29&3NL;s?wj9!UYgn$Q{7OYhZz6`3~`nfJ1D@NQa))f|HCIJM(kdBe3>(1V0I zL`0KVG3fz4J8q-Xc0=!7Zp~tnO}%_gS|+`r ze1miD)o%lmZ=?n03T2tCp6y41!wFawRru7N=*188)z^&tWV5Xc^zqCA{g$!j-l-u; zH9dIHe-=Hgu@m$> zHXS!}M21lFDXV`mhg-085_1kw)cc6FtvKrd>POz8ZQqr3$MUPew0L%cH2tzdntVMj z;mD1FaeHyN>W65RpUd%hIEV95*`(uiBBM}4_c*O&fk?+ew`&?h1q9iIt3Jo(?Fj0_ zRzLo%>K9{~3dAJ-I^9T?){CSf%a$mM-^gQ8eeV{jy`cc&w1tj1hqz6zKySBn8>E6J5sEKA*QMi*c%rg-F^m{wm{0eFItoPG)dw%ro z6pfenq^Kq3LbQ2Yq`iPGtg#9BlXdkx;AvUe?uO6j5ZRPl!Uhq3eSmq#sP)MX#Z_gN z^38)jxNrm;y!qfE=hNO}N_E54$je5@JDakolCdcnm>5}p4*-4sU<;h}sK56ub|NN< zqs8cJ^||Fe0hy6+A%3B~2oMB!Pnc<5ZZwJ|)9seQYaRjGg&v%tUGM0U+EE|f!KJ$E zQlLkRRJ``u7K_=LIfOHVPN!EGX$r2A$_h^8|AQ3_qiDF)FxHOkoZjDgUNmbf1G zfl53p{YWROV}GeQgRjx{seN2rn7m;G#eIW4oWZOs0)iqp>2?&dI9S_=s* z@E2Gzi*~KJohb?vmqwh)Iu1;HxmgAiyz_x)_p?>*68LqTa@_x$hVt?Vk!0_0k|~## zBj2)vTB~P0q>JLiChaU*^oLUkCY8g?VfOgqfP>UC1OndumMUqpRnu2`Ju7C7Hqf;YJqEc_DJhHtwcCcIw zJqrldYj0$aH>#Wu#RaBeDD3BQZ1JRhX|BH9!Ei2Y5$<^rjzJp30f$8rfAfa>ee z2rs;Nv(MSGUTea83i-Hj)P-R2{b~pAu}*GY=Ze*T2n>cQPkLrN9{Z8O;b^xU1ddQy zd&D)O!d^hp-xyaUE9MaY#IKDDln7Z3SyNGEC++yBY9_NWXvv-ExNs60tSDb)5+!l@ zH-qZlk1QS@=rEi^g#M_%CHj@m)2Aj>`FKp4-OY1-L{)VcVZ&2Yhk1}Do?3F_<^#`4 zS~`C!ir=-HZM3Us44Swj*5{9#?;%a(`ReJT+*+E=#9p1dHz4;Y*@lQyPA0`Fa3dr|4hL`k4bBIMTBR)5xbtW$9mhLm# z4n{bJ!PD)gIxLoOb8iX!UF$9wGHIPd&=vMA;dqrhD-esCl>4NMRe*l`#p-ud_Fq5U zgSwvn7e3sJs&nZ`*t8}opYjfBA?FkYyD?@nL!QHdyoql`yMBf5Ydjaj`|;s$9-H)g z>11jeWBe0*J4i#X|0p@UW0v@^Cwk>Yl03jzLA!ZCC{IRBY+5(Ki!S6NtzO3P`bI{R zd&}h-W@bAf@2{%ZYt(~5p@-qI*D+(G4YNi1Ks)g;yU?bFUZ>q-v|*+Z%@j3=bzc3s ziN~5YdTTLC+Bv{2yPZH%QkZlQu;zQcoy5OpLAG*x#|KaLox^-ZBZwSDo~F7u9Dx#u zHeiNzR7Ja){9e~k3kyIV!kiCD?&^z`BZ{Qc8;_zQYN}BoZ<49?3>H|hQ0=B!6&3^G zkDyp!t?hbqn(we7n>00L8F;#6#3wP8IhNiMssemk8!AKdN_v9ffS88Yl54+XnnT?U zHsH1Vlki*c8Kfc?)vNkdae3*Cyes#(bna3DG&okEe`4A+huG-7@gsV^Sgt^pA`{_Nu(eqxc$-1 zFt|@C-sM}OSO>jdW1N&et`tnLdTJKQ~N*Akwd)Dl9Ai6Un*~QNzMjGMLKfA-AU`k*6F<=-H(Pm zoOTzuSBIU+o2YTCSXO+3eUqOxk?r6viLrl`E@m^)m?io}Po$=-y3#LD-A-Or@Fp`H7Y=8DT*5x5UBS_M z+d{>C;BG@qqKdrX;$B`Ml`w2RhxqmMb0HYz@RWo< z97$Bo&@{U=Khq9&9`P#0rf$apI#5k#R3KwJVn@@(cnVdKB}aFZZ!mdm%`G|95ozq- zJ%3j&AH92t6c)47S&k!<{uX|DssBtVX}bp zJUW~IF#WZY=*nns#|)aFdlY%O+$^j>3q3Cs>C2*Hr}UKR;yP<=g3RCvb5+G3c1!!$ z*-MbkbBHMn{L`=s*#kFBxATlq#x6}v`T*cHKaLF6euOt*KAvSrWm6+=#RVT5jDq^@ z&k-@xBktO8=Gs?gm`;1;X8>>=0?)|k!{2Vp(xig5 zWCc)0ELG^6Ad9#@hX7OF_};O1B#|fYbRKeQ1}vDK3>m9%cg={;`oNxG<2l3?58yrVq`rJ$VgBo}9HsE}1$`yf;wLmJu& zuXX}?Wne8CaIsUxe7G<=&e7)i$J5_xuPfo4UAh$gtt%+yh>LF9OgwZ>6b50(5}(z0&T*`*A6lTOnP z@kzSWwkGoTsb@~-VY?Q$u!U3=@HWmVT`gEDo%`kxi?L}?acA?s+{SG=f`@h5T{?Z1 zk^{j~ufktlp-nD)8PWwf4$9=OTY!jIr!#Mqmxk)BdP~C?3+=8qM5R|NZ$0&9%fGQCx=59 zu88z$VK>nbzn(33NkGXZ@AMH(Oi!Sx(l1=*FfoiVLzY1j`>!8srr0^6~b6{uah zivu0X$Nl{hBn_6l&aTDv0}G^K{`Ry9*Bj|~7QZ9OFzt8F(v2jpQYt0dTIT$;Bh#*L z7S+Dn+5c5}c!~7A{*gq4!U4-=Ik#(<121WTue*eI=(mVQa{?!Gn?{KaMBw1<#RtZL zSZ4vB+!pQdElsnTCU&6dQUx?6#+h1C<4coVXKoW$Pp{TM9j(6fI;PN6v5Lux8mrjI z?gD=0dBeelVu`OnOZ6oEPLbjt=BU12y3T}hHu;W2z;XBbfRoRr|9DOoV1Xfr5=oI- zGbS>M0Z28s^Qo0lGPj|;TWRG|pjpph>)gyO4$z}sZ1NvGVo;{H^U|V}Ex{^Wm26Ud zih+{bKwO2wM*+Q67>KFBgl;*1R!rk!>Pf@5Ycj7;@b0j5sbLZ?s%-uAiZlIdwEhIj z=+k+H$G_coWbt%h9YRkVWeJ>BeCL`r5C`^}D(qs)qoN#UUQ(a>hYiB%bBO){5mKKz z_H&FedgNnVz`JJQk+b;muNVy*xPGd-c6)J2Pk2VdL6}q!JDcS0&J2jWI?$&edOuej zQc+kB1ApmOT6b0C**~$$I0h9^qxt6Ey|wt67&tY`L%h?|!&FI9-bqMr0n{Rw84K^Y z$Ke_s2|(*4ot5&%PZh-`%sf%G0dm|2x}hZmy`kc%>L zLu;b(3^t-((0n;1^*;L?aQIBDuG|`EW(0n}2P6-501GECC&jBikIkLkr9Kn(>MfJ* zclfjl7eg>H@MZ>-xWGbjs-uoDna7=a%;q4er-dt3C_`R2G+P0lme z<9U0Yrmup}AEHFvNVI8DZQ8_VQ3g7;gfCI};3I`o!+bzqWb^ZxUl2Yp%s=zDAuB&! zpmJB*Hc##tC|8k2>vt1=m)t6aiu5MwXPez-H8#iIG{1S%k&k44 zlmvQpmW}pyyY;YL6NE1*_b+;2>`;G;>o5j>4r$?OrH^aIEF9M{RhSwA1-7HvH>W|Q zSxtqCG_{hewGn6b({%a{R6EUli?E;9mI7At6R1JG@l)A0=L3Dsxv!(@zZnRVMM_ZD zMrR%wnS`u!?HALvTMwb8K6SwMPhqck2jQKcCrI5QYHy&+xr!KT8!|WqZH2+4~011f8VDYn9uH z`Q9_Tu{K1<=d7I_-t>Adhr?)9%+N6KNLAsu5oxG+_`Sd4r6Xnzaia=CctlmD>Zl)I0{PC>IfWefZ28Qz#P0(G+Wv-(YdSvi4sB2Kr=*o9LoZL~2bjD_j3-p{`lcFl zYIUgoDQ*TziBhKkDHPrBRv)jT>@{s@EQOlJyH}N|LEiYtsj`Pq@hX~C!voW3Q=5*m z!P`@|t$>7^_M6&v06!4tG=nP_`06QobK&q1)FeXA$j^QOkqu^N>gXUapjd%ktG?!! z+1#Wpc8|xacr1P9Klr+oEFBOqM!XC1s>;J*Vk9dU2$7dA`Fg&1xi9VxH}E{~b$s4b zi^60hSR*7fGuQf;Cbj*wfKQkw4Kpa?FkAOpp5P=T46K~Jj< z9{gFS_3D4CHIveeP{U)BXjCwBo-IU%wo7m}NSxM;zVhL+Zrgkiy&Df=QTx`*4N4wpL?)#pQ4-@vJivez!p{JGHlSaAQ z2D)K8#4FU~NXHx^I?{bs$Kh)C0_y@Ttj^2zB|VrJvXtm93M8n$;l0LpjM!*P=Cu5P$- zfEisjG%zp#H0YE3u11phAA@D$J=Y(*AIVM14Z(Evd@TuF(&-&{vsgdGF7}D068ybr zLn=%7fG6*LaRKRuC|V&bjR$%R-~vSwlG1sol9|N{*RQT@WK*A1U3mFs-1kWxgGGlM z=X2y^DmieD9LE{y@y#%F#vGbmw`VVxg^@^^?7&*jS7+iM9f=;}^;KJEZM$~|t-7x~(%`ZL-3<7XRBn#5w-_LFPsTQ`5shPj=-E$#t+j}Sd3yfNhSAc1g1ZOy@4%235=0(||Kj}|)2FtnOezB* zvi=TCh!`l-HNNy7Iu~g)hY)MXGznGFcwbvepxi?Bj|2Ppn0dd&T0_|Lq@RsxDub?% z-Qh_pO1B@VJZu8;0TPt0rT)UGge>!k0JP*=R7d(NNLfYCv~~O0ZKccD9m3(VSf0m@ zL;B1)#C~L8@~Bxtz-Ai!S6Uh#z7F4AVt)u!Z%5R^YNpF3>h@7liQagmGv0S&xNbW} zEHUfJBCl*kjgp4aq7OFuLN!s$jrrZj=2yGFA+m2D95{WpC3j8cm$WIrnM6;SnNq5J zdp^Bg0hUftxy$qP%^kUa2S}a5L?j$olk4k3tGJ_yxtLH6fMjf}ibAaEG&lVd{+o%E zd-I~S>jrh{kVqPl(H9;bnvl>!F>zNE&6HFQ}S}DKq`}{>zc&&B7Y&R(u{Q}4VzRp z``d`tKN#MTx92;93Gyh}trTnPBW#t&=AHJ@{&mP*nknGyNK4;6Qkn0?;Bax=Xp1pD zQE~Mn5KlfBBaN`<pN5}Vyx^#?w|yCbq)BIIlomK~$P)5wCP_=AF< zDI5H}#v^KjdX)sNqXJjKVmgoH6J7Ds1kB%~l?k0~GxD)ivjMM;;+B+p02pahs1n zCw&(i8_e<7S6f{CyYDtu1&Z=ildNm7?WE78HR!CfE~wSU(mSQJ?zLN>z7`k-`c`k_ zB+S#k$Ymc_*zksk-lUrMxq7MD>4Z+p?WF#p>`_@7YNDU)TUH> zP?joUauoP)V)EhxjWV>(Z&YXs?#SKHu=lhCWxLA$=qx6*PkQFXmVJViRiptBHG>TB#3O2kuWWI*Kn*1lp+O0Uf7v#McEBFxlEsiD zMoiF*^<_;V2*?ZYokP6n{AX-TE!PmzIJpAhWsM)VIw=9bGsqw1srUFb zGgI%@KloVh!5&`wq%%jkcZSkJkp}abTxJcOjs&_8jWd*@-KDqpHt2#IOT-dsq-f_f zGFTfc{?b5iOUNz?y_3Q8U=o~+<9YDQ_A%9P8bx=@lxFJ9*GW6ktV_X_*qwsdRXI5%{UU0d z+vM(zsXePqKxypa7La#?LR^B^$3a!(o&&jZyDcqV?fgLAw%}+vR~Ea!40KyyFVGV~ zD2l;Hj!g;qN1zVCuY_h*`SD?%-2sFu{%G-#{)vGSqe%nHFA`5vwcM^Cj9{t>cl74d zH;B#f?y}*0-JQJ|$dpP6)Y3}bueg+@gl4rG@9*>OvNn9{zFuoal8il%2D>hh)9SN% zy%_^FOt2SbRUxXc1+0^QHb;_d+%Vci_vuHi>LYK2e>vy{{jxvUD#DYcf!gz0GclXV z0qPdP$0EGkA?)QF;Xso$G^q~0eH%S&-q56SXM|)N37d}9_yF|VN>*IBaNb#8Eb3nx zZ<0NvqFm%fF}WO|kBN8VR`>U;q+o!ISRC(5L|@iq_edP$!@jEFYrfgHACSGAU`L!a zz4bNVX~6VTRcpzs)gE*skIgN7o6l+wbuzgN$CD|t5!!YbM8*eCzCnNY(dS;Xn&^cPD%xp3B2xVc%^H_RcPzPXh> zFdFJBM)w4W(f-nKM+Q(NPiRAX(nT)eWm4#w14-$}*AM^~ZnrI*2v_9hzD^2P@svjt zAZct<(U|^bBDw#Cav!xn!QTqxEw^rYI)#I35)BZAmV)Di;C#!b`zhl$DkY!-wmSbg zAgC9;WD1J=?2OjODnWGQE;j{;y!&+UNvr50cgH8do&}9P_3?xx)q_pkqkoZ6l036= zuGTwBkuC(9j|qDEECzojy_*94#<`*Ny6fagF4_N zl|Z+$f9=U!6@`fadru$T!3V4Ug0Ck>AEZ~UP+}|M%gqCQ=var?T@)9s6!K0A92jG8 zT=fP0X-6rkWn6Yh*& z1hiUTRRewaA;bNNcIP#Ga1|y4Q?2K2(~{KFz1+b|b?6cX2L!5uJJk<@Tgt^4%#~_G zBC9A}1Yf&h)p{uK&8toBEd8x>CK28Hy%U5^jPZ+f;BNQPUA=rTuMA<(pz^zWaC}G zp&%R=AGaZTAByfoQeHv!6tkJjgIG^ZR+VxgxooU0@EUW9SKg|qz~^bfHp?v~po*1c zOZC=5Q#+E|e5`g$*EP?N*FnGy6c=SlZ6+ECka z3KsBPu8sEt!cDY*i<+GU%JzeBy$M_S_-2Khr4L+195&oeUwP-xO${VFC#+Jc_Bssa z7XwB$Q*~6Z=g;#Dv3`T=_~1w4w0f-tj8c1@(r0-dSJBjX`K%YkjvDvrQo7eJvEzIK zBRu`U_)I3LFTETP+ff8BkvQvMbrwz2)sg5P)T(iHDu)`;c{#;uZ2mO`P|cmfBlp<1 zc#xN_t=f14)Ig5uC1&dhS$U=kht+qtw~R-bIkq`~s)p!9=-)p?lq%p%CpE;Ep3;16 zhI-p%6%W^g{d>d;_gO7@B6Iok42%+&RzU@um$Rxt{1Xhn^{z$gxb1|Sseb96W9Ciu zX5j~)yRO*qiR&kA2fLy_LVOyKi7AxRAi9XDht75R{P-B+$0`erBeTYV>Mk{OPuS;t zZIrj$dJYj@`)aUE$Y=ul$ z=be@KTO+1g+fE>g^v0D?3xI`K;k+fYNc=7IQQ&kMFt=Y1K&5Y;(3RkFODDu{b>_WBw;@sfStL0?zEnhe_QT`YV@+e2Y&r~%RN+E`5syD zr;<@feyH@jj6XEtU2}-G>Qib0Bo|hBaE4mVE|eLT04V`#D<>sGEsa!nG{5MFQwlKT zyRuoG#shr#KLy_$dAO^qUcT2Z0=)2w>D@lXF)bV#yj!(19;|MXfw5mzel2$*QT-zQ zcUfvY1q$xdBlX{1a&o*!!H2CX)1`%gJ+}L_FATkrLn6n~phtBxTC-5!v*O`zv7aQl z_iR}m3jg$Vs|GhWH2ypZ z0{oUq!ksDFrq#9yY9EXDr2a1xj~yvH-0ONl*jP!mf7PT2RzSPod({WEXoG}r(f)w+ zLhTLDZ_w~o&$H}6jkIujcF z8|<87+IY8}Iol35`;0#)~Kkl+i!J_cIu{}{d9lJT~9U9g&u0tF}$g-G~hf+KAbV)LT1%*nTw~- z8j^ zJgcUc?MAh@;O@Yk^?4mnYbCDl@t0=umifN(b;RQ?#Qe@2iaji3gCb|N`6K@xbT?Fj z_BmYAJtDO6_P)ogZ-ZZFaG&Gf;5raL2QN+`R|bfF$?g6Kdo!*TkTd+cAfr0uq;SvL@3!ZK|p} zXZ_UXMGYjq`2g7V&@QZ^$|P0he*#*z_{nH=v?(>(?BYnaS!%$0i0sV=&LbbLo9*3> zx}DRw0LHsI4d6CrmO_%=9tCI@(e{pZ=_aGZ+>(=g9YHT+L85~AH{RHT(i!i4UG{ZZ=&~~3ECZ0DOnJ2#4*eH^t)-kAt{&vNcOm$v8u4RxfN>TRbP`hmcfg? zGPg_~XcZEDjMJOV_U$te4@95&1X?4t)Kd2V~pT&uqEKJ+d`?(NL4 z3!4V?;^3Le{uWt{56>suHE_VK(x*{x*)+;d9gE9erXv6vz_f}I3g2TBDRB=7w8VoT zc^Iq6e&O#c-&$ZSY#ue3ou)tXoxSngFeyFszF!NiTAUBIh-Gj_$*m@0n{L-bshG)~ z9s}>L4)gW9P@%OzP3N@!vDv`I+`i*e>LPwTd>uFt%9Hc<=`GWNapcUGBWF|JXFa#^ zVgJJ&7bf!0XsN!GFwZg}9S#K4_}y?__VT78VIqMl;*19n^ z@Ke6eaNeMgTwoNYI{sAau5lHB;40cdO-8zP(oB_X20N7BZJ*rO9WEN{==KZP^a2yC z^?GfSOTt+vo`c$!>0sbwX%&G1f#K@`f#agjq>K7;3d?bjekXKqkKgfPMqRBIY+`WY z^nv|Zl*5jfK?Ee^4fM88jSY;ACmR3WR{Vt7SeXAUaFi{i-AJt&_T@t?M!vD2wZDw& zZ(`iKN6f6KFQimucICK>mDNuy%%T3_!8ybZ%66Z6kW5N={bM7GA2B*TKFwCm*FoJA zi)%Y7GNfnpKL$Wevb1w2Ecf2MTehPtvY3 zV41}--9foE1GGYcrO2D=+B)c0LHQu7QP2UsOwkjwl<48hB}Nf;hZ6#SOVG8T_r0U$ zzJ>)!37~#)osEpFK-U+%eyX*OUfM4Zp@zVgaID;^7)ZWi$?A$g!c*z@SxWbsUjRio zJ?Wjlr93=h^MQ+Dp1AaFua@Fs&Sev}^-yZn9NrYcA= z%+!I{lNG??{ZSbmv9o%U)K5(93-HbN3#~(iXaj-&>PC(YH^1#(tvXGr(chT>As!Oz)G9DC{;bCfPYrhv-H=rb3PiI8xmHFT zU~Ne*MP-6AhCeBwDZOe2KwSeN%z@leiT!v>3*aAuy9=K zGb#&a8)8D6y6puruxHb`;NUSGF_4JKJ6V&o<}8;*XKt9E!(j6KCQ?9=m9EDdbI}2{ zojXmo6jD?zEgeaX1<`?Kty5CTJCIBj$yF|-nqHBxc9qfSt`|N+;unE3!V>}w9BCTi znD5JXGwZI9wWcJ9Cbo)&=IKpXY!VKH8VpA6b$!|O(e2k~^2eDG87fr1f;Tm6IbUC) zg;RI7{FTg&QJ?}*{cj!$*Tq!EdP)XfN%UFzZ;B%+Hwo+j(Mj$u@EMV)DMbwLyT(CP zDoETWL&4rCe@|2tqZ-)XZxaeQO-sSgbR1?hgX>q+NG{U^eE32Pl&{wuvOXgzxOdav zAWe1D?;F>D$03{la$~@XR#gfMYqSnzk}eg=41`(+^&IcB?MG}r@YXJS!Vs8BMWZ_y z6NYcz;^k#CErrNo9a+_#P0v+^oI@u_GDBMtoc zWb=@`yFcczKV@SsD|M$fG5jlKulO$4mws4N_2`=%yz0Tt3+BM_Ty*C8WKj^ZovJBrU@&S(!78NSh2)vRp{zd6RgJF2g~ zBer)WB=h?!tW_qtpq1Rp7e|f30u_gvY%gJvuuA~7RigUFit0rNG7i$r$IPp&B>}*x z8_jZ5cT`6++^gr$k^z^i%1f}=;-~neYg_%Pm@FI9zIs?+S3U9W(Lnp~%s->S!O*XI zsf3CVH2i9-J_GC@fo48=D+#~oDL(U|0i>i#3{!ZZd1<4HVnzO45E~3m+tA@7AQ`gL zAFAB$)*jcx-$>B%i#VfTMItGNfl}M}3!1J~F}!%p z_HZNH{#H?UzJhqTRkjSaf4Lur9W^2QG6-%{(@sWEv^7b7O_4*~1`o8H%x;U#>~96> zz$uOvEuEYf@+zLEq5n`dw_;A-$$BH#QG-hCU70$CumzN1Y|B(C=EgZh$m&p(WE2)Z z_Rn{D-gFS8@g(P*$`@Cg$N#S7GMQLDkmy-cV;wMQ)!D3PEc?xVX5ItBVa=qY?kY3Cu1C=JtRu_hbOZIJ{G^+T&T$rs zN_Ytl8tD1O`+=@@Gn6%tM+|Z2R9i1d1TrI({`J{Uk}Vmk$`MP+a7u6c1lHphU%+)p z$KmTfb-onz(Q^G`ok*An4Y8cTxdyPsdhPWO^CVc668$rQ4i-Y!y7y2=foZ7uPsi|n zLe*?QHY+1z#}o8obd z^5}?%c*KW?tKqWPwe{6p;8?`N&aL!@iK?P-y4E*#97x}zDcVq<&b$E!?Jm{hwiNB= zG7S=Tn$IMD>73AXX5Sd=okRHY-d<_l{V2EI=NG|v%xGn-eW$%NG)u{~r~w>f4spS| zOt)jB>-%2e1ekC3aASnAiAhVwPmU`0uJNi^RR6RB3RwnV3w!fI43H?+lO4t2cnnId ztisN3r2Uc2#nQ5I)3$x)DTmf;%rXW21>`O+=QZfEN%tv2c1Oo(PC1U;^f)p%$>z7V zDkV+XaunME^GqzXK?6-rbw`sDEKq%X5XNCUMbW>V_5ikf@uAY1WEDQJh!zu9Feq=&pKKJoDmb&A zDe%1upP?*HXE7Hv#sF2U3mb^qBLZ124f74=ZqQHSvs%YZw!rpuh{4x>$>Ry;u`bak z_Icl6HFpy9|1<=gvFtSxh9AWMh&f3yYlBZDkxGNPY9tT{ZC-GIsSbH!{ko*b`Qm}Z z_|k#wLqa1aMDJg(Tq(}e3(;@)yztn_wFe8ksq`rLZnU$^+OQifWnX2K3%*ekBuR|* zm#gZxowZQs_i>}#akKX!hK<8l<@tZfT%6m~M68(_cNTa>_lxea^j=S}__x7j z+-JTPV`eAb$HZ8Dgv4h1p<@R;GHrYSm9UOH=0XyAsd%i(iLGl{>vkup42mP!Q`GY$ z8a^yI3O~E&8KwHnGcrq?Ax;q*BNe&Nu|SYnOaVe@yJ^G171w|OZ_lo=C)(qOjTl=J zZDk6*qe%$PKS2-R%+mh9Qe8)-pNL)YAg;norsEb^*P@1j#}aGqk`6Dx`}S)`2yF_S zIj_L9zcJSMSV>-0xwJjw^NLAXMr$f4;E7Y0UKzg;sxossL5CVyMbS?DknFqR9{?z! zcW3muiAO6&?X|nLksgTOvxn6twwB1(OIX~5$yud_G6Xuw>`RS#Ii@=OG3YjcyD|4` z@2RuLmQA0|0Y?DId@YLaks2TOjnm9t9O1Q1woGO!FH%3?wt^OyrjoAbuo>-tGI@BEu}akxBDq?SjUq3EXk8|sF*^GvX>xwOe2?)-Yp7})HWB3*6{}&9SL>+4zEOMomne^k*AF48pD?W z==cjPQ<{{Sfs_VoaUuEvurwTs$_$yeYNz?XMYgbcwv?GifQI_Xx(gJcD>S8+!cA#d z*rp-@{(8=&9D&`94w|dLSQ=rm;@v%WnnX3xYM1&HZNvQK1#n0AFElimJL3a!J8hQ6 z-4Ud1BV7YpB0Y<5J~AH!17M~J7!MG+*X}FYiCNfW!0=^Kq$WY6+fTl>J0y1*D*VS2 zRfWRO@IFr-bn4OJmNp&z1DedM8rl+g&OXEdBVs(th`(1prfUOb!SB27mC^MkW0DkOW@?$QhVW#u)^{vHFTb}+IgD-jeLO% zv{8S|Mna|&z-Lg!)3n8jtWk5>oVzjX=GdI?vSr!X5y}Jb8;7qJyOW`KsO3GM_W!oL z%rK=*HC=h8`iTc$nwtC~THajqVe!;e_d23LoKU$Nk~kR+jv^YPfy{?2ubS`v)ZFLu zcxyS!U<=4oP$PRb?YZx2JTfb|Ty?Bx!1V2#{TyVKp$rj<{n+x?1=O)*R}qJUR$^g@ z{sT>SKe}}R6FK)TOb_#s zziS3;q-Ie)b$)95m;Y_~aRtOe{7rAFV$tW+2iRkpIwyc1{t1N~y=B82`uo zu&?V#&pyrj`{C;s0D<;A1RvCCIwGh1@2Nl=8g_`|pi2iQ`%=q!$o!qcjS54%I?iw>0ppnv7p%I7vY43Qv%Lp7SsN4vL zFcYnxb#8QNA^f~pH)RO-w^LD904Nmw1Gu1TlKKB_$xSW*`$WOtsOz3dBj^P}ztn3V z<%AbGc-PZRo~GiP(HVcl2&E>kKG4j$(w4O5TcM}Et<42}X^_m#r~bQ%Jt32z%%PS5 z+C0Zx6sf6{-&q5WwX(PuA?aF&!PEvE>r-U(QflsCa#15UJ=4W3t^O6fGjU2?S*34m z*pJ@x9V3((Whp5OcN$m9c#sG_De_Q5v@5Dqw`)B75$Mlnu;xGZDSdv6uc)FWa3VZn zxN@0o_iIXO8l|5$C>11Bh zLg29b_~Fl5R+)w6cWPJmJjYr;a6GC1N8gZ8sn!F-G`y=yDsqH*k)=y_RI>cRhAi{VQTgs;y)h9K%|{(O<)A>eJ7mBn%;nz{wNFil@2hNv$)u>yJYj zu*-KU4|kuL3TGQ33OqCrr-rGZxze;D2(Eq;#xDrKtX~B1TTT5C$_sT=k3mk>;`~m` zKdS@VZV+#st^xa};Evxz#200w2~#1LJBNfGCP-;x{*kA=szvaIzW4P{ew-Ysg(>z`g-aL`k)p&P1aS3HH(++E}h>#ErF_(018JtMeT2b7V}Xr*{*;Vj(0hNyP~Ps#6lF=+E? zF%d^%Mu0y#M1f^UB9LzJ} zs-TmGKsq4(GHTSY4I#Ni*)QA|dR=&fu*5g3AcH?Wv7u&`JoIqFXTqnX1sfJjd!YoR z${f|Fri%M#ccPA)hnjwYjw46Ng-YefIsYI`O;nP2eS@7Uh|Xvg*}odW?<`ytd9Lz5uEj{}!83Ty+e-H6-KXT#5dH`5OAx z?-LBf(ZlD5Ul@0e8sdSMhC-)Qj3BoC;Z|B&yMhbw-ZN*iSCP-qHfD*b~M`6>PtD zVuG&}&&)HyzV9qQs|NLC3OW|4LXOSLTiQMqSSCDbg@DIR1r#e+SW68&TBXFEjTupl z6AX!mt?8x$a}mhwX;1=1pe%4Q#_%!(+1k=lyMwOOx2q9$sd8Ak=01? zuYMs;7z?;OrDSClO)iH{rJYw9yUh`hF>KgKXXG&MB*8kP9?@w}WD*-)&!cPruWn=xp2BV*oP6>&e|IK11m@Xw9$X5zmAw zpxHWzzd)Hu)qM$+K4{8pF$<{NzvCZjWrO!l16s{QGkQPcWJw`) z;{e^K+IR9YwgJ3_v-SZ2PKwBSAAJ-s$(@;;$fi18v#Vk2X ztynBnm>3SDD>I?x$DV8E=NDiN<_?0p@^%E+>@@%Ji9+t}$-YMZP_y4C0d}|EEF@0` z${(bq?Z639OrM^fInCLT-wKvDHCpPEQO4MUY<&ryJ34#?K9;5z!YAQN=Q((ymDX|_ z<+3)SalT=hZt+6-AsuVJo0WiPwzZq7dM_c3Yo!z1{P7=SFRvglBOpHB7H_6}$#12t z{46p?4lm=d*s_E^Lh6as8A0bCOc<*{qh&%*&fl!m&y5scy1mpt71|$IHh{F^p%cxH zYsSRk8F|VT`GQ}oI|4x>QR0BU4OpjpS{yzM;Urq;;F7p3@;>Hy9uzSHI^3j`qb zYE}xY{B{~*t#knsPd;Q;{H0Svel&iyxdwuwzLZ%ya;6i6qCRcI%KLz)lM=6eWQn=` zB<$d4fK566?$2rk`Yk=O{|JBeRZ=HWl1VGk`^ zN`?mb3Y+r*%*r!AJ^;4$64-qaMxzr=Q_#H4?voXEdmI+TAT*A|BC#HM*oJ68TTwu9 zNAsKyEn`L>d%gf#j9>rBwOO7He&Ps4Usw9j>gQWqJu`2`R{<;6g~#Ajro8}Hw;J90 zJ|m~9)Qj~HY_W1&)O02(1UNZf07YA)0pPr7v>lXodBcm8R*i3Jwh>Ra0@^wLO-+(A zlHkjI#>pxR6U>Qc6?t*QBms9qO|N}#e$JLuW+9j*z+6&*#((G?vp3YK@QrLFuVQA` zYx2z(v6Sk2@cwyFH%%>Z7GOT@X$jEFLk5i5Kg2HgpLG8j(#6pRy1@n*Br1Alr%YCx zZiLJCgmu&U;-AOXfRbkEMd+hyJ50H^P7>rCEn&a<0Y)N+l8eJKlg7|cr1 z*qE!pfrh{b7{j8dC70W8);eo#CVM32vL^GjA8^6NA!VH0oW_Dt+Qjn5nAg6~loQnL zKNMdzU+mnyf-Erl92k4Tn2k&?ox7i+wWI?DNkPz~hNKMfr%_Qe`YTbk+T*5gv3-9+ z4}mia2IA5b!z%DjNTCv1Gx^_b6aB5iN8NzJ(NZuZn3;i@LD}(;Tu4$fCwpi4Ye%Bf zy~&r}q!HIbFT^7bkkgZ0Dj_)Vl_Zk;K0^yZvW5;?8ZkMw29yW9*W)!CqM`7^ ztZ$Bb>BR@vjZ6I5ef~#y0qHo+89+~nv5$n1rDeUKYUFboJeebt3IVmDve_<chG!GA4epR%tax?I7Idk zu#zn_z5GZyWn28n4dd5`m>gT0SN05|)r%xOpadWh&-Wi`n(%YtvRls6j{*F_6=lls8w)cTdPWtGPrP*Oc5{n}_A{ z4G3&wMISSisi|t*yJ*3C+bzgIS*&<9m(PVnZ0Evk?%!iRM_av&#krMLpLNc%70P(mvheb?G|quLq%_VwX!JN!i8pI!ev7{&(oeCj5RUx^0I? z;**!90RupteO_3{;s}e|`W8v`pSqaA9Ru?Bh?W0sd0%vSrS84nGn#bN^Am83fo3FZ z?Y#DU{-mAMqD)Dt0M^1g+Tx;PhUF)Mo$V`CsFa0Yx`+EZfqrIxz`MP!3@>}}2iU$+ zq2w_>BJ~mxK68Zu|D$zZ<#2TJfZDN01aMHcfaj6?fsVrg*4f#E{p?lx8`vG(qMx|9 z`rA66h|kR*f@3XdP4hQLQ#h*6 zMIw$ddUAOgLMK8L+1_QD*;i`f&MTP}YOUY{QfHlUujt&vY4clok74i8UbR2GGB42_ z^Tu!erPWX}Qv=KXF739zIfEAl>wj# zMb;vqSNYwiudxx)&JnL|wAUy#T2RmZ1RR1f3xA$ne2+_dl%(8K4DVeabQ%(FWfhoq z15co=8}2)rkx?G3p^lzK!L=6wf~Iq8_;MiVpzykIfV|6$TK|*2quu{waL!6wRKp_) zbKnT{bthe#Gh-;A*h9F`>(IwvQM5TARz~$Q!-lrB4uqt*7_=%zRVN4cxPLnki-)DS zG&VH0`kCqyaiCV+o}xsO8UJnB>-2fo?UGb%V;u!)^~yALMywa}0byw{2wQ0a0S`R$3m*H3x?a^`)sO zK{7Y3o%YHH8a zk^Sk@f=^1d->t=(9x6(L}pcQTW|LT$*Z5)B6wGHv1rrH`K4zR$>@d|(i~P98euQUoK}hc+p;xoPaCU^ zzpG{OGfy(}nq@o_H*_2jV#%<&lB<8XxLLoAM@W39zKlI1(Pk1~k2tM$<0@wJ=`-0U zxQ)?kmwL&?2CqC|;_o>GG`SA6Um9UgAX_gUU3>>R_8YEhRPCWkP0=)H-y7)kpln>- zsGshys`KaVeo6lHbvl6&a0_+6lo5vXbj`u!nLRJy{_%8Y*SM_|H$m?kF~f#?;>D@< z_zS^LY-7J(-1*;@e5P*h${6x%K0 z_jI<4w;r)bBvmWaqtp6}Y6S-UT1mqgbgYoUw(b0D88k~^t{B3kK7yPz67yd{W{48S z#xe7g#s9tOsC(6o(i{RFq0If$ol1|cQV_c5c2?V*GfJBF{jomt`b5Z#M6eFD&K^g$ zTi&aynHIzro!1H$?NpD=U)piZ zcJK3xiz$nqO~SDy(bl$uNxW6$p#l6wwVaZ=vu!AH<%>Z7^Qk2hx0^XE>;JY8qH|CD zmHmb^Rl3f|tvP+)#OeZY*$-UfUckhZ)4LlQX~sF>?fCz&FlyT~qe^q}HK%j?$%jmbSvqFUJk&%De}kCQ9R=;K*=W0?7eL**Lydlx)zOzh z870-J8u4&#&qEk2CBsXy)7EJ9?YQj)3!W7C8s_d3-XH#nPbGOoo>-cW1EPfWnEt}` zon?hIWovxR$+NmPQMRq)j*Ee;TLDjLxF(si8RRs_S0ahVol&jE6Gh7}m6W(?UfhC( z@Cm4Dh;Em=yDtMUg^L4ME{4}?YAoG*S(AF1Zf-l6l>q25lMDCqj~r9!WT+ygbh=o- z;g?s~<`}o_eAGy+at3+d2IL*!r);U!^Nqu6^$X8MJVEp3T?OZvct+Dl5x8zEO$qR* z-X-e62l~LLDQByJ8_uVa2p(v#PU0oy*-e+*g-&p6^1X=%!j-obS#*Av!8AR9$3?WL zNqZh7#_N42yCnEt@S1D7P+r1nn_`R#i0w=;6Es(aMQ9e7J_EpF$bfOx<0khO)r`yi zK{(Gf%GS0Vm+jrf8I`SCn!gBno&3C-h}+()WE;2?kz+S})|s5?K8^0a0yUMYBI%)-*gUf7-5FAZ*E8&88CNZL#pqFJYc zKjh-E7$@MP)@fOST_l~wAQPT%jenopM_Mn=wE5qqJkUu~7>N!VoZzl9kYEd|I{ zo@aiYb7tO`Tj?~oA(GUN6dAX!Ox(MjX1=@G^T&aEN09K~6)M2~yHsY|lXx6f4{u5{ zU+dgxSwv*O{)bBbrF>7I9SXt)JmPzABDZmv&!z%BQoBMn>UIsXtoPr3S@1;vj>c2E z5lBqnz?V!gLiI%Bt&|g$i6#b#jx_Ox%opcu{~^&7ZT247)pxKJR$TiR(HX{_;Sc4F z8lbYC%7IA5z3s^4RyevZ|Le?#gzsL95lE1x*9ZBumf} z6k1sL^#IDFvE25Vf6Q~n_E~DNyI&%fk(ZxjVra{hVHsL7ci|)T$lnGY4d^MP4`*%e z$6jw5%b8=?L%1)MrauAQNT(?c@?82J+L+e;IiV)>(n6k4739pSA9KB z5g!i}hzBNyMJ6sT{;Y3#|L9stzqDXI-H5hTs*7nL_KMj4uQ9>5Mg`X{JzB86aH8|6 zO*Vew-evk|o>v@Bp`$egyde-!hw=iU0TM}H zsi32e2t_#Adj4Zd?0_${SVd z@)@B4or}ElW@()aRD>}~r){UqgSMHdw&z)K=An&T#C#qTi7N>#A2U@i^=J@5Ag#or zR19PQAS>}82rh6AbjiM0;PR z*fbUnu+AE(PQb29{zRIVKwzfm7HK*-KlThGHVLzMsJRs!;{=7zQwq@D&DWNH5QkZ# zoiUoWYY?>QBG-wah6U>^r~rOPKALu;@&(b3tglQ>_*4`Z5Sjs&6B!=Y z^>cU?yA|*-eqd1~gQQ`~_O5mTVIymx&Zm?3)7_JW!8|KnP?Fl54?6XXSpo><_fMyW zzAa_Cj2g1RKcod93*ghESA+J!<_NO;5dA{32lOBuw7UE2N&!b}jws;PnE=SJblfH0 z`{c|?Q`3XHS7r86)i%;pJ03b?2U(df!zga;JEF$4RNjm>~If&j!3RMj@~+rRAh+WAf?s} zGjb=<*-)^0x^ydyGfhwz~G%E|Q4@to{rnV1pVdkyjT_Hx7*DKKZ&r&}t zZIgkAzl%yTT}1c{fb-+mc<&($z;|kbn`Kh%TQec#n?uG`>#*|x%L`dYeERgfiPZt$ z__M(ex0;V>FpVwEX~ep@U{0%Tu^2q`%`4>O+5y|$GA8u3&8q+%9Df4`SULn zNCh_gEabFDOu~!Ixn=>`5dim%Ou(Pd?nFG#m0?rxHuByjPfDlEH~Evg#Lr=%9Wkaf zeBG(Qdbqn6XSSjF256&Kge4rE7t^OiO$ZGP0D#|{zEP!tdkrC`?;VabU!>}))vlQ&L@|GVZR$;EmbLII z=XSwfa{%a5e<2N1HIEcHz4&nz`|so%`!`KRyLEM`n)U?)w3}t!ckG`2D!3(iCs)>Y zbj18EKFhYv1bwV;1Nw|H6vaeN&JKgOrQrvda4CtJRwYP-Xr0{|=gS^)jiaMu$c@jh zD&FU^f{uve$xr=*psw+X8CwsMEh!Q{eUCPSS)4;Ik!y@6&E-Cln9j?pNMSz#|8@T# zfX5kbpO^s0^;?^=KyhLv`TBr{2O=Abq@hu{n3&;Mw;P^8>;|O*_^G|Vvn-dTkeerb)%R_8Bi;epJFpLS zjWDl+^xqg${nGrL$))K2!V6X<8p_HT0KUzXkq(O9t(*=dsaEp zSp6i=>#ODHG63-V#~CX{+(yXh^LA11)DW_XYKN+=Oq{c~niuY>v~&a}DmWR1=}x9X#2Gb1TW zhN@Wd?TY@?-HSJA;{N{IF z7|w~DP`=GWv37p=_Bp)XkuN&_SAr?}mh$hXGo3rnT9fpYSZ! z{-;Fqy-uL>N4@tn`eo@IVED3Xj?-lR)y_O;i#QMym5+*kb5>3T0AHdCnE9cr1_;RV z&OuzMdC*QFo^#RVSn-wT_`F|Jdx{FymK#58uE{8))fYOOFB(ca%3oKEOm6#wYh^V& z%q{P{&b4?a)kk5zTJKhT(sX!3?eyT0z{VzhFU<83@Qh>91~E1Wmx0 z1AH?XY=)ZoH!xhoS7qGVW9Pm9d^NnKnmh#U+>i0`I#3Zm3vqr@dFo;y*aC z*l&2=H8agGWAcm4$bI2A+P*P?oA;k@lu6g(D;xO^cUo5;zo$OEXGRr8EzuK{#HNKyRSYJ|D>CgE*4=QZ=xl)?--_6`NN2jcN)uzTyO{O@x1%PNYmJUgw#>XXW zeM)slP!=b8BLcc%KMZOD%MLQ4qxJFD;WItIoiD-rbbUCwe%LL3=i&0J+*LhPo|<|@ z@ASM}=_ixk@4C=o!L;H!D`b>O-a#D1#B7&vQXF+jw}_|)r!A~mwRS}k$rg?+XdiLR5mk1~q!f{hIW6scLH7w04F6R> z%DpXnXC97Zdv8}?KE4046UlsO%dX{}2Z$Rj zG5ze=a`+GzC)Rnn35^cUO+Y_=F_*;OLj%Y3!7@w0Ka+(g1jpfDU36oiB1LqRi8*SN71J_@kdAw=3(@D8lQ&ivp% z4(Pok(k3h2anhZ&u$2Il=RcGIR%EclDlHD^O1B4muDj?q!b~}!ALVCxJvzXX4iqWKy~+qL*6j2xuUucJGbX|5A9_9 zHF$CF_TlnfYZh}K%Q0u!9GfC`EtZ#ET#!RY=P}d{Z{jqRWTRu^)e24tqF{+DX0)}T zqLix(%kiR+#)b{gb1vQ5p^cX4zcm0fIX^UG%_mHx$hJ};g>&1uW9J> zt5L`9{N!HGGJIJ6Xt$ZR|AvF*C8f%@zv5ocV{><=V#ESaLILojr=~N1#*Gc2`cwXX zS8)r(n24Jp>tMw`|7q~vS8qOw{kD$~FB-7Fhu{Qv$@0T!TT5 z&p#kBM~TtDE-Y%LL;k8??xu&mT9%PbaQnMW$?||W@~iGM&ofX!eLzbVe&n(M`!2Ak zJXtke%r7A_@5^%4SW_jY>n$@|H9UfNp zRVJM%Qwz!3Tj@?uM)veN3Md+tjB9ipHK2jXLZWC;lb*WgWhEL%Kf~kau|3B zfI;oOLQ3ub2a?Lxv-JL|#m;todIxPg%T;RmL=ScE8nSsH?$u~rOjtoGy>i;wH2{Aw z#{F3TfHqUk%E^;*Z!F<0v;VsB)3*mNm6!j>5PtK#%2)?=@0X%;zWCyvVnpO#A=I*n zLkr%JzcaHTzh+#HXkl|BVxfQi23UupX*=)9JTg(=r1ud|nMdX(g=lZr(f{FM_YAr^ zq3xsD%|j_UlSf2a|jh;NAgaqG&kQ-MYL=>m$CO zO^_Ojs0U{oD_D{db?~v9R>gDwKb#=5WVIc?{fWRzKmG)#r!}7&77AI%-i#FB05$&C zGaC{KA;!7=o0;8KFecp*J)8R#r{68l3Dtm%wvevrS{n@mV}m1~vqiQEQnTY;Fa}8v zxLtWuk$=XnI)xgI87ZRr?l=MKF*r?U1X#I{zP=}t6&w}3sV>c`2GKp-l?nQk;q=>! zyxcDa1$_e1y?Ld)zyA#q08kf)qF7%I?g>QBX&r4g^&%}Ji96c6;ej2qv_c5l-aHqwZF!XCnM556@uueb$$TA3DA}x?_k!G` zp*tIA)_%_YWEjNrz44`&PhE8bW5h5~E4JU?tEgDpKJN4mwqY%IPD?ohmOPL!;`+;X z$g0b|9*JDkubF)_{RSV=t^98~ZVbK@jTEn8*2tcQ%Ha(O6xsR2{B=LUM{#x)L*TH% zkuNO-T%y+r&<(t@Y`rq7jpTcPyVJCtd3vrSmY!H2^}H6XuD*V0UN;i0R7U^W39>2v z+oF9du74TPIc!z|pephrMLKcr^z_m{`-6*z1~TX*r~{Sn5x?YZ*A>_pk&bSSi;u&_ zB?Z9mPH%!_U9V6ez8sH~CwPL8+;&N;; zA2}f&X1a>4_D|DvM)MV%|E&o8p}=E1M@mSayK>)f;4gPbY ztkidx|2f!@x=`8L!ZCtm`C#s3OL_JOttVUq9y!Ym&u}}|wOemFtf1Q*)+p_tI`%fR zRPBzHad<1%(h68uyK9^Ex)-zqp` zq`V0G1ui;jG+H?e=JUw_64$E%UlU;1L?6bOrA@FUm)^r9X2s`#@ik2#o_?`F=Sem0 zc{aT|8ZQ(yv1RK*5xAARQ`@%gZ_{>%pB*cc7u*Mi6$hu!Gf-ak+}4METG%!Tf>>^K ztT(0Y1t9vjP5{T&P#hLPpqh^q==sAbS~mg@0yO%};1g19F$r`I ze|t{E6k5{{XQ9<F z?u*_d%yUl?wwmfV@UsxzRJ+gA)7Z}jIXM>B8VA)NCy}OrTFr#(Ovit09fEUy7J+!T z-KI|^+6%_LuaF)2Ngc$)7%x;3%UYjR80o=4UX&DOaj_ng0v%@HP4Dyrd)9f|PGHEcobA8i_)XYt0lPITgKQdBNhs9t3=4g=3nmsN77vR#m-b=b}Y^W;nCWIRim&f{YauP{q>V&=hTo=pgk4F3O zHk*>p;f55=viULqWgIez{cmPl9rtd_U?$LQSmv*V8GG?IrkkT$C2NB`HsC9pZv<$h zfkIcvRC9B%&#)f)E4{en_gvaRe}CNVYW;;V!@v*C!U37vdz*bmfNELqwSQ*gpneW8 zKj_dwG9RRZUf?v`a|rr$@^)B`*DUSCIAJKvO#;6h^%(tem%&LWEcG?U%Vqm}}r@D8GN8*oo$X?QLk%VSi;lKo##&B?^Ab3s=!P)CrnLkIwx%;>%R>uL%I zH3;*Qc1S7>kPuWAQ%JEJ_LOfkKxK6zPz)plD?o^<6tLOz1n7p}n9$4189WJ(;oFjx z$-1iY@yex`9(8C;^XSC#%!>w`I!bvmJ|`=yUO5u`3uU0~x!&_Zo|uy)ry@nNyB$`B zy&L5I`~c(eldYcCL;5`hKs@#l7#LH(H~e9(Z%pcY8g}XT zGrEDmjA{PNXq_VXrMRR?NX`Rvudkp*2r3dML5=>cti-HDyq+-%Ksxn=);E!9;SKkM zD_OY;b7@lU^G*Xgq)i}V)1ugSw6@giJ|S78_EA$Vm@4A7HPm%Lfs{_w?zEm7UNE-< zR&sRxBF7kiHVWJVq5S0)%NRH9nCZH#?Rnl4WQqKme$Fen`IE$KkUF}wln3Wpv)y_8 z=*~@v!4F0ZsB9vF71AFT5@-n}O6g>K0})jSE1trHVM$p19Ax8NBbop_!r75Z17&C; zUGBMup${YJaSR{I#Hu+K%%1(Uzp4)gR^0&psFA2GA6;hy4FCe~|r7*B9(*N3*vCb2?qZVj*5(Q%|s z$8iPi!bgrt!gN@x{==J|x39m6T=<$ktPGj72YVsoE_``&6! za$sCO2$FqKATqdimG-zX!w5eB@TYP=Kr9uM#)J-Vs81VysO$;{BXK}YLIs0)!N2S} z2<|=3RWmsi-!>GnFQ(fXG+T`WhxIjs7ilm0znz>7t)4eRHbh|f#@h0nzH9%)VM$%A zK331dRzH-krx?C77gYjO9kaN+7V-gQ_XYv{ zjsZGIEdWDmO7IhJ*pF%`oph-O<}w7QXF7IwjoY67xLWNo+{xVY3h)LFg|V=Nw-^6^ z=*o)Ct5A7Y2=(zhcGJjyibMoSt=r!y_;$}2$Yy(3n^c{a=AUs;(7TkbQ{juu`3O_FXtYool=ZT~%Yf zIU(SKg_J&kQ}t&P2gv!^h;#J!Gd8HN|BMN4EAGKn|TCTUI?n_PTib9vjlaVQi3;D ziLwBzA@~Gy5qu_4@`l>V`52tdYf8mp`cECfg%q0_b6X%}X))ZaFc* z%>);AqQ2aHb`G*UrAH2JrgPV|7$e$yTfl=$2`x;H&XF%^zUfiF4aN%J2E33%p+w^4 zojj;4ra>-)G?br?kW(uiE9Ss8+$IGUpNc?TZmOBfvJ)`a#mQ(aAa`iC_4EimgD z?3(|!#N|ogI$Q%16nyT>C=R<{GY{rB^nfvFrjNM|&v2+<4(cs^X(}!#+9wrDAndjd z@%|rjc%YGL_L&(pJQ}Fk`R9ovPor!x$?uqb1R;8R3_w+?lt|NU_5uv5VFvbj;i2o& zqXp&@%&lx=A`01tO!aqvnNB)5&-x5(;Y#482j6@Z+i6V)-$81A-M~coBL-5nV)o@} z!Fnb?_yKs-$psq9X_>PY-&C-kT~D{RrxPBJdN~^I`bF`!a%)?7Jf02kcx&~IS01vq z-n;hdRf4Oi60$g#2x5YUcwEc67@9_G$d~}Db}hLs;YsuWLCb?HeELX9zO!$#Kn@wm z9%g(HdcC%#5{KZDY`8w+9I}U4uv!%EBw) z^siu7$gaL3e-@=WUxgmmw0;b|@C9;nC2+ZyTLsfl_))YI( z1xixzS6qscWmJ>X=N#_l(B>cOPZBmRzEoPkV~bAoL18xYlatC<86X-SoRT%4kH!Y~ zfJxBT-4L^ym{z0jN~hvd9uB^?(sNQ-@7vlEFF1`)!|8FfwUwQ7ANLr|j&WLdzU}2k zasN?ODKfVJgpf3IAN9B21&$*9!FFa=#=^dquz*;(X_t6=WRN<5k4R)n72k8g!7Anq z;H?SJ`DX&-ZgLG6tyee)P)L+m2PoYEx(yES3qVW(h9-;3N>?jJaUvQy-|{jr0&W=0 zu5;C3wgSkov|v2Irs=^gN0(um&dmAQj3#h6TrJWlA)bl1FNG|vfXrP=MI0E6JC-Mu z8VsLtMIMg1h@W9#f>)bd zE;h&-SpB2lp?0HSAfi?oqekQ4z>vIN0K)J-8s)H7u(1MLN~{2If{HH_rkm3;?0caNLyjgTzEqT%sOT0V7@{&gkn0RoDua z0+d5yE}-y+6c_4CpfXv0i87hAJF2w>f)o7xcjH2VWLbONk)2> zT2u?%5y!tk2DcfMMm3}BIZQ7mvS;>9v?>}n_ovDAvy16@7-M$5VDIl5&YZn4*h(2a zte_11Io24lTTgj@QS$ql*QJ?F1-Ocr(;-TrmF4DG11sV5>lkRD(Csc0de<=%Yg~R z-0;&OXI%j|+G3$;1h>uX?c5D`)iRvs~duM;`JcXZ)5}vFbErT zPAz$LS=6bTXP#7Qo$>I#xAaCd=EzV7^|_iX@9jSM7fSnSzp?QSE(h#$2yKQMaW`-0 zwg3^wM$Y)Tp7Pp_1kTLI5vcCtk?=T<4gYJ9a#Y%zp71eTcl$1uQMH&4LGbDJjk&SL-P26|J@4-tLZ+#wT{UT{Z)N%HvfKU zap^~R=aoDLkdJw721`{ahWt*u-ATS8?;o~*kfz0FSx+9w#{#-5 z1v~Q0s))dY1jjV!~GRay?35?fcfUx z57@?p6O;)sHW|bTdGCKHUfg=KKFCG`(FFt>GHUFK;u^}Ss2THF|Bo>ry0*P^W~OL~ za2==u9g32`+lVT~F}}z9Jl6x?nL0sy*@bA;1X%1CXpKH_R0Z|v>{K{WOy8g>m7ok` zGO-%{Xoh|lX<_wqpU+Ds5AlP;2H(*k1xy3!pJm4a zvy5KQ(#!!5JwRY|q~nrpDAS21m=y$pp9hPqYMDjhlGmYl}1f zBNkp>aGe)C75BkunSZ^d$Mnk-gSP{(>AN}z_dy!h2{i}Pbst!uOlin}#)cP%sH0{O zlz2$WcxiAm`3`M;;{iT{z>STiB(oF;^>7~W^UQ8eQ)O9uh>BW{QZ;6!8SCwX!mE zWy+=*r70;QQ#mB4Y%67Hih_WE$kaT8XAwE=cl-NepHJ&!$n!k+bKlo>eNTb_v_Pse zAsQjTfFUgF+B^LZA!%R)>J;7~n!J%cdkJoz&&u`kemz^(A*t~O)~5`GMV38_gx*~# zKgo1zb5<=U{cDKoUJ5uDf1dfo{d^uayTmN= zHZQfOpmc}+XCuT#U`#h=AXL@?OWkPpSf(Q;ik=GHHFXzKe^hj)GvYOjjTwtXMHbCvN1qP$XX~w#D1uJo>-!LL{ z{09{Qk7=(e9s&XNT4|nYOXs4^vk~)d;RJ^E868M%9oCdkC~09USJ~}!!=ZfADU*kViS(da z?;4+njW{f*Z!<5Cdd?o>l;X*8ISd12@xQ-UGJ}0V#M{JI(ULiBD)5!>M*Ihz{Re13Q%d?U`*xNiTHm~9q_E+3!VPGQ5ipst z3*wxC(vn;Z7O-%@WG9#?n?@)~3MD4@_rP8{SZ=>Uv+G^UYQVw6sc*g-n=&$a*+Y<; zsys*nI-wG{<_y-u0r2!acnC2%;L}`K+*BZCy^yBAi)3lr%j$wPsLw$~J{Xb83wKlOX z=6=AgOJ2nQf<1xb#y7u-p43h1WJ=!>e75BdIB)mi+2jh+`c`iC=_ALpZgno7mqe`7 zx0wPsa6rALy5Dwgg^gOrN(P7HG&k&*XP=Z(CZ#ox>JE;4#F1lCi&G+vrq4)6#&nu)po zmRrY4s_Ft%wiHTtV;hlOfc*}8g2Vw4j$~zWfVt^yn8KwLN>2uoNCX195?lsR8+OJI zoh@5YxYfQ$Du^fGXjXw3C$)Zg#ppmCH$=ST?1nsXX^jN8#2&b%UUrrDyqRl>T2(QM zv6gQrhgyDpI{leG;oCOLTjT$DEGDql!#0--;R|ZTw$Y3y&I=uaAM%_WvuI%-9{Y*S zwM(1tlhr0E1UFfieP6WhHG;}L>YT?-*UrSf8Mr!PepjxE8GYU?vlNJa=2YA!Z^`0*R|NS zAtd@MbnN7l4_^Fjv3WYV*buuHjAE7B3%zMf+W?t>qoE__V+|r)@k|rT`5^*qVzOb4R2pJ zz#?~>JkYx}S>>;7**CL{dtZ%;=D`9&>5XQmtIK2dujaK7xM-n(=Xo(PC1|1+pZO7Z zAdLbOA%j6-7Je2XJF%@vfp#l(FD0WEjc6V3;(4XXeQ}Qmn}$tuW$8+AYvr*3WZ#I; zi@E6$m0UTz|3a{vn9}yorqZIxrJ1->v4FVWX#`y)ccJGU*|3O{6yX(-T zE3;HB;#<-ZG9LB*U*i$3Unxc62w7z?-E}9ieI+MVd?|L1s>QYr4Q*qkGg$2}F~B3G zCk#Zt7C6mzji1In2a~-|PqbZ~eD$FQADOSoq{M=qq^L{2z!&Vb7xbHpU*~w$JRTP8 zmvXbcKaP4c!W&%q+tu3JXg;o`U}~uzgO2^Q80(Wu9RbHC?+(v7_OpQ8iMLaO9*{n{ zkLZ}r&7NJ~3;Xk*O?IR|UoW^6W@FJwz*i$5AI>Vg7%l;UWfccBl*5AVcGgixhJp1=#GKu5v*~ZaiW0@>JHMS62MqasDRPVAt?F7Fra zl$Cp3=V6J`iWg8_# zteMO6XYH7of8Xp>z%ZCMaM*$gDTi>Dhwmn!fp!n|F3gGc0b36~u7;`20VczKcP7v<+`Fq_Cvm*lcmkK2Z^| z=6Chh(!|ozJHo>S#n0XYo6|QCHiA<_IMTPW`U@rXwX8~{&ZMHBjY7`BSqm*5hZL?f zqi`kgta>VLHsT{2?|lN$!qxM~dc_*xra{L*HiLlKCZ-2Vj0IESz(b%wy;-rin@~!w zCRDDb@cX@oq>s1dyelp`@IBgrwPGA+bf3HZrnw(`BGA(_5E1g5nQY!>-U`0sH?!|Y zNSs@};;P_;hFKqsT3;MxzAM&Ju7F~c>>*pwzCABYNPXs2%E4t3mD!}&tQRJ;eaPYt z6>`{*RDaCMuG?;#e#xD6vF2H*!#*^lxjAxXjTsq9XZGLUc?wpr|NdPvH0?!F*;N{_ zum~~itbCvgbPD;CUSNMbqKV(=gsD`>b-dZ^u+yIAC!cA4hC{S{0PG<Nrp%mS&K0-5Eg;f=4aXyKKe%QOmbT+q3=Ue#X6wpXkn6z@iA8mitQl zEZZ+>QlYpa&2{?lKbtTULQPH^Zntw8fibv>KuFqoV6u4@+&^jnEv`yFIHijyy`h0a zD5iB%P2?wsrFTWgkOt&xt`}e%o2ksHYvjP%8Tj76#V4vpj3EB8F~tZkPDq#?+5(h7 zjM^kwr68oymVHZTIh_Lf&U17E*Kg1wPfB69bWI z&0aC0ZM)S`NBq^jAy_Nm`5%s1#e^(7p_1I)An^(BK#P{TaW9~3%N(dr@_%M5U#yA32?il9?H!OjF-JfMMcG$@)Xy8QNPivcw~`i zy`iB54_~3gVMlb;$(J1k5ZUedQr(;XQsTj{P_X;WcbB@v8sG+kYW$mF8IB0AdCc}; zl~l7!bp46MLD+OJ>xBBFX$1i|_H6>#!0?IbfugT=GzI0k_bX@z)ISe8QK9!cwo z9aZLH!0=ff2PIEbc+tnx1!=L)bEL5@VDs7As}pbNyBSvl?T(|(&k|xu<6`sYq{@iR z1-bY*%Pp+80K8|fa^n+pM}tp{pFA0+M+M=GqW|h1w^=FcnVwY{xKxw1>#tjlQ}YGa zD<6aCNANHMy#?^yMLOUp!jEG%HU9=K3Zy|};1Y?Bl~6sTLPpuaR+Q`wr)LmacQI_F zcjSY;-q%oM=osnei!+&Z?7}K!TXlo9bq@fD$J1qs4{zgRg+XHH`sDfJ@mEs7u>5@w z92GVDWVcm9-7x9x9>VDUt&K<;<#D%M z>c8asc^PORR*Ed&`nA5hWE7cO+K%u#JX(JZ)0KNx#Hw+1xVSO~h)OwrucaX40!dJE zL8S{&xbC+=J~(xaT>E%K&hw578<*ZWEF4KV$>uMv_{lSk{W|-!FmP)+8~S(oQeWTy zy(S7ppP=HCwi&`1ro2AbSf2!?$wg^HSYu!?(3W^D$uGI2$gF!c(}gK(A%%RukC2B32AGE{$l5#)O=(5w#rAZIcLQ2-p*R(2lg>Mp;#;iii5d0ou&?k^cO`Np&d#ac;K3umn_1fnrK)hb5O$VS2J&ZyUt|tF` z((>dm_|Fl_fzk!j{w0Q0C>_|KV#T ze|kvb3GBAlZ%tH)&AW#c1vEr)`p;R<$I?FXVf_NkTx&~7SGX_T*nJ2}GqEIi+3Y6P z)c&*S{wTwIk0j*GUaVAjFRhB_fydvy5EdK>pb0Rck6}e>u4i+^M{yC}o&4nq*wG8g zpkIn!ypZd+Y`$Q(41%Mn*%%xXq5RI}uyI=(!uSRFPN~w`&Z;Td+ZSD(-!R8CWLp$) z+gGh} zxZWJj(EiIzHc$T)M5(txG}Cl1o7C{^$f<2(8cvqcMD7 zPxy%&!+ha-4vh?+uBA8~d324qxqYt9(* znJGju5P}fpIDlU(rocY)++4aOwmhE6f0K>RM*omJ2L`R+SDgLrUKQg6Ls>)7?`TOa zkuR0GlgT!jH51AWU@Tgtt3EgcUKgP$clWK1xm_+r27mAnF5}CS-Yy=nvOAiQ(!d{^ zWg#d{(UNMm<;%C_S(2Ihg)yjsbTl-EP_{Gxgw&_} z$}PKR--X4#Q-qvlEe}O~+47@ebZP!eE5t=$WBY(+7ia|L^!-ijmS)??D~RG`(%9qx z5Xa>ZS^Vs59O(I?!2*=2!X@*N4=N@V*p~p6t$X+A$v_$3C#7wl*{WdTxT1H$mBpcG zv6d1F3m6B2CinLkC!hLx2+qO&Dx&S+yHCuNuL^)7WZKQ?!lc&L*5+>IDDZpi8*L7` zrA=vYF)ivE@iP4B9FmN|N_7Z+j^e$Q;c^W>PxRX~FUieiePAX7jxfCL8z!sO=%n;7 zuUA2ax0$&l3S7;*j7!I3scB$j26d(A&fsc?h7bkCz`(9+Lp9@DKjV9hsu_LQPv0>+ z^D8gjljc=kQKS74a;%{DJf_w794kElZvAIU2Mr0kpB2qy7^>MAq&hA!}#r6Bk` zB!SyeYr~e=zxLvfODk>~p~1rvgoYf5$;PE(bV61%SYuQLEpcS*?YINKgs=Ncz34X4 zf@e`dXgWzJr7vTqL59L$L0}OW2>kGpsm+| z3x$dotf&rEHH))5=r>~o<}#^I&tcoJD=WZMizVI_R;1W@7npcua(u^ZDJ#?HONa&- z%e(u!&hDA6#}wx(Zh%}P3Uz^@mWM&%mv!OpA69b=;X5wWHnWS`&HD-ZP2W!N|nwHuv`C(&0;ri5WTFyBkyB8I5}bd~!BaNQVYrsYuTWrE>$Z za|$sS?!H%NQPO-i(ETSMGwSZ|%@`UaN86C8YFD!ev^21h6TG{NVw~z`;9C#ot<%~_#kNpM4VBGko&)(YgVT_yEW&U69+I^8F(5a8C1 zA6fm^2x2=H(=)C%T!p3p1cXYIGNvktAvgojpef{$`o_oD}C(TFORYfbb z)9>qqDIdWKGjAAkwRrwj*6$HxTDA?$~0endk%AD5G+X&Q$=LO_IBIgGs)+GC5jHn_}@82e$;_{$Rdc8BLLt-k5ox z+S3nm{rRD(EaxLUn^F${3J+Kd#nIp?FBP{csyr1l@c+1N%4Cf>muDq0ZFoYHL z$AH~wK)=>ef&IIBisOM&I?oCr05^mme-6#RIW?~ngAOI4^LZ-6dEUC3r8YRIVR2xS z{1(h!sIYO%uc5)zV|Pm$42NEN}`8{I9nl`G4SPe!HbW!?Bf?M&cvz=ZptITupBY+)e{mB$c|e z@p<<_=a!gFubM}GrOlL*Qk}$U2*(8r*XlO zuj`&1sAr}XoT-YsXSDLT-({HSAWD7dmJ&dgKrOD{rPZSiDHIUBF(}i1m!QdXqkuum z?;c@8kHbA4ptDJokQVj3xG$Ew)Bs-jDg`7RdVg8;4Ufs;+RJTGi_;0SMS6heWlQTV z5(h~SMef2M6Z*M!J7?BCMIcCVF-dhFsC4&zv%m!go1EOw^h*+|=G7i>9P^OJ%XC{j+~CQ<~PNlP=+ zukWK?h5Dw<`+&9kHLos*b>GEhu0czuL+2VS@y-YiO^hK(#J7O z>k^^WloKhIC`-Ux#o|ybpr1E0G-S#<2>^)^!-R)3bG-te);)>*B_jex46Z2V;4&@o zN76Ap*9f1z=He(fg*tDlYhivcCC-LaafXzOkFPS{8z!)I8bY%%33$nFX^P_px`j)e zWueW@-N@N148uMciXGwK=bXwaOq#O0m_WN%)Ck7`&Z~f8_KsM5oUqeD*5gjR!&I*h z1r9x|h?t+4C(TY|Zh@Q*&4Q-wEh(hSbS=#o7jSlxHz2t4(}uljxu&6A_EPf>fNb-y z$)#U`4q|DYl)!qD>x2oUu;z_l7!O688B`NNc9bw`ZTm+KL%E;1_<>eOd`;|h0Yw$* zROJb?ZtMzE!){-~#;l2hT<3zSxsm;JsQxR;L`a?6^-5t?4925tDpL1UjU0rh>0XJo zzX(i3B8y7eT04UL&}Mg@VIBl${X%#_`0f7MLX z;v2Bd7&|($W5GTWX>)L9QcH;i)=VbY>|Ev1aV|D$MV?pqIP%0*PC-i;m=|4E05?>$ z4j3i@PHq&T$h^%$InqS6tT52TukHhKQR%%afO>jRY?}{+ zW+iKPof)4iX33=QjF92YE_1*0=wA9a9gJm6-8a}Xrhsv$UDSR1nv5~Ev8TY4*Hgtu znGe({2rSjjiu(_eAV&*?>=>YgA%T~c<00=CC|Q9pEh5lU`6V#wBg!nl20jzUH$=y% zhU@~BP}Z2Xa;~ZH$VH2-@N528Hz#!SV#`PH#P3l_YD^1gkiR~l0hJrryKpv$EqSQDRi`8le z*ag`@Pj|K281bu_j(#4EnvT5ZXNdX8orAhreSR@aib+j?^ze1PEM0rXB4%XBbM{z@QH}J>13L^RtZy|aW)gh&WTD~UX22J2L0+aV za0_y2%2aK+q_w%(2&`jLJT?XZc(#tLklk9Wm!q9>!S=|;WTZuV>fOT@*}no;@URRE)3+wZ+_3%Xaw%e>gWi+YA zYyM13DlMx!c;JMc)eYP==aq{6bG`lZfQCB-l=ZW@s6LZ_)o|7woH4gR2RMpB?Hw2$ z0{Glo^2?Udt)8j1zU}*8vN<;H5$Y?pegp8xgO2ns21-1(_7$XIJymVul9F}0Qq??c z$n3mZ)4r3jhBY)_75sUqqckU?il!vAU_%shY=j*R99h97=PoW(Q}b63q*X=VNR-Na zWg4oN6E-gl8z*U4(IJdZh`>Nk1{;AK1(*;lMD)@V3pk}=VjSWHu2%a9L8=;J0s2Rv zt|8IyGuJn#4!>IeN^5V-&RCj@@0~d#e&jmapuVn7dUPJ#~_$8s`gqo!)4@pii zgp;;pi7yVg1~!je1VQl#8pvh?v{U@=p@o=HS1F^;j>0ZHDAWA7yurinTQocE?|8Z( zyOH9GZopYFcBzDbI)(#`JlBq(KmK$qZl&*3%^qn-LrzsPuFkb&WacT*r(UeI#CyBX z^N}p#CU7gT>-v zu^tLIa7buN(3f|Tc^SYns=S-`EFoJ5sDgUiOBY{XcDks0=@B;exgxr^3XY(9Q@zFm zOg-Jct13kEbgpIdR`Mtf5-XiOCpjKRNJ#IfsG!EE^|moLb#~>@JyC<`9FFb?;L?_m zOMYVrRlYJ719BwwA+zV*>24qHrM-HQthEc|_*<=!6{ZWHi?fYx& z6ydddAv-;B6S4?y4kkVFNEqGw>jd}L*!|Yoc~CmxKCDUggxCdj=8I^htqY`ExYSRx zQ)?6o_-~V%-{E$^I1n`R+~Eb-4HIlMWN%(@UjrHYsFaFe6o?-&08Y%Hy)ZtJJ=#0z>N0T#?%lBI`n`4tARxlc*n^f8zaSIvQ6tOWJCR zug|KFie{HQSDEi?Ns}@KH{=U+`<_MCD*_#Rq5zl#JXB0AK{kUau>Im1G93DGK;7C? zam;)h1BDM%*1YK5^0|n51S1x<%vknI$^_Bm4sSbAGUPN84JOy0dG3OZYZ5Fl?-I4% zy|avQo4I!APrCa-iIGCrd31EWJfVA?a% z_1F5d5Mw(lIshdhc4~J!;D27!h3HK?D^7|F3U{@~JH33?tf{C3g9QAGS{`ad#tAJhSY-5#<9qm zu|qpCt4*bXj`l!vP?y@lSEYhC_$ircMS?`qnsC3>pWwvH}?Zp81R8b_6{=(wBgM2hlfPep$ zn+Rpkl&MG)7iCVi6bqq0jGZ)i`o-6Y8}w~PF2u@+Uo<@Qxd&+ z)$6SBLXl>z6gB0QPe53PW^10)L8UP8jA%Q}jTyY1gEM{WCyy?JYaSPHf1`G z-ktyX!m)75G7C{6vDD%CBf*&g9&}k8P5KzP)31Yb;A?O#dx0@eWJUyousACneNx9WG7KK$gjZ5Y%AEhp@ zf8l#t;U()asR4u_Pp)50WlhX2En6ttfO(*@`f8#m`1fJ!uqZj9*%JM0+DhHe!&wM8 z!p_r4Njt5$D%3>W>S8;uo?O|xC#oU}$|wS1y)W-_0xFwAAMIAbfg9HqehB4Tak0MQ z?LV7r^tnMBB4BA@CU;*W9;Kl{ zHIX&*W|uX9NKvI6LXihxW6zu0%=hb}i&dVGl9iY;!pKXq44$}X`zY_6YvCGby589> zS#Tki9rfki-zG^>%hQ(pAmf(7smV|gsSh{;D3c6Ps!LJkdmz6hqIFv%98g0q!{UAS ztc+nCl;Qo;J11+{c089Txt$$|!$IjE4_|bpUkltGkI{KnfkVSPB0SIt18VUH)ga}s z7#Jf=i<^N#@0g?Cew+UHeW+2PWB?4h38tlV?`E-WI{`WJUHzb^9W zY|NMa*PQ1pZ*n&(x=h%Wo~VJcUc)Y2ZX|Q_TXzHQ7vp8-dJ-m38@nX-^~5@BkCu0X zyC|ssexz;iO~g3X6X!qm@h*LgAQC}EKF>n8Lm#=+1>M4P0#>`yNYuGaGV`Qu|dKTukEJ|$oR2!6ZL ztq9U`6Kr`hFpNJAJhp(1^`{OlXD3bBq4$A_VqMg5IDPbCT9w0*|Nhj{0cw0&9c-+t z*nVX>J-GH!%a7Z~w-lA13vR{GLIwK^LRP$ClhWIQU+z|XxKYsh^*Ho{G^kUS6a2+V zoTc#V>bGB4r>PgmgTO8HW)B!b^h+CELV$3jp1!sk_p*UlR_Rr`Gw? z3fe_1Y*wMDcR_6YU$J(dZorV*14_?wWi-qiF{c2ONR<F z+Gz^a`;S_q{Pfpf48v6}Me!LBEaMNi-<8ozr;I&6exH6L(nh&9d~4^Ps+92bSx53c z^ON=r^JB|#)3^GYFOqUTEXsSIuFupd23VZime zJgL@cuz2lrHGt;8&Y?C0^mvwaMFaKDK7PPqu>6xk)4w%nRhpUJ1O9dMXPUV=Gp}Xz&+I%shB((e&o47ol(8QGj^#a^nHmL#eY`T50ety3r;a=PVgWJ7y?r`3dQvNU1t;z(G zQ-Xc~)KP3>gm-sO0_3I9-)3S!WiGdPeb94d+E;fEx>VSn`bb&)woPf?Cj${3>Nud# zy=rbuZm8F~M1VO6sKW%4JKGSTQ@E-o%{;g@epF~U%r<^mN6z%|Gq{53^{j|x{WCCC zX_x3F2%&zJJMoSrmQdje7Zm!^^YvhqpLi}02ACZM7o@*_*UD@HM)^?fkJQ}4z)#dQyc01FWF;&h6YQRcPChktGr`~oglXd z>|qEDs<9{l%aAi%+9lTkw_OJy!8L(7Pj;#yi#UmF1k>#{x^f4s-zA%6R8L1xptk2= zW)cD@$g$6Pwx>9K)82A0?f^Cl{y1;~qFjUZ;LNEcR7xknEKV?JbfA0m3N?9FsFi?g z6C|rf_bE52*d3YTL$#Dd2sb1@!nQahojy*HH;~3;+DkMt+^b=hN5foB03&4MeArOS zV?)D!uXzBU2BA>O*z+n%WL6Tm6jQuEczt|#v)biR2Jn-xfTqL zfni|)*SNPrW`G)^sBqUS)j|G8o@;CFFhy7t0)>6=n16a;YMDu7M^#5hcUkDe zCrZt@k31bfg%?{PZwXB({MKA5V}LskWV3i3g+(AU6!av?cy-5kFG&;uL=|+QDNh39 z6xv(7AvmY*a@rFqfAVhUwaJM!&ipgU6?Oy!B_Cp`DDqTd2L^*HzDKIwO6o_i1-LYP zXmD-m5awVDZ}(@=0?*;nv#_M`rDeLm?iGba+{ug!rvAD;AM)oEJO`Y|F;*xR9IjLX zIbb=+?IsB&YB_0quC!MqUAB!-Z)7>3!i7hCJ^o1S`IyaEgODc0EYNvvGq^dzm{2c( z=W$$tJFE=ghz7)*d57b>2zC-twzL`CVI5Uv_vi{AR8C$v>O$2Ps)q`%-F3`#WCS=m2dCTQ_MkgR%1lz5K4|P4e8fuA_QV zRT$6D>>&$_b9rC_Xn(jP0ReJNEO^r%dnW6!kub}6f2-`0yg8puK zY5Sjs4;9$P?@!w6mJykR7zy*FY%(27!kM$iIJ<_ly=hu*17Q7oY4cNlo;S zx<2`t>)PkGhTkvLyfoTdRMMV7?#qp1st0IewbD95ouYSUUVG9Wz0sfFdPm`r9y$^B z{aK8~VQ`iQAcrfJm1Zf3Qg~M-jNU{>NHt!M-gmMT{sGR?XYdG4raH+OBByyk&gLrr zlVRQS47`p3#{aMZ%~KINP!ZL<%T1@ozIA<(7Q8`V&rHZahKQm#HxU68fY z34i{SEqi(Az;FGsS2qG;T^|E+**q)>YzFh;bGR2Qr5z0?X@D{b(S(O@wX756kxf>)=d#V^u5)e!t8DwR1B-kzo{0b^HOe*_n)(Y5?9PiS5?50 zXx@A{3aMD|ejL779UZ6PD@aoy&k`=Gul*Bjf>1FbhyUv}ZgUNDDx9_OcVqJ=RRRZ? zd$(Oo&B!e;--K=OmSV^c% z_9~91#e#%Qil>p){kGtu!d)~Slj|D?)W0cmoQkt6KHCJc2S8LO<$Aa+2-O@mG#(d)- zKnqo$W&Ur&TFgE;DC0L2#v^A)C3rrh_Qxa`e-qH+sv}z$+RH6B(Mgq^I-q4&W8V{+ zouwu1cPnS%&3!sMk^9b!t4q@n|k$^nPhHyPdBx<^A}kEgWpNwM8Sy zYirScsVNgpyAKTl;#{A=5Cg%uhm_5pM<~_$v$1`vJYFzwU>Psv7M|_xU4HFgc?$x$ zJZYXG9KaF86D*yWV}e(UF=uoTN99Fv$E2yX;OLd)8OPXD*viPvrS;rJGZC3oQI#>b zI?oWcq%m+_?ynDM%3?>QVzaa2GHJ`RxGm^1?9GO%+=Rb-tdp1VRZ%Li{c?osE7glN zg%0C|lS*7+6gZM_ee?e%3Z{b>GK=fb-uBY^3?)5a^>mmyg+Df@0Xa5JOB%qhR2z0_O|{9tnCpbb6m9Yy zuollXH_`0~-V?pOZxb}WeS~5yCBA{wu{)S@kfKw6HZ0eII|`8vZJDKBaE*P8ORZGD zi+ol{G8c|*vmUOYp+_*Wz&O)$jAwtH9%7S7{8%&wB!o9!8|WP+4?o!)`#o$+8^*fA zT=BC6lESJ=z;|N463}=3d$V*x;L8LS2tbWS4WN5p8CZ`jW;1eAQ!vEMN2w5c#+th` zC{?!EZ@q^m@9$iQGQG6F=`%80X!Z4?!yLKN>L?-2QjzJ5J!z2iocr2HpvbLdN&pU# zjc%jH@McT_uM(2dd=M9#3@Vfj5?)y#M*IKIKR|)M zdt7%G{>RL{+x75y03Y$V|DRY+g|dc2(-Ug-1==0ck)_hi2y!0b7QlW4ZJ}a|{U9=n zIPWJVYo(k#Ra6PtvasQxPL3$=JCf4$5%24hqhkrJG zc#aZ)KJ2M}N2U!>pPD?HZo1|c`uT}6NUSR{@F`uDrmVWbv#66T8!=aO-Yz|E^+!A! zTYzwQY4eM2Jty)qNROVkki(%+h%+`wB9X8vsI?7SR&4g4Zk8Is4Dg3UB}R=k{1Vx| zUG(Ez%S$7;IUw{pf^TqD%R|hbk^kksQ%HISnJ-23Z&<>ABPIOCArOcGyJ|#6uQMmG zpjNH(ZMs`3C?!hx)+dbf@6UQW-uPB*_d2sIimA#5sG&{EyU4D{vY@~8xRHv3qcS5( zOOCR~Fd8kVFr^&SW>cIFlUFNBv2=k)A!?VPY=-pDk~6S&8qOu-LHZNo8%sg-B}4du zU99UqQ$Ezo6(=i4{@Ij2tZb;oCxw`oNS)6b+y2>f z*KJ7_%#$YwZNau^AWtb}naLqsnkCjMZ-lY&Rh3<+V$O{GV3Pr+r4P{(@)~ zqA}DKHeRa>Vg3u$C@Y_B`={B(6GV>bN-f=~>L!=yHq^E+GU?+bDgZbMFg^Cg>S z%dM9BowCgXyOs)fEi$DVel2NB@3dliSU6dGp6rP|pt5|Kb=HaTZ~cX!PvGjPXGTYR z{jw4HtG%UexnQr0S72u;uogeN79jF{aK#!7K}I=D(&r8nB~^-~O40J}NTs)&0Gbqg zT)}7|(se$6p952z3VqMMaXB*^)H)3AV#`d2cbvC7ez|f0&9kIFh{_# zOuRisbQwO_vKTmGE*$K|T^KY%_iPVdK(_rvV)`rxKXuoITFzEUa13_VjS-pc=H+;B zSgU|i0#uNITty9;F01%OotM2|;nc0x|4gd(&rX7Tpf-cGBc=w7Q!hL}%nds@w$%?4 za5QN7l-r{+%a!_aCE*)QD`Tw;wJpOK@^RkPMOS)t4+xV1oCE7gM6gM!E`+ASMounR zs~AJZ@X4JeBfRZ|#p2hpNYpgdco4XGU`>wDJ8t$$59*H~`45+%gGAbpIsBzHPz=Lq zwzqLky|}Wqrw_Sp%trv&&Q!w=B>OUdy-}HWRNNZGz<4Nz6j5yrG?|4+yWiFaW1c=! zg@$*QpwS7Sg!&&QKnJtZ6T8MbhmW(QCkE$)I?k?t(OzXhT>A5{e^*=>Rg8|LusnIb z%{EnLt1o_En>B>zCOuxQK7Eet*gyQ_jeqs7+z?2HmYVk=0J`Z(oV-(<{L3)fao*vO>I-WMN!efImL&QcJl{W`R5Qi0^m>6Lb93r8} z)2=>^f$srGF@I9}?1|`AV7?!#$%CwenX(mx{HF}xqOVdjG?qi%@#75VJmbw%>AtFa zZTq_BjQ*|esC5UtB|lW5e;TE@Dscv!Famp-j!`5^b4dBACuj(YCVt9Wg3*P5q@(I< zwm;L047evR6orLk6Jc=rZ*{`*MW009l+y#*>MC@eD3d>hJ)GN{mUBF2ug}#M8#V_> zpYaLtXiI)X`K!`26$uj)W#(u}%b?D)2Wr>7?q?T|xinA%2An}j7J-l2XbH}R>M>^) zdTzFjKa|V08$ysU1X?9ekL~z{1A6wUjB;su76lO8Vq8R`IxmgqkSecXLTW68`eSIWOu33KgTs z#_#_t!&Tji~>=iVx^9JIY&zX;@nK(OS*ZLA!W56b1!@Jlvsc%-xC zjV@rUHH;fyT2il2DY2oJGEhjUM#aNCjOXmE7sB`@xSAMn(BE1H)1m74!w7^@=Ch=p zTslsJM@9=ir3NnWZ@ab~h~bJ{G=&spDwM&c7)&%nOk4f1{wD{EYLDINTRbm}@6wy9 zfqAG4)+Ke`nqokvd-|$`Q2f#dG&9qiq>w-B255-G(GsS4N zMj@TeU177U=DH98uxV4|BCQij8zpFQgT~Bk5pIiXkt799oSH2QmvXl&iy#< zJGPrUIVWBv8zfD33aYP8$L!i?)7ZS*XK=SmLw2K-?kzwjC|N-lM!_e>wMsuU<;27Q zTa)T^wi{P>r^N|-sy1}WgzTqD z-QTgPS~C7e04JWJ{U%TJc9iU1^W`FKKv>!E4(|>fKVTx`@-A*8wiodJN-V^=Vf?|1 z<3E<(HLJ+OK?JIL*F4qe^;a9uK90#Z9t!9~eGHNG$6?H@T(G}+qS)ZwE%h$RTstFi zUcHV-)8J82psOqye?pW6Nn1Uy0tIMUO^x^9HYIp;AaSU-#W8ZcAm7bgC8Mcpdm_R~ z#fv8k&vnSwytf)5id&#^EP^&pn%%V&{ReQjx_bU}%wCJK%^pairt-mKfI0;SI%zM= zEDT~w+4fgvb*e92OVsOz0g{{@DaEs|&Kpy~il-_%7btw2XNTGg-Dk=oI6*Pvz5%dT zx!7?F-fqNbZGWbvtwmJ-moa|AMWdm^ga(J`HWBmOl@mpp#$13zyHG%i$aENPh0;+R zr9$6iq%@X?G){nIC(^XT1w}ignb!)g{*LRoNF{gfwf)nB2W zIN51vvrVrSDZd_Y&cKAVvZR1r1y7d^&oPsOdYkKFRPR?m0Kcmgx3i*fyhCE<)(s7U z{jd^Eg37IH1sp{1hvSjXLitK=kCR(1$Y+)*t*=RIcZHvS*s2a>lWC!u>+~}&yyL-Q zU#1ai2qvR-e8XzJ9VtI^pCgI|G?(};mu7U?aBDLX$;_=v1U>^}KoSV9un0bNqF^H{ zVU^uLMDS|Fh!b7m@j=FFC&niVI=!0CFxbnJCI|h@ZQv^jtCRb~_qaMbl^zvy;*NO7 zJ;2(`3@`ni{e<+^JIU#JC0mzx%5*1b-ZcOWe93ix`+ZC8+5?Wc$HU>S9Jlkx%|d{J_F z00E#G08HOqs}nY=a>T9e;+F-v9bw=z?F~lSz668A=@n4ZlLLBp5*Uh?gQdx!vV@`v zq1K=wb^8(6lfJOnuP@V~hZa3=qx6f+jj!WaRLF-ZYX7)N7Tr%|+)*yCKf6C>Q6B*c zCQ^6*#IGF`lX-XMNK$*Hv=Ydo4t@8*cdzb-un9%La_#x@NpJxH#KnM}RbKI)P4QbV z^OIpoG}3fNdN8PQlBVxvb01eHISK~bW+*VdRn(wTk-c?ed0$@v$xJKoR9AdK{L1IH zyV5@gYAT?Vuj}};$N=i5>tU`i*K29Diw8V&kMS+j_vx*kCFGt|)S0M}Pw$?0y>02img%=al=nckg38Z+W)x zYVkez5uQ(lf5anhW!1jR%y6d=Ll%t^=gr*yQetGKIgin$vs|oq)k0Smpl$DyfJUwS{BNRv&($t5*4QfJllFn5qZITu}fD>_g64kf6oz2n`MIW^HM^^=*%nzSMW@ix^CPoTcJZ! z*av(D~ay>gP(k2Z`Q2y3~~zfs}cKG=B5YTMp@Fp~DCJ=@k@tx}S;L z4>Btshg-uZ0n`&Y17o1O07(p7Bw|BH%t(j zG&4XjQ^XB9vow}gOraBAR_8q_4y+shk4I399=%Jv5a+Nm&7r{c)MJ0@A!0RHD(ENR*Z|6i{CsCPa-mA=UCGI^-NB~7XU(e;2fjy*;sSr0* zl9WB1fYC?i-A|8ZDchX4>4O!6>jF4zK40uA)(ZMZvW|gkyN4UlRGDaec5Q*g6B_S@ zi@DeIF06j_>o8-PWx6O-L?1mIf3~xc&w3Ivg|UY6Xju&BQY3rb|4MFZ$Km$t=2KI{ zgEIL+lPgN+L+z8QhOWI>RQoo7+#XjXzS88qaKYuTwhqn==$k&BB9E~b%8V3KAy#-Q zb>XUe81oLGhxdX|lBiIbHFLC&ZGoJqIcREdbB1s#zH*w{FaE%35`vN0Sot8aocj~D zavtEX_D~9*l$b6djZR6Pf$t2$;a368no|>FRMLyL-n3rmj7rPU)(0d*P%n85vun?4 z+y{vCPXnNaL{qgcE!q?8nufX^T)Fl=nHLR&5sP$fiXtE7bWJj&1~qZZDAnP~KxsvZ zbY&qt>ZCjJ8(U_<`;=Q_iNE0EP4_aH6}C;1AJKNEHoTTz!;N9a+T{nfvt;SwT(BQq z2_1^z3huwZRqKs;+I+)KjoEbb2ZHDR>gt-|Zqn-&3T`3Q1^pqcY6Gx{0z*vj0KvLj z3>P(8>H^CvilPhtOMd}`R+WMGbK|n)wm3Bav>}r-4YB4$>XQc+#5U;_0grMhzPB)P zOG+3VO>m?fP%3?@s%qK2Y;A+rys5Es+a4}+)7SlvcvJ8y%#*K!jZ#Qt`yOeoQv)Zq zSl-Qcy<9`D1zJ(+3W48#^8q@!GqpIFHjON z83)KR>JM;ufS_FO?$Ze{>U$GY-jl9vlnCcS=xkf+5{Zk)I z0|LdyRH+zaFq3eqFbRj)KlgVy~P)Yc#F#=f{Zp9vuf4hGIYdf zol~h&P0z<&Jq?1nxXozhs7i?^U}J2Lf%=_rmX&4ckI}|fgELeSwafl^_Ezk+8a{`( zSSnnbT*Q6U+m1MoL{m~OSJ$#%e7sloj-1zxxR!Ja%x2GpdjIvu)O%9P^V6hGn!D5+vs=+RiuHg*)s^Kt zQ#mqHF(8ICm_%WLNp;7Mo0nZ&KN~ipf)*^V9=3~5J!B0mllz9YqS!7q6ANTsqFC)+ zv0INVhYUV9EzGjAStT-GKzH{8mjVk@dh+TWhYPF2lU9X(B?wuh8h`vMZQb{*gu*iz2rNchPtr~$;-D94(){=pdeF9Gsi1V+kc!{i_UfL*kJEl-P!lj$+}Ek zkfC52BbJXRCSJF=gyay(LHh58rR0^xaarau3WWRc6Viq&=H<&jeN&yoV%L>{uE7ea zSu}wi7#Y-NIiqHNkB}3e!6Io2mJShQYN_SaarnCw;F14L%df%|ldC_3h4ufhZ+|;X z58fsG1FU}W(;`fL8<4if-?Tj}jNnK(4;{YUjz|=60k|@=oEK^=RD}XX6xf~l6BV66 zI+%KCWaiM4-sDynzhQ5xv-4B12krn8!KAznr6;@Y9aun`>vqffU@2OtJuFq_N~D+d zPO@9a+AJtm05x@!qk#cPL$oyp?d8Z8VPpdgR-y2hgvD>!5?6UNDgn|nF9OdnOiMyR zfa5V?%C-`mj}($FMeh@ebJ`u9FI>U5TTsD1be>yNYODqpc8fdo9$;8IIPr%OvT}f5 zJacp9i5gJ75sSpqmvl7io$&O9wB*S^k)t)}tTmz#FF`x$?+^g+qp% zP}lE4sprOSk=53N)H0!FF?joY(*>`v5*}1p9u^J{ZAT?RMx`o?i0ZU{0VFCCRk3%- zVdyi}-`8d(?;l-8Ns{XyzO!+zR43T3J6Ay}3(fccTd^5GqxCx6BJ)^!u#_5_{v7!r zJMwLu4tu|#bonYg3GV5Gvw2D7g-td0bQ(-s`4TE&XAa+L_F*69GYH^i3?WVDfveC2 zeyB>#wtzxqQg9QyR`mPBdSdqx4@^(VM5+*~X43Q+lc~Zpw>hLP;bvwId*n??SHi{& zanV2!BQrz5gW&Q?Z6Y=1SrJ>buHfO6j@1{-y-&q`8=f~MdFI<$;PsOnQb>@r0HzXd|fSh=FR> z^gAGgp#BujkBdw$E<#wu_4GZDd}6m;9zdBp9RVg3y>^@@#Oz>Oh%Z~T5EhmM?RdAG zR;GetP~iEQ#WS8QyNfPy_Nq3ZRX}DEIyfJ_0?pa~Rd<52Cb~x%EOvG>5{{L%AH0rm zRg+$Ri~RcC;CI!He6gL+^q)e_C@NaHirULZqt5XTzO<->+L# zEZf7W6ej)cr6WCMFl$|ZDB-eDj=dq!UI|B z=}xQLdZ@&{9cqO^{259T#Apzd(dk0R5|d{I-=bT zg?FQe&Zbg3>KRJMDxk~3c7w<0lEQkiu<}#yax4B>!!eveMKfVA;=}1S4~MFoJl?60 zep@#trQep+9Ru#!sDx9luXlDyo!Gj-dAHBx;wr}CwQZf?h-@4EdB~OW!A+zdPj!&k zL%LKfxGFO}_cvWIMhV%F1VRkvhCAMd1AoLr{l94IVSird6EgM*xV?)}-oOH-17~_` zYxA^sEbK|Ow5VH1^{dS|Oq=F3rle5=|6EpF|85yR(q;qK8_z7BwN&LgT{S*>@ZkD| zU2)(MeLPv1GspWSz9{MD^bE0~{WeF8Gqob!KxFS`ABz|12RU6h6-(F+>9+6#SBC7h z;`CbfTw?iJx?Y-7&#z}WZK0g>_X-+)SL56L2-gO;-;eFM-OHW6UmP^6L=Uc;)t09x z4#^dOGBMvf;&5k#l|e|4zP%k_V7Yl464Sr$z5-@?q!$E$+U$8NOP^jc5tAyYTQG@@ z-!A*bYj5x<6vqMMBcaPbYh*0zZ0o^eH1h%(S_11RZ3`@-o#-uHxm$1bhf|(K#>^t| zxGdip^!-RAnr=2bJq`?*rgP%rw6=&w(6w4ofyY_#hu!E-sPV~Z|MCIFwH4BcQcYA+ zG~;&!_9)F=1p1Vhio?}^%jWV&Ag~1Mh=bdFnKQ|};kx|g#QXUvPfU{F2pVo_4uhX_ zI321#=~+DK#J?@RTI&dQL&v4W|L&Yqz*>CRv&L2)pI1*-L!!2WGD|Kd`XyI}Ce@|4 z$mUHX%yiTaZseJpqmXNFz5)vg%wW-a_^+LqY)TE{npb0r(N;vDhd1MPEr2;is+Z35q< zG?f`_W52L0#-~Q%Q3TWD)X<$0N)+92X7d7PW-><07y#&$v)oG~H?vxHPs4s}^QJDey&SF= zE_8-%4sZQPOzA{uDyx#?QTLDl9x{SOA{|X?rhKE6np2{U{~^5!0gF6H5v;a8x5YWs z&Bc)m&>+$KS0%#l27v&f ztYj0!X5kCH3LvTQmp~K@ z4iY4CGLiea%(q15*Y^hvRpw1z;OQ?Z;5?mUnU(=B*1|;+$&_l-a*hU8o#gmV2dPH5 z+aIX{U-T-7g$gp#4xZ=$YyrP;UD>kbrTgPw51RFU>aLt-s#G1%Q;0PWP$Bk$9dX3f zP(OHJJ(#43?3A_L3y5Q{9V0{+IoxXY0((0{7~`@k!z-`hIyWUwG;FL4x{;W^N$lEE z3@Qe6mVI?RUhC}t>nfoI>cIMX3LB+GIC^7%Z-V~YZ8FO?IAkT6$Ek!|*4Td3M^!$? zpnW0Tv998m%t$Z2rvYq=$2*dPJVRAihL*3Xxz5g=HGpPX2@%;Q0dMn3e(?S0Jg1ak zbyFn`wE1?Fp{rJtBqqEo0Vp3jjR!--_Mieb&5p5g4$6D(Q`#;fMHLc4ir}ypi?YK; zPBb}(t7~7z0{;9|?Dxgx@22wh~XLW z?TI$pJDo=I3N=)fs0;wdpTvA#Ac959cGuAVu1V)6&`6Uc= z;gKoRj@j4-yrx$%wwV89|80~6v1i+9nOWXh-oSp}S8ONzsMx8FX;SA60Y7MrhbobY z(!#-A(;^py;FGifpbOcj#(^>Rb?a|(P69!aG;;4;$It_K=*F7+cUjGjr<7U zD$F~WbD0=NS4*cvUXgA|1seWy;D7Q-88M4t2$?0Y76Pz2{mvOLna6Y;H4qZUt`dmX zHZdyi4$Y7G+FO_YLL@OkbX|z#iU%mb7Wh(*up9U%w^d`^q=Cs=KSMrq!*0B@^;p$4Nyp`feeORXeysm4xdgUZD_rp7 z0rCR?qDB*V1jaK&D7Z~6lzuyKokYf??3v?#NiQRA$inWOZFOxjJtoLaR6AvI^Hvqj z#xAR~=DjMIIJ%x|$U0@m#qT9o%ZU6LQ}_(vOYtB)TY+1wT~_h(0VA5_>gnH4Hg%`5KNEwAr$;x7^olsjW}TPv`nFZqo|RPg%$sb zJxpN`MR8TQWrypvd$G$paKMn+fuvdUf=+|3n-g$1%KrBV&7|9bZnxN0W9J*UMs$WD z9nUpPbsExxwtZsrj*fkG7&58Mgt>jKk2X5{^F*q`-dq=ma;o43AHdu6y~QWWJ;TSg z>M|e;i@qfQTsP3UB~kCfir<6JM7D;NUo!q4a(cY2s|)P;WNUAR&pTVxlOU>Q)OX8R z<1bfitrx&myd6k>8Jk*Jc_X$Kv%dYsB`s6r-=`VO8M#Da~Fc)U3C~#jfqJ9==ncO z{2}JSJ`WH-!O{C`At@?ygXYbf>IQnHpFw}gb{)+!y#<e;uhNDn36TE!@2ekwY#XlC?ajiCOo0WL;r3O}3)u3JlOZLLlb zV9X}1ssNgtRf$8Id4O`}+{&bc{MydM3VSxymKxb6*A-I`kXdWNTA}CGeWHnnW{{5@ z?$+I&pScJ>b6qIJWC?Y;u>x=wfM(iF+6G!ot2HF4cvojh<`LsFlBi`g)X~w&(E`|A z9IFG(H>*+XKBuw!Q%)*D43MvwfJw(Ks?L_nysET=)(P#qt3rnc-P&tb@nUk}A^l}O zcX+J4e^53UPt_$9J_zuwJ};Mn!G3Od=VsVgeTO4UrdAtp|@B#}qT91AlXdBwv133Z(9btSD zsiIC$7Z-i~a!u~Y*P^=gx%UWW>8j%u^&AYuM}&=4MaQMtsY#>n!KG`5V@@9eP-I>G zcJOhLD=S4BlG*Wxb&1meP+2=g-p*HuWQ@>>p-4U?3ZU5F>I5^vjm1NDg~dqeqUou~ zLvz!Xq)C~ie2caX$&Fs^mch|F2|;P~As>D8KZExTw??06K23jT>=zWj594yzSg}nM z2a9)7E6tRp(MDDTuIoAWFtEIgnv9OVy!6*Tm2eXJE67_lZp?gecjT>DE{_!-WkrV1 z&Godc|0IWP;zALor;(AxiZk?qEGzbXUf&mG27a%k=D+>2X^wtJU7h~BlAgp+8AA5@ z=8qWZiSh#HR?!W=HgK^%J*=6sye|+a@BlZoqa+Gf9D+E^J@1-!<@-m`2g9ag7b?b- z+X^BpvqlB{-z`7j)JN1g6~NvEGE+GqMIV_CCH0Wz0@!5-VUx^oB?Cc?eKVR>b$2Pl zlU>h;W5O1>Y<&n^=*3CM`dt*s1wtd{T0GZ$U?XHy_9T+iSj$;2>(glY!cMt!0#oYL zbZAD(YERJjbAE1Ys|$+gH1DeeUe}J2P8Gp*Xkju0q%R1;RJhm_L0wd0&KI{|N%aE- zzBiphMKy5hdAvIPZbg)Anc-R3;%b%Ya>h2P{Z^O$Tf>>A(0Vq!vl><75(n;^5JlJG z4--PBxej%u)i%U@FzIWkqvtL?i8g*ak6(QStgQwP)jVH^+c_oaG;X^`*6n}R0w!%n zn;01^+$MP`5bSp^-c}~{=4Az9oy1^goV!x@C^^Ytm$6vy;i*3io@V{wFVtuMW&@vc z(gd$2#4$HBUEBgeGXse(_i+Hs%Yui2=q`SNjfz)OV=i1+c@RX0g)j6dVx#a4*|c%d zSY+p?KrWl#)T0Qqm*Ie+oAKZ;P`g~`wtV)~k$mH0=xg}MeCtp+v42vdv zB&FQQXbk?3c48%x0=e|J=#vYt#^~^f*n}n0=PTmy4C#rb+obK@aw|hEr?TytwYDN zz4#aO<~iUU3?P?nRain#N}5Do$DF}~oRx%Q33l|+vC89cAQ;Mppunj}aYim{b>a=1 zLb(s$z;C*W!P!E{6#{tM4m!-!oBaMB60rKNJ=*H>=5+E`e z{*jq?YWsory4YTKlgq8D2T$u$ZDUUG zVUe~vt%i~yRhl1aI;Uu$_zoTH?RCaczFP;dY7%YJLf%(d-Z)!ZlL+8TA!`{h`iK!} zbRp3qST(Zr?sjfNS7nr!eW=GQl6icc8Lf8Q_>E+GMl~oti%Ax}Uh;`W*8BE!tmnu5V(3{bD#5aG2+nVx|j-e{PTjzrZdJl~twlXU{%PW?M zpZhM&lOk{)=TWo|ZNv4AKl;{HQT^EZvje}xuZq>^j;GMFsiYd=`vlCu*lc!v-l6IG4Nf-ytRZe4=50Rh@^@$SM}@uT+IL_^4SXMT zySFC?GWVddwuMhx?G0aTHrS8j1arkWq4cI=^a7DH@L=UUN z;J>?)2J}kaaLoO?8(3r3xy9%s2AiZWmQszt?C=(&s^7LS11v$)?e#xuT>(^A$GFg) zRLPAJ~>Ut$YbwcI(6M-UNfghHM*nH0_m6Sp@1c+9?dk z?#vS_N_#{Xx!@vtv#P_gUU+~bhXQM2r!u3PnE2{Pz@I~IJ<;F$>Z}o zvD0k;=Ws+`fuQ&4EvzD$$QnRR&Mh5YfDtJmqL5*(d)I`wu?;cq?V0W(KJ1ghGfPrFg77gye`MSo+p;HIh1rLNyp1TH&7Uf?X8NXRM%8y$epE z8&uDT7Pm|<9bKsAL4o`95w#sSTV=iOl1~>U(vbMi;!lFLbN&SPGZ&I_JX1b9sSnTV zvoNPlhU~MtQ;D8eQDwYP&gZOjEjP!j=e7LtVPqRJzft&$f5xc+g*hn_{C5hy9%IV< z5j<*_=>!Tj5=1Ez18}SEqylkM^Jf3pE9TSemVT2+8y0K@TE8|hqa4@+=`^11rC#N7 zd)bmH8I$;&Bv&{$d3yO>!9jr)c0Z{Hw+dm|%G^+8%; z`djOvT%qjuu>LH+mDJ|-;8Q~okddh>EcV0f#{5(wA;tXVnFax-Q!>rUi^~o>Tt6s_ zWl{ZlpSAqOHI{7~zYU@TU#;gLd00nK8m^t9sVJw2v_kx$79$DqOWy0*-nXZ(45u~( zOn0iBV`kj$jSYTbFp;QUJpwMD+dXp{vi{gL+jW2I51Qu`mHxBl(X40Mj8FQ-3E{&n zuXMDg5k&tK#qpXB*l(#$->`wrs7V+>6B8&AX%Um%@T60%32zqWinSFOPKGbI)Skx6aCiQhC!EZZ<<^?~JE1^P=C zB}SGb;2!0vfrxCHOWq_~bupPYJ<)|gFj^-zyJsGgVwYiP42g@Tf?HN%77HYO%$vS@ zdP+(bV$+qTLBMSHdNk^f_}bfQgJPnpKg$RD=@!_Bij!AeBbFs+mk*@cFyK#b*qOx5 zj8zoDDlLSFkyJZiBfYv;_;oxhSYfEhWSO#(`Q#Dq;;8f`|COGh^@KO_74t}Ib5{y>o^?Ol!+b*oc+E-4egaV@I zaQ%tJ-F~nKI|sr-Z=0s_k=6M{kWmqJC83h_I>j}Yzu|9D&INPf)z3Hn2)c)GaWSe` z7OJq)r2u2(yjOW|M82&E29oZVYF2o3`9X_$eKlXuX2yX0Pu2jd`fGAO7X1Oa8iMN7MO{+{!jd9Au<%P3+u^wM7EC)KAbZ?C`aR_;#jrUXvKCr5 zCcEpj)JBZn!?@A7zeT>T(1%t)Ly`aeeWDY^agE0{?1`QBy4^c_k4=U09kWv6vSff=u_fOYBZyhD1m034dPZ$?K{- z;@9tlF!N>rmA3xVunJ#>36Z5|74;7#{XQfggvp2?K}}{KPwm{{x;Wn48`Zk5{r%vB z?7f3SLxdWG1p_t@b|wYrij{R@5+wX-@rZ2x$ojCv8nD!a|R6Z>yBC8`B%sb;kjbQ zo1VK-U)ILg%pC8{Q=5w>D=VdqZ<}5Q4Lwf(0$8_M3M^8e8om?ou|&=lR6GhSAoO2w z-=CV}v@A*E@!m8)NXBC4rg0w&M_wXza<9mQ=meTk%!0kP;!5t_zk= zqb*guT;ZJ3l$%^3XYKkd8imD_8p%MXw^~t`nF?G$q#GPrW2SiXO$1L=k&*g@?Wz;fRmI&A!6*X>M5lxVNBZ(c8N% z0J8b=$LEh25Y!{j_zmZ^*|R1UnNJhk5q#Sqjjx&Qs3Ih5j=jmHgb*&9ClV-$1fYeuY_-`HR0?MM zUJ^)A7Su`L^^~#z&P{$#O|Pv-Q|ET(GjNRl=~kw*VtG9sxdnc>b#GShy~Bxceh`u0 zxsp0!fpuF`y<@Fq!zR;DrhyAAhHJ=xjC=8sTbjtw9p2c{kv^@x3j2|yZdoMM*R?=y)x z9G(D!G}^Fw!V56--=Etrd=o4MDw&j|(yny^@NLMIDbh)T&LxrI*7nfjXPMca=l6?K=T zq6kH)s51D?;qa>aQQhGhkESgIQ^Ar+LlLoSuNVxxCXyUJ}S10#)UUV`WyT{aa$s z*5`ZFa)S7^jqnc1In}Q{HK(1PtzQK#Hc14PaJ8MjNhkR;Hxr8io4xh%QqSR8p>Rn?p2C4z@b9=a&PE z^7f4#b3F^d3qOC=ZrRELpQty7rpYv6f7}~Z@4KY`nfo2<3#$oyS4)M=Sf-*Jkg9We z0y39Kucdjmc`mPl*8JP;?;38q{s$jB9OUyRK;v9ccTJA>O+&|sp0~{GL3=MOx(qMcOS5k2s zOfP^a04>!y+^*->iS1&)Fr)*lG;%p_7W05wjUI{s<#XezsnFpT#l!smU72Z=YY6qI z;@)_FLcO;i4?zV>nR(e*@5bhs-uAF!0Dj-RWc)hN5=W-xzb8dJfxi`P@T)*2 z=JEb`?PgSrj_a;RUONGqUrMx_iro!Q3_-c(5!A~CX2Suh%e@J5Z|t7VeC9X6-02>XUoEaeY1A(9#1xyCK z4erbc$1(~_>TKUiTQ6U_8(GyApjZR|sXCjR9TmA&vDF{3?ryQlR(TPyHcoBoC|DAX zj7bE)al9|$A#;n~pt9tED38m10O;rjfNC$y@8eHrYF7cwW2(J#(m{ZrBCVom`hPFd z+IFOQjqJGgUooQS@f>&sdBS??nSWFCc4Ua3A62>aC}q{0gy{`U{Hhob2<4+uZBR;o z!yEgpk3klME?93bKv5$ovZ5QKyqWH=z3mo4-S>S;C`TV5ulx_l-S7J&C$D}&zpfSS z0``2r1T{psG6O!NU5?bkF8EM=*x6pBW+b57|Iqx`kw`OFPChW7=$Qvw2*DIC+-dC| zkdN9u#{Mk6r&~O<@g$<~c@2kLRTO^7PbC{h~wh{~p@}dz4g~ zTr6YF`@7%FS&1f53|r2+tcHJV;6~nFbScc+DB-(BKmxjJ|fltm^4 z1AdUd_5}wXo;#ck%L>n3m@2305{tUw-`a{?yS2!bD{Bns%5Goq9;cqwc_gf3tt8Pm z#6n~hZ$$)xKDgCtLTqn5)or>L9r7=ibD)ua23#44RHLN|@FmZHG(usW*v(|np9GimR5>|br$aQ#xOfv8j7NXj3Jf#n%c(wQbvU+NrJrN2!EaD$^#@4A zs2D_8t|D4a2?(p|e}QFlJk@XC7iNq5s(aE~z&iUvO@LhQlvTBR5|WMpAX!pU3h4QU z`uI>pLqC&Qw24P5zE-Z$77`(&)7;c_6N6M7Do?#MP$avUUhFDuY13vRS3t`^ro-zm zVR0EubCO0Gs_z1L$e-&0WH?+thz!%dVB8~U!^D28ucQ=mPP94}wO&1l9x>W|B-t;} zDR`Cv{7XxJ`7$`#7~~#$xEds&Ix25jAiX}}L5fwYd`uWB>|*RN2WH@W;0YMj1T=;( znU>DZaQkKLGw6FFeOgNF)P?9mA=kEH;|Ov1`LNHxH$-0Lug#9K=Lomy+8;!~8Q`pg zgjg+a2vW(W=6YAz0fVGYDlM$NeSGay)+)@%0>%?uw%v_EM_&w_3E*i`+2m{;lW7rRz}(dznMDY;6vP^>ls z@dh^_ljFt%j}t767N5A_P)S+bRuJrf**{lrD0=g06u2Dtluai7H0V&85B7+Ozqwt& z@timX*>Ks+*>b;m#2XmQ3{n+3puvRT5w23G-aeH9PSRvlGzRQuz?Scuo+%M{s(hb( zPx=1J^~${c%WiPZSNBgjKY*dnBF({kU0yE-u3bEEfr`?2E877(ls}Q4BSgEl#i50$ z8jksEpqli5*s>&P9wxDg*&zNLc+_nAYRWu?l2O6h$F;grk6g}?nT17&KKsndYx1tO zixm0(<#iS62cTZ?$K0^}5wtnEMU^Bq(_g=x%h&rEQg#s^tyb5tIy@~}B>+chdU{*P z+W<^?#^>g+lzx>Oj?f~nSB`NQWMil|>T(0n1&k?3a zzZ>;u7i%ld6s1O++dL+FzYBm9qTOe#CV-@UZgJ%+*JG%*oOzgfW(vx$y01xp=V;87 z8n>tt|7wCY0^4yA=jY>lCN+8j>xPAqtNVw|{&cIsz*_YYg|^eT$^cugr?E9WZFY{O zLHezZuxeV=-%NyoE2Xz@#6Z-EdA8;J0AB9nR>(Q0Em~J$S(<8SyuD9{ojhl9BZy%K!j0!QF!L+Sx?0tb= z%B3JROWLq}uNtkb-NGR3KQ*hIU~fLVLV39ZnIsG+~t>3RM8ZwJrc&g<$9}{dT|FWEv`OlgaCu`xrSDv1S!v}u{ z@U!0Hf5lrXiziaN+U4u}miOf9y8o)iPq{FsL&?`n(XO4+eys00VGc z{j2HCc&tOdO~XMwbXcj*g;F4x&Ysfhc}^-E&Z;&@!}5jI#_a#KU|n_H>X>QVv?j*h zPB=P8M}c{2O2LOZK;`1M=p1qNK|!}pWgd;ISy`~MPjFH>W>v!etzM%K(IJful7B*1 zCz=%oM|@8^kp1{#=oIW!zdS-RZ$hN{f83-Js&f7iGuzu&Sp|ITmcIO zA#2)WJyUf1Oba;QoR8A)FHnGPrVAiQZad@R0`A7LCu1M2dh$Ht$L*0d3FVa>4Dp<2 zR=6PC&S`@bc?&rgqRLIol|l*k0F(Uv4;+1P@l!lu)t=(H)QQ7;UpbNd(NL z#5a?FbW8)ozTW(&rku;})-(v-WoS-0K8sgf{P1{NnYKo2?H5t=XEr; z{7j6!YnwKb*ChjFo-1L1PF4a(+E(Vq$a;E-_a*HqFj){KkNU^rhVU6RPv+B;6#(d! zl%L1dSB;gTgKkLO-`+Q z&gVeT0GI~#*B+sjM>@F_@zhe`=$PilV6nHhzoyO zv|QPY+!`M0{z|98%>v2-R8#D5*v)OSLCig#&##||8C)ZE1ZcbCuM*`vqlOZplPFaN z*#KDa!RrJTu-yuYGHvz877^Uie{qb32uFmXl54GEz)%dM8tTVB*;g^GmBZv=1M`hV{uGf?`~BMtfb;D}9X zxU&93dK;Q2jMCdBgKbhcKMB)PV7|XaCTlTawk%z!9CJBOExOJ>Nwo3SAL4?9%jLy( z1*;2MMHW0ncQU$iQ4{~HiK^z-x5!wKoJm@!g zys>zS_dXnFa6Esl`ukJ2?iDiWa(L(D3k*ddZd^j?6#v zWZlRwJw06sWh8VGuDL(Pj#+W1=Y9J^wsi^6O!vJQF;Yp@Y1V_^RCUF~aFjy;QF|HR%2qBO z5RA7#zB0sq82Yl6snjimf6qAw48y&heHhxt6a{F!#*HZ@N0 z7E_iHbD?vKQ)}m8w`mr^ZYjI2gk_XkIZvXVpkStUV#~i~V?S8k`F_^#4t5a{(4D)I z-U3VlweJ=$n06#pcZ|3>n)YJD`i;tZdGLYhhJ&xQ5gk1uqEH8QRfc5_3>OJBCnz2C z)^ZF9sqvUw$vi$Hv6()~B!RtlbX-lq<0f&e6D`}K)x}-uLBdt02(#E?ciTy&`rsw2 zt9sY6crEOm`1qa0OSnpA?zCzxmK}2fw1x=8;~g}8h#x25*5TGu@hL8XyQRH;Cq;%W zgtEz>(ckznep>HV@=J``w(+;;hN%w9hx!c|Xmvwx%(e49EpOpFw)LVMQ|?L132`?_ z-RYtim1Gcj_Y6(XILK*OQlyj=@88O+_Vyt({+@^U+Q%m9!$+vdq_~9!#g)9pi)wPA z1G7g1^ub-41_F{CedFp;mo-DO5yT#=WwVOfx;hS6yYQc4baQTLX0(6ST!$$TO@x;I z47p>!6xC#{YvecKJawG-u?J`~rL)Y9arBfn;S{yB$eAI$CDIk=uXd3PgLXeFVtJc=sm zxkGZReq{8CI&(UtyD`U+G7B<{p-}A=I~*r9(DW#YSGM-Cwk^w2oh}dJAeX&6T;F2j zwfW)krmW2IvXD&yjN*(Zq&cW+poE5UlUZvY`S~0tbbES%KT>DNhBRA#quBPyq9VMx z?PV^T$g;vrIU64~zOT`Q{Fh_1IZ0NK*`mD&Gv5CxrW2S=zT4?CFpu&azJe#DM#pQ< zT$2E}>kY$1vbCx05^R*^h*{eES zDk#YLR2M7Wc`9Ciw5HAU@0PS6%~qbSfpTY`=BvhgV7s!ixe}M}jJy(Juq>K9WuL)H zV1}q_cqCA@QEY@=7rOKh$j2`=2WZ2VZLF=k_XT5E+;VQSZJpXg>4eQsUAfX45Kr?*+^oFb zI>EYHQ7BbL?tuPY`q8r-){dzxkowsoI(=sq>cI>R24>EqMt}|-uxX+8Su8;J#Vl{^ zk*ex0*`G323n+T~i^v^eARD7}Uca{&6cm!&Vn=b$;Bq{)i!0oS=HF+6#EU>v7OS!JU*H5$_q=Q%s`+I4e7 zPeML3nHjTqB_>^TO`4=foWgz_52*Oq!KtySPaX13+3qX;x#Zof{586U;z@{0PR0-C zdsnse0uv1P$yfbWy^KE z6}#~Qm^ssAFEZ_tl+d{B_VS{NiDS!*3{zveSnZ4U8aG)LyeK7gr-X@I!@x!=MgZO) ztW8WBmB{EN$@OXCrmC!AOs5LDDW9c26GZ?GJT0smn};hjL*YSkV&Tyr`0~_ z+@ue?QIBsbP;hDD9NLiXfW7VEv%I}eDEm=vwiPPTO#Dgrji=`_6Q|R1Mm7QH<@M0N z;pZP}Uv&`eq4oMbA4{B{8!+&X;{aGH4}(wYrYT>;zCIzacrbVpAmXgE>20WMDf3c; z4c%C|*k*g~1wW}q|8oOJunKbitly7KJ1Ql8L@pEDW(9kd>V6J~W9rgJ$AkJSS-%bM zbs{rCaSC5T_g153nKNbfv6=Son(^pEz45Dprt8V!_4?ED(D$XDBOqUi5ivH&vFZ83 z@MWep_G`nIx++Z^f6pnQFox7}uarMLGp`RONMUx*qz9&k6E&B>ac%SRYI@7cSKR0# zMR-3j|D4h9Yy)m;9Pr`E7egLd|CK2k)xA+~<-6NYYyAyFZztnM{Q)`42D_Y3n*Gx) zIpIPt=TS6D`XGSptPi9y$HDNiLsG4hNOW_ZY8Y_!NoWu-eW?I8@doWENb9Qq&Ue#C zzMk^wLH3lFW0e>2tY+HQt{>VAkUvrn8}1Zi4=jH>X4J^J$uI|smbi4A<;F2fat4?G zYO6tmz!uQTWExYJw#{oi3x5>^=`jz<0l~uSpEb6PQNCf+ql!^u8Q}Y^7Oih3$HUCd zUmF?nqN((Tw7<|5oVR@J!SUV$VQve`SDh$7NSXqoXD_#J@c+oufoB>n{- zi+3+cZ>xK4%<_O|*|eYY7L&SK`fe47^YWAxruNm!^h|OprbTY!q+Yr<)zRrIj+uE* z61mEgO^;D90;TyKfQ?oSuxWUQLn=i+ae8P#UNeRNTH>(b`^%%ubOmbg{U)xsrI70d`5kW$<7Qv|HjKErQ0(p&E!9Ojs^0O%fN{Kf#kC0nL{D9V!}Sx)r_1 zko63P|KLw+NxlZ0nwNlsUe4X}=8}l<{TBVx8Oa{QSu5z2YY&pOZ7_h+?ZLNBEK#6| z0!4@$DjBN{x1m0I-`+c3h0DB3O3ds#Z|F9G8U&X;Lj{Am2MZ3Lm{*I?&;io8j2Z9Y zfLsQ*^IpdG0Y8BMiJmc%0ThUiJ-%$3e46Iv(q3#AQAo;A2`92i(Ry-6fq&fP4u9xa z$Z@yW=RL`IOy-G7RBh05k@Lo}0=d!p8E|Vhq=<#f8Ya-|Jc)b<`T3cayfOyyf)9!h z0_nx_qJchK-l>vLlk%=no-2x0*OfKFkQ@N+?LC?s2QaQqXH16dZ!?@Qk&3S7Bq~Uq ztjQ2zhKXbid1OlSm~~w!2S&E6o2)JU*?rrn6?(8Ol*dMvCU%J4C)4S+@rc z7cE=>n;^ySRqkU>r18MEvXzLpL5IYo=y~LmOV>Slc|y&|vcGn-wnAGnm%&Z+mc8-{ z6W-Zt0Ip*OYp<-#dSJqOSVVCOnJ26dG>&sU16CrGd6~CGIS>GIIG&Gs@3c(nMt2@B zyu3))U)3^+69#{h?FG|!(Rn_@PfOU~_P7=2A+NeTh8P6{!QSr5_>hyudFf02i9c*f zDnGf3{zo6z$?|gr?;}YI^i2G==YNQ>mcVZy{O}S|v*rk#FT~ZO~ z<$TUZ9mf5LqR!0&yXL@2*H!>a=UTZIMdxYu#-LHqGycelBxPD?|A29%i~QhP`a@qRQ80ttSuS` zP6PnH#)GR^$o-uboj$S=@@c;o7q=`1u~k6Xs}F_&g~uLBA_(9Ee%VDmoknx;2^*#7 za_-m~9~rlA)QUHbfyPLaJmUT(;H173>39opoT2_f1}dt*#XHTsWuJ=6NF* z|5>9^1Bno|;~Bb7P`fj_A3I|X>`v;y(}A;A7d(_5;&FNAS=bj$qWYn<+{FXNS||ZQZH&U9$oEFhL%(@*w8P@qf0xCmU7T(Ku{lto?fCMc_woHe+x$y$asy zfrhRU3Vdw$DyDu|uVn(Sb)bwrN1`Dm<%|;Gzyr}qMzRtA3I?Ym{C*ewOa5mr{;}2r z{n%sr41@r<9O>)B3r%fdbs%27KK5Ng&8CG>NO{Rf8zOc0hi=&r@mlETc1}IyH1k>k zeo(_B$vk(nqSC_p4lFj-yy^uMdpQaH2}##~sr_>NkI4*y&;mA;D|KZJVb>u}1pt_1 z0q07L8sJ9PAjEDgxQPLxzaH5qcVq8*2G2)$|D-2v7$XYYPnq4D!K zZ@DtSe|KQ3b~YaeIo4QM6LqOv{|&eP{JPao;4WlYEiX2Qmv{q9O`Thk}jWVv`X&$Nicl8iJZHM~vuePjn^D>u1;I))YfD z2W)}B%&Vu+pPSp!7(FlxlGL=d8RHFK8J!f6TXIVeKGK%fKr>hA!v^K^u0$yYFB!=R zFPggbqVKxu3^wv_C4sI3dkh+5{{1Zl`>T8$pkvl*6;q_}k z9&6r9(f>rye?y^EzjU1a(@Z~*W-0m0=(%YKzj%?nzq*8(gC)JnE1F(Ao@@~VK^Y6e zR7av>TX|C5&R+Q#sjnt@V~v4fHjT-j@Pav3^pq`24Z7MZsQ-o8}9m>vNMdHDHaYk znm{)?F9S-j%ES|412p=pZ;KqS9KUqKvq_^0rih`Rd%EleL?^E3%zW9UlD>5=bt|qGkn#bj!)yuzK8(RlQHs}cSssg&m6p-k+}x?` zXI$WnSRaSrtL13JkB&nE`FO1jDb^-_Yk)YovC3<6 zuSFB8xw329l|yQMU^Jvw{yfrLH=ubfHv^RqQFgH}{*k|fk(KcC;0A?rNc4CuRZzN4 zEF;EsJ=(8o3j)4t@+FMk3p>Wq`y5tA6|MqR6Yb&Sxm>=^_Z3_Tmv{A9?j$YU0cq|o z6lC&Xw}YMdJbCBBXlg%j*jwpFoQIb91t;8#;^_s^`7@8tTr8cHvF|~5D%~p{U>oM= zNy2`rTrfErw!qQAgXQu!3M=0>$Bngm3iJMdM6Qf2b|aL!qK)Kr-MAb_j}KEYVit6d z#+0$Zd{x5x!Y1cib(V{E?=@<^JuUE=J3xYw|oibNl zWIsEGoUB-GWf^o!Hr=i6(w7vViMV~m^BwD_y~dX*Y~U5D(C z6s{^ApV^i+IaN$+VQoBPva0C~uuo5~Yy6Y-N7U&@GPRAQ50ouvz~l4r`$Qavt}gj! z+xyg9p9RQYmX%k<#3hooFg&Yo`3T%q?(C@Wi6f<*25$5AR z*MVCad4l!rwv=p{hz$yx<`&$pieS3moNn2f4?FnH$iR*H9h7{65k+`Gb6H8x5cGI3 zXO<5hy;Dp(&=?!tA)ahx@r78Mh;}2)ByeoZOTJN~F6G)}+?x&M8ouADf2ePh|4e+D z1JE4(SuCmC^qdi3^79Y_UCMM~Y`^>J@i;Ccb_gs^sCF|E_ zvL|g&!3JENXCNWg;rF;&6g-*VYCIr{c#Y*dJ&36pUMR(WuZDS|lJ~LOY)WzOz5n3S z!Fy99`Oe9eML@^jAR4#2J)fcbI)v>-yu-S(ZCHEZar69M#sG zvzw{#?K`Kus#2rk9rfzGH}rQH^F&f*ydNYvlI>jgjy8-v;7$4)5{%CDLcB*SsIo-+ z#j4l)voKk8d$+-q5N!iFy>j5bc z$P=iZB;XkJS6OSfsSSKKE&R7@53=qZ3~40Oqjxv0bZ-T)FrqHZ+V_ z+jyLjZds{T0j(KaeaGhk6GQa(CZ8OXgPB7i`?vpqGdraT3G>E-1|=U+)z370kZ3_Mpu26S24M;o^lNuO+Z#A!BhAp{#@vv%lC-L)J&m8PLxzg)r8ecjl`E-ns zx*qX5tl|ESiO|_*fChka0EWZbzJbfn>gnx2Y)N@VAbgt99XHX{B>c2hZ7JiHUTyf` zj+<*VIfWtpPJp-@(n@Hs2^f}0l*vIfam_m$Ii$WR$b3pV6J)f~0eD8L++wIxR|9xF z&ruGr&U-z70$k<`BIQd8*DPePUG>Qzj9D5uSJH1B?eON=ZgQ?7BcxKb+%Xw zu4VA4Uhs3IK>^f=jcPbWvx?qfj7VE-G9d^QU0%|>r3dhGT~sbJP&p>>39qT0Cuvq& ze=9ZbjsOBHHjqWH(krVD$ut`9fi!5+4x{GZAzeU z>5`)gPo0kayN&b45G*feSW6#ve`4OA`_Hy<=5{qN#c;~QDyIPvsdVT3;mA-Xs7bpx z3wOqRdE!qm+n3U_R-y@%e7NDm=ax?vQ=ZxTE3?ObJbv2(vb=&; ztx$V@`)M>Vo^-neD?(^fr=E2y^HfEzFU|==3#Lpg@^ML9KZP@jD}dj3-@T zH|?+x0Ru_cF)2-2)dC7#$B0YMDZ<}NIgc3C8%2#Wj1(ubue7%=yo*`8Ge3_Hf_e$7zUl+0t{HevM_D)^QM4f5j zc}Ts?1NR#g)Qyd}eJ1T3^VjE=_Y2O8UX+ECW6cG0IO)Y?V5taLfc(`gwO=aw8w?J7 z4@GbWe$A(4=1J?|yLLkRQ`1~zEAQ;Se zdHGo5ct-QVIZCMh>(@XZMH1CaM*mVNK4iZ9SQQ~l=7=?M!7_2~lMIuz&Mu|iaqoB7 zTyK5c4vR0F2mnHbteI*i*XM_^j6uq=`&kKTdax^eOS&^X)`J)8JEqyKbW2Y;a(53-CMk_Vv|qkb2GgSdcDcD*>5lm!syXcc&a|F-Px4Wg#?Kksar?vm zSNC6P4No~DY|^SRFz5=U{wl!L9~K&nkKO53e69B&=M!11+3gIAtqo5p)As?_l^!;$ z-MYr?h8sIn)-5MKpR@|rArONGGtU@(*ixcB^NA>xCmLAZ8tw+)zwh5=dAo7RGjFa# z;@bJQI@1NrtiA(x?{w+OHgIx+-Vc|b&7+zQka^VKPDrfu#9=edP z+RWwGXsw8@Zae#@YY6mcQYAc623&E9#+rSf>%G09;JSGTOy4a;t=F|_UdE>9hLUAl zG({n&b$0lEY{HHU_GV_Hp^5D*YZ$EqpeznC{FGbx-$>8wV$tYF@~u)9oQq`M3aZe- zL&_jNr;Q@tzN$wpc_xt_#_-&J@!%5oETw|LE4|jS5!mSqVvY9bi_d<%p8T#)NPtl> z)-LVDGDO#^=36#VOWaL|U;5(XQ_=BY|?4%43f!>XA zh9zFWrufc!A`hh#E-(1F?Osd_HFrO&r)ep8Js%N>Y6e>UB{g^#xb4;8 z(&TX!$!U0kNXG?^>zm@jk51Qp-;58JW_G*B=wCzt+y6vz=9UF%m~e`J=ZcsI#J5+| zs7~LGwLc#HCZ1yCe}~${_0-5w@W?Bm(2xO}&@jtr&Z|WrE@61;870d5`;3mJcA4Zz zf%{%Nh_{dL{4bK6W6-%~GRxeo6`4O6(9bs{dSMHi^Yu=x#t#S>XMLAu9r$`f!9=O% zDG05GHB?!l6QIHr*M^qXw?Jws{h<0H*{6P9Y0zTxN*&3y_fv3{=tRh89jswu4_@!` zO;(1NA_iOLPEOD|0^&^bX|xR&3sM(!2)fz%q81=f04pBA*=HE$M1y%a^9G9Itmo2iZK% z+(h2(9A+u}i1GAL2Y@FZIWEtHsllohiL+qd?e|G#Kl|PUAZ(#C^_4@h)874Wo>f0O zuKGVhEK_~{5m?>71vrJcjN@%T%-<6NsOKI<`FkS1&8>pu zcC5kj_W%&C@Ux(a+ug;Ub^r+$lsM}9HbYyg0myZpbIXl7zT5KM6~*?`Y(RqwVtfMF zvCeLcf)-QV%$z3R$P~Bt{|6`k!LctiTmy9(R9E5(3ePR<`ggiUlI>n2FDQA;Hhp=m z);^20jIz9mKT%^QJ$2U?&hHkM>m3alj^)>U|FcmtPI8C@b$v{9gl5Ob9(jNNz5#=A zK#XI-6UNND!<1jt$EE4gsh|(f*SokTCTm-rMnOq2a&b%H;;Y&`2B4I`;Qxp3KQU<^ z9dL*NIl7Emfkq=BpOZsKKaUc_+~kl;xJ^ONu@l{Y5O)Gb5jh*GlRVx$Z7HWmwEB<3 zj=71l^pDZLa)Jvwkle~;tsEAed<=%pg>aXTgDHRJ9PJtpY^Lblvd$yexa-*n#Qyy70!%!xLfBk;#J`vYJcZdp(47s@Ny`A*aB~-(Kb9x(nBEojlCBpd zKGb^$3F2C|%>aWCANpxswD`1tqlX7S*|j0Xl_&!H5QcL;zXxk`pg$%EKDdRlCu_ET zUZ>QQ8?xmW?1*kL26xL$Dx(g;nW+#hpT_W1Yc`o8sQS|Nv%~&>MRLU86%NG)%%)T8}NaA zersTXtHx+dvSV`c7m9Z`Wqfkc=|3VoLWa}M-mj3`hr{OD>;Kv2%mBy=Tia!HC{3=- zx7Kubg>VXziTyx#5C(&;YJ)aOGsC2SpGB6_WYVmvz!mKy25eaIXD6~s z!E2?atn!$J%~9YLGEIgUMhf`dFL82)(fV`Xk)tTof#!6D{EMk6S71aC(q;_S2hAAV zK-Snm#U)^~MySiF-%`)}I1lV#yq_F=AM$Gj?HfJ9=<$oGsGT%Os;N@?H!C^$;8EOJ*T~XSH*fPM2R>gq@1`grx^pAKf zhx7spWo3T?sV+<4zy5J&gEtr>i1&W6 zuX6yAG%r8v%Ogc!y;un8cR{fT^g{4ME6px;bH}2s&dHc$usB;M9WnGo6}I)$=eT(E z*0H6|e2gXbq?4%$|Hu2G)=ONAt5~LJv&a1!%4i{CI0@HB{{o*-580&+lC-;;(eZ6! zn}ZW#BJd!ik}bX~mjHt-vpFudwaF92{3dRX-kM3BYx6~c>`6;%m=ocHVbZO|+!tdZ z%2GiyKq}F+B=9Z$buq6aWp6U^)sLjnX&LWS9t;ig52 zpAt4;L}LLy64DzAJ=Kk#1ygjA5%9zgJz_ENeBMhfb|94mO-+LLeyKKng|q2w1%;EOHm3m3WPgKIM|z0H16@iLqQe4Rcnp0 zh3#2j+lM_0JL&GkXlpnWpnOkz_3(skG&%9`#-uKzEwrOszpzUA9g~#>1{ba+{#faK zbiQ{W-vuClV@MG2g242ZUrwvGL%8snn`RDp^L45Da&uaKY;ar*#N;au~+~J@H>F%}p z6o|#M?4}N=8lS0-8mbB?{-nzBUbvBbm=yZ`AQC7>JmOG6kJZ^Xbjnr3`TR;}0(*=z zifFt(5FFfeDK#_inGDv~j#$wBq*wT~|A%4aJ;ZfHw{pO`2@sQJge=!|WBWBtUs%vr zuk*d{ZT}6_1E&qEj4uLQF0s$9okdkP-Q~`YQIEztTv4v>A2xkOZrq5Ug9nxC3aEy- z@>%}h1ZQ2v%~L0TT=yj7&)I5q86aKZQ=^lxY1P{v7QEuRhCMItkm9=y-@hdqy+jU& zx%enoqU8yO6Rk#I<6(?Ah0`;{$Hxk1;xjDhsQxo&b9%>^mVf0$wTtSd8NBV_hVhmA zcA_bL7d6gnl9uKorQ)-T0C+wE7FaOucKyHNsUPY6Ut>VkY{+`IcvGtw4Js&LB6>yd?_wLTXxPC{p%BJsocz zS#aX9o7$qoM|N}6S@wtI==Ox9K6v#V(o8?Lr5?3wBPczm&)a)v_QXacN1=@LJf-}k z(1`o@6~du_AejrIM@cY5)ol0n6s!#mBT=CePGHwdD>P0YJV!!h3ow}}u9=QkfNBq~ zhja8t;%PdtkxqkO_ZvNQ6IZYB`GzRjPP<9$1GPD`u>>5u^_w(3$4H(Y{;_5sb|h

    ?=T4htUhM^*h&Y)j4)6;?p1&d{6%W07&6?3jA;BUZ-ChtOw5?oREw*faXBGb%lopvuqEPm)B7_ zN+b>}6hQO62v03{4?3#J(H#nmzS-VmyjqLa6I54toSs2Y%jVIWOEDl3cNMI_fG#7X z;_hMY2d+1sysaZgQI~j(d_;fM)-9$mZI$mo_L3zh-5kn8%%N`7-vn8Sl~SFP1t}0} zq@%iaU+~1JbYwK)reuD4=1wS|RAt#KRCjs5xE*-Ecnus<$g7Iuzvzq*p#B2H61Pjn zzOXhe28)kc>+GmWi^muXPBt`LX-?`HB@GTuT73Oe{$zY!MU1zLxORt0Z>48EH@g9L zLgJqtfNGd%gvuGf8(4=+*7}F0S&FI^j+@yg%;%c1?kH9pyTt?e_cdHBWRVZMV$&_w zQT!%OyU`WPNJ#^?z)xXane@)#jhq*@kVh{fBBM2+l>WE!|FT~#9I^V}z|%q%*Iefr zy_e16a9W!=lR6Xz1k(ebG75RU|X4$@<1#v^TC zXTU&Tg{cFC#Bm&|iS**Z9oZc`9j>Q2T(5-(<8nYS#SG}{@xW0Z?2x+WVh(}W>)odD zJRQmDtk?%BFPDMS1ey)3bCdMpO~ZV}@KJdFFvH6pcDp_~1-rw5{EKIVZ9|%ibfi@^ z;(B=NTSBQ0DCb%m{9oJ`t-g)NqLZ*k`pZjd3`lW;M(W|1wEQE)bzz4g#9WmB5TwBi zjjG9-YjM8k^OwDHK=8VJt440Gqm@s|TC7!9fmRO_?LD#EF0sO zGTmB*;12IIh(yBFIt0quB$?}?J!%fSaRvZq_{!3cc=ts zrFwTmIG(fs>J@~`(>w7Ng3F;Fs?JcoYHjRKVh?VTaTyCU%c`0b2?L&*I2^v|hzO%@ zrfh_za1aD4RIfdYS*Q2ismG1XM%4+H)S#bzR7?e5j9&X)+z)zU9Ca0-c{G$UqlTp5 zIL@jzcAhRg^eDFX63^();L2TzgBaBA+z_#&{=t&6&Rh)r-|=EV@4=k@d7V1Yao=2d zDhyZyI6YN;i1GNl2#vmBbZh;KnQ!u*gg{R(LM$bfPu*1oAN%&)WNn#6)tsBu!oPKo zefRtWd!?|*zA;OR39GB zg^u&>oq{nKN_(PSWQEr=IlnnOBuqJHp7YuK1SUve-&3+DUEl`16#1V1$H(oO3~o8N zRw&|ANM=-Uz1m~UmdADkxYKvmO}nT`T5#7GO^K9D?~vBJ&y4W)0#j&C-5$OUAXqhy z%X$}4gCJh8(>{E8St9p_a^!$4dwQnzsq& zM6fcpizuDlCQBl8JbGc=d~jN#{efe&{vCt)3AkxP!=|VI=#9ued(uN8MQCM#MkV~b zmn#f{ZF_R8=A+5@%8bAg%v44;fg$EJ_zvpx8`HK*<7wilMe?s}?J5oa10ipS{9*uHg=$f zW1BcglgA1~`fiqXu%xs9Zx6!@FEyagZ)mN9bd!LP= z>E*FsJI=xcOPc_eWpXG21Gw{EwK~l!3RhWw`w{Utsw2{IO-ZVA14mX(WY6hmfqO(wpHLSUK@(#mkffm;kG9B11E-?_D zP8Yhh9`fFtZ+8rCnQAaOaCv4K6x;(IT>O>|UZ2EAFeP20`+m46-?-(!WTmmbflV(z z_o4n731nIjTG@2Ka*zINtQ!zC*XEwO96J%Hbk@vRzAbH&fsy?b4SDX0 zxxnu|@`Awu2ftL?Q)6!v`oAUeb4uY(rSdgePF5TT_Q_8$4ZCH*0Y;Jj)Y7vJ)_6g6 z*{ff7cm!5bqfy~vwAR?0T0^_ z>aoAF`C~s6cf}Thwsji-sTdV2bw)q35G^qe<$F2inMKdgfhY;E?HSH(X)k=kD;3E^|--9FV=;HdZPlqEoK5!DprZ4n1pYjlayy&Ahw?<`uUt zwTrQghC;`s89mCpzb+#K&y5uCWYB0y$VnY6qglcQIb&cWd99>;m>auD{RzA4p7c*G z6da6&dypS3vKTN5;2d0~c82xKgLxZyP)XtI&xdSKeZ>asd zY##^V;8Q8!wX&|-U6Mx=Tmn|j#qA|R1dZTo7_7)nLns4Tsv74PJ%P&PF>axm&mDY| z-ARv(Ms5od>#B<|mJ$kzGb3*p8{4uDpdm?$@`QQEWt|A{aw{4EGKXqP2YgvF3RHW2 zjLW+H9bZ=5?6ylASI~G*j4;JEAykxXQP6|33I}+BC(=_sO0?~&bY*(R+NT`W5U%Wm z5JzFU{CG9GADrDYm)OVzaJ~84cm!sdRh#Mcmv!ioXal=#Dx*|=C?FcfLV2tEk@Tv{ zCv9Fg#QAch5>f%3?Ar@gr$aVP$(1v1X4Rpv>}jD~YyOJVS6&_u+>Rj&3P!Pva*h=1 z7LecNLZ-FU3nssmq&s z-XG7$LTcvM=cHE+!~?y|>Oy-~uchbeM5oc_go2h6v$MZUHL696e zy!6=3;AV)I?KYW3P+?oJo`1R<5K!~x$xV8ybwM)E?OPyr#~;OMAv_3K-%yB~2-TnW z`y(2>)h5qD2(r$?5n}!Se)QfW& z0jDG}0QIp(Wsc-tVvqaAUU)2+?4mtx0XP^L)ytv}z1J2-_x>x9Rso%wkQC*6%?K{o ztY;8cDYr~|$KR@S&q|-vhFsu6$TaEH{FLMeq6@9yYfN@lZ5@g=d8tKx+Q3e<&S|lZj3IcKzJ1#1sjCv!5qRXcEkyNe z*F^KOc%j>Fcd6=V83r*>RYWSo2XT3_98S+l{)M#Qreg@LbN61FruQ9F~!1 zqvK5fv+Wa3;hgFgcM!}m98rlNdsq4eI9j5MP|)0%ySw*g8ov`#0{ffuv-A^0x@GT$ z+MS7)qUUht4>o(cd|@5Uji0m)l94$s54d@sqyF_eGLeTN-0T_zmX32U(#ks0@wx?q zvDkIAqu&I7uz|&<@q^i6?Stm*|H6uuO5h~8V-BH9Nx>cl4odrt`;1t;jQv&nuj)1v~ujlN7@+bz0ep+ZTVvr5rHzpx2R#h4>L~ zm?d||^q~y5^&RRcw_k_{G6TC{`-I7{_ZA#y^@)F#X&LXwn=iP(_dp%=EWM2IAjz_D z1vmU6D#3)>f*vPPhP*duB$W_8W*!eUI*Q2 z@>?9t1LAKH+?#MlBhm?ec)fkrp@s4A7L}!EtCcB>iu1rKu;z!7gwVue8A)^hUtody zKXF7DTss%5gT?|I-{=;4i1U~$cF1!I926D&P=+?gX-kWre?ue&v1Adhe?g=QLYsEm3T4gyZreR6Bc751?0v(Z`3l;Xer`ClsI8TYUn5jU)j~iWXB2;tV?N!55fV zGpZvkI{$P#EAy}pDufCJ!>kB>2FAWzCC?5SQ&};-S0GaHILmE)?~RVm*l{|apMOIF z&|<-+(RiWmPS%|ThD5tywM;BPIcsj$ojbsx~9g%k{5Ox4sPRbU0xJk zCrffeTrp>EBu$OV6kx6q=KC<`*wy8gInq|2ie6qbq6}eik>FTSL6dAyOImz*I$1pb z2Se_BFQbtKZWq~2 zm(!BmcE}kWFQJo)yKDY1*4fXkk08u<=L$DgSbU8$!rSeMhI*w!_=cpmhe=&a@~xlz zH=Xaz?*kAR6w@7e&Kx`g7p=Dm-npaTt@9S9BZfO(N;2>x|bV{Kl5g6#*;KloxN`U2n45|O340p= zyrXI44|g#~*{d{@-x3Z1yCdJ{X>nN?yq?b7nj`m>Grrm=@KpG6 zFrTj=T1HZClvJx4EOYq6idow^~M*g`j^0lVa0|i)n%j=d0x)YBd=+B35qE|+wrKqb1J7@H9Gx8fR zUoKD*^CLv76a1L0?a5jfKg8LWVQtVG+d^5pF3%>bc43+q-tIsIwgf#;F zX+im@&9?({gePxr)of(oNEkD3{OU>T!C|5zgV+moGZ<;QL*s8~ClM0R6$zbSOn*)gZLDGORK1xy+b zC}m&(d-`oA(@YG%H7Z%rVX(VL`$*O1CveweKr(}?Z+t%}z>|2_1ss%~`f!cM3PL<7 z44)=A_XNwk`|x-Z)Kn5dhL_wBeHz)|j{6S5r?}9M`~|=eaLN`6R(?W|;Q(`FSnian z;;aQ2k4)`9+mvCyKSm}R5)KYXq%W$rp*P3Ke#9s$GbZ~1m)r)O|4wi6p5=unqF-mfc3pUcW6n%lXFt2`<5pLzJYG%skK&qAZV70SdSJToZm3$$Qchp?;ZxsNg zl<7w{uFs`u5162-v1rh&bSuaA@%K&7<%E%TZqyCFkZu<=B_{zKe{#`EdoJEmq1_u9 zAQWo-;~5eYz1mO~$$ns6i&M;N*GtC}giy{PKK{yfsp41;KJR*n__)&dRWwplb{s}Z z?4(U1A!*du#Q`qiiX1B)#bLu|blgB-)tWSD6ASosJ;8~yhub`TTkWSFvWA*DQUjb) zgx5b@_#NJL@s>+5Ld#$zYt)J%+(-N8%cMrZ;u%fg-f2eV3n`Fa1DgChAfXB9v0n~q z4KSC-YQ2qzXSReD7h5xShWo!r?RSJQdX zEVzN1_^k01PUH>NUw@g1EtN-rA1B26wnkymu#xS!4@(BnxI1sjJUT^w1aig-ytOhHD>K8&nYn(6n1~-YJRsPYX0@Yh?jaT0`ULw z7`!-L2Ib6mCC@F~kdOYe?QkejWQq1LDZ&Hk{3j26NjUFEKV)JdCZ{TGXo7)J(N-2T z2JzE=Vda*xdIT;nM&qirUgFNupx(c!O;?xacFDj;2FN=^$!;7R-wKVdmla5;>WEW@ zt-(;7MjHKvB=ocqOS?-sz!>)S``ZJbOX{Xh2T#U-msNE_TD(TutHTpY^E}toqeA!B z^J9hl3{>f@;Bmq(&GYBYr!Tb`aq~y;ITui;p||GQnCg~Rqb-#c1&{m_iuNh=f%qTS zMXz{Gl|TNJP#kZKk7(0^8o{^Ze*NnN?_|kBXhHMu@%VU*w8oU}0G*T;!8p39XcPfk=%Z<E2iG32M3@cLO=Uo2%Q~$OX>dq{>y$wb8?EUrF~& zo=4;(pc`u(-l;-H{Gqd*{k;ZdJM7Ky@WIX2d+h_+CsG*h!FyD%5mAWN3rTV{d4DYQ ziXnbe3T61$*W4T&t!jEAcpF=xt$+aD2j8R3($BG$mkf>$q;@j7rffLzk}fWt0M+pn zgwmHX8JJ&mN&l>DKY3n~p%e5Zs_vIDs#U)(SgF^&cK*t4;SG382%SU2xZn-{`hLbw zVuqV9Kxj}EoPHVFW=U&JZYF>GQVyErZ&&3ckt$foOZg~md_|8$%~@xHWvG!CPaQgh z95W~pYe())!R{*e>7tkWE`bm-14K7ft}+>B=1Mr|xP;0f1mXwugMVQnZSthjT)BKK zK?SOtLTFQ(p2vOcL%p$jlh5ZFcb3qYP8NdSY4Y*n@a_a|DG2ssF3tepJ+bh*5;tlC ztI&S=TvtjBXaTZXuV8s6qldl9ZZ^V}>CqpHlbH}VPv`3x+@0M46KtZAtwLgDu3Xb$ z+q1_hXbN@qH8Aa|)T|V)W&`;9CRo9L++R)a+!}++ZTDevb$7PilGv)cQ zcd|iF)rD|leEx#Ym4iVjpiNtO23JL6^u_FP*ZP{s21`%1Gh_T| z8_15{bX;1CcV9(z!h;^uzt`i68s zU@J&evsE9S9nZ1flRQ7~ksq3M2l=*qE?lZZF5S}xwKi=4E9Io^YZdw}0UF`I;GEnX z3|~C4*#DR>!Uiexzw+qXutRYSau~~R_~CoFBfp)0Bt04&Cu>dD4oy)PKA)ysM3xu* zv+Z*P(z83-Rg}(vBN213@NOMi-(@_~^0EFe4ySvFbk6au4QS{R^Y&`(+y`&&r6vX& zob=?ApKBIQ!DzYO8+hE({o{-fP1eFH=I7*&E^fswi;wHzxOA+eaU*B3=eW}0rBz@c zl(U=SxV#qC@@jC;nX2To;vlEEI6FN)SCJ9E(t5)-%=sJO2$P?KKe78QV)xj4h!0cK z*KO9b|1d)O$4DjkiVrpraf@BvPqDZ(y4r@2ys!)OQC_PQ$YHccOAA!qECnoq$mq}8 zniV+x<+Ln3u6ys_XF|H%;=G!u8`PsHSFX3_nxE5&*DH?s(H@I4dY^JdWd2f?<<>vj zUgMUOH%7{CGSLi^PlaYM47#Mf^A>2H`f56$GxHslODWG%KFQ?!d)lxfpL_uw?aS&0 zhE$I4&>m+tsUjDR8`p+1TjYeh^OEJS{Zt?vMcAGh^VR$(>`kYSQ;aVk-P05WQi%nK z>1$o?n4mh-FzTwQ2{tD$C9gP}c9^SaPnO;vHu+`MC?k-|^zBoRjgT=Cf2>0VmU9>} zIg{7@!rJ#Mi)2x%fR29wmRg~pIRm<)j-D|dGX2;xa>_gYk%o(haqEaZsc3y*rT=7v zq-t*JP%R?|!z8)ry|jY(K79Hh(?f_Lz3GR6^j_WG6u=V9yYCv~`b*s!)Wo;!-Tp&L zaP7*1uDl*DGl3*m`G4BP4Z0+qA5#hyw)FMy>Wf%BixF6%Gr~(tsaK`}_ea3PP_I&7q?q<1w}gPi;$-K{VwO`fJNtYh@As3-=Gcw#ZRJ?o*e z!26jzt{k|%9sz-}6i_RZ^y@I9!v<#m3jsIB#Zk-X*hk!p`uvx=WQy78 zE^tyFP?$0|AX$1!Io|IHKZYn;K^JamXYWc6ALXrLliY*uO%PMMj>i9cM%T>!;Y)D3^tz{fR3-1(eY-8l{^lQj&61w_ z#j^(S77Lm){$ik7?Wnsq1J0>5lXZ#x8r8Xfp0UW>N?Pt+vO=YOpz1j;7d=2Ce6;z)?b_s6VAH_x+nyzgR8*E zf9tvlSaaKLN?(jGye<GvXLxrYS2L4lCFIrdS?Cdt(@bG59ksA0udn%g5|oT)xI6 zp2$7_&U<%1>)pv_7jP|eDCHcex$+;%Y!|anuaM~RG-YO)C}OzHp=Nq#o$PTNbe2rQ zbknkG3YqEUcAe2jglmw)l)jGj9FkCLtBqW;xy`|NQ;=>!0MX+u1ZhurqQ^wj%6_RfT=wTe+#xXt$Mu8C`V$8;xAk!MXuic^*lu%Q8Z@oV}w zkqw4x2E8Eo^dM<`zm5F-?++;LZlM!GFzUmky&wmf8?(|~1tKiCCjQyBXx*4{$|3za z{WXF@7rc*-KVjW2n3=C$a%Zf~+?{8-{%Laui^YNGC+ygeN-y2H!U(S{q+9q7gnvI- z|JlgTHN4iR?Am}`5Vv{P&)!24*qTz3!ZzriZ89%uxqLR9%cK3;%xht>r3~K@=tMd& z(pX2@{BJGaZ_xslUGQqZOZb*~@TH2Qiv=`gHS4OiMkxB4Z;@`z)2YXzztf!F?F921 zWRQ<18w44N#8rP(iM4}9Z8{kf%L z;=h(A9@%)6Oy^HfP(ZWqQDr{1^3S%DOct{(3mpq|rr^||uAWi}D^N-rPY?Nj922`+N-_g&-kfGxz_>wnW z`50Vm_gGu=Nk_d_((1T#)7F8k_onngb(F>j1hUO7i_(SF*2o@Cw+9F+*+YN^Ka^3W zgWA>-jj|2>*wGNL;d8h1=#onU;RDs{FMT$yAL*t&PIM#n&BDy4TyV(JO&@( zRc4H450fTmA%|)gKw;nl`1inei8?&&oIzKViT%9h2W!uA0rj zJ@-mqx{&Vd_n0x+gj^7~vzsM+?*sFku=b7xihAAN{t=$~-_@Mwk2O8D$TB+rU-zsy; z)a8i;k(HSusY}H(venAc%#|riGb%$=1o8kTD6C9PNlg?G5KYY^;t>%!?f3Zh>5o39 z@;yAy{oMC`UH5gp;W#W1#E^zrhc2SVLN=#`$ipvI>dZg5#goM{z#?@@DfZgZ3AtKb z*%u_Lr+B{pcY|}SROi#L7_X+&WHF0bGtI*3GInofY|2NBtKEUOpMy@_;<#!?xg83B zz?(hI`{|VvA%d%8Aw?Y;{{e?@nij};)`r1`bDc9^i9;hj9s@ZzL2uT#p{drRCJ!Vx zYfY0;7c+)y7Lh|eQlH-#jluJWwfXZgP{YvOOxndWMc;=M4hKthJ(b0XqF37UVMFkH zo@9e0B(L;Q6JG)J%liyjltSiBN7wBKPhf6l0bOGW2CitJ zO96`VI5~x5cwZy1^WfY6uQv`W-1N6o3Tp9(cF^b^1CFDN6U9PD|5}TnP<#v+qpO93 zo9TD94BkVzF!u12DcxZHeDKziM!4+NRL|_S&)1(^L~vs_LV@I993deVRGSan{|{4? z#?QA}UQ2<3^Bkh2tb+g_eIpJ-(JzRl!xQZji6I_lOwLQw2k=mkQF|b(1P1E!X~Q>l z`$#LLxwwM6#Zs-66p*WDCKdR|>LP<+AC)MM%@PB6)`J*BvbKyvqr&fqvtA$`=AZAk zh0P|Xuo$F5#pM6_!$a_jyzfddr?WahZ|aZW^yN@1jP?-tVNkFJpB64UB;o7A_2us( zfOy`jAF*{$SL|fUQpgVGsSc`{=f(IRBsM!z!4=QB9EqbhdC|Ua>{X5nV$De{UaCyP z?vR86KYkG>p_rkp?n(GE ztf_9Zuu_bhL4A)S=&b>4anB|^+Iz_UBVrjCAXEzGjySFJNTW`6k{bVRF`yvZq9oa5 zd~F{!$QgoeB;)A70B}6`@G|23mfgJ2EjqTc@)*>|CvLE|#?x(3EZcakD|8vhNB?J}j`XaWeN9^&&9ly5Y70)jI+!MDcMUs~oSYgcGFhC${J2`); z*T~cRvhTThcyy?EGR0%8))E*NCea@nj>4y*nVN&lqT`s~{Os`KV44SY*-ANcJiN`4 z$jBG2l{_w#$@o42xv^**of~*#xL~|u?b+Is{50B3gOCX;Mh>g&#>pBpjoBJFkX-2G z%wU1=?dwr@%k~RRK$lLNTJ7*B(}{{fXKc}g7g83kwvtcv=+Z&Wo$oW>6uLk^`(Q{j zr}dI0Vp2-ZgSgJbD<|Q8sWB(Bvyl;Z~RgjxnAZ(xbW;G?_I|b;Yyw+_KJ+WRu zKB-HyBTAZ%r8le_IG+WBBUJph8OiFOG>2HXQ={xt@sJPm4gkjeP|Q=(Oqad;lZT>< zM8wzvZ#nuUr~}n5**^-dW=2M&NAc&VZeaV`Gf|P+$Wj?u2kxhjlw4(hKC43(iq!c? z#0(cGF3G>V`HR9m=MpO2BM-?my5T?p$3_>{ylD2?7jb&gKN~-q*dwOfp4u||C%znJ z_pH+`bTNPAQ*p?BOoZxWESB;<ZS=fG{r7hrL zK?;8{onlugY90>WnkI$n?_(};m%F92+?#L=M3W#}gYk+tlSZ32x6*XSM{ST${{sr* zMdzb}DT9%o)Z|XZczKEHrNsYYUUf@f_XnoJ4tMXi9gKbd0ESd12^4w+J>ae5e9(dN%$4)vKA@MPCS>Hs|2=R3ePP|3>hrXy`RyPCK}w^^KIYtC(!Y zD<)Vg@oVW6;xr_>QTt;9kikIi$?%!`1?Z`L)^&c?AK-Z;nfV_ox@P5hcelusZ|J;+ zM(3bv2OU5YNn=L?iuek*K29635)_$=O{N0#n^P%{tj61eMy?2!-|)0a(2$Y4jl#}w z>liScWF#8grx>N;R~N$@wLrm@M)DjGot^IFOC09)4jGDMQ;;Rq|qqaHmg z_*q0ga6s#kP)fSkb*@Gr{G~bm-waPxhRG!=FRH4wA#}-8<*N#R%`Z-1<}UcKWLS6; z@~zSFc5(6`Ffv>8dsV;D5Kh|+Fj;;T6v1WU+gq(v%PQ6>qPTA!U$Wh3@9GN>#euJR zT2;dt1CrC1Sj>#g5+ptz+!ilWf7;>Jvcc>Osm(qE8I0k5m4?Z^ud4B^u$m%HJD-3L zZ3ao4Gno42^0R>ldeB4IiO9s0CU{`=Jgl&qMy)x9#Nt)L8iy0^u=5{gXQ>R#i#p8D z$Z#3JyXQr6*lhh`WK^_=ATjOUYWAU-hiMU6vHEQ=&KvMVhy0@xvEXoeP%lR*q4f2< zvjZL@9@O9K?w6JHAh>Iq7aUA3iN(ygYqc)&M=tL6w)<9T)QYjb3?Ux^-sk|MtOB0o z_({0}zqATfombJG>dU1>OEl$0YCzfYR`GAhl-bTGRHvpqa`i zSnNqdcx6`GzR4PP`Sg)%=$PY)*V18S=0x>c)!jx0Vq3s?M$DmtObB1$At+&^*0fct zd0(XR_vny=q1Y=!OF(0ULMNA_k zzo>)XD@*E3dq7;wcVHL=rmcT$Ve(RccrF_Xz?Su4Hie6Dm-_jK3&(1pceYb$^7E1R z0JVYOPyf9B1XRjX>@k-I*9wmrinjRN2|pk3I18CImLzOTm|A^un6)#8iHR(e{4Oj4 zPJ^cNq7(XvGfg!$0B!#>6TZ2=PHR~h0hnr*C{pzQ_D>Hrw6#Y<1Al?VBnTA2#&>vz zeQ(A+k(NFB-A2S(&==ZC)fXlAbNURqcL69ywML-orD5QifaOFDYHC8p0Hl)uX7Ry2 zQCxZ9jGfmJGr@z&moBI%Yt++rWJLl=Iu9r4DBsio0zvk8^+eXM@Z# zW(;X`EP7Kn2|Rgw;#3h=A9DvvP#`APmfr1qtXJsXyS{duu&04mnV}OX%=Q?#5RD*w z70$2URS{c%XsK_uK?HQ`{v&(5xWXP=gZZk={by@pHq@GO7v%t@>5F%u+FmmhsNB|P zi1ZJHlw$u8U)}KZ#crZQ;BmdJc?(u`zDy!aCX(f%$E9$2Xf1d>`4pRfAiXx>%dMu# zkf{`B{H3OL9p~3;0Od@2DZf8cY*#v0Se2_ikhof{>I^P2`$Zaj5{$C!=O=zgHzd6-}Iray@d9nHK7czPoY^D;IQmpHm^!8WZ zejSZH@uB)=_x0kg6>0-;nvZqTzjQjLdY#s;i84u+d-o}|2%C&ESWIlPgMG_Uy2f(| z45WzLb+}JiSVmduQy>K)h0ic=X%@4@Km~5u(cGzWrGdnU?3i5u@W=V zI*0L2fBNu#IyXI+;5(9s3a`694{TAh#H!bk`bsBz1w_>|W#gluC%NX!khI1K6}PzE zfU=bbDu`1JOidLsd?@tk!F9i#xE^aoas;?}wJ;zL=JmnBELeMmje8MV8iCCtfW}`M zcx>Gec=66W4@}Ra23~x+NWSQUNW0Kigt}DPydzipYjg^nV>*Q=MHo19a*y`bGZzFN z9S6I5;~7b&Da42hd!09ae|l?oMU_24ajU!2HD0Z$+tWG>+(s!WyD$yKsrCD)B*m(9 z)3|JD;NI2dW5ta=-`}V_LfWAj9=|+$M*Z-pR{|%unz4*4(S9qMO-TWxiHf`Fdi-?X z3e^Z|&U1(NQcrxPvUy`aH=osS=U|@?+NY1&A^Mn_2<$cUA&Yb4S0VgG!=q&2b4d`L zC^bR|2*+iP<@eDl=|6Tq*mt{tzU`zOY1v(zf#^l896Cy>hpi1OU7!?cjf3XA*5V21 z1s+FtQLhX~znosR0Z|mHr(1MQ@a$z>w$<`P83~ac(5H|puFVvC z-DH&h`Wvh3BfDoJX0l~|&jrko1&l8gcF^rSq}Zrbk9To(Lsh$He2$*?v+1Cm_;*9| zo;Fk>>iC0FbYf)#whz#YfA?Wc+;fBq0KEpq{3Ewc<*zHCLSDv@=yvuDc?jPZG)eUL zfkQkfrrd;x8MtSjKta|WP*Eb&((;u(Yne@zvnv@!ALDLOA|lhG3^#$2^XoL z;MbPR#LF?vC6=z(&L&#g2+n}5o~0#5U{D4KYi1fmzI8&!=`A|eA1c;Ay<@c^yZK;S z!=SyF%26;etk#SH5cHHI+nNw{<>$}9KzNTSUgLeiv%v;|V5g^masI;{LYgDS)%@QL zU`BE1x;L1Y2G(n|a~|#Jc9Gt`cJrMt7Ypa;oLNap^YB!xa2|YUp@pi^GJ9+zaBL<0 z#je$wls}7#u{Q`IlRQ$4!|hqD!m^c`c?PQjlvPXO(xi$tH&F?qzZI=#>1tw`1H-)N zO6iFVio2!CHvnVtEAIBB)up=8hIrfaU;vg{QEy6&(C%&5IQuL8Yzq656ajnh2&uML zX8{w`2I}gd?1oJC4AEl3ofrnu%UUO5lv%E!s7;XyS)L4g`0@GJp3cQ-x*w|(t{mw8 zGS9v6UiMFYbG9(8&4F1c8jN+|$L1K0x&LlZx{i?)%|g2^x-^gk%}@)cguuo(2pkS5 z0iM7QdECGSdPhGbOb*}_<6X6q&zVfZ$#pv~M&qcE zias>D?CkvQXxF=GP|FC;xk8w!NhKxpT3pemb@RShF||ibbZ#SQpGI4q=OjBQ@nF0UvC4 zRP@T6$Y@Mdh5~#47yKJnG!7ke3^+l8$bp)6w9LN*8I#ORg_~pOAWwL97Y-M=$9w0D zy2)YGfgsx8g*&6GCt8;BL zQp~5C2Ep8Wr{qf?5(Y0(E&!Vj2m4sJ=MYjQh_oe^@0p-8g8_&YMQBO|1NZc zZ-r%(pto#mw?}V6YmCyDrXcw~{()%oP)o6L@E$YicRTGC=-yV9B~D4ns6uN~SEjZA zbzYiwG!TJM$Gci$6%P!c!SDNS>jaS~kNw{VCAh1Br z>xyFK+&#bz(bZf0)K_MVJ~_o|jh&%oaCP57)2>CAl|U&(wU%zN@ILEkpWzz}ArBjs z;sJQAWAh;6hB;TKO3!mX%+l+5)2(?T&9C@cqZ*Lo_~94V5b1uURjCmzSqBAx{J2#5 z%Mh4YF=|?|nl1uzBadeS?~d`(8hGZFX!8nY7TCz|+;t5CF zqvK67hPL7wT{9@M=0{(Z?RyYYZ#QHoU!ILrV_HB9e1Uk!bbG{m;c>9#S5-H1d)AgG zn&u$??fPhC3RjbVX0x5ZC|rzb!v!<^%5<86V8~tRO4m=`Rh9+@8ASX!U`1}o22V&v z1i12#WjgO-(b=Y6rPR|VC8Y$#G*)ZqAs#}(O!!janlcBjbAA}GEOTAMPF4E-aN}`V zSKNJpeEiu;&+Po7qT#CID;7U9c7$mbh*V#n7*lgZ zxxm9X9Dh{56BIo3oaJuSxi^b(amwM@d@u(eAvUjhygJ$(X7|M<%qgFk@4Xum zpHPbPU(tHLSTMPJ?u{JTZ)W;4gx>;B0QnoiKfUqVA_XZp0rlT96|y)$B@c0$PHAC= zO-b}qi?Yc(I?swQJUT4Q{?WC~o)vDer((59Y}|=_wYU9^P@p~o()MXNpIx)3>ZF%q z>~J?FwpEwOMl{qn=-F|S0_c{IrtttD5i|QB_My_M2AjbQZH zf=%2)+=>ZFVKR#`?g}b%UJ1RF6_3)atX6q!T_`QQS0M?ZJgwni!lpwR^C-_5!?xN! z;4)FqMo_-TkM{ud@x~${hvq=%j+pn^0TN!`lh~|QO!9W}zZ()@dD-tVS4@tc%Z*bt z%VrsDvBf>VhX+qc!~KRQ(md`j%%2mud51$51`JvjHd+t4?gGh9(y4!^lBp}CVO_eY1e3Le!FRMN z$#XS?166tSlh{OgculorX4uSr{saYcu)d~Vp6qYRRhyuT2Nv-yIGd5-mJ;!7^_yJi z&tWnF&m3VKY||*HSgC7@Fj27*=9vw1)rVh;aw~#@7&*C^9qmNL~7`JK3?0*mhBageZ`bEczdhC~mn^k3g zCUV@qZ9cSt+0gwUjvBY7tnT?jz1r%raRL|yg6IvypUCl#ZZk} z516u6=pCuCbq!DK<&w(_8g=$RDre%N+LJVqPx(sH1Z{cl>S}Rx7LAH^dNbdmA!{5q zLKdg7E0h0ju%P>>VOSM?YxuM&wUP*OgLYY|So`(*?YtMh8je+1pZDY66T)p&Fzw2> zJO6A98_SA+(_RepH=|dJJ)1?6YCzTpG+^O^ME_R_TVD{58N=QHd^~&v zJ&#_W7`3?DGbQFK(0cE+KOU0`I_yaBpPkKpsvwc=FXCre=NvXihlpAk$TLs z*VD&df(j2}Nag~NEbB=OW+Ir}5gNi#*d!x8=KD3fI*5K4R|?ePXeY0ELRd%RtJ-~H zcg&$`5#hLsL=_uUo7E_W3?C`elV?SQB>DDB-M;B6e|52u@AqKT;#!m%w#g-7{9$=t zmX8Q$I!lXOH6Wob&8@{UqxbO8A$WeR`5<7Hf~TdTQ-7U-r#1=jzym7~Xn5foHi``H zHi2+~@}HujhVt&N46#gE5f_EP8-ImXAzaxMeH+z7`2`5^pM`6_Tik@MZmB30%_5N4rvJw5F`4bBFORI9KXcgZ#x-E*ZZ9VwrWkO{ga<0Jziy{ehA(gka8anhg|BLUGlBXVWd$IAayT` z146*C=1hepwR*9#{lEByyYLw2I0xHo(9$IOll2}!{rAj`V(#T1sLU&ELvqlhYMM9c$Yp=g<_Zz9jQZOxEDlc1MDj>d)v%wSQ2oMg85mCT%R0sQ=t%@Pxk=7})Dkl^0?nGNRB0 z_d!-vIBL0f(UEW)rbtH)55%v#CD@+bVHf`Bv9qRW`f>s_sGoJdg|+ z6)?_FGba-E%;nm|QwdY$KL19uLTip-@jrof11cCq00)4(wkE(MME(t)007Z^ z4QvH!Lx!cM3uy#M4Coe{w40ciyn9|CB?M=Q0C~7`q zNP?q%7+Teu=~%&6*suQGaQY>1SE+S|g_it2V-ULo-(=EYmrXbcK-p(}?5En`D;(?i(!Ejkj1DiY9O9kpK2LpPSQ|RGHBMO~? z?;(n_I*{8d7+tci1|1Ikgdib^Ahg5n#1(LdN;&85mrW#~7V>hFlI!gU;JW) z-GTl&s{Owk>Wrm{hN8`Q)g0TLWCWs-8O%8)xF91H!Z-A(hz#)JNs`{ZK?s2Gs?7|t zLsu$~mO5N)xDl=m9)Ae{J`gw|j6g@;UQ%5>3rJ(^y9byct(P%oAz-XMYPKQd9AAED zd0pV_&`kHsA{gQS9Gk~bq4`YQgYLQcSt8lwdC7#|56!?VL0dR~UR?y*QTQhTqvc0ZDH=Dk%bdWftg56RMNH^p$Pt2*HKOcjs$ZW$_@^>y?iyk+% z@r?cFL8A2RE_U}d)Yr{ZM^fBB+ok_Ov{|Z1t_S2ST}IaKSESaH+M4sTraPAn&56M$ zv>q#Q$3X#8-vf})o`$9BX8D`y;MMIex9z-~AuAwXg8DBV zm~FPa4(@W5u`bp*IZ>iQWu*J-Hj_^!#^rvpGL#dzn&90%4u&lBkKHbTd7`)$Ro3Ol z=UW|gpjyli?;oxWgPon^#X7@&*w&aa5p2m-t^z*TKQV81j&tarW-;#|1|)j)IT`o{ zjD#%`PRbz1+nfQM zdsyi|o52Mo6i-Gpd?vDVx!Y**Q%|8Yj{f}N^C$YN!-PjKj<(FQpFE0O*NV~L}JJ!kP8HkXz9d%Y?agVSsO6bPZqC8xp%ERN` z7O=CYdkoDs-6e1#2jnnYEeX-Kx2hrhS%{op_bCyaJLa>G%QBQ9xrOvebxB|4Ho|yH zP0eWjfBxO@YbB7iW3@{-?U?_yrm_v0|89`;8`(X^YTj%Lfe|~Q}-!pp> zbDogW%)k3W#)1o(4O}Ru(9$%z3yY}Q_)M)-!^z3Tza9jEMg4xq-|4nLf)A`GB zpKP)`I<9OgohSfngg}IUShUL{{=O28{XXs=@Z9fwZN~N2A0T7k7AyL^dCk{|p5=Ao zcsRD>izw#OI0fTnp=`kZGpt;KV$-?QusK6vU>`dnb24(3twOl)p03j%gSL+f(e zPS~j@Th(ihFC-|*%Gn3}p&l^K9@k2Il##Dlrhk5`bKdafzZ-T)MrU?`s0OWT2V6K1 zD`?c|EXTh1IS!8+nuh_DkiKf}hxs_U?CrtBKE58v*yuLj%-@8*5adn;ZS1D?qH7`+ z9lz|`3OaVRgwlGCu7%;YJoC4f-*WqIHr8W~8Si3fAi6G~sUg zE?QCx`hLrsTjzC+LonYcOyvMBXGzGPTU{@7`>xJsiNlep3rE?Sbao% z5!dnX^io#y_DRCk6qpnNVu?(G?J$8|h+f6z|F-WYh_3{cc%HYkUC(mNIv4FLm zNJX4aNu%Is62pMl++T@sZOTfTuJju9MOssbKRr64^zsKnv{CW@!M}KEwKDaFq_to? zi32f+*Q4wMyNq( zHRMRP)ovu%kM00#0HiaJn5v8w8x#{?22^yU06nJ~GgiPE7SnBz)YsKHr=ZYv01Gob z@`PlK963zL(bs{a;3uXQDIy)h%|RxC(`8lO%3n?AOMO0G#JvJPTE$j%1Ezldnx?uj z(&1XOM(R)aEn)nK{()Ta?SKrC0T6iblDZDnq{T*HQd+ylhk%UzF=3qp5U=X9RfgKn z?aldU^#01!wUTN*2HrC(Oo8E}8fn?)p3uf)gztG!IdQf(QFY^=t}YscUqv67!`IUc zeX*Dn(2%6sgwHEZ0`}R=Q^C!lST5g-E|KpMX9hIBu)ahpE$u25>2bjv$T)a;tHB2q zM5!HII5BDP;4Z;$3hlw>x0*U*ARbMN(!J^3ZnlkyL0?O}mZtjS57kQuA25uU6-7na z`lDra+Dp@r>F>gUSf2pd#VDnD2n>a=!^4&KVaz@D3fgVywcqRwT_y31fD&GWie5LE z&(Ie?M23aYt)^i?&lkW0aT<;Q;f-B<&_3`-ds;JoQtEtyiJ!{s^ZmPt0i+4zj`u;7 z%RsUwrZ1$%>{sLlFCFJvP^7|DhOZ2{mU#zavh zzvfKa&(6i0%E7>tHy$Qx$((v2( zT@1*Y2K3N8>U(Ar^$!6AA6q?tJYVUC|9J3J65?Q8eZ4bmU9bjd+iE^Yrfw!RB=6G3 z342VLMJdh%oH2Oq@ ztYJX4HpgG2J|Fp=t$kgz>>+s3K!EY0J!BXa$WkI&v94#hvV(v!mp{3B+%^w}u49PWpqarV_^dtL#_s0FZ&RRtP;%qD`woo>p zwE%(QBc*d0`gW>mKSPeuqakuL7 zySm!;0fQ90PnT;=wTvL(e#Ql*sIj7m;e6M&Jbvp80C*WMeVb~mu4=7E{0%)&^9-q$ z4Mo@p8?|3KWfi(H89&i8f@mz846X+tw{jVE^5rWg`PsH3bw(tycoTzNA78^Di#I@) zSNja$Ti(2gJw4-!kauB%k^8!ZVA4m#ja=tE;D7Y1&-NFAX`CcVrUc@z^jGp+8h$mY zjz8!d6fO=A)4v3bisTpLJ(vcLirH+k!qB^XwXbWQJ{d<{tznE03?V0ZfoV#Ud|W!q z0TRV(2EmJGi!3hi4y*`+#}F|rgzNf3_6LzH?~PiZ*2c=rTo40`O#I z=G0);DFo2I2`x))e>lt#zTo^^5r~Q5US+ZCy9PXjL_<~k0ySR;ZG9$SAfv~q^BQZ3 z{4s06_>VZ-|8v=tM<1Yrc1L8yWwIG}wJYiT%;)m6y~8j;wKBkN({$aG-AU>ZVNTr6 z5JIfI-p*RH*N4vH3)~;=@_j*7f@K9WD-OP{XK;Ie_^ch+^)V0us2wvqbA1sZ+T=UQ zKua1)UOz+ohNU)+O?yYQNUL-G9?}YRj2O}vYg_a#ba>;vKhyh*d$LzBCGNWv`zETS zw)3{FPoC0qyMe0qx36|j^K+8=CSuV?e#Go9Bs5RsQQXvJ?aLc=^ZMiA?XNle7K2F- ze=}%>wk8w7{tubq@@*lCYXqS1<7lZpr$)xLWq5;+#*#?5R&OQ80Bj;wUw=!`($9 z{CC4K&DjRqC>eeAx#rzq z>=mHn?r;onW$^l#x596Lx6FTy=tk#+kjvfiPM|gmKi{)8AZhZ%s0fOcQxK~CkIN38 zJf|?zAu$!0eK=A%@oKSCLsDaX(=}jGt2{|H-laa6dEP=%RFNefDdG9o$i#sCB@Yvn z<~8T!y84D*_0pw<>T{~q*V_y~&1Xrg;20+u{71HS>$gDHyCLsz+l#bcMMQh9J9g>& z$)=qwmK?9%JiemDOH`<<+C9xpAaOsdjnZX_ESw$`gNd#TtFKVF@*cqWP=%nT8?yf0 z;E3o87Pc)d85`S`DkcZIhE-jYIu6V?Bc+iZYpe>bTkrGc?`s)oi#_N6=n$3K#|7QQ z|4flWf(~{F=08Q%I}@c_W6PgknBrkdN-sy;h*_T-Xif*#e)08qh0!|)`}h@%xhqlW zPKgASf7U9|S`G91R>t_y$lz1suW~xTR~w3{uv#nW*J#)Q?UkO{MuyPARhU59R+C#% zC^}1+Ax^nq9dQ4p%zrT@$dy~yd)moeww4ILhx>oa7|yW=(e^JbS?eMi7>v`J}s zye;5AC|&YB7qW;WXX`%LHMtdeCuFs+XUJL@f`i{Lls$30os>~}`DjT^A2<^1u~Vmy z-F;YQZDW(ByIUBvf+orC*7nBDQ9X&yEDzvCw*(|K8Fons*U0)U`tM8VfR8{Ek>GV8 zm^Eq-l_b0fCDy1wrR(FH_%_#~kSz8k-H%W~{h1n(#ZebYG${c8YdPXAEEfluzfq}> zUOSHg0L#}&-;DNzi00!6ir3YKwyRear`TgFm5OifwfYWKCSnXl;BW)n3u^U*@Pkzy zjwUxCk1U@Z7r4h)1wo@i9R6X z2BI#!RcKE;Q9`jrr#KZKI-cMKiJ9?uXJ>=1$I7nQM>ICAH=go2Co9R0ez5GpYQpHd zph1Se-*~eXoXJHg&nKdzy)<^i;?&Amj}Z%FmbeoK<~(>Y;Cg#BFpV?Z*K%f7ay?d&)qw>f5iaD4 zVcTm`bM}k6f4YQYe_$}MBbAvRtL4?a_Yc};hPr3wq}uO+#nOCuV)Y=#jN{Pzj>B~l zHgGZQ-Z_z}iut#kSThO9ODB|K(y&;=1CRCQ;IL922D_J;miW;oZ>RBWsnD5_DuD9< zQBdyaeaX7R4_+@C*JqI`GaR-35|AkWo>1JDjs94IjCu>~gdiT`)T`A>B12DWvI*lf ztF>cLSL)`j6Fr;NA$=Pa+_$gsPYpr9A}IU^|GbcEp0pTImRausmiFtuRpNejP81fvFqQ zo|o27aM=6#Ri!^EV^)z_xctZlHIz1Vka&xZb#>o~Kv25>-0YNs|0F!rK$`I|5-4%- z;Z{v6gUYCozQFyC)B~C{=n#T1=(1=--!&xP_sinBhEY@<#+0gJLk}`GY&6_46sq;E zA?<%;IjM8cEIK~w|CL$bV>%q8HOIZk`Doz%b8+6x1G`<{ePJ1rGu((Pd>@JWDj;*P z2 z^BzA-oF-B;TjNJ5JPJgC{GsnOKi)1*5vNetDo4+isAW;oMk=BwH{2ezGq(}zYV$IS zr}~TObOW+x0}pxgaa3?ZbljJl;5{8%@RZK=y}1eQyh>jNh5R8LW2B^KTT28wWxvpw z>C^-tn)?s_BQiudanJPg15xB*pwO7%4c045T?{c(m%Y(2@5jc{5haK-s((zp#CE#*5qUx!Lv^JDld{XM2cpp%9?% zmIO-8&Shic%;d%QMUrOWGdlV=fFjwa)HzK1`sZ4@+<2{7;UlMnOqJwsmfde<`hESX zy#SwRU==@dw{^3$%z?4InPZsY=PeY4K8VZj)hz#gVrjMaR-M z`{v!&M#+)BgzG1azw%Ejn>K@e-m$54Tp~k)x=p0dg53wS;9Z$PoMWuE{4z64IRr_2ZWf>C#09ncCgW{DlMz8p`rtijn$S{xT>-LBU$MdXAXN zViuqi8a`KmegOX%|KlajwmMAiF)X$!7h02o?z;ev2yo*)hEMhMDv$r@pv=Y9KdE+e zFCBCJmC%}bHg= zg$CYLa2bsAK$#1a=kzwtsuV>;)!%HT-+@GPzr?Fet}PDwwc zOqR}{9CRlm?*;yoev^Ffig2F@`pW4Bw0#4Zt3YWECP}Pr&D!tm?!Nr_GF3J{P6kKB zS-Oj!_z6MHXx}^unNEjpRJAODC_|`HQuoFi1Y;HmMT8!-jRE|fC7-ORB?>74H~pg+ zV;Km%9o{IjC*<)()2h?3I?R%b@ofTeF(~y=p8|%OBE;$_#usX`FEpu}ur@#5HZFdset59i*@coO2Do3!j2sXDNn!7X&x@|qAw5Yed&(anzC8|7~ zi-5!k;y5v0n?b+2;6AVW&ai7eC!yEq3-m|3mxPVmQ~VhmbxkCOB$G`^xGI0?anScJ zY%RLq%artTL4A6%{Y~6qS>2Z(h^MXy)G|C{mDqi<7TF~A@) zeuY(Mo>jY2QVUSdQ0maM1fmMAXuWleXz-*N`SKak?Y~JcsQ<`3w@Dx?1+4?{M*-?L zf{&^c)0XZ*7@_WW6m$-5x6bXU)xvrw23Q;k;blet=~)+O`pHB0=nu88NE0i15#VFV(9Y$)5gYoxFx^>J|A`tj9ZfbIy!0OI=jVXG{i1Ms$fWJM;5>isD9ms7O0yyggYcpi?oH_OY8=;CwXkKO44k+9d=k}T z9@WHVnVyseyM>M*jp4qRdVKrrVjWK0SFxL{n7C?u&#?5U^vo#AM9sUvuVx@97GENl z_dSJNraUgFoVibce$NjA*C@wH)*F`N?q_2ha_!xh28c^0jXYLwt*d9%ds>Ik`(^C_{ ztkIJ~@lY%XO0c&@MXK^vJb%v69+d(BJ*=WN@Zm%yvNhHw6ymFr&)ltqhMu!K<#@S3 z+r9T%;z<5}bdj(D)}r_ttTE7f15_R&cNz(~zVg*afpABm3an*{A~_o}slY-1{ z!JN89)7od)*dO|HDQ_sM`xq(YX2i^wvP|cGTHjgik4;ungwr1uktRnk9dw2oQ>F3V zhuO-Bhap4W^L@~TJ|Z(u`=nzL+QJOCUl81*;?bCt`UyF@&CaGhUIWv6AhobAZk_O%3P|UCz8yZt?^EEf^11wV@pDw6GC$8$I2=^_eQNq- zm~i7Y*7P~Z^is3!*-D?xN|~KZF|8WY7_1Aj-=gidOXUaLW{wjM# zYj1Op%tfDn&``{kKbsC@Yxi@H_ZT3los*vG2r68LtGFUEZ6GeMgd2@yWH_pEX(Q}h z1iK{#UBZ^yH-cB|!d*-pEhOhNFg?Z{BW2`E^ZKJ}3){oM+Cc@zXCK^@_askGH4sv+ zwb`_F9g}YiDLvxtxok58a=W$T{VlzZE7}Vo#V@6Z;JQWFtxLcO42X(!mEMM6rqjY7 zjp3r8%?m@dc5$tWVKHQK-rynsg9F4PCdFAIRZlJM-ZE%ljm;alHh~wQ#N8K$;7D<< zv_-_{LMV?smpZ8^EZoUY2$vQ)r8FR6X9Q(8>mSm4Ax%o2JL3NqJqQ?53A;qvQ;R3T zkY$5bU#RgQvx{VpfmQ&F5UsJNreUs#P*bS&f}sg4>7k%6Q~g$bMW%EAZfIMb0h8nX ztN{rei647-@!+{Y>_LYseaQ`upEQ1*4s-a7?<>#64KmlJ!t+~&kguA;?R1c2^RsNL zMMpYf$re&;;Hfg=0o$P5ri1>?Lc=Y`2uwU(oDCuom|$rUGTl6{B#UKET#&(7B|l$~ z!1WX*b#bu_UVqW?Kb1w@lX;x`ZbTPh0S@co+m;8oA8Zv4)Ws_f zw*Kk;^`iQW`5HXgShJ)>4aiNGpn375aW!aCj0)%^B&SMMuMLG^#2f&eZ9ntY$!UZ( z8}|@*_kWwXU6y`gaZmKQCsw-$5Bx`A-DP%J8Losm(wEjsytW_B8*szos?^8dnx??F zPuOzhb9w3J`MXn%74SVyuw>$N5ux*jSJr{%|v(<*NyMH(rJx64t*xttVZm))f!J-4^qsdu&E zWpHa`O3*4XEh2WZ?W`0q?ldZbQCGKd76<9k988^`%^Nk^4*Q4IP1x}W9bE*7D6hbS z-+5oaV9hN3Vz9tMK{8jy0pG_g1^Ez zXcDLg{Q`PDNfydpkB$}XUo&SOB@RcFFDx7aO*+lf0}9ks*(?}#QiRaANP!$s;yUTc z4_okj#=A1C1mpTTBVVnd`X-*;mxC+wV>kBBDS-8Lx3DoS(rVNuWoaAR#>@^|5(uKR zvs0m8_p;u!4+!(tX&rR9Z4S0c^m-#H^>B=)`ENkBhzGC_Dd!DFX4S&-W?wpiDWQ1) zW&;bpt)jielY9Cbvy+u!1nub#8r{xQP^mpQ1l05l;d1L1yx6%RBx?4Cg19mrQt$3G zZ9Bh7NUg#^rcsNl{EATZ4c}U;DW)0ROP}?UhVCbAJ@-8(T;b3~DfPH~LyPbdbg&k` z_*z-FKIx~)x8XlGCUuhNlyn+u8(?RDx-mh}nvo{AmB zU$h{_CC5}9Sfym*d#KhA-O(9`A=gU{_=RnEX;w=Bc(PZf9S{x`=ns{sz5&gA6?lD- z=OsWt*04!)4)x44Cu$xtJyfcK4zH;g&vk5KSDj(@>>_{$Nl+SscIGA((w1fb+0 z)+tPo)@ki8r;m7EyT&~-m9}tUYBdGseEL1$>sVzKQrg9aUPC@nqaJ;QzvFReLG@@v z$P^XxC)(yjCC>93c>sQ(?wYEF~0%J)z=A0R&XtLrfI zTKnjs#%q=S5oIX!w%KN6WZx&k{Txj8|>0f@(l(KRdu@C!&O{vb|aOCWz>@04rf z?_k}>1i!OPnKhc|*%0AR_o|4VO^n4i_ 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≀E+>3SMA*_Wddzew1IS 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℘hl89$rm^szxNtD)=7zl@bsE|C!11%zk;ZkS51 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ζ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 z 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�OxsaTv9lw=&L$cbNw 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ⅅ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 + + + + + + +

    +
    +

    Игры

    + +
    +

    + OGS Mahjong 1 +

    +
    + +

    Игра в жанрах "Пасьянс Маджонг" и "Шисен-Сё" с симпатичной 3D графикой и спокойным саундтреком.. . .

    +
    + +
    +
    +

    + Маджонг 2 (в разработке) +

    +
    +

    Снимок Маджонга

    +

    Перевыпуск OGS Mahjong 1, теперь прямо в веб-браузере. Попробуйте прямо сейчас!

    +

    . . .

    +
    + +
    + + + +
    + + diff --git a/ru/game/index.template b/ru/game/index.template new file mode 100644 index 0000000..4f70370 --- /dev/null +++ b/ru/game/index.template @@ -0,0 +1,106 @@ + + + + + + + + +
    +

    Игры

    + +PSKOV_PREVIEWS + + +
    + + diff --git a/ru/game/item.template b/ru/game/item.template new file mode 100644 index 0000000..36b1100 --- /dev/null +++ b/ru/game/item.template @@ -0,0 +1,118 @@ + + + + + + + + +
    +

    В играх...

    +
    +

    + PSKOV_ITEM_TITLE +

    +
    +PSKOV_ITEM_CONTENTS +
    +
    + +
    + + diff --git a/ru/game/mahjong.html b/ru/game/mahjong.html new file mode 100644 index 0000000..1b8bd0c --- /dev/null +++ b/ru/game/mahjong.html @@ -0,0 +1,119 @@ + + + + + + + + +
    +

    В играх...

    +
    +

    + Маджонг 2 (в разработке) +

    +
    +

    Снимок Маджонга

    +

    Перевыпуск OGS Mahjong 1, теперь прямо в веб-браузере. Попробуйте прямо сейчас!

    +
    +
    + +
    + + diff --git a/ru/game/mahjong.md b/ru/game/mahjong.md new file mode 100644 index 0000000..90a66c5 --- /dev/null +++ b/ru/game/mahjong.md @@ -0,0 +1,10 @@ +Title: Маджонг 2 (в разработке) +Slug: mahjong +Lang: en + +![Снимок Маджонга][mahjong-screenshot] + +Перевыпуск OGS Mahjong 1, теперь прямо в веб-браузере. [Попробуйте прямо сейчас!][mahjong] + +[mahjong-screenshot]: ../../images/ogs-mahjong-2-screenshot.png +[mahjong]: http://opengamestudio.org/mahjong diff --git a/ru/game/ogs-mahjong-1.html b/ru/game/ogs-mahjong-1.html new file mode 100644 index 0000000..c744d8c --- /dev/null +++ b/ru/game/ogs-mahjong-1.html @@ -0,0 +1,150 @@ + + + + + + + + +
    +

    В играх...

    +
    +

    + OGS Mahjong 1 +

    +
    + +

    Игра в жанрах "Пасьянс Маджонг" и "Шисен-Сё" с симпатичной 3D графикой и спокойным саундтреком.

    +

    Особенности

    +
      +
    • 3 режима игры: Пасьянс Маджонг, Шисен-сё и Шисен-сё с гравитацией.
    • +
    • Более 150 раскладок. Совместимость с форматом раскладок KMahjongg.
    • +
    • Редактор раскладок с возможностью быстро проверить раскладку в игре.
    • +
    • Поддержка тем для фишек.
    • +
    • 4 темы: "Классика", "Нео-классика", "Цветы", "Дистрибутивы".
    • +
    • Поддержка фонов.
    • +
    • 3 фона: "Комната", "Комната упрощенная" и "Внутри Компьютера".
    • +
    • Поддержка сохранения и загрузки.
    • +
    • Подсказки и перемешивание.
    • +
    • Неограниченная возможность отмены хода.
    • +
    • Анимации камеры и динамическая камера, следящая за курсором.
    • +
    • "Подсветка" слоев для облегчения восприятия раскладки.
    • +
    • 6 языков: русский, английский, немецкий, французский, испанский и хинди.
    • +
    • Онлайн рейтинг.
    • +
    • Определение оптимальных настроек графики при первом запуске игры.
    • +
    +

    Базовая версия

    + +

    Версия Deluxe

    +

    Если вам нравится то, что мы делаем, вы можете поддержать нас, купив версию Deluxe.

    +

    В OGS Mahjong Deluxe вы найдете две дополнительных темы фишек: "Восток" и "Спорт".

    + +
    +
    + +
    + + diff --git a/ru/game/ogs-mahjong-1.md b/ru/game/ogs-mahjong-1.md new file mode 100644 index 0000000..9c6f88f --- /dev/null +++ b/ru/game/ogs-mahjong-1.md @@ -0,0 +1,42 @@ +Title: OGS Mahjong 1 +Slug: ogs-mahjong-1 +Lang: ru + + + +Игра в жанрах "Пасьянс Маджонг" и "Шисен-Сё" с симпатичной 3D графикой и спокойным саундтреком. + +**Особенности** + +* 3 режима игры: Пасьянс Маджонг, Шисен-сё и Шисен-сё с гравитацией. +* Более 150 раскладок. Совместимость с форматом раскладок KMahjongg. +* Редактор раскладок с возможностью быстро проверить раскладку в игре. +* Поддержка тем для фишек. +* 4 темы: "Классика", "Нео-классика", "Цветы", "Дистрибутивы". +* Поддержка фонов. +* 3 фона: "Комната", "Комната упрощенная" и "Внутри Компьютера". +* Поддержка сохранения и загрузки. +* Подсказки и перемешивание. +* Неограниченная возможность отмены хода. +* Анимации камеры и динамическая камера, следящая за курсором. +* "Подсветка" слоев для облегчения восприятия раскладки. +* 6 языков: русский, английский, немецкий, французский, испанский и хинди. +* Онлайн рейтинг. +* Определение оптимальных настроек графики при первом запуске игры. + +**Базовая версия** + +- [For Windows (exe)](http://sourceforge.net/projects/osrpgcreation/files/Mahjong/1.1.0/ogs-mahjong-1.1.0-windows32.exe/download "Download ogs-mahjong-1.1.0-windows32.exe") (40 MB) +- [For Windows, with editor and additional music (exe)](http://sourceforge.net/projects/osrpgcreation/files/Mahjong/1.1.0/ogs-mahjong-full-1.1.0-windows32.exe/download "Download ogs-mahjong-1.1.0-full-windows32.exe") (123 MB) +- [For Linux64 (tar.lzma)](http://sourceforge.net/projects/osrpgcreation/files/Mahjong/1.1.0/ogs-mahjong-1.1.0-linux64.tar.lzma/download "Download ogs-mahjong-1.1.0-linux64.tar.lzma") (37 MB) +- [For Linux64, with editor and additional music (tar.lzma)](http://sourceforge.net/projects/osrpgcreation/files/Mahjong/1.1.0/ogs-mahjong-full-1.1.0-linux64.tar.lzma/download "Download ogs-mahjong-1.1.0-full-linux64.tar.lzma") (110 MB) +- [For Linux32 (tar.lzma)](http://sourceforge.net/projects/osrpgcreation/files/Mahjong/1.1.0/ogs-mahjong-1.1.0-linux32.tar.lzma/download "Download ogs-mahjong-1.1.0-linux32.tar.lzma") (37 MB) +- [For Linux32, with editor and additional music (tar.lzma)](http://sourceforge.net/projects/osrpgcreation/files/Mahjong/1.1.0/ogs-mahjong-full-1.1.0-linux32.tar.lzma/download "Download ogs-mahjong-1.1.0-full-linux32.tar.lzma") (110 MB) + +**Версия Deluxe** + +Если вам нравится то, что мы делаем, вы можете поддержать нас, купив версию Deluxe. + +В **OGS Mahjong Deluxe** вы найдете две дополнительных темы фишек: "Восток" и "Спорт". + + diff --git a/ru/game/pagination.next.template b/ru/game/pagination.next.template new file mode 100644 index 0000000..f32f666 --- /dev/null +++ b/ru/game/pagination.next.template @@ -0,0 +1,4 @@ +

    Страница PSKOV_PAGE_ID из PSKOV_PAGES_COUNT

    +

    + Старее » +

    diff --git a/ru/game/pagination.prev.template b/ru/game/pagination.prev.template new file mode 100644 index 0000000..169d5df --- /dev/null +++ b/ru/game/pagination.prev.template @@ -0,0 +1,4 @@ +

    Страница PSKOV_PAGE_ID из PSKOV_PAGES_COUNT

    +

    + « Новее +

    diff --git a/ru/game/pagination.template b/ru/game/pagination.template new file mode 100644 index 0000000..f1e586e --- /dev/null +++ b/ru/game/pagination.template @@ -0,0 +1,5 @@ +

    Страница PSKOV_PAGE_ID из PSKOV_PAGES_COUNT

    +

    + « Новее + Старее » +

    diff --git a/ru/game/preview.template b/ru/game/preview.template new file mode 100644 index 0000000..9d72895 --- /dev/null +++ b/ru/game/preview.template @@ -0,0 +1,11 @@ +
    +

    + PSKOV_ITEM_TITLE +

    +
    +PSKOV_PREVIEW +
    + +
    diff --git a/ru/index.html b/ru/index.html new file mode 100644 index 0000000..1d104bb --- /dev/null +++ b/ru/index.html @@ -0,0 +1,4 @@ + + + + diff --git a/ru/news/2014-12-31_2014-another-year-passed.md b/ru/news/2014-12-31_2014-another-year-passed.md new file mode 100644 index 0000000..593af1f --- /dev/null +++ b/ru/news/2014-12-31_2014-another-year-passed.md @@ -0,0 +1,13 @@ +Title: И вот прошел еще один год +Date: 2014-12-31 12:00 +Category: News +Slug: 2014-another-year-passed +Lang: ru + +Привет. + +Подходит к концу год, в течение которого мы разместили на сайте рекордно малое количество новостей. Мы не прекратили разработку, однако пока она находится в фазе "показывать нечего", а свободного времени, которое можно уделять проекту, у каждого из его участников сейчас найдется редко больше чем 30-40 часов в месяц. + +Но работа продвигается, и подробнее о ней расскажет [статья нашего программиста Михаила Капелько][exaggerated-expectations]. + +[exaggerated-expectations]: exaggerated-expectations.html diff --git a/ru/news/2014-12-31_user-servey-finish-promise.md b/ru/news/2014-12-31_user-servey-finish-promise.md new file mode 100644 index 0000000..5368548 --- /dev/null +++ b/ru/news/2014-12-31_user-servey-finish-promise.md @@ -0,0 +1,15 @@ +Title: Окончание опроса +Date: 2014-12-31 11:00 +Category: News +Slug: user-servey-finish-promise +Lang: ru + +Около года назад мы начинали опрос, с помощью которого планировали узнать ваше отношение к Open Source вообще и нашему проекту в частности. Сегодня мы его завершаем. Ответы набирались довольно медленно, но в целом мы собрали довольно приличное ответов, за что вам очень благодарны. + +Сделанными выводами мы обязательно поделимся в одной из ближайших статей. + +После завершения опроса для каждого из его участников был сгенерирован код. С помощью этого кода вы сможете получить доступ к альфа-тестированию OGS Mahjong 2, как только оно начнется (не могу обещать конкретных дат, но мы планируем запустить его в 2015 году), а также, на выбор, deluxe-версию OGS Mahjong 2 либо deluxe-версию Shuan, когда разработка этих игр будет закончена. + +От всей души желаем всем счастливого Нового Года. Спасибо что вы с нами. И до встречи в следующем году. + +P.S. Если вы участвовали в опросе и потеряли свой код - напишите нам, и мы что-нибудь придумаем. diff --git a/ru/news/2014-another-year-passed.html b/ru/news/2014-another-year-passed.html index 34044f5..3a8822f 100644 --- a/ru/news/2014-another-year-passed.html +++ b/ru/news/2014-another-year-passed.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,31 +87,37 @@ -
    -

    В новостях

    -
    -

    - И вот прошел еще один год -

    -

    - 2014-12-31 12:00 -

    -
    -

    Привет.

    -

    Подходит к концу год, в течение которого мы разместили на сайте рекордно малое количество новостей. Мы не прекратили разработку, однако пока она находится в фазе “показывать нечего”, а свободного времени, которое можно уделять проекту, у каждого из его участников сейчас найдется редко больше чем 30-40 часов в месяц.

    +
    +

    В новостях...

    +
    +

    + И вот прошел еще один год +

    +

    + 2014-12-31 12:00 +

    +
    +

    Привет.

    +

    Подходит к концу год, в течение которого мы разместили на сайте рекордно малое количество новостей. Мы не прекратили разработку, однако пока она находится в фазе "показывать нечего", а свободного времени, которое можно уделять проекту, у каждого из его участников сейчас найдется редко больше чем 30-40 часов в месяц.

    Но работа продвигается, и подробнее о ней расскажет статья нашего программиста Михаила Капелько.

    - -
    +
    +
    diff --git a/ru/news/2015-01-13_editor-0.4.0-plans.md b/ru/news/2015-01-13_editor-0.4.0-plans.md new file mode 100644 index 0000000..737241e --- /dev/null +++ b/ru/news/2015-01-13_editor-0.4.0-plans.md @@ -0,0 +1,11 @@ +Title: План задач для Editor 0.4.0 +Date: 2015-01-13 00:00 +Category: News +Slug: editor-0.4.0-plans +Lang: ru + +Разработка Editor 0.3.0 показала нам, что использование кастомного GUI не было столь хорошей идеей, как показалось на первый взгляд. Несмотря на более простую реализацию, кастомный GUI лишен множества мелких достоинств, которые оказываются практически необходимы, если задаться целью сделать удобный инструмент. + +В конце концов, мы решили сделать то, что хотели сделать с самого начала - использовать для редактора библиотеку Qt. + +В ближайшее время мы перепишем редактор, имея в виду Qt-интерфейс и немного обновленную концепцию проекта. Мы планируем выпустить редактор с новым интерфейсом и набором базовых функций, таких как загрузка и сохранение проектов, в мае. diff --git a/ru/news/2015-03-07_editor-0.4.0-and-0.5.0-plans.md b/ru/news/2015-03-07_editor-0.4.0-and-0.5.0-plans.md new file mode 100644 index 0000000..c2bf86f --- /dev/null +++ b/ru/news/2015-03-07_editor-0.4.0-and-0.5.0-plans.md @@ -0,0 +1,19 @@ +Title: Редактор 0.4.0 и планы для 0.5.0 +Date: 2015-03-07 00:00 +Category: News +Slug: editor-0.4.0-and-0.5.0-plans +Lang: ru + +Мы завершили работу над версией 0.4.0 редактора в январе. Как было запланировано, эта версия содержит лишь базовые возможности открыть и сохранить проект. Основная цель была в том, чтобы подружить MJIN, Python и Qt (в частности, по ряду технических причин мы не смогли использовать PyQt или PySide). + +Вы можете увидеть 0.4.0 в действии здесь. + +Мы начали разработку Редактора 0.5.0 в феврале, на текущий момент сделаны 45% работ. + +Запланированные возможности Редактора 0.5.0: + +1. Редактирование дерева узлов сцены +1. Браузер свойств с редактированием позиции и модели узла +1. Поддержка Qt5 с целью простоты сборки на различных дистрибутивах Linux + +Мы планируем завершить его в апреле. diff --git a/ru/news/2015-04-15_editor-06-roadmap.md b/ru/news/2015-04-15_editor-06-roadmap.md new file mode 100644 index 0000000..de49821 --- /dev/null +++ b/ru/news/2015-04-15_editor-06-roadmap.md @@ -0,0 +1,22 @@ +Title: Редактор 0.5.0 и планы для 0.6.0 +Date: 2015-04-15 00:00 +Category: News +Slug: editor-06-roadmap +Lang: ru + +Мы завершили работу над версией 0.5.0 редактора. Как было запланировано, эта версия содержит редактирование узлов сцены, браузер свойств, поддеркжу Qt5. Вы можете увидеть 0.5.0 в действии здесь. + +Также мы только что начали разработку Редактора 0.6.0. + +Запланированные возможности Редактора 0.6.0: + +1. Редактирование узлов с камерой +1. Редактирование узлов со светом +1. Редактирование вращения узлов +1. Поддержка скриптов у узлов +1. Диалог для предпросмотра моделей и материалов при редактировании моделей и материалов у узла +1. Копирование и вставка узлов +1. Выбор узла с помощью клика мышью в сцене + + +Мы планируем завершить его в августе. diff --git a/ru/news/2015-06-28_editor-06.md b/ru/news/2015-06-28_editor-06.md new file mode 100644 index 0000000..e70e329 --- /dev/null +++ b/ru/news/2015-06-28_editor-06.md @@ -0,0 +1,20 @@ +Title: Редактор 0.6.0 +Date: 2015-06-28 00:00 +Category: News +Slug: editor-06 +Lang: ru + +Мы завершили работу над версией 0.6.0 редактора. Вы можете увидеть 0.6.0 в действии здесь. + +Список новых возможностей Редактора 0.6.0: + +1. Позиционирование узлов с камерой и светом +1. Вращение узлов по оси X +1. Поддержка скриптов у узлов +1. Диалог для предпросмотра моделей при редактировании моделей у узла +1. Копирование и вставка узлов +1. Выбор узла с помощью клика мышью в сцене +1. Восстановление позиции и состояния окна после перезапуска + + +На текущий момент у нас нет даты завершения 0.7.0, потому что мы решили взять паузу и потратить некоторое время на составление дорожной карты для Shuan и Mahjong 2. Как только мы её закончим, мы расскажем и о возможностях 0.7.0, и о дате завершения 0.7.0, и о самой дорожной карте. diff --git a/ru/news/2015-07-19_2015-roadmap.md b/ru/news/2015-07-19_2015-roadmap.md new file mode 100644 index 0000000..92cfd69 --- /dev/null +++ b/ru/news/2015-07-19_2015-roadmap.md @@ -0,0 +1,18 @@ +Title: Дорожная карта 2015-2016 +Date: 2015-07-19 00:00 +Category: News +Slug: 2015-roadmap +Lang: ru + +Как и было обещано, мы составили список вех и их примерные даты на ближайший год: + +1. Редактор 0.7.0 (Октябрь 2015) - Система действий: мы воссоздаём тестовый цех +1. Редактор 0.8.0 (Декабрь 2015) - Звуковая система +1. Редактор 0.9.0 (Февраль 2016) - Система частиц и минимальный интерфейс пользователя (UI) +1. Редактор 0.10.0, Проигрыватель 0.1.0 (Апрель 2016) - Проигрыватель воспроизводит созданное Редактором: мы создаём прототип Шуана на нашем движке +1. Редактор 0.11.0, Проигрыватель 0.2.0 (Июнь 2016) - Поддержка сети: мы создаём прототип классического Маджонга для 4-х игроков + + +Эти примерные даты предполагают трату 40 часов в месяц одним программистом. Это около 1 рабочей недели. Не много, но это всё время, что у нас есть. + +Мы сообщим больше деталей о Редакторе 0.7.0 чуть позже: нам нужно решить, какие возможности заслуживают 80 часов нашего времени в следующие 2 месяца. diff --git a/ru/news/2015-07-22_test-chamber-for-everyone.md b/ru/news/2015-07-22_test-chamber-for-everyone.md new file mode 100644 index 0000000..caaaa0e --- /dev/null +++ b/ru/news/2015-07-22_test-chamber-for-everyone.md @@ -0,0 +1,10 @@ +Title: Тестовый цех каждому (Редактор 0.7.0) +Date: 2015-07-22 00:00 +Category: News +Slug: test-chamber-for-everyone +Lang: ru + + +Как вы знаете, основная цель Редактора 0.7.0 - это возможность создать тестовый цех с помощью него. Редактору не хватает системы Действий и исправления некоторых ошибок для этого. Помимо выпуска Редактора мы опубликуем подробную статью, описывающую создание тестового цеха, чтобы каждый мог создать себе свой тестовый цех! + +Мы планируем завершить его в Октябре. diff --git a/ru/news/2015-07-23_bye-desura-hello-humblebundle.md b/ru/news/2015-07-23_bye-desura-hello-humblebundle.md new file mode 100644 index 0000000..cb39310 --- /dev/null +++ b/ru/news/2015-07-23_bye-desura-hello-humblebundle.md @@ -0,0 +1,15 @@ +Title: Прощай, Desura. Здравствуй, Humble Bundle Widget +Date: 2015-07-23 00:00 +Category: News +Slug: bye-desura-hello-humblebundle +Lang: ru + + +После недавнего банкротства родительской компании сервиса Desura мы пришли к выводу, что нам необходима новая площадка для распространения Deluxe-версии игры. Более современная, удобная, надежная. +Наш выбор пал на Humble Widget, благодаря которому вы можете приобрести Deluxe-версию игры прямо у нас на сайте. + +Вот он: + + + +К сожалению, мы не получили от Desura ни копейки (из-за минимального порога вывода средств, которого мы не достигли), однако, если вы приобретали Deluxe-версию OGS Mahjong на Desura и испытываете проблемы с ее скачиванием (в настоящее время проблем не обнаружено), напишите нам, указав свое имя на Desura, и мы что-нибудь придумаем. diff --git a/ru/news/2015-11-02_soon-game-creation-editor-07.md b/ru/news/2015-11-02_soon-game-creation-editor-07.md new file mode 100644 index 0000000..4d4d95b --- /dev/null +++ b/ru/news/2015-11-02_soon-game-creation-editor-07.md @@ -0,0 +1,15 @@ +Title: СКОРО: Создание простой игры в прямом эфире (Редактор 0.7) +Date: 2015-11-02 00:00 +Category: News +Slug: soon-game-creation-editor-07 +Lang: ru + +Как и было обещано, мы готовы предоставить вам Редактор 0.7, с помощью которого можно создать тестовый цех. Тем не менее, после воссоздания цеха стало ясно, что: + +1. это занимает более 8 часов (слишком долго) +1. описание в виде статьи не подходит по формату (слишком скучно) + + +Поэтому мы решили провести прямую трансляцию на LiveCoding СКОРО, чтобы показать, как создать простую игру типа "поймай крота" с нуля. + +Сейчас мы заняты последними приготовлениями, поэтому точные дату и время мы сообщим на этой неделе. Оставайтесь на связи! diff --git a/ru/news/2015-11-09_livesession-editor-07.md b/ru/news/2015-11-09_livesession-editor-07.md new file mode 100644 index 0000000..4c99f37 --- /dev/null +++ b/ru/news/2015-11-09_livesession-editor-07.md @@ -0,0 +1,7 @@ +Title: Создание простой игры в прямом эфире: 15 ноября 2015 +Date: 2015-11-09 00:00 +Category: News +Slug: livesession-editor-07 +Lang: ru + +Мы рады сообщить, что трансляция LiveCoding состоится 15 ноября 2015 в 14:00 MSK. Присоединяйтесь! diff --git a/ru/news/2015-11-15_livesession-materials-editor-07.md b/ru/news/2015-11-15_livesession-materials-editor-07.md new file mode 100644 index 0000000..d4e6c01 --- /dev/null +++ b/ru/news/2015-11-15_livesession-materials-editor-07.md @@ -0,0 +1,22 @@ +Title: Видеозапись живой сессии и материалы +Date: 2015-11-15 00:00 +Category: News +Slug: livesession-materials-editor-07 +Lang: ru + + +Если вы пропустили живую сессию, вы можете посмотреть ее здесь: +[https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/](https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/) + +Проект, созданный в ходе сессии, можно скачать здесь: +[https://github.com/OGStudio/liveSessionWhacAMole/archive/master.zip](https://github.com/OGStudio/liveSessionWhacAMole/archive/master.zip) + +Последняя версия редактора доступна здесь: +[http://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/42_2015-11-13_08-16-46_0.7.4/](http://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/42_2015-11-13_08-16-46_0.7.4/) + +Скачайте редактор, разархивируйте, удалите папку wam.ogs из редактора, скопируйте папку wam.ogs из архива живой сессии в папку редактора. + +* в Windows - запустите файл `run.bat`. +* в Linux и OSX - запустите файл `run`. + + diff --git a/ru/news/2015-12-26_2016-roadmap.md b/ru/news/2015-12-26_2016-roadmap.md new file mode 100644 index 0000000..17d13c1 --- /dev/null +++ b/ru/news/2015-12-26_2016-roadmap.md @@ -0,0 +1,15 @@ +Title: Дорожная карта 2016 +Date: 2015-12-26 00:00 +Category: News +Slug: 2016-roadmap +Lang: ru + +Как вы знаете, согласно [ранее опубликованной дорожной карте][roadmap-2015-2016], мы добавили звуковую систему. Тем не менее, мы решили пойти дальше и создать первую версию Проигрывателя. Мы хотели завершить его в декабре, но, к сожалению, изменение планов вылилось в изменение сроков. + +Представляем вам обновлённую дорожную карту на первую половину 2016: + +1. Редактор + Проигрыватель 0.8.0 (Январь 2016): Звуковая система, игра "Поймай крота" со звуком +1. Редактор + Проигрыватель 0.9.0 (Апрель 2016): Сетевая система, простая игра ping pong для двух игроков по сети +1. Редактор + Проигрыватель 0.10.0 (Июль 2016): Полировка, прототип игры "Шуан" + +[roadmap-2015-2016]: 2015-roadmap.html diff --git a/ru/news/2015-roadmap.html b/ru/news/2015-roadmap.html index 960200e..a0bd13b 100644 --- a/ru/news/2015-roadmap.html +++ b/ru/news/2015-roadmap.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,27 +87,29 @@ -
    -

    В новостях

    -
    -

    - Дорожная карта 2015-2016 -

    -

    - 2015-07-19 00:00 -

    -
    -

    Как и было обещано, мы составили список вех и их примерные даты на ближайший год:

    -
      +
      +

      В новостях...

      +
      +

      + Дорожная карта 2015-2016 +

      +

      + 2015-07-19 00:00 +

      +
      +

      Как и было обещано, мы составили список вех и их примерные даты на ближайший год:

      +
      1. Редактор 0.7.0 (Октябрь 2015) - Система действий: мы воссоздаём тестовый цех
      2. Редактор 0.8.0 (Декабрь 2015) - Звуковая система
      3. Редактор 0.9.0 (Февраль 2016) - Система частиц и минимальный интерфейс пользователя (UI)
      4. @@ -117,9 +118,13 @@

      Эти примерные даты предполагают трату 40 часов в месяц одним программистом. Это около 1 рабочей недели. Не много, но это всё время, что у нас есть.

      Мы сообщим больше деталей о Редакторе 0.7.0 чуть позже: нам нужно решить, какие возможности заслуживают 80 часов нашего времени в следующие 2 месяца.

      - -
      +
    +
    diff --git a/ru/news/2016-01-21_january-live-session-decision.md b/ru/news/2016-01-21_january-live-session-decision.md new file mode 100644 index 0000000..6f12f25 --- /dev/null +++ b/ru/news/2016-01-21_january-live-session-decision.md @@ -0,0 +1,9 @@ +Title: СКОРО: Создание простой игры в прямом эфире (Редактор 0.8) +Date: 2016-01-21 00:00 +Category: News +Slug: january-live-session-decision +Lang: ru + +Мы готовы предоставить вам Редактор 0.8 с Проигрывателем. Прямая трансляция будет проведена на LiveCoding СКОРО. Мы покажем вам, как создать простую игру со звуком с нуля. И на этот раз она не будет требовать Редактора для работы. + +Точную дату и время мы объявим в ближайшие дни. Оставайтесь на связи! diff --git a/ru/news/2016-01-25_january-live-session-announcement.md b/ru/news/2016-01-25_january-live-session-announcement.md new file mode 100644 index 0000000..1d8d59d --- /dev/null +++ b/ru/news/2016-01-25_january-live-session-announcement.md @@ -0,0 +1,7 @@ +Title: Создание игры в прямом эфире: 31 января 2016 +Date: 2016-01-25 00:00 +Category: News +Slug: january-live-session-announcement +Lang: ru + +Мы рады сообщить, что трансляция LiveCoding состоится [31 января 2016 в 14:00 MSK](http://www.timeanddate.com/worldclock/fixedtime.html?msg=Open+Game+Studio%3A+%D0%9F%D1%80%D1%8F%D0%BC%D0%B0%D1%8F+%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D1%8F%D1%86%D0%B8%D1%8F+%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F+%D0%B8%D0%B3%D1%80%D1%8B&iso=20160131T14&p1=166&ah=3). Присоединяйтесь! diff --git a/ru/news/2016-02-02_rolling-ball-live-session-pt2.md b/ru/news/2016-02-02_rolling-ball-live-session-pt2.md new file mode 100644 index 0000000..444b36f --- /dev/null +++ b/ru/news/2016-02-02_rolling-ball-live-session-pt2.md @@ -0,0 +1,9 @@ +Title: Создание игры в прямом эфире (часть 2): 7 февраля 2016 +Date: 2016-02-02 00:00 +Category: News +Slug: rolling-ball-live-session-pt2 +Lang: ru + +К сожалению, нам не удалось завершить создание простой игры "Катящийся мяч" за 3 часа. Поэтому вторая часть трансляции LiveCoding состоится [7 февраля 2016 в 14:00 MSK](http://www.timeanddate.com/worldclock/fixedtime.html?msg=Open+Game+Studio%3A+%D0%9F%D1%80%D1%8F%D0%BC%D0%B0%D1%8F+%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D1%8F%D1%86%D0%B8%D1%8F+%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F+%D0%B8%D0%B3%D1%80%D1%8B%2C+%D1%87%D0%B0%D1%81%D1%82%D1%8C+2&iso=20160207T14&p1=166&ah=3). + +Давайте завершим игру! diff --git a/ru/news/2016-02-10_rolling-ball.md b/ru/news/2016-02-10_rolling-ball.md new file mode 100644 index 0000000..38c89ec --- /dev/null +++ b/ru/news/2016-02-10_rolling-ball.md @@ -0,0 +1,27 @@ +Title: Запись прямого эфира "Катящийся мяч" и материалы +Date: 2016-02-10 00:00 +Category: News +Slug: rolling-ball +Lang: ru + +Т.к. мы провели 2 прямые трансляции для создания игры "Катящийся мяч", ниже вы можете увидеть 2 записи этого процесса на YouTube: + + + + + + + +Игра "Катящийся мяч" для Linux (на основе Debian), OS X (10.9+), Windows доступна на SourceForge. +Просто распакуйте и запустите скрипт 'run'. + +Редактор 0.8 доступен тоже на SourceForge. + +Проект "Катящийся мяч" для Редактора доступен на GitHub. + +Чтобы открыть его в Редакторе: + +* замените slideDown.ogs загруженным rollingBall.ogs +* переименуйте rollingBall.ogs в slideDown.ogs + +Т.к. прямой эфир занял гораздо больше времени, чем мы планировали, мы решили сконцентрировать свои усилия на улучшении удобства редактора. Его возможности уже довольно обширны, но использовать их крайне неудобно. Наиболее серьезные из этих проблем мы планируем исправить в следующем релизе Редактора. diff --git a/ru/news/2016-04-24_may-live-session-decision.md b/ru/news/2016-04-24_may-live-session-decision.md new file mode 100644 index 0000000..23e1cf4 --- /dev/null +++ b/ru/news/2016-04-24_may-live-session-decision.md @@ -0,0 +1,12 @@ +Title: Майский прямой эфир (Редактор 0.9) +Date: 2016-04-24 00:00 +Category: News +Slug: may-live-session-decision +Lang: ru + +Как вы знаете, ранее опубликованная дорожная карта предполагала, что в апреле будет прямой эфир, в котором с помощью Редактора 0.9 мы создадим игру пинг-понг. + +Мы должны признать, что наши способности к планированию всё ещё недостаточно высоки, поэтому следующий прямой эфир состоится в конце мая. Точную дату мы объявим позже. + +Вот пара моментов из будущей игры: + diff --git a/ru/news/2016-05-17_may-live-session-announcement.md b/ru/news/2016-05-17_may-live-session-announcement.md new file mode 100644 index 0000000..6cd6240 --- /dev/null +++ b/ru/news/2016-05-17_may-live-session-announcement.md @@ -0,0 +1,7 @@ +Title: Прямой эфир: 28 мая 2016 +Date: 2016-05-17 00:00 +Category: News +Slug: may-live-session-announcement +Lang: ru + +Мы рады сообщить, что трансляция LiveCoding состоится [28 мая 2016 в 13:00 MSK](http://www.timeanddate.com/worldclock/fixedtime.html?msg=%D0%9C%D0%B0%D0%B9%D1%81%D0%BA%D0%B8%D0%B9+%D0%BF%D1%80%D1%8F%D0%BC%D0%BE%D0%B9+%D1%8D%D1%84%D0%B8%D1%80+Open+Game+Studio&iso=20160528T13&p1=166&ah=3). Присоединяйтесь! diff --git a/ru/news/2016-05-29_ogs-editor-0.9.md b/ru/news/2016-05-29_ogs-editor-0.9.md new file mode 100644 index 0000000..608109e --- /dev/null +++ b/ru/news/2016-05-29_ogs-editor-0.9.md @@ -0,0 +1,12 @@ +Title: Материалы прямого эфира за май 2016 +Date: 2016-05-29 00:00 +Category: News +Slug: ogs-editor-0.9 +Lang: ru + + +В этот раз мы показали, как создать простую игру на основе Домино. Ниже приведены все материалы, связанные с созданием игры. + +1. Редактор 0.9 для Linux (на основе Debian), OS X (10.9+), Windows доступен на SourceForge. Просто распакуйте и запустите скрипт run. +2. Проект Домино, созданный во время прямого эфира доступен на GitHub. +3. Видео репетиции создания игры, на которые есть ссылки в прямом эфире, доступны на YouTube diff --git a/ru/news/2016-08-10_once-mahjong-always-mahjong.md b/ru/news/2016-08-10_once-mahjong-always-mahjong.md new file mode 100644 index 0000000..ae76b7b --- /dev/null +++ b/ru/news/2016-08-10_once-mahjong-always-mahjong.md @@ -0,0 +1,15 @@ +Title: Раз Маджонг – всегда Маджонг +Date: 2016-08-10 00:00 +Category: News +Slug: once-mahjong-always-mahjong +Lang: ru + +Мы начали проект Opensource Game Studio очень давно. Мы хотели дать сообществу свободного программного обеспечения средства для создания игр. Правда, тогда не было ясно, что они из себя должны представлять. Поэтому решили начать с малого: создать игру. + +Мы потратили 3 года для достижения этой цели: выпуск OGS Mahjong 1.0 состоялся в 2012 году. Даже для хобби-проекта (мы тратим в среднем около 40 часов в месяц) это очень долго. + +После выпуска игры до нас дошло: **Средства для создания игр должны экономить время разработки**. + +Мы потратили ещё 4 года на их разработку. Пришло время доказать, что они стоят каждого затраченного дня. Как? Мы **воссоздадим режим "пасьянс Маджонг"** за считанные часы! + +Присоединяйтесь к нашему следующему прямому эфиру в сентябре. diff --git a/ru/news/2016-08-18_back-to-social-networks.md b/ru/news/2016-08-18_back-to-social-networks.md new file mode 100644 index 0000000..3ca15ec --- /dev/null +++ b/ru/news/2016-08-18_back-to-social-networks.md @@ -0,0 +1,9 @@ +Title: Мы вернулись в социальные сети +Date: 2016-08-18 00:00 +Category: News +Slug: back-to-social-networks +Lang: ru + +Если вы подписаны на нашу группу в [Facebook](https://www.facebook.com/groups/162611230470183/), [Twitter](https://twitter.com/OpenGameStudio) или [VK](https://new.vk.com/opengamestudo), вы заметили, что мы начали использовать её снова. Это не случайно: мы наконец созрели для вербального общения после 4 лет молчаливой разработки. + +Подписывайтесь! diff --git a/ru/news/2016-09-03_2016-august-recap.md b/ru/news/2016-09-03_2016-august-recap.md new file mode 100644 index 0000000..040381b --- /dev/null +++ b/ru/news/2016-09-03_2016-august-recap.md @@ -0,0 +1,197 @@ +Title: Август 2016 кратко +Date: 2016-09-03 00:00 +Category: News +Slug: 2016-august-recap +Lang: ru + +![Редактор со сферическим узлом сцены][screenshot] + + +Эта статья описывает самые важные технические детали разработки за август: модуль UIQt, его переработку, новый подход к разработке на основе функционала и его преимущества. + +**Модуль UIQt** - это коллекция компонент UI на основе Qt. Сейчас используем лишь для интерфейса редактора. + +Список компонент модуля UIQt с описанием и размером кода: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    **№****Компонента****Описание****Размер (Б)****Размер (%)**
    1UIQtActionДействия (события) для меню112249
    2UIQtAuxИнициализирует Qt и главное окно. Предоставляет поиск виджета по имени для других компонент1551812
    3UIQtDockВиджет стыковки52734
    4UIQtFileDialogДиалог выбора файла89607
    5UIQtMenuМеню для главного окна и на ПКМ (вроде меню по добавлению/копированию/вставке/удалению узла)45663
    6UIQtMenuBarПанель меню для главного окна42223
    7UIQtRunnerПозволяет запустить QApplication24502
    8UIQtThumbnailDialogДиалог с изображениями1861514
    9UIQtToolBarПанель инструментов для главого окна42763
    10UIQtTreeПредоставляет сложные виджеты вроде Дерева сцены и Редактора свойств5121639
    11UIQtWidgetОбщие свойства виджетов вроде фокуса и видимости54654
    + +**Мы переработали модуль UIQt** для замены старого State API на новый Environment API, который позволяет делать то же самое лаконичнее, т.е. упрощает и ускоряет разработку. + +Переработку начали в июле и должны были закончить в том же месяце. Тем не менеe, работы завершили лишь в августе. Начальный план предполагал, что 28 часов должно хватить, но мы потратили 65. Мы оценивали необходимое время на основе количества вызовов публичного API каждой компоненты. Это хорошо сработало для небольших компонент, т.к. число вызовов их публичного API было примерно равно количеству их функционала, а сам функционал был очень маленький. Однако такой подход полностью провалился для компонеты UIQtTree, составляющей 39% кода модуля UIQt, потому что не было прямой связи между публичным API и функционалом. + +**Новый подход к разработке на основе функционала** родился после решения проблем с переработкой UIQtTree. Т.к. Qt использует MVC, компонента UIQtTree состоит из нескольких классов. К тому моменту, когда UIQtTree могла отображать и управлять иерархией элементов, компонента уже имела размер в 27К. Мы заметили, что UIQtTree стала потреблять непомерное количество времени разработки даже для мелкого функционала. Это было явным проявлением [количественной сложности](http://rsdn.org/article/philosophy/Complexity.xml). + +Мы решили разбить UIQtTree на базовую часть и дополнительные. База содержит лишь необходимый минимум кода. Дополнение содержит код, специфичный для данного функционала, и может быть безболезненно изменено. В случае UIQtTree, отображение и управление иерархией элементов - это минимальный функционал, а переименование элементов - это дополнение. + +Текущий функционал UIQtTree состоит из следующих возможностей: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    **№****Функционал****Описание****Размер (Б)****Размер (%)**
    1BaseСоздание, изменение, отображение иерархии элементов2696652
    2Item open stateХранит состояние свойства скрыто/отображено элемента30946
    3Item renamingПереименование элемента34717
    4Item selectionПолучение/установка выбранного элемента23385
    5Item valueПредоставляет второй и последующие столбцы для элементов, используется Редактором свойств13073
    6Item value editingРедактирование значений элемента с помощью стандартного виджета19964
    7Item value editing with comboboxРедактирование значений элемента с помощью виджета combobox581911
    8Item value editing with spinnerРедактирование значений элемента с помощью виджета spinbox529010
    9MenuМеню на ПКМ12482
    + +Пример файла функционала Menu для UIQtTree: [TREE_MENU](https://bitbucket.org/ogstudio-history/mjin-pre-pre/src/0c4cc3c3213f4687c0f3bd6a5426a6054cadd79b/f/TREE_MENU.cpp?at=Studio+0.10&fileviewer=file-view-default). + +**Преимущества подхода:** + +1. Более быстрое чтение/понимание благодаря небольшому размеру +1. Более простое и безболезненное изменение благодаря изолированному коду + + + +Есть и недостаток: новый подход требует изучения. + +На этом мы заканчиваем описание самых важных технических деталей разработки за август: модуль UIQt, его переработку, новый подход к разработке на основе функционала и его преимущества. + +[screenshot]: ../../images/2016-09-03_august-recap.png diff --git a/ru/news/2016-09-17_september-live-session-announcement.md b/ru/news/2016-09-17_september-live-session-announcement.md new file mode 100644 index 0000000..173fe04 --- /dev/null +++ b/ru/news/2016-09-17_september-live-session-announcement.md @@ -0,0 +1,9 @@ +Title: Прямой эфир: 25 сентября 2016 +Date: 2016-09-17 00:00 +Category: News +Slug: september-live-session-announcement +Lang: ru + + +[25 сентября 2016 в 13:00 MSK](http://www.timeanddate.com/worldclock/fixedtime.html?msg=%D0%9F%D1%80%D1%8F%D0%BC%D0%BE%D0%B9+%D1%8D%D1%84%D0%B8%D1%80+Open+Game+Studio%3A+%D0%A1%D0%B5%D0%BD%D1%82%D1%8F%D0%B1%D1%80%D1%8C+2016&iso=20160925T13&p1=166&ah=2) мы проведём [прямой эфир](https://www.livecoding.tv/kornerr). +Самое время создать простой пасьянс Маджонг diff --git a/ru/news/2016-09-24_september-live-session-announcement-tomorrow.md b/ru/news/2016-09-24_september-live-session-announcement-tomorrow.md new file mode 100644 index 0000000..e945635 --- /dev/null +++ b/ru/news/2016-09-24_september-live-session-announcement-tomorrow.md @@ -0,0 +1,8 @@ +Title: Прямой эфир через 24 часа +Date: 2016-09-24 00:00 +Category: News +Slug: september-live-session-announcement-tomorrow +Lang: ru + + +Приготовьтесь к [прямому эфиру](https://www.livecoding.tv/kornerr), он начнётся через 24 часа! diff --git a/ru/news/2016-09-26_yesterdays-live-session-short-overview.md b/ru/news/2016-09-26_yesterdays-live-session-short-overview.md new file mode 100644 index 0000000..c0b5ad7 --- /dev/null +++ b/ru/news/2016-09-26_yesterdays-live-session-short-overview.md @@ -0,0 +1,12 @@ +Title: Пара слов о вчерашнем прямом эфире +Date: 2016-09-26 00:00 +Category: News +Slug: yesterdays-live-session-short-overview +Lang: ru + + +Создание пасьянса Маджонг прошло успешно, и заняло менее 4 часов. + +Мы опубликуем материалы прямого эфира чуть позже на этой неделе. + +Спасибо за участие. diff --git a/ru/news/2016-10-03_ogs-editor-0.10.md b/ru/news/2016-10-03_ogs-editor-0.10.md new file mode 100644 index 0000000..31af26c --- /dev/null +++ b/ru/news/2016-10-03_ogs-editor-0.10.md @@ -0,0 +1,16 @@ +Title: OGS Editor 0.10 и материалы прямого эфира +Date: 2016-10-03 00:00 +Category: News +Slug: ogs-editor-0.10 +Lang: ru + +![Редактор с игрой Маджонг][screenshot] + +Внимание: мы не выпустим версию 0.10 для macOS из-за технических проблем с системой сборки. Поддержку macOS вернём к 0.11. + +* **OGS Editor 0.10** [доступен на SourceForge](https://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/51_2016-10-01_06-39-48_0.10.0/). Просто распакуйте архив и запустите скрипт run. +* **Пасьянс маджонг** тоже [доступен на SourceForge](https://sourceforge.net/projects/osrpgcreation/files/Games/MahjongSolitaire/). Просто распакуйте архив и запустите скрипт run. +* **Проект прямого эфира** [доступен на GitHub](https://github.com/OGStudio/mahjong-solitaire-livesession). +* **Запись прямого эфира** [доступна на YouTube](https://youtu.be/g8Tyj_YH2Qc?list=PLWMTZqE4MAMJzBnXS9qU_ObWnzJuskI3F). Видео содержит весь процесс создания пасьянса маджонг. + +[screenshot]: ../../images/2016-10-03_ogs-editor-0.10.png diff --git a/ru/news/2016-10-11_2016-september-recap.md b/ru/news/2016-10-11_2016-september-recap.md new file mode 100644 index 0000000..cc420a1 --- /dev/null +++ b/ru/news/2016-10-11_2016-september-recap.md @@ -0,0 +1,50 @@ +Title: Сентябрь 2016 кратко +Date: 2016-10-11 00:00 +Category: News +Slug: 2016-september-recap +Lang: ru + +![Маджонг, созданный в прямом эфире][screenshot] + + +Эта статья описывает стадии по подготовке и проведению прямого эфира сентября 2016: черновик, репетиция, прямой эфир и публикация. + +Несмотря на то, что сам прямой эфир длится лишь несколько часов, мы готовимся к нему целый месяц. Рассмотрим каждую стадию прямого эфира подробнее. + +1. **Черновик.** Создание игры в первый раз. + + Цели: + + * проверить наши технологии и исправить основные ошибки; + * узнать о неудобствах использования технологий, чтобы исправить их в следующей итерации разработки; + * перечислить точные шаги для воссоздания игры позже; + * создать черновой вариант ресурсов игры (модели, текстуры, звуки, скрипты). + + После завершения стадии мы объявляем о дате прямого эфира и показываем примерный вид игры. + +1. **Репетиция.** Повторное создание игры. + + Цели: + + * убедиться в отсутствии основных ошибок; + * записать полный процесс создания игры; + * создать финальный вариант ресурсов игры. + + Это 99% публикуемой позже игры. + +1. **Прямой эфир.** Воссоздание игры в прямом эфире. + + Цели: + + * показать простоту создания игр; + * объяснить нюансы создания игр; + * получить обратную связь от вас; + * ответить на ваши вопросы. + + Мы используем ресурсы из репетиции, чтобы быстро воссоздать игру за считанные часы. + +1. **Публикация.** Выпуск последней версии наших технологий, материалов прямого эфира и самостоятельной игры. + +На этом мы заканчиваем описание стадий по подготовке и проведению прямого эфира сентября 2016: черновик, репетиция, прямой эфир и публикация. + +[screenshot]: ../../images/2016-10-11_september-recap.png diff --git a/ru/news/2016-10-31_2016-tech-showcases.md b/ru/news/2016-10-31_2016-tech-showcases.md new file mode 100644 index 0000000..f412f57 --- /dev/null +++ b/ru/news/2016-10-31_2016-tech-showcases.md @@ -0,0 +1,85 @@ +Title: Демонстрации технологий +Date: 2016-10-31 00:00 +Category: News +Slug: 2016-tech-showcases +Lang: ru + +![Файл с функциональностью на фоне][screenshot] + + +Сегодня мы ещё раз взглянем на формат демонстраций в 2015-2016 годах, а также сообщим о новом формате 2017-го. + +**2015 и 2016: демонстрации в прямом эфире.** + +Как вы знаете, в ходе демонстраций мы в прямом эфире показываем состояние наших технологий и собираем небольшую работающую игру с нуля. За прошедший год мы провели 4 демонстрации в прямом эфире, в ходе которых создали следующие небольшие игры: + + + + + + + + + + + + + + + + + + + + + + + + + + +
    **№****Созданная игра****Дата демонстрации в прямом эфире**
    1Поймай кротаНоябрь 2015
    2Катящийся мячФевраль 2016
    3ДоминоМай 2016
    4Пасьянс МаджонгСентябрь 2016
    + +На подготовку ко всем 4-м демонстрациям у нас ушло 4 месяца. Это был очень полезный для нас опыт. Тем не менее, в 2017-м году мы ограничимся лишь двумя такими демонстрациями. Почему? Потому что мы будем тратить больше времени непосредственно на разработку! + +**2017: демонстрации в прямом эфире + технические анонсы.** + +Место двух демонстраций займут технические анонсы. Технический анонс - это тоже демонстрация прогресса наших технологий, но без создания игр в прямом эфире. + +Примерный календарь технических анонсов и демонстраций на 2017-й год выглядит следующим образом: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    **№****Месяц****Вид демонстрации****Тема**
    1ЯнварьТехнический анонсПоддержка платформы Android
    2АпрельДемонстрация в прямом эфиреСоздание игры для Android
    3ИюльТехнический анонсБудет объявлено позднее
    4ОктябрьДемонстрация в прямом эфиреБудет объявлено позднее
    + +На этом мы заканчиваем рассказ о формате демонстраций в 2015-2016 годах, а также о новом формате 2017-го. + +[screenshot]: ../../images/2016-10-31_tech-showcases.png diff --git a/ru/news/2016-11-19_2016-october-recap.md b/ru/news/2016-11-19_2016-october-recap.md new file mode 100644 index 0000000..c224c06 --- /dev/null +++ b/ru/news/2016-11-19_2016-october-recap.md @@ -0,0 +1,52 @@ +Title: Октябрь 2016 кратко +Date: 2016-11-19 00:00 +Category: News +Slug: 2016-october-recap +Lang: ru + +![Достижение поддержки Android было сродни покорению горы для нас][screenshot] + + +Эта статья описывает, как мы потратили месяц на сборку OpenSceneGraph (OSG) под Android: первая попытка собрать OSG, поиск альтернатив OSG и успех в сборке OSG. + +**Первая попытка собрать OSG.** + +Не имея опыта разработки под Android, мы взяли последнюю версию Android Studio и начали проходить самоучители для начинающих. Java далась легко. Всё работало из коробки. Затем наступил черёд C++ и проблем. + +**CMake. **Android Studio для работы с C++ использует собственную версию CMake, которая конфликтует с системной. Для нас это было явным сигналом о необходимости подготовить отдельное окружение разработки специально под Android. + +**KVM. **Мы установили Ubuntu на VirtualBox. Всё шло замечательно до того момента, пока мы не запустили эмулятор Android. Оказалось, что VirtualBox не может запустить эмулятор, т.к. виртуальная машина не предоставляет виртуализацию внутри уже виртуализированного окружения. + +**Chroot для Android. **Вспомнив о положительном опыте работы с chroot для сборки OGS Editor, мы решили поместить окружение разработки Android в chroot. После небольших настроек мы сумели запустить эмулятор Android и собрать проект C++. + +**OSG. **К этому моменту мы считали, что собрать OSG не составит труда, но не тут-то было. Всё, что мы получили, - это падение. Предположив, что мы ошиблись где-то при первой сборке, мы решили пересобрать OSG ещё раз. И снова получили ту же ошибку. Поиск решения проблемы не дал результатов. Никто не помог нам в списке рассылок OSG. + +Мы были в отчаянии. + +**Поиск альтернатив OSG.** + +Раз сообщество OSG нам не помогло, мы решили поискать альтернативный открытый проект, который мог решить наши задачи на Android (и, возможно, на других платформах). + +Такой проект мы нашли: [BabylonHX](http://babylonhx.gamestudiohx.com/). Домашняя страница выглядела замечательно: она отображала WebGL в фоне! Промелькнула мысль, что мы наконец нашли алмаз. К сожалению, пример на домашней странице просто не работал. + +Думаем, вы понимаете наши чувства на тот момент. + +**Успех в сборке OSG.** + +Мы осознали, что никто за нас не запустит OSG на Android. Нужно было сделать это самостоятельно. + +Потеряв доверие к очень короткой [документации OSG 3.4](http://www.openscenegraph.org/index.php/documentation/platform-specifics/android/178-building-openscenegraph-for-android-3-4) по сборке для Android, мы решили использовать [первоначальную документацию OSG 3.0](http://www.openscenegraph.org/index.php/documentation/platform-specifics/android/44-building-openscenegraph-for-android-3-0-3-0-1). В ходе следования ей мы наткнулись на мёртвую ссылку, которая должна была содержать зависимости. Поиск альтернативной ссылки вывел нас на [самоучитель 2013 года](https://xinyustudio.wordpress.com/2013/09/24/install-osg-for-android-on-ubuntu-13-04-step-by-step-tutorials/) по сборке OSG 3.0 для Android. + +После прохождения самоучителя мы наконец смогли запустить OSG под Android! Тем не менее, был нюанс: используемые в самоучителе версии OSG и средств разработки Android были древними. В течение нескольких дней мы постепенно довели версии OSG и средств разработки Android до последних. + +В ходе этого обновления мы узнали о двух вещах, помешавших нам запустить OSG с первого раза: + +* Изменение заголовков Android API в NDK r12 +* OSG работает под Android лишь в виде статической библиотеки + + + +На этом мы заканчиваем описание того, как мы потратили месяц на сборку OSG под Android: первая попытка собрать OSG, поиск альтернатив OSG и успех в сборке OSG. + +[screenshot]: ../../images/2016-11-19_2016-october-recap.png + diff --git a/ru/news/2016-12-15_2016-november-recap.md b/ru/news/2016-12-15_2016-november-recap.md new file mode 100644 index 0000000..abb4df9 --- /dev/null +++ b/ru/news/2016-12-15_2016-november-recap.md @@ -0,0 +1,47 @@ +Title: Ноябрь 2016 кратко +Date: 2016-12-15 00:00 +Category: News +Slug: 2016-november-recap +Lang: ru + +![Постройка здания][screenshot] + + +Эта статья описывает начало разделения библиотеки MJIN на модули. + +Как только мы собрали OpenSceneGraph для Android, стало очевидно, что часть функционала MJIN не нужна на Android. Например, UIQt - это основа интерфейса Редактора. Раз Редактор - это приложение для ПК, то UIQt не нужен на Android. + +Мы решили рассмотреть два подхода к разделению MJIN на модули: во время сборки (build-time) и исполнения (run-time). +Разделение **во время сборки** означает гибкую систему настроек MJIN, что позволит собирать её различно под каждую платформу. +Разделение **во время исполнения** означает разделение MJIN на несколько небольших библиотек с последующим соединением во время исполнения, что позволит легко менять функционал без повторной сборки. + +**Исследование разделения во время исполнения.** + +Т.к. разделение во время исполнения имеет больше преимуществ, мы начали с этого подхода. Самый простой способ достичь его заключался в использовании C API, т.к. правила C ABI намного проще правил C++ ABI. + +Мы создали маленький проект, включающий в себя приложение, библиотеку и плагин: + +* **Приложение** было слинковано с библиотекой и использовало её для загрузки плагина. +* **Библиотека** предоставляла функции для регистрации плагина и вызывала его функции. +* **Плагин** предоставлял функции для библиотеки и вызывал её функции. + +Исследование прошло на ура: проект работал в полном соответствии с нашими ожиданиями на Linux и Windows. Тем не менее, т.к. MJIN на текущий момент является большой монолитной сущностью, мы отложили применение C API до окончания разделения во время сборки. + +**Начало разделения во время сборки.** + +Мы выделили следующие модули из MJIN: + +* Android: предоставляет Java Native Interface (JNI) к MJIN +* Sound: предоставляет доступ к OpenAL +* UIQt: предоставляет доступ к Qt + + + + +Модули Sound и UIQt на текущий момент статически линкуются в MJIN, тогда как модуль Android линкуется динамически из-за ограничений JNI. + +В следующем году мы изменим структуру MJIN так, чтобы её можно было легче собрать под разные платформы. + +На этом мы заканчиваем статью о начале разделения библиотеки MJIN на модули. + +[screenshot]: ../../images/2016-12-15_2016-november-recap.png diff --git a/ru/news/2016-12-31_2017-happy-new-year.md b/ru/news/2016-12-31_2017-happy-new-year.md new file mode 100644 index 0000000..691aa6a --- /dev/null +++ b/ru/news/2016-12-31_2017-happy-new-year.md @@ -0,0 +1,24 @@ +Title: Счастливого 2017-го +Date: 2016-12-31 00:00 +Category: News +Slug: 2017-happy-new-year +Lang: ru + +![Новогодняя ёлка][screenshot] + +Ну вот. Это был тяжелый год для всех в команде. И он почти закончен. Хвала окончанию старого! Хвала наступлению нового! + +Может показаться, что наш прогресс застопорился. Три года назад мы объявили о начале нового проекта (двух, если быть точным), но до сих пор мы работаем над движком и редактором, даже не начали делать ни Shuan, ни Mahjong 2. + +Если вы следили за новостями в течение года, вы знаете что мы провели несколько "живых сессий", демонстрируя в реальном времени как можно использовать наш инструментарий для создания простой игры. Каждая сессия была шагом в долгом пути к нашей цели. В процессе подготовки к ним, мы добавляли важные элементы, которые будут необходимы для создания любой игры. + +Будущие сессии и демонстрации добавят даже больше, так что в будущем (надеюсь не слишком отдаленном), у нас будет все необходимое для того чтобы просто сесть и собрать планируемую игру из этих элементов. + +Так что проект не умер; идея не отброшена. Очень много работы предстоит сделать, прежде чем мы можем начать делать игру. И нас только двое, занимающихся всем этим в свое свободное время. +Итак, вы хотите, чтобы наша игра стала реальностью? Присоединяйтесь к нам. Вместе мы будем править галактикой. Или можете просто подождать. Мы не бросили все это несколько лет назад. Не станем и сейчас. +В конце концов, есть только один способ создать годный инструмент (а это наша первоначальная цель, если вы помните) - мы должны использовать его сами. +Мы будем. Следите за новостями. + +Счастливого 2017-го. Пусть он будет простым. + +[screenshot]: ../../images/2016-12-31_happy-new-year.png diff --git a/ru/news/2016-august-recap.html b/ru/news/2016-august-recap.html index f3b3b14..c259b66 100644 --- a/ru/news/2016-august-recap.html +++ b/ru/news/2016-august-recap.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,237 +87,116 @@ -
    -

    В новостях

    -
    -

    - Август 2016 кратко -

    -

    - 2016-09-03 00:00 -

    -
    -
    -Редактор со сферическим узлом сцены
    Редактор со сферическим узлом сцены
    -
    +
    +

    В новостях...

    +
    +

    + Август 2016 кратко +

    +

    + 2016-09-03 00:00 +

    +
    +

    Редактор со сферическим узлом сцены

    Эта статья описывает самые важные технические детали разработки за август: модуль UIQt, его переработку, новый подход к разработке на основе функционала и его преимущества.

    Модуль UIQt - это коллекция компонент UI на основе Qt. Сейчас используем лишь для интерфейса редактора.

    -Список компонент модуля UIQt с описанием и размером кода: - +

    Список компонент модуля UIQt с описанием и размером кода:

    - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + -
    - - -Компонента - -Описание - -Размер (Б) - -Размер (%) -КомпонентаОписаниеРазмер (Б)Размер (%)
    -1 - -UIQtAction - -Действия (события) для меню - -11224 - -9 -1UIQtActionДействия (события) для меню112249
    -2 - -UIQtAux - -Инициализирует Qt и главное окно. Предоставляет поиск виджета по имени для других компонент - -15518 - -12 -2UIQtAuxИнициализирует Qt и главное окно. Предоставляет поиск виджета по имени для других компонент1551812
    -3 - -UIQtDock - -Виджет стыковки - -5273 - -4 -3UIQtDockВиджет стыковки52734
    -4 - -UIQtFileDialog - -Диалог выбора файла - -8960 - -7 -4UIQtFileDialogДиалог выбора файла89607
    -5 - -UIQtMenu - -Меню для главного окна и на ПКМ (вроде меню по добавлению/копированию/вставке/удалению узла) - -4566 - -3 -5UIQtMenuМеню для главного окна и на ПКМ (вроде меню по добавлению/копированию/вставке/удалению узла)45663
    -6 - -UIQtMenuBar - -Панель меню для главного окна - -4222 - -3 -6UIQtMenuBarПанель меню для главного окна42223
    -7 - -UIQtRunner - -Позволяет запустить QApplication - -2450 - -2 -7UIQtRunnerПозволяет запустить QApplication24502
    -8 - -UIQtThumbnailDialog - -Диалог с изображениями - -18615 - -14 -8UIQtThumbnailDialogДиалог с изображениями1861514
    -9 - -UIQtToolBar - -Панель инструментов для главого окна - -4276 - -3 -9UIQtToolBarПанель инструментов для главого окна42763
    -10 - -UIQtTree - -Предоставляет сложные виджеты вроде Дерева сцены и Редактора свойств - -51216 - -39 -10UIQtTreeПредоставляет сложные виджеты вроде Дерева сцены и Редактора свойств5121639
    -11 - -UIQtWidget - -Общие свойства виджетов вроде фокуса и видимости - -5465 - -4 -11UIQtWidgetОбщие свойства виджетов вроде фокуса и видимости54654
    +

    Мы переработали модуль UIQt для замены старого State API на новый Environment API, который позволяет делать то же самое лаконичнее, т.е. упрощает и ускоряет разработку.

    Переработку начали в июле и должны были закончить в том же месяце. Тем не менеe, работы завершили лишь в августе. Начальный план предполагал, что 28 часов должно хватить, но мы потратили 65. Мы оценивали необходимое время на основе количества вызовов публичного API каждой компоненты. Это хорошо сработало для небольших компонент, т.к. число вызовов их публичного API было примерно равно количеству их функционала, а сам функционал был очень маленький. Однако такой подход полностью провалился для компонеты UIQtTree, составляющей 39% кода модуля UIQt, потому что не было прямой связи между публичным API и функционалом.

    Новый подход к разработке на основе функционала родился после решения проблем с переработкой UIQtTree. Т.к. Qt использует MVC, компонента UIQtTree состоит из нескольких классов. К тому моменту, когда UIQtTree могла отображать и управлять иерархией элементов, компонента уже имела размер в 27К. Мы заметили, что UIQtTree стала потреблять непомерное количество времени разработки даже для мелкого функционала. Это было явным проявлением количественной сложности.

    @@ -326,187 +204,91 @@ UIQtWidget

    Текущий функционал UIQtTree состоит из следующих возможностей:

    - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + +
    - - -Функционал - -Описание - -Размер (Б) - -Размер (%) -**№****Функционал****Описание****Размер (Б)****Размер (%)**
    -1 - -Base - -Создание, изменение, отображение иерархии элементов - -26966 - -52 -1BaseСоздание, изменение, отображение иерархии элементов2696652
    -2 - -Item open state - -Хранит состояние свойства скрыто/отображено элемента - -3094 - -6 -2Item open stateХранит состояние свойства скрыто/отображено элемента30946
    -3 - -Item renaming - -Переименование элемента - -3471 - -7 -3Item renamingПереименование элемента34717
    -4 - -Item selection - -Получение/установка выбранного элемента - -2338 - -5 -4Item selectionПолучение/установка выбранного элемента23385
    -5 - -Item value - -Предоставляет второй и последующие столбцы для элементов, используется Редактором свойств - -1307 - -3 -5Item valueПредоставляет второй и последующие столбцы для элементов, используется Редактором свойств13073
    -6 - -Item value editing - -Редактирование значений элемента с помощью стандартного виджета - -1996 - -4 -6Item value editingРедактирование значений элемента с помощью стандартного виджета19964
    -7 - -Item value editing with combobox - -Редактирование значений элемента с помощью виджета combobox - -5819 - -11 -7Item value editing with comboboxРедактирование значений элемента с помощью виджета combobox581911
    -8 - -Item value editing with spinner - -Редактирование значений элемента с помощью виджета spinbox - -5290 - -10 -8Item value editing with spinnerРедактирование значений элемента с помощью виджета spinbox529010
    -9 - -Menu - -Меню на ПКМ - -1248 - -2 -9MenuМеню на ПКМ12482
    -

    Пример файла функционала Menu для UIQtTree: TREE_MENU.

    +

    Пример файла функционала Menu для UIQtTree: TREE_MENU.

    Преимущества подхода:

    -
      +
      1. Более быстрое чтение/понимание благодаря небольшому размеру
      2. Более простое и безболезненное изменение благодаря изолированному коду

      Есть и недостаток: новый подход требует изучения.

      На этом мы заканчиваем описание самых важных технических деталей разработки за август: модуль UIQt, его переработку, новый подход к разработке на основе функционала и его преимущества.

      - -
    +
    +
    diff --git a/ru/news/2016-november-recap.html b/ru/news/2016-november-recap.html index fd24dd9..febc273 100644 --- a/ru/news/2016-november-recap.html +++ b/ru/news/2016-november-recap.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,31 +87,33 @@ -
    -

    В новостях

    -
    -

    - Ноябрь 2016 кратко -

    -

    - 2016-12-15 00:00 -

    -
    -
    -Постройка здания
    Постройка здания
    -
    +
    +

    В новостях...

    +
    +

    + Ноябрь 2016 кратко +

    +

    + 2016-12-15 00:00 +

    +
    +

    Постройка здания

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

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

    -

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

    +

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

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

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

    Мы создали маленький проект, включающий в себя приложение, библиотеку и плагин:

    @@ -132,9 +133,13 @@

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

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

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

    - -
    +
    +
    diff --git a/ru/news/2016-october-recap.html b/ru/news/2016-october-recap.html index 6b535be..94a5f7c 100644 --- a/ru/news/2016-october-recap.html +++ b/ru/news/2016-october-recap.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,35 +87,35 @@ -
    -

    В новостях

    -
    -

    - Октябрь 2016 кратко -

    -

    - 2016-11-19 00:00 -

    -
    -
    -Достижение поддержки Android было сродни покорению горы для нас
    Достижение поддержки Android было сродни покорению горы для нас
    -
    +
    +

    В новостях...

    +
    +

    + Октябрь 2016 кратко +

    +

    + 2016-11-19 00:00 +

    +
    +

    Достижение поддержки Android было сродни покорению горы для нас

    Эта статья описывает, как мы потратили месяц на сборку OpenSceneGraph (OSG) под Android: первая попытка собрать OSG, поиск альтернатив OSG и успех в сборке OSG.

    Первая попытка собрать OSG.

    Не имея опыта разработки под Android, мы взяли последнюю версию Android Studio и начали проходить самоучители для начинающих. Java далась легко. Всё работало из коробки. Затем наступил черёд C++ и проблем.

    -

    CMake. Android Studio для работы с C++ использует собственную версию CMake, которая конфликтует с системной. Для нас это было явным сигналом о необходимости подготовить отдельное окружение разработки специально под Android.

    -

    KVM. Мы установили Ubuntu на VirtualBox. Всё шло замечательно до того момента, пока мы не запустили эмулятор Android. Оказалось, что VirtualBox не может запустить эмулятор, т.к. виртуальная машина не предоставляет виртуализацию внутри уже виртуализированного окружения.

    -

    Chroot для Android. Вспомнив о положительном опыте работы с chroot для сборки OGS Editor, мы решили поместить окружение разработки Android в chroot. После небольших настроек мы сумели запустить эмулятор Android и собрать проект C++.

    -

    OSG. К этому моменту мы считали, что собрать OSG не составит труда, но не тут-то было. Всё, что мы получили, - это падение. Предположив, что мы ошиблись где-то при первой сборке, мы решили пересобрать OSG ещё раз. И снова получили ту же ошибку. Поиск решения проблемы не дал результатов. Никто не помог нам в списке рассылок OSG.

    +

    **CMake. **Android Studio для работы с C++ использует собственную версию CMake, которая конфликтует с системной. Для нас это было явным сигналом о необходимости подготовить отдельное окружение разработки специально под Android.

    +

    **KVM. **Мы установили Ubuntu на VirtualBox. Всё шло замечательно до того момента, пока мы не запустили эмулятор Android. Оказалось, что VirtualBox не может запустить эмулятор, т.к. виртуальная машина не предоставляет виртуализацию внутри уже виртуализированного окружения.

    +

    **Chroot для Android. **Вспомнив о положительном опыте работы с chroot для сборки OGS Editor, мы решили поместить окружение разработки Android в chroot. После небольших настроек мы сумели запустить эмулятор Android и собрать проект C++.

    +

    **OSG. **К этому моменту мы считали, что собрать OSG не составит труда, но не тут-то было. Всё, что мы получили, - это падение. Предположив, что мы ошиблись где-то при первой сборке, мы решили пересобрать OSG ещё раз. И снова получили ту же ошибку. Поиск решения проблемы не дал результатов. Никто не помог нам в списке рассылок OSG.

    Мы были в отчаянии.

    Поиск альтернатив OSG.

    Раз сообщество OSG нам не помогло, мы решили поискать альтернативный открытый проект, который мог решить наши задачи на Android (и, возможно, на других платформах).

    @@ -132,9 +131,13 @@
  • OSG работает под Android лишь в виде статической библиотеки
  • На этом мы заканчиваем описание того, как мы потратили месяц на сборку OSG под Android: первая попытка собрать OSG, поиск альтернатив OSG и успех в сборке OSG.

    - -
    +
    +
    diff --git a/ru/news/2016-roadmap.html b/ru/news/2016-roadmap.html index 8dd4a96..740e4a1 100644 --- a/ru/news/2016-roadmap.html +++ b/ru/news/2016-roadmap.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,35 +87,41 @@ -
    -

    В новостях

    -
    -

    - Дорожная карта 2016 -

    -

    - 2015-12-26 00:00 -

    -
    -

    Как вы знаете, согласно ранее опубликованной дорожной карте, мы добавили звуковую систему. Тем не менее, мы решили пойти дальше и создать первую версию Проигрывателя. Мы хотели завершить его в декабре, но, к сожалению, изменение планов вылилось в изменение сроков.

    +
    +

    В новостях...

    +
    +

    + Дорожная карта 2016 +

    +

    + 2015-12-26 00:00 +

    +
    +

    Как вы знаете, согласно ранее опубликованной дорожной карте, мы добавили звуковую систему. Тем не менее, мы решили пойти дальше и создать первую версию Проигрывателя. Мы хотели завершить его в декабре, но, к сожалению, изменение планов вылилось в изменение сроков.

    Представляем вам обновлённую дорожную карту на первую половину 2016:

    -
      -
    1. Редактор + Проигрыватель 0.8.0 (Январь 2016): Звуковая система, игра “Поймай крота” со звуком
    2. +
        +
      1. Редактор + Проигрыватель 0.8.0 (Январь 2016): Звуковая система, игра "Поймай крота" со звуком
      2. Редактор + Проигрыватель 0.9.0 (Апрель 2016): Сетевая система, простая игра ping pong для двух игроков по сети
      3. -
      4. Редактор + Проигрыватель 0.10.0 (Июль 2016): Полировка, прототип игры “Шуан”
      5. +
      6. Редактор + Проигрыватель 0.10.0 (Июль 2016): Полировка, прототип игры "Шуан"
      - -
    +
    +
    diff --git a/ru/news/2016-september-recap.html b/ru/news/2016-september-recap.html index e37176b..67f0790 100644 --- a/ru/news/2016-september-recap.html +++ b/ru/news/2016-september-recap.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,47 +87,45 @@ -
    -

    В новостях

    -
    -

    - Сентябрь 2016 кратко -

    -

    - 2016-10-11 00:00 -

    -
    -
    -Маджонг, созданный в прямом эфире
    Маджонг, созданный в прямом эфире
    -
    +
    +

    В новостях...

    +
    +

    + Сентябрь 2016 кратко +

    +

    + 2016-10-11 00:00 +

    +
    +

    Маджонг, созданный в прямом эфире

    Эта статья описывает стадии по подготовке и проведению прямого эфира сентября 2016: черновик, репетиция, прямой эфир и публикация.

    Несмотря на то, что сам прямой эфир длится лишь несколько часов, мы готовимся к нему целый месяц. Рассмотрим каждую стадию прямого эфира подробнее.

    -
      +
      1. Черновик. Создание игры в первый раз.

        Цели:

        • проверить наши технологии и исправить основные ошибки;
        • узнать о неудобствах использования технологий, чтобы исправить их в следующей итерации разработки;
        • перечислить точные шаги для воссоздания игры позже;
        • -
        • создать черновой вариант ресурсов игры (модели, текстуры, звуки, скрипты).
        • -
        +
      2. создать черновой вариант ресурсов игры (модели, текстуры, звуки, скрипты).
      3. После завершения стадии мы объявляем о дате прямого эфира и показываем примерный вид игры.

      4. Репетиция. Повторное создание игры.

        Цели:

        • убедиться в отсутствии основных ошибок;
        • записать полный процесс создания игры;
        • -
        • создать финальный вариант ресурсов игры.
        • -
        +
      5. создать финальный вариант ресурсов игры.
      6. Это 99% публикуемой позже игры.

      7. Прямой эфир. Воссоздание игры в прямом эфире.

        Цели:

        @@ -136,15 +133,18 @@
      8. показать простоту создания игр;
      9. объяснить нюансы создания игр;
      10. получить обратную связь от вас;
      11. -
      12. ответить на ваши вопросы.
      13. - +
      14. ответить на ваши вопросы.
      15. Мы используем ресурсы из репетиции, чтобы быстро воссоздать игру за считанные часы.

      16. Публикация. Выпуск последней версии наших технологий, материалов прямого эфира и самостоятельной игры.

      На этом мы заканчиваем описание стадий по подготовке и проведению прямого эфира сентября 2016: черновик, репетиция, прямой эфир и публикация.

      - -
    +
    +
    diff --git a/ru/news/2016-tech-showcases.html b/ru/news/2016-tech-showcases.html index cc76a50..bbf7cbb 100644 --- a/ru/news/2016-tech-showcases.html +++ b/ru/news/2016-tech-showcases.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,168 +87,102 @@ -
    -

    В новостях

    -
    -

    - Демонстрации технологий -

    -

    - 2016-10-31 00:00 -

    -
    -
    -Файл с функциональностью на фоне
    Файл с функциональностью на фоне
    -
    +
    +

    В новостях...

    +
    +

    + Демонстрации технологий +

    +

    + 2016-10-31 00:00 +

    +
    +

    Файл с функциональностью на фоне

    Сегодня мы ещё раз взглянем на формат демонстраций в 2015-2016 годах, а также сообщим о новом формате 2017-го.

    2015 и 2016: демонстрации в прямом эфире.

    -Как вы знаете, в ходе демонстраций мы в прямом эфире показываем состояние наших технологий и собираем небольшую работающую игру с нуля. За прошедший год мы провели 4 демонстрации в прямом эфире, в ходе которых создали следующие небольшие игры: +

    Как вы знаете, в ходе демонстраций мы в прямом эфире показываем состояние наших технологий и собираем небольшую работающую игру с нуля. За прошедший год мы провели 4 демонстрации в прямом эфире, в ходе которых создали следующие небольшие игры:

    - - - + + + - - - + + + - - - + + + - - - + + + - - - + + +
    - - -Созданная игра - -Дата демонстрации в прямом эфире -**№****Созданная игра****Дата демонстрации в прямом эфире**
    -1 - -Поймай крота - -Ноябрь 2015 -1Поймай кротаНоябрь 2015
    -2 - -Катящийся мяч - -Февраль 2016 -2Катящийся мячФевраль 2016
    -3 - -Домино - -Май 2016 -3ДоминоМай 2016
    -4 - -Пасьянс Маджонг - -Сентябрь 2016 -4Пасьянс МаджонгСентябрь 2016

    На подготовку ко всем 4-м демонстрациям у нас ушло 4 месяца. Это был очень полезный для нас опыт. Тем не менее, в 2017-м году мы ограничимся лишь двумя такими демонстрациями. Почему? Потому что мы будем тратить больше времени непосредственно на разработку!

    2017: демонстрации в прямом эфире + технические анонсы.

    Место двух демонстраций займут технические анонсы. Технический анонс - это тоже демонстрация прогресса наших технологий, но без создания игр в прямом эфире.

    -Примерный календарь технических анонсов и демонстраций на 2017-й год выглядит следующим образом: +

    Примерный календарь технических анонсов и демонстраций на 2017-й год выглядит следующим образом:

    - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + +
    - - -Месяц - -Вид демонстрации - -Тема -**№****Месяц****Вид демонстрации****Тема**
    -1 - -Январь - -Технический анонс - -Поддержка платформы Android -1ЯнварьТехнический анонсПоддержка платформы Android
    -2 - -Апрель - -Демонстрация в прямом эфире - -Создание игры для Android -2АпрельДемонстрация в прямом эфиреСоздание игры для Android
    -3 - -Июль - -Технический анонс - -Будет объявлено позднее -3ИюльТехнический анонсБудет объявлено позднее
    -4 - -Октябрь - -Демонстрация в прямом эфире - -Будет объявлено позднее -4ОктябрьДемонстрация в прямом эфиреБудет объявлено позднее

    На этом мы заканчиваем рассказ о формате демонстраций в 2015-2016 годах, а также о новом формате 2017-го.

    - -
    +
    +
    diff --git a/ru/news/2017-01-25_the-year-of-challenges.md b/ru/news/2017-01-25_the-year-of-challenges.md new file mode 100644 index 0000000..3f52f07 --- /dev/null +++ b/ru/news/2017-01-25_the-year-of-challenges.md @@ -0,0 +1,30 @@ +Title: Год испытаний +Date: 2017-01-25 00:00 +Category: News +Slug: the-year-of-challenges +Lang: ru + +![Запуск ракеты на Байконуре][screenshot] + + +Эта статья содержит наши планы на 2017 год. + +Наши предыдущие планы предполагали, что сейчас у нас уже будет поддержка платформы Android. Тем не менее, у нас впереди ещё очень много работы, прежде чем мы сможем объявить о поддержке Android. Судите сами: + +![Отображение кубов на Android][android-rendering] + +Кто-нибудь может посчитать это неудачей. Но не мы. Мы видим шанс начать с низкого старта и прыгнуть высоко! + +Т.к. ранее мы имели опыт работы лишь с либеральным и всё прощающим настольным ПК, Android стал для нас полной неожиданностью. На каждом шагу нас ожидало наказание за фривольное использование памяти, ресурсов, графики. Чаще всего в ответ на наши действия мы получали либо падение приложения, либо пустой экран. +С другой стороны, такие суровые условия высветили слабые места в наших технологиях и помогли увидеть, куда нам двигаться дальше. + +В этом месяце мы начинаем работу над поддержкой платформы iOS, хотя мы лишь слегка коснулись платформы Android. Почему? Потому что намного проще отобразить эти красные кубы на iOS без предварительной полировки Android. Мы не хотим потратить месяцы на полировку Android лишь для того, чтобы позже узнать о том, что какой-либо функционал следовало делать иначе для его работы на всех поддерживаемых платформах. + +Сразу после отображения этих кубов на iOS мы начнём работу над их отображением в Вебе. + +**Всё верно: нашей целью в этом году является поддержка платформ Android, iOS и Веб.** + +На этом мы заканчиваем описание наших планов на 2017 год. + +[screenshot]: ../../images/2017-01_the-year-of-challenges.png +[android-rendering]: ../../images/2017-01_mjin-android-gles.png diff --git a/ru/news/2017-03-16_lets-go.md b/ru/news/2017-03-16_lets-go.md new file mode 100644 index 0000000..51b47f5 --- /dev/null +++ b/ru/news/2017-03-16_lets-go.md @@ -0,0 +1,49 @@ +Title: Поехали +Date: 2017-03-16 00:00 +Category: News +Slug: lets-go +Lang: ru + +![Слова Гагарина][screenshot] + + +В этой статье мы расскажем о результатах нашей работы в январе и феврале 2017: отображении куба на iOS/Веб и нашем инструменте для создания самоучителей. + +**Отображение куба на iOS/Web** + +К нашему удивлению, мы смогли отобразить простой красный куб на [iOS](https://twitter.com/OpenGameStudio/status/826816343433498627) и [Веб](https://twitter.com/OpenGameStudio/status/829731986264698881) довольно быстро: в начале февраля. Тем не менее, это лишь начало поддержки платформ Android, iOS и Веб. Впереди нас ждёт тернистая дорога, т.к. нам предстоит сделать ещё много вещей, прежде чем мы сможем объявить о полноценной поддержке этих платформ: визуальные эффекты, скрипты Python, архивы данных. + +Т.к. нам потребовалось четыре месяца для начала поддержки платформ Android, iOS и Веб, мы решили поделиться своими знаниями и помочь сообществу OpenSceneGraph. Мы напишем руководство по использованию OpenSceneGraph на ПК, мобилках и Вебе. Мы верим: чем более распространён OpenSceneGraph, тем сильнее наши собственные технологии. Как сказал Исаак Ньютон: "Если я видел дальше других, то потому, что стоял на плечах гигантов". OpenSceneGraph - наш гигант. + + +**Инструмент для создания самоучителей** + +Имея за плечами опыт проведения четырёх прямых эфиров, нам стало ясно, что руководство по использованию OpenSceneGraph будет полезно лишь при наличии видео. Но голое видео способно отразить лишь то, что мы делаем, но не то, почему мы делаем именно это и именно так. Поэтому мы решили совместить видео с текстом в форме как субтитров к видео, так и отдельных статей. + +Первую попытку совмещения видео с текстом мы начали с помощью [OpenShot](http://openshotvideo.com). Инструмент хороший, но с первого же дня использования стали очевидны следующие ограничения: + +* Настройка моментов отображения текста и анимаций занимает много времени +* Файл проекта и исходные ресурсы сложно положить в систему контроля версий + + + +Т.к. руководство по использованию OpenSceneGraph будет состоять из нескольких самоучителей, мы решили автоматизировать процесс. Быстрый поиск рассказал нам о существовании замечательного мультимедийного фреймворка [MLT](http://mltframework.org), который используется и в OpenShot. С помощью MLT мы быстро сделали свой инструмент для создания самоучителей. + +На текущий момент наш инструмент позволяет совместить видео и текст с помощью простого текстового файла: + +``` +background bg.png +text 5 Let's install Blender +video 0:6 install_blender.mp4 +text 5 Installing it with apt +video 6:26 install_blender.mp4 +text 5 We're still installing it +video 26:56 install_blender.mp4 +text 5 Congratulations! We just finished installing Blender +``` + +Это реальный скрипт. Конечный результат можно увидеть [здесь](https://github.com/ogstudio/tutorial-tool). + +На этом мы заканчиваем рассказ о результатах нашей работы в январе и феврале 2017: отображении куба на iOS/Веб и нашем инструменте для создания самоучителей. + +[screenshot]: ../../images/2017-03_lets-go.png diff --git a/ru/news/2017-04-07_its-all-fine.md b/ru/news/2017-04-07_its-all-fine.md new file mode 100644 index 0000000..095244a --- /dev/null +++ b/ru/news/2017-04-07_its-all-fine.md @@ -0,0 +1,35 @@ +Title: Всё проходит хорошо +Date: 2017-04-07 00:00 +Category: News +Slug: its-all-fine +Lang: ru + +![Полёт ракеты][screenshot] + + +Эта статья рассказывает о создании первых четырёх самоучителей OpenSceneGraph в марте 2017. + +[Первые четыре самоучителя OpenSceneGraph](https://github.com/OGStudio/openscenegraph-cross-platform-guide/) объясняют, как создать модель куба в Blender и затем отобразить её на Linux, macOS или Windows с помощью osgviewer, стандартного инструмента OpenSceneGraph. + +Процесс создания одного самоучителя оказался довольно утомительным, т.к. он состоит из следующих задач: + +1. Записать видео с одним или более шагами +1. Назвать эти шаги как можно яснее +1. Выбрать те части видео, которые непосредственно показывают шаг +1. Убрать те части видео, которые не имеют значения, например, ожидание сборки +1. Выбрать один кадр, лучше всего передающий смысл этого шага, например, набор команды +1. Добавить детальное описание в статью, почему этот шаг был необходим +1. Перечитать статью +1. Поправить опечатки и монтаж видео +1. Пересмотреть полное видео +1. Загрузить видео на YouTube с временными отметками шагов для упрощения навигации + + + +Некоторые из этих задач приходилось повторять несколько раз до тех пор, пока комбинация видео, текста и статьи не получилась целостной. + +Всего мы потратили 30 часов на создание самоучителей. В ходе их создания мы почерпнули много нового, что поможет нам улучшить обучающие материалы наших технологий в будущем. Сейчас мы ещё не в курсе, как именно эти материалы будут выглядеть, но они точно будут лучше. + +На этом мы заканчиваем рассказ о создании первых четырёх самоучителей OpenSceneGraph в марте 2017. + +[screenshot]: ../../images/2017-04_its-all-fine.png diff --git a/ru/news/2017-05-12_osg-sample.md b/ru/news/2017-05-12_osg-sample.md new file mode 100644 index 0000000..365123b --- /dev/null +++ b/ru/news/2017-05-12_osg-sample.md @@ -0,0 +1,60 @@ +Title: Приложение OpenSceneGraph +Date: 2017-05-12 00:00 +Category: News +Slug: osg-sample +Lang: ru + +![Ракета в дали][screenshot] + + +Эта статья описывает создание самоучителей по сборке приложения OpenSceneGraph на Linux, macOS, Windows и Android в апреле 2017. + +Предыдущие самоучители описывали установку OpenSceneGraph на Linux, macOS, Windows и отображение модели с помощью стандартного инструмента **osgviewer**. На этот раз результатом нашей работы стало [приложение OpenSceneGraph](https://github.com/OGStudio/openscenegraph-cross-platform-guide-application), которое работает на Linux, macOS, Windows и Android. + +Приложение очень простое. Оно умеет следующее: + +1. Создание окна для отрисовки +1. Загрузка модели +1. Отрисовка модели с помощью простых шейдеров GLSL +1. Перемещение модели с помощью мыши на Linux, macOS, Windows и пальца на Android + + + +Создать самоучители для Linux, macOS, Windows было настолько простой и понятной задачей, что мы справились с ней за пару недель. Оставшуюся половину месяца мы потратили на создание самоучителя для Android. + +Наша [первая успешная сборка под Android][oct16_article] в прошлом году требовала множество неочивидных телодвижений. В этот раз мы хотели получить более чистый, быстрый и дешёвый подход. + +Нам это удалось. В результате всё, что нужно для работы приложения OpenSceneGraph на Android, уместилось в набор из нескольких файлов и небольших изменений для стандартного проекта Android Studio (с поддержкой C++). + +Краткий перечень файлов: + +1. Поверхность GLES2 +1. Activity для отрисовки на этой поверхности +1. Интерфейс Java для нативной библиотеки +1. Реализация нативной библиотеки на C++ +1. Файл CMake для сборки нативной библиотеки +1. Activity layout +1. Модель для отрисовки + + + +Краткий перечень изменений проекта: + +1. Обновление Android manifest для использования GLES2 и Activity +1. Использование файла CMake нативной библиотеки в проектном файле CMake + + + +Документация OpenSceneGraph предполагает сборку OpenSceneGraph вне Android Studio с помощью CMake. Такой подход имеет следующие ограничения: + +1. Ручная сборка OpenSceneGraph под каждую платформу +1. Ручное копирование собранных библиотек OpenSceneGraph в проект Android Studio + + + +Наш подход включает в себя сборку OpenSceneGraph для тех платформ, для которых собирается проект Android Studio. К тому же, OpenSceneGraph используется как часть проекта, поэтому нет никакой дополнительной рутины: достаточно просто пересобрать проект, и всё готово. + +На этом мы заканчиваем описание создания самоучителей по сборке приложения OpenSceneGraph на Linux, macOS, Windows и Android в апреле 2017. + +[screenshot]: ../../images/2017-05_osg-sample.png +[oct16_article]: 2016-october-recap.html diff --git a/ru/news/2017-06-08-ios-refactoring.md b/ru/news/2017-06-08-ios-refactoring.md new file mode 100644 index 0000000..8ae366d --- /dev/null +++ b/ru/news/2017-06-08-ios-refactoring.md @@ -0,0 +1,50 @@ +Title: Самоучитель iOS +Date: 2017-06-08 10:00 +Category: News +Slug: ios-tutorial +Lang: ru + +![Земля и ракета](../../images/2017-06-08-ios-refactoring.png) + +Эта статья описывает проблемы, с которыми мы столкнулись во время создания самоучителя для iOS в мае 2017. + +[В феврале](https://twitter.com/OpenGameStudio/status/826816343433498627) мы сумели отобразить простую модель под iOS за считанные дни. Это дало нам уверенность, что самоучитель для iOS мы сделаем столь же быстро. Тем не менее, реальность напомнила нам о простой вещи: быстро сделать можно лишь поделку на коленке, работающую только у самого разработчика; над логически связанным примером, работающим у всех, придётся попотеть. + +**Нативная библиотека** + +Прежде всего нам необходимо было ответить на следующий вопрос: "должен ли пример приложения быть частью проекта Xcode или отдельной библиотекой?" + +Для принятия решения мы использовали следующие факты: + +1. Проект Xcode может напрямую использовать C++ (благодаря Objective-C++) без прослоек вроде JNI + * Отдельная библиотека не нужна (+ приложение) + * Создание отдельной библиотеки - это дополнительная работа (- библиотека) +1. OpenSceneGraph собирается в библиотеки + * Легче использовать стандартный процесс сборки (+ библиотека) + * Создавать свой процесс сборки лишь для одной платформы сложно (- приложение) +1. OpenSceneGraph использует систему сборки CMake, которая не поддерживается Xcode + * Проект Xcode не может включать файлы CMake (- приложение) + * Свой файл CMake может с лёгкостью включить файл OpenSceneGraph CMake для сборки единой библиотеки (+ библиотека) +1. CMake может генерировать проект Xcode + * Можно создать файл CMake, который будет собирать как OpenSceneGraph, так и пример приложения (+ приложение) + * Xcode - это де-факто инструмент для создания проектов Xcode; легче использовать стандартный процесс сборки (+ библиотека) + +Оценив плюсы и минусы обоих подходов, мы решили сделать библиотеку, которую можно включать в проект Xcode. Минусом данного подхода является то, что сборки приложения для симулятора и реального устройства используют разные сборки библиотеки. + +**Рефакторинг** + +Также нам пришлось ответить на ещё один вопрос: "использовать ли единую кодовую базу для всех платформ или несколько под каждую платформу?" + +При создании самоучителя для Android мы использовали единую кодовую базу, т.к. она отлично работала для десктопа и Android. Когда мы начали работу над самоучителем iOS, стало ясно, что часть функционала либо работает, либо не работает на некоторых платформах. Например, один функционал может работать на десктопе и iOS, но не работать на Android. Другой функционал может работать на iOS и Android, но не работать на десктопе. Т.к. мы не хотели загрязнять код кучей #ifdef, мы решили помещать функционал, специфичный для конкретной платформы или нескольких платформ, в разные файлы. Это привело к резкому увеличению количества файлов. Такой подход хорошо подходил для повторного использования, но совершенно не годился для понимания общей картины. + +В этот момент мы осознали необходимость ответа на второй вопрос. Мы напомнили себе, что главная цель примера приложения состоит в том, чтобы обучить базовым вещам OpenSceneGraph, а не создать повторно используемую библиотеку с API, который будет жить без изменений десятилетиями. + +Для ответа на этот вопрос нам помог наш внутренний инструмент feature tool. С его помощью мы разделили код на несколько частей, который в итоге собирается ровно в два файла для каждой платформы: + +1. functions.h - содержит повторно используемые бесклассовые функции +1. main.h - содержит остальной код приложения + +Их содержимое несколько отличается для каждой из платформ, но наличие всего двух файлов позволяет увидеть общую картину. + +На этом мы заканчиваем описание проблем, с которыми мы столкнулись во время создания самоучителя для iOS в мае 2017. + diff --git a/ru/news/2017-07-openscenegraph-guide.md b/ru/news/2017-07-openscenegraph-guide.md new file mode 100644 index 0000000..ba71722 --- /dev/null +++ b/ru/news/2017-07-openscenegraph-guide.md @@ -0,0 +1,31 @@ +Title: OpenSceneGraph cross-platform guide +Date: 2017-07-17 00:00 +Category: News +Slug: openscenegraph-cross-platform-guide +Lang: ru + +![Приложение OpenSceneGraph на десктопе и мобилке](../../images/2017-07-openscenegraph-guide.png) + +Эта статья резюмирует создание кросс-платформенного руководства OpenSceneGraph. + +Июнь ознаменовал собой окончание работы над [кросс-платформенным руководством OpenSceneGraph](https://github.com/OGStudio/openscenegraph-cross-platform-guide). Мы опубликовали последний самоучитель (из изначально запланированных). Этот самоучитель описывает [сборку и запуск примера приложения OpenSceneGraph в вебе](https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb) с помощью Emscripten. +Если вы упустили этот самоучитель, то вот [ссылка на приложение](https://ogstudio.github.io/openscenegraph-cross-platform-guide/) из него. Откройте ссылку в веб-браузере. + +Мы начали составление руководства в феврале, как только нам удалось отобразить простую модель на мобилках и вебе. Мы потратили 120 часов за пять месяцев на составление десяти самоучителей этого руководства. + +Создание кросс-платформенного руководства OpenSceneGraph преследовало две основные цели: + +1. Сохранить знания о кросс-платформенной работе с OpenSceneGraph в легкодоступной и воспроизводимой форме +1. Поделиться этим знанием с сообществом OpenSceneGraph и тем самым усилить сообщество + +Мы уверены в том, что нам удалось достичь обе цели. И вот почему: + +1. Хранилище руководства получило больше [звёзд](https://github.com/OGStudio/openscenegraph-cross-platform-guide/stargazers) (лайков), чем любое другое наше хранилище +1. Robert Osfield, лидер проекта OpenSceneGraph, оценил руководство как ["отличную работу"](http://www.mail-archive.com/osg-users@lists.openscenegraph.org/msg74815.html); это значит для нас многое +1. У руководства уже есть [два тикета](https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues) + +В конце концов, мы просто рады тому факту, что изучили кросс-платформенную разработку с OpenSceneGraph и поделились этим знанием с сообществом. + +Тем не менее, наше путешествие на этом не окончено. Используя знания руководства, мы продолжаем работу над тем, чтобы добавить в свои инструменты поддержку мобилок и веба, как мы [обещали в январе](the-year-of-challenges.html). + +На этом мы заканчиваем резюме о создании кросс-платформенного руководства OpenSceneGraph. diff --git a/ru/news/2017-08-scripting-research.md b/ru/news/2017-08-scripting-research.md new file mode 100644 index 0000000..5d5b03e --- /dev/null +++ b/ru/news/2017-08-scripting-research.md @@ -0,0 +1,60 @@ +Title: Изучение скриптования +Date: 2017-08-16 00:00 +Category: News +Slug: scripting-research +Lang: ru + +![Тетрадка с текстом](../../images/2017-08-scripting-research.png) + +Эта статья описывает изучение скриптования в июле 2017. + +**Наша основная цель использования скриптового языка - это наличие платформо-независимого кода, выполняемого без изменений на каждой поддерживаемой платформе.** + +Редактор 0.10 использует Python в качестве подобного кода с помощью [SWIG](http://swig.org/). SWIG позволяет использовать практически любой код C/C++ из языков вроде Python, Ruby, Lua, Java, C# и т.д.. SWIG помог нам впервые оценить прелесть платформо-независимого кода. К сожалению, SWIG работает лишь в одном направлении: из C/C++ в язык назначения. Это приводит к тому, что основное приложение должно быть написано на языке назначения, а код C/C++ может быть использован лишь в виде библиотеки. + +Основное приложение на языке Python вполне подходит для десктопа, но не для мобилок и веба, где языки C и C++ являются единственными языками, поддерживаемыми нативно на каждой платформе. Конечно, существуют проекты вроде [Kivy](https://kivy.org), которые позволяет разрабатывать кросс-платформенные приложения на Python, но они не поддерживаются нативно. Отсутствие нативной поддержки выливается в огромную головную боль при изменении API у Android и iOS. + +Необходимость в приложении на C/C++ и поддержке скриптов приводит к обязательному интерпретированию скриптового языка самим приложением. Это как раз то, что SWIG, Kivy и подобные проекты не позволяют сделать. + +**Наша вторичная цель использования скриптового языка - это возможность расширения кода C++.** + +Одни модули Редактора 0.10 написаны на C++, а другие на Python. С точки зрения основного приложения, все модули равны. Для приложения нет никакой разницы, на каком языке написан конкретный модуль. + +Для достижения этой гибкости мы ввели так называемое Окружение (Environment). Каждый модуль регистрирует ключи (keys), на которые он отвечает, а Окружение доставляет соответствующие сообщения. Технически такое поведение можно достигнуть с помощью наследования базового класса и переопределения его методов как в C++, так и в скриптовом языке. + +**Python был первым языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.** + +Т.к. мы уже использовали Python, то логично было начать изучение с него. Мы хотели проверить, можно ли запустить код Python на каждой поддерживаемой платформе. К сожалению, результаты были удручающими, т.к. документация CPython (реализация Python, используемая по умолчанию на десктопе) никак не упоминала ни мобилки, ни веб. Всё, что мы нашли, - это пара форков CPython лохматых годов, которые якобы работают либо на Android, либо на iOS. Такой раздрай нас не устроил. +Мы также рассмотрели [PyPy](http://pypy.org), ещё одну реализацию Python, но она тоже не содержала информации о мобилках и вебе. + +Это было чётким сигналом об отсутствии интереса к мобилками и вебу со стороны сообщества Python. Либо об отсутствии времени даже на то, чтобы описать использование Python на данных платформах. В любом случае, такое положение вещей нас не устроило. + +**[Wren](http://wren.io) был вторым языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.** + +Wren был первым языком из длинного списка малоизвестных скриптовых языков. + +Wren преподносился как небольшой и простой язык. Согласно документации, основная цель Wren - это быть встроенным в приложение. По иронии судьбы, у автора [не было времени описать в документации встраивание Wren](http://wren.io/embedding-api.html) в приложение. Когда мы [спросили о сроках публикации](https://github.com/munificent/wren/issues/465) этой критически важной части документации, мы [получили в ответ ссылку на тикет](https://github.com/munificent/wren/issues/402), в котором другой человек спрашивал тот же самый вопрос полгода назад! + +На этом мы закончили отношения с Wren. + +**[Chai](http://chaiscript.com) был третьим языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.** + +Chai был в том же длинном списке малоизвестных скриптовых языков. Он преподносился как язык, специально предназначенный для встраивания в приложения C++. Мы без проблем вызвали функцию C++ из Chai, но нам не удалось вызвать метод класса. [Мы попросили о помощи](http://discourse.chaiscript.com/t/cannot-call-a-function-that-accepts-a-string-and-a-vector/334), но ответом была лишь тишина. + +Нам пришлось завершить отношения с Chai. + +**Lua был четвёртым языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.** + +Lua является популярным языком для встраивания. Мы решили попробовать очевидный вариант. Документация выглядела многообещающе, однако под конец чтения главы [C API](https://www.lua.org/pil/24.html) у нас не было ни малейшего представления, как наследовать класс C++ в Lua. + +Этот вопрос заставил нас найти библиотеку, которая смогла бы на него ответить: [Sol2](http://sol2.rtfd.io). Первая попытка вызвать функцию C++ из Lua провалилась. Правда, на этот раз наш вопрос был услышан, и [мы получили ответ](https://github.com/ThePhD/sol2/issues/465)! Мы были сильно удивлены. +Далее мы попытались наследовать класс C++ в Lua, чтобы переопределить методы класса. Нам это не удалось с первого раза, но автор Sol2 [снова помог нам](https://github.com/ThePhD/sol2/issues/468). + +В тот момент мы поняли, что это начало долгого и взаимовыгодного сотрудничества с Sol2/Lua. + +**Поиск скриптового языка открыл для нас следующую истину: люди важнее технологий.** + +Существует множество скриптовых языков, которые выглядят привлекательно на первый взгляд, но которые мертвы. Почему? Потому что у некоторых авторов нет времени на пользователей. В ответ пользователи предпочитают не тратить своё время на проекты подобных авторов. + +На этом мы заканчиваем описание изучения скриптования в июле 2017. + diff --git a/ru/news/2017-09-mjin-world-birth.md b/ru/news/2017-09-mjin-world-birth.md new file mode 100644 index 0000000..01578d4 --- /dev/null +++ b/ru/news/2017-09-mjin-world-birth.md @@ -0,0 +1,38 @@ +Title: Рождение вселенной MJIN +Date: 2017-09-10 00:00 +Category: News +Slug: mjin-world-birth +Lang: ru + +![Взрыв, рождающий что-то новое](../../images/2017-09-mjin-world-birth.png) + +Эта статья описывает рождение вселенной MJIN в августе 2017. + +**mjin-player** + +Как вы знаете, [в июле мы изучали скриптование](scripting-research.html). Мы нашли решение, которое удовлетворяет следующим критериям. Скрипты должны: + +1. исполняться в исходном виде без изменений на всех поддерживаемых платформах +1. позволять расширять код C++ + +Мы проверили второй критерий в рамках тестового приложения. В первый критерий мы просто поверили, т.к. он ДОЛЖЕН быть верен. + +В тот момент мы видели два варианта проверки первого критерия: + +1. создать по одному тестовому приложению под каждую платформу для проверки лишь этого критерия +1. создать одно кросс-платформенное приложение, которому можно скормить практически любой код + +Мы выбрали второй подход, т.к. он выгоднее в долгосрочной перспективе. Как вы уже догадались, [mjin-player](https://bitbucket.org/ogstudio/mjin-player) является тем самым кросс-платформенным приложением. + +mjin-player служит базой для остальных проектов MJIN, которая позволяет этим проектам работать на всех поддерживаемых платформах. Тем не менее, в mjin-player нет никакой магии, проекты никак не скрыты от деталей платформ, да и не было такой задачи. Вместо скрытия деталей платформы mjin-player предоставляет набор правил, которым должны удовлетворять проекты MJIN для работы на всех поддерживаемых платформах. + +**mjin-application** + +Этот набор правил представлен в виде [mjin-application](https://bitbucket.org/ogstudio/mjin-application). mjin-application является библиотекой с базовым функционалом, необходимым для каждого проекта MJIN, но не более. Например, mjin-application не содержит и никогда не будет содержать скриптования или подобного специфического функционала. + +**Вселенная MJIN** + +Так что же такое [вселенная MJIN](https://bitbucket.org/ogstudio/mjin)? Это множество проектов, которые являются нашими средствами для разработки игр. mjin-player и mjin-application - первые кирпичики недавно появившейся вселенной MJIN. А будет их намного больше. Оставайтесь на связи, нас ждёт светлое будущее с MJIN. + +На этом мы заканчиваем описание рождения вселенной MJIN в августе 2017. + diff --git a/ru/news/2017-10-16-back-to-the-static.md b/ru/news/2017-10-16-back-to-the-static.md new file mode 100644 index 0000000..aeb8284 --- /dev/null +++ b/ru/news/2017-10-16-back-to-the-static.md @@ -0,0 +1,13 @@ +Title: Назад в Статику +Date: 2017-10-16 00:00 +Category: News +Slug: back-to-the-static +Lang: ru + +![Объединение статики и динамики](../../images/2017-10-16-back-to-the-static.png) + +Мы используем Wordpress в качестве движка нашего сайта уже более семи лет. И теперь пришло время двигаться вперед. Или назад. Некоторое время мы следили за разработкой нового поколения движков - генераторов статических сайтов. Похоже, что это технология, способная превратить прошлое в будущее. + +Статический веб-сайт проще, быстрее и безопаснее. И с помощью генераторов им настолько же легко управлять, как и динамическим веб-сайтом. Так что мы начинаем наш сайт заново с помощью [Pelican](https://blog.getpelican.com/). + +Сейчас здесь нет всего контента с нашего старого сайта, но мы добавим его в ближайшее время. diff --git a/ru/news/2017-11-22-2017-summary.md b/ru/news/2017-11-22-2017-summary.md new file mode 100644 index 0000000..829de77 --- /dev/null +++ b/ru/news/2017-11-22-2017-summary.md @@ -0,0 +1,45 @@ +Title: Итоги 2017-го +Date: 2017-11-22 00:00 +Category: News +Slug: 2017-summary +Lang: ru + +![Игра на память в фоне][screenshot] + +Настало время сделать ревизию наших достижений в 2017 году и проверить, насколько они следуют основной цели проекта Opensource Game Studio. + +**Краткая история** + +Проекту Opensource Game Studio уже 12 лет. + +**2005.** Мы начали проект с [фанатичного призыва][fanatic_call] к созданию самой лучшей игры. Видимо, сразу же после прохождения Half-Life 2 или Morrowind. 99.99% тех, кто хотел участвовать, отвалились в течение первых двух лет. Остались лишь два человека: Михаил (программирование) и Иван (всё остальное). Проект находился в стадии постоянного беспорядка, т.к. у нас не было ни чёткой цели, ни дисциплины. Неудивительно, что за этот период мы можем похвастаться лишь небольшим набором сумбурных демонстраций. + +**2010.** Первый год признания нашего поражения. После принятия поражения мы поставили себе целью создать игру Маджонг. Мы также осознали, что для выпуска игры нам придётся работать каждый день. Работа по выходным не приносила результатов, т.к. она часто сталкивалась с необходимостью уделять время семье. + +**2012, 2013.** Мы выпустили версии 1.0 и 1.1 Маджонга соответственно. Мы создали полноценную отполированную игру за 3-4 года, тогда как до этого 5 лет не могли сделать ничего вразумительного. Маджонг до сих пор остаётся нашей лучшей и единственной выпущенной игрой. Мы всё ещё гордимся им, и нам всё ещё нравится в него играть. + +**2015.** Мы продемонстрировали первую версию нашего средства разработки. Мы приступили к его созданию сразу после выпуска Маджонга, т.к. решили сделать инструмент для экономии времени разработки следующих игр. + +**2016.** Мы воссоздали игровую механику Маджонга с помощью нашего инструмента. Тем не менее, к тому моменту мы осознали, что разработка лишь под настольные компьютеры нежизнеспособна. Это понимание подтолкнуло нас к изучению мобильных платформ. + +**Последний год** + +**2016, октябрь.** Мы начали изучение мобильных платформ с создания простейшего приложения OpenSceneGraph, которое сможет работать на Android. + +**2017, январь.** Мы получили версию Android и начали изучение iOS с Вебом. + +**2017, февраль.** Мы запустили простейшее приложение везде: настольный компьютер, мобильные платформы, веб. + +Изучение мобильных платформ и веба заняло у нас около пяти месяцев. Нам пришлось потратить это время по причине отсутствия какой-либо внятной документации по работе с OpenSceneGraph на разных платформах. После таких громадных трат времени мы решили сэкономить это время другим разработчикам и занялись созданием указанной документации. + +**2017, июль.** Мы опубликовали [инструкцию по работе с OpenSceneGraph на разных платформах][osgcp_guide], которая рассказывает в деталях о создании простейшего приложения OpenSceneGraph и запуске его на настольных компьютерах, мобильных платформах и вебе. Эта инструкция является нашим самым популярным проектом на GitHub. + +**2017, ноябрь.** Мы выпустили простую [игру "Память: Цвета"][memory-colors] и [инструкцию][memory-colors-guide] по созданию этой игры с нуля. Игра создана с помощью MJIN, нашего нового инструмента для разработки игр, этому инструменту всего лишь несколько месяцев. + +На текущий момент MJIN лишь начинает развитие. Этому инструменту нужна настоящая игра, чтобы расцвести. Поэтому мы уже работаем над Маджонгом, который будет радовать вас и на настольных компьютерах, и на мобильных платформах, и в вебе. На этот раз мы постараемся сделать Маджонг быстрее. + +[screenshot]: ../../images/2017-11-22-2017-summary.png +[fanatic_call]: https://unixforum.org/index.php?showtopic=9989 +[osgcp_guide]: https://github.com/OGStudio/openscenegraph-cross-platform-guide +[memory-colors]: https://ogstudio.github.io/game-memory-colors/tutorial-5.3/mjin-player.html +[memory-colors-guide]: https://bitbucket.org/ogstudio-games/memory-colors diff --git a/ru/news/2017-12-31-new-year.md b/ru/news/2017-12-31-new-year.md new file mode 100644 index 0000000..234f23d --- /dev/null +++ b/ru/news/2017-12-31-new-year.md @@ -0,0 +1,19 @@ +Title: Год новых уроков +Date: 2017-12-31 22:00 +Category: News +Slug: the-year-of-lessons +Lang: ru + +![Бенгальский огонь](../../images/2017-12-31-celebration.jpg) + +Итак, 2017й год стремительно приближается к финалу, итоги года уже подведены, так что в свободное от расчехления фейерверков и подготовки систем залпового огня шампанским время мы обозначим свою цель в следующем году. + +Как, наверное, понятно из других статей на сайте, примерно половине наших планов в 2017 году было суждено осуществиться хотя бы приблизительно так как мы предполагали, остальные поменялись существенно. + +В течение года люди приходили в команду, уходили из нее, в итоге конец года мы встречаем с тем же составом что и 365 дней назад. Это заставило нас задуматься, но о выводах как-нибудь в другой раз. + +Цель на 2018й год у нас будет ровно одна. Мы возьмем все результаты своих технологических поисков, и снова вернемся к маджонгу. Первым будет то, что мы уже умеем делать и делали - пасьянс. На этот раз, он будет кроссплатформенным. Точно постараемся охватить Windows, Linux, macOs, Web и Android. На счет iOS пока ничего обещать не будем (хотя и зарекаться - тоже). + +Наверное нет смысла писать больше чем хочется сказать. Мы многому научились за этот год, и в следующем постараемся все это применить. Так что желаем всем счастливого Нового Года и оставайтесь с нами. + +Команда Opensource Game Studio. diff --git a/ru/news/2017-happy-new-year.html b/ru/news/2017-happy-new-year.html index 1e736d7..da0d15c 100644 --- a/ru/news/2017-happy-new-year.html +++ b/ru/news/2017-happy-new-year.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,37 +87,44 @@ -
    -

    В новостях

    -
    -

    - Счастливого 2017-го -

    -

    - 2016-12-31 00:00 -

    -
    -
    -Новогодняя ёлка
    Новогодняя ёлка
    -
    +
    +

    В новостях...

    +
    +

    + Счастливого 2017-го +

    +

    + 2016-12-31 00:00 +

    +
    +

    Новогодняя ёлка

    Ну вот. Это был тяжелый год для всех в команде. И он почти закончен. Хвала окончанию старого! Хвала наступлению нового!

    Может показаться, что наш прогресс застопорился. Три года назад мы объявили о начале нового проекта (двух, если быть точным), но до сих пор мы работаем над движком и редактором, даже не начали делать ни Shuan, ни Mahjong 2.

    -

    Если вы следили за новостями в течение года, вы знаете что мы провели несколько “живых сессий”, демонстрируя в реальном времени как можно использовать наш инструментарий для создания простой игры. Каждая сессия была шагом в долгом пути к нашей цели. В процессе подготовки к ним, мы добавляли важные элементы, которые будут необходимы для создания любой игры.

    +

    Если вы следили за новостями в течение года, вы знаете что мы провели несколько "живых сессий", демонстрируя в реальном времени как можно использовать наш инструментарий для создания простой игры. Каждая сессия была шагом в долгом пути к нашей цели. В процессе подготовки к ним, мы добавляли важные элементы, которые будут необходимы для создания любой игры.

    Будущие сессии и демонстрации добавят даже больше, так что в будущем (надеюсь не слишком отдаленном), у нас будет все необходимое для того чтобы просто сесть и собрать планируемую игру из этих элементов.

    -

    Так что проект не умер; идея не отброшена. Очень много работы предстоит сделать, прежде чем мы можем начать делать игру. И нас только двое, занимающихся всем этим в свое свободное время. Итак, вы хотите, чтобы наша игра стала реальностью? Присоединяйтесь к нам. Вместе мы будем править галактикой. Или можете просто подождать. Мы не бросили все это несколько лет назад. Не станем и сейчас. В конце концов, есть только один способ создать годный инструмент (а это наша первоначальная цель, если вы помните) - мы должны использовать его сами. Мы будем. Следите за новостями.

    +

    Так что проект не умер; идея не отброшена. Очень много работы предстоит сделать, прежде чем мы можем начать делать игру. И нас только двое, занимающихся всем этим в свое свободное время. +Итак, вы хотите, чтобы наша игра стала реальностью? Присоединяйтесь к нам. Вместе мы будем править галактикой. Или можете просто подождать. Мы не бросили все это несколько лет назад. Не станем и сейчас. +В конце концов, есть только один способ создать годный инструмент (а это наша первоначальная цель, если вы помните) - мы должны использовать его сами. +Мы будем. Следите за новостями.

    Счастливого 2017-го. Пусть он будет простым.

    - -
    +
    +
    diff --git a/ru/news/2017-summary.html b/ru/news/2017-summary.html index c516e91..5cbbcda 100644 --- a/ru/news/2017-summary.html +++ b/ru/news/2017-summary.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +87,28 @@ -
    -

    В новостях

    -
    -

    - Итоги 2017-го -

    -

    - 2017-11-22 00:00 -

    -
    -
    -Игра на память в фоне
    Игра на память в фоне
    -
    +
    +

    В новостях...

    +
    +

    + Итоги 2017-го +

    +

    + 2017-11-22 00:00 +

    +
    +

    Игра на память в фоне

    Настало время сделать ревизию наших достижений в 2017 году и проверить, насколько они следуют основной цели проекта Opensource Game Studio.

    Краткая история

    Проекту Opensource Game Studio уже 12 лет.

    @@ -117,18 +116,22 @@

    2010. Первый год признания нашего поражения. После принятия поражения мы поставили себе целью создать игру Маджонг. Мы также осознали, что для выпуска игры нам придётся работать каждый день. Работа по выходным не приносила результатов, т.к. она часто сталкивалась с необходимостью уделять время семье.

    2012, 2013. Мы выпустили версии 1.0 и 1.1 Маджонга соответственно. Мы создали полноценную отполированную игру за 3-4 года, тогда как до этого 5 лет не могли сделать ничего вразумительного. Маджонг до сих пор остаётся нашей лучшей и единственной выпущенной игрой. Мы всё ещё гордимся им, и нам всё ещё нравится в него играть.

    2015. Мы продемонстрировали первую версию нашего средства разработки. Мы приступили к его созданию сразу после выпуска Маджонга, т.к. решили сделать инструмент для экономии времени разработки следующих игр.

    -

    2016. Мы воссоздали игровую механику Маджонга с помощью нашего инструмента. Тем не менее, к тому моменту мы осознали, что разработка лишь под настольные компьютеры нежизнеспособна. Это понимание подтолкнуло нас к изучению мобильных платформ.

    +

    2016. Мы воссоздали игровую механику Маджонга с помощью нашего инструмента. Тем не менее, к тому моменту мы осознали, что разработка лишь под настольные компьютеры нежизнеспособна. Это понимание подтолкнуло нас к изучению мобильных платформ.

    Последний год

    2016, октябрь. Мы начали изучение мобильных платформ с создания простейшего приложения OpenSceneGraph, которое сможет работать на Android.

    2017, январь. Мы получили версию Android и начали изучение iOS с Вебом.

    2017, февраль. Мы запустили простейшее приложение везде: настольный компьютер, мобильные платформы, веб.

    Изучение мобильных платформ и веба заняло у нас около пяти месяцев. Нам пришлось потратить это время по причине отсутствия какой-либо внятной документации по работе с OpenSceneGraph на разных платформах. После таких громадных трат времени мы решили сэкономить это время другим разработчикам и занялись созданием указанной документации.

    2017, июль. Мы опубликовали инструкцию по работе с OpenSceneGraph на разных платформах, которая рассказывает в деталях о создании простейшего приложения OpenSceneGraph и запуске его на настольных компьютерах, мобильных платформах и вебе. Эта инструкция является нашим самым популярным проектом на GitHub.

    -

    2017, ноябрь. Мы выпустили простую игру “Память: Цвета” и инструкцию по созданию этой игры с нуля. Игра создана с помощью MJIN, нашего нового инструмента для разработки игр, этому инструменту всего лишь несколько месяцев.

    -

    На текущий момент MJIN лишь начинает развитие. Этому инструменту нужна настоящая игра, чтобы расцвести. Поэтому мы уже работаем над Маджонгом, который будет радовать вас и на настольных компьютерах, и на мобильных платформах, и в вебе. На этот раз мы постараемся сделать Маджонг быстрее.

    - -
    +

    2017, ноябрь. Мы выпустили простую игру "Память: Цвета" и инструкцию по созданию этой игры с нуля. Игра создана с помощью MJIN, нашего нового инструмента для разработки игр, этому инструменту всего лишь несколько месяцев.

    +

    На текущий момент MJIN лишь начинает развитие. Этому инструменту нужна настоящая игра, чтобы расцвести. Поэтому мы уже работаем над Маджонгом, который будет радовать вас и на настольных компьютерах, и на мобильных платформах, и в вебе. На этот раз мы постараемся сделать Маджонг быстрее.

    +
    +
    diff --git a/ru/news/2018-01-26-mahjong-recreation-start.md b/ru/news/2018-01-26-mahjong-recreation-start.md new file mode 100644 index 0000000..49a2df1 --- /dev/null +++ b/ru/news/2018-01-26-mahjong-recreation-start.md @@ -0,0 +1,72 @@ +Title: Начало воссоздания Маджонга +Date: 2018-01-26 00:00 +Category: News +Slug: mahjong-recreation-start +Lang: ru + +![Сферические фишки в раскладке Маджонг][screenshot] + +Эта статья описывает начало воссоздания игры Маджонг. + +**План** + +Мы начали воссоздание Маджонга с составления краткого плана реализации игровой механики с минимальной графикой: + +* Загрузить раскладку +* Поместить фишки в позиции раскладки +* Различить фишки +* Реализовать выбор фишек +* Реализовать сравнение фишек + +Как и любой другой план, этот выглядел вполне адекватно на первый взгляд. Тем не менее стоит начать разработку, как появляются новые детали. Этот план не был исключением. Ниже представлена пара проблем, вскрывшихся во время разработки. + +**Проблема №1: предоставить бинарные ресурсы на поддерживаемых платформах** + +Маджонг будет доступен для десктопа, мобилок и веба. Каждая платформа имеет ограничения на доступ к внешним файлам: + +* Десктоп позволяет получить доступ почти к любому файлу +* Мобилки имеют ограниченный доступ к файловой системе +* Веб не имеет файловой системы + +Мы решили сделать единый способ доступа к ресурсам путём их встраивания в исполняемый файл. Это решение привело к рождению проектов **mjin-resource** и **mahjong-data**. + +Проект [mjin-resource][mjin-resource] служит для: + +* перевода бинарных файлов в заголовочные файлы C с помощью утилиты **xxd** +* создания проекта MJIN, состоящего из сгенерированных заголовочных файлов, который собирается в статическую библиотеку +* предоставления интерфейса C++ для работы с ресурсами + +Проект [mahjong-data][mahjong-data] является примером подобного проекта MJIN, ресурсы из которого использует проект [mahjong][mahjong]. + +**Проблема №2: загрузка изображений PNG на поддерживаемых платформах** + +Для загрузки PNG мы используем соответствующий плагин OpenSceneGraph. Мы собрали его без проблем для десктопа. Сборка же для веба (Emscripten) оказалась сложнее: Emscripten содержит собственную версию **libpng**, которую сборочный скрипт OpenSceneGraph не видит. Нам пришлось обойти несколько проверок OpenSceneGraph, чтобы успешно собрать плагин для Emscripten. +Сборка плагина под мобилки ещё ждёт нас впереди. Как только мы разберёмся с плагином PNG на всех поддерживаемых платформах, мы опубликуем информацию о его сборке в новом самоучителе для [кросс-платформенного руководства OpenSceneGraph][osgcp_guide]. Нас уже [попросили это сделать][img_loading_issue]. + +**Разработка** + +[Как вы знаете][lets-go], мы опубликовали кросс-платформенное руководство OpenSceneGraph для усиления сообщества OpenSceneGraph. Мы ценим обучение и любим делиться своими знаниями. Поэтому мы решили разрабатывать Маджонг небольшими воспроизводимыми частями, каждая из которых имеет уникальную внутреннюю версию. Эти версии доступны в [хранилище проекта mahjong][mahjong]. + +Мы также предоставляем [историю версий, каждая из которых сопровождается сборкой под веб][web-releases], для следующих целей: + +* обучение: показать ход разработки изнутри +* доступность: предоставить старые версии для сравнения + +**Текущее состояние игры Маджонг** + +На момент написания этой статьи мы закончили реализацию выбора фишек. [Проверьте в своём браузере!][mahjong-version-tile-selection] + +После реализации сравнения фишек мы опубликуем промежуточный результат для всех поддерживаемых платформ. + +На этом мы заканчиваем описание начала воссоздания игры Маджонг. + +[screenshot]: ../../images/2018-01-26-mahjong-recreation-start.png + +[mjin-resource]: https://bitbucket.org/ogstudio/mjin-resource +[mahjong]: https://bitbucket.org/ogstudio-games/ogs-mahjong +[mahjong-data]: https://bitbucket.org/ogstudio-games/mahjong-data +[osgcp_guide]: https://github.com/ogstudio/openscenegraph-cross-platform-guide +[img_loading_issue]: https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues/4 +[lets-go]: lets-go.html +[web-releases]: http://ogstudio.github.io/game-mahjong +[mahjong-version-tile-selection]: https://ogstudio.github.io/game-mahjong/versions/010/mjin-player.html diff --git a/ru/news/2018-02-16-mahjong-techdemo1-gameplay.md b/ru/news/2018-02-16-mahjong-techdemo1-gameplay.md new file mode 100644 index 0000000..3e7fc2c --- /dev/null +++ b/ru/news/2018-02-16-mahjong-techdemo1-gameplay.md @@ -0,0 +1,34 @@ +Title: Первая технодемка OGS Mahjong 2: Игровая механика +Date: 2018-02-16 00:00 +Category: News +Slug: mahjong-techdemo1-gameplay +Lang: ru + +![Конец партии Маджонг][screenshot] + +Мы ради сообщить о выпуске первой технической демонастрации OGS Mahjong 2. Её цель была в проверке игровой механики на всех поддерживаемых платформах. + +Проверьте технодемку на своей платформе: + +* Запустить [версию для веба][tech-demo-1-web] в браузере +* Получить [версию для Android][tech-demo-1-android] +* Получить [версию для Windows][tech-demo-1-windows] +* Получить [версию для Linux][tech-demo-1-linux] +* Получить [версию для macOS][tech-demo-1-macos] + +Замечания: + +* Версия для iOS не выпущена, т.к. нет простого способа её распространения вне AppStore. +* Запустите скрипт `run` в версиях для Linux и macOS. +* Версия для Linux доступна лишь в 64-битном варианте. +* Версия для macOS должна работать на macOS Sierra или новее. + +На сегодня это всё, хорошей проверки! + +[screenshot]: ../../images/2018-02-16-mahjong-techdemo1-gameplay.png + +[tech-demo-1-web]: https://ogstudio.github.io/game-mahjong/versions/013/mjin-player.html +[tech-demo-1-android]: https://drive.google.com/open?id=1KW8IEN8Dpz8ODeg8BctVSJyzj9-AL9hR +[tech-demo-1-windows]: https://drive.google.com/open?id=1oj0-OXSmEatttzn86u2vgP9SRAIC0ozB +[tech-demo-1-linux]: https://drive.google.com/open?id=1EX7kLIThLiMz9_W7VmBPySms3mlrF-i6 +[tech-demo-1-macos]: https://drive.google.com/open?id=1KWnvbHzan8MpMcZPG2QC-7KWoEYbqrM2 diff --git a/ru/news/2018-04-20-openscenegraph-examples.md b/ru/news/2018-04-20-openscenegraph-examples.md new file mode 100644 index 0000000..ebe18ba --- /dev/null +++ b/ru/news/2018-04-20-openscenegraph-examples.md @@ -0,0 +1,36 @@ +Title: Кросс-платформенные примеры OpenSceneGraph +Date: 2018-04-20 00:00 +Category: News +Slug: openscenegraph-examples +Lang: ru + +![iOS Simulator отображает куб][screenshot] + +Эта статья резюмирует создание первых двух кросс-платформенных примеров OpenSceneGraph. + +К тому времени, как мы выпустили [первую техническую демонстрацию OGS Mahjong 2][tech-demo-1], нас уже дожидался [запрос на описание работы с изображениями][android-image-issue] в OpenSceneGraph на Android. Сначала мы рассматривали возможность создания нового самоучителя для [кросс-платформенного руководства OpenSceneGraph][osgcpg], но позже мы оценили необходимые трудозатраты и посчитали их излишними для освещения такой небольшой темы (по сравнению с тем, что умеет средняя игра) как загрузка изображений. Мы решили продолжить делиться нашими знаниями в виде конкретных примеров. Так на свет появились [кросс-платформенные примеры OpenSceneGraph][osgcpe]. + +Каждый пример: + +* объясняет критически важный код для выполнения поставленной задачи +* акцентирует внимание на нюансах, специфичных для каждой платформы +* предоставляет реализации примера для десктопа, мобилок и веба +* предоставляет сборку для веба, чтобы упростить оценку результата + +Первая пара примеров освещает следующие темы: + +* Встраивание ресурсов в исполняемый файл: значительное упрощение работы с ресурсами на всех платформах +* Использование изображений PNG с помощью плагинов PNG: описание требований, необходимых для сборки и использования плагинов PNG + +Мы будем и впредь добавлять новые примеры по мере продвижения нашей разработки OGS Mahjong 2. + +На этом мы заканчиваем резюме о создании первых двух кросс-платформенных примеров OpenSceneGraph. + + +[screenshot]: ../../images/2018-04-20-openscenegraph-examples.png + +[tech-demo-1]: mahjong-techdemo1-gameplay.html +[android-image-issue]: https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues/4 +[osgcpg]: https://github.com/OGStudio/openscenegraph-cross-platform-guide +[osgcpe]: https://github.com/OGStudio/openscenegraph-cross-platform-examples + diff --git a/ru/news/2018-06-27-example-driven-development.md b/ru/news/2018-06-27-example-driven-development.md new file mode 100644 index 0000000..f595f02 --- /dev/null +++ b/ru/news/2018-06-27-example-driven-development.md @@ -0,0 +1,52 @@ +Title: Разработка через создание примеров +Date: 2018-06-27 00:00 +Category: News +Slug: example-driven-development +Lang: ru + +![Брокер отладки][screenshot] + +Эта статья описывает то, как создание третьего кросс-платформенного примера OpenSceneGraph привело нас к разработке через создание примеров. + +**ИЗМЕНЕНИЯ ОТ 2018-08**: третий пример был переименован в четвёртый в связи с причинами, изложенными в [следующей статье][article-2018-august]. + +**Третий кросс-платформенный пример OpenSceneGraph** + +Третий кросс-платформенный пример OpenSceneGraph содержит реализацию [удалённой отладки, работающей на всех поддерживаемых платформах][osgcpe-04]. Этот пример относится не столько к OpenSceneGraph, сколько к поддержке различных платформ. + +Удалённое взаимодействие ныне предполагает использование HTTP(s) поверх TCP/IP. Таким образом, первая идея реализации подразумевала встраивание сервера HTTP в приложение, чтобы клиенты HTTP могли взаимодействовать с этим сервером. + +Однако, раздача HTTP на различных платформах имеет свои сложности: + +* на десктопах есть межсетевые экраны (firewalls) +* на мобилках есть ограничения по работе фоновых процессов +* веб-браузеры являются клиентами HTTP по дизайну + +Эти ограничения подтолкнули нас к созданию посредника между отлаживаемым приложением и пользовательским интерфейсом отладки. [Брокер отладки][debug-broker], небольшое приложение Node.js, стало тем самым посредником. Брокер отладки не имеет внешних зависимостей, поэтому его легко использовать практически везде. Благодаря тому, что брокер отладки - это серверное приложение, его достаточно настроить лишь раз и использовать для любого количества приложений. + +И [пользовательский интерфейс отладки][debug-ui], и [брокер отладки][debug-broker] используют JavaScript, т.к. мы хотели сделать эти инструменты максимально доступными без предварительной установки. Данное решение привело нас к реализации инструментов именно для веб-браузеров. Десктопное приложение потребовало бы дополнительных усилий на установку и поддержку, что лишь усложнило бы работу с инструментами. + +**Разработка через создание примеров** + +После создания третьего примера мы осознали важность и достоинства разработки новых функций вне основного проекта: + +* освобождение основного проекта от шума изменений (commit noise) +* публичное освещение новой функции приглашает всех к её изучению, критике и улучшению + +Когда мы делимся нашими знаниями: + +* мы обязаны создавать документацию, объясняющую происходящее (в том числе для нас самих позже) +* мы обязаны сторониться непродуманных решений, т.к. они повредят нашей репутации + +С этого момента все новые функции вроде обработки ввода, загрузки раскладок Маджонга, кэширования ресурсов и т.п. мы будем сначала реализовывать в виде примеров. Мы называем этот подход разработкой через создание примеров. + +На этом мы заканчиваем описание того, как создание третьего кросс-платформенного примера OpenSceneGraph привело нас к разработке через создание примеров. + + +[screenshot]: ../../images/2018-06-27-example-driven-development.png +[article-2018-august]: examples-and-dependencies.html + +[osgcpe-04]: https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/04.RemoteDebugging +[debug-broker]: https://github.com/OGStudio/debug-broker +[debug-ui]: https://github.com/OGStudio/debug-ui + diff --git a/ru/news/2018-08-21-examples-and-dependencies.md b/ru/news/2018-08-21-examples-and-dependencies.md new file mode 100644 index 0000000..018d64a --- /dev/null +++ b/ru/news/2018-08-21-examples-and-dependencies.md @@ -0,0 +1,59 @@ +Title: Примеры и зависимости +Date: 2018-08-21 00:00 +Category: News +Slug: examples-and-dependencies +Lang: ru + +![Облако][screenshot] + +Эта статья описывает два новых кросс-платформенных примера OpenSceneGraph и изменение в работе с зависимостями. + +**Примеры клиента HTTP и выбора узла сцены** + +После окончания работы над [примером удалённой отладки][osgcpe-04] и [сообщения об этом][article-2018-june] мы с удивлением обнаружили, что безопасное соединение HTTPS между отлаживаемым приложением и брокером отладки работало лишь в веб-версии примера. Десктопная и мобильная версии работали лишь с помощью обычного соединения HTTP. + +Т.к. текущая схема отладки не имеет авторизации, отладка по обычному соединению HTTP не несёт никаких проблем. Однако, если мы хотим получить доступ к ресурсам, расположенным на популярных сайтах вроде GitHub и BitBucket, мы обязаны поддерживать HTTPS. + +Необходимость поддержки HTTPS на каждой платформе побудила нас создать [пример клиента HTTP][osgcpe-03]. Оказалось, что каждая платформа имеет собственные правила по работе с HTTPS: + +* веб (Emscripten) предоставляет Fetch API +* десктоп может использовать Mongoose с OpenSSL +* Android предоставляет HttpUrlConnection в языке Java +* iOS предоставляет NSURLSession в языке Objective-C + +Необходимость поддержки разных языков на разных платформах привела к созданию так называемого шаблона "хозяин-гость": + +* гость (не привязан к платформе) + * имеет сетевое представление + * используется кросс-платформенным кодом на C++ +* хозяин (определённая платформа) + * опрашивает гостя на наличие ожидающих выполнение запросов + * обрабатывает их + * сообщает результат гостю + +[Пример выбора узла сцены][osgcpe-05] оказался простым и не создал особых проблем. + +**Изменение в работе с зависимостями** + +Больше года нам приходилось жить со следующими [недостатками][osg-shortcomings] сборки OpenSceneGraph официальными средствами: + +* проблемы сборки под macOS ввиду использования определённых флагов сборки +* обход механизмов проверки зависимостей для использования PNG на Android +* принадлежность сборок iOS под симулятор и устройство к разным проектам Xcode +* ожидания в 20-30 минут для сборки OpenSceneGraph + +Эти недостатки замедляли нас и усложняли разработку новых примеров. После того, как мы десятый раз столкнулись с указанными проблемами в этом месяце, мы решили исправить их раз и навсегда. Теперь мы собираем OpenSceneGraph как часть каждого примера за 2-3 минуты без какой-либо магии. Также мы использовали этот подход включения зависимости как части каждого примера для остальных библиотек вроде Mongoose и libpng-android. + +Теперь без этих препятствий мы можем разрабатывать быстрее. Это значительно облегчит создание следующей технической демонстрации Mahjong 2! + +На этом мы заканчиваем описание двух новых кросс-платформенных примеров OpenSceneGraph и изменения в работе с зависимостями. + +[screenshot]: ../../images/2018-08-21-examples-and-dependencies.png + +[article-2018-june]: example-driven-development.html + +[osgcpe-03]: https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/03.HTTPClient +[osgcpe-04]: https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/04.RemoteDebugging +[osgcpe-05]: https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/05.NodeSelection + +[osg-shortcomings]: http://forum.openscenegraph.org/viewtopic.php?t=17443 diff --git a/ru/news/2018-10-02-mahjong-demo2.md b/ru/news/2018-10-02-mahjong-demo2.md new file mode 100644 index 0000000..c54d936 --- /dev/null +++ b/ru/news/2018-10-02-mahjong-demo2.md @@ -0,0 +1,44 @@ +Title: OGS Mahjong 2: Demo 2 +Date: 2018-10-02 00:00 +Category: News +Slug: mahjong-demo2 +Lang: ru + +![Начало партии Маджонг][screenshot] + +Мы рады сообщить о выпуске второй демонстрации OGS Mahjong 2. Её целью были улучшение техники разработки и создание надёжной основы кроссплатформенной разработки. + +**Выпуск** + +Запустите последний выпуск OGS Mahjong 2 в вашем браузере: [http://ogstudio.github.io/ogs-mahjong](http://ogstudio.github.io/ogs-mahjong) + +Рекомендуем запускать игру с параметром `seed` следующим образом: [http://ogstudio.github.io/ogs-mahjong?seed=0](http://ogstudio.github.io/ogs-mahjong?seed=0) + +Это позволяет вам играть в ту же самую раскладку после перезапуска. + +Каждое значение зерна (seed) однозначно задаёт расположение фишек, так что разные значения зерна дают разнообразие партий. + +**Техника разработки и основа** + +Во время разработки второй демонстрации мы перешли с обычной разработки на [разработку через создание примеров][article-2018-june]. Это привело к появлению трёх различных хранилищ для обеспечения разработки OGS Mahjong 2: + +* Хранилище [кроссплатформенных примеров OpenSceneGraph][osgcpe] содержит основу вроде работы с ресурсами, создание графического окна и т.д. +* Хранилище [компонент OGS Mahjong][omc] содержит специфичную для Маджонга функциональность вроде разбора раскладки, сопоставления фишек и т.д. +* Хранилище [OGS Mahjong][ogs-mahjong] содержит снимок набора функциональностей `компонент OGS Mahjong`, которые определяют версию игры. Например, версия `Demo 2` почти полностью повторяет пример [05.ColorfulStatus][omc-05] из `компонент OGS Mahjong`. + +**За пределами пасьянса Маджонг** + +В дополнение к параметру `seed` вы можете указать игре использовать удалённую раскладку, расположенную на GitHub: [http://ogstudio.github.io/ogs-mahjong?seed=0&layout=github://OGStudio/ogs-mahjong-components/data/cat.layout](http://ogstudio.github.io/ogs-mahjong?seed=0&layout=github://OGStudio/ogs-mahjong-components/data/cat.layout) + +Использование удалённых ресурсов открывает огромные возможности, т.к. позволяет любому желающему создать раскладку на свой вкус и моментально её проверить. + +Наш следующий шаг - это выделение игровой логики в виде ресурса. + + +[screenshot]: ../../images/2018-10-02-mahjong-demo2.png + +[article-2018-june]: example-driven-development.html +[osgcpe]: https://github.com/OGStudio/openscenegraph-cross-platform-examples +[omc]: https://github.com/OGStudio/ogs-mahjong-components +[ogs-mahjong]: https://bitbucket.org/ogstudio-games/ogs-mahjong +[omc-05]: https://github.com/OGStudio/ogs-mahjong-components/tree/master/05.ColorfulStatus diff --git a/ru/news/2018-11-19-ideal-gamedev.md b/ru/news/2018-11-19-ideal-gamedev.md new file mode 100644 index 0000000..d5d1cf3 --- /dev/null +++ b/ru/news/2018-11-19-ideal-gamedev.md @@ -0,0 +1,59 @@ +Title: Идеальные игры и средства для их разработки +Date: 2018-11-19 00:00 +Category: News +Slug: ideal-gamedev +Lang: ru + +![Человек без и с инструментами][screenshot] + +В этой статье мы обсудим, как выглядят идеальные видеоигра и инструмент для разработки видеоигр, по нашему мнению. + +**Вопросы** + +Как вы знаете, [целями Opensource Game Studio][ogs-goals] являются: + +* создание бесплатных инструментов для разработки видеоигр +* создание видеоигр с помощью этих инструментов +* создание самоучителей по разработке видеоигр + +В этот раз мы решили задать себе пару простых вопросов: + +* Какова идеальная видеоигра? +* Каков идеальный инструмент для разработки видеоигр? + +Ниже представлены наши ответы. + +**Ответ 1: Видеоигра идеальна, если она доставляет максимально возможное удовольствие** + +Несмотря на то, что содержание является, пожалуй, самой важной частью, удерживающей человека в игре, техническая сторона является транспортом для доставки этого содержания. Существует немало технических проблем, которые могут полностью испортить впечатление даже от превосходного содержания: + +* недостаточная доступность: игра не идёт на оборудовании человека +* недостаточная оптимизация: игра тормозит +* критичные ошибки: игра падает время от времени + +Мы тратим много сил, чтобы сделать наши игры доступными везде. Именно поэтому мы выпустили [вторую демонстрацию OGS Mahjong 2][mahjong-demo2] лишь для веба: т.к. вы можете запустить веб-версию практически где угодно. + +**Ответ 2: Инструмент для разработки видеоигр идеален, если он позволяет создать игру мечты в кратчайшие возможные сроки** + +Несмотря на то, что мы тратим много усилий на то, чтобы делиться своими знаниями с помощью [руководств][osgcpg] и [самоучителей][osgcpe], мы осознаём, что на работу с ними уходит много времени. Сейчас нельзя создать даже простейшую [видеоигру на память][concentration] без выполнения следующих шагов: + +* настроить окружение разработки +* написать код +* собрать приложение +* отладить приложение +* повторить шаги `написать-собрать-отладить` столько раз, сколько нужно + +Написание кода и отладка, пожалуй, являются конечными формами входа и выхода любого программного обеспечения, поэтому мы их не избежим. Однако, мы можем полностью избавиться от шагов (или хотя бы значительно сократить их) `настройки окружения разработки` и `сборки`. Именно на это мы и потратим ближайшие месяцы. + +Наша цель на ближайшие месяцы состоит в том, чтобы создать такой инструмент разработки видеоигр, чтобы любой программист (или достаточно квалифицированный человек) мог создать [видеоигру на память][concentration] с нуля за час. + +На этом мы заканчиваем обсуждение, как выглядят идеальные видеоигра и инструмент для разработки видеоигр, по нашему мнению. + + +[screenshot]: ../../images/2018-11-19-ideal-gamedev.png + +[ogs-goals]: ../../ru/page/about.html +[mahjong-demo2]: mahjong-demo2.html +[osgcpg]: https://github.com/OGStudio/openscenegraph-cross-platform-guide +[osgcpe]: https://github.com/OGStudio/openscenegraph-cross-platform-examples +[concentration]: https://en.wikipedia.org/wiki/Concentration_(game) diff --git a/ru/news/2019-01-01_year-of-rethinking.md b/ru/news/2019-01-01_year-of-rethinking.md new file mode 100644 index 0000000..17b7e59 --- /dev/null +++ b/ru/news/2019-01-01_year-of-rethinking.md @@ -0,0 +1,21 @@ +Title: Год переосмысления +Date: 2019-01-01 0:01 +Category: News +Slug: 2019-year-of-rethinking +Lang: ru + +![Бенгальский огонь](../../images/2017-12-31-celebration.jpg) + +Этот год во-многом стал для нас годом переосмысления и определенности. Как некоторые из вас помнят, мы начинали этот проект, для создания среды для разработки игр. В течение многих лет идея развивалась от одной формы к другой, иногда изменения были значительными, в других случаях мы отбрасывали весь код и начинали заново. + +В результате всех этих изменений мы подошли к концу 2018 года без готового инструмента, но с четким пониманием того, что за инструмент мы создаем. + +Существует множество прекрасных средств для разработки игр. Некоторые из них даже с открытым исходным кодом. Мы потратили много времени, пробуя разные, и некоторые из них действительно заслуживают внимания. + +Мы не можем, и мы не хотим конкурировать с ними. Наши цели - максимальная доступность и простота. Наша основная цель - создать инструмент, подходящий для обучения детей, но достаточно мощный, чтобы его можно было использовать для создания прототипов. + +Сейчас, чтобы использовать любой мощный инструмент разработки, вам нужен ПК или ноутбук. Мы хотим сделать набор инструментов, который можно использовать где угодно. Мы уже сделали некоторые шаги в этом направлении, и мы продолжим работать в этом направлении. + +Итак, мы начинаем новый год без четких планов, но с четким знанием нашей цели. Давайте подождем и посмотрим, будет ли этот подход работать лучше. + +Счастливого Нового Года всем вам! До скорой встречи! diff --git a/ru/news/2019-02-04_teaching-kids-to-program.md b/ru/news/2019-02-04_teaching-kids-to-program.md new file mode 100644 index 0000000..8a2f2e3 --- /dev/null +++ b/ru/news/2019-02-04_teaching-kids-to-program.md @@ -0,0 +1,242 @@ +Title: Обучение детей программированию +Date: 2019-02-04 00:00 +Category: News +Slug: teaching-kids-to-program +Lang: ru + +![Ученики и учителя][screenshot] + +В этой статье Михаил делится своим опытом обучения детей программированию. + +Он расскажет о следующем: + +- организация процесса обучения +- программа обучения +- игра на память +- инструмент программирования +- уроки +- результаты и планы + +**Организация процесса обучения** + +Обучение проходит в рамках социальной ответственности бизнеса: компания предоставляет помещение с оборудованием, а также объединяет сотрудников, желающих попробовать себя в роли преподавателей, с сотрудниками, желающими обучить своих детей. Всё это исключительно на добровольной основе. + +Потенциальных преподавателей разбивают по группам таким образом, чтобы группа из трёх преподавателей состояла из одного опытного и двух новичков. Одна группа преподавателей ведёт одну группу учеников. Учеников разбивают по возрасту и навыкам. + +В 2018-м я второй раз участвовал в программе обучения детей в возрасте примерно десяти лет. Наша группа работала с октября по декабрь 2018-го по субботам с 10:00 до 12:00. Пользуясь служебным положением, я также затащил на курсы и свою жену. + +**Программа обучения** + +Когда я участвовал первый раз, наша группа обучала детей программированию довольно бесцельно: мы придумывали простейшие задания на урок для объяснения операторов. В результате в конце обучения у нас не было ничего конкретного, что можно было бы оценить, чем похвастаться и что проанализировать. + +В этот второй раз я решил, что мы с детьми реализуем так называемую игру на память. Критерием успешности обучения я определил следующее условие: каждый ученик к концу курса самостоятельно создаёт простейшую игру на память с нуля за 1 час. + +Для достижения этого критерия я решил проверить утверждение "Повторение - мать учения", поэтому каждый урок мы создавали всё с нуля. Подчеркну, что мы ничего не сохраняли в учётной записи учеников. Задача была в сохранении навыка создания игры в голове, не в компьютере. + +**Игра на память** + +Давайте рассмотрим, что представляет собой игра на память. + +**1)** В простейшем случае у нас есть 16 карт, причём уникальных лишь 8, остальные 8 являются их парами. + +![Карты лицом вверх][all-cards-face-up] + +В представленном изображении у нас есть лишь две карты с котом, собакой и т.д.. + +**2)** В начале игры мы перемешиваем карты и раскладываем их **рубашкой** вверх. + +![Карты лицом вниз][all-cards-face-down] + +**3)** Первый из участников игры открывает две карты. + +![Пара карт][first-pair] + +**4)** Если карты различаются, возвращаем их в исходное положение: кладём **рубашкой** вверх. + +![Карты лицом вниз][all-cards-face-down] + +**5)** Следующий участник игры открывает другую пару карт. + +![Вторая пара карт][second-pair] + +**6)** Если карты совпадают, убираем их с игрового поля. + +![Пара совпадающих карт убрана][remove-pair] + +Цель игры в том, чтобы убрать все карты с поля. Игра в данном виде не включает соревнование, поэтому играть можно одному человеку. + +С одной стороны, игра на память довольно проста, с другой стороны, реализация игры затрагивает основную функциональность, необходимую для создания любой более-менее сложной игры: + +- создание элементов +- их расстановка на поле +- выбор элементов +- сравнение выбранных элементов +- скрытие совпадающих элементов + +**Инструмент программирования** + +В качестве инструмента мы использовали среду [Scratch][scratch]. Она рассчитана на обучение детей программированию, поэтому каждое действие, каждый оператор в ней представлен графически. + +Например, следующим скриптом можно повернуть кота на 360 градусов за секунду: + +![Скрипт][cat-script] + +Вот так выглядит результат: + +![Анимация][cat-animation] + +Замечу, что это довольно успешное решение для представления кода графически. Например, платное решение, продвигаемое нынче компанией SAP, предполагает использование так называемых кубиков для программирования: + +![SAP UI][sap-ui] + +Тут можно лишь ввести в нужные поля нужные значения. Если потребуется что-то нестандартное, то поможет лишь скрипт, который представлен опять же кубиком. + +По личному опыту скажу, что решение Scratch не тормозит от слова совсем, чего не скажешь о решении SAP. + +**Первый урок** + +Первый урок являлся вводным, поэтому компьютеры мы не использовали. + +План был следующим: + +1. Познакомиться +2. Сыграть в игру на память +3. Изучить понятие алгоритма +4. Написать алгоритм игры +5. Проанализировать урок + +**1)** Знакомство + +Преподаватели с учениками встают в круг. Это уравнивает всех и делает каждого участником команды. + +Первый участник называет своё имя и рассказывает о том, почему он решил посетить этот курс. Второй и последующие участники сначала повторяют имя и рассказ каждого предыдущего участника, после чего называют своё имя и рассказывают. + +Примерно так это выглядит: + +1. Вася: "Меня зовут Вася, я хочу изучить Scratch, потому что меня заставил папа" +2. Дима: "Это Вася, заниматься Scratch'ем его заставляет папа. Меня зовут Дима, и это мой четвёртый год Scratch'а" +3. Оля: "Это Вася, его заставляют родители. Это Дима, он практически ветеран Scratch'а. Меня зовут Оля, я первый год преподаю, буду учиться вместе со всеми" + +Данный формат знакомства преследует следующие цели: + +- Знакомство + - Каждый участник команды должен знать по имени остальных участников команды +- Общее пространство + - Все участники в круге, а не за рабочими местами, что уменьшает отвлечение на игры в компьютере +- Равенство + - И преподаватели, и ученики в одном круге, что уравновешивает всех в качестве участников команды без иерархии +- Внимание + - Каждый участник команды должен внимательно слушать остальных участников, чтобы правильно повторить сказанное ими +- Обратная связь + - Каждый участник команды должен максимально чётко излагать свою мысль, иначе остальные просто не смогут её повторить +- Веселье + - Проблемы с запоминанием имён всех веселят + +**2)** Игра на память в карты + +1. Берём две колоды карт и выбираем из них по 8 одинаковых +2. Раскладываем карты в сетку 4 x 4 рубашкой вверх на столе +3. Ученики встают вокруг стола +4. Каждый ученик по очереди переворачивает пару карт + * Если карты совпали, то убираем их с поля + * Если карты различаются, то переворачиваем их рубашкой вверх + +Ученикам очень нравится играть в настольные игры. В ходе игры преподаватели проговаривают то, что происходит. + +После пары партий переходим к изучению понятия алгоритма. + +**3)** Понятие алгоритма + +1. Спрашиваем сначала учеников, даём возможность высказаться, узнаём уровень каждого ученика +2. При необходимости поправляем высказывания, если они близки к ожидаемому ответу +3. Предлагаем написать алгоритм перевода человека из состояния "стоит за дверью кабинета" в состояние "работает за компьютером в кабинете" + +Ученикам очень нравится подходить к доске и писать на ней, поэтому по очереди вызываем каждого ученика, чтобы он писал по одному пункту алгоритма. Самого активного ученика используем в качестве исполнителя алгоритма. + +**4)** Алгоритм игры + +Предлагаем написать алгоритм игры, опять вызываем каждого добавлять по одному пункту на доске. После завершения описания алгоритма ещё раз играем с картами, но на этот раз каждый ученик должен проговаривать шаг алгоритма. + +Выглядит это примерно так: + +1. Вася: "Раскладываем 16 карт рубашкой вверх" +2. Дима: "Переворачиваем пару карт" +3. Паша: "Если две карты различаются, переворачиваем их рубашкой вверх" +4. Филипп: "Переворачиваем пару карт" +5. Миша: "Если две карты совпадают, убираем их с поля" + +**5)** Анализ урока + +На этом первый урок заканчивается, и у преподавателей появляется возможность обсудить как свои впечатления об уроке, так и об учениках, выработать подходы к тихоням и активистам, договориться о дальнейших планах на следующие уроки. + +У нас были следующие решения: + +1. Рассаживать тихонь и активистов через одного, чтобы соблюсти баланс шума и тишины. Иначе группа активистов создаёт очаг бури, а группа тихонь - очаг пустыни, что замедляет процесс обучения. +2. Требовать от учеников точности, т.к. активисты любят кривляться, что плохо влияет на дисциплину. + +**Второй и третий уроки** + +Последующие уроки мы опять же начинали с разминки: вставали в круг, называли имя и рассказывали, кто что сделал. А если не сделал, то почему. Как и прежде, каждый участник сначала повторял сказанное предыдущими и лишь затем говорил о себе. + +На втором уроке мы создавали требования для элемента игрового поля и пытались создать этот элемент в Scratch. Это вполне удалось. + +На третьем уроке мы пытались создать 16 элементов и расположить их в сетке 4x4. Тут мы застопорились, т.к. ученики не смогли понять систему координат, чтобы расположить 16 элементов в сетке. Стало очевидно, что планы уроков являются лишь планами, а действительность вносит свои изменения. + +У нас было два пути решения проблемы с системой координат: + +1. Продолжать обучать системе координат с риском не успеть создать игру до конца курса +2. Изменить требования к игре таким образом, чтобы система координат была не нужна + +Мы решили пойти вторым путём, т.к. мы всё-таки не школа и цель у нас была научить создавать игру, т.е. применять знания на практике, а не в теории. Поэтому сетку элементов 4x4 мы решили заменить кругом из 16 элементов. + +Данное решение привело меня к следующим выводам: + +1. Для решения задачи часто можно найти более простой путь +2. Этот путь легче для понимания, хоть и менее гибкий +3. Перейти на сложный путь для увеличения гибкости можно позже, когда это будет действительно необходимо +4. Упрощение приближает к конечной цели, усложнение отдаляет от неё + +**Четвёртый и последующие уроки** + +С четвёртого урока мы отменили стадию написания требований, т.к. она начала занимать бОльшую часть урока: мы снова сделали уклон на практику, а не теорию, чтобы уложиться в сроки. На этот раз все требования были написаны заранее и выданы "сверху". Но всё равно их никто не читал. + +Четвёртый и пятый уроки мы потратили на создание 16 элементов в виде круга, выделение пары элементов и проверку на их совпадение. + +С шестого урока и до девятого включительно мы каждый раз воссоздавали игру с нуля. С каждым разом это происходило всё быстрее и быстрее, поэтому с восьмого урока мы ввели турнирную таблицу, где записывали этапы создания игры и время каждого ученика. + +**Последний урок** + +К последнему уроку все справлялись с созданием игры с нуля более-менее самостоятельно за час-два. + +Такова турнирная таблица последнего урока (имена скрыты): + +![Турнирная таблица][leaderboard] + +А ниже можно посмотреть на создание игры на память в Scratch ученика, который создал игру быстрее всех: за 30 минут. + + +
    + +**Результаты и планы** + +Результат обучения превзошёл мои ожидания: + +- трое учеников успели примерно за час или быстрее +- двое примерно за полтора часа или быстрее + +В этом году я планирую провести обучение не с помощью Scratch, а с использованием инструментария Opensource Game Studio: ученики будут работать с Lua, Git и GitHub Pages. + +На этом мы заканчиваем статью об опыте Михаила по обучению детей программированию. + +[screenshot]: ../../images/2019-02-04_teaching-kids-to-program-team.png + +[all-cards-face-up]: ../../images/2019-02-04_teaching-kids-to-program-all-cards-face-up.png +[all-cards-face-down]: ../../images/2019-02-04_teaching-kids-to-program-all-cards-face-down.png +[first-pair]: ../../images/2019-02-04_teaching-kids-to-program-first-pair.png +[second-pair]: ../../images/2019-02-04_teaching-kids-to-program-second-pair.png +[remove-pair]: ../../images/2019-02-04_teaching-kids-to-program-remove-pair.png +[scratch]: https://scratch.mit.edu/ +[cat-script]: ../../images/2019-02-04_teaching-kids-to-program-cat-script-ru.png +[cat-animation]: ../../images/2019-02-04_teaching-kids-to-program-cat-animation.gif +[sap-ui]: ../../images/2019-02-04_teaching-kids-to-program-sap-ui.png +[leaderboard]: ../../images/2019-02-04_teaching-kids-to-program-leaderboard.png diff --git a/ru/news/2019-04-16_defense.md b/ru/news/2019-04-16_defense.md new file mode 100644 index 0000000..9b1bc4a --- /dev/null +++ b/ru/news/2019-04-16_defense.md @@ -0,0 +1,55 @@ +Title: Защита доступности +Date: 2019-04-16 00:00 +Category: News +Slug: defending-availability +Lang: ru + +![Алтайская река Катунь][screenshot] + +В этой статье мы расскажем о начале усилий по защите себя от решений третьих сторон. + +С первого дня существования проекта Opensource Game Studio мы используем решения третьих сторон для достижения своей цели по созданию лучших средств разработки игр. Мы использовали форумы, системы отслеживания задач, списки рассылок, социальные сети, системы контроля версий кода, хостинги, компиляторы, библиотеки и т.д.. Каждое решение третьих сторон имеет свой жизненный цикл. + +Существуют две основные причины, по которым мы меняли решение третьих сторон: + +* Изменение наших нужд +* Закрытие решения + +Закрытие [Google Code][google-code] в 2016 было нашим первым опытом знакомства с мёртвой рукой бизнеса. Мы использовали SVN, Mercurial и систему отслеживания задач Google. Мы были вынуждены отказаться от них. + +Мы переместили наш исходный код и в [BitBucket][bitbucket], и в [GitHub][github], т.к. не было больше желания складывать все яйца в одну корзину. Мы стали мудрее благодаря закрытию Google Code. + +Систему отслеживания задач ждала иная судьба. Сначала мы использовали Bugzilla, но неудобство этой системы привело к тому, что мы заменили её на Google Sheets. На текущий момент мы используем Google Sheets для планирования и журналирования работ по проекту. Также мы используем Google Docs, чтобы писать эти самые новости и проверять их перед публикацией. + +Закрытие [goo.gl][goo-gl] (сокращатель URL) в 2019 было нашей второй встречей с мёртвой рукой бизнеса. Мы использовали goo.gl для сокращений URL от Google Docs внутри команды. Особого урона это закрытие не принесло, однако, оно лишь подтвердило, что решения третьих сторон не наши, а их. + +Microsoft [поглотила GitHub][github-acquisition] в 2018. Пока что (апрель 2019) Microsoft сопутствует успех в усилении роли GitHub благодаря [выпуску GitPod][gitpod], который позволяет разработчикам собирать проекты GitHub в один клик. Тем не менее, Microsoft известна в том числе и закрытием [Codeplex][codeplex] в 2017. + +Это короткая история о закрытиях и поглощениях в течение последних четырёх лет высвечивает основную цель бизнеса: увеличение прибыли. Мы лично ничего не имеем против этой цели. В 21-м веке действительно сложно жить без заработка. Мы не исключение, мы тоже платим свои счета. Однако, более гуманным действием было бы отпустить исходный код закрытых решений на волю, чтобы заинтересованные разработчики продолжили развитие этих решений, если им того хотелось. Очевидно, что такое положение дел привело бы к увеличению конкуренции со сделавшей это компанией, а компании всячески стараются избегать конкуренции. + +Мы не бизнес, мы не получаем никакой прибыли с наших инструментов. Наши цели состоят в том, чтобы создавать инструменты и выпускать их на волю, чтобы вы могли их использовать. Сейчас мы используем GitHub для распространения некоторых [самоучителей][tutorials] и [инструкций][guides]. Представьте, что Microsoft решит закрыть GitHub через пару лет. Почему? Может быть, потому что [люди постепенно мигрируют][migration] с GitHub на GitLab. + +Как мы можем защитить себя от мёртвой руки бизнеса? Мы консолидируем наши инструменты, самоучители и игры на этом самом сайте. Первым шагом, теперь завершённым, было создание генератора статического сайта. Наш сайт теперь сгенерирован именно этим генератором. + +На текущий момент сгенерированный сайт обладает следующей функциональностью: + +* новости, занимающие несколько страницы +* отдельные страницы +* выбор языка для всего сайта + +В течение года мы сделаем сайт ещё более удобным. Оставайтесь на связи! + +На этом мы заканчиваем рассказ о начале усилий по защите себя от решений третьих сторон. + + +[screenshot]: ../../images/2019-04-16_defending-availability.jpg +[google-code]: https://code.google.com/archive/ +[bitbucket]: https://bitbucket.org/ogstudio/ +[github]: https://github.com/ogstudio/ +[goo-gl]: https://developers.googleblog.com/2018/03/transitioning-google-url-shortener.html +[github-acquisition]: https://github.blog/2018-10-26-github-and-microsoft/ +[gitpod]: https://www.gitpod.io/blog/gitpod-launch/ +[codeplex]: https://devblogs.microsoft.com/bharry/shutting-down-codeplex/ +[tutorials]: https://github.com/OGStudio/openscenegraph-cross-platform-examples +[guides]: https://github.com/OGStudio/openscenegraph-cross-platform-guide +[migration]: https://hackernoon.com/git-wars-why-im-switching-to-gitlab-e471f5e8be2c diff --git a/ru/news/2019-08-05_on-the-way-to-durable-applications.md b/ru/news/2019-08-05_on-the-way-to-durable-applications.md new file mode 100644 index 0000000..c769db7 --- /dev/null +++ b/ru/news/2019-08-05_on-the-way-to-durable-applications.md @@ -0,0 +1,83 @@ +Title: На пути к долговечным приложениям +Date: 2019-08-05 00:00 +Category: News +Slug: on-the-way-to-durable-applications +Lang: ru + +![Псковское вече][screenshot] + +В этой статье мы расскажем о нашем первом долговечном приложении для настольных ПК - генераторе статических сайтов ПСКОВ. + +**Долговечность** + +Под долговечным приложением мы понимаем такое приложение, которое работает без единого изменения на операционных системах, выпущенных в период 2010-2030 годов. Иными словами, долговечное приложение обладает 10-летней обратной совместимостью и 10-летней прочностью. Впрочем, [ПСКОВ][pskov] работает даже на Windows 2000, так что у него 19-летняя обратная совместимость. + +Технически ПСКОВ представляет из себя один файл HTML с упакованными в нём разметкой (HTML), стилями (CSS) и кодом (JavaScript). ПСКОВ исполняется строго в веб-браузере без взаимодействия с сервером. + +Подобная организация даёт ПСКОВУ следующие возможности: + +* его можно копировать без ограничений +* его можно размещать на любом хостинге +* его можно запускать локально +* он может работать без Интернета + +10-летнюю прочность мы гарантировать не можем, т.к. будущим не владеем. Вместе с тем, история развития HTML, CSS, JavaScript говорит о том, что указанные технологии развиваются с максимально возможной обратной совместимостью. Во-первых, новые возможности JavaScript не отменяют старые. Во-вторых, производители веб-браузеров заинтересованы в том, чтобы их веб-браузеры работали с как можно большим числом сайтов. В результате, например, [тэг <center>][center-tag], объявленный устаревшим в 2014-м году, без проблем работает 5 лет спустя в 2019-м. + +В то же время у любого приложения в веб-браузере есть серьёзное ограничение - клетка, обманчиво именуемая песочницей. Эта клетка запрещает доступ как к локальной файловой системе пользователя, так и почти ко всем ресурсам в Интернете без санкции владельца ресурса (CORS). В итоге что-либо отдать приложение может либо определённому серверу, либо пользователю в виде файла для скачивания. Файлы скачивать по одному или архивом неудобно, поэтому в мире нынче преобладает серверный подход, проблем которого мы коснёмся чуть позже. + +Для освобождения ПСКОВА из клетки пришлось создать [ЛФСД][lfsa], крошечный скрипт на Python, который необходимо запускать руками на время работы ПСКОВА. ЛФСД даёт возможность ПСКОВУ работать с локальной файловой системой пользователя. Python выбран ввиду его наличия по умолчанию на Linux и macOS, а также возможности поставить на Windows (даже Windows 2000). + +**Послужной список** + +ПСКОВ успешно опробован для создания следующих небольших сайтов: + +* [сайт проекта по созданию открытых игр][ogs] +* [сам ПСКОВ][pskov] +* [ЛФСД][lfsa] +* [пример простейшего блога][pskov-sample] + +Теперь о причинах создания ПСКОВА именно в виде долговечного приложения для веб-браузера. + +**Причина №1: накопление и сохранение знаний в доступном виде** + +Уже не первый год мы трудимся над созданием удобных средств разработки игр. До недавнего времени накопленные знания представляли из себя [родные приложения][ogs-mahjong-1] для настольных ПК, [обучающие статьи][osgcpg] по смежным технологиям либо [видео результатов][showcase]. Указанные виды накопленных знаний отличает то, что знания эти по сути мертвы: + +* единицы людей скачают себе неизвестное приложение +* единицы людей прочтут хотя бы часть статей +* единицы людей посмотрят хотя бы часть видео + +Во многом эта смерть обусловлена недоступностью: нужно приложить неизвестное количество усилий для достижения неизвестного результата. Врядли таким можно кого-либо нынче заманить. Совсем иначе дело обстоит с приложением в браузере, которое потенциально работает везде: необходимо приложить известное усилие - открыть ссылку - для достижения неизвестного результата. История проведения [твиттер-революций][twitter-revolutions] говорит о том, что открывать ссылки и ставить лайки за смену "кровавого режима" умеют практически все. + +**Причина №2: народовластие** + +Нынче любой чих в Интернете осуществляется посредством сервисов, которые почти всегда принадлежат какой-то компании: [сообщения][msg], [карты][map], [поиск][search], [музыка][music], [исходный код][src] и т.д.. Следствием подобной узурпации власти становится [закрытие][shutdown-01] тех [сервисов][shutdown-02], которые контролирующая компания считает нерентабельным. Причём без какого-либо обсуждения с теми пользователям, без которых этот сервис никогда бы не взлетел. + +В других случаях компания может просто запретить конкурирующему браузеру использовать свой сервис, как это недавно [случилось с веб-версией Скайпа][skype-block]. Вместе с тем, существуют люди, не согласные с такой политикой. Благодаря им появляются [инструменты отключения][skype-free] блокировок. + +На мой взгляд, подобное положение вещей недопустимо. Однако, вина в этом лежит не только лишь на одичавшем бизнесе, но и простых пользователях, каждом из нас. Вы можете возразить, что у пользователей нет выбора, что кто-то другой (власть, рептилоиды, нужное подчеркнуть) сделал этот мир несправедливым. Кто-то может даже прямо винить власть/рептилоидов и веровать в то, что вот без них-то мы заживём. К сожалению, история человечества [говорит обратное][story]: "**государство** — это не какая-то вражья орда, оккупировавшая общество, а то, что **растет из общества и зеркально его отражает**". + +Будучи частью народа, мы начали с себя и решили употребить свою власть во благо: создавать необходимые нам приложения так, чтобы они работали для всех везде и всегда. ПСКОВ является первой попыткой, которая более чем превзошла наши ожидания. Конечно, у ПСКОВА есть свои ограничения в виде ЛФСД и работы по HTTP без шифрования; предстоит ещё многое сделать для увеличения доступности ПСКОВА, но уже сейчас мы готовы поспорить с любым: ПСКОВ через 10 лет будет работать без единого изменения. Как говорится, запомните этот твит. + +На этом мы заканчиваем рассказ о нашем первом долговечном приложении для настольных ПК - генераторе статических сайтов ПСКОВ. + +[screenshot]: ../../images/2019-08-05_on-the-way-to-durable-applications.jpg + +[pskov]: http://opengamestudio.org/pskov/ru +[center-tag]: https://www.w3schools.com/tags/tag_center.asp +[lfsa]: http://opengamestudio.org/lfsa/ru +[ogs]: http://opengamestudio.org/ru +[pskov-sample]: http://opengamestudio.org/pskov/sample/03.Blog/ru/blog/index.html +[ogs-mahjong-1]: ../game/ogs-mahjong-1.html +[osgcpg]: https://github.com/OGStudio/openscenegraph-cross-platform-guide +[showcase]: https://youtu.be/_t8TGhSgJG4 +[twitter-revolutions]: 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 +[msg]: http://twitter.com +[map]: http://2gis.ru +[search]: http://google.com +[music]: http://music.yandex.ru +[src]: http://github.com +[shutdown-01]: https://techcrunch.com/2015/03/13/google-kills-off-google-code/ +[shutdown-02]: https://www.reddit.com/r/sysadmin/comments/62orq9/codeplex_shutting_down_and_fosshub_is_sad/ +[skype-block]: https://www.reddit.com/r/firefox/comments/aw1umv/skype_web_is_now_blocked_in_firefox/ +[skype-free]: https://addons.mozilla.org/ru/firefox/addon/firefox-web-skype/ +[story]: https://ria.ru/20190723/1556775012.html diff --git a/ru/news/2019-year-of-rethinking.html b/ru/news/2019-year-of-rethinking.html index 5bd7190..0c8b6ae 100644 --- a/ru/news/2019-year-of-rethinking.html +++ b/ru/news/2019-year-of-rethinking.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +87,28 @@ -
    -

    В новостях

    -
    -

    - Год переосмысления -

    -

    - 2019-01-01 0:01 -

    -
    -
    -Бенгальский огонь
    Бенгальский огонь
    -
    +
    +

    В новостях...

    +
    +

    + Год переосмысления +

    +

    + 2019-01-01 0:01 +

    +
    +

    Бенгальский огонь

    Этот год во-многом стал для нас годом переосмысления и определенности. Как некоторые из вас помнят, мы начинали этот проект, для создания среды для разработки игр. В течение многих лет идея развивалась от одной формы к другой, иногда изменения были значительными, в других случаях мы отбрасывали весь код и начинали заново.

    В результате всех этих изменений мы подошли к концу 2018 года без готового инструмента, но с четким пониманием того, что за инструмент мы создаем.

    Существует множество прекрасных средств для разработки игр. Некоторые из них даже с открытым исходным кодом. Мы потратили много времени, пробуя разные, и некоторые из них действительно заслуживают внимания.

    @@ -117,9 +116,13 @@

    Сейчас, чтобы использовать любой мощный инструмент разработки, вам нужен ПК или ноутбук. Мы хотим сделать набор инструментов, который можно использовать где угодно. Мы уже сделали некоторые шаги в этом направлении, и мы продолжим работать в этом направлении.

    Итак, мы начинаем новый год без четких планов, но с четким знанием нашей цели. Давайте подождем и посмотрим, будет ли этот подход работать лучше.

    Счастливого Нового Года всем вам! До скорой встречи!

    - -
    +
    +
    diff --git a/ru/news/back-to-social-networks.html b/ru/news/back-to-social-networks.html index 9976146..b7e1313 100644 --- a/ru/news/back-to-social-networks.html +++ b/ru/news/back-to-social-networks.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,30 +87,36 @@ -
    -

    В новостях

    -
    -

    - Мы вернулись в социальные сети -

    -

    - 2016-08-18 00:00 -

    -
    -

    Если вы подписаны на нашу группу в Facebook, Twitter или VK, вы заметили, что мы начали использовать её снова. Это не случайно: мы наконец созрели для вербального общения после 4 лет молчаливой разработки.

    +
    +

    В новостях...

    +
    +

    + Мы вернулись в социальные сети +

    +

    + 2016-08-18 00:00 +

    +
    +

    Если вы подписаны на нашу группу в Facebook, Twitter или VK, вы заметили, что мы начали использовать её снова. Это не случайно: мы наконец созрели для вербального общения после 4 лет молчаливой разработки.

    Подписывайтесь!

    - -
    +
    +
    diff --git a/ru/news/back-to-the-static.html b/ru/news/back-to-the-static.html index a313f05..9f1af7b 100644 --- a/ru/news/back-to-the-static.html +++ b/ru/news/back-to-the-static.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,34 +87,38 @@ -
    -

    В новостях

    -
    -

    - Назад в Статику -

    -

    - 2017-10-16 00:00 -

    -
    -
    -Объединение статики и динамики
    Объединение статики и динамики
    -
    +
    +

    В новостях...

    +
    +

    + Назад в Статику +

    +

    + 2017-10-16 00:00 +

    +
    +

    Объединение статики и динамики

    Мы используем Wordpress в качестве движка нашего сайта уже более семи лет. И теперь пришло время двигаться вперед. Или назад. Некоторое время мы следили за разработкой нового поколения движков - генераторов статических сайтов. Похоже, что это технология, способная превратить прошлое в будущее.

    Статический веб-сайт проще, быстрее и безопаснее. И с помощью генераторов им настолько же легко управлять, как и динамическим веб-сайтом. Так что мы начинаем наш сайт заново с помощью Pelican.

    Сейчас здесь нет всего контента с нашего старого сайта, но мы добавим его в ближайшее время.

    - -
    +
    +
    diff --git a/ru/news/bye-desura-hello-humblebundle.html b/ru/news/bye-desura-hello-humblebundle.html index dc048f7..7d0c4e2 100644 --- a/ru/news/bye-desura-hello-humblebundle.html +++ b/ru/news/bye-desura-hello-humblebundle.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,33 +87,39 @@ -
    -

    В новостях

    -
    -

    - Прощай, Desura. Здравствуй, Humble Bundle Widget -

    -

    - 2015-07-23 00:00 -

    -
    -

    После недавнего банкротства родительской компании сервиса Desura мы пришли к выводу, что нам необходима новая площадка для распространения Deluxe-версии игры. Более современная, удобная, надежная. Наш выбор пал на Humble Widget, благодаря которому вы можете приобрести Deluxe-версию игры прямо у нас на сайте.

    +
    +

    В новостях...

    +
    +

    + Прощай, Desura. Здравствуй, Humble Bundle Widget +

    +

    + 2015-07-23 00:00 +

    +
    +

    После недавнего банкротства родительской компании сервиса Desura мы пришли к выводу, что нам необходима новая площадка для распространения Deluxe-версии игры. Более современная, удобная, надежная. +Наш выбор пал на Humble Widget, благодаря которому вы можете приобрести Deluxe-версию игры прямо у нас на сайте.

    Вот он:

    - +

    К сожалению, мы не получили от Desura ни копейки (из-за минимального порога вывода средств, которого мы не достигли), однако, если вы приобретали Deluxe-версию OGS Mahjong на Desura и испытываете проблемы с ее скачиванием (в настоящее время проблем не обнаружено), напишите нам, указав свое имя на Desura, и мы что-нибудь придумаем.

    - -
    +
    +
    diff --git a/ru/news/defending-availability.html b/ru/news/defending-availability.html index 57da1e4..d36fcdc 100644 --- a/ru/news/defending-availability.html +++ b/ru/news/defending-availability.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +87,28 @@ -
    -

    В новостях

    -
    -

    - Защита доступности -

    -

    - 2019-04-16 00:00 -

    -
    -
    -Алтайская река Катунь
    Алтайская река Катунь
    -
    +
    +

    В новостях...

    +
    +

    + Защита доступности +

    +

    + 2019-04-16 00:00 +

    +
    +

    Алтайская река Катунь

    В этой статье мы расскажем о начале усилий по защите себя от решений третьих сторон.

    С первого дня существования проекта Opensource Game Studio мы используем решения третьих сторон для достижения своей цели по созданию лучших средств разработки игр. Мы использовали форумы, системы отслеживания задач, списки рассылок, социальные сети, системы контроля версий кода, хостинги, компиляторы, библиотеки и т.д.. Каждое решение третьих сторон имеет свой жизненный цикл.

    Существуют две основные причины, по которым мы меняли решение третьих сторон:

    @@ -133,9 +132,13 @@

    В течение года мы сделаем сайт ещё более удобным. Оставайтесь на связи!

    На этом мы заканчиваем рассказ о начале усилий по защите себя от решений третьих сторон.

    - -
    +
    +
    diff --git a/ru/news/editor-0.4.0-and-0.5.0-plans.html b/ru/news/editor-0.4.0-and-0.5.0-plans.html index 1b846d1..470011d 100644 --- a/ru/news/editor-0.4.0-and-0.5.0-plans.html +++ b/ru/news/editor-0.4.0-and-0.5.0-plans.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,38 +87,44 @@ -
    -

    В новостях

    -
    -

    - Редактор 0.4.0 и планы для 0.5.0 -

    -

    - 2015-03-07 00:00 -

    -
    -

    Мы завершили работу над версией 0.4.0 редактора в январе. Как было запланировано, эта версия содержит лишь базовые возможности открыть и сохранить проект. Основная цель была в том, чтобы подружить MJIN, Python и Qt (в частности, по ряду технических причин мы не смогли использовать PyQt или PySide).

    -

    Вы можете увидеть 0.4.0 в действии здесь.

    +
    +

    В новостях...

    +
    +

    + Редактор 0.4.0 и планы для 0.5.0 +

    +

    + 2015-03-07 00:00 +

    +
    +

    Мы завершили работу над версией 0.4.0 редактора в январе. Как было запланировано, эта версия содержит лишь базовые возможности открыть и сохранить проект. Основная цель была в том, чтобы подружить MJIN, Python и Qt (в частности, по ряду технических причин мы не смогли использовать PyQt или PySide).

    +

    Вы можете увидеть 0.4.0 в действии здесь.

    Мы начали разработку Редактора 0.5.0 в феврале, на текущий момент сделаны 45% работ.

    Запланированные возможности Редактора 0.5.0:

    -
      +
      1. Редактирование дерева узлов сцены
      2. Браузер свойств с редактированием позиции и модели узла
      3. Поддержка Qt5 с целью простоты сборки на различных дистрибутивах Linux

      Мы планируем завершить его в апреле.

      - -
    +
    +
    diff --git a/ru/news/editor-0.4.0-plans.html b/ru/news/editor-0.4.0-plans.html index ac89f6c..432b059 100644 --- a/ru/news/editor-0.4.0-plans.html +++ b/ru/news/editor-0.4.0-plans.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,31 +87,37 @@ -
    -

    В новостях

    -
    -

    - План задач для Editor 0.4.0 -

    -

    - 2015-01-13 00:00 -

    -
    -

    Разработка Editor 0.3.0 показала нам, что использование кастомного GUI не было столь хорошей идеей, как показалось на первый взгляд. Несмотря на более простую реализацию, кастомный GUI лишен множества мелких достоинств, которые оказываются практически необходимы, если задаться целью сделать удобный инструмент.

    +
    +

    В новостях...

    +
    +

    + План задач для Editor 0.4.0 +

    +

    + 2015-01-13 00:00 +

    +
    +

    Разработка Editor 0.3.0 показала нам, что использование кастомного GUI не было столь хорошей идеей, как показалось на первый взгляд. Несмотря на более простую реализацию, кастомный GUI лишен множества мелких достоинств, которые оказываются практически необходимы, если задаться целью сделать удобный инструмент.

    В конце концов, мы решили сделать то, что хотели сделать с самого начала - использовать для редактора библиотеку Qt.

    В ближайшее время мы перепишем редактор, имея в виду Qt-интерфейс и немного обновленную концепцию проекта. Мы планируем выпустить редактор с новым интерфейсом и набором базовых функций, таких как загрузка и сохранение проектов, в мае.

    - -
    +
    +
    diff --git a/ru/news/editor-06-roadmap.html b/ru/news/editor-06-roadmap.html index 1ecc705..051c88c 100644 --- a/ru/news/editor-06-roadmap.html +++ b/ru/news/editor-06-roadmap.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,29 +87,31 @@ -
    -

    В новостях

    -
    -

    - Редактор 0.5.0 и планы для 0.6.0 -

    -

    - 2015-04-15 00:00 -

    -
    -

    Мы завершили работу над версией 0.5.0 редактора. Как было запланировано, эта версия содержит редактирование узлов сцены, браузер свойств, поддеркжу Qt5. Вы можете увидеть 0.5.0 в действии здесь.

    +
    +

    В новостях...

    +
    +

    + Редактор 0.5.0 и планы для 0.6.0 +

    +

    + 2015-04-15 00:00 +

    +
    +

    Мы завершили работу над версией 0.5.0 редактора. Как было запланировано, эта версия содержит редактирование узлов сцены, браузер свойств, поддеркжу Qt5. Вы можете увидеть 0.5.0 в действии здесь.

    Также мы только что начали разработку Редактора 0.6.0.

    Запланированные возможности Редактора 0.6.0:

    -
      +
      1. Редактирование узлов с камерой
      2. Редактирование узлов со светом
      3. Редактирование вращения узлов
      4. @@ -120,9 +121,13 @@
      5. Выбор узла с помощью клика мышью в сцене

      Мы планируем завершить его в августе.

      - -
    +
    +
    diff --git a/ru/news/editor-06.html b/ru/news/editor-06.html index d57a1f3..2ae18c4 100644 --- a/ru/news/editor-06.html +++ b/ru/news/editor-06.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +87,30 @@ -
    -

    В новостях

    -
    -

    - Редактор 0.6.0 -

    -

    - 2015-06-28 00:00 -

    -
    -

    Мы завершили работу над версией 0.6.0 редактора. Вы можете увидеть 0.6.0 в действии здесь.

    +
    +

    В новостях...

    +
    +

    + Редактор 0.6.0 +

    +

    + 2015-06-28 00:00 +

    +
    +

    Мы завершили работу над версией 0.6.0 редактора. Вы можете увидеть 0.6.0 в действии здесь.

    Список новых возможностей Редактора 0.6.0:

    -
      +
      1. Позиционирование узлов с камерой и светом
      2. Вращение узлов по оси X
      3. Поддержка скриптов у узлов
      4. @@ -119,9 +120,13 @@
      5. Восстановление позиции и состояния окна после перезапуска

      На текущий момент у нас нет даты завершения 0.7.0, потому что мы решили взять паузу и потратить некоторое время на составление дорожной карты для Shuan и Mahjong 2. Как только мы её закончим, мы расскажем и о возможностях 0.7.0, и о дате завершения 0.7.0, и о самой дорожной карте.

      - -
    +
    +
    diff --git a/ru/news/example-driven-development.html b/ru/news/example-driven-development.html index e3407ad..bcf4d94 100644 --- a/ru/news/example-driven-development.html +++ b/ru/news/example-driven-development.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +87,28 @@ -
    -

    В новостях

    -
    -

    - Разработка через создание примеров -

    -

    - 2018-06-27 00:00 -

    -
    -
    -Брокер отладки
    Брокер отладки
    -
    +
    +

    В новостях...

    +
    +

    + Разработка через создание примеров +

    +

    + 2018-06-27 00:00 +

    +
    +

    Брокер отладки

    Эта статья описывает то, как создание третьего кросс-платформенного примера OpenSceneGraph привело нас к разработке через создание примеров.

    ИЗМЕНЕНИЯ ОТ 2018-08: третий пример был переименован в четвёртый в связи с причинами, изложенными в следующей статье.

    Третий кросс-платформенный пример OpenSceneGraph

    @@ -121,7 +120,7 @@
  • на мобилках есть ограничения по работе фоновых процессов
  • веб-браузеры являются клиентами HTTP по дизайну
  • -

    Эти ограничения подтолкнули нас к созданию посредника между отлаживаемым приложением и пользовательским интерфейсом отладки. Брокер отладки, небольшое приложение Node.js, стало тем самым посредником. Брокер отладки не имеет внешних зависимостей, поэтому его легко использовать практически везде. Благодаря тому, что брокер отладки - это серверное приложение, его достаточно настроить лишь раз и использовать для любого количества приложений.

    +

    Эти ограничения подтолкнули нас к созданию посредника между отлаживаемым приложением и пользовательским интерфейсом отладки. Брокер отладки, небольшое приложение Node.js, стало тем самым посредником. Брокер отладки не имеет внешних зависимостей, поэтому его легко использовать практически везде. Благодаря тому, что брокер отладки - это серверное приложение, его достаточно настроить лишь раз и использовать для любого количества приложений.

    И пользовательский интерфейс отладки, и брокер отладки используют JavaScript, т.к. мы хотели сделать эти инструменты максимально доступными без предварительной установки. Данное решение привело нас к реализации инструментов именно для веб-браузеров. Десктопное приложение потребовало бы дополнительных усилий на установку и поддержку, что лишь усложнило бы работу с инструментами.

    Разработка через создание примеров

    После создания третьего примера мы осознали важность и достоинства разработки новых функций вне основного проекта:

    @@ -136,9 +135,13 @@

    С этого момента все новые функции вроде обработки ввода, загрузки раскладок Маджонга, кэширования ресурсов и т.п. мы будем сначала реализовывать в виде примеров. Мы называем этот подход разработкой через создание примеров.

    На этом мы заканчиваем описание того, как создание третьего кросс-платформенного примера OpenSceneGraph привело нас к разработке через создание примеров.

    - -
    +
    +
    diff --git a/ru/news/examples-and-dependencies.html b/ru/news/examples-and-dependencies.html index a270420..fce1c0b 100644 --- a/ru/news/examples-and-dependencies.html +++ b/ru/news/examples-and-dependencies.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +87,28 @@ -
    -

    В новостях

    -
    -

    - Примеры и зависимости -

    -

    - 2018-08-21 00:00 -

    -
    -
    -Облако
    Облако
    -
    +
    +

    В новостях...

    +
    +

    + Примеры и зависимости +

    +

    + 2018-08-21 00:00 +

    +
    +

    Облако

    Эта статья описывает два новых кросс-платформенных примера OpenSceneGraph и изменение в работе с зависимостями.

    Примеры клиента HTTP и выбора узла сцены

    После окончания работы над примером удалённой отладки и сообщения об этом мы с удивлением обнаружили, что безопасное соединение HTTPS между отлаживаемым приложением и брокером отладки работало лишь в веб-версии примера. Десктопная и мобильная версии работали лишь с помощью обычного соединения HTTP.

    @@ -121,19 +120,15 @@
  • Android предоставляет HttpUrlConnection в языке Java
  • iOS предоставляет NSURLSession в языке Objective-C
  • -

    Необходимость поддержки разных языков на разных платформах привела к созданию так называемого шаблона “хозяин-гость”:

    -
      -
    • гость (не привязан к платформе) +

      Необходимость поддержки разных языков на разных платформах привела к созданию так называемого шаблона "хозяин-гость":

        +
      • гость (не привязан к платформе)
        • имеет сетевое представление
        • -
        • используется кросс-платформенным кодом на C++
        • -
      • -
      • хозяин (определённая платформа) -
          +
        • используется кросс-платформенным кодом на C++
      • +
      • хозяин (определённая платформа)
        • опрашивает гостя на наличие ожидающих выполнение запросов
        • обрабатывает их
        • -
        • сообщает результат гостю
        • -
      • +
      • сообщает результат гостю

    Пример выбора узла сцены оказался простым и не создал особых проблем.

    Изменение в работе с зависимостями

    @@ -144,12 +139,16 @@
  • принадлежность сборок iOS под симулятор и устройство к разным проектам Xcode
  • ожидания в 20-30 минут для сборки OpenSceneGraph
  • -

    Эти недостатки замедляли нас и усложняли разработку новых примеров. После того, как мы десятый раз столкнулись с указанными проблемами в этом месяце, мы решили исправить их раз и навсегда. Теперь мы собираем OpenSceneGraph как часть каждого примера за 2-3 минуты без какой-либо магии. Также мы использовали этот подход включения зависимости как части каждого примера для остальных библиотек вроде Mongoose и libpng-android.

    +

    Эти недостатки замедляли нас и усложняли разработку новых примеров. После того, как мы десятый раз столкнулись с указанными проблемами в этом месяце, мы решили исправить их раз и навсегда. Теперь мы собираем OpenSceneGraph как часть каждого примера за 2-3 минуты без какой-либо магии. Также мы использовали этот подход включения зависимости как части каждого примера для остальных библиотек вроде Mongoose и libpng-android.

    Теперь без этих препятствий мы можем разрабатывать быстрее. Это значительно облегчит создание следующей технической демонстрации Mahjong 2!

    На этом мы заканчиваем описание двух новых кросс-платформенных примеров OpenSceneGraph и изменения в работе с зависимостями.

    - -
    +
    +
    diff --git a/ru/news/ideal-gamedev.html b/ru/news/ideal-gamedev.html index 4fae5c3..eccbd88 100644 --- a/ru/news/ideal-gamedev.html +++ b/ru/news/ideal-gamedev.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +87,28 @@ -
    -

    В новостях

    -
    -

    - Идеальные игры и средства для их разработки -

    -

    - 2018-11-19 00:00 -

    -
    -
    -Человек без и с инструментами
    Человек без и с инструментами
    -
    +
    +

    В новостях...

    +
    +

    + Идеальные игры и средства для их разработки +

    +

    + 2018-11-19 00:00 +

    +
    +

    Человек без и с инструментами

    В этой статье мы обсудим, как выглядят идеальные видеоигра и инструмент для разработки видеоигр, по нашему мнению.

    Вопросы

    Как вы знаете, целями Opensource Game Studio являются:

    @@ -144,9 +143,13 @@

    Написание кода и отладка, пожалуй, являются конечными формами входа и выхода любого программного обеспечения, поэтому мы их не избежим. Однако, мы можем полностью избавиться от шагов (или хотя бы значительно сократить их) настройки окружения разработки и сборки. Именно на это мы и потратим ближайшие месяцы.

    Наша цель на ближайшие месяцы состоит в том, чтобы создать такой инструмент разработки видеоигр, чтобы любой программист (или достаточно квалифицированный человек) мог создать видеоигру на память с нуля за час.

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

    - -
    +
    +
    diff --git a/ru/news/index.html b/ru/news/index.html index c5c726d..616271e 100644 --- a/ru/news/index.html +++ b/ru/news/index.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,194 +80,182 @@ -
    -

    Новости

    +
    +

    Новости

    -
    -

    - Защита доступности -

    -

    - 2019-04-16 00:00 -

    -
    -
    -Алтайская река Катунь
    Алтайская река Катунь
    -
    +
    +

    + На пути к долговечным приложениям +

    +

    + 2019-08-05 00:00 +

    +
    +

    Псковское вече

    +

    В этой статье мы расскажем о нашем первом долговечном приложении для настольных ПК - генераторе статических сайтов ПСКОВ.

    +

    Долговечность

    +

    Под долговечным приложением мы понимаем такое приложение, которое работает без единого изменения на операционных системах, выпущенных в период 2010-2030 годов. Иными словами, долговечное приложение обладает 10-летней обратной совместимостью и 10-летней прочностью. Впрочем, ПСКОВ работает даже на Windows 2000, так что у него 19-летняя обратная совместимость.. . .

    +
    + +
    +
    +

    + Защита доступности +

    +

    + 2019-04-16 00:00 +

    +
    +

    Алтайская река Катунь

    В этой статье мы расскажем о начале усилий по защите себя от решений третьих сторон.

    -

    С первого дня существования проекта Opensource Game Studio мы используем решения третьих сторон для достижения своей цели по созданию лучших средств разработки игр. Мы использовали форумы, системы отслеживания задач, списки рассылок, социальные сети, системы контроля версий кода, хостинги, компиляторы, библиотеки и т.д.. Каждое решение третьих сторон имеет свой жизненный цикл. …

    - -
    - -
    -
    -

    - Обучение детей программированию -

    -

    - 2019-02-04 00:00 -

    -
    -
    -Ученики и учителя
    Ученики и учителя
    -
    +

    С первого дня существования проекта Opensource Game Studio мы используем решения третьих сторон для достижения своей цели по созданию лучших средств разработки игр. Мы использовали форумы, системы отслеживания задач, списки рассылок, социальные сети, системы контроля версий кода, хостинги, компиляторы, библиотеки и т.д.. Каждое решение третьих сторон имеет свой жизненный цикл.. . .

    +
    + +
    +
    +

    + Обучение детей программированию +

    +

    + 2019-02-04 00:00 +

    +
    +

    Ученики и учителя

    В этой статье Михаил делится своим опытом обучения детей программированию.

    Он расскажет о следующем:

      -
    • организация процесса обучения …
    • +
    • организация процесса обучения
    • +
    • программа обучения
    • +
    • игра на память. . .
    - -
    - -
    -
    -

    - Год переосмысления -

    -

    - 2019-01-01 0:01 -

    -
    -
    -Бенгальский огонь
    Бенгальский огонь
    -
    -

    Этот год во-многом стал для нас годом переосмысления и определенности. Как некоторые из вас помнят, мы начинали этот проект, для создания среды для разработки игр. В течение многих лет идея развивалась от одной формы к другой, иногда изменения были значительными, в других случаях мы отбрасывали весь код и начинали заново. …

    - -
    - -
    -
    -

    - Идеальные игры и средства для их разработки -

    -

    - 2018-11-19 00:00 -

    -
    -
    -Человек без и с инструментами
    Человек без и с инструментами
    -
    -

    В этой статье мы обсудим, как выглядят идеальные видеоигра и инструмент для разработки видеоигр, по нашему мнению. …

    - -
    - -
    -
    -

    - OGS Mahjong 2: Demo 2 -

    -

    - 2018-10-02 00:00 -

    -
    -
    -Начало партии Маджонг
    Начало партии Маджонг
    -
    -

    Мы рады сообщить о выпуске второй демонстрации OGS Mahjong 2. Её целью были улучшение техники разработки и создание надёжной основы кроссплатформенной разработки. …

    - -
    - -
    -
    -

    - Примеры и зависимости -

    -

    - 2018-08-21 00:00 -

    -
    -
    -Облако
    Облако
    -
    +
    + +
    +
    +

    + Год переосмысления +

    +

    + 2019-01-01 0:01 +

    +
    +

    Бенгальский огонь

    +

    Этот год во-многом стал для нас годом переосмысления и определенности. Как некоторые из вас помнят, мы начинали этот проект, для создания среды для разработки игр. В течение многих лет идея развивалась от одной формы к другой, иногда изменения были значительными, в других случаях мы отбрасывали весь код и начинали заново.. . .

    +
    + +
    +
    +

    + Идеальные игры и средства для их разработки +

    +

    + 2018-11-19 00:00 +

    +
    +

    Человек без и с инструментами

    +

    В этой статье мы обсудим, как выглядят идеальные видеоигра и инструмент для разработки видеоигр, по нашему мнению.

    +

    Вопросы

    +

    Как вы знаете, целями Opensource Game Studio являются:. . .

    +
    + +
    +
    +

    + OGS Mahjong 2: Demo 2 +

    +

    + 2018-10-02 00:00 +

    +
    +

    Начало партии Маджонг

    +

    Мы рады сообщить о выпуске второй демонстрации OGS Mahjong 2. Её целью были улучшение техники разработки и создание надёжной основы кроссплатформенной разработки.. . .

    +
    + +
    +
    +

    + Примеры и зависимости +

    +

    + 2018-08-21 00:00 +

    +
    +

    Облако

    Эта статья описывает два новых кросс-платформенных примера OpenSceneGraph и изменение в работе с зависимостями.

    -

    Примеры клиента HTTP и выбора узла сцены

    - -
    - -
    -
    -

    - Разработка через создание примеров -

    -

    - 2018-06-27 00:00 -

    -
    -
    -Брокер отладки
    Брокер отладки
    -
    -

    Эта статья описывает то, как создание третьего кросс-платформенного примера OpenSceneGraph привело нас к разработке через создание примеров. …

    - -
    - -
    -
    -

    - Кросс-платформенные примеры OpenSceneGraph -

    -

    - 2018-04-20 00:00 -

    -
    -
    -iOS Simulator отображает куб
    iOS Simulator отображает куб
    -
    +

    Примеры клиента HTTP и выбора узла сцены

    +

    После окончания работы над примером удалённой отладки и сообщения об этом мы с удивлением обнаружили, что безопасное соединение HTTPS между отлаживаемым приложением и брокером отладки работало лишь в веб-версии примера. Десктопная и мобильная версии работали лишь с помощью обычного соединения HTTP.. . .

    +
    + +
    +
    +

    + Разработка через создание примеров +

    +

    + 2018-06-27 00:00 +

    +
    +

    Брокер отладки

    +

    Эта статья описывает то, как создание третьего кросс-платформенного примера OpenSceneGraph привело нас к разработке через создание примеров.

    +

    ИЗМЕНЕНИЯ ОТ 2018-08: третий пример был переименован в четвёртый в связи с причинами, изложенными в следующей статье.. . .

    +
    + +
    +
    +

    + Кросс-платформенные примеры OpenSceneGraph +

    +

    + 2018-04-20 00:00 +

    +
    +

    iOS Simulator отображает куб

    Эта статья резюмирует создание первых двух кросс-платформенных примеров OpenSceneGraph.

    -

    К тому времени, как мы выпустили первую техническую демонстрацию OGS Mahjong 2, нас уже дожидался запрос на описание работы с изображениями в OpenSceneGraph на Android. Сначала мы рассматривали возможность создания нового самоучителя для кросс-платформенного руководства OpenSceneGraph, но позже мы оценили необходимые трудозатраты и посчитали их излишними для освещения такой небольшой темы (по сравнению с тем, что умеет средняя игра) как загрузка изображений. Мы решили продолжить делиться нашими знаниями в виде конкретных примеров. Так на свет появились кросс-платформенные примеры OpenSceneGraph. …

    - -
    - -
    -
    -

    - Первая технодемка OGS Mahjong 2: Игровая механика -

    -

    - 2018-02-16 00:00 -

    -
    -
    -Конец партии Маджонг
    Конец партии Маджонг
    -
    -

    Мы ради сообщить о выпуске первой технической демонастрации OGS Mahjong 2. Её цель была в проверке игровой механики на всех поддерживаемых платформах. …

    - -
    - -
    +

    К тому времени, как мы выпустили первую техническую демонстрацию OGS Mahjong 2, нас уже дожидался запрос на описание работы с изображениями в OpenSceneGraph на Android. Сначала мы рассматривали возможность создания нового самоучителя для кросс-платформенного руководства OpenSceneGraph, но позже мы оценили необходимые трудозатраты и посчитали их излишними для освещения такой небольшой темы (по сравнению с тем, что умеет средняя игра) как загрузка изображений. Мы решили продолжить делиться нашими знаниями в виде конкретных примеров. Так на свет появились кросс-платформенные примеры OpenSceneGraph.. . .

    +
    + +
    -

    Страница 1 из 6

    +

    Страница 1 из 6

    Старее »

    +
    diff --git a/ru/news/index.template b/ru/news/index.template new file mode 100644 index 0000000..20b5e81 --- /dev/null +++ b/ru/news/index.template @@ -0,0 +1,107 @@ + + + + + + + + +
    +

    Новости

    + +PSKOV_PREVIEWS +PSKOV_PAGINATION + + +
    + + diff --git a/ru/news/index2.html b/ru/news/index2.html index 762e8a8..988dc55 100644 --- a/ru/news/index2.html +++ b/ru/news/index2.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,194 +80,177 @@ -
    -

    Новости

    +
    +

    Новости

    -
    -

    - Начало воссоздания Маджонга -

    -

    - 2018-01-26 00:00 -

    -
    -
    -Сферические фишки в раскладке Маджонг
    Сферические фишки в раскладке Маджонг
    -
    +
    +

    + Первая технодемка OGS Mahjong 2: Игровая механика +

    +

    + 2018-02-16 00:00 +

    +
    +

    Конец партии Маджонг

    +

    Мы ради сообщить о выпуске первой технической демонастрации OGS Mahjong 2. Её цель была в проверке игровой механики на всех поддерживаемых платформах.

    +

    Проверьте технодемку на своей платформе:. . .

    +
    + +
    +
    +

    + Начало воссоздания Маджонга +

    +

    + 2018-01-26 00:00 +

    +
    +

    Сферические фишки в раскладке Маджонг

    Эта статья описывает начало воссоздания игры Маджонг.

    План

    -

    Мы начали воссоздание Маджонга с составления краткого плана реализации игровой механики с минимальной графикой: …

    - -
    - -
    -
    -

    - Год новых уроков -

    -

    - 2017-12-31 22:00 -

    -
    -
    -Бенгальский огонь
    Бенгальский огонь
    -
    -

    Итак, 2017й год стремительно приближается к финалу, итоги года уже подведены, так что в свободное от расчехления фейерверков и подготовки систем залпового огня шампанским время мы обозначим свою цель в следующем году. …

    - -
    - -
    -
    -

    - Итоги 2017-го -

    -

    - 2017-11-22 00:00 -

    -
    -
    -Игра на память в фоне
    Игра на память в фоне
    -
    -

    Настало время сделать ревизию наших достижений в 2017 году и проверить, насколько они следуют основной цели проекта Opensource Game Studio. …

    - -
    - -
    -
    -

    - Назад в Статику -

    -

    - 2017-10-16 00:00 -

    -
    -
    -Объединение статики и динамики
    Объединение статики и динамики
    -
    -

    Мы используем Wordpress в качестве движка нашего сайта уже более семи лет. И теперь пришло время двигаться вперед. Или назад. Некоторое время мы следили за разработкой нового поколения движков - генераторов статических сайтов. Похоже, что это технология, способная превратить прошлое в будущее. …

    - -
    - -
    -
    -

    - Рождение вселенной MJIN -

    -

    - 2017-09-10 00:00 -

    -
    -
    -Взрыв, рождающий что-то новое
    Взрыв, рождающий что-то новое
    -
    +

    Мы начали воссоздание Маджонга с составления краткого плана реализации игровой механики с минимальной графикой:. . .

    +
    + +
    +
    +

    + Год новых уроков +

    +

    + 2017-12-31 22:00 +

    +
    +

    Бенгальский огонь

    +

    Итак, 2017й год стремительно приближается к финалу, итоги года уже подведены, так что в свободное от расчехления фейерверков и подготовки систем залпового огня шампанским время мы обозначим свою цель в следующем году.. . .

    +
    + +
    +
    +

    + Итоги 2017-го +

    +

    + 2017-11-22 00:00 +

    +
    +

    Игра на память в фоне

    +

    Настало время сделать ревизию наших достижений в 2017 году и проверить, насколько они следуют основной цели проекта Opensource Game Studio.

    +

    Краткая история. . .

    +
    + +
    +
    +

    + Назад в Статику +

    +

    + 2017-10-16 00:00 +

    +
    +

    Объединение статики и динамики

    +

    Мы используем Wordpress в качестве движка нашего сайта уже более семи лет. И теперь пришло время двигаться вперед. Или назад. Некоторое время мы следили за разработкой нового поколения движков - генераторов статических сайтов. Похоже, что это технология, способная превратить прошлое в будущее.. . .

    +
    + +
    +
    +

    + Рождение вселенной MJIN +

    +

    + 2017-09-10 00:00 +

    +
    +

    Взрыв, рождающий что-то новое

    Эта статья описывает рождение вселенной MJIN в августе 2017.

    mjin-player

    -

    Как вы знаете, в июле мы изучали скриптование. Мы нашли решение, которое удовлетворяет следующим критериям. Скрипты должны: …

    - -
    - -
    -
    -

    - Изучение скриптования -

    -

    - 2017-08-16 00:00 -

    -
    -
    -Тетрадка с текстом
    Тетрадка с текстом
    -
    +

    Как вы знаете, в июле мы изучали скриптование. Мы нашли решение, которое удовлетворяет следующим критериям. Скрипты должны:. . .

    +
    + +
    +
    +

    + Изучение скриптования +

    +

    + 2017-08-16 00:00 +

    +
    +

    Тетрадка с текстом

    Эта статья описывает изучение скриптования в июле 2017.

    -

    Наша основная цель использования скриптового языка - это наличие платформо-независимого кода, выполняемого без изменений на каждой поддерживаемой платформе.

    - -
    - -
    -
    -

    - OpenSceneGraph cross-platform guide -

    -

    - 2017-07-17 00:00 -

    -
    -
    -Приложение OpenSceneGraph на десктопе и мобилке
    Приложение OpenSceneGraph на десктопе и мобилке
    -
    -

    Эта статья резюмирует создание кросс-платформенного руководства OpenSceneGraph. …

    - -
    - -
    -
    -

    - Самоучитель iOS -

    -

    - 2017-06-08 10:00 -

    -
    -
    -Земля и ракета
    Земля и ракета
    -
    -

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

    - -
    - -
    -
    -

    - Приложение OpenSceneGraph -

    -

    - 2017-05-12 00:00 -

    -
    -
    -Ракета в дали
    Ракета в дали
    -
    -

    Эта статья описывает создание самоучителей по сборке приложения OpenSceneGraph на Linux, macOS, Windows и Android в апреле 2017.

    -

    Предыдущие самоучители описывали установку OpenSceneGraph на Linux, macOS, Windows и отображение модели с помощью стандартного инструмента osgviewer. На этот раз результатом нашей работы стало приложение OpenSceneGraph, которое работает на Linux, macOS, Windows и Android. …

    - -
    - -
    +

    Наша основная цель использования скриптового языка - это наличие платформо-независимого кода, выполняемого без изменений на каждой поддерживаемой платформе.. . .

    +
    + +
    +
    +

    + OpenSceneGraph cross-platform guide +

    +

    + 2017-07-17 00:00 +

    +
    +

    Приложение OpenSceneGraph на десктопе и мобилке

    +

    Эта статья резюмирует создание кросс-платформенного руководства OpenSceneGraph.

    +

    Июнь ознаменовал собой окончание работы над кросс-платформенным руководством OpenSceneGraph. Мы опубликовали последний самоучитель (из изначально запланированных). Этот самоучитель описывает сборку и запуск примера приложения OpenSceneGraph в вебе с помощью Emscripten.. . .

    +
    + +
    +
    +

    + Самоучитель iOS +

    +

    + 2017-06-08 10:00 +

    +
    +

    Земля и ракета

    +

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

    +

    В феврале мы сумели отобразить простую модель под iOS за считанные дни. Это дало нам уверенность, что самоучитель для iOS мы сделаем столь же быстро. Тем не менее, реальность напомнила нам о простой вещи: быстро сделать можно лишь поделку на коленке, работающую только у самого разработчика; над логически связанным примером, работающим у всех, придётся попотеть.. . .

    +
    + +
    -

    Страница 2 из 6

    +

    Страница 2 из 6

    « Новее Старее »

    +
    diff --git a/ru/news/index3.html b/ru/news/index3.html index 5398f7b..323254c 100644 --- a/ru/news/index3.html +++ b/ru/news/index3.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,191 +80,176 @@ -
    -

    Новости

    +
    +

    Новости

    -
    -

    - Всё проходит хорошо -

    -

    - 2017-04-07 00:00 -

    -
    -
    -Полёт ракеты
    Полёт ракеты
    -
    +
    +

    + Приложение OpenSceneGraph +

    +

    + 2017-05-12 00:00 +

    +
    +

    Ракета в дали

    +

    Эта статья описывает создание самоучителей по сборке приложения OpenSceneGraph на Linux, macOS, Windows и Android в апреле 2017.

    +

    Предыдущие самоучители описывали установку OpenSceneGraph на Linux, macOS, Windows и отображение модели с помощью стандартного инструмента osgviewer. На этот раз результатом нашей работы стало приложение OpenSceneGraph, которое работает на Linux, macOS, Windows и Android.. . .

    +
    + +
    +
    +

    + Всё проходит хорошо +

    +

    + 2017-04-07 00:00 +

    +
    +

    Полёт ракеты

    Эта статья рассказывает о создании первых четырёх самоучителей OpenSceneGraph в марте 2017.

    -

    Первые четыре самоучителя OpenSceneGraph объясняют, как создать модель куба в Blender и затем отобразить её на Linux, macOS или Windows с помощью osgviewer, стандартного инструмента OpenSceneGraph. …

    - -
    - -
    -
    -

    - Поехали -

    -

    - 2017-03-16 00:00 -

    -
    -
    -Слова Гагарина
    Слова Гагарина
    -
    -

    В этой статье мы расскажем о результатах нашей работы в январе и феврале 2017: отображении куба на iOS/Веб и нашем инструменте для создания самоучителей. …

    - -
    - -
    -
    -

    - Год испытаний -

    -

    - 2017-01-25 00:00 -

    -
    -
    -Запуск ракеты на Байконуре
    Запуск ракеты на Байконуре
    -
    +

    Первые четыре самоучителя OpenSceneGraph объясняют, как создать модель куба в Blender и затем отобразить её на Linux, macOS или Windows с помощью osgviewer, стандартного инструмента OpenSceneGraph.. . .

    +
    + +
    +
    +

    + Поехали +

    +

    + 2017-03-16 00:00 +

    +
    +

    Слова Гагарина

    +

    В этой статье мы расскажем о результатах нашей работы в январе и феврале 2017: отображении куба на iOS/Веб и нашем инструменте для создания самоучителей.

    +

    Отображение куба на iOS/Web. . .

    +
    + +
    +
    +

    + Год испытаний +

    +

    + 2017-01-25 00:00 +

    +
    +

    Запуск ракеты на Байконуре

    Эта статья содержит наши планы на 2017 год.

    -

    Наши предыдущие планы предполагали, что сейчас у нас уже будет поддержка платформы Android. Тем не менее, у нас впереди ещё очень много работы, прежде чем мы сможем объявить о поддержке Android. Судите сами: …

    - -
    - -
    -
    -

    - Счастливого 2017-го -

    -

    - 2016-12-31 00:00 -

    -
    -
    -Новогодняя ёлка
    Новогодняя ёлка
    -
    -

    Ну вот. Это был тяжелый год для всех в команде. И он почти закончен. Хвала окончанию старого! Хвала наступлению нового! …

    - -
    - -
    -
    -

    - Ноябрь 2016 кратко -

    -

    - 2016-12-15 00:00 -

    -
    -
    -Постройка здания
    Постройка здания
    -
    +

    Наши предыдущие планы предполагали, что сейчас у нас уже будет поддержка платформы Android. Тем не менее, у нас впереди ещё очень много работы, прежде чем мы сможем объявить о поддержке Android. Судите сами:. . .

    +
    + +
    +
    +

    + Счастливого 2017-го +

    +

    + 2016-12-31 00:00 +

    +
    +

    Новогодняя ёлка

    +

    Ну вот. Это был тяжелый год для всех в команде. И он почти закончен. Хвала окончанию старого! Хвала наступлению нового!

    +

    Может показаться, что наш прогресс застопорился. Три года назад мы объявили о начале нового проекта (двух, если быть точным), но до сих пор мы работаем над движком и редактором, даже не начали делать ни Shuan, ни Mahjong 2.. . .

    +
    + +
    +
    +

    + Ноябрь 2016 кратко +

    +

    + 2016-12-15 00:00 +

    +
    +

    Постройка здания

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

    -

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

    - -
    - -
    -
    -

    - Октябрь 2016 кратко -

    -

    - 2016-11-19 00:00 -

    -
    -
    -Достижение поддержки Android было сродни покорению горы для нас
    Достижение поддержки Android было сродни покорению горы для нас
    -
    -

    Эта статья описывает, как мы потратили месяц на сборку OpenSceneGraph (OSG) под Android: первая попытка собрать OSG, поиск альтернатив OSG и успех в сборке OSG. …

    - -
    - -
    -
    -

    - Демонстрации технологий -

    -

    - 2016-10-31 00:00 -

    -
    -
    -Файл с функциональностью на фоне
    Файл с функциональностью на фоне
    -
    -

    Сегодня мы ещё раз взглянем на формат демонстраций в 2015-2016 годах, а также сообщим о новом формате 2017-го. …

    - -
    - -
    -
    -

    - Сентябрь 2016 кратко -

    -

    - 2016-10-11 00:00 -

    -
    -
    -Маджонг, созданный в прямом эфире
    Маджонг, созданный в прямом эфире
    -
    -

    Эта статья описывает стадии по подготовке и проведению прямого эфира сентября 2016: черновик, репетиция, прямой эфир и публикация. …

    - -
    - -
    -
    -

    - OGS Editor 0.10 и материалы прямого эфира -

    -

    - 2016-10-03 00:00 -

    -
    -
    -Редактор с игрой Маджонг
    Редактор с игрой Маджонг
    -
    -

    Внимание: мы не выпустим версию 0.10 для macOS из-за технических проблем с системой сборки. Поддержку macOS вернём к 0.11. …

    - -
    - -
    +

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

    +
    + +
    +
    +

    + Октябрь 2016 кратко +

    +

    + 2016-11-19 00:00 +

    +
    +

    Достижение поддержки Android было сродни покорению горы для нас

    +

    Эта статья описывает, как мы потратили месяц на сборку OpenSceneGraph (OSG) под Android: первая попытка собрать OSG, поиск альтернатив OSG и успех в сборке OSG.. . .

    +
    + +
    +
    +

    + Демонстрации технологий +

    +

    + 2016-10-31 00:00 +

    +
    +

    Файл с функциональностью на фоне

    +

    Сегодня мы ещё раз взглянем на формат демонстраций в 2015-2016 годах, а также сообщим о новом формате 2017-го.

    +

    2015 и 2016: демонстрации в прямом эфире.. . .

    +
    + +
    +
    +

    + Сентябрь 2016 кратко +

    +

    + 2016-10-11 00:00 +

    +
    +

    Маджонг, созданный в прямом эфире

    +

    Эта статья описывает стадии по подготовке и проведению прямого эфира сентября 2016: черновик, репетиция, прямой эфир и публикация.

    +

    Несмотря на то, что сам прямой эфир длится лишь несколько часов, мы готовимся к нему целый месяц. Рассмотрим каждую стадию прямого эфира подробнее.. . .

    +
    + +
    -

    Страница 3 из 6

    +

    Страница 3 из 6

    « Новее Старее »

    +
    diff --git a/ru/news/index4.html b/ru/news/index4.html index e6e31e0..36250a5 100644 --- a/ru/news/index4.html +++ b/ru/news/index4.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,173 +80,169 @@ -
    -

    Новости

    +
    +

    Новости

    -
    -

    - Пара слов о вчерашнем прямом эфире -

    -

    - 2016-09-26 00:00 -

    -
    - +
    +

    + OGS Editor 0.10 и материалы прямого эфира +

    +

    + 2016-10-03 00:00 +

    +
    +

    Редактор с игрой Маджонг

    +

    Внимание: мы не выпустим версию 0.10 для macOS из-за технических проблем с системой сборки. Поддержку macOS вернём к 0.11.

    + +
    + +
    +
    +

    + Пара слов о вчерашнем прямом эфире +

    +

    + 2016-09-26 00:00 +

    +
    +

    Создание пасьянса Маджонг прошло успешно, и заняло менее 4 часов.

    -

    Мы опубликуем материалы прямого эфира чуть позже на этой неделе. …

    - -
    - -
    -
    -

    - Прямой эфир через 24 часа -

    -

    - 2016-09-24 00:00 -

    -
    - -

    Приготовьтесь к прямому эфиру, он начнётся через 24 часа! …

    - -
    - -
    - -
    -

    - Август 2016 кратко -

    -

    - 2016-09-03 00:00 -

    -
    -
    -Редактор со сферическим узлом сцены
    Редактор со сферическим узлом сцены
    -
    -

    Эта статья описывает самые важные технические детали разработки за август: модуль UIQt, его переработку, новый подход к разработке на основе функционала и его преимущества. …

    - -
    - -
    -
    -

    - Мы вернулись в социальные сети -

    -

    - 2016-08-18 00:00 -

    -
    -

    Если вы подписаны на нашу группу в Facebook, Twitter или VK, вы заметили, что мы начали использовать её снова. Это не случайно: мы наконец созрели для вербального общения после 4 лет молчаливой разработки. …

    - -
    - -
    -
    -

    - Раз Маджонг – всегда Маджонг -

    -

    - 2016-08-10 00:00 -

    -
    -

    Мы начали проект Opensource Game Studio очень давно. Мы хотели дать сообществу свободного программного обеспечения средства для создания игр. Правда, тогда не было ясно, что они из себя должны представлять. Поэтому решили начать с малого: создать игру. …

    - -
    - -
    -
    -

    - Материалы прямого эфира за май 2016 -

    -

    - 2016-05-29 00:00 -

    -
    - -

    В этот раз мы показали, как создать простую игру на основе Домино. Ниже приведены все материалы, связанные с созданием игры. …

    - -
    - -
    -
    -

    - Прямой эфир: 28 мая 2016 -

    -

    - 2016-05-17 00:00 -

    -
    -

    Мы рады сообщить, что трансляция LiveCoding состоится 28 мая 2016 в 13:00 MSK. Присоединяйтесь! …

    - -
    - -
    -
    -

    - Майский прямой эфир (Редактор 0.9) -

    -

    - 2016-04-24 00:00 -

    -
    -

    Как вы знаете, ранее опубликованная дорожная карта предполагала, что в апреле будет прямой эфир, в котором с помощью Редактора 0.9 мы создадим игру пинг-понг. …

    - -
    - -
    +

    Мы опубликуем материалы прямого эфира чуть позже на этой неделе.. . .

    +
    + +
    +
    +

    + Прямой эфир через 24 часа +

    +

    + 2016-09-24 00:00 +

    +
    + +

    Приготовьтесь к прямому эфиру, он начнётся через 24 часа!. . .

    +
    + +
    + +
    +

    + Август 2016 кратко +

    +

    + 2016-09-03 00:00 +

    +
    +

    Редактор со сферическим узлом сцены

    +

    Эта статья описывает самые важные технические детали разработки за август: модуль UIQt, его переработку, новый подход к разработке на основе функционала и его преимущества.. . .

    +
    + +
    +
    +

    + Мы вернулись в социальные сети +

    +

    + 2016-08-18 00:00 +

    +
    +

    Если вы подписаны на нашу группу в Facebook, Twitter или VK, вы заметили, что мы начали использовать её снова. Это не случайно: мы наконец созрели для вербального общения после 4 лет молчаливой разработки.. . .

    +
    + +
    +
    +

    + Раз Маджонг – всегда Маджонг +

    +

    + 2016-08-10 00:00 +

    +
    +

    Мы начали проект Opensource Game Studio очень давно. Мы хотели дать сообществу свободного программного обеспечения средства для создания игр. Правда, тогда не было ясно, что они из себя должны представлять. Поэтому решили начать с малого: создать игру.. . .

    +
    + +
    +
    +

    + Материалы прямого эфира за май 2016 +

    +

    + 2016-05-29 00:00 +

    +
    + +

    В этот раз мы показали, как создать простую игру на основе Домино. Ниже приведены все материалы, связанные с созданием игры.. . .

    +
    + +
    +
    +

    + Прямой эфир: 28 мая 2016 +

    +

    + 2016-05-17 00:00 +

    +
    +

    Мы рады сообщить, что трансляция LiveCoding состоится 28 мая 2016 в 13:00 MSK. Присоединяйтесь!. . .

    +
    + +
    -

    Страница 4 из 6

    +

    Страница 4 из 6

    « Новее Старее »

    +
    diff --git a/ru/news/index5.html b/ru/news/index5.html index 62e1db8..bcdac8c 100644 --- a/ru/news/index5.html +++ b/ru/news/index5.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,164 +80,166 @@ -
    -

    Новости

    - -
    -

    - Запись прямого эфира "Катящийся мяч" и материалы -

    -

    - 2016-02-10 00:00 -

    -
    -

    Т.к. мы провели 2 прямые трансляции для создания игры “Катящийся мяч”, ниже вы можете увидеть 2 записи этого процесса на YouTube:

    - -

    - -
    - -
    -
    -

    - Создание игры в прямом эфире (часть 2): 7 февраля 2016 -

    -

    - 2016-02-02 00:00 -

    -
    -

    К сожалению, нам не удалось завершить создание простой игры “Катящийся мяч” за 3 часа. Поэтому вторая часть трансляции LiveCoding состоится 7 февраля 2016 в 14:00 MSK. …

    - -
    - -
    -
    -

    - Создание игры в прямом эфире: 31 января 2016 -

    -

    - 2016-01-25 00:00 -

    -
    -

    Мы рады сообщить, что трансляция LiveCoding состоится 31 января 2016 в 14:00 MSK. Присоединяйтесь! …

    - -
    - -
    -
    -

    - СКОРО: Создание простой игры в прямом эфире (Редактор 0.8) -

    -

    - 2016-01-21 00:00 -

    -
    -

    Мы готовы предоставить вам Редактор 0.8 с Проигрывателем. Прямая трансляция будет проведена на LiveCoding СКОРО. Мы покажем вам, как создать простую игру со звуком с нуля. И на этот раз она не будет требовать Редактора для работы. …

    - -
    - -
    -
    -

    - Дорожная карта 2016 -

    -

    - 2015-12-26 00:00 -

    -
    -

    Как вы знаете, согласно ранее опубликованной дорожной карте, мы добавили звуковую систему. Тем не менее, мы решили пойти дальше и создать первую версию Проигрывателя. Мы хотели завершить его в декабре, но, к сожалению, изменение планов вылилось в изменение сроков. …

    - -
    - -
    -
    -

    - Видеозапись живой сессии и материалы -

    -

    - 2015-11-15 00:00 -

    -
    -

    Если вы пропустили живую сессию, вы можете посмотреть ее здесь: https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/

    - -
    - -
    -
    -

    - Создание простой игры в прямом эфире: 15 ноября 2015 -

    -

    - 2015-11-09 00:00 -

    -
    -

    Мы рады сообщить, что трансляция LiveCoding состоится 15 ноября 2015 в 14:00 MSK. Присоединяйтесь! …

    - -
    - -
    -
    -

    - СКОРО: Создание простой игры в прямом эфире (Редактор 0.7) -

    -

    - 2015-11-02 00:00 -

    -
    -

    Как и было обещано, мы готовы предоставить вам Редактор 0.7, с помощью которого можно создать тестовый цех. Тем не менее, после воссоздания цеха стало ясно, что: …

    - -
    -
    -
    -

    - Прощай, Desura. Здравствуй, Humble Bundle Widget -

    -

    - 2015-07-23 00:00 -

    -
    -

    После недавнего банкротства родительской компании сервиса Desura мы пришли к выводу, что нам необходима новая площадка для распространения Deluxe-версии игры. Более современная, удобная, надежная. …

    +
    +

    Новости

    -
    - -
    +
    +

    + Майский прямой эфир (Редактор 0.9) +

    +

    + 2016-04-24 00:00 +

    +
    +

    Как вы знаете, ранее опубликованная дорожная карта предполагала, что в апреле будет прямой эфир, в котором с помощью Редактора 0.9 мы создадим игру пинг-понг.

    +

    Мы должны признать, что наши способности к планированию всё ещё недостаточно высоки, поэтому следующий прямой эфир состоится в конце мая. Точную дату мы объявим позже.. . .

    +
    + +
    +
    +

    + Запись прямого эфира "Катящийся мяч" и материалы +

    +

    + 2016-02-10 00:00 +

    +
    +

    Т.к. мы провели 2 прямые трансляции для создания игры "Катящийся мяч", ниже вы можете увидеть 2 записи этого процесса на YouTube:

    + +

    . . .

    +
    + +
    +
    +

    + Создание игры в прямом эфире (часть 2): 7 февраля 2016 +

    +

    + 2016-02-02 00:00 +

    +
    +

    К сожалению, нам не удалось завершить создание простой игры "Катящийся мяч" за 3 часа. Поэтому вторая часть трансляции LiveCoding состоится 7 февраля 2016 в 14:00 MSK.. . .

    +
    + +
    +
    +

    + Создание игры в прямом эфире: 31 января 2016 +

    +

    + 2016-01-25 00:00 +

    +
    +

    Мы рады сообщить, что трансляция LiveCoding состоится 31 января 2016 в 14:00 MSK. Присоединяйтесь!. . .

    +
    + +
    +
    +

    + СКОРО: Создание простой игры в прямом эфире (Редактор 0.8) +

    +

    + 2016-01-21 00:00 +

    +
    +

    Мы готовы предоставить вам Редактор 0.8 с Проигрывателем. Прямая трансляция будет проведена на LiveCoding СКОРО. Мы покажем вам, как создать простую игру со звуком с нуля. И на этот раз она не будет требовать Редактора для работы.. . .

    +
    + +
    +
    +

    + Дорожная карта 2016 +

    +

    + 2015-12-26 00:00 +

    +
    +

    Как вы знаете, согласно ранее опубликованной дорожной карте, мы добавили звуковую систему. Тем не менее, мы решили пойти дальше и создать первую версию Проигрывателя. Мы хотели завершить его в декабре, но, к сожалению, изменение планов вылилось в изменение сроков.. . .

    +
    + +
    +
    +

    + Видеозапись живой сессии и материалы +

    +

    + 2015-11-15 00:00 +

    +
    +

    Если вы пропустили живую сессию, вы можете посмотреть ее здесь: +https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/. . .

    +
    + +
    +
    +

    + Создание простой игры в прямом эфире: 15 ноября 2015 +

    +

    + 2015-11-09 00:00 +

    +
    +

    Мы рады сообщить, что трансляция LiveCoding состоится 15 ноября 2015 в 14:00 MSK. Присоединяйтесь!. . .

    +
    + +
    +
    +

    + СКОРО: Создание простой игры в прямом эфире (Редактор 0.7) +

    +

    + 2015-11-02 00:00 +

    +
    +

    Как и было обещано, мы готовы предоставить вам Редактор 0.7, с помощью которого можно создать тестовый цех. Тем не менее, после воссоздания цеха стало ясно, что:

    +
      +
    1. это занимает более 8 часов (слишком долго). . .
    2. +
    +
    + +
    -

    Страница 5 из 6

    +

    Страница 5 из 6

    « Новее Старее »

    +
    diff --git a/ru/news/index6.html b/ru/news/index6.html index 280969f..63d4480 100644 --- a/ru/news/index6.html +++ b/ru/news/index6.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,150 +80,164 @@ -
    -

    Новости

    - -
    -

    - Тестовый цех каждому (Редактор 0.7.0) -

    -

    - 2015-07-22 00:00 -

    -
    -

    Как вы знаете, основная цель Редактора 0.7.0 - это возможность создать тестовый цех с помощью него. Редактору не хватает системы Действий и исправления некоторых ошибок для этого. Помимо выпуска Редактора мы опубликуем подробную статью, описывающую создание тестового цеха, чтобы каждый мог создать себе свой тестовый цех! …

    +
    +

    Новости

    -
    - -
    -
    -

    - Дорожная карта 2015-2016 -

    -

    - 2015-07-19 00:00 -

    -
    +
    +

    + Прощай, Desura. Здравствуй, Humble Bundle Widget +

    +

    + 2015-07-23 00:00 +

    +
    +

    После недавнего банкротства родительской компании сервиса Desura мы пришли к выводу, что нам необходима новая площадка для распространения Deluxe-версии игры. Более современная, удобная, надежная. +Наш выбор пал на Humble Widget, благодаря которому вы можете приобрести Deluxe-версию игры прямо у нас на сайте.. . .

    +
    + +
    +
    +

    + Тестовый цех каждому (Редактор 0.7.0) +

    +

    + 2015-07-22 00:00 +

    +
    +

    Как вы знаете, основная цель Редактора 0.7.0 - это возможность создать тестовый цех с помощью него. Редактору не хватает системы Действий и исправления некоторых ошибок для этого. Помимо выпуска Редактора мы опубликуем подробную статью, описывающую создание тестового цеха, чтобы каждый мог создать себе свой тестовый цех!. . .

    +
    + +
    +
    +

    + Дорожная карта 2015-2016 +

    +

    + 2015-07-19 00:00 +

    +

    Как и было обещано, мы составили список вех и их примерные даты на ближайший год:

    -
      -
    1. Редактор 0.7.0 (Октябрь 2015) - Система действий: мы воссоздаём тестовый цех
    2. +
        +
      1. Редактор 0.7.0 (Октябрь 2015) - Система действий: мы воссоздаём тестовый цех. . .
      - -
    - -
    -
    -

    - Редактор 0.6.0 -

    -

    - 2015-06-28 00:00 -

    -
    -

    Мы завершили работу над версией 0.6.0 редактора. Вы можете увидеть 0.6.0 в действии здесь.

    -

    Список новых возможностей Редактора 0.6.0: …

    - -
    - -
    -
    -

    - Редактор 0.5.0 и планы для 0.6.0 -

    -

    - 2015-04-15 00:00 -

    -
    -

    Мы завершили работу над версией 0.5.0 редактора. Как было запланировано, эта версия содержит редактирование узлов сцены, браузер свойств, поддеркжу Qt5. Вы можете увидеть 0.5.0 в действии здесь. …

    - -
    - -
    -
    -

    - Редактор 0.4.0 и планы для 0.5.0 -

    -

    - 2015-03-07 00:00 -

    -
    -

    Мы завершили работу над версией 0.4.0 редактора в январе. Как было запланировано, эта версия содержит лишь базовые возможности открыть и сохранить проект. Основная цель была в том, чтобы подружить MJIN, Python и Qt (в частности, по ряду технических причин мы не смогли использовать PyQt или PySide). …

    - -
    - -
    -
    -

    - План задач для Editor 0.4.0 -

    -

    - 2015-01-13 00:00 -

    -
    -

    Разработка Editor 0.3.0 показала нам, что использование кастомного GUI не было столь хорошей идеей, как показалось на первый взгляд. Несмотря на более простую реализацию, кастомный GUI лишен множества мелких достоинств, которые оказываются практически необходимы, если задаться целью сделать удобный инструмент. …

    - -
    - -
    - +
    +

    + Редактор 0.6.0 +

    +

    + 2015-06-28 00:00 +

    +
    +

    Мы завершили работу над версией 0.6.0 редактора. Вы можете увидеть 0.6.0 в действии здесь.

    +

    Список новых возможностей Редактора 0.6.0:. . .

    +
    + +
    +
    +

    + Редактор 0.5.0 и планы для 0.6.0 +

    +

    + 2015-04-15 00:00 +

    +
    +

    Мы завершили работу над версией 0.5.0 редактора. Как было запланировано, эта версия содержит редактирование узлов сцены, браузер свойств, поддеркжу Qt5. Вы можете увидеть 0.5.0 в действии здесь. . . .

    +
    + +
    +
    +

    + Редактор 0.4.0 и планы для 0.5.0 +

    +

    + 2015-03-07 00:00 +

    +
    +

    Мы завершили работу над версией 0.4.0 редактора в январе. Как было запланировано, эта версия содержит лишь базовые возможности открыть и сохранить проект. Основная цель была в том, чтобы подружить MJIN, Python и Qt (в частности, по ряду технических причин мы не смогли использовать PyQt или PySide).. . .

    +
    + +
    +
    +

    + План задач для Editor 0.4.0 +

    +

    + 2015-01-13 00:00 +

    +
    +

    Разработка Editor 0.3.0 показала нам, что использование кастомного GUI не было столь хорошей идеей, как показалось на первый взгляд. Несмотря на более простую реализацию, кастомный GUI лишен множества мелких достоинств, которые оказываются практически необходимы, если задаться целью сделать удобный инструмент.. . .

    +
    + +
    +
    +

    + Окончание опроса +

    +

    + 2014-12-31 11:00 +

    +
    +

    Около года назад мы начинали опрос, с помощью которого планировали узнать ваше отношение к Open Source вообще и нашему проекту в частности. Сегодня мы его завершаем. Ответы набирались довольно медленно, но в целом мы собрали довольно приличное ответов, за что вам очень благодарны.. . .

    +
    + +
    +
    +

    + И вот прошел еще один год +

    +

    + 2014-12-31 12:00 +

    +

    Привет.

    -

    Подходит к концу год, в течение которого мы разместили на сайте рекордно малое количество новостей. Мы не прекратили разработку, однако пока она находится в фазе “показывать нечего”, а свободного времени, которое можно уделять проекту, у каждого из его участников сейчас найдется редко больше чем 30-40 часов в месяц. …

    +

    Подходит к концу год, в течение которого мы разместили на сайте рекордно малое количество новостей. Мы не прекратили разработку, однако пока она находится в фазе "показывать нечего", а свободного времени, которое можно уделять проекту, у каждого из его участников сейчас найдется редко больше чем 30-40 часов в месяц.. . .

    +
    + +
    -
    - -
    -
    -

    - Окончание опроса -

    -

    - 2014-12-31 11:00 -

    -
    -

    Около года назад мы начинали опрос, с помощью которого планировали узнать ваше отношение к Open Source вообще и нашему проекту в частности. Сегодня мы его завершаем. Ответы набирались довольно медленно, но в целом мы собрали довольно приличное ответов, за что вам очень благодарны. …

    - -
    - -
    - -

    Страница 6 из 6

    +

    Страница 6 из 6

    « Новее

    +
    diff --git a/ru/news/ios-tutorial.html b/ru/news/ios-tutorial.html index 874a2d2..56e2399 100644 --- a/ru/news/ios-tutorial.html +++ b/ru/news/ios-tutorial.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,70 +87,66 @@ -
    -

    В новостях

    -
    -

    - Самоучитель iOS -

    -

    - 2017-06-08 10:00 -

    -
    -
    -Земля и ракета
    Земля и ракета
    -
    +
    +

    В новостях...

    +
    +

    + Самоучитель iOS +

    +

    + 2017-06-08 10:00 +

    +
    +

    Земля и ракета

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

    В феврале мы сумели отобразить простую модель под iOS за считанные дни. Это дало нам уверенность, что самоучитель для iOS мы сделаем столь же быстро. Тем не менее, реальность напомнила нам о простой вещи: быстро сделать можно лишь поделку на коленке, работающую только у самого разработчика; над логически связанным примером, работающим у всех, придётся попотеть.

    Нативная библиотека

    -

    Прежде всего нам необходимо было ответить на следующий вопрос: “должен ли пример приложения быть частью проекта Xcode или отдельной библиотекой?”

    +

    Прежде всего нам необходимо было ответить на следующий вопрос: "должен ли пример приложения быть частью проекта Xcode или отдельной библиотекой?"

    Для принятия решения мы использовали следующие факты:

    -
      -
    1. Проект Xcode может напрямую использовать C++ (благодаря Objective-C++) без прослоек вроде JNI -
        +
          +
        1. Проект Xcode может напрямую использовать C++ (благодаря Objective-C++) без прослоек вроде JNI
          • Отдельная библиотека не нужна (+ приложение)
          • -
          • Создание отдельной библиотеки - это дополнительная работа (- библиотека)
          • -
        2. -
        3. OpenSceneGraph собирается в библиотеки -
            +
          • Создание отдельной библиотеки - это дополнительная работа (- библиотека)
        4. +
        5. OpenSceneGraph собирается в библиотеки
          • Легче использовать стандартный процесс сборки (+ библиотека)
          • -
          • Создавать свой процесс сборки лишь для одной платформы сложно (- приложение)
          • -
        6. -
        7. OpenSceneGraph использует систему сборки CMake, которая не поддерживается Xcode -
            +
          • Создавать свой процесс сборки лишь для одной платформы сложно (- приложение)
        8. +
        9. OpenSceneGraph использует систему сборки CMake, которая не поддерживается Xcode
          • Проект Xcode не может включать файлы CMake (- приложение)
          • -
          • Свой файл CMake может с лёгкостью включить файл OpenSceneGraph CMake для сборки единой библиотеки (+ библиотека)
          • -
        10. -
        11. CMake может генерировать проект Xcode -
            +
          • Свой файл CMake может с лёгкостью включить файл OpenSceneGraph CMake для сборки единой библиотеки (+ библиотека)
        12. +
        13. CMake может генерировать проект Xcode
          • Можно создать файл CMake, который будет собирать как OpenSceneGraph, так и пример приложения (+ приложение)
          • -
          • Xcode - это де-факто инструмент для создания проектов Xcode; легче использовать стандартный процесс сборки (+ библиотека)
          • -
        14. +
        15. Xcode - это де-факто инструмент для создания проектов Xcode; легче использовать стандартный процесс сборки (+ библиотека)

    Оценив плюсы и минусы обоих подходов, мы решили сделать библиотеку, которую можно включать в проект Xcode. Минусом данного подхода является то, что сборки приложения для симулятора и реального устройства используют разные сборки библиотеки.

    Рефакторинг

    -

    Также нам пришлось ответить на ещё один вопрос: “использовать ли единую кодовую базу для всех платформ или несколько под каждую платформу?”

    +

    Также нам пришлось ответить на ещё один вопрос: "использовать ли единую кодовую базу для всех платформ или несколько под каждую платформу?"

    При создании самоучителя для Android мы использовали единую кодовую базу, т.к. она отлично работала для десктопа и Android. Когда мы начали работу над самоучителем iOS, стало ясно, что часть функционала либо работает, либо не работает на некоторых платформах. Например, один функционал может работать на десктопе и iOS, но не работать на Android. Другой функционал может работать на iOS и Android, но не работать на десктопе. Т.к. мы не хотели загрязнять код кучей #ifdef, мы решили помещать функционал, специфичный для конкретной платформы или нескольких платформ, в разные файлы. Это привело к резкому увеличению количества файлов. Такой подход хорошо подходил для повторного использования, но совершенно не годился для понимания общей картины.

    В этот момент мы осознали необходимость ответа на второй вопрос. Мы напомнили себе, что главная цель примера приложения состоит в том, чтобы обучить базовым вещам OpenSceneGraph, а не создать повторно используемую библиотеку с API, который будет жить без изменений десятилетиями.

    Для ответа на этот вопрос нам помог наш внутренний инструмент feature tool. С его помощью мы разделили код на несколько частей, который в итоге собирается ровно в два файла для каждой платформы:

    -
      +
      1. functions.h - содержит повторно используемые бесклассовые функции
      2. main.h - содержит остальной код приложения

      Их содержимое несколько отличается для каждой из платформ, но наличие всего двух файлов позволяет увидеть общую картину.

      На этом мы заканчиваем описание проблем, с которыми мы столкнулись во время создания самоучителя для iOS в мае 2017.

      - -
    +
    +
    diff --git a/ru/news/item.template b/ru/news/item.template new file mode 100644 index 0000000..253504b --- /dev/null +++ b/ru/news/item.template @@ -0,0 +1,121 @@ + + + + + + + + +
    +

    В новостях...

    +
    +

    + PSKOV_ITEM_TITLE +

    +

    + PSKOV_ITEM_DATE +

    +
    +PSKOV_ITEM_CONTENTS +
    +
    + +
    + + diff --git a/ru/news/its-all-fine.html b/ru/news/its-all-fine.html index 43c4de8..2353cc0 100644 --- a/ru/news/its-all-fine.html +++ b/ru/news/its-all-fine.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,32 +87,32 @@ -
    -

    В новостях

    -
    -

    - Всё проходит хорошо -

    -

    - 2017-04-07 00:00 -

    -
    -
    -Полёт ракеты
    Полёт ракеты
    -
    +
    +

    В новостях...

    +
    +

    + Всё проходит хорошо +

    +

    + 2017-04-07 00:00 +

    +
    +

    Полёт ракеты

    Эта статья рассказывает о создании первых четырёх самоучителей OpenSceneGraph в марте 2017.

    Первые четыре самоучителя OpenSceneGraph объясняют, как создать модель куба в Blender и затем отобразить её на Linux, macOS или Windows с помощью osgviewer, стандартного инструмента OpenSceneGraph.

    Процесс создания одного самоучителя оказался довольно утомительным, т.к. он состоит из следующих задач:

    -
      +
      1. Записать видео с одним или более шагами
      2. Назвать эти шаги как можно яснее
      3. Выбрать те части видео, которые непосредственно показывают шаг
      4. @@ -128,9 +127,13 @@

        Некоторые из этих задач приходилось повторять несколько раз до тех пор, пока комбинация видео, текста и статьи не получилась целостной.

        Всего мы потратили 30 часов на создание самоучителей. В ходе их создания мы почерпнули много нового, что поможет нам улучшить обучающие материалы наших технологий в будущем. Сейчас мы ещё не в курсе, как именно эти материалы будут выглядеть, но они точно будут лучше.

        На этом мы заканчиваем рассказ о создании первых четырёх самоучителей OpenSceneGraph в марте 2017.

        - -
    +
    +
    diff --git a/ru/news/january-live-session-announcement.html b/ru/news/january-live-session-announcement.html index d59070b..f04aa0d 100644 --- a/ru/news/january-live-session-announcement.html +++ b/ru/news/january-live-session-announcement.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,29 +87,35 @@ -
    -

    В новостях

    -
    -

    - Создание игры в прямом эфире: 31 января 2016 -

    -

    - 2016-01-25 00:00 -

    -
    -

    Мы рады сообщить, что трансляция LiveCoding состоится 31 января 2016 в 14:00 MSK. Присоединяйтесь!

    - -
    +
    +

    В новостях...

    +
    +

    + Создание игры в прямом эфире: 31 января 2016 +

    +

    + 2016-01-25 00:00 +

    +
    +

    Мы рады сообщить, что трансляция LiveCoding состоится 31 января 2016 в 14:00 MSK. Присоединяйтесь!

    +
    +
    diff --git a/ru/news/january-live-session-decision.html b/ru/news/january-live-session-decision.html index e34c150..85c0f03 100644 --- a/ru/news/january-live-session-decision.html +++ b/ru/news/january-live-session-decision.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,30 +87,36 @@ -
    -

    В новостях

    -
    -

    - СКОРО: Создание простой игры в прямом эфире (Редактор 0.8) -

    -

    - 2016-01-21 00:00 -

    -
    -

    Мы готовы предоставить вам Редактор 0.8 с Проигрывателем. Прямая трансляция будет проведена на LiveCoding СКОРО. Мы покажем вам, как создать простую игру со звуком с нуля. И на этот раз она не будет требовать Редактора для работы.

    +
    +

    В новостях...

    +
    +

    + СКОРО: Создание простой игры в прямом эфире (Редактор 0.8) +

    +

    + 2016-01-21 00:00 +

    +
    +

    Мы готовы предоставить вам Редактор 0.8 с Проигрывателем. Прямая трансляция будет проведена на LiveCoding СКОРО. Мы покажем вам, как создать простую игру со звуком с нуля. И на этот раз она не будет требовать Редактора для работы.

    Точную дату и время мы объявим в ближайшие дни. Оставайтесь на связи!

    - -
    +
    +
    diff --git a/ru/news/lets-go.html b/ru/news/lets-go.html index c3cdad8..02c51f4 100644 --- a/ru/news/lets-go.html +++ b/ru/news/lets-go.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,32 +87,32 @@ -
    -

    В новостях

    -
    -

    - Поехали -

    -

    - 2017-03-16 00:00 -

    -
    -
    -Слова Гагарина
    Слова Гагарина
    -
    +
    +

    В новостях...

    +
    +

    + Поехали +

    +

    + 2017-03-16 00:00 +

    +
    +

    Слова Гагарина

    В этой статье мы расскажем о результатах нашей работы в январе и феврале 2017: отображении куба на iOS/Веб и нашем инструменте для создания самоучителей.

    Отображение куба на iOS/Web

    К нашему удивлению, мы смогли отобразить простой красный куб на iOS и Веб довольно быстро: в начале февраля. Тем не менее, это лишь начало поддержки платформ Android, iOS и Веб. Впереди нас ждёт тернистая дорога, т.к. нам предстоит сделать ещё много вещей, прежде чем мы сможем объявить о полноценной поддержке этих платформ: визуальные эффекты, скрипты Python, архивы данных.

    -

    Т.к. нам потребовалось четыре месяца для начала поддержки платформ Android, iOS и Веб, мы решили поделиться своими знаниями и помочь сообществу OpenSceneGraph. Мы напишем руководство по использованию OpenSceneGraph на ПК, мобилках и Вебе. Мы верим: чем более распространён OpenSceneGraph, тем сильнее наши собственные технологии. Как сказал Исаак Ньютон: “Если я видел дальше других, то потому, что стоял на плечах гигантов”. OpenSceneGraph - наш гигант.

    +

    Т.к. нам потребовалось четыре месяца для начала поддержки платформ Android, iOS и Веб, мы решили поделиться своими знаниями и помочь сообществу OpenSceneGraph. Мы напишем руководство по использованию OpenSceneGraph на ПК, мобилках и Вебе. Мы верим: чем более распространён OpenSceneGraph, тем сильнее наши собственные технологии. Как сказал Исаак Ньютон: "Если я видел дальше других, то потому, что стоял на плечах гигантов". OpenSceneGraph - наш гигант.

    Инструмент для создания самоучителей

    Имея за плечами опыт проведения четырёх прямых эфиров, нам стало ясно, что руководство по использованию OpenSceneGraph будет полезно лишь при наличии видео. Но голое видео способно отразить лишь то, что мы делаем, но не то, почему мы делаем именно это и именно так. Поэтому мы решили совместить видео с текстом в форме как субтитров к видео, так и отдельных статей.

    Первую попытку совмещения видео с текстом мы начали с помощью OpenShot. Инструмент хороший, но с первого же дня использования стали очевидны следующие ограничения:

    @@ -124,18 +123,23 @@

    Т.к. руководство по использованию OpenSceneGraph будет состоять из нескольких самоучителей, мы решили автоматизировать процесс. Быстрый поиск рассказал нам о существовании замечательного мультимедийного фреймворка MLT, который используется и в OpenShot. С помощью MLT мы быстро сделали свой инструмент для создания самоучителей.

    На текущий момент наш инструмент позволяет совместить видео и текст с помощью простого текстового файла:

    background bg.png
    -text 5 Let's install Blender
    +text 5 Let's install Blender
     video 0:6 install_blender.mp4
     text 5 Installing it with apt
     video 6:26 install_blender.mp4
    -text 5 We're still installing it
    +text 5 We're still installing it
     video 26:56 install_blender.mp4
    -text 5 Congratulations! We just finished installing Blender
    +text 5 Congratulations! We just finished installing Blender +

    Это реальный скрипт. Конечный результат можно увидеть здесь.

    На этом мы заканчиваем рассказ о результатах нашей работы в январе и феврале 2017: отображении куба на iOS/Веб и нашем инструменте для создания самоучителей.

    - -
    +
    +
    diff --git a/ru/news/livesession-editor-07.html b/ru/news/livesession-editor-07.html index ff97c0e..a6c8503 100644 --- a/ru/news/livesession-editor-07.html +++ b/ru/news/livesession-editor-07.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,29 +87,35 @@ -
    -

    В новостях

    -
    -

    - Создание простой игры в прямом эфире: 15 ноября 2015 -

    -

    - 2015-11-09 00:00 -

    -
    -

    Мы рады сообщить, что трансляция LiveCoding состоится 15 ноября 2015 в 14:00 MSK. Присоединяйтесь!

    - -
    +
    +

    В новостях...

    +
    +

    + Создание простой игры в прямом эфире: 15 ноября 2015 +

    +

    + 2015-11-09 00:00 +

    +
    +

    Мы рады сообщить, что трансляция LiveCoding состоится 15 ноября 2015 в 14:00 MSK. Присоединяйтесь!

    +
    +
    diff --git a/ru/news/livesession-materials-editor-07.html b/ru/news/livesession-materials-editor-07.html index 525bda5..0075e44 100644 --- a/ru/news/livesession-materials-editor-07.html +++ b/ru/news/livesession-materials-editor-07.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,36 +87,45 @@ -
    -

    В новостях

    -
    -

    - Видеозапись живой сессии и материалы -

    -

    - 2015-11-15 00:00 -

    -
    -

    Если вы пропустили живую сессию, вы можете посмотреть ее здесь: https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/

    -

    Проект, созданный в ходе сессии, можно скачать здесь: https://github.com/OGStudio/liveSessionWhacAMole/archive/master.zip

    -

    Последняя версия редактора доступна здесь: http://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/42_2015-11-13_08-16-46_0.7.4/

    +
    +

    В новостях...

    +
    +

    + Видеозапись живой сессии и материалы +

    +

    + 2015-11-15 00:00 +

    +
    +

    Если вы пропустили живую сессию, вы можете посмотреть ее здесь: +https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/

    +

    Проект, созданный в ходе сессии, можно скачать здесь: +https://github.com/OGStudio/liveSessionWhacAMole/archive/master.zip

    +

    Последняя версия редактора доступна здесь: +http://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/422015-11-1308-16-46_0.7.4/

    Скачайте редактор, разархивируйте, удалите папку wam.ogs из редактора, скопируйте папку wam.ogs из архива живой сессии в папку редактора.

    • в Windows - запустите файл run.bat.
    • в Linux и OSX - запустите файл run.
    - -
    +
    +
    diff --git a/ru/news/mahjong-demo2.html b/ru/news/mahjong-demo2.html index 0969cb3..452ba6f 100644 --- a/ru/news/mahjong-demo2.html +++ b/ru/news/mahjong-demo2.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +87,28 @@ -
    -

    В новостях

    -
    -

    - OGS Mahjong 2: Demo 2 -

    -

    - 2018-10-02 00:00 -

    -
    -
    -Начало партии Маджонг
    Начало партии Маджонг
    -
    +
    +

    В новостях...

    +
    +

    + OGS Mahjong 2: Demo 2 +

    +

    + 2018-10-02 00:00 +

    +
    +

    Начало партии Маджонг

    Мы рады сообщить о выпуске второй демонстрации OGS Mahjong 2. Её целью были улучшение техники разработки и создание надёжной основы кроссплатформенной разработки.

    Выпуск

    Запустите последний выпуск OGS Mahjong 2 в вашем браузере: http://ogstudio.github.io/ogs-mahjong

    @@ -124,12 +123,16 @@
  • Хранилище OGS Mahjong содержит снимок набора функциональностей компонент OGS Mahjong, которые определяют версию игры. Например, версия Demo 2 почти полностью повторяет пример 05.ColorfulStatus из компонент OGS Mahjong.
  • За пределами пасьянса Маджонг

    -

    В дополнение к параметру seed вы можете указать игре использовать удалённую раскладку, расположенную на GitHub: http://ogstudio.github.io/ogs-mahjong?seed=0&layout=github://OGStudio/ogs-mahjong-components/data/cat.layout

    +

    В дополнение к параметру seed вы можете указать игре использовать удалённую раскладку, расположенную на GitHub: http://ogstudio.github.io/ogs-mahjong?seed=0&layout=github://OGStudio/ogs-mahjong-components/data/cat.layout

    Использование удалённых ресурсов открывает огромные возможности, т.к. позволяет любому желающему создать раскладку на свой вкус и моментально её проверить.

    Наш следующий шаг - это выделение игровой логики в виде ресурса.

    - -
    +
    +
    diff --git a/ru/news/mahjong-recreation-start.html b/ru/news/mahjong-recreation-start.html index f49183e..8343e74 100644 --- a/ru/news/mahjong-recreation-start.html +++ b/ru/news/mahjong-recreation-start.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +87,28 @@ -
    -

    В новостях

    -
    -

    - Начало воссоздания Маджонга -

    -

    - 2018-01-26 00:00 -

    -
    -
    -Сферические фишки в раскладке Маджонг
    Сферические фишки в раскладке Маджонг
    -
    +
    +

    В новостях...

    +
    +

    + Начало воссоздания Маджонга +

    +

    + 2018-01-26 00:00 +

    +
    +

    Сферические фишки в раскладке Маджонг

    Эта статья описывает начало воссоздания игры Маджонг.

    План

    Мы начали воссоздание Маджонга с составления краткого плана реализации игровой механики с минимальной графикой:

    @@ -137,7 +136,8 @@

    Проект mahjong-data является примером подобного проекта MJIN, ресурсы из которого использует проект mahjong.

    Проблема №2: загрузка изображений PNG на поддерживаемых платформах

    -

    Для загрузки PNG мы используем соответствующий плагин OpenSceneGraph. Мы собрали его без проблем для десктопа. Сборка же для веба (Emscripten) оказалась сложнее: Emscripten содержит собственную версию libpng, которую сборочный скрипт OpenSceneGraph не видит. Нам пришлось обойти несколько проверок OpenSceneGraph, чтобы успешно собрать плагин для Emscripten. Сборка плагина под мобилки ещё ждёт нас впереди. Как только мы разберёмся с плагином PNG на всех поддерживаемых платформах, мы опубликуем информацию о его сборке в новом самоучителе для кросс-платформенного руководства OpenSceneGraph. Нас уже попросили это сделать.

    +

    Для загрузки PNG мы используем соответствующий плагин OpenSceneGraph. Мы собрали его без проблем для десктопа. Сборка же для веба (Emscripten) оказалась сложнее: Emscripten содержит собственную версию libpng, которую сборочный скрипт OpenSceneGraph не видит. Нам пришлось обойти несколько проверок OpenSceneGraph, чтобы успешно собрать плагин для Emscripten. +Сборка плагина под мобилки ещё ждёт нас впереди. Как только мы разберёмся с плагином PNG на всех поддерживаемых платформах, мы опубликуем информацию о его сборке в новом самоучителе для кросс-платформенного руководства OpenSceneGraph. Нас уже попросили это сделать.

    Разработка

    Как вы знаете, мы опубликовали кросс-платформенное руководство OpenSceneGraph для усиления сообщества OpenSceneGraph. Мы ценим обучение и любим делиться своими знаниями. Поэтому мы решили разрабатывать Маджонг небольшими воспроизводимыми частями, каждая из которых имеет уникальную внутреннюю версию. Эти версии доступны в хранилище проекта mahjong.

    Мы также предоставляем историю версий, каждая из которых сопровождается сборкой под веб, для следующих целей:

    @@ -149,9 +149,13 @@

    На момент написания этой статьи мы закончили реализацию выбора фишек. Проверьте в своём браузере!

    После реализации сравнения фишек мы опубликуем промежуточный результат для всех поддерживаемых платформ.

    На этом мы заканчиваем описание начала воссоздания игры Маджонг.

    - -
    +
    +
    diff --git a/ru/news/mahjong-techdemo1-gameplay.html b/ru/news/mahjong-techdemo1-gameplay.html index 33d7eb5..4be8c25 100644 --- a/ru/news/mahjong-techdemo1-gameplay.html +++ b/ru/news/mahjong-techdemo1-gameplay.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +87,28 @@ -
    -

    В новостях

    -
    -

    - Первая технодемка OGS Mahjong 2: Игровая механика -

    -

    - 2018-02-16 00:00 -

    -
    -
    -Конец партии Маджонг
    Конец партии Маджонг
    -
    +
    +

    В новостях...

    +
    +

    + Первая технодемка OGS Mahjong 2: Игровая механика +

    +

    + 2018-02-16 00:00 +

    +
    +

    Конец партии Маджонг

    Мы ради сообщить о выпуске первой технической демонастрации OGS Mahjong 2. Её цель была в проверке игровой механики на всех поддерживаемых платформах.

    Проверьте технодемку на своей платформе:

      @@ -127,9 +126,13 @@
    • Версия для macOS должна работать на macOS Sierra или новее.

    На сегодня это всё, хорошей проверки!

    - -
    +
    +
    diff --git a/ru/news/may-live-session-announcement.html b/ru/news/may-live-session-announcement.html index fb9aa4c..19ae781 100644 --- a/ru/news/may-live-session-announcement.html +++ b/ru/news/may-live-session-announcement.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,29 +87,35 @@ -
    -

    В новостях

    -
    -

    - Прямой эфир: 28 мая 2016 -

    -

    - 2016-05-17 00:00 -

    -
    -

    Мы рады сообщить, что трансляция LiveCoding состоится 28 мая 2016 в 13:00 MSK. Присоединяйтесь!

    - -
    +
    +

    В новостях...

    +
    +

    + Прямой эфир: 28 мая 2016 +

    +

    + 2016-05-17 00:00 +

    +
    +

    Мы рады сообщить, что трансляция LiveCoding состоится 28 мая 2016 в 13:00 MSK. Присоединяйтесь!

    +
    +
    diff --git a/ru/news/may-live-session-decision.html b/ru/news/may-live-session-decision.html index d6f7a65..a88cd4b 100644 --- a/ru/news/may-live-session-decision.html +++ b/ru/news/may-live-session-decision.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,31 +87,38 @@ -
    -

    В новостях

    -
    -

    - Майский прямой эфир (Редактор 0.9) -

    -

    - 2016-04-24 00:00 -

    -
    -

    Как вы знаете, ранее опубликованная дорожная карта предполагала, что в апреле будет прямой эфир, в котором с помощью Редактора 0.9 мы создадим игру пинг-понг.

    +
    +

    В новостях...

    +
    +

    + Майский прямой эфир (Редактор 0.9) +

    +

    + 2016-04-24 00:00 +

    +
    +

    Как вы знаете, ранее опубликованная дорожная карта предполагала, что в апреле будет прямой эфир, в котором с помощью Редактора 0.9 мы создадим игру пинг-понг.

    Мы должны признать, что наши способности к планированию всё ещё недостаточно высоки, поэтому следующий прямой эфир состоится в конце мая. Точную дату мы объявим позже.

    -

    Вот пара моментов из будущей игры:

    - -
    +

    Вот пара моментов из будущей игры:

    +
    +
    +
    diff --git a/ru/news/mjin-world-birth.html b/ru/news/mjin-world-birth.html index eeae4f2..06780de 100644 --- a/ru/news/mjin-world-birth.html +++ b/ru/news/mjin-world-birth.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,38 +87,38 @@ -
    -

    В новостях

    -
    -

    - Рождение вселенной MJIN -

    -

    - 2017-09-10 00:00 -

    -
    -
    -Взрыв, рождающий что-то новое
    Взрыв, рождающий что-то новое
    -
    +
    +

    В новостях...

    +
    +

    + Рождение вселенной MJIN +

    +

    + 2017-09-10 00:00 +

    +
    +

    Взрыв, рождающий что-то новое

    Эта статья описывает рождение вселенной MJIN в августе 2017.

    mjin-player

    Как вы знаете, в июле мы изучали скриптование. Мы нашли решение, которое удовлетворяет следующим критериям. Скрипты должны:

    -
      +
      1. исполняться в исходном виде без изменений на всех поддерживаемых платформах
      2. позволять расширять код C++

      Мы проверили второй критерий в рамках тестового приложения. В первый критерий мы просто поверили, т.к. он ДОЛЖЕН быть верен.

      В тот момент мы видели два варианта проверки первого критерия:

      -
        +
        1. создать по одному тестовому приложению под каждую платформу для проверки лишь этого критерия
        2. создать одно кросс-платформенное приложение, которому можно скормить практически любой код
        @@ -130,9 +129,13 @@

        Вселенная MJIN

        Так что же такое вселенная MJIN? Это множество проектов, которые являются нашими средствами для разработки игр. mjin-player и mjin-application - первые кирпичики недавно появившейся вселенной MJIN. А будет их намного больше. Оставайтесь на связи, нас ждёт светлое будущее с MJIN.

        На этом мы заканчиваем описание рождения вселенной MJIN в августе 2017.

        - -
    +
    +
    diff --git a/ru/news/ogs-editor-0.10.html b/ru/news/ogs-editor-0.10.html index 4a5627e..2f99d14 100644 --- a/ru/news/ogs-editor-0.10.html +++ b/ru/news/ogs-editor-0.10.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +87,28 @@ -
    -

    В новостях

    -
    -

    - OGS Editor 0.10 и материалы прямого эфира -

    -

    - 2016-10-03 00:00 -

    -
    -
    -Редактор с игрой Маджонг
    Редактор с игрой Маджонг
    -
    +
    +

    В новостях...

    +
    +

    + OGS Editor 0.10 и материалы прямого эфира +

    +

    + 2016-10-03 00:00 +

    +
    +

    Редактор с игрой Маджонг

    Внимание: мы не выпустим версию 0.10 для macOS из-за технических проблем с системой сборки. Поддержку macOS вернём к 0.11.

    - -
    +
    +
    diff --git a/ru/news/ogs-editor-0.9.html b/ru/news/ogs-editor-0.9.html index 7b74986..523bc97 100644 --- a/ru/news/ogs-editor-0.9.html +++ b/ru/news/ogs-editor-0.9.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,36 +87,41 @@ -
    -

    В новостях

    -
    -

    - Материалы прямого эфира за май 2016 -

    -

    - 2016-05-29 00:00 -

    -
    - +
    +

    В новостях...

    +
    +

    + Материалы прямого эфира за май 2016 +

    +

    + 2016-05-29 00:00 +

    +
    +

    В этот раз мы показали, как создать простую игру на основе Домино. Ниже приведены все материалы, связанные с созданием игры.

    -
      +
      1. Редактор 0.9 для Linux (на основе Debian), OS X (10.9+), Windows доступен на SourceForge. Просто распакуйте и запустите скрипт run.
      2. Проект Домино, созданный во время прямого эфира доступен на GitHub.
      3. Видео репетиции создания игры, на которые есть ссылки в прямом эфире, доступны на YouTube
      - -
    +
    +
    diff --git a/ru/news/on-the-way-to-durable-applications.html b/ru/news/on-the-way-to-durable-applications.html new file mode 100644 index 0000000..605775c --- /dev/null +++ b/ru/news/on-the-way-to-durable-applications.html @@ -0,0 +1,158 @@ + + + + + + + + +
    +

    В новостях...

    +
    +

    + На пути к долговечным приложениям +

    +

    + 2019-08-05 00:00 +

    +
    +

    Псковское вече

    +

    В этой статье мы расскажем о нашем первом долговечном приложении для настольных ПК - генераторе статических сайтов ПСКОВ.

    +

    Долговечность

    +

    Под долговечным приложением мы понимаем такое приложение, которое работает без единого изменения на операционных системах, выпущенных в период 2010-2030 годов. Иными словами, долговечное приложение обладает 10-летней обратной совместимостью и 10-летней прочностью. Впрочем, ПСКОВ работает даже на Windows 2000, так что у него 19-летняя обратная совместимость.

    +

    Технически ПСКОВ представляет из себя один файл HTML с упакованными в нём разметкой (HTML), стилями (CSS) и кодом (JavaScript). ПСКОВ исполняется строго в веб-браузере без взаимодействия с сервером.

    +

    Подобная организация даёт ПСКОВУ следующие возможности:

    +
      +
    • его можно копировать без ограничений
    • +
    • его можно размещать на любом хостинге
    • +
    • его можно запускать локально
    • +
    • он может работать без Интернета
    • +
    +

    10-летнюю прочность мы гарантировать не можем, т.к. будущим не владеем. Вместе с тем, история развития HTML, CSS, JavaScript говорит о том, что указанные технологии развиваются с максимально возможной обратной совместимостью. Во-первых, новые возможности JavaScript не отменяют старые. Во-вторых, производители веб-браузеров заинтересованы в том, чтобы их веб-браузеры работали с как можно большим числом сайтов. В результате, например, тэг <center>, объявленный устаревшим в 2014-м году, без проблем работает 5 лет спустя в 2019-м.

    +

    В то же время у любого приложения в веб-браузере есть серьёзное ограничение - клетка, обманчиво именуемая песочницей. Эта клетка запрещает доступ как к локальной файловой системе пользователя, так и почти ко всем ресурсам в Интернете без санкции владельца ресурса (CORS). В итоге что-либо отдать приложение может либо определённому серверу, либо пользователю в виде файла для скачивания. Файлы скачивать по одному или архивом неудобно, поэтому в мире нынче преобладает серверный подход, проблем которого мы коснёмся чуть позже.

    +

    Для освобождения ПСКОВА из клетки пришлось создать ЛФСД, крошечный скрипт на Python, который необходимо запускать руками на время работы ПСКОВА. ЛФСД даёт возможность ПСКОВУ работать с локальной файловой системой пользователя. Python выбран ввиду его наличия по умолчанию на Linux и macOS, а также возможности поставить на Windows (даже Windows 2000).

    +

    Послужной список

    +

    ПСКОВ успешно опробован для создания следующих небольших сайтов:

    + +

    Теперь о причинах создания ПСКОВА именно в виде долговечного приложения для веб-браузера.

    +

    Причина №1: накопление и сохранение знаний в доступном виде

    +

    Уже не первый год мы трудимся над созданием удобных средств разработки игр. До недавнего времени накопленные знания представляли из себя родные приложения для настольных ПК, обучающие статьи по смежным технологиям либо видео результатов. Указанные виды накопленных знаний отличает то, что знания эти по сути мертвы:

    +
      +
    • единицы людей скачают себе неизвестное приложение
    • +
    • единицы людей прочтут хотя бы часть статей
    • +
    • единицы людей посмотрят хотя бы часть видео
    • +
    +

    Во многом эта смерть обусловлена недоступностью: нужно приложить неизвестное количество усилий для достижения неизвестного результата. Врядли таким можно кого-либо нынче заманить. Совсем иначе дело обстоит с приложением в браузере, которое потенциально работает везде: необходимо приложить известное усилие - открыть ссылку - для достижения неизвестного результата. История проведения твиттер-революций говорит о том, что открывать ссылки и ставить лайки за смену "кровавого режима" умеют практически все.

    +

    Причина №2: народовластие

    +

    Нынче любой чих в Интернете осуществляется посредством сервисов, которые почти всегда принадлежат какой-то компании: сообщения, карты, поиск, музыка, исходный код и т.д.. Следствием подобной узурпации власти становится закрытие тех сервисов, которые контролирующая компания считает нерентабельным. Причём без какого-либо обсуждения с теми пользователям, без которых этот сервис никогда бы не взлетел.

    +

    В других случаях компания может просто запретить конкурирующему браузеру использовать свой сервис, как это недавно случилось с веб-версией Скайпа. Вместе с тем, существуют люди, не согласные с такой политикой. Благодаря им появляются инструменты отключения блокировок.

    +

    На мой взгляд, подобное положение вещей недопустимо. Однако, вина в этом лежит не только лишь на одичавшем бизнесе, но и простых пользователях, каждом из нас. Вы можете возразить, что у пользователей нет выбора, что кто-то другой (власть, рептилоиды, нужное подчеркнуть) сделал этот мир несправедливым. Кто-то может даже прямо винить власть/рептилоидов и веровать в то, что вот без них-то мы заживём. К сожалению, история человечества говорит обратное: "государство — это не какая-то вражья орда, оккупировавшая общество, а то, что растет из общества и зеркально его отражает".

    +

    Будучи частью народа, мы начали с себя и решили употребить свою власть во благо: создавать необходимые нам приложения так, чтобы они работали для всех везде и всегда. ПСКОВ является первой попыткой, которая более чем превзошла наши ожидания. Конечно, у ПСКОВА есть свои ограничения в виде ЛФСД и работы по HTTP без шифрования; предстоит ещё многое сделать для увеличения доступности ПСКОВА, но уже сейчас мы готовы поспорить с любым: ПСКОВ через 10 лет будет работать без единого изменения. Как говорится, запомните этот твит.

    +

    На этом мы заканчиваем рассказ о нашем первом долговечном приложении для настольных ПК - генераторе статических сайтов ПСКОВ.

    +
    +
    + +
    + + diff --git a/ru/news/once-mahjong-always-mahjong.html b/ru/news/once-mahjong-always-mahjong.html index 6662e2f..2229f5f 100644 --- a/ru/news/once-mahjong-always-mahjong.html +++ b/ru/news/once-mahjong-always-mahjong.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,33 +87,39 @@ -
    -

    В новостях

    -
    -

    - Раз Маджонг – всегда Маджонг -

    -

    - 2016-08-10 00:00 -

    -
    -

    Мы начали проект Opensource Game Studio очень давно. Мы хотели дать сообществу свободного программного обеспечения средства для создания игр. Правда, тогда не было ясно, что они из себя должны представлять. Поэтому решили начать с малого: создать игру.

    +
    +

    В новостях...

    +
    +

    + Раз Маджонг – всегда Маджонг +

    +

    + 2016-08-10 00:00 +

    +
    +

    Мы начали проект Opensource Game Studio очень давно. Мы хотели дать сообществу свободного программного обеспечения средства для создания игр. Правда, тогда не было ясно, что они из себя должны представлять. Поэтому решили начать с малого: создать игру.

    Мы потратили 3 года для достижения этой цели: выпуск OGS Mahjong 1.0 состоялся в 2012 году. Даже для хобби-проекта (мы тратим в среднем около 40 часов в месяц) это очень долго.

    После выпуска игры до нас дошло: Средства для создания игр должны экономить время разработки.

    -

    Мы потратили ещё 4 года на их разработку. Пришло время доказать, что они стоят каждого затраченного дня. Как? Мы воссоздадим режим “пасьянс Маджонг” за считанные часы!

    +

    Мы потратили ещё 4 года на их разработку. Пришло время доказать, что они стоят каждого затраченного дня. Как? Мы воссоздадим режим "пасьянс Маджонг" за считанные часы!

    Присоединяйтесь к нашему следующему прямому эфиру в сентябре.

    - -
    +
    +
    diff --git a/ru/news/openscenegraph-cross-platform-guide.html b/ru/news/openscenegraph-cross-platform-guide.html index 7c08c56..b122949 100644 --- a/ru/news/openscenegraph-cross-platform-guide.html +++ b/ru/news/openscenegraph-cross-platform-guide.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,49 +87,53 @@ -
    -

    В новостях

    -
    -

    - OpenSceneGraph cross-platform guide -

    -

    - 2017-07-17 00:00 -

    -
    -
    -Приложение OpenSceneGraph на десктопе и мобилке
    Приложение OpenSceneGraph на десктопе и мобилке
    -
    +
    +

    В новостях...

    +
    +

    + OpenSceneGraph cross-platform guide +

    +

    + 2017-07-17 00:00 +

    +
    +

    Приложение OpenSceneGraph на десктопе и мобилке

    Эта статья резюмирует создание кросс-платформенного руководства OpenSceneGraph.

    -

    Июнь ознаменовал собой окончание работы над кросс-платформенным руководством OpenSceneGraph. Мы опубликовали последний самоучитель (из изначально запланированных). Этот самоучитель описывает сборку и запуск примера приложения OpenSceneGraph в вебе с помощью Emscripten. Если вы упустили этот самоучитель, то вот ссылка на приложение из него. Откройте ссылку в веб-браузере.

    +

    Июнь ознаменовал собой окончание работы над кросс-платформенным руководством OpenSceneGraph. Мы опубликовали последний самоучитель (из изначально запланированных). Этот самоучитель описывает сборку и запуск примера приложения OpenSceneGraph в вебе с помощью Emscripten. +Если вы упустили этот самоучитель, то вот ссылка на приложение из него. Откройте ссылку в веб-браузере.

    Мы начали составление руководства в феврале, как только нам удалось отобразить простую модель на мобилках и вебе. Мы потратили 120 часов за пять месяцев на составление десяти самоучителей этого руководства.

    Создание кросс-платформенного руководства OpenSceneGraph преследовало две основные цели:

    -
      +
      1. Сохранить знания о кросс-платформенной работе с OpenSceneGraph в легкодоступной и воспроизводимой форме
      2. Поделиться этим знанием с сообществом OpenSceneGraph и тем самым усилить сообщество

      Мы уверены в том, что нам удалось достичь обе цели. И вот почему:

      -
        +
        1. Хранилище руководства получило больше звёзд (лайков), чем любое другое наше хранилище
        2. -
        3. Robert Osfield, лидер проекта OpenSceneGraph, оценил руководство как “отличную работу”; это значит для нас многое -
        4. +
        5. Robert Osfield, лидер проекта OpenSceneGraph, оценил руководство как "отличную работу"; это значит для нас многое
        6. У руководства уже есть два тикета

        В конце концов, мы просто рады тому факту, что изучили кросс-платформенную разработку с OpenSceneGraph и поделились этим знанием с сообществом.

        Тем не менее, наше путешествие на этом не окончено. Используя знания руководства, мы продолжаем работу над тем, чтобы добавить в свои инструменты поддержку мобилок и веба, как мы обещали в январе.

        На этом мы заканчиваем резюме о создании кросс-платформенного руководства OpenSceneGraph.

        - -
    +
    +
    diff --git a/ru/news/openscenegraph-examples.html b/ru/news/openscenegraph-examples.html index 71e6c4f..42de15c 100644 --- a/ru/news/openscenegraph-examples.html +++ b/ru/news/openscenegraph-examples.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +87,28 @@ -
    -

    В новостях

    -
    -

    - Кросс-платформенные примеры OpenSceneGraph -

    -

    - 2018-04-20 00:00 -

    -
    -
    -iOS Simulator отображает куб
    iOS Simulator отображает куб
    -
    +
    +

    В новостях...

    +
    +

    + Кросс-платформенные примеры OpenSceneGraph +

    +

    + 2018-04-20 00:00 +

    +
    +

    iOS Simulator отображает куб

    Эта статья резюмирует создание первых двух кросс-платформенных примеров OpenSceneGraph.

    К тому времени, как мы выпустили первую техническую демонстрацию OGS Mahjong 2, нас уже дожидался запрос на описание работы с изображениями в OpenSceneGraph на Android. Сначала мы рассматривали возможность создания нового самоучителя для кросс-платформенного руководства OpenSceneGraph, но позже мы оценили необходимые трудозатраты и посчитали их излишними для освещения такой небольшой темы (по сравнению с тем, что умеет средняя игра) как загрузка изображений. Мы решили продолжить делиться нашими знаниями в виде конкретных примеров. Так на свет появились кросс-платформенные примеры OpenSceneGraph.

    Каждый пример:

    @@ -126,9 +125,13 @@

    Мы будем и впредь добавлять новые примеры по мере продвижения нашей разработки OGS Mahjong 2.

    На этом мы заканчиваем резюме о создании первых двух кросс-платформенных примеров OpenSceneGraph.

    - -
    +
    +
    diff --git a/ru/news/osg-sample.html b/ru/news/osg-sample.html index 40ff37e..cd4175e 100644 --- a/ru/news/osg-sample.html +++ b/ru/news/osg-sample.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,32 +87,32 @@ -
    -

    В новостях

    -
    -

    - Приложение OpenSceneGraph -

    -

    - 2017-05-12 00:00 -

    -
    -
    -Ракета в дали
    Ракета в дали
    -
    +
    +

    В новостях...

    +
    +

    + Приложение OpenSceneGraph +

    +

    + 2017-05-12 00:00 +

    +
    +

    Ракета в дали

    Эта статья описывает создание самоучителей по сборке приложения OpenSceneGraph на Linux, macOS, Windows и Android в апреле 2017.

    Предыдущие самоучители описывали установку OpenSceneGraph на Linux, macOS, Windows и отображение модели с помощью стандартного инструмента osgviewer. На этот раз результатом нашей работы стало приложение OpenSceneGraph, которое работает на Linux, macOS, Windows и Android.

    Приложение очень простое. Оно умеет следующее:

    -
      +
      1. Создание окна для отрисовки
      2. Загрузка модели
      3. Отрисовка модели с помощью простых шейдеров GLSL
      4. @@ -123,7 +122,7 @@

        Наша первая успешная сборка под Android в прошлом году требовала множество неочивидных телодвижений. В этот раз мы хотели получить более чистый, быстрый и дешёвый подход.

        Нам это удалось. В результате всё, что нужно для работы приложения OpenSceneGraph на Android, уместилось в набор из нескольких файлов и небольших изменений для стандартного проекта Android Studio (с поддержкой C++).

        Краткий перечень файлов:

        -
          +
          1. Поверхность GLES2
          2. Activity для отрисовки на этой поверхности
          3. Интерфейс Java для нативной библиотеки
          4. @@ -133,20 +132,24 @@
          5. Модель для отрисовки

          Краткий перечень изменений проекта:

          -
            +
            1. Обновление Android manifest для использования GLES2 и Activity
            2. Использование файла CMake нативной библиотеки в проектном файле CMake

            Документация OpenSceneGraph предполагает сборку OpenSceneGraph вне Android Studio с помощью CMake. Такой подход имеет следующие ограничения:

            -
              +
              1. Ручная сборка OpenSceneGraph под каждую платформу
              2. Ручное копирование собранных библиотек OpenSceneGraph в проект Android Studio

              Наш подход включает в себя сборку OpenSceneGraph для тех платформ, для которых собирается проект Android Studio. К тому же, OpenSceneGraph используется как часть проекта, поэтому нет никакой дополнительной рутины: достаточно просто пересобрать проект, и всё готово.

              На этом мы заканчиваем описание создания самоучителей по сборке приложения OpenSceneGraph на Linux, macOS, Windows и Android в апреле 2017.

              - -
    +
    +
    diff --git a/ru/news/pagination.next.template b/ru/news/pagination.next.template new file mode 100644 index 0000000..f32f666 --- /dev/null +++ b/ru/news/pagination.next.template @@ -0,0 +1,4 @@ +

    Страница PSKOV_PAGE_ID из PSKOV_PAGES_COUNT

    +

    + Старее » +

    diff --git a/ru/news/pagination.prev.template b/ru/news/pagination.prev.template new file mode 100644 index 0000000..169d5df --- /dev/null +++ b/ru/news/pagination.prev.template @@ -0,0 +1,4 @@ +

    Страница PSKOV_PAGE_ID из PSKOV_PAGES_COUNT

    +

    + « Новее +

    diff --git a/ru/news/pagination.template b/ru/news/pagination.template new file mode 100644 index 0000000..f1e586e --- /dev/null +++ b/ru/news/pagination.template @@ -0,0 +1,5 @@ +

    Страница PSKOV_PAGE_ID из PSKOV_PAGES_COUNT

    +

    + « Новее + Старее » +

    diff --git a/ru/news/preview.template b/ru/news/preview.template new file mode 100644 index 0000000..f3c63f0 --- /dev/null +++ b/ru/news/preview.template @@ -0,0 +1,14 @@ +
    +

    + PSKOV_ITEM_TITLE +

    +

    + PSKOV_ITEM_DATE +

    +
    +PSKOV_PREVIEW +
    + +
    diff --git a/ru/news/rolling-ball-live-session-pt2.html b/ru/news/rolling-ball-live-session-pt2.html index f6778e1..204945d 100644 --- a/ru/news/rolling-ball-live-session-pt2.html +++ b/ru/news/rolling-ball-live-session-pt2.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,30 +87,36 @@ -
    -

    В новостях

    -
    -

    - Создание игры в прямом эфире (часть 2): 7 февраля 2016 -

    -

    - 2016-02-02 00:00 -

    -
    -

    К сожалению, нам не удалось завершить создание простой игры “Катящийся мяч” за 3 часа. Поэтому вторая часть трансляции LiveCoding состоится 7 февраля 2016 в 14:00 MSK.

    +
    +

    В новостях...

    +
    +

    + Создание игры в прямом эфире (часть 2): 7 февраля 2016 +

    +

    + 2016-02-02 00:00 +

    +
    +

    К сожалению, нам не удалось завершить создание простой игры "Катящийся мяч" за 3 часа. Поэтому вторая часть трансляции LiveCoding состоится 7 февраля 2016 в 14:00 MSK.

    Давайте завершим игру!

    - -
    +
    +
    diff --git a/ru/news/rolling-ball.html b/ru/news/rolling-ball.html index beeb75c..5f91bd6 100644 --- a/ru/news/rolling-ball.html +++ b/ru/news/rolling-ball.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,42 +87,47 @@ -
    -

    В новостях

    -
    -

    - Запись прямого эфира "Катящийся мяч" и материалы -

    -

    - 2016-02-10 00:00 -

    -
    -

    Т.к. мы провели 2 прямые трансляции для создания игры “Катящийся мяч”, ниже вы можете увидеть 2 записи этого процесса на YouTube:

    - - -

    Игра “Катящийся мяч” для Linux (на основе Debian), OS X (10.9+), Windows доступна на SourceForge. Просто распакуйте и запустите скрипт ‘run’.

    +
    +

    В новостях...

    +
    +

    + Запись прямого эфира "Катящийся мяч" и материалы +

    +

    + 2016-02-10 00:00 +

    +
    +

    Т.к. мы провели 2 прямые трансляции для создания игры "Катящийся мяч", ниже вы можете увидеть 2 записи этого процесса на YouTube:

    + + +

    Игра "Катящийся мяч" для Linux (на основе Debian), OS X (10.9+), Windows доступна на SourceForge. +Просто распакуйте и запустите скрипт 'run'.

    Редактор 0.8 доступен тоже на SourceForge.

    -

    Проект “Катящийся мяч” для Редактора доступен на GitHub.

    +

    Проект "Катящийся мяч" для Редактора доступен на GitHub.

    Чтобы открыть его в Редакторе:

    • замените slideDown.ogs загруженным rollingBall.ogs
    • переименуйте rollingBall.ogs в slideDown.ogs

    Т.к. прямой эфир занял гораздо больше времени, чем мы планировали, мы решили сконцентрировать свои усилия на улучшении удобства редактора. Его возможности уже довольно обширны, но использовать их крайне неудобно. Наиболее серьезные из этих проблем мы планируем исправить в следующем релизе Редактора.

    - -
    +
    +
    diff --git a/ru/news/scripting-research.html b/ru/news/scripting-research.html index 4e31ee3..539b55b 100644 --- a/ru/news/scripting-research.html +++ b/ru/news/scripting-research.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +87,28 @@ -
    -

    В новостях

    -
    -

    - Изучение скриптования -

    -

    - 2017-08-16 00:00 -

    -
    -
    -Тетрадка с текстом
    Тетрадка с текстом
    -
    +
    +

    В новостях...

    +
    +

    + Изучение скриптования +

    +

    + 2017-08-16 00:00 +

    +
    +

    Тетрадка с текстом

    Эта статья описывает изучение скриптования в июле 2017.

    Наша основная цель использования скриптового языка - это наличие платформо-независимого кода, выполняемого без изменений на каждой поддерживаемой платформе.

    Редактор 0.10 использует Python в качестве подобного кода с помощью SWIG. SWIG позволяет использовать практически любой код C/C++ из языков вроде Python, Ruby, Lua, Java, C# и т.д.. SWIG помог нам впервые оценить прелесть платформо-независимого кода. К сожалению, SWIG работает лишь в одном направлении: из C/C++ в язык назначения. Это приводит к тому, что основное приложение должно быть написано на языке назначения, а код C/C++ может быть использован лишь в виде библиотеки.

    @@ -119,7 +118,8 @@

    Одни модули Редактора 0.10 написаны на C++, а другие на Python. С точки зрения основного приложения, все модули равны. Для приложения нет никакой разницы, на каком языке написан конкретный модуль.

    Для достижения этой гибкости мы ввели так называемое Окружение (Environment). Каждый модуль регистрирует ключи (keys), на которые он отвечает, а Окружение доставляет соответствующие сообщения. Технически такое поведение можно достигнуть с помощью наследования базового класса и переопределения его методов как в C++, так и в скриптовом языке.

    Python был первым языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.

    -

    Т.к. мы уже использовали Python, то логично было начать изучение с него. Мы хотели проверить, можно ли запустить код Python на каждой поддерживаемой платформе. К сожалению, результаты были удручающими, т.к. документация CPython (реализация Python, используемая по умолчанию на десктопе) никак не упоминала ни мобилки, ни веб. Всё, что мы нашли, - это пара форков CPython лохматых годов, которые якобы работают либо на Android, либо на iOS. Такой раздрай нас не устроил. Мы также рассмотрели PyPy, ещё одну реализацию Python, но она тоже не содержала информации о мобилках и вебе.

    +

    Т.к. мы уже использовали Python, то логично было начать изучение с него. Мы хотели проверить, можно ли запустить код Python на каждой поддерживаемой платформе. К сожалению, результаты были удручающими, т.к. документация CPython (реализация Python, используемая по умолчанию на десктопе) никак не упоминала ни мобилки, ни веб. Всё, что мы нашли, - это пара форков CPython лохматых годов, которые якобы работают либо на Android, либо на iOS. Такой раздрай нас не устроил. +Мы также рассмотрели PyPy, ещё одну реализацию Python, но она тоже не содержала информации о мобилках и вебе.

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

    Wren был вторым языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.

    Wren был первым языком из длинного списка малоизвестных скриптовых языков.

    @@ -130,14 +130,19 @@

    Нам пришлось завершить отношения с Chai.

    Lua был четвёртым языком, который мы рассмотрели в качестве платформо-независимого скриптового языка.

    Lua является популярным языком для встраивания. Мы решили попробовать очевидный вариант. Документация выглядела многообещающе, однако под конец чтения главы C API у нас не было ни малейшего представления, как наследовать класс C++ в Lua.

    -

    Этот вопрос заставил нас найти библиотеку, которая смогла бы на него ответить: Sol2. Первая попытка вызвать функцию C++ из Lua провалилась. Правда, на этот раз наш вопрос был услышан, и мы получили ответ! Мы были сильно удивлены. Далее мы попытались наследовать класс C++ в Lua, чтобы переопределить методы класса. Нам это не удалось с первого раза, но автор Sol2 снова помог нам.

    +

    Этот вопрос заставил нас найти библиотеку, которая смогла бы на него ответить: Sol2. Первая попытка вызвать функцию C++ из Lua провалилась. Правда, на этот раз наш вопрос был услышан, и мы получили ответ! Мы были сильно удивлены. +Далее мы попытались наследовать класс C++ в Lua, чтобы переопределить методы класса. Нам это не удалось с первого раза, но автор Sol2 снова помог нам.

    В тот момент мы поняли, что это начало долгого и взаимовыгодного сотрудничества с Sol2/Lua.

    Поиск скриптового языка открыл для нас следующую истину: люди важнее технологий.

    Существует множество скриптовых языков, которые выглядят привлекательно на первый взгляд, но которые мертвы. Почему? Потому что у некоторых авторов нет времени на пользователей. В ответ пользователи предпочитают не тратить своё время на проекты подобных авторов.

    На этом мы заканчиваем описание изучения скриптования в июле 2017.

    - -
    +
    +
    diff --git a/ru/news/september-live-session-announcement-tomorrow.html b/ru/news/september-live-session-announcement-tomorrow.html index a9bbc3d..52f5e0f 100644 --- a/ru/news/september-live-session-announcement-tomorrow.html +++ b/ru/news/september-live-session-announcement-tomorrow.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,31 +87,36 @@ -
    -

    В новостях

    -
    -

    - Прямой эфир через 24 часа -

    -

    - 2016-09-24 00:00 -

    -
    - +
    +

    В новостях...

    +
    +

    + Прямой эфир через 24 часа +

    +

    + 2016-09-24 00:00 +

    +
    +

    Приготовьтесь к прямому эфиру, он начнётся через 24 часа!

    - -
    +
    +
    diff --git a/ru/news/september-live-session-announcement.html b/ru/news/september-live-session-announcement.html index 2129bea..5d67e61 100644 --- a/ru/news/september-live-session-announcement.html +++ b/ru/news/september-live-session-announcement.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,31 +87,37 @@ -
    -

    В новостях

    -
    -

    - Прямой эфир: 25 сентября 2016 -

    -

    - 2016-09-17 00:00 -

    -
    - -

    25 сентября 2016 в 13:00 MSK мы проведём прямой эфир. Самое время создать простой пасьянс Маджонг

    - -
    +
    +

    В новостях...

    +
    +

    + Прямой эфир: 25 сентября 2016 +

    +

    + 2016-09-17 00:00 +

    +
    + +

    25 сентября 2016 в 13:00 MSK мы проведём прямой эфир. +Самое время создать простой пасьянс Маджонг

    +
    +
    diff --git a/ru/news/soon-game-creation-editor-07.html b/ru/news/soon-game-creation-editor-07.html index cc323e7..a84664b 100644 --- a/ru/news/soon-game-creation-editor-07.html +++ b/ru/news/soon-game-creation-editor-07.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,35 +87,41 @@ -
    -

    В новостях

    -
    -

    - СКОРО: Создание простой игры в прямом эфире (Редактор 0.7) -

    -

    - 2015-11-02 00:00 -

    -
    -

    Как и было обещано, мы готовы предоставить вам Редактор 0.7, с помощью которого можно создать тестовый цех. Тем не менее, после воссоздания цеха стало ясно, что:

    -
      +
      +

      В новостях...

      +
      +

      + СКОРО: Создание простой игры в прямом эфире (Редактор 0.7) +

      +

      + 2015-11-02 00:00 +

      +
      +

      Как и было обещано, мы готовы предоставить вам Редактор 0.7, с помощью которого можно создать тестовый цех. Тем не менее, после воссоздания цеха стало ясно, что:

      +
      1. это занимает более 8 часов (слишком долго)
      2. описание в виде статьи не подходит по формату (слишком скучно)
      -

      Поэтому мы решили провести прямую трансляцию на LiveCoding СКОРО, чтобы показать, как создать простую игру типа “поймай крота” с нуля.

      +

      Поэтому мы решили провести прямую трансляцию на LiveCoding СКОРО, чтобы показать, как создать простую игру типа "поймай крота" с нуля.

      Сейчас мы заняты последними приготовлениями, поэтому точные дату и время мы сообщим на этой неделе. Оставайтесь на связи!

      - -
      +
    +
    diff --git a/ru/news/teaching-kids-to-program.html b/ru/news/teaching-kids-to-program.html index 7569dc2..471fc0e 100644 --- a/ru/news/teaching-kids-to-program.html +++ b/ru/news/teaching-kids-to-program.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,28 +87,28 @@ -
    -

    В новостях

    -
    -

    - Обучение детей программированию -

    -

    - 2019-02-04 00:00 -

    -
    -
    -Ученики и учителя
    Ученики и учителя
    -
    +
    +

    В новостях...

    +
    +

    + Обучение детей программированию +

    +

    + 2019-02-04 00:00 +

    +
    +

    Ученики и учителя

    В этой статье Михаил делится своим опытом обучения детей программированию.

    Он расскажет о следующем:

      @@ -127,34 +126,22 @@

      Программа обучения

      Когда я участвовал первый раз, наша группа обучала детей программированию довольно бесцельно: мы придумывали простейшие задания на урок для объяснения операторов. В результате в конце обучения у нас не было ничего конкретного, что можно было бы оценить, чем похвастаться и что проанализировать.

      В этот второй раз я решил, что мы с детьми реализуем так называемую игру на память. Критерием успешности обучения я определил следующее условие: каждый ученик к концу курса самостоятельно создаёт простейшую игру на память с нуля за 1 час.

      -

      Для достижения этого критерия я решил проверить утверждение “Повторение - мать учения”, поэтому каждый урок мы создавали всё с нуля. Подчеркну, что мы ничего не сохраняли в учётной записи учеников. Задача была в сохранении навыка создания игры в голове, не в компьютере.

      +

      Для достижения этого критерия я решил проверить утверждение "Повторение - мать учения", поэтому каждый урок мы создавали всё с нуля. Подчеркну, что мы ничего не сохраняли в учётной записи учеников. Задача была в сохранении навыка создания игры в голове, не в компьютере.

      Игра на память

      Давайте рассмотрим, что представляет собой игра на память.

      1) В простейшем случае у нас есть 16 карт, причём уникальных лишь 8, остальные 8 являются их парами.

      -
      -Карты лицом вверх
      Карты лицом вверх
      -
      +

      Карты лицом вверх

      В представленном изображении у нас есть лишь две карты с котом, собакой и т.д..

      2) В начале игры мы перемешиваем карты и раскладываем их рубашкой вверх.

      -
      -Карты лицом вниз
      Карты лицом вниз
      -
      +

      Карты лицом вниз

      3) Первый из участников игры открывает две карты.

      -
      -Пара карт
      Пара карт
      -
      +

      Пара карт

      4) Если карты различаются, возвращаем их в исходное положение: кладём рубашкой вверх.

      -
      -Карты лицом вниз
      Карты лицом вниз
      -
      +

      Карты лицом вниз

      5) Следующий участник игры открывает другую пару карт.

      -
      -Вторая пара карт
      Вторая пара карт
      -
      +

      Вторая пара карт

      6) Если карты совпадают, убираем их с игрового поля.

      -
      -Пара совпадающих карт убрана
      Пара совпадающих карт убрана
      -
      +

      Пара совпадающих карт убрана

      Цель игры в том, чтобы убрать все карты с поля. Игра в данном виде не включает соревнование, поэтому играть можно одному человеку.

      С одной стороны, игра на память довольно проста, с другой стороны, реализация игры затрагивает основную функциональность, необходимую для создания любой более-менее сложной игры:

        @@ -167,23 +154,17 @@

        Инструмент программирования

        В качестве инструмента мы использовали среду Scratch. Она рассчитана на обучение детей программированию, поэтому каждое действие, каждый оператор в ней представлен графически.

        Например, следующим скриптом можно повернуть кота на 360 градусов за секунду:

        -
        -Скрипт
        Скрипт
        -
        +

        Скрипт

        Вот так выглядит результат:

        -
        -Анимация
        Анимация
        -
        +

        Анимация

        Замечу, что это довольно успешное решение для представления кода графически. Например, платное решение, продвигаемое нынче компанией SAP, предполагает использование так называемых кубиков для программирования:

        -
        -SAP UI
        SAP UI
        -
        +

        SAP UI

        Тут можно лишь ввести в нужные поля нужные значения. Если потребуется что-то нестандартное, то поможет лишь скрипт, который представлен опять же кубиком.

        По личному опыту скажу, что решение Scratch не тормозит от слова совсем, чего не скажешь о решении SAP.

        Первый урок

        Первый урок являлся вводным, поэтому компьютеры мы не использовали.

        План был следующим:

        -
          +
          1. Познакомиться
          2. Сыграть в игру на память
          3. Изучить понятие алгоритма
          4. @@ -194,72 +175,58 @@

            Преподаватели с учениками встают в круг. Это уравнивает всех и делает каждого участником команды.

            Первый участник называет своё имя и рассказывает о том, почему он решил посетить этот курс. Второй и последующие участники сначала повторяют имя и рассказ каждого предыдущего участника, после чего называют своё имя и рассказывают.

            Примерно так это выглядит:

            -
              -
            1. Вася: “Меня зовут Вася, я хочу изучить Scratch, потому что меня заставил папа”
            2. -
            3. Дима: “Это Вася, заниматься Scratch’ем его заставляет папа. Меня зовут Дима, и это мой четвёртый год Scratch’а”
            4. -
            5. Оля: “Это Вася, его заставляют родители. Это Дима, он практически ветеран Scratch’а. Меня зовут Оля, я первый год преподаю, буду учиться вместе со всеми”
            6. +
                +
              1. Вася: "Меня зовут Вася, я хочу изучить Scratch, потому что меня заставил папа"
              2. +
              3. Дима: "Это Вася, заниматься Scratch'ем его заставляет папа. Меня зовут Дима, и это мой четвёртый год Scratch'а"
              4. +
              5. Оля: "Это Вася, его заставляют родители. Это Дима, он практически ветеран Scratch'а. Меня зовут Оля, я первый год преподаю, буду учиться вместе со всеми"

              Данный формат знакомства преследует следующие цели:

                -
              • Знакомство -
                  -
                • Каждый участник команды должен знать по имени остальных участников команды
                • -
              • -
              • Общее пространство -
                  -
                • Все участники в круге, а не за рабочими местами, что уменьшает отвлечение на игры в компьютере
                • -
              • -
              • Равенство -
                  -
                • И преподаватели, и ученики в одном круге, что уравновешивает всех в качестве участников команды без иерархии
                • -
              • -
              • Внимание -
                  -
                • Каждый участник команды должен внимательно слушать остальных участников, чтобы правильно повторить сказанное ими
                • -
              • -
              • Обратная связь -
                  -
                • Каждый участник команды должен максимально чётко излагать свою мысль, иначе остальные просто не смогут её повторить
                • -
              • -
              • Веселье -
                  -
                • Проблемы с запоминанием имён всех веселят
                • -
              • +
              • Знакомство
                  +
                • Каждый участник команды должен знать по имени остальных участников команды
              • +
              • Общее пространство
                  +
                • Все участники в круге, а не за рабочими местами, что уменьшает отвлечение на игры в компьютере
              • +
              • Равенство
                  +
                • И преподаватели, и ученики в одном круге, что уравновешивает всех в качестве участников команды без иерархии
              • +
              • Внимание
                  +
                • Каждый участник команды должен внимательно слушать остальных участников, чтобы правильно повторить сказанное ими
              • +
              • Обратная связь
                  +
                • Каждый участник команды должен максимально чётко излагать свою мысль, иначе остальные просто не смогут её повторить
              • +
              • Веселье
                  +
                • Проблемы с запоминанием имён всех веселят

              2) Игра на память в карты

              -
                +
                1. Берём две колоды карт и выбираем из них по 8 одинаковых
                2. Раскладываем карты в сетку 4 x 4 рубашкой вверх на столе
                3. Ученики встают вокруг стола
                4. -
                5. Каждый ученик по очереди переворачивает пару карт -
                    +
                  • Каждый ученик по очереди переворачивает пару карт
                    • Если карты совпали, то убираем их с поля
                    • -
                    • Если карты различаются, то переворачиваем их рубашкой вверх
                    • -
                  • +
                  • Если карты различаются, то переворачиваем их рубашкой вверх

                Ученикам очень нравится играть в настольные игры. В ходе игры преподаватели проговаривают то, что происходит.

                После пары партий переходим к изучению понятия алгоритма.

                3) Понятие алгоритма

                -
                  +
                  1. Спрашиваем сначала учеников, даём возможность высказаться, узнаём уровень каждого ученика
                  2. При необходимости поправляем высказывания, если они близки к ожидаемому ответу
                  3. -
                  4. Предлагаем написать алгоритм перевода человека из состояния “стоит за дверью кабинета” в состояние “работает за компьютером в кабинете”
                  5. +
                  6. Предлагаем написать алгоритм перевода человека из состояния "стоит за дверью кабинета" в состояние "работает за компьютером в кабинете"

                  Ученикам очень нравится подходить к доске и писать на ней, поэтому по очереди вызываем каждого ученика, чтобы он писал по одному пункту алгоритма. Самого активного ученика используем в качестве исполнителя алгоритма.

                  4) Алгоритм игры

                  Предлагаем написать алгоритм игры, опять вызываем каждого добавлять по одному пункту на доске. После завершения описания алгоритма ещё раз играем с картами, но на этот раз каждый ученик должен проговаривать шаг алгоритма.

                  Выглядит это примерно так:

                  -
                    -
                  1. Вася: “Раскладываем 16 карт рубашкой вверх”
                  2. -
                  3. Дима: “Переворачиваем пару карт”
                  4. -
                  5. Паша: “Если две карты различаются, переворачиваем их рубашкой вверх”
                  6. -
                  7. Филипп: “Переворачиваем пару карт”
                  8. -
                  9. Миша: “Если две карты совпадают, убираем их с поля”
                  10. +
                      +
                    1. Вася: "Раскладываем 16 карт рубашкой вверх"
                    2. +
                    3. Дима: "Переворачиваем пару карт"
                    4. +
                    5. Паша: "Если две карты различаются, переворачиваем их рубашкой вверх"
                    6. +
                    7. Филипп: "Переворачиваем пару карт"
                    8. +
                    9. Миша: "Если две карты совпадают, убираем их с поля"

                    5) Анализ урока

                    На этом первый урок заканчивается, и у преподавателей появляется возможность обсудить как свои впечатления об уроке, так и об учениках, выработать подходы к тихоням и активистам, договориться о дальнейших планах на следующие уроки.

                    У нас были следующие решения:

                    -
                      +
                      1. Рассаживать тихонь и активистов через одного, чтобы соблюсти баланс шума и тишины. Иначе группа активистов создаёт очаг бури, а группа тихонь - очаг пустыни, что замедляет процесс обучения.
                      2. Требовать от учеников точности, т.к. активисты любят кривляться, что плохо влияет на дисциплину.
                      @@ -268,31 +235,28 @@

                      На втором уроке мы создавали требования для элемента игрового поля и пытались создать этот элемент в Scratch. Это вполне удалось.

                      На третьем уроке мы пытались создать 16 элементов и расположить их в сетке 4x4. Тут мы застопорились, т.к. ученики не смогли понять систему координат, чтобы расположить 16 элементов в сетке. Стало очевидно, что планы уроков являются лишь планами, а действительность вносит свои изменения.

                      У нас было два пути решения проблемы с системой координат:

                      -
                        +
                        1. Продолжать обучать системе координат с риском не успеть создать игру до конца курса
                        2. Изменить требования к игре таким образом, чтобы система координат была не нужна

                        Мы решили пойти вторым путём, т.к. мы всё-таки не школа и цель у нас была научить создавать игру, т.е. применять знания на практике, а не в теории. Поэтому сетку элементов 4x4 мы решили заменить кругом из 16 элементов.

                        Данное решение привело меня к следующим выводам:

                        -
                          +
                          1. Для решения задачи часто можно найти более простой путь
                          2. Этот путь легче для понимания, хоть и менее гибкий
                          3. Перейти на сложный путь для увеличения гибкости можно позже, когда это будет действительно необходимо
                          4. Упрощение приближает к конечной цели, усложнение отдаляет от неё

                          Четвёртый и последующие уроки

                          -

                          С четвёртого урока мы отменили стадию написания требований, т.к. она начала занимать бОльшую часть урока: мы снова сделали уклон на практику, а не теорию, чтобы уложиться в сроки. На этот раз все требования были написаны заранее и выданы “сверху”. Но всё равно их никто не читал.

                          +

                          С четвёртого урока мы отменили стадию написания требований, т.к. она начала занимать бОльшую часть урока: мы снова сделали уклон на практику, а не теорию, чтобы уложиться в сроки. На этот раз все требования были написаны заранее и выданы "сверху". Но всё равно их никто не читал.

                          Четвёртый и пятый уроки мы потратили на создание 16 элементов в виде круга, выделение пары элементов и проверку на их совпадение.

                          С шестого урока и до девятого включительно мы каждый раз воссоздавали игру с нуля. С каждым разом это происходило всё быстрее и быстрее, поэтому с восьмого урока мы ввели турнирную таблицу, где записывали этапы создания игры и время каждого ученика.

                          Последний урок

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

                          Такова турнирная таблица последнего урока (имена скрыты):

                          -
                          -Турнирная таблица
                          Турнирная таблица
                          -
                          +

                          Турнирная таблица

                          А ниже можно посмотреть на создание игры на память в Scratch ученика, который создал игру быстрее всех: за 30 минут.

                          - +


                          Результаты и планы

                          Результат обучения превзошёл мои ожидания:

                          @@ -302,9 +266,13 @@

      В этом году я планирую провести обучение не с помощью Scratch, а с использованием инструментария Opensource Game Studio: ученики будут работать с Lua, Git и GitHub Pages.

      На этом мы заканчиваем статью об опыте Михаила по обучению детей программированию.

      - -
    +
    +
    diff --git a/ru/news/test-chamber-for-everyone.html b/ru/news/test-chamber-for-everyone.html index a888348..59ca8c6 100644 --- a/ru/news/test-chamber-for-everyone.html +++ b/ru/news/test-chamber-for-everyone.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,30 +87,36 @@ -
    -

    В новостях

    -
    -

    - Тестовый цех каждому (Редактор 0.7.0) -

    -

    - 2015-07-22 00:00 -

    -
    -

    Как вы знаете, основная цель Редактора 0.7.0 - это возможность создать тестовый цех с помощью него. Редактору не хватает системы Действий и исправления некоторых ошибок для этого. Помимо выпуска Редактора мы опубликуем подробную статью, описывающую создание тестового цеха, чтобы каждый мог создать себе свой тестовый цех!

    +
    +

    В новостях...

    +
    +

    + Тестовый цех каждому (Редактор 0.7.0) +

    +

    + 2015-07-22 00:00 +

    +
    +

    Как вы знаете, основная цель Редактора 0.7.0 - это возможность создать тестовый цех с помощью него. Редактору не хватает системы Действий и исправления некоторых ошибок для этого. Помимо выпуска Редактора мы опубликуем подробную статью, описывающую создание тестового цеха, чтобы каждый мог создать себе свой тестовый цех!

    Мы планируем завершить его в Октябре.

    - -
    +
    +
    diff --git a/ru/news/the-year-of-challenges.html b/ru/news/the-year-of-challenges.html index 26ec228..3c67d5b 100644 --- a/ru/news/the-year-of-challenges.html +++ b/ru/news/the-year-of-challenges.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,42 +87,45 @@ -
    -

    В новостях

    -
    -

    - Год испытаний -

    -

    - 2017-01-25 00:00 -

    -
    -
    -Запуск ракеты на Байконуре
    Запуск ракеты на Байконуре
    -
    +
    +

    В новостях...

    +
    +

    + Год испытаний +

    +

    + 2017-01-25 00:00 +

    +
    +

    Запуск ракеты на Байконуре

    Эта статья содержит наши планы на 2017 год.

    Наши предыдущие планы предполагали, что сейчас у нас уже будет поддержка платформы Android. Тем не менее, у нас впереди ещё очень много работы, прежде чем мы сможем объявить о поддержке Android. Судите сами:

    -
    -Отображение кубов на Android
    Отображение кубов на Android
    -
    +

    Отображение кубов на Android

    Кто-нибудь может посчитать это неудачей. Но не мы. Мы видим шанс начать с низкого старта и прыгнуть высоко!

    -

    Т.к. ранее мы имели опыт работы лишь с либеральным и всё прощающим настольным ПК, Android стал для нас полной неожиданностью. На каждом шагу нас ожидало наказание за фривольное использование памяти, ресурсов, графики. Чаще всего в ответ на наши действия мы получали либо падение приложения, либо пустой экран. С другой стороны, такие суровые условия высветили слабые места в наших технологиях и помогли увидеть, куда нам двигаться дальше.

    +

    Т.к. ранее мы имели опыт работы лишь с либеральным и всё прощающим настольным ПК, Android стал для нас полной неожиданностью. На каждом шагу нас ожидало наказание за фривольное использование памяти, ресурсов, графики. Чаще всего в ответ на наши действия мы получали либо падение приложения, либо пустой экран. +С другой стороны, такие суровые условия высветили слабые места в наших технологиях и помогли увидеть, куда нам двигаться дальше.

    В этом месяце мы начинаем работу над поддержкой платформы iOS, хотя мы лишь слегка коснулись платформы Android. Почему? Потому что намного проще отобразить эти красные кубы на iOS без предварительной полировки Android. Мы не хотим потратить месяцы на полировку Android лишь для того, чтобы позже узнать о том, что какой-либо функционал следовало делать иначе для его работы на всех поддерживаемых платформах.

    Сразу после отображения этих кубов на iOS мы начнём работу над их отображением в Вебе.

    Всё верно: нашей целью в этом году является поддержка платформ Android, iOS и Веб.

    На этом мы заканчиваем описание наших планов на 2017 год.

    - -
    +
    +
    diff --git a/ru/news/the-year-of-lessons.html b/ru/news/the-year-of-lessons.html index b76d3d5..18414e7 100644 --- a/ru/news/the-year-of-lessons.html +++ b/ru/news/the-year-of-lessons.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,37 +87,41 @@ -
    -

    В новостях

    -
    -

    - Год новых уроков -

    -

    - 2017-12-31 22:00 -

    -
    -
    -Бенгальский огонь
    Бенгальский огонь
    -
    +
    +

    В новостях...

    +
    +

    + Год новых уроков +

    +

    + 2017-12-31 22:00 +

    +
    +

    Бенгальский огонь

    Итак, 2017й год стремительно приближается к финалу, итоги года уже подведены, так что в свободное от расчехления фейерверков и подготовки систем залпового огня шампанским время мы обозначим свою цель в следующем году.

    Как, наверное, понятно из других статей на сайте, примерно половине наших планов в 2017 году было суждено осуществиться хотя бы приблизительно так как мы предполагали, остальные поменялись существенно.

    В течение года люди приходили в команду, уходили из нее, в итоге конец года мы встречаем с тем же составом что и 365 дней назад. Это заставило нас задуматься, но о выводах как-нибудь в другой раз.

    Цель на 2018й год у нас будет ровно одна. Мы возьмем все результаты своих технологических поисков, и снова вернемся к маджонгу. Первым будет то, что мы уже умеем делать и делали - пасьянс. На этот раз, он будет кроссплатформенным. Точно постараемся охватить Windows, Linux, macOs, Web и Android. На счет iOS пока ничего обещать не будем (хотя и зарекаться - тоже).

    Наверное нет смысла писать больше чем хочется сказать. Мы многому научились за этот год, и в следующем постараемся все это применить. Так что желаем всем счастливого Нового Года и оставайтесь с нами.

    Команда Opensource Game Studio.

    - -
    +
    +
    diff --git a/ru/news/user-servey-finish-promise.html b/ru/news/user-servey-finish-promise.html index bae939e..6828cd9 100644 --- a/ru/news/user-servey-finish-promise.html +++ b/ru/news/user-servey-finish-promise.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,33 +87,39 @@ -
    -

    В новостях

    -
    -

    - Окончание опроса -

    -

    - 2014-12-31 11:00 -

    -
    -

    Около года назад мы начинали опрос, с помощью которого планировали узнать ваше отношение к Open Source вообще и нашему проекту в частности. Сегодня мы его завершаем. Ответы набирались довольно медленно, но в целом мы собрали довольно приличное ответов, за что вам очень благодарны.

    +
    +

    В новостях...

    +
    +

    + Окончание опроса +

    +

    + 2014-12-31 11:00 +

    +
    +

    Около года назад мы начинали опрос, с помощью которого планировали узнать ваше отношение к Open Source вообще и нашему проекту в частности. Сегодня мы его завершаем. Ответы набирались довольно медленно, но в целом мы собрали довольно приличное ответов, за что вам очень благодарны.

    Сделанными выводами мы обязательно поделимся в одной из ближайших статей.

    После завершения опроса для каждого из его участников был сгенерирован код. С помощью этого кода вы сможете получить доступ к альфа-тестированию OGS Mahjong 2, как только оно начнется (не могу обещать конкретных дат, но мы планируем запустить его в 2015 году), а также, на выбор, deluxe-версию OGS Mahjong 2 либо deluxe-версию Shuan, когда разработка этих игр будет закончена.

    От всей души желаем всем счастливого Нового Года. Спасибо что вы с нами. И до встречи в следующем году.

    P.S. Если вы участвовали в опросе и потеряли свой код - напишите нам, и мы что-нибудь придумаем.

    - -
    +
    +
    diff --git a/ru/news/yesterdays-live-session-short-overview.html b/ru/news/yesterdays-live-session-short-overview.html index 2683017..1bf97fe 100644 --- a/ru/news/yesterdays-live-session-short-overview.html +++ b/ru/news/yesterdays-live-session-short-overview.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,27 @@ font-size: 1em; color: #7f0a0c; } + /* figure { margin: 0px; padding: 0px; } + */ img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,33 +87,38 @@ -
    -

    В новостях

    -
    -

    - Пара слов о вчерашнем прямом эфире -

    -

    - 2016-09-26 00:00 -

    -
    - +
    +

    В новостях...

    +
    +

    + Пара слов о вчерашнем прямом эфире +

    +

    + 2016-09-26 00:00 +

    +
    +

    Создание пасьянса Маджонг прошло успешно, и заняло менее 4 часов.

    Мы опубликуем материалы прямого эфира чуть позже на этой неделе.

    Спасибо за участие.

    - -
    +
    +
    diff --git a/ru/page/about.html b/ru/page/about.html index a09fe90..fa0c319 100644 --- a/ru/page/about.html +++ b/ru/page/about.html @@ -9,13 +9,18 @@ padding: 0.7em; text-align: left; } - #header a { color: white; text-decoration: none; padding: 0.5em 1em 0.5em 1em; } + + #lang + { + float: right; + } + .news_item { background: #FFFFFF; @@ -36,6 +41,11 @@ margin-bottom: 2em; color: #aaa; } + + html + { + font-family: sans-serif; + } body { background: #FAFAFA; @@ -46,38 +56,20 @@ font-size: 1em; color: #7f0a0c; } - figure - { - margin: 0px; - padding: 0px; - } img { width: 720px; } - html - { - font-family: sans-serif; - } a { color: #3A91CB; text-decoration: none; } - #lang - { - float: right; - } - figcaption - { - color: #aaa; - } - + table { border-collapse: collapse; } - table, th, td { border: 1px solid #aaa; @@ -88,27 +80,30 @@ -
    -

    О нас

    -
    -
    -

    Цели

    -

    Opensource Game Studio преследует следующие цели:

    +
    +

    О нас

    +
    +
    +

    Цели

    +

    Open Game Studio преследует следующие цели:

    • создание свободных средств разработки игр
    • создание игр с использованием этих средств
    • создание самоучителей по разработке игр
    -

    На текущий момент мы выпустили OGS Mahjong 1. Эта игра семейства “пасьянс маджонг” является первым шагом на долгом пути к полноценной РПГ.

    +

    На текущий момент мы выпустили OGS Mahjong 1. Эта игра семейства "пасьянс маджонг" +является первым шагом на долгом пути к полноценной РПГ.

    Команда

    • Михаил “kornerr” Капелько – программист, сооснователь
    • @@ -123,10 +118,15 @@
    • Тьерри Делоне, Мигель де Диос, Дирк Первольц, Юрген Раушер – переводчики

    Поддержите нас

    -

    Если вам нравится то, что мы делаем, присоединяйтесь к нашим группам в Twitter, Facebook или VK. Однажды нам потребуется ваша помощь.

    - -
    +

    Если вам нравится то, что мы делаем, присоединяйтесь к нашим группам в +VK, Twitter или Facebook.

    +
    +
    diff --git a/ru/page/about.md b/ru/page/about.md new file mode 100644 index 0000000..f7565bb --- /dev/null +++ b/ru/page/about.md @@ -0,0 +1,38 @@ +Title: О нас +Date: 2019-07-31 00:00 +Category: Page +Slug: about +Lang: ru + +**Цели** + +Open Game Studio преследует следующие цели: + +* создание свободных средств разработки игр +* создание игр с использованием этих средств +* создание самоучителей по разработке игр + +На текущий момент мы выпустили OGS Mahjong 1. Эта игра семейства "пасьянс маджонг" +является первым шагом на долгом пути к полноценной РПГ. + +**Команда** + +* Михаил “kornerr” Капелько – программист, сооснователь +* Иван “Kai SD” Корыстин – гейм-дизайнер, QA, PM, сооснователь + +**Участники** + +* Максим Зарецкий – сценарист +* Татьяна Артемьева – QA +* devALEX – программист +* Тимур “Sora” Маликин, Антон “Kif” Чернов – 3D моделлеры +* Тьерри Делоне, Мигель де Диос, Дирк Первольц, Юрген Раушер – переводчики + +**Поддержите нас** + +Если вам нравится то, что мы делаем, присоединяйтесь к нашим группам в +[VK][vk], [Twitter][tw] или [Facebook][fb]. + +[vk]: https://vk.com/opengamestudo +[tw]: https://twitter.com/OpenGameStudio +[fb]: https://www.facebook.com/groups/162611230470183 diff --git a/ru/page/item.template b/ru/page/item.template new file mode 100644 index 0000000..2432946 --- /dev/null +++ b/ru/page/item.template @@ -0,0 +1,108 @@ + + + + + + + + +
    +

    PSKOV_ITEM_TITLE

    +
    +
    +PSKOV_ITEM_CONTENTS +
    +
    + +
    + + diff --git a/ru/page/ogs-mahjong-1.html b/ru/page/ogs-mahjong-1.html index c082f2c..e53ffd4 100644 --- a/ru/page/ogs-mahjong-1.html +++ b/ru/page/ogs-mahjong-1.html @@ -1,145 +1,4 @@ - - - - - -
    - -

    OGS Mahjong 1

    -
    -
    -

    Игра в жанрах “Пасьянс Маджонг” и “Шисен-Сё” с симпатичной 3D графикой и спокойным саундтреком.

    - -


    -

    Особенности

    -
      -
    • 3 режима игры: Пасьянс Маджонг, Шисен-сё и Шисен-сё с гравитацией.
    • -
    • Более 150 раскладок. Совместимость с форматом раскладок KMahjongg.
    • -
    • Редактор раскладок с возможностью быстро проверить раскладку в игре.
    • -
    • Поддержка тем для фишек.
    • -
    • 4 темы: “Классика”, “Нео-классика”, “Цветы”, “Дистрибутивы”.
    • -
    • Поддержка фонов.
    • -
    • 3 фона: “Комната”, “Комната упрощенная” и “Внутри Компьютера”.
    • -
    • Поддержка сохранения и загрузки.
    • -
    • Подсказки и перемешивание.
    • -
    • Неограниченная возможность отмены хода.
    • -
    • Анимации камеры и динамическая камера, следящая за курсором.
    • -
    • “Подсветка” слоев для облегчения восприятия раскладки.
    • -
    • 6 языков: русский, английский, немецкий, французский, испанский и хинди.
    • -
    • Онлайн рейтинг.
    • -
    • Определение оптимальных настроек графики при первом запуске игры.
    • -
    -

    Базовая версия

    - -

    Версия Deluxe

    -

    Если вам нравится то, что мы делаем, вы можете поддержать нас, купив версию Deluxe.

    -

    В OGS Mahjong Deluxe вы найдете две дополнительных темы фишек: “Восток” и “Спорт”.

    - - -
    -
    -
    - + diff --git a/ru/tool/100-zipbase64.md b/ru/tool/100-zipbase64.md new file mode 100644 index 0000000..032c928 --- /dev/null +++ b/ru/tool/100-zipbase64.md @@ -0,0 +1,8 @@ +Title: ZipBase64 +Category: Tool +Slug: zipbase64 +Lang: ru + +[ZipBase64][zb64] конвертирует строки в Base64 или Zip + Base64. Исполняется в веб-браузере. + +[zb64]: http://opengamestudio.org/zipbase64/ru diff --git a/ru/tool/500-lfsa.md b/ru/tool/500-lfsa.md new file mode 100644 index 0000000..06bd12b --- /dev/null +++ b/ru/tool/500-lfsa.md @@ -0,0 +1,8 @@ +Title: ЛФСД +Category: Tool +Slug: lfsa +Lang: ru + +[ЛФСД][lfsa] (к **Л**окальной **Ф**айловой **С**истеме **Д**оступ) предоставляет клиентским приложениям JS доступ к локальной файловой системе. + +[lfsa]: http://opengamestudio.org/lfsa/ru diff --git a/ru/tool/900-pskov.md b/ru/tool/900-pskov.md new file mode 100644 index 0000000..8e67808 --- /dev/null +++ b/ru/tool/900-pskov.md @@ -0,0 +1,8 @@ +Title: ПСКОВ +Category: Tool +Slug: pskov +Lang: ru + +[ПСКОВ][pskov] является генератором статических сайтов, работающим прямо в веб-браузере. + +[pskov]: http://opengamestudio.org/pskov/ru diff --git a/ru/tool/index.html b/ru/tool/index.html new file mode 100644 index 0000000..635bb3b --- /dev/null +++ b/ru/tool/index.html @@ -0,0 +1,142 @@ + + + + + + + + +
    +

    Инструменты

    + +
    +

    + ПСКОВ +

    +
    +

    ПСКОВ является генератором статических сайтов, работающим прямо в веб-браузере.

    +

    . . .

    +
    + +
    +
    +

    + ЛФСД +

    +
    +

    ЛФСДЛокальной Файловой Системе Доступ) предоставляет клиентским приложениям JS доступ к локальной файловой системе.

    +

    . . .

    +
    + +
    +
    +

    + ZipBase64 +

    +
    +

    ZipBase64 конвертирует строки в Base64 или Zip + Base64. Исполняется в веб-браузере.

    +

    . . .

    +
    + +
    + + + +
    + + diff --git a/ru/tool/index.template b/ru/tool/index.template new file mode 100644 index 0000000..36ddd85 --- /dev/null +++ b/ru/tool/index.template @@ -0,0 +1,106 @@ + + + + + + + + +
    +

    Инструменты

    + +PSKOV_PREVIEWS + + +
    + + diff --git a/ru/tool/item.template b/ru/tool/item.template new file mode 100644 index 0000000..618c53f --- /dev/null +++ b/ru/tool/item.template @@ -0,0 +1,118 @@ + + + + + + + + +
    +

    В инструментах...

    +
    +

    + PSKOV_ITEM_TITLE +

    +
    +PSKOV_ITEM_CONTENTS +
    +
    + +
    + + diff --git a/ru/tool/lfsa.html b/ru/tool/lfsa.html new file mode 100644 index 0000000..8c68186 --- /dev/null +++ b/ru/tool/lfsa.html @@ -0,0 +1,118 @@ + + + + + + + + +
    +

    В инструментах...

    +
    +

    + ЛФСД +

    +
    +

    ЛФСДЛокальной Файловой Системе Доступ) предоставляет клиентским приложениям JS доступ к локальной файловой системе.

    +
    +
    + +
    + + diff --git a/ru/tool/pagination.next.template b/ru/tool/pagination.next.template new file mode 100644 index 0000000..f32f666 --- /dev/null +++ b/ru/tool/pagination.next.template @@ -0,0 +1,4 @@ +

    Страница PSKOV_PAGE_ID из PSKOV_PAGES_COUNT

    +

    + Старее » +

    diff --git a/ru/tool/pagination.prev.template b/ru/tool/pagination.prev.template new file mode 100644 index 0000000..169d5df --- /dev/null +++ b/ru/tool/pagination.prev.template @@ -0,0 +1,4 @@ +

    Страница PSKOV_PAGE_ID из PSKOV_PAGES_COUNT

    +

    + « Новее +

    diff --git a/ru/tool/pagination.template b/ru/tool/pagination.template new file mode 100644 index 0000000..f1e586e --- /dev/null +++ b/ru/tool/pagination.template @@ -0,0 +1,5 @@ +

    Страница PSKOV_PAGE_ID из PSKOV_PAGES_COUNT

    +

    + « Новее + Старее » +

    diff --git a/ru/tool/preview.template b/ru/tool/preview.template new file mode 100644 index 0000000..9d72895 --- /dev/null +++ b/ru/tool/preview.template @@ -0,0 +1,11 @@ +
    +

    + PSKOV_ITEM_TITLE +

    +
    +PSKOV_PREVIEW +
    + +
    diff --git a/ru/tool/pskov.html b/ru/tool/pskov.html new file mode 100644 index 0000000..c6e9c32 --- /dev/null +++ b/ru/tool/pskov.html @@ -0,0 +1,118 @@ + + + + + + + + +
    +

    В инструментах...

    +
    +

    + ПСКОВ +

    +
    +

    ПСКОВ является генератором статических сайтов, работающим прямо в веб-браузере.

    +
    +
    + +
    + + diff --git a/ru/tool/zipbase64.html b/ru/tool/zipbase64.html new file mode 100644 index 0000000..446d24d --- /dev/null +++ b/ru/tool/zipbase64.html @@ -0,0 +1,118 @@ + + + + + + + + +
    +

    В инструментах...

    +
    +

    + ZipBase64 +

    +
    +

    ZipBase64 конвертирует строки в Base64 или Zip + Base64. Исполняется в веб-браузере.

    +
    +
    + +
    + +