Bookshelf: The Deficit Myth

Before the personal computer, there were minicomputers and mainframes. I understood them as large machines housed in refrigerated rooms and guarded by stern, but good, wizards (system administrators). The personal computer changed that. With a PC at home and sitting on my desk, the internals -- cpu, memory, graphics card, and disk drive -- became accessible. It was a revelation.

Reading The Deficit Myth gave me that same revelatory feeling, although in the field of economics. Before Dr. Stephanie Kelton's book, I understood that deficits were bad, while balanced budgets were good. That is, the government should manage its money like a household: spend only what you can afford, and avoid debt. The household budget approach was relatable, and sounded right. But there were nagging inconsistencies that a household budget approach could not explain. If deficits were bad, how did they successfully fund the space race to put a man on the moon? Or pay for wars (necessary or not)? How did…

Post Processing: Dark Mode Reconsidered, Inefficiency Revisited, and a Linked List Reversed

I first shared my enthusiasm for dark mode in the post Automate Dark Mode in Apple OS Mojave.  Not everyone likes dark mode though, and Victoria Song of Gizmodo recently wrote a light hearted essay to Stop Using Dark Mode. She made some fair points.  Color themes for light mode have been around longer and their designs have had more time to evolve; the result is superior contrast and better readability than their dark mode counterparts.

I've also found dark mode limitations in Apple's Mail App. While Mail is dark mode capable, html email is rendered in light mode and the harsh contrast is painful to the eyes.

Where dark mode shines is when I'm using one application exclusively such as Xcode or Android Studio. The colors are consistent, and free of competing themes, the experience is immersive and harmonious.

Discussions of inefficiency continue to trend. I contributed with the post The Hidden Cost Of Efficiency, where resiliency is inversely proportional to efficiency.   …

Space, Time, and Imagination Have No Boundaries, But Your unsigned char Does

When you order a new refrigerator, you:

a) measure the space it will occupy and you walk the delivery path to check the width and height of doorways, hallways, and entry ways.

b) OMG! Take the front door off its hinges!!

c) disassemble the refrigerator outside, and reassemble it inside.

Any answer other than "a" would suggest that you are possibly an overworked programmer who doesn't check boundary conditions.

It would also put you in the same company as the programmers who allowed a killer wallpaper to brick certain Android phones. When installed, this wallpaper would send the phone into an infinite loop, causing it to crash, restart, and then crash again. Even safe mode could not break the cycle.

YouTube tech reviewer, Mrwhosetheboss, played detective in this video, pursuing what he first suspected as malware, but then realizing it to be something more mysterious. He even bricked his own phone in the process.

In the end, it came down to one faulty pixel where the calcu…

Pointers Don't Create Memory Bugs, Programmers Do

After parking your car, you:

a) engage the parking brake
b) engage the parking brake only if you are on a hill
c) what’s a parking brake?

Any answer other than "a" suggests that you, as a programmer, don't park your pointers after you free them.

ZDNet recently published a couple of articles about Chrome and Microsoft, reporting that 70% of all their security bugs were memory safety issues. That weighty number was made heavier coming from companies where resources are abundant and developers are first class citizens. I can only imagine the bug count is higher in companies where budgets are tight and developers are support staff.

The article continued, describing C and C++ as "memory unsafe" languages, and attributing hackers with increasingly sophisticated attacks.  I even found myself reconsidering my Symmetry post, where I insisted memory can be managed if you cared enough:

common mistakes such as memory leaks and buffer overruns . . . are overstated, and can …

A Conversation With A Short Order Cook

Lunch time. It was raining, and the company cafeteria was crowded. Waiting in line at the short order station, I overheard the cook remark how busy the place was.  "It's because of the rain," I interjected.

She looked at me wryly, and said "You're not supposed to say that." She added, "You're supposed to say how wonderful the food smells, and how good it looks."

She was right.  I smiled and offered my only defense: "But I'm a computer guy."

This was little better than the rude waiter who defended his behavior as just being "French."  And yet, if you think French waiters are rude, try talking to a sysadmin.

Computer folk are notorious for being blunt. That's partly because when working with computers, we know we can't coax the machines to run faster by offering compliments and blueberry muffins.  Clever managers, however, know they can use compliments and blueberry muffins to coax developers into working late, b…

Post Processing: 2020 Hindsight

When I posted 2020 And The Year of the Rat, it was a twofer of optimism, welcoming both the 2020 New Year and the Chinese New Year. With the year nearly half over, much of the optimism has been drained, and we find ourselves in a pandemic.

The second half of the year could be worse. Dr. Rick Bright warns that without a consistent and coordinated plan to contain Covid-19, 2020 could be the darkest winter in modern history.

Regarding The Hidden Costs of Efficiency, the NYT examines How the World's Richest Country Ran Out of a 75-cent Face Mask. Farhad Manjoo recounts what we learned the hard way, that just in time supply chains ... are built to optimize efficiency, not resiliency.

When we eventually emerge from this pandemic, will we take this, and the many related lessons, to heart?

Edit 06/10/2020 - "The second half of the year could be worse." It got worse. R.I.P. George Floyd.

The Hidden Cost Of Efficiency

When it comes to coding, we developers take pride in writing programs that run fast and aren't bloated. Taken to the extreme, the cost would be readability, scalability, and maintainability.

We also take pride in writing software that is robust. Programs that recover gracefully when the unexpected happens are not just ideal, but real world requirements. Add security and privacy, and the cost here would be extensive testing, longer periods between roll outs, and a hit to performance.

This tension between efficiency and robustness is something developers wrestle with all the time, and a popular saying among programmers (and engineers) is  "Good, fast, or cheap. Pick two."¹

The impact of Covid-19 has prompted a bit of soul searching regarding efficiency and resiliency in the economy, supply chains, and manufacturing. Evidently, the world has tilted too far toward efficiency, and now finds itself vulnerable to shocks.

For example, Will Oremus explains on Medium that there …