<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blogs on Andrew Lindesay - Software Engineer</title>
    <link>http://www.lindesay.co.nz/blog/</link>
    <description>Recent content in Blogs on Andrew Lindesay - Software Engineer</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 01 Mar 2026 00:00:00 +1200</lastBuildDate>
    <atom:link href="http://www.lindesay.co.nz/blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Moving Dependendency Injection Wiring to Build Time in Java with Avaje</title>
      <link>http://www.lindesay.co.nz/blog/2026/2026-compile-time-dynamism/</link>
      <pubDate>Sun, 01 Mar 2026 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2026/2026-compile-time-dynamism/</guid>
      <description>At a recent Java conference in Auckland, Rob Bygrave gave a talk about moving more of Java processes&amp;rsquo; dependency injection startup wiring to build-time rather than do it at runtime each time the application starts. He and others have written a system called Avaje which provides a set of tools and libraries which support this methodology. His session at the conference inspired me to take a closer look at these libraries, understand better how they work and to give them a go in a simple example.</description>
    </item>
    <item>
      <title>Haiku Depot Server - Architecture Modernization</title>
      <link>http://www.lindesay.co.nz/blog/2025/2025-hds-multi-instance/</link>
      <pubDate>Thu, 11 Dec 2025 12:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2025/2025-hds-multi-instance/</guid>
      <description>Early deployment strategy HaikuDepotServer (HDS) was first deployed in 2014. At that time, it was typical to deploy a small service such as HDS together with its resources on a server computer and hand-manage the server.&#xA;Although it had its downsides, this arrangement was easy to administer and worked well for some years. The Java-based application server would store working files on the local file-system, access the on-host Postgres database and could run the necessary graphics binaries on the local operating system too.</description>
    </item>
    <item>
      <title>Haiku code formatter on Linux</title>
      <link>http://www.lindesay.co.nz/blog/2025/2025-haikuformat-on-linux/</link>
      <pubDate>Sat, 06 Dec 2025 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2025/2025-haikuformat-on-linux/</guid>
      <description>There&amp;rsquo;s a handy util for people working on the Haiku code base called haiku-format. This tool is able to auto-format the Haiku C/C++ code so that the style of the code is compliant with the coding guidelines.&#xA;The tool is also integrated with git so that you can see the difference between your actual changes and how they should be formatted. Getting this right before a PR is raised saves a lot of time because the reviewer can avoid needing to comment on banal formatting issues.</description>
    </item>
    <item>
      <title>Haiku Package Growth</title>
      <link>http://www.lindesay.co.nz/blog/2025/2025-hds-package-growth/</link>
      <pubDate>Mon, 01 Dec 2025 12:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2025/2025-hds-package-growth/</guid>
      <description>HaikuDepotServer (HDS) was first deployed in 2014. Its purpose is to catalogue the packages available for the Haiku operating system and to provide a curation and delivery system for package meta-data. At first there were very few packages but the number of packages quickly grew and continues to grow.&#xA;The database query for obtaining this information is shown below.&#xA;WITH x AS (SELECT extract(year from p.create_timestamp) AS year, COUNT(id) AS cnt FROM haikudepot.</description>
    </item>
    <item>
      <title>Fireworks spraying plastic all over the suburbs</title>
      <link>http://www.lindesay.co.nz/blog/2025/2025-fireworks-plastic/</link>
      <pubDate>Sun, 23 Nov 2025 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2025/2025-fireworks-plastic/</guid>
      <description>As far as I have observed, in many countries there&amp;rsquo;s a restricted period each year that fireworks are allowed or can be sold. In New Zealand it&amp;rsquo;s in November which has recently passed. After &amp;ldquo;fireworks night&amp;rdquo; I&amp;rsquo;ve observed pieces of plastic all over the ground and as it gets washed over the roofs and, down the drains, many pieces of plastic have ended up in drain filters.&#xA;This pollution is a pretty big encumbrance on the environment and home-owners!</description>
    </item>
    <item>
      <title>Haiku Depot - Filtering Packages for Desktop and Native Desktop</title>
      <link>http://www.lindesay.co.nz/blog/2025/2025-hds-hd-desktop/</link>
      <pubDate>Sat, 15 Nov 2025 12:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2025/2025-hds-hd-desktop/</guid>
      <description>Haiku packages provide desktop GUI applications, command line applications, source code, tools, documentation or a mix of the above. A majority of end users would be looking for desktop software and not wanting to be distracted by other packages that they are unlikely to understand.&#xA;Previously, HDS implemented the ability to allow a human operator to nominate packages as being &amp;ldquo;haiku native&amp;rdquo; and a small icon was used to indicate which packages carry this attribute.</description>
    </item>
    <item>
      <title>Debian Trixie and Accented Characters</title>
      <link>http://www.lindesay.co.nz/blog/2025/2025-german-characters-trixie/</link>
      <pubDate>Sat, 04 Oct 2025 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2025/2025-german-characters-trixie/</guid>
      <description>I live in New Zealand where there is frequent use of words and placenames in the Māori language. Many Māori words use macron-accented vowels. I&amp;rsquo;m also sometimes wanting to write words in German which frequently use the umlaut accented vowels as well as the double-s or scharfes s character &amp;ldquo;ß&amp;rdquo;.&#xA;Also in New Zealand, the US English keyboard layout is typically used. This keyboard layout has no accented characters so the question comes up about how to enter such accented characters.</description>
    </item>
    <item>
      <title>Deletion, Spring Data and JPATransactionManager</title>
      <link>http://www.lindesay.co.nz/blog/2025/2025-jpa-transaction-manager/</link>
      <pubDate>Wed, 13 Aug 2025 12:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2025/2025-jpa-transaction-manager/</guid>
      <description>Recently I have been adding Hibernate ORM to the HaikuDepotServer for a new feature. While doing this, I ran into a problem with Spring Data. Even using basic method on a concrete interface extending JPARepository such as&amp;hellip;&#xA;void delete(T entity); &amp;hellip;yields an exception NoTransactionException. This was confusing because the service-level logic was wrapped in a Spring TransactionTemplate#execute call which would ensure that it was in a transaction. The TransactionTemplate instance is constructed with an instance of PlatformTranscationManager which has various sub-classes two of which are;</description>
    </item>
    <item>
      <title>Pitcher Plants</title>
      <link>http://www.lindesay.co.nz/blog/2025/2025-napenthes/</link>
      <pubDate>Fri, 20 Jun 2025 12:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2025/2025-napenthes/</guid>
      <description>In my kitchen I have a number of pitcher plants. I am unsure of the species, but they are vine-like and the genus is Napenthes. They do a good job of mopping up unwanted insects in the room, have nice foliage, are curious to look at and appear to thrive well in the New Zealand climate.&#xA;As they can grow tall, I am often taking cuttings which I give to people who are interested.</description>
    </item>
    <item>
      <title>Haiku Depot Server - Introducing a graphics server</title>
      <link>http://www.lindesay.co.nz/blog/2025/2025-hds-graphics-server/</link>
      <pubDate>Wed, 23 Apr 2025 12:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2025/2025-hds-graphics-server/</guid>
      <description>Background The HaikuDepot desktop application is the means by which many Haiku users learn about and install packages for the Haiku system. Behind the scenes, coordinating data for the desktop application is a server component called HaikuDepotServer (HDS). HDS communicates with the desktop application using HTTP requests.&#xA;The HDS server is a Java / SpringBoot application built to a container image that then runs on a Kubernetes deployment system. As part of its operation, HDS needs to frequently perform graphics operations such as;</description>
    </item>
    <item>
      <title>Custom SpringBoot Actuator for Triggering Maintenance Tasks</title>
      <link>http://www.lindesay.co.nz/blog/2025/2025-springboot-actuator/</link>
      <pubDate>Fri, 14 Mar 2025 12:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2025/2025-springboot-actuator/</guid>
      <description>Note that this article is providing generic technical information about a narrow subject and does not represent a fully considered solution; especially with regard to security.&#xA;SpringBoot is a popular framework for developing application software with the Java programming language. One feature of SpringBoot is the &amp;ldquo;Actuator&amp;rdquo;. The Actuator facility allows for monitoring and management of the running system. It is able to expose data in a number of ways, but it&amp;rsquo;s HTTP-based interface is commonly used.</description>
    </item>
    <item>
      <title>Bazel / Intelli-J Plugin Improvements with Python &#43; Transitions</title>
      <link>http://www.lindesay.co.nz/blog/2025/2025-bazel-intellij-transitions/</link>
      <pubDate>Wed, 05 Mar 2025 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2025/2025-bazel-intellij-transitions/</guid>
      <description>In 2024 I have done some pieces of work to improve the Bazel plugin for Intelli-J. I&amp;rsquo;ve landed another improvement in early 2025, this time around handling for Python rules that are subject to Bazel transitions. You can find out more about the problem in the GitHub issue and the fixes are here and here.</description>
    </item>
    <item>
      <title>Fixes to Starlark Go&#39;s set implementation</title>
      <link>http://www.lindesay.co.nz/blog/2025/2025-starlark-go-set/</link>
      <pubDate>Mon, 03 Feb 2025 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2025/2025-starlark-go-set/</guid>
      <description>I have recently been making some small patches to the implementation of the Starlark interpreter in the Go language; starlark-go. The changes have been around the implementation of the set in Starlark; implementing update() and then making some corrections to union().</description>
    </item>
    <item>
      <title>Fritz!Box 7490 - still getting updates after circa 12 years!</title>
      <link>http://www.lindesay.co.nz/blog/2025/2025-fritzbox-7490-update/</link>
      <pubDate>Sat, 01 Feb 2025 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2025/2025-fritzbox-7490-update/</guid>
      <description>The Fritz!Box 7490 home modem/router was released in April 2013 (approximately 12 years ago) and a few days ago, the manufacturer (AVM) released a new operating system upgrade for this unit. It might not be the case for all their products, but for the 7490 that&amp;rsquo;s a commendable support time-frame which both maximizes customers&amp;rsquo; initial investment and contributes to reducing e-waste by keeping the devices in operation for longer. The support window should be, amongst other things, a strong consideration when considering a router purchase.</description>
    </item>
    <item>
      <title>Indicating Native Haiku Applications</title>
      <link>http://www.lindesay.co.nz/blog/2024/2024-haikudepot-native/</link>
      <pubDate>Thu, 28 Nov 2024 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2024/2024-haikudepot-native/</guid>
      <description>Haiku has it&amp;rsquo;s own C++ GUI libraries which lend the platform a certain look and feel. Desktop applications which are written for the platform tend to reflect that look and feel. Over time, people in the community have been asking for a visual means of identifying those packages which supply a desktop application that could be considered &amp;ldquo;native&amp;rdquo;.&#xA;When the desire for this functionality first surfaced there were ideas about tagging applications in relation to the GUI library they use.</description>
    </item>
    <item>
      <title>Bazel / Intelli-J Plugin Improvements with Python Code-gen</title>
      <link>http://www.lindesay.co.nz/blog/2024/2024-bazel-intellij-2/</link>
      <pubDate>Fri, 08 Nov 2024 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2024/2024-bazel-intellij-2/</guid>
      <description>Earlier in 2024 I have done some work to improve the Bazel plugin for Intelli-J. I&amp;rsquo;ve been at it again and this time working to make the plugin work better for Python code-generation.&#xA;Prior to this, Bazel Rules that produce Python code as outputs would not work in the IDE for code-complete, symbol detection, click-navigate etc&amp;hellip; After the change, it is possible to do all these things with Rules that output either .</description>
    </item>
    <item>
      <title>Bazel / Intelli-J Plugin Improvements with Python</title>
      <link>http://www.lindesay.co.nz/blog/2024/2024-bazel-intellij/</link>
      <pubDate>Sun, 18 Aug 2024 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2024/2024-bazel-intellij/</guid>
      <description>Bazel is a sophisticated and extensible build system supporting a range of languages including Python. There exists a Java-based plugin for the JetBrains Intelli-J IDE.&#xA;I have recently done some work to enhance the IDE plugin to better support developing Python with Bazel;&#xA;Correct handling of debugging py_binary targets when there is a transition Correct handling of imports rule attribute on py... rules </description>
    </item>
    <item>
      <title>HaikuDepot User Interface Scaling</title>
      <link>http://www.lindesay.co.nz/blog/2024/2024-haikudepot-scaling/</link>
      <pubDate>Tue, 13 Aug 2024 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2024/2024-haikudepot-scaling/</guid>
      <description>Scaling the User Interface in Haiku The Haiku desktop operating system is able to utilise high resolution screens by the user specifying a larger font. The operating system&amp;rsquo;s GUI scales around this value. When custom views come into play, this requires that the developer has engineered their application to respond to the scaling of the desktop.&#xA;Scaling HaikuDepot HaikuDepot typically didn&amp;rsquo;t do this too well. You can see a screenshot below showing some of the issues highlighted;</description>
    </item>
    <item>
      <title>HDS running in KIND for development purposes</title>
      <link>http://www.lindesay.co.nz/blog/2024/2024-hds-on-kind/</link>
      <pubDate>Sun, 09 Jun 2024 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2024/2024-hds-on-kind/</guid>
      <description>The HaikuDepotServer (HDS) is a supporting internet application for the Haiku operating system. The application is built using Java and SpringBoot.&#xA;HDS has been deployed in production using Kubernetes for some years now, but the developer instructions have been around running container builds locally in Docker rather than Kubernetes.&#xA;KIND is s system for running a Kubernetes cluster inside Docker and is very easy to get started with. I have recently migrated the HDS documentation from Doc-book to Markdown and at the same time, have introduced a new page with step-by-step instructions on how to run an HDS instance locally.</description>
    </item>
    <item>
      <title>Local SMTP Server for Development and Testing (Update)</title>
      <link>http://www.lindesay.co.nz/blog/2024/2024-test-smtp/</link>
      <pubDate>Sun, 31 Mar 2024 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2024/2024-test-smtp/</guid>
      <description>A former article 2022-07-23 on this blog covered how to temporarily run a local SMTP server for testing purposes. The technique used an earlier Python library which is no longer supported from Python 3.12.&#xA;A new equivalent uses the aiosmtpd package.&#xA;pip3 install aiosmtpd The command line below will launch a temporary SMTP server;&#xA;python3 -m aiosmtpd -n -l 127.0.0.1:2525 </description>
    </item>
    <item>
      <title>Haiku Development from Linux</title>
      <link>http://www.lindesay.co.nz/blog/2024/2024-haiku-dev-on-linux/</link>
      <pubDate>Mon, 11 Mar 2024 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2024/2024-haiku-dev-on-linux/</guid>
      <description>Introduction Development directly on Haiku is very workable but some people prefer the use of another environment such as Linux to work in because familiar IDEs or other tooling may not be available on Haiku yet.&#xA;In this article I look at a possible setup for developing Haiku on Linux using VirtualBox as a means of running Haiku with the source synchronized from the Linux host to the Haiku virtual machine.</description>
    </item>
    <item>
      <title>The Value in an Artifical Primary Key</title>
      <link>http://www.lindesay.co.nz/blog/2024/2024-value-of-artifical-primary-key/</link>
      <pubDate>Thu, 07 Mar 2024 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2024/2024-value-of-artifical-primary-key/</guid>
      <description>The task of database design is not an uncommon one in the career of a software engineer. This process involves understanding and modelling the entities in a &amp;ldquo;domain&amp;rdquo; and the relationship between them. For example, a set of recipies collected into books might have ingredients, a difficulty level, an author and some steps. Here we can see the entities; book, author, recipie, ingredient and step. Understanding these entities, their attributes and the relationships between them can be a &amp;ldquo;make or break&amp;rdquo; task for a software engineering project.</description>
    </item>
    <item>
      <title>Generating an ERD for Haiku Depot Server using Graphor</title>
      <link>http://www.lindesay.co.nz/blog/2024/2024-hds-model-to-graphor/</link>
      <pubDate>Sun, 04 Feb 2024 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2024/2024-hds-model-to-graphor/</guid>
      <description>HaikuDepotServer is a Java web application for managing packages for the Haiku operating system. The application uses a Postgres database to store it&amp;rsquo;s data and uses the Apache Cayenne as an Object-relational mapping (ORM) mapping system to model the database in the Java application logic.&#xA;At both design and runtime, Cayenne is centric around a model which abstractly describes the database structure and how the database structure maps to the object-oriented model classes in the Java application.</description>
    </item>
    <item>
      <title>Blocking Web Sites on Firefox</title>
      <link>http://www.lindesay.co.nz/blog/2023/2023-block-web-sites-firefox/</link>
      <pubDate>Wed, 23 Aug 2023 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2023/2023-block-web-sites-firefox/</guid>
      <description>Firefox has an ability to configure some behaviours for all users on a host via a &amp;ldquo;policy&amp;rdquo;. On a linux host policy files can be found at /etc/firefox/policies/. This mechanism can be used to block web-sites.&#xA;Create a file in this directory; something like blockedsites.json would be suitable. Edit this file with;&#xA;{ &amp;#34;policies&amp;#34;: { &amp;#34;WebsiteFilter&amp;#34;: { &amp;#34;Block&amp;#34;: [ &amp;#34;*://www.somesite.co.nz/*&amp;#34;, &amp;#34;*://www.someothersite.de/*&amp;#34; ] } } } Restart Firefox and when you now browse to these sites, a page will be shown indicating that the site is disallowed.</description>
    </item>
    <item>
      <title>Arduino Project with Sensors and Threema</title>
      <link>http://www.lindesay.co.nz/blog/2023/2023-sensor-open-detector/</link>
      <pubDate>Sat, 24 Jun 2023 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2023/2023-sensor-open-detector/</guid>
      <description>Threema is a messaging service with a focus on privacy and security. I have recently created a very simple C/C++ project for the Arduino Nano 33 IoT which will detect an open sensor and then after some configured delay, send a Threema message to recipients to let them know. It will also message when the sensor has closed again. This project uses a local WiFi access point and communicates with the Threema Gateway using HTTPs.</description>
    </item>
    <item>
      <title>Using Intelli-J to Debug a Backstage Backend</title>
      <link>http://www.lindesay.co.nz/blog/2023/2023-debug-nodejs-from-intellij/</link>
      <pubDate>Sun, 07 May 2023 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2023/2023-debug-nodejs-from-intellij/</guid>
      <description>At the moment I am working with Backstage which is a large NodeJS application that provides a catalog and coordinates dev-ops services for teams of developers.&#xA;The easiest way to work with Backstage in development mode is by launching the process via yarn from the command line;&#xA;yarn start-backend &amp;hellip;and for the front-end;&#xA;yarn start I am often finding that I need to debug the backend and would like to use the IDE which is most familiar to me, Intelli-J.</description>
    </item>
    <item>
      <title>Processing JSON Data to CSV with JQ</title>
      <link>http://www.lindesay.co.nz/blog/2023/2023-hds-json-to-csv-with-jq/</link>
      <pubDate>Mon, 03 Apr 2023 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2023/2023-hds-json-to-csv-with-jq/</guid>
      <description>The tool jq is a popular and flexible tool for working with JSON data. Haiku Depot Server is able to provide a large data payload containing all the package data. We&amp;rsquo;ll set an environment variable with the URL to this package data;&#xA;export HDS_URL=&amp;#34;https://depot.haiku-os.org/__pkg/all-haikuports_x86_64-en.json.gz&amp;#34; To look at the data, one can use curl together with jq;&#xA;curl -L &amp;#34;${HDS_URL}&amp;#34; | gzip -d | jq . | less The data is more complex and voluminous, but the interesting parts of the data for this article are shown in the structure below;</description>
    </item>
    <item>
      <title>Haiku Depot Server Technology Modernisation</title>
      <link>http://www.lindesay.co.nz/blog/2023/2023-hds-spring-boot-3/</link>
      <pubDate>Sat, 01 Apr 2023 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2023/2023-hds-spring-boot-3/</guid>
      <description>Java technology has been moving forward much faster in recent years with more frequent updates. Java 17 Long Term Support (LTS) was introduced in September 2021 and will be followed by Java 21 LTS in September 2023.&#xA;With HaikuDepotServer (HDS) still on Java 11 introduced in September 2018, it was time to upgrade to 17 and then also make the transition from Spring 5 to SpringBoot 3 which was released in November 2022.</description>
    </item>
    <item>
      <title>Testing JavaScript Logic Using the AWS SDK v3</title>
      <link>http://www.lindesay.co.nz/blog/2023/2023-testing-js-aws-sdk/</link>
      <pubDate>Mon, 13 Mar 2023 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2023/2023-testing-js-aws-sdk/</guid>
      <description>Some time ago AWS introduced the version 3 SDK for JavaScript which I have recently employed in a NodeJS project. One would use the SDK roughly in this manner after adding a dependency to @aws-sdk/client-iam;&#xA;... const iamClient = new IAMClient(awsClientConfig); const result = iamClient.send(new GetRoleCommand({RoleName: roleName})); ... Using jest, this structure is tricky to mock in a readable manner. Happily there exists a libary aws-sdk-client-mock and aws-sdk-client-mock-jest which can help out with the mocking.</description>
    </item>
    <item>
      <title>Revisiting Haiku Depot and Performance Around Bulk Data</title>
      <link>http://www.lindesay.co.nz/blog/2023/2023-hds-bulk-data-design-options/</link>
      <pubDate>Wed, 08 Feb 2023 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2023/2023-hds-bulk-data-design-options/</guid>
      <description>Note that HDS is a long-running, open-source and non-funded project and so this analysis weighs up the cost:benefit of any intervention together with the probability that enough effort can be expended to undertake any improvement.&#xA;Background Haiku Depot Server (HDS) (source) is an application server vending curated package-related data for the Haiku operating system. The HDS project was started in 2013.&#xA;There are a handful of bulk data payloads supplied from HDS.</description>
    </item>
    <item>
      <title>Hör auf mit den Aufkleber!</title>
      <link>http://www.lindesay.co.nz/blog/2023/2023-no-stickers/</link>
      <pubDate>Sun, 05 Feb 2023 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2023/2023-no-stickers/</guid>
      <description>I&amp;rsquo;ve noticed a trend for visitors to apply stickers from their origin country to various objects in New Zealand. This probably isn&amp;rsquo;t awesome in and off itself, but it is an especially poor practice in the natural environment.&#xA;The country does make a rather large effort to keep the wilderness here, as best possible, free of man-made detritus. It&amp;rsquo;s a bit annoying then to have non-biodegradable stickers unnecessarily adhered to signage and objects in the wilderness areas.</description>
    </item>
    <item>
      <title>HTTPS Network Invocation on Arduino</title>
      <link>http://www.lindesay.co.nz/blog/2022/2022-arduino-https/</link>
      <pubDate>Sat, 19 Nov 2022 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2022/2022-arduino-https/</guid>
      <description>Some Arduino boards are able to make SSL TCP/IP network connections. For example, the Arduino Nano 33 IoT device has this ability when the WiFiNINA library is used. From this library, a project might open an SSL connection as follows;&#xA;WiFiClient wifi if (wifi.connectSSL(someHost, 443)) { doSomething(wifi); wifi.stop(); // disconnect } else { Serial.println(&amp;#34;unable to connect to the server&amp;#34;); } Another library, ArduinoHttpLibrary is able to make HTTP requests from a TCP/IP network connection.</description>
    </item>
    <item>
      <title>Custom Palette for LibreOffice</title>
      <link>http://www.lindesay.co.nz/blog/2022/2022-color-palettes-libre-office/</link>
      <pubDate>Mon, 07 Nov 2022 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2022/2022-color-palettes-libre-office/</guid>
      <description>The LibreOffice applications offer a palette function in the colour picker.&#xA;One can choose, using the drop down, from a number of palettes which can contain a number of colours to choose from. Some palettes are provided &amp;ldquo;out of the box&amp;rdquo;, but how to add your own palettes should you need to &amp;ndash; for example to include a corporate colour set?&#xA;This is achieved by creating a file on your disk system.</description>
    </item>
    <item>
      <title>Counting Critical Vulnerabilities</title>
      <link>http://www.lindesay.co.nz/blog/2022/2022-count-critical-vulnerabilities-cve/</link>
      <pubDate>Sun, 06 Nov 2022 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2022/2022-count-critical-vulnerabilities-cve/</guid>
      <description>For an upcoming discussion, I wanted to get the count of registered vulnerabilities that have severity of &amp;ldquo;critical&amp;rdquo; by year. The NIST produces files of the vulnerabilities in JSON format which one can download here.&#xA;Conveniently the service is offered with a download per year. Now to filter them and get a count. It turns out the jq tool can help out here with a command such as;&#xA;zcat nvdcve-1.1-2022.json.gz | \ jq &amp;#39;.</description>
    </item>
    <item>
      <title>Validation in Java with a Custom Holder Class</title>
      <link>http://www.lindesay.co.nz/blog/2022/2022-java-validation-with-holder/</link>
      <pubDate>Sun, 30 Oct 2022 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2022/2022-java-validation-with-holder/</guid>
      <description>Bean Validation The JSR-303 &amp;ldquo;Bean Validation&amp;rdquo; specification (2007) defines a means of validating data within a Java application. Typically one would use a library such as Hibernate Validator to actually implement the specification. An example of usage on a model class within a project might be something like;&#xA;public class Book { @NotNull @Size(min = 2, max = 128) private String title; ... } The JSR 303 standard defines a number of very commonly used annotations such as @NotNull and others such as @Email are provided by third-party libraries.</description>
    </item>
    <item>
      <title>Chrome OS Flex</title>
      <link>http://www.lindesay.co.nz/blog/2022/2022-chrome-os-flex/</link>
      <pubDate>Sun, 31 Jul 2022 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2022/2022-chrome-os-flex/</guid>
      <description>Recently Google released a new variant of Chrome-OS called &amp;ldquo;Chrome OS Flex&amp;rdquo; which can run on generic hardware. This is great for relatively easily giving a new lease of life to old laptops and allowing people to continue to capitalise on existing hardware.&#xA;I have tried this operating system on both an old MacBook and a Thinkpad 11e. The MacBook is a bit janky on video which can be expected since the unit is around 14 years old.</description>
    </item>
    <item>
      <title>Local SMTP Server for Development and Testing</title>
      <link>http://www.lindesay.co.nz/blog/2022/2022-local-test-smtp-server/</link>
      <pubDate>Sat, 23 Jul 2022 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2022/2022-local-test-smtp-server/</guid>
      <description>Often when you&amp;rsquo;re developing software, the system needs to be able to send emails. This can be tricky to arrange locally. Interestingly, Python provides for a handy little SMTP server that can be used for testing and development purposes;&#xA;python3 -m smtpd -n -c DebuggingServer localhost:2525 </description>
    </item>
    <item>
      <title>Building Java Software with Docker</title>
      <link>http://www.lindesay.co.nz/blog/2022/2022-build-java-in-docker/</link>
      <pubDate>Fri, 29 Apr 2022 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2022/2022-build-java-in-docker/</guid>
      <description>Introduction Docker Images are a great way to template an environment for running software. When using Docker, one can be certain across different host operating systems and platforms exactly how the software will be run. This assurance allows for more reliable and safer software runtimes compared to configuring computers or virtual machines manually.&#xA;Software builds have similar requirements; environmental consistency and being able to run the build in different settings – shifted-left to a desktop computer through to a Kubernetes environment – is very beneficial for a software engineering team.</description>
    </item>
    <item>
      <title>Workspace Isolation in Gnome</title>
      <link>http://www.lindesay.co.nz/blog/2021/2021-gnome-workspace-isolation/</link>
      <pubDate>Wed, 08 Dec 2021 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2021/2021-gnome-workspace-isolation/</guid>
      <description>This is quite handy to make each Workspace a separate &amp;ldquo;desktop&amp;rdquo; on your Gnome environment. In this way, the key-combination CTRL-TAB will cycle through only those windows on the desktop currently selected.&#xA;gsettings set org.gnome.shell.app-switcher current-workspace-only true </description>
    </item>
    <item>
      <title>Ordering Spring Bean Initialization using SmartLifecycle</title>
      <link>http://www.lindesay.co.nz/blog/2021/2021-spring-ordered-init-with-lifecycle/</link>
      <pubDate>Tue, 09 Nov 2021 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2021/2021-spring-ordered-init-with-lifecycle/</guid>
      <description>Spring Framework is a very popular underlying platform for people working with the Java language. Spring provides plumbing for many needs from Security through to Kafka but at its core it provides a means of &amp;ldquo;connecting&amp;rdquo; up the components of the software in a process called &amp;ldquo;dependency injection&amp;rdquo; (DI).&#xA;These components are call &amp;ldquo;Beans&amp;rdquo; and have their own lifecycle. Once a Bean is setup and is &amp;ldquo;connected&amp;rdquo; to other beans, it may need to be initialised.</description>
    </item>
    <item>
      <title>Accessing The Okta API using Python</title>
      <link>http://www.lindesay.co.nz/blog/2021/2021-okta-reporting/</link>
      <pubDate>Mon, 08 Nov 2021 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2021/2021-okta-reporting/</guid>
      <description>Okta is a cloud PaaS platform for Identity Management which offers a number of SDKs to work with the platform, amongst them a Python SDK.&#xA;A small part of most identity projects is the need for small maintenance, migration and reporting tasks; the little stuff. the Python scripting language can be a great way to get these often ad-hoc tasks completed efficiently.&#xA;In this article, the very simple task of producing a TSV format spreadsheet containing users&amp;rsquo; Okta IDs together with their last names is accomplished with the Python 3 language.</description>
    </item>
    <item>
      <title>Cycle and Train Motat to Henderson and Back</title>
      <link>http://www.lindesay.co.nz/blog/2021/2021-cycle-henderson/</link>
      <pubDate>Mon, 26 Apr 2021 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2021/2021-cycle-henderson/</guid>
      <description>This is a simple cycle-centric day-trip around Auckland City starting and ending at Auckland&amp;rsquo;s technology museum, MOTAT going through the Henderson area. The following map (credit to OpenStreetMap for the base image) shows the route.&#xA;We decided to only cycle half of the trip and first cycled from MOTAT (A) over to the Bladwin Avenue train station (B) on the Western Line. The train appears to run frequently, but we were lucky that a train arrived just after we got to the platform.</description>
    </item>
    <item>
      <title>A Brief Look Inside an HPKG</title>
      <link>http://www.lindesay.co.nz/blog/2021/2021-hpkg/</link>
      <pubDate>Sun, 28 Feb 2021 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2021/2021-hpkg/</guid>
      <description>(This article was cross-posted into the Haiku web site.)&#xA;The Haiku operating system has a packaging system that leverages a clever file format called HPKG. This article provides a simplistic overview of how the file format is structured.&#xA;Installing and Uninstalling HPKGs To get a package installed on their Haiku computer, a user would download a package file in a format called HPKG. The user would typically do this via the HaikuDepot desktop application or by using the pkgman command line tool.</description>
    </item>
    <item>
      <title>Better Icon Handling in HaikuDepot</title>
      <link>http://www.lindesay.co.nz/blog/2020/2020-haiku-depot-icon-handling/</link>
      <pubDate>Tue, 17 Nov 2020 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2020/2020-haiku-depot-icon-handling/</guid>
      <description>(This article was cross-posted into the Haiku web site.)&#xA;HaikuDepot displays icons through a number of areas of its user interface. Early in the history of the Haiku packaging system, there were very few packages and very few icons. HaikuDepot started off by downloading each individually from HaikuDepotServer.&#xA;Download as Tar then Unpack Downloading each icon file individually was fine for a while, but as the package and hence icon count grew it became necessary to rework this system.</description>
    </item>
    <item>
      <title>Introducing timesum</title>
      <link>http://www.lindesay.co.nz/blog/2020/2020-timesum/</link>
      <pubDate>Thu, 05 Nov 2020 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2020/2020-timesum/</guid>
      <description>timesum is a little tool to add up times; something which I am getting used to working at a consultancy. It accepts a number of arguments which are interpreted as minutes and then it will sum those and print them out as hours and minutes;&#xA;./timesum 07:30-10:30 1:30 1.25 05:45 It is distributed as C source so should be easy to build on most UNIX-like environments. You can find it here.</description>
    </item>
    <item>
      <title>Launching Applications with Profiles on Gnome Shell</title>
      <link>http://www.lindesay.co.nz/blog/2020/2020-gprofilelaunch/</link>
      <pubDate>Sat, 17 Oct 2020 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2020/2020-gprofilelaunch/</guid>
      <description>Some applications used on Linux provide the ability to have a profile which separates some settings. Launching the application with a specific profile is however often not as straight-forward as might be desirable.&#xA;I have recently written a Gnome Shell extension called gprofilelaunch that provides a little drop-down menu at the top of the screen that, when selected, will pop-up a menu that has the various applications with launch options for each profile.</description>
    </item>
    <item>
      <title>Creating a Color Theme for Firefox</title>
      <link>http://www.lindesay.co.nz/blog/2020/2020-firefox-colors/</link>
      <pubDate>Sat, 10 Oct 2020 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2020/2020-firefox-colors/</guid>
      <description>It is useful to color the title-bar / tabs of the Firefox window to distinguish a running profile from others. This requires the creation of a theme. There is a web page called Firefox Color Plugin that helps with designing color themes. If you install the plugin (see page) then it is also possible to export the theme and use it.&#xA;When you are ready with your color scheme, it should be possible to select &amp;ldquo;Export&amp;rdquo; from the top left corner of the Firefox Color plugin and then to export as an .</description>
    </item>
    <item>
      <title>Mocking a Class in a Python Unit Test</title>
      <link>http://www.lindesay.co.nz/blog/2020/2020-python-mock-class/</link>
      <pubDate>Thu, 13 Aug 2020 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2020/2020-python-mock-class/</guid>
      <description>I have recently been writing some Python logic to manipulate data stored in Google Cloud Storage. I needed to write some build-time unit tests for this logic and in doing so wanted to mock out the Google Cloud Storage classes that are provided for the Python language. I wanted the logic that I had written to write to work as it normally does but not to access Cloud Storage while it is under test but to access a fake Cloud Storage.</description>
    </item>
    <item>
      <title>Named Parameters with JDBC Template in Spring</title>
      <link>http://www.lindesay.co.nz/blog/2020/2020-named-jdbc-template/</link>
      <pubDate>Sat, 11 Jul 2020 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2020/2020-named-jdbc-template/</guid>
      <description>Although in many cases a powerful ORM tool such as Hibernate is the best way access data in your application, sometimes dropping to SQL makes sense.&#xA;The Spring frameworks are a very popular set of libraries for building java software. A very handy class provided by the spring-jdbc library is JdbcTemplate which can be used to help in issuing SQL commands to a database server.&#xA;JdbcTemplate can be injected and removes much of the boiler-plate involved and its use looks a bit like this;</description>
    </item>
    <item>
      <title>Haiku Repositories and Identifiers</title>
      <link>http://www.lindesay.co.nz/blog/2020/2020-haiku-repo-identifiers/</link>
      <pubDate>Sun, 05 Jul 2020 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2020/2020-haiku-repo-identifiers/</guid>
      <description>Software on a computing platform such as Haiku is typically distributed as a package. Without a packaging system it would be hard for users to install software and because software often depends on other software, the chain of dependencies would be difficult for a user to resolve themselves. To orchestrate the distribution and management of the packages, Haiku has a packaging system which consists of applications, online tools, on-host tools and software libraries.</description>
    </item>
    <item>
      <title>Sorted Insert into an STL Vector</title>
      <link>http://www.lindesay.co.nz/blog/2020/2020-stl-insert-vector/</link>
      <pubDate>Mon, 18 May 2020 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2020/2020-stl-insert-vector/</guid>
      <description>C++ has an accompanying library called the &amp;ldquo;Standard Template Library&amp;rdquo; (STL) which bundles up lots of useful algorithms and makes them able to be used with generic types through templating.&#xA;In a recent application, I have been using a vector&amp;lt;PackageInfoRef&amp;gt; as an instance variable in a class. This choice was because the collection would grow and I also need index-based access to the collection. The inserts into the vector ensure that the collection is always totally ordered.</description>
    </item>
    <item>
      <title>Data Nucleus Contains Function</title>
      <link>http://www.lindesay.co.nz/blog/2020/2020-data-nucleus-query-contains/</link>
      <pubDate>Tue, 04 Feb 2020 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2020/2020-data-nucleus-query-contains/</guid>
      <description>I have been recently working with Data Nucleus and have found the contains() function to have an interesting use. Consider this code that executes a Data Nucleus query;&#xA;Query&amp;lt;Consignment&amp;gt; query = pm.newQuery(Consignment.class); query.setFilter(&amp;#34;this.parts.contains(p) &amp;amp;&amp;amp; p.code == inPartCode&amp;#34;); query.declareParameters(&amp;#34;String inPartCode&amp;#34;); query.declareVariables(&amp;#34;Part p&amp;#34;); query.setNamedParameters(Map.of(&amp;#34;inPartCode&amp;#34;, partCode); query.executeResultList(Consignment.class); In this case only a Consignment that has a Part with the supplied code will be returned. This is how the SQL query might look for this;</description>
    </item>
    <item>
      <title>Exile on the BBC Computer</title>
      <link>http://www.lindesay.co.nz/blog/2019/2019-exile/</link>
      <pubDate>Sat, 30 Nov 2019 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2019/2019-exile/</guid>
      <description>My computer of the late 1980s was the BBC Micro produced by the British company Acorn Computers.&#xA;It is hard to appreciate thirty years later that the BBC Micro was an 8-bit computer with 32kb of memory. To give some idea of the constraints of computing at that time, one 640x480 JPEG photo is around 100kb; around three times the entire memory of this machine.&#xA;A game that really captivated me on this computer was Exile &amp;mdash; released in 1988.</description>
    </item>
    <item>
      <title>Cycling Onehunga to Auckland Central</title>
      <link>http://www.lindesay.co.nz/blog/2019/2019-cycle-onehunga/</link>
      <pubDate>Thu, 10 Oct 2019 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2019/2019-cycle-onehunga/</guid>
      <description>This is a nice cycle-centric day-trip around Auckland City starting and ending at Auckland&amp;rsquo;s main transport hub, Britomart. I did this with a friend of mine in mid winter. The following map (credit to OpenStreetMap for the base image) shows the route.&#xA;Train out to Onehunga This section is shown by the red line on the map.&#xA;Boarding the train at Britomart (A) was no problem. Some wagons have a lowered section suitable for bicycles and there is no extra charge for the bicycle; just swipe on at Britomart, pass through the wide gates onto the platform and then swipe off at Onehunga (B).</description>
    </item>
    <item>
      <title>Deen with Basic GTK&#43; UI</title>
      <link>http://www.lindesay.co.nz/blog/2019/2019-deen-gtk/</link>
      <pubDate>Sat, 24 Aug 2019 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2019/2019-deen-gtk/</guid>
      <description>I have recently wanted to experiment with a small GTK+ GUI project in the C language and decided that I would add a simple UI onto my deen tool. I never worked with GTK+ before so it was all new to me.&#xA;Putting Together a GTK+ Application The Glade tool is used to layout and design the user interface of the application. The Glade tool produces an XML file.&#xA;Another XML &amp;ldquo;resource&amp;rdquo; file references the Glade XML file as well as any other resources such as icons that are used in the application.</description>
    </item>
    <item>
      <title>OpenWRT with NZ Fibre</title>
      <link>http://www.lindesay.co.nz/blog/2019/2019-openwrt-nz-fibre/</link>
      <pubDate>Mon, 15 Jul 2019 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2019/2019-openwrt-nz-fibre/</guid>
      <description>UPDATE 2021-07-03: These instructions were formulated for the 19.X versions of OpenWRT; later versions have a different user interface and so these instructions may not apply.&#xA;UPDATE 2020-09-11: Added information about IPoE&#xA;NOTE: Use this information at your own risk; different routers and internet providers may have different requirements that differ to the process described here. This article also does not address any security implications of a router being exposed directly on the internet.</description>
    </item>
    <item>
      <title>Memory Management Helpers in Haiku</title>
      <link>http://www.lindesay.co.nz/blog/2019/2019-referencable/</link>
      <pubDate>Sat, 25 May 2019 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2019/2019-referencable/</guid>
      <description>Keeping track of heap-allocated data in a software environment without garbage-collection is a challenge to do well and development environments typically provide some support to help make a good outcome possible.&#xA;OPENSTEP When I worked on software for the NeXT and later MacOS/iOS environments I became familiar with OPENSTEP&amp;rsquo;s approaches around -retain, -release and -autorelease in the Objective-C language. In this mechanic, the current thread would typically have one or more &amp;ldquo;autorelease-pool&amp;rdquo; objects on the stack.</description>
    </item>
    <item>
      <title>HaikuDepot and Languages</title>
      <link>http://www.lindesay.co.nz/blog/2019/2019-hd-languages/</link>
      <pubDate>Wed, 15 May 2019 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2019/2019-hd-languages/</guid>
      <description>The desktop application Haiku Depot (HD) started off having a hard coded list of a few languages that were known to be supported in the Haiku Depot Server (HDS) system. Here is how it looked.&#xA;The HDS application server actually supports a wider range of languages and is able to provide a list of those languages that it does support to HD. I have updated HD to read in those languages from the HDS server and use them when a user either creates an account or adds a new user-rating.</description>
    </item>
    <item>
      <title>Jam and HaikuDepot Code Generation</title>
      <link>http://www.lindesay.co.nz/blog/2019/2019-jam/</link>
      <pubDate>Mon, 28 Jan 2019 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2019/2019-jam/</guid>
      <description>A desktop application, HaikuDepot downloads bulk data from the Haiku Depot Server (HDS) application-server as compressed JSON payloads. The schema for the payloads is defined by a JSON document in the HDS source code. A third-party maven plugin is used to generate server-side Java stubs from the JSON schema and Python scripts generate C++ stubs for the HaikuDepot side. Those C++ stubs are then copied into the Haiku source tree.</description>
    </item>
    <item>
      <title>Stop-Motion with ffmpeg</title>
      <link>http://www.lindesay.co.nz/blog/2019/2019-stopmotion/</link>
      <pubDate>Tue, 01 Jan 2019 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2019/2019-stopmotion/</guid>
      <description>I recently wanted to do some stop motion video with my children and looked around for some suitable software. There were a couple of packages. The open-source options didn&amp;rsquo;t work too well for me and the commercial options were a bit expensive for some short-term Sunday afternoon fun. Instead I decided to try to use ffmpeg which (of course) has the ability to splice together a series of images into a video.</description>
    </item>
    <item>
      <title>Haiku Depot Server on Docker and Urls in Haiku</title>
      <link>http://www.lindesay.co.nz/blog/2018/2018-hds-docker/</link>
      <pubDate>Sat, 15 Sep 2018 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2018/2018-hds-docker/</guid>
      <description>Docker So far the HaikuDepotServer (HDS) system has been deployed into the production host using RPM packages. This has worked quite well as there is a Maven plugin for producing RPMs. The RPM has included the Jetty runner and all of the typical Linux start-up scripts and so on.&#xA;More recently the world has been moving to Docker images where the operating system and the software is bundled into an image and the image is deployed as a virtual machine.</description>
    </item>
    <item>
      <title>Postgres and using &#34;EXCLUDE&#34; for Deferred Unique Checks</title>
      <link>http://www.lindesay.co.nz/blog/2018/2018-pg-exclude/</link>
      <pubDate>Thu, 26 Jul 2018 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2018/2018-pg-exclude/</guid>
      <description>I recently needed to create a conditional unique index for a hobby project that looks something like this;&#xA;CREATE UNIQUE INDEX t_idx0 ON t (y) WHERE y IS true; The problem is that I am using an ORM where the order of operations is not able to be determined in advance. This means that an UPDATE and an INSERT might fire in the wrong order such that the unique index is violated.</description>
    </item>
    <item>
      <title>Haiku Update; Repository Mirror Handling</title>
      <link>http://www.lindesay.co.nz/blog/2018/2018-haiku-mirrors/</link>
      <pubDate>Sun, 08 Jul 2018 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2018/2018-haiku-mirrors/</guid>
      <description>Mirrors Identifying a repository of packages can be more complex than it initially seems. Haiku maintains some meta-data about the repositories that are configured on a given installation. HaikuDepot also knows about repositories that exist in the HaikuDepotServer system. Somehow these two sets of repositories need to be married together so that server data can be correlated to local data.&#xA;When adding a repository to a Haiku system, a base URL is specified such as;</description>
    </item>
    <item>
      <title>Haiku Update; Spring 5, Better Inter-op and Docker Build</title>
      <link>http://www.lindesay.co.nz/blog/2018/2018-haiku-update-jan/</link>
      <pubDate>Wed, 31 Jan 2018 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2018/2018-haiku-update-jan/</guid>
      <description>In recent months I have continued to implement some improvements in the Haiku system.&#xA;HaikuDepotServer Using Spring 5 HaikuDepotServer was started in 2013 and at this time it was still common to use XML to define the Spring environment. In the intervening years it has become more common to use Java classes in order to perform the same configuration tasks. This is helpful because the java logic is more flexible, breaks on some problems at compile-time and one can also breakpoint code whereas the same thing cannot be achieved with XML files.</description>
    </item>
    <item>
      <title>Deen on Windows</title>
      <link>http://www.lindesay.co.nz/blog/2017/deen-on-windows/</link>
      <pubDate>Mon, 13 Nov 2017 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2017/deen-on-windows/</guid>
      <description>My little command-line utility deen has recently been ported to Windows. It was initially intended to run on UN*X-like machines, but it wasn&amp;rsquo;t too hard to port. Here is what I had to do;&#xA;Downloaded and installed the MinGW build-system. The tool uses SQLite to store its data in a simple SQL database. Getting this as a DLL seemed like &amp;rsquo;trouble&amp;rsquo; and SQLite offers an &amp;ldquo;amalgamation&amp;rdquo; that offers a sqlite3.h and sqlite3.</description>
    </item>
    <item>
      <title>Haiku Depot and Performance Around Bulk Data</title>
      <link>http://www.lindesay.co.nz/blog/2017/hds-perf-bulk-data/</link>
      <pubDate>Mon, 19 Jun 2017 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2017/hds-perf-bulk-data/</guid>
      <description>The interplay between Haiku Depot Server (HDS) and the desktop application Haiku Depot (HD) is working well, but improvements could be made to both elements so that they scale-up more gracefully in the future.&#xA;Some of the initial approaches made to get things &amp;ldquo;basically working&amp;rdquo; were good decisions at the time, but can now be revisited with the luxury of being able to improve a working system in relation to increased quantities of data and users.</description>
    </item>
    <item>
      <title>Setting up the Blog with Hugo</title>
      <link>http://www.lindesay.co.nz/blog/2017/introhugo/</link>
      <pubDate>Tue, 13 Jun 2017 00:00:00 +1200</pubDate>
      <guid>http://www.lindesay.co.nz/blog/2017/introhugo/</guid>
      <description>I&amp;rsquo;ve recently migrated this web site from one that was hand-written over to use a static-generator called &amp;ldquo;Hugo&amp;rdquo;. Given the infinite variety of web sites possible, a static generator is always going to be hard-pushed to suit everybody&amp;rsquo;s needs, but Hugo seems to have been able to cater for the requirements of this simple web site quite well.&#xA;The general data-flow when using Hugo looks like this;&#xA;You author some content which is usually written up as markdown and then a set of templates or a theme can use the content to render out a web site.</description>
    </item>
  </channel>
</rss>
