I Built a Model Telegraph

Good Morning from my Robotics Lab! This is Shadow_8472, and today I am building a model telegraph. Let’s get started!

The First Telecommunications

The electric telegraph was invented not long after the discovery that electricity and magnetism were two faces of the same fundamental force of nature. While the image of someone tapping out a message in Morse Code may involve the more iconic piece of hardware –the key– the real heart of the technology is located in the sounder: an electromagnet controlled from miles away. This was what powered the first ever near-instantaneous telecommunications networks crossing America and later the world.

Only limited by the speed of an operator and final delivery, a message from the front lines of the American Civil War could reach Abraham Lincoln in hours or minutes instead of potentially days. It put the Pony Express out of business almost before it got started. It remained unchallenged until Alexander Graham Bell invented the telephone by sending enough information over the wire to reconstruct a human voice – and in fact, smartphones and other personal computing devices still contain the humble electromagnet to deliver convert electrically encoded messages into sounds we can understand.

3D Printed Telegraph Key and Sounder

This project was sparked a post by Mattosx on instructables.com[1]. I’ve already spoken about the issues I had printing this project. Between all the totally failed prints, a case of broken filament, and the slightly peeled pieces, I am lucky to have two sets of parts, though some may need reprinting.

Researching a Group

I have always been at least passively curious about learning Morse. I started seriously looking into it this month. Who all still uses dots and dashes to communicate? Ham radio operators, mostly. I neither have the equipment nor the desire to get the license I would need before participating in clubs using Morse over CW (communications waves).

While musing that I might connect my telegraph over the Internet, I came across Morse KOB on GitHub, apparently the only software tool out there for such a purpose. I reached out to Ed Silky, the only developer I could find contact information for. I figured I might as well so I eventually have a point of contact by the time I finish the Instructable. He responded by the next morning.

Ed shared a wealth of information I had only started piecing together. He called my attention to a critique in the Instructable’s comments, that the sounder doesn’t signal the end of a dot/dash clearly as or distinctly from the beginning of one. Ed warned, “Also, be aware of the differences in the alphabet between American (Landline/sounder) and International (Shortwave/tone / Light) code:” and listed eleven characters and all ten digits with their differing encodings; the earlier American Morse features such things as intra-character spaces and extended dashes – making a properly functioning sounder crucial to understanding American Morse in particular [2].

Assembling the Key and Sounder

Mattosx’s Instructable looks great… until you’re actually part way into assembling the thing. The first red flag is a privated video titled “3D Printed Telegraph Sounder Video” with no written instructions outside the parts list.

The Instructable I’m following is crippled, but I’m limping through it. The 3D modeling isn’t the cleanest on a couple parts – and in fact is missing a piece on closer inspection. I had to creatively chop the parts apart in Slic3r to get them to fit on my damaged bed. Without that video on the sounder assembly, we had to guess at the size of magnet wire, what direction the disks were pointing (in or out), even what order to assemble the different parts in. It’s an interesting idea to make the sounder handle its own electromagnet, but that optional part is unapproachable without any experience working with circuits.

My father and I wound the electromagnet over several sessions, with the internals getting progressively less tidy as mistakes compounded upon each other. By the end, I was just trying to fill in low spots. We hooked it up to two D cell batteries by hand and nothing. We tried a multimeter, but that turned up busted, so I’m left with a project to continue some time in the future.

Takeaway

Based on my incomplete attempt to build this thing, here are my recommended modifications (note that I have not actually tried these yet):

  1. Install magnets, using sandpaper to make the holes a little bigger if need be.
  2. Screw in and wire up the key base before installing the key.
  3. For the sounder electromagnet, search out some sort of spool winding tool to print.
  4. Start with the nubs facing outward instead of inward.
  5. Dry fit the spool so the upper plate lines up with the tops of the base’s posts.
  6. Use a power screwdriver to grab the screw right where the upper plate would otherwise land.
  7. Once you have the electromagnet wound, assemble the top of the sounder.
  8. If all the screws are so loose they fall out, use a snip or few of magnet wire to crowd the screw hole (untested, but this might be a good use for any lines of filament extruded as part of bed leveling prints).

This was my first larger monthly project. It didn’t meet my personal deadline of having a working model to post today because I failed to plan. I only had magnets in hand with a week to go, and I didn’t leave myself any time to diagnose problems as they came up. I now have another project to cycle through as time allows.

Final Question

Have you ever made an electromagnet by hand before? I look forward to hearing your answer in either the comments below or on my Discord server.

Works Cited

[1] Mattosx, “3D Printed Telegraph Key & Sounder,” instructables.com, (no later than March 12, 2019 [3]). [Online]. Available: https://www.instructables.com/3D-Printed-Telegraph-Key-Sounder/ [Accessed April 25, 2022].

[2] E. Silky. “Re: MorseKOB,” “Re: Telegraph Build,” Personal emails (April 7, 2022 to April 22, 2022).

[3] T. Nardi, “Old Meets New In 3D Printed Telegraph,” hackaday.com, March 12, 2022. [Online]. Avalable: https://ieee-dataport.org/sites/default/files/analysis/27/IEEE%20Citation%20Guidelines.pdf [Accessed April 25, 2022].

3D Printing: Trial of Errors

Good Morning from my Robotics Lab! This is Shadow_8472 with a side project of the week. Let’s get started!

I have been 3D printing parts for this month’s large project, but things haven’t been easy.

Keeping my print bed level is probably chief among my challenges. I keep having adhesion issues from the bed being too low and squishing issues where there’s no room between the print head and the bed to lay down plastic – sometimes on the same piece. I’ve been using a pattern that prints concentric squares a test, but sometimes I follow up a successful test with a production print that only leaves a little residue so thin it doesn’t scrape up properly.

Even when the first layer sticks, prints can still peel part way through the print. One piece came out mostly fine except for one malformed corner that may be fine. I’m re-printing because I’m after a second set anyway.

The most exciting failure was when I had three black pieces successfully on their way, and I noticed when there was already a sizable gap between parts and print head. I aborted the print. The filament was stuck; it wouldn’t go in or come out, even at temperature.

I took the print head apart, I found the chewed up filament almost broken off. It refused to come out, even when I yanked on it with the pliers. I wound up trimming what I could get at and ramming the rest through with with an Allen wrench. I never got a positive identification on the clog, but as the plug gave way all at once, I remembered a fuzzle I spotted riding on the filament, and I thought nothing of at the time. I followed it up with a little cleaning filament for good measure.

I took the opportunity of the disassembled print head to at least check my flow rate. The machine wanted the extruder to be at least 160 degrees C. I advanced my e-steps ten times and got a 100 mm segment, give or take a millimeter. Assuming it was trying to advance a centimeter at a time, my printer is healthy in that regard without me having to do anything.

Final Question

What is your most entertaining manufacturing mishap?

I look forward hear your answers on in the comments below or on my Discord server.

Site Maintenance: Forums and Privacy Policies

Good Morning from my Robotics Lab! This is Shadow_8472 with a side project of the week. Let’s get started!

BbForums

This week, I took another look at this website. If I’m going to promote open source and privacy respecting software whenever possible, I best be prepared to lead by example. WPForums Lite was the forums plugin I was shepherded into along with Monster Insights and OptinMonster, two plugins I do not feel OK running. As effective as I hear they can be, it’s not worth my principles. I’m looking into alternatives.

Finding an analytics plugin is proving tricky – a side project for another time. Long story short: the most promising alternative needs me to arrange off-site data storage.

Forums, on the other hand, are now open for business. I’m currently working with bbPress, a forums plugin for WordPress developed by the same team using the same open source principles. You may have also noticed a new navigation bar I needed to expose a test forum. I expect it to change as I learn more about web development. Special thanks to Commander Stryker for helping me bug test it.

User Data Privacy

Since I started this blog, legislation to regulate the collection and sale of user data has been passed in the EU (GDPR) and California (CCPA). While I believe neither applies to me specifically because I’m not advertising in the EU and am not selling anything, respectively, I want to build my site to respect the principles of privacy anyway.

This week also saw me working over the privacy policy with another plugin. I believe I got it passable, but it’s still subject to further development.

Final Question

Do you know of a good open-source, privacy-respecting analytics plugin for WordPress?

I look forward hear your answers on in the comments below or on my Discord server.

A Brief Announcement

Good Morning from my Robotics Lab! This is Shadow_8472, and today I would like to talk. Let’s get started!

I want to interact with my readers and grow the community. That’s why I’m launching Shadow’s Robotics Lab on Discord, where you can talk about your tech projects, exchange help with Linux support, or just hang out.

On the flip side, I’ll be saving my main projects for the last Monday of every month with side projects other weeks.

If you want the nitty gritties about all my projects as I work on them, then join Shadow_8472’s Robotics Lab on Discord.

Final Question

How long have you been a reader?

I look forward to reading your answer on my Discord server.

Joining the Let’s Encrypt Help Forum

Good Morning from my Robotics Lab! This is Shadow_8472, and today I am finding help towards getting an SSL certificate from Let’s Encrypt. Let’s get started!

The Time to Get Help

Manually setting up an HTTPS secured service from your home is not beginner level by any stretch of the disillusioned imagination. In many ways, it reminds me of installing Linux for the first time. The system as a whole is irreducibly complex; multiple project-sized milestones rely on each other for usefulness, so I won’t see any results basically until I’m done.

So far, ButtonMash is running Rocky Linux 8. I have NGINX installed, but it can’t be properly configured to serve HTML over HTTPS until I have an SSL certificate. SSL certificates are available for free from Let’s Encrypt, but the process for getting and renewing them is reportedly labor intensive once you do know what you’re doing. ACME clients (Automatic Certificate Management Environment) can automate this work, but the installation options alone are exhaustive.

Joining Let’s Encrypt’s Community

I have made a good faith effort to self-educate, but I’ve slowed down to the point where I feel like I’m posting the same thing week after week with dribbles of progress. The documentation has far exceeded my attention span. It’s time to look for help.

Let’s Encrypt –like many well-respected technical projects– has a designated community support forum [1]. It’s just not on Discord or some other platform I’m already on. After weeks of self-research, I made an account and started looking around.

Unsurprisingly, the people I found in such a niche community are more knowledgeable about all things related to security certificates. The more I talk about my project there, the more important concepts are brought to my attention. For example, I keep coming across terms I keep seeing, but have so far remained clueless about. When those come up in conversation I look them up and only ask if I can’t find the answer in a reasonable amount of time.

3D Printing Corner

My brim decision is really backfiring now. I might even say it’s a worse idea than using a raft at this point. For what it’s worth, I made the time to glue a couple of those calibration cubes together. One drop, then press together. My father used a pencil on Sonic during a final dry fit to help for gluing the two halves together.

Side Project

My mother’s new sewing table has a fancy elevator platform to hide away her machine. This week, she got a power cord stuck in its mechanism where a couple clips jammed against it and each other. I was quick to find a 3D printed solution to keep it from happening again once we dislodged it[2]. I settled on a design aimed at holding phone chargers, but it was about the right size when I scaled it up to 200% and told it to use solid infill on the clip. My father and I installed it under the elevator and used a couple Velcro straps to lock the cords in so they don’t fall out.

Takeaway

I have never been excited about mastering a network backbone. It’s been one of those things that always feels simple enough to reach for, but complex enough to challenge my perseverance. I’m glad I’ve found a place that seems friendly enough.

Final Question

Certbot is the preferred ACME client, but there’s a list with tens of them on it [3]. Someone name-dropped Caddy, but I’ve been studying NGINX. Have you gone through Let’s Encrypt before? If so, what ACME client do you use?

Works Cited

[1] Internet Security Research Group, community.letsencrypt.org, [Online]. Available: https://community.letsencrypt.org/ [Accessed Mar 25, 2022].

[2] TJH5, “Cable Holder,” thingiverse.com,Aug. 13, 2017. [Online]. Available: https://www.thingiverse.com/thing:2481258 [Accessed Mar 25, 2022].

[3] Internet Security Research Group, “ACME Client Implementations,” community.letsencrypt.org, Mar. 6, 2022. [Online]. Available: https://letsencrypt.org/docs/client-options/ [Accessed Mar 25, 2022].

NGINX: Project Redirect

Good Morning from my Robotics Lab! This is Shadow_8472, and today I am configuring NGINX on my home server, ButtonMash. Let’s get started!

NGINX Reinstall

I sat down this week to work on NGINX, and any tutorials I tried –even ones specially recommended to me– kept referencing files that didn’t exist. Staff member Pokey on the bitmerge Discord server suggested I check my version. The Rocky Linux 8 repositories are distributing version 1.14.1 whereas the latest version is 2.21.6 on their website [1]. A little further research revealed that one of those noted differences –directories for sites-available and sites-enabled– are commonly packaged with NGINX and not part of the upstream codebase.

A little research turned up a quick article on ServerDiary [2]. Turns out NGINX maintains repositories with stable and mainline releases of their software for Red Hat and CentOS – the later of which I am trusting to stay open for the time being. The instruction-by-instruction directions were clearly, but briefly described, and while I followed their instructions to enable the mainline release, I’m trying to admin ButtonMash as if it were a production environment: so I reverted to the stable version. In addition to the commands found on ServerDiary, I worked out this one for myself after trying to enable nginx-stable:

sudo yum-config-manager --disable nginx-mainline

Technology Backbone

I tried configuring NGINX to blindly pass HTTPS packets from incoming IP, but it was being more trouble than it was worth. I kept getting SSL_ERROR_RX_RECORD_TOO_LONG, which comes up when a browser expecting to make an HTTPS connection instead is offered an HTTP one – so far as I can tell.

There’s probably a way to convince it to cooperate. My productive time is probably better spent focusing directly on my technology backbone though. I expect I’ll learn the same skills at about the same time either way, but I won’t be redoing the project three or four times this way.

I registered a domain name from NameSilo. New interface on some pages aside, the process was as straightforward as the previous times I’ve done it. The real trick is when I master subdomains and I can use the same domain name for services intended for family use.

Going forward, my next immediate step is obtaining a security certificate from Let’s Encrypt with that domain name. Only then, will I have what I need to set up NGINX properly.

3D Printing Corner

Work here was slow again. For anyone not in the know: I printed a Sonic figure split front and back. I intend to glue and paint it. To practice, I made myself eight calibration cubes to glue together. I managed to locate some sandpaper and I sanded down the flat surfaces of four of the cubes.

Once I had a feel for how the PLA was reacting to being sanded, I sanded Sonic and worked on that brim I totally shouldn’t have printed. The two halves were more flush in a dry fit.

Side Projects

My father’s Debian install keeps freezing, only opening up when he sends a system request to kill everything in his session, returning him to a login screen. As this is an infrequent occurrence, I taught him a little about SSH. I had him sit down at DerpyChips, and after telling Derpy to forget about the Mint install at the same IP, I had my father log in remotely and practice using top to find a process ID (PID) and kill problematic programs with a little more finesse. While I’m not looking forward to the next crash, we have practiced for when it happens and I have a good feeling about this new procedure.

My laptop power cord has been slipping away from its 19.5 volt side, exposing the three, jacketed wires inside it. As much as I’d liked to have pushed it back up, wires don’t have good compression strength. Instead: I pinched the cord half way to the transformer and ran my fingers toward the end, stretching the outer case, encouraging my cord into a more presentable condition.

A while back, we made our own network cable to serve ButtonMash and now GoldenOakLibry. It’s been dropping connection this week. I was able to convince it to come back online for a few days, but almost as if it knew I needed to pad my post, it fizzled again, seemingly for good. I used a connectivity tester, and it failed a few connections. We found one that happened to be long enough, and I was able to reach ButtonMash. GoldenOakLibry needed to be disconnected and reconnected from the local switch before it came back online.

Final Question

I have several large tasks with no immediate payout expected. These projects will likely be research -heavy, making for less interesting reading. What kinds of side projects should I work on?

Works Cited

[1] F5 Networks, Inc. nginx.com, [Online]. Available:https://www.nginx.com/. [Accessed: Mar 21, 2022].

[2] Serverdiary, “How to install latest official Nginx on Centos 8 / RHEL 8”serverdiary.com, [Online]. Available:https://serverdiary.com/linux/how-to-install-latest-official-nginx-on-centos-8-rhel-8/. [Accessed: Mar 21, 2022].

Misadventures in Studying NGINX

Good Morning from my Robotics Lab. This is Shadow_8472, and today I am getting lost while exploring SSL certificates… again. Let’s get started!

Installing NGINX

At last count, I had about six or seven projects I should hook into it, but most of them are on hold because I don’t want some stranger finding his way into my home network and rearranging things without permission. I set up Vaultwarden to manage its own HTTPS connections, and I learned a lot about what SSL is and how it works. But this is not a recommended configuration and I want to learn the proper, more advanced way of doing things.

I ignored plenty of guides’ advice on my path to a Vaultwarden server. They recommend some sort of ingress controller, and I’m currently exploring one called NGINX. I’ve come across quite the debate as to whether to use a container or install it native. The tutorials for the container edition all use Docker, but I’m using Podman and I’m uneasy about root permission nuances between the two projects making things needlessly more challenging, so I installed the package on ButtonMash.

sudo dnf install nginx

To confirm installation, I enabled the web server with a few systemctl commands and opened a port in ButtonMash’s firewall. NGINX now proudly displays its welcome page.

A Web of Dependencies

NGINX does not lend itself to solo study. It is a do-everything solution for networking. With so many use cases from serving HTML pages to load balancing containers, I have spent weeks pouring through tutorials without finding a keystone lesson for my use case. Some of that time was spent looking into some sort of web interface I falsely believed was included. See NGINX Proxy Manager vs. NGINX for details. I will stick with bare NGINX if for now mainly because NGINX Proxy Manager’s website ironically has an expired SSL certificate.

I got lost researching what I would need for a project this week. Proper HTTPS for Vaultwarden is a good choice of target. That will require an SSL certificate, and that means Let’sEncrypt. An SSL certificate requires either a domain name or a subdomain, so that means arranging one of those.

Somewhere along the way, I got lost and visited this blog’s host cPanel in the interest of moving its SSL to Let’sEncrypt. The experience was unexpectedly surreal, like I was paging through a book written in a language I’m trying to learn – there was a flood of jargon, but the bits I recognized made for moments of satisfaction.

3D Printing Corner

I want to glue the Sonic figure I printed, but I’d just as soon have some experience with gluing large, flat surfaces together before I go smashing a larger project together and hoping it sticks (literally). I had the idea to print up eight calibration cubes for practice. I tried some lower infill settings and got inferior, but adequate results. My biggest complaint was how many tries it took for the overall first layer. I had to settle with a couple curling corners, but a perfect print wasn’t the goal anyway. Gluing will have to wait until next week though.

Side Project

Also on the topic of 3D printing, my mother has been into quilting as of late and she commissioned some more bias tape makers like the ones I made during the early stages of the pandemic. I found what I thought was the model on Thingiverse and its description linked a revision that folds it in half again. I used a spreadsheet to scale the model to a couple different sizes.

Takeaway

I feel like I am assembling a jigsaw puzzle without the box. Each piece must be studied and understood before placing it. Half the challenge is knowing what pieces need to be in place before it’s time to begin studying others. Placing more than one at a time is very difficult, but the HTTPS piece interlocks with so many others, its ecosystem doesn’t lend itself to a project of the week format of study like what I have going on here.

Final Question

The most important lesson in tech is to know where to seek help. I had to seek out a new
Discord server familiar with NGINX this week when I should have looked them up a week ago. How long does it take before you look for specialized help?

Exporting a Discord Server

Good Morning from my Robotics Lab! This is Shadow_8472, and today I am learning about Discord Chat Exporter so I can archive an old role play I was a part of in 2017. Let’s get started!

Vanishing Data Only Hosted Elsewhere

Discord is a communications platform built around the idea of [guild] servers, channels, and posts. Guild servers are exclusively hosted by the parent company, leaving you relying on them to maintain their physical servers. While they provide easy access to chat history going back years and years, they do not provide you with the tools to extract that history in the case you are one day unable to access the service.

In around the middle of 2017, I met a very good friend on PonyvilleSquare forums. He was advertising a My Little Pony role play I joined. We moved the game to Discord at my request. It was a good thing too, because the forums were defunct within a week or two. I lost a minor detail or two from character creation, but we went on to have one of the best games I’ve ever been a part of. I liked the story well enough to go through it again, polishing it into more of a novel format with all the original players’ blessings. It’s always bothered me though that should Discord either go out of business or deplatform me for wrongthink.

Downloading a Server

Discord is rolling out some new rules at the end of the month, and I don’t know if either everyone in my circle of friends will still be welcome when it hits. Ideally, we can transition to using a decentralized platform, like how e-mail operates, where we can be in complete control our live chat server. [Matrix] fits my criteria for this end goal.

What better way to learn about Matrix than to find some tool to migrate a server I don’t want to lose? The Discord bot API only needs to see a server’s history, and it shouldn’t be impossible to record that data into a format Matrix clients can accept. In fact, one of the key talking points of Matrix is its ability to bridge to one or more chat platforms while being as inconspicuous as reasonably possible per platform. However: of the bridges I found, the only one that mentioned history listed it as not-a-feature. If there is a tool to directly migrate from Discord to Matrix, I either didn’t find it or didn’t recognize it.

Instead, I settled with another tool to archive our MLP role play: Discord Chat Exporter[1]. Discord Chat Exporter is a bot that reads Discord channels and reproduces them in a variety of static formats including HTML, plaintext, and a couple others. I found their OCI “Docker” container worked very nicely. Their documentation is clear, though I could nitpick how it didn’t like where I put the –media flag on my first try to download embedded pictures and similar.

3D Printing Corner

I’ve been trying to print a figure of Sonic I found on Thingiverse for a few weeks now. I was having a lot of trouble with the first layer sticking in previous weeks, but I finally added a bed-leveling print to my routine. Sonic himself is split front to back and arranged so he only needs minimal supports. Along the way, I tried slowing the first layer way down and adding this ugly brim I’m having trouble removing. I’ll get it next week when I glue the halves together and sand it.

Side Project

My earliest working NFS automounts were entries in the File System TABle (fstab) for my laptop. Later, I learned to mount file shares as needed with systemd. My laptop spends time off my home network, and without a timeout in my settings, I’m left with extended boot times and programs hanging until I get home and they can finish saving. Today, I copied the relevant files over to a directory on GoldenOakLibry and on over to my laptop, adding a 5 second timeout as suggested in the awesome tutorial I originally followed by Ray Lyon on Ray Against the Machine [2].

Takeaway

Imperfect solutions that achieve most of your goals are often a reasonable compromise when a full solution is a lot harder to research or even get around to doing. I’m glad I now have my MLP game properly downloaded, but even better would be the ability to import everything from a Discord server on over to Matrix.

Final Question

Do you know of a tool or set of tools that can migrate a Discord server to Matrix?

Works Cited

[1] Tyrrrz, “DiscordChatExporter” github.com, [Online]. Available: https://github.com/Tyrrrz/DiscordChatExporter. [Accessed Mar. 7, 2022].

[2] R. Lyon, “On-Demand NFS and Samba Connections in Linux with Systemd Automount,” Ray Against the Machine, Oct. 7, 2020. (Edited Aug. 26, 2021). [Online]. Available: https://rayagainstthemachine.net/linux%20administration/systemd-automount/. [Accessed Mar. 7, 2022].

My Discord Bot Understands Strange Dice

Good Morning from my Robotics Lab! This is Shadow_8472, and today I’m coding Discord dice bot to a practical state. Let’s get started!

Discord Bot Communication Skills

When last I wrote about this bot, I described a custom development environment: a custom OCI container with Python with Discord.py installed and a directory mounted from the host machine. To update the bot, I save the new source file from the host and restart it from within the container.

Programming is boring to describe, so I’ll spare myself writing all the details. Long story short, I needed to translate user requests into a form the core function understood. I used Regular Expressions (Regex) to both separate intended inputs from potential garbage and to extract the kind and number of dice to roll. regex101.com [1] was of great help in testing these expressions.

On one minor note: I got the bot into a Git repository, but I am nothing but a bumbling beginner.

My goal for next time is to produce a container with my code internalized. I’m also scheming something that will let my group know when I’m “playing around with the source code” or the bot is running from within a production container.

Commenting System

Any good program has comments left by its developer – notes for future work on the project. Wise use of comments can speed up development.

by reminding a programmer where work left off or clearly marking off major sections. Working on the command line with the Nano text editor, colors are nicely highlighted, but with all the comments I’m leaving, a simple note left to myself looks no different than commented out code blocks yet to be implemented or scheduled for deletion.

#A simple comment is useful for a quick note.

Basic comments can be anything from programmer notes on how some code works to incomplete or defunct chunks of code that shouldn’t be executed yet/anymore. Programmers must use them unless the objective is for God alone to know how their programs work.

###################################
#A title marks out major sections.#
###################################

Note: In the editor, I’m using “verse” formatting to represent code. In a fixed width text like you will find in a terminal, the lines should be the same length.

Editors that color code parts of your code are nice, but source files begin to look the same after they’re several screens of scrolling. Marking off large groups of functions keeps them organized like chapters in a book. I like to use spam a bunch of comment characters (# in Python) for extra visibility while flipping between places in the code.

################################################
#A broken pattern marks out scheduled changes.#
The quick, brown fox jumped over the lazy dog.
The little dog laughed to see such a sight.
################################################
#The quick, brown fox got distracted.
#The cow jumped over the candlestick.
################################################
################################################

I’d be surprised if I’m the first to invent a way to partition off major blocks of code for redevelopment. Not only can I quickly revert to old code without much thought, its a landmark for showing which sections are actively being worked on.

3D Printing Corner

It’s been a few weeks since I said I wanted to print something each week. This week is no different, but at least I tried.

Gluing a 3D printed object together from smaller parts allows you to overcome print volume limitations of your printer, a valuable skill to have. As I was browsing Thingiverse for something Sonic the Hedgehog related to print, I found a model of Sonic someone split front to back to require almost no support material.

Slic3r was something else. I had a difficult time getting both front and back on the plate at the same time while avoiding the damaged section. Auto-generated Supports ended up in more places than they needed to be. Sonic’s pupil even needlessly generated one with a corner sticking out of his face. I had to shift the halves around multiple times to accommodate the skirt within the print area while still avoiding the damaged spot in the middle – a challenge, but one I accomplished nonetheless. Setting supports to snug cleaned up most wayward supports, but I had to paint on support blockers around Sonic’s cuffs and fingers.

Optimizing for few supports in this way has a major tradeoff: a much more difficult first layer. I didn’t have the patience, so I left the project for another week.

Takeaway

Basic projects are often less exciting than any creative techniques devised to work on them.

Final Question

How have you used comments in creative ways?

Work Cited

[1] F. Dib, regex101.com, [Online]. Available: https://regex101.com/ [Accessed Feb.

28, 2022]

Alternative 3D Slicing Arrangements

Good Morning from my Robotics Lab! This is Shadow_8472, and today, it’s been a busy week. Derpy needed work, but I still wanted to 3D print. Let’s get started!

New Computer Screen

A couple weeks ago, Derpy’s monitor failed. I pulled the graphics card and brought in a cathode-ray tube based monitor from the garage. Integrated graphics aren’t good enough for slicing 3D prints though.

Between bugging out from construction noise next door this week and taking evenings off to recover, a good chunk into the week passed before I made a move to switch back. My father and I took the opportunity for a deep dusting. With the graphics card physically removed, it wasn’t much more hassle to remove the outer cover… The radiator decoupled from the GPU chip in the heart of the graphics card, and we had couldn’t find any thermal paste to put it back together properly.

With some electrically non-conductive paste on order, I felt my desk was overdue for a cleaning, Special thanks to my whole family for helping out in some capacity or another. I sorted the stuff into Keep, Trash, and ??????!. Keep stayed with the desk, Trash got sorted for disposal, and the rest tagged for dispersal according to where it belonged. My father and I further took the opportunity to remove my monitor shelf, dust the desktop thoroughly, and polish it.

I also addressed the cable management situation. With no electronics at Derpy’s workstation, I was free to swap out the power strip for something with a bit longer of a cord (I swiped it from the 3D printer, which had plenty of cord). As I re-assembled my desk, I was sure to tuck my cables at least somewhat out of sight.

A Light Mode Program on a Dark Mode Theme

This section on down to the side project started off as the combined 3D printing corner/side project sections before it grew to half the post at one point.

With Derpy down for service this week, I couldn’t 3D print. Instead, I explored the option of using PrusaSlic3r on my Manjaro workstation.

My graphical package manager presented me with three versions: an out of date version lacking features I’m after from official repositories, an AUR (Arch User Repository) beta version from git, and one AUR entry with a good version number but included GTK-2 in the name. I chose the GTK-2 one, and it appeared to work perfectly, save for that it defaulting to light mode.

There was no dark mode override in the options. The documentation said Linux versions of Slic3r hook into the global theme, which I most definitely have set to dark. No matter how much I played KDE’s themes in System Settings, Slic3r refused to play nicely. I tried switching to the AUR version labeled git, but it didn’t even compile (two attempts).

Assistance With Diagnostics

During research, I came across some discouraging bits about themes not always working on bleeding edge systems. I was about to give up when I brought this matter up on Engineer Man’s Discord server.

Server regular localhost took notice and suggested I install lxappearance, a theme manager designed with the LXDE desktop environment in mind. It too popped up running light mode, but was exposing its own theme selector on the Widget tab. Hitting Apply didn’t have any apparent system-wide effects until I restarted the graphical package manager into my chosen dark theme.

I rebuilt the GTK-2 version of Slic3r, and it greeted me with dark mode. During the 70 minute wait though, I researched the why of the situation. I pinned the culprit to GTK. Aside from its association with GNOME, I had the hardest time piecing together its purpose with certainty. I figured it was some incompatibility with KDE, and I was half-right.

It Works, but Why?

Lxappearance was actually my biggest clue. With both it and KDE’s theme manager open side by side, I noticed a button under System Settings > Global Theme > Application Style called Configure GNOME/GTK Application Style. It led to an unassuming dropdown menu titled GTK theme with a nondescript preview button. The dropdown had the same list from lxappearance.

Researching GTK has no shortage of results, but what does GTK do? As far as I can tell, GTK stands for GNOME ToolKit. I know KDE doesn’t use GTK at its core, so I conducted my research looking for whatever counterpart I it did use: Qt.

I ran a combined search on GTK vs Qt and learned about their combined history. Qt is to KDE what GTK is to GNOME. Qt is older, but GTK was fully opened up first and became more widely adopted. GTK and Qt serve the purpose of drawing the parts of user interfaces you use, but don’t think about – from buttons to save windows. When developers use them, they provide a unified appearance an end-user can easily configure.

Side Project (Blog Site Building)

I’ve begun research into improving the presentation of this blog. It’s hard to know where to begin. I’m working on four and a half years on the job and I have still to formalize my niche. There are blogs out there for privacy. There are blogs out there for technology and Linux. There are fewer blogs out there for home robotics and AI. This blog is all of those, to an extent. That’s why I’m consolidating my niche to Home Computing for the Privacy-Minded Roboticist. I don’t expect things to change all of a sudden, because I’m still technically covering the supporting technologies: namely Linux. But I want to aim to be doing more with actual robotics from here on.

Over the next several weeks, I intend to make small changes to the site, starting with the “About the Author” page. I’m also working on a community Discord server so we can finally get the conversation going in a place where I don’t need the patience to get WordPress forums going at this present time.

Takeaway

Even though I was out and about, I still managed to find stuff to write about. That said, modular systems can be a bit of both a blessing and a curse at times. Feature A may be implemented any number of times – each can work equally well and provide redundancy in case one project goes unmaintained/unforked, but clashing systems can lead to confusion when an end-user finds himself diagnosing the wrong backbone without realizing there are multiple in the first place.

Final Question

What do you think of my stated niche: Home Computing for the Privacy-Minded Roboticist?

Work Cited

[1] B. King, “What’s the Difference Between GTK+ and Qt?,” makeuseof.com, Feb 20, 2019. [Online]. Available: https://www.makeuseof.com/tag/difference-gtk-qt/. [Accessed Febrewary 21, 2022].