Dad mode

Let me tell you about my hidden little venture over the last few months. It involves training some LLM’s (but not of the variety you may think). Some background: about 9 months ago I finished up at Insignia Financial after a 7 year stint. Thinking I’d jump back into the workforce, I began readying my resume, reached out to a couple of contacts, and then, the LLMs got sick.

How do LLMs get sick you ask? The LLMs are my two boys, my little language models, who at the time were both under 3, attending daycare, and getting sick – all the time.

Two boys in pyjamas playing with toys on a foldable chair
Two boys drawing on an easel

Nothing too serious other than run of the mill winter illnesses but it was unrelenting.

I went through a few phases here, grief, anger – not being able to reach MY potential – disappointment at letting my family down by not bringing in an income. But we were lucky, my former employer was restructuring and redundancy was offered. I wasn’t needing to seek work immediately. Also the Systems Thinking principle from Peter Senge, has the saying ‘when you push too hard, the system pushes back’. In other words, the system was telling me it wasn’t time to go look for work, and to just be a husband and a dad.

So I did.

It’s been quite the unexpected gift to be able to spend this time with my boys, watching them grow their own models of language (and the entire world) and being able to help them with their development.

I’m returning to the workforce and I’ll announce that soon, but I did want to take the time to acknowledge my last employer Insignia Financial and my former colleagues there.  It transformed my career in a way I didn’t expect. I was introduced to new ways of working, inspired from lean manufacturing, that gave staff autonomy and responsibility to build on outcomes that matter over just doing a job.  The connection to purpose was immense and it has become a goal of mine to share this way of working with as many organisations who will listen.  None of this happens without good leadership and structure, so I just wanted to thank my immediate managers during the journey, plus all the others who facilitated “CF” – you all know who you are.

A nice side effect of all this is that I have a superpower, that is to be able to see into any organisation and understand their people, processes and bottlenecks just from talking to their customer facing staff.  I’m not the only one with this super power and you can checkout my profile on LinkedIn and the videos with Arash Arabi for more.

Finally I also wanted to thank everyone over the last few months who I met at conferences, meetups and coffees.  The adult conversations sure did help keep me sane.  A big thank you to the companies I spoke to who shared what they were doing and potential roles too.  We may be in a period of uncertainty but there are people doing a lot of cool stuff.

Press This – WordPress plugin

Posting images, links, and cat gifs will never be the same.

I hadn’t been active with my wordpress site for a while, but am looking to post more.  One thing that I used to use a bit before social media sites like Twitter became the rage was a short post with a link, with some commentary.  The archives of outrospective.org do have a lot of these posts.

To make this happen WordPress used to offer a Press This bookmarklet, but they apparently removed it from the core functionality in v4.9 back in 2017 and turned it into a plugin.  It caused a bit of a ruckus since many people used it and the changes for v4.9 didnt quite elaborate or understand that the functionality would be broken.  It also didn’t have all the functionality back when it came back.

So far, I’ve installed the new plugin and bookmarklet and had mixed results.  Press This’ing doesnt appear to work on all sites, leading to a blank window.

That said, I am using Press This on the press this plugin page, and the nice thing is that its created a page with embedded images from the page, and a quote and a link to the source page.   It took a couple of goes, and on a working page, I had been prompted to login to WP again, before it started working.  So I suspect there was a session thing going on there behind the bug.

Source:  – WordPress plugin | WordPress.org

 

Writing Code

This blog was written quote a number of years ago (2013-2014), but I hadn’t published it. I got around to tidying it up a little. Enjoy.

As software developers we write code.  The code is intended to represent what a computer should do for a business or person.  Recently, I was caught in a scenario to make me think – all the code I was writing for a project, was representing what a computer should do for a computer, not for a business nor a person. That didn’t feel right to me, the business was still my client, not the computer. Warning signs flashed unanswered in my brain – I could picture the real customer would soon ask why the system was behaving in a slightly different way then they had prescribed.

I then thought about that term ‘writing code’ and wondered what it really means, centring around the following questions:

  • Who do we write code for?
  • Why do we write in code?
  • What do we have to hide that requires us to write in code in the first place?

Continue reading “Writing Code”

Java 9 in 9 seconds

Java 9 came out on the 21st September.

There are a huuuge amount of blogs, microblogs and whatnot associated with the new release.  I didnt want to re-hash them all here but list what were the most exciting things.

For me, Java 9 is like Java 7 – there is a lot going on under the hood compared to front and center Java, the language, improvements.  The most prominent feature is modularity but behind the scenes are some really interesting things worth highlighting

Continue reading “Java 9 in 9 seconds”

New library or language? A checklist

Note: This blog is an unfinished form, written late 2016, but rather than write an epic, I thought it would be good to share some of the thoughts here.

A colleague recently suggested we use Project Lombok with our Java code. The company I work for also has some experience with Kotlin. We’re a new team, I could see pros and cons for each.  In a world where Java 8 has been widely adopted, alternate JVM languages don’t get the free lunch that they used to when it comes to simply reducing boilerplate and introducing closures as a way to get developer mindshare.

Picking libraries and frameworks is something we do frequently as technologists. I thought I’d document the mental checklist I went through when Lombok was recently mentioned. The criteria will vary based on your own experience and your feeling on how it will be adopted in your team.

There feels like there is a swing back to native Java over languages. I know of in Melbourne at least, of a few companies that have experimented in another JVM language or two, but are now building code back in Java again because it is easier to get talent, and the domain is now well understood that re-writing and maintaining in Java 8 won’t leave the project lacking.

On a completely new project & new company, the experience, tooling, and team process is all up for grabs.  Most recently, as Java has made strides again in its development, and those who have experimented with other JVM languages and found hiring for that talent more difficult. I’ll spend the rest of this blog looking at Project Lombok, and a checklist I thought about in evaluating it.

Continue reading “New library or language? A checklist”

3 cool technologies I discovered over summer.

Today I finish up my ‘holidays’ but I did want to write a quick post about the cool stuff I’d been looking at.

Firstly, the LMAX Disruptor pattern. I didn’t think you could fall for a pattern until I came across this. Disruptor is a pattern that lets you run through a queue (well a ring in this case) of requests. Each request has multiple handlers (the small bits of code that do the work). And because each handler is small, you can easily unit test too. The Disruptor facilitates the order in which these handlers execute. Handlers can run ahead and let the slower handlers catch up later. Its certainly worth checking out, it seems that its a style that is newer in Java frameworks, and reminds me of the asynchronous stuff that happens in say Node.js.

The next thing I looked at was Clojure. This language has been around for a while, but I didnt get to appreciate it until someone gave a presentation at a conference in Crete last year. Clojure is like Lisp. Lots of parenthesis, but the beauty is that the code becomes simple to read (once you get used to it). Easier to understand the control flow. A method call would look like this:
(operation argument argument)
A wrapped method call
(operation2 (operation1 arg arg) arg)

The final thing was a bit of fun. Whilst cleaning up a cupboard full of magazine coverdisks, I came across the final issue of CU Amiga magazine. It was quite interesting to see the passion of the Amiga users write in and say sorry to see another bastion fall. Some were realistic about the Amiga’s future, but god love em, some kept hoping things would change and a comeback would take place sometime soon. In a way, the ‘comeback’ has occured (for me at least). No new hardware, but a new operating system, called AROS, based off the old kickstart/workbench of old. The distribution runs in a VM, but can be installed standalone on a PC. There is also discussion on Mac, iOS and Android distros too. If you want to quickly get your Amiga fix on, and reminisce about the old workbench days, then do a search for ‘Icaros’ and download a web capable distro that boots up in seconds. Some of the UI elements are outdated, for example, clicking a window gives it focus, but doesnt bring it to front, but the great thing about Amiga nuts, was/is that there was always a plugin to be installed that gave you the functionality of other OS’. Worth a play if you have some free time and it will leave you wondering what OS X and Windows are doing with all your CPU cycles.

Access restriction: The constructor NotSupposedToUseThisClass() is not accessible due to restriction on required library

So following from my previous post about compiling Java 5 with a Java 6 compiler and the real reason that I am posting today, was to talk about a curly error message I got in Eclipse today.

I had the same Eclipse 3.7 project both on Windows and Mac, but only the Mac version complained with a very unusal message.

sun.misc.Base64 on mac JDK 5

The complaint was against an internal sun.misc.Base64Encoder class which every 2nd Java dev on the internet recommends replacing its internal implementation with an Apache Commons alternative.

Initially I thought it had something to do with the manifest and access restrictions preventing code outside of the jar accessing the internal code – something I recall the JavaPosse talking about from their days of Java Studio. Since it was only isolated to the Mac JDK, perhaps Apple had included these restrictions in the manifest for the classes.jar that these classes were defined.

Turns out it has to do with Eclipse.  I found out that when I add a JRE/JDK in Eclipse, it appears to add Access Rules to a bunch of select classes in the classes jar.  Its a white list.  Anything not there is forbidden.

I don’t know what defines this, and they are ‘non modifiable’ but adding in an access rule at the top leads this to go.

Java Build Path with Access Rules avoided

Looks like this has been tormenting people since Eclipse 3.3

Like rt.jar for like javac

Today I switched an Eclipse project using JDK 6 on OS X to JDK 5.

Even though there are command line tags in javac to produce 1.5 compatible source, the need to use JDK 5 comes into being when implementing interfaces that have grown in the number of methods since Java 5.  A good example is the JDBC classes.  The number of methods in Java 6 versions of the java.sql.Connection interface has grown by at least 6 (look for Since 1.6)

Having the Java 6 rt.jar or classes.jar where that interface resides will expect those new methods to be implemented and lead to a compilation error when you try to build.  On the opposite end, if you blindly start using the latest version of Java, you can easily start using new methods without realising.  Your colleagues will tell you when their 1.5 only environment stops compiling. 🙂

Building Jetty-Ant for Jetty 7

Jetty-ant for Jetty 7 is a hard find.
The documentation is all wrong, but that if you look at the Jetty Developer page they do concede that.
The split between eclipse and codehaus doesnt help either. There are a lot of options to try and search, Maven repo (http://repo1.maven.org/maven2/org/eclipse/jetty/), other bits in svn.codehaus.org (http://svn.codehaus.org/jetty-contrib/sandbox/jetty-ant/), eclipse vs hightide release dirs (http://dist.codehaus.org/jetty/),…. aaarghh!
To make things extra sucky, the SVN URLs in the doc for where you get jetty-ant have moved too.
After a lot of searching it looks like this one is the key
https://svn.codehaus.org/jetty/archived/jetty-7/
instead of the one the docs refer to (https://svn.codehaus.org/jetty/jetty/branches/jetty-7 ) which 404s.

There are a lot of other resources that are required jetty-integration-project is req’d by the POM.  Its created in the main jetty-7 that I linked above.  Build that first (I only got as far as building the hightide-distribution) but it was enough to download all the required jars to build jetty-ant.  Phew!

 

in super short

svn co https://svn.codehaus.org/jetty/archived/jetty-7/
cd jetty-7
mvn install

… builds a few different things, ultimately fails

cd jetty-ant
mvn install

… great success (now I just have to try it out – found in jetty-anttargetjetty-ant-7.5.0-SNAPSHOT.jar)

EDIT: When I last checked the documentation on the Eclipse documentation notes, it had thankfully been updated with an updated URL to download the ant target directly (18 Dec)