my website banner

javascript blog and final update
authorDavid Polakovic <email@dpolakovic.space>
Fri, 6 Jun 2025 18:23:39 +0000 (20:23 +0200)
committerDavid Polakovic <email@dpolakovic.space>
Fri, 6 Jun 2025 18:23:39 +0000 (20:23 +0200)
Pictures/dot2.png [new file with mode: 0644]
Pictures/dpo2.png [new file with mode: 0644]
Pictures/space2.png [new file with mode: 0644]
blogs/clicky-images-in-blogs.js [new file with mode: 0644]
blogs/javascript.html [new file with mode: 0755]
clicky-images.js
mars-clock.php
ro.php [new file with mode: 0755]
rss.xml

diff --git a/Pictures/dot2.png b/Pictures/dot2.png
new file mode 100644 (file)
index 0000000..39d81f6
Binary files /dev/null and b/Pictures/dot2.png differ
diff --git a/Pictures/dpo2.png b/Pictures/dpo2.png
new file mode 100644 (file)
index 0000000..4ec5f6f
Binary files /dev/null and b/Pictures/dpo2.png differ
diff --git a/Pictures/space2.png b/Pictures/space2.png
new file mode 100644 (file)
index 0000000..c8c90cb
Binary files /dev/null and b/Pictures/space2.png differ
diff --git a/blogs/clicky-images-in-blogs.js b/blogs/clicky-images-in-blogs.js
new file mode 100644 (file)
index 0000000..a3c489d
--- /dev/null
@@ -0,0 +1,127 @@
+  
+/**
+ *
+ * @licstart  The following is the entire license notice for the 
+ *  JavaScript code in this page.
+ *
+ * Copyright (C) 2025  David Polakovic
+ *
+ *
+ * The JavaScript code in this page is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GNU GPL) as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option)
+ * any later version.  The code is distributed WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
+ *
+ * As additional permission under GNU GPL version 3 section 7, you
+ * may distribute non-source (e.g., minimized or compacted) forms of
+ * that code without the copy of the GNU GPL normally required by
+ * section 4, provided you include this license notice and a URL
+ * through which recipients can access the Corresponding Source.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this page.
+ *
+ */
+
+const dotImg = document.getElementById("toggleImageDot");
+const spaceImg = document.getElementById("toggleImageSpace");
+const dpoImg = document.getElementById("toggleImagedpo");
+
+// Track key state
+const keysPressed = {};
+
+// Helper function to check for redirect
+function checkRedirect(clickedKey) {
+  const requiredKeys = [".", "d", " "];
+  const otherKeys = requiredKeys.filter(k => k !== clickedKey);
+  
+  if (keysPressed[otherKeys[0]] && keysPressed[otherKeys[1]]) {
+    window.location.href = "https://www.dpolakovic.space/ro";
+  }
+}
+
+// Mouse behavior for dot
+if (dotImg) {
+  dotImg.addEventListener("mousedown", () => {
+    dotImg.src = "../Pictures/dot2.png";
+    checkRedirect(".");
+  });
+
+  dotImg.addEventListener("mouseup", () => {
+    dotImg.src = "../Pictures/dot.png";
+  });
+
+  dotImg.addEventListener("mouseleave", () => {
+    dotImg.src = "../Pictures/dot.png";
+  });
+}
+
+// Mouse behavior for space
+if (spaceImg) {
+  spaceImg.addEventListener("mousedown", () => {
+    spaceImg.src = "../Pictures/space2.png";
+    checkRedirect(" ");
+  });
+
+  spaceImg.addEventListener("mouseup", () => {
+    spaceImg.src = "../Pictures/space.png";
+  });
+
+  spaceImg.addEventListener("mouseleave", () => {
+    spaceImg.src = "../Pictures/space.png";
+  });
+}
+
+// Mouse behavior for dpo
+if (dpoImg) {
+  dpoImg.addEventListener("mousedown", () => {
+    dpoImg.src = "../Pictures/dpo2.png";
+    checkRedirect("d");
+  });
+
+  dpoImg.addEventListener("mouseup", () => {
+    dpoImg.src = "../Pictures/dpolakovic.png";
+  });
+
+  dpoImg.addEventListener("mouseleave", () => {
+    dpoImg.src = "../Pictures/dpolakovic.png";
+  });
+}
+
+// Keyboard behavior
+document.addEventListener("keydown", (event) => {
+  keysPressed[event.key] = true;
+
+  if (dotImg && event.key === ".") {
+    dotImg.src = "../Pictures/dot2.png";
+  }
+  if (spaceImg && event.key === " ") {
+    spaceImg.src = "../Pictures/space2.png";
+  }
+  if (dpoImg && event.key === "d") {
+    dpoImg.src = "../Pictures/dpo2.png";
+  }
+
+  // Check if all three keys are pressed
+  if (keysPressed["."] && keysPressed["d"] && keysPressed[" "]) {
+    window.location.href = "https://www.dpolakovic.space/ro";
+  }
+});
+
+document.addEventListener("keyup", (event) => {
+  delete keysPressed[event.key];
+
+  if (dotImg && event.key === ".") {
+    dotImg.src = "../Pictures/dot.png";
+  }
+  if (spaceImg && event.key === " ") {
+    spaceImg.src = "../Pictures/space.png";
+  }
+  if (dpoImg && event.key === "d") {
+    dpoImg.src = "../Pictures/dpolakovic.png";
+  }
+});
+
diff --git a/blogs/javascript.html b/blogs/javascript.html
new file mode 100755 (executable)
index 0000000..dc8a3fc
--- /dev/null
@@ -0,0 +1,119 @@
+
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=600, initial-scale=1.0">
+    <title>"This site uses client-side scripting"</title>
+    <link rel="icon"         href="../Pictures/dot.png">
+    <link rel="stylesheet"   href="../Styles/styles.css">
+    <link rel="author"       href="mailto:email@dpolakovic.space">
+    <meta name="description" content="personal website and git server"> 
+  </head>
+  <body>
+    
+    <!-- show pictures (banner) on top of the page -->
+    <div class="banner">
+      <p>
+             <img id="toggleImagedpo" src="../Pictures/dpolakovic.png" alt="simple">
+             <img id="toggleImageDot" src="../Pictures/dot.png" alt="website">
+        <img id="toggleImageSpace" src="../Pictures/space.png" alt="website">
+      </p>
+      <script src="clicky-images-in-blogs.js"></script>
+    </div>
+    
+    <!-- navigation bar -->
+    <nav class="nav-bar-blog">
+      <ul>
+       <li><a href="https://www.dpolakovic.space/blog.php">Go back</a></li>
+      </ul>
+    </nav>
+
+    <!-- page content -->
+    <main class="content">
+      <p>
+       <h2> This site uses client-side scripting </h2> 
+       <i>5 Jun 2025 - Spooky, scary JavaScript update.</i>
+       <br>
+      <p>
+       <!-- PUT HERE A PICTURE -->
+       <img src="./pics/jst.jpg"
+            alt="Jerry about to be eaten by Tom">
+      </p>
+       <p>
+    I have a few thoughts on client-side scripting. It was only recently that 
+    I decided to burden your browsers with up to 2.9 kilobytes of JavaScript 
+    code per page[<a href="#notes">*</a>]. My previous zealotry of avoiding 
+    it was based on privacy and security concerns that I have with this 
+    technology, which I didn't want my few readers to deal with. So, let me 
+    explain why I decided to burden your browser with a code size of a photo 
+    taken with a Nokia 6600.
+       </p>
+       <p> 
+    The sheer concept of running served code locally in your browser is alien 
+    to me. Sandboxed or not, escapes happen on a large scale. Just this week, 
+    the zero-day vulnerability 
+    <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-5419">CVE-2025-5419</a> 
+    was documented after having existed for almost half a year in the wild. Last 
+    year, four severe vulnerabilities in the JavaScript engine emerged that 
+    I am aware of, one of which enabled ACE with as little as 40 lines of code 
+    (including the payload!). 
+  </p>
+  <p>
+    Running code client-side means placing a lot of trust in your source (the 
+    website) but even more in the tool (the browser). My decision to include 
+    JavaScript in the non-critical functionality of the site was made for the 
+    comfort of average surfers. To be specific, now visitors can see my 
+    <a href="https://www.dpolakovic.space/mars-clock">mars clock</a> 
+    update in real time. I wanted to demonstrate the difference between a Mars 
+    second and an Earth second in the simplest possible example.
+  </p>
+  <p>
+    The core functionality is, and always will be, executed server-side. All 
+    scripting is purely cosmetic and in no way interferes with your experience 
+    on my domain.
+  </p>
+  <p>
+    But don't take my word for it. I encourage every visitor to read my source 
+    code. Up-to-date "backups" are stored on my Git server and linked in every 
+    footer. Compare them with the dev console and call me out if you find any 
+    discrepancies. If you don't feel comfortable diving into the code, fire up 
+    <a href="https://jshelter.org/">JShelter</a> 
+    to protect yourself. Even better, I encourage you to disable all JavaScript 
+    and fetch only my 
+    <a href="https://dpolakovic.space/rss.xml">RSS feed</a>.
+  </p>
+       <p>
+    Remember, a web publication should be obtained from the server in its complete and 
+    unaltered form. If someone hides information behind potential security risks, 
+    it might not be worth your time.
+  </p>
+
+               
+         
+      <!--<p><img src="./pics/free3.png" alt="Happy ash"></p>-->
+      <br>
+      <hr>
+      <div id="notes"></div> 
+      <i>
+      <p>
+       * If we include the license statements, which don't affect the logic of mentioned code,
+    it adds up to 5 kilobytes per page.
+      </p>
+      </i>
+      <br>
+    </main>
+
+    <!-- footer  -->
+    <footer class="footer">
+    Copyright 2025 David Polakovic - 
+    This publication is licensed under
+    <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>.
+    <br>
+    This site uses client-side scripting. Please, read the source code
+<a href="https://git.dpolakovic.space/?p=my-website;a=tree">here</a> for more information.
+    </footer>
+    <br><br>
+    
+  </body>
+  </html>
index c79d02db12c4889b08ebd632fc3b2b3beb79691c..16a3f0d8229515e2dbd1c94911d97ebff8830c97 100644 (file)
  * for the JavaScript code in this page.
  *
  */
-
 const dotImg = document.getElementById("toggleImageDot");
 const spaceImg = document.getElementById("toggleImageSpace");
 const dpoImg = document.getElementById("toggleImagedpo");
 
+// Track key state
+const keysPressed = {};
+
+// Helper function to check for redirect
+function checkRedirect(clickedKey) {
+  const requiredKeys = [".", "d", " "];
+  const otherKeys = requiredKeys.filter(k => k !== clickedKey);
+  
+  if (keysPressed[otherKeys[0]] && keysPressed[otherKeys[1]]) {
+    window.location.href = "https://www.dpolakovic.space/ro";
+  }
+}
+
 // Mouse behavior for dot
 if (dotImg) {
   dotImg.addEventListener("mousedown", () => {
     dotImg.src = "./Pictures/dot2.png";
+    checkRedirect(".");
   });
 
   dotImg.addEventListener("mouseup", () => {
@@ -48,7 +61,8 @@ if (dotImg) {
 // Mouse behavior for space
 if (spaceImg) {
   spaceImg.addEventListener("mousedown", () => {
-    spaceImg.src = "./Pictures/space2.png";
+    spaceImg.src = "../Pictures/space2.png";
+    checkRedirect(" ");
   });
 
   spaceImg.addEventListener("mouseup", () => {
@@ -64,6 +78,7 @@ if (spaceImg) {
 if (dpoImg) {
   dpoImg.addEventListener("mousedown", () => {
     dpoImg.src = "./Pictures/dpo2.png";
+    checkRedirect("d");
   });
 
   dpoImg.addEventListener("mouseup", () => {
@@ -77,25 +92,34 @@ if (dpoImg) {
 
 // Keyboard behavior
 document.addEventListener("keydown", (event) => {
-  if (event.key === "." && dotImg) {
+  keysPressed[event.key] = true;
+
+  if (dotImg && event.key === ".") {
     dotImg.src = "./Pictures/dot2.png";
   }
-  if (event.key === " " && spaceImg) {
+  if (spaceImg && event.key === " ") {
     spaceImg.src = "./Pictures/space2.png";
   }
-  if (event.key === "d" && dpoImg) {
+  if (dpoImg && event.key === "d") {
     dpoImg.src = "./Pictures/dpo2.png";
   }
+
+  // Check if all three keys are pressed
+  if (keysPressed["."] && keysPressed["d"] && keysPressed[" "]) {
+    window.location.href = "https://www.dpolakovic.space/ro";
+  }
 });
 
 document.addEventListener("keyup", (event) => {
-  if (event.key === "." && dotImg) {
+  delete keysPressed[event.key];
+
+  if (dotImg && event.key === ".") {
     dotImg.src = "./Pictures/dot.png";
   }
-  if (event.key === " " && spaceImg) {
+  if (spaceImg && event.key === " ") {
     spaceImg.src = "./Pictures/space.png";
   }
-  if (event.key === "d" && dpoImg) {
+  if (dpoImg && event.key === "d") {
     dpoImg.src = "./Pictures/dpolakovic.png";
   }
 });
\ No newline at end of file
index f79f60a52d3b26937b90c5c1876ebb82de564ea3..765009fadc5bf55008ad95f7db03a9148bc70b7a 100755 (executable)
 <!DOCTYPE html>
 <html lang="en">
-  <head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=600, initial-scale=1.0">
-    <title>dpolakovic.space</title>
-    <link rel="icon"         href="./Pictures/dot.png">
-    <link rel="stylesheet"   href="./Styles/styles.css">
-    <?php require_once('./php/config.php'); ?>
-    <?php require_once('./php/time.php'); ?>
-    <link rel="author"       href="mailto:email@dpolakovic.space">
-    <meta name="description" content="personal website and git server">
-    <meta name="author"      content="David Polakovic, 2023">
-  
-  </head>
-  <body>
-    
-    <!-- show pictures (banner) on top of the page -->
+<head>
+<meta charset="UTF-8">
+<meta name="viewport" content="width=600, initial-scale=1.0">
+<title>dpolakovic.space</title>
+<link rel="icon"         href="./Pictures/dot.png">
+<link rel="stylesheet"   href="./Styles/styles.css">
+<?php require_once('./php/config.php'); ?>
+<?php require_once('./php/time.php'); ?>
+<link rel="author"       href="mailto:email@dpolakovic.space">
+<meta name="description" content="personal website and git server">
+<meta name="author"      content="David Polakovic, 2023">
+<script>
+  /**
+ *
+ * @licstart  The following is the entire license notice for the 
+ *  JavaScript code in this page.
+ *
+ * Copyright (C) 2025  David Polakovic
+ *
+ *
+ * The JavaScript code in this page is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GNU GPL) as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option)
+ * any later version.  The code is distributed WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
+ *
+ * As additional permission under GNU GPL version 3 section 7, you
+ * may distribute non-source (e.g., minimized or compacted) forms of
+ * that code without the copy of the GNU GPL normally required by
+ * section 4, provided you include this license notice and a URL
+ * through which recipients can access the Corresponding Source.
+ *
+ * @licend  The above is the entire license notice
+ * for the JavaScript code in this page.
+ *
+ */
+// Earth update every second
+setInterval(() => {
+  fetch('./php/clock-earth.php')
+    .then(res => res.text())
+    .then(html => {
+      document.querySelector('.earth-block').innerHTML = html;
+    });
+}, 1000);
+
+// Mars update every 3 seconds
+setInterval(() => {
+  fetch('./php/clock-mars.php')
+    .then(res => res.text())
+    .then(html => {
+      document.querySelector('.mars-block').innerHTML = html;
+    });
+}, 1100);
+</script>
+</head>
+<body>
+<!-- show pictures (banner) on top of the page -->
     <div class="banner">
       <p>
-       <img src="./Pictures/dpolakovic.png" alt="simple">
-       <img src="./Pictures/dot.png" alt="website">
-       <img src="./Pictures/space.png" alt="banner">
+       <img id="toggleImagedpo" src="./Pictures/dpolakovic.png" alt="simple">
+       <img id="toggleImageDot" src="./Pictures/dot.png" alt="website">
+        <img id="toggleImageSpace" src="./Pictures/space.png" alt="website">
       </p>
+      <script src="clicky-images.js"></script>
     </div>
-    
-    <!-- navigation bar -->
-    <nav class="nav-bar">
-    <ul>
-        <li><a href="https://www.dpolakovic.space">About</a></li>
-        <li><a href="https://www.dpolakovic.space/blog.php">Blog</a></li>
-        <li><a href="https://www.dpolakovic.space/mars-clock.php">Mars clock</a></li>
-        <li><a href="https://www.dpolakovic.space/dead-drop.php">Dead drop</a></li>
-        <li><?php serverStatus() ?></li>
-      </ul>
-    </nav>
+<!-- navigation bar -->
+<nav class="nav-bar">
+<ul>
+       <li><a href="https://dpolakovic.space">About</a></li>
+       <li><a href="https://dpolakovic.space/blog.php">Blog</a></li>
+       <li><a href="https://dpolakovic.space/dir.php">Web directory</a></li>
+       <li><a href="https://dpolakovic.space/mars-clock.php">Mars clock</a></li>
 
-    <!-- page content -->
-    <main class="content">
-      <p>
-       <h2> Mars clock </h2> 
-       <i>  Ack Ack Ack Ack Ack!</i>
-       <br>
-       <br>
+<li><?php serverStatus() ?></li>
+</ul>
+</nav>
+
+<!-- page content -->
+<main class="content">
+<p>
+<h2> Mars clock </h2> 
+<i>  Ack Ack Ack Ack Ack!</i>
+<br>
+<br>
       It was my friend Peter who got me into timekeeping "nerding". He is a devoted fan 
       of Mars colonization and author of few articles about timekeeping on other 
       celestial bodies. He inspired me to make a simple app to help me (and you!) 
       to see what time it is on other places in our Solar system.
-      </p>
-      <p>
-            <div class="terminal-block" style="white-space: pre;">
+</p>
+<p>
+<div class="terminal-block" style="white-space: pre;">
 <?php title() ?>
-------------------------------------------------------
-Earth                  |  Time   |       Date        |
-------------------------------------------------------
-Silicon Valley         |  <?php timeEarth("America/Los_Angeles") ?>  |  <?php dateEarth("America/Los_Angeles") ?>  |
+---------------------------------------------------------
+Earth                  |    Time    |       Date        |
+---------------------------------------------------------
+<span class="earth-block">Silicon Valley         |  <?php timeEarth("America/Los_Angeles") ?>  |  <?php dateEarth("America/Los_Angeles") ?>  |
 Boston                 |  <?php timeEarth("America/New_York") ?>  |  <?php dateEarth("America/New_York") ?>  |
 London*                |  <?php timeEarth("Europe/London") ?>  |  <?php dateEarth("Europe/London") ?>  |
 Tokyo                  |  <?php timeEarth("Asia/Tokyo") ?>  |  <?php dateEarth("Asia/Tokyo") ?>  |
+</span>
 
-------------------------------------------------------
-Mars                   |  Time   |       Date        |
-------------------------------------------------------
-Jezero Crater          |  <?php timeMars(10) ?>  |  <?php dateMars(10) ?>   |
+---------------------------------------------------------
+Mars                   |    Time    |       Date        |
+---------------------------------------------------------
+<span class="mars-block">Jezero Crater          |  <?php timeMars(10) ?>  |  <?php dateMars(10) ?>   |
 Gale Crater            |  <?php timeMars(6) ?>  |  <?php dateMars(6) ?>   |
 Olympus Mons*          |  <?php timeMars(0) ?>  |  <?php dateMars(0) ?>   |
 Tharsis Tholus         |  <?php timeMars(-3) ?>  |  <?php dateMars(-3) ?>   |
 Conv. Prime Meridian   |  <?php timeMars(-9) ?>  |  <?php dateMars(-9) ?>   |
-
-
-
-------------------------------------------------------
+</span><br><br>
+---------------------------------------------------------
 * 0 offset time zone
-            </div>
-
-      </p>
-      <p>
+</div>
+</p>
+<p>
         The idea was to create the most humanly readable modification of the 
-        <a href="https://en.wikipedia.org/wiki/Darian_calendar#Calendar_layout">Darian calendar</a> 
+<a href="https://en.wikipedia.org/wiki/Darian_calendar#Calendar_layout">Darian calendar</a> 
         On contrary to the original, the epoch starts on UTC 00:00 11th April,
         1609 (invention / first use of telescope) with year 1, not year 0. Aditionaly, the time zone with zero offset was chosen not 
         conventionally (the first landing spot / prime meridian) but rather by matching the 
         converted time with actual daylight on the Red Planet.
-      </p>
-      <p>
+</p>
+<p>
         Note, that original Darian calendar designates the first
         day of each month as the start of a new week, which results in a one-day weekend occurring 
         three or four times a year. I am uncertain how this would be received by future Martian 
         colonists, so I didn't implemented this feature as well as
         winter/summer time shifts or any holidays whatsoever.
-      </p>
-      <p>
-        Also, the clocks are not updating automatically like clocks usually do, 
-        because I didn't want to DDOS myself nor invade your client with 
-        <i>any</i> scripting. It is also not very useful extraterrestrially, 
+</p>
+<p>
+        Also, this site is not very useful extraterrestrially, 
         so I made a portable version which you can fit on your Raspberry 
         Pi or any device running Java. It runs in GUI mode and terminal as well.
-      </p>
-      <p>
-        <center>
-        <a href="https://git.dpolakovic.space/?p=mars-clock;a=blob;f=mars-clock.jar;h=2460a6a73d6994cad06b76d4e9dd862eb4bc75c6;hb=refs/heads/master">Download</a>
+</p>
+<p>
+<center>
+<a href="https://git.dpolakovic.space/?p=mars-clock;a=blob;f=mars-clock.jar;h=2460a6a73d6994cad06b76d4e9dd862eb4bc75c6;hb=refs/heads/master">Download</a>
         (12.7kb) /  
-        <a href="https://git.dpolakovic.space/?p=mars-clock;a=tree;h=refs/heads/master;hb=refs/heads/master">Source code</a>
-        </center>
-      </p>
-      <br>
-      <br>
-      <hr>
-      <p>
-          <i>
+<a href="https://git.dpolakovic.space/?p=mars-clock;a=tree;h=refs/heads/master;hb=refs/heads/master">Source code</a>
+</center>
+</p>
+<br>
+<p>
+        What about other celestial bodies in the Solar System? All relatively good 
+        colonization candidates have a problem adopting a customized timekeeping 
+        format due to their vastly different synodic rotation periods compared to 
+        that of Earth. Homo sapiens are biologically programmed to function on a 
+        24–26-hour day. Therefore, it is much easier to implement the classic 
+        Gregorian calendar with a 24-hour day and disregard the actual daylight 
+        period (especially since the thin atmospheres and natural luminous intensity 
+        would require artificial lighting anyway).
+</p>
+<p>
+        However, it is important to keep track of local daylight duration for technical purposes, 
+        such as photovoltaic system management, energy conservation during spacewalks, 
+        or monitoring surface temperature. Nasa is actually working on their custom timekeeping format
+        for future Moon missions. You can read more about it
+<a href="https://www.nist.gov/news-events/news/2024/08/what-time-it-moon">here</a>.
+</p>
+<br><br>
+<hr>
+<p>
+<i>
           Mars clock is distributed WITHOUT ANY WARRANTY; without even 
           the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
           PURPOSE like aerospace engineering, tax payments and/or time travel.
-          </i>
-      </p>
-      <br>
-           </main>
+</i>
+</p>
+<br>
+</main>
 
-    <!-- footer  -->
-    <footer class="footer">
+<!-- footer  -->
+<footer class="footer">
     Copyright <?php printYear() ?> David Polakovic - 
     Publications on this domain are licensed under
-    <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>.
-    <br>
-    This site uses no client side scripting. The source code is available
-    <a href="https://git.dpolakovic.space/?p=my-website;a=tree">here</a>
-    under
-    <a href="https://www.gnu.org/licenses/gpl-3.0.en.html">GPLv3 license</a>.
-    </footer>
-    <br><br>
-    
-  </body>
-  </html>
+<a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>.
+<br>
+    This site uses client-side scripting. Please, read the source code
+<a href="https://git.dpolakovic.space/?p=my-website;a=tree">here</a> for more information.
+</footer>
+<br><br>
+</body>
+</html>
\ No newline at end of file
diff --git a/ro.php b/ro.php
new file mode 100755 (executable)
index 0000000..3217937
--- /dev/null
+++ b/ro.php
@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=600, initial-scale=1">
+    <title>dpolakovic.biza</title>
+    <link rel="icon"         href="./Pictures/dot.png">
+    <link rel="stylesheet"   href="./Styles/styles.css">
+    <?php require_once('./php/config.php'); ?> 
+    <link rel="author"       href="mailto:email@dpolakovic.space">
+    <meta name="description" content="personal website and git server">
+  </head>
+  <!-- 
+    How did you get here???
+  -->
+  <body>    
+    <!-- show pictures (banner) on top of the page -->
+    <div class="banner">
+      <p>
+             <img id="toggleImagedpo" src="./Pictures/dpolakovic.png" alt="simple">
+             <img id="toggleImageDot" src="./Pictures/dot.png" alt="website">
+        <img id="toggleImageSpace" src="./Pictures/space.png" alt="website">
+      </p>
+      <script src="clicky-images.js"></script>
+    </div>
+    
+    <!-- navigation bar -->
+    <nav class="nav-bar">
+    <ul>
+        <li><a href="https://www.dpolakovic.space">Iq</a></li>
+        <li><a href="https://www.dpolakovic.space/blog.php">Ugz</a></li>
+             <li><a href="https://www.dpolakovic.space/dir.php">Web zok</a></li>
+        <li><a href="https://www.dpolakovic.space/mars-clock.php">Zadop bira dotab</a></li>
+
+        <li><?php serverStatusRo() ?></li>
+      </ul>
+    </nav>
+
+    <!-- page content -->
+    <main class="content">
+      <p>
+       <h2> Giyo tagab </h2> 
+       <i>  Sit ac is erken in!  </i>
+       <br>
+       <br>
+       Abe rokab ela
+       <a href="./Pictures/david.jpg" class="hide-link">David</a>
+       ud al ela <i>Ro</i> ro robit 
+       iv abe rabali web <i>biza</i>. Ab neli vev ag uyid gizit, ub
+       avit ab vev, ag gizit hek camib cid iv abe ladup ta.
+       Ac eluk relidek ay iv abe ugz, abe uyil lajog git ramibaf
+       ur ac aluk eca alid ud dotac al cednob.<br><br>
+       <center>            
+           <img src="./Pictures/alien.png" alt="cool dancing alien" class="bee-gifs">
+       </center>
+      </p>    
+      <p>
+       Ab neli vev sicu jivabz, alif uf ac hib col ir ab,
+       ac elul vev E-pipac. Ab rur abe pipac-pejab lacik gizit
+       alif ab fafac kimerem in zab taf.
+       Rek ladup eb vev abaque GPG patab rubigeb ace pipalz. 
+      </p>
+      <p>
+       <center>
+         <a href="mailto:email@dpolakovic.space">email@dpolakovic.space</a>
+         &nbsp;
+         <a href="./gpg.html">Kalibev abe GPG patab</a>
+         &nbsp;
+         <a href="https://emailselfdefense.fsf.org/en/">(Avif vev GPG petab?)</a>
+       </center>
+      </p>
+      <p>
+      </p>
+      <br>
+      <p>
+       <a class="gif-buttons" href="https://en.wikipedia.org/wiki/Glider_(Conway%27s_Game_of_Life)">
+         <img src="./Pictures/glider2.png" alt="the glider">
+       </a>
+       <form action="https://www.paypal.com/donate" method="post" target="_top" class="gif-buttons">
+         <input type="hidden" name="hosted_button_id" value="FZ7CVXEDL3TY6" />
+         <input type="image" src="./Pictures/donate2.png" border="0" name="submit" title="PayPal - The safer, easier way to pay online!" alt="Donate with PayPal button" />
+       </form>
+       <a class="gif-buttons" href="https://git.dpolakovic.space/?p=my-website;a=tree">
+         <img src="./Pictures/sanehtml.png" alt="GIF button: html and php only">
+       </a>
+       <br>
+       </p>  
+    </main>
+
+    <!-- footer  -->
+    <footer class="footer">
+    Ob-rul-sob <?php printYear() ?> David Polakovic - 
+    Pipalz if alz dafz hab
+    <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>.
+    <br>
+    Al daf viv JavaScript. Sec, rur at  
+<a href="https://git.dpolakovic.space/?p=my-website;a=tree">jedac</a> is cik rocab.    
+    </footer>
+  </body>
+  </html>
diff --git a/rss.xml b/rss.xml
index 553d1e2305e673e4b3705015479509913a5d3457..da432d19a09b6f0b6feab235167e41cc998d54a3 100755 (executable)
--- a/rss.xml
+++ b/rss.xml
@@ -6,48 +6,66 @@
     <description>Some obscure thoughts caught on the Web.</description>
     <language>en-us</language>
 
+     <item>
+      <title>This site uses client-side scripting</title>
+      <link>https://www.dpolakovic.space/blogs/javascript.html</link>
+      <description>Spooky, scary JavaScript update.</description>
+      <pubDate>Thu, 5  Jun 2025 22:00:00 GMT</pubDate>
+      <image>https://www.dpolakovic.space/blogs/pics/jst.jpg</image>
+      <pos>100% 1</pos>
+    </item>
+
+   <item>
+      <title>Stormtrooper's guide to Galaxies</title>
+      <link>https://www.dpolakovic.space/blogs/star-wars-galaxies</link>
+      <description>"You seen that new VT-16?"</description>
+      <pubDate>Wed, 26  Mar 2025 15:00:00 GMT</pubDate>
+      <image>https://www.dpolakovic.space/blogs/pics/sw5.jpg</image>
+      <pos>100% 1</pos>
+    </item>
+
    <item>
       <title>The Phantom Menace is good</title>
-      <link>https://dpolakovic.space/blogs/phantom-menace</link>
+      <link>https://www.dpolakovic.space/blogs/phantom-menace</link>
       <description>An inevitable STAR WARS rant.</description>
       <pubDate>Sun, 18  Aug 2024 17:00:00 GMT</pubDate>
-      <image>https://dpolakovic.space/blogs/pics/starwars26.jpg</image>
+      <image>https://www.dpolakovic.space/blogs/pics/starwars26.jpg</image>
       <pos>100% 1</pos>
     </item>
     
    <item>
       <title>Y292B bug</title>
-      <link>https://dpolakovic.space/blogs/y292b</link>
+      <link>https://www.dpolakovic.space/blogs/y292b</link>
       <description>We're doomed! Again...</description>
       <pubDate>Wed, 26 Jun 2024 17:00:00 GMT</pubDate>
-      <image>https://dpolakovic.space/blogs/pics/bug.jpg</image>
+      <image>https://www.dpolakovic.space/blogs/pics/bug.jpg</image>
       <pos>100% 0</pos>
     </item>
 
     <item>
       <title>Reproducing the printer hack of Windows 95</title>
-      <link>https://dpolakovic.space/blogs/windows-95-printer-hack</link>
+      <link>https://www.dpolakovic.space/blogs/windows-95-printer-hack</link>
       <description>Start me up!</description>
       <pubDate>Fri, 12 Apr 2024 16:00:00 GMT</pubDate>
-      <image>https://dpolakovic.space/blogs/pics/deskjet710c.jpg</image>
+      <image>https://www.dpolakovic.space/blogs/pics/deskjet710c.jpg</image>
       <pos>100% 5</pos>
     </item>
     
     <item>
       <title>Let's play Zork</title>
-      <link>https://dpolakovic.space/blogs/zork</link>
+      <link>https://www.dpolakovic.space/blogs/zork</link>
       <description>A hollow voice says "Fool".</description>
       <pubDate>Fri, 24 Nov 2023 20:00:00 GMT</pubDate>
-      <image>https://dpolakovic.space/blogs/pics/zork.png</image>
+      <image>https://www.dpolakovic.space/blogs/pics/zork.png</image>
       <pos>100% 1</pos>
     </item>
     
     <item>
       <title>On the nature of Free software</title>
-      <link>https://dpolakovic.space/blogs/free-software</link>
+      <link>https://www.dpolakovic.space/blogs/free-software</link>
       <description>Does your synthetic colleague pose a threat to you?</description>
       <pubDate>Tue, 25 Jul 2023 20:00:00 GMT</pubDate>
-      <image>https://dpolakovic.space/blogs/pics/free2.jpg</image>
+      <image>https://www.dpolakovic.space/blogs/pics/free2.jpg</image>
       <pos>100% 0</pos>
     </item>