To be fair, it was _saving_ after having performed the glitch that persisted glitched data to the save RAM, but I only figured that out seven years later.
1,806 karma · joined September 13, 2020
https://hardwarehacks.org
To be fair, it was _saving_ after having performed the glitch that persisted glitched data to the save RAM, but I only figured that out seven years later.
Four hours later, I came back home, and the thing was still running.
You could argue that it was just sitting at the folder-question-mark icon and doing nothing useful, but I'm assuming that it also meant no power saving features were enabled by the kernel (at least, that's how it works in the PC world - I was quickly disparaged of the notion that running DOS instead of Windows 98 just for my text editor would give me better battery life).
I can identify many beliefs about the state of the present (now the past), and the state of the future (now the present), that I held around that same age, and that I'm now embarrassed by. I had no fully-formed idea of what success looked like, save for the meager success I'd enjoyed up to that point. Yet somehow, I felt qualified to hold those beliefs anyway.
Case in point: I at 24 (roughly the same age as the author, minus one year) was having a talk with a 37-year-old colleague, where he brought up a statistic he'd read: $27 million was self-sustaining - that, due to diminishing returns, you'd be living the same lifestyle solely off the interest proceeds, if you didn't work another day in your life. My first thought was, "that's not fully out of the realm of possibility - that's maybe even doable!" That was back when I was in the exponential growth phase of my career - I'd just graduated college, and had the word "Junior" dropped from my title shortly thereafter. I now know that's ridiculous, and I look back at 24-year-old me with some contempt for having thought it.
First of all, building a provider isn't straightforward. The best way I've found to do this is to wrap `terraform init`, and have it `docker run` a build process for a plugin version that never existed - then dumping the built provider into the `.terraform` directory for the project. It's prone to failure; new users of the Terraform project complain that the build eats 8GB of RAM and takes many minutes.
Second, providers are constantly changing, and it's not always possible to cleanly rebase a set of community changes on top of master. Part of the trouble with letting PRs wither on the vine is that they themselves become stale - in one case, the code still compiles, but the end result is completely wrong.
For what it's worth: my use case was needing to use Terraform with some more "unusual" features of CloudFront and ALBs. The 80% use case for support is great. There's a remaining 15% that's well implemented by unmerged PRs, and another 5% entirely that's completely unsuppored. I've kept it IaC by using the `null_resource` provisioner to shell out to the AWS CLI where absolutely necessary.
This, but I'd argue it's not limited to Ubuntu, or even to Linux.
For the desktop environment, I've been using Cinnamon with my family, since it's ostensibly most similar in the UI metaphor to Windows. That's luckily been a nonissue.
The problem has been Web browsers - looking specifically at Firefox. My mom and my grandmother had pretty big upsets when Firefox released Australis, and Photon knocked my grandmother off the Internet completely (she suffers from dementia and isn't able to comprehend changes in her environment anymore).
It doesn't have to be that way. My dad is still using SeaMonkey, and has almost completely avoided this problem - the UI has been largely consistent since the Netscape 4 days.
Reliance happens because you demonstrate both the willingness and knowledge to fix something. I'm still willing, but I'm utterly lost in front of a Windows 10 PC. That is what now makes people less likely to reach out to me for help.
My most-used means of file transfer is "e-mailed zip file", and generally this works well - until, of course, someone can't open a zip file on their phone. Which I'd assume is most phone users. The phone doesn't need an unzip utility, because a phone user expects a link to some cloud service (Google Photos, etc.) to achieve the same thing. The content doesn't live on the device; it's just a dumb terminal.
Taken to its extreme, I recently had to downmix several HD videos taken on a phone onto a DVD, and _physically mail it overseas_, because even the cloud option wasn't open to the user.
If that's not proof that Stack Overflow has helped me learn arcana, I don't know what is. In fifteen-plus years of working with IDE drives, I never figured out this pattern and typically just fumbled jumpers into some combination of master, slave, or cable select until all of the drives worked.
In the 2000s, running with an ad blocker was a near surefire way to speed up loading a page without any functional issues cropping up - the ad blocking tech even then was _good_.
Then came paywalls - pay for this content, or you won't see it. I suppose, then, I won't see the content.
Then came JavaScript frameworks in the 2010s - ads weren't assets anymore, they were actually part of the content. But for the most part, the Web still worked without JavaScript, and many sites (for what reason, I still don't totally understand) would gracefully fall back to presenting "just the content" if JavaScript was disabled. So I traded an ad blocker for NoScript, turning the lot of it off instead. Some sites need a minimal amount of JS to function, which I'll allow (first-party and CDNs like `jsdelivr`). But if you require JS from stripe.com, I suppose I also won't see then content.
But eventually those JavaScript frameworks became bold - displaying partial content, or no content at all, became the fallback. I count the "Continue reading" button among these (and I get why - tracking who actually read the article must be vastly more lucrative than counting pageviews), though some pages are so bold as to display _nothing_ but the "You need to enable JavaScript" text itself.
Most recently, I've noticed a new tactic: setting a CSS "opacity: 0;" on the page, then removing it with JS, even when JS is not required to load the page. Removing the rule with dev tools shows the entire page. I can only assume this is a way to make sure the page doesn't become visible until all of the content is loaded, but again, the content includes the ads, upsells, and otherwise.
Thankfully I've logged into Hacker News and posted this comment without JavaScript enabled. I wonder how long I'll be able to do that.
At one point I was trying to automate against an internal tool that had a (useless, for my purposes) dependency on AWS. Rather than give my pipeline access to AWS, I strapped VCR (https://github.com/vcr/vcr) onto it, ran it on my laptop with my own AWS permissions, and then just ran the automation with VCR in front of it from there on out.
Admittedly, I've been notoriously bad at realizing that I've entered that phase. On three high-profile occasions (two computers and a car) I've exceeded the saleable value of the thing in upkeep costs, in the span of just a few months - it would've been cheaper to divest and replace.
Determining that you've crossed that inflection point is, I assume, a skill.
If you're OK taking on those problems, go for it. If not, you're essentially rolling the dice - you may end up with a situation that's better or worse.
I've gotten the lion's share of my furniture either from individuals or from Craigslist. Right now, I'm sitting in my kitchen eating lunch, on chairs that I did buy new, and looking around: my "decor" are plants, empty espresso roast cans, mason jars salvaged from sauces, and empty craft beer cans from various local breweries (we're lucky to have three or four per town, and they all have super-creative labels). This is after just getting home in a used luxury car, earlier today having woken up to a 70s Realistic clock radio, typing this post on an off-lease (but rock solid) ThinkPad, and so on.
The picture I'm trying to paint there will differ depending on your own attitudes towards the "waste" stream. Most people around me have commented positively on it - the furniture is "nice", from old-money brownstones in downtown; the beer can collection is a great conversation starter. But of course, there are still some (and luckily, seemingly, a minority) who can only see it as trash, a sign that I've "opted out" of basic economics, or at worst, that I just don't care enough about my appearance.
Yes, you can use a paper atlas. I have an 8-year-old car with GPS, and a 34-year-old car without. I bought a map book for the 34-year-old car, thinking it'd be a "period accurate" way of driving it; it's anachronistic at best, and frustrating at worst - can you read the street signs, and did you drop your compass under the seat? In the 8-year-old car, I can hit a button, say "Navigate to (an address)" _while driving_, and it figures it out.
Some of these I do on principle (only pay with cash, avoid loyalty cards, etc.), and I accept a compromised UX as a result. Your mileage may vary, depending on how much you get out of these things, but the immediate impact of them seem generally negative.
Linux's "killer feature" for adoption may just have been the copyleft license. If device manufacturers had delivered today's generations of single-board computers, networked cameras, Android phones, and who-knows-what else on a permissively-licensed OS like BSD, each of these device trees would have had no mandate to make source available - and as such, I'd bet that any one entity (Samsung, LG, HTC, etc.) maintaining a device tree wouldn't have seen fit to open-source their "trade secrets" in the ARM ecosystem. Which, I'd also bet, would have led to fewer manufacturers adopting noncommercial BSD to begin with, as the "core" distribution would have been less ready to take on new platforms.
* Hard-coded encryption keys
* Hard-coded IP addresses (remember, IPv4 addresses are 32 bits long, which is convenient for many embedded CPUs and even some MCUs)
* Hard-coded (instead of random) hash salts
...and generally all manner of things that shouldn't have been hard-coded. That's not to say all constants are bad, but I can see 0xFF000000 and know it's probably just an uninteresting bitmask, then see 0x22C1211E, and maybe with some training (I can't do it by sight alone, for sure) see that it's an IP address in AWS address space.
The intent is obvious: stop everything else that you are doing and join, so that it's the only thing that you are doing.
Declarative languages, like SQL or (dare I say) Terraform, seem to be good teaching tools in that regard.
Who's given the compliment is, of course, a key factor. If it's a critical coworker, I'll be empowered by that. If it's a yes-person coworker, it's likely trite. If it's a friend who I've just power-sanded a deck for, it's appreciated. If it's a family member complimenting me on a sandwich (it happened recently!), it's uncomfortable.
Extending that to DV tapes: the DV format is interesting in that every frame is a keyframe, and encodes an entire image. That's in contrast to H.264 and friends, where frames can be predicted, and/or just the difference between a prior and future frame can be encoded. DV also encodes a timecode into each frame. So if you had multiple DV decks and were able to get a bunch of unclean imports, it seems like it'd be trivial to write a small tool that grabs all of the clean frames from each and stitches them together over the gaps in others, according to that timecode.
(Disclaimer: I've never done that, this is a pure spitball.)
I could ostensibly argue that I got the job not by telling the interviewer what he wanted to hear, but by doubling down on the right answer and showing that I had the capacity to prove it.