Closing the door on another year. Here are some random links.
- Mesmerizing: Wintergatan – Marble Machine, a musical instrument that uses 2000 marbles. It’s like that computer-animated marble music video, but in real life. (Check out the pinned comment on that computer-animated marble music video.) Bonus: Somebody actually created a real-life version of the computer-animated video. ( Another video.)
- Are Rotisserie Chickens a Bargain?
- Public transportation and/or train nerds are anxiously awaiting the opening in 2026 of the final segment of Sound Transit Line 2, which will establish the light rail connection from the Eastside cities of Bellevue and Redmond to Seattle and other locations. That final segment is a trip over a 2km-long floating bridge, the second-longest floating bridge in the world. (The longest is its sibling that crosses the same lake just a little bit further north.) Here’s a 40-minute documentary on the challenges of building this final segment.
- I have noted in the past that the person who knows the most about a subject is often the least qualified person to write the documentation for it. This is demonstrated to comic effect by “How I, a non-developer, read the tutorial you, a developer, wrote for me, a beginner.” Note that a more realistic step 2 would be “Next edit the configuration file” without ever saying where the configuration file is. If you then ask the author of the documentation where the configuration file is, they’ll say, “Obviously, it’s in folder/hidden/deep/in/the/file/system, assuming your jabbernock uses standard kleptomitrons. Otherwise, it’s in a folder named after the kleptomitron’s pintafore.” You know the pintafore’s name, so you figure can go to that folder, but wait, where should you go looking for that folder? “It’s in folder/overlooked/pintafores, of course.” A lot of time, the problem isn’t that the instructions don’t make sense, but rather that the instructions are incomplete because they assume that you know how the system works and how it reached its current design.
- The country that broke Kotlin: “Logic vs language: How a Turkish alphabet bug played a years-long game of hide-and-seek inside the Kotlin compiler.” If you’ve been paying attention to globalization, you already know what the problem is.
- I tracked down Microsoft’s original UI designer to get the true story: Wes Felton does some (gasp) legwork and gets the facts about the origin of the infamous “Hot Dog Stand” theme from its creator, Virginia Howlett. You might remember the name Virginia Howlett because the last part of her name is the ett in the Windows font Marlett.
- The Michael MJD YouTube channel covers old technology, and one episode took a look back at the Microsoft Plus! Dancer, a program that displayed a dancer on the screen that matched whatever music was coming out your speakers. I have no information to add, aside from noting that I learned that one of the swing dancers also worked as a database administrator for King County.
- I’ve gotten used to seeing my articles summarized and reposted (“for content!”), though sometimes it’s a case of “You successfully summarized a 500-word article in 2000 words.” Sometimes the extra 1500 words come from complete fabrications. For example, one site magically promoted Dave Plummer to head of the Windows 95 shell porting project, even though I wrote only that he was a member. (I don’t even know who the head was. It was just Dave and Jon and Julie and Bryan and some other people.) One site that does this sort of content-reposting with some regularity recently took my article about Microsoft Studios adding a hardware staging room and somehow represented it as “Bill Gates built a secret lab”. As far as I know, Bill Gates had nothing to do with this room, and it’s hardly a secret lab. I mean, if it were a secret lab, then it would have failed at its job because nobody would be using it!
See you next year.
Indeed. I love that .net has System.String.ToLowerInvariant(). When writing JavaScript, I always feel uncomfortable using String.toLowerCase() until I remember that it is the invariant version (the locale-dependent version is String.toLocaleLowerCase()).
The thing that I find confusing in .net is number formatting and string parsing. There is no convenient System.Double.ParseInvariant()—to make your code function correctly when parsing portable textual data, you have to pass System.Globalization.CultureInfo.InvariantCulture to the right overload. Otherwise, your program will fail when the user changes the default decimal separator.
Fortunately, C# 14 makes it easy to add this as a single static extension method:
static class ParsingExtensions { extension(T) where T : IParsable { public static T ParseInvariant(string s) => T.Parse(s, CultureInfo.InvariantCulture); public static bool TryParseInvariant([NotNullWhen(true)] string? s, [MaybeNullWhen(false)] out T result) => T.TryParse(s, CultureInfo.InvariantCulture, out result); } }With that in scope, you can then call double.ParseInvariant(…) or double.TryParseInvariant(…) as required. 🙂
Better late than never to highlight Marble Machine I guess, which debuted in 2016 and now has 275 million views. I suppose it’s nearing a decade in age…
The problem here isn’t caused by supporting the Turkish language. The problem can occur any time someone runs a program on a system that uses the Turkish language, even if the app only supports English.
This is where I’m glad that .NET has “Invariant” and “Ordinal” character case operations. These return consistent results regardless of what language or locale the system is using, helping to prevent the sorts of issue that Kotlin faced here.
I wonder how many will read that Kotlin story and conclude that Turkish locale support is not worth the effort.
If I had English RTL, English +20%, English but it's high Unicode, English but Turkish I rules I could test all these, but I don't and it's _not worth hiring a developer who can read and write Turkish_ so it's not happening. If I had these we could have the debate as to whether it's worth test hours.
The application has locale support intended to target English, French, Spanish, and Italian, but German names must work (Germany uses English in the application's...