19th Century Street View of Chicago

Imagine stepping straight into the heart of history – and finding yourself surrounded by the wonders of 1893. The Chicago 00 Project makes it possible, weaving authentic vintage photographs of the 1893 World’s Columbian Exposition in Chicago into a breathtaking, time-traveling Street View adventure!For example, click on the White City Court of Honor map marker, and you are transported into Maps Mania… more →
Posted in: Interactive Maps

Creating a PDF Book from Markdown with BoxLang

Recently I’ve done some blog posts on BoxLang involving Markdown and PDFs, and I was curious if I could put together something that really demonstrated a complete tool of some sort. With that in mind, I built a "book" system where you can author pages in Markdown and use a BoxLang CLI script to generate a resulting PDF. It’s more a POC than a real app, but it was pretty fun to build. Here’s what I did. Functionality At a high level, the book is created from a source of Markdown files. Each Markdown file can use front matter (data on top) to define variables that are evaluated at the time the book is created. You can also use a "global" data file to define... more →
Posted in: JavaScript

Using Cloudflare’s Browser Rendering APIs for Screenshots

I’ve been a Cloudflare fan for a while now, but have mainly focused on their Workers Serverless platform. I was aware, of course, that they did a lot more, but I just haven’t had the time to really look around and explore. Recently I was doing some investigation into "url to screenshot" services and discovered that Cloudflare had this, and not only that, it’s part of a suite of browser APIs that are really freaking awesome. Cloudflare’s Browser Rendering APIs do things like: Get the HTML of a page, but after JavaScript has executed, allowing it to get dynamic HTML Render a PDF to PDF Scrape HTML via selectors Parse out content via JSON schema (I’m absolutely... more →
Posted in: JavaScript

Find Your Birthday Tree

Every year, the city of San Francisco plants a tree to celebrate my birth. Well, not just one – each year, it plants several. So far, the city has planted 455 trees on my birthday. And now, thanks to the thoughtful residents of San Francisco, there’s an interactive map that shows the exact locations of all my birthday trees.If you’re curious, you can view the locations of all my birthday trees Maps Mania… more →
Posted in: Interactive Maps

Adding CORS to Your BoxLang APIs

CORS, or Cross-Origin Resource Sharing, has been the bane of my existence at times. Don’t get me wrong, I get the idea behind it. I get why it’s necessary. That being said, I tend to forget about it until I write some client-side JavaScript code that gets hit by it. With that in mind, I thought I’d quickly demonstrate how to build CORS-enabled APIs with BoxLang. It’s incredibly simple, which is good, but you’ll want to keep it in mind when building out your own APIs. What and Why? I’m not going to repeat the full description of CORS available from MDN, but it basically boils down to a security feature in browsers. When executing code on your domain that makes... more →
Posted in: JavaScript

The Walk Management System

🥾 The Walk Management System: I’ve decided to walk the length of the Jubilee Line on the London Underground. But before setting off, I figured I needed a WMS (Walk Management System) to help plan and document each stage of this epic hike.With a little help from ChatGPT and MapLibre GL, I’ve built a lightweight web app that lets me create, edit, and view walking routes – complete with Maps Mania… more →
Posted in: Interactive Maps

Parsing Markdown in BoxLang – Take 2

A long, long time ago, ok, it was last Thursday, I posted about adding Markdown processing to BoxLang via the Flexmark Java library. After posting it, a few folks were curious why I didn’t use the native import process instead of createObject('java', '...') and the answer was simple – I just didn’t think about it! To give you an idea of the difference, let’s first consider the initial version: function markdownToHTML(str) { // .init() is important! ds = createObject("java", "com.vladsch.flexmark.util.data.MutableDataSet","flexmark-all-0.64.8-lib.jar").init(); ps = createObject("java", "com.vladsch.flexmark.parser.Parser","flexmark-all-0.64.8-lib.jar").builder(ds).build();... more →
Posted in: JavaScript

Links For You (4/19/25)

Normally I preface these posts with little updates and such, but I’m too busy today and am sitting on what could (possibly) be good news. So, let’s just get right into the links, shall we? Translating Live Streams in Real-Time with On-Device AI Models I’ve been real excited about Chrome’s upcoming AI on device efforts, so when my buddy Todd Sharp wrote up a cool demo of it, I had to share. In his post, Todd describes using on device transcription of a video source that then makes use of Chrome’s new AI feature to perform translation on the viewer’s side. Obviously this only works in Chrome Canary, but as an option in the future when it’s mainline, this... more →
Posted in: JavaScript
1 2 3 205