Thursday, June 29, 2023

big mac commands

 One thing I loved about Mac when I switched a decade ago was having a proper Unix-y Terminal - here's a list of Mac-specific Command Line Commands - the only I really knew was "say" - image resizing "sips" seems pretty hip though.

Wednesday, June 28, 2023

frailty, thy name is url is shutting down, with its total run being almost exactly two decades. (Doc Searls final post on the platform says 'At the time I was told something like "Hey, Harvard has been around since 1636, so your blog will last a long time here."', but the total is around 6% of Harvard's total lifespan so far.)

I don't have any particular connection to Harvard's blog endeavor, but us long-time online geeks often feel a twinge at such times. There used to be a feeling that URLs could - and should - be forever, or as web godfather Tim Berners-Lee put it, "Cool URIs don't change"... but when I stumble over any old list of links I may have assembled, it's inevitably an absolute ghost town.

In abstract theory the unlimited perfect copies of the digital universe should enable virtual immortality in that URI-ish sense; in more nuanced theory, the cost in terms of dollars and institutional attention mean there are precious few guards against entropy, and a website is far less likely to be long lived than a print book (ideally on good acid free paper) And in practice, too often it's "well, I hope the Internet Archive Wayback Machine spiders it well".

(Some of these links come from David Winer's Scripting News... I feel like I should have been reading this blog for much longer. But it's a frustrating and weird read, like it's hard to pinpoint him on a scale of cynicism vs optimism. Or maybe it's just nothing but jaded and I'm too polyanna to see it.)

Tuesday, June 27, 2023

mixers for every ability

 Today I was part of Partner for Youth with Disabilities' "Youth Leadership Forum Career Mentor Mixer" (This is the third time I've helped out with this, previous years had been online)

It's a rewarding but challenging event- challenging emotionally (as your heart goes out to young people having to overcome things many folks don't, it feels like injustice) and intellectually, as you work to best reshape your message for the interests and ability level of each young person at your table.

(and of course it feels even a little stranger as I work my way through my own job path's thorn and brambles - HMU if your team needs a good UI guy who can cover anything from modern React/Node/TypeScript to legacy PHP, as well as a holistic view of the user experience made with it...)

Thursday, June 22, 2023

rust 101

Very high level view of Rust: I think I could get used to the syntax. It's interesting in how it seems a step back, two of the things I learned from Perl, like where it was a distinct upgrade from the oldschool C I was otherwise learning at school, take at least a bit more syntactic work: memory management,  and strings as first class objects. The owner/borrower bit is kind of intriguing though.

prez-ing the issues

Interesting study on the design of the current presidential candidates websites... I am always intrigued by the way a vibe can be so influenced by a typeface.

I liked the presentation of that blog entry, with a particular detail or references for nearly every site on the sidebar. 

Wednesday, June 21, 2023

med-sched-grid and the old one page wonder
I revamped an old tool I made for making printable charts for tracking our dear cat Dean's rather extensive set of medications and feeding schedule. 

It started as a test of Preact, but then I decided to code it as an exercise in vanilla.js while still using declarative programming. (It's sort of weird that "Preact is 3Kb!"'s app builder pulls down about 350 Mb of libraries for its dev environment...) Actually, I decided to indulge my fondness of "one page, no library, zero external files" style - even the images I use as icons are embedded SVG.

It uses local storage so that it will repopulate if you use the same browser, as well as offering permalinks you save and come back to.

Probably the fanciest aspect is the ability to jump forward or back a schedule's worth of time while updating the "offsets" - so for the cat's pill on a 2 week schedule, it automatically compensates and moves it up or back to the appropriate places on the chart when it's time to print the next one. (I came up with a clunky algorithm for that, since going back in time is a little weird to figure out. I then had ChatGPT spit out a more elegant version - but it started having regressions as I tried to get it iron out some edge cases, and so I went back with my handmade algorithm. It does make me wonder how much of the rest of my career will be test engineer for LLMs.)

Thursday, June 15, 2023

teaching the new dog old tricks

Is React Having An Angular.js Moment?  This article has been making the rounds - how Next.js is jockeying to be the next standard for deployments, how SSR requires amps up the complexity, and suspicion about Vercel being lowkey promoted as the default go-to for deploying Next.js apps.

It's interesting to try and guess where the puck is going along with where its been. In my experience, simplicity often wins out. I believe that is why JSON edged out XML, and some of why React ate Angular's lunch.

But what's funny to me is, 25 years ago everything was static rendering, and 20 years ago it was all SSR! Javascipt interaction then was a bell+whistle on top of the page-based core, but now that the industry has embraced JavaScript/TypeScript declarative rendering from top to bottom, keeping up server side options takes a great deal of finesse. I guess you can Teach a New Dog Old Tricks, but it's not always easy...

Friday, June 9, 2023

confirmation bias and schadenfreude in testing

I was catching up on Slack on a team I'm not longer on, and saw the story of a serious production bug. Reviewing their post-mortem I saw the error description was 

jobs were not viewable on COMPANYNAME sites and COMPANYNAME jobs were not  indexed or displayed on Google for Jobs (G4J)."

 and the "blameless root cause" was:

In _document.tsx where json-ld is injected was refactored in order to get unit test scores above 80%.  The refactor was then the cause of the bug and prevented the json-ld types from being added into the code.

That definitely feeds in to my prejudices that focusing on "tree level" unit tests can lead to a culture that doesn't pay enough attention the forest.

On a different slack I participate in, someone put it:

as it turns out $DAYJOB’s business objective of reaching specific code coverage percentages has not made any impact on our DORA metrics — surprised pikachu face

Tuesday, June 6, 2023

Q-Arrrrrgh Codes

Interesting that QR Codes are sort of coming back.

(Maybe that one joke is out dated - "What's a pirate's favorite visual URL encoding?" "Q-Arrrrrrr?" "No, they don't scan them either")

But I usually think of QR codes as looking like "robot puke" but this one is gorgeous:

Monday, June 5, 2023

phishers are getting better...

 Recently, an activist band organization I help run, BABAM, got a note with the subject "Tаkе Aсtiоn Nоw: Aрреаl Pаgе Susреnsiоn - Cорyright аnd Cоmmunity Stаndаrds Viоlаtiоn"

The content looks pretty legit, and that's at least a real Facebook link:

the next page felt a little bare though but plausible - but more importantly look at that link...

That link is more polished than I'm used to for this kind of scam:

Entering info and hitting submit then asks you for the "Password to continue" and I bailed.

Time was spammers were notably low-fidelity, with the logic being that they didn't would love to pre-filter for people a bit on the gullible side, but these jerks are making a play at looking pretty real, with fewer tells. 

Be careful out there!

(And of course, disregard everything purporting to be from Best Buy Geek Squad unless you really know you're doing something with them. There is a scam there absolutely frightening in its use of screen sharing and refund scams, making it look like you're getting a refund and then turning the tables and putting you on your back foot by accusing you of stealing from them. (A relative of mine came scarily near not catching on in time.))

Thursday, June 1, 2023

the difference between can and should...

 Today I saw some JS code that was like:
   const counterAxisAlignItems === 'MIN'
      ? 'flex-start'
      : counterAxisAlignItems === 'MAX'
      ? 'flex-end'
      : counterAxisAlignItems === 'CENTER'
      ? 'center'
      : undefined;

took me a minute to realize that was essentially a select case statement using the ternary operator. Though it's kind of more like rewriting if/else statements. But I'm not sure why they didn't use a simple lookup object - this is just a mapping and an unknown key will return undefined as expected...

keeping it real

 Mastodon post about important sites aimed at people experiencing poverty taking multiple MB of JS to load even the very first view.

I'm sometimes discouraged by the gap between the technology I am skilled in for work and what I will put together for a quick personal project. But crufty old technologies still get a lot of things right by default- and in terms of maintainability over years and even decades, they make up for their costs in bespoke weirdness by having a reduced cross section in what frameworks you need to know.

There are absolutely more modern technologies that can get to the same place in terms of not shipping the factory down the wire just to display the showroom (next.js doing static rendering, etc) - but it takes thought and time that people disposed to the "kitchen sink approach" (that, say, create-react-app gives you by default) won't necessarily want to apply.

I am on a job hunt for a UI Engineering role, remote or in the Boston area, where I can use my React and TypeScript abilities (or potentially even the older ones if that's how your company rolls!) to make terrific user experiences, so if you think I might be a fit for your place let me know!

text with gradiant colors

I continue to be impressed with ChatGPT's ability to know about small tasks. Some specs at work wanted text with a gradient, and ChatGPT came up with

.gradient-text {
  background: linear-gradient(to right, #ff0000, #0000ff);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;

giving something like

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam finibus interdum hendrerit. Proin et suscipit quam, ac feugiat velit. In tristique vel dolor quis egestas. Fusce et metus a lacus tincidunt maximus id sed felis. Sed nec magna ut orci pellentesque interdum. Praesent ut auctor ex, a auctor leo. Sed a eros viverra, luctus risus at, fermentum erat. Nulla nec vestibulum dolor. Nulla posuere molestie est sed scelerisque. Nam ut tortor varius, hendrerit nibh eu, interdum libero.