{
  "version": "2.0",
  "xmlns": {
    "atom": "http://www.w3.org/2005/Atom",
    "content": "http://purl.org/rss/1.0/modules/content/",
    "georss": "http://www.georss.org/georss",
    "gml": "http://www.opengis.net/gml"
  },
  "channel": {
    "title": "fboës - Der Blog | Startseite",
    "link": "https://journal.3960.org/",
    "description": "Programmierung, Luft- & Raumfahrt, Kurioses: Der Blog von und mit Frank Boës.",
    "language": "de-DE",
    "copyright": "© 2008-2023 Creative Commons BY",
    "atom_link": {
      "href": "https://journal.3960.org/rss.json",
      "rel": "self",
      "type": "application/rss+json"
    },
    "lastBuildDate": "Mon, 22 Dec 2025 19:00:04 +0100",
    "atom_updated": "2025-12-22T19:00:04+01:00",
    "generator": "blogophon",
    "image": {
      "url": "https://cdn.3960.org/images/tile-128x128.png",
      "title": "fboës - Der Blog",
      "link": "https://journal.3960.org/"
    },
    "items": [
      {
        "title": "Mit einer Stimme…",
        "description": "<blockquote><p>Wir sprechen mit einer Stimme,<br />aber mit zwei verschiedenen Gesichtsausdrücken.</p></blockquote>",
        "content_encoded": "<blockquote><p>Wir sprechen mit einer Stimme,<br />aber mit zwei verschiedenen Gesichtsausdrücken.</p></blockquote><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=Mit%20einer%20Stimme%E2%80%A6&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2025-12-22-mit-stimme%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2025-12-22-mit-stimme/",
        "pubDate": "Mon, 22 Dec 2025 18:59:43 +0100",
        "atom_published": "2025-12-22T18:59:43+01:00",
        "atom_updated": "2025-12-22T18:59:43+01:00",
        "guid": "user/posts/2025-12-22-mit-stimme/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Lustiges",
          "Philosophie"
        ]
      },
      {
        "title": "VTOL VR – Settings & controls",
        "description": "<p><a href=\"https://store.steampowered.com/app/667970/VTOL_VR/\">VTOL VR</a> is an accessible introduction to modern combat aviation in virtual reality. Because the game is designed around VR controllers rather than traditional HOTAS hardware, several cockpit interactions are not immediately obvious. This guide summarizes the most important and frequently used controls.</p>",
        "content_encoded": "<p><a href=\"https://store.steampowered.com/app/667970/VTOL_VR/\">VTOL VR</a> is an accessible introduction to modern combat aviation in virtual reality. Because the game is designed around VR controllers rather than traditional HOTAS hardware, several cockpit interactions are not immediately obvious. This guide summarizes the most important and frequently used controls.</p>\n<!-- more -->\n<h2 id=\"more\">General Interaction</h2>\n<dl>\n<dt>Grip</dt><dd> Grab the joystick or throttle.</dd>\n<dt>Trigger</dt><dd> Press a cockpit button with your fingertip.</dd>\n<dt>Grip → Trigger → Action Button</dt><dd> Open the in-game system menu.</dd>\n</dl>\n<h2 id=\"joystick\">Joystick</h2>\n<p>The joystick is used for primary flight control. Hold <strong>Grip</strong> to take control.</p>\n<h3 id=\"flight-control\">Flight Control</h3>\n<dl>\n<dt>Tilt forward/backward</dt><dd> Pitch down/up.</dd>\n<dt>Tilt left/right</dt><dd> Roll left/right.</dd>\n<dt>Twist left/right</dt><dd> Yaw (rudder / nosewheel steering). This can also be done via hardware rudder pedals.</dd>\n</dl>\n<h3 id=\"buttons-and-functions\">Buttons and Functions</h3>\n<dl>\n<dt>Trigger</dt><dd> Fire weapon / uncage seeker.</dd>\n<dt>Action Button</dt><dd> Cycle selected weapon / fire an uncaged weapon (weapon-dependent).</dd>\n<dt>Secondary Action Button</dt><dd> Push-to-talk (PTT) for radio communications.</dd>\n<dt>Thumbpad</dt><dd> Control the MFD currently designated as SOI (cursor movement, zoom TGP or scroll).</dd>\n<dt>Thumbpad Click</dt><dd> Activate or toggle the selected SOI function.</dd>\n</dl>\n<h2 id=\"throttle\">Throttle</h2>\n<p>The throttle controls engine power. Hold <strong>Grip</strong> to move it.</p>\n<h3 id=\"power-control\">Power Control</h3>\n<dl>\n<dt>Push forward / up</dt><dd> Increase thrust.</dd>\n<dt>Pull backward / down</dt><dd> Decrease thrust.</dd>\n</dl>\n<h3 id=\"buttons-and-functions-1\">Buttons and Functions</h3>\n<dl>\n<dt>Trigger</dt><dd> Wheel/air brakes. Wheel brakes can also be controlled via hardware rudder pedals.</dd>\n<dt>Action Button</dt><dd> Deploy countermeasures (chaff/flares).</dd>\n<dt>Thumbpad up/down</dt><dd> Adjust nozzle angle on VTOL-capable aircraft</dd>\n<dt>Thumbpad left/right</dt><dd> Change active SOI</dd>\n</dl>\n<h2 id=\"helmet-interactions\">Helmet Interactions</h2>\n<p>Interactions are performed by touching or tapping the appropriate area of the helmet with your controller.</p>\n<dl>\n<dt>Oxygen mask area</dt><dd> Push-to-talk (PTT) for radio.</dd>\n<dt>Top of helmet</dt><dd> Toggle NVG.</dd>\n<dt>Side of helmet</dt><dd> Toggle HMD/HMCS display.</dd>\n</dl>\n<p>Source: <a href=\"https://store.steampowered.com/quickref/667970\">The original manual of VTOL VR</a>, and tons of Reddit posts.</p>\n<h2 id=\"radio-commands\">Radio commands</h2>\n<p>An unique feature of VTOL VR is the ability to issue radio calls with your voice. You can check this feature by testing the voice commands in the settings menu of VTOL VR.</p>\n<p>There is a <a href=\"https://vtol-vr.fandom.com/wiki/Voice_Commands\">list of known voice commands in the VTOL VR Wiki</a>, but the most basic commands are:</p>\n<ul>\n<li>„Tower, [YOUR CALLSIGN], requesting takeoff.“</li>\n<li>„Tower, [YOUR CALLSIGN], requesting landing.“</li>\n</ul>\n<hr />\n<p>There is also a whole bunch of community manuals available at <a href=\"https://vtolvr.wiki.gg/wiki/Flight_Manuals\">„Flight Manuals“ from the VTOL VR Wiki</a> as well as the <a href=\"https://steamcommunity.com/sharedfiles/filedetails/?id=3280012191\">VTOL VR Full Guide by ChaoticEnergy37</a>.</p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=VTOL%20VR%20%E2%80%93%20Settings%20%26%20controls&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2025-11-24-vtol-vr-settings-controls%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2025-11-24-vtol-vr-settings-controls/",
        "pubDate": "Mon, 24 Nov 2025 19:05:43 +0100",
        "atom_published": "2025-11-24T19:05:43+01:00",
        "atom_updated": "2025-11-26T21:27:21+01:00",
        "guid": "user/posts/2025-11-24-vtol-vr-settings-controls/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "VTOL VR",
          "Fliegerei",
          "Militaer",
          "Simulation",
          "Spiel"
        ]
      },
      {
        "title": "Sicherheit!",
        "description": "<blockquote><p>„SICHERHEIT“ wird bei uns groß geschrieben!<br />…und ist unser Root-Kennwort.</p></blockquote>",
        "content_encoded": "<blockquote><p>„SICHERHEIT“ wird bei uns groß geschrieben!<br />…und ist unser Root-Kennwort.</p></blockquote><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=Sicherheit!&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2025-11-22-sicherheit%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2025-11-22-sicherheit/",
        "pubDate": "Sat, 22 Nov 2025 18:05:00 +0100",
        "atom_published": "2025-11-22T18:05:00+01:00",
        "atom_updated": "2025-11-22T20:24:05+01:00",
        "guid": "user/posts/2025-11-22-sicherheit/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Lustiges",
          "Programmierung"
        ]
      },
      {
        "title": "Tropensturm „Melissa“ im Flugsimulator Aerofly FS4",
        "description": "<p>Der Tropensturm „Melissa“ zieht gerade eine Schneise der Verwüstung durch die Karibik.</p>\n<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"Storm hunters capture footage from inside the eye of Hurricane Melissa – YouTube\" src=\"https://www.youtube-nocookie.com/embed/RGftISJruFY?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/RGftISJruFY?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/RGftISJruFY/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/RGftISJruFY/hqdefault.jpg\" --></div>\n<p>Um dies im Flugsimulator <em>Aerofly FS 4</em> nachvollziehen zu können, werden Einstellungen benötigt, die der Simulator gar nicht anbietet. Zum Glück gibt es das <a href=\"https://github.com/fboes/aerofly-wettergeraet\">Aerofly Wettergerät</a>, mit dem man wenigstens einen Teil der Wetterbedingungen nachbilden kann.</p>",
        "content_encoded": "<p>Der Tropensturm „Melissa“ zieht gerade eine Schneise der Verwüstung durch die Karibik.</p>\n<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"Storm hunters capture footage from inside the eye of Hurricane Melissa – YouTube\" src=\"https://www.youtube-nocookie.com/embed/RGftISJruFY?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/RGftISJruFY?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/RGftISJruFY/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/RGftISJruFY/hqdefault.jpg\" --></div>\n<p>Um dies im Flugsimulator <em>Aerofly FS 4</em> nachvollziehen zu können, werden Einstellungen benötigt, die der Simulator gar nicht anbietet. Zum Glück gibt es das <a href=\"https://github.com/fboes/aerofly-wettergeraet\">Aerofly Wettergerät</a>, mit dem man wenigstens einen Teil der Wetterbedingungen nachbilden kann.</p>\n<!-- more -->\n<p id=\"more\">Gleich vorneweg: <em>Aerofly FS 4</em> hat trotz seiner sehr langen Präsenz bis heute nur rudimentäres Wetter. Weder lädt es Wetterdaten aus dem Internet, noch kann sich während des Flugs das Wetter ändern. Dazu kommt, dass weder die Windgeschwindigkeit über 16 Knoten noch das Datum überhaupt eingestellt werden können. Das <em>Wettergerät</em> behebt einen Teil dieser Probleme, indem <em>vor</em> dem Flug die Wetterdaten in die Konfigurationsdatei kopiert werden. Das macht das Wetter zwar nicht dynamisch, aber wenigstens zu Beginn des Fluges realistisch.</p>\n<p>Um die aktuellen Bedingungen in der Karibik nachstellen zu können, hilft eine METAR Angabe vom <a href=\"https://en.wikipedia.org/wiki/Leeward_Point_Field\">Leeward Point Field</a> (MUGM) im Süden von Kuba:</p>\n<pre><code class=\"language-metar\"><i title=\"Location\">METAR MUGM</i> <span title=\"Day of month\">29</span><b title=\"Time\">0751Z</b> <span title=\"Wind direction\">120</span><b title=\"Wind speed\">51G65KT</b> 3/4SM RA BR <var title=\"Cloud\">SCT015</var> <var title=\"Cloud\">OVC035</var> <b title=\"Temperature\">28</b>/<span title=\"Dewpoint\">28</span> <span title=\"Pressure\">A2943</span> RMK AO2 PK WND 12067/0731 SLP965 P0035 T02780261 $\n</code></pre>\n<p>Windgeschwindigkeiten von 51 Knoten, in Böen bis zu 65 Knoten, bei einer Sichtweite unter einer Dreiviertel-Meile sind in der Tat extreme Wetterbedingungen.</p>\n<p>Mit dem <em>Wettergerät</em> wird man so zwar die sich je nach räumlicher Lage stark unterschiedlichen Wetterbedingungen nicht nachvollziehen können – aber zumindest punktuell einen Eindruck von den dortigen Wettergegebenheiten bekommen.</p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=Tropensturm%20%E2%80%9EMelissa%E2%80%9C%20im%20Flugsimulator%20Aerofly%20FS4&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2025-10-29-tropensturm-melissa-flugsimulator%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2025-10-29-tropensturm-melissa-flugsimulator/",
        "pubDate": "Wed, 29 Oct 2025 18:05:00 +0100",
        "atom_published": "2025-10-29T18:05:00+01:00",
        "atom_updated": "2025-10-29T18:05:00+01:00",
        "guid": "user/posts/2025-10-29-tropensturm-melissa-flugsimulator/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Fliegerei",
          "Geografie",
          "Simulation"
        ],
        "georss_point": "19.906389 -75.206944"
      },
      {
        "title": "You Need to Be Bored. Here's Why.",
        "description": "<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"https://www.youtube.com/watch?v=orQKfIXMiA8\" src=\"https://www.youtube-nocookie.com/embed/orQKfIXMiA8?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/orQKfIXMiA8?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/orQKfIXMiA8/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/orQKfIXMiA8/hqdefault.jpg\" --></div>\n<p>A brilliant speaker, Arthur C. Brooks explains on how being bored is essentially a good thing – and why you need to get away from your Smartphone once in a while.</p>\n<p>There are more hidden gems of Brooks&#39; wisdom on YouTube you might want to check out.</p>",
        "content_encoded": "<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"https://www.youtube.com/watch?v=orQKfIXMiA8\" src=\"https://www.youtube-nocookie.com/embed/orQKfIXMiA8?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/orQKfIXMiA8?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/orQKfIXMiA8/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/orQKfIXMiA8/hqdefault.jpg\" --></div>\n<p>A brilliant speaker, Arthur C. Brooks explains on how being bored is essentially a good thing – and why you need to get away from your Smartphone once in a while.</p>\n<p>There are more hidden gems of Brooks&#39; wisdom on YouTube you might want to check out.</p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=You%20Need%20to%20Be%20Bored.%20Here's%20Why.&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2025-09-01-you-need-to-be-bored-here-why%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2025-09-01-you-need-to-be-bored-here-why/",
        "pubDate": "Mon, 01 Sep 2025 18:43:16 +0200",
        "atom_published": "2025-09-01T18:43:16+02:00",
        "atom_updated": "2025-09-01T18:43:16+02:00",
        "guid": "user/posts/2025-09-01-you-need-to-be-bored-here-why/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Idee",
          "Meinung",
          "Philosophie"
        ]
      },
      {
        "title": "Marathon – Der Trailer",
        "description": "<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"https://www.youtube.com/watch?v=fvbEnWLRo1s\" src=\"https://www.youtube-nocookie.com/embed/fvbEnWLRo1s?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/fvbEnWLRo1s?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/fvbEnWLRo1s/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/fvbEnWLRo1s/hqdefault.jpg\" --></div>\n<p>Schnitt, Ästhetik, Voice Acting, Choreographie, Musik, Sound, Story, <em>Atmosphäre</em> – der Trailer zu „Marathon“ ist ein Stück Kunst.</p>\n<p>Von mir aus kann Bungie statt einem Extraction Shooter auch einen Kinofilm aus dem Setting machen.</p>\n<p>Der Stil erinnert nicht von ungefähr an die ebenfalls sehr eindringliche Folge <a href=\"https://www.imdb.com/title/tt20239442/\">„Jibaro“ aus der Serie „Love, Death &amp; Robots“</a>.</p>",
        "content_encoded": "<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"https://www.youtube.com/watch?v=fvbEnWLRo1s\" src=\"https://www.youtube-nocookie.com/embed/fvbEnWLRo1s?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/fvbEnWLRo1s?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/fvbEnWLRo1s/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/fvbEnWLRo1s/hqdefault.jpg\" --></div>\n<p>Schnitt, Ästhetik, Voice Acting, Choreographie, Musik, Sound, Story, <em>Atmosphäre</em> – der Trailer zu „Marathon“ ist ein Stück Kunst.</p>\n<p>Von mir aus kann Bungie statt einem Extraction Shooter auch einen Kinofilm aus dem Setting machen.</p>\n<p>Der Stil erinnert nicht von ungefähr an die ebenfalls sehr eindringliche Folge <a href=\"https://www.imdb.com/title/tt20239442/\">„Jibaro“ aus der Serie „Love, Death &amp; Robots“</a>.</p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=Marathon%20%E2%80%93%20Der%20Trailer&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2025-04-15-marathon-trailer%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2025-04-15-marathon-trailer/",
        "pubDate": "Tue, 15 Apr 2025 18:03:29 +0200",
        "atom_published": "2025-04-15T18:03:29+02:00",
        "atom_updated": "2025-04-15T19:13:47+02:00",
        "guid": "user/posts/2025-04-15-marathon-trailer/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Raumfahrt",
          "Spiel",
          "Technologie",
          "The Cool"
        ]
      },
      {
        "title": "Es kann nicht sein…",
        "description": "<blockquote><p>Es kann nicht sein, dass „Es kann nicht sein“ als Argument verwendet wird!</p></blockquote>\n<p>Wenn man genau drüber nachdenkt, ist „Es kann nicht sein“ eigentlich auch gar kein Argument, sondern eher ein Gefühlsausdruck. 🤔</p>",
        "content_encoded": "<blockquote><p>Es kann nicht sein, dass „Es kann nicht sein“ als Argument verwendet wird!</p></blockquote>\n<p>Wenn man genau drüber nachdenkt, ist „Es kann nicht sein“ eigentlich auch gar kein Argument, sondern eher ein Gefühlsausdruck. 🤔</p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=Es%20kann%20nicht%20sein%E2%80%A6&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2025-01-08-es-kann-nicht%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2025-01-08-es-kann-nicht/",
        "pubDate": "Wed, 08 Jan 2025 17:38:35 +0100",
        "atom_published": "2025-01-08T17:38:35+01:00",
        "atom_updated": "2025-01-08T18:55:59+01:00",
        "guid": "user/posts/2025-01-08-es-kann-nicht/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Geckobar",
          "Lustiges",
          "Meinung",
          "Philosophie"
        ]
      },
      {
        "title": "New trailer for „The Long Dark 2“",
        "description": "<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"https://www.youtube.com/watch?v=4wlttElgLg4\" src=\"https://www.youtube-nocookie.com/embed/4wlttElgLg4?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/4wlttElgLg4?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/4wlttElgLg4/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/4wlttElgLg4/hqdefault.jpg\" --></div>\n<p>One of my all-time favorite games „The Long Dark“ gets a sequel. <a href=\"https://store.steampowered.com/app/1586260/BLACKFROST_The_Long_Dark_2/\">BLACKFROST: The Long Dark 2</a> is supposed to have the same survival setting as well as all core game mechanics (like crafting and taking care of sleep and nutrition) of its predecessor, but also gets multi-player mode and more social interaction.</p>",
        "content_encoded": "<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"https://www.youtube.com/watch?v=4wlttElgLg4\" src=\"https://www.youtube-nocookie.com/embed/4wlttElgLg4?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/4wlttElgLg4?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/4wlttElgLg4/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/4wlttElgLg4/hqdefault.jpg\" --></div>\n<p>One of my all-time favorite games „The Long Dark“ gets a sequel. <a href=\"https://store.steampowered.com/app/1586260/BLACKFROST_The_Long_Dark_2/\">BLACKFROST: The Long Dark 2</a> is supposed to have the same survival setting as well as all core game mechanics (like crafting and taking care of sleep and nutrition) of its predecessor, but also gets multi-player mode and more social interaction.</p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=New%20trailer%20for%20%E2%80%9EThe%20Long%20Dark%202%E2%80%9C&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2025-01-01-new-trailer-for-long-dark-2%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2025-01-01-new-trailer-for-long-dark-2/",
        "pubDate": "Wed, 01 Jan 2025 15:21:16 +0100",
        "atom_published": "2025-01-01T15:21:16+01:00",
        "atom_updated": "2025-01-08T22:16:27+01:00",
        "guid": "user/posts/2025-01-01-new-trailer-for-long-dark-2/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "The Long Dark",
          "Outdoor",
          "Spiel"
        ]
      },
      {
        "title": "ChatGPT does flight plans",
        "description": "<p>A brilliant conversation with ChatGPT for proposing a flight plan:</p>",
        "content_encoded": "<p>A brilliant conversation with ChatGPT for proposing a flight plan:</p>\n<!-- more -->\n<p id=\"more\">Please propose a short flight from Martha&#39;s Vineyard airport to a nearby airport with a Cessna 172</p>\n<blockquote><p>A great short flight from Martha&#39;s Vineyard Airport (MVY) in a Cessna 172 would be to Nantucket Memorial Airport (ACK). The flight covers about 30 nautical miles, which takes roughly 20–30 minutes depending on conditions. This route offers stunning views of the Atlantic Ocean and the islands, making it a scenic and enjoyable flight.</p><p>Given the relatively short distance and straightforward navigation over open water, it&#39;s a perfect trip for a short hop in a Cessna 172.</p></blockquote>\n<p>Could you give me a flight plan recommendation?</p>\n<blockquote><p>Certainly! Below is a suggested VFR (Visual Flight Rules) flight plan for a Cessna 172 from Martha&#39;s Vineyard Airport (KMVY) to Nantucket Memorial Airport (KACK).</p><h2 id=\"flight-plan-overview\">Flight Plan Overview:</h2><ul><li><strong>Departure:</strong> Martha&#39;s Vineyard Airport (KMVY)</li><li><strong>Destination:</strong> Nantucket Memorial Airport (KACK)</li><li><strong>Distance:</strong> ~30 NM</li><li><strong>Estimated Flight Time:</strong> 20–30 minutes</li><li><strong>Cruising Altitude:</strong> 3,000 feet (VFR recommended altitude)</li><li><strong>Flight Type:</strong> VFR</li></ul><h2 id=\"flight-plan-details\">Flight Plan Details:</h2><ul><li><p><strong>Pre-Flight:</strong></p><ul><li><strong>Weather:</strong> Check METAR/TAF for both MVY and ACK, as well as en route weather.</li><li><strong>Weight &amp; Balance:</strong> Ensure your Cessna 172 is within weight and balance limits.</li><li><strong>Fuel:</strong> Verify adequate fuel for the flight, including reserves.</li><li><strong>Navigation:</strong> Set up your navigation radios and GPS if available.</li></ul></li><li><p><strong>Departure from KMVY:</strong></p><ul><li><strong>Runway:</strong> Depending on the wind, likely Runway 24 or 06.</li><li><strong>Climb Out:</strong> After takeoff, climb to a cruising altitude of 3,000 feet.</li><li><strong>Heading:</strong> After departure, fly a south-eastern heading towards Nantucket. The initial heading will be approximately 120°.</li></ul></li><li><p><strong>En Route:</strong></p><ul><li><strong>Direct Route:</strong> Fly direct from MVY to ACK.</li><li><strong>Landmarks:</strong> You’ll be over water most of the way, with limited landmarks. However, keep an eye out for the following:<ul><li><strong>Edgartown</strong> on Martha&#39;s Vineyard, off to your left shortly after departure.</li><li><strong>Tuckernuck Island</strong> before reaching Nantucket.</li></ul></li></ul></li><li><p><strong>Arrival at KACK:</strong></p><ul><li><strong>Communication:</strong> Contact Nantucket Tower as you approach the Class D airspace.</li><li><strong>Descent:</strong> Begin your descent to pattern altitude (1,000 feet AGL) as you near the airport.</li><li><strong>Pattern Entry:</strong> Depending on the active runway, enter the appropriate traffic pattern.</li><li><strong>Runway:</strong> Likely Runway 24 or 06, depending on wind conditions.</li></ul></li><li><p><strong>Landing:</strong></p><ul><li>Perform a standard landing, taxi to the ramp, and shut down.</li></ul></li></ul><h2 id=\"communication-frequencies\">Communication Frequencies:</h2><ul><li><strong>MVY ATIS:</strong> 118.12 MHz</li><li><strong>MVY Ground:</strong> 121.90 MHz</li><li><strong>MVY Tower:</strong> 119.70 MHz</li><li><strong>ACK ATIS:</strong> 133.45 MHz</li><li><strong>ACK Tower:</strong> 118.30 MHz</li></ul><h2 id=\"considerations\">Considerations:</h2><ul><li><strong>Wind:</strong> Check the wind direction and adjust your runway choice and headings accordingly.</li><li><strong>Traffic:</strong> Nantucket can be busy, especially in the summer, so stay alert for other traffic.</li><li><strong>Alternate:</strong> If weather deteriorates or there&#39;s an issue, you could divert back to Martha&#39;s Vineyard or head to Cape Cod (Hyannis, KHYA).</li></ul><p>This is a straightforward flight, but it offers stunning views and a good practice opportunity for navigation over water and handling short cross-country flights. Safe flying!</p></blockquote>\n<p>Can you export that flight plan as Garmin fpl file?</p>\n<blockquote><p>Sure! To create a Garmin .fpl file, I&#39;ll generate the flight plan with the necessary waypoints and export it as an .fpl file. I&#39;ll base the file on the flight plan details we discussed.</p><p>I&#39;ll get that ready for you now.</p><p>I&#39;ve created the Garmin .fpl flight plan file for your route from Martha&#39;s Vineyard (KMVY) to Nantucket (KACK). The file is packaged in a .zip archive, which is often required by Garmin devices.</p><p>You can download the file using the link below:</p><p>Download MVY_to_ACK.zip</p><p>Feel free to upload it to your Garmin device, and have a great flight! If you need anything else, just let me know.</p></blockquote>\n<p>This is brilliant. Thank you</p>\n<blockquote><p>You&#39;re very welcome! I&#39;m glad you found the flight plan helpful. Enjoy the flight, and if you have any more questions or need further assistance, feel free to reach out. Safe skies! ✈️</p></blockquote><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=ChatGPT%20does%20flight%20plans&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2024-08-28-chatgpt-does-flight-plans%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2024-08-28-chatgpt-does-flight-plans/",
        "pubDate": "Wed, 28 Aug 2024 18:55:44 +0200",
        "atom_published": "2024-08-28T18:55:44+02:00",
        "atom_updated": "2024-08-28T18:58:54+02:00",
        "guid": "user/posts/2024-08-28-chatgpt-does-flight-plans/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Fliegerei",
          "Programmierung",
          "Simulation",
          "Technologie",
          "The Cool"
        ]
      },
      {
        "title": "Tramstertram – Ein kleines Spiel mit Trams",
        "description": "<p><img src=\"https://journal.3960.org/posts/2024-08-15-tramstertram-kleines-spiel-mit-trams/tramstertram-400x225.png\" class=\"default\" width=\"400\" height=\"225\" style=\"--aspect-ratio: 16/9;\" alt=\"\" /></p>\n<p><a href=\"https://itch.io/profile/mattstark\">Matt Stark</a> hat das kleine, vollkommen entspannte Spiel <a href=\"https://mattstark.itch.io/tramstertram\">Tramstertram</a> gebaut und kostenlos zum Spielen im Browser veröffentlicht.</p>\n<p>Ihr baut ohne Ressourcen- und Zeitdruck eine kleine, niederländisch anmutende Stadt, in der Fußwege, Häuser, Parks… und Tramschienen platziert werden können. Durch Kombination bestimmter Elemente könnt ihr auch kleine Sets wie eine Kirche, verschiedene Brücken oder einen Springbrunnen erzeugen. All das erinnert verdächtig an Amsterdam.</p>\n<p>Das Spiel hat kein Ziel, sondern ist wie eine kleine Modelleisenbahn-Landschaft mehr zum Anschauen und Erfreuen.</p>",
        "content_encoded": "<p><img src=\"https://journal.3960.org/posts/2024-08-15-tramstertram-kleines-spiel-mit-trams/tramstertram-400x225.png\" class=\"default\" width=\"400\" height=\"225\" style=\"--aspect-ratio: 16/9;\" alt=\"\" /></p>\n<p><a href=\"https://itch.io/profile/mattstark\">Matt Stark</a> hat das kleine, vollkommen entspannte Spiel <a href=\"https://mattstark.itch.io/tramstertram\">Tramstertram</a> gebaut und kostenlos zum Spielen im Browser veröffentlicht.</p>\n<p>Ihr baut ohne Ressourcen- und Zeitdruck eine kleine, niederländisch anmutende Stadt, in der Fußwege, Häuser, Parks… und Tramschienen platziert werden können. Durch Kombination bestimmter Elemente könnt ihr auch kleine Sets wie eine Kirche, verschiedene Brücken oder einen Springbrunnen erzeugen. All das erinnert verdächtig an Amsterdam.</p>\n<p>Das Spiel hat kein Ziel, sondern ist wie eine kleine Modelleisenbahn-Landschaft mehr zum Anschauen und Erfreuen.</p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=Tramstertram%20%E2%80%93%20Ein%20kleines%20Spiel%20mit%20Trams&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2024-08-15-tramstertram-kleines-spiel-mit-trams%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://mattstark.itch.io/tramstertram",
        "pubDate": "Thu, 15 Aug 2024 18:33:58 +0200",
        "atom_published": "2024-08-15T18:33:58+02:00",
        "atom_updated": "2024-08-15T20:15:45+02:00",
        "guid": "user/posts/2024-08-15-tramstertram-kleines-spiel-mit-trams/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Spiel"
        ]
      },
      {
        "title": "Berliner Trinkspiel",
        "description": "<p>Speziell für Nutzer des Berliner ÖPNVs gibt es ein kurzweiliges Trinkspiel. Die Regeln sind dabei denkbar einfach:</p>\n<blockquote><p>Für jede kaputte Rolltreppe und jeden kaputten Fahrstuhl müssen die Teilnehmer einen Schnaps trinken.</p></blockquote>\n<p>In diesem Sinne könnte es für Besucher des Berliner Hauptbahnhofs (tief) unmöglich werden, das Gebäude zu verlassen, weil sie beim Erreichen des Ausgangs nicht mehr gehen können.</p>",
        "content_encoded": "<p>Speziell für Nutzer des Berliner ÖPNVs gibt es ein kurzweiliges Trinkspiel. Die Regeln sind dabei denkbar einfach:</p>\n<blockquote><p>Für jede kaputte Rolltreppe und jeden kaputten Fahrstuhl müssen die Teilnehmer einen Schnaps trinken.</p></blockquote>\n<p>In diesem Sinne könnte es für Besucher des Berliner Hauptbahnhofs (tief) unmöglich werden, das Gebäude zu verlassen, weil sie beim Erreichen des Ausgangs nicht mehr gehen können.</p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=Berliner%20Trinkspiel&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2024-08-10-berliner-trinkspiel%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2024-08-10-berliner-trinkspiel/",
        "pubDate": "Sat, 10 Aug 2024 18:38:38 +0200",
        "atom_published": "2024-08-10T18:38:38+02:00",
        "atom_updated": "2024-08-10T18:38:38+02:00",
        "guid": "user/posts/2024-08-10-berliner-trinkspiel/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Lustiges"
        ]
      },
      {
        "title": "In einem mexikanischen Restaurant",
        "description": "<p>In den meisten mexikanischen Restaurants gilt:</p>\n<blockquote><p>Es wird nicht so heiß gekocht,<br />wie es gegessen wird.</p></blockquote>",
        "content_encoded": "<p>In den meisten mexikanischen Restaurants gilt:</p>\n<blockquote><p>Es wird nicht so heiß gekocht,<br />wie es gegessen wird.</p></blockquote><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=In%20einem%20mexikanischen%20Restaurant&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2024-08-08-mexikanisches-restaurant%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2024-08-08-mexikanisches-restaurant/",
        "pubDate": "Thu, 08 Aug 2024 18:44:56 +0200",
        "atom_published": "2024-08-08T18:44:56+02:00",
        "atom_updated": "2024-08-08T18:44:56+02:00",
        "guid": "user/posts/2024-08-08-mexikanisches-restaurant/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Lustiges",
          "Philosophie"
        ]
      },
      {
        "title": "Simulatoren mit einem Gamepad steuern?",
        "description": "<p>Der Einstieg in den Bereich Flugsimulation kann schon sehr abschreckend sein – nicht zuletzt wegen den Investitionen in eine vernünftige Hardware. <a href=\"https://journal.3960.org/posts/2020-08-23-grundausstattung-fuer-flug-simulator-daheim/\">Ein Joystick mit Schubkontrolle</a> ist ja das absolute Minimum, was man an Eingabegeräten für den PC besitzen sollte…</p>\n<p>…aber ist das wirklich so?</p>",
        "content_encoded": "<p>Der Einstieg in den Bereich Flugsimulation kann schon sehr abschreckend sein – nicht zuletzt wegen den Investitionen in eine vernünftige Hardware. <a href=\"https://journal.3960.org/posts/2020-08-23-grundausstattung-fuer-flug-simulator-daheim/\">Ein Joystick mit Schubkontrolle</a> ist ja das absolute Minimum, was man an Eingabegeräten für den PC besitzen sollte…</p>\n<p>…aber ist das wirklich so?</p>\n<!-- more -->\n<p id=\"more\">Denn tatsächlich hat <a href=\"https://www.youtube.com/@Tuuvas\">Tuuvas</a> ein Projekt begonnen, um für so ziemlich jedes Flugzeug im <i>Digital Combat Simulator</i> (DCS) mit einem Gamepad steuern zu können.</p>\n<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"Why I Ditched my $3,000 HOTAS for a $50 Controller (How to Play DCS World with a Gamepad)\" src=\"https://www.youtube-nocookie.com/embed/7Zy_P-EhjPo?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/7Zy_P-EhjPo?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/7Zy_P-EhjPo/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/7Zy_P-EhjPo/hqdefault.jpg\" --></div>\n<p>Das eigentlich Interessante an seinem Erklärungsvideo ist, dass man mittels <i>Steam</i> einem Gamepad neue Funktionen zuweisen kann, so dass <em>jeder</em> Simulator auf einem PC mit einem Gamepad gesteuert werden könnte.</p>\n<p>Seine besonderen Tricks mittels <i>Steam</i> sind in der einfachsten Ausführung:</p>\n<ul>\n<li>Die rechte Schultertaste fungiert zusätzlich als…<ul>\n<li><strong>linker Mausklick</strong>,</li>\n<li><strong>rechte <kbd>Alt</kbd>-Taste</strong></li>\n<li>und als Modifikator, der bestimmten Tasten oder auch dem Steuerkreuz eine weitere Funktion zuweist.</li>\n</ul>\n</li>\n<li>Die linke Schultertaste fungiert zusätzlich als…<ul>\n<li><strong>rechter Mausklick</strong> und</li>\n<li><strong>linke <kbd>Alt</kbd>-Taste</strong>.</li>\n</ul>\n</li>\n<li>Das rechte Steuerkreuz wird zum <strong>Bewegen des Mauszeigers</strong> verwendet…<ul>\n<li>und mit dem Modifikator als reguläres Steuerkreuz.</li>\n</ul>\n</li>\n<li>Die linke und rechte Triggertaste wird mit dem Modifikator als <strong>Maus-Scrollrad</strong> verwendet.</li>\n</ul>\n<p>Tuuvas&#39; Vorschläge für ein Setup sehen grundsätzlich ähnlich aus. Vereinfacht könnte man für <em>jeden</em> Simulator folgende Ideen verwenden.</p>\n<div class=\"table-wrapper\"><table>\n<thead>\n<tr>\n<th>Gamepad Eingabe</th>\n<th>Simulator Ausgabe</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Linkes analoges Steuerkreuz</td>\n<td>Quer- &amp; Höhenruder</td>\n</tr>\n<tr>\n<td>Rechtes analoges Steuerkreuz</td>\n<td>Mauszeiger bewegen</td>\n</tr>\n<tr>\n<td>↪ mit Modifikator</td>\n<td>Trimmung oder Umsehen</td>\n</tr>\n<tr>\n<td>Schultertasten</td>\n<td>Linker / rechter Mausklick</td>\n</tr>\n<tr>\n<td>Schulter-Trigger</td>\n<td>Seitenruder</td>\n</tr>\n<tr>\n<td>↪ mit Modifikator</td>\n<td>Maus-Scrollrad</td>\n</tr>\n<tr>\n<td>Mittlere zwei Buttons</td>\n<td>Radbremse l/r</td>\n</tr>\n<tr>\n<td>D-Pad</td>\n<td>Klappen, Fahrwerk, Radbremse</td>\n</tr>\n<tr>\n<td>Buttons</td>\n<td>Schub, Autopilot</td>\n</tr>\n</tbody></table></div>\n<p>Durch die Verwendung der Maus ist in Simulatoren mit klickbarem Cockpit so ziemlich jede andere Funktion bedienbar, in dem man mit dem Mauszeiger einfach die Knöpfe im Cockpit anklickt.</p>\n<h2 id=\"fazit\">Fazit</h2>\n<p>Kein Joystick, aber ein Gamepad daheim? Steam erlaubt es euch, euer Gamepad in ein HOTAS zu verwandeln, mit dem ihr ganz passabel Flugsimulationen steuern könnt.</p>\n<p>BTW: Die Idee mit dem HOTAS im Gamepad-Format wurde auch mit dem <a href=\"https://yawmanflight.com/\">Yawman Arrow</a> umgesetzt – kostet dann aber auch wiederum deutlich mehr als ein reguläres Gamepad.</p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=Simulatoren%20mit%20einem%20Gamepad%20steuern%3F&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2024-03-03-simulatoren-mit-gamepad-steuern%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2024-03-03-simulatoren-mit-gamepad-steuern/",
        "pubDate": "Sun, 03 Mar 2024 18:55:24 +0100",
        "atom_published": "2024-03-03T18:55:24+01:00",
        "atom_updated": "2024-04-12T16:18:13+02:00",
        "guid": "user/posts/2024-03-03-simulatoren-mit-gamepad-steuern/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Simulation",
          "Joystick",
          "Fliegerei",
          "Spiel"
        ]
      },
      {
        "title": "Marcel Reif – „Sei ein Mensch!“",
        "description": "<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"https://www.youtube.com/watch?v=jXDa0tyt894\" src=\"https://www.youtube-nocookie.com/embed/jXDa0tyt894?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/jXDa0tyt894?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/jXDa0tyt894/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/jXDa0tyt894/hqdefault.jpg\" --></div>\n<p>Marcel Reifs Rede bei der Gedenkstunde für die Opfer des Nationalsozialismus im Bundestag am 31.01.2024.</p>",
        "content_encoded": "<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"https://www.youtube.com/watch?v=jXDa0tyt894\" src=\"https://www.youtube-nocookie.com/embed/jXDa0tyt894?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/jXDa0tyt894?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/jXDa0tyt894/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/jXDa0tyt894/hqdefault.jpg\" --></div>\n<p>Marcel Reifs Rede bei der Gedenkstunde für die Opfer des Nationalsozialismus im Bundestag am 31.01.2024.</p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=Marcel%20Reif%20%E2%80%93%20%E2%80%9ESei%20ein%20Mensch!%E2%80%9C&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2024-02-12-marcel-reif-sei-mensch%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2024-02-12-marcel-reif-sei-mensch/",
        "pubDate": "Mon, 12 Feb 2024 19:11:27 +0100",
        "atom_published": "2024-02-12T19:11:27+01:00",
        "atom_updated": "2024-02-12T19:11:27+01:00",
        "guid": "user/posts/2024-02-12-marcel-reif-sei-mensch/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Philosophie"
        ]
      },
      {
        "title": "The Insane Engineering of the SR-71 Blackbird",
        "description": "<p>The <a href=\"https://en.wikipedia.org/wiki/Lockheed_SR-71_Blackbird\">Lockheed SR-71 Blackbird</a> is a truly unique aircraft. This great video highlights the stranger aspects of hypersonic flight and the engineering obstacles which needed to be overcome to make the SR-71 reach speeds in excess of Mach 3 in 85,000 ft.</p>\n<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"https://www.youtube.com/watch?v=3hYSnyVLmGE\" src=\"https://www.youtube-nocookie.com/embed/3hYSnyVLmGE?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/3hYSnyVLmGE?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/3hYSnyVLmGE/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/3hYSnyVLmGE/hqdefault.jpg\" --></div>\n<p>As of today, its successor the <a href=\"https://en.wikipedia.org/wiki/Lockheed_Martin_SR-72\">Lockheed Martin SR-72 „Son of Blackbird“</a> has not yet taken flight – even though in cinemas and the Microsoft Flight Simulator the <a href=\"https://www.twz.com/darkstar-mockup-from-top-gun-maverick-looks-wicked-in-new-video\">Lockheed Martin Darkstar</a> has surpassed Mach 10 at least once. <span class=\"emoji emoji--1f609\" title=\";)\">&#x1F609;</span></p>",
        "content_encoded": "<p>The <a href=\"https://en.wikipedia.org/wiki/Lockheed_SR-71_Blackbird\">Lockheed SR-71 Blackbird</a> is a truly unique aircraft. This great video highlights the stranger aspects of hypersonic flight and the engineering obstacles which needed to be overcome to make the SR-71 reach speeds in excess of Mach 3 in 85,000 ft.</p>\n<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"https://www.youtube.com/watch?v=3hYSnyVLmGE\" src=\"https://www.youtube-nocookie.com/embed/3hYSnyVLmGE?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/3hYSnyVLmGE?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/3hYSnyVLmGE/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/3hYSnyVLmGE/hqdefault.jpg\" --></div>\n<p>As of today, its successor the <a href=\"https://en.wikipedia.org/wiki/Lockheed_Martin_SR-72\">Lockheed Martin SR-72 „Son of Blackbird“</a> has not yet taken flight – even though in cinemas and the Microsoft Flight Simulator the <a href=\"https://www.twz.com/darkstar-mockup-from-top-gun-maverick-looks-wicked-in-new-video\">Lockheed Martin Darkstar</a> has surpassed Mach 10 at least once. <span class=\"emoji emoji--1f609\" title=\";)\">&#x1F609;</span></p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=The%20Insane%20Engineering%20of%20the%20SR-71%20Blackbird&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2024-02-05-insane-engineering-the-sr-71-blackbird%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2024-02-05-insane-engineering-the-sr-71-blackbird/",
        "pubDate": "Mon, 05 Feb 2024 18:24:10 +0100",
        "atom_published": "2024-02-05T18:24:10+01:00",
        "atom_updated": "2024-02-05T18:24:10+01:00",
        "guid": "user/posts/2024-02-05-insane-engineering-the-sr-71-blackbird/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Fliegerei",
          "Militär",
          "Raumfahrt",
          "Technologie"
        ]
      },
      {
        "title": "Der kleinste JavaScript-Unit-Tester der Welt",
        "description": "<p>Schon das kleinste JavaScript-Projekt kann von Unit Testing profitieren. Aber gerade in kleinen Projekten können Lösungen wie <a href=\"https://mochajs.org/\">Mocha</a> oder <a href=\"https://jestjs.io/\">Jest</a> sich als viel zu schwergewichtig anfühlen.</p>\n<p>Aber warum eigentlich ein Framework verwenden? Wozu das Projekt mit Dependencies vollstopfen, wenn ein paar elegante Zeilen Code für unsere Zwecke reichen?</p>",
        "content_encoded": "<p>Schon das kleinste JavaScript-Projekt kann von Unit Testing profitieren. Aber gerade in kleinen Projekten können Lösungen wie <a href=\"https://mochajs.org/\">Mocha</a> oder <a href=\"https://jestjs.io/\">Jest</a> sich als viel zu schwergewichtig anfühlen.</p>\n<p>Aber warum eigentlich ein Framework verwenden? Wozu das Projekt mit Dependencies vollstopfen, wenn ein paar elegante Zeilen Code für unsere Zwecke reichen?</p>\n<!-- more -->\n<p id=\"more\">In seiner einfachsten Form ist Unit Testing nichts anderes als das Vergleichen von Annahmen mit der Ausgabe von tatsächlichen Code. In JavaScript gibt es dafür eine eingebaute Lösung: <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/console/assert_static\"><code>console.assert()</code></a>.</p>\n<pre><code class=\"language-javascript\"><b>const</b> starDestroyer = <i>new</i> StarDestroyer();\nconsole.assert(starDestroyer !== <samp>null</samp>, <kbd>'Star destroyer exists'</kbd>);\nconsole.assert(starDestroyer.speed &gt;= <em>0</em>, <kbd>'Star destroyer has speed property with positive Number'</kbd>);\nconsole.assert(starDestroyer.faction === <kbd>'imperial'</kbd>, <kbd>'Star destroyer is always imperial'</kbd>);\n</code></pre>\n<p>Im Browser wie auch in Node.js erzeugt diese Methode eine Konsolen-Ausgabe, wenn die Annahme nicht zutrifft.</p>\n<h2 id=\"scoping\">Scoping</h2>\n<p>Wenn in ein und derselben Datei mehrere Testfälle geprüft werden sollen, ist eine klares Scoping von Variablen notwendig. So wird sichergestellt, das Ergebnisse aus einem Test nicht irrtümlicherweise im nächsten Test verwendet werden. In JavaScript ist die Erzeugung eines neuen Scopes jederzeit mittels <code>{…}</code> möglich:</p>\n<pre><code class=\"language-javascript\">{\n  <b>const</b> starDestroyer = <i>new</i> StarDestroyer();\n  console.assert(starDestroyer !== <samp>null</samp>, <kbd>'Star destroyer exists'</kbd>);\n  console.assert(starDestroyer.speed &gt;= <em>0</em>, <kbd>'Star destroyer has speed property with positive Number'</kbd>);\n  console.assert(starDestroyer.faction === <kbd>'imperial'</kbd>, <kbd>'Star destroyer is always imperial'</kbd>);\n}\n\n<u>// No starDestroyer here</u>\n</code></pre>\n<p>Mehrere Tests können so in einer Datei abgehandelt werden.</p>\n<p>Für automatisiertes Testing ist die Verwendung von <code>console.assert</code> natürlich zu kurz gesprungen, denn hier kann nur durch Sichtkontrolle überprüft werden, ob alle Tests sauber durchgelaufen sind. Wichtig wäre es also, auf der Kommandozeile einen Exit-Code zu bekommen, der auf einen Fehler hinweist.</p>\n<h2 id=\"das-eingebaute-assert-in-nodejs\">Das eingebaute <code>Assert</code> in Node.js</h2>\n<p>In Node.js existiert dafür <a href=\"https://nodejs.org/api/assert.html\"><code>Assert</code></a>:</p>\n<pre><code class=\"language-javascript\"><b>const</b> assert = <i>require</i>(<kbd>'node:assert'</kbd>);\n\n{\n  <b>const</b> starDestroyer = <i>new</i> StarDestroyer();\n  assert.ok(starDestroyer !== <samp>null</samp>, <kbd>'Star destroyer exists'</kbd>);\n  assert.ok(starDestroyer.speed &gt;= <em>0</em>, <kbd>'Star destroyer has speed property with positive Number'</kbd>);\n  assert.strictEqual(starDestroyer.faction, <kbd>'imperial'</kbd>, <kbd>'Star destroyer is always imperial'</kbd>);\n}\n</code></pre>\n<p>Im Fehlerfall wird <code>assert.AssertionError</code> geworfen, der auf der CLI einen auch für Automatisierungen wahrnehmbaren Exit-Code erzeugt.</p>\n<p>Der Nachteil dieser Lösung ist gut erkennbar: Diese Art von Testing funktioniert nur in Node.js, aber nicht im Browser.</p>\n<h2 id=\"lösung-marke-eigenbau\">Lösung Marke Eigenbau</h2>\n<p>Gott sei Dank ist die Idee mit dem Werfen von Errors aber gar nicht so komplex. Und damit können wir uns eine kleine Funktion konstruieren, mit der wir ganz grundsätzliches Testing durchführen können:</p>\n<pre><code class=\"language-javascript\"><b>const</b> assertOk = (assertion, message = <kbd>'Assertion'</kbd>) <samp>=&gt;</samp> {\n  console.log((assertion ? <kbd>&quot;✅&quot;</kbd> : <kbd>&quot;💥&quot;</kbd>) + <kbd>&quot; &quot;</kbd> + message);\n  <i>if</i> (!assertion) {\n    <i>throw</i> <i>new</i> Error(<kbd>`&quot;${message}&quot; failed`</kbd>);\n  }\n};\n</code></pre>\n<p>Damit schlagen wir mehrere Fliegen mit einer Klappe:</p>\n<ul>\n<li>Jeder Testfall erzeugt eine Ausgabe, ob erfolgreich oder unerfolgreich.</li>\n<li>Die Tests können sowohl im Browser als auch mit Node.js ausgeführt werden.</li>\n<li>Ein unerfolgreicher Testfall erzeugt einen Fehler, der auch auf der CLI für einen Exit-Code sorgt.</li>\n</ul>\n<p>Etwas aussagekräftiger könnte die Funktion sogar so aussehen:</p>\n<pre><code class=\"language-javascript\"><b>const</b> assertStrictEqual = (a, b = <samp>true</samp>, message = <kbd>''</kbd>) <samp>=&gt;</samp> {\n    message === <kbd>''</kbd> || (message += <kbd>&quot; | &quot;</kbd>);\n    message += message = <kbd>`'${a}' equals '${b}'`</kbd>;\n\n    console.log((a === b ? <kbd>&quot;✅&quot;</kbd> : <kbd>&quot;💥&quot;</kbd>) + <kbd>&quot; &quot;</kbd> + message);\n    <i>if</i> (a !== b) {\n      <i>throw</i> <i>new</i> Error(<kbd>`&quot;${message}&quot; failed`</kbd>);\n    }\n};\n</code></pre>\n<p>Damit können nicht nur direkt Vergleiche durchgeführt werden, sondern auch gleich eine aussagekräftige Nachricht über den tatsächlichen Inhalt des Tests mit ausgegeben werden.</p>\n<p>Wenn ihr ein Drop-In-Replacement für <code>assert</code> von Node.js haben wollt, könnt ihr die beiden Funktionen in statische Methoden verwandeln:</p>\n<pre><code class=\"language-javascript\"><b>const</b> assert = {\n  <u>/**\n   * Check if `assertion` is `true`. Throw Error on error.\n   * @param {Boolean} assertion\n   * @param {String} message\n   */</u>\n  ok(assertion, message = <kbd>'Assertion'</kbd>) {\n    console.log((assertion ? <kbd>&quot;✅&quot;</kbd> : <kbd>&quot;💥&quot;</kbd>) + <kbd>&quot; &quot;</kbd> + message);\n    <i>if</i> (!assertion) {\n      <i>throw</i> <i>new</i> Error(<kbd>`&quot;${message}&quot; failed`</kbd>);\n    }\n  },\n\n  <u>/**\n   * Check if `actual` strictly equals `b`. Throw Error on error.\n   * @param {any} actual\n   * @param {any} expected\n   * @param {String} message\n   */</u>\n  strictEqual(actual, expected, message = <kbd>''</kbd>) {\n    message === <kbd>''</kbd> || (message += <kbd>&quot; | &quot;</kbd>);\n    message += message = <kbd>`'${actual}' equals '${expected}'`</kbd>;\n\n    assert.ok(actual == expected, message)\n  }\n};\n</code></pre>\n<p>Oh, und wenn ihr eure Tests noch gruppieren wollt:</p>\n<pre><code class=\"language-javascript\">console.group(<kbd>'Testing StarDestroyer'</kbd>);\n{\n  <b>const</b> starDestroyer = <i>new</i> StarDestroyer();\n  assert.ok(starDestroyer !== <samp>null</samp>, <kbd>'Star destroyer exists'</kbd>);\n  assert.ok(starDestroyer.speed &gt;= <em>0</em>, <kbd>'Star destroyer has speed property with positive Number'</kbd>);\n  assert.strictEqual(starDestroyer.faction, <kbd>'imperial'</kbd>, <kbd>'Star destroyer is always imperial'</kbd>);\n}\nconsole.groupEnd();\n</code></pre>\n<p>…erzeugt eine schön gruppierte Ausgabe eurer Tests.</p>\n<p>Voilà! Eine Beispiel-Ausgabe:</p>\n<pre><code>GeoJson.Feature\n  ✅ Type matches | &#39;Feature&#39; equals &#39;Feature&#39;\n  ✅ Feature.properties.title | &#39;Test&#39; equals &#39;Test&#39;\n  ✅ Feature.geometry.type | &#39;Point&#39; equals &#39;Point&#39;\n  ✅ No id\nGeoJson.FeatureCollection\n  ✅ &#39;FeatureCollection&#39; equals &#39;FeatureCollection&#39;\n  ✅ Bounding Box West | &#39;6.5664576&#39; equals &#39;6.5664576&#39;\n  ✅ Bounding Box South | &#39;51.04571&#39; equals &#39;51.04571&#39;\n  ✅ Bounding Box East | &#39;1.53946&#39; equals &#39;1.53946&#39;\n  ✅ Bounding Box North | &#39;58.109285&#39; equals &#39;58.109285&#39;\n  ✅ FeatureCollection | &#39;FeatureCollection&#39; equals &#39;FeatureCollection&#39;\n  ✅ Two Features exist | &#39;2&#39; equals &#39;2&#39;\n  ✅ Feature.type | &#39;Feature&#39; equals &#39;Feature&#39;\n  ✅ Feature.properties.title | &#39;Sailing boat&#39; equals &#39;Sailing boat&#39;\n</code></pre>\n<h2 id=\"fazit\">Fazit</h2>\n<p>Natürlich ersetzt diese sehr simple Herangehensweise nicht wirklich echte Unit-Test-Frameworks. So ist zum Beispiel der Vergleich von Objekt-Strukturen nicht möglich, das Testen von Exceptions oder auch die Verwendung von Mocking und ähnlichen Features. Aber zumindest senkt es die Hürde, <em>überhaupt</em> mit Testing zu beginnen. <span class=\"emoji emoji--1f609\" title=\";)\">&#x1F609;</span></p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=Der%20kleinste%20JavaScript-Unit-Tester%20der%20Welt&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2024-02-03-kleinste-javascript-unit-tester-welt%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2024-02-03-kleinste-javascript-unit-tester-welt/",
        "pubDate": "Sat, 03 Feb 2024 18:14:32 +0100",
        "atom_published": "2024-02-03T18:14:32+01:00",
        "atom_updated": "2024-02-04T05:06:25+01:00",
        "guid": "user/posts/2024-02-03-kleinste-javascript-unit-tester-welt/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Javascript",
          "Programmierung",
          "Webdevelop"
        ]
      },
      {
        "title": "Wie funktioniert der Tolino-Webbrowser?",
        "description": "<p>In den eBook-Readern von Tolino steckt auch ein Webbrowser. Welche Fähigkeiten hat der eigentlich? Und lohnt es sich, eigens für eBook-Reader optimierte Webseiten zu bauen?</p>",
        "content_encoded": "<p>In den eBook-Readern von Tolino steckt auch ein Webbrowser. Welche Fähigkeiten hat der eigentlich? Und lohnt es sich, eigens für eBook-Reader optimierte Webseiten zu bauen?</p>\n<!-- more -->\n<h2 id=\"more\">User Agent String für Tolino Webbrowser</h2>\n<p>Jeder Browser strahlt seine eigene Browser-Kennung ab: Den <i>User Agent String</i>. Er verrät nicht nur, welche Browser-Software in welcher Version im Einsatz ist, sondern auch meist das Betriebssystem.</p>\n<p>Für einen Tolino Shine sieht das wie folgt aus:</p>\n<pre><code>Mozilla/5.0 (Linux; Android 8.1.0; de-; tolino shine 4/16.1.0) AppleWebKit/537.36 (KHTML, like Gecko) Verions/4.0 Chrome/61.0.0.0 Mobile Mobile Safari/537.36\n</code></pre>\n<p>Damit lüften sich mehrere Geheimnisse: Nicht nur ist auf dem Tolino ein Android 8 als Betriebssystem im Einsatz, sondern der Browser ist auch ein veralteter Google Chrome 61. (Zum Zeitpunkt der Untersuchung war gerade der Google Chrome 121 aktuell.) Damit beherrscht er leider nicht alle modernen Tricks von CSS und ECMAScript, ist aber für Brot-und-Butter-Websites immer noch eine sehr gute Wahl.</p>\n<h2 id=\"besondere-header\">Besondere Header</h2>\n<p>Mein Tolino Webbrowser hat eine interessante Eigenheit: Er strahlt an jeden besuchten Web-Server einen eigenen Header ab:</p>\n<pre><code>X-REQUESTED-WITH: de.telekom.epub\n</code></pre>\n<p>Tatsächlich gibt es möglicherweise historische Gründe für diesen Header, uns hilft dies aber sonst nicht weiter. Viel spannender ist für uns…</p>\n<h2 id=\"screen-properties-für-den-tolino-webbrowser\">Screen Properties für den Tolino Webbrowser</h2>\n<p>Die physische Bildschirmgröße des Tolino Shine 4 ist 1072×1448 Pixel. Im Web wird dabei ein Device Pixel Ratio von 1.875 angenommen.</p>\n<h2 id=\"media-queries-für-den-tolino-webbrowser\">Media Queries für den Tolino Webbrowser</h2>\n<p>Nun haben wir auf einem eBook-Reader zwei Herausforderungen, die bei der Gestaltung von Websites berücksichtigt werden müssen:</p>\n<ul>\n<li>eBook-Reader haben nur wenige Graustufen zur Verfügung (beim Tolino Shine 16 Graustufen).</li>\n<li><a href=\"https://de.wikipedia.org/wiki/Elektronisches_Papier\">ePaper-Displays</a> eignen sich wenig für Animationen.</li>\n<li>eBook-Reader werden höchstens per Touch bedient.</li>\n</ul>\n<p>Sinnvoll wäre also eine Reaktion des Webbrowsers auf folgende Media Queries:</p>\n<ul>\n<li><a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/@media/monochrome\"><code>monochrome</code></a></li>\n<li><a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/@media/color-gamut\"><code>color-gamut</code></a></li>\n<li><a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion\"><code>prefers-reduced-motion</code></a></li>\n</ul>\n<p>Und hier kommt der etwas traurige Part: In Bezug auf <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/@media\">Media Queries</a> gibt es leider keine Anpassungen des Google Chrome auf dem Tolino gegenüber einem normalen Google Chrome auf einem Android-Smartphone oder -Tablet:</p>\n<div class=\"table-wrapper\"><table>\n<thead>\n<tr>\n<th>Media Query</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Media type</td>\n<td class=\"tag-code\"><code>screen</code></td>\n</tr>\n<tr>\n<td>Monochrome</td>\n<td class=\"tag-code\"><code>false</code></td>\n</tr>\n<tr>\n<td>Color</td>\n<td class=\"tag-code\"><code>true</code></td>\n</tr>\n<tr>\n<td>Width</td>\n<td class=\"tag-code\"><code>572px</code></td>\n</tr>\n<tr>\n<td>Height</td>\n<td class=\"tag-code\"><code>773px</code></td>\n</tr>\n<tr>\n<td>Resolution (dpi)</td>\n<td class=\"tag-code\"><code>180</code></td>\n</tr>\n<tr>\n<td>Colors</td>\n<td class=\"tag-code\"><code>8</code></td>\n</tr>\n<tr>\n<td>Orientation</td>\n<td class=\"tag-code\"><code>portrait</code></td>\n</tr>\n<tr>\n<td>Script</td>\n<td class=\"tag-code\"><code>false</code></td>\n</tr>\n<tr>\n<td>Hover</td>\n<td class=\"tag-code\"><code>false</code></td>\n</tr>\n<tr>\n<td>Pointer</td>\n<td class=\"tag-code\"><code>coarse</code></td>\n</tr>\n<tr>\n<td>Prefers reduced motion</td>\n<td class=\"tag-code\"><code>false</code></td>\n</tr>\n</tbody></table></div>\n<p>Kurz gesprochen gibt es also keine Media Query, mit der das CSS einer Website für den Webbrowser des Tolino zugeschnitten werden kann.</p>\n<h2 id=\"und-trotzdem-css-für-ebook-reader\">Und trotzdem: CSS für eBook-Reader</h2>\n<p>Meine Lösung für dieses Dilemma ist wenig schön, aber besser als nichts:</p>\n<pre><code class=\"language-js\">(<b>function</b> () {\n  <i>if</i> (window.navigator.userAgent.match(/(Tolino|Kindle)/i)) {\n    document.body.classList.add(<kbd>&quot;is-ebook-reader&quot;</kbd>);\n  }\n})();\n</code></pre>\n<p>Auf jeder neuen Seite wird mit einer kleinen Zeile JavaScript kurz überprüft, ob es im <i>User Agent String</i> einen Hinweis darauf gibt, dass es sich bei dem besuchenden Browser um einen eBook-Reader handelt. Wenn ja, wird der Seite eine CSS-Klasse <code>is-ebook-reader</code> hinzugefügt.</p>\n<p>Zum Spaß habe ich das hier in diesen Blog eingebaut, und einfach mittels <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/--*\">CSS Custom Properties</a> eine kleine Fallunterscheidung in mein CSS gebaut. Eine ganz einfache Lösung könnte aber wie folgt aussehen:</p>\n<pre><code class=\"language-css\"><i>:root</i> {\n  <var>--color-background</var>: <em>#eee</em>;\n  <var>--color-text</var>: <em>#112</em>;\n  <var>--color-link</var>: orange;\n  <var>--text-decoration-link</var>: none\n}\n\n<i>.is-ebook-reader</i> {\n  <var>--color-background</var>: white;\n  <var>--color-text</var>: black;\n  <var>--color-link</var>: black;\n  <var>--text-decoration-link</var>: underline dotted;\n}\n\n<i>a</i> {\n  <b>color</b>: <b>var</b>(<var>--color-link</var>);\n  <b>text-decoration</b>: <b>var</b>(<var>--text-decoration-link</var>);\n}\n</code></pre><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=Wie%20funktioniert%20der%20Tolino-Webbrowser%3F&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2023-12-29-wie-funktioniert-tolino-webbrowser%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2023-12-29-wie-funktioniert-tolino-webbrowser/",
        "pubDate": "Fri, 29 Dec 2023 18:14:24 +0100",
        "atom_published": "2023-12-29T18:14:24+01:00",
        "atom_updated": "2023-12-30T19:47:58+01:00",
        "guid": "user/posts/2023-12-29-wie-funktioniert-tolino-webbrowser/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "CSS",
          "Programmierung",
          "Webdevelop"
        ]
      },
      {
        "title": "One revolution per minute",
        "description": "<div class=\"video-player video-player--vimeo\"><iframe allowfullscreen=\"allowfullscreen\" title=\"https://vimeo.com/869858712\" src=\"https://player.vimeo.com/video/869858712\"></iframe></div>\n<p>Manche Künstler trifft man mehrfach im Leben. <a href=\"https://erikwernquist.com/\">Erik Wernquist</a> ist so ein Künstler. „One revolution per minute“ zeigt uns das Leben an Bord eines Kreuzfahrtraumschiffs…</p>",
        "content_encoded": "<div class=\"video-player video-player--vimeo\"><iframe allowfullscreen=\"allowfullscreen\" title=\"https://vimeo.com/869858712\" src=\"https://player.vimeo.com/video/869858712\"></iframe></div>\n<p>Manche Künstler trifft man mehrfach im Leben. <a href=\"https://erikwernquist.com/\">Erik Wernquist</a> ist so ein Künstler. „One revolution per minute“ zeigt uns das Leben an Bord eines Kreuzfahrtraumschiffs…</p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=One%20revolution%20per%20minute&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2023-12-19-one-revolution-per-minute%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2023-12-19-one-revolution-per-minute/",
        "pubDate": "Tue, 19 Dec 2023 18:43:57 +0100",
        "atom_published": "2023-12-19T18:43:57+01:00",
        "atom_updated": "2023-12-19T18:43:57+01:00",
        "guid": "user/posts/2023-12-19-one-revolution-per-minute/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "The Cool",
          "Raumfahrt",
          "Technologie"
        ]
      },
      {
        "title": "RIDON Hoverbike",
        "description": "<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"https://www.youtube.com/watch?v=Dm9awXyv2z8\" src=\"https://www.youtube-nocookie.com/embed/Dm9awXyv2z8?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/Dm9awXyv2z8?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/Dm9awXyv2z8/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/Dm9awXyv2z8/hqdefault.jpg\" --></div>\n<p>Die <a href=\"https://www.ivangraphics.com/\">Portfolio-Seite von Ivan Tantsiura</a> ist eine wunderbare Fundgrube. Tantsiura arbeitet als Principal Concept Artist bei Crytek, und hat Unmengen an futuristischen Designs geschaffen – unter anderem das <a href=\"https://www.artstation.com/artwork/RvvOe\">RIDON Hoverbike</a>.</p>\n<p>Verglichen mit dem Speederbike aus Star Wars sieht man beim RIDON Hoverbike, warum das Hoverbike schwebt – und auch, dass diese Art von Schweben schon etwas sehr dynamisches hat. Der Mechanismus (wie auch die Welt des Hoverbikes) erinnern an <a href=\"https://simonstalenhag.se/\">Simon Stålenhag</a> und seine schwebenden Schiffe.</p>\n<p>Man bekommt direkt Lust, selber eine kleine Spritztour mit dem RIDON Hoverbike zu machen. Wo bleibt also der Arcade-Automat beziehungsweise das VR-Spiel zum Thema?</p>",
        "content_encoded": "<div class=\"video-player video-player--youtube\"><iframe allowfullscreen=\"allowfullscreen\" title=\"https://www.youtube.com/watch?v=Dm9awXyv2z8\" src=\"https://www.youtube-nocookie.com/embed/Dm9awXyv2z8?enablejsapi=1\" srcdoc=\"&lt;style&gt;*{padding:0;margin:0;overflow:hidden}html,body{height:100%}img,span{position:absolute;width:100%;top:0;bottom:0;margin:auto}span{height:1.5em;text-align:center;font:48px/1.5 sans-serif;color:white;text-shadow:0 0 0.5em black}&lt;/style&gt;&lt;a href=&quot;https://www.youtube.com/embed/Dm9awXyv2z8?autoplay=1&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/Dm9awXyv2z8/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;span&gt;▶&lt;/span&gt;&lt;/a&gt;\"></iframe><!-- img src=\"https://img.youtube.com/vi/Dm9awXyv2z8/hqdefault.jpg\" --></div>\n<p>Die <a href=\"https://www.ivangraphics.com/\">Portfolio-Seite von Ivan Tantsiura</a> ist eine wunderbare Fundgrube. Tantsiura arbeitet als Principal Concept Artist bei Crytek, und hat Unmengen an futuristischen Designs geschaffen – unter anderem das <a href=\"https://www.artstation.com/artwork/RvvOe\">RIDON Hoverbike</a>.</p>\n<p>Verglichen mit dem Speederbike aus Star Wars sieht man beim RIDON Hoverbike, warum das Hoverbike schwebt – und auch, dass diese Art von Schweben schon etwas sehr dynamisches hat. Der Mechanismus (wie auch die Welt des Hoverbikes) erinnern an <a href=\"https://simonstalenhag.se/\">Simon Stålenhag</a> und seine schwebenden Schiffe.</p>\n<p>Man bekommt direkt Lust, selber eine kleine Spritztour mit dem RIDON Hoverbike zu machen. Wo bleibt also der Arcade-Automat beziehungsweise das VR-Spiel zum Thema?</p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=RIDON%20Hoverbike&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2023-12-13-ridon-hoverbike%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2023-12-13-ridon-hoverbike/",
        "pubDate": "Wed, 13 Dec 2023 18:38:16 +0100",
        "atom_published": "2023-12-13T18:38:16+01:00",
        "atom_updated": "2023-12-14T12:44:05+01:00",
        "guid": "user/posts/2023-12-13-ridon-hoverbike/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "The Cool",
          "Raumfahrt",
          "Technologie",
          "Geckobar"
        ]
      },
      {
        "title": "Sommermodus mit FRITZ!DECT und Home Assistant",
        "description": "<p><img src=\"https://journal.3960.org/posts/2023-05-26-sommermodus-mit-fritz-dect-home-assistant/ha-301-240x240.png\" class=\"quad\" width=\"240\" height=\"240\" style=\"--aspect-ratio: 1/1;\" alt=\"\" /> Der Sommermodus für die FRITZ!DECT-Thermostate wird über die FRITZ!Box gesteuert – mit einem festen Zeitplan. Mehr Flexibilität gibt es mit dem <a href=\"https://www.home-assistant.io/\">Home Assistant</a>, um zum Beispiel auf Temperaturdaten oder Wetterprognosen reagieren zu können.</p>",
        "content_encoded": "<p><img src=\"https://journal.3960.org/posts/2023-05-26-sommermodus-mit-fritz-dect-home-assistant/ha-301-240x240.png\" class=\"quad\" width=\"240\" height=\"240\" style=\"--aspect-ratio: 1/1;\" alt=\"\" /> Der Sommermodus für die FRITZ!DECT-Thermostate wird über die FRITZ!Box gesteuert – mit einem festen Zeitplan. Mehr Flexibilität gibt es mit dem <a href=\"https://www.home-assistant.io/\">Home Assistant</a>, um zum Beispiel auf Temperaturdaten oder Wetterprognosen reagieren zu können.</p>\n<!-- more -->\n<p id=\"more\">Dummerweise lässt sich der Sommermodus an den Thermostaten vom Home Assistant aus nicht einfach auslösen. Und selbst die im Home Assistant vorhandene Möglichkeit, den Thermostat einfach auszuschalten, funktioniert nicht wirklich gut – der nächste Schaltbefehl an den Thermostat hebt die Abschaltung wieder auf. Außerdem kann der Sommermodus deutlich mehr als nur die Heizung abzuschalten – unter anderem kümmert er sich um das gelegentliche Bewegen der Ventile, um sie vor dem Steckenbleiben zu bewahren.</p>\n<h2 id=\"die-lösung\">Die Lösung</h2>\n<p>…ist zweiteilig: In der FRITZ!Box legen wir mittels Vorlagen das ein- und ausschalten des Sommermodus&#39; an – und im Home Assistant lösen wir dann die Vorlagen aus.</p>\n<p><span class=\"figure\"><img src=\"https://journal.3960.org/posts/2023-05-26-sommermodus-mit-fritz-dect-home-assistant/fritz-heizen.png\" alt=\"Vorlagen in der FRITZ!Box - nützlicher, als gedacht\" /><span class=\"figcaption\" aria-hidden=\"true\">Vorlagen in der FRITZ!Box - nützlicher, als gedacht<br /></span></span></p>\n<ol>\n<li>In der FRITZ!Box legt ihr unter „Smart Home &gt; Automatisierungen“ eine neue Vorlage an, die ihr zum Beispiel „Sommermodus an“ nennt.<ol>\n<li>Wählt alle Heizungen aus, die ihr zeitgleich in den Sommermodus schicken wollt.</li>\n<li>Hinterlegt nun mit „Automatische Einstellungen &gt; Heizen beendet“ einen Zeitplan für den Sommermodus, der einfach das ganze Jahr umfasst. (Vorsichtige Naturen können dies auch vom 01. Mai bis 01. Oktober wählen.)</li>\n</ol>\n</li>\n<li>In der FRITZ!Box baut ihr nun eine zweite Vorlage, die ihr zum Beispiel „Sommermodus aus“ nennt.<ol>\n<li>Wählt wieder die selben Heizungen wie bei „Sommermodus an“ aus.</li>\n<li>Wählt nun die Option „Automatische Einstellungen &gt; Heizen beendet“ und hinterlegt <em>keinen</em> Zeitplan. Durch Auslösen dieses Vorlage wird nun der Sommermodus in den Heizungen gelöscht.</li>\n</ol>\n</li>\n<li>Nun wechselt in eurem Home Assistant und macht unter „Einstellungen &gt; Geräte und Dienste &gt; AVM FRITZ!SmartHome“ mittels der Option „Neu laden“ die neuen Vorlagen auch im Home Assistant bekannt. Diese hier „Smart Home Templates“ genannten Entitäten erzeugen automatisch ein Gerät, nämlich einen virtuellen Button.</li>\n<li>Diese Buttons könnt ihr nun eurem Dashboard hinzufügen, und so manuell den Sommermodus an- und ausschalten.</li>\n</ol>\n<h2 id=\"reaktion-auf-knöpfe\">Reaktion auf Knöpfe</h2>\n<p>Den Druck auf einen dieser Knöpfe könnt ihr im Hone Assistant abfangen und zusätzliche Aktionen auslösen.</p>\n<p>Dazu müsst ihr eine Automatisierung bauen, die beim Druck auf die Knöpfe neben den Vorlagen in der FRITZ!Box noch zusätzliche Aktionen auslösen:</p>\n<pre><code class=\"language-yaml\"><i>alias</i>: <kbd>&quot;Heizungen: Sommermodus an&quot;</kbd>\n<i>description</i>: <kbd>&quot;&quot;</kbd>\n<i>trigger</i>:\n  - <i>platform</i>: device\n    <i>device_id</i>: 5f6c4925f76d4ef27407160a968bb7fd\n    <i>domain</i>: button\n    <i>entity_id</i>: button.heizungen_sommermodus_an\n    <i>type</i>: pressed\n<i>condition</i>: []\n<i>action</i>:\n  - <i>service</i>: notify.notify\n    <i>data</i>:\n      <i>title</i>: <kbd>&quot;Sommermodus an&quot;</kbd>\n      <i>message</i>: &gt;-\n        Alle Heizungen sind nun abgeschaltet, willkommen im Sommermodus.\n    <i>enabled</i>: <samp>true</samp>\n<i>mode</i>: single\n</code></pre>\n<h2 id=\"automatisierung-des-sommermodus\">Automatisierung des Sommermodus&#39;</h2>\n<p>Wir haben aber ja die ganze Arbeit nicht auf uns genommen, um im Home Assistant selber auf Knöpfe drücken zu müssen. Tatsächlich können wir <strong>Automatisierungen</strong> des Home Assistants für uns auf den Knopf drücken lassen.</p>\n<p>Dabei kann in jeder Automatisierung als Aktion der Druck auf die Knöpfe ausgelöst werden:</p>\n<pre><code class=\"language-yaml\"><i>action</i>:\n  - <i>service</i>: button.press\n    <i>data</i>: {}\n    <i>target</i>:\n    <i>entity_id</i>: button.sommermodus_an\n    <i>enabled</i>: <samp>true</samp>\n</code></pre>\n<p>Somit könnt ihr euch nun beliebige Auslöser im Home Assistant konfigurieren, die eure Heizung in den Sommermodus schicken.</p>\n<h3 id=\"mehr-automatisierungen-mit-der-fritzbox-und-dem-home-assistant\">Mehr Automatisierungen mit der FRITZ!Box und dem Home Assistant</h3>\n<p>Die selbe Methode lässt sich neben dem Sommermodus auch für den Urlaubsmodus und eigentlich jede andere Vorlage in der FRITZ!Box anwenden. Dafür müsst ihr nur jeweils in der FRITZ!Box das gewünschte Verhalten als Vorlage definieren, um danach den zugehörigen Button im Home Assistant drücken zu können – beziehungsweise durch eine Automatisierungen auslösen zu können.</p>\n<p>Theoretisch könnt ihr darüber auch abweichende Zeitpläne oder geänderte Spar-/Komforttemperaturen oder zeitlich begrenzte EInstellungen wie Boost oder Fenster-Modus aktivieren.</p><img src=\"https://stats.3960.org/p.php?idsite=2amp;action_name=Sommermodus%20mit%20FRITZ!DECT%20und%20Home%20Assistant&amp;url=https%3A%2F%2Fjournal.3960.org%2Fposts%2F2023-05-26-sommermodus-mit-fritz-dect-home-assistant%2F%3Futm_source%3Dnewsfeed_view\" style=\"border:0;\" alt=\"\" />",
        "link": "https://journal.3960.org/posts/2023-05-26-sommermodus-mit-fritz-dect-home-assistant/",
        "pubDate": "Fri, 26 May 2023 18:45:26 +0200",
        "atom_published": "2023-05-26T18:45:26+02:00",
        "atom_updated": "2023-05-29T09:48:19+02:00",
        "guid": "user/posts/2023-05-26-sommermodus-mit-fritz-dect-home-assistant/index.md",
        "author": "info@3960.org (Frank Boës)",
        "categories": [
          "Home Assistant",
          "Programmierung",
          "Technologie",
          "The Cool",
          "AVM",
          "Homeoffice"
        ]
      }
    ]
  }
}