<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-27876765</id><updated>2026-04-12T14:18:43.631+02:00</updated><category term="java"/><category term="open source"/><category term="scala"/><category term="wicket"/><category term="unix"/><category term="ruby"/><category term="networking"/><category term="concurrency"/><category term="opinion"/><category term="book review"/><category term="camping"/><category term="conference"/><category term="mac"/><category term="programming philosophy"/><category term="radiant"/><category term="rails"/><category term="zio"/><category term="ajax"/><category term="monitoring"/><category term="fun"/><category term="kafka"/><category term="version99"/><category term="jruby"/><category term="spring"/><category term="testing"/><category term="javascript"/><category term="mule"/><category term="portlets"/><category term="swing"/><category term="jitsi"/><category term="radiant-postfix-extension"/><title type='text'>Day to day stuff</title><subtitle type='html'>Experiences from a hard core JVM programmer. Likes to keep things simple.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/posts/summary'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/summary'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/summary?start-index=26&amp;max-results=25'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>153</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-27876765.post-8030387135554361588</id><published>2026-01-10T14:49:00.000+01:00</published><updated>2026-01-14T16:14:44.470+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="opinion"/><category scheme="http://www.blogger.com/atom/ns#" term="unix"/><title type='text'>System hardening: Migrating from docker compose to podman-compose</title><summary type="text">TL;DR: Podman-Compose provides essential security features for homelabbers, albeit with a few inconveniences.
Many applications that appeal to homelabbers can be installed with a docker-compose file. Docker-compose files are
    awesome! They provide a nice uniform way to install wildly different applications.
The most used runtime is Docker. Unfortunately, docker runs as root and
    </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/8030387135554361588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2026/01/system-hardening-migrating-from-docker.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/8030387135554361588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/8030387135554361588'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2026/01/system-hardening-migrating-from-docker.html' title='System hardening: Migrating from docker compose to podman-compose'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-6943758184069547335</id><published>2025-09-27T19:19:00.005+02:00</published><updated>2025-12-03T13:34:23.357+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="networking"/><title type='text'>The incomplete guide for sending email notification from the Ubiquiti&#39;s Unifi Cloud Gateway (UCG)</title><summary type="text">Unfortunately, sending notification emails from a Unifi Cloud Gateway (UCG) with remote management disabled, is not all straight forward. Here are some tips, though it will end with a disappointment.

Check list:


  Send a test email
  Weird stuff for local email servers
  Configure an email address for the admin user
  Configure an alert
  Wait for Ubiquiti to fix it


1. Send a test email

In </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/6943758184069547335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2025/09/the-incomplete-guide-for-sending-email.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/6943758184069547335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/6943758184069547335'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2025/09/the-incomplete-guide-for-sending-email.html' title='The incomplete guide for sending email notification from the Ubiquiti&#39;s Unifi Cloud Gateway (UCG)'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-lMQmPmrh8JfNqcolY8mZlJ2Cnq9U-EGwFy4FreczOwvZSHU-dgR27hyphenhyphensA-WJc1a-3ZrhN4rmu5vTfJ-8DVIFwcj7LgpfHqOkkQLWXVqMZ6TJmF7vf6A843p3jJh5BT9ZNyQMxgo3EIo9Xsb6SgtRMln7d2l7MJRwCnugh5Z-0ZVk4RTjVJQzyw/s72-c/UCG-email-settings.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-8220646731272722733</id><published>2025-08-31T13:01:00.001+02:00</published><updated>2025-08-31T13:22:04.795+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="networking"/><title type='text'>Reorganizing our server shelf</title><summary type="text">TL;DR: With some planning and tinkering, you can fit a lot of hardware in a small space.

In Dutch homes, the meter cupboard (called a &quot;meterkast&quot; in Dutch) is a small closet, usually placed directly behind the front door. It houses the electric meter, gas meter, water meter and the circuit breakers. In our case it is also the entry point for the internet with an (ADSL) telephone line, and more </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/8220646731272722733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2025/08/reorganizing-our-server-shelf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/8220646731272722733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/8220646731272722733'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2025/08/reorganizing-our-server-shelf.html' title='Reorganizing our server shelf'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn6J2sq-Ux8pP12h165FVUIWk6o_ek4vbiAFY29vC62qX2KdZlj4JZnyC1uF2jlN5Lg4ahWNAPd8fkfTylGSeGk8ZOtI9H9SG7d8Pa6VdsRuO6pkSeFuvQGiJp8dmOs_p2XM6sdY9mFyzKW3I1tX8MIuofIaUbS80uSfq8MOrOZYMFC69w0ZtG7A/s72-c/gronsrack-parts.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-1453358277056534716</id><published>2025-08-10T09:21:00.007+02:00</published><updated>2025-10-12T11:23:05.313+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mac"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="unix"/><title type='text'>Self-hosted open-source multi-user multi-platform secret management</title><summary type="text">TLDR: Syncthing, KeePassXC, Keepass2Android, AuthPass, and WebDAV via Apache HTTP Server allow for self-hosted
    open-source multi-user multi-platform
    secret management.

This article describes the secrets management setup used by me and my family. This is not a tutorial, but rather an
    overview of the possibilities and what works for us.

The setup:

    is fully open source with Open </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/1453358277056534716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2025/08/self-hosted-open-source-multi-user.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/1453358277056534716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/1453358277056534716'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2025/08/self-hosted-open-source-multi-user.html' title='Self-hosted open-source multi-user multi-platform secret management'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdnQ5s0bEgdsGmmARbx-Ks6oOLK2FMIs_3Qvq7qfyYCQ8-LQLWQqpvQ_N0ninhI-FC-aElD8_7SKPVh-0vR2JMUjpz7ObtDo1I3kj-iBQkL6iUxpuudjDP662L9sBV27bjqx0UAVG307YvDkiPJvfpp48VyqBQEWnihjsw-0y3uzeDgI9ShflQxg/s72-c/202508-blog-secret-management.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-7290056139192333607</id><published>2025-07-08T21:27:00.004+02:00</published><updated>2025-07-08T22:26:03.549+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="version99"/><title type='text'>Shutting down Version 99 does not exist</title><summary type="text">
  
  July 2007, I was so fed up with Maven&#39;s inability to exclude commons-logging that
  I wrote a virtual maven repository
  to fake it.
  A few months later this became
  Version 99 does not exist.
  The virtual repository, has been running on my home server ever since.


  In the early years, minor changes were made to increase compatibility with more tools.


  Unfortunately, in 2011, the
  </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/7290056139192333607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2025/07/shutting-down-version-99-does-not-exist.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/7290056139192333607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/7290056139192333607'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2025/07/shutting-down-version-99-does-not-exist.html' title='Shutting down Version 99 does not exist'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9cHSiTaQwv878u1pNqdIuu-5qOU9g7xSi4PlUu9batE79m-QSfGD_gt9v_07miQ7dQzf6pTYsrH7LEaYIxfYjz8ZoR5xoqPMqrGuw7JosgzGCN3xPscrNpwgITDhTWps7fT7yTqTxxUOcvpppzIQRE9J4Oy_tEGq6qpHhm26jAZ3tV_xt5k5xKA/s72-c/version99-rip-88x88.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-4950583625303109181</id><published>2025-06-21T13:49:00.002+02:00</published><updated>2025-06-21T13:49:16.086+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><title type='text'>Installing a theme for Launch Drupal CMS</title><summary type="text">
  Drupal CMS trial for Desktop is a wonderful way to try Drupal CMS.
  Unfortunately, you can&#39;t install new theme&#39;s from the admin api in the browser.
  Once you have selected a theme, for example Corporate Clean,
  there is an instruction on using a tool called composer.
  Its funny how there are so many pockets of developers where it is just assumed you have some particular tool installed.


</summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/4950583625303109181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2025/06/installing-theme-for-launch-drupal-cms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/4950583625303109181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/4950583625303109181'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2025/06/installing-theme-for-launch-drupal-cms.html' title='Installing a theme for Launch Drupal CMS'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-4010774217749086150</id><published>2025-06-08T21:35:00.005+02:00</published><updated>2025-06-08T21:38:37.811+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><title type='text'>Running Wallabag with Posgresql and Docker compose</title><summary type="text">Now that Pocket is going away, it is time to host a read-it-later app myself. After looking at a few options, my eyes fell on Wallabag. Its not all that smooth, but it works reasonably well.

I run several services with docker compose for its ease of upgrading, and, more importantly, for the ease with which you can get rid of a service once you no longer need it.

Since it didn&#39;t work out of the </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/4010774217749086150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2025/06/running-wallabag-with-posgresql-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/4010774217749086150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/4010774217749086150'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2025/06/running-wallabag-with-posgresql-and.html' title='Running Wallabag with Posgresql and Docker compose'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-3768820972848435801</id><published>2025-01-01T17:27:00.003+01:00</published><updated>2025-01-05T11:37:33.529+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="networking"/><category scheme="http://www.blogger.com/atom/ns#" term="unix"/><title type='text'>Using the TransIP API from bash</title><summary type="text">TLDR: Signing API requests from Bash is tricky, but doable with a temporary file.

Every couple of months I rotate the DKIM keys of my email server, after which I publish them on my website. This article on publishing dkim keys gives a good overview of why this is a good idea.


  Initially this was all done manually, but over time I automated more and more.
  The toughest part was finding a good</summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/3768820972848435801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2025/01/using-transip-api-from-bash.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/3768820972848435801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/3768820972848435801'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2025/01/using-transip-api-from-bash.html' title='Using the TransIP API from bash'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-6119128496468992944</id><published>2024-12-02T22:11:00.007+01:00</published><updated>2024-12-03T08:57:37.391+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="concurrency"/><category scheme="http://www.blogger.com/atom/ns#" term="kafka"/><category scheme="http://www.blogger.com/atom/ns#" term="networking"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><category scheme="http://www.blogger.com/atom/ns#" term="zio"/><title type='text'>Zio-kafka, faster than java-kafka</title><summary type="text">
TlDR: Concurrency and pre-fetching gives zio-kafka a higher consumer throughput than the default java Kafka client for most workloads.


Zio-kafka is an asynchronous Kafka client based on the ZIO async runtime. It allows you to consume from Kafka with a ZStream per partition. ZStreams are streams on steroids; they have all the stream operators known from e.g. RX-Java and Monix, and then some. </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/6119128496468992944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2024/12/zio-kafka-faster-than-java-kafka.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/6119128496468992944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/6119128496468992944'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2024/12/zio-kafka-faster-than-java-kafka.html' title='Zio-kafka, faster than java-kafka'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkOIr8qA0MfVuYcGWDNRykWey3b0cHwXcb3MwNDeA_07mvBOaWDXADjAh4IshL2K9nPjNlz7TJY51_VDsgnPia_qtbvym1uX-7epnNc2yiW86bb9NTkdbpgbp8PYRrAdW5HYT6uIIZN83n237a7Ii4y66FlbQKzyfHhTkwxhjY9LvtyOUCcTbJ-w/s72-w400-h336-c/java-vs-zio-kafka-figure-1.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-6581027650746399075</id><published>2024-08-25T13:24:00.004+02:00</published><updated>2024-08-25T14:54:10.928+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="opinion"/><title type='text'>MavenGate gets it all wrong and hurts open source</title><summary type="text">MavenGate claims that some Maven namespaces (for example nl.grons, the namespace I control) are vulnerable to hijacking. If I understand it correctly, the idea is that hackers can place a package with the existing or newer Maven coordinates in the same, or different Maven repository, thereby luring users into using a hacked version of your package. Sounds serious, and it probably is.

However, </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/6581027650746399075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2024/08/mavengate-gets-it-all-wrong-and-hurts.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/6581027650746399075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/6581027650746399075'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2024/08/mavengate-gets-it-all-wrong-and-hurts.html' title='MavenGate gets it all wrong and hurts open source'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-471306830448386664</id><published>2024-05-28T15:18:00.000+02:00</published><updated>2024-05-28T15:18:04.491+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><title type='text'>Java plugins with isolating class loaders</title><summary type="text">
  My team&#39;s article on
  how to write Java plugins
  has been published on the Adevinta Tech Blog. Enjoy!

</summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/471306830448386664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2024/05/java-plugins-with-isolating-class.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/471306830448386664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/471306830448386664'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2024/05/java-plugins-with-isolating-class.html' title='Java plugins with isolating class loaders'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-3379849153709695896</id><published>2024-04-26T14:48:00.002+02:00</published><updated>2024-04-26T14:48:18.589+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="kafka"/><category scheme="http://www.blogger.com/atom/ns#" term="zio"/><title type='text'>Making ZIO-Kafka Safer And Faster</title><summary type="text">
  My talk &quot;Making ZIO-Kafka Safer And Faster&quot; at Functional Scala 2023 went online!

  

  

  Explore Erik van Oosten&#39;s presentation on improving ZIO-Kafka for better safety and performance. Learn about the modifications introduced in 2023, get insights into the library&#39;s internal workings, and uncover useful ZIO techniques and Kafka&#39;s lesser-known challenges.


Contents in the video: 


2:07 </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/3379849153709695896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2024/04/making-zio-kafka-safer-and-faster.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/3379849153709695896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/3379849153709695896'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2024/04/making-zio-kafka-safer-and-faster.html' title='Making ZIO-Kafka Safer And Faster'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/MJoRwEyyVxM/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-4326494001257925017</id><published>2024-04-21T11:32:00.002+02:00</published><updated>2024-04-21T11:33:10.099+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><title type='text'>Tips for running Roundcube for years</title><summary type="text">I have been running a Roundcube instance for about 8 years now. At the beginning I only used it as a backup email client that can be invoked from anywhere. Nowadays, is it so good that I didn&#39;t even bother installing Thunderbird on my work laptop.

Unfortunately, I discovered that the docker backup of Roundcube had become quite large, many GBs. This was quite unexpected for a service that is used</summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/4326494001257925017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2024/04/tips-for-running-roundcube-for-years.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/4326494001257925017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/4326494001257925017'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2024/04/tips-for-running-roundcube-for-years.html' title='Tips for running Roundcube for years'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-4393448850172241623</id><published>2024-01-24T09:13:00.001+01:00</published><updated>2024-01-24T09:17:35.244+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="concurrency"/><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><category scheme="http://www.blogger.com/atom/ns#" term="zio"/><title type='text'>Scheduling tasks and sharing state with streams</title><summary type="text">
Recently we built a system that needs to perform 2 tasks. Taks 1 runs every 15 minutes,
task 2 runs every 2 minutes. Task 1 kicks off some background jobs (an upload to
BigQuery), task 2 checks upon the results of these background jobs and does some cleanup
when they are done (delete the uploaded files). The two tasks need to share information back and forth about what
jobs are running in the </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/4393448850172241623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2024/01/scheduling-tasks-and-sharing-state-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/4393448850172241623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/4393448850172241623'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2024/01/scheduling-tasks-and-sharing-state-with.html' title='Scheduling tasks and sharing state with streams'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-1011834491122786224</id><published>2023-11-26T09:58:00.001+01:00</published><updated>2023-11-26T09:58:56.827+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><title type='text'>Discovering scala-cli while fixing my digital photo archive</title><summary type="text">
Over the years I built up a nice digital photo library with my family. It is a messy process. Here are some of the things that can go wrong:



Digital cameras that add incompatible exif metadata.
Some files have exif tag CreateDate, others DateTimeOriginal.
Images shared via Whatsapp or Signal do not have an exif date tag at all.
Wrong rotation.
Fuzzy, yet memorable jpeg images wich take 15MB </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/1011834491122786224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2023/11/discovering-scala-cli-while-fixing-my.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/1011834491122786224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/1011834491122786224'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2023/11/discovering-scala-cli-while-fixing-my.html' title='Discovering scala-cli while fixing my digital photo archive'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-5731183713089984054</id><published>2023-10-08T09:15:00.003+02:00</published><updated>2023-10-08T09:20:20.170+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><title type='text'>Dependabot, Gradle and Scala</title><summary type="text">
  Due to a series of unfortunate circumstances we have to deal with a couple of projects that use Gradle as build tool at work.
  For these projects we wanted automatic PR generation for updated dependencies.
  Since we use Github Enterprise, using Dependabot seems logical.
  However, this turned out to be not very straightforward.
  This article documents one way that works for us.



  As we </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/5731183713089984054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2023/10/dependabot-gradle-and-scala.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/5731183713089984054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/5731183713089984054'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2023/10/dependabot-gradle-and-scala.html' title='Dependabot, Gradle and Scala'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-3055992815854367343</id><published>2023-04-20T14:22:00.012+02:00</published><updated>2023-04-23T20:21:39.814+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="kafka"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="opinion"/><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><category scheme="http://www.blogger.com/atom/ns#" term="zio"/><title type='text'>Zio-kafka hacking day</title><summary type="text">
  Not long ago I contacted Steven (committer of the zio-kafka library) to get some better understanding of how the library works. April 12, not more than 2 months later I am a committer, and I was sitting in a room together with Steven, Jules Ivanic (another committer) and wildcard Pierangelo Cecchetto (contributor), hacking on zio-kafka.


The meeting was an idea of Jules who was ‘in the </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/3055992815854367343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2023/04/zio-kafka-hacking-day.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/3055992815854367343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/3055992815854367343'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2023/04/zio-kafka-hacking-day.html' title='Zio-kafka hacking day'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-8380993308380106898</id><published>2023-01-29T10:20:00.004+01:00</published><updated>2023-01-29T10:25:13.961+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="kafka"/><category scheme="http://www.blogger.com/atom/ns#" term="opinion"/><title type='text'>Kafka is good for transport, not for system boundaries</title><summary type="text">
    In the last years I have learned that you should not run Kafka as a system boundary. A system boundary in this
        article is the place where messages are passed from one
        autonomy domain
        to another.
    
    Now why is that? Let&amp;rsquo;s look at two classes of problems: connecting to Kafka and the long feedback loop. To
        prove my points, I am going to bore you with </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/8380993308380106898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2023/01/kafka-is-good-for-transport-not-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/8380993308380106898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/8380993308380106898'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2023/01/kafka-is-good-for-transport-not-for.html' title='Kafka is good for transport, not for system boundaries'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-4503271787095659379</id><published>2022-12-04T20:28:00.000+01:00</published><updated>2022-12-04T20:28:14.609+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><category scheme="http://www.blogger.com/atom/ns#" term="zio"/><title type='text'>ZIO service layer pattern</title><summary type="text">
  While reading about ZIO-config in 2.0.4, the following pattern to create services caught my eye. I am copying it here for easy lookup. Enjoy.

val myLayer: ZLayer[PaymentRepo, Nothing, MyService] = 
  ZLayer.scoped {
    for {
      repo   &lt;- ZIO.service[PaymentRepo]
      config &lt;- ZIO.config(MyServiceImpl.config)
      ref    &lt;- Ref.make(MyState.Initial)
      impl   &lt;- ZIO.succeed(new </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/4503271787095659379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2022/12/zio-service-layer-pattern.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/4503271787095659379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/4503271787095659379'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2022/12/zio-service-layer-pattern.html' title='ZIO service layer pattern'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-1750825695601992970</id><published>2022-11-05T15:58:00.008+01:00</published><updated>2024-01-24T09:26:21.176+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="concurrency"/><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><category scheme="http://www.blogger.com/atom/ns#" term="zio"/><title type='text'>Speed up ZIOs with memoization</title><summary type="text">
TLDR: You can do ZIO memoization in just a few lines, however, use zio-cache for more complex use cases.


Recently I was working on fetching Avro schema&#39;s from a schema registry.
Avro schema&#39;s are immutable and therefore perfectly cacheable.
Also, the number of possible schema&#39;s is limited so cache evictions are not needed.
We can simply cache every schema for ever in a plain hash-map.
So, we </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/1750825695601992970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2022/11/speed-up-zios-with-memoization.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/1750825695601992970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/1750825695601992970'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2022/11/speed-up-zios-with-memoization.html' title='Speed up ZIOs with memoization'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-5682154616798419949</id><published>2022-06-08T09:35:00.005+02:00</published><updated>2022-06-08T09:37:23.842+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><title type='text'>Zigzag bytes</title><summary type="text">I was playing around with a goofy idea for which I needed zigzag encoding for bytes. Zigzag encoding is often used in combination with variable length encoding in things like Avro, Thrift and Protobuf.

In zigzag encoded integers, the least significant bit is used for sign. To convert from regular encoding (2-complement) to zigzag (and back) you can use the following Scala code:

def i32ToZigZag(</summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/5682154616798419949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2022/06/zigzag-bytes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/5682154616798419949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/5682154616798419949'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2022/06/zigzag-bytes.html' title='Zigzag bytes'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-8185072999606693880</id><published>2022-03-12T17:09:00.008+01:00</published><updated>2023-12-06T19:57:27.689+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mac"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><title type='text'>Upgrading Libreoffice with Homebrew</title><summary type="text">Update 2023-06-06 brew now asks for your password so it can install everything directly. Much better!!

The text below is no longer applicable and only kepts as reference.

  
Reminder to self: this is the procedure to upgrade Libreoffice with Homebrew:

  brew update
  brew upgrade
  open -a /Applications/LibreOffice.app
  Quit the application
  brew reinstall libreoffice-language-pack, enter </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/8185072999606693880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2022/03/upgrading-libreoffice-with-homebrew.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/8185072999606693880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/8185072999606693880'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2022/03/upgrading-libreoffice-with-homebrew.html' title='Upgrading Libreoffice with Homebrew'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-179648839360604920</id><published>2022-01-26T14:17:00.000+01:00</published><updated>2022-01-26T14:17:16.939+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><title type='text'>Having fun with Ordering in Scala</title><summary type="text">Challenge: sort a list of objects by name, but some names have priority. If these names appear, they should be ordered by the position they have in the priority list.

For example:

val priorityList = Seq(&quot;Willow&quot;, &quot;James&quot;, &quot;Ezra&quot;)
val input = Seq(&quot;Olivier&quot;, &quot;Charlotte&quot;, &quot;Willow&quot;, &quot;Declan&quot;, &quot;Aurora&quot;, &quot;Ezra&quot;)
val ordered = ???
assert(ordered == Seq(&quot;Willow&quot;, &quot;Ezra&quot;, &quot;Aurora&quot;, &quot;Charlotte&quot;, &quot;Declan&quot;</summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/179648839360604920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2022/01/having-fun-with-ordering-in-scala.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/179648839360604920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/179648839360604920'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2022/01/having-fun-with-ordering-in-scala.html' title='Having fun with Ordering in Scala'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-3232859103524236136</id><published>2022-01-10T14:21:00.005+01:00</published><updated>2022-01-10T15:12:20.783+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>From Adoptopenjdk to Temurin on a Mac using Homebrew</title><summary type="text">Adoptopenjdk joined the Eclipse foundation and renamed their JDK to Temurin. Here are instructions on how to migrate on Macs with Homebrew.

The following instructions removes Adoptopenjdk JDKs you may still have:

brew remove adoptopenjdk/openjdk/adoptopenjdk8
brew remove adoptopenjdk/openjdk/adoptopenjdk11
brew untap AdoptOpenJDK/openjdk
brew remove adoptopenjdk8
brew remove adoptopenjdk11
brew</summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/3232859103524236136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2022/01/from-adoptopenjdk-to-temurin-on-mac.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/3232859103524236136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/3232859103524236136'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2022/01/from-adoptopenjdk-to-temurin-on-mac.html' title='From Adoptopenjdk to Temurin on a Mac using Homebrew'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27876765.post-1241261525016014447</id><published>2021-12-19T17:44:00.004+01:00</published><updated>2021-12-19T17:52:24.278+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jitsi"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><title type='text'>Customizing the Jitsi Meet UI in a Docker deployment</title><summary type="text">
  I manage a Jitsi instance for a small for-benefit organization. I wanted
  to make some changes to the UI to make it visually belong to the organization.
  Unfortunately, Jitsi doesn&#39;t make it easy to do this. Upon every upgrade
  your changes are gone. This post describes a workaround for Jitsi deployments that use Docker.



  Although the details can be hairy, the idea is quite simple. We </summary><link rel='replies' type='application/atom+xml' href='http://day-to-day-stuff.blogspot.com/feeds/1241261525016014447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://day-to-day-stuff.blogspot.com/2021/12/customizing-jitsi-meet-ui-in-docker.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/1241261525016014447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27876765/posts/default/1241261525016014447'/><link rel='alternate' type='text/html' href='http://day-to-day-stuff.blogspot.com/2021/12/customizing-jitsi-meet-ui-in-docker.html' title='Customizing the Jitsi Meet UI in a Docker deployment'/><author><name>Erik van Oosten</name><uri>http://www.blogger.com/profile/15976519439979651010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry></feed>