<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Niko, doko?</title>
    <link>https://nikodoko.com/</link>
    <description>Recent content on Niko, doko?</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <copyright>&amp;copy; Nikodoko 2019 - 2023 | &lt;a href=&#39;https://nikodoko.com/index.xml&#39;&gt;RSS&lt;/a&gt;</copyright>
    <lastBuildDate>Fri, 09 Jun 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://nikodoko.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Difference between .equals and == in Java</title>
      <link>https://nikodoko.com/posts/java-object-equals/</link>
      <pubDate>Fri, 09 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>https://nikodoko.com/posts/java-object-equals/</guid>
      <description>Java was first releases in 1996. After almost 30 years and more than 20 successive iterations of the language, it comes to no surprise that it has a few dusty corners and surprising quirks. One of them is the difference between == and .equals. If you come from more modern languages, such as Go, you might expect that new MyClass(&amp;quot;a&amp;quot;) == new MyClass(&amp;quot;a&amp;quot;)&amp;hellip; but it is not the case!
Reference equals (==) In Java == operates on references.</description>
    </item>
    
    <item>
      <title>Speeding Up a Java CLI Part One: AppCDS</title>
      <link>https://nikodoko.com/posts/speeding-up-a-java-cli-part-one-app-cds/</link>
      <pubDate>Sun, 21 Mar 2021 00:00:00 +0000</pubDate>
      
      <guid>https://nikodoko.com/posts/speeding-up-a-java-cli-part-one-app-cds/</guid>
      <description>During my free time, I am developing javaimports , a goimports-like Java command line tool that auto-imports Java classes without relying on an IDE, a LSP or any kind of cache. I use it daily to write Java, pairing it with google-java-format to automatically format my code and add missing imports on save. Obviously, I need javaimports to run fast, which pushes me to look for ways to make my code, and Java command line applications in general, faster.</description>
    </item>
    
    <item>
      <title>Introducing an Auto-formatter on a Big Codebase</title>
      <link>https://nikodoko.com/posts/format-big-codebase/</link>
      <pubDate>Wed, 17 Feb 2021 00:00:00 +0000</pubDate>
      
      <guid>https://nikodoko.com/posts/format-big-codebase/</guid>
      <description>Over the past few years, auto-formatting utilities (that do code formatting for you) such as gofmt , black or google-java-format have become increasingly popular. While such tools undoubtedly provide some benefits when used from the start of a project, changing the code style of an entire codebase is hard. The larger it is, the harder it is to break through its inertia&amp;hellip; Which begs the question: is it worth it?</description>
    </item>
    
    <item>
      <title>Beware Of Best Practices</title>
      <link>https://nikodoko.com/posts/beware-best-practices/</link>
      <pubDate>Tue, 04 Aug 2020 00:00:00 +0000</pubDate>
      
      <guid>https://nikodoko.com/posts/beware-best-practices/</guid>
      <description>As software engineers, our relationship with best practices is an evolving one. We start off unaware of what they are. One day, because someone told us or because we read about it somewhere, we discover them. This is usually where we start to revere them as some kind of holy scripture. The cleaner our code gets, the more obsessed we become. For many of us, it can take a while before we open our eyes again to the cold, hard truth: best practices are nothing but tools.</description>
    </item>
    
    <item>
      <title>What I Learned from Pair Programming in Times of COVID-19</title>
      <link>https://nikodoko.com/posts/pair-programming-coronavirus/</link>
      <pubDate>Mon, 20 Jul 2020 00:00:00 +0000</pubDate>
      
      <guid>https://nikodoko.com/posts/pair-programming-coronavirus/</guid>
      <description>Writing code reviews, on GitHub or elsewhere, is a central part of a software engineer&amp;rsquo;s daily life. Yet, it is a task unlike any other: in addition to technical knowledge, a substantial amount of tact and subtlety is required in order to go past differences of opinion and establish a fruitful dialogue. This is of course true for both the one reviewing and the one being reviewed, but it is undeniable that, as the one initiating the discussion, the reviewer bears an even greater responsibility.</description>
    </item>
    
    <item>
      <title>Parsing HTML Table Fragments</title>
      <link>https://nikodoko.com/posts/html-table-parsing/</link>
      <pubDate>Thu, 14 May 2020 00:00:00 +0000</pubDate>
      
      <guid>https://nikodoko.com/posts/html-table-parsing/</guid>
      <description>Honestly, when I need to write a quick and dirty script, my go-to language is Python. But the other day, as I realized I needed to write yet another small web scraper, I decided to forego Python&amp;rsquo;s BeautifulSoup to instead take a look at Go&amp;rsquo;s golang.org/x/net/html package. Needless to say, it is quite bare in comparison&amp;hellip; But I also realized that it makes absolutely no concessions when it comes to strictly following the HTML specification1.</description>
    </item>
    
    <item>
      <title>Goimports explained</title>
      <link>https://nikodoko.com/posts/goimports_explained/</link>
      <pubDate>Thu, 02 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://nikodoko.com/posts/goimports_explained/</guid>
      <description>Go users out there are probably familiar with gofmt and it&amp;rsquo;s brother goimports (which actually uses gofmt under the hood). These are two little CLI tools (written in Go, of course), that have become core parts of many developers&#39; Go workflow.
Over time, I have personally grown very fond of these tools. They are undoubtedly great productivity boosters, but what I love about them is not so much their raw utility as their design.</description>
    </item>
    
    <item>
      <title>Ranges in Vim</title>
      <link>https://nikodoko.com/posts/vim-ranges/</link>
      <pubDate>Sun, 09 Feb 2020 00:00:00 +0000</pubDate>
      
      <guid>https://nikodoko.com/posts/vim-ranges/</guid>
      <description>Although I briefly mentioned the concept of range in my previous article about substitutions, I simply described them as a &amp;ldquo;set of lines&amp;rdquo;, on each of which the :substitute command would be called. But amongst the (much appreciated) feedback I received on reddit , some mentioned the fact that this somewhat hand-wavy explanation was not enough, and that I should elaborate.
This in turn made me realize that everything about ranges was not clear for me.</description>
    </item>
    
    <item>
      <title>Vim Substitute Tricks</title>
      <link>https://nikodoko.com/posts/vim-substitute-tricks/</link>
      <pubDate>Wed, 15 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://nikodoko.com/posts/vim-substitute-tricks/</guid>
      <description>I use Vim to edit text every day, and the good old :[range]s[ubstitute]/pattern/string/flags command is without doubt one of the commands I use the most. It is simple yet powerful, and when combined with the g flag allows me to replace everything I want on an arbitrary selection (or on the whole file using :%s/pattern/replacement/g).
But I recently realized that, despite using it a lot, I was far from leveraging its full potential.</description>
    </item>
    
  </channel>
</rss>