{"id":1440,"date":"2025-11-24T12:00:00","date_gmt":"2025-11-24T20:00:00","guid":{"rendered":"https:\/\/letsbuildroboticswithshadow8472.com\/?p=1440"},"modified":"2025-11-23T18:48:01","modified_gmt":"2025-11-24T02:48:01","slug":"a-pair-of-programming-projects","status":"publish","type":"post","link":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/2025\/11\/24\/a-pair-of-programming-projects\/","title":{"rendered":"A Pair of Programming Projects"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Good Morning from my Robotics Lab! This is Shadow_8472 and today I am covering my programming work this past month. Let\u2019s get started!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I am finding that even on the monthly cycle, I don\u2019t always finish the projects I intend to. This month, I was intending to work on my phone, but that project hit some tough truth and the story isn\u2019t ready yet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">HyperTrace<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I might as well introduce my newest long-term project, HyperTrace. It started out in October as a spectator camera for a larger Redot community project. I studied up on using quaternions to rotate a camera node to avoid gimble lock, but just as I was starting to get it under control after I was bored stiff of them, I realized I could just attach a camera to a physics object.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But once I had a camera with 6 degrees of freedom (three positional and three rotational), I started thinking about how I could make a game out of it. I figured a space piloting game was in order. I got into studying up on using Perlin noise and similar methods of making structured noise to generate a shifting cave structure to represent a hyperspace mesh for the player to navigate \u2013 preferably at high speed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The idea is that an unnamed pilot is tracing out a route through a shifting hyperspace (preferably at high speed), and if he collides with a wall, he is thrown out of hyperspace, where it isn\u2019t safe to re-enter, so he must return to port under conventional physics. If he succeeds, his fleet can instantly jump across his route. This FTL system sets the stage for a future where humanity has colonized the solar system, but is hesitant to venture out to other stars. Think Star Wars meets Space Engineers meets Monkey Ball.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So far, my best tech demo is a blue fog you can navigate at slow, careful speeds. It takes an unacceptably long<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Shell Scripting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">My services were called upon for a \u201ccomputer project.\u201d My mother had some PDF files of recipes to separate. Over the course of an afternoon, I wrote a BASH script to separate out each page in each PDF. At its heart was the program qpdf. Along the way, I tried to keep good practices like leaving comments and having checks to prevent accidental overwriting.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now, I only know a modest bit of BASH (popular Linux command line interface aimed at users), but I know enough about basic programming it was just a matter of syntax for me. But I figured I could do one better in around the same amount of time. I saved a copy of the script and its output, and I set about naming files after their contents, identifying+recombining second pages, and sorting out charts, and numbering repeats (some duplicate recipes had changes).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But for every hour I spent working out a feature, I figured I spent another debugging edge cases. Several recipes had BASH control characters in their titles like *, &amp;, and \/. I preferred to use special handling of strings, but in the end I sanitized \/ as \u00f7 and * was removed entirely. This additional work extended the project to a total of three days.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Closing thoughts<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">My goal with Hypertrace is to publish it to Itch.io or similar platform on a donation basis. And before I get past more than a couple tech demos, I\u2019m going to want a version control server in my homelab just in case something happens to my laptop. While I really want to think ahead in terms of security, I know I don\u2019t know enough to make an informed decision about the utility I need now.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Final Question<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What Git setup do you recommend for a homelab?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Good Morning from my Robotics Lab! This is Shadow_8472 and today I am covering my programming work this past month. Let\u2019s get started! I am finding that even on the monthly cycle, I don\u2019t always finish the projects I intend to. This month, I was intending to work on my phone, but that project hit &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/2025\/11\/24\/a-pair-of-programming-projects\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;A Pair of Programming Projects&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_forum_subforum_count":0,"footnotes":""},"categories":[1],"tags":[300,214,422,299,421],"class_list":["post-1440","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-bash","tag-homelab","tag-programming","tag-scripting","tag-shell"],"_links":{"self":[{"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/posts\/1440","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/comments?post=1440"}],"version-history":[{"count":1,"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/posts\/1440\/revisions"}],"predecessor-version":[{"id":1441,"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/posts\/1440\/revisions\/1441"}],"wp:attachment":[{"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/media?parent=1440"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/categories?post=1440"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/letsbuildroboticswithshadow8472.com\/index.php\/wp-json\/wp\/v2\/tags?post=1440"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}