Categories
Good Causes Programming What I’m Up To

Retake the Lake: A Chrome browser plug-in that corrects “Lake America” to “Lake Ontario”

I opened Google Maps today and scrolled northward to the old hometown of Toronto to see if the news reports were actually true. Unfortunately, it was. The big blue blob between Toronto and Rochester was incorrectly labelled Lake America.

Randy Jackson saying “That’s gonna be a NO from me, dawg.”

The U.S. changed the name in its own GNIS database in August following an executive order from the most petty of presidents. Google, which ties place names to each country’s official source, dutifully (and boot-licking-ly) started showing the new one to users with US IP addresses. If you’re in Canada and you view Lake Ontario in Google Maps, you’ll still see its proper name. Everyone outside the US sees both.

I’m in Tampa, which is in Florida (“the America of America”), so I got the new, incorrect name.

So I did what any reasonable person with VS Code, programming skills and a history of hacktivism would do. I wrote a Chrome extension.

It’s called Retake the Lake, it’s on GitHub, and building it turned out to be a much better story than I’d expected. There’s a genuinely interesting programming wall smack-dab in the middle of it.

What Retake the Lake does

  1. On regular web pages, it rewrites “Lake America” back to the proper, correct, and non-idiotic “Lake Ontario.”
  2. On Google Maps, it floats a clickable badge over the lake with a short explanation of where the real name comes from.

That second one exists because of the wall I mentioned earlier, which I’ll cover a little later.

Part one: Replacing text is easy, right?

In theory, it is: You traverse the DOM, find text nodes, run a regex, and Bob’s your uncle. I’ve written this a hundred times, and if you’re a reader of this blog, you probably have too.

But it didn’t work on Google Maps’ search results, and I remembered why this is never as easy as it looks. Maps bolds your query inside the suggestion, so the markup is:

Lake <b>America</b>

In the example above, there’s no text node containing “Lake America.” There’s a node containing Lake and a different node inside a <b> containing America. A per-node replacer will completely miss it.

The fix is to stop thinking in nodes and start thinking in runs. Gather up adjacent text nodes that share a block-level ancestor, glue them into one string, run the match on that, then redistribute the result back across the original nodes. The end result is that the whole replacement lands in the first node the match touches, and the later ones give up their share.

The “block-level ancestor” part is key. Without it you’d happily join these two paragraphs:

<p>Visit the Lake</p>
<p>America is big</p>

…and produce something nobody asked for.

A bonus bug I nearly shipped

Early on, my rules were a list, applied in order:

["Lake America", "Lake Ontario"]
["Lake Ontario", "Lake Joey"] // don't ask

Run those sequentially on the same string and watch what happens: “Lake America” becomes “Lake Ontario” which the next rule immediately turns into “Lake Joey” (my original plan was to do the Trump thing and simply rename the lake after me). The rename cascades straight through the thing you were renaming it to.

The fix is to compile every rule into a single alternation regex and do exactly one pass, so each matched span is consumed once and never re-examined. Order stops mattering. It’s the kind of bug that’s obvious in hindsight and invisible while you’re in the zone.

Part two: The wall

And now, Google Maps.

You cannot change the label on the map. Not with this extension, not with any extension, not with a clever hack you’re about to suggest in the comments.

Google renders the basemap with WebGL vector tiles. That label’s not text. It’s also not isn’t a DOM node, nor is it alt attribute, and it isn’t a 2D canvas fillText() call you could monkey-patch. It’s glyph geometry uploaded to your GPU and painted as textured quads. By the time it reaches your eyeballs it has exactly as much “text” in it as the water underneath it; in other words: none. It’s all pixels.

Forcing raster tiles doesn’t work, either. Those are server-rendered PNGs with the label already baked in.

So updating the map label isn’t an option. That left me with everything around the map label: the sidebar heading, search results, autocomplete, the browser tab title, and aria-label text on the controls. Those are all DOM, and the rewriter fixes all of them.

This takes me to the badge.

How do you draw on a map you can’t read?

Without the ability to edit Lake Ontario’s label, I went for the next-best thing: putting something next to it. That brings about this fun question: How do you position an overlay on a map you can’t query?

You can’t ask Maps where the lake is. There’s no DOM to inspect and no API surface pointed at the renderer.

Fortunately, Google puts the answer in the URL:

/maps/@43.70,-77.90,8z

The first number after /maps/@ is the latitude of the centre of Lake Ontario. The number after that is the longtiude of that cenre. And finally, the last number, which is immediately followed with a z is the zoom level. Center latitude, center longitude, zoom. That’s everything you need, because Web Mercator is just simple math:

const world = 256 * Math.pow(2, zoom);
x = world * (lng + 180) / 360;
y = world * (0.5 - Math.log(Math.tan(Math.PI/4 + lat/2)) / (2*Math.PI));

Project the lake’s center, project the view’s center, subtract, and add the difference to the middle of the viewport, and that’s where the badge goes.

Project the lake’s bounding box the same way and you also know whether it’s on screen at all, so the badge only appears when there’s actually a Lake Ontario to point at. The badge also clamps to the visible edge when you’re zoomed into one end.

Reality rears its ugly head in two places, and both became features:

  1. Maps only rewrites the URL after a gesture settles. So during a drag or zoom, my position data is stale and the badge would slide across the water a beat behind your cursor. The solution was to hide the badhe during the drag. It reappears  about 350ms after the user stops fiddling with the map.
  2. Tilted and satellite views break the math. Those URLs carry a camera altitude (,1500m) or a tilt angle (,45t) instead of a plain zoom, and flat Mercator no longer describes what’s onscreen. The badge refuses to draw. It’s better to show nothing that to confidently point at the wrong lake.

The same trick, incidentally, works for anything geographic. Point the config at different coordinates and the badge follows.

The one-character bug that ate an element

Let me leave you with my favorite mistake of the whole build.

While restyling the badge, I edited the opening tag and lost a single >:

<div class="pin" id="pin" role="button"
aria-label="Note about this lake"
<span class="mark">i</span><span>Lake Ontario</span>
</div>

The badge still rendered. But the little white circular i chip vanished, replaced by a naked lowercase letter.

Here’s why, and it’s delightful. Without the closing bracket, the parser never leaves the tag. It keeps reading attributes — and <span is a perfectly acceptable attribute name as far as the HTML parser is concerned. So is class="mark". The tag finally closes on the > that was supposed to end the span’s opening tag. The span is eaten into the div’s attribute list and never becomes an element at all, so the CSS rule styling it matches nothing.

Inspect the element and you can see the crime scene: a stray <span sitting in the attribute list like it belongs there.

HTML’s error recovery is so determined to give you something that it will quietly digest an entire element rather than admit you made a typo.

Get Retake the Lake!

Do you want to try Retake the Lake in Chrome? Follow these steps:

  1. Download this .zip file, retake-the-lake-v1.0.1.zip, into a folder that you’re not going to delete (such as your Documents folder).
  2. Unzip the file to reveal the retake-the-lake folder.
  3. Open a new tab in Chrome and go to chrome://extensions.
  4. Turn on Developer mode by setting the Developer mode switch near the upper right corner of the screen to the “on” position.
  5. Click the Load unpacked button near the upper left corner of the screen and select the retake-the-lake folder.

Do you want to see the source code for Retake the Lake? It’s on Github at github.com/AccordionGuy/retake-the-lake. It’s MIT licensed.

Pull requests are welcome, especially if you’d like to add the other four Great Lakes to the config before Orange Julius Caesar gets any more ideas.

 

Categories
Security What I’m Up To

A new “back of the envelope” drawing for NetFoundry’s new “Reachability Watch”!

Here’s my latest “back of the envelope” drawing, which I drew as a companion for a new NetFoundry series called Reachability Watch.

Published fortnightly, Reachability Watch covers the volume of new network-exploitable CVEs, the handful that clear a CVSS 8.6 bar, whatever KEV actually caused damage that period, and a running tally so the trend line becomes visible over time.

The drawing features this edition’s highlighted KEV. More formally known as CVE-2026-72898, it’s what I call “BYOK: bring Your Own Key,” because that’s essentially what the exploit does. You hand Metabase’s password-reset endpoint an extra user-id key it never asked for, nobody strips it, and it rides all the way into the SQL query.

Read it here:
https://netfoundry.io/reachability-watch/reachability-watch-cve-kev-tracker-2026-08-14/

Categories
Music What I’m Up To

My new synth arrived: The M-VAVE FM-1

Murphy’s Law strikes: Just before I’m about to leave for the weekly Tuesday happy hour for beer with the neighbors, the synth I ordered arrives. And a day early, too (this is beginning to sound like one of those “My steak is too juicy and my lobster too buttery” kind of complaints)!

The synth in question is pictured above: an FM-1 desktop synth made by a company called M-VAVE. For a mere US$79, it emulates the Yamaha DX7, the most 1980s of all the 1980s synths…

…but now in a package that’s slightly smaller than a VHS cassette.

I’ll post a review later, but since I have to run, I’ll post this guy’s review instead:

 

Categories
Editorial What I’m Up To

Global Nerdy is 20 years old today!

The stats

Since that I posted that first article on August 16, 2006 to Global Nerdy, it’s been…

  • 20 years
  • 2 blogging platforms (Blogware, then WordPress)
  • 11 million pageviews
  • Almost 5,000 articles (this one will be number 4,989)
  • 2 cities/countries:
    • Toronto, Ontario, Canada 2006 – 2014
    • Tampa, Florida, U.S.A. 2014 – present

…and of course, one helluva blogging adventure!

The name

I didn’t come up with the name; at least not directly. It was generated by a program I wrote, The Duke of URL, which demonstrated the “namespinner” API made by Tucows, where I was working as their developer advocate. You enter some keywords into the app, and it presented you with a list of suitable and available domain names.

One of the available domain names it presented was globalnerdy.com. The name was a little ridiculous; it sounded like the sort of thing made by whoever comes up with names for Japanese role-playing videogames. But it was kind of catchy and I decided to go with it.

The eras

To close (I’d love to write more, but today’s a busy day for me), some photos from this blog throughout the years…

A collage of the people from Toronto’s BarCamp/DemoCamp scene in the 2000s.
Developer dim sum lunch with Libin Pan and Reg Braithwaite.
With Amber Mac and Leo Laporte at a developer event in Toronto’s Liberty Village.
Onstage at the evening keynote at RailsConf 2006.
Danny O’Brien, Cory Doctorow, and me at Cory’s wedding.
On my second week on the job at Microsoft with Jeff “Coding Horror” Atwood.
Richard M. Stallman is clearly attracted to me because he’s playing with his hair.
With “Junior” my puppet friend from my short-lived children’s show. See the video below!

The world’s only Windows Phone-branded accordion!
Photo: Joey deVilla and Steve Ballmer, who is wearing a Canadian flag hat
Steve Ballmer ran up to my table and borrowed my hat at the Canadian Windows 7 launch.
Visiting some of my professors! First, Dr. Michael Levison, who ran the Computer Science department at Crazy Go Nuts University…
…and Dr. Robin Dawes, from whom I learned a lot about algorithms and data structures.
Ah, the Windows Phone days…

"I Want to Believe" poster from "The X-Files", with the flying saucer replaced by a giant Windows Phone

 

Going to BarCamp Tampa changed my life; that’s where I met Anitra!
Photo: From left to right, Joey deVilla (with accordion), Lyssa Adkins, Alistair Cockburn, and Anitra Pavka smile at an Agile Social party at Copper Shaker, St. Petersburg, Florida, December 17, 2018.
With Lyssa Adkins, Alistair Cockburn, and Anitra at Alistair’s birthday.
Anitra and I have co-presented a number of talks.
Cyber school during the pandemic was a wild experience!
I began the 2020s at Auth0…
Meeting Steve Wozniak at the first Civo Navigate.
For a little bit, I was the AI go-to guy on local Tampa news.
Presenting at BSides Tampa!

Joey de Villa’s NetFoundry business card
…and now I’m at NetFoundry!
Categories
Podcasts Video What I’m Up To

I’m on “This Week in Tech” this Sunday, August 16!

I’m back on the TWiT podcast this Sunday! As usual, it will livestream at 5 p.m. Eastern / 2 p.m. Pacific / 2100 UTC, and you can watch it live, or…

you can always catch the recorded version on YouTube on Monday on the This Week in Tech YouTube channel.

This will be my fourth appearance on This Week in Tech for 2026. Here are my other three episodes…

January 4, 2026 with Dan Patterson, Sr/ Director of Content @ Blackbird.AI:

June 7, 2026 with Jeff Jarvis and Father Robert Bellecer:

 

Categories
Conferences Editorial Meetups Tampa Bay What I’m Up To

Tampa Bay’s “Scenius” and 813 Tech Day

813 Tech Day happens in Tampa this Thursday, and whether you plan to attend (I’ll be at the Hotel Haya and Sapphire events) or observe from afar, keep this word in mind: Scenius.

What is scenius?

Scenius is a portmanteau of the words scene and genius, and it was coined by musician, music producer, and visual artist Brian Eno to describe the extreme creativity that groups, places, or “scenes” can generate.

Eno came up with the term as a way of countering the pervasive myth of the Lone Genius: the idea that innovation comes from a small, select set of Chosen Ones:

Brian Eno. Creative Commons photo by Algemene Vereniging Radio Omroep (AVRO). Tap the image to see its source.

Just as genius is the creative intelligence of an individual,” he says in the video, “scenius is the creative intelligence of a community.

Here’s Eno’s expanded definition of scenius, courtesy of Eno:

“Scenius stands for the intelligence and the intuition of a whole cultural scene. It is the communal form of the concept of the genius.”

…I thought that originally those few individuals who’d survived in history – in the sort-of “Great Man” theory of history – they were called “geniuses”. But what I thought was interesting was the fact that they all came out of a scene that was very fertile and very intelligent.

So I came up with this word “scenius” – and scenius is the intelligence of a whole… operation or group of people. And I think that’s a more useful way to think about culture, actually. I think that – let’s forget the idea of “genius” for a little while, let’s think about the whole ecology of ideas that give rise to good new thoughts and good new work.”

Historical examples of scenius

Here are some examples of scenius, where the collective smarts, creativity, and passion of a group of people coming together to do great things is greater than the sum of its parts:

What conditions does scenius need?

Kevin Kelly

Kevin Kelly, founding editor of Wired and former editor and publisher of the Whole Earth Review, wrote that the geography of scenius is nurtured by several factors:

  • Mutual appreciation: Risky moves are applauded by the group, subtlety is appreciated, and friendly competition goads the shy. Scenius can be thought of as the best of peer pressure.
  • Rapid exchange of tools and techniques: As soon as something is invented, it is flaunted and then shared. Ideas flow quickly because they are flowing inside a common language and sensibility.
  • Network effects of success: When a record is broken, a hit happens, or breakthrough erupts, the success is claimed by the entire scene. This empowers the scene to further success.
  • Local tolerance for the novelties: The local “outside” does not push back too hard against the transgressions of the scene. The renegades and mavericks are protected by this buffer zone.
Austin Kleon
By Larry D. Moore, CC BY 4.0

Here’s what Austin Kleon, a writer and artist whose ideas have been adopted by the tech community, has to say about scenius:

Under this model, great ideas are often birthed by a group of creative individuals—artists, curators, thinkers, theorists, and other tastemakers—who make up an “ecology of talent.” If you look back closely at history, many of the people who we think of as lone geniuses were actually part of “a whole scene of people who were supporting each other, looking at each other’s work, copying from each other, stealing ideas, and contributing ideas.” Scenius doesn’t take away from the achievements of those great individuals: it just acknowledges that good work isn’t created in a vacuum, and that creativity is always, in some sense, a collaboration, the result of a mind connected to other minds.

What I love about the idea of scenius is that it makes room in the story of creativity for the rest of us: the people who don’t consider ourselves geniuses. Being a valuable part of a scenius is not necessarily about how smart or talented you are, but about what you have to contribute—the ideas you share, the quality of the connections you make, and the conversations you start. If we forget about genius and think more about how we can nurture and contribute to a scenius, we can adjust our own expectations and the expectations of the worlds we want to accept us. We can stop asking what others can do for us, and start asking what we can do for others.

How do we grow Tampa’s scenius?

The short answer is: By showing up and participating in events like 813 Tech Day!

While the elements of scenius are in place for Tampa Bay’s tech scene, there’s still some way to go before Tampa can match places like Nashville (whose tech scene is bigger than you might think) never mind places like Austin, Charlotte, Indianapolis, and Raleigh.

The success or failure of Tampa’s tech scenius depends on us, the Tampeños who work in tech, creative, and related industries.

I’m originally from Toronto. While it has one of the hottest tech scenes in North America today, it wasn’t always that way.

While the city did launch some initiatives to change this, what truly made the difference was Toronto’s own tech community stepping up and organizing. We held events of all sizes, from regular meetups and user group meetings at pubs and lecture halls to independent conferences like MeshRubyFringe and FutureRuby to tech “camp” events to big corporate gatherings put on by the likes of the Canadian subsidiaries of IBM and Microsoft. We built places to get together, from hackerspaces such as Hacklab.TO (where I met Chris Olah as a young teenager; he’d go on to co-found Anthropic)…

…and Site3 coLaboratory to the MaRS Centre. In my work as a developer evangelist for Microsoft, I’ve met many students at Toronto’s fine universities and colleges, and they’re eager to crank out the ‘wares, both hard and soft, and they’re bright as all get-out. We built a great community bound together by cooperation, a strong social media scene and good old-fashioned face-to-face meetings. We got stuff done, and the stuff we did traveled far and wide. We built Toronto’s tech scenius, and it put the city on the map.

Can Tampa do the same? I believe so; it’s just up to us.

And now, 813 Tech Day!

Thursday, August 13, or 8/13, is 813 Tech Day. Brought to you by the folks behind Tampa Bay Tech Week and 727 Tech Day, it’s one day of sessions, discussions, workshops, get-togethers, and networking for Tampa Bay’s tech community, held in Tampa.

There’ll be value in what the presenters show and what the panelists say, but the real gold will be in simply showing up and meeting other people you might not have otherwise met and gaining ideas and inspiration you might not have otherwise had.

Or, as the saying goes, 80% of success is showing up. (In fact, you might want to read this recent article of mine about how showing up paid off for me.)

So show up at 813 Tech Day!

Want to know more about 813 Tech Day?

Recommended reading/viewing

Here’s another video with Brian Eno talking about scenius:

Genius Vs Scenius: You Don’t Need To Be Extraordinary To Create Extraordinary Things:

Here’s Austin Kleon’s talk, Steal Like an Artist, which has some elements in it that would later lead to him writing about scenius:

Also by Austin Kleon:

 

Other writing:

Categories
Artificial Intelligence Process What I’m Up To

How I explain how I use AI in my presentations

Pictured above is my standard AI usage disclosure slide, which I include in all my slide presentations these days. It’s gives the audience a quick overview of how I prefer to use AI when putting a talk together.

Here’s the text:

This strategy presentation was developed using AI assistance (Claude, ChatGPT, and Gemini) for:

  • Research: Market trend analysis and competitive landscape review
  • Editing: Grammar, clarity, and flow optimization
  • Ideation assistance: Testing ideas and generating new ones, because no matter how creative you are, it’s impossible to come up with a list of things you’d never think of.

The main contents — including strategic insights, tactical recommendations, specific positioning, and any em-dashes (option-shift-minus on Mac, alt + 0151 on Windows, Google “em dash” and copy and paste it on Linux) — were developed based on analysis of the interview materials and 15+ years of experience in the industry.

I suppose I should also include something about being too much of an egomaniac to let a word prediction machine outshine me. My relationship with LLMs is sort of like the relationship between Dr. Niles “Chief” Caulder (who formed the Doom Patrol) and Batman, as pictured in Batman/Superman: World’s Finest (2022), issue 2: