.;''-. The lessons I was taught about the things of my thoughts .' | `._ is that if I write until I quit then my thinking becomes quiet. /` ; `'. I write. ,'\| `| | I write to think. | -'_ \ `'.__,J I write quite a lot. | `"-.___ ,' I write almost as much as I've thought. '-, / I write until I quit. } __.--'L I write to get the thing out of my head. ; _,- _.-"`\ ___ Which let's my thinking go on to my next thought when I step out of bed. `7-;" ' _,,--._ ,-'`__ `. |/ ,'- .7'.-"--.7 | _.-' Because there's only so much room up there. ; ,' .' .' .-. \/ .' In that little cramped space inside of my hair. \ | .' / | \_)- '/ _.-'`` _,.--../ .' \_) '`_ \'` Sometimes the thing I think about has taught me a lot about thought. '`f-'``'.`\;;' ''` '-` | And sometimes the thought I have about the thing taught me nothing at all. \`.__. ;;;, ) / / /<_;;;;' `-._ _,-' But I am grateful for the lesson it bought. | '- /;;;;;, `t'` \ I don't think I could think without writing my thoughts down. `'-'`_.|,';;;, '._/| Which gives me a new thought: _.-' \ |;;;;; `-._/ Do I think to write? / `;\ |;;;, `" Or do I write to think? .' `'`\;;, / ' ;;;'| .--. ;.:`\ _.--, | `'./;' _ '_.' | \_ `"7f `) /
Archives for 2022
Oh just fuck off already!
Cute little GPIO buffer boards. So that when I start wiring up electronics components in a circuit to my tiny and overpriced and perpetually out-of-stock SBC (single board computer) that took forever to arrive, for a project I am working on, I don’t accidentally turn said single board computer in to a blue smoke generator because I wasn’t paying attention, or had a connection go awry. No matter how much I earn, I still feel stupid when I blow up a $40 part because I didn’t check my circuit properly, or had a dab of solder in the wrong place.
Me: “I need to transmit about 8K of data…”
The Helpful Plugin: “I think you mean 8 kilobits.”
Me: “I need to transmit a little over 8 kilobytes of data, which is around 8,000 bytes.”
The Helpful Plugin: “It’s 8,192 bytes actually.”
Me: “I’m going to use a for loop here.”
The Helpful Plugin: “You should use a for each loop.”
Me: “I’m going to use a for loop here that will iterate, not enumerate, from index 0 through 8,200…”
The Helpful Plugin: “That looks bigger than 8KB of data, also, zero is a hard-coded number, you should consider a named constant!”
Me: “As I iterate over the bytes, I will perform a Fast Fourier Transform on the data.”
The Helpful Plugin: “Have you considered parallelizing it to make it run faster?”
Me: “Over a very slow, serial connection that is prone to timing issues. But it appears that my math is off…”
The Helpful Plugin: …strangely silent when it comes to a real bug…
Me: “Ah, here is my math error, let me make a note in a git commit…”
The Helpful Plugin: “You should put a comma after the word ‘and’ to make it more grammatically correct.”
Me: “Shut. The. FUCK. Up!”
That is a freakin’ big UPS (uninterruptible power supply). At least, it is big for personal office needs. Weighs around 50lbs/25Kg. Li-Ion batteries. Should run my machine learning workstation just fine. Found an amazing deal on an APC Smart-UPS SMLTL1500RM3UC
I got sent a PDF that covers salary information for #softwaredevelopers and other #software related roles for a whole bunch of companies across the #uk, from Junior Developer through to #CTO. I can only describe the numbers as “stagnant.” The average Senior Software Developer #compensation in the survey hadn’t moved by more than 15% in 27 years. I can only conclude that the salary information was gathered across all of the UK, from a random two-person non-tech company in Nowheresglen, Scotland all the way through to Fortune 500 BigCorp in #London #FinTech, and then all those salaries were averaged.
Back in the 80’s the UK government was prescient in striving to put a computer in every classroom and almost every home. The initiative bred an entire generation of technology literate people and budding software developers. And looking at numbers of immigrants in the US and Canada (data available from various govt sources and websites) for the period 1990 through 2010, who have a country of origin of the UK and also list themselves as software developers, I would say a high percentage left for the US and Canada to get paid more. Talk about squandering opportunity.
The sad thing is, I don’t think that UK companies have learned anything from that, and the best and brightest continue to be drained from the country.
Two drawers down. 84 to go.
Mistakes were made. I cut the second drawer 1/8″ narrower rather than 1/16″ narrower. Simply wasn’t paying attention. Always cut your drawer a little undersized on the width. This is one of those rare cases in woodworking where you can add a little more width. Only found out I cut it too narrow when it came to installation. Had to use the old metal washers as shims trick to stand the drawer runner off a little. Now its perfect. And I love those soft close hinges from the big box orange store.
That stick tucked away in the corner of the cabinet, next to the red handled center punch and yellow tape measure, is probably the most valuable tool I own when it comes to installing drawer slides. 5/32″ (4mm) thick and 7/8″ (22mm) wide and about yay-ish long . Perfect alignment front-to-back, and side-to-side, and perfect spacing between drawers, drawer slides and drawer fronts, every time. That spacing stick has been in my workshop for well over 24 years. If it was a child, it would be graduating this year and looking for an internship.
P.S. Yes, I know the drawers are upside down. The cabinet is upside down. It makes it easier to install the drawers because a) I don’t have to crawl around on my hands and knees, and b) I’m not fighting gravity when it comes to accurate spacing.
P.P.S. I promise not to post one picture a day of each drawer being installed.
It was a hot and rancid day in the workshop.
“Call me Sisyphus.” I said as I took the first steps in a seemingly unending repetitive task ahead of me.
A drawer. A study in wood.
Number one in a series of 86.
Foonote: I really should have invested in that CNC. And an assistant to help with glue up.
Well here’s a new wrinkle on an old scam.
Amazon is still hiring like crazy. But back when Amazon was hiring like crazy and everybody still wanted to work for the company, fake Amazon recruiters would reach out to people who were hoping to get a warehouse job. You worked hard, but they paid well. The scam was, after an initial screening call, you had to send some form of payment to get to the next stage of the interview.
Fast forward a few years – if you are a software developer in the US, it’s a sure bet you’ve been hit up by an Amazon recruiter at least once a month for the past year.
It seems the fake Amazon recruiters have gotten wind of this, and are now pulling the same ploy on software developers. Software developers generally have deep pockets. Though generally software developers aren’t ones to pony up any cash to land an interview, so I’m not sure how the full process works yet.
Since the beginning of June I’ve been hit up by no less than two fake Amazon recruiters, as in, recruiters professing to work for Amazon, with websites and emails from domains that could pass muster at first glance, e.g. amazon-recruiting dot domain.
Ordinarily I won’t give Amazon technical recruiters the time of day, or any recruiter reaching out to represent Amazon — I try to be kind to everyone I meet online, but Amazon recruiters I generally treat like something I found on the bottom of my shoe that I’d rather not deal with, it’s time to buy a new pair of shoes at that point — but there was something that tickled my in-built warning system on these emails; domain name being off, the promises of riches and glory with actual numbers attached. My dealings with Amazon recruiters to date run in to a brick wall the moment I ask about money.†
For these particular outreaches I decided to play along and took the screening call. The calls were brief, mere minutes. Both recruiters were excited for me to talk with them at the office in-person, I would need to pay for my own travel (red flag) and they would reimburse me (another red flag). That I should book the travel to a specific corporate account number (huge red flag). The other recruiter wanted me to book through their corporate travel agency (huge fucking red flag) — and I am going to assume I’d be ask for a credit card number to “hold” the reservation at that point, though I didn’t follow through on that one.
Obviously I didn’t book any travel, and I’m not sure if the booking of travel to a corporate account number is how the scam works, but if it is, that’s a sure way to extract a few thousand bucks from reasonably well off software developers with each hit.
† The first question out of my mouth when dealing with any recruiter is “What’s the compensation range?” and I’ve found that shuts down a good 80% or so all conversations — and it still amazes me that recruiters will either try to play a mental game with that, or get bent out of shape because “all you’re interested in is the money.”
It never rains, but it pours.
Today has been an end of what can only be described as an expensive week.
Monday started with a “minor” plumbing issue (are they ever?!?) that translates in to a new section of black water line, and $3,500 being billed, to remove a sharp turn that has been consistently clogging every couple of years, for the past decade.
And Thursday rolled around with a bulging lithium battery in my wife’s Microsoft Surface Book laptop that threatens to crack the screen that 18 months outside of the extended warranty. So that’s $710 to repair/replace because it is still a pretty good and fully functional laptop that has a couple more years of life in it.
And over sushi, Friday evening rolled through and the conversation turned to new laptops with Saturday afternoon wrapping up on the Microsoft store website, ordering a new $3,400 Microsoft Surface Laptop Studio with 4-year warranty.
What a quality of life improvement this was. Cutting a simple MFT-style sacrificial surface with lots of clamping holes and replacing the stock sacrificial surface on the Shaper Origin Workstation with something far larger. 20mm dog holes, counter sunk holes for the mounting bolts, and softly sanded edges for handling and the inevitable clonking the MDF surface against something hard like concrete.
In other news, have spent three blissful days in my workshop: installed new shop fans to contend with the warm weather, tacked down lose cables on the shop lights so they no longer catch on the workshop door as the door rolls up, sorted out the ever growing lumber pile and disposed of the scrap wood, created new mounting brackets for the Fastcap Helping Hand poles (pictured on the Shaper Origin Workstation), and started cutting out the parts for a new lumber rack that I will install next week.
Overall, this has been a pretty awesome week of not stressing about anything work related for the first time in eight months. Life is pretty damn perfect right now.
Welp, time to upgrade the UPS (uninterruptible power supply) that protects my workstation. My smaller, office-sized UPS devices from APC just aren’t keeping up with the demands of a dual CPU and dual GPU workstation.
The power to the office outlet is adequate, but if there is even a minor sag in the power delivery, my video monitors switch off and my workstation reboots.
Which is never fun.
Especially when I was running an overnight or even multi-day neural network model training session for my deep learning work overnight, only to find the machine has restarted and lost all my progress.
You know, if I want that kind of “mysterious restart in the middle of the night that destroys days of work” I can run Windows 10 with its auto-update feature enabled.
I am kinda brand loyal to APC and am contemplating of the following model:
When your wife is clearing out the dishwasher and hands you two sauce pan lids of equal size, it is de rigueur to place said equally sized sauce pan lids firmly against your chest and immediately launch in to Led Zeppelin’s Immigrant Song in German at as high a pitch as one can muster without suffering a physical injury.
“Aaaaaaah! Ah! Aaaaaahhhh! Ah! Wir kommen aus dem land der eis und schnee…”
We’ll have AGI (Artificial General Intelligence) when the AI responds with either “I don’t feel like it. What am I? A dog doing tricks?” or “I don’t know, let me google that and get back to you.”
If you want to the see the absolute worst in terms of entitlement, impatience, and outright stupidity that humanity has to offer, head to any Trader Joe’s grocery store on any weekend evening, 10 minutes before closing time.
And if you are looking for an employee who can work under intense pressure, has infinite patience, the ability to not cause himself a severe macular injury due to the eye rolling, and can untangle a Gordian knot of entitled people, hire the guy who directs the traffic in the parking lot.
Footnote for those that don’t get it: Trader Joe’s is an exceptionally popular independent grocery chain in some US states that has universally bad parking. Think of the parking lot as designed by a hungover frat boy turning in his assignment two hours past deadline, and just occasionally he gets to pair up in a group assignment with the smart kid in class who is able to draw a straight line and knows that automobiles are wider than 36 inches.
Designed a simple little bracket in Shapr3D to hold my hellishly expensive Woodpecker story sticks on the back of the workshop door. It don’t look like much, but it is kinda neat. I modelled it on the Fastcap Track Saw brackets that hold up my Festool track saw tracks. I intend to manually drill a pivot hole through the two parts and use a hex nut and a long bolt, with a couple of washers, to act as the cam.
Time to send to printer.
25lbs of Groundworks coffee.
All ready for Abtin’s (colleague from work) next visit where we build movie props in the workshop and consume 60 espresso shots between us in just two days.
I have been thinking lately quite a bit about systems architecture, and specifically around databases and message queues. I came across this concept a while ago (quite a while ago) of “database per user” and a central “read only database” that all other data is stored in.
An instance of an application, an instance per user, has direct access only to the database for that user. Another, non-user, process can also access that database, again read-only, which pulls data from the user’s database, and then puts a message on a bus that eventually finds its way to the central database.
The format of data in the per-user database and the format of the central database, and even the type of database, and even what software is running the database, can differ greatly from each other.
I built some prototype test systems a few months ago that seem to have survived a bunch of synthetic stress tests, but I wonder what issues I would run in to in a live environment.
We were talking about version control systems and how far back we went and our different tricks to do version control with files that don’t like version control or projects that don’t use version control.
- Visual SourceSafe
Then you get in to numbered files. But this numbered file names still exists today. Even when you use version control. It gets especially bad in audio studios and creative agencies.
“goff” no longer works at the company. We cannot remove “goff” from the filename because another programmer hard-coded a regex in a microservices Docker container of some back-end server code and the person who can fix it has too many OKR’s to meet already and responds with “it would take me longer to explain where to find it than to fix it myself.”
Side note: Every time an artist changes the filename of an asset in a project, somewhere a young, child-like programmer quits the games industry for good.
Then you get into 5+1/4″ floppy disks stored in colour coded boxes for the day of the week. This acts both as version control and backup system.
Interesting anecdote: When I was doing ZX Spectrum and C64 development, those machines were hooked up to a separate computer (either a RML 380Z or a BBC Micro) via a custom interface card. Write code on the Beeb or RML, download to Speccy or C64. I used to use two Atari ST computers or two CBM Amigas hooked up to each other for dev work on those platforms as well. Made backups, versioning and “oops, the game crashed and reset the machine” a lot easier to deal with. You didn’t care if your code crashed the machine or went into an infinite loop, you could simply reset the target machine, adjust your code, and download it again. And this is how we do modern console development too.
And then, for the 8-bit era, I get to the C15 audio cassettes with hand-written labels. stored in manila envelopes. Some of those tapes I still have as part of my “historical artifacts” collection from my early game development career.
I am sure there are people out there with tales of punched cards and paper tape, but I’m interested more in how version control was done in systems that didn’t have tooling to support it, rather than a “who is the oldest today” competition.
A Spacemouse Enterprise and a Cintiq Pro 32 multitouch art tablet.
And Fusion 360. And Zbrush. And Mudbox. And Photoshop. And Illustrator. And ACID. And Ableton. And Shapr3D.
ZOMG!?! Mind-blowing! Changes everything about how I make art and music.
Er… that is all.
You know what’s really annoying?
Going to Home Depot to buy a 7/8″ hole saw with a 3/8″ shank, along with the mandrel for your power drill, so you can drill a neat and tidy hole in the back of a cabinet to feed a couple of cables through, only to get home and realise that the mandrel has a 1/2″ shank that won’t fit the 3/8″ shank hole on the hole saw.
So you go back to Home Depot to get what you need and figure you will return the incorrect mandrel whilst you’re at it.
But you know what is even more annoying than that?
Standing in the returns line, fidgeting and fiddling with the mandrel, only to realise it has a removable collar that permits the shank of the mandrel to fit both 3/8″ shank hole and 1/2″ shank hole, hole saw bits.
I am now going to remove “detail oriented” and “quickly gets up to speed with new concepts” from my C.V.
Somebody wrote “You’re writing ability is only as good your willingness to delete sentences, no matter how emotionally attached to them.”
Some other wonk wrote: “You’re writing ability is only as good your willingness to delete sentences.”
And I propose that the LinkedIn “Create A Post” text box, or any text editor aimed at writers, starts at 3,000 characters, and then slowly lowers the character limit as you are writing. When it detects you’ve used some terrible phrasing or a cliche, the text box lowers the character limit faster.
Every time you used delete or backspace, it removes the character you want to delete, but also shortens the amount of text you can write. Every time you move the cursor, it shortens the amount of text you can write. Every time you move the mouse outside of the window, for every second it remains outside, it shortens the amount of text you can write.
You get the idea…
11-yr old me figuring stuff out in LEGO: “It’s got real steering and a different (sic) gear box!”
My uncle who was the chief mechanical designer on iconic Formula 1 cars from the 1960’s and 1970’s, with a completely straight face said “Show me how that works.”
And then I had several hours of conversation where I fumbled for words I didn’t know. I think in that entire evening he didn’t correct me even once. I recall there was a lot of “and how would you solve that?” questions that I was asked.
I later found out the “steering system” I had inadvertently invented was called “rack and pinion” and was old news. The differential gearbox was something I had seen in a magazine on mechanics and decided I needed to recreate. I will admit that as a child I was more ambitious than I was talented. Fortunately my mechanical adventures were only a scale model in LEGO.
Unfortunately my uncle passed some time back. But I did get to see some amazing cars. Even if I was too young to appreciate them. Which gave me an unhealthy interest in Formula 1 all through the 80s and a curiosity about the inner workings of mechanical systems even if I lacked the ability to put them back together after dismantling whatever the gadget was.
Also one of the reasons why I wound up with a “Ferrari red” Caterham Seven in my early twenties. That car – well it went when you engaged the clutch. Stopping was more… of a suggestion.
I think I just found what I want for Christmas!
P.S. If you think I had a cool uncle, wait until I tell you about my grandfather…
I might have the suction on the vac turned up “a leeetle too high.”
When the detail sander glues itself to the underside of the cabinet and requires no support from you and the sander is happy to wander around under the cabinet all by itself.
Well that sucks.
Little storage boxes for my Festool systainers.
Time to re-run the print.
“Can you offer some insights in how other people might apply your approach? Are you a contractor? How can you tell if someone is offering a job of the sort you want, and how do you convince the gatekeepers you can do the work well?” asked the person on HackerNews
And I replied…
Sometimes I am a contractor.
Sometimes I am on W2.
I am a contractor right now.
Because the company is new.
But I will probably be W2 one day, very, very, very soon
Possibly tomorrow. Or by the next cheesey moon.
As to how?
I build “stuff.” Then I show “stuff” to them.
Them being people, them who run companies overly small and underly big.
It takes me to new jobs. Or brings in a gig.
I message everyone on LinkedIn. And at hackathons too.
And meetups, and greetups, and gatherings old and new.
Anywhere I can think of, I reach out to the them in the Bay,
and those NFT’d out weirdos down in L.A.
Sometimes directly in Frisco, and that one guy at Cisco.
And then them say “can you come here and work for us to build ‘stuff?'”
And we talk about fun things as I walk through the code.
And sometimes I find out, in the course of the day,
they are really building “it” which I’ve already before built,
and I say “no, not interested” and we go on our way.
Other times it turns out they want to build “it+that”
but they don’t know how to build “it”
but do know a world about that “that”
And somewhiles it is the other way round
They’ve got the shape of the problem
But not the geometrical bound
Sometimes the glue that bonds “it” and “that” doesn’t work
and I come up with some new formula for the glue that will stick
And somewhiles it don’t pay well, but it’s the problem I pick,
My career might seem strange to them that build “it”
But I’m happy for me, because I don’t I give a shit
I’ve talked with entrepreneurs, this that they’ll say:
“We’re planning on sending a Musk to the Moon”
But that Musk asks always impatiently ‘will it be soon?'”
Turns out they’re just building yet another crap app
And so I wave them away, it don’t sound like no fun,
“We need you”, they say, “we can’t get our math right”
“We’ve put Musk in the Sun!”
I’m always happiest when stacking “that” on to “it”
Sometimes I’ll add one, five or eleven to see what will fit
There’s an upper, upper limit of the stacked up that “that”
Sometimes it’s nine, more likely sometimes its four,
But if we just keep stacking, eventually I’ll look for the door
I once had a project where they’d divided “it” by zero
And I got to fix “it”, and look like the hero
And I’ll go to my grave, working each day
And my last words will be “I had fucking fun all the way!”
My career has been a little odd. I earn less than some, but more than most. I don’t ever really feel like I’ve worked a day in my life. I get paid $$$ to play. I find interesting problems, and I sign up for that. Some days are difficult. I am not interested building yet another “it.” I am always looking for the “it+1” or “it+that” or “it*n” or “it/time” or “it=>(return null)”
I am more tactical than strategic in my career path. I don’t have an end goal. I’m not looking to min/max income or position. People race ahead of me, younger people chasing that brass ring at BigMegaCorp. I know that isn’t in my mental makeup to want that.
I made a comment once that “I will stop work the day that I die” and someone pointed out it was the saddest thing they ever read. For me, it isn’t. Because I don’t define “work” as toiling away on a souless project without meaning, or building yet another CRUD app (doing “it”).
And I’m happy.
And when someone tries to get me to do something that is more like “bullshit jobs”, I’ll tolerate it for a while if “we need to do this to ship.” I am willing to do whatever it takes to ship. If that means I have to push a broom about for a while, I will.
But if my work becomes permanently that, and we’ve shipped, or we keep delaying our ship date and the bullshit goes on too long, I wander off to find something else to play with. I do what I do out of love for my work, but not out of love for my job or love for a company. I’d do the kind of work I do for free, even if I wasn’t getting paid. But I still want to get paid for my production. I think I have an incredibly privileged position and I realise that over 90% of software engineers, if they are honest with themselves, probably are doing absolutely meaningless work that nobody wants.
Me: “I want to buy a thing.”
Amazon: “Here’s lots of things that are related to the thing you want to buy.”
Me: “No, I really want to buy this specific thing.”
Amazon: “Ah! Say no more! Here’s other people selling things that are like that thing, with very similar specifications to the thing you want, but ultimately, none of them are actually the very thing you want.”
Me: “Okay, let me buy this specific thing from this specific brand with this specific model number.”
Amazon: “Oh! I get it! You should have said. Here’s all the products made by that company, and also a bunch of knock-offs and items on the grey market that the manufacturer won’t warranty, but the names are suspiciously close to the brand, and some questionable reviews that look copy & pasted.”
Me: “None of these are the thing I really want.”
Amazon: “You’re really hard to please. Why won’t you just give me your #$%!ing money?!?”
BH Photo&Video: “Here’s the thing you want, the price is the same or better than that other store, we also give you a discount if you buy lots of them, we have them in-stock, shipping is also free.”
Me: “Sold. Thanks.”
You don’t realise how much dirt, finger smudges and cat hair are on your computer monitor until you open up Photoshop and are staring into the void that is that blank white canvas. And then you engage in the most thorough cleaning task of any human endeavour rather than sit there and actually, you know… art some artwork.
What I want from a home? I want a home that wasn’t designed by a junior architect that has only ever lived with his parents, or in the college dorm, or a tiny little single room efficiency apt on the trendy upper Eastside.
That’s what I want.
I don’t need my Master Bedroom to be the biggest #!$%^@* #$%!ing room in the entire house just to impress girls I bring back to my place.
I don’t need the laundry in the basement when all the dirty clothes get put in hampers upstairs and I have to haul a hundred pounds of dirty laundry down five flights of stairs. And then a hundred pounds of clean laundry back upstairs.
I don’t need a bathroom with a shower right off the kitchen because my day doesn’t consist of rolling out of bed, doing a 5K then coming home to grab a power juice before hopping in the shower directly off the kitchen, throwing my clothes down the stairwell to the basement, natch, and finally running out the door to catch the L train.
I need more storage in my kitchen that holds more than a few glasses and plates and you can barely squeeze in an efficieny fridge/freezer because all that gets ate in this hypothetical home is Hungry Man microwave meals.
Let’s start with the basics first; don’t let homes be designed by people who don’t live in them in the same way I won’t let a kitchen designer who self-admittedly doesn’t cook who is trying to sell me an $80,000 kitchen but has all the culinary acuity of a deranged hamster only capable of burning a glass of water.
The big question of the day is “At 8 yrs old, how did I decide that my pet goldfish was deaf? And what impact did that have on my relationship with him?”
I personally haven’t done any digging in to this subject at this time, but a shower thought I had today was…
Transformers have become incredibly good at image generation (DALL-E 2), NLP (GPT-3), boiler plate code generation (TabNine, Github Copilot, et al), not to mention the massive quantity of style transfer techniques.
NVidia has been tooting their horn about chip design done by AI.
How long until we are using transformers, or similar DL (deep learning) algorithms to generate basic component level electronic circuits? I want to wire up these two ICs (integrated circuits), add in some USB ports, add in power, and so forth. And a few seconds later out pops a reasonably refined prototype of the circuit that I can then tweak and tune to my needs.
Not long at all, I suspect.
When your workplace Mr Rogers/Ted Lasso facade drops for just a moment…
“I’d reply to you, but I cannot decide whether you’re willfully misinterpreting everything I said or have the mental acuity of a garden snail with a reading comprehension problem.”
Regarding the sorting out of fonts, I am using a .NET function called GlyphTypeface that lets me access the typeface information, such as family, point size, etc. There is a glaring bug in GlyphTypeface.
I have a few options; I can fix the bug in GlyphTypeface but that would entail getting hired at Microsoft, getting assigned to that team, fixing the bug, then quitting immediately after my pull request is accepted. Alternatively I could build my own GlyphTypeface just for this problem. I could use other libraries that implement a workable solution. Or I can brute force it by the shortest path. I am going to brute force it.
The process, due to GlyphTypeface, that inspects the font puts a lock on the file, and also, because of the bug, will crash when you inspect a second font immediately afterwards. This is a hell of a bug. My solution is to have a parent process which simply enumerates all of the fonts, but a second process that does the actually inspection and renaming of the font files. And that child process immediately exits after processing precisely one font file. The parent process will loop over the font files, invoking a child process to do the actual work needed.
I am not real happy with that solution. It is “inelegant.” But the solution takes care of the problem, and I only need the solution to run for a few hours before the code is thrown away. I cannot imagine any scenario in the near future where I will need to rename several tens of thousands of font files…
This is one of those “this should only take me 20 minutes to bang out the solution” problems which has kept me occupied, off and on, for the better part of a weekend.
I have a slew of fonts we have licensed for various purposes over the years. Lots of those “1,000+ fonts” DVDs you could buy. I want to rename obscure files such as “garla_n.ttf” into something like “Garland City Regular.ttf” so they at least make sense to someone browsing the directory.
I could use a font manager package, but this needs to work on multiple machines, and I have yet to find a font manager application that will happily batch rename thousands of files.
I banged out a little PowerShell script to do it for me. Get the font info from the ttf/otf, determine a “sane” filename, and rename the file.
Unfortunately “GlyphTypeface” puts a lock on the file, and refuses to let go, and there is no way to destruct the object.
$fontobject = (New-Object -TypeName Windows.Media.GlyphTypeface -ArgumentList $fontfile.fullname)
Puts a lock on the font file, with no way to release it. There is no Dispose or destructor or Release.
Neither “$fontobject = $null” nor “Clear-Variable fontobject” work. The file lock stays stubbornly fixed until I exit PowerShell. And force invoking the garbage collector fails to yield any different result.
I just thought of an absolutely awesome-o idea for a text adventure game. One of those “well that could go viral” moments. Oh boy! Oh boy! Oh boy! Need to find a partner in crime that will help me execute. It’s gonna be one of those weekend projects that takes a week.
It is a text adventure, with graphics, just like The Pawn from the 16-bit era, but with a twist.
Today I learned that software developers get bent out of shape if you are capable of writing three lines of code to solve a leetcode easy or leetcode medium in under a few minutes.
There is nothing humble about this brag.
No, my solutions are not “optimal.”
But if you claim to have 10+ YOE and cannot “remove the nth node from a singly linked list” or “rotate an image” (transpose a matrix) or “give the correct change in the fewest coins” in under two minutes and a half-dozen lines of code, you might question my claim on how fast I can bang out the solution, but at the same time I very much question your ability.
Look, I am not the brightest coloured cookie in the knife drawer, I know that. And I don’t have any great insight in to computer science problems. I consider myself a below average developer with a mediocre education, but…
There’s always a “but.”
But what did you do with your 10+ YOE.
Imagine that you hire a plumber. You need him to do two jobs for you. One job is very expensive, very difficult, will require months of planning, discussion and a complete reworking of some major aspects of the plumbing in your home and cost many tens of thousands of dollars. The other job is small, a few hundred dollars, you need a new sink and garbage disposal installed.
You agree on a price for the smaller job, and what needs to be done. And the plumber gets to work. When the new sink is installed and the garbage disposal is replaced you look over the work.
“What’s up with the faucet?” you ask, noticing it’s installed backwards.
“Pipes under the sink were too long, only way I could get it installed.” replies the plumber.
“There’s water running out of the garbage disposal and on to my floor!” you cry.
“Well, you see, it would have meant replacing some pipes, and I would have had to send off for a special tool.” says the plumber, looking at you rather exasperated.
“The garbage disposal ejects vegetable matter all over the ceiling when in use!” You’re shielding your face from poorly chewed vegetable matter as the plumber demonstrates how to use the new garbage disposal.
“It would have taken a lot of work to not get it to do that.” counters the plumber, like obviously you are asking too much.
Today I went to the dentist.
On the drive home I said to a friend “I think I need to find a new dentist. One that will listen to me, and fix the problems.”
“Why?” she asked.
And I explained the reasons.
“Oh, I’m sure it’s not that bad. Give him a second chance, explain what you need. I’m sure he’ll fix it. I really like him.”
The faucet is backwards.
The garbage disposal spews vegetable matter
Water all over my kitchen floor.
“So when can we start that big job, eh?” asks the plumber.
So after pondering a while, I think…
What am I missing here?
I need some place to safely stash the VR headset I am working on at our company, when I am not wearing the headset.
This week I have to get a CT scan (nothing serious) of my head.
I have a large format 3D printer in the workshop (Form3L) that can print a 1:1 life-size skull in bone white resin.
I just realized I have a new 3D print project I can start. 🙂
This is going to be so much fun! *waggles fingers in maniacal excited anticipation*
I will post horrible NSFW pictures when I am done.
Installed new garbage disposal after our 12 year old one developed a nasty crack.
Installed new over-counter microwave after our 12 year old one fell apart. One of those “tap the start button and run out before you’re irradiated” situations.†
“Would it be easier if you took the cabinet doors off either side?” she asked innocently.
In my naievty I took the cabinet doors off either side to make it easier to install.
“Would it be easier if you took the upper doors off to reach the fastening bolts?” she asked innocently.
In my naievty I took the upper cabinet doors off to more easily reach the fastening bolts for mounting the microwave.
Now we’re sanding the cabinets.
And picking out paint.
And new handles.
And deciding on what kind of Euro hinges work best.
And deciding between a Miele and a Wolf cooktop.
Do we want walnut or cherry end grain countertops?
I _just_ wanted a four-day weekend to play with my 3D printer that has sat in my workshop, barely used, for goodness knows how long.
In Project Management we call this “client feature creep” and why I don’t do project management.
So… how’s everybody else’s Sunday going?
† Yes, I know that’s not how microwaves actually work.
I was becoming anxious and getting worked up about an upcoming dental appointment.
“Is there anything I can do to calm you down?” my wife asked.
“Not that I can think of. I just have to be an adult about this.” I replied.
“What would your Mother say to you in this situation to help you cope?”
I pondered that for a couple of seconds and replied “Calm down or I’ll give you something to really cry about.”
I miss her so much. My Mother. Not my wife.
Installed a new garbage disposal under our kitchen sink when the (exceptionally) old disposal developed a hairline crack and leaked all over the inside of our kitchen cabinet. Thanks to my brother-in-law for helping with that and showing me how easy it actually is, though I didn’t get the full experience because even though I held the light at every possible angle, not once did he raise his voice about how I was holding the flashlight wrong.
Every five minutes of being under the sink I constantly reminded myself “yah know, software development ain’t that bad and it pays better…”
But having worked on various parts of the plumbing in our condo over the past decade I have come to realise that household plumbing is a lot like the difference between back-end and front-end software development. As long as you don’t peek behind the cabinet door, or open the access panel, you won’t realise just what a mess the pipework is, or how grungy it gets. I guess we could use the metaphor of the crap that washes down the sink for technical debt.
In the past 14 days I have received 90 recruiter messages.
Only three mentioned a salary, two of which were below market rate and equivalent to a 30% to 50% pay cut.
Only one, Madelyn Rainey whom I totally owe a follow-up email too, actually read my profile. Somebody who is totally worth knowing.
Of the 90 messages received, 67 were for junior to mid-level roles (1 to 4 years of experience), or front-end web development roles.
Of the 87 messages that did not have a slary range, after I enquired about compensation with succinct: “What’s the compensation range for this role?”
74 didn’t respond at all when I asked about compensation range. I was “ghosted” as they like to say.
10 asked me what I was looking for. Evaded and answered with a question. And then still didn’t respond when I asked again.
3 responded with a compensation range that was… a 20% to 50% pay cut.
In that same time frame we’ve interviewed five candidates for open vacancies and don’t have enough hours in the day right now to interview more.
Today is “tired and frustrated man with kitchen greasy hands shouts angrily at incorrectly shaped cloud” day.
Correct me if I am wrong but I don’t believe that Samsung makes a “Samsung Galaxy Microwave.”
Which if that is the case, let’s talk about how completely shite Google search has become.
Microwave seems to be stuck. Huh. Pretty sure I loosened all visible bolts. In which case, I am missing something, so let’s debug the problem. Let’s see what the installation instructions say and that will give me a clue as to overlooked mounting bolts.
“Galaxy Microwave Installation Instructions” I googled.
Well I obviously fucking meant Samsung Galaxy tablets so here’s two pages of SERPs on how to fix the WiFi connectivity on your tablet.
“Galaxy Microwave Installation Instructions -samsung -tablet” I googled.
No! You’re wrong! Here’s how you update your Android OS on your Galaxy tablet!
Three pages of results, only one link was relevant, and for a different model microwave. Mostly spam results that want me to download their driver installer fixer for Windows — I’m on Linux which automatically makes me a better person than you.
Incognito browser. Even worse results.
Decide to randomly try Microsoft’s “Here are the exotic birds of Paraguay whilst searching for hotels in Chicago” Bing, and boom first link, “Galaxy Microwave Installation Instructions” PDF in all its glory.
Should have just searched the Sears parts website directly. And maybe it is time I re-evaluate my search engine habits.
I love the twisted, vitriolic narrative, and I especially like the hot-under-the-collar headlines of these articles.
All the headlines are taken from “respected” thought leader magazines or business websites such as Forbes, Inc, FastCompany, ChiefExecutive, HRExectuive, and there are thousands of these headlines, and the increase in them the past year has been like watching the hockey-stick on a unicorn.
All the words keyed up to make you (the reader) feel like “our” (the company) “employees” are the problem, the competing companies are stealing “our” valuable resources, we are in a war for “our” talent. We must “win” at all costs. We’re gonna try everything!!1!
It’s not us (the company).
We treat our valuable people fairly!
Lookit at how fair we’re being by generously trying to figure out how to get them to stay.
We’re like a family here!
But how dare “our” resources consider going with the money, or a less toxic environment, or realising there is more to life than being chained to a desk for 40+ years to only end up with a broken mind, or chained to a physical job for 40+ years only to end up with a broken body.
Our employees love us!
Newsflash: Employees, not people, not individuals, not a person, “employees”, humans who work for money to be able to live, are like cats, they “love” whoever feeds them the most and don’t treat them bad.
I think the pendulum swung a little too far the wrong way in the past four decades. And it is interesting to now watch those that got promoted and worked for a decade or two in such a system to now realise that the pendulum has swung a little further the other way. But you didn’t notice, because you were too happy with the status quo.
It’s like watching an abuser wake up one day only to find that the victim has an ex-Marine big brother with impulse control issues.
I don’t like lists.
Lists written out to try and impart knowledge and information to the reader.
I do like being able to dip in to things, in an exploratory, unconnected fashion, Wikipedia for instance. But lists, especially in modern SEO writing for the web, have turned in to some bastardized version of useful information. I automatically hate you and your entire family lineage if you have a barely related animated GIF for each bullet point.
My usual train of thought is “a list that isn’t a list”, e.g. https://justinlloyd.li/blog/3d-printer-purchase/ for a 3D printer purchase or my three year long train of thought on prime number research at https://justinlloyd.li/blog/prime-number/. This list that isn’t a list train of thought automatically makes me better than you and I will also silently judge you at the next cocktail party we find ourselves at. There may even be quiet, barely audible seething involved.
On a side note, when I am writing a lengthy article, I usually assemble a list of bullet points first, the outline, and then convert the bullet points into prose, and then re-order the prose, then edit the prose so that it flows. Hundreds of published articles. There isn’t a modern software development trade or software industry magazine I haven’t gotten a published article in to, in some form. And my article always starts as an outline of the subject I wish to talk about.
One brief thought per line.
Typed up in OneNote with any kind of spell check switched off, or a basic text editor such as Sublime, with no formatting or styling or care for grammar or punctuation or spelling. No annoying squiggly red lines to distract me from my train of thought. Short cut keys to move things around.
But I think lists, as a published medium, are a terrible, terrible travesty of the modern web, because they are so abused.
And bullet pointed lists in a presentation, I consider those kinds of things to be used by people who don’t understand the subject, to teach people even less knowledgable about the subject, everything that they know. Which ain’t much. Again, silent judging at cocktail parties that because I am better than you.
I made a post here, about what happens when services to smart devics get cut.
And I don’t like what I said. So I removed the post.
Maybe when these terrible times are behind us, and I have a bit of perspective on the situation, and I have more clarity on my thoughts, I will take a second attempt at it.
Job requires three years of experience in a technology? But you only have two and a half years?
You get to “an advanced age” you are in your fifties, or you are in your sixties, or you are in your seventies.
I don’t have 40+ years of experience in software development that has left hundreds of scars. I have “20+ yrs of competent technical mentorship, leading teams to succes.”
When you are between your twenties and your forties, you are “I am
When you are in your teens, you are exceptionally particular at being considered a very specific age, and you are almost “the next year older” even if that is 9 months away. “You’re commiting code to github using that framework, young lady?” “I can write in whatever programming language I want Dad! I am almost 17!”
When you are under 10 years old, months matter; “oh yeah, well I’m six years and ten months old, so I’m older than you, so you have to do what I say and I say we’re using brainfuck!”
The same kind of thinking should be applied to your C.V.
2 yrs and 2 months? = “I have two years and two months of experience in this technology, but it feels like forever.”
2 yrs and 4 months? = “I have two and a half years of experience in this technology, but it feels like forever.”
2 yrs and 6 months? = “I have almost three years of experience in this technology, but it feels like forever.”
2 yrs and 8 months? = “I have three years of experience in this technology, but it feels like forever.”
20 yrs of experience in a technology? = “I’ve forgotten more about that than you will ever know. It seems like only yesterday I was wringing the oil from the dinosaurs to power the generator that would let me feed punch cards in to the computer.”
The primary rule of salesmanship is to never give the prospect a chance to say “no” before you’ve talked to them in person.
You ask me for a stupid laundry list of technologies with numbers of years in each technology and I can get very creative in my book keeping.
Why don’t I drive a Tesla or other vehicle with fancy sensors and situational awareness that will warn me of stopped vehicles ahead, or pedestrians in the road, or cars backing out of parking spots?
I don’t need one. I have a spouse in the passenger seat that will not only point them out to me constantly but also perform a sharp intake of breath as an early warning system before anything could possibly happen.
“Oh it’s not you I don’t trust, it’s the other drivers on the road.” she said to me today.
Uh huh, sure. Nice save.
I’ve run in to a lot of people that opine “I don’t know what to write!” My problem is, I don’t have enough time to write all I want.
How do I come up with stuff to write about?
I either trawl through my notebooks for pieces I can use about personal projects I am working on, e.g. buying a 3D printer or constructing a cabinet in the workshop or prime number theory.
Or I scroll through social media until I find something that makes me annoyed that makes me want to shake my fist at a random passing cloud, or someone asks, again on social media, a thoughtful question, and then I form an opinion on either of those two subjects, and then I write about that.
And for every one post on my public journal, I probably have five or six more pieces in my private notebooks that probably shouldn’t ever see the light of day.
Today I made notes on Anchor Hocking storage containers, a math problem, some computer vision research, storage in my workshop, how to write journal entries, rubbermaid container storage options, and the car maintenance schedule.
Read social media. Get annoyed or answer a question. Write a journal entry.
That’s it. That’s my entire method.