I hope that the Buzludzha Monument will one day reopen and allow me to peek around inside. Until then, these building projection light shows by MP-STUDIO that are presented during the Open Buzludzha Festival are about the coolest stuff you can see from the outside.
This story is something I cranked out while sitting at the Zagreb central bus station back in 2013, waiting to go to the airport. I had just left Split and it had sort of self-assembled in my head during the bus ride to Zagreb. Now I just had to get it out.
Then it sat in my "drafts" folder for the next 13 years. I made some edits to bring it up to 2026, but otherwise - here it is, as it was.
A century of the Swedish Air Force was displayed at Malmen Air Base. I decided to go on a whim and booked train tickets the evening before. The only train not sold out left 0620, which was a blessing in disguise - since I arrived early I only had to wait about one hour to get to the air base.
It was very hot during the day, but I could almost always catch some cats during my early morning walks. Not as many as last time, but watching the kittens play more than made up for it.
This is intended as a digital preservation project for Nikon Custom Picture Controls, specifically the ones used for 8-bit DSLR video, like Similaar's "Flaat" profiles. See the summary table below for downloads.
This blog changed its appearance about a month ago. I threw out the design I came up with in 2010 and moved to this design, which, in a way, looks like a synthesis of the very first design I had from 2005 and the 2010 redesign: a center column, but this time with no side columns.
I often hear a family of Great Crested Grebes by the water long before I see them. The happy chirping of the chicks is unmistakable, and when I come down to the water I always see mommy Grebe and daddy Grebe and their two chicks doing, well, family stuff. I'm sorry for the anthropomorphization, and doubly sorry for probably completely misinterpreting animal behavior, but the similarities are just too great.
When I saw that display: grid-lanes was coming I realized I could soon get rid of my masonry JavaScript layout and enjoy browser-smooth layout instead. But I couldn't get what I wanted: a dynamic number of columns, where each column was at most MAX-WIDTH wide, but could shrink to MIN-WIDTH to fit more columns. After playing around a bit I came up with this:
When taking a stroll I saw this family of Great Crested Grebes. I immediately ran home, grabbed the 150-600mm. It quickly became apparent that mommy and daddy Grebe mostly wanted to sleep, but little Grebe was full of energy and kept chirping.
If you try to control Microsoft Flight Simulator 2020 with the SendInput API, you may find that the key presses do not register. This is because they must have a non-zero duration. Insert a delay between the key down and the KEYEVENTF_KEYUP event. The same goes for mouse clicks - there must be a delay between MOUSEEVENTF_LEFTDOWN and MOUSEEVENTF_LEFTUP.
Or - how I stopped worrying and learned to aggregate SQL queries. This is a pattern that can be used when you have multiple SQL SELECT queries Q_(1)...Q_(n), each returning zero or one rows, except for the first which must return a single row, where Q_(n) can depend on the result of Q_(1)...Q_(n-1), and you want to reduce the number of database roundtrips.
Getting Google Maps to work in dark mode is a bit of a hassle, but you can do it by swapping map styles. OpenStreetMap doesn't have that functionality, since it serves pre-rendered tiles, but by taking inspiration from the Hue-Preserving Invert CSS Filter for Dark Mode, we can create a CSS filter that works reasonably well. The filter is almost the same, but with less saturated colors to give the dark mode map the same feel as the light mode one.
If you find that the Memory Integrity setting in Windows 10 turns itself back on when you reboot after having turned it off, try this: go to Control Panel → Programs → Turn Windows features on or off, and enable Hyper-V. Reboot.
I paid for it once, therefore I should be allowed to keep it running forever. Thus spake my sense of entitlement. My sense wasn't wrong, but it sure didn't know what suffering was ahead.
Microsoft Flight Simulator 2020 has the absolutely best visual flying experience I've ever seen. Younger me, who had to settle for a lot simpler graphics, would have had his little mind blown. But in what I consider one of the premier fumblings of product management, Microsoft and Asobo Studios turned Microsoft Flight Simulator 2020 into Microsoft Dashboard Simulator 2020 by not making it possible to turn off the virtual cockpit. There is even a Home Cockpit mode they taunt us with that claims to do that but, alas, it doesn't work, never did, and likely never will.
Google Maps doesn't support the prefers-color-scheme: dark media query, and therefore remain bright even when the rest of the website has gone dark. But you can get something close to a dark mode Google Maps with a little bit of JavaScript.
The Ricoh Theta SC and Ricoh Theta SC2 stores orientation information in the video files they produce. Extracting this information is helpful when editing, since it lets you do a first-pass zenith correction and get the footage somewhat stable.
On the first summer day of this year I surfed in on the Google Search Console and saw that the God-machine in Sunnyvale had declared this humble blog to be unworthy.
JNI, or Java Native Interface, is the way Java code calls non-Java code, and in particular C and C++ code. Writing C and C++ code usually means using error codes instead of exceptions, and unless we do something about it, we get code that looks like this:
public static final int RESULT_SOME_ERROR = -1;
public static native int nativeDoStuff ();
public static void doStuff () {
int res = doStuff ();
switch (res) {
case RESULT_SOME_ERROR: throw new SomeError ();
}
}
There is much that is wrong with that. First, it forces us to handle the error in two places - once in the native code, and then once in Java. Second, as Yossi Kreinin writes in Error codes vs exceptions: critical code vs typical code, we lose information about the error - the SomeError instance has no information beyond its type.