You can do three things with a computer. You can try to make money and that is unlikely. You can try to become famous and that never happens. And you can have fun and that always works.
– Chuck Moore, creator of the Forth programming language
When presented in a low-stress hobby setting, computers offer a vehicle for personal enrichment rather than strictly a tool for business or research. Some noteworthy Open Source projects started as hobby projects, the most notable example being the original Linux Kernel written by Linus Torvalds. Many other well known programmers have learned their skills as hobbyists pursuing an intellectual curiosity rather than explicitly seeking a career or a “serious” objective.
A well publicized example is the often quoted newsgroup post written by Linux torvalds in the early 90s:
I’m doing a free operating system, just a hobby, won’t be big and professional like gnu for 386(486) AT clones.
Below is a list of useful tools I’ve come in contact with over the years. I share them with the hope that they bring you enjoyment on your next hobby project. If you would like anything added to this list or would like to share something you’ve built using the tools below, please contact me on Lobste.rs or Reddit.
I used the following criteria to select the tools:
- They cost less than a coffee or are free.
- They can be learned quickly.
- They allow you to accomplish a single task in a short timeframe (such as a Sunday afternoon)
- They are less focused on the needs of long term projects (scalability, speed, etc.) and more focused on ease of use and prototyping speed.
MyJSON.com - Free Cloud Storage for JSON
Writing static sites can be fun, but they are not able to easily share persistent data between clients. Usually, this requires you to write a backend API or pay for a service like Firebase. That’s a lot of work though, and the point of a hobby project is to have fun.
When I need to store very small amounts of unstructured JSON for a toy apps, I use the MyJSON API. You can download and edit JSON documents via their CORS enabled REST API so that you don’t need to be bothered with provisioning a backend or paying hosting fees.
The owner of MyJSON seems to be a hobbyist as well. If you find value in MyJSON, consider thanking them on Twitter for their generosity.
REFL.ME - Simple Mobile Alerts
REFL.ME is an Android app that performs HTTP polling on a JSON URL and sends push notifications to your phone when the data changes. When paired with a Cron job and a JSON URL (see MyJSON section above), it offers a great way of creating mobile alerts without the hassle of authoring a full blown Android app.
Vultr - Dirt Cheap VPS Hosting
Since hobby projects rarely see high-volumes of traffic, the main concern is often cost rather than performance.
Vultr is my go-to solution for cheap hosting. As of this writing, the cheapest plan they offer is $2.50 a month. Although their cheapest plan defintely won’t be able to fuel your next high-powered computing project, it is a great solution when you need to host small scale tasks such as cron jobs.
Dokku - A Self-hosted PaaS
Dokku offers many of the features seen in “Platform-as-a-Service” offerings such as Heroku. Unlike many PaaS offerings, it can be hosted on a cheap VPS service (such as Vultr).
Although it is well suited for hobby projects, it’s important to note that Dokku also works great in production settings.
With Dokku, you can self host a push-to-deploy mechanism for your hobby project and not waste time with server configs. There are a number of community plugins that handle the most common usecases.
Free MQTT servers
MQTT is a simple, easy-to-learn protocol for realtime communication. It’s most commonly seen in “Internet of Things” projects (Arduino, Rasperry Pi) but can also be used in web projects via WebSocket tunneling.
Numerous freely available servers are listed on MQTT github Wiki.
These servers are great for simple hobby apps that run on low end devices like Arduinos, RaspberryPi or the ESP16 WiFi device. Some servers offer WebSocket support, which allows a browser to talk directly to the device without the need for a backend.
NGrok - Free Firewall Tunnel
If you are hosting a server on a home network with a dynamic IP address, it can be difficult to accept incoming web requests. NGrok provides local workstations with a
*.ngrok.io web address for exposing local servers to the Internet. It also provides HTTPS/TLS support, which is pretty cool!
This is especially useful when you want to experiment with third-party APIs that use WebHooks.
A Bookmarklet is a specially formatted bookmark toolbar entry that allows your browser to execute arbitrary code on any webpage. Bookmarklets have unfortunately gone unnoticed in recent years. They are a great alternative to browser extensions when you need to perform simple personal tasks such as scraping a webpage. There are some great tutorials and examples out there.
Cron jobs are a classic Unix automation tool and a powerful tool for many hobby projects. Although they are well known in the Linux community, I think they deserve a mention in case anyone has not yet used them.
Cron jobs allow a Unix-like operating system to execute a script on a recurring basis. This is often seen on personal tools such as weather and stockmarket monitoring scripts.
I’ve blogged about the History of CGI Scripts in the past. Although it is almost unheard of to see new production systems deployed with CGI scripts in a professional setting, CGI scripts can provide a hobbyist with a cheap and simple solution for dynamic backend scripting. Many shared hosting providers (such as the one I host this blog on) provide CGI-script support at no additional cost.