A little imperfect software for you
Back in June, I wrote a little bit about how I use an old Nintendo DS to dump GBA ROMs as well as dump and restore the save files. I also teased that I had a magical solution using TFTP to use WiFi instead of doing endless SD swaps. Well, thing is, it's not magical. It's actually some of the most imperfect software I've ever worked on, and that's why I haven't released it for fifteen years. I sucked it up and ended that streak four days ago, with a little bit of a caveat. transfile (transing ...
Read post
Echoes of a magic night
Content warning: grief. Also note: if you've been around the fediverse since before 2021, you may have a personal connection to this grief. Of all the half-written or half-formed pieces I've had floating around in recent memory, parts of this particular one have dwelt in that limbo state the longest, I think. I was never quite sure what to say. I just… felt. But on a recent morning's commute, I was listening to the end of Collapse Under the Empire's The Fallen Ones, having picked it out of my ...
Read post
I can't stop watching Muppets Mayhem
It (currently) says right on my "about me" page that I'm a Muppets nerd, and that is accurate. I grew up with The Muppet Show. I watched the first three Muppet movies over and over and over again as I was growing up. It was a toss-up between Caper and Manhattan for favorite. My uncontested favorite Disney World attraction remains Muppet★Vision 3D. I had a Fozzie plush in my crib and a Kermit puppet was one of my favorite toys for years. And while I enjoy Christmas Carol as much as the next per...
Read post
Introducing gbfs-web: attach files to homebrew ROMs without CLI tools
The Game Boy Advance and Nintendo DS homebrew scenes are amazing. Full stop. One of the stars of that particular galaxy I leveraged for 4-e was Damian Yerrick's GBFS, a set of tools that pack files up into an archive that can then be concatenated onto the end of a ROM, and a library to compile into that ROM that can work with those files. 4-e uses this to let you attach your own set of e-Card .bin files to the ROM that I build and release, yielding a custom 4-e build without having to compile ...
Read post
Introducing 4-e: Super Mario Advance 4 e-Cards without an e-Reader
Super Mario Advance 4 is more than Super Mario Bros. 3. When this final game of the Super Mario Advance series launched, it of course had Bros. 3 for its main draw. But it also went all-in on Nintendo’s e-Reader, a special cartridge with an optical scanner that could read specially-encoded data on cards that Nintendo distributed. Nintendo published over a hundred cards for Advance 4. These e-Cards were power-ups, switches that changed the game (like adding Super Mario Bros. 2 turnips to pull u...
Read post
Backing up and restoring GBA ROMS and saves with modern tools
I try not to think too hard about how old the Game Boy Advance is. Back in its heyday, I bought many games for it (the Super Mario Advance series, the Golden Sun series, Rhythm Heaven, anything The Legend of Zelda…) I also dabbled a bit in third-party devices to copy the games’ saves and restore them, as well as copy the games’ ROMs themselves to play them on computers or experiment with them. When the Nintendo DS hit, sporting its SLOT-2 (which, contrary to popular belief, wasn’t just a Game ...
Read post
The Analogue Pocket's d-pad is bad, but I made mine work
In this post: My experience with the d-pad How I save time and risk opening up my Pocket, including how to avoid having to detach the infamous display cable The solution I used and why it works for me And, as usual, plenty of story time But first! I’m gonna talk about how I take apart my device here. If you do that and you break your stuff, you get to keep both pieces. More clearly: I take absolutely no responsibility for any damages that occur as a result of anything you read here, inclu...
Read post
I played Torna after Xenoblade 2 Chapter 7 and it was a great idea
This post is spoiler-free, as best I can make it. That said, the time to read it might be when you've wrapped up chapter 7 of Xenoblade 2. Last night, I finished Xenoblade 2. I left a bunch of quests undone, which is a very different place than I'd ended up with Xenoblade. I am not gonna fire it up to find out, but probably 95% of what that game offered me to do, I did. 2 was a different animal. Like many reviewers, I found 2 a bit obtuse in introducing its systems. Eventually, though, and wit...
Read post
I'm not gonna finish Xenoblade X
With Nintendo shutting down online play for Wii U and 3DS in about a month, and given that I had just finished the absolutely fantastic Xenoblade: Definitive Edition on my Switch, I recently dusted off the ol' Wii U and unsealed (!) the copy of Xenoblade X I had bought way back in… well, looks like 2015, I guess, since I bought the limited edition? It took me four tries to get through the original Xenoblade, actually. The first time was the original US Wii version—the one you had to get at Game...
Read post
I refuse to observe DST this year
Every year around this time, my ability to enjoy the arrival of spring is severely impacted by the fact that I'm struggling to adjust my circadian rhythm to what we all know is the worst idea we've ever had as a society—daylight saving time, or DST. So, this year, I'm gonna try opting out. I think it's rather telling that I had a plan to do this a few months ago. Then had this persistent impression I was getting the direction of the time adjustment wrong. I went back and forth like this for aw...
Read post
Getting my monitors in line
I got super interested in colorimeters a year or so ago. I have had this 2009 Panasonic plasma TV since, well, 2009. And I've always loved it and it's still going strong. Except it was always kinda enthusiastic about the red. This particular TV gave you no color controls save the "color" (saturation) and "tint" (hue) controls that were basically holdovers from the CRT era. So I was never really able to mess with it, and I was always kinda scared of the AV experts' warnings about service menus...
Read post
Are you really trans?
Do you really qualify as "trans"? Please take this quiz. Does your gender ever misalign with what people proclaimed you were when you were born? If you answered "yes" to question 1, then you qualify! If you wish to call yourself transgender, then congratulations! Here's your membership card. You might not want to show it at the border crossing into Florida. But I really do get the question. It's a question I've asked myself so many times. Telling myself "no" What feels like an eternity a...
Read post
Without "Enemy", what would I do?
I was in the car the other day, trying to think of what I wanted to listen to. After revisiting CHVRCHES’ “The Bones of What You Believe”, I found myself in the mood to dig out an old favorite. I've been an Apple Music subscriber since the beginning, when it was mostly famous for deleting or not deleting your music files. (I never lost anything, but also would keep opening my phone to find The Love Club had vanished from its original album and now appeared on one featuring a giant duck inflatab...
Read post
A proposal for shell libraries
I recently wrote a new shell library called portable-color. Its job is to colorize shell output, but be much more respectful of the environment it's being executed in than just jamming ANSI color codes (now ECMA-48; see "SGR") into stdout. I'll talk more about portable-color itself on another day. Today, what I wanted to do was figure out how to actually install a shell library on my system. You see, there's not a standard for this—at least not one I can find. Executing shell scripts in the co...
Read post
HiDPI on macOS and Ubuntu
It's been a good while since "HD" was acceptable for computer monitors. Thing is, operating system people seem to have not really caught up to this idea. Not even Apple, whose "Retina" branding for HiDPI monitors is dangerously close to becoming generic like Kleenex is for facial tissues. (Who calls them "facial tissues", anyway?) I've also been running Ubuntu Desktop for some things lately, and the situation isn't great there either—but here, I'm also not surprised in the slightest. After all...
Read post
macOS' "Failed to personalize" error may have been me being an over-eager deleter
I had been tracking the macOS public beta on my M2 MacBook Pro for a little while in the hopes they were fixing a particularly painful issue with Linux Rosetta support. Because I've experienced some serious pain before running a beta as my daily driver, I opted to run the beta in a partition and leave my production macOS alone. This worked pretty well for a time, but then I decided to clean it up. Inside Disk Utility's partition dialog, I saw my main macOS partition, my beta macOS partition,...
Read post
Python rot and bringing in the old blog
I've been working on a little project for a few evenings now: folding my old domain and old blog into this one. The old blog was built with a static site generator called Felix Felicis (yeah, it makes me wince now, too). I got to write posts in Markdown, then run a Python program to build all the HTML that I'd then rsync on over to my OpenBSD server hosting zigg.com. Honestly, I might even still be using it today, if it weren't for Python rot. I used to adore Python, oh my gosh. Before I star...
Read post
In defense of the USB-C future now past
I recently upgraded my nearly-five-year-old MacBook Pro with one of the shiny new M2-based ones. (I do work with these, so the company I work for contributes toward their cost.) Prior to that, I had the 2018 MacBook Pro. That was the one that had the best version of the worst keyboard. Not content with that, it had another controversy swirling around it—apart from a headphone jack, it only had USB-C ports. Before the super-thin 2016-2018 MacBook Pros came around, we had machines with the headp...
Read post
Choosy is for more than just browsers
One of my essential macOS apps is George Brocklehurst's Choosy. I maintain Safari as my personal browser (it's convenient, particularly cross-device, and Advanced Data Protection now covers bookmarks too!) and Chrome as my work browser. What Choosy does for me is inject a quick step after clicking links that prompts me to pick one or the other. We also use Miro quite a bit at work, both internally and with clients. And there's one workflow that has always ticked me off—clicking a Miro link pra...
Read post
You got your LEGO in my cube!
While hunting for white elephant gifts, I came across something really neat. A company called ULUZE (what is with the myriad company name concotions from online sellers?) makes a combination 3x3 cube and LEGO knockoff I had to get for myself. ULUZE's Magic Cube, a 3x3 Rubik's-like cube with LEGO-knockoff 2x2 plates for faces. It's been rearranged so the faces are in checkboard patterns. Okay, so, this thing is really neat. First, I wouldn't mistake it for a speedcube. (I ...
Read post
Controlling iCloud Drive's space usage
Last August, I wrote a post over at Atomic Spin on calling macOS APIs in Automator workflows. My impetus was to control the amount of space iCloud Drive was taking up on my Macs with smaller disks. I don't know how many people actually read that post, because nobody seemed to notice I didn't actually need to write a Swift script to accomplish the task at hand. Because brctl exists. (Mind you, I'm glad I wrote the post and did the exploration. I think it's really valuable not just from an Autom...
Read post
Better captioned images on Listed
I realized that I have been using the figcaption HTML element incorrectly, when I originally added the photo of a Nazi book burning to my post about Twitter and the pink lists. I was trying something like the following, to get text to land below my images: ![An image.](http://example.com/image.jpeg) <figcaption>A caption.</figcaption> This isn't using figcaption correctly, though. And I needed some negative top-margin to align the caption a little closer to the image, as well as so...
Read post
Hey Siri, add a transaction to YNAB
That was an interesting journey. I'd never really invested the time in creating my own really complicated iOS Shortcut from scratch before. The limited debugging options and figuring out how it all worked, step by step by step, reminded me a bit of my early days programming as a kid, bewildered but steadily figuring it out. Okay, but to back up for a minute: my goal was to teach Siri how to record a transaction in You Need a Budget—YNAB, for short. There were, of course, already-written solut...
Read post
Hey Siri, open the garage door
I went smart garage door shopping a little while ago. After looking around at the options, I settled on the Chamberlain Smart Garage Control. But wait, Mattie! You're deep, and I mean deep, into the Apple ecosystem. This ain't a HomeKit deal. And I'm in it for good reason. I mean, I was chomping at the bit for my HomePods to get upgraded to audioOS 16.2 so that I could get into Advanced Data Protection as soon as possible. End-to-end all the things! But the Smart Garage Control had a few thin...
Read post
Making song links for any streaming service
We live under capitalism, so of course there are eleventy billion ways to play a song, many of which are hoping to get you to commit to subscription fees. All hail the subscription economy! I'm the Apple Music type of consumer, owing in part to my stack of Apple stuff but also because I can upload music to it that isn't in the catalog. (Streaming rights being what they are, this has turned out to be a critical need. That and yt-dlp have kept me listening to stuff I wouldn't be able to otherwise...
Read post
Jesus at the Intersection of Fear and Disapproval
Content warning: religious hate of queer people, queer self-hatred. Some of this has been a long time coming. Parts can be found in several drafts hiding out in my private notes. Until today, I've been too afraid to say what I need to say. But something I came across gave me a nudge. This poem from Jay Hulme has been making the rounds. (Jay wrote about this, if you're interested in more.) Jesus at the Gay Bar He's here in the midst of it - right at the centre of the dance floor, robes hitch...
Read post
Uploading images for Listed with an Imgur iOS Shortcut
Please enjoy my first shot at embedding images in my Listed blog. The complete set of LEGO Muppet minifigures. I did this using a iOS Shortcut I created, Upload to Imgur. There are other Upload to Imgur Shortcuts, but this one is mine. And this one resizes the image width to 2048px before uploading. I am not 100% convinced I want to stick with Imgur, but for now, it works out. And maybe I can get my headshot in there too. ...
Read post
The Twitter implosion and the pink lists
Content warning: violence against queer people in history. Like many people, I've been watching the implosion of Twitter under Space Karen with a mixture of dark humor, relief (that I left when I did), and horror. As time goes on and the likelihood that the company continues to be a going concern rapidly approach nil, the horror is growing. I started looking around for a couple options to try to scrub history. (I probably should have been doing this regularly. But I wasn't.) That was when I d...
Read post
A little more Listed customization
My last post introduced a few new things. For starters: Listed does code highlighting. It doesn't make the greatest color choices, though, in dark mode. I wonder if this is something I can contribute fixes for. I also wanted to use keycaps in that post. For this, I added my first bit of custom CSS: --- metatype: css --- kbd { border-style: outset; padding: 0em 0.25em; font-family: Roboto,sans-serif; } I based this on a little bit of fiddling in my browser's inspector, and also a ...
Read post
Edit your Zsh command line with vi
I have a bad habit of just kind of going with very slightly inconvenient things when developing, because I don't want to lose my focus. One of those is when I need to edit something in the middle of a long command line. I'll just hold the arrow key until I get there. When I used OpenBSD and ksh far more often, the solution to this was set -o vi stuck into my $HOME/.kshrc file, which transformed my shell into a little vi editor. Now I could hit Esc to hop out of normal mode and use all my favo...
Read post
What it's like writing on Listed
Okay, okay, but please, just let me get the meta out now? How can you have a blog without starting with meta? Putting together yesterday's piece was a new experience for me. I've previously written in one of two modes: in vi either directly on the OpenBSD server that also hosted the blog, or on my MacBook to be built with the ancient Felix Felicis and rsynced into place, or in the massive, somewhat overwhelming environment of Atomic Spin's WordPress admin area The latter part is interesting...
Read post
Mister Rogers and François Clemmons
I promised a friend that I would go deeper into the story of François Clemmons. Said friend had posted the well-known story of the Mister Rogers character Officer Clemmons, who—well, I'll just crib Wikipedia: For 25 years, Clemmons performed the role of Officer Clemmons, a friendly neighborhood policeman, in the "Neighborhood of Make-Believe" on the children's television show Mister Rogers' Neighborhood. In the neighborhood itself, Clemmons ran a singing and dance studio located in the buildin...
Read post
Let's try this again
This is going to be a bit of an exercise in fighting perfectionism. I've been a Standard Notes fan for, gosh, a very long time now. (I reviewed it for Atomic Spin back in 2018!) And they've had Listed for the entire time I've been a fan. I tried it once, for a pseudonymous thought dumping ground. I found out I'm not really all that compatible with pseudonymity. I'm sort of an all-or-nothing type—I don't partition. So that went by the wayside. Just a couple entries left in my Standard Notes ac...
Read post
The drain of self-advocacy
It seems it’s International Non-binary People’s Day. Which is cool. I had no idea it was today until I saw the posts. What can I say? I haven’t flipped through the gay agenda in awhile. The post that brought it to my attention contained one of the many articles that queer organizations publish on these sorts of days to help people learn how to be a better ally. "Great!" I thought. "I can share this! And people can pass it around and learn some important things!" But I hesitated. I haven’t t...
Read post
On supporting a friend
I've been thinking this morning about the nature of support, and how we can offer it to our loved ones. I think this an unfortunately really common thought pattern: in order to offer support, we have to take an active role in another's life. We have to make our loved ones' endeavors our own, we have to literally take part, right? Otherwise, the thinking goes that we're not being supportive. But if we don't enjoy the thing, if we don't feel that personal pull, if we are personally worn-out, if ...
Read post
Review: GRIS
I haven't reviewed a game since 2011—my last was my review of Atsumete! Kirby (a.k.a. Kirby Mass Attack) for my old games media stomping grounds formerly known as N-Sider. But after playing Nomada Studio's GRIS this weekend, I felt like sitting down and writing because I have been moved in a way that I haven't been in a good while. Nintendo has this great setup these days; if you wishlist a game on the Switch's eShop, you'll get an email when one goes on sale, which is great because perusing th...
Read post
Your candle
You have a candle. It has a beautiful flame, unique and in colors not often seen in this world. You want everyone to share the joy you get from that candle, to understand where the flame comes from, to love its colors like you do. But it’s not like any candle they’ve seen. And so you have to burn it brighter, hotter, really let them get a good look at it and the light it casts on your face, let them see you illuminated in its beauty. Unfortunately, you only have the one candle. And when it’s ...
Read post
In memoriam
Content warning: death, mourning. I've felt significant loss in the last part of 2018. We lost my spouse's father, a wonderful, kind man who loved his grandchildren. We lost my nineteen-year-old cat, the most special pet I've ever had, who loved everyone he saw and always wanted to be involved in what we were doing. I've been thinking about what it means for someone to pass on. Religious schools of thought often teach us that the souls of the departed move on somewhere else, but as I've develo...
Read post
Natalie Nguyen
A year ago today, a young woman named Natalie Nguyen committed suicide, and her death reverberated through the community on Mastodon that I had only been a part of for a few months. I learned about it the next day. She was not a part of my immediate circles, though we shared many friends. I could feel the pain of her loss through them. She was a light in their lives and extinguished far too soon. But as if it wasn't cruel enough that the world took her from those friends, what happened afterw...
Read post
A JavaScript object that dynamically returns unknown properties
In our current project, we make extensive use of JavaScript objects as dictionaries, with the property name functioning as a key for the object we want to look up. We can use the in operator to test for property presence, and the dictionaries are perfectly JSON-serializable. However, when it comes time to build test fixtures around these dictionaries for testing code that might look up lots of different keys, creating the test data for all of these keys becomes a large effort. Luckily, ES2015 h...
Read post
Setting up Windows to build and run Node.js applications
Node.js is just JavaScript, right? So it should be really easy to run Node.js applications on Windows—just download and install Node, npm install, and go, right? Well, for some applications, that’s true. But if you need to compile extensions, you’ll need a few more things. And, of course, with Node.js itself being constantly under development, you’ll want to lock down your development to a version your code can use. In this post, I’ll talk you through how we get our Windows command-line environ...
Read post
Feeling Pride at Atomic
I am bisexual, and last November, I came out to everyone at Atomic. In any other job I’ve worked, I likely would have endlessly vacillated and probably just mentioned it in passing to a few coworkers. “Who needs to know?” I would have asked myself. And I would have kept quiet. But from my friends here, I felt support. Respect. I knew that in this environment, I could bring my whole self and freely advocate for all my siblings in the LGBTQIA+ community. What I didn’t expect was how much making ...
Read post
Review: end-to-end encrypted notes with Standard Notes
I’ve been looking for a software solution I can trust for writing, journaling, and taking notes securely. Many options exist, but they never quite fulfilled the demands of my wishlist: multi-device, cloud-synced, end-to-end-encrypted, and open. A few months ago, though, I discovered Standard Notes, and now I can’t imagine accepting any other solution. Standard Notes feels like the kind of solution I’d engineer if I were calling all the shots. The service is entirely open-source, to the point t...
Read post
Why a no-moonlighting guideline benefits employees
I had an old employer reach out to me the other day asking if I’d like to do some contract work for them. As I have in all these situations, I recalled Atomic’s guideline for Atoms—we should not do work on the side that competes or conflicts with Atomic’s business. While it’s immediately clear how such a guideline protects Atomic’s business, I’ve also found that it’s really helpful for me personally. Sustainable pace is an important Atomic value—one that attracted me strongly to becoming an At...
Read post
Spreading the spread and rest love
JavaScript’s spread syntax has proven to be an extremely useful tool while working with immutable data structures as part of a React/Redux project. Now that it’s widely available for objects in LTS Node 8 (as it has been for some time for other runtimes via TypeScript), it’s interesting to go back and take a look at all it can do. Object Spreads In our codebase, object spreads get the most use by far. They look like this: const x = { a: 1, b: 2 }; const y = { ...x, c: 3 }; // y == {a: 1, b: 2...
Read post
Resetting a Wacom Bamboo Spark
Last week, I turned on my Wacom Bamboo Spark smartpad (no longer available, but Wacom has other smartpad models) and the two indicator lights started flashing alternately like a railroad crossing signal. I could go through the Inkspace re-pairing process successfully, despite the lights never flashing, but the Spark would no longer recognize or record—or at the very least, would not sync—any additional handwritten notes I would make. I contacted Wacom on Tuesday. After several days of silence,...
Read post
A PyOhio emergency
As you may have seen, I was at PyOhio this weekend, and I was t{wee,oo}ting a lot. As such, my Apple Watch was going nuts with RTs, faves, &c. I was talking to some people in a hallway and force-pressed to clear my notifications… and somehow the "Clear All" button got stuck on my watch screen. I kept pressing it, and nothing happened. So I tried holding down the button that normally would bring up the power-off screen… Watch: (loudly) WHOOP WHOOP Apple Watch has a feature that I've never ...
Read post
Lessons learned losing
This morning I woke up, weighed myself, and found I'd finally lost 50 pounds since I started pursuing weight loss in earnest in September 2016. This isn't my first time here. Back in 2008, when Wii Fit originally came out, I also shed a good amount of weight, landing about 5 pounds or so over where I am today. But that loss wasn't as good as it could have been: Intellectually, I knew that losing 5 pounds a week was unsustainable, but I had no problem shedding somewhere under that so long as...
Read post
Retiring brewdo
It's been a long time since I've written a post just for this site, hasn't it? Nearly three years ago, I joined Atomic Object. (I actually started in August 2014. We tend to publish our welcome posts a little while after new Atoms settle in. Also, holy cow. Look at me then and now. I guess I have lost a lot of weight!) At the time, I was pretty actively blogging here and exploring my role in the tech community, sharing projects on my GitHub both actively-used and experimental, and even trying...
Read post
Representing function properties in TypeScript
We’ve been using TypeScript on an Electron project. It’s been a huge win already—a little additional upfront investment gives us more confidence that our code is correct and reduces the chance that it will pass unexpectedly-shaped objects around, a source of many bugs in my past Node applications. But sometimes, it’s not immediately clear how to type certain kinds of objects. You can, of course, represent these as any whenever you need to—but any any you rely on can weaken your code’s quality. ...
Read post
Can the macOS Disk Utility really erase an SSD?
Laptop computers, especially those with a lot of internal storage, are very convenient. In the same amount of physical space that a magazine would take up, we can carry an amazing amount of data with us and work with it anywhere. One flip-side of that benefit is that all that data remains inside that computer even after we’ve moved on to a new one, unless we take steps to erase it first. With older laptops featuring spinning magnetic hard disk drives, a lengthy, random erase process was the bes...
Read post
Virtual network customization in VMware Fusion
VMware Fusion is a powerful tool for developers that need to virtualize systems. Its networking functionality is also powerful, but somewhat hidden. In my latest post, I dive into customizing virtual networks over at Atomic Spin. ...
Read post
Security hygiene for software professionals
A topic near and dear to my, and I hope every software professional's heart is how to be as secure as possible. I've covered a number of ways you can practice good security hygiene over at Atomic Spin. ...
Read post
The security spectrum of curl | sh
The curl | sh pattern for installing software is much-maligned, and can definitely be used carelessly. But how bad it actually is a more nuanced question than you might think, a topic I wrote about over at Atomic Spin. ...
Read post
Easy secure web serving with OpenBSD's acme-client and Let's Encrypt
OpenBSD makes it easier than ever to serve your web pages over HTTPS with the newly-imported acme-client. Over at Atomic Spin, I've written up a guide on how to use it. ...
Read post
Command injection, or how /bin/sh can rm -rf your server
I've see a lot of people make the mistake of using system(3). That's just it, they use it. In this video (!) over at Atomic Spin, I talk about why that's a mistake. ...
Read post
Date math across timezones with Moment.js
Time is the bane of all programmers. Handling it in JavaScript is not easy. But there is hope: my post on date math using Moment.js. ...
Read post
"npm install -g" considered harmful
Everything wants you to npm install -g these days. Fight it! I give you great reasons to at Why you shouldn't "npm install -g" (alternate title: "npm install -g" considered harmful) over at Atomic Spin. ...
Read post
The JavaScript Promises trilogy
I continue my obsession with all things asychronous by writing an epic three-part trilogy on JavaScript Promises at Atomic Spin: How they work How they break How they'll work someday ...
Read post
Precision decimal math in JavaScript with decimal.js
Long-standing frustrations with floating point errors when dealing with money in a JavaScript project led me to seek out a way to do precision decimal math. I wrote about it in Precision decimal math in JavaScript with decimal.js at Atomic Spin. ...
Read post
Developing on OS X inside Vagrant
Did you know you can run Apple's OS X inside a https://www.vagrantup.com/ machine? You can, and I tell you how in Developing on OS X inside Vagrant over on Atomic Spin. ...
Read post
Swiss Cheese and Pair Programming
One of my favorite podcasts inspired me to write about how pair programming is like cheese. I ran to the store, bought some cheese, and wrote Swiss Cheese and Pair Programming for Atomic Spin. ...
Read post
Questions to ask when bringing in third-party code
Modern developers, including those of us at Atomic Object, use a lot of third-party open-source code. I've been thinking about this lately and decided to write about a few questions you can ask yourself when bringing in third-party code over at Atomic Spin. ...
Read post
pyenv slides from PyOhio
I gave a lightning talk last night here at PyOhio introducing pyenv and a brief overview of the unique kinds of problems that my old standard of project isolation—a Homebrewed Python and virtualenv—yielded. About 16 hours later, I've actually got around to unstuffing my liquidluck virtualenv by converting it to pyenv. As a result, I can now share the slides with you! Here are those slides in PDF form. Thanks, PyOhio! (And thanks, too, Danielle, for letting me use your pictures of van Rossum...
Read post
Tall trucks, low bridges, and iOS geofences
I've been working a bit with geofencing on a project at Atomic Object. The topic turns out to be pretty interesting. Using a recent truck crash into a low bridge as inspiration, I wrote "Tall trucks, low bridges, and iOS geofencing" for Atomic Spin. ...
Read post
Creating man pages in Markdown with Ronn
Man pages are great (and I'd argue overlooked a lot these days) but have traditionally been a bit old-school to make. Ronn makes it possible to easily write man pages with modern Markdown—and I've written about how to make man pages in Markdown with Ronn over at Atomic Spin. ...
Read post
Using reflection to test complex objects
Copy behavior on large data objects is really boring (and error-prone) to write tests for. To make this task more fun and more reliable, I looked into and wrote about using reflection to test complex objects over at Atomic Spin. ...
Read post
Getting started using C libraries from Swift
For a side project I've been working on, I needed to pull in the CommonCrypto C library. Since I've been working in Swift, this wasn't totally straightforward. I wrote about getting started using C libraries from Swift over at Atomic Spin. ...
Read post
Trace writes inside Selenium tests
My current project at Atomic Object uses Selenium to drive browsers for integration testing—and it turns out that it's a useful debugging tool, too. I've written on how to do trace writes in that framework over at Atomic Spin. ...
Read post
Understanding the 3 main types of encryption
For my second post at Atomic Spin, I've chosen to write about Understanding the 3 main types of encryption—symmetric, asymmetric, and hashing. This spawned from an office discussion about encryption topics, and I thought a tour of how developers could best use the three would make a good post. ...
Read post
Turning asynchronous networking inside-out
Turning asynchronous networking inside-out is my very first Atomic Spin post here at Atomic Object. It walks through why asynchronous networking is so important, and then shows the key differences between callback-driven asynchronous code using Twisted code and the new coroutine-based hotness of asyncio. ...
Read post
sudoless Rails
I'm working through chapter 1 of "The Ruby on Rails Tutorial" and I'm already blanching at the number of invocations of sudo that are present. I'm thinking to myself, "surely there must be a way to do this while globally installing as little software as possible?" After all, sudo install is like using global variables to manage state. — @trenton42, via https://twitter.com/zigg/status/496002096085209088 Avoiding the global installation of software that's for a specific project is not just a...
Read post
brewdo lightning talk slides from PyOhio
My scheduled talk on octothorpe wasn't the only thing I presented. Ben Rousch planted the seed in my mind that I should put my name up on the lightning talk board to introduce brewdo. Here are those slides. Excelsior! (And now I'm done doing PyOhio 2014 talks.) ...
Read post
octothorpe talk slides from PyOhio
The slide deck is refreshed a bit, so here are my octothorpe talk slides from PyOhio 2014. This is probably the last iteration of this talk I'll give, so I hope everyone enjoyed it! UPDATE: Video from this talk is now available at pyvideo.org. ...
Read post
Introduction to Ansible talk
Here are the slides from my "Introduction to Ansible" talk at DevOps West Michigan. Don't forget your cowsay. ...
Read post
A week of code
This post is going to be a bit lighter on the hard content than my usual, but I had a great week of code and I feel like writing about it. Developments with brewdo led it all off. Last Saturday, I finally added install code, and started down the path of configuring the user's Sudo configuration for them—something that took me awhile because I didn't want to screw it up. I came up with a solution I was finally comfortable with and merged it, but when I studied the result I decided that brewdo...
Read post
Sandboxing Homebrew
UPDATE: I'm fleshing this experiment out into a tool called brewdo. I've been at this Unix thing for… many years. Let's just leave it at that. In this time I've developed a healthy respect for the wall the operating system typically erects that makes this dichotomy: Whatever's in $HOME is all yours; you have rights to it, you can blow it away Whatever's in /usr is everyone's; you can only muck about with it if you use su or Sudo, and filesystem permissions will stop you if you try to do ...
Read post
Using virtualenv Python in local Ansible
I've been playing with Ansible's module for DigitalOcean as I work toward moving my site off the creaky old shared hosting and into The Future™. I hope to have a more in-detailed writeup of that whole process later, but right now I have it working rather nicely with a shared playbook and roles that let me spin up my entire system either on DigitalOcean or in Vagrant. One catch was getting local Ansible (since the digital_ocean action runs on the local system) to work with the virtualenv I'm d...
Read post
octothorpe talk slides from GRDevDay
My blog seems to be for posting talk slides lately. In that grand tradition, here are the slides from my octothorpe talk that I gave at GRDevDay 2014. The examples are all avaliable in the repository at GitHub. Thanks to all who came; I hope you enjoyed this talk. I'll be revisiting it next month at GRPUG, likely with a little more in-depth material. ...
Read post
My bdist_rpm talk from GRPUG
Here are the slides from my bdist_rpm talk at GRPUG tonight. It was a lot of fun and now I can't talk at all because my throat is so dry. ...
Read post
Trust upgrades
$ keybase track trenton info: ...checking identity proofs ✔ public key fingerprint: 7E3C FC83 D64E 2A7B C124 5AC9 191A 0473 89DD 2A77 ✔ "trenton42" on twitter: https://twitter.com/trenton42/status/441778278521909248 ✔ "trenton42" on github: https://gist.github.com/9404822 Is this the trenton you wanted? [y/N] y Permanently track this user, and write proof to server? [Y/n] I couldn't answer yes. Keybase lit up many a Twitter timeline this weekend, including mine. I was lucky enough to nab an ...
Read post
Slides from my RPM talk at DevOps West Michigan
Here are the slides from my RPM talk tonight at DevOps West Michigan. It was fun and not at all a disaster! ...
Read post
Everything I think I know about flowers in Animal Crossing: New Leaf
Ah, Animal Crossing. Sinker of time. I've played every iteration of the series since its debut on GameCube. The second one, Wild World on the Nintendo DS, I probably played the most, due in no small part to one mechanic I found ridiculously addictive: making rare hybrid flowers. In Animal Crossing games, you can buy flower seeds from the in-game shops; planting these instantly spawns flowers. But since Wild World (at least… I'm not really sure how the original worked!), you've only been ab...
Read post
Yum repository bootstrapping in Ansible
I don't do cloud-scale work, but I do provision systems a lot, since I develop and maintain a custom Linux distribution that we sell on a box at Code Blue. With that in mind, and after hearing more about some of the options available at the inaugural meeting of DevOps West Michigan, I decided some weeks ago to investigate the current state-of-the-art in that field. My short time with Puppet was marked with initial intrigue but eventually deep frustration over a specific thing I really wanted ...
Read post
Introducing sham
Some people, when their cats throw up in the middle of the night, go back to sleep. Some people write their own test double library. I am the latter person. I just pushed my initial commit for sham, a test double library I started making because I have issues with the popular Mock. Now, I love what Mock does. After Adam Tauno Williams' presentation on it at the Grand Rapids Python Users Group, I started using it for octothorpe, replacing some custom-built test doubles that recorded their be...
Read post
Hello, world!
This is my first post on the new zigg.com powered by Felix Felicis. How I got here is a bit of a story. I once was a rather prolific writer (though of questionable quality) on places like N-Sider and my own Blogger-powered journal. In those days, Blogger provided the option to publish directly to my own hosted space instead of using their servers. Alas, they claimed it was all very unreliable (even when using SFTP, which to this day I'm not totally sure I believe) and shut it down unless yo...
Read post
eBooks: a love-hate story
A Christmas tradition is developing in my house. It goes a little something like this: Some gadget is announced in the run-up to the holiday season. I become obsessed with said gadget. Said gadget gets an announced release date well in advance of Christmas. My wife tires of hearing me talk about it and suggests I buy myself one as an “early Christmas present”. This is how I ended up with my 2013 Kindle Paperwhite, which is truly a wondrous device for those who enjoy reading books, as an...
Read post
The new lock-in
Much ado is currently being made of Google’s recent announcement that it will soon join the ranks of contemporary “social” companies and grant itself the right to construct ads using your profile and endorsement. Mercifully, Big Data in this case is letting you opt out. But what if that’s not enough for you? What if this action served as your personal revelation that companies like Google and Facebook have access to a lot of your life, and you have finally decided you want out? Well, it’s not ...
Read post
Disabling wlan power management
Disabling power management on a wlan device is easy in the one-off case: # /sbin/iwconfig wlan0 power off However, pm-utils will re-enable power management when certain events occur, such as disconnecting AC power. To unconditionally keep power management off, create /etc/pm/power.d/wireless as an executable script with the following contents: #!/bin/sh /sbin/iwconfig wlan0 power off ...
Read post
Disabling hibernation in PolicyKit
To disable hibernation in PolicyKit, create a file /etc/polkit-1/localauthority/50-local.d/com.zigg.disable-hibernate.pkla with the following contents: [Disable hibernate by default] Identity=unix-user:* Action=org.freedesktop.upower.hibernate ResultActive=no Inspired by the enable configuration at How do I hibernate my computer?. ...
Read post
Permanence
The Internet has really screwed up the notion of permanence. I have seen some rather insightful observations made lately on how today's kids are going to grow up able to retrieve much of what they said when they were younger. This is, of course, thanks to the fact that they're stuffing nearly every casually uttered word into the maw of Facebook, the company least likely to even consider deleting a word of it. Of course, this is nothing new; only the scale and commitment is novel. Words give...
Read post