Once upon a time, before the death of irony (what do you think, did irony really die in 2001? I feel like it’s sort of still around) there was a link soup column called, “Suck.” The format was a short essay written in a glib, cynical voice (I just typoed that as, “void,” and that’s totally appropriate) riffing on some trend-of-the-moment, with one or two links to stories or websites sprinkled in each sentence. It totally earned the name, “Suck,” by not putting alt text on the links, so you had no idea where the link went. If you followed every one, you’d have a boatload of open tabs to click through, so it would suck up your day, as well as being a sucky website.
That said, it occurs to me now that as shitty a way of aggregating a daily news feed as that was, I think I’d rather have that than the horrendous torrent of vague hot takes on Twitter. At least Suck was meta enough to give some hints about whether the link would be worth following or not, albeit still being vague about the content in what’s clearly recognizable today as a clickbait move. Dunno if they were getting referral money from those links or not.
Once upon an even earlier time, for about a week I thought I might enjoy writing for the school paper. I got a tiny bit of training and actually went out on assignment and turned in a story and then decided that while I could possibly have gotten enough better at writing short essays – for no money and no grade – that people might want to read them, I had no actual desire to do it. Too much like work. One of the things I remember about the training, though, is that the headline is supposed to engage readers, giving a gist of a story while inviting the reader to keep going. Apparently, that’s not true any more. Nowadays, it seems that the purpose of a headline is just to drive hate clicks.
So, that’s the evolution of discourse.
Here’s the best of today’s crop:
“Senate Republicans make new infrastructure offer as House Democrats urge Biden to dig in” – Washington Post
So, the public humiliation of the Democratic party is continuing. Everyone who cares already knows that the Republicans don’t give a shit about public infrastructure. So if they’re not going to build roads and bridges, what are they doing? They’re making the Democrats dance to their tune. Why? Go ask the kids who swiped the loser kid’s backpack and are now playing keep-away before school, why are they doing it. They’re doing it because it’s fun. Because they like taunting the helpless. Because they actually don’t like that kid and they want that kid to suffer. Because the suffering of others is fun. And that’s the kind of people they are.
Of course I didn’t click through to the story. Why would I?
“Nature Will Help Protect Us From Climate Doom – If We Let It” – Mother Jones
Seriously, God bless the hippies. They’re so cute, how they think that there’s some big agent out there, “Nature,” and that agent doesn’t actually include human beings. Because things humans do are not part of nature, because humans are unnatural. Sure, I’m playing semantic games, and we all know that’s not what is meant in this context, but come on. Think for a hot second while you read that headline – climate doom for whom? Let it, how? Is there any mystery left about how human activity has altered the climate? Nah, not really. And do sea level rise, weather pattern shifts, and average temperature increases threaten all life on the planet, or just the established human land use patterns? Yeah, we all know the answers there, too. So what needs to change? Yeah, we know that, too. I mean, there could actually be something in this article about new farming practices or something but that headline doesn’t suggest it; it’s just trying to restate the warnings we were getting 50 years ago.
I’m one of the hippies and even I can see that this headline is aimed squarely at a point that we’ve passed long ago. Of course I’m not gonna click that.
“How Many People Die When Polluters Exceed Their Limits?” – Wired
I’m gonna go ahead and guess that the answer is, “All of them.” I mean, everyone dies, right? Yeah, I know, this is about the fact that pollution causes disease, either by pathways we know explicitly or by means we don’t quite know but which we can see clearly in statistical analysis. So, really, this is like saying, “Okay, you’re going to die sometime because nobody’s fucking immortal. Now, if you suck on this exhaust pipe for 12 hours a day, you’re gonna be real short of breath and lose a significant amount of brain function due to lack of oxygen, as well as get a very elevated risk of a whole suite of cancers. Which will likely kill you sooner rather than later. But if we cut it down to 4 hours a day, the same damn things will be true, except it’ll take longer. So what’s the number of hours that’s right for you?”
Substitute heavy metals leached into the drinking water, or whatever pollutant you want. I still see this as an attempt to convince somebody that maybe some stranger’s life isn’t worth throwing away just so you can pay less for your next t-shirt. I bet that if you really think cheap electronics are more important than clean water, no news story is going to change your mind. That said, if it does, then give this writer a fucking medal.
“We worked in a VR office for a few months and didn’t totally hate it” – Mashable
I guess that puts you one up on literally every human working in a cube farm, ever.
No, I’m not going to read about how it’s almost not horrible, being a veal in a pen, when the pen is in your own house.
“The future of remote work is a lot like living in a video game” – Mashable
…because video games have become just like fucking work! Grinding an MMO to get leveled up so you can do your part in a big raid, or grinding so you can build some better longhouse, or getting better at tapping different buttons so you can make sandwiches faster and sell more things. Have you yet realized that your “recreation” time is being spent doing dumb shit that we used to pay teenagers minimum wage for? You are paying a monthly subscription fee to be allowed the privilege of working fast food, or working in a goddamn warehouse! Work isn’t becoming like a video game, video games have become work!
Of course I’m not gonna click that!
“The U.S. is alarmingly close to an autonomous weapons arms race” – Fast Company
For this news organ, “alarmingly close,” is the style guide’s preference over, “already in.”
I guess that the target market for Fast Company is people who do not read any tech news, nor listen to any popular science podcasts. People, that is, who are utterly unaware of the developments in robotics since 1990.
No, I’m not going to read that.
“Will rule of law succeed where Congress failed and hold Trump accountable?” – The Guardian
“‘Never seen levels like this’: Union president on airline passenger misconduct” – CNN
This is a story about how people are garbage, which comes as a complete surprise to everyone who has never read the comments section anywhere on the Internet.
As well as being a story, this one is a video clip, which means that in addition to being told that people are garbage, it’s going to use even more of your data stream. So, people with power are being dicks to people they have power over. Saved you a click. And a gig of data.
I have been nerdsniped by the dratted Russian hackers. Those darned “hackers”, causing trouble and getting people all excited about security. So now I’ve got to deal with thoughts and suggestions in my peripheral awareness, and remind myself that I’ve already done the work of threat modeling and risk analysis for my data and for our household. This is a thing that happens to us kind of a lot: some event gets people talking about a thing (infosec, disaster preparedness, whatever) and we haven’t been thinking or talking about that thing and we experience a moment of panic — oh shit, are we ready for that — and then we breathe and calm down because, yes, we have thought about that and we have a plan and we made decisions, which is why we haven’t been thinking or talking about it.
There are only two reasons I can see to use a VPN service. First, to get around IP based geolocation tracking, so you can get access to content (usually video) that is only available within a particular geopolitical area. Second, to prevent your ISP and/or other users of your local wifi network from knowing that you, Joe Internet User, are requesting content from embarrassingwebsite.com and illegalstuffpurveyors.com.
Once your “free” email provider has received a message for you and put it in your inbox, they’ve already processed that message and indexed it for your user-as-product profile. You know the saying, “If you can’t tell what the product is, you are the product,” well, when the service is free, then your attention is the product. Deleting your emails doesn’t mean that the service will forget that you received an email from Aunt Mary, or that you received a purchase receipt from Amazon. So either you care about that and you shouldn’t use a free email service, or you don’t and you should.
Whatever other evil / dodgy things Facebook may be doing, the implementation of their feed and the network of people to whom I’m connected is such that it is really an instance of “Anxiety as a Service”. My life is better without it. Twitter is just barely better, but at least I have software that lets me get my friends’ updates without having to subject myself to the algorithmic scrambling and hiding of tweets and the interstitial insertions of ads and sponsored tweets. So I can manage how much rage and anxiety I expose myself to. Mastodon is awesome because there’s nobody there and I can totally handle one update every other day.
You know what’s amazing? Not downloading random crap, not clicking on links in email, and not having every dang device in our house connected to the big bad Internet. If you don’t stick a computer in it, it can’t get a computer virus. It’s awfully difficult to hold my refrigerator hostage when the only wires going in are the electric mains. I am a grumpy old man, and I lived my life this long without being able to turn on my stove from across town. There are real problems that we had and which we solved with some IoT things, but every single Internet connected thing has a big hurdle to jump before it gets into the house: how will our lives change when, inevitably, the server to which it talks disappears? Because even in the extremely unlikely event that the device and server are never compromised by malware, the fly-by-night company that makes the thing is going to go tits-up in a few years and either disappear or be acquired by an evil monopoly. If you are going to be upset by any of those events, then don’t allow the thing into your network. At the very least, have a plan in place for what to do when the bad thing happens.
I have been professionally active in software development for 27 years and I have used and even contributed to Free Software. While Richard Stallman has played a critical role in the development of Free Software, he has also contributed to a toxic atmosphere of male entitlement – a sense that rules only apply to other people.
I’m disappointed and angry that your organization has chosen to reinstate him in a leadership position and to see you cite his “wisdom” as one of the factors in that decision. The statements that led to Mr. Stallman leaving the board were bad enough; his non-apology clearly demonstrates that not only is he not sorry, but that he doesn’t even understand what he did wrong. That isn’t wisdom, it’s arrogance, and pretending otherwise tars the FSF with the same brush.
What your organization seems to be saying to the world is, “If you make stuff we like, it doesn’t matter if you treat some people horribly. Good software is more important than human rights.” Because you seem unclear, I am telling you that’s wrong, and you ought to be ashamed of yourselves. Do better.
So, when I saw the bit about App Clips at WWDC last year, I wasn’t terribly excited. After all, QR codes have been around for ages; the fact that Apple ignored them until they could figure out a proprietary version struck me as par for the course. Even the example use case they gave (still give) seems geared toward chain stores in physical locations. But! An App Clip is a way to provide a subset of an iOS app’s functionality for free with a framework to upsell to the full app. Just what I want for a paid game!
I don’t like subscriptions. Sure, if the app uses some off-device resource that has an associated cost, I can see the need. It’s fair to pay for stuff. But for my simple little game, there’s really no point. I set it up to cost a dollar because the resources it took to build it weren’t free (had to license the icons, for example), but seriously, it didn’t cost much. But since it’s not a subscription, the App Store doesn’t provide an easy way to offer a free trial for a few days and then pay for it. I suppose other apps solve this with some kind of advertising and in-app purchase to buy the ad-free experience. I may not like subscriptions but I hate ads. I’m coming to the viewpoint that supporting your software with ads is equivalent to selling your users to the advertisers, and that, my friends, is human trafficking.
So anyway, I spent the past couple of days creating an App Clip for Three Lines, which lets you play the small board. The full game lets you play bigger boards and choose different icons. This seems like a great thing. But since it’s the first time I’ve done nearly all of this, I have no idea whether it’s going to work properly. This page ought to display a “Smart App Banner” if the conditions are right. As I understand it, that means the page is loaded in Safari, on an iOS device, that doesn’t already have Three Lines installed.
UPDATE: Okay, the smart app banner shows up (even though I have the app installed on my phone via TestFlight) but the banner is for the App Store page. How do I get it to be for the App Clip? Maybe I have to release the app with the clip first…but then how would I know that it works? Hmm. This does feel a little…undocumented.
A few months ago, I asked a question on Hacking with Swift about how to extract code from an existing project into a library. This is a thing that, over the course of many years of developing Java applications, I find myself doing often. I solve a problem for one project, then get to another project and realize I have to solve the same problem, so I rewrite the solution to be reusable. I found myself in the same situation with some Swift projects, and I wanted to do the same thing. I know it’s possible — there are zillions of libraries out there to let you do useful things — but I couldn’t find any reference documentation or tutorials on how to do it.
Nobody responded. Well, not nobody, but the only reply I got was along the lines of, “This other guy at this one website once did something almost like that, so maybe ask him?”
Now, months later, I searched on an entirely different question (what’s the difference between an Xcode workspace and a project?) and that has led me to a partial answer to a couple of entangled questions.
Continue reading “How to Make a Library with Xcode”
For the past several months, I’ve been following along with Paul Hudson‘s quite excellent series of tutorials. The focus of this series is to develop a portfolio application, demonstrating knowledge of iOS and SwiftUI, as well as good development practices (testing, architecture, etc.). At first, there were a couple of videos per week, but it has slowed down since Christmas. Maybe it’s more work than he initially thought, maybe it doesn’t pay as well as he thought, maybe he wants to spend more time with his family; whatever, I’m certainly not going to complain. As usual for me, I’ve learned enough that I want to start doing stuff other than just following along.
Continue reading “A New Project”
A friend just passed this interview along, and it got me thinking. Every so often, this sort of thing pops up on my radar: lone individual / tiny group doing things on their own rather than using the commonly available mass-produced thing, and they’re doing it for Reasons. I find something seductive in these stories. Self-sufficiency, exercising one’s own creativity, building just exactly the thing one wants or needs, these are really powerful juice. Heck, the QBCPS does this all the time, because we want what we want and we aren’t happy about settling for almost good, so we build things and make things so that we have the lives we want, not the lives we can buy. (Incidentally, this is why when our house and nearly all our belongings burned up in a fire, we’re fundamentally okay — we are not defined by our stuff.)
So, then, I read an article about Lojban, or about living self-sufficiently (or nearly so) in a tiny house or on a boat or in an RV or something, or about someone who writes all their own programs and builds their own solar panels or whatever, and I feel pulled to that. And then I come to my senses. Because the feeling of being creative like that is really seductive, but the reasons given in the story (or even in this essay) are never really the reasons. They’re rationalizations of the feeling. The reason we do this stuff is because it feels good; because we like it.
The mass-produced, widely available, almost-good products are not emotionally satisfying. But they have massive network externalities. They interoperate with one another. There’s a globe-enveloping ecosystem of human stuff that all works together. Building a thing that doesn’t plug into that ecosystem is a huge amount of work, and whatever benefits you reap from that work are either massively delayed or else they’re highly personal.
I have this feeling that this might be applicable to the development of the civilization package (writing, sedentism, hierarchy, agriculture,…) but that’s way more work than I’m prepared to do on the topic. Instead, I’m just going to appreciate that there are people doing their own things, rolling their own tech, and know that it’s okay for me not to participate in their stuff; that I’ve got stuff of my own.
I’ve been using MacOS as my desktop and development environment for the past 19 years. Whenever I got a new laptop, I’d use the migration assistant to copy my user settings over. So, I’ve got a lot of cruft in my home directory. Over that time I mostly did Java programming. But, there’s also been a bit of Perl, and I dabbled in Python for a hot second. More recently, it’s been Flutter, and most recently of all, Swift. And last OS update switched me from bash to zsh, so there’s just a huge .zshrc in my home directory. Oh yeah, and I came to OS X from FreeBSD by way of Linux, so before Homebrew won, I mostly used ports to install stuff.
So today: fastlane. It’s cool, it promises to automate some vital yet tedious tasks, most especially taking screenshots for the app store. That’s great, but it’s ruby. Ruby ships with Mac OS, but that’s kind of down-rev and the latest packages don’t like it. I have never done ruby programming, but I’ve installed tools (which ones? when? who can remember?) that required it and so there were weird traces of a ruby version manager, and maybe some kind of gem manager, so that fastlane couldn’t admit that it was completely installed or runnable or that maybe snapshots were even a thing, or that, hey, is ruby even installed on this computer?
After I kid you not, 14 solid hours of trying things that worked but broke other stuff, I’ve finally got fastlane to admit that it works.
- Some tool needed to be removed entirely. rvm? rbenv? Dunno, but I had to invoke it with
implode which made me feel a little better.
- Everyone in the world thinks that ruby version 3.0.0 is the thing to use. Except fastlane, which wants to use rexml, which is no longer bundled with ruby 3.0.0. There was something else broken with version 3, but I can’t remember what it was — it was way harder to solve than just installing rexml. Anyway, stick to version 2.7.2. Oh yeah, bundle couldn’t resolve ruby version dependencies.
- Homebrew says that rbenv, which delegates to ruby-build, installs openssl 1.1 but doesn’t ever patch it and it does so per ruby environment. So, if you want a patched openssl and you only want one instead of however many ruby versions you’ve got, you should provide a compiler flag to tell ruby-build about the Homebrew version. Don’t do this, because ruby won’t compile.
Stumpy is ready for use, for anyone who wants to use it. If you’re working on an application that sends email and you’d like to test that feature, you may find this useful.
In other news, searching for “pop3 client library” leads me to believe that every developer for macOS thinks that Apple Mail is the absolute bees knees and there’s just no reason anyone would want to receive email in any other way. Unless maybe they wanted to use python. Which is just mystifying to me, because come on!
With a bit of persistence and lots of print statements, I’ve debugged my port of the core dumbster features over to Swift. Stumpy now works as a native replacement for dumbster. It turned out there was a capitalization mismatch (my code was looking for ‘Message-ID’ while Mail was writing ‘Message-Id’) and a counting error (headers and body are supposed to be separated by a blank line, and that means two successive \r\n tuples: the first to terminate the last line of the headers and the second to terminate the blank line).
So now that that’s complete, it’s time to turn my attention to the UI. Rather than independently starting and stopping the servers, I think I’d like to start and stop both servers for a given mail store together. Also, I want the UI to report how many messages are currently in the mail store. All of this information should go together into a mail store view, which gets displayed by the top level view.