{"id":249,"date":"2025-05-10T18:06:41","date_gmt":"2025-05-10T18:06:41","guid":{"rendered":"https:\/\/niklouch.com\/blog\/?p=249"},"modified":"2025-07-28T18:13:13","modified_gmt":"2025-07-28T18:13:13","slug":"vague-clock-screensaver","status":"publish","type":"post","link":"https:\/\/niklouch.com\/blog\/vague-clock-screensaver\/","title":{"rendered":"Vague Clock Screensaver"},"content":{"rendered":"\n<p>I get it, it&#8217;s 2025 and nobody uses a screensaver anymore, we quite rightly prefer to put monitors to sleep with power management options when locking them &#8211; and we absolutely <strong>should <\/strong>be locking monitors when not in use.  But&#8230;<\/p>\n\n\n\n<p>I&#8217;ve had this idea for a vague clock for some time; I&#8217;m sure I saw something similar once, working mechanically, and it stuck with me.  I can&#8217;t help but feel it was a remnant of late 20th century Berlin, but I&#8217;m probably bombarding my head with the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Mengenlehreuhr\" data-type=\"link\" data-id=\"https:\/\/en.wikipedia.org\/wiki\/Mengenlehreuhr\">Mengenlehreuhr<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Clock_of_Flowing_Time\" data-type=\"link\" data-id=\"https:\/\/en.wikipedia.org\/wiki\/Clock_of_Flowing_Time\">Clock of Flowing Time<\/a> or the <a href=\"https:\/\/en.wikipedia.org\/wiki\/World_Clock_(Alexanderplatz)\" data-type=\"link\" data-id=\"https:\/\/en.wikipedia.org\/wiki\/World_Clock_(Alexanderplatz)\">Urania World Clock<\/a> &#8211; what&#8217;s the deal with <a href=\"https:\/\/www.travelbook-magazine.com\/attractions\/tourist-attractions-in-berlin-the-5-most-unusual-clocks\">Berlin and weird timepieces<\/a>?  As per usual, I digress; suffice it to say that I have an interest in odd ways of representing the time &#8211; I&#8217;d adore a genuine <a href=\"https:\/\/amzn.to\/4j7HVfa\">Nixie Tube<\/a> clock, and am tempted by one of the more artistic <a href=\"https:\/\/amzn.to\/3F2d19Q\">text-based wall clocks<\/a> if I find one at a sensible size, or if the <a href=\"https:\/\/www.vestaboard.com\/\" data-type=\"link\" data-id=\"https:\/\/www.vestaboard.com\/\">Vestabord<\/a> were to be released in a more home-oriented size, I&#8217;d totally take a look.  It&#8217;s this odd mixture of old and (at the time) new, analogue and digital, a modernity that has passed &#8211; I find it very intriguing alongside movements such as <a href=\"https:\/\/en.wikipedia.org\/wiki\/Googie_architecture\">Googie<\/a> and <a href=\"https:\/\/en.wikipedia.org\/wiki\/Moderne_architecture\">Moderne<\/a>, a desire for a nostalgia that isn&#8217;t even mine.<\/p>\n\n\n\n<p>And there&#8217;s that digression again.  Clocks, I guess people usually strive towards precision, whether it be the movements within watches or the calculated measurements used within an atomic clock &#8211; but I&#8217;ve deliberately gone vague.  Does it matter to me what the exact time is, or do I just want to know the time of day?  My grandfather, being a watchmaker and member of the <a href=\"https:\/\/bhi.co.uk\/\">British Horological Institute<\/a>, would be spinning in his <a href=\"https:\/\/www.cranfieldchurch.org\/\">grave<\/a>, but I have gone for the latter.  I&#8217;ve implemented this a few times previously, as web app, a JavaScript desktop widget, but the latest incarnation is as a Windows screensaver.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d43baea41c0&quot;}\" data-wp-interactive=\"core\/image\" class=\"alignleft size-medium wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"227\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/niklouch.com\/blog\/wp-content\/uploads\/2025\/05\/Brannigans-Screensaver-300x227.jpg\" alt=\"Brannigans Screensaver\" class=\"wp-image-254\" style=\"object-fit:cover\" srcset=\"https:\/\/niklouch.com\/blog\/wp-content\/uploads\/2025\/05\/Brannigans-Screensaver-300x227.jpg 300w, https:\/\/niklouch.com\/blog\/wp-content\/uploads\/2025\/05\/Brannigans-Screensaver-768x580.jpg 768w, https:\/\/niklouch.com\/blog\/wp-content\/uploads\/2025\/05\/Brannigans-Screensaver-720x544.jpg 720w, https:\/\/niklouch.com\/blog\/wp-content\/uploads\/2025\/05\/Brannigans-Screensaver-520x393.jpg 520w, https:\/\/niklouch.com\/blog\/wp-content\/uploads\/2025\/05\/Brannigans-Screensaver-320x242.jpg 320w, https:\/\/niklouch.com\/blog\/wp-content\/uploads\/2025\/05\/Brannigans-Screensaver.jpg 900w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div>\n\n\n<p>An odd throwback to one of my first commercial apps from 1998: a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Visual_Basic_(classic)\">Visual Basic<\/a> (a language I had to support until 2021) countdown screensaver for opening times for a bar in Crawley (<a href=\"http:\/\/www.crawleysussex.co.uk\/directory\/brannigans\">now a Chiquito &#8220;restaurant&#8221;<\/a>) &#8211; a project that was in a time before commercial Internet, so distributed on <a href=\"https:\/\/amzn.to\/43aOMOI\" data-type=\"link\" data-id=\"https:\/\/amzn.to\/43aOMOI\">1.44MB floppy disk<\/a>, required graphics that were using a lot of the space, an installer, etc &#8211; really gave me some interesting challenges around optimisation and support.  It also came with a voucher for a free drink (worth up to \u00a33.50) &#8211; which I shall assume is no longer valid.<\/p>\n\n\n\n<p>Now in 2025, those challenges don&#8217;t really exist, but I still am aware of the lessons they provided and am mindful of optimisation and distribution &#8211; funny how old technology problems still hold value.  Anyhow, it seems seems that the prevailing method for creating a screensaver in Visual Studio is a <a href=\"https:\/\/en.wikipedia.org\/wiki\/C_Sharp_(programming_language)\">C#<\/a> WinForms exe, renamed to scr. &#8211; I remembered much of the process but leant pretty hard on <a href=\"https:\/\/sites.harding.edu\/fmccown\/screensaver\/screensaver.html\">this reference<\/a>.  I have deliberately targeted Windows 10 and upwards (on an x64 platform) for distribution, because, again it&#8217;s 2025, but I believe that the code would hold true on lower versions and other platforms; I see nothing specific to my targeting within the code &#8211; just the compilation and packaging.  I have added a settings screen allowing the user to configure typefaces, colours, update frequency and movement frequency (a still screensaver is not a screensaver, quite the opposite).  It runs happily on multiple monitors and any resolution.<\/p>\n\n\n\n<p>The installer was a bit of a chore; <a href=\"https:\/\/visualstudio.microsoft.com\/\">Visual Studio<\/a> outputs a WinForms executable naturally as an exe file, but screensavers are scr files &#8211; sure they are the same thing but with an extension change, but to automatically package this up, a post-built action was needed to facilitate the renaming.  I had previously built an installer that set the screensaver as the active screensaver, as this is outside the scope of the stock Visual Studio method &#8211; but I figured that anyone installing a screensaver will know how to accomplish this, so was able to simplify the product.  So I reverted back to a stock installer with the output scr file dropped into C:\\Windows\\SysWOW64 (as is necessary for the screensaver to be registered).<\/p>\n\n\n\n<p><strong>Tip: <\/strong>If you don&#8217;t know &#8211; just press <em>[START]<\/em> and type <em>Change screen saver<\/em> to get the required dialogue.<\/p>\n\n\n\n<p>I&#8217;ll probably tinker with this more as time goes by, an am considering code re-use and refactoring the actual text calculation aspect into an API that could be used by other projects.  But for now, the code is up at <a href=\"https:\/\/github.com\/NLouch\/Vague-Clock-Screensaver\/\">Github.com\/NLouch\/Vague-Clock-Screensaver<\/a> and the compiled installer is available below:<\/p>\n\n\n\n<p><span class=\"wp-rich-text-font-awesome-icon wp-font-awesome-icon\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"download\" class=\"svg-inline--fa fa-download \" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 242.7-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7 288 32zM64 352c-35.3 0-64 28.7-64 64l0 32c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-32c0-35.3-28.7-64-64-64l-101.5 0-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352 64 352zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"><\/path><\/svg><\/span> <a href=\"https:\/\/github.com\/NLouch\/Vague-Clock-Screensaver\/releases\/download\/v1.2\/Vague.Clock.Screensaver.Installer.msi\">Vague.Clock.Screensaver.Installer.msi<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Who needs a screensaver in 2025? Nobody.  But that didn&#8217;t stop me from creating one that is somewhere between nearly useful and kinda pointless!<\/p>\n","protected":false},"author":1,"featured_media":250,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[39,40,42,12,14,37,41,38],"class_list":["post-249","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-c","tag-clock","tag-code","tag-github","tag-pc","tag-screensaver","tag-vague-clock","tag-visual-studio"],"_links":{"self":[{"href":"https:\/\/niklouch.com\/blog\/wp-json\/wp\/v2\/posts\/249","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/niklouch.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/niklouch.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/niklouch.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/niklouch.com\/blog\/wp-json\/wp\/v2\/comments?post=249"}],"version-history":[{"count":21,"href":"https:\/\/niklouch.com\/blog\/wp-json\/wp\/v2\/posts\/249\/revisions"}],"predecessor-version":[{"id":311,"href":"https:\/\/niklouch.com\/blog\/wp-json\/wp\/v2\/posts\/249\/revisions\/311"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/niklouch.com\/blog\/wp-json\/wp\/v2\/media\/250"}],"wp:attachment":[{"href":"https:\/\/niklouch.com\/blog\/wp-json\/wp\/v2\/media?parent=249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/niklouch.com\/blog\/wp-json\/wp\/v2\/categories?post=249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/niklouch.com\/blog\/wp-json\/wp\/v2\/tags?post=249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}