2020: Year in Review

2020: Year in Review Featured Image

What a dreadful year, right? It’s seems a bit depressing to open up the new year by reviewing 2020, but I plan to keep things positive. A lot of great things happened to me this year despite hiding away in my apartment for the majority of it.

Table of Contents

Accomplishments in 2020

By now, it’s no surprise that 2020 was a train wreck of a year. Hell, it’s the first time since I started grad school that I actually had to take some time away from the site. That said, I still managed to accomplish a few things this year:

  • Completed my Computer Science and Engineering Master’s
  • Switched Over to Plausible
  • Made some money through Amazon & Patreon
  • Build up my YouTube channel
  • Watched some anime
  • Taught a course
  • Started research for the first time
  • Got a 4.0 for a semester
  • Hit several Sample Programs milestones
  • Completed Hacktoberfest
  • Moved apartments to save some money
  • Won a teaching award
  • Quarantined a lot
  • Earned my master’s
  • Got a custom YouTube URLOpens in a new tab.

By far, I’m proudest of the master’s degree. Part of me wishes I had done a BS/MS in undergrad because it would have been a lot easier than this degree. That said, I’m so glad it’s over.

Favorite Creations of 2020

In 2020, I spent most of the year trying to aggregate Python content. That way, I could build hierarchies of articles with networks of links to try to keep folks around longer. As you’ll see below, some of my favorite articles of the year were exactly these collection articles.

Next year, I plan to keep the trend going. If possible, I’d love to make more videos, but we’ll see how much time I have.

Projects in 2020

Like every year, I spent some time developing code. This year, I expanded some of the usual projects, like Sample Programs and the Image Titler, while adding a few new ones!

Sample Programs in Every Language

When I kicked off this project in 2018, I was pumping out code every day. These days, I tend to wait until Hacktoberfest to get community support.

However, even with community support, maintaining this repo is a challenge. Fortunately, I always get support from @auroq who maintains Glotter and helps with testing. This year, he helped me lock things down by setting requirements for new projects.

Together, we merged a lot of pull requests. As a result, we were able to hit several milestones including:

Overall, I’m quite pleased with the progress, and I’m excited to keep development moving in the New Year. If you’re interested in checking out the live project, check it out hereOpens in a new tab..

Image Titler

Back when I was setting up this site, I was working with my wife (girlfriend at the time) to put together featured image templates, so I could generate features images more quickly. Of course, I find repetitive process to be a huge pain in the ass, so I eventually automated it using Python.

Prior to this year, that tool had been completed and fleshed out for the command line. Then, early this year, I decided to add logo insertion in the bottom right corner of the images. By April, I was ready to take the Image Titler to a new level with versioning and batch processing. Hell, I couldn’t even stop myself from adding logo color detection for the bars.

Eventually, I decided it was time to kick off a GUI version of the application, so anyone could use it. From there, the features just kept rolling out. For instance, I put together custom fonts, data preloading, and custom image sizing.

Overall, I’m really happy with where this tool is, and I’m looking forward to getting other folks to use it. If you’re interested in seeing it live, check it out hereOpens in a new tab..

How to Python Code

As many of you probably already know, How to Python is a The Renegade Coder series of article about simple Python problems. Well, earlier this year, I also created a GitHub repo to store the solutions—among other things.

At the time, I was really into Jupyter Notebooks, so I used those to store the code. That said, I think the selling point of the repo is the table of articles with publish dates as well as various links to articles, videos, challenge solutions, and notebooks.

I am not super active with this repo, but I find it helpful for folks who want to interact with me and my content. Also, it helps me back up the claim that my solutions work, and they serve as a nice check for any code that might break.

Once again, I’m a big fan of this repo because it’s so simple. If you want to see the it live, you can check it out hereOpens in a new tab..

PSO2 Color Picker

One of the cooler projects from this year was put together just after Phantasy Star Online 2 finally made its American release in May. Despite having over a decade of development time, this game transported us back to 2012 with a lot of weird gaming quirks. One of those quirks was the color selection tool which didn’t allow people to select the exact color they wanted.

While this issue wasn’t that big of a deal to me, a friend of mine was trying to recreate one of their favorite manga characters, and the existing tool wasn’t cutting it. As a result, he had an idea: what if there was a program that could show the user where to click for the color they wanted? Thus, the PSO2 Color Picker was bornOpens in a new tab..

This was one of those projects where I got to really show off the power of Python to my friend. Within an hour, we were able to go from concept to prototype. More recently, the tool was made into a pip packageOpens in a new tab..

While I haven’t played PSO2 in quite awhile, I was very pleased with how this tool turned out, and I hope folks are getting some use out of it.

Side Projects

Beyond all the projects above, there was a ton of other projects I worked on this year. For example, I developed two sets of software for my master’s project. Likewise, I put together a simple web app for a hackathon. And, I even toyed with a sample programs git visualizer to show the change in programming languages over time.

That said, now that I’m a full time engineering education student, I’m not sure I’ll have any compulsory coding activities. It seems like the future of coding for me will be entirely self-directed which should be a lot of fun. Let’s see what kind of wild side projects I get into in the new year.

Metrics 2017 – 2020

One of my favorite parts of the yearly review is looking at how the site has grown and changed over the years. This year, we saw a major dip in views. Despite that, I’m very happy with how things turned out.

Page Views: Months and Years

For the last few years, I had been keeping track of page views through Jetpack. However, when I realized how slow my site was running because of Jetpack, I decided to get rid of it and rely solely on Google Analytics. In my quest for speed, I ended up dropping Google Analytics for PlausibleOpens in a new tab.. As a result, this year’s page views come from various sources. From January to May, page view counts come from Google Analytics. Meanwhile, everything since then comes from Plausible.

Month2017201820192020
Jan42719,08121.1k
Feb39716,26224.8k
Mar1,14130,99521.9k
Apr3791,31045,35418.8k
May3171,36452,68317k
Jun33778026,66413.5k
Jul2531,71819,81613.9k
Aug7141,92119,93016k
Sep5055.74722,48715.4k
Oct5,162*10,93917,77517.3k
Nov9049,93614,96015.4k
Dec20213,87111,83412.2k
Total8,77349,551297,841208k
Page views sorted by months and years

While my overall page views have dropped since 2019, I’m actually quite a bit more pleased this year because the views are from a much more diverse set of articles than years past—as we’ll see later.

Top Posts & Pages

Unfortunately, because I switched analytics providers, I don’t really have any easy way to calculate top posts this year. As a result, the 2020 column is only coming from data for the second half of the year via Plausible. To account for this, I just extrapolated the count for the whole year by multiplying by 12/7.

Rank2017201820192020
#1Home (2,908 views)How to Check if a File Exists in Python (27,245 views)How to Check if a File Exists in Python (148,399 views)How to Check if a List is Empty in Python (19.9k views)
#2Archives (2,093 views)How to Sum Elements of Two Lists in Python (5,402 views)How to Check if a List is Empty in Python (65,644 views)Python Code Snippets for Everyday Problems (14.4k views)
#3About (430 views)How to Convert Two Lists into a Dictionary in Python (2,697 views)How to Sum Elements of Two Lists in Python (14,047 views)How to Invert a Dictionary in Python (9.3k views)
#4World Domination Checklist (282 views)How to Invert a Dictionary in Python (1,944 views)How to Invert a Dictionary in Python (13,326 views)How to Performance Test Python Code (8.6k views)
#5Computer Science Email Tutoring Now Offered (197 views)Archives (1,525 views)How to Convert Two Lists Into a Dictionary in Python (10,069 views)How to Print on the Same Line in Python (8.2k views)
Top five posts and pages by year

Now, what I love about this new set of articles is that I don’t have a single one dominating my view count. Despite the lower counts overall, this is actually really good news. After all, if I happen to see a drop in view count on any of these pages, I’ll hardly notice. That cannot be said for years past. Just take a look at the ratio between the 1st and 5th post for previous years:

  • 2017: 14.76
  • 2018: 17.86
  • 2019: 14.73
  • 2020: 2.42

In the past, it would have taken at least 14 articles at roughly 5th place view count to replace my best post. These days, I just need a couple articles to make up the difference. In other words, my view counts are relatively stable now. Take that, Google!

Top Sources of Traffic

Once again, I don’t have easy access to this data this year, so I extrapolated using Plausible. Regardless, here are my top sources for 2020.

Rank2017201820192020
#1GoogleOpens in a new tab. (2,271 views)GoogleOpens in a new tab. (38,925 views)GoogleOpens in a new tab. (259K views)GoogleOpens in a new tab. (92.9k views)
#2Facebook (418 views)GitHub (809 views)DuckDuckGoOpens in a new tab. (4,809 views)BingOpens in a new tab. (22.3k views)
#3Twitter (64 views)BingOpens in a new tab. (451 views)BingOpens in a new tab. (4,775 views)DuckDuckGoOpens in a new tab. (19.2k views)
#4LinkedIn (30 views)Google+ (266 views)WordPress Android App (1,289 views)Yahoo (3.9k views)
#5StumbleUpon (20 views)WordPress Reader (247 views)GitHub (967 views)Ecosia (3.1k views)
#6Yahoo (14 views)Twitter (246 views)Yahoo Search (777 views)Dev (2.2k views)
#7BingOpens in a new tab. (12 views)DuckDuckGoOpens in a new tab. (215 views)Ecosia (522 views)GitHub (1.3k views)
#8GitHub (9 views)Facebook (193 views)Twitter (289 views)TopDev (810 views)
#9WordPress Reader (8 views)Instagram (86 views)Qwant (160 views)Edabit (550 views)
#10DuckDuckGoOpens in a new tab. (3 views)YahooOpens in a new tab. (85 views)Yandex (144 views)Qwant (500 views)
Top ten sources of traffic by year

One big trend I’m noticing from this year is that while Google hasn’t brought me nearly as many views this year (see here for a rant about that), I have quite a bit more diversity in views from previous years. In fact, while my five sources are all from search engines, I get quite a bit of traffic from places like Dev and GitHub as well. Perhaps unsurprisingly, those places yield better visit duration as well.

In the future, I’ll be looking to build on this diversity by continuing to provide the types of content y’all want to read (and watch).

Top Countries

At this point it goes without saying, but the statistics for this are also extrapolated from Plausible. If I got some free time, I’ll try to update 2020’s numbers with some more accurate estimates. At any rate, here’s the list of top countries for 2020.

Rank2017201820192020
#1United States of America (4,037 views)United States of America (20,949 views)United States of America (115,649 views)United States of America (57.6k views)
#2South Korea (578 views)India (6,230 views)India (33,496 views)India (20.9k views)
#3France (542 views)United Kingdom (2,581 views)United Kingdom (14,206 views)Germany (14.2k views)
#4Russia (221 views)Canada (1,716 views)Germany (13,664 views)United Kingdom (10.5k views)
#5Germany (220 views)Germany (1,517 views)Canada (11,003 views)Canada (7.7k views)
#6Philippines (189 views)France (1,066 views)France (8,636 views)France (5.3k views)
#7Canada (183 views)Australia (807 views)Brazil (6,097 views)Australia (3.8k views)
#8India (173 views)Israel (718 views)Australia (5,445 views)Netherlands (3.6k views)
#9Japan (150 views)Brazil (685 views)Netherlands (4,847 views)Brazil (3.3k views)
#10Cambodia (145 views)Netherlands (611 views)Spain (4,237 views)Russia (2.7k views)
Top 10 country view counts by year

With a decline in views from the previous year, it’s no surprise to see a decline in views across the board for the top countries. That said, it’s interesting to see Germany overtake the UK as well as Brazil dropping two spots. Also, it looks like Russia is checking out my site a bit as well. How cool is that?

Top YouTube Videos

While I technically started my YouTube channel last year, I forgot to include statistics about it here. I suppose it’s better late than never!

Rank20192020
#13 Ways to Check If a List Is Empty in PythonOpens in a new tab. (232 views)3 Ways to Element-Wise Sum Two Lists in PythonOpens in a new tab. (974 views)
#24 Ways to Reverse a Dictionary in PythonOpens in a new tab. (146 views)4 Ways to Reverse a Dictionary in PythonOpens in a new tab. (571 views)
#33 Ways to Element-Wise Sum Two Lists in PythonOpens in a new tab. (142 views)3 Ways to Map Two Lists to a Dict in PythonOpens in a new tab. (353 views)
#43 Ways to Map Two Lists to a Dict in PythonOpens in a new tab. (44 views)3 Ways to Check If a List Is Empty in PythonOpens in a new tab. (214 views)
#5The Definitive Guide to List Comprehensions in PythonOpens in a new tab. (37 views)4 Ways to Get the Last Element of a List in PythonOpens in a new tab. (143 views)

While I haven’t exactly been active on YouTube, I’m quite pleased with these results, and I plan to fill the channel out more in the future. So far, I’m sitting at 111 subs!

Total Revenue

This year, I made money in a few different ways. Obviously, my main source of revenue is Patreon, but I also made a bit of money on Amazon. To start, here’s the Patreon revenue.

Month20192020
Jan$0.00$17.37
Feb$0.00$17.37
Mar$0.00$17.37
Apr$0.00$17.37
May $0.00$23.75
Jun$0.00$23.75
Jul$8.30$23.74
Aug$22.72$23.74
Sep$22.72$23.75
Oct$22.72$23.75
Nov$22.72$18.14
Dec$22.72$18.14
Total$121.90$248.24
Income from Patreon by year

Likewise, here’s the Amazon revenue. This is a bit tricky to report on because most of the income comes from Trill Trombone. That said, all the money is coming to me, so here’s how that’s going.

Month20192020
Jan$0.00$1.49
Feb$0.00$0.00
Mar$0.00$12.70
Apr$0.00$11.63
May $0.00$0.90
Jun$0.00$12.78
Jul$0.00$0.98
Aug$0.00$0.94
Sep$0.00$0.62
Oct$0.20$0.38
Nov$0.00$8.59
Dec$0.00$7.24
Total$0.20$58.25
Income from Amazon by year

While it’s not much, I’d say this is pretty good for passive income. Overall this year, I made somewhere around $300 which is roughly what I made last year. Hopefully, we can keep this growing in the new year.

In the past, I made ad revenue, but I don’t really do ads anymore. That said, here’s the data for those interested (aka my future self).

Month201820192020
Jan$0.00$12.84$0.00
Feb$0.34$8.93$0.00
Mar$1.68$21.71$0.00
Apr$1.68$28.18$0.00
May$1.49$30.53$0.00
Jun$1.05$17.00$0.00
Jul$1.94$10.67$0.00
Aug$0.56$9.78$0.00
Sep$5.87$4.99$0.00
Oct$9.28$0.00$0.00
Nov$12.19$0.00$0.00
Dec$15.56$0.00$0.00
Total$49.96$144.63$0.00
Income from ads by year

Previously, I also briefly had a membership site before I shifted over to Patreon.

Month20192020
Jan$4.55$0.00
Feb$4.55$0.00
Mar$9.10$0.00
Apr$9.10$0.00
May$9.10$0.00
Jun$9.10$0.00
Jul$4.55$0.00
Aug$0.00$0.00
Sep$0.00$0.00
Oct$0.00$0.00
Nov$0.00$0.00
Dec$0.00$0.00
Total$50.05$0.00
Income from membership site by year

Beyond that, I’ve made money here and there in other ways. For instance, I’ve had a shop which maybe sold one product over the years. In the future, I might try to reintegrate ads, but only if I get a significant amount of traffic. Otherwise, the focus will be writing as always!

Missing Statistics

Last year, I reported on a few statistics that didn’t make it into this edition of the yearly review—specifically, content length and daily averages. While personally I think daily averages are a bit redundant, I’m definitely interested in content length. That said, I don’t know how to easily compute either without some of the tools I’ve used previously. As a result, I’ll just dump both tables here for record keeping purposes.

Month2017201820192020
Jan014616TBD
Feb014581TBD
Mar0371.0kTBD
Apr34441.5kTBD
May10441.7kTBD
Jun1126889TBD
Jul855639TBD
Aug2362643TBD
Sep17192750TBD
Oct167*353573TBD
Nov30331499TBD
Dec7447382TBD
Overall34136815TBD
Average daily views by month and year
Month20162017201820192020
Total Posts670150105TBD
Total Words10,03378,812185,424172,164TBD
Average Words/Post1,6721,1261,2201,640TBD
Content length by year

Perhaps sometime in the next year, I’ll find a way to fill these out. Until then, that’s it for the usual statistics!

A Look Into 2021

With all that out of the way, let’s just say that I’m feeling pretty good about 2021. With the COVID vaccine on its way, we could be seeing some sort of return to normalcy in our future. For me, that means getting some regular exercise and possibly a distinction between home and work.

As for the website, I’m just going to keep writing. Like last year, my focus for the new year will be mostly Python content. Hopefully, that translates into videos, but we’ll see how much time I have as a PhD student. In the meantime, I appreciate y’all sticking around. See you next time!

Year in Review (3 Articles)—Series Navigation

Every year, I like to summarize what happened in the previous year. Usually, these articles focus on my efforts with The Renegade Coder, but there’s no way to get away from the fact that we’re all whole people: our lives are more than our work.

Jeremy Grifski

Jeremy grew up in a small town where he enjoyed playing soccer and video games, practicing taekwondo, and trading Pokémon cards. Once out of the nest, he pursued a Bachelors in Computer Engineering with a minor in Game Design. After college, he spent about two years writing software for a major engineering company. Then, he earned a master's in Computer Science and Engineering. Today, he pursues a PhD in Engineering Education in order to ultimately land a teaching gig. In his spare time, Jeremy enjoys spending time with his wife, playing Overwatch and Phantasy Star Online 2, practicing trombone, watching Penguins hockey, and traveling the world.

Recent Posts