My family wasn't poor by any stretch of the imagination, but I was raised to
avoid spending money whenever possible.
I was also taught "it's a poor craftsman that blames their tools", which
apparently means "take responsibility for your fuckups", but, to young-me,
definitely sounded more like "you don't deserve nice things".
I was also taught from an early age that I was born a sinner, incapable of doing
good by myself, and that all the earthly things were temptations, sent by the
devil to corrupt me (further I guess?) but also temporary, and that I shouldn't
attach myself.
I'm better now — thanks for asking.
But I'm sure you can see why "protestant ethics" primed me for falling
head-first into the pit of unpaid labor and burnout that is "F/OSS at large"
(free and open source software, for the kids in the back).
It's perfect: much like in the religious environment I grew up in, everyone is
this close to permanently losing it, and there's an infinite supply of
thankless work to be done, which means, and this is crucial: nothing you do
will ever be good enough.
In either place, there is no redeeming yourself.
And sure, okay, the other thing that attracted me to F/OSS was, of course, the
good parts: that you can look at how it's made, fix it up for yourself
and others, etc.
As someone most definitely somewhere on the spectrum, being able to stare at the
inner workings of complex systems unperturbed, was just... I liked it, You
know?
Things have changed since, to some extent.
The Early Unix Crowd lament having to think about languages other than C. We in
the DevOps mines would pay good money never to have to speak YAML again.
I get it: GCC 2.95 was an easier time.
But, like Andrew Morton famously said:
It's time to give up on it and just drink more coffee or play more tetris or
something, I'm afraid.
Today still, if you try, if you really try, you can go in and try and
modify your favorite software.
But, and I wish 19-year-old me would've heeded that piece of advice, you always
need to keep in mind that you're either spending time or spending money.
Let me IMMEDIATELY add caveats there, because your gut reaction may be what mine
was back then: "Oh! you're one of those. The ones who put a number on everything,
and make decisions based on those numbers".
Of course not! There's no poetry in accounting. And little point in counting if
you're having a good time.
Besides, when you are 19 / still a student / unemployed, time is all you have
to spend, so the choice is made for you.
And of course, it's really hard to qualify all the second-order effects "spending
time performing unpaid labor for various F/OSS projects" has had on my career
(for the best), my health (for the worst), etc.
I'm not saying that to cause more anxiety over picking which thing to spend
your time on: I think of it more like a good reason to spend your time on a lot
of different things, and people, and ideas, because whether they go terribly
right or terribly wrong, there's a lesson to be learned.
And friend, do I have a lesson to share with you today.
Well. I've been blogging for a decade, which makes me part of The Old People In
The Room at conferences now. The 60-year-olds and me, we have a good time.
But I started doing serious, please-give-me-money technical writing
around 2019. On a Lenovo X200, for street creds (and affordability) reasons.
I needed to make diagrams, so I compared a few options and quickly settled on
"draw.io", which has been semi-rebranded to "diagrams.net" the way Twitter has
been semi-rebranded to X?
The desktop app still calls itself
draw.io, the file format is still .drawio, etc.
It's an Electron app, unmistakably:
...but it's not in-your-face about it. It's rather consistent across Linux (GNU
or not), macOS, Windows, and, now the most important shell of all: "the
browser".
And it's really good at diagrams. Nowadays you'd probably use something
source-defined like Mermaid or one of the cool kids
like Excalidraw, but draw.io is burnt into the memory
of The Old Ones.
Why? Because, like all good products, it started out with "solving a hard
problem" better than anyone else. The hard bit was "making a graph editor that
could render to SVG and display in non-SVG browsers", and if that sounds weird,
that's because this happened forever ago:
We created mxGraph in 2005 as a commercial project and it ran through to 2016
that way. Our USP was the support for non-SVG browsers, when that advantage
expired we moved onto commercial activity around draw.io.
And I think this spirit, of "taking the problem seriously", permeated throughout
almost the entire product and is one of the reasons draw.io felt so nice to use
compared to, well, anything else at the time.
Dia's download page offers
binaries for Solaris 9 Sparc, and Irix 6.5.
A German site, last updated 2014, offers Windows and macOS downloads:
It's hard to describe the feelings conjured by looking at this Vista-ass
screenshot, this large rounded download button with a best-effort glass effect,
the subtle mix of serif and sans-serif fonts.
The stock photo of a woman drawing a diagram on a whiteboard.
The "Donate via PayPal" button.
Heck, while we're hurting ourselves with nostalgia, here's the last release on
SourceForge:
That's not what SourceForge looked like when I got my start, but the smell is
the same.
Just look at those two lovingly hand-crafted .dmg files. No
CI/CD there, just vibes.
Remember Pidgin? Adium? I can do this all day.
GitHub didn't just usher in a new era of collaboration, of new heroes and new
villains, it also sent to the grave SourceForge, and an entire aesthetic with
it.
But all good things must come to an end at some point, and for draw.io (and the
rest of the world, for slightly different reasons), that was 2016.
As the history section I quoted earlier covers: "when that advantage expired (in
2016), we (jgraph) moved onto commercial activity around draw.io".
Now, it's more subtle than that. draw.io is still good, and the dealbreaker
I'm about to cover pre-existed jgraph's shift to "commercial activity around
draw.io".
In fact, it's really important that there be a revenue source to fund continued
maintenance of draw.io, so, as long as it doesn't mess with the main product too
much, I'm happy!
But that's when, for me at least, draw.io stopped investing in "their own
engine" and fully committed to doing "whatever the browser does". The browser
being, need I say it,
Chrome.
Of course, you could probably get Gecko to do it instead, but why go all the
trouble to end up with a result that looks different from what you get in the
Electron-based desktop app?
At least the docs, and I would expect no less from jgraph, whom I respect,
correctly describe draw.io's ability to do "rich text formatting" as simply
"being able to use HTML to style nodes":
Style part of a text label
Text labels in shapes and on connectors can be formatted with HTML, so you can
apply a style to part of a text label. For example, you can apply bold,
italicise, colour, or a link to just one word.
Why does this matter? Because once you let HTML into your product, a product
that, by nature, cares about the precise layout of things, you're fucked.
You're fucked because, although I don't believe it's literally impossible to
make your own browser (CW: Drew
DeVault), it is
several orders of magnitude harder than the hard problem mxGraph solves in the
first place.
Which is why I keep defending Electron as "not that bad, actually, when you
really think about it" in a very old video I'm quite embarrassed
about, and which thesis is
essentially: there's more to it than you probably think (but you're very welcome
to try).
Of course, in another universe, draw.io didn't take the shortcut and didn't just
say "you can just put HTML in there". In another universe, they only allowed
bold, italic, underline, font-size and font-family... and line spacing, and
letter spacing, and text alignment, and superscript and subscript and...
...okay you see my point about there being more to it than it seems now, but
point is: they could've picked a limited feature set and just written their own
text rendering engine.
And then you wouldn't need Chrome's DOM, its layout engine and the PDF backend
of its renderer to do a "proper export"
from draw.io.
But they didn't! And you do.
Worse: I do, and the thing I actually do for this blog, because I've stopped
"just grabbing rectangular screenshots and pasting them onto my blog" a long
time ago (I blame HiDPI displays), is: