~ RICH CODES

2023 In Review

January 11, 2024 | 18 minute read | ✍🏼 Fix typo

Table of Contents

Another year, another review. There’s a lot to cover, so let’s get to it.

Career

I’m still working at thoughtbot, and I’m still very happy about it! It’s a great place to work with great people. I do not take for granted how lucky I am to work with Ruby full-time. Every JavaScript project I work on makes that clearer 😅.

Summits

This year the thoughtbot team met in person twice! It was great to see everyone again. We had a company-wide summit at Brighton, UK, and a smaller one (for the Americas team only) in Mérida, Mexico.

Unfortunately my favorite food place in Brighton, closed down 😭. I spent a couple of days in London to buy a new guitar (I’ll talk about that later). Weirdly, it was where I had my first burrito ever.

Burrito - London

In Mérida, I went to the Mayan World Museum. Hearing someone speak Mayan fluently was very interesting. México felt surprisingly similar to Brazil: the people, the streets, the houses. In Mérida, I loved my breakfasts at Merci Paseo

  1. Here are some pictures:
French toast - Mérida
Eggs Benedict - Mérida
Mayan World Museum of Mérida

These summits are always great, given that we’re a remote company. It helps to build camaraderie and makes our relationships feel more real.

Software Development

Setup

I didn’t buy any new hardware this year, but I committed one of the biggest sins in the software development world: I switched to light mode.

I was a hardcore dark mode fan, and have been using One Dark Pro since I can remember, but I read many things about how light mode is better for your eyes (during the day) and the arguments were compelling. To be fair, I made the theme follow my system settings, so at night I still use dark mode. That seems to be the ideal set.

Here’s how the themes look:

Night Owl Light
One Dark Pro

RubyCards

In 2022 I wrote:

it’s exhausting to add a card every week. […] I’ll have to automate the creation of cards (at least partially!) in some way.

So… I didn’t automate it. And I didn’t had the energy to keep up with it, so I just stopped. The last card was released in March. I’m not proud of that, but it’s what happened. I feel guilty for that, so I’ll try to keep the projecting going in 2024, even if that means a new owner.

RubyDF

I started a local meetup group for Rubyists in the Brazilian Federal District (where I currently live). About 20 people showed up for the first meeting, which I think is a good number. I’m planning other editions in 2024. I gave my talk on Taming God Objects.

The first RubyDF meetup group

Blogging

Considering the This Week In #dev articles, which are semi-automated, this year I wrote 21 articles, the most I’ve ever written in a year.

If I exclude those, though, I’ve only written 8 articles, which is 2 less than

  1. I’ll keep an eye on this number, so it doesn’t fall too much. I think 10 articles/year is a fairly good baseline.

Most of my articles were written in the 2nd and 3rd quarters of the year, which is exactly the opposite of 2022.

Release date of all articles
Release date of articles written by me (excluding TWID)

I mostly wrote about Ruby, followed by a tie between AI, concurrency, debugging, machine learning, and Rust. This was the first year I wrote about Rust 1 2!

I’m proud of the article My Adventure With Async Ruby, which was featured on RubyWeekly. Learning about async helped me speeding up a few of my open-source projects by large factors. Speaking about that…

Open-Source

I did a fair amount of open-source work this year.

My RubyGems profile

My gems got downloaded 26k times in total, which is 5k more than 2022. I released a new gem, Code Picture, which I’ll discuss further down.

I got two documentation-related PRs 3 4 merged on Ruby itself. I still have one PR open on RDoc, which finally makes the default generated template work on mobile devices. I hope it can get merged soon.

I did a PR correcting some docs in Rails, and another one adding a ModelValidator to ActiveModel(I’m confident this will be merged in 2024). One of my Rails PRs got rejected, and there were also a few minor PRs making a gem more “hygienic” (like not polluting the global namespace).

Fun fact: a 4-year-old PR I opened on a gem got merged. It was probably one of my first OSS contributions, so it was emotional to see it get merged.

Gold Miner

This year I open-sourced Gold Miner. It is a tool that turns interesting messages on thoughtbot’s Slack into blog posts (the This Week in #dev series). It was something I started in 2022, but I made it public in 2023. I added a bunch 5 6 of optimizations using async Ruby (basically making HTTP requests in parallel). I did similar optimizations to end_of_life, and got 10x faster (from 25s to 2.5s)!

I opened a series of refactoring PRs to make the code more maintainable. After a while, the it was getting very entangled: the Slack Client class had to know about people’s names and links to their profiles, so this was an obvious sign that things weren’t right.

I broke down the whole flow in a series of objects that colaborated in a pipeline, while also trying to be consisted with the metaphor of mining gold. I ended extracting gold nuggets, gold containers, explorers, smiths, and distributors. Not only that creates a stronger metaphor, but helps the code to be more maintainable. And, of course, I wrote a total of 13 articles using this tool.

Code Picture

I has this silly idea in mind for a while, but when I saw that the new Ruby parser, Prism, it was the perfect time to do it. I started it in a Friday night I had free (like most of my open-source LOL).

There isn’t much to say here, it turns your code into pixel art. I wrote about it (in 2024) in the thoughtbot blog. Here’s an output example:

See that there’s a repeating pattern in the upper portion of the image? That’s a Rails model with a bunch of has_many :association, dependent: :destroy declarations. I wonder if there are “analyzes” I could do with this kind of visualization.

Code Statistics

I didn’t have WakaTime installed this year, so I don’t have very precise data about coding, but I used Github Wrapped to get some stats.

I was active on GitHub for 240 days this year (around 66% of the year). March was my most active month. I was working on a MVP Rails project, so it was easy to get stuff done. It was running on latest Ruby and Rails, so codebase was very fun to work with.

Going to a weekly view, I’m quite consistent with how much I contribute per day, with a productivity boost on Thursdays and Fridays (investment day?).

If we only look lines of code changed, that boost is even more noticeable. I’m super productive on Fridays!

The busiest day in the year for me was April 27th, the day I had the idea of starting a Rust project that would parse my workout notes. That, surprisingly, caused Rust to be my 2nd most used language this year. Only Ruby, my daily driver at work, beat it.

Another nice stat is that my typical commit is +27/-10 lines of code, which is a fairly small, digestable, change.

Life & Hobbies

Italian

I still kept learning Italian in 2023. In the first few days of the year I did my first Italki class in Italian. I was excited, and didn’t think I’d be able to talk for 30mins in another language. Of course, here and there I asked how to say a word, and I was very happy with my progress.

I tried using Omegle/Ome.tv to talk to people in Italian, but it was… kind of terrible. Just random people skipping or showing their genitals. I don’t know what else I expected from talking to strangers on the internet…

I did find some Italians, but it’s hard to find someone willing to talk (especially with a beginner). Some were helpful, recommending movies, music, and stuff. They were always surprised to see that I was learning Italian (even though I have no family ties to Italy).

By the middle/end of the year I slowed down a bit, mostly relying on Duolingo. I’m still learning, but not as much as I’d like to. I can understand a lot, but speaking complex sentences is still hard (past and future tenses are challenging).

My Duolingo progress

I studied for about 20% less minutes than 2022, got about 50% less XP, but still managed to learn 2.2x more words. All that happened in a total of 306 unique days (84% of the year). I hope I can get to travel to Italy, so that will be a good motivation to study more.

Music

2023 was probably the most “musical” year of my life. I didn’t stream as much, but I compensated by going to a lot of concerts and playing a lot more.

Concerts

The year I went to the most concerts in my life! I went to 5 concerts in total:

  1. Coldplay (2023/03/13): My wife loves Coldplay, so I went with her. Amazing concert! They play several of their hits, with a good mix of old and new stuff. The smaller stage in the middle of the crowd was a nice touch.
  2. Selvagens à Procura de Lei (2023/10/01): My favorite Brazilian indie band. I always go to their concerts when they’re in town and they never let me down.
  3. Red Hot Chili Peppers (2023/11/07): A dream come true. This was the first concert from a big international band I really like that I went to. Seeing John, Flea, Chad, and Anthony doing their thing live was amazing! It’s a weird feeling after having watched so many videos of them before. They even played gems like Wet Sand, so definitely bucket list material.
  4. Taylor Swift (2023/11/25): This was my wife’s long-time dream. I’m not the biggest Swift fan, but I’ve been listening to her stuff for over a decade now, so I do know several songs. I don’t even need to mention the whole spectacle her concert is. The crowd was screaming every song so loud! I wish there was more Speak Now songs, but she played Safe And Sound, which was a good surprise. It was also very touching seeing my wife having this moment.
  5. Paul McCartney (2023/11/30): This one wasn’t planned at all! Paul’s production invited a few random students from my music school for the soundcheck, and I was one of them! It was basically a 1h concert for a few dozen people. What else can one ask for?
Me and a Beatle

Streaming

My streaming numbers went down a bit, again. Not that I care about that number being high, I just noticed I didn’t listen to music as much while deep-working. 2023 was the first year I got Jazz in my top 5 genres.

I was kinda obsessed with Daft Punk for a while. Give Life Back to Music is so damn fun to play on guitar, so that was my most streamed song. Linkin Park dropped the 20th anniversary edition of Meteora, and I particularly enjoyed the “new” songs. I also listened to a lot of Autumn Leaves, the beginner-classic Jazz standard. And, of course RHCP was my #1 artist.

Interesting that Spotify noticed that I tend to listen to albums back-to-back. Call me old, I guess.

Music School

At Music School, this year we really start to get into jazzy stuff. I learned a few of the classic standards like Blue Bossa, Autumn Leaves, and Just Friends. I finally broke out of minor/major pentatonic & major scales, and learn new tricks: the minor harmonic and Maj7 arpeggios (and how to use them over different chords).

I started my first class in which I play with a full band. I was looking forward to that for a long time, and it’s been great! I had a presentation at the end of the year where we played a Bossa Nova version of Isn’t She Lovely and a Brazilian tune called Mistério do Planeta. That was my first concert in about 4 or 5 years. All of that gear I bought during my whole life was finally used live!

My first concert in a long time

Gear

I bought a new guitar! It’s been almost 8 years since my last one. I already had a Strat, so I went with the perfect pair: a Les Paul. It also helped on music school since humbuckers are more fitting for Jazz/Bossa than single-coil pickups, IMO. I fell in love with an Ebony Epiphone Custom Pro, so I took it home.

It’s nice to have a similar looking guitar to some of my guitar heroes:

Daniel Johns
John Frusciante

Aside from that, I sold my cheap Klon clone and a fuzz pedal I wasn’t found of. I bought a JHS Angry Chalie clone, which is a very nice distortion. I’m happy I spent time using these things outside of my bedroom. Here’s the 2023 timeline of my music gear:

I just realized it’s almost 10 years since I bought my first guitar

And here’s the whole crew:

A bigger apartment helped managing all this gear

Working Out

I started the year knowing exercising was something I needed to do (and had set as a goal for the year), but I, honestly, didn’t want to do it. Mid-April, my wife hired a nutritionist for me, so I had to start exercising. I used my condo’s gym, and aimed for around 3 sessions a week.

I did that for about a month and a half, but I got my hand cut while doing the dishes 🤦🏽‍♂️. I already had made some progress, so that injury got me upset because I knew I’d quickly lose it. That frustration (+ the healing time) made me stop exercising for about 4 months, when I decided I wasn’t living the life I wanted to live, so I got back.

Fortunately, from day 1 I wrote down all my workouts, so I could extract some data from it later. I’d write them down like so:

Chest + Triceps (2023/04/12 | 55kg)
- Bench Press: 12x10kg 12x15kg 10x20kg
- Incline Bench Press: 12x12kg 10x15kg 8x17kg
...

I notice I was very consistent with this format: muscle groups, date, my weight, exercises with sets, reps, weight. So, of couse I wrote my own parser for that. It was a very fun side project to work on, and a perfect opportunity to use Rust. All the charts and data in this section were generated with it.

I thought I was going consistently to the gym, but the numbers show otherwise. I only worked out 33 days the whole year (less than 10% of the year), with a median of 2 days per week. It looks like I went to gym mostly on Wednesdays and Thursdays. I never went on Sundays, and I was more consistent with Saturdays than Mondays and Fridays. I had no idea!

I think I did a pretty good job on working out all muscle groups. Biceps were the least worked out, but it was something I deliberately wasn’t focusing on. I didn’t do any abs exercises. I’ll try to improve on that in 2024.

Even though I wasn’t great at going to the gym, I got some results. I could see similar graphs to the one below for all muscle groups: slow and steady growth on weight/reps.

That also reflected on my body weight. I started the working out at around 55kg, and ended the year with almost 4kg more. I’m happy with that.

Gaming

I had a lot going on this year, so gaming wasn’t a priority for me. The numbers below show that. I even started playing/studying chess again, but I had too much on my plate, so I stopped after a few months.

Total hours played
Total games played
The game I played the most

I played 10 games in total, for about 112h. This is about 53% less than 2022.

The game I played the most

Most of that was me Playing God of War 2018 while waiting for Ragnarok to come out. Then I played Ragnarok, and I think those were the only games I finished this year. I started Ghost of Tsushima, but didn’t finish it yet.

Expectations x Reality

Let’s check how I did with my 2023 goals:

2022 felt like the year of music to me. […] I believe that a big part of this year will be similar.

Yup! I was on right on the money here. Although this year was less fiddling with toys by myself and more using them to make music. Isn’t that the whole point?

Exercise! Sports, gym, whatever it is, I need to move this lazy body.

Sort of. I did start going to the gym, but wasn’t as consistent as I’d like to. I’m happy that at least I started (and got some results), but I definitely need to improve on this.

I do want to keep on working on core Ruby. TBH, contributing to CRuby feels too far off from my skill set. Maybe I can work on supporting things like documentation.

I did a bit of that. I’d like to do more, though. I played with the CRuby codebase a bit, but I’m not confident enough to make a code PR yet. I’ll keep working on docs, though.

Keep my work/life balance.

I’m glad there’s nothing to worry about here.

Work on something fun! Language development, games, something else?

Yes! I did silly things like Code Picture and my Rust workout parser. As long as I’m having fun, I’m happy.

Writing This Article

I want to do a meta thing here and talk about this article itself. To write it in the level of detail I wanted, I had to have data. I took the time to automate some of the data collection, and also created several charts to help me visualize it. I also created a do-nothing script to help me remember all the things I have to collect (and where to find them).

I installed WakaTime before starting to write this article, and it tells me that I spent about 15.5h writing it (about 10h in just on the Markdown file). I’m betting it’ll pay off in 2024, so I’ll write the next one faster. Let’s see how it goes.

2024 Goals

I’ve done a lot in this year. I started new projects, and dropped some. In 2024 I want to be more consistent with everything I do. In particular, I want to:

  • Go to the gym at least 3 times a week (median)
  • Get more involved with Ruby:
    • Keep the RubyDF Meetup going on.
    • Keep showing up to the issue tracker and other kinds of discussions.
    • More PRs to Ruby. At least docs, but I’d like to propose at least one small feature. Maybe an Enumerable method?
    • Talk on conferences.
  • Keep working with Rust. It is a fun, fast language. It’s a good tool to have around.
    • Maybe I’ll exploring Gleam.
  • Keep doing fun things with software:
    • Get back to programming language design/development. Being a language author myself will help me understand the challenges of the Ruby core team too.
  • More music gigs!

That’s it. This took a hell of a long time to write, but it’s always worth it. On to 2024!

Categories

year-in-review