Blog Postings
-
2023-12-12 -
Monorepos and Polyrepos
-
2023-12-01 -
HTTP APIs, REST APIs, and Others
-
2023-09-29 -
Biden on Democracy
-
2023-09-03 -
Maintaining Technical Depth
-
2023-08-30 -
The Uselessness of Consumer VPNs
-
2023-06-20 -
Some Aspects of Implementing Microservices..
-
2023-06-19 -
DDD, Architecture patterns, and More..
-
2023-05-23 -
Should Unit Tests Verify Requirements Only?
-
2023-03-22 -
sdkman: the Software Development Kit Manager
-
2023-03-21 -
Cluster Locks and Outbox Patterns
-
2023-03-18 -
Book Review: Fundamentals of Software Architecture
-
2023-03-16 -
Various New Articles on Software Architecture
-
2023-03-08 -
Artificial Intelligence According to John Oliver
-
2023-02-16 -
jdbc-audit-proxy
-
2023-02-15 -
Some Thoughts on Software Architecture
-
2021-03-31 -
Disabling the Tracker Service in the GNOME Desktop
-
2021-03-30 -
In Defence of Java Checked Exceptions
-
2021-02-13 -
A JDBC Query Monitor
-
2020-12-29 -
Checking Git Merge Status
-
2020-12-28 -
Sybase ASE Stored Procedure sp_jdbc_getprocedurecolumns and Performance
-
2020-12-27 -
Learning Prometheus
-
2020-10-14 -
For fun: browser as scratchpad
-
2020-06-20 -
Maven Multi-Module Builds with Centralized Version Management
-
2020-06-14 -
Book Review: Accelerate (Capabilities, Culture and Metrics)
-
2020-05-10 -
OAuth2 and OIDC
-
2019-12-08 -
Learning Kotlin
-
2019-11-08 -
A bunch of stuff - Docker Repos, VPNs, Feature Toggles and Thunderbird
-
2019-10-31 -
Creating a Demo Database with Postgresql and Docker
-
2019-10-30 -
Spring Transactions and Exceptions
-
2019-10-29 -
Email Validation - SPF, DKIM and DMARC
-
2019-09-18 -
Online Banking and Mobile Security
-
2019-03-18 -
Talend Software Suite
-
2019-01-06 -
Hyperconvergence
-
2019-01-05 -
OSNews Various
-
2018-12-29 -
Learning Python
-
2018-12-10 -
Thoughts on the Equifax Data Breach
-
2018-12-09 -
Data Warehousing
-
2018-11-24 -
The Bitwarden Password Manager
-
2018-10-03 -
Yubikey, FIDO2 and Backups
-
2018-09-09 -
More databases - MemSQL and RocksDB
-
2018-08-24 -
Yubikey Concepts, Configuration and Use
-
2018-07-21 -
The Snowflake Data Warehouse
-
2018-07-19 -
Storage Space Efficiency in Avro and HBase
-
2018-07-18 -
Threat Modelling with STRIDE
-
2018-07-08 -
A Lambda Architecure with Spark Streaming from Walmart Labs
-
2018-05-06 -
The Graal Virtual Machine
-
2018-04-22 -
The New Oracle Java Release Cycle
-
2018-04-21 -
Google Cloud Functions, BigQuery, and Related Matters
-
2018-04-14 -
Apache Beam and Google Dataflow Overview
-
2018-04-12 -
Apache Beam and CSV Headers
-
2018-04-11 -
Google Cloud Platform and AppEngine
-
2018-01-05 -
Accessing HDFS from Spark in Zeppelin
-
2018-01-02 -
More Spring Quirks
-
2017-12-07 -
Jetty Amusing Stacktrace
-
2017-12-06 -
Remapping DNS Lookups in a JRE
-
2017-12-06 -
Spring Forward
-
2017-12-05 -
Cloud Basics
-
2017-11-26 -
LEDE on a TPLink-WDR4300 Router
-
2017-09-23 -
Typesafe Config
-
2017-09-20 -
Accessing Hive via JDBC
-
2017-09-03 -
Hive container is running beyond physical memory limits
-
2017-08-27 -
Spark Overview
-
2017-08-19 -
Scala Overview
-
2017-08-09 -
Kafka Connect JDBC Source Where Clauses
-
2017-08-05 -
A Git Repo Mirroring Multiple Remotes
-
2017-07-01 -
Java 9's Jigsaw Module Framework (JPMS)
-
2017-05-24 -
Java's Fork/Join Framework
-
2017-05-18 -
Kafka Manager
-
2017-05-16 -
RabbitMQ Threading Model
-
2017-05-07 -
Vagrant, Kafka, Kerberos
-
2017-04-23 -
Apache NiFi
-
2017-04-01 -
Threadsafe Variable Access in Java
-
2017-03-27 -
Kafka Connect
-
2017-03-19 -
The Java8 Optional Class
-
2017-03-18 -
The Lambda and Kappa Design Patterns for Persistent State
-
2017-03-12 -
A Simple Wrapper for Starting Processes from Java
-
2017-03-11 -
Elasticsearch5 TransportClient Mode
-
2017-02-26 -
Gradle Internals
-
2017-01-25 -
Some JUnit Rules
-
2017-01-24 -
Maven Random Tips
-
2017-01-23 -
Downloading Jenkins
-
2017-01-19 -
Microsoft, Azure and Linux
-
2017-01-18 -
Climate Change
-
2017-01-15 -
Letsencrypt on Ubuntu
-
2017-01-09 -
Configuring Fail2Ban
-
2017-01-05 -
Configuring a Personal Email Server
-
2016-11-28 -
Maven Version Specifiers
-
2016-10-19 -
Intellij Fail with Maven Provided Dependencies
-
2016-10-18 -
SSL Failures
-
2016-10-17 -
Elasticsearch Overview
-
2016-10-08 -
Java Path Streams Trap
-
2016-06-26 -
Apache HBase Overview
-
2016-06-14 -
Apache Hive v2.0 Released
-
2016-06-12 -
Dropwizard and Hystrix
-
2016-06-06 -
The Kafka Message Broker
-
2016-05-16 -
OrangeFS
-
2016-05-07 -
Apache Tez - an Overview
-
2016-04-17 -
NoSQL - an Overview
-
2016-01-21 -
SQL Nulls and Tristate Logic - Fooled Again
-
2015-12-29 -
Object Layout
-
2015-12-28 -
Devops
-
2015-12-27 -
Dell's Self-inflicted Windows Security Hole
-
2015-12-19 -
Eclipse RCP and Java UIs in General
-
2015-11-13 -
Java 1.7 enhanced reflection API: MethodHandle
-
2015-11-11 -
Dual-booting with EFI
-
2015-11-08 -
A Java Serialization Vulnerability
-
2015-11-04 -
Big Data Overview
-
2015-11-03 -
Processes and TTYs
-
2015-10-25 -
IT Failures
-
2015-10-25 -
Languages and Orchestration
-
2015-10-01 -
Systemd-init Overview
-
2015-09-10 -
Trying Beyond Linux From Scratch
-
2015-09-04 -
Linux Wireless Stack
-
2015-08-31 -
Udev Overview
-
2015-08-30 -
Trying Linux From Scratch
-
2015-08-25 -
Unified Usr
-
2015-08-10 -
Virtualization and Containers with Linux
-
2015-08-06 -
The Linux Sound Stack
-
2015-07-22 -
The Linux Graphics Stack
-
2015-06-29 -
ACPI
-
2015-06-26 -
Linux on a Lenovo T550 Updated
-
2015-06-22 -
D-Bus and OSGi
-
2015-06-19 -
OSGi Service Selection
-
2015-06-18 -
Anaemic Domain Models
-
2015-06-09 -
Some osgi-related news
-
2015-05-19 -
Zookeeper Overview
-
2015-05-15 -
High-performance remote OSGi service calls
-
2015-05-15 -
Gnome-terminal hang in Ubuntu due to invalid Locale
-
2015-05-13 -
Linux on a Lenovo T550
-
2015-03-16 -
Learning Haskell
-
2015-01-15 -
systemd is not bloated
-
2014-11-12 -
Finalize on Fail
-
2014-11-07 -
JDBC and setAutoCommit Performance
-
2014-11-07 -
Unagile Sprints
-
2014-11-04 -
Java Covariant Return Types produce Duplicate Methods
-
2014-10-05 -
Wayland Versus X
-
2014-03-20 -
Java Generic Parameter Locator
-
2014-03-16 -
Precedence-Aware Evaluation
-
2014-03-07 -
Java Serialization and the Eclipse-JDT compiler
-
2013-10-25 -
Good Vibrations - Music from Floppy Disk Drives
-
2013-10-24 -
Ad-hoc Logging using the Eclipse Debugger
-
2013-10-22 -
Java Serialization and the serialVersionUID Property
-
2013-10-21 -
TP-Link WDR4300 and OpenWRT
-
2013-07-08 -
MyBatis Performance with OSGi
-
2013-03-26 -
OSGi Foundations
-
2013-02-26 -
Encryption in Theory and Practice
-
2013-02-25 -
What is EMF?
-
2013-02-21 -
New Advice - a wishlist for Java
-
2013-02-18 -
JAAS Foundations
-
2013-02-01 -
Git Foundations
-
2013-02-01 -
Spring property-placeholder and generated properties
-
2013-01-05 -
The TimeUnit Class
-
2012-12-11 -
Exporting a Git repo with 'git daemon'
-
2012-11-15 -
Praise for PowerMock
-
2012-11-13 -
Rounding Up Exceptions
-
2012-10-13 -
Google Islands
-
2012-10-11 -
JUnit and Classloaders
-
2012-09-30 -
Fun with graphics drivers
-
2012-09-29 -
Bisecting a linux kernel
-
2012-09-29 -
Guice Concepts
-
2012-09-27 -
The Grub bootloader
-
2012-09-27 -
Restart
Articles
-
2024-05-02 -
Korean Extras
-
2024-05-01 -
Korean Language Basics
-
2023-12-12 -
Monorepos and Polyrepos
-
2023-12-01 -
HTTP APIs, REST APIs, and Others - Pros and Cons
-
2023-09-20 -
The Danger of Development Metrics
-
2023-06-24 -
Distributed Read Models (Part 2: Implementation)
-
2023-06-23 -
Distributed Read Models (Part 1: Motivation)
-
2023-06-22 -
STOSA Architecture at willhaben
-
2023-06-20 -
Right-sizing Microservices
-
2023-06-10 -
Monads for Object Oriented Developers
-
2023-06-10 -
Spring Security Session Management
-
2023-06-09 -
Thoughts on Scrum
-
2023-06-08 -
Evolutionary Architecture
-
2023-06-07 -
Notes on Domain-Driven Design
-
2023-04-17 -
Testing Distributed Systems
-
2023-03-25 -
Component Maturity Model Checklist
-
2023-03-21 -
Generating Change Events with the Outbox Pattern
-
2023-03-20 -
A Simple Implementation of Cluster-lock/Leader-election
-
2023-03-18 -
Book Review: Fundamentals of Software Architecture
-
2023-03-17 -
Breaking the Monolith - A Successful Refactoring Into Microservices
-
2023-03-16 -
Lessons from a Failed Software Project
-
2023-03-14 -
Domain Models - Rich vs Anaemic
-
2023-03-13 -
Hexagonal Architecture
-
2023-02-15 -
Thoughts on the Role of Software Architect
-
2021-05-15 -
Tunneling Checked Java Exceptions Through Lambdas
-
2021-03-30 -
In Defence of Java Checked Exceptions
-
2021-02-19 -
Spring Bean Aliases with Programmatic Configuration
-
2021-02-15 -
Spring Qualifiers
-
2021-02-13 -
A JDBC Query Monitor
-
2020-12-28 -
Sybase ASE Stored Procedure sp_jdbc_getprocedurecolumns and performance
-
2020-12-27 -
Learning Prometheus and PromQL
-
2020-06-19 -
Maven Multi-module Builds with Centralized Version Management
-
2020-06-14 -
Book Review: Accelerate (capabilities, culture and metrics)
-
2020-05-13 -
Drawing Diagrams with Dot
-
2020-05-10 -
An Architectural Introduction to OAuth2 and OpenId Connect (OIDC)
-
2019-12-08 -
Notes on Kotlin for Java Programmers
-
2019-11-08 -
Thunderbird and Outlook Integration
-
2019-11-08 -
How does a VPN work on Linux?
-
2019-11-05 -
Unleash Feature Toggles
-
2019-11-02 -
Container Registries, Minikube and Authorization
-
2019-10-31 -
Managing Database Schemas with Flyway
-
2019-10-29 -
Email Sender Validation - SPF, DKIM, DMARC
-
2019-10-25 -
Contributions
-
2019-10-20 -
Viewing the Filesystem of a Docker Container
-
2019-10-10 -
Mapping Transactional Exceptions in Spring
-
2019-09-18 -
Online Banking and Mobile Security
-
2019-04-26 -
Solokey Concepts, Configuration and Use
-
2019-03-21 -
Postgres Stored Procedures
-
2019-03-18 -
Gitblit - a simple Git Repository Manager
-
2019-03-18 -
Talend Basic Install on Linux - Wizard
-
2019-03-18 -
Talend Basic Install on Linux - Manual
-
2019-03-18 -
Talend Basic Install on Linux
-
2019-03-18 -
Talend Suite Overview
-
2019-01-04 -
What is Hyperconvergence?
-
2018-12-28 -
Python - Distributing and Installing Code
-
2018-12-27 -
Python - Asynchronous Programming with Coroutines
-
2018-12-26 -
Python Notes
-
2018-12-10 -
Thoughts on the Equifax Data Breach
-
2018-12-06 -
Relational Normal Forms
-
2018-11-28 -
Introduction to Data Vault for Data Warehousing
-
2018-11-27 -
Introduction to Dimensional Modelling for Data Warehousing
-
2018-11-26 -
Introduction to Data Warehousing
-
2018-11-25 -
The Bitwarden/VaultWarden Password Manager - Host Your Own Server
-
2018-09-02 -
RocksDB key/value store Overview
-
2018-09-02 -
MemSQL Database Overview
-
2018-08-29 -
Book Review - Information Security Handbook
-
2018-08-29 -
Book Review - Applied Cryptography
-
2018-08-28 -
Simple TOTP commandline tools on Linux
-
2018-08-28 -
A simple commandline password manager on Linux
-
2018-08-25 -
Apache Kudu Overview
-
2018-08-24 -
Yubikey Concepts, Configuration and Use
-
2018-07-21 -
The Snowflake Data Warehouse
-
2018-07-19 -
Storage Space Efficiency in Avro and HBase
-
2018-07-18 -
Book Reviews - STRIDE vs PASTA
-
2018-07-18 -
Threat Modelling with STRIDE
-
2018-07-12 -
Reference Monitors
-
2018-07-11 -
IT Security Book Reviews
-
2018-06-30 -
CRSF and CORS - Cross-Site Request Forgery and Cross-Origin Resource Sharing
-
2018-05-13 -
Google Cloud Dataprep Overview
-
2018-05-06 -
The Graal Virtual Machine
-
2018-05-06 -
Google Databases Overview
-
2018-04-23 -
Google Cloud Storage Overview
-
2018-04-21 -
Dealing with Mutable Records in a BigQuery Data Warehouse
-
2018-04-19 -
Analytic Functions, Partitioning and Windowing in SQL and BigQuery
-
2018-04-18 -
Google BigQuery Overview
-
2018-04-17 -
Google Cloud Functions Overview
-
2018-04-15 -
Beam Code for sending a Pubsub Message after Write
-
2018-04-13 -
Apache Beam and Google Dataflow Overview
-
2018-04-12 -
Apache Beam - Reading the First Line of a File
-
2018-04-11 -
Google AppEngine
-
2018-04-10 -
Google Cloud Platform - Identities and Resource Management
-
2018-04-10 -
Google Cloud Platform - Overview
-
2018-01-01 -
Security-related Links
-
2017-12-06 -
Remapping DNS lookups in a JRE
-
2017-12-06 -
Fixing Spring CORS behind bad proxies
-
2017-12-05 -
Terraform Overview
-
2017-12-04 -
What is a Cloud (IaaS and Paas)?
-
2017-12-01 -
Cloud-related Links
-
2017-09-24 -
Tail-recursive List Reverse in Scala
-
2017-09-20 -
Hive, JDBC and Array-typed Columns
-
2017-09-19 -
JAAS and Kerberos: Failed to find any Kerberos tgt
-
2017-09-15 -
Hive/Tez tasks with OutOfMemoryError
-
2017-09-03 -
Hive container is running beyond physical memory limits
-
2017-09-01 -
Spark RDD Random Notes
-
2017-08-27 -
Spark Overview
-
2017-08-19 -
Scala's match operator and unapply methods
-
2017-08-19 -
Basic Scala Syntax for Java Programmers
-
2017-08-05 -
A Shared Git Repo Mirroring Multiple Remotes
-
2017-05-24 -
The Java Fork/Join Framework
-
2017-05-08 -
The RabbitMQ Threading Model
-
2017-05-08 -
RabbitMQ Exchanges and Queues
-
2017-05-07 -
Vagrant, Kafka and Kerberos
-
2017-04-18 -
Kafka Serialization and the Schema Registry
-
2017-04-17 -
Apache Nifi Architecture
-
2017-03-27 -
Kafka Connect
-
2017-03-18 -
Lamba and Kappa Architectures
-
2017-03-12 -
Executing External Processes from Java
-
2017-03-11 -
An Elasticsearch5 Transport Client
-
2017-02-26 -
Gradle Build Tool
-
2017-02-01 -
Testing Exceptions with JUnit
-
2017-01-30 -
Elasticsearch Aliases
-
2017-01-30 -
Handling Spam with Postfix, SpamAssassin, Dovecot and Sieve.
-
2017-01-28 -
Blocking Network Connections By Country
-
2017-01-27 -
A JUnit Rule for Elasticsearch Integration Testing
-
2017-01-25 -
Some JUnit Test Rules
-
2017-01-15 -
Creating SSL Certificates with Letsencrypt
-
2017-01-12 -
Email with Roundcube
-
2017-01-09 -
Fail2Ban on Ubuntu - Keeping the Bad Guys Out
-
2017-01-05 -
Email Postfix in Practice
-
2017-01-05 -
Email Postfix Theory
-
2017-01-05 -
Email Theory
-
2017-01-05 -
Setting Up a Personal Mailserver
-
2017-01-01 -
Off-topic Links
-
2016-11-28 -
Version Specifiers in Maven 3.x
-
2016-10-27 -
GSSAPI Overview
-
2016-10-23 -
Apache Cassandra Overview
-
2016-10-22 -
Kerberos Authentication Overview
-
2016-10-17 -
Elasticsearch Overview
-
2016-10-10 -
WTF - Java XOR
-
2016-10-01 -
Big-Data-related Links
-
2016-06-28 -
Apache Hive Overview
-
2016-06-20 -
Apache HBase Overview
-
2016-06-06 -
Apache Kafka 0.10.0 Overview
-
2016-05-05 -
Apache Tez Overview
-
2016-04-16 -
NoSQL Overview
-
2016-01-28 -
Apache HDFS Overview
-
2016-01-28 -
Apache Yarn Overview
-
2016-01-28 -
Apache Hadoop Overview
-
2016-01-28 -
Apache Hadoop MapReduce
-
2016-01-12 -
Storage Area Networks and Associated Filesystems
-
2015-12-29 -
In-memory Representation of Objects
-
2015-12-27 -
Public Key Certificates
-
2015-12-19 -
The Eclipse P2 Artifact Repository
-
2015-12-19 -
UI Libraries in Java
-
2015-12-19 -
Overview of the Eclipse4 Architecture
-
2015-11-11 -
Dual-booting with EFI
-
2015-11-04 -
Terminals, Gettys and Display Managers
-
2015-11-03 -
Process Groups
-
2015-10-28 -
Big Data Processing
-
2015-10-28 -
Column Store Databases
-
2015-10-28 -
Big Data Storage
-
2015-10-25 -
systemd-init review of criticism part 2
-
2015-10-01 -
systemd-init Overview
-
2015-09-10 -
Beyond Linux From Scratch (BLFS)
-
2015-09-02 -
Linux Wireless Stack Overview
-
2015-08-31 -
Udev Overview
-
2015-08-30 -
Trying Linux From Scratch (LFS)
-
2015-08-28 -
Beginner's Guide to Installing from Source
-
2015-08-28 -
Beginner's Guide to Installing from Source
-
2015-08-25 -
The Unified Usr Approach
-
2015-08-10 -
Notes on Containers with Linux
-
2015-08-06 -
The Linux Sound Stack
-
2015-08-04 -
Notes on Virtualization with Linux
-
2015-07-22 -
Linux Graphics Stack Overview
-
2015-06-18 -
Anemic Domain Models
-
2015-06-11 -
OSGi-aware Serialization
-
2015-06-09 -
OSGi Artifact Resolution and Build Tools
-
2015-05-23 -
OSGi and Dependency Injection
-
2015-05-19 -
Zookeeper Overview
-
2015-05-15 -
High-performance remote OSGi service calls
-
2015-03-15 -
Haskell for Object Oriented Programmers
-
2015-03-15 -
Home Networking Foundations
-
2014-10-05 -
Wayland versus X - a quick summary
-
2014-03-16 -
Precedence Aware Evaluation
-
2014-03-07 -
Java Serialization and Synthetic Methods
-
2013-10-22 -
Java Serialization and the serialVersionUID Property
-
2013-10-21 -
TP-Link WDR4300 and OpenWRT/LEDE
-
2013-07-08 -
MyBatis Caching
-
2013-03-04 -
OSGi Services
-
2013-03-04 -
OSGi Classloading
-
2013-03-04 -
OSGi Security
-
2013-03-04 -
10 Min Intro to OSGi
-
2013-03-04 -
OSGi Configuration
-
2013-02-20 -
Using the SecureRandom Class
-
2013-02-17 -
JAAS Foundations
-
2013-01-30 -
Symmetric Encryption in Java
-
2013-01-28 -
Symmetric Encryption
-
2012-12-17 -
Git Foundations
-
2012-10-16 -
Graphics Card Interfaces
-
2012-10-16 -
DRM and KMS kernel module implementations
-
2012-10-12 -
Architecture-related Links
-
2012-10-12 -
Programming-related Links
-
2012-10-11 -
Guice Listeners
-
2012-10-01 -
Closures
-
2012-09-30 -
Linux Framebuffer Drivers
-
2012-09-29 -
The PCI Bus
-
2012-09-29 -
Bisecting a Linux Kernel
-
2012-09-28 -
Guice Concepts
-
2012-09-27 -
Welcome
-
2012-09-27 -
Java-related Links
-
2012-09-27 -
Linux-related Links
-
2012-09-27 -
Infrastructure-related Links
-
2010-04-01 -
Grub2
-
2003-01-01 -
Junit Tests using Custom Classloaders