Chris Brannon's Blog rss

Smartphones Are a Toxic Dumpster Fire

Nota beni: I am totally blind and have congestive heart failure with regular episodes of ventricular tachycardia. Keep all of that in mind as you read this.

Back in June of 2018, I bought a Motorola G6, an Android phone, through Amazon. Yeah they’re a terrible company, but that’s a topic for another rant. We didn’t do our research. This device was sold as a “Prime Exclusive”. Essentially, that means that it came preloaded with Amazon bloatware, and that the bootloader was locked. Ok fine, whatever. I was working at the time, and I really needed the phone. I was on pager rotation too. I could – and did – write it off as a work expense.

Fast forward 2 years to September of 2020. That was when my Moto G6 stopped receiving updates, even security updates. In a sane world, I would’ve just installed a third-party ROM like Lineage and gone about my business. After all, I had managed to add years of useful life to a previous phone by doing just that. But recall that my Motorola has a locked bootloader. Motorola does have a website that will let you unlock the bootloader on their devices, but they wouldn’t give me an unlock code, because the phone was sold through Amazon and locked to Amazon. I do still have it around here somewhere. If someone wants a ticking time bomb, I’ll gladly sell it. Addendum: I called both Amazon and Motorola. Both refuse to unlock the bootloader on it, even though it is well out of warranty and hasn’t received software updates in over 3.5 years.

Fast forward to May of 2023, when I decided to buy an iPhone. Essentially, I did it because I got tired of hearing my girlfriend Deedra complain every time I borrowed her phone to scan printed mail and other items. I bought it off Ebay, as open-box. It’s cheap, I don’t have a lot of money, and I’d rather not pay premium prices to Apple for something brand new. Their phones do at least have great accessibility. The details on this phone claimed that it was an unlocked iPhone 2022 SE. But I was asked a bunch of customization questions, including “select network”. What the hell. So I left AT&T selected.

A few days later, my phone was delivered. I have a pay-as-you-go SIM card through jmp.chat. This is great for someone who very rarely uses cell service. They charge $7 a gig and are data-only. But that’s fine, because I already use jmp.chat for VOIP service, so data-only is perfect. I call over SIP and text over XMPP, and I cannot recommend this service highly enough. And while the $7 per gig sounds high, it isn’t, when you consider that I only use cell service for hailing ride-share, GPS programs, and the very occasional phone call. It’s much cheaper than paying carriers significant amounts of money each month for service I barely use. So I pop the new SIM card into my “unlocked” iPhone. Well, actually, Deedra does it, because she’s better at that sort of thing. And the phone refuses to accept my SIM card! My unlocked phone is locked to AT&T.

They have a “device unlock” page on the web. So I tried that. It failed with a message saying that my phone could not be unlocked because service was cancelled during the 14-day return period. WTF does that mean?

I spent a few hours that day dealing with AT&T, trying to get my phone unlocked. I talked to their script-reading customer support people over the phone, and then I took it in to not one, but two local AT&T stores. At the second store, the person I spoke with intimated that it might have been stolen. “Ok fine. If it’s stolen, I have the phone right here in my hand, and I’m perfectly happy to give it to you and also give you the receipt from the place where I bought it.” “Oh no, that won’t do. You need to get a refund from Ebay.”

I didn’t have the spoons to fight with the seller on Ebay. I told them I’d expected an unlocked phone and they sold me a locked one. And then they tried to tell me that I’d intentionally bought a locked phone. Well maybe I had. After all, I left the AT&T box checked. Maybe I was confused. Not enough spoons to fight this.

One of the people I spoke with at AT&T also told me that they could unlock my phone if I had AT&T service for at least 60 days. What the hell. I’ll sign up and then get my phone unlocked! I’ll be out some more money, but I can live with it. So I do that, and for the next couple months, I pay AT&T somewhere around $100 per month for service I barely used. I think I used like 442 megs of cell data in 2 months. And no cellular voice or text, because I already have VOIP that can work over cell data. Once 60 days had passed, I tried unlocking again. They still refused to unlock my device. I cancelled my service. Fuck these clowns.

More months pass. I’m perfectly ok having a wi-fi-only smartphone. I can at least dial 911 on it if I need to, because phones without cell service can always be used for emergency calls here in the US.

Then in February I landed in the hospital for a week. Not only that, but they transferred me from my local hospital to a university hospital in Portland. Thankfully hospitals tend to have excellent wi-fi service, so I was able to make calls, listen to audio streams, and so forth. Yeah, that’s great. After nearly a week’s stay, they discharge me. And I realize that what I really need is cell service. I could theoretically borrow some money from a friend and pay for a very expensive Lyft to get home. I could even hail Lyft over hospital wi-fi. I’ve done it before; works fine. I don’t want to be riding in a Lyft for over an hour with no way to call my family and such. If the Lyft driver drops me off at the wrong corner, I don’t want to be stumbling around unable to get help. Long story short, I end up sweet-talking the hospital into getting me a cab, and I got home in one piece.

In March,I get this bright idea. I’m going to try one of these phone unlocking services. The one I ended up trying was Doctor SIM. After doing some initial checks, they tell me that “Your phone is not reported lost or stolen, and it does not have any outstanding bills, but we cannot unlock it via the basic unlock service”. I paid $256.95 for their premium unlock service, and this morning, I get a message saying that they still can’t unlock my phone and they’re refunding my money. They did in fact refund it, too!

My next bright idea was to buy a mobile hotspot. So I do that. This one is actually unlocked! It’s a few years old, but that’s ok. When I got it, I realized that it took a micro SIM, but all I had was a nano SIM. So I ordered a SIM adapter. Unfortunately, we couldn’t get the SIM to fit into the hotspot even with the adapter. Three people – including one with sight – tried and failed.

Ok, I’ll order a new SIM card. I do that, and it arrives. We break it down to a micro SIM and try to put it in the hotspot. It breaks, giving me part of a SIM card and a piece of plastic lodged in my device. After some man-handling, I pried the plastic bit out, but I’m pretty sure I destroyed my hotspot irreparably in the process.

At the end of March, I decided to file a complaint against AT&T with the Better Business Bureau. AT&T followed up with me, and I got a call from someone in the office of the president of AT&T. I spent half an hour to an hour having a fruitless discussion with him. I’ll try and paraphrase it.

Me: So I have this phone, which is apparently not lost or stolen. However, it is locked to AT&T and AT&T refuses to unlock it.

Him: I can’t unlock the phone, because it isn’t fully paid off.

Me: So the phone isn’t fully paid off, yet I bought it from a third party? Isn’t that the moral equivalent of (unknowingly) buying fenced goods?

He never gave me a direct answer to that question, just a bunch of corporate deflection.

Me: Ok then, so the phone isn’t fully paid off. Can I just pay the remaining balance on the thing and get it unlocked?

Him: No, because you weren’t the person who originally purchased the device from us. If you had the account info (including the passcode) for the customer that bought it, we’d let you pay it off.

Me: You won’t let me pay you the remaining balance on this device, but you’re more than happy to let me use it on your network?

Him: Yes.

We eventually looped back around to “How is this device not considered stolen?” It devolved from there, and I wasted my time.

At this point, I have a few more options to try, but I’ll probably end up pawning these devices. The Motorola is essentially e-waste, thanks to Amazon, and the iPhone isn’t usable as a cellphone unless I want to pay AT&T’s prices.

Yes, I fucking hate smartphones.

Post scriptum October 2024: I gave the iPhone away to a person in need via the Buy Nothing group on Farcebook. The old Motorola is still with me, in my closet, awaiting a fitting end at the local ewaste disposal facility. There’s still time for anyone who believes in locked down devices to buy it from me!

Posted 04 Mar 2024 12:47 by chris Updated: 05 Oct 2024 11:39
Tagged: smartphones

A Brief History of Internet Email: How Email Won

I wasn't a participant in any of this history: just a teenager who read a lot and paid attention to what was happening at the time. I'm also oversimplifying, and I'm probably telling a lot of people things they already know or even things they know better than I do.

Today, when you say the phrase "electronic mail", there's a nearly 100% probability that you are actually talking about Internet Mail: messages in a standard format exchanged using the Simple Mail Transfer Protocol (SMTP). As recently as the 1990s, that statement did not hold true. There was a huge diversity of systems described by the phrase "electronic mail".

One of the first services I used through a modem was CompuServ. I had an account there for a few months, and was it ever expensive. CompuServ had email service. Users could exchange messages among themselves. It was mostly a silo, except for an Internet gateway. If I recall correctly, my CompuServ user ID was 72714.2172. So I could be reachable from the Internet with the email address 72714.2172@compuserv.com. There were a few other walled garden online services like CompuServe: GENie, Prodigy, and AOL. I'm fairly certain all of them had mail gateways to the Internet.

Around the same time, I started using local bulletin board systems. Many of these were linked in a store-and-forward network called Fidonet. Essentially, each board in Fidonet peered with other boards. They'd call one another in the wee hours of the morning to exchange electronic mail, files, and echomail. Echomail was basically a many-to-many messaging system. Think Usenet, or forums if the forums were distributed across multiple machines.

Most email sent over Fidonet was between fidonet users, but like CompuServ, there was a gateway from Fidonet to the Internet. When I realized this, the first thing I did was send myself an email message from a local BBS to my CompuServ account. It took days to arrive!

There were dialup services used exclusively for email. For instance, in 1993, you could buy a monthly subscription to ATTMail or MCIMail, and the only thing these two provided was email. According to Wikipedia, MCI Mail also offered "email to snail-mail" service. My fuzzy memory tells me that these services used a protocol called X.400. That was telco stuff, so likely a lot more convoluted than SMTP. At least by the 90s, both services also had an Internet gateway.

Then there was UUCP, another store-and-forward network for exchanging files, electronic mail, and Usenet articles. Initially UUCP was used by Unix machines. I'm pretty sure that by the 90s, there were also PCs running MS DOS on the UUCP network. I used a few MS DOS bulletin boards where the sysop was obviously pulling a UUCP feed. Again, there were gateways from UUCP to the Internet, so that hosts reachable over UUCP could exchange mail with hosts on the Internet.

See the pattern? As late as the 90s, there was this huge diversity of email systems and protocols. Through gateways and radical interoperability, the Internet bridged them. That's how email won. For many people like me, email was the very first Internet service we used, even though we didn't have full Internet access.

Posted 22 Dec 2023 04:35 by chris Updated: 30 Mar 2024 15:50
Tagged: history interoperability networking

Justifying Technical Choices

After my HTMX post the other day, a friend was asking me about my technical choices. “Why do you use HTMX?” “Why do you use that Lua Scheme hybrid, when you could just use Lua?” (The second question was of course referring to Fennel).

When it comes to open-source or personal use code, the most correct answer is always: because I wanna. Do your thing. You really don’t have to justify your choices to anybody. A “give zero fucks” attitude is a thing worth cultivating in life sometimes.

Now that my brief rant is done, those are actually some questions that have interesting answers.

Why HTMX?

The short answer: because it’s declarative. No, it’s not fully declarative, because you have to load the htmx.js or htmx.min.js script from somewhere. But once you’ve done that, your browser supports a kind of extended HTML for generating dynamic content, declaratively! Arguably, HTMX could be supported directly in browsers, and perhaps that would be a very cool thing, because then you wouldn’t need to load any JS at all.

Declarative code has some really nice properties. It’s one reason why SQL has stood the test of time. I’d also argue that it is more secure. That’s harder to prove, but I’ll try and justify my assertion.

HTML is easier to introspect than JavaScript. “View source” is your friend! This is especially true when you consider that so much JavaScript on the web today is produced by compilers, minifiers, obfuscators, and other tooling. You might as well be looking at binary blobs, even though the content is technically text. I call this human-hostile JavaScript “dog vomit”. It’s the description that occurred to me when I was working at Google in 2012 and first saw the output produced by their Closure JS transpiler.

An introspection-friendly web is, by its very nature, a more secure web. I can view the source of a declarative webpage and assure myself that it isn’t trying to mine crypto on my box. Which, by the way, is why big tech hates URLs and view source etc: because they want to do nefarious things with your computer, like show you ads. It’s also why you probably won’t see an equivalent to HTMX in something like Chrome, even though that would be awesome.

Why Fennel?

I like Lispy languages. One reason I like them so much is that they impose less cognitive load. My friend who was asking me questions about my technical choices was telling me a story last week, about how he got the wrong result from an SQL query because he forgot or didn’t realize that and took precedence over or. There are basically three solutions to that problem:

  • Remember a bunch of precedence rules! Here’s where cognitive load comes in.
  • Insert parens aggressively when you’re unsure of precedence. Now you have an infix language with useless parens all over the place, and it’s hard to read.
  • Just use a Lispy syntax!

Yeah, I prefer option 3. It’s so much easier for my little brain.

So why Fennel, specifically? Fennel is basically a Lispy veneer on top of Lua. I could have gone with another Lisp. I’m a fan of Chicken Scheme, for instance. That one compiles to C. But I wanted to experiment with Fennel, because I think Lua itself has some desirable qualities.

The cool thing about Lua is that it is aggressively portable. It basically runs on anything recently modern with a C compiler, and by recently modern, I mean the 1990s. It’s also very lightweight. It runs on my wireless access point. That’s what I call portable! LuaJIT, an alternative Lua implementation, is blazingly fast if you need that, though it is not going to be as portable as stock Lua from PUC Rio. There’s a fairly large community around Lua, and users have produced numerous extensions over the years. A Lisp that compiles to Lua gives me the syntax I love with the advantages of Lua.

Posted 22 Dec 2023 03:32 by chris Updated: 30 Mar 2024 15:46
Tagged: Fennel HTMX Lua rant

Playing with HTMX

HTMX is pretty awesome. We have a few Bluetooth LE sensors in various rooms of our apartment to keep track of temperature and humidity. They are sampled periodically, with readings written to an sqlite database. Up until now, I’ve just been showing the current data with a little command-line script. But tonight I wrote this stupid little CGI script in Fennel that displays a table of house data and then polls every minute to refresh the table. A dynamic webpage, with no JavaScript other than htmx.min.js! It’s so refreshingly simple, and I hope HTMX gets some wide adoption.

Posted 20 Dec 2023 12:08 by chris Updated: 30 Mar 2024 15:47
Tagged: Fennel HTMX

Test Post from Flak

Installed flak on blog.the-brannons.com, and it appears to be working nicely.

Posted 26 Aug 2023 12:09 by chris Updated: 26 Aug 2023 12:09
Tagged: smoketests