Sales  Thu Feb 22 11:54:00 EST 2024

  Sat Jan 27 12:07:00 EST 2024

  Fri Jan 12 11:47:00 EST 2024

I thought this video was interesting, probably because I did not realize how much of the ChatGPT thing is a surprise to its creators.

  Thu Nov 16 09:49:00 EST 2023

  Thu Nov 16 09:45:00 EST 2023

  Thu Jan 12 08:37:00 EST 2023

Not a lot of blogging going on...  Sun Nov 20 20:00:00 EST 2022

Not a lot of blogging going on. This page was down for a lot of 2022 after the great Log4J security scare. I turned off all my web apps for "a while" which grew to be quite a while. I also accidentally deleted the directories (mysql) used for holding the blog (during a disk drive space crunch.)

I had to do what I've now done two other times, restore my blog from the wayback machine. Pretty embarrassing and time-consuming. So I'm not going to use a relational database for the blog this time, and just use files in the filesystem. Hopefully, that will reduce having to restore from the wayback machine for a fourth time. KISS principle

My plan here is to add the occasional entry, although I tend to simply post screenshots to Facebook as my primary outlet for sharing... but perhaps I will post them here also. I also think I will continue to put out book reviews. I think it is useful for me to do for my own internal reasons and someone else might find it helpful.

The Goal  Wed Apr 28 17:55:00 EDT 2021

Someone mentioned this book to me 10 years ago (Susan?) and I noticed it popping up every now and then as a reference in the software automation world.

"The Goal" - I bought it used via but your library probably has it also.

I thought it was a surprisingly good read, usually, my tech books are super dull ... so perhaps I'm biased, but I thought "The Goal" was actually a fun read. I highly recommend picking this book up, It talks about speeding up a factory floor - but the principles and reflection include leading a group of people, problem-solving as a team, and stopping to ask why a lot of times. It made me think about improving things on my current project. I'm familiar with agile and all that (see review below of Accelerate) but I still recommend this book to anyone actually.

The book is a bit 1 dimensional. It was particularly strange in how it treated the lack of balance in the main character's family life. The book evokes a fair amount of sympathy for the main character, but his wife is characterized as being overdemanding in a very stressful situation. She is depicted as abandoning the children at one point without clear rationale - that part is very hard to square with the rest of the book.

The Princess Bride  Sat Jan 23 00:08:00 EST 2021

I read a book. "The Princess Bride" by William Goldman. My neighbor recommended the book highly. I have probably seen the movie at least twice, so I was pretty familiar with the story. The book did add background and color to the characters. Basically, if you liked the movie - you will find a lot of extra details in the book.

Driveway Camera  Sat Jan 23 01:05:00 EST 2021

I used a raspberry pi and an IP camera as a convenient way for our family to see what is in the driveway.

The problem is we can not see the driveway from inside the house, so the solution I chose was to mount a camera outside and then have a dedicated raspberry pi (and some open source software) show the drive\ way in the house. It turned out pretty good.

I tried using google's nest camera, but I found that it did not work well for this application. Namely, it did not like always streaming content.

Located in the center of the kitchen/living room, so now everyone can see the driveway.

The Camera is a SV3C 5MP Wifi camera. I ended up hard-wiring it via ethernet. It gets it's power over the ethernet cable. The camera cost about $65 off Amazon.

It is really handy to see who is in the driveway, or if the mail is getting delivered, etc...

I used the raspberry pi that I got as part of a kit off Amazon. "Vilros Raspberry Pi 4 4GB Complete Kit with Clear Transparent Fan Cooled Case" The kit was $99. I vaguely recall the fan was too noisy.

I used an old pencil box to stuff the raspberry pi and the needed power cords in. I drilled a bunch of holes to vent the pi. The pi tends to get hot in the summer and was overheating until I ve\ nted the pencil case. I used the 4 standard monitor screw locations to mount the pencil box on the back of the monitor.

I had to fiddle some with the software to get it to start up and run the web application in fullscreen automatically. I hope it never breaks because it will take some googling to refigure that out.

This is such a rare finished project, I figured I better document it.... some. I hope you enjoyed this ramble.

  Mon Jan 18 02:45:00 EST 2021

We have four people who feed the dog... to prevent the dog from getting more round, I created the pictured device for ensuring she is fed. When I retire for the evening I reset it, when we feed her during the day - the feeding person moves the nut to the right. Simple.

Scrooge Tip Calculator  Tue Nov 17 12:31:00 EST 2020

I've been learning Flutter. I've had multiple reasons for wanting to give it try. I've been watching an online course. I created the scrooge tip calculator based on what I have been learning through the course.

Learning a new technical thing is fun. And it is nice to create something tangible that people can actually use. I spend a lot of time creating things "on the backend" that aren't immediately useful or visible.

Get it on Google Play

Book Notes "Accelerate"  Sun Mar 01 15:11:00 EST 2020

I read a book. I don't read a lot of books in today's age of constant media consumption choice, but I still believe reading a book is a useful activity.

However, reading a book and forgetting its contents is something I've had happen. Sure sometimes I will recall an appropriate passage and no doubt reading it has enhanced my thinking in some way... but I decided that I will always try and provide a written summary of what I found important or surprising when reading a book.

Today's book is "Accelerate: Building and Scaling High Performing Technology Organizations"

I presumed this book had to do with best practices in software development. I had seen the book referenced by many people. I also so copies laying around at a place I used to work ( - so I knew it was an important read.

Essentially this book advocates for the Agile software development of rapid iterations. It essentially surveys a lot of IT people about their organizations then compares that organization's performance against the surveys. They spend a considerable amount of energy explaining why the approach of using surveys is sound.

The basic gist of the entire book is;

  • always be learning
  • always use small experiments to improve
  • use small iterations to get changes to the customer as fast as possible
  • use machines to do the thing machines are good at (any kind of drudgery or process.. like builds, tests, deployments )
  • broadly speaking, automate as much as possible
  • use small teams with responsibility from customers to data. (don't tier your org)

My impression was that it was a good book. It was well written and direct. It wasn't the most interesting read though - although I know it wasn't intended to be a thriller. It does tend to read more like a research report than a compelling and concise narrative.

I would give the book a grade of 4.5 out of 5. And I would encourage anyone interested in software development to read the book.

My big take away or surprise was: Automating everything (aka commit to deploy) resulted in a system which had greater uptime than batching releases and releasing on a release cadence. I'm more used to the traditional process where we typically release software every week, month or quarter - but they book advocates a system where releases happen automatically several times a day.

Releasing constantly like this is called Continuous Delivery (CD), CD is scary as a developer because you don't want to be the one that breaks production.... so we tend to batch our releases to relieve that concern (aka we will test it later... or test it when everything is running together... right before release) ... but the book seems to say that all you are doing when releasing in batches is piling and mixing your problems into the future.

I have thought releasing many times during the day would be a horror show, but I now believe that you learn not to do things which cause the site to crash... or learn to quickly recover from such flubs... and I presume that once you internalize how to release often, you can give real value to the customer quickly... once you learn how to ride the unicycle of CD...

I think I need to push harder internally and externally for full CD.

  Tue Dec 17 16:08:00 EST 2019

Emails appear to be a simple thing. But the standard includes the ability to nest messages in messages, include attachments, etc... so the underlying model is fairly complex and open to extension. I thought this diagram does a good job of showing how the Javamail API represents the different pieces.

  Tue Dec 17 16:06:00 EST 2019

These things are delicious! Nobody in my family likes olives, so when I make them they are mine, mine, mine!!!!

  Tue Dec 17 16:04:00 EST 2019

  Tue Dec 17 16:03:00 EST 2019

  Tue Dec 17 16:02:00 EST 2019

  Tue Dec 17 15:59:00 EST 2019

  Tue Dec 17 15:57:00 EST 2019

  Tue Dec 17 15:55:00 EST 2019

Canon PIXMA G3200 - Canon Scam  Mon Dec 09 23:54:00 EST 2019

I recommend that you DO NOT buy any of the Cannon InkJet Printers.

On October of 2017, I purchased a Canon printer off amazon for $250. It seemed like a great choice for escaping the Ink cartridge scam of pricy ink. It comes with refillable ink wells filled with 2 years worth of ink!

ALAS NOT SO FAST, the printer includes a non-replacable, non-serviceable ink pad (aka the ink absorber) - which lasts about 2 years - then the printer is ready for the landfill - according to Canon Support.

Very very disappointed!

  • did not escape the costs of ink cartridge scams
  • did loose money on printers / ink
  • did contribute to the environmental disaster of a disposable society

Creating shoddy products like this, should be illegal. Class action lawsuit? Buyer beware.

  Mon Oct 14 13:48:00 EDT 2019

  Mon Oct 14 13:47:00 EDT 2019

  Mon Oct 14 13:45:00 EDT 2019

  Mon Oct 14 13:42:00 EDT 2019

  Sat Mar 30 02:26:00 EDT 2019

""Bought a mechanical keyboard with more resistance so my code will be strongly typed."

  Sun Mar 17 18:29:00 EDT 2019

If you are in the clojure repl or program and you want to stuff a result into the copy/paste buffer (helpful when generating Markdown from data) - I use;
(defn to-clipboard [^String jj]
  (.setContents (.getSystemClipboard (java.awt.Toolkit/getDefaultToolkit)) (java.awt.datatransfer.StringSelection. jj) nil)

How it ends?  Mon Feb 11 11:51:00 EST 2019

lawyer  Mon Feb 11 11:49:00 EST 2019

T's Wall  Sun Jan 27 00:32:00 EST 2019

  Wed Jan 23 22:59:00 EST 2019

  Wed Jan 23 22:57:00 EST 2019

  Fri Jun 22 18:20:00 EDT 2018

  Wed Apr 18 14:52:00 EDT 2018

  Mon Apr 16 01:35:00 EDT 2018

age of...  Mon Apr 16 01:25:00 EDT 2018

Breakfast Truth  Tue Apr 03 13:27:00 EDT 2018

Liquibase IndexOutOfBoundsException  Fri Mar 16 12:23:00 EDT 2018

I'm moving a mysql database into using liquibase . Some of the tables have constraints on tables that no longer exist. This caused "generateChangeLog" to emit a mystery error like so,
    $ liquibase  --changeLogFile f.xml --url "$DBI" generateChangeLog 
    Unexpected error running Liquibase: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
I found that the following change allows generateChangeLog to complete.
$ git diff
diff --git a/liquibase-core/src/main/java/liquibase/change/ b/liquibase-core/src/main/java/liquibase/change/
index 144980b49..8ef52837f 100644
--- a/liquibase-core/src/main/java/liquibase/change/
+++ b/liquibase-core/src/main/java/liquibase/change/
@@ -143,6 +143,10 @@ public class ColumnConfig extends AbstractLiquibaseSerializable {
                     if ((fk.getForeignKeyColumns() != null) && (fk.getForeignKeyColumns().size() == 1) && fk
                         .getForeignKeyColumns().get(0).getName().equals(getName())) {
+                        if(fk.getPrimaryKeyColumns().isEmpty()) {
+                            System.err.println("WARNING AN EMPTY SET OF PRIMARY KEY CONSTRAINTS!!! Table: "+table.getName()+" pkc:"+fk);
+                            continue;
+                        }
                         constraints.setReferences(fk.getPrimaryKeyTable().getName() +
                             "(" +
                             fk.getPrimaryKeyColumns().get(0).getName() +
I shared this discovery with the Liquibase Core team at

  Mon Mar 12 14:11:00 EDT 2018

  Mon Mar 12 13:11:00 EDT 2018

Tomcat start when boot on Ubuntu 14.04  Thu Jan 11 15:22:00 EST 2018

Steps I took to get tomcat to start on boot (and run on port 80) ... I edited server.xml to enable a listener on port 80

install tomcat from tomcat site, unzip into /opt/tomcat

$ sudo adduser tomcat
$ sudo chown -R tomcat.tomcat /opt/tomcat
$ sudo chmod a+rx /opt/tomcat   # so all can read the files / logs
$ apt-get install jsvc

# create start up script
$ cat >> /etc/init.d/tomcat

# Provides:          tomcat
# Required-Start:
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start:
# Default-Stop:
# Short-Description: Tomcat starter
# Description:       Tomcat starter

export JAVA_HOME=/opt/jdk
export JSVC=/usr/bin/jsvc
exec /opt/tomcat/bin/ $* 

$  sudo update-rc.d tomcat defaults
$ sudo update-rc.d tomcat enable

# I think that is everything...

Ornament  Fri Dec 15 17:05:00 EST 2017

Not sure about this  Fri Dec 15 15:59:00 EST 2017

Not sure about this....

  Thu Dec 07 19:18:00 EST 2017

Theory / Practice  Tue Nov 07 15:06:00 EST 2017

"In theory, there is no difference between theory and practice. But, in practice, there is." - Jan L.A van de Snepscheut

  Thu Nov 02 11:37:00 EDT 2017

  Fri Oct 27 18:41:00 EDT 2017

  Tue Oct 24 13:06:00 EDT 2017

Max made a scary pumpkin!

  Fri Oct 20 14:13:00 EDT 2017

This is often what debugging software is like;

  Thu Oct 19 12:39:00 EDT 2017

  Mon Oct 16 12:49:00 EDT 2017

Ah well...  Tue Sep 26 15:33:00 EDT 2017

Fork  Tue Sep 26 15:32:00 EDT 2017

Salad?  Tue Sep 26 15:31:00 EDT 2017

  Tue Sep 19 12:07:00 EDT 2017

Passion for the job  Thu Sep 14 15:55:00 EDT 2017

Off to Sixth Grade  Tue Aug 29 13:39:00 EDT 2017

Don two  Mon Aug 21 13:16:00 EDT 2017

Don Three  Mon Aug 21 13:15:00 EDT 2017

Don one  Mon Aug 21 13:14:00 EDT 2017

Wrong on so many levels  Mon Aug 21 13:12:00 EDT 2017

Emacs!  Mon Aug 07 16:19:00 EDT 2017

Quite a fire pit!   Mon Aug 07 13:13:00 EDT 2017

Sad, sad, sad  Mon Aug 07 13:11:00 EDT 2017

check in time  Tue Oct 25 12:17:00 EDT 2016

I'm getting ready for checking in my code ....

  Tue Oct 25 17:20:00 EDT 2016

"Focus is a matter of deciding what things you’re not going to do." - John Carmack

  Tue Oct 25 13:45:00 EDT 2016

a crazy juxta position

Quote  Wed Jul 06 13:42:00 EDT 2016

Prius maintenance required 2014  Mon Jun 06 20:28:00 EDT 2016

My Prius just left warranty, so now I have to take care of changing its oil. I had jiffy lube do it this time, but the display still said "Maintenance Required" This was driving me bonkers. I probably watched about 10 you tube videos on how to reset it. Finally I found a sequence that worked for me.
  • Put on Trip A
  • Press and hold the KH/MPH button down
  • Power off the car (while still holding KH/MPH)
  • Power on car (still holding KH/Hour)
It will then start updating the Maintenance Record and the message should go away. Happy Motoring #clojure  Sat Apr 23 02:49:00 EDT 2016

As a web developer, I've long been envious of the online Javascript tinkering tools (aka and

Finally something for ClojureScript peeps!

The Art of Stage Presence  Fri Mar 04 15:16:00 EST 2016

I recommend this great 3-hour presentation on giving presentations, "The Art of Stage Presence"

UPDATE: BOO this video is gone, but the presenter, James Whittaker, Seems to have a lot of advice for example, here is another presentation of his Microsoft TechDays 2017 l James Whittaker: The 7 Stages of Creativity: Developing Your Creative Self

Smuttynose Finestkind IPA  Wed Sep 23 12:51:00 EDT 2015

When I do enjoy a cold beer (stupid whole 30 plan bans alcohol), I reach for a Smutty Nose Finestkind. I highly recommend it.

It has a whole host of flavors. The first few sips are a blast of aromas and tastes. I find though that I don't bore of it. You should try it.

My wife originally bought a 6 pack for me because she thought I resembled the guys on the cover. I've come to believe the picture does represent me in retirement.... living out of a trailer, drinking beer in folding lawn chair, no doubt penniless...

The Martian  Tue Jul 07 12:04:00 EDT 2015

I loved, loved, loved this story. The audiobook was outstanding. A true voice actor makes a big difference.

The story made me look forward to my commute into work. I'd heard lots of others mention it, so I finally gave it a shot - glad I did.

The Martian

My Blog / dippybird #clojure  Sun Jun 21 13:28:00 EDT 2015

This blog is now hosted in Clojure. Why do you ask does that matter? It really doesn't matter much to you, unless you are a Clojure fan. As a web application developer, it would be pretty crazy if I were to blog using someone else's tool. Just like it would be odd for a shoemaker to wear someone else's shoes.

I've written simple blogging software in: Java (my jblog project), Grails (sunrise project), and now I introduce Dippybird!

Jack Welch  Mon May 18 13:26:00 EDT 2015

On the drive in, I really enjoyed this podcast interview with Jack Welsh. (see link below to interview mp3)

He talks about his time at GE, his school, performance ratings, thinking of business as a game, always learning and of course it is a book tour... I'm gonna get his book, The Real-Life MBA: Your No-BS Guide to Winning the Game, Building a Team, and Growing Your Career

Here is the interview

Today I learned  Fri May 15 15:51:00 EDT 2015

I learned about clojure's mapcat. It is a simple combination of map and cat - but it can come in handy. For example,
(mapcat #(repeat 5 %) [1 [8 2] 3])
(1 1 1 1 1 [8 2] [8 2] [8 2] [8 2] [8 2] 3 3 3 3 3)
I used this on a 4clojure problem.

Programming  Thu Dec 18 12:38:00 EST 2014

Programming is easy like riding a bike. Except the bike is on fire and you're on fire and everything is on fire and you're actually in hell. @matixmatix

High Tech Interview  Thu Dec 18 19:29:00 EST 2014

Q: How many golf balls fit on a schoolbus?
A: Just hire somebody else

Out Standing by His Desk  Wed Nov 05 13:14:00 EST 2014

My motorized standing desk doesn't have a preset for my preferred height! Oh the agony of changing it's height #firstworldproblems

Clojure vs Java - switch/case  Tue Apr 15 18:34:00 EDT 2014

Java's switch
       7:  System.out.println("seven");
       3: System.out.println("three");
Clojure's equivalent
(case 7 (println "seven")
          3 (println "three")
          (println "deffy") )

Cool way to do testing...  Fri Mar 28 13:45:00 EDT 2014

I really enjoyed watching this talk yesterday… It's about an Erlang tool for testing, called quick check. Cool stuff...

Kinesis   Fri Feb 28 21:44:00 EST 2014

I swear by my Kinesis keyboard. It has helped me continue to be a productive developer since about 15 years when I got tendon pains from t