Browse Source

2025-02 ПСКОВ 2 готов на 50% | PSKOV 2 is 50% ready

master
parent
commit
3869d5b841
23 changed files with 743 additions and 263 deletions
  1. +82
    -0
      en/news/2025-02_psk-jvm-item.md
  2. +21
    -24
      en/news/index.html
  3. +24
    -16
      en/news/index2.html
  4. +16
    -26
      en/news/index3.html
  5. +26
    -15
      en/news/index4.html
  6. +15
    -18
      en/news/index5.html
  7. +18
    -17
      en/news/index6.html
  8. +17
    -16
      en/news/index7.html
  9. +16
    -0
      en/news/index8.html
  10. +110
    -0
      en/news/psk-jvm-item.html
  11. BIN
      images/2025_psk-jvm-item.png
  12. BIN
      images/2025_psk-jvm-item_result.png
  13. +82
    -0
      ru/news/2025-02_psk-jvm-item.md
  14. +21
    -25
      ru/news/index.html
  15. +25
    -16
      ru/news/index2.html
  16. +16
    -23
      ru/news/index3.html
  17. +23
    -15
      ru/news/index4.html
  18. +15
    -18
      ru/news/index5.html
  19. +18
    -17
      ru/news/index6.html
  20. +17
    -17
      ru/news/index7.html
  21. +17
    -0
      ru/news/index8.html
  22. +55
    -0
      ru/news/index9.html
  23. +109
    -0
      ru/news/psk-jvm-item.html

+ 82
- 0
en/news/2025-02_psk-jvm-item.md View File

@@ -0,0 +1,82 @@
Title: PSKOV 2 for JVM
Date: 2025-02-11 00:00
Category: News
Slug: psk-jvm-item
Lang: en

![splash][splash]

# Seperate pages' generation

In January I implemented half of the functionality of original
PSKOV: generation of separate HTML pages from Markdown.

Both PSKOV 1 and PSKOV 2 produce HTML files that look the same in web browsers.
However, the contents of the generated HTML files differ because PSKOV 1 uses
[Showdown][showdown] to convert Markdown to HTML, whereas PSKOV 2 uses
[intellij-markdown][intellij-markdown].

Let's see how the generated HTML files compare. Suppose we have the following
page in Markdown:

```
Simple page in **Markdown** to convert to **HTML**.

| № | Parser | Language |
|---|--- |--- |
| 1 | [Showdown][showdown] | JavaScript |
| 2 | [intellij-markdown][intellij-markdown] | Kotlin |

[intellij-markdown]: https://github.com/JetBrains/markdown
[showdown]: https://github.com/showdownjs/showdown
```

PSKOV 1 converts the aforementioned Markdown to the following HTML:

```
<p>Simple page in <strong>Markdown</strong> to convert to <strong>HTML</strong>.</p>
<table>
<thead>
<tr>
<th>№</th>
<th>Parser</th>
<th>Language</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td><a href="https://github.com/showdownjs/showdown">Showdown</a></td>
<td>JavaScript</td>
</tr>
<tr>
<td>2</td>
<td><a href="https://github.com/JetBrains/markdown">intellij-markdown</a></td>
<td>Kotlin</td>
</tr>
</tbody>
</table>
```

PSKOV 2:

```
<body><p>Simple page in <strong>Markdown</strong> to convert to <strong>HTML</strong>.</p><table><thead><tr><th>№</th><th>Parser</th><th>Language</th></tr></thead><tbody><tr><td>1</td><td><a href="https://github.com/showdownjs/showdown">Showdown</a></td><td>JavaScript</td></tr><tr class="intellij-row-even"><td>2</td><td><a href="https://github.com/JetBrains/markdown">intellij-markdown</a></td><td>Kotlin</td></tr></tbody></table></body>
```

Here's how both HTML files are rendered in web browsers:

![result][result]

Identical rendering of different files. My internal
perfectionist is outraged by such a disrepancy. And my internal
pragmatist thinks this hardly deserves such an attention.

# February

In February I'm going to update the cross-language dialect's translator to produce Context.

[intellij-markdown]: https://github.com/JetBrains/markdown
[result]: ../../images/2025_psk-jvm-item_result.png
[showdown]: https://github.com/showdownjs/showdown
[splash]: ../../images/2025_psk-jvm-item.png

+ 21
- 24
en/news/index.html View File

@@ -25,6 +25,27 @@
<h1>News</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="psk-jvm-item.html">PSKOV 2 for JVM</a>
</h2>
<p class="news_item_date">
2025-02-11 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2025_psk-jvm-item.png" alt="splash" /></p>
<h1 id="seperatepagesgeneration">Seperate pages' generation</h1>
<p>In January I implemented half of the functionality of original
PSKOV: generation of separate HTML pages from Markdown.</p>
<p>Both PSKOV 1 and PSKOV 2 produce HTML files that look the same in web browsers.
However, the contents of the generated HTML files differ because PSKOV 1 uses
<a href="https://github.com/showdownjs/showdown">Showdown</a> to convert Markdown to HTML, whereas PSKOV 2 uses
<a href="https://github.com/JetBrains/markdown">intellij-markdown</a>.</p>
<p>Let's see how the generated HTML files compare. Suppose we have the following. . .</p>
</div>
<div class="news_item_more">
<a href="psk-jvm-item.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="year24.html">Results of the year 2024</a>
</h2>
@@ -217,30 +238,6 @@ The instrument under development is limited to C++11 in order to support OpenWrt
<div class="news_item_more">
<a href="memory-text-ui.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="memory-logic.html">"Memory" game logic</a>
</h2>
<p class="news_item_date">
2024-05-03 00:00
</p>
<div class="news_item_contents">
<h1 id="memorygamelogic">"Memory" game logic</h1>
<p>In April I implemented "Memory" game logic in Python as limited language model and successfully converted the code to C++ by the instrument under development.</p>
<p>Limited language model assumes the following architecture of two parts:</p>
<ol>
<li>state context</li>
<li>pure functions without side effects working only with the context</li>
</ol>
<p>Game logic state context in Python currently looks like this (<a href="https://git.opengamestudio.org/kornerr/research-portable-memory/src/commit/6fcd542daa6242c8c23dddb88d04cda74a730328/v3/memory_Context.h">C++</a>):</p>
<p>```python
class memory_Context:
def <strong>init</strong>(self):
self.hiddenItems = []. . .</p>
</div>
<div class="news_item_more">
<a href="memory-logic.html">Continue reading</a>
</div>
</div>
<p class="pagination_title">Page 1 of 8</p>
<p>


+ 24
- 16
en/news/index2.html View File

@@ -25,6 +25,30 @@
<h1>News</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="memory-logic.html">"Memory" game logic</a>
</h2>
<p class="news_item_date">
2024-05-03 00:00
</p>
<div class="news_item_contents">
<h1 id="memorygamelogic">"Memory" game logic</h1>
<p>In April I implemented "Memory" game logic in Python as limited language model and successfully converted the code to C++ by the instrument under development.</p>
<p>Limited language model assumes the following architecture of two parts:</p>
<ol>
<li>state context</li>
<li>pure functions without side effects working only with the context</li>
</ol>
<p>Game logic state context in Python currently looks like this (<a href="https://git.opengamestudio.org/kornerr/research-portable-memory/src/commit/6fcd542daa6242c8c23dddb88d04cda74a730328/v3/memory_Context.h">C++</a>):</p>
<p>```python
class memory_Context:
def <strong>init</strong>(self):
self.hiddenItems = []. . .</p>
</div>
<div class="news_item_more">
<a href="memory-logic.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="llm-first-py-cxx.html">The first example of a portable code</a>
</h2>
@@ -190,22 +214,6 @@ It seems that right now we have less completed features than before the release
<div class="news_item_more">
<a href="the-pros-and-cons-of-restarting-from-scratch.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="on-the-way-to-durable-applications.html">On the way to durable applications</a>
</h2>
<p class="news_item_date">
2019-08-05 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2019-08-05_on-the-way-to-durable-applications.jpg" alt="Pskov's veche" /></p>
<p>This article describes our first durable application for desktop PCs: PSKOV static site generator.</p>
<p><strong>Durability</strong></p>
<p>A durable application is an application that functions without a single change on operating systems released in years 2010-2030. In other words, a durable application has backward compatibility of 10 years and has the stability to run for 10 years. Actually, <a href="http://opengamestudio.org/pskov">PSKOV</a> runs even under Windows 2000, so PSKOV has backward compatibility of 19 years.. . .</p>
</div>
<div class="news_item_more">
<a href="on-the-way-to-durable-applications.html">Continue reading</a>
</div>
</div>
<p class="pagination_title">Page 2 of 8</p>
<p>


+ 16
- 26
en/news/index3.html View File

@@ -25,6 +25,22 @@
<h1>News</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="on-the-way-to-durable-applications.html">On the way to durable applications</a>
</h2>
<p class="news_item_date">
2019-08-05 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2019-08-05_on-the-way-to-durable-applications.jpg" alt="Pskov's veche" /></p>
<p>This article describes our first durable application for desktop PCs: PSKOV static site generator.</p>
<p><strong>Durability</strong></p>
<p>A durable application is an application that functions without a single change on operating systems released in years 2010-2030. In other words, a durable application has backward compatibility of 10 years and has the stability to run for 10 years. Actually, <a href="http://opengamestudio.org/pskov">PSKOV</a> runs even under Windows 2000, so PSKOV has backward compatibility of 19 years.. . .</p>
</div>
<div class="news_item_more">
<a href="on-the-way-to-durable-applications.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="defending-availability.html">Defending availability</a>
</h2>
@@ -171,32 +187,6 @@
<div class="news_item_more">
<a href="openscenegraph-examples.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="mahjong-techdemo1-gameplay.html">First techdemo of OGS Mahjong 2: Gameplay</a>
</h2>
<p class="news_item_date">
2018-02-16 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2018-02-16-mahjong-techdemo1-gameplay.png" alt="End of a Mahjong party" /></p>
<p>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.</p>
<p>Get techdemo for your platform:</p>
<ul>
<li>Run <a href="https://ogstudio.github.io/game-mahjong/versions/013/mjin-player.html">Web version</a> in your browser</li>
<li>Get <a href="https://drive.google.com/open?id=1KW8IEN8Dpz8ODeg8BctVSJyzj9-AL9hR">Android version</a></li>
<li>Get <a href="https://drive.google.com/open?id=1oj0-OXSmEatttzn86u2vgP9SRAIC0ozB">Windows version</a></li>
<li>Get <a href="https://drive.google.com/open?id=1EX7kLIThLiMz9_W7VmBPySms3mlrF-i6">Linux version</a></li>
<li>Get <a href="https://drive.google.com/open?id=1KWnvbHzan8MpMcZPG2QC-7KWoEYbqrM2">macOS version</a></li>
</ul>
<p>Notes:</p>
<ul>
<li>iOS version is not released because it cannot be easily shared outside AppStore.. . .</li>
</ul>
</div>
<div class="news_item_more">
<a href="mahjong-techdemo1-gameplay.html">Continue reading</a>
</div>
</div>
<p class="pagination_title">Page 3 of 8</p>
<p>


+ 26
- 15
en/news/index4.html View File

@@ -25,6 +25,32 @@
<h1>News</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="mahjong-techdemo1-gameplay.html">First techdemo of OGS Mahjong 2: Gameplay</a>
</h2>
<p class="news_item_date">
2018-02-16 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2018-02-16-mahjong-techdemo1-gameplay.png" alt="End of a Mahjong party" /></p>
<p>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.</p>
<p>Get techdemo for your platform:</p>
<ul>
<li>Run <a href="https://ogstudio.github.io/game-mahjong/versions/013/mjin-player.html">Web version</a> in your browser</li>
<li>Get <a href="https://drive.google.com/open?id=1KW8IEN8Dpz8ODeg8BctVSJyzj9-AL9hR">Android version</a></li>
<li>Get <a href="https://drive.google.com/open?id=1oj0-OXSmEatttzn86u2vgP9SRAIC0ozB">Windows version</a></li>
<li>Get <a href="https://drive.google.com/open?id=1EX7kLIThLiMz9_W7VmBPySms3mlrF-i6">Linux version</a></li>
<li>Get <a href="https://drive.google.com/open?id=1KWnvbHzan8MpMcZPG2QC-7KWoEYbqrM2">macOS version</a></li>
</ul>
<p>Notes:</p>
<ul>
<li>iOS version is not released because it cannot be easily shared outside AppStore.. . .</li>
</ul>
</div>
<div class="news_item_more">
<a href="mahjong-techdemo1-gameplay.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="mahjong-recreation-start.html">Mahjong recreation start</a>
</h2>
@@ -163,21 +189,6 @@
<div class="news_item_more">
<a href="ios-tutorial.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="osg-sample.html">OpenSceneGraph sample</a>
</h2>
<p class="news_item_date">
2017-05-12 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2017-05_osg-sample.png" alt="Rocket in the distance" /></p>
<p>This article describes creation of the tutorials for building sample OpenSceneGraph application under Linux, macOS, Windows, and Android in April 2017.</p>
<p>Previous tutorials described how to install OpenSceneGraph under Linux, macOS, Windows and render a model using the standard <strong>osgviewer</strong> tool. This time we worked on a <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide-application">sample OpenSceneGraph application</a> that would run under Linux, macOS, Windows, and Android.. . .</p>
</div>
<div class="news_item_more">
<a href="osg-sample.html">Continue reading</a>
</div>
</div>
<p class="pagination_title">Page 4 of 8</p>
<p>


+ 15
- 18
en/news/index5.html View File

@@ -25,6 +25,21 @@
<h1>News</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="osg-sample.html">OpenSceneGraph sample</a>
</h2>
<p class="news_item_date">
2017-05-12 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2017-05_osg-sample.png" alt="Rocket in the distance" /></p>
<p>This article describes creation of the tutorials for building sample OpenSceneGraph application under Linux, macOS, Windows, and Android in April 2017.</p>
<p>Previous tutorials described how to install OpenSceneGraph under Linux, macOS, Windows and render a model using the standard <strong>osgviewer</strong> tool. This time we worked on a <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide-application">sample OpenSceneGraph application</a> that would run under Linux, macOS, Windows, and Android.. . .</p>
</div>
<div class="news_item_more">
<a href="osg-sample.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="its-all-fine.html">It's all fine</a>
</h2>
@@ -170,24 +185,6 @@
<div class="news_item_more">
<a href="2016-september-recap.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="ogs-editor-0.10.html">OGS Editor 0.10 and live session materials</a>
</h2>
<p class="news_item_date">
2016-10-03 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2016-10-03_ogs-editor-0.10.png" alt="OGS Editor with Mahjong game" /></p>
<p>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.</p>
<ul>
<li><strong>OGS Editor 0.10</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/51_2016-10-01_06-39-48_0.10.0/">is available at SourceForge</a>. Simply unpack the archive and launch the run script.</li>
<li><strong>Mahjong Solitaire game</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Games/MahjongSolitaire/">is available at SourceForge</a>, too. Simply unpack the archive and launch the run script.. . .</li>
</ul>
</div>
<div class="news_item_more">
<a href="ogs-editor-0.10.html">Continue reading</a>
</div>
</div>
<p class="pagination_title">Page 5 of 8</p>
<p>


+ 18
- 17
en/news/index6.html View File

@@ -25,6 +25,24 @@
<h1>News</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="ogs-editor-0.10.html">OGS Editor 0.10 and live session materials</a>
</h2>
<p class="news_item_date">
2016-10-03 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2016-10-03_ogs-editor-0.10.png" alt="OGS Editor with Mahjong game" /></p>
<p>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.</p>
<ul>
<li><strong>OGS Editor 0.10</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/51_2016-10-01_06-39-48_0.10.0/">is available at SourceForge</a>. Simply unpack the archive and launch the run script.</li>
<li><strong>Mahjong Solitaire game</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Games/MahjongSolitaire/">is available at SourceForge</a>, too. Simply unpack the archive and launch the run script.. . .</li>
</ul>
</div>
<div class="news_item_more">
<a href="ogs-editor-0.10.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="yesterdays-live-session-short-overview.html">A few words about live session yesterday</a>
</h2>
@@ -154,23 +172,6 @@ It's time to create simple Mahjong solitaire game.
<div class="news_item_more">
<a href="may-live-session-announcement.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="may-live-session-decision.html">May live session (Editor 0.9)</a>
</h2>
<p class="news_item_date">
2016-04-24 00:00
</p>
<div class="news_item_contents">
<p>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.</p>
<p>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.</p>
<p>Here's a short preview of the coming game:</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/V3EvCVPc6kg" frameborder="0" allowfullscreen></iframe>
<p>. . .</p>
</div>
<div class="news_item_more">
<a href="may-live-session-decision.html">Continue reading</a>
</div>
</div>
<p class="pagination_title">Page 6 of 8</p>
<p>


+ 17
- 16
en/news/index7.html View File

@@ -25,6 +25,23 @@
<h1>News</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="may-live-session-decision.html">May live session (Editor 0.9)</a>
</h2>
<p class="news_item_date">
2016-04-24 00:00
</p>
<div class="news_item_contents">
<p>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.</p>
<p>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.</p>
<p>Here's a short preview of the coming game:</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/V3EvCVPc6kg" frameborder="0" allowfullscreen></iframe>
<p>. . .</p>
</div>
<div class="news_item_more">
<a href="may-live-session-decision.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="rolling-ball.html">"Rolling ball" live session videos and downloads</a>
</h2>
@@ -152,22 +169,6 @@
<div class="news_item_more">
<a href="soon-game-creation-editor-07.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="bye-desura-hello-humblebundle.html">Desura no more, hello Humble Bundle Widget</a>
</h2>
<p class="news_item_date">
2015-07-23 00:00
</p>
<div class="news_item_contents">
<p>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.</p>
<p>Here it is:</p>
<iframe src="https://www.humblebundle.com/widget/v2/product/ogsmahjong/ySGF3h34?theme=transparent-light" width="526" height="325" style="border: none;" scrolling="no" frameborder="0"></iframe>
<p>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.. . .</p>
</div>
<div class="news_item_more">
<a href="bye-desura-hello-humblebundle.html">Continue reading</a>
</div>
</div>
<p class="pagination_title">Page 7 of 8</p>
<p>


+ 16
- 0
en/news/index8.html View File

@@ -25,6 +25,22 @@
<h1>News</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="bye-desura-hello-humblebundle.html">Desura no more, hello Humble Bundle Widget</a>
</h2>
<p class="news_item_date">
2015-07-23 00:00
</p>
<div class="news_item_contents">
<p>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.</p>
<p>Here it is:</p>
<iframe src="https://www.humblebundle.com/widget/v2/product/ogsmahjong/ySGF3h34?theme=transparent-light" width="526" height="325" style="border: none;" scrolling="no" frameborder="0"></iframe>
<p>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.. . .</p>
</div>
<div class="news_item_more">
<a href="bye-desura-hello-humblebundle.html">Continue reading</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="test-chamber-for-everyone.html">Test chamber for everyone (Editor 0.7.0)</a>
</h2>


+ 110
- 0
en/news/psk-jvm-item.html View File

@@ -0,0 +1,110 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<link rel="stylesheet" href="../../style.css">
</head>
<body>
<script data-goatcounter="https://services.opengamestudio.org:443/count" async src="//services.opengamestudio.org:443/count.js"></script>
<div id="header">
<div class="header2">
<div class="menu">
<a href="../../en/news/index.html">News</a>
<a href="../../en/game/index.html">Games</a>
<a href="../../en/tool/index.html">Tools</a>
<a href="../../en/page/about.html">About</a>
</div>
<div id="lang">
<a href="../../en/news/psk-jvm-item.html">EN</a>
<a href="../../ru/news/psk-jvm-item.html">RU</a>
</div>
<div class="clear"></div>
</div>
</div>
<h3 class="left_item_title">In the news...</h3>
<center>
<div class="news_item">
<h2 class="news_item_title">
<a href="psk-jvm-item.html">PSKOV 2 for JVM</a>
</h2>
<p class="news_item_date">
2025-02-11 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2025_psk-jvm-item.png" alt="splash" /></p>
<h1 id="seperatepagesgeneration">Seperate pages' generation</h1>
<p>In January I implemented half of the functionality of original
PSKOV: generation of separate HTML pages from Markdown.</p>
<p>Both PSKOV 1 and PSKOV 2 produce HTML files that look the same in web browsers.
However, the contents of the generated HTML files differ because PSKOV 1 uses
<a href="https://github.com/showdownjs/showdown">Showdown</a> to convert Markdown to HTML, whereas PSKOV 2 uses
<a href="https://github.com/JetBrains/markdown">intellij-markdown</a>.</p>
<p>Let's see how the generated HTML files compare. Suppose we have the following
page in Markdown:</p>
<pre><code>Simple page in **Markdown** to convert to **HTML**.

| № | Parser | Language |
|---|--- |--- |
| 1 | [Showdown][showdown] | JavaScript |
| 2 | [intellij-markdown][intellij-markdown] | Kotlin |

[intellij-markdown]: https://github.com/JetBrains/markdown
[showdown]: https://github.com/showdownjs/showdown
</code></pre>
<p>PSKOV 1 converts the aforementioned Markdown to the following HTML:</p>
<pre><code>&lt;p&gt;Simple page in &lt;strong&gt;Markdown&lt;/strong&gt; to convert to &lt;strong&gt;HTML&lt;/strong&gt;.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;№&lt;/th&gt;
&lt;th&gt;Parser&lt;/th&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/showdownjs/showdown"&gt;Showdown&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;JavaScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/JetBrains/markdown"&gt;intellij-markdown&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kotlin&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</code></pre>
<p>PSKOV 2:</p>
<pre><code>&lt;body&gt;&lt;p&gt;Simple page in &lt;strong&gt;Markdown&lt;/strong&gt; to convert to &lt;strong&gt;HTML&lt;/strong&gt;.&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;№&lt;/th&gt;&lt;th&gt;Parser&lt;/th&gt;&lt;th&gt;Language&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;a href="https://github.com/showdownjs/showdown"&gt;Showdown&lt;/a&gt;&lt;/td&gt;&lt;td&gt;JavaScript&lt;/td&gt;&lt;/tr&gt;&lt;tr class="intellij-row-even"&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;a href="https://github.com/JetBrains/markdown"&gt;intellij-markdown&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Kotlin&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/body&gt;
</code></pre>
<p>Here's how both HTML files are rendered in web browsers:</p>
<p><img src="../../images/2025_psk-jvm-item_result.png" alt="result" /></p>
<p>Identical rendering of different files. My internal
perfectionist is outraged by such a disrepancy. And my internal
pragmatist thinks this hardly deserves such an attention.</p>
<h1 id="february">February</h1>
<p>In February I'm going to update the cross-language dialect's translator to produce Context.</p>
</div>
</div>
<div id="disqus_thread"></div>
<script>
var disqus_config = function () {
this.page.url = "https://opengamestudio.org/en/news/psk-jvm-item.html";
this.page.identifier = "psk-jvm-item.html";
};
(function() { // DON'T EDIT BELOW THIS LINE
var d = document, s = d.createElement('script');
s.src = 'https://opengamestudio.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<div id="footer">
The site has been generated by <a href="http://opengamestudio.org/pskov">PSKOV</a>
from <a href="http://github.com/ogstudio/site-opengamestudio">this source code</a>.
</div>
</center>
</body>
</html>

BIN
images/2025_psk-jvm-item.png View File

Before After
Width: 1209  |  Height: 720  |  Size: 245KB

BIN
images/2025_psk-jvm-item_result.png View File

Before After
Width: 722  |  Height: 380  |  Size: 43KB

+ 82
- 0
ru/news/2025-02_psk-jvm-item.md View File

@@ -0,0 +1,82 @@
Title: ПСКОВ 2 на JVM
Date: 2025-02-11 00:00
Category: News
Slug: psk-jvm-item
Lang: ru

![splash][splash]

# Генерация отдельных страниц

В январе сделал половину функциональности оригинального ПСКОВа на Kotlin для JVM,
а именно: генерацию отдельных страниц HTML из Markdown.

И ПСКОВ 1, и ПСКОВ 2 генерируют файлы HTML, которые отображаются идентично
в веб-браузерах. Тем не менее, содержимое этих сгенерированных файлов отличается,
т.к. ПСКОВ 1 использует [Showdown][showdown] для конвертации Markdown в HTML,
а ПСКОВ 2 - [intellij-markdown][intellij-markdown].

Взглянем на описываемую разницу. Допустим, у нас есть следующая страница Markdown:

```
Simple page in **Markdown** to convert to **HTML**.

| № | Parser | Language |
|---|--- |--- |
| 1 | [Showdown][showdown] | JavaScript |
| 2 | [intellij-markdown][intellij-markdown] | Kotlin |

[intellij-markdown]: https://github.com/JetBrains/markdown
[showdown]: https://github.com/showdownjs/showdown
```

ПСКОВ 1 генерирует следующий файл HTML:

```
<p>Simple page in <strong>Markdown</strong> to convert to <strong>HTML</strong>.</p>
<table>
<thead>
<tr>
<th>№</th>
<th>Parser</th>
<th>Language</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td><a href="https://github.com/showdownjs/showdown">Showdown</a></td>
<td>JavaScript</td>
</tr>
<tr>
<td>2</td>
<td><a href="https://github.com/JetBrains/markdown">intellij-markdown</a></td>
<td>Kotlin</td>
</tr>
</tbody>
</table>
```


ПСКОВ 2:

```
<body><p>Simple page in <strong>Markdown</strong> to convert to <strong>HTML</strong>.</p><table><thead><tr><th>№</th><th>Parser</th><th>Language</th></tr></thead><tbody><tr><td>1</td><td><a href="https://github.com/showdownjs/showdown">Showdown</a></td><td>JavaScript</td></tr><tr class="intellij-row-even"><td>2</td><td><a href="https://github.com/JetBrains/markdown">intellij-markdown</a></td><td>Kotlin</td></tr></tbody></table></body>
```

А вот как оба файла отображаются в веб-браузере:

![result][result]

Идентичное отображение двух различающихся файлов.
Мой внутренний перфекционист, конечно, возмущён несоответствием, но мой
внутренний прагматик считает эту разницу несущественной.

# Февраль

В феврале доведу конвертер межъязыкового диалекта до генерации Context.

[intellij-markdown]: https://github.com/JetBrains/markdown
[result]: ../../images/2025_psk-jvm-item_result.png
[showdown]: https://github.com/showdownjs/showdown
[splash]: ../../images/2025_psk-jvm-item.png

+ 21
- 25
ru/news/index.html View File

@@ -25,6 +25,27 @@
<h1>Новости</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="psk-jvm-item.html">ПСКОВ 2 на JVM</a>
</h2>
<p class="news_item_date">
2025-02-11 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2025_psk-jvm-item.png" alt="splash" /></p>
<h1 id="">Генерация отдельных страниц</h1>
<p>В январе сделал половину функциональности оригинального ПСКОВа на Kotlin для JVM,
а именно: генерацию отдельных страниц HTML из Markdown.</p>
<p>И ПСКОВ 1, и ПСКОВ 2 генерируют файлы HTML, которые отображаются идентично
в веб-браузерах. Тем не менее, содержимое этих сгенерированных файлов отличается,
т.к. ПСКОВ 1 использует <a href="https://github.com/showdownjs/showdown">Showdown</a> для конвертации Markdown в HTML,
а ПСКОВ 2 - <a href="https://github.com/JetBrains/markdown">intellij-markdown</a>.</p>
<p>Взглянем на описываемую разницу. Допустим, у нас есть следующая страница Markdown:. . .</p>
</div>
<div class="news_item_more">
<a href="psk-jvm-item.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="year24.html">Итоги 2024-го года</a>
</h2>
@@ -202,31 +223,6 @@ Python в JavaScript. Этого не произошло, потому что п
<div class="news_item_more">
<a href="memory-text-ui.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="memory-logic.html">Игровая логика «Памяти»</a>
</h2>
<p class="news_item_date">
2024-05-03 00:00
</p>
<div class="news_item_contents">
<h1 id="">Игровая логика «Памяти»</h1>
<p>В апреле реализовал игровую логику игры «Память» на Python в виде модели ограниченного языка и успешно перевёл её инструментом в C++.</p>
<p>Модель ограниченного языка предполагает следующую архитектуру из двух частей:</p>
<ol>
<li>контекст состояния</li>
<li>чистые функции без побочных эффектов, работающие лишь с контекстом</li>
</ol>
<p>Контекст состояния игровой логики на Python получился следующим (<a href="https://git.opengamestudio.org/kornerr/research-portable-memory/src/commit/6fcd542daa6242c8c23dddb88d04cda74a730328/v3/memory_Context.h">C++</a>):</p>
<p>```python
class memory_Context:
def <strong>init</strong>(self):
self.hiddenItems = []
self.mismatchedItems = []. . .</p>
</div>
<div class="news_item_more">
<a href="memory-logic.html">Читать далее</a>
</div>
</div>
<p class="pagination_title">Страница 1 из 8</p>
<p>


+ 25
- 16
ru/news/index2.html View File

@@ -25,6 +25,31 @@
<h1>Новости</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="memory-logic.html">Игровая логика «Памяти»</a>
</h2>
<p class="news_item_date">
2024-05-03 00:00
</p>
<div class="news_item_contents">
<h1 id="">Игровая логика «Памяти»</h1>
<p>В апреле реализовал игровую логику игры «Память» на Python в виде модели ограниченного языка и успешно перевёл её инструментом в C++.</p>
<p>Модель ограниченного языка предполагает следующую архитектуру из двух частей:</p>
<ol>
<li>контекст состояния</li>
<li>чистые функции без побочных эффектов, работающие лишь с контекстом</li>
</ol>
<p>Контекст состояния игровой логики на Python получился следующим (<a href="https://git.opengamestudio.org/kornerr/research-portable-memory/src/commit/6fcd542daa6242c8c23dddb88d04cda74a730328/v3/memory_Context.h">C++</a>):</p>
<p>```python
class memory_Context:
def <strong>init</strong>(self):
self.hiddenItems = []
self.mismatchedItems = []. . .</p>
</div>
<div class="news_item_more">
<a href="memory-logic.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="llm-first-py-cxx.html">Первый пример портируемого кода</a>
</h2>
@@ -189,22 +214,6 @@ Ubuntu Edge</a>. Особенностью продукта должна была
<div class="news_item_more">
<a href="the-pros-and-cons-of-restarting-from-scratch.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="on-the-way-to-durable-applications.html">На пути к долговечным приложениям</a>
</h2>
<p class="news_item_date">
2019-08-05 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2019-08-05_on-the-way-to-durable-applications.jpg" alt="Псковское вече" /></p>
<p>В этой статье мы расскажем о нашем первом долговечном приложении для настольных ПК - генераторе статических сайтов ПСКОВ.</p>
<p><strong>Долговечность</strong></p>
<p>Под долговечным приложением мы понимаем такое приложение, которое работает без единого изменения на операционных системах, выпущенных в период 2010-2030 годов. Иными словами, долговечное приложение обладает 10-летней обратной совместимостью и 10-летней прочностью. Впрочем, <a href="http://opengamestudio.org/pskov/ru">ПСКОВ</a> работает даже на Windows 2000, так что у него 19-летняя обратная совместимость.. . .</p>
</div>
<div class="news_item_more">
<a href="on-the-way-to-durable-applications.html">Читать далее</a>
</div>
</div>
<p class="pagination_title">Страница 2 из 8</p>
<p>


+ 16
- 23
ru/news/index3.html View File

@@ -25,6 +25,22 @@
<h1>Новости</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="on-the-way-to-durable-applications.html">На пути к долговечным приложениям</a>
</h2>
<p class="news_item_date">
2019-08-05 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2019-08-05_on-the-way-to-durable-applications.jpg" alt="Псковское вече" /></p>
<p>В этой статье мы расскажем о нашем первом долговечном приложении для настольных ПК - генераторе статических сайтов ПСКОВ.</p>
<p><strong>Долговечность</strong></p>
<p>Под долговечным приложением мы понимаем такое приложение, которое работает без единого изменения на операционных системах, выпущенных в период 2010-2030 годов. Иными словами, долговечное приложение обладает 10-летней обратной совместимостью и 10-летней прочностью. Впрочем, <a href="http://opengamestudio.org/pskov/ru">ПСКОВ</a> работает даже на Windows 2000, так что у него 19-летняя обратная совместимость.. . .</p>
</div>
<div class="news_item_more">
<a href="on-the-way-to-durable-applications.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="defending-availability.html">Защита доступности</a>
</h2>
@@ -170,29 +186,6 @@
<div class="news_item_more">
<a href="openscenegraph-examples.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="mahjong-techdemo1-gameplay.html">Первая технодемка OGS Mahjong 2: Игровая механика</a>
</h2>
<p class="news_item_date">
2018-02-16 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2018-02-16-mahjong-techdemo1-gameplay.png" alt="Конец партии Маджонг" /></p>
<p>Мы ради сообщить о выпуске первой технической демонастрации OGS Mahjong 2. Её цель была в проверке игровой механики на всех поддерживаемых платформах.</p>
<p>Проверьте технодемку на своей платформе:</p>
<ul>
<li>Запустить <a href="https://ogstudio.github.io/game-mahjong/versions/013/mjin-player.html">версию для веба</a> в браузере</li>
<li>Получить <a href="https://drive.google.com/open?id=1KW8IEN8Dpz8ODeg8BctVSJyzj9-AL9hR">версию для Android</a></li>
<li>Получить <a href="https://drive.google.com/open?id=1oj0-OXSmEatttzn86u2vgP9SRAIC0ozB">версию для Windows</a></li>
<li>Получить <a href="https://drive.google.com/open?id=1EX7kLIThLiMz9_W7VmBPySms3mlrF-i6">версию для Linux</a></li>
<li>Получить <a href="https://drive.google.com/open?id=1KWnvbHzan8MpMcZPG2QC-7KWoEYbqrM2">версию для macOS</a></li>
</ul>
<p>Замечания:. . .</p>
</div>
<div class="news_item_more">
<a href="mahjong-techdemo1-gameplay.html">Читать далее</a>
</div>
</div>
<p class="pagination_title">Страница 3 из 8</p>
<p>


+ 23
- 15
ru/news/index4.html View File

@@ -25,6 +25,29 @@
<h1>Новости</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="mahjong-techdemo1-gameplay.html">Первая технодемка OGS Mahjong 2: Игровая механика</a>
</h2>
<p class="news_item_date">
2018-02-16 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2018-02-16-mahjong-techdemo1-gameplay.png" alt="Конец партии Маджонг" /></p>
<p>Мы ради сообщить о выпуске первой технической демонастрации OGS Mahjong 2. Её цель была в проверке игровой механики на всех поддерживаемых платформах.</p>
<p>Проверьте технодемку на своей платформе:</p>
<ul>
<li>Запустить <a href="https://ogstudio.github.io/game-mahjong/versions/013/mjin-player.html">версию для веба</a> в браузере</li>
<li>Получить <a href="https://drive.google.com/open?id=1KW8IEN8Dpz8ODeg8BctVSJyzj9-AL9hR">версию для Android</a></li>
<li>Получить <a href="https://drive.google.com/open?id=1oj0-OXSmEatttzn86u2vgP9SRAIC0ozB">версию для Windows</a></li>
<li>Получить <a href="https://drive.google.com/open?id=1EX7kLIThLiMz9_W7VmBPySms3mlrF-i6">версию для Linux</a></li>
<li>Получить <a href="https://drive.google.com/open?id=1KWnvbHzan8MpMcZPG2QC-7KWoEYbqrM2">версию для macOS</a></li>
</ul>
<p>Замечания:. . .</p>
</div>
<div class="news_item_more">
<a href="mahjong-techdemo1-gameplay.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="mahjong-recreation-start.html">Начало воссоздания Маджонга</a>
</h2>
@@ -163,21 +186,6 @@
<div class="news_item_more">
<a href="ios-tutorial.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="osg-sample.html">Приложение OpenSceneGraph</a>
</h2>
<p class="news_item_date">
2017-05-12 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2017-05_osg-sample.png" alt="Ракета в дали" /></p>
<p>Эта статья описывает создание самоучителей по сборке приложения OpenSceneGraph на Linux, macOS, Windows и Android в апреле 2017.</p>
<p>Предыдущие самоучители описывали установку OpenSceneGraph на Linux, macOS, Windows и отображение модели с помощью стандартного инструмента <strong>osgviewer</strong>. На этот раз результатом нашей работы стало <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide-application">приложение OpenSceneGraph</a>, которое работает на Linux, macOS, Windows и Android.. . .</p>
</div>
<div class="news_item_more">
<a href="osg-sample.html">Читать далее</a>
</div>
</div>
<p class="pagination_title">Страница 4 из 8</p>
<p>


+ 15
- 18
ru/news/index5.html View File

@@ -25,6 +25,21 @@
<h1>Новости</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="osg-sample.html">Приложение OpenSceneGraph</a>
</h2>
<p class="news_item_date">
2017-05-12 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2017-05_osg-sample.png" alt="Ракета в дали" /></p>
<p>Эта статья описывает создание самоучителей по сборке приложения OpenSceneGraph на Linux, macOS, Windows и Android в апреле 2017.</p>
<p>Предыдущие самоучители описывали установку OpenSceneGraph на Linux, macOS, Windows и отображение модели с помощью стандартного инструмента <strong>osgviewer</strong>. На этот раз результатом нашей работы стало <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide-application">приложение OpenSceneGraph</a>, которое работает на Linux, macOS, Windows и Android.. . .</p>
</div>
<div class="news_item_more">
<a href="osg-sample.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="its-all-fine.html">Всё проходит хорошо</a>
</h2>
@@ -169,24 +184,6 @@
<div class="news_item_more">
<a href="2016-september-recap.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="ogs-editor-0.10.html">OGS Editor 0.10 и материалы прямого эфира</a>
</h2>
<p class="news_item_date">
2016-10-03 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2016-10-03_ogs-editor-0.10.png" alt="Редактор с игрой Маджонг" /></p>
<p>Внимание: мы не выпустим версию 0.10 для macOS из-за технических проблем с системой сборки. Поддержку macOS вернём к 0.11.</p>
<ul>
<li><strong>OGS Editor 0.10</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/51_2016-10-01_06-39-48_0.10.0/">доступен на SourceForge</a>. Просто распакуйте архив и запустите скрипт run.</li>
<li><strong>Пасьянс маджонг</strong> тоже <a href="https://sourceforge.net/projects/osrpgcreation/files/Games/MahjongSolitaire/">доступен на SourceForge</a>. Просто распакуйте архив и запустите скрипт run.. . .</li>
</ul>
</div>
<div class="news_item_more">
<a href="ogs-editor-0.10.html">Читать далее</a>
</div>
</div>
<p class="pagination_title">Страница 5 из 8</p>
<p>


+ 18
- 17
ru/news/index6.html View File

@@ -25,6 +25,24 @@
<h1>Новости</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="ogs-editor-0.10.html">OGS Editor 0.10 и материалы прямого эфира</a>
</h2>
<p class="news_item_date">
2016-10-03 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2016-10-03_ogs-editor-0.10.png" alt="Редактор с игрой Маджонг" /></p>
<p>Внимание: мы не выпустим версию 0.10 для macOS из-за технических проблем с системой сборки. Поддержку macOS вернём к 0.11.</p>
<ul>
<li><strong>OGS Editor 0.10</strong> <a href="https://sourceforge.net/projects/osrpgcreation/files/Editor/jenkins/51_2016-10-01_06-39-48_0.10.0/">доступен на SourceForge</a>. Просто распакуйте архив и запустите скрипт run.</li>
<li><strong>Пасьянс маджонг</strong> тоже <a href="https://sourceforge.net/projects/osrpgcreation/files/Games/MahjongSolitaire/">доступен на SourceForge</a>. Просто распакуйте архив и запустите скрипт run.. . .</li>
</ul>
</div>
<div class="news_item_more">
<a href="ogs-editor-0.10.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="yesterdays-live-session-short-overview.html">Пара слов о вчерашнем прямом эфире</a>
</h2>
@@ -154,23 +172,6 @@
<div class="news_item_more">
<a href="may-live-session-announcement.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="may-live-session-decision.html">Майский прямой эфир (Редактор 0.9)</a>
</h2>
<p class="news_item_date">
2016-04-24 00:00
</p>
<div class="news_item_contents">
<p>Как вы знаете, ранее опубликованная дорожная карта предполагала, что в апреле будет прямой эфир, в котором с помощью Редактора 0.9 мы создадим игру пинг-понг.</p>
<p>Мы должны признать, что наши способности к планированию всё ещё недостаточно высоки, поэтому следующий прямой эфир состоится в конце мая. Точную дату мы объявим позже.</p>
<p>Вот пара моментов из будущей игры:</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/V3EvCVPc6kg" frameborder="0" allowfullscreen></iframe>
<p>. . .</p>
</div>
<div class="news_item_more">
<a href="may-live-session-decision.html">Читать далее</a>
</div>
</div>
<p class="pagination_title">Страница 6 из 8</p>
<p>


+ 17
- 17
ru/news/index7.html View File

@@ -25,6 +25,23 @@
<h1>Новости</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="may-live-session-decision.html">Майский прямой эфир (Редактор 0.9)</a>
</h2>
<p class="news_item_date">
2016-04-24 00:00
</p>
<div class="news_item_contents">
<p>Как вы знаете, ранее опубликованная дорожная карта предполагала, что в апреле будет прямой эфир, в котором с помощью Редактора 0.9 мы создадим игру пинг-понг.</p>
<p>Мы должны признать, что наши способности к планированию всё ещё недостаточно высоки, поэтому следующий прямой эфир состоится в конце мая. Точную дату мы объявим позже.</p>
<p>Вот пара моментов из будущей игры:</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/V3EvCVPc6kg" frameborder="0" allowfullscreen></iframe>
<p>. . .</p>
</div>
<div class="news_item_more">
<a href="may-live-session-decision.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="rolling-ball.html">Запись прямого эфира "Катящийся мяч" и материалы</a>
</h2>
@@ -150,23 +167,6 @@
<div class="news_item_more">
<a href="soon-game-creation-editor-07.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="bye-desura-hello-humblebundle.html">Прощай, Desura. Здравствуй, Humble Bundle Widget</a>
</h2>
<p class="news_item_date">
2015-07-23 00:00
</p>
<div class="news_item_contents">
<p>После недавнего банкротства родительской компании сервиса Desura мы пришли к выводу, что нам необходима новая площадка для распространения Deluxe-версии игры. Более современная, удобная, надежная.
Наш выбор пал на Humble Widget, благодаря которому вы можете приобрести Deluxe-версию игры прямо у нас на сайте.</p>
<p>Вот он:</p>
<iframe src="https://www.humblebundle.com/widget/v2/product/ogsmahjong/ySGF3h34?theme=transparent-light" width="526" height="325" style="border: none;" scrolling="no" frameborder="0"></iframe>
<p>. . .</p>
</div>
<div class="news_item_more">
<a href="bye-desura-hello-humblebundle.html">Читать далее</a>
</div>
</div>
<p class="pagination_title">Страница 7 из 8</p>
<p>


+ 17
- 0
ru/news/index8.html View File

@@ -25,6 +25,23 @@
<h1>Новости</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="bye-desura-hello-humblebundle.html">Прощай, Desura. Здравствуй, Humble Bundle Widget</a>
</h2>
<p class="news_item_date">
2015-07-23 00:00
</p>
<div class="news_item_contents">
<p>После недавнего банкротства родительской компании сервиса Desura мы пришли к выводу, что нам необходима новая площадка для распространения Deluxe-версии игры. Более современная, удобная, надежная.
Наш выбор пал на Humble Widget, благодаря которому вы можете приобрести Deluxe-версию игры прямо у нас на сайте.</p>
<p>Вот он:</p>
<iframe src="https://www.humblebundle.com/widget/v2/product/ogsmahjong/ySGF3h34?theme=transparent-light" width="526" height="325" style="border: none;" scrolling="no" frameborder="0"></iframe>
<p>. . .</p>
</div>
<div class="news_item_more">
<a href="bye-desura-hello-humblebundle.html">Читать далее</a>
</div>
</div><div class="news_item">
<h2 class="news_item_title">
<a href="test-chamber-for-everyone.html">Тестовый цех каждому (Редактор 0.7.0)</a>
</h2>


+ 55
- 0
ru/news/index9.html View File

@@ -0,0 +1,55 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<link rel="stylesheet" href="../../style.css">
</head>
<body>
<script data-goatcounter="https://services.opengamestudio.org:443/count" async src="//services.opengamestudio.org:443/count.js"></script>
<div id="header">
<div class="header2">
<div class="menu">
<a href="../../ru/news/index.html">Новости</a>
<a href="../../ru/game/index.html">Игры</a>
<a href="../../ru/tool/index.html">Инструменты</a>
<a href="../../ru/page/about.html">О нас</a>
</div>
<div id="lang">
<a href="../../en/news/index9.html">EN</a>
<a href="../../ru/news/index9.html">RU</a>
</div>
<div class="clear"></div>
</div>
</div>
<center>
<h1>Новости</h1>

<div class="news_item">
<h2 class="news_item_title">
<a href="2014-another-year-passed.html">И вот прошел еще один год</a>
</h2>
<p class="news_item_date">
2014-12-31 12:00
</p>
<div class="news_item_contents">
<p>Привет.</p>
<p>Подходит к концу год, в течение которого мы разместили на сайте рекордно малое количество новостей. Мы не прекратили разработку, однако пока она находится в фазе "показывать нечего", а свободного времени, которое можно уделять проекту, у каждого из его участников сейчас найдется редко больше чем 30-40 часов в месяц.</p>
<p>Но работа продвигается, и подробнее о ней расскажет <a href="exaggerated-expectations.html">статья нашего программиста Михаила Капелько</a>.</p>
<p>. . .</p>
</div>
<div class="news_item_more">
<a href="2014-another-year-passed.html">Читать далее</a>
</div>
</div>
<p class="pagination_title">Страница 9 из 9</p>
<p>
<a href="index8.html">« Новее</a>
</p>

<div id="footer">
Сайт сгенерирован <a href="http://opengamestudio.org/pskov/ru">ПСКОВОМ</a>
из <a href="http://github.com/ogstudio/site-opengamestudio">этого исходного кода</a>.
</div>
</center>
</body>
</html>

+ 109
- 0
ru/news/psk-jvm-item.html View File

@@ -0,0 +1,109 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<link rel="stylesheet" href="../../style.css">
</head>
<body>
<script data-goatcounter="https://services.opengamestudio.org:443/count" async src="//services.opengamestudio.org:443/count.js"></script>
<div id="header">
<div class="header2">
<div class="menu">
<a href="../../ru/news/index.html">Новости</a>
<a href="../../ru/game/index.html">Игры</a>
<a href="../../ru/tool/index.html">Инструменты</a>
<a href="../../ru/page/about.html">О нас</a>
</div>
<div id="lang">
<a href="../../en/news/psk-jvm-item.html">EN</a>
<a href="../../ru/news/psk-jvm-item.html">RU</a>
</div>
<div class="clear"></div>
</div>
</div>
<h3 class="left_item_title">В новостях...</h3>
<center>
<div class="news_item">
<h2 class="news_item_title">
<a href="psk-jvm-item.html">ПСКОВ 2 на JVM</a>
</h2>
<p class="news_item_date">
2025-02-11 00:00
</p>
<div class="news_item_contents">
<p><img src="../../images/2025_psk-jvm-item.png" alt="splash" /></p>
<h1 id="">Генерация отдельных страниц</h1>
<p>В январе сделал половину функциональности оригинального ПСКОВа на Kotlin для JVM,
а именно: генерацию отдельных страниц HTML из Markdown.</p>
<p>И ПСКОВ 1, и ПСКОВ 2 генерируют файлы HTML, которые отображаются идентично
в веб-браузерах. Тем не менее, содержимое этих сгенерированных файлов отличается,
т.к. ПСКОВ 1 использует <a href="https://github.com/showdownjs/showdown">Showdown</a> для конвертации Markdown в HTML,
а ПСКОВ 2 - <a href="https://github.com/JetBrains/markdown">intellij-markdown</a>.</p>
<p>Взглянем на описываемую разницу. Допустим, у нас есть следующая страница Markdown:</p>
<pre><code>Simple page in **Markdown** to convert to **HTML**.

| № | Parser | Language |
|---|--- |--- |
| 1 | [Showdown][showdown] | JavaScript |
| 2 | [intellij-markdown][intellij-markdown] | Kotlin |

[intellij-markdown]: https://github.com/JetBrains/markdown
[showdown]: https://github.com/showdownjs/showdown
</code></pre>
<p>ПСКОВ 1 генерирует следующий файл HTML:</p>
<pre><code>&lt;p&gt;Simple page in &lt;strong&gt;Markdown&lt;/strong&gt; to convert to &lt;strong&gt;HTML&lt;/strong&gt;.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;№&lt;/th&gt;
&lt;th&gt;Parser&lt;/th&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/showdownjs/showdown"&gt;Showdown&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;JavaScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/JetBrains/markdown"&gt;intellij-markdown&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kotlin&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</code></pre>
<p>ПСКОВ 2:</p>
<pre><code>&lt;body&gt;&lt;p&gt;Simple page in &lt;strong&gt;Markdown&lt;/strong&gt; to convert to &lt;strong&gt;HTML&lt;/strong&gt;.&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;№&lt;/th&gt;&lt;th&gt;Parser&lt;/th&gt;&lt;th&gt;Language&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;a href="https://github.com/showdownjs/showdown"&gt;Showdown&lt;/a&gt;&lt;/td&gt;&lt;td&gt;JavaScript&lt;/td&gt;&lt;/tr&gt;&lt;tr class="intellij-row-even"&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;a href="https://github.com/JetBrains/markdown"&gt;intellij-markdown&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Kotlin&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/body&gt;
</code></pre>
<p>А вот как оба файла отображаются в веб-браузере:</p>
<p><img src="../../images/2025_psk-jvm-item_result.png" alt="result" /></p>
<p>Идентичное отображение двух различающихся файлов.
Мой внутренний перфекционист, конечно, возмущён несоответствием, но мой
внутренний прагматик считает эту разницу несущественной.</p>
<h1 id="-1">Февраль</h1>
<p>В феврале доведу конвертер межъязыкового диалекта до генерации Context.</p>
</div>
</div>
<div id="disqus_thread"></div>
<script>
var disqus_config = function () {
this.page.url = "https://opengamestudio.org/ru/news/psk-jvm-item.html";
this.page.identifier = "psk-jvm-item.html";
};
(function() { // DON'T EDIT BELOW THIS LINE
var d = document, s = d.createElement('script');
s.src = 'https://opengamestudio.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Пожалуйста, включите JavaScript для просмотра <a href="https://disqus.com/?ref_noscript">комментариев на платформе Disqus.</a></noscript>
<div id="footer">
Сайт сгенерирован <a href="http://opengamestudio.org/pskov/ru">ПСКОВОМ</a>
из <a href="http://github.com/ogstudio/site-opengamestudio">этого исходного кода</a>.
</div>
</center>
</body>
</html>

Loading…
Cancel
Save