MacBook, defective by design banner

Put the knife down and take a green herb, dude.


One feller's views on the state of everyday computer science & its application (and now, OTHER STUFF) who isn't rich enough to shell out for

Using 89% of the same design the blog had in 2001.

Back-up your data and, when you bike, always wear white.

As an Amazon Associate, I earn from qualifying purchases. Affiliate links in green.


MarkUpDown is the best Markdown editor for professionals on Windows 10.

It includes two-pane live preview, in-app uploads to imgur for image hosting, and MultiMarkdown table support.

Features you won't find anywhere else include...

You've wasted more than $15 of your time looking for a great Markdown editor.

Stop looking. MarkUpDown is the app you're looking for.

Learn more or head over to the 'Store now!

Saturday, June 25, 2022

Can StackOverflow leave nothing untouched? 🙄😉

Maybe some UXer can explain why arrows with circles around them are better than the old vote buttons with just arrows.

Has this been around for a while and I just missed them? 

Well, at least I now know it happened between now and 2020.

I worry that some UI changes are made just to keep people employed and busy. I'm sure there's a good argument or 15 to change it. I'm not sure they're always good reasons.

I still use a version of SourceTree on Windows from 2015 when I'm on Windows. There's nothing wrong with it. I prefer it. I had a coworker see it on a screenshare and say, "Where can I get that theme?" 

What if your redesign resources had been spent on anything else? How many sprints saved? How awesome would your app be? 

Again, not that a redesign is bad. In many markets, simply refreshing the page will drive sales. Just keep in mind the opportunity cost. I realize SourceTree's users are probably more "aged UI tolerant" than most (see my previous post where I admint to using kdiff3), but... 

How much better has SourceTree's core UX experience really gotten in the last six and a half years? What percentage of their storypoints went to it? Worth it? Idk. (But my guess is heck no. Also note that they've worked through several UI iterations since then. Remember when they used a diamond ring for Commit? And people liked it? /cringe twice. Brah culture much?)

In other SO news, I did hit 15k and can protect questions now. I expected to be more impressed when I hit it the way I was with 10k, but... not so much. It's cool, and I'm happy some answers continue to help folks, but I really need to find another semi-obscure but useful tag to sit on.

EDIT: Here's some description. There is a comment that this make the page more accessible for the visually impaired. I'd like to know how. Does that mean I don't see the improvement? (no pun intended) Yeah, but that's the point of asking. Honestly, what's the improvement?

Maybe down/up/votes are clearer?

There's also a comment that the design doesn't really meet WCAG compliance after all. Apparently they didn't QA dark mode. 🤦

Labels: , , , , ,

posted by ruffin at 6/25/2022 12:59:00 PM
Wednesday, June 22, 2022

I was working in the evening, and everything on my Mac was in dark mode but kdiff3.
Some of that was due to macOS changing theme when it's late, so you could argue kdiff3, an old enough app that I didn't figure would or should have auto-theme detection for macOS, was right "half the time", and the bigger half [sic] at that, the half during working hours.
Still, I caught myself saying, "If it had a dark mode for kdiff3, I'd use it all the time over none."
Oh yeah? Turns out that, though it's not in settings in any super-accessible way, after a little googling, kdiff3 does, in fact, have dark mode.
You just edit your .kdiff3rc file with custom colors. Of course, right?
But how did I learn that? And how could I figure out which colors work together?
If you just want one simple, competent dark theme, the answers to those questions are easy to find.

Enter Dracula:

It turns out there's a project with an interesting-ish backstory churning out one dark theme for every app that can take them: Dracula, at the very original
  • Replace color lines from your ~/.kdiff3rc (ex on win: C:\Users\<name>\.kdiff3rc) file with the ones from dracula theme's .kdiff3rc
  • Restart Kdiff3
  • Boom! It's working
That's pretty cool. I like the attitude: Hey, here's the minimum you need to play with a dark theme -- dark theme table stakes, if you're into that whole Gruber vernacular -- and here it is for as many apps as possible. A perfect mvp.
Though .kdiff3rc files are kind of a pain. The values you want to change are these:
And those aren't necessarily (aka, "Almost certainly aren't") grouped together in your (apparently alphabetized by default?) .kdiff3rc.
I'll put a macOS .kdiff3rc whose only differences from the default .kdiff3rc file are Dracula theme changes up on github here:
Looks like kdiff3 resaves your rc file when it closes and re-alphabatizes, which is an interesting choice. Three cheers for conformance, I guess. Usually a good thing.
It's not like it's perfect. After setting colors for the text areas, kdiff3's chrome is still very... chromey. Very heavy toolbars and footer. But it's an old (gtk?) app, so I'm not complaining. 
I now have a fully competent dark theme for an old app nobody with any sense of the state of programming tools would expect to have quite this easily.

Labels: ,

posted by Jalindrine at 6/22/2022 12:47:00 PM
Monday, June 20, 2022

Saw the Crowes for the 7th time recently. The sound was mixed horribly, and I could barely hear Chris on some songs. Guess it was enjoyable, though I wish I'd paid for the general admission seats and saved $75 a ticket.
I wasn't going to watch them at all this go around. I've gotten used to the Crowes breaking up, Rich & Chris doing their own thing for a few years, one of 'em noticing that they're leaving a lot of cash on the table, and then getting back together for a tour or two.
This most recent tour seemed the worst of the cash grabs. Originally no past members of the band, just Chris and Rich, even though they were or had been touring separately with past members in Magpie Salute & the CRB. Sven, the bassist, got added to this current version of the Crowes at some point, breaking that rule, but my understanding is that initially both brothers backchanneled a reunion and didn't do much more than tell their current bands, "See ya!"
It's not like this egotistical tack is uncommon, as I was recently reminded by the bio for New Earth Mud, Chris' first (?) post-Crowes band that I was listening to recently (emphasis here and in all quotes mine):
Robinson parted ways with Paul Stacey and the rest of his band in early 2004, the reason for which remains unknown. In a very cryptic post on his official message board, Robinson said farewell to his original line-up and welcomed a new one, which featured ex-Crowes member Audley Freed on guitar and studio virtuoso George Reiff on bass. The band toured in support of This Magnificent Distance through the Summer of 2004, again gaining more critical and commercial attention for themselves. Another tour was planned for the fall of 2004 but was suddenly and inexplicably scrapped.
On the eve of a new tour celebrating the anniversary of the band’s debut album, Chris Robinson demanded a larger percentage of the Crowes’ pie. Specifically, [Chris] wanted all of Gorman’s share. “Chris wanted 75 percent of all the band’s income. That was quite an upgrade from the 33 1/3 percent share he had been receiving,” writes Gorman, who said no way to becoming a salaried member of the band he co-founded. “And that was the end of the Black Crowes.”
I don't know if I'm the biggest fan of Steve Gorman the person. He's done some sports radio, and seems overly full of himself sometimes, though that's probably a requirement to fill hours with your own voice. But why not give him a full share in the band? There was nothing I heard from their current drummer that I liked better than Steve. It was too loud, not nuanced, and, worst, not in the same groove as Rich. Say whatever you what, Gorman helped create the Crowes' sound and vibe. That's more obvious than ever now.
Edit: Did a little more googling. It's worse than just Steve. Chris wanted some of Rich's share too (which makes the 75% make more sense):
When THE BLACK CROWES announced their split in 2014, Rich issued a statement saying that he loved his brother and respected his talent but that "his present demand that I must give up my equal share of the band and that our drummer for 28 years and original partner, Steve Gorman, relinquish 100 percent of his share … is not something I could agree to."
I mean, let's acknowledge that Chris splits from his brother for a while and names his project the Chris Robinson Brotherhood. Sheesh, man. You guys are in your 50s (early 40s then?). Can we put the sibling rivalry crud behind us yet?
It's a shame. The Crowes probably are my favorite band overall, and when they're rocking (Wiser Time, natch, but Horsehead, Soul Singing, Go Tell the Congregation, Blackberry, even something late like Aimless Peacock or God's Got It) well, they're just plain jamming. Even better, listen to the Crowes and Jimmy Page and tell me Chris isn't one of the best rock frontmen of all time (though that track may not be his best) or that Rich can't play (though that Page dude they let sit in for a while seems, um, pretty competent too). They can catch lightning in a bottle, and do it consistently, but the cost seems to be being as dysfunctional as heck.

Labels: ,

posted by Jalindrine at 6/20/2022 12:31:00 PM
Saturday, June 18, 2022

Lost my AirPods charging case. I have no idea how. Still have my AirPods, first edition. Gave myself a few weeks for the case to show up; no dice.
Ordered a new case with wireless charging, b/c why not? Kinda steep, but I couldn't justify going another $30 for version 2, especially since I'd used PodSwap on this pair not too horribly long ago. But I really did miss the AirPods, even though I had decent Bluetooth headphones and some lightning port EarPods.
Or should I have justified buying the version 2s after all?

When you're wearing your AirPods or compatible Beats headphones, Siri can announce incoming notifications from apps such as Messages and Reminders, and from supported third-party apps. Then you can reply instantly, hands-free.

What you need

You can have Siri announce your incoming notifications with these headphones:

  • AirPods Max
  • AirPods (2nd generation) or later
  • [more removed]
So my version 1 AirPods can't be a good watch replacement when it comes to notifications.
Live and learn, I guess. Makes some sense, as I think v2 is when "Hey, Siri" is first supported.
Dang it.

Labels: , ,

posted by Jalindrine at 6/18/2022 11:43:00 AM
Wednesday, June 08, 2022

We do realize stuff like this are the prerequisites for releasing Augemented Realty goggles, right?

Introduced with iOS 15 and macOS Monterey, SharePlay is designed to let you make FaceTime calls with friends while doing other activities such as watching TV and using apps. With Game Center integration, all games that use Game Center's multiplayer support feature will automatically work with ‌FaceTime‌.

iOS and Mac users will be able to play multiplayer Game Center-compatible games while on a ‌FaceTime‌ call for a more interactive gaming experience.

But that's not it. I mean, if you look closely enough, there are tons:

During a FaceTime video call, Apple has updated the UI in ‌iOS 16‌ to be fully transparent, with buttons for camera, microphone, message, speaker, and SharePlay now larger and easier to tap.

Handoff Lets You Swap FaceTime Calls Between Devices in iOS 16, iPadOS 16 and macOS Ventura

If you get a ‌FaceTime‌ call on your iPhone while you're out of the house, you can answer it on the go and then swap over to the larger screen of a Mac when you return home. Or you can answer a call on your Mac and transfer over to an ‌iPhone‌ or iPad for a more portable ‌FaceTime‌ experience.

iOS 16 Lets You Isolate, Copy, and Share Subjects in Photos

Using advanced machine learning, iOS 16 will let users extract a subject from a photo...

Even the CarPlay UI seems like it might soon be coming to some goggles near you.  

We knew it was coming -- AR walking directions (picture from Apple) the most obvious evidence. But you can see Apple creeping closer to AR from all sides. It's almost exciting. 😉


Labels: ,

posted by Jalindrine at 6/08/2022 06:52:00 PM
Monday, June 06, 2022

Safari has responsive testing as part of its dev tools. I've used a similar trick of Chrome's, and it works well.
The only weird thing for me is that I've got macOS 12.2 on my MacBook, but Safari only has iPhone sizes through the iPhone 8.
No iPhone X, no XR, no 11, no 12, no 13. 
That's weird, right? 
Yes. But it is also very Apple-y. They had a feature, they built it, they have not prioritized updating it, so it, well, not precisely withers, but sits on the vine, waiting for its next day in the sun.

That's it. That's today's post.

Labels: , , , ,

posted by Jalindrine at 6/06/2022 07:27:00 PM
Thursday, June 02, 2022

As a corollary to yesterday's post about how to measure a poorly performing work culture, here's a well-put warning against getting used to a bad situation.

Unlike getting used to a smelly room, there are some large costs to becoming too habituated on a software project. First is “death by a thousand needles”. A number of small annoyances compound and can greatly decrease developer productivity. It may seem small at first but over time the team’s ability to deliver new customer value can grind to a halt.

Secondly, habitually poor engineering systems can drive engineers off of teams. I have seen several engineers become frustrated with the time it takes to build, deploy, test (the developer inner loop) and decide to leave the group. Making sure the development experience is enjoyable and smooth is a table-stakes item for retaining talent.

Okay, "grind to a halt" is too strong, but what if we say "half as fast as you could be moving". That's enough to matter, isn't it? And I think, honestly, that's possible.

It is too easy to get used to the status quo, even when you know it's inefficent or wrong. Habituation is a coping mechanism, and often a useful one! The problem is identifying when you're using it and remembering that you need to fix it soon too.

Don't let the perfect get in the way of the good enough, but don't let the good enough get in the way of doing your best either.

Labels: , ,

posted by Jalindrine at 6/02/2022 07:49:00 AM
Wednesday, June 01, 2022

This is a well worded blog post:

  • You’re learning coping mechanisms rather than skills.

Every organization has their quirks that people find their way to work around. ... Over time, we learn to cope with these things – we set aside extra time for the reports, make sure we take the time to sell the political person on our ideas, or learn how to argue.

The trap: Sometimes organizations are (or become) sufficiently toxic that we’re investing more time in developing and refining the coping mechanisms than the actual skills. If your list of things to develop is really a list of things that you won’t have to do in a more functional environment, none of which will make you more employable elsewhere… it’s time to walk away. [emph mine -mfn]

Everything we do that doesn't make us "more employable" could be wasted time. I mean, having effort, eg, helps because you get better at estimating stories, and knowing what you need to know to get those high-quality estimates and "ready-ready" stories. That's not wasted time (even if I don't always love those meetings).

But if we're coping just to cope -- and when it's safe to say a decent amount of it won't translate to a "more functional" workplace -- that's a workplace smell.

Nothing earth-shattering, but I liked the "does this problem make me/us/whoever more employable?" and "do I spend more time coping than learning?" metrics.

Labels: , ,

posted by ruffin at 6/01/2022 07:12:00 PM
Tuesday, May 31, 2022

Essentially all my life, if I've had text selected in an editor and typed a character, the text disappears (is deleted) and only the character typed remains in its place.

I've noticed VS Code doesn't do this by default for all characters. It auto-surrounds instead. /sigh

If I have code selected and hit {, it surrounds all of that selection with a pair of squiggle brackets instead of deleting it.

(I actually hate auto-closing brackets too. If I type { even with nothiing selected, please don't insert a } I now have to manage. Note that theses are two different behaviors.)

For me, the solution is to turn off autoSurround.

In json:

editor.autoSurround": "never"

And in the Settings UI.

a picture of how to set autoSurround in VS Code's UI for settings

Thank you for attending this sanity talk.

Labels: ,

posted by ruffin at 5/31/2022 09:45:00 AM
Wednesday, May 25, 2022

Are you using vbscript?

Okay, this was a fun time travel... Remember that post not even a week ago when I talked about our working museum of code at my current workplace?

That's (not surprisingly) relevant again, as I was reviewing some old .aspx code and incrementally refactoring out all the Response.Writes so we could move it into the 21st century. That meant trying to remember some vbscript string operators from my past life as a classic ASP dev.

I was trying to figure out how to test quick snippets of VB code and found this "gem" of a script (not in Ruby, to be clear ;^)) that allows you to have a limited interactive shell for vbscript:

do while true
    ln = wscript.stdin.readline 

    if lcase(trim(ln)) = "exit" then exit do
    ln = "str = """":" & ln & ":wscript.echo(""#"" & str & ""#"")"

    execute ln 
    if err.number <> 0 then 
    end if

(Yes, I added the echo for str overhead to save some typing if I'm playing with strings)

It requires a session to be a single line, which means you have to separate commands with :, but it's fairly useful in a pinch. Admittedly I wasn't as careful in that code with variable and keyword casing as I used to be when I used to code in vbscript... last century. ;)

Example usage:

c:\temp>cscript vbsimple.vbs
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.

>>>str = "   asdfASDFasDF     ":str = Trim(LCase(str))
>>>str =
Syntax error

There's an even fancier script over here (c2013) that allegedly allows multiple line entries, but I wasn't able to get that running with a trivial time expenditure.

It would be easy enough to make the one above a multiline shell, but for now, enjoy as-is, I reckon.

Labels: ,

posted by ruffin at 5/25/2022 08:07:00 AM

Support freedom
All posts can be accessed here:

Just the last year o' posts:

URLs I want to remember:
* Atari 2600 programming on your Mac
* joel on software (tip pt)
* Professional links: resume, github, paltry StackOverflow * Regular Expression Introduction (copy)
* The hex editor whose name I forget
* JSONLint to pretty-ify JSON
* Using CommonDialog in VB 6 * Free zip utils
* git repo mapped drive setup * Regex Tester
* Read the bits about the zone * Find column in sql server db by name
* Giant ASCII Textifier in Stick Figures (in Ivrit) * Quick intro to Javascript
* Don't [over-]sweat "micro-optimization" * Parsing str's in VB6
* .ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture); (src) * Break on a Lenovo T430: Fn+Alt+B
email if ya gotta, RSS if ya wanna RSS, (?_?), ¢, & ? if you're keypadless

Powered by Blogger Curmudgeon Gamer badge
The postings on this site are [usually] my own and do not necessarily reflect the views of any employer, past or present, or other entity.