Daniel Nitsikopoulos The RSS feed for https://dnitza.com Tue, 28 Mar 2023 12:40:44 +0000 Tue, 28 Mar 2023 12:40:44 +0000 1800 Week 8 — 🍂
  • It's been a bit f a quiet week this week — well, at home anyway. Work has been full on, and maybe that has contributed to the quietness of the week.
  • Contrary to what I mentioned last week, the weather has started to turn here in Canberra. While it's not icy yet, we've been seeing tops of around 20 over the last week with a bit of rain.
  • With the weather change comes one of my favourite times of the year, too! My regular route in to the city goes via the National Arboretum, which is quite a sight to behold as it comes in to view around the bends of the parkway.
  • I spent Monday working out of a co-working space nearby. It was nice to be working around people again :) The space itself is quite nice, but the desks, chairs and shared video-call rooms are a bit hit and miss. One of the Zoom rooms I used had graffiti all over the fold out table, which makes wonder — why you would pay to use a nice space, and then draw all over the desks! 🙃
  • We watched Everything Everywhere All at Once this week. What a ride that was! I was not at all expecting anything that happened past the first 10 minutes of that film, and I loved every minute of it. 10/10, would experience again!
  • The avo is doing well, and now that we're getting in to autumn (and a Canberran autumn at that), I might look at cleaning up some of the top growth to try and encourage this little thing to fill out some of the lower parts of its trunk 🪴 An young avocado plant with 9 leaves
  • ]]>
    week-8 Sun, 26 Mar 2023 11:10:57 +0000
    Week 7 — Same same, but different
  • I finished the Lightfall campaign this week on legendary! It was pretty amazing knocking over the last encounter solo. It took me a bit of bumping up against the whack physics in Destiny, but got there in the end :) The missions and setting were more to my liking than The Witch Queen, but the story and writing just felt so awkward — especially this close to The Final Shape. I just hope a bunch of the major details introduced in this expansion get addressed as the seasons play out.
  • The dogs are well on the mend this week! A few days of probiotics had them back to their normal selves in no time at all. Nothing worse than a sick pet and the guessing game of what might be causing them grief!
  • I had a couple of super long meetings at work this week (~3hours or so on Zoom). I have to say, headphones with transparency mode go a long long way to reducing Zoom fatigue. I found myself straining to listen out for things happening around me with traditional headphones, and getting a mix of house noises and people's voices makes for a more natural listening experience.
  • The weather in Canberra has continued to be weird for this time of year. We're back up in the 30s again. Only a month away from ANZAC day (when things start to get properly cold) and I'm still running around in shorts and a t-shirt!
  • The new avo growth has been coming up nicely :) I took a couple photos of it during the week as it sat here on my desk. After some rudimentary lining up, I gave the images to an AI and it interpolated them in to the video below! 3 new leaves on an avocado plant growing
  • ]]>
    week-7-same-same-but-different Fri, 17 Mar 2023 09:46:05 +0000
    Week 6 — Sleepless in CBR
  • This week, the temperature has cooled way down in Canberra. I've had to double up on long sleeve shirts some days to stay warm, and some of the leaves on our trees are starting to turn 🍂
  • I've been playing through the new "Lightfall" campaign in Destiny 2 on legendary difficulty and it has been fun! I'm not super in to the new sub-class yet, but I guess that's because I've only played it as part of the campaign (and because fusion grenades + starfire protocol is just so much fun).
  • Crumpet is prone to seizures, and while she's been pretty good over the last few months, she had one again on Wednesday. We (so far) haven't been able to work out what could be causing them. Our suspicion was stress, but since we have made some changes to reduce the stress she may have been under, she still seems to have them. Her last one was in January, and the only line we can draw between them is that I forgot to feed her on time, so our current theory is it's blood-sugar related.
  • I swear our house has been cursed this week 😅. Both dogs are having some digestive distress, needing to get up at all hours of the night to go outside. Our smoke alarms are also weirdly going off in the middle of the night too. This has made for a week of sleep deprivation. Both pups are looking to be on the path of recovery this morning ❤️ Two dogs curled up in my lap
  • I signed up for first #rubyfriend a few months ago, and found someone to mentor only recently! Our first chat was great, and I am glad that there are still new web developers getting in to Ruby as their first language (over something more trendy)! It sounds super challenging for junior engineers out there right now, and it sounds like some places are interviewing juniors as if they're at the mid-senior level.
  • New shoots are growing on the avo this week! New growth on an avocado plant
  • ]]>
    week-6-sleepless-in-cbr Sat, 11 Mar 2023 01:04:32 +0000
    Week 5 — Plant's alive!
  • I've been working on the backend of this blog to pull in all the stuff I have, from various places of the internet. So far, that's been photos off of Instagram as well as places I have checked in to on Swarm. It's been a bit of fun to build in these fairly simple features, free from performance constraints and the like. Since everything on this site is a "post", the most involved part has been working out how to store images such that when I want to move hosts later, or split asset and web hosting, nothing breaks. Where I have landed with that is to save absolute image URLs on posts, and then later, I can proxy requests for images (that match the current storage pattern), to wherever the new host is. Or update the persisted image URLs to have the new host 🤷🏽‍♂️.
  • Went and saw Alexisonfire on Saturday, and holy shit, what a show!! They played tracks from their entire discography, and every, single, one, was a banger. As each song faded out, the crowd would clap and cheer, and as the first few bars of the next song rang out, that cheering would turn in to shouts of surprise and joy. It was amazing to feel that energy again after a few years off, and I hope they make it back in less than a decade and a half this time!
  • We've been catching up on the episodes of The Last Of Us that were on while I was away. It continues to be a good show. I appreciate the extra mile they're going to build all of the characters up. It's a far more interesting approach than the main story arch, but I am keen to see that out to hear Abby's thoughts on Joel's decision to ultimately save Ellie.
  • The avocado has grown so much in the last 2 weeks! I was kind of worried because I watered it enough for a week, but it was relatively hot and dry in Canberra while I was gone. Thankfully, all that was for naught! 🌿🆙 A small avocado plant with 7 leaves. 6 of which are about 15cm long each
  • ]]>
    week-5-plants-alive Sat, 04 Mar 2023 11:04:26 +0000
    Week 4 — Meet the team.
  • I am coming to the end of my week in Melbourne. It's been a great little week. Taking the train to work continues to be a novelty as does getting home past 7pm. I don't know how I managed to do that in the pre-work-from-home days, and I don't think I could do it for longer than a week, but it was fun while it lasted.
  • I met my new team IRL for lunch this week. It was nice to be able to just chat face to face without needing to stare at a computer screen, or feel the need to sit in silence while someone else talks in fear that speaking will do something weird to Zoom's audio. We also got to do a bunch of in-person work, which made for some satisfyingly productive pairing sessions.
  • I checked out The Keys on Thursday, a warehouse converted to a bowling alley / bar / bistro / arcade. It's been a long time since I've been to a bowling alley that had decent drinks, food and atmosphere. A++ would bowl again 🎳.
  • This week, I have been thinking a lot about how best to reduce the use of the Active Record pattern within our Rails monolith at work. I think I have a relatively neat solution that involves a repository layer that returns value objects, that can then be composed with queries. Repositories would still use Active Record under the hood to read, and there would need to be some work to represent computed properties, but I think it could work! I plan to write this up more fully soon.
  • I've dropped of getting through the Metroid Primer remaster this week, even though I brought my Switch with me, there just hasn't been a moment that I've been able to pick it up!
  • No updates on the avo this week — soooon!
  • ]]>
    week-4-meet-the-team Fri, 24 Feb 2023 11:52:45 +0000
    Week 3 — Ruby Ruby Ruby.
  • I've been listening to the latest The Adventure Zone campaign, Steeplechase . Based on the Blades in the Dark tabletop RPG, it seems to be a much faster paced campaign as compared to some of the other DnD based campaigns. So far I am quite enjoying how the system works, as well as the story.
  • I have been listening to the aforementioned podcast while commuting to the office as well as to Ruby Conf over the last few days. I haven't really missed the ~60min commute to and from the city each day, but it's kind of a novelty while I am in Melbourne for the week and being able to make more of a dent in my podcast backlog each day has been kinda nice.
  • Ruby Conf 2023 was packed with amazing presentations, and as always the balance of non-technical and technical focused talks was great to see. Some of the standout talks (to me) were:
    • Upgrading the Ruby Community by Pat Allan— Pat challenges the audience to think more critically about the Ruby communities moto, MINASWAN, suggesting that nice might not be good enough anymore.
    • The World Set Free by Coraline Ada Ehmke — Coraline chats ethics as it pertains to technology and politics. Highlighting that technology has never been apolitical, and never can be and that we as developers of software need to be constantly aware of how our work can be used to further exacerbate power imbalances.
    • REACT to Imposter Syndrome by Prakriti Mateti — Prakriti talks strategies for interrogating whether a particular negative thought is being caused by imposter syndrome, and how to re-express said thoughts so as that they're more accurate and constructive.
    • How Puma Works by Nate Berkopec — Nate talks about the internals of Puma and how to become an effective open source contributor all while racing against auto-advancing slides! This one was a particular standout to me, as I've always wanted to dig in to Puma's internals, but never knew where to start. Thanks Nate!
    • All you need is Rails (Engines) by Julián Pinzón Eslava — Julián explains how he compartmentalised a Rails app using engines, and the various hurdles he faced along the way. Having not used Rails, let alone Rails Engines in a long time, this one resonated with me as it largely followed the "Slices" feature of Hanami
    • A People Pleaser's Guide to Salary Negotiation by Colleen Lavin — Colleen gives us the advice we all need to hear about how to negotiate pay when going in to a new role.
    • Security Doesn't Have To Be A Nightmare by Wiktoria Dalach — Wiktoria delivers one of the best talks I have seen on security. The delivery is perfect with sharp and to the point take aways. I have always been a proponent of shifting security left (earlier in the delivery timeline). Wiktoria gives us the evidence for why and the questions to ask to make sure everything is covered off.
    • Implementing Object Shapes for CRuby by Jemma Issroff — Jemma gives a stellar run through of how the internals of Ruby's instance variable management works. Comparing the process between Ruby 3.1 and 3.2 made it easy to see where the performance gains are in Ruby 3.2, and why the changes made were necessary. Jemma also paired with Aaron Patterson in late 2022 on the implementation of Object Shapes. The video is highly entertaining and educational, I recommend it.
  • Talks aside, it was lovely getting to see some humans again, some of which I haven't seen since Ruby Conf 2020 😅
  • Since I am away from home this week, I am not sure how the little avo is doing, so watch this space as we all find out next week 🥑🌱
  • ]]>
    week-3-ruby-ruby-ruby Fri, 17 Feb 2023 23:34:24 +0000
    Week 2 — Next week, and next week.
  • Nintendo dropped a surprise release of Metroid Prime Remastered on us this week! I remember reading, and re-reading all of the promotional material of the original when it was announced out in ~2001. Then being amazed by the detail in Samus' visor alone. The way it fogged up with alien steam and the way bright lights caused Samus' eyes to reflect off of it was just magical at the time. I've tried to replay the Gamecube version via emulation a couple of time over the years, but was always put off by poor frame rate and weird texture compression. I'm so glad a remaster has dropped for modern hardware and I can't wait to spelunk through the world of Talon IV once more.
  • Performance review time has been rolling through at work. I always find that I can write for days when providing feedback and praise for someone else, but hit a mental block when I need to write something reflective. Time and time again, I tell myself I'll keep a list of things throughout the year so that come performance time, I can whiz through the list and write up a self reflection with ease. It always starts strong, and then drops off a cliff after about a month or so. Let's see how we go this year.
  • This week is the penultimate week that my team at work gets to work together as a team before we disperse to join and form new teams. It's been a wild 12 months, and I'm looking forward to the things we get to tackle next!
  • I am off to Melbourne next week for Ruby conf. I am super excited to see some Ruby humans in person again after a few years off :)
  • I also managed to snag a couple of tickets to go see Alexisonfire the week after Ruby conf. in Melbourne. The last time I saw them was around 2008? so very keen to see them again!
  • Vim practice has been going well, finding the right plugins to do the things I am used to in RubyMine has been kinda fun, though I've had to start a cheat sheet because I'm starting to lose track of some of the less frequently used commands.
  • The avocado plant is doing well too! The new growth is maturing and some of the leaves that were curling last week are looking better. A small avocado plant with a few leaves of new growth
  • ]]>
    week-2-next-week-and-next-week Fri, 10 Feb 2023 11:17:23 +0000
    Week 1 — This time, for sure.
  • 📲 New blog, who this? I have been re-building this site with Hanami & Tailwind, following the W3C's Micropub spec (mainly so I can leverage plethora of amazing compatible clients out there to write posts like this).
  • Since the enshitification of Twitter, I have been reflecting on the permanence of the things I put online. Not that I want the things I put online to be there forever, but more that I would like to be the one to control when they go away. To that end I have moved to self-host the things I consider to be important. Right now that is this blog, a single user Mastodon instance, and my RSS aggregator.
  • A little while ago, Hanami rolled out its 2.0 release. As a long-time fan of rodakase and the dry-* ecosystem of Gems, it's super exciting to have a modern framework in Ruby-land. Towards the end of 2022, my team at work spun up a brand new product over the course of 3 months or so, using one of the later betas of Hanami. The service has been rock-solid, and includes things like a mock data layer that can be optionally swapped in for the live data layer to make things like local development and demo data generation possible. This was made maddeningly easy by Hanami's provider API. I didn't get to write much of the code for this, and as such have re-written this site in Hanami, and I plan to open-source it soon!
  • Abby and I have been watching The Last of Us, and gross retconning of the origins of the parasite aside, it has been pretty enjoyable. It's been a long time since I played the game, so I have totally forgotten some of the smaller story beats. This week's episode was an incredibly touching arc of the lives of Bill and Frank. Characters, who, in the game were only hinted at being romantically involved. HBO took this, ran with it, and made the room incredibly dusty for about 2 hours. Helluva backstory just to explain how Joel was able to pick up a spare car battery.
  • I'm trying Vim again for reals this time. I am not writing a whole lot of code these days, so the overhead of Rubymine just to read some code, or make some small changes here and there is just too much. My previous attempts at learning Vim were made tricky by wanting to be as productive as I was in an editor like VSCode or RubyMine. Now that I'm not so much on the critical path of getting code out, this might be a good time to learn. So far, it's been pretty enjoyable, and since I have iTerm open all day anyway, there's one less thing to keep running.
  • I have been growing an Avocado in a pot on my desk. It looked a bit shaky after I repotted it from a smaller glass container. But this week there's been some new growth! A small avocado plant with a few leaves of new growth
  • ]]>
    week-1-this-time-for-sure Fri, 03 Feb 2023 08:23:08 +0000
    Ruby learning materials. I often get asked about recommendations for resources to learn Ruby (and how to program, generally). This list is intended to catalogue the various resources I have shared over the years and be an easy reference point for future learners.

    Ruby Koans


    This is my go to recommendation for learning the Ruby language from scratch. You'll complete a number of exercises in the form of tests. Your goal is to get each test to pass by writing Ruby code. As with most $language Koans library, it starts off very easy and then ramps up in complexity.

    The Odin Project


    Specifically the Ruby portion of the "Full Stack Ruby on Rails" course. This course covers off almost all of the basics that you would need to be productive with Ruby in a project that isn't super complex.

    Ruby Weekly


    One of the joys of the Ruby world is that someone is coming out with a Cool New Thing™ almost all the time. This can be hard to keep track of, and I have found Ruby Weekly a great resource to keep on top of all of the happenings in the world of Ruby. There are similar newsletters from the same publisher for other languages, too.

    Ruby Tapas


    These timeless videos from Avdi Grimm illustrate the why behind a lot design patterns we employ every day, using real examples to help solidify the benefit of following these patterns.



    • The Bike Shed — Out of thoughtbot, general developer experience, challenges and joys, usually covering Ruby and Javascript.
    • The Ruby on Rails Podcast — A weekly chat about Ruby on Rails, OSS and programming in general. Though not always about Rails specifically.



    Garry BernhardtWatch

    Thinking about the boundaries of and within systems can be tricky for new programmers. This talk does an excellent job of introducing the topic and providing concrete examples to take with you throughout your career.

    Y Not- Adventures in Functional Programming

    Jim WeirichWatch

    A detailed introduction to functional programming with Ruby, via first principles of lambda calculus.

    Refactoring Ruby with Monads

    Tom StuartWatch

    Dealing with unwieldy code using monads to help simplify presence or absence of data in our apps.

    All the Little Things

    Sandi MetzWatch

    Another journey through a hairy refactoring, this talk takes an ugly section of conditional code and converts it into a few simple objects. It bridges the gap between OO theory and practice and teaches straightforward strategies that all can use to improve their code. Also, checkout Sandi's book at Practical Object-Oriented Design, An Agile Primer Using Ruby.

    ruby-learning-materials Mon, 30 Jan 2023 08:37:22 +0000
    Deploying a Hanami 2.0 app to fly.io. I have a couple of small hobby apps that were on Heroku's free tier (RIP) that I have now moved over to Fly.io. Fly.io has a migrate from Heroku process for Rails apps, but as far as I could see, not for any Ruby app. So I had to do things manually, and while deploying to Fly.io is super simple, there were a couple of small things that tripped me up that I thought I'd write about here in case any one else is also trying to deploy a Hanami 2.0 app to Fly.io.

    Getting setup

    After you've setup an account on fly.io and have installed the command line app, you can then follow the docs for setting up a Ruby app.

    While running through the fly launch setup, you should get the option to setup a Postgres database. If you do, the URL will be available as an environment variable in DATABASE_URL.

    Once fly launch has completed, you should have a new fly.toml file in the root of your project.

    Before deploying your application, you'll need to make a couple of changes specific to Hanami 2.0. The fly.toml below is where I landed in terms config for a small, simple app. The biggest changes from the generated file are as follows:

    • on deploy, defines a release command to run database migrations (at the time of writing, migrations are not in Hanami 2.0 by default)
    • defines the web process as bundle exec puma -C config/puma.rb
    • sets the Hanami environment
    • configures the processes to run (as ["web"]) and the internal port to listen on


    Once you've filled out your fly.toml, you can run fly deploy to send your first build to fly.io.

    If you're familiar with Heroku, there's a similar build and deploy log on fly.io. Though I have found it to be not as detailed as Heroku, it has been enough to surface any config errors and correct them, so keep an eye on it as it'll surface any obvious issues.

    Once your deploy is working, you likely wont need to change anything for a little while, so, if you're hosting your code on Github, you can setup an action to build and deploy on a successful build.

    An example GitHub action to build and deploy a Hanami 2.0 to fly.io

    deploying-a-hanami-20-app-to-flyio Sun, 22 Jan 2023 06:29:33 +0000
    Managing dotfiles. It's not often that I get a new computer, but on the odd occasion that I do, I like to have all of my config prepared and ready to copy over!

    To achieve this, I am using chezmoi and GitHub to keep an up to date snapshot of my dotfiles. My previous tool of choice for managing dotfiles was rcm, but chezmoi offers things like password manager integration, scripts, and templates to customise dotfiles based on the machine I am setting up, making it just that little bit more useful.

    The initial setup of chezmoi is super straightforward, just:

    chezmoi init
    chezmoi add ~/.my-first-file
    chezmoi cd
    # follow your usual git workflow to add a remote and push

    Then, to pull down and apply your dotfiles on another machine, run:

    chezmoi init --apply $github_username

    From here, the workflow of adding and updating files is essentially: - Edit the source file on your machine - Then, chezmoi add ~/.file to commit and push to GitHub

    The chezmoi FAQ lists a couple of other ways you can keep a file in sync, including chezmoi edit and chezmoi merge, but I have found add to be the simplest.

    Chezmoi also makes it simple to run scripts when you run chezmoi apply.

    You can decide whether a script is run_once_ when you first run chezmoi apply, or run_onchange_, which will run every time, provided the file has changed.

    The scripts I have at the time of writing are:

    • run_once_00_install-xcode-devtools — Does what it says on the tin, installs Xcode's devtools
    • run_once_01_install_homebrew — Installs Homebrew if it's not already installed
    • run_onchange_after_brew-bundle — To run brew bundle whenever the Brewfile changes
    • run_onchange_after_configure-macos — To configure a bunch of macOS and LaunchBar defaults.

    Having a look through the chezmoi docs, you'll see there's a bunch more you can configure to meet your specific requirements, but hopefully this has provided a brief insight in to what is possible, and how easy it is to get started with a simple setup.

    managing-dotfiles Sun, 22 Jan 2023 06:20:43 +0000
    Naming things is ~hard~ fun Like most people*, I like to name the various devices in the house after a theme. For the longest time, my devices were unnamed, until I moved to Apple's ecosystem and picked up my first external SSD for time machine.

    My chosen theme was the Metal Gear series, so naturally, the drive was named Solid Snake, and my MacBook was Roy Campbell. Fast forward a couple years and now the lineup looks like:

    • MacBook Pro — Zero
    • AirPods — Sigint
    • iPad — Shalashaska
    • iPhone — Fortune
    • Watch — Volgin
    • HomePod mini — Quiet
    • TV — Otacon
    • Wifi — Outer Haven
    • And then I have a room light and a lamp named Olga and Sunny respectively :)
    • ... as well as a previous iPhone and AirPods pairing of Ground Control and Major Tom (which were the only ones to break the theme).

    The only annoying thing is that Air Drop shows the device name as a destination (which makes sense), but doesn't show who owns the device. A solution to this would be to leave everything as "Daniel's Whatever " — but where is the fun in that.

    *computer nerds

    naming-things-is-hard-fun Thu, 05 Jan 2023 05:54:15 +0000