Advent of Code

14 December 2019

For the second year I’m taking part in the Advent of Code with friends and coworkers. I’m using Clojure again this year.

The Advent of Code is a story and series of puzzles released as 2 parts daily. There’s a community of people competing at various levels to complete the puzzles faster than others. I was keeping up fine for the first 7 days or so, but I eventually fell behind like many people. Fortunately, everyone can continue to work at our own pace. The puzzles from previous years continue to be available.

I’m happy to find that I’m having an easier time with Clojure this year, and I’m more easily able to use it to describe the algorithms instead of struggling with the language. I publish my code to Github.

Missing Classes in IDEA

25 November 2019

I use InteliJ IDEA for work when working on Java code. When the IDE doesn’t work, though, it’s incredibly distracting.

I had a problem where IDEA would not find a few auxiliary classes in my application. It would highlight them as errors in imports, and the search would find the source file, but technically not the class definition. I’d poke at the problem over a couple weeks, but I’d otherwise ignore it most the time until it seemed to be losing more and more of my classes, some of which I was actively modifying.

Re-importing the project’s Maven build didn’t fix it; re-cloning a brand new project didn’t fix it; and re-installing IDEA didn’t even work. Finally, I found IDEA’s config directories, and wiped those out to start over, and that cleared up the problem: I was able to find all my classes again.

Using Google Calendar Effectively

21 September 2019

Google Calendar makes the world go 'round, especially for kids who travel between households and have lots of school events. There are a couple things you can do to get the most out of your calendar.

Set Locations

Calendar events obviously come with times and fixed reminders so many minutes before the event. It doesn’t matter where you are or where the event takes place: that notification is coming at the same time.

With a location set on each calendar event, other software, like Waze GPS, can continuously watch your current location and offer you a more useful notification giving you time to travel based on distance and current driving conditions along the way.

Set the Earliest Time

Most my calendar events have just one start time, but my kids' events aren’t that simple. A marching band performance may be at 7pm, but the bus to the stadium leaves at 4pm. Since we live by notifications, it’s important to get those notifications at the earliest time at which we need to act. The other times are likely just extra details that can go into the event title or event details. I can get a notification for 4pm and realize I don’t need to be there until 7pm, but I can’t tolerate a 7pm notification if I was supposed to be dropping a kid at the practice at 4pm.

If I find it’s important to see notifications for all the potential times of an event, then it’s probably best to break that event into more than one event: drop-off, performance, and pick-up.

Share the Calendar

This is the first and most useful collaboration feature of Google Calendar. A personal calendar benefits one person, but invite the other participants (the kids), and then they can start adding and maintaining events and following these rules as well.

Chili Recipe

03 September 2019

John’s Chili (8 qt)

Since I’ve not eaten meat for over 4 years, and I’ve been evolving my chili recipe, it’s probably time to update it.

  • 58 oz canned plain tomato sauce

  • 93 oz canned dark red kidney beans

  • 46 oz canned black beans

  • 15 oz canned garbanzo beans

  • 1 large onion

  • 2 large tomatoes

  • 1 small green bell pepper

  • 1 small yellow bell pepper

  • 3-4 hot peppers (jalapeño, habanero, red chili, etc)

  • 0.25 cup minced garlic

  • 3 tbsp chili powder

  • 2 tbsp crushed red pepper

  • 1 tsp salt

  • 1 tbsp black pepper

  1. Dice all the fresh ingredients.

  2. Combine fresh ingredients with spices in large pot over medium heat.

  3. Add canned sauce and beans to the pot.

  4. Adjust heat for slow bubbling, stirring occasionally.

  5. Let it cook for 45 minutes or longer.

Browser Automation with Geb, Spock, and Groovy

22 October 2018

I recently gave a talk and demonstration, Browser Automation with Geb, Spock, and Groovy, at the Capital Area Software Engineers group in Harrisburg, PA. While explaining the whole stack of software, I showed how to:

  • Start a project in Gradle

  • Get the Geb and Webdriver dependencies in place

  • Get started in Spock testing framework

  • Start up a browser for testing

  • Interact with the page content

  • Wait for asynchronous content

  • Abstract away page components into Geb Page classes

The slides and all the code are available in my geb-preso repo. It includes copies of the code I had prepared, the code we wrote live as a group, and my little toy Planning Poker JS app I was testing.


18 September 2018

Months ago, I started setting up LetsEncrypt using certbot on my Debian web server. It hosts multiple virtual hosts, so I setup 2 different sets of certificates: one for and the other for

On Debian, at least when I got started, it was recommernded to have certbot shutdown your apache2 and let it start its own temporary web server to verify the LetsEncrypt setup (--authenticator standalone). The other trick is to register multiple domain names for one certificate by repeating the -d option. I did this with this invocation:

certbot \
    --pre-hook "systemctl stop apache2" \
    --post-hook "systemctl start apache2" \
    --authenticator standalone \
    --installer apache \
    -d \
    -d \

I got it started a couple months ago, but I didn’t know how to setup multiple domain names, so I was always getting errors that this certificate was for a different name: instead of, etc.

That’s all sorted out now, and all my sites should be SSL all the time.

For more information on setup, certbot has a great set of guides based on your OS and web server.

2018-07-24 Podcast List

24 July 2018

Watching for GIMP 2.10.1

13 May 2018

I was seeing the new GIMP 2.10.0 doing bad things with multiple gradients on a transparent layer, so I logged Bug 795866. They quickly fixed the bug within 48 hours, but now I’m sitting here reloading the GIMP news page to see if they’ve cut the newest release.

Update: GIMP 2.10.2 just hit Debian Unstable!

End of the Make 365

29 April 2018

While I fell behind and caught up a couple times, I caught up one less time, so this project is done.

2018-03-12 Sanding Stick Fix

12 March 2018

The sanding stick needed a little adjustment to be assembled successfully.

2018-03-11 Sanding Stick

11 March 2018

I finally modeled a sanding stick for small sandpaper belts I bought a year ago to kickstart the project.

2018-03-10 Ben on Skates

10 March 2018

Ben on Skates

A post shared by John Flinchbaugh (@johnflinchbaugh) on

2018-03-09 Enfocus for Cheshire Cat

09 March 2018

I added the Enfocus library to my example Cheshire Cat project to handle dynamic markup on the client.

2018-03-08 CLJS HTTP Client in Cheshire

08 March 2018

I added the CLJS HTTP client to my example Cheshire Cat project.

2018-03-07 JS Alert in Cheshire Cat

07 March 2018

I added a JS/Clojurescript alert to my example Cheshire Cat project.

2018-03-06 Ring-JSON in Cheshire Cat

06 March 2018

I switched the cheshire cat project over to use ring-json.

2018-03-05 JSON in Cheshire Cat

05 March 2018

I had the cheshire cat project produce a little JSON.

2018-03-04 Droid Maker Meetup

04 March 2018

Droid Maker Meetup

A post shared by John Flinchbaugh (@johnflinchbaugh) on

2018-03-03 New Feet for the Printer

03 March 2018

2018-03-03 New Feet for the Printer (late)

A post shared by John Flinchbaugh (@johnflinchbaugh) on

2018-03-02 Started Cheshire Cat Project

02 March 2018

I started the cheshire-cat project from Living Clojure.

Older posts are available in the archive.