As I continue to dig into Leaflet, I was recently asked about custom markers based on data, so for example, some locations for a store may use one icon while others use another. I did some digging, and while it turns out Leaflet has deep support for customizing markers, it does take a little bit of work. Here's what I found.First off, this is the...
Green Day collaborated with BRAIN to demake their 1994 album in 15 obscure formats, including Game Boy, Teddy Ruxpin, wax cylinder, and player piano roll #
otterwiki It's been a while since I've seen a new-ish Wiki implementation, and this one by Ralph Thesen is really nice. It's written in Python (Flask + SQLAlchemy + mistune for Markdown + GitPython) and keeps all of the actual wiki content as Markdown files in a local Git repository. The installation instructions are a little in-depth as they...
Let d(n) be the number of divisors of an integer n. For example, d(12) = 6 because 12 is divisible by 1, 2, 3, 4, 6, and 12. The function d varies erratically as the following plot shows. But if you take the running average of d f(n) = (d(1) + d(2) + d(3) + […] The post Average number of divisors first appeared on John D. Cook.
My initial thought when reading this was “this is just stupid”. Then I thought about the added complexity involved over just mirroring the display, and I thought it was probably a great idea UX-wise (on the lines of Continuity), but, in the end, I still think it’s a profoundly stupid implementation, for the following reasons: Screen mirroring...
We are continuing from the first part of our Chapter 7 review. Serializable isolation ensures that the final result of concurrent transactions is equivalent to if they had been run one at a time, without any concurrency. This eliminates any concurrency anomalies, since it ensures the transactions would behave as they would in a sequential...
Accumulated test vectors make it possible to run large sets of random known-answer tests without checking in large assets.
Back in ancient Greece, a well-known philosopher named Heraclitus said something that still rings true today:"The only constant in life is change."Numerous software engineers find this statement deeply relatable.Imagine you're a software engineer. You've just gotten comfortable with a particular set
Table of Contents I was nerd-sniped. Out of the blue, a friend asked me, If you would build an in-memory cache, how would you do it? It should have good performance and be able to hold many entries....
openai/openai-realtime-console I got this OpenAI demo repository working today - it's an extremely easy way to get started playing around with the new Realtime voice API they announced at DevDay last week: cd /tmp git clone https://github.com/openai/openai-realtime-console cd openai-realtime-console npm i npm start That starts a localhost:3000...
PHP is a powerful scripting language widely used for web development, but like any language, it’s easy to run into errors that can be frustrating to debug. While some errors are simple and easy to fix, others may be a little more complex. This article covers some of the most common PHP errors and offers solutions to help you resolve them quickly....
In this blog post series, I am going to explore the vulnerabilities in the OWASP API Security Top 10. For each entry, I’ll show you how to perform experiments on APIs to test for the vulnerability, and I’ll discuss my observations.
OOP is certainly not my favorite paradigm, but I think mainstream statically-typed OOP does a few things right that are very important for programming with many people, over long periods of time. In this post I want to explain what I think is the most important one of these things that the mainstream statically-typed OOP languages do well. I will...
I just finished up the first weekend of my vintage computer exhibit for Portland Design Month entitled When Having a Computer Was Weird: A showcase of early personal computers. I had two fun groups of visitors and I plan to run another date on October 18, plus others as time permits and interest demands.
At Homebrew Writing Club yesterday, someone asked “What is the writing equivalent of a duet?” I explore this concept with reference to collaborative writing, then extend the idea further of applying musical metaphors to writing. This led to thinking about the literary equivalent of playlists, remixing, and more. My thoughts are in the voice note...
Every vacant plot could be a home, park, market, garden, farm...
html from links, adventure James' Coffee Blog mascot from links, adventure: № 1 october 9th, 2024 by James' Coffee Blog. 1. Designing for Users with Anxiety by the United Kingdom Government 2. Garfield: September 18th, 2024 by Jim Davis 3. A quote on words by Ursula K. Le Guin 4. Contronym on Wikipedia 5. Color Hunt A colour palette directory
When I am designing technology, I like to think about how fast I can make the experience. This involves making conscious engineering decisions at the beginning of a project to lay the foundation for building a fast application (i.e. choosing the right data structures). Then, as I develop, I ask questions like “is this as fast as it should be,...
Framing Rust’s design goals Rust has been kicking around the idea of design goals, under various names, for some time. Design goals are useful because they give everyone making product decisions a common language and set of priorities to appeal to. If done well, they would accumulate the design wisdom of Rust into a concise package and assist RFC...
If we had $1,000,000… Jacob Kaplan-Moss gave my favorite talk at DjangoCon this year, imagining what the Django Software Foundation could do if it quadrupled its annual income to $1 million and laying out a realistic path for getting there. Jacob suggests leaning more into large donors than increasing our small donor base: It’s far easier for me...
Mastodon 4.3 released today with a bunch of features but the one most people, including me, are excited about is author tags - this isn't the name of them but they also don't seem to have a proper name as far as I can tell. Anyway, you need to do two things to get the "More from X" section you can see in the screenshot above. The first is to add...
Today, we launched the Open Source Pledge. Virtually all companies use Open Source software, making the Open Source ecosystem crucial to virtually all of the technology we use. That Open Source software is created and supported by maintainers. But the companies that use Open Source software almost never pay the maintainers anything. This means...
Today, we launched the Open Source Pledge. Virtually all companies use Open Source software, making the Open Source ecosystem crucial to virtually all of the technology we use. That Open Source software is created and supported by maintainers. But the companies that use Open Source software almost never pay the maintainers anything. This means...
Anthropic: Message Batches (beta) Anthropic now have a batch mode, allowing you to send prompts to Claude in batches which will be processed within 24 hours (though probably much faster than that) and come at a 50% price discount. This matches the batch models offered by OpenAI and by Google Gemini, both of which also provide a 50% discount. ...
The Good Old Days relaunched last month with version 8 and I spent last week dissecting the changes from the new theme made by Mr. Creosote as it’s always fun to get inspired. They also have a museum page where you can go back in time to see what the site looked like back in the day. One of the things I really like is the way The Good Old Days...
Use an External GPU on Raspberry Pi 5 for 4K Gaming After I saw Pineboards 4K Pi 5 external GPU gaming demo at Maker Faire Hanover, I decided it was time to set up my GPU test rig and see how the Pi OS amdgpu Linux kernel patch is going. I tested it out on a livestream over the weekend, but I thought I'd document the current state of...
Back in 2012 I wanted to make a quick game for the AGBIC game jam (A Game By Its Cover; make a game inspired by the imaginary cover art from the Famicase exhibition). There’s only one rule for this game jam, which is taken very seriously: respect the wishes of the original artists, and don’t appropriate their designs without consent. Otherwise...
Sorry there was no newsletter last week! I got COVID. Still got it, which is why this one's also short. Logic for Programmers v0.4 Now available! This version adds a chapter on TLA+, significantly expands the constraint solver chapter, and adds a "planner programming" section to the Logic Programming chapter. You can see the full release notes on...
This article first appeared in First Round Review. “Only the Paranoid Survive” Andy Grove – Intel CEO 1987-1998 I just had an urgent “can we meet today?” coffee with Rohan, an ex-student. His three-year-old startup had been slapped with a notice of patent infringement from a Fortune 500 company. “My lawyers said defending this suit could […]
Today I'd like to experiment with some nice interfaces for tagging and showing tagged bookmarks. But it feels too clunky to log into the django admin then navigate back, so first I want to get Django authentication set up. I suspect that if this turns into something I want to share with others, I'll eventually wind up with allauth, but that feels...
Lucas numbers [1] are sometimes called the companions to the Fibonacci numbers. This sequence of numbers satisfies the same recurrence relation as the Fibonacci numbers, Ln+2 = Ln + Ln+1 but with different initial conditions: L0 = 2 and L1 = 1. Lucas numbers are analogous to Fibonacci numbers in many ways, but are also […] The post Lucas numbers...
Young children have no problem letting things go. It's a flaw built up over time, and it takes us years to unlearn it as adults.To correct a behavior, parents intuitively reprimand them when something wrong happens. We correct in the now what was done in the past.It creates a strong bond between how we feel now and what happened then—a strong connection between the outcome, our feelings about the outcome, and the past performance.While this is not entirely...
Because this essay is over 11 000 words long(!) I’ve made a convenience EPUB file for offline reading. (EPUB only! No PDF this time.) You can download it over on the fulfilment service I use, Lemon Squeezy, with the option to pay what you want if you feel the urge to support my writing. Paying is absolutely optional. Web dev keeps arguing about...
YAML Tag Picker allows you to easily select tags for the YAML front matter in your blog posts. It scans your existing posts for tags and presents them in a Choice Palette, making it easy to maintain consistent tagging across your blog. You can select multiple tags one after another; when you’re done choose “Finish Selection” or press Esc. Each...
Markdown File Linker is an extension for the Nova editor that allows you to insert links to local files as Markdown links, perfect for linking between articles in your Jekyll blog! Usage To run Markdown File Linker: Select the Editor → Insert File Link menu item; or Open the command palette and type Insert File Link You might also choose to...
A few starlings stopped by the bird feeder on my balcony earlier this week. (Shot through the window pane so as to not startle them. Hence the reflections.) A few of very autumnal photos from yesterday’s walk Took these two pictures of the same scene and with a similar angle, but converted one to B&W and the kept the other in colour. A couple of...
“To define custom elements or not when distributing them – Nathan Knowler”. This uses import.meta and url queries to make the custom element name configurable. Coincidentally, this is something I’ve been experimenting as well, but I then use an import map to give it a nice import specifier. “Fighting for our web”. “What used to be expensive and...
Linearizability is a strong consistency model in concurrent and distributed systems. From the paper introducing it [1]: Linearizability provides the illusion that each operation applied by concurrent processes takes effect instantaneously at some point between its invocation and its response. On first reading (and probably on the second and third …
I’ve been a fan of Home Assistant a while now; it’s a great platform for home automation with its beginner friendly and feature rich UI, support for a ton of different devices and integrations, and there’s a bunch of ways to create automations. But there’s no engine for writing automations in Elixir that I could find; this post addresses this...
Django Commons Django Commons is a really promising initiative started by Tim Schilling, aimed at the problem of keeping key Django community projects responsibly maintained on a long-term basis. Django Commons is an organization dedicated to supporting the community's efforts to maintain packages. It seeks to improve the maintenance experience...
So, I wasn’t going to get into this despite getting irritated about it on social, but now there’s a story by Ali Breland writing for The Atlantic with the title,...
So, I wasn’t going to get into this despite getting irritated about it on social, but now there’s a story by Ali Breland writing for The Atlantic with the title, “Donald Trump Flirts With Race Science”, and you know I can’t shut up because there are two things wrong here. It’s not flirting. It’s not science. Yes, I understand that it’s a commonly...
Chapter 7 of the Designing Data Intensive Applications (DDIA) book discusses transactions, yay! Transactions in database systems group multiple operations into a logical unit, a box of operations if you will. They simplify error handling and help manage concurrency issues. See Gray-Reuters book introduction and fault-tolerance sections for the...
Tianyu Fang researched a long and detailed essay called Whose Domain Is It?, detailing the politics of the Internet’s domain names, especially the country-code top-level domains (ccTLDs) that you might not realize are actually associated with countries. The unexpectedly popular ccTLDs can operate like a tourism effort, at least in terms of...
In today’s data-driven world, the performance of databases is crucial for applications, businesses, and users alike. As databases grow in size and complexity, the need for efficient data retrieval becomes paramount. One of the most effective strategies for enhancing database performance is indexing. This article explores the role of indexing in...
The PATH environment variable is read by the shell or libc to find and execute programs, this is how the shell can find /bin/ls when ls is typed in a terminal. Shrink it On Debian based desktop systems the default PATH variable look like this: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games Much of...
Silicon Valley has a reputation for youth worship. The 'move fast and break things' mentality often translates to a preference for younger, supposedly more adaptable workers.
N3366 - Restartable Functions for Efficient Character Conversions has made it into the C2Y Standard (A.K.A., “the next C standard after C23”). And one of my longest struggles — the sole reason I actually came down to the C Standards Committee in the first place —
Recently I have been working on what I guess is called an LLM agent, but it’s more just building more ergonomic tools for myself to use LLMs in my life. The code base keeps growing, and I use it to help write itself. What I have noticed is that the patterns I have made for making code more intelligible to LLMs also apply to making code more...
hytradboi 2025 HYTRADBOI is coming back in 2025, this time with a programming languages track. I have 14 speakers confirmed so far, but there is still plenty of room. Let me know who you want to see!
This evening, I started to think about what the experience should be on audio notes. Could I offer transcriptions? What would that look like? What design elements should I have on the page? What features could I add to afford greater utility to the transcript, like search? I explore these questions in the below audio note, with additional...
I have recently been reflecting on how technical writing goes out of date, and what that means as a technical writer. In the voice note below, I explore how technical documents have relevance far beyond their immediate utility as a reference material. Your browser does not support the audio tag.
At Homebrew Writing Club this evening, we spoke about modalities of content: of writing, audio, video, and more. We also spoke about the best way to make something is to get started, and to make it as easy as possible to get started. For example, instead of worrying about how to classify content, you can write or make it, then classify it later....
In front of you are two personal websites, each used as a blog and to display basic contact info of the owner:One is a complex CMS written in PHP that requires a web server, multiple workers, a Redis cache, and a SQL database. The site also has a big frontend component that loads as a Single Page Application and then performs navigation by requesting the content in JSON form, which then gets "rehydrated" client-side.The other is a collection of static HTML files...
Before we look at making our server multi-threaded, and then move to polling, there are two optimization techniques worth exploring. You might think that we should finalize our code before applying optimizations, but I think optimizations in general can teach us things to look out for / consider, and it's particularly true in both these cases. In...
An article about a couple of relatively recent additions to my workflow which I wish I knew about years ago.
Most of the Internet is held together by best practices and good intentions, and WHOIS servers are one of those. One security company was investigating vulnerabilities in WHOIS and got a whole lot more than they bargained for: Each TLD (the bit at the end of the domain), you see, has a separate WHOIS server, and there’s no real standard to...