A collection of objects that I've 3D modeled and printed, with links to explanatory videos and photographs of the objects installed in the real world.
A single page, broadsheet view of the Twitter users you want to read, written in pure ES6 using the public API. Wider columns than TweetDeck on large monitors. No algorithmic surfacing. Infinite scrolling only when you want to.
Page Up / Down will scroll an entire page's worth of feeds, aligning to the size of the viewport.
Mouse Wheel Up / Down will scroll a user's feed.
To modify TwitGrid for yourself, simply save TwitGrid/index.html (it's all in a single file) and edit the list of user handles you want to see. The GitHub repo has more detailed instructions.
By default, most smartphones today will geotag all the photos they take, wherever you are. Even if you are at home. Which is kind of creepy.
Here's a short Bash script using the exiv2 tool that strips the most sensitive GPS data, while leaving the rest of the useful EXIF information in place. It also lets me add creator + copyright + website link information easily and recursively to all files under a folder.
A smart Python script that uses ffmpeg to convert all videos of a selected resolution and codec type into a set of output videos according to one or more transcoding profiles.
If the file has already been transcoded, it will not be done again, which is useful for large batches of video. You can run this script on a staging folder over and over again and it will pick up and transcode the new videos each time.
I wrote this script to help me transcode a bunch of 4K HEVC video files into faster, smaller proxy editing files using something like UT Video or MagicYUV.
During the fall of 2019, I spent some time seeing which grocery store plants I could get to grow at home. You know what I mean, the potato that had sprouted too many eyes, a ginger plant that seemed to be pushing its way out, green onions, and lemongrass stalks.
These plants had survived through sheer tenacity, so I figured I'd give them a longer lease on life.
This is writeup of the process of modeling and printing a support structure for a bundle of green onions in a standard food-safe plastic bucket. Though it didn't work out as I'd hoped, it was still a fun experiment.
When you have a hammer, everything looks like a nail: When you have a 3D printer, everything looks like it should be 3D printed.
In this case, I modeled a holder to reuse the stainless filter basket from an IKEA teapot to use it with a regular mug. The first two versions weren't great, so I made a third. Clearly I have too much time on my hands.
Take 1 part electric screwdriver + 1 part cheap IKEA spice grinder + 1 part 3D printer and create an electric spice shredder that can quickly pulverize a load of spices for that next curry you want to make.
Anyone with a 3D printer can print up the pieces needed to build this, the only extra piece needed is a 50mm adjustable pipe clamp.
Sets up a high-water usage canary for the Interrupt Service Routine, main thread, and other thread stacks; as well as for the heap memory. Goes pretty deep into the undocumented operating-system interfaces.
I wrote this to debug memory issues I encountered, before newer versions of mbed OS made this type of functionality part of the mainline.
Life is short. Experience this fact vis(cer|u)ally.
Not all USB Serial Adapters are equal.
After running into errors when programming an embedded microcontroller, it took me a bunch of time to determine that the issue was in the serial adapter chip hardware.
This was a comparison of the most widespread chips from FTDI, Prolific, Silicon Labs, and WinChipHead, which took a couple of weeks to complete.
A bit of App Script for Google Docs that lets you forward geocode (address -> lat, long) and reverse geocode (lat, long -> address). Took a bit of experimentation to get working, but learned how to programmatically modify a Google Sheet. Loads of fun.
Click here to try a live copy of the script in a Test Spreadsheet.
You must be logged into Google for the script to work due to the way the Geocoding Maps API quotas work. It won't work for non-logged in or Incognito Mode users.
This was one of the hackathons I took part in in 2015, in which I built a fun little temperature-based pump controller using the now-obsolete Intel Edison.
Here's a video of the mocked-up Brewbeard pump controller I built using the Intel Edison and the presentation PDF I gave at the hackathon.
It used a halogen bulb to heat a temperature sensor, which then triggered the movement of fluid between two bottles, simulating the boiling and transfer process from a mash tun.
It's a solver for the board game Scotland Yard, which shows you the possible locations that can be occupied by the shadowy Mr. X, given a last known position and the moves played.
Localization Spreadsheet JSONifyGoogle Docs Spreadsheets are a relatively easy way to set up a translation table for localizing a website.
The only problem: the ATOM, CSV, and RSS publishing functions don't escape strings properly, leading them to be essentially useless for data interchange. So I spent a little time putting together a Google App Script that can output a usable translation table in JSON format.
This script takes an input directory and recursively replicates it with zero-length directory and file entries to a specified output directory.
What this was used for: Rather than running the compress/decompress cycle on real data while building-testing an installer, it is much easier if all the input files are simply zeroed out, making compression instantaneous.This is a program I wrote to familiarize myself with the winpcap packet capture library, thread programming concepts, and the SDL multimedia library.