The blog is currently being ported from WordPress to over 12 years of static pages of content.
If there's an article missing that you're hoping to see, please
and let me know and I'll prioritize getting it online.
By Ian Douglas |
February 7, 2017
I’ve been an open source advocate my entire career. While I studied on closed-source
technologies in college and in my initial career steps, I adopted Linux very early
in the mid to late 90’s and have always tried to give back to the community as much
as I take when it comes to advice and writing sample code.
I’ve always enjoyed peeking under the hood at what makes my favorite technologies tick.
Whether it’s examining the underlying code of how my favorite languages were written,
or finding optimizations, I enjoy diving into the low-level innards of the tools I
use on a regular basis.
I’ve especially enjoyed other projects which attempt to build a portfolio site or
‘resume’ based on open-source contributions. Some of my favorites:
My full open-source portfolio can be found at GitHub,
but below are some of my favorite projects. The follow is not an exhaustive list of all of
my open source contributions, but is indicative of the kinds of projects and technologies
which hold my interest.
This was an essential tool in my web hosting business, to allow cPanel-hosted customers have the means to train their own SpamAssassin configurations. For several years I ran a "make your own trainer" script builder for users to customize their own script online. The script has had thousands of downloads and hundreds of users continue to use the trainer on a regular basis.
I no longer support this project, and while it's always been open-source, I leave it up to the cPanel community to support one another on the use of this software.
I've been enrolled in a few Udacity programs (none of which I've finished yet), and these are some repositories I've created to store my work for Android, front-end development, and back-end development.
I often find myself starting new projects all the time with Python/Flask for Google App Engine, and wanted a skeleton project from which I could get started quickly.
Google App Engine has changed, so the instructions are out of date. For example, the newer Google Cloud SDK will run as 'gcloud preview app deploy' after you authenticate and set your project.
Developed for my employer with accompanying blog post (at blog.getstream.io). This is a quick mobile app to work with the associated Go backend service, that showcased an Instagram clone. I used the Camera API, upload the photo to the Go backend, and retrieve activity feed data from the backend to show a user timeline, a global feed, notification and aggregated feeds and a list of all users on the platform.
Developed for my employer as an example of how to build a performant API in Go. Since we are actively porting code from Python to Go we needed example code to follow and so I wrote the example application and a lengthy blog post. (available at blog.getstream.io)
Developed for my employer with accompanying blog post (at blog.getstream.io). This project is a simple Go backend API which handles photo sharing (stored in an S3 bucket), manage follow relationships between users, and track social engagement (likes).
As a "provider" (teacher) on the now-defunct Google Helpouts platform, I wanted a way to visualize data provided by Google in a CSV file about the number of classes I taught, the full text of reviews left for my classes (and star ratings) and a way to visualize my monetization for charging for some of my classes. I built a Polymer site using D3 for charting and allowed providers to upload a CSV (which was immediately deleted from the system) and see graphs and data (and a tag cloud of common words in reviews). Several providers made use of the project until the Helpouts platform was closed.
Developed for a talk I gave PyCon Canada in November 2012, this project will allow you to add cards to Trello via Email. Uses Google App Engine, Python, and SendGrid.
I've stopped working on this project due to changes in App Engine's behaviors, Trello updates, and mostly because this was just meant to be a proof of concept for a talk I gave at PyCon.
A collection of emmet.io shortcuts for JetBrains editors for HAML documents. I know some people love to hate on HAML but I use it extensively and having access to emmet shortcuts is pretty awesome. I've never checked whether anyone else has done this.
As a "provider" (teacher) on the now-defunct Google Helpouts platform, I often had some frustrations around adding students to my Google+ circles to re-market new classes to them in the future, so I build a Chrome plugin to find the student's Google+ profile and allow me to add them to my circles. I provided the plugin as a side-loaded plugin to ease the concern over data security so other providers could see I wasn't doing anything unexpected with their data.
When Elizabeth and I were engaged, I wrote a guest list management web app that allowed us to add family and friends to a database, categorize them in lists like "must invite", "A list", "B List" and "C List", and even keep notes (like who gave you a particular gift). The software generated a simple PDF file that could be printed over a sheet of mailing labels (I believe it was 2 5/8" x 1", like Avery 5160, 30 labels per sheet, 10 rows of 3 columns) for invitations, thank-you cards, etc. Contact me if you want a copy; it was probably written with PHP4/MySQL and would need a pretty massive overhaul.
I originally wrote "h300goodies" for managing music on the iRiver H300-series MP3 players. Since I could mount the drive on Linux, I wanted to script up some tools that would auto-manage the music I owned and ripped on my NAS at home as well as music I bought online.
I'm considering breathing new life into these scripts (and write them in an alternate language) since I can also mount my Android devices to my Linux systems as well. However, since most of my music is already uploaded to Google Play Music already, this seems a little redundant.
Along with the h300goodies package I wrote, I also wanted something to help manage my podcast feeds. I wrote a pretty complex Perl script which read an XML configuration file to download new podcasts, rename files, build m3u playlists, and more. At the time, mine was the only podcast manager which let you prioritize downloads based on "newest first" or "oldest first" or to restrict downloads greater than a certain size. If I were to update this project, I would use some other language, and likely a YAML-based configuration system.
I love reading daily cartoons from all around the internet. It's just a chore to get them all in one spot. One of my first forays into web scraping found me finding my favorite cartoons such as Dilbert and Foxtrot and presenting them in a "funnies page" style web page. One of the cartoon authors eventually found my plugin, accused me of copyright violation because I didn't have a license in place with each cartoon author to publish their works. I don't have the code online any more because of this, but if I find a copy I might post it here some day.