Category Archives: Uncategorized

Redesign?

WordPress annoys me.

It’s not a bad piece of software. It does its job. But I’m a coder, and I like having control over how things end up, and ever since I installed WordPress here years ago, I’ve been doing things its way. I don’t really love the look and feel of this site right now, but I do like how little I have to do to maintain it.

But there’s a growing movement of blogs and websites that are pure, static content, like I used to do back in the day. Once upon a time, my website was just a bunch of text files, mashed together in interesting ways by the m4 macro processor to produce static HTML as output. I started doing that in 1996, and 25 years later, the rest of the world has started doing that too, using Go and JavaScript and Ruby, among others: Static content has made a real comeback, now that modern JavaScript and CSS can fill in the interactive parts.

What I liked about using m4 back in the day was that the code simply did what I wanted: There were no database or administrative tools to get in the way, just powerful macros that constructed HTML from single sources of truth. I ran a lot of websites on that technology, for years, and I miss the elegance of it.

So I don’t know. I may spend some time hacking my website into a new shape. I haven’t redesigned things in some years, and maybe it’s time to export all my old content and rebuild this site in a brand new way.

Food for thought, at least.

Comments Off on Redesign?

Filed under Uncategorized

Firefox Tip

I switched from Chrome to Firefox about four or five years ago, and I generally haven’t looked back. Firefox has its issues, to be sure, but Mozilla’s pretty open about them, and Firefox is free in a way that Chrome isn’t, and runs everywhere in a way that Chrome doesn’t, and the work they’re doing on Rust in it is nothing short of amazing. I wholeheartedly endorse using Firefox, and I only open other browsers for those bad pages out there that insist on being “designed for Chrome” (shame on you, what year is this, 2002?).

So a pro tip for all you Firefox users out there: Like so many browsers, Firefox can get a little twitchy if you leave it up and running long enough: Its memory footprint grows over time, and sometimes its CPU usage will creep up until it’s eating the universe, especially if you typically have forty to a hundred tabs open (like me!).

So here’s a way to easily put a safe “Restart Firefox” button in the corner of Firefox’s window, without installing any Extensions or Add-ons

Continue reading

Comments Off on Firefox Tip

Filed under Uncategorized

Now with 100% more robots!

I’m leaving my role at Suvoda. I’ve enjoyed my time there, and I made some good stuff, but thanks to fairly strict nondisclosure policies, I haven’t been able to talk here much about my job like I could when I worked at HomeNet and Cox. I made some new friends at Suvoda, and some of us will stay in touch after I leave. I’ll still be rooting for Suvoda from the sidelines: There’s a need for well-run clinical drug trials, and society is the benefactor.

But — !

IAM Robotics reached out to me a few weeks ago, and after some whirlwind interviews, I accepted a new role with them as a software architect. I’ll be starting in June, and I’m really excited: I have a big responsibility to help scale their robots to the next level, and I absolutely intend to deliver on it. They have really complex challenges for the kinds of software work they do, and that’s absolutely my kind of problem: Crazy sky’s-the-limit challenges where there’s no perfect answer and every option is on the table. I’ll be doing substantial coding for them, but as the title implies, it’s a lot more design-focused than my job has ever been: I always did architectural work in all of my jobs before, just never as my official title.

I hope in the coming months that I’ll be able to post here more often on topics of interest. I’ve been doing a lot of interesting things, and I have a lot to say about them. As always, stay tuned — the best is yet to come!

Comments Off on Now with 100% more robots!

Filed under Uncategorized

Decaf

I’m apparently a person who now drinks decaf.

I didn’t drink coffee at all for most of my life, and honestly for a long time I couldn’t stand it. But back in 2016 when my daughter was born, the options were “learn to drink coffee and survive having two kids,” or “die now.” Wisely, I chose coffee, and now, I can’t get through a day without a hit of caffeine in the morning.

This morning, after my first cup of coffee, I wanted something to sort-of maintain the alertness, but I didn’t want yesterday’s jitters from coffee, so I dared to brew a cup of decaf. I’m drinking it now, and it’s actually pretty good. This is a revelation to me: Not only have I taught my taste buds to tolerate coffee, but now I drink it just for the flavor.

Young me would be aghast. But young me isn’t young anymore. And here we are.

Comments Off on Decaf

Filed under Uncategorized

Hello, Suvoda!

I started my new job this week, working for a company called Suvoda, in Conshohocken, PA. They run clinical drug trials, which means that in a literal sense in my new job, I get to use advanced computer science to help cure cancer.

ROCK ON.

The place is really neat, and while I’m still getting used to it, I love the vibe there. We’re doing good things for the right reasons, and I get the absolutely delightful side benefit of working with a few old friends, too. The company is healthy and growing, and everybody’s been incredibly friendly. I’m looking forward to doing great things with their teams there and helping them to have no end of successes.




So why Suvoda? Why not somewhere else?

When I left my last job in April, I was looking for three things: I wanted to find a place (1) where the people were smart and dedicated, (2) where there was a focus on making good-quality software, and (3) where my job would be beneficial to humanity: Where I was doing good things for the right reasons, and not just to benefit the company’s bottom line. I interviewed at a lot of companies over the last six months, dozens and dozens of interviews, and while some jobs had some of those three criteria to varying degrees, Suvoda was the only one that really nailed all of them.

“Curing cancer” is a set phrase for “doing good in the world,” and Suvoda is literally in the business of curing cancer. I get the privilege to be a part of something that unequivocally makes the world a better place. My part is a small part of that whole equation, but if I can even slightly tie my work to somebody someday no longer suffering a terrible disease, I’ll be living a life that I can be proud of, and that matters: When you someday have to stand before Saint Peter at the Pearly Gates and he asks, “Well, so tell me, what did you do down there?” you want to have an answer far better than just, “I made lots of money!”

That said, there are a few downsides — no job is perfect! — but they’re small and manageable. The first is that the commute is longish, averaging about 45 minutes each way (best this week so far is 35 minutes, worst was about 70 minutes). I’ll be spending a bit more on gas than I used to.

The second is that since the commute is longish, my personal time is much shorter than it used to be: If you don’t hear back from me during the work week, it’s because we have kids to feed and water and put to bed in the evening, and 6:00 AM comes around pretty darn fast in the morning if you don’t get your keister heading to bed by nine. (Today’s a Saturday, and I “slept in” — I woke up at 6:30.)

And the third and final notable downside is that I’ve signed dozens of nondisclosure agreements this week, mostly for legal and safety and patient-privacy reasons — all of which are good reasons to be signing NDAs, and I’ve signed them quite willingly.

But that means I can’t tell you pretty much any more than I’ve already said about what I’ll be doing at Suvoda 🙂




But my job search is finally over, and I’ve found myself a new place to call home, a place where the people are nice, the pay and benefits are good, and the work is meaningful and the right thing to be spending my time and energy on. May all of you find such purpose.

Comments Off on Hello, Suvoda!

Filed under Uncategorized

Tonight’s lovely phone call

Thick accent. “Hello, my name is Ree-chard Lee and I am calling from Department of Computer Support.”

Me: “Er, I didn’t really hear that, who are you again?”

“I’m sorry. My name is Ree-chard Lee, and I am calling from Department of Computer Support about your computer. Are you seeing white dialog box on your computer?”

Pause.

Me: “Er, for the record, you do know you just called a computer scientist with thirty years’ experience, right?”

Click.

I probably should’ve kept him on the phone longer just to waste his time, but dang, it’s been a long day, and I’m too tired even for that kind of fun.

But maybe if he calls back…

Comments Off on Tonight’s lovely phone call

Filed under Uncategorized

NPM

I swear there is no part of the Node ecosystem that isn’t a flaming tire fire. Does anyone ever design anything before implementing it anymore?

Try this example:

  • NPM is a package manager. But you can’t install packages from local source (i.e., on this computer) in older versions because NPM was only really designed to work with a single remote repository. (New versions at least let you add multiple remote repositories, as a somewhat hacky extension.)
  • There’s a workaround hack feature called npm link that lets you set up a symbolic link — a pointer — to a local package. It doesn’t work like a standard link command, so you’ll have some relearning to do if you want to use it.
  • But nevermind that learning, because npm link has no shortage of problems and bugs and failings and workarounds and workarounds to the workarounds. Also, it has disastrous data-destroying bugs on Windows.
  • But nevermind the bugs, because it’s not compatible with the normal npm install commands anyway, so the one use case you’ll have for it — installing packages from a local directory to make sure your design works — isn’t really usable with it anyway.

None of that would have been an issue with a little more advance thinking and a little less advance typing. Two small design changes early on — (1) allow multiple repositories to be listed in .npmrc and check them in order, and (2) allow the file:// protocol to point to a local directory of .zip files or tarballs as a repository — would have been enough to obviate all of this. NPM scopes, link, yalc, lerna, and a dozen other things built on top of the initial bad design would have been completely unnecessary.

But, no, can’t spend time on that! — you gotta move fast, be first, break things, change the paradigm, own the market, declare your IPO, and retire like a king. Never, ever design or plan anything, because that takes too long! Just shove something barely-passable out the door, and if enough people use it, make a slightly better layer on top to hide the roughest parts, and then if that gets used, another on top of that, and after enough layers, you might not even notice the sand you built on. After all, when you’re changing the world, who cares if anything actually works?

Comments Off on NPM

Filed under Uncategorized

SpaceMonger Treemapping Redux

I was asked recently (for the 97,000th time), “I loved the treemap layout algorithm in SpaceMonger. I’d like to implement something similar. How did that algorithm work?”

I’ve been meaning to write a few articles on this for a while now, so here we go with the first one: How did SpaceMonger 1.x’s treemapping work?

Continue reading

Comments Off on SpaceMonger Treemapping Redux

Filed under Programming, Uncategorized

Come on, Syfy!

How is Sharknado vs. Polar Bear Vortex not yet a thing? It’s a 1000% awful idea! You know darned well we would all tune in with huge bowls of popcorn to watch the insanity of Bruce Campbell using a bazooka that shoots tornados of hyperevolved laser sharks to attack a swirling vortex of flying mutant polar bears. Come on, Syfy, the script writes itself!

Comments Off on Come on, Syfy!

Filed under Uncategorized

No.

The first person to create some kind of lint tool for Smile will be shot.

I understand the “desire” to have code be “uniform,” but linting tools, automatic-formatting tools, and other such ilk are an excellent example of not understanding the problem.

There is no “one correct formatting” for source code — in any language! — and style guides just make the problem worse by making you think there is such a thing. The goal of well-written source code is to communicate to other human beingsnot the computer — the intent of the program. But intent is art, not science, and like all arts, it’s subjective. And la forme suit le fond, as the French say.

For comparison, the A.P. style guide, or the Chicago Manual of Style, tell you how you should write prose. They also disagree on really basic things. Should you use an Oxford comma, or not? Should you or shouldn’t you use contractions? Are sentence fragments ever acceptable? How long a sentence or paragraph is too long? Or too short?

e e cummings wrote his famous poetry — and his name — in all lowercase. Jesus wept is both the shortest and one of the most meaningful sentences in the Bible. Shakespeare’s most famous sonnet’s first four lines are loaded with what modern authors would consider spelling errors and a sentence fragment — “Shall I compare thee to a Summers day? / Thou art more louely and more temperate: / Rough windes to fhake the darling buds of Maie, / And Sommers leafe hath all to fhort a date…

The point is that language changes, and language is mutable. You can freely alter it to serve your purposes. Writers always have, and always will.

The same is true in programming languages, especially in a language like Smile that is itself designed to be mutated. There’s no one correct way to write anything — in any programming language. There are only ways that are easier to read than other ways — and what’s easy and pleasant to read depends heavily on your experience and background. To many inexperienced programmers, the formatting below is confusing and heresy; to more experienced programmers, this code reads like art:

switch (field.Kind) {
    case FieldKind_Primary:    flags |= INITIALIZED | BOLD;    break;
    case FieldKind_Secondary:  flags |= INITIALIZED;           break;
    case FieldKind_Disabled:   flags |= INITIALIZED | GRAYED;  break;
    case FieldKind_Password:   flags |= HIDDEN_TEXT;           break;
    case FieldKind_Hidden:                                     break;
    default:                   throw new InvalidFieldError(field.Name);
}

I could show you what that looks like after it has been through a code-formatter that would put those switch cases on three lines each, with fixed indentation, but I’m not a big fan of ruining beautiful things. Which is exactly what a linter or code-formatter would do to it.

In literature, as in any of the arts, there are always exceptions to every rule. There are reasons not just to break every rule but to beat it to a brutal, bloody death with heavy bats and spiked shoes. Of course, to break the rules properly, you must first know them, and know when to apply them, and when not to. But Picasso didn’t become famous by painting still-lifes of fruit. Monet didn’t become famous through photographic precision of people’s faces. O’Keefe didn’t become famous by painting romantic landscapes. The best artists know the rules, and then break them, establishing new rules that are then broken by the next generation.

Well-designed source code in the 1960s left extra un-punched holes on the punch card between words and numbers to make it easier to fix errors. Well-designed source code in the 1970s put broken while statements inside switch cases because of how much more efficiently it ran. Well-designed source code in the 1980s made sure to write char *x, not char* x, because of how dangerous the “more obvious” form could be. Fashions change, as requirements change, and as preferences change. Today’s “perfect formatting” is tomorrow’s “ugly punch cards.”

So stop with the linters. Stop with the code formatters. Stop making prescriptive software that exists just to enforce your opinion. Because the best code is art, and the best art could care less about your rules.

Comments Off on No.

Filed under Uncategorized