Category Archives: Software

LOLSpam Returns as a Super-Simple Mastodon Bot

Back when I was comparing social media archives, I considered resurrecting my old LOLspam project as a Mastodon bot. I never quite got around to it, partly because I was able to do most of what I wanted to automate using IFTTT, so I stopped investigating that last 5%.

Last night, I threw together a quick and dirty bot to post a random item from a text file in about 20 minutes.

Then I spent three hours going through the Twitter archive for @LOL_Spam, pulling out jokes that are too dated or cringeworthy. (I hope I didn’t miss any. It was midnight by the time I finished, and I was really tired!)

This morning I modified the script to take a second file as a queue for new items.

  • I can add new items to the queue file as I find them.
  • It’ll post from the queue on a schedule (using cron).
  • When it uses up the queue, it returns to posting random posts from the archive.

If you’re interested in funny/odd spam subjects (and you’re OK with swearing and occasional lewdness), check out @LOLspam@BotsIn.Space. You can follow from any Mastodon or other Fediverse account.

The script itself is called fedbotrandom. I wrote it in Perl, using text files, so I could just put it in cron on any *nix box instead of worrying about language/database support or installing a runtime or DB engine. I’ve made it really simple on purpose, and while I do plan on writing some better error handling when I have time, It’s already more complex than I wanted it to be!

You can find me on Mastodon at @KelsonV@Wandering.shop.

Pocket Goodness and Speech Oddities

I’ve been using Pocket lately to offload “Hey, this looks interesting” articles from times when I really should be doing something else to times when I have, well, time.

  • It syncs a copy of the article to each mobile device, which means I can see something in the morning, save it to Pocket, then read it on my tablet at lunch.
  • Feedly talks to it easily. I’ve even linked it up with IFTTT so that tapping “Save for Later” on the tablet will add an article to Pocket.
  • Speaking of IFTTT, I’ve also set it up so that saving an article as a favorite in Pocket also adds it to Delicious.
  • The Android app will accept shares even if there’s no network connection, then sync up when it’s online. That means I can look over a newsletter in Gmail at lunch, save the links that look interesting, and archive the email. Then I can read the article at work or at home…or the next time I’m out somewhere, after it’s synced.

I’ve also started using the text-to-speech feature to listen to articles in the car while driving to and from work. The voice is fairly decent despite the usual flat tones and lack of natural rhythms, but there are a few oddities that take getting used to.

  • # is always read as “hash.” This makes it really odd for comics articles, which frequently talk about issue numbers. “Batman Hash 123” just sounds wrong.
  • Italics are…always…emphasis, and presented by…pausing…rather than changing tone. This makes it…awkward…for anything involving lots of titles.
  • It parses words, rather than using a dictionary, and can’t always figure out whether initials should be read individually or pronounced as a word. This usually works fine, but occasionally leads to phrases like “tah-kay-down notice,” “link-uh-din” or “pohs terminal.” On the other hand, it figured out “I-triple-E,” so I imagine it’s got a dictionary for special cases.

What’s Wrong With Facebook Updating Itself on Android?

Yesterday, my phone suddenly started downloading something called “Facebook build (somethingorother).” It didn’t show any progress, wouldn’t go away, and I worried that maybe it was a piece of malware or something buggy. A quick search turned up nothing. A later search found other people asking what this was. Late last night, there were articles about “Hey, why is Facebook updating itself!”

It turns out that yes, Facebook is now downloading its own updates on Android phones and tablets instead of just pushing them out through the relevant app stores (Google Play and Amazon, mainly). I’m sure they thought it was a great idea — web browsers like Firefox and Chrome have been doing this for several years on the desktop.

The problem is that it violates expectations of what the app will do, and where your software is coming from.

Imagine your car’s manufacturer issues a recall. Now imagine three scenarios:

Scenario 1: You receive a notice of the recall, asking you to make an appointment to bring the car in for maintenance. (For those of you who don’t drive, this is how it normally works.)

Scenario 2: You receive a notice offering to send a technician out to do the repairs at your home or workplace. (This would be awesome, but impractical.)

Scenario 3: You’re sitting in the living room when you hear a noise from the garage. You go out to investigate and find someone messing with your car.

That’s what this feels like.

It’s one thing to offer software through third-party channels. The fact that it’s possible is one of the reasons I prefer Android to iOS. In that case, notifying me of updates, maybe even simplifying the download would be very convenient — if I know ahead of time that it’s going to happen. And if they’re not switching channels on me. A download coming from some new location, but claiming to be a familiar piece of software, and a notice telling you to install it? That’s how trojans work.

In short, it’s a violation of trust…and if there’s one thing we’ve learned about Facebook over the last few years, it’s that the social network has enough problems with trust.

Losing Opera to WebKit

Opera IconIt still feels like an April Fool’s joke, but Opera is in fact switching to WebKit and discontinuing their own engine, Presto.

I can sort of understand. They can stop worrying about the long-running headaches of browser-sniffing websites that assume Opera can’t do things that it can. They can focus their efforts on the features they want to add or enhance, instead of maintaining their own separate codebase.

But here’s the thing: Throughout its history, Opera has served as a check against monoculture, against a single engine dominating the web too thoroughly. And now, it’s embracing the engine that dominates the fast-growing mobile web.

Remember the bad old days when people just wrote for Internet Explorer, and there was basically no innovation in web browser capabilities? It took Firefox’s success to turn the tide, but Opera was there, needling the industry with things like the “Bork edition” which turned the tables on browser-sniffing websites. Opera was a constant reminder that no, the web isn’t just Internet Explorer and Firefox, or just Internet Explorer and Webkit, or just two flavors of WebKit. That it was worth building technologies to leverage cross-browser web standards instead of picking the current 800-pound gorilla and feeding it even more.

There’s a real value in having different engines approaching the web in different ways, because it prevents stagnation. And there’s real value in having different engines use different code, even when implementing the same capabilities, because that means when a security flaw is found in one browser, it doesn’t apply to all of them. I go into this in a lot more detail in the old, but IMO still relevant article, Why do we need alternative web browsers?

The problem, of course, is that as much as I appreciate that role for Opera, it’s never really been their goal. Opera’s purpose is to sell web browser-related services. In the past, an open web was necessary to do that. Now, they’re throwing in their lot with the front-runner instead.

That leaves Mozilla, whose mission actually is to promote an open web, to go it alone. Apple and Microsoft certainly don’t care. And Google only really cares to the extent that their services are available as widely as possible. And when you get onto mobile, all three prioritize getting you into their particular silo.

Webkit browsers are a dime a dozen. The only ones that really matter are Chrome and Safari, and Safari is a lot more important on iOS. Opera will soon be just like Dolphin, Rockmelt and others that I have to rack my brains to remember. Maybe it’ll be enough for the company to survive, but it won’t be enough to keep them relevant.

End of Opera Unite & Opera Widgets

Opera logo and Opera Unite logoThe Opera web browser has introduced a lot of cutting-edge features* over the years, many of which have since become standard in other browsers like Firefox, Chrome, IE and Safari. But they’ve also introduced features that didn’t catch on. With Opera 12, released yesterday, they’ve taken the first step toward removing Opera Unite and Widgets.

Opera Unite was a fantastic idea to move beyond the standard client-server model that dominates most internet activity and take peer-to-peer communication to the next level. Instead of relying on central servers like Facebook or MSN or Gmail, you could run a chat room, photo gallery or other application directly from your computer.

It never really caught on. If I were to guess why, I’d say that the big reasons were security concerns (turning your computer into a server!), the rise of easy-to-use cloud services, and the increasing move toward mobile computing. It’s one thing to let friends remotely browse a photo gallery from your home desktop that you leave on all the time. It’s another to have them view that gallery data from your iPad over your sketchy and bandwidth-capped cell connection.

As for widgets, they were sort of an odd thing to begin with: not quite applets, not quite extensions, and in competition with native widgets on both Windows and Mac OS that didn’t depend on having a browser open. (Though these days, when don’t you have a browser open?) Honestly, I’m still somewhat mystified as to why Opera created them in the first place.

Opera 11 introduced an extension system, and they’ve released a reference on converting widgets to extensions.

Widgets and Unite are still present in Opera 12, but turned off by default for new installations, and will be removed from a future release “before the end of this year.”

*I still disagree on the issue of tabs, on the basis that a tabbed interface is distinct from MDI.