2021 was quite the year! COVID was in full swing. Institutions were in a permanent state of hybrid, and Bo Burnham released a banger of a special. I did some things as well. Let’s talk about them.
Table of Contents
Accomplishments in 2021
For most folks, 2021 was a hard year—myself included. As a result, I’m going to list off just about anything positive that happened as a major win:
- Passed qualifying exam
- Started a business bank account
- Watched a lot of movies, series, and anime
- Continued my Duolingo streak to 1300+ days
- Visited family for holidays (with caution)
- Got vaccinated against COVID three times
- Went to an in person hackathon
- Expanded several open-source libraries including Subete and SnakeMD
- Published my first conference paper
- Went camping in a tent and glamping in a cabin
- Visited my friend’s family in Florida for the first time
- Started learning Japanese
- Visited home a lot
- Passed all my classes
- Got back into teaching
Over the span of the year, I’d have to say my proudest achievement is passing my qualifying exam. That said, I think getting the chance to finally travel a bit is the thing I’ll remember the most about 2021. What sort of things did you accomplish? Surviving is a perfectly good answer!
Favorite Photos of 2021
While brainstorming the list above, I thought it would be fun to share some of my favorite photos from the past year.
In here, you’ll find a nice mix of camping photos, pet photos, and nephew photos. Oh and don’t forget that short trip to Florida! I’d love to go down there again.
Favorite Creations of 2021
I don’t remember exactly when I moved from posting twice a week to once a week, but I do know that 2021 was a light publishing year. At most, I wrote 4 articles a month, so putting together this list was pretty easy.
- January 2021: Roll Your Own Minimum Function in Python
- One series I kicked off this year was around rolling your own functions in Python. I have mostly neglected this series, but I really enjoyed it in concept as it mirrors the type of work that my friend, Robert, does every day.
- February 2021: 27 Best Anime Backed by Science
- How could I not celebrate February with an article about my birthday? This upcoming year I’m looking to really rile folks up with a post about the best programming languages.
- March 2021: How to Get Better at Programming: Lessons From Music
- Another series I started was basically a way for me to get away with sharing my interests outside of programming. To keep them topical, I tied my hobbies back to how they help me code.
- April 2021: So, How Bad Is Artifact Farming in Genshin Impact Really?
- Last year, I got sucked into the Genshin Impact madness. One of the more frustrating elements of that game is artifact farming, so I set out to figure out why it’s so painful.
- May 2021: Can You Actually Return Multiple Values From a Function in Python?
- Oh, I liked this article because it was one of the few times that I actually wrote a response to someone else’s content.
- June 2021: Python Basics: Everything You Need to Know to Get Started
- Apparently, I also got into writing a few “learn Python” series that I never finished. That’s pretty normal for me!
- July 2021: Introduction to Python Coding With Discord Bots
- Now, this is a series I should really flesh out. Discord bots are a really fun way to learn to code.
- August 2021: Sample Programs Docs Generator 2.3.0 Features How To Python README Automation
- Automating markdown generation was one of my big wins last year. Going into 2022, I’m going to pay special attention to folks making use of this!
- September 2021: I Passed My Qualifying Exam!
- Late last year, I finally checked off another major milestone in my PhD program. I passed my qualifying exam!
- October 2021: Programmatically Explore Code Snippets of Many Languages Using Python
- While automatically generating markdown is my favorite coding accomplishment of the last year, it shouldn’t get all the credit. I also wrote a tool to browse the Sample Programs repo using Python.
- November 2021: Comparing Java to Python: A Syntax Mapping
- As a lover of Python and a teacher of Java, I often find myself trying to convert students to Python. This article is a testament to that.
- December 2021: Documenting My Coding Course Upgrades
- In the daytime when I’m not working toward my PhD, I teach! This article captures some of the changes I’ve made to the course since I started teaching it.
At the moment, I don’t have a lot of plans for future content. I’ll be posting once a week as always, but I expect a particularly challenging semester ahead. As a result, I’ll be going with the flow.
Projects in 2021
Again, 2021 was a bit of a mess. Of course, that didn’t stop me from working on a bunch of cool and weird projects. Let’s get into it!
Sample Programs in Every Language
The Sample Programs repo has been my baby since early 2018. It’s the first open source project that really took off for me, and I’ve enjoyed working on it ever since.
That said, it’s a project that tends to revolve around the yearly Hacktoberfest mess. Rarely do I get folks contributing to it throughout the year, and I haven’t really heard of anyone using it. So, I have no clue if it’s getting any love.
To no surprise, the past year was yet another sort of Hacktoberfest-only year. That said, I did a lot of cool things around the idea of the Sample Programs repo. For instance, I made a template repo, so folks can make their own collections.
Likewise, I did a ton of work to extract some of the cooler parts of the workflow. For instance, I automated all of the READMEs. And, I even pulled out the README automation code into its own repo! More on that next.
At various points in maintaining the Sample Programs repo, I thought about ways to automate painful tasks. For example, I found the process of maintaining the READMEs for each programming language to be cumbersome. As a result, I wrote some code to automate them.
As you may know, GitHub READMEs are in Markdown. When I wrote the tools to automate the READMEs, I inadvertently wrote a Markdown generation script. Eventually, I ended up sharing that Markdown code with several of my own repos before deciding to extract it into its own library.
The resulting library ended up being called SnakeMD. It’s a silly name because what I really wanted was PyMD, but we can’t get everything we wanted. As a result, I settled on SnakeMD which sounds like a snake doctor. Instead, it generates Markdown files for you.
I’m extremely proud of such a simple script because it’s one of the few things I’ve made that I think will actually help folks. And I’m not wrong! I’ve done basically no marketing for it and 8 repos are already making use of it. How cool is that? The wild part is I don’t even know how folks are finding the repo because I can’t seem to get it to show up in Google.
Since we’re on the topic of Sample Programs ports, another library that I put together this past year was subete. Subete is a silly library, but I kind of love it. It allows me to programmatically browse the Sample Programs repo in Python.
I’ve most recently used this library to automate my profile page on GitHub. Once a week, I post (automatically) a different code snippet from the repo.
I’ve also used the library to generate some pretty plots of data related to the repo. I haven’t looked at these plots in ages, but I imagine they’re cool!
Oh, I’ve also used the library to create a Discord bot that shares random code snippets from the repo. It’s a silly thing, but I love it.
I’ve been tracking data about the site for a long time. These days, I don’t really pay attention to the metrics, but maybe you’ll enjoy taking a peek at them.
Page Views: Months & Years
As far as page views are concerned, all I can really say is “L + Ratio.” Joking aside, my view counts have definitely dropped over the years. That said, I think they’ve more or less stabilized, which is a positive in my eyes.
I don’t really have any goals for view count in 2022, but I’d be content with keep the site over 10k views a month. That seems reasonable!
Top Posts & Pages
I was a bit weirded out with the top pages this year. Surely, the Python stuff stands out. I realize that’s my niche. That said, an article I didn’t even write snuck into my top five, and that does make me sad from time to time.
That said, I am pleased with the spread of top posts. Once again, I don’t really have a single post running away with the view count like in 2019. Obviously, I wouldn’t be opposed to that kind of traffic, but I prefer the stability of the current setup.
Top Sources of Traffic
There’s no surprise that my top sources of traffic are organic. That said, what I’m most pleased by is the growth of support from other search engines like Bing and DuckDuckGo. With Google, I’ve found that I’ve slowly be falling off. I don’t know why Google refuses to recommend my content, but it’s frustrating. Thankfully, we’re seeing respectable growth from other sources.
|WordPress Android App|
Next year, I’d like to see DuckDuckGo and Bing (combined) take over Google. Then, I could finally prove that Google just hates my content.
Not much to say here. My content thrives in English speaking countries.
|#1||United States of America|
|United States of America|
|United States of America|
|United States of America|
| United States of America|
| United Kingdom|
Top YouTube Videos
Despite barely publishing at all over the past year, I didn’t see much in terms of fall off that a lot of YouTube folks describe. Perhaps my content is somewhat evergreen. Let’s see what happens in 2022.
|#1||3 Ways to Check If a List Is Empty in Python (232 views)||3 Ways to Element-Wise Sum Two Lists in Python (974 views)||3 Ways to Map Two Lists to a Dict in Python (876 views)|
|#2||4 Ways to Reverse a Dictionary in Python (146 views)||4 Ways to Reverse a Dictionary in Python (571 views)||3 Ways to Element-Wise Sum Two Lists in Python (592 views)|
|#3||3 Ways to Element-Wise Sum Two Lists in Python (142 views)||3 Ways to Map Two Lists to a Dict in Python (353 views)||4 Ways to Reverse a Dictionary in Python (511 views)|
|#4||3 Ways to Map Two Lists to a Dict in Python (44 views)||3 Ways to Check If a List Is Empty in Python (214 views)||3 Ways to Compare Strings in Python (457 views)|
|#5||The Definitive Guide to List Comprehensions in Python (37 views)||4 Ways to Get the Last Element of a List in Python (143 views)||4 Ways to Get the Last Element of a List in Python (408 views)|
Also, YouTube is nice enough to share a year in review email which included some fun 2021 stats:
- 6,763 minutes of watch time
- 2,941 views
- 49 likes
- 2 comments
Maybe I’ll have more time to post in 2022!
Ah yes, the money question! As a quick overview, money was about as good this year as last year, which is saying a lot given the decrease in traffic.
That said, let’s talk about income sources in more detail. Up first is Patreon which has shown a small decrease in support over the last year. That said, I picked up two more folks that I don’t even know, so that’s cool!
While I’m happy with the Patreon income, we have to talk about the Amazon income. Amazon is funny one for me because 99% of it comes from my trombone site which I don’t publish on anymore. That said, it’s still bringing me a fairly decent chunk of change at the end of the year. In fact, it outperformed last year! Maybe I’m in the wrong field.
As you probably know, I’m not a huge fan of ads. That said, they’re a fairly stable way of earning income, so I turned them back on this year. With just a handful of ads on the site (two in the sidebar and two in the footer), I managed to make over $100 in the span of a year. I would not be surprised if that number goes up in the next year.
One last table I like to include is for historical reasons: the membership revenue. Prior to Patreon, I rocked a membership site. That’s long gone, thankfully.
Outside of the big three sources of income (i.e., Patreon, Amazon, and Google Ads), I don’t really have other sources of revenue. That said, I started an official bank account for the site, and I even began investing the earnings. Maybe in the future we can talk about how those investments are going. For now, let’s call it a day.
A Look into 2022
These days, I try to move one day at a time. Between working toward candidacy and caring for family, I have little time to dedicate to the site. That said, this is one of those things that I’m proud to have said I started and continue to maintain. As a result, who knows what 2022 will bring, but I guarantee I’ll still be here.
With that said, is there anything you want to see in 2022? Let me know!
While you’re thinking about that, here are some of the other review posts for your perusal:
Otherwise, happy new year! Let’s make 2022 great.
Life has given me a bit of a beating, so I'm taking some time to recover. See y'all again soon.
Why Is Adding Two Random Numbers Not the Same as Generating One in the Same Range?
Generating random numbers might seem easy at first, but there are definitely some pitfalls.