2025-02-16

I think the Stones left that bit out

I had occasion to exchange a moment of shared culture with a cashier over the Rolling Stones' You can't always get what you want, and my daugter wanted to know if we'd learned it at school like she did

So, later, I played her the song. And she wanted to know when they would sing the "you get what you get and don't throw a fit" part.

2025-02-11

Irony writ large

This is a rant that's been bugging me for a long time and has just recently boiled over.

My work computer runs Windows. I wouldn't have chosen that, but there are good reasons for it. I'm told. Whatever. I'm a technology pro, and I take my daily dose of copium so I can deal. But there is a fact of life about my working environment that amuses and frustrates me in equal measure: certain applications are just really bad at window placement on returning from sleep mode.

Now, this is actually a hard problem for three reasons. First, I work for a contracting firm so I actually sit at three sites (home, company office, and client facility) and due to hot-desking at the client site maybe seven different desks.1 Second, I'm a programmer and I prefer to work with multiple monitors. Five of those seats supply an external monitor to pair with my laptop's screen, one of them gives my two externals, and then there is the "sad" seat. Finally, I'm an older programmer and modern displays have lots-n-lots (tm) of itty-bitty-teeny-weeny pixels, so I use auto scaling to make everything easier to read.

The good news is that modern external display buses give the OS enough information that it can "remember" setups and restore all your settings. Yeah! But still, my machine is repeatedly going to sleep with one setup and waking up to find itself connected to another. How operating systems applications should respond to a changing display environment like that is far from trivial, but I feel like things have finally settled out a bit in recent years.

Still not every application is good at this, and my work environment features a few regular offenders.

In third place is that dancing-to-a-different-drummer perennial, Emacs. Particularly Emacs running from a WSL Linux (running from msys it seems to be fine). Every time you wake the computer at a new display location you can expect WSL Emacs windows to migrate to the virtual desktop that was active when you put the machine to sleep. And sometime to unnecessarily switch to the main display as well. Sigh.

Second place goes to Microsoft Teams which seems to jump virtual desktops on an intermittent basis. Often when you've missed an appointment. Maybe? But it also occasional does that when you're just working normally, so it's not clear that it relates to sleeping or to changing display environments at all.

And the biggest irony is Microsoft Edge. Which just can't seem to recall where it was or how big it was. More or less ever. At all. I mean, I re-size and reposition this POS a dozen times a day. What the #&|!, Microsoft?!? Honestly, if a major Microsoft product team can't figure out Microsoft's own interfaces for this stuff why would you expect anyone to get it right? And what does it say that many other application do a pretty good job none-the-less?


1 At least it's just one physical computer, which limits the issue of file synchronization to the usual domains of software repositories and shared drives.

2025-02-08

Deepseek-R1 and a few more thoughts on LLMs

Not so long ago Deepseek-R1 dropped to much wittering and gnashing of teeth.

Im my desultory way, I eventually got around to downloading several of the medium scale models to run locally. The 70B parameter model achieves a token or two a second on my framework laptop which is good enough for testing even if I wouldn't try to use it in a productive work flow. My comments here are based mostly on local interactions with that model, though I have poked at it's slightly small cousins. I haven't interacted with the 600B+ parameter variant at all.

My methodology (if you can will accept such a formal sounding word) continues to be pretty ad hoc: I repeatedly fire up the model in ollama, present the model with a single prompt or a short series of related prompts, read the answers then shut down the model before going onto the next prompt(set). As before my prompts are mostly intended to probe the edges of what I expect these models to do well on by choosing subject where I expect one of the following to apply:

  • The topic is sparesly represented on the internet.
  • The topic is a combination of two or more well covered ideas, but the combination is sparsely represented.
  • The topic is a highly specific example taken from a very broad field.
I have added another movie related query that I expect models to do well on. I ask them to explain how the rooftop confrontation in Blade Runner makes Roy Batty a sympathetic and human figure; this is ground that many a fawning essay has covered in detail, and large enough models often write very well on the subject.

But the idea is mostly to stress the generation process by one way or anther.

Something I'd noticed even before I began playing with deepseek, but hadn't mentioned yet is that these models seem to be very bad at keeping track or what was in specific sources (say a single paper I asked about) and what they only found in the halo of secondary-source words written about the thing I asked after. This shows up consistently in how they handle the questions about physics paper with most models drawing in material that was probably written to explain the essays to less technical audiences and attributing it to the paper itself.

Thoughts on Deepseek-R1

At least in the models I've been working with it's good (even for the size), but it's not great. It's really, pointedly not great.

It has a reasoning model, which gets it partly over a hurdle I saw in my earlier post. It was able to actually do something with the weight and volume limits I suggested for my day-hike survival kit. It can math. Yeah!

Mind you, the inputs it was using for the math were still values it picked out of it's training set without any obvious understanding of the context. Like several other models, it keeps insisting that the first-aid kit I should carry will be just a few ounces, which isn't a bad number for something to put in your purse or satchel, but the one I actually pack for a hike is the best part of a pound because it is meant to cover a wider and more serious set of problems.

It's writing style is clunky and repetitive, and it takes great pains to show off the presence of that reasoning model, often sounding like a under-prepared student trying desperately to stretch a cursory understanding into an assigned page target.1 This stands in contrast to the slow but notable progress I've been seeing as new models come out from the established players. Lamma3.3, for instance, produces much more fluent and readable text for a lot of prompts.

Is the alarmed response justified

Well, OpenAI's annoyance is mostly amusing. To the extent that it is not amusing it's a warning that [ spunky up-n-comers | tendrils of evil, acquisitive foreign powers ] don't always play be the rules that [ their staid elders | the defenders truth freedom and unrestrained capitalism ] proclaim.2

Leaving that aside, the claimed cost and speed of this work is impressive and should probably worry the big players. I mean they still have a better product, but the price-performance situation means that the new guy probably looks really attractive for a lot of applications.


1 Particularly annoying with the slow production speed. I keep wanting to shout "You said that already, think of something new or give it a rest!".

2 As a minor irony, I'll note that the young United States was criticized by various European powers for failing to respect even the weak international intellectual property regime then extant. This is a thing with historical precedents even if we don't like it.

2025-01-25

Little Surprises #9: too helpful edition

In Qt5, this #include <QString> #include <algorithm> #include <vector> int main() { std::vector<int> v{0, 1, 1, 2, 3, 5, 8}; QString qs("target"); // Search the vector for the string std::find(v.begin(), v.end(), qs); } will build (compile and link). There are very few circumstances where you mean what it will actually do (in this case it's a very expensive no-op), but it is valid code.

This works because of a chain of "helpful" features:

  • You can construct a QChar from an int: QChar(int rc) noexcept
  • .
  • There is a equality test between QChar and QString: bool operator==(QChar lhs, const QString &rhs) noexcept
  • .
  • The find template uses operator== between the contents of the vector and the target.

Each of the behaviors is desireable in isolation, so we don't want to remove any of these options entirely. What causes the surprise is the implicit nature of the type conversion.1 Core guidelines C46 and C164 discuss the uses of explicit annotation to prevent this kind of thing.

BTW: the above code will not compile in QT6 which is a small but significant improvement.


1 Shout out to all the strong typing fans out there.

2025-01-21

When I grow up I want to be...

... organized, detail-oriented, and thorough.

I imagine that will be happening ::checks watch:: any day now. Right? Right?!?

2025-01-11

Dates are important

If you're putting a technical article on the web please, please make sure it has an easy to find date of production assocaiated with it. Seriously, technical stuff changes and sometimes changes fast. I need to know if your advice is a few years old because that might be enough to make it comprehensively wrong.

That is all.