<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>KISDigital</title>
<link>https://kisdigital.com</link>
<description>Deep dives into ColdFusion, Lucee, and BoxLang — modern CFML development, runtime internals, and the future of the JVM web stack.</description>
<language>en-us</language>
<lastBuildDate>Sun, 05 Apr 2026 15:47:52 +0000</lastBuildDate>
<atom:link href="https://kisdigital.com/rss" rel="self" type="application/rss+xml"/>
<item>
<title>Stop Memorizing rsync Flags: Use a Wrapper Instead</title>
<link>https://kisdigital.com/posts/2026/04/stop-memorizing-rsync-flags-use-a-wrapper-instead</link>
<description>`rsync-profiles` is a simple bash wrapper that replaces long, error-prone `rsync` commands with named profiles. Define your source, target, and exclusions in an INI-style config file, then sync with a single command like `rsync-profiles myprofile`. It supports remote servers via SSH, dry-run previews, custom rsync flags, and profile listing. Great for anyone tired of fat-fingering remote paths or digging through bash history to find that one sync command they ran three months ago.</description>
<pubDate>Thu, 02 Apr 2026 18:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2026/04/stop-memorizing-rsync-flags-use-a-wrapper-instead</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/cms/2026/stop-memorizing-rsync-flags-2.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>Building a better spider</title>
<link>https://kisdigital.com/posts/2026/03/building-a-better-spider</link>
<description>Robert evolved a web scraping service over several years to extract link metadata (Open Graph, Twitter Cards, oEmbed, JSON-LD) for social sharing features, progressively hardening it against bot detection, timeouts, and SSL errors. The latest version uses a multi-layered extraction strategy—rotating user-agents, disabling certificate validation, adding browser headers only for non-bot UAs to maximize successful extraction.</description>
<pubDate>Tue, 24 Mar 2026 18:30:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2026/03/building-a-better-spider</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/cms/2026/building-a-better-spider.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>CBWire: Computed vs Data Properties</title>
<link>https://kisdigital.com/posts/2026/03/cbwire--computed-vs-data-properties</link>
<description>CBWire uses data properties for reactive state that persists between requests and supports two-way binding, making them ideal for form inputs and user interactions. Computed properties are read-only, derived values that are automatically cached per request, perfect for expensive operations like database queries or calculations that depend on data properties.</description>
<pubDate>Tue, 24 Mar 2026 18:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2026/03/cbwire--computed-vs-data-properties</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/images/2022/06/commandbox.png" type="image/jpeg" length="0"/>
</item>
<item>
<title>So I wrote a forum application in BoxLang</title>
<link>https://kisdigital.com/posts/2026/03/so-i-wrote-a-forum-application-in-boxlang</link>
<description>Robert shares his experience building DismalThreads, a modern forum application that evolved from his 2022 project renegade-forums. He rewrote it using BoxLang 1.0 and CBWire, a ColdBox module that enables reactive interfaces without JavaScript. He prefers CBWire over frameworks like Vue or React since it uses plain CFML. The site features nested comments, infinite scrolling feeds, notifications, and supports both text and link posts with automatic metadata retrieval.</description>
<pubDate>Fri, 20 Mar 2026 18:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2026/03/so-i-wrote-a-forum-application-in-boxlang</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/cms/2026/dt-home.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>Using BoxLang to process CSV files and push data to an API endpoint</title>
<link>https://kisdigital.com/posts/2026/03/using-boxlang-to-process-csv-files-and-push-data-to-an-api-endpoint</link>
<description>A vendor sent bulk data as Excel instead of JSON, conflicting with an API endpoint&apos;s small-payload limit. A quick BoxLang CLI script parsed the CSV, handled Excel currency formatting, and chunked the output into 100-row JSON files. A second script POSTed each file to the endpoint with SHA-1 auth headers. Total time: ~15 minutes. BoxLang&apos;s command-line scripting made it a natural fit for the job.</description>
<pubDate>Thu, 19 Mar 2026 18:15:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2026/03/using-boxlang-to-process-csv-files-and-push-data-to-an-api-endpoint</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/cms/2026/csv-to-api.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>It has been quiet around here lately</title>
<link>https://kisdigital.com/posts/2026/03/it-has-been-quiet-around-here-lately</link>
<description>A development folder wipe led to rebuilding this site as Chronicler, a BoxLang/ColdBox 8/CBWire 5 app named after the scribe in Rothfuss&apos;s Kingkiller Trilogy. It replaces a static site with a lightweight CMS featuring a CBWire-powered post editor, enabling writing from anywhere. Source release planned once polished.</description>
<pubDate>Thu, 19 Mar 2026 18:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2026/03/it-has-been-quiet-around-here-lately</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/cms/2026/chronicler.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>A few updates for September</title>
<link>https://kisdigital.com/posts/2025/09/a-few-updates-for-september</link>
<description>Introducing bx-setup and boxlang-ssg updates</description>
<pubDate>Mon, 01 Sep 2025 18:30:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2025/09/a-few-updates-for-september</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/ssg/2025/construction.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>Boxlang SSG</title>
<link>https://kisdigital.com/posts/2025/08/boxlang-ssg</link>
<description>A static site generator written in Boxlang</description>
<pubDate>Mon, 25 Aug 2025 14:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2025/08/boxlang-ssg</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/ssg/2025/boxlang-ssg.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>Running API-to-CSV Scripts with BoxLang</title>
<link>https://kisdigital.com/posts/2025/08/running-api-to-csv-scripts-with-boxlang</link>
<description>Quick and easy CSV generation with Boxlang CLI</description>
<pubDate>Thu, 21 Aug 2025 18:30:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2025/08/running-api-to-csv-scripts-with-boxlang</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/ssg/2025/api-to-csv.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>Chunking an Array with ColdFusion Redux</title>
<link>https://kisdigital.com/posts/2025/07/chunking-an-array-with-coldfusion-redux</link>
<description>Revisiting chunking ColdFusion arrays in 2025</description>
<pubDate>Fri, 18 Jul 2025 17:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2025/07/chunking-an-array-with-coldfusion-redux</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/images/chunking-an-array-with-coldfusion-revisited/00_cover.jpeg" type="image/jpeg" length="0"/>
</item>
<item>
<title>Shopify GraphQL query example</title>
<link>https://kisdigital.com/posts/2025/01/shopify-graphql-query-example</link>
<description>Robert shows how to query Shopify GraphQL Admin API</description>
<pubDate>Thu, 23 Jan 2025 05:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2025/01/shopify-graphql-query-example</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/ssg/2025/graphql.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>Serving static HTML content with CommandBox multi-server</title>
<link>https://kisdigital.com/posts/2024/12/serving-static-html-content-with-commandbox-multi-server</link>
<description>Robert explains configuring CommandBox multi-server to serve HTML files</description>
<pubDate>Tue, 10 Dec 2024 23:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2024/12/serving-static-html-content-with-commandbox-multi-server</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/images/2022/06/commandbox.png" type="image/jpeg" length="0"/>
</item>
<item>
<title>Parsing and Formatting ISO 8601 Time Intervals with CF</title>
<link>https://kisdigital.com/posts/2024/06/parsing-iso-8601-time-intervals-with-cf</link>
<description>Robert explains using ColdFusion to parse and format ISO 8601 time intervals</description>
<pubDate>Fri, 14 Jun 2024 22:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2024/06/parsing-iso-8601-time-intervals-with-cf</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/ssg/2024/time.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>Scraping Recipes Using ColdFusion</title>
<link>https://kisdigital.com/posts/2024/06/scraping-recipes-using-coldfusion</link>
<description>Robert explains using ColdFusion to scrape recipes and return as API data</description>
<pubDate>Thu, 13 Jun 2024 22:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2024/06/scraping-recipes-using-coldfusion</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/ssg/2024/dog-cooking-in-the-kitchen.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>Setting up your first BoxLang Server</title>
<link>https://kisdigital.com/posts/2024/05/setting-up-your-first-boxlang-server</link>
<description>Robert explains quickly spinning up a BoxLang server</description>
<pubDate>Fri, 17 May 2024 22:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2024/05/setting-up-your-first-boxlang-server</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/images/2022/06/commandbox.png" type="image/jpeg" length="0"/>
</item>
<item>
<title>The Law of Unintended Consequences</title>
<link>https://kisdigital.com/posts/2024/05/the-law-of-unintended-consequences</link>
<description>Robert explains how he broke XML rendering in commandbox-ssg</description>
<pubDate>Fri, 03 May 2024 22:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2024/05/the-law-of-unintended-consequences</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/ssg/2024/law-of-unintended-consequences.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>Tidying up HTML with jSoup: Part Deux</title>
<link>https://kisdigital.com/posts/2024/05/tidying-up-html-with-jsoup-part-deux</link>
<description>Robert shows how to impliment tidy HTML using jSoup, again</description>
<pubDate>Wed, 01 May 2024 22:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2024/05/tidying-up-html-with-jsoup-part-deux</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/ssg/2024/robot-cleaning.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>Tidying up HTML with jSoup</title>
<link>https://kisdigital.com/posts/2024/04/tidying-up-html-with-jsoup</link>
<description>Robert shows how to impliment tidy HTML using jSoup</description>
<pubDate>Wed, 24 Apr 2024 22:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2024/04/tidying-up-html-with-jsoup</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/ssg/2024/dog-writing.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>Setting up a server with CommandBox 6</title>
<link>https://kisdigital.com/posts/2024/04/setting-up-a-server-with-commandbox-6</link>
<description>Robert demonstrates setting up a new Ubuntu multi-site server with CommandBox 6</description>
<pubDate>Fri, 05 Apr 2024 22:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2024/04/setting-up-a-server-with-commandbox-6</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/ssg/2024/dog-working.jpg" type="image/jpeg" length="0"/>
</item>
<item>
<title>Prevent multiple YouTube videos playing simultaneously</title>
<link>https://kisdigital.com/posts/2024/03/prevent-multiple-youtube-videos-playing-simultaneously</link>
<description>Robert demonstrates using the iFrame YouTube player API to prevent multiple YouTube videos from playing on a page</description>
<pubDate>Sun, 10 Mar 2024 22:00:00 +0000</pubDate>
<guid isPermaLink="true">https://kisdigital.com/posts/2024/03/prevent-multiple-youtube-videos-playing-simultaneously</guid>
<author>robert@kisdigital.com (Robert Zehnder)</author>
<enclosure url="https://static.kisdigital.com/ssg/2024/dog-watching-youtube.jpg" type="image/jpeg" length="0"/>
</item>
</channel>
</rss>
