Three Developer Tools I'm Thankful For

avatar-matt_raible.jpg Matt Raible

I ❤️ Thanksgiving. It’s one of my favorite holidays. I love it because it’s a time of reflection and gratitude. As an open source developer, I have a lot to be thankful for. Many of the tools I use are created by developers from around the world, and I get to use them for free!

I’m also very thankful for my awesome job at @oktadev. I get to write example apps with open source software, publish them as open source projects, and help developers understand how to use Okta’s developer APIs for authentication and authorization.

If you’ve been a software developer for any length of time, you probably know what makes it a fun lifestyle: the opportunity to learn new stuff, to have an impact on the company’s business, and to have a great boss. I’m very thankful I have all three. Add to that my fantastic team (@rdegges, @leebrandt, @aaronpk, @reverentgeek, @LindsayB610, and @kaifubrent) — and I’ve got a ton to be thankful for!

Enough of the "I have cool co-workers" talk, you’re here to find out about my favorite tools.

IntelliJ IDEA

IntelliJ IDEA is an Integrated Developer Environment (IDE), used mostly by Java developers.

IntelliJ IDEA

The first languages I learned to program in were HTML, CSS, and JavaScript, way back in the mid-90s. I started learning Java in the late 90s. At that time, my favorite IDE was HomeSite. Back then, I used to write Java code and search/copy/paste the imports into my code. Such a pain!

It wasn’t until the early 2000s that I found an IDE that wasn’t painful to use. I fell in love with Eclipse for a few years, back in the Struts 1.0/Spring 1.0 days. In the mid-2000s, I migrated my AppFuse project from Ant to Maven and ended up moving to IDEA because its Maven support was so much better. Then I moved back to the area I adore — UI development — and found that IDEA had excellent support for HTML, CSS, and JavaScript. I haven’t looked back since.

In addition to plugins that support virtually every language, IDEA has a killer feature that I use in my demos: Live Templates. Live templates allow you to record code snippets and recall them with a quick shortcut that you define. You can see them in action in my recent Full Stack Reactive screencast.

Oh My Zsh

Oh My Zsh is a favorite I’ve only recently added. I’ve used Bash for most of my career. I started using Zsh after watching Sebastian Daschner mention it in a talk on productivity at the 2017 Java Champions summit. It’s been a little over a year since I started using it and I absolutely love it. I use its Git and JHipster plugin, along with the command time plugin.

When it comes to shells, I also really dig iTerm. My favorite feature these days is +D and +Shift+D to split the terminal vertically and horizontally.

iTerm 2 with Oh My Zsh

Asciidoctor

Asciidoctor is a text processor and publishing toolchain that converts AsciiDoc files into HTML5, PDF, EPUB, and MOBI. It probably supports more formats, but these are the ones I use.

I really got into Asciidoctor a few years ago when I authored the first version of the JHipster Mini-Book for InfoQ. When I first suggested the idea, they thought it’d be the most expensive book they’d ever produced, but they were still willing to let me do it. They thought it’d require taking the PDF generated from Asciidoctor, putting it into their design program, then manipulating it to output EPUB, MOBI, and a printable version too. In the end, it turned out to be the cheapest book they’d ever produced! Asciidoctor supports all of the aforementioned outputs and I was able to match InfoQ’s mini-book design with code and CSS.

I enjoyed the process so much, I created a template project for InfoQ mini-books. Even if you’re not writing an InfoQ mini-book, this template can help you self-publish your own book.

When I started writing on this blog (which uses Jekyll, soon to be Hugo), I reluctantly used Markdown to author posts. Fast forward to today, and we’ve integrated AsiiDoc support! I have to thank Josh Long for motivating this integration. He started writing our Reactive Programming series with it. The code callouts were so cool, I had to make them work. Below is an example.

Example 1. Read data from a file synchronously
package com.example.io;

import lombok.extern.log4j.Log4j2;
import org.springframework.util.FileCopyUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.function.Consumer;

@Log4j2
class Synchronous implements Reader {

    @Override
    public void read(File file, Consumer<BytesPayload> consumer) throws IOException {
        try (FileInputStream in = new FileInputStream(file)) { (1)
            byte[] data = new byte[FileCopyUtils.BUFFER_SIZE];
            int res;
            while ((res = in.read(data, 0, data.length)) != -1) { (2)
                    consumer.accept(BytesPayload.from(data, res)); (3)
            }
        }
    }
}
1 source the file using a regular java.io.File
2 pull the results out of the source one line at a time…​
3 I’ve written this code to accept a Consumer<BytesPayload> that gets called when there’s new data

One downside to AsciiDoc is GitHub doesn’t support it as well as Markdown. You can fix that by viewing your *.adoc files through DocGist, as I’ve done with my Angular 7 Tutorial.

IntelliJ IDEA has an excellent AsciiDoc plugin.

Honorable Mentions

We try to limit our Thanksgiving "favorite developer tools" posts to three, but I can’t help but mention two other ones I use almost daily.

  • HTTPie: If you like cURL, you’re going to love HTTPie.

  • Lighthouse: a website testing tool that’s invaluable when developing PWAs, and optimizing your UI performance {related: web.dev}.

Happy Thanksgiving!

Turkey

It was fun taking some time to write about my favorite three developer tools. If you have some favorite tools, we’d love to hear about them. Sharing is caring!

If you don’t live in the US, and therefore don’t celebrate Thanksgiving, I invite you to take some time today and look around. Be thankful for what you have and the people around you.

I hope you and yours have an awesome Thanksgiving. 😊

— Matt