Bad Ram, or Is It?

Good Morning from my Robotics Lab! This is Shadow_8472, and today I’m solving Derpy’s derp once and for all (I hope)! Let’s get started!

Background

There’s seemingly always been something off about Derpy, even before I dubbed it DerpyChips. First it was a cheap hard drive shorting out. Every so often, the system would throw a power kernel error. I fixed it inadvertently while switching to a solid state drive when I installed Linux.

More recently, we got some new RAM to replace the sticks I borrowed for another computer, but then the system developed occasional twitching fits. It took a while, but I identified one of its four 4gb RAM modules as having a number of bad sectors. The others passed the testing tool. The twitching improved, but not entirely.

Long-Haul Diagnostics

I started using Derpy a little more heavily a bit under a month ago, and the twitching went from Discord twitching by randomly restarting to Kerbal Space Program crashing at least once every couple hours, though only during loading screens and conveniently always shortly after a save or autosave.

Sometimes my game would catch and I could properly close out before it quit with a note about core dumped. If I was unlucky, the even the mouse would freeze for minutes on end. Rebooting didn’t help.

With problem frequency rising into the barely diagnosable range, I decided to run Derpy’s RAM through a less formal test. I temporarily moved the suspect sticks to my Manjaro workstation, isolating them from an unknown number of possible causes. Both computers were pretty dusty, so I took them outside and hit them with the canned air. To keep things fair, I only installed three out of four known good RAM sticks into Derpy and stored the fourth in a drawer.

A Test in Question

Both systems were usably stable right away. Derpy’s fan especially wasn’t panting nearly so hard without a giant dust mat blocking the heat sink. But what if that was the problem all along? Dust in the computer is the perfect unstory. It was early enough in the week I would have sought out another topic.

I spent an afternoon of perfect stability on Derpy, then focused my efforts on passively testing the RAM with my main computer. 99% stability. I had a few audio glitches, but for all I knew, they were always there and I was just noticing them because I was expecting trouble.

Over the course of the week, more problems started showing up. Not many, not often, but KSP did eventually lag hard a couple times, and Discord restarted, switching screens while it was at it. I even had the whole system go unresponsive, even when trying to switch to the “real” terminals outside the graphical environment. One time in a week of testing, I was forced to reboot.

Takeaway

I wasn’t as intense with the RAM as I would have liked, but all things considered, I’m around 95-98% sure Derpy’s replacement RAM is no good. I’ll be interested in seeing about switching it out under warranty this coming week.

To get an idea of how irreproducible this error is on command, after a couple big crashes, I finally had the idea to keep the terminal I’ve been running KSP from up on my second monitor. The plain loading screen is a buzz of activity as the terminal dutifully posts entries in the log file. I was hoping to see its activity during a bad crash, but it wasn’t to be.

Final Question

I’ve narrowed down the problem to the part and prescribed a solution, but I still don’t understand the why. My best guess is that it’s degraded somehow since the test or else it’s weaker under extra heat. Why does my RAM glitch out the way it does?

Setting Up WordPress… 4 Years Late

Good Morning from my Robotics Lab! This is Shadow_8472, and today I am going into the long-overdue topic of managing my site. Let’s get started.

The Silent Years

For years now, I’ve used this site as a place where I write about anything vaguely computer related I’ve been doing. I aim for 300-2000 words depending on how rambely I get. It keeps me thinking. Occasionally I need to teach myself a new skill. If a week is too slow, I’ll add filler I hope will be informative and/or jabber about plans for whatever the next phase entails.

But before today, my audience has been silent through a fault of my own. I can’t receive feedback unless the person offering it knows me on another platform. That’s a problem. I should have fixed it long ago, but even getting one-way posting online was draining, to say the least, and I got busy with other topics.

Registration

I started work this week by viewing the site’s back end while logged out. Nowhere did I see a way to make an account. Back in the admin panel, I found the first important click: Settings -> General -> Membership has a checkbox called “Anyone can register.” I enabled it.

Immediately, the login page had a new option to make an account, and I tried to do so with an e-mail I have for making alt accounts. Something in the site suspected me of being a bot.

Several hours of pushing myself to investigate later, I disabled a bunch of plugins and made my account. With the help of my good friend, Commander Stryker, I narrowed the problematic plugin down to MOJO Marketplace when it was the only candidate disabled.

Spam Protection Without Captcha

While solving the “suspected bot” problem, this week, I found an option in a forums plugin to use a Captcha service to protect against bad bots spamming my site. Captcha tests are often used to present bots with a difficult challenge humans can pass without much trouble.

Unfortunately, these tests are obnoxious to solve at best and needlessly discriminate against the disabled at worst. As computer science advances, this approach necessarily gets more difficult to keep ahead of automatic solving. These days, Google has a near monopoly on this technology, but with their track record of grossly abusing privacy, I’d rather limit their active role in this blog to directing traffic here as I am able.

The other option is a similar, but service called hCaptcha. All I have to say right now is that recognized their logo from when I recently solved one of their challenges. They are a topic worthy of a future post, though not an immediate priority.

More interesting to me is the idea of a honeypot. Instead of inconveniencing humans and bots alike in a prove-you-are-human style test, honeypots lay traps invisible to [well behaved] humans [who aren’t poking around in the HTML] while most bots will happily give themselves away by interacting with them. Again, this is a late development, so if I learn more, it will need to be covered in another post.

Takeaway

There’s a lot more to running a WordPress Blog well than I’ve been doing. I’m far from over.

Final Question

At long last, you should finally be able to respond: Do you even try to answer Final Questions?

Unsteam Games

Good Morning from my Robotics Lab! This is Shadow_8472, and today I am doing a brief followup to my work on moving Kerbal Space Program (KSP) between computers. Let’s get started!

Author’s Note

My experience is with Linux. I make no claims about how Steam handles games in Windows. Furthermore: this post is for educational purposes only. Don’t take advantage of DRM-free games by pirating them. Make an effort your money goes to the legitimate owners of a game when playing.

Steam

Like many computer gamers since 2003, I have a Steam account and I have a number of games through the platform. It’s a nice way to make sure you don’t lose physical copies, and it adds a number of achievements for completionists to strive for.

But that doesn’t mean I have to like getting ads stuffed up my face every time I already know what I want to play, nor do I need to like the feeling of being watched as I play. I like the feeling of achievements, but for some games they’re unironically tacked on decades after release (I’m looking at you, Sonic CD). Finally, there’s that overhead from the client itself. Other than achievements or tracking how much of my life I’ve spent in what games, there are very few obvious reasons anyone might want Steam running in the background if it isn’t strictly necessary.

Home Cloud Saving

Admittedly, Steam does provide a few reasonable features you can’t easily get while cutting them out (assuming the game can even be started). User created content can be added through the Steam workshop. Some games’ multiplayer modes were made specifically to go through Steam’s servers. Saves can be automatically synchronized from one computer to another.

That last one is a feature I’ve managed to replicate, or otherwise have well underway. For single player games I can run without Steam, I’ve been able to use rsync to quickly copy progress from one computer to another. Last time I talked about it, I discovered it’s safest to always include as much of the respective file paths for the directories being synced.

By default, Steam will put games in ~/.steam/steam/steamapps/common/, but any game that doesn’t care if Steam is running should be happy running out of anywhere in the file system – just keep in mind Steam won’t update what it can’t see. This time, however, I’ve upped it a little. I moved my copy of KSP to a directory I called ~/Games/UnsteamGames/ and added two more titles from my collection I wish to synchronize together: Starbound and Stardew Valley. I had to reflect the changes in GoldenOakLibry, the network storage, but I also wrote simple scripts with the synchronization commands embedded.

I also addressed Steam updates. I have my preferred daily driver where I’m installing all my games from. On that machine, I used a symbolic link for each game I’m relocating.

Rsync is a powerful tool. Perhaps my next improvement will involve a hidden file my script ignores.

Takeaway

Rsync wasn’t the kindest to Starbound. The process kept hanging, and I have no idea why – I just know it wasn’t because of large file sizes as my research suggested as it was having issues when all I told it to copy was a directory with MIDI-like files or low-resolution sprites stored as PNG’s.

Final Question

What other games might I isolate and re-home for ease of synchronization?

My First (High Pressure) Pneumatic Artificial Muscle

Good Morning from my Robotics Lab! This is Shadow_8472 and today, I am assembling and testing my first prototype artificial muscle. Note that this is not a tutorial, but a work in progress; I’ll be making more elaborate updates when I finish each phase of prototyping. Let’s get started!

Initial Construction

In case you missed my last post on McKibben artificial muscles, I’m using some surgical tubing with a in a braided ASA plastic sleeve as the main body of my muscle. Starting out, I’m using a bicycle pump for my air supply and some old, mostly cotton string for holding the ends together. We cannibalized some old garden drip line for structure in the inflation end, and a screw on the other end.

Assembly started with cutting around 12 inches each of tubing and sleeve. The sleeve unravels like crazy when being stretched, so I melted one end with a candle lighter. The mouth was nice and tight, but it was stuck contracted. I fed tubing in the other end melted that end open. I inserted the two inch length of drip line and screw into their respective ends and tied them off.

I drew this picture in GIMP for my father’s benefit before construction, but it highlights a “green part” between the actual muscle and the bicycle pump (gray triangle). Note this was drawn before I added the screw on the solid end and the blue parts are painter’s tape that lasted about as long as it took to try taping the muscle to a ball inflation tip for the pump.

First Actuations

There was no way my chosen string was holding at pressures required to inflate the muscle, so we moved to zip ties. We also redesigned the adapter to use rubber tubing wrapped in duct tape to resist inflation. It happened anyway when the rubber expanded lengthwise as well as radially. After extending the tape just a little farther, I started pumping as the hiss of gas escaping the system made it difficult to focus on the pump’s pressure gauge.

We ran a number of tests, and over about 10 inches of workable muscle, the whole thing contracted to about 8.5 inches and expanded from 3/8 inch to 1/2 inch diameter – about as thick as the casing would go according to tests later on.

Development continued after the pictured state. We had some irreconcilable leaks with the zip ties and switched to more expensive pipe clamps while we dreamed of ordering some rubber tubing with a thinner wall. The Green Part was replaced again with more plastic tubing probably intended for water, and accordingly leaky at its adapter. Only the very tip is still rubber tubing, and that’s only to create a seal someone has to hold closed while the system is under pressure.

Speaking of pressure, every improvement raised the maximum possible pressure before something failed or was otherwise too loud to tolerate. We made several milestones, but eventually maxed out the pump at 150 PSI, though after I sealed the leaky connector with some proper sealant tape, air stopped escaping until 80 PSI, but when it started, it was painfully high in pitch.

Takeaway

My finger pads HURT after assembling that thing. It could be working with the braided plastic or messing with the pipe clamps, but I don’t see many of my materials being final picks. The contraction ratio is lacking, the tube is high pressure, and if I’m going to be using a lower pressure anyway, I might as well go back to zip ties.

Final Question

During testing, I kept going to higher pressures because I was operating under the hypothesis that there was more contraction to be had. The calipers said otherwise; manually squishing the casing off the spool it came on gave about the same diameter. I identified my false impression as coming from the fact that the woven casing came flattened out, and my mind wasn’t translating diameter and half circumference properly. What hypotheses have you discarded while working with something?

A Self-Guided Rsync Lesson

Good Morning from my Robotics Lab! This is Shadow_8472, and today I am following up on last week’s topic and actually bouncing the game Kerbal Space Program (KSP) back and forth across a couple computers. Let’s get started!

Project Introduction

KSP is a rocket simulator. Rsync is an advanced copy tool. I don’t understand rsync well enough to use it to its full potential, but this week I’m answering three questions in order: 1. Is the project possible? 2. Is the project feasible? 3. Is the project optimizable?

The goal is a smooth transition from one computer to another. When I need to move, I just save/quit my game, move to the other computer, and start/continue playing. To do this, I’m copying them to a network share they both have mounted, as a third workstation would make for a messy network trying to move it around ad-hawk.

Project Possibility

The main goal here is to get my game running on a different computer, regardless of how ugly the process looks or how long it takes, and ugly it looked and long it took! It’s understandable though. First time moving everything will be from scratch, but after that some noticeable speed up should take place because it should only need to copy the changes between files.

Besides taking longer than I’d consider feasible, my game also crashed, locking up Derpy, a workstation I want to play on. The window dressing appeared, but I coldn’t move my mouse or bring up a TTY terminal with CTRL+ALT+<Function keys 1-6>. I had an existing SSH (Secure Shell) connection, and the top command told me KSP was trying to run, even though I kept trying to shut it down with kill, even with sudo. I wasn’t even given an error. I stumbled across using a -9 flag for kill -9. That worked, but I have yet to understand why. Presumably it’s a little more strongly worded way to stop a program.

My exploration an hour or so later was interrupted by an unexpected success. My game launched, I took a rocket to orbit, confirmed it had enough dv to complete its mission, and I saved and quit.

Is the project possible? YES!

Project Feasibility

The next step was to go back and forth a few times. In my previous step, I had difficulty finding my game ended up inside my existing game directory instead of syncing to it. I did the same thing again my first attempt trying to retrieve it from Derpy, and it took just as long as the first time.

My second attempt started with a successful synchronization from Derpy to the network share with the inclusion of the –delete flag in case a file is ever removed. I errered on the side of caution and made a copy of my KSP directory inside another directory I called KSPLand. Good thing I did. The way I set up rsync, the second phase of copying wiped out my backup and stuffed the game directly into KSPLand instead of KSPLand/Kerbal\ Space\ Program/. I’m attributing this to oversight to trailing slashes at the end of file paths. I would have said I just had a lack of caution, but at least I didn’t wipe out my other games!

Attempt 2.1 went much more smoothly. I compared the exact commands and eliminated the offending slash. I briefly got confused looking through my real game directory and saw one of those recursive copies. This back and forth is mentally exhausting, but it eventually went through.

Rsync Sandbox

At this point, I backed out and made a directory where I can practice rsync without it taking half an hour to reset. In it, I made two directories representing my two workstations. In each of those, I made a notKSP directory with files named after the numbers 1-10 as well as an “innocent” game directory I didn’t want messed with.I lined up a dozen possible variations controlling for my file path ending in path/notKSP is followed by nothing, a /, or /* as well as my destination’s path, path/, path/notKSP, and path/notKSP/. I made a chart by using the –dry run flag. About half of them appeared to work, but to my surprise, the actual runs didn’t match up.

All my source path/notKSP/* got the data over, but nothing was ever deleted. Also, trailing /’s on the destination directory didn’t affect my results. The frustrating part is that I had four commands (two if I ignore destination trailing /’s) give me exactly what I want, and they’re each a single / each away from an unsatisfactory command: rsync -avh –delete source/notKSP/ destination/ will add notKSP to destination and make sure it’s the same while rsync -avh –delete source/notKSP destination/ will make sure the final directory in destination/ contains notKSP and nothing else.

In my opinion, the safest form of using rsync is rsync -avh –delete source/notKSP/ destination/notKSP/ because if I mess it up and forget the trailing /, I end up with Russian nesting directories and have to fish a freshly created copy out of the directory it was supposed to update. Furthermore, tab to complete prefers to add those trailing / characters [unless an extended directory name is present] and I can specify an alternate directory name for the destination should I choose as I discovered while conducting another test in my rsync sandbox.

Project Feasibility Cont.

For how useful the –delete flag is for rsync, it oddly doesn’t have a single-character shortcut. Otherwise, I would have written about implementing it here. There exists a –del alias, but I’ll pass for now.

With a properly calibrated rsync command, I ran a dry-run to the network share from my tower to the network share. Where I previously had a wall of text detailing all game files being compared, I now only had a few files –many of which were deleting a test game I had purposely planted for later deletion– totaling to a mere 1.69 megabytes as opposed to the 3 gigabytes of the full game. Even over Wi-Fi, I was done in seconds.

Is the project feasible? YES!

Project Optimizeability

As long as the possibility remains that a single character can blow a hand-entered command, I won’t be comfortable. The plan from here is to curate a set of four commands and plant them in scripts so I don’t have to retype them each time. One thing is for sure: I’ll be keeping the container directories until I have my scripts working.

I’ll probably set each one up in a script and use the appropriate one when I need it. A more complex script might automatically pull any changes from the NAS when I start and push them when I’m done. Once feature creep sets in, I might as well add checks for if the share is down, or if I even need to sync at all. It might even be useful to add a hidden file next to the directory in the share to track who has the game open and error out if I try to open it twice. But then again, those are all dreams. I’d only go to that extent if/when I give the same treatment to my other entries in my offline/LAN compatible Steam library.

Is the project optimizable? The sky’s the limit, and I don’t have a rocket.

Takeaway

As I worked, I learned a bit more about the command line. For example, I discovered how much easier it is working with multiple terminals in the same window. I also learned that ls will let you peer into multiple directories at once. When a directory is deleted and a backup restored, the normally useless command cd . will update your terminal from trying to look at the deleted directory to the new one. I was able to work on my rsync commands in one terminal, view results in another, and use a third one to reset between trials. With a little working, I got my two accessory terminals down to a single line each with a little help from the && operator to run multiple commands at once.

Final Question

While working on the verification step, I was running out of time to post and declared victory a little prematurely. I had trouble with my rsync NAS to Derpy dry run looking like a full loadout. Something I did goofed the metadata. Have you ever declared victory early?