Category Archives: My Projects

The Lost Art of MIDI Music

Published / by Andrew

This one’s a little different, but code-related, so I thought I’d post about it here.

Without going too deeply into the details of how I became interested in this, not long ago I created a couple of Python 3 classes that act as wrappers for MIDIUtil, which builds MIDI files. Yesterday I went ahead and added those to my GitHub page– Lost Art.

It’s not exactly a professional tool, but it’s been a lot of fun to play with.

(Side note: I’ve also started work on my blogging CMS, now dubbed “Nomad“, but it’s in such early stages that there’s not a lot to talk about.)

New project announcement: Yet Another Blog CMS.

Published / by Andrew

When I made this blog, I remember thinking, “Hey, it’ll just be easiest to make a WordPress droplet.” Technically, I wasn’t wrong, but WordPress seems to get more and more counter-intuitive as time goes by, not to mention bloated.

After some frustrating experiences with WordPress (they seem to think I want to write blog posts in a textbox the size of a postage stamp?), I’ve decided on a new project: A basic CMS. (It’s hard to say exactly when I’ll be working on this, but I’m hoping to start this coming weekend, or maybe in small steps before then.)

This CMS will be using some of my unpopular opinions:

  • Simpler is better– Have few features so they don’t get in the way.
  • A blog CMS should be lightweight and quick.
  • Writing in a markup language is better than “rich text” editors.
  • JavaScript should be kept to a minimum.
  • RSS is better than social media.

I know that very few people will use this, but I will, and I suppose that’s all that matters.

That said, I also do plan on adding some interactivity features so that one blog may interact (minimally) with another.

It’s also worth noting that I also plan on bringing Threadstr back from the dead, this time in PHP. I had originally killed it because I was concerned that SESTA/FOSTA would make it impossible unless I have a large staff, but I have ideas on how to make that easier to manage.

Right now, though, I’m more interested in this blogging platform to replace WordPress.

Andrew’s Urgency Manager

Published / by Andrew

I created a project to help me manage the “urgency” of issues.  (Probably not the best term in retrospect.) I often have issues brought up that are ignored for too long because they’re “low priority,” so other issues take precedent, and newer issues keep getting added, pushing these old issues down in the priority list.

Andrew’s Urgency Manager

AUM is a command-line tool written in Python that helps manage that problem by increasing the priority of an issue over time, so even if an issue is originally assigned as a low priority, its priority level increases over time.

More details can be read on the front page of the project (the link above). My general workflow uses AUM to manage the priority of different projects and my todo syntax highlighting to manage details of a project. (The latter being what Mondonotes is based on, which I use a lot for non-work stuff.)


Published / by Andrew

I’ve recently launched my latest project,

MondoNotes is a task manager (as in, to-do list) and note-taker, but works differently from most task managers. At its core, MondoNotes is nothing more than a syntax-highlighter, changing colors based on whether you’re marking something as “todo” or “done,” or “information.” This is simple, but allows much more detailed projects and is far more intuitive than any task manager that I’ve used before. The syntax highlighting really helps to scan through the existing notes.

I’ve used this method for several years and slowly developed different features, but, until recently, I had only used a vim syntax file. MondoNotes is more accessible to non-Vim users, and has the advantage of being “in the cloud”, so I don’t have to worry about syncing files or downloading anything.

A video introducing Mondonotes can also be found here.

If you’re reading this, I hope you’re interested enough to give it a try. To say that this methodology has saved my skin and made projects much easier to manage would be an understatement. Thanks for reading!

Andrew’s Simple PHP Router

Published / by Andrew

A little while ago, I created a routing tool in PHP for a small website that I made. Essentially, it handles routing with as little as necessary to jumpstart MVC coding as closely to vanilla PHP as possible.

I created this because I felt like the MVC frameworks I’ve come across were far more complicated than necessary for small projects, and sometimes even for large projects.

Andrew’s Simple PHP Router

Threadstr is down

Published / by Andrew

Threadstr is currently down due to ipv6 issues. Hopefully, I’ll have time to create a new droplet tomorrow.

Update: Since Threadstr is so far from completion, I will not be creating a new server until a release candidate is available. (That could be awhile, because I have a lot of other projects that I’m working on.)

More FastMail programming woes

Published / by Andrew

The email on my Threadstr project has been broken for quite some time, but I’ve been too busy with other projects to get it working, since it’s not functional anyway. I finally got it working (but I haven’t gotten it pushed to the website yet), and I thought I’d share the fix here.

(Sidenote– When I did a search of “fastmail nodemailer” in Duckduckgo, my previous entry on the topic was the third result. That’s both kind of neat and kind of frustrating, because, apparently, nobody else was publically working on the problem.)

If you get an error message from Nodemailer that says “Sorry, the server names are no longer available,” this is because FastMail made yet another breaking change. (I’m kind of getting to the point where I’m considering moving to another service if this keeps up.) Unfortunately, the most recent version of Nodemailer hasn’t been able to catch up yet. You could change ths source code, but that’s probably not a good idea, because it would be overwritten by the next npm update.

When creating the transport (i.e., when you use Nodemailer’s createTransport function), you can’t currently use the “service” : “fastmail” option, because it uses Fastmail’s old settings. Instead, you’ll want to enter the settings manually, which, for FastMail, is the following:


You’ll need to use your own username and password, of course.

I hope this helps anyone coming across this problem. It’s an easy fix, but it is just frustrating that it needs to be done in the first place.

Some scripts to easily make a private VPN server.

Published / by Andrew

I spent my weekend learning about OpenVPN and how to set up a DigitalOcean droplet to act as a VPN server. This was inspired by recent congressional actions and the anger and frustration that followed from citizens. The short version is that you can use OpenVPN to hide your browsing history from your ISP, so they won’t have anything to sell. Additionally, though, you can use a VPN to protect your data while you’re using a public network to prevent man-in-the-middle attacks, like a coffee shop or a hotel network. Traveling professionals have been doing this since at least the 90s, and my goal, at the moment, is to make this accessible to pretty much any human being that uses a computer.

This is why I wrote two BASH scripts to automate the instructions given by DigitalOcean. These scripts should let you have a fully-functioning, private VPN server up and running in about twenty minutes. This is not you handing information over to a third-party VPN service that you don’t know if you can trust– This is your own VPN server, that you control, running on the highly-trusted DigitalOcean cloud.

I also created a YouTube video series to give an example of it being set up. As I say in the videos, I want a private VPN server to be as easy to make as a peanut butter sandwich.

If you’re interested in setting up a VPN, I hope this is helpful.

Ant v 1.1.0

Published / by Andrew

After some feedback from my sister (i.e., the end-user) as well as some changes that I wanted to make myself, I’ve updated Ant to version 1.1.0. Remember that the purpose of the program is to help you keep track of what you’re working on. That way, if you have billable hours, you’ll know what you were working on and when without having to guess “I think I spent about two hours on the Pensky file.”

Find both the install files and the documentation on the Github site:

It’s currently Windows-only because I wanted to have something in my portfolio that uses C# and I wasn’t able to either get Gtk# working correctly or get Mono to compile this project.

New features include:

  • Can populate Prompt Times based on an interval and subinterval lengths instead of one-at-a-time.
  • Can clear the Prompt Times list with one button.
  • If the output file is not readable (which will happen if you have it open in Excel), it will warn you.
  • Adding times is more keyboard-friendly.
  • Headers added instead of just starting the file with “Ant log file.”
  • Can add multiple messages instead of just one message.
  • Prompt is a little less intrusive (it pops up in the lower-right corner and remains on top, but can be ignored).

I’d also like to point out that I’m available for freelance/consulting work– If you would like a custom program, feel free to email me at


Published / by Andrew

The reason I haven’t been too active in the past week or so is because I’ve been busy working on a Windows Forms project in C# called “Ant,” and version 1.0.0 is now available on GitHub.

This project is based on a VBScript project that I had at my last job. I needed to keep track of how much time I spent on each individual project, so I wrote a script to prompt me once an hour with “What are you working on right now?” It would then take that input and put it into a CSV file, so I could keep track of it in Excel. (It’s VBScript instead of PowerShell because I wrote it before I became familiar with PowerShell.)

I was describing this project to my sister, and she said it would be very useful for people with billable hours. In its incarnation at that time, though, it would be kind of weird to distribute, so I decided to make it into a project that could be put into production. I did it in C# just because my experience in C# is light, so this gives me a little more exposure to the language.

Initially, I was going to make this project cross-platform using Gtk#, but I wasn’t able to get Gtk# working correctly (it’s very buggy), so it’s now a strictly-Windows project using the traditional Windows Forms. This is kind of ironic since I primarily use Ubuntu.

Between installing Windows 10 in a VirtualBox VM (Virtual desktops! Finally!) and learning a few things about Windows Forms that I didn’t already know from VBA in Excel, I spent quite a bit of time on this project, and there’s still some more to come. You can see the upcoming features in the Ant.todo file.