"Write once, run anywhere," they said. "Be easy," they said.

Java was once the hottest thing since sliced bread. From the very beginning it was said to be platform independent (meaning, you could run it on Intel, Motorola, ARM, or whatever else you wanted) and architecture neutral (it was designed to ignore what it was running on top of). The dream was that you could take whatever software you'd written and compiled into Java bytecode, put it onto whatever system you had as long as it had a Java runtime environment, and it should work. "Write once, run anywhere" was the motto.

In practice, not so much. But that's not …

Read more...

Updating the Search Function of my Website.

Not too long ago I got fed up with how good a job Duckduckgo's site search feature wasn't doing. No matter what I did I couldn't find dick around here. And, folksonomies being what they are, unless you plan them (and then they won't be folksonomies) you probably won't remember what tags you used. It's frustrating to get get lost in what amounts to your own house. So, one night I got well and fed up and decided to put some of my spare computing power to use. I did a walk-around of my exocortex and figured out that Jackpoint …

Read more...

Building a mollyguard to protect a power strip.

If you've been to anyone's house in the last 20 years you've undoubtedly seen a bunch of stuff plugged into a power strip. Once found in office most of the time they've become as essential to everyday life as mobile phones. However, everybody has also encountered the most common failure mode of power strips - accidentally hitting the power strip and accidentally turning everything off.

This is far from a strange problem; if it's got a power switch chances are somebody's hit it by mistake. The obvious thing to do is put a cover of some kind over it. It's even …

Read more...

A few minor mods to Pitop OS.

Some time ago I wrote up a minor project I'd done, rigging up Raspberry Pi OS to run on a Pi-Top. And then never revisited the post.

I think you can guess why. It didn't go very well.

Even though all of the secret sauce software is available in the Raspberry Pi OS package repositories these days and there is a process for installing it, for whatever reason they don't quite work right. The speakers were never detected, nor was even the system hub detected. Finally, my tinkering wrecked the desktop configuration entirely. After some frustrated debugging, I kicked it …

Read more...

Building a locksport box.

Longtime readers have probably noticed that I have an interest in locksport, or picking locks for the fun of it. As you might imagine, this requires a good deal of buying locks to practice on. From basic practice locks to padlocks, we tend to grab.. well... everything we can find, because there are so many different locks and we try to practice on all of them. While stuck at home waiting for some very long running jobs (multiple hours each) to finish at my dayjob, I decided to keep my hands busy by building myself a lockbox, or a box …

Read more...

Installing Searx by hand.

In monitoring the Searx Github repository because I'm a pretty heavy user of this software, I've noticed a common trend. Folks seem to have a hard time getting the automatic installation script to work right. I realize that it would probably make sense to figure out what's going on in there and file a pull request, but given how work's been riding me like a wet pony lately I can't reliably budget time to debug the script under a couple of different distros of Linux and figure out what's wrong. That means that I can't actually help any of the …

Read more...

Distributing Huginn workers across servers.

For quite a few years I've written about strange and sundry things you can do with Huginn, but not a lot about what to do when you run into systemic limitations. The nice thing about Huginn is that you can spin up as many workers (subprocesses that execute agents from the database) as you want, subject to the limitations of what you happen to be running it on. The downside, however, is that it's easy to accidentally upgrade your VPS to the point where it's just really expensive. I just ran into this purely by accident and spent a day …

Read more...

Cross-compiling go-sendxmpp.

I used to joke that the day setting up a cross-compilation environment was easy we'd be one short step away from having true artificial general intelligence. For the most part neither has happened yet. However, I must admit that Go has come pretty close to making it easy, but it's also kind of opaque unless you go all-in on Go to the exclusion of all other languages. It's not really a language that you can just toy around with, kind of like FORTH.

Long-time readers know that I'm all about XMPP as a command and control channel for my exocortex …

Read more...

Optimizing Searx with UWSGI.

Long time readers have probably read about some of the stuff I do with Searx and I hope that some of you have given some of them a try on your own. If you have you're probably wondering how I get the performance I do because there are some limitations of Searx that have to be worked around. Most of those limitations have to do with the global interpreter lock that is part of the Python programming language which haven't been completely solved yet. What this basically adds up to is that multithreading in Python doesn't actually make great use …

Read more...

Getting an ancient phone online in 2021.ev

Note: The more I worked on this article, the more I realized that it needed to be split into two separate articles. There was more ground to cover here than I originally thought. This article covers configuring a travel router running OpenWRT as a gateway for an ATA, and a Cisco ATA. The Asterisk configuration stuff will come later.

As seems to happen during the time of the covid-19 plague, it's really easy to clear one's backlog of "wouldn't it be nice if" and household repair projects in a short period of time. I mean, hell, I recabled my server …

Read more...