A Thought of Incomplete Towers

Good Morning from my Robotics Lab! This is Shadow_8472 with a small thought for the week. Let’s get started!

As much as I hate to admit it, scope is important when working on a project. Luke 14:28-32 bids anyone who wants to build a tower first assess its cost and compare against personal treasury. The advice truly applies to non-monetary resources as seen in the following illustration of a king going to war with an army twice the size of his own. Even if you are the only witness to the foundation you laid, incomplete projects are a constant source of annoyance when you lack the resources to complete them.

I am in such a situation in pursuing a Linux phone. Even this post is an example. I was going to observe how I probably should have focused my attention on a tablet. It’s basically just a phone without a dialer, right? Alas, as I began writing this paragraph, I figured I should do some background research on Linux tablets… If phones are wanting, tablets are even farther behind.

I’ve taken a few days to think about it. When given a choice between a phone or a tablet, the typical user will choose the phone. With the bias towards phones, limited development efforts are focused accordingly. From personal experience, I have observed how apps designed without the larger screen in mind sometimes do strange things if they even install. The same thing happening with an entire operating system is not something I’m prepared to deal with.

In other news, I’m now active on Twitter @Shadow_8472. I’m still considering my balance of priorities: digital privacy vs. free speech, so at most I’ll be adding around here is a traditional link on my socials page. However, I believe the new direction Elon Musk is taking the platform is an improvement from what it was doing prior to his buyout.

Final Question

What projects of yours would have benefited from an evaluation beforehand?

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

I Replaced My Android Keyboard and You Can Too!

Good Morning from my Robotics Lab! This is Shadow_8472 and today I have a side project of the week while I work on something larger. Let’s get started!

My journey to replace the default Android keyboard on my tablet started with the need for an up arrow. I already had left and right (a massive improvement over tap, check, and revise), but no up or down – which would be extremely helpful when using an SSH program I rarely use.

As a note to the unaware: Google collects as much data on you as it can get away with, and they use it for their own profit. Their word suggestions as you type works by sending them your keystrokes and memorizing you well enough to predict your most likely next words. Symbiotic or parasitic relationship? I don’t need this feature, and it is a privacy concern. For me, the answer is parasitic.

Switching to a new keyboard was as easy as installing any regular app. Note that I am preferring F-Droid over installing through a Play Store client. My first find was Unexpected Keyboard, a keyboard with a dark mode and four-way arrows. If only it wasn’t designed around key swiping, I’d be more than content with the ability to hold Ctrl+Shift+left/right to select text.

Shortly afterwards, I found Open Board, a fork of the AOSP (Android Open Source Project) keyboard. It too has a dark mode, but its visual familiarity despite lacking enhancements such as the left/right keys has kept it relevant to my search. My biggest complaint is that the backspace doesn’t play well with Collabora Office, an open source document editor I used this week to write about a page of fiction.

Much later, I tried out AnySoftKeyboard. Where I’ve had a chance to form a full opinion on the first two, AnySoft appears as though it could be a compromise for a “just chilling” type of keyboard. It has the left/right keys I’m so fond of, but auto-correct is a slight bit too aggressive.

Most importantly, I learned that each keyboard is handled as a separate “language” by Android. All three keyboards have the option to quickly switch to another, and that makes the goal of finding the perfect keyboard less important than defying the monopoly by straying from the gold standard for its deal breaker. My tablet is one of two operable portable devices I own with one being purely experimental. I don’t want to lose the other because I didn’t know enough of what I was doing.

Takeaway

I wish I had a pie chart data the typical smartphone collects on its user. How useful to its masters is each piece? How hard is it to mitigate each slice? The hardest part of replacing a keyboard has been finding a single one that works, and I cannot always tell right away because they often require time to explore any configuration options. For now, any issues I have with each board are not so important when I can easily access a menu to switch boards. This is more of a progress report than anything final. However, I am glad to report that I’m well on the way to a solution without breaking non-redundant functionality.

Final Question

What on-screen keyboards have you tried out?

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

My Sister’s Computer Hates Me!

Good Morning from my Robotics Lab! This is Shadow_8472, and today I am starting a series on installing Linux on my sister’s desktop. Let’s get started!

The Plan

My sister has expressed an interest in digital privacy and switching to Linux. She showed interest in installing Linux on her computer this week, and I just got a pair of new SSD’s on sale while shopping for my Arch installation, so I’m using one of those for this installation.

To the best of my experience, PopOS has been the distro of choice to use in terms of compatibility and privacy – by that I mean it has access to the Ubuntu library while System76, the company that makes it, advertises itself as being more privacy aware. While I’ve had problems with it in the past, they weren’t too difficult to sort out. It has a straightforward installer, and then their website has a selection of commands to install a preferred desktop environment. In short: it’s my favorite distro for beginners.

Hardware Installation 1

My sister left me a note inviting me to start work at my convenience, only for a Windows update to pop up while her system was unattended. I got her message before it was obscured, but I still found the irony funny.

For reference, I am working with a 1TB SATA SSD. About as soon as I had the case open, I was scavenging the technology pile for a SATA cable and a power connector from the supply I replaced a while back. The computer screws I found gave me too much trouble attaching it to her computer’s bracket, so I left it loose, later securing it with electrical tape several hours and “learning moments” later.

PopOS Install 1

Computer motherboards have what’s known as firmware, often referred to as BIOS, though recently replaced by UEFI. For the rest of this post, BIOS refers to the old, limited firmware exclusively. My sister’s computer boots with UEFI, and it was displaying on her WACOM graphical tablet where I missed it for playing around with HDMI connections on the graphics card so I could override boot to a USB drive with the latest PopOS install media.

I forget how, but the tablet-monitor went unnoticed until it was the sole output with the installer. I took special care to make sure I was installing to the blank drive, and not over her Windows installation. This was especially important because the system already had a 1 TB hard drive. After that, I put on the KDE desktop environment.

A minor, still-unresolved nuisance was the main monitors constantly being swapped. You can swap cables, or physical devices. Somehow, they always end up swapped. I also noticed some sort of U/I ghosting and horizontal line flickering I solved by removing the WACOM tablet entirely (it was mirrored to one screen – possibly both directions).

I finished up my first day arguing Minecraft into working (barely). I installed MultiMC and GraalVM, only for her modded world to require Java 8 (not an option at present for GraalVM). I was able to link up OpenJDK 8, which came preinstalled. I had to duck back into Windows to disable fastboot so Linux could mount the Windows drive and she can play the same world in either operating system using a symbolic link (shortcut) there. Despite Minecraft only launching around 1 in every 30-50 attempts, we were able to leave her world running “overnight” – which turned out to be only a few minutes after walking away. We found Linux in a mess in the morning. Very little worked, but it all pointed to hard drive failure. It wouldn’t even boot after requiring a forced shutdown. We ended up trying a SATA cable from an old church office computer in our stock – praise God, it cleared up the issue! It still didn’t solve Minecraft from arguing with video drivers:

java: ../nouveau/pushbuf.c:730: nouveau_pushbuf_data: Assertion `kref' failed.

or throwing SIGSEGV errors I haven’t begun to investigate yet.

All this time, I was thinking about how GRUB (Grand Universal Boot Loader) was never able to see Windows, like in the other systems I’ve dual booted. To my dismay, I found PopOS was running in legacy BIOS mode, where Windows was in UEFI mode. The two will never be able to see each other. A reinstall was in order.

PopOS Install 2

Dual booting is no joke if you don’t know what you’re doing. If it were my system, I’d have just taken the hit and accepted the need to select an operating system at the firmware-level. But no, I want an intuitive menu my sister can use. Unfortunately, this meant reinstalling in UEFI mode. To help with that, the folks at r/TechSupport pointed me to Ventoy and instructions on how to set it up with a GPT (General Partition Table for UEFI) instead of an MBR (Master Boot Record for BIOS).

I used my new Ventoy USB to reinstall PopOS, being sure to select the NVIDIA drivers version of the install disk image and choosing the more KDE-native display manager sddm over GDM3 when prompted.

UEFI is a pain to dual boot.

GRUB did not come installed this time. I tried installing grub-efi, but was never able to get it to work correctly, even after installing something for it to /dev/sdX. After much reading, I concluded that a simpler alternative to GRUB may be more suited to this application as the last of my stamina for the week depleted.

Takeaway

I thought this would be a nice, little side project done in a couple hours with a tough issue here or there. WRONG!

Final Question

Have you ever had a project fight you every. step. of. the. way?

I’m Incompatible Because Policy?!

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

I’ve been interested in having the basics of a smartphone again for a while now. I was planning on diving into Android Debug Bridge for this month’s large project, but my PinePhone showed up again after a couple years. For the unaware, the PinePhone is basically a Linux computer in the profile of a smartphone.

My PinePhone is the second edition released: it understandably has early adopter issues like slow load times and needing to about live on a charger when not in use. It came preloaded with Ubuntu Touch; while I could see myself using it (should it actually work), I’m not particularly impressed. I need text, call, and picture capabilities. It’s not able to do any of those right now.

I installed my current SIM card. Now, this SIM was sold locked to an LG Stylo 5 smartphone for the duration of the initial contract (now expired). My PinePhone sees the name of my provider, but anything involving data over the cellular network escapes me for the time being. I will need to contact my mobile service provider.

Aside from mobile data, something is off with my camera app. Pair that with my mediocre response to Ubuntu Touch, and now I want to try a different OS. I’m a fan of KDE, so I went to the Pine64 PinePhone OS index [1] and downloaded/flashed one marked KDE to a microSD card (one of my good ones; rest in peace abandoned project PiCore – I’ll do better next time). I totally missed that the image was a factory test, but at least I was able to verify that both my cameras work but cellular data is still a bust.

Take 2: postmarketOS is a mobile distribution with an option for Plasma Mobile. I was tossed between multiple websites before locating the actual download link. Dolphin file viewer calculates Shasums, flashing SD cards has almost become second nature at this point, and then it’s a matter of booting for the first time.

Plasma Mobile imitates Android about as well as KDE imitates Windows. It felt almost like coming home. Response time was improved, the camera worked, and the layout felt more familiar than not. The system time zone settings were a little harder to find. Overall, it offers a bit less stability than Ubuntu Touch, but the upsides more than make up for it.

I spent a day or so with tech support. Phones these days come with multiple locks and they can often be confused for each other. There is the lock that binds the phone to its original carrier. There is the lock screen to authenticate the user. There is also the lock binding the SIM to the phone body. My phone was locked, but the SIM must have noticed it was in a strange host and blown some sort of digital fuse. I can’t say I wasn’t warned.

Takeaway

I’m mad. My phone should be technologically compatible with their network. I have the skills to self-support my local hardware, but tech support won’t work with me on the equipment beyond my control. I’m hoping it’s the fuse hypothesis and that someone in-store can service the SIM without dumping me for the sake of the phone.

Final Question

What tech support disaster have you experienced or observed?

Works Cited

“PinePhone Software Releases,”wiki.pine64.org, July 24, 2022. [Online]. Available:https://wiki.pine64.org/index.php/PinePhone_Software_Releases [Accessed Aug. 15, 2022].

Happy 4th of July, 2022!

Happy Birthday, America from my Robotics Lab! This is Shadow_8472, and my side project for this week would have involved installing F-Droid, but it hit a last minute dead end.

I stubborned gpg long enough to [re]learn how to verify the F-Droid .apk download. In short: private key, download, and (optionally) detached signature. While searching for F-Droid’s public key, I found multiple places talking about their public key expiring some time during or before 2019. I expect my larger writeup will instead involve a section where I weigh different alternative app stores against each other.

Between last week’s marathon project and starting this month’s larger project, I’m a bit burned out. Praise God for affording us a measure of freedom here on Earth in the form of America – and that only a wavering flicker of the freedom in the world to come He’s planning for us.

Happy 4th of July and God Bless!

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.

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].

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]