I’m Learning Puppy Linux

Good Morning from my Robotics Lab! This is Shadow_8472 and today I am overhauling an old Windows XP machine with a tiny distro called Puppy Linux. Let’s get started!

About Puppy

Tiny Linux distributions have reduced complexity – meaning fewer distractions from the core functionality of your system, which makes them work great as a learning environment. I learned the Linux terminal on MicroCore Linux building upon previous experience from using commands in games like Minecraft. I aimed a bit too high and stalled when I wasn’t ready to start repackaging software, but I still consider that period one of the most productive projects regardless.

Another good use for miniature Linux distros is old computers. Specialty software, like commercial quality games, may pose an extra challenge to locate and install various libraries found in general purpose systems, but if all you need is a browser and a basic office suite, a refurbished system with a slim OS may be all you need.

The first thing I learned coming back to Puppy was that it’s a whole branch of Linux distributions and has been for some time [1]. Even a distro outside the definition of puppy/puplet/etc. may still be considered part of the family if it follows certain principles Puppy is built upon.

Exploring Puppy

My project this week is on an old church office computer running Windows XP Professional 32 bit on a 64 bit CPU. It has 2GB DDR2 RAM and a pair of 150GB HDD’s configured in a BIOS-level “Intel ARRAY” (mirrored per RAID 1, but not in name) with a 100 GB main partition, a 50GB partition labeled backup, and a couple tiny partitions for system files/recovery files respectively.

One talking point from Puppy’s site is how “Grandpa friendly” it is and how active the community is. I went ahead with making an account on the forum, left a request for a most user-friendly puppy overnight in the new users’ section. I never gotten so much help so fast. Consensus was that I should try Friendly Fossa 64-4 once I brought up that I was interested in burning it to CD – my third download after the base Fossa 64 and Friendly Fossa 64-2; all install .ISO’s are dropped onto my Ventoy multi-boot USB.

It’s amazing what built-in help can do for a system in terms of user-friendliness! Both Friendly variants each had a conspicuous help directory on their desktops, which the official Fossa64 build lacked. I’m impressed with how easy answers seem to be if I just take the time to explore those, various settings, or miscellaneous tooltips. This is a distro for people who aren’t ready for the command line. I just haven’t successfully loaded a pupfile (computer session save file) yet.

were a big improvement over their official Fossa 64 build thanks to a conspicuous directory on the desktop and various other help tooltips. I’m impressed with how easy it is to find my own answer if I just explore. I’m not a fan of the exact graphical style, but if ever there were one distro for people scared of the command line, this would be it – provided I can figure out how to load a pupfile.

Puppy works by copying everything into RAM. It first loads a base image, then modifies it with a “pupfile” made using that image when you shutdown and save a session. If I understand things correctly, you should only save sessions where you tweak system settings. Otherwise, data goes on mounted drives, where it stays regardless of pupsaves. I could be wrong though. Either way, this makes it almost trivial to flush out a virus by rebooting.

So far, I’ve burned the install media to CD and done a lot of exploring. I will need to come back to this.

Takeaway

I’m not a fan of the exact graphical style, and I still have much to learn. While Puppy takes a massively different approach to personal computing than mainstream operating systems, it’s overall one I can see myself recommending to people looking to learn Linux.

Final Question

What is the most unusual computer configuration you’ve used?

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

Works Cited

[1] Puppy Linux Team, “About Puppy Linux,” puppylinux-woof-ce.github.io 2020. [Online]. Available: https://puppylinux-woof-ce.github.io/. [Accessed: Jan. 2, 2023].

The Relatability of Christmas

Merry Christmas from my Robotics Lab! This is Shadow_8472 with a few thoughts on what Christmas means for me. Let’s get started!

Many a Christmas tale stars a jolly, old man who lives at the north pole making toys to hand out every year using his sleigh and team of magic reindeer, but even Santa is rarely portrayed as anything more than a steward of the holiday attributed to the birth of Jesus Christ.

How does a self-existent God relate to His created beings? How CAN He relate? The Old Testament records a long line of flawed human beings locked in a try/fail cycle when it comes to obeying God, starting with our choice to reject God by eating the forbidden fruit. For around a millennium and a half of history, God is seen in story after story, book after book at work in the background connecting with people by framing his love through contemporary imagery. He fashioned one chosen family into a powerful nation, preserved them from extinction at the hand of the undefeated Assyrians and through Babylonian exile, and ensured their reinstatement into the land He had promised to their ancestors even as a parade of foreign empires conquered their territory.

It is one of the darkest chapters in human history. Israel has been without God’s prophets for hundreds of years, and the religious leaders are corrupt and self-important teachers instructing their students in falsehoods. Furthermore, the region is clutched by the iron fist of Rome. Soldiers from the occupation force can order you to carry their packs for up to a mile, enemies of the state are publicly executed nailed to wooden crosses along the highways, which are left in place as reminders not to rebel. Meanwhile, a movement of zealots work in secret to liberate their homeland, storing up supplies for when the pharisees’ messiah would show up in the temple and permanently reestablish Israel as a sovereign kingdom. If ever there were a time it appeared God had abandoned the world, this would be one such time.

Amid this landscape, Jesus set aside whatever job perks come with being Creator God and Master of the Universe to relate to one of us AS one of us. He was born as an otherwise normal baby into poverty. In a town crammed to the walls with people, the only visitors who took note of Him were lowly shepherds who received a special invitation and some unknown number of scholars from the east who were paying attention. His earliest memories would have been from living as a refugee from a regional king who murdered His peer group looking for Him. When He moved back home, his family landed in the regional ghetto, where He grew up with the stigma of being an illegitimate child learning carpentry.

If anyone were ever entitled to everything, it would be Jesus; if anyone ever went to the most extreme lengths to be relatable to everyone who’s ever lived – again, Jesus. He went through the absolute worst humanity had to offer and didn’t back down. Many details of the analogies He used to reach people in 1st century Judea are lost on us today, but the core message shines on. And it started in a town called Bethlehem just over 2,000 years ago, where God took on human form to experience our worst and to carry our end of the contracts He made with us where we failed.

Takeaway

While the date of December 25 was originally chosen to displace one or more Pagan celebrations, today it represents a unique opportunity for Christians as it is in this season that a general audience is primed to hear about Jesus’ most relatable story. He was born.

Final Question

What does Christmas mean to you?

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

On the Specification of State Machines

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

I’m learning Godot, a free/open source game engine. My chosen project is a Sonic fan game where Cream the Rabbit overhauls a wild chao garden overrun with pollution. Previously, I coded up a cube I could move around in 3D.

What I didn’t cover was how everything flopped when I introduced delta, a variable to adjust calculations to account for the time between frames. While I dream of posting this game as Wii homebrew (3rd party shareware), I understand that most people interested in Chao these days are on PC. Even if this were an exclusive title to a locked-down platform, lag would still need to account for framerate drops. I tried adjusting my jump related constants so many times, but since I missed a delta or two, I was never going to get it right. When I initially gave up, I directed my efforts towards designing a state machine.

It’s almost silly how many states a 3D platformer player character can be in. Walking, running, sprinting, standing still, holding an item – and that doesn’t even touch the number of jump states I can expect Cream or other characters to find themselves in. I used a massive if-else structure to decide what string to describe state. At a certain point, I studied the character movement and animations of Sonc 3 & Knuckles (Sonic Megacollection for GameCube, run on a Wii) and Sonic Adventure 2: Battle (SA2B) as inspiration. In both games, holding jump powers you upwards until you either release or reach a maximum height; it just happens so fast (unless you’re in a low gravity section) that it feels natural. I had to re-think my state machine a few times, but I settled on a 32 bit number to chop up into a mixture of 1 bit flags and other data as needed. In particular, I focused on the least significant byte (the last 8 bits).

I went through several iterations over a couple of days, but the two rightmost bits were consistently used to denote a character’s vertical (Y) and horizontal (XZ) movements as I figured they would be most useful for telling other aspects about a state. Moving left, the next four bits are for progressively more detailed information about what a character is doing “environment” – you can be walking.on_ground.skidding, swimming_underwater.bottom_walking.normally, or using a character’s special move assigned to a reserved set of states.

A good chunk of thought went into representing all these states in a visually digestible format. It wasn’t until I began thinking of the XYZ motion flags as dependent on my environment states that I reduced them to four columns in a chart of sixteen rows that I was readily able to count my vacant states. As of writing, my environment variable uses two bits for “rough” and one each for “fine” and “special.”

The 128’s and 64’s bits are penciled in as a counter for idle animations or how many double jumps a flying character has remaining. Beyond that, I have 24 bits remaining as the game grows. For example: eight bits affords up to 255 unique held items plus a reserved id for when a character holds nothing.

Takeaway

I did not write a single line of code while working on the main event today despite it being a programming project. I did start on the next part where I began implementing this standard, but that felt like I was starting a whole new section, so I’m saving it for later.

Programming programs and composing literature (in the broadest sense) are more similar than people realize. What happened here today is analogous to a novelist making an outline ahead of a first draft. An important puzzle was solved and in important internal standard established.

Final Question

How many basic states are there for an average character in your favorite game?

GPG is Still Beyond Me

Good Morning from my Robotics Lab! This is Shdadow_8472, with a side project. Let’s get started!

While downloading a new-to-me distro this week, I again was wall-of-text’ed to a halt by GPG. GNU Privacy Gurad is a technology no new and serious Linux enthusiast user can go six months without slamming into. The specifics of how it works are in about every tutorial that shows you the basics – which invariably never includes an instruction set I can understand regarding file verification, and I make it a point to attempt concepts I find difficult, but important whenever they come up.

I’m still not yet successful, but here is what I’ve learned: web of trust. I trust Dan. Dan trusts Stella. Stella trusts George. I don’t know George, but he has a file I want to ensure is authentic after downloading. Through the chain of trust I’ve established, I can trust George’s cryptographic signature based of his private key, and the file I’ve downloaded from him when I use George’s matching public key to verify it.

My understanding of GPG this week has gone from “clear as swamp water” to “clear as stained glass.”

Final Question

On a previous GPG attempt, I learned about centralized key servers, but I’m still clueless about their practical use. How in the world does one enter one of these “webs of trust?”

A Bit About Wii Firmware

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

I mentioned last week how my family picked up a replacement Wii for Thanksgiving this year. Most everything appeared to be working at first, but when my sister, Taz (Tzarina8472), found Animal Crossing: City Folk needed a firmware update to play. I’m planning to hack this Wii at some point to get on its large homebrew scene, but firmware updates can patch out needed vulnerabilities.

My early research hinted that any version would work, but I later confirmed this on WiiBrew.org [1], whose FAQ’s opening introduces itself as an authoritative reference. All firmware versions have exploits, but updating to or past version 4.2 risks a system brick, and the WiiBrew FAQ does not recommended it for any Wii.

If there exists some website that lists what Wii games need what firmware, I couldn’t find it. Turns out games that may need a firmware update come bundled with the version they need. Luckily, the problematic 4.2 firmware was released the year after this of Animal Crossing. The system went from firmware version 3.2 to 3.3 (best guess from memory).

Final Question

What would you do with a freshly hacked Wii?

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

Work Cited

[1] “Wii Brew,” WiiBrew.org, Nov. 18, 2021. [Online]. available: www.wiibrew.org/wiki/Main_Page [Accessed Dec. 5, 2022].

I’m Learning Godot

Good Morning from my Robotics Lab! This is Shadow_8472 and today I am learning a thing or two about game development with the Godot game engine. Let’s get started!

Why Godot?

Godot has had my interest for several years. As far as I can tell, it is the only general purpose free and open source game engine (if you want to make a block game for the fun of it, use MineTest instead). Engines like Unreal and Unity allow you access to their software free of charge until you make it big enough that it’s worth their bother going after you. With Godot, your final product is 100% yours, but as with other open source projects, you are encouraged to donate as you are able.

I Want to Make a Sonic Fan Game

My sister (Tzarina8472) and I were on a dog walk when we decided a game about Cream the Rabbit in a chao garden would be fun. The adorable and ever-popular chao –per fan consensus– have gone criminally underused since they were featured in Sonic Adventures 1 and 2 (SA1, SA2) (and their Director’s Cut remasters), where player characters could raise a number of these creatures in a number of themed gardens. Once your chao is strong enough, you can enter it to compete in chao races. While our hypothetical game revolved more around what a wild chao garden would look like, it still made me want to play it for myself.

I have been admittedly lacking in access to primary sources for this project. I only own Sonic Adventure 2: Battle, but both my GameCube and Wii stopped working before I made it half way through the game’s content. We picked up a used Wii in good condition for cheam on short notice on Thanksgiving (Thank you, Jesus!), so that will be on my to-do list some time. Otherwise, I’ve been playing a humble offering I found in the Android Play Store library called PocketChaoGarden.

“Installing” Godot

Godot proper doesn’t require installation. Download/unzip it, and you can run it directly from your file system. The stable version is Godot 3.5.1, but Godot 4 is in beta. Long story short, between my two daily drivers, only DerpyChips is willing to run the stable version. I kept getting any number of errors I’m clueless about for other configurations. I will be adding this and a selection of other of my open issues to my Discord server.

Learning Around Tutorials

I have found the GodotQuest brand tutorials to my liking. They have two introductory course lines – one for game developers switching to Godot, and one for programming newbies. I already know about variables, loops, and data structures, but I bet on the non-elementary course line skipping over vital information about how game engines work in general; I opted to review.

I focused on the playlist Getting started with the Godot game engine in 2021[1]. It introduces concepts one short video at a time. Most importantly: Games are made up of scenes. Scenes are made up of nodes. Scenes can act like nodes for building larger scenes (think: a player scene or enemy scene being put into a level scene). One script can be attached to each node. GDScript is a Python-like scripting language that’s been optimized for use in Godot. The playlist concludes with a pair of two hour long videos where it walks you through assembling a creep crushing game – once in 2D, and again in 3D.

Our Game So Far

I skipped the 2D game and went wildly off script on the 3D one. Where the tutorial provided a textured model, I spent an hour or so making a poorly textured cube in Blender with a sprite of Cream’s face as provided by Taz. I coded the horizontal movement, but I diverged from the tutorial around half an hour in.

A lot of my improvements since splitting with the tutorial have been invisible to what would be an end-user. I spent around day figuring out how to use materials effectively so I can replace art assets without the need for Blender. I reorganized the internal node structure and am presently playing with getting inherited scenes to behave.

Takeaway

This post needed longer than a week to study. I’m learning a lot, but if I gave any more through coverage, I’d find myself parroting the tutorials.

Final Question

Have you ever wanted to make your own game?

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

Works Cited

[1] GDQuest, “Getting started with the Godot game engine in 2021,” youtube.com, Apr. 22, 2021. [Online]. Available: https://youtube.com/playlist?list=PLhqJJNjsQ7KEcm-iYJ2a8UCRN62bTneKa. [Accessed Nov. 28, 2022].

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 Choose AnySoftKeyboard as My Android Keyboard.

Good Morning from my Robotics Lab! This is Shadow_8472, and today I’m finalizing my decision on an Android Keyboard. Let’s get started!

AnySoftKeyboard (ASK) is not the perfect keyboard for me. As I stated last week, the default (Googled) keyboard that came with my tablet is my control test for user experience. The only visible features I find it lacking are up/down keys and a dark mode. ASK offers both of these, but offers additional features I need to grow into.

Unlike other keyboards I tried, ASK is especially flexible if you don’t move on before you’ve explored the depths of its settings app. Buried within its confines are a number of prebuilt top and bottom key rows – around a dozen each. The most unintuitive feature for me was a list of swipe gestures I could safely ignore if it wasn’t key for switching keyboards on-the-fly. I even found a “developer mode” with 41 different types of text fields to test how the keyboard behaves.

My biggest standing complaint with ASK is the confusion over exactly what is a “language.” Installable ASK languages appear to be plugins for key mapping/dictionary pairs, while Android’s installed languages menu brings up a set of all installed on-screen keyboard programs. ASK’s definition is the better descriptor, but a multilingual end-user who only cares that things work will accept Google’s definition before something more descriptive like “keyboards.”

Special thanks to muneyotxi for showing patience while educating me about ASK’s less obvious features – namely long-pressing the Return key for a faster access to keyboard app switching.

Final Question

AnySoftKeyboard is an almost trivial tweak to Android I would recommend for anyone thinking about digital privacy. What other raw beginner level tips do you have to share?

I look forward hearing your answers on in the comments below or on my Discord 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 3D Printer Needed Maintenance!

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

I wanted an easy post this week, as the past two weeks have been downer endings, and 3D printing has been on by background list for a while. For reference, I have a Monoprice Maker Select Plus I got for Christmas several years ago. Since then, I’ve learned that 3D printing is almost more about maintaining your machine than it is about actually printing things.

I wanted to print up a part I need for a planned project, but no matter what I did, the bed wouldn’t level out for me. The back, right corner kept turning up as too close to the extruder, even when at the end of its adjustment screw.

I reached out to relevant help channels, and someone from the Sweetie Bot Project’s Discord server informed me of new ways my model of printer was a low-end tool/high-end toy. My print bed is warping over time, though I cannot test it with a ruler or triangle because of a bad spot in the middle.

My solution was to find an Allen wrench and raise the Z-stop switch a notch. I leveled the bed again, and I was just barely comfortable enough with a flat test print to try a Benchy. I came back to a failed print. When I got around to servicing it properly, the filament was snapped off – my filament is wet from improper storage over a period of humidity.

I don’t have time to fix it and try again before posting, so this short post again turns into a downer ending. At least I learned a thing or two.

Final Question

If you have a 3D printer, how do you manage how it absorbs humidity?