AI Assistant for OpenJDK Contributors

Subtitle: ”Soon You’ll Know What I Did This Summer”

This summer my family and I decided to stay in Küssnacht during my summer vacation. The summers here are lovely, and for a family of six going for a vacation abroad it typically means a lot of time is spent preparing, packing and unpacking, for both directions of the journey. A staycation seemed like a good choice. Most days were spent in the water with the family, and on one occasion, we were joined by a team member and his family. It can get rather hot here, and the lake is the perfect place to cool down.

Me on a SUP overlooking part of my family on another SUP on Lake Lucerne

That said, I did end up in front of my computer a bit in the evenings after everyone else had fallen asleep. There were a few things I really wanted to get done this vacation. One was upgrading my server. Another one was to put some left over Raspberry Pi 4s and a few new Raspberry Pi 5s to good use in my 19” rack, creating my very own a little Kubernetes cluster.

Recently I was also playing with Custom GPTs, which is OpenAI’s way of letting you build little RAG (Retrieval Augmented Generation) systems without writing code. I first played a bit with Custom GPTs on a train ride back from the Datadog office in Paris a little while ago, and it was a quite lot of fun, but for some of the things I wanted it to do, it performed rather badly, and I couldn’t find any fitting APIs available to help my Custom GPT do better.

Since I was setting up a Kubernetes cluster anyway, I thought I might as well hack something together to make my OpenJDK Project Assistant a little bit better.

Setting Up the Cluster

Ah, the pain and the anguish. I ended up using my Apache server as a proxy (since I still want https://hirt.se to serve my old homepage and blog) for an Nginx that is acting as reverse proxy and load balancer to my Kubernetes cluster.

If anyone wants to know how I set up the cluster, that is an entirely different blog that probably already exists in a thousand versions, written by people with more patience to write about configuration than me, so I will not dwell on that. Suffice to say that I consulted many blogs and Claude 3.5 Sonnet to get it all up and running. Here are the steps in short:

  • Format and setup the Raspberries with Raspberry Pi OS (64-bit) (I used the Raspberry Pi Imager).
  • I added my Pis to the hosts file of my server and to my dhcpd config by MAC address, so that I can refer to the Pis by name instead of IP (I’m using dnsmasq).
  • I installed kubernetes on them, which involved properly enabling cgroups in /boot/firmware/cmdline.txt, setting up containerd properly, getting the debian package for k8s, installing kubelet, kubeadm, kubectl, turning off swap, and finally using kubeadm init to create the cluster and then applying flannel. Then using the join command you get from performing the init to have the other Pis join the cluster.

There was a bunch of trial and error, and there is probably a much easier way. Anyway, I now have a cluster. I can easily deploy. I can easily scale. What more could you ever wish for?

The API exposed to the CustomGPT is available to the world at https://api.hirt.se and described here, should anyone be interested. The implementation is available on GitHub – feel free to contribute if the custom GPT isn’t doing what you think it should be doing or if you simply want to make it more capable.

What Can the OpenJDK Project Assistant Do?

It can do lots of things. It can get information about open PRs and repos without overwhelming GPT with information that will invariably make it fail (this is what typically happened before the api.hirt.se API). For example, here’s getting the oldest open PR for the JDK project:

image (3)

It can summarize the information in the PRs:

image (4)

 

You can also ask for information about the related bug:

image

It can answer questions around people involved in OpenJDK:

image

For people like me, who have a really hard time remembering names, it can help answer questions about people involved in OpenJDK:

image

And about projects and groups:
image

Please let me know if you find it useful!

Summary

  • I recently had a stay-at-home vacation in Küssnacht.
  • Aside from spending a lot of the time in Lake Lucerne with my family, I did have some fun building a Kubernetes cluster out of my Raspberry Pis.
  • I put the cluster to good use to support my OpenJDK Project Assistant Custom GPT.
  • If you’re one of the few OpenJDK committers that also have access to Custom GPTs, or you simply like the idea, feel free to put a star on my API repo, or even better – contribute things you want it to be able to do, or do better!
  • Silly bonus: I also noticed that the silly old slogan image generator I was using on my homepage isn’t available under https (after my various upgrades, I now have permanent redirects to always use https). I couldn’t find any replacement that worked as a drop-in replacement, so I made my own variant that is now also running in my little cluster. Smile

Picture looking out over lake Lucerne after vacation dinner with my wife.

Radio Silence & Robo4J

So, first of all I want to apologize for the radio silence on this blog. There are two major reasons for this radio silence:

  1. My twins
  2. Me doing blogs over at Robo4J

So, I thought I’d just do a recap of my Robo4J blogs, in the order I published them (which is probably the order someone new to Robo4J may want to read them). Smile

Here is the list:

Twins!

So, this is quite old news. Well, 8 weeks to be precise. Not to mention that it really has nothing to do with Java or programming. That said, I felt I should put something here on the blog. The 12th of December Malin (my wife) gave birth to two healthy babies: Sebastian and Julia.

Sebastial left, Julia (yawning) right. Both a few days old. Julia left, Sebastian right. Both a few days old.

The past few weeks have been difficult but rewarding. Very few things beat having two infants snoozing on your chest. That said, last week was hell, with the entire family sick. Now everyone is more or less well, but Julia is still fighting her cold. Since human infants are obligate nasal breathers, she gets  terrified once in a while when she can’t breathe through her nose.

Both Malin and I are a bit sleep deprived at this point. Can’t wait for them to sleep for larger continuous periods of time. Just a few months to go *fingers crossed*… Zzzzzzz…

Now Living and Working in Switzerland

I’ve finally relocated, and things are slowly returning to normal. Moving to a new country is not for the faint of heart. I won’t spend much time describing the actual 7 circles of hell we’ve been through, but I will note this:

    1. Be very careful when selecting the company to help you move. Find one that comes highly recommended by someone you know. Picking someone that seems reputable on the internet, let’s say Pearson Home Moving, may not be the best idea.

    2. Be very precise in all your wording, and when you find something in the contract that you think is in error – do not let the moving company representative just gloss over it.

      Example:
      Me: Hmm, it says ground floor here, but that is not correct. I don’t know the exact labelling of the floor, but it’s first or second, maybe even third.

      Moving company representative: Is there an elevator there?

      Me: Yes, there is.

      Moving company representative: Then it does not matter.

      Hint, it did matter in later communications.

    3. The moving company dropped my piano whilst moving it from my house, badly scratching it on one side. I am still trying to make Pearson understand that they are liable for the damage and the roughly 3000CHF in repairs and transportation costs incurred. They claim they are not.

    4. There were additional scratches on various furniture, but I guess that is part of moving, and I can live with that. I did not bother reporting it.

    5. Getting an actual fiber to your apartment (or anything resembling a real symmetric, low latency, broadband connection) in Switzerland is ridiculously expensive. You may notice that my blog is slower to load – well, my 200/10 connection is not quite on par with the 250/250 connection I had in Sweden. And, yes, I am paying way more for my 200/10 connection than I did for my 250/250 connection.

Luckily, the Swiss, apart from being slightly overzealous in their love for documentation and papers, have been a wonder of efficiency and helpfulness. Even the customs and tax office have been super efficient and helpful. I actually like talking to government representatives here. They are exceptionally service minded and efficient!

Here is a picture I took just a few hundred yards from where I live:

kuessnacht

Summary

Switzerland is great so far, but horribly expensive. Also, the flag is a big plus. Literally.

UTS Pearson Home Moving was great at transporting the stuff, but horrible at dealing with problems and not very service minded.

Moving to Switzerland – hirt.se will be down!

Hi friends!

Sorry for the radio silence lately. I’ve been spending a lot of time preparing for my family’s relocation to Switzerland. Since I will be bringing my computers, and since traveling from Sweden to Switzerland is far from instantaneous, this means that hirt.se will be down for a couple of days. Minimum. Murphy’s law says it could be weeks.

The server is unplugged the 21st of June. With lots of luck it will be up again by the 23rd. Sorry about the upcoming interruption.

Have a great summer and happy coding! 🙂

/M

Finally Got Fiber Installed!

Yay! I finally got a fiber installed. This is really good news, since it means that my uplink is gazillion times faster than it was before, which in turn means it is possible to read my somewhat graphics intense blog without throwing a rage fit. Yay again!

Here is a picture of the speeds I measured yesterday:
image

Notice how you can actually look at this blog without patiently waiting for a few minutes! Blinkar

Öppet Brev till R&R Entrepenad

(This one is in Swedish. Did the mistake of hiring people to do work on my house at servicefinder.se. Doh! This is an open letter to the people who did the work.)

Det här är ett öppet brev till R&R entrepenad. R&R verkar vara ett ungt företag med stor spännvidd vad gäller yrkesskickligheten hos de anställda. De med yrkesutbildning åker ut och säljer in uppdragen, sedan skickar man ut folk utan tillräcklig kompetens och utrustning att genomföra uppdraget. Man förmedlar inte heller tydligt vad man kommit överens om till de som skall utgöra arbetet. Resultatet blir som förväntat.

Öppet brev till R&R entrepenad

Hej!
För några veckor sedan anlitade jag er för (enligt offerten):

  • Tvätt av grund (vid putssläpp fylles det ut och lagas)
  • Målning av grund i vitt (Alcro)
  • Täckning av mark och övriga föremål
  • Byggstäd

Saker jag fick göra själv fredagen den 17:e augusti efter att ni var "klara":

  • Detaljmåla kring fönster, eluttag, vattenkastare och dörrar
  • Byggstäda bort färg och putsfragment på uppfart och över hela gräsmattan
  • Tvätta bort färg på fönster och fönsterbleck
  • Köra högtryckstvätt på uppfarten i ett försök att bli av med färgfläckarna (lyckades inte helt)

Det hela tog ett antal timmar.

Saker ni sade att ni skulle göra, men inte gjorde (eller började göra efter att ni insett att resultet inte blev acceptabelt och det i stort sett var för sent):

  • Använda stålborste och dammsugare för att få rent längs marken så att ni skulle nå bra _innan_ ni målade där
  • Använda spackel när ni målade längs marken för att undvika färg på stenarna/betongen
  • Fylla i där putsen lossnat
  • Först måla ett varv där putsen lossnat, därefter måla allt för att minska nivåskillnaden mellan övermålat och nymålat

Jag misstänker att ni förlorat sjukt många timmar på ni inte gjorde rätt från början. Jag vet att jag har gjort det.

Ett gratis tips:
Inom sisådär något år kommer Europa drabbas av en hård ekonomisk kris på grund av Grekland, Italien och Spanien (eventuellt även Irland och Portugal). De pengar privatpersoner har över för att leja hjälp kommer att begränsas starkt och de hantverkare som fortfarande kommer ha jobb är de som bryr sig om sina kunder och sitt hantverk. Med andra ord de som har yrkesstolthet.

När jag sade "Hur hade du gjort om det var ditt hus?" fick jag till svar "Men så kan man ju inte tänka.". Det är helt fel svar. Om jag betalar er pengar för att uträtta ett arbete så förväntar jag mig att ni lägger lika mycket omsorg vid arbetet som om ni arbetade på era egna hus. Annars skulle jag göra jobbet själv.

Ni kan glömma att ni får måla resten av huset. Jag blir rädd bara jag tänker på hur slutresultatet skulle bli. Det var en chansning att gå via servicefinder för att hitta hantverkare. Aldrig igen.

Mvh. Marcus

Awesome New Release (Hirt 3.0)

Okay, so the reason I’ve been quiet the last few weeks is due to the release of Hirt 3.0, also known as Simon Daniel Hirt. I’m including a screen shot for reference:

 IMG_4882

Simon was borne the 19th of June, 2011. He was 11 days early, 50 cm tall and 3680g heavy.

Since having a baby and a toddler at the same time has proven more difficult than anticipated, as anticipated, I’ll be on parental leave until mid September.  Winking smile

Note: A not-so-closely guarded secret is that I am working Mondays. If you need to reach me for work related stuff, just e-mail me at Oracle.

New Worst Day Record

Some months ago I thought I’d hit a low in my life when my then 7 week old daughter had to undergo surgery for intestinal invagination. Well, this midsummer’s eve was even worse. Natalie had been sick for almost two days. We had called the hospital, which told us that the flu was at large among small kids in Stockholm right now, and that we had nothing to worry about. The second day she actually seemed to be better. She got to keep some food. Well, two hours after eating she started vomiting again. She didn’t even get to keep water, so we went straight for the hospital. At the hospital they gave her antibiotics and put her on IV since she was dehydrated. Sure enough – X-rays showed that the intestines were obstructed and we went by ambulance (again) to Karolinska (the hospital where the surgeons for infants are located).

When we arrived at the hospital, she was fairly lucid but weak. They connected her to telemetry equipment monitoring her heart rate and oxygen levels and then we went for another round of X-rays. That’s when the scariest moment in my life so far happened. We were almost done with the X-rays when the Natalie’s oxygen saturation levels started to crash. The nurse standing next to Natalie got stressed out and yelled “Call the doctor. Call him now!”, while running for an oxygen bottle next to the entrance to the room. She started giving Natalie oxygen whilst rather incoherently discussing with one of the other nurses what emergency code to use on one of the handsets. During all this I was standing next to the X-ray machine, holding Natalie’s hand. My mind was racing to horrible conclusions and I was thinking “shit, ohpleaseohpleaseohplease, nononono, I really can’t loose her”. I glanced at Malin, and she looked just about as terrified as I felt. I watched the oxygen work it’s magic, and the saturation levels started to improve.

They put a probe through her nose down her stomach, through which they sent contrast fluid. Then they took X-ray images every now and then to find out where the obstruction was. The diagnosis was Ileus, and they decided surgery was necessary. Once they opened her up, they couldn’t believe how bad it was. She had, after all, been fairly lucid during all this. They had to cut away 90cm of her small intestine.

Now we’re at home again, and they expect her to make a full recovery, despite the heavy surgery. I’m just glad it is over, and I pray my lovely little daughter never have to go through something like this again. Ever.

The JRockit Book is Now in Print!

Yes. I know. It’s been in print for some days already, but I haven’t found time to write about it until now. The book is a good guide for JVM’s in general, and for JRockit in particular. If you’ve ever wondered how the innards of the Java Virtual Machine works, or how to use the JRockit Mission Control to hunt down problems in your Java applications, this book is for you.

8068_Oracle JRockit The Definitive Guide_Cov

The book is written for intermediate to advanced Java Developers.

These are the chapters:

  1. Getting Started
  2. Adaptive Code Generation
  3. Adaptive Memory Management
  4. Threads and Synchronization
  5. Benchmarking and Tuning
  6. JRockit Mission Control
  7. The Management Console
  8. The Runtime Analyzer
  9. The Flight Recorder
  10. The Memory Leak Detector
  11. JRCMD
  12. Using the JRockit Management APIs
  13. JRockit Virtual Edition

    Appendix A: Bibliography
    Appendix B: Glossary
    Index

The book is 588 pages long.
For more information about the book, see the book page at Packt.