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.
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: https://github.com/anorman728/ant.
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 firstname.lastname@example.org.
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.
I have a major update and some minor updates for Threadstr.
It’s still not meaningfully functional, but it’s far enough along that I don’t intend to wipe the database on updates anymore.
All functions in the Options page are now usable. (Or, at least, they’re supposed to be.) Additionally, there’s a favicon added, helmet is being used to secure the Express app, and forever-monitor is being used to reset the server when it goes down for whatever reason. Finally, I moved the MySQL command that simply keeps the database alive to another place because it’s possible that its previous location was causing a memory leak by opening up way too many connections and not closing them, and its frequency is now every ten minutes instead of every five seconds.
Next up is actually being able to create and add to threads– The Feature Presentation.
I am aware that Threadstr is occasionally going down. Even though it’s not currently functional anyway, I want to get this resolved ASAP, because I don’t want it to be an issue when it is fully-functional.
The issue seems to be that MySQL is getting an out-of-memory error, and I’m not the only one having this problem on DO.
I’m approaching this on two fronts:
- Stop the out-of-memory error from occurring.
- Have the DO droplet restart and restart Node.js when it exits abruptly.
Both of these have their own challenges. In the first case, adding RAM doesn’t always seem to make much of a difference, according to the thread linked above. In the second case, Node.js, unlike Apache, doesn’t start up in the background by default when the machine starts up, and I don’t know how to get Node.js to restart the machine if it crashes.
It’s an ongoing learning experience, but I am definitely determined to make this work as well as I possibly can.
I bought the domain name threadstr.com a while ago (before I bought this one, actually). The project isn’t anywhere near completion, but, since DO droplets are a mere $5 a month, I decided to go ahead and put up what I have so far– Partly as having it out there publically will be incentive to get myself working on it some more, but mostly just to show what I have so far.
So, it’s up now.
“Incomplete” is an understatement. At this point, the only thing that a user can do is create an account, but, nonetheless, a lot of work has gone into what’s there so far. Unfortunately, “a lot of work” doesn’t mean the website is usable, so more work is going to be required to make it functional.
Development on this project is slow-moving since it’s an at-home project (and it’s also my first exposure to Node.js). Slow-moving, but not at a standstill.
I’m going to take a quick break from it to work on a timekeeping program that I discussed with my sister. I was telling her about how useful scripting languages can be and, among other things, how I’ve been using a VBScript program to keep track of how long I spend on each project (it would be PowerShell if I wrote it today). She’s expressed interest, and I plan to make it into a full-fledged program to add to my portfolio. I thought about making it a C++ Qt program, but decided that, in the interest of time, I should go with something that I know, so it’ll be a Java program instead. That will, of course, be showing up on this site and GitHub eventually.
I’ve decided to go ahead and open source my current big project (at home, at least): Threadstr. Soon, I’ll also set up a Droplet to host the incomplete project just to show it at work, although it’s not yet functional (or even close to functional).
The basic idea is to create a discussion thread that’s not actually attached to a particular message board. This might seem unusual at first, but the idea is that it can be shared and organized in a way that’s better than Facebook comments or Twitter replies.
As for the code, I’ll let my in-code documentation speak for itself.
A future plan is to allow the user to create debate threads, which would let two people have a moderated text debate, where the moderator is the server. It would determine when you can post (opening statement, rebuttal, cross-x, and closing statement), a minimum and maximum post length, and a time window that would determine when someone is allowed to post.
I’ll put up a working (but incomplete) model in the near future– Possibly tomorrow. I would do it tonight, but it’s getting too late to do much more work.
Oh, and a shout-out to my friend and coworker Cari Landrum for the logo. My version looked awful, so I took it to her and she made this version that looks fantastic.
UPDATE: I think I’m going to wait just a little while before putting up a working model. Right now, the only thing you can do is create an account, which will be wiped out eventually anyway.