[Danny Berger](https://dpb587.me/ "Home")

# Articles

Longer-form writing about a specific, probably niche, subject.

# 2026

- [**Source Offsets of HTML DOM Nodes** A smuggler's guide for capturing line+column offsets in Go.](https://dpb587.me/entries/source-offsets-of-html-dom-nodes-20260415)
- [**Learning the Hammered Dulcimer** Some notes after starting a new instrument.](https://dpb587.me/entries/learning-the-hammered-dulcimer-20260213)
- [**EARL Reports Viewer** Browse reports and tests from the browser.](https://dpb587.me/entries/earl-reports-viewer-20260127)
- [**EARL Reports and Go Tests** An earltesting package for the W3C vocabulary.](https://dpb587.me/entries/earl-reports-and-go-tests-20260114)

# 2025

- [**A Technical Coda about schema.org** Tools for investigating changes between releases.](https://dpb587.me/entries/a-technical-coda-about-schema-org)
- [**Add schema.org JSON-LD to Hugo Templates** Implementing and testing structured data for this web site.](https://dpb587.me/entries/add-schema-org-json-ld-to-hugo-templates-20251024)
- [**Intercept iOS Network Traffic with mitmproxy** Using a transparent proxy to decrypt and debug network traffic.](https://dpb587.me/entries/intercept-ios-network-traffic-with-mitmproxy-20251001)

# 2024

- [**TIFF: IFD and SubIFD** A technical investigation about some internals of TIFF files.](https://dpb587.me/entries/tiff-ifd-and-subifd-20240226)
- [**IIIF Image Requests with Go** Parsing and validating parameters for upstream routing.](https://dpb587.me/entries/iiif-image-requests-with-go-20240215)

# 2022

- [**Synology NAS and Custom Certificate Authorities** Automating certificate management for private directories with acme.sh.](https://dpb587.me/entries/synology-nas-and-custom-certificate-authorities-20220412)
- [**New Hubitat CLI for Backups and Certificates** Converting shell scripts and curl to make local management easier.](https://dpb587.me/entries/new-hubitat-cli-for-backups-and-certificates-20220216)

# 2021

- [**Using Dynamic Structs in Go and GORM** An experimental way to import arbitrary JSON into a database.](https://dpb587.me/entries/using-dynamic-structs-in-go-and-gorm-20210320)

# 2020

- [**Minikube and Bridged Networking** Exposing a VirtualBox Kubernetes cluster to the local network.](https://dpb587.me/entries/minikube-and-bridged-networking-20200411)
- [**Nested Taxonomies with Hugo** Finding ways to support content classified within hierarchies.](https://dpb587.me/entries/nested-taxonomies-in-hugo-20200309)
- [**Converting between JSON and TSV** Using jq to convert between data file formats.](https://dpb587.me/entries/converting-between-json-and-tsv-20200213)

# 2019

- [**Metalink Repositories: Stability Channels** Consistently representing both internal and external dependencies.](https://dpb587.me/entries/metalink-repositories-separation-of-concerns-20190123)

# 2018

- [**Metalink Repositories: Mirroring Third-Party Dependencies** Using metalink repositories to track upstream artifacts.](https://dpb587.me/entries/metalink-repositories-mirroring-third-party-dependencies-20181230)
- [**Metalink Repositories: Background and Motivation** Some "whys" of this alternative way to track artifacts.](https://dpb587.me/entries/metalink-repositories-background-and-motivation-20181228)
- [**New Concourse Resource for BOSH Releases** Automating tarball creation and publishing of new versions.](https://dpb587.me/entries/new-concourse-resource-for-bosh-releases-20181223)
- [**Watching Upstream Binaries with Concourse** Unifying how pipelines monitor third-party assets and versions.](https://dpb587.me/entries/watching-upstream-binaries-with-concourse-20181202)
- [**Switching from Jekyll to Hugo** Fewer dependencies, better information architecture, something new.](https://dpb587.me/entries/switching-from-jekyll-to-hugo-20181123)

# 2017

- [**Documenting Blobs with Metalink Files** A general format for documenting checksums, signatures, and origins of blobs.](https://dpb587.me/entries/documenting-blobs-with-metalink-files-20171009)

# 2016

- [**Self-Upgrading Packages in BOSH Releases, Part 2** A strategy for upgrading and testing dependencies for self-sustaining packages.](https://dpb587.me/entries/self-upgrading-packages-in-bosh-releases-part-2-20161021)
- [**Data Processing with Concourse** Scheduling data extracts, transforms, and loads through containers.](https://dpb587.me/entries/data-processing-with-concourse-20161019)
- [**Composing Configurations with JQ** Alternative methods for manifests needing more than simple variable replacements.](https://dpb587.me/entries/composing-configurations-with-jq-20160426)
- [**Writing a PHP Client for the Ravelry API** Open sourcing a library to consume the knitting-oriented API.](https://dpb587.me/entries/writing-a-php-client-for-the-ravelry-api-20160121)
- [**Experimenting with BOSH Links and Consul** Integrating consul and links metadata for inter-deployment service dependencies.](https://dpb587.me/entries/experimenting-with-bosh-links-and-consul-20160111)

# 2015

- [**Tempore limites: BOSH Veneer** Experimenting with a browser frontend to working with BOSH.](https://dpb587.me/entries/tempore-limites-bosh-veneer-20151112)
- [**Pruning Blobs from BOSH Releases** Avoiding unnecessary disk usage for old, unneeded package files.](https://dpb587.me/entries/pruning-blobs-from-bosh-releases-20150806)
- [**Self-Upgrading Packages in BOSH Releases** A strategy for monitoring upstream dependencies for self-sustaining packages.](https://dpb587.me/entries/self-upgrading-packages-in-bosh-releases-20150803)
- [**Using nginx to Reverse Proxy and Cache S3 Objects** Using S3 as an upstream server for improving long-tail traffic.](https://dpb587.me/entries/using-nginx-to-reverse-proxy-and-cache-s3-objects-20150620)
- [**New BOSH Release for OpenVPN** Open sourcing a new BOSH release for managing an OpenVPN network.](https://dpb587.me/entries/new-bosh-release-for-openvpn-20150603)
- [**Parsing Microdata in PHP** Open sourcing a library to easily traverse HTML for microdata.](https://dpb587.me/entries/parsing-microdata-in-php-20150501)
- [**Sending Work from a Web Application to Desktop Applications** Using queues and PHP to automate third-party applications running on staff workstations.](https://dpb587.me/entries/sending-work-from-a-web-application-to-desktop-applications-20150221)

# 2014

- [**Logging logging and Finding Bottlenecks** Monitoring logsearch with itself - the elasticsearch+logstash+kibana stack.](https://dpb587.me/entries/logging-logging-and-finding-bottlenecks-20141114)
- [**Colorado Aspens** A non-technical post with pictures of the changing Aspens in Colorado.](https://dpb587.me/entries/colorado-aspens-20140928)
- [**Simplifying My BOSH-related Workflows** Discussing some commands and wrappers I've been adding on top of BOSH.](https://dpb587.me/entries/simplifying-my-bosh-related-workflows-20140917)
- [**Search by Color with Elasticsearch** Some mappings, strategies, and queries for advanced color searching with elasticsearch.](https://dpb587.me/entries/color-searching-with-elasticsearch-20140424)
- [**Photo Galleries for Jekyll** Easily exporting my iPhoto album to this Jekyll-based site.](https://dpb587.me/entries/photo-galleries-for-jekyll-20140408)
- [**Distributed Docker Containers** A strategy for integrating Docker services across multiple hosts and data centers.](https://dpb587.me/entries/distributed-docker-containers-20140228)
- [**Barcoding Inventory with QR Codes** A web-centric, user-friendly approach for using barcodes in a retail shop.](https://dpb587.me/entries/barcoding-inventory-with-qr-codes-20140113)

# 2013

- [**The Basics of a Custom Search Engine** Combining elasticsearch and "structured data" to create a self-hosted search engine.](https://dpb587.me/entries/search-engine-based-on-structured-data-20130601)
- [**ti-debug: For Debugging Server Code in the Browser** Making it easier to debug languages like PHP and Python with only a browser.](https://dpb587.me/entries/ti-debug-a-browser-debugger-for-server-code-20130516)
- [**Structured Data with schema.org** Ensuring content is useful to both humans and robots.](https://dpb587.me/entries/structured-data-with-schema-org-20130513)
- [**Embeddable and Context-Aware Web Pages** Embedding content in an absolutely relative manner.](https://dpb587.me/entries/embeddable-and-context-aware-web-pages-20130507)
- [**New Website for The Loopy Ewe** A summary of the customer-facing changes I worked on for the site.](https://dpb587.me/entries/new-website-for-the-loopy-ewe-20130427)
- [**Bank Card Readers for Web Applications** Scanning credit cards into website forms.](https://dpb587.me/entries/bank-card-readers-for-web-applications-20130323)
- [**Using HTML Headers with wkhtmltopdf** Experimenting with dynamic HTML headers for PDFs.](https://dpb587.me/entries/using-html-headers-with-wkhtmltopdf-20130315)
- [**Comparing PHP Application Definitions** Identifying how classes/interfaces changed between versions.](https://dpb587.me/entries/comparing-php-application-definitions-20130307)
- [**Path-based tmpfile in PHP** When paths are more useful than resources.](https://dpb587.me/entries/path-based-tmpfile-in-php-20130305)
- [**A Generic Storage Interface** Abstracting file storage, whether it's local or cloud.](https://dpb587.me/entries/a-generic-storage-interface-20130301)
- [**Using Facter in Ant Scripts** Reusing facts from build scripts.](https://dpb587.me/entries/using-facter-in-ant-scripts-20130219)
- [**Automating Backups to the Cloud** Combining gpg, Amazon S3 and IAM policies.](https://dpb587.me/entries/automating-backups-to-the-cloud-20130208)
- [**Scripting Endicia to Purchase Postage** Automating user interactions with AppleScript.](https://dpb587.me/entries/scripting-endicia-to-purchase-postage-20130128)
- [**OpenGrok CLI** Making it easier to search code from the command line.](https://dpb587.me/entries/opengrok-cli-20130121)
- [**Terminating Gearman Workers in PHP** Locally and remotely stopping workers without interrupting jobs.](https://dpb587.me/entries/terminating-gearman-workers-in-php-20130114)
- [**Secure Git Repositories** Seamless data encryption of repository files.](https://dpb587.me/entries/secure-git-repositories-20130107)

# 0001

Copyright © 2026 // [dpb587.me](https://dpb587.me/) is a [personal](https://dpb587.me/projects/website), [open source](https://github.com/dpb587/dpb587.me/blob/main/content/topic/articles.md) site.
