Computer

My current computer is a Thinkpad x250 laptop, released in 2015. I bought it many years ago to use as a portable computer; when my desktop computer died, it became my main workstation. I keep it connected to a monitor, keyboard and mouse at all times. It ran Windows 7 until April 2025, when I decided to start using linux. After a false start with Fedora, I installed Debian 12 with XFCE on April 15, 2025, and it's been serving me well since. It's still quite functional for most of my use cases, and can even stream gameplay footage at 480p, but I do sometimes wish I had a computer that could run newer games. Click here to see a desktop screenshot with my system specs.

Tags: topics, tech

I Hate The Person Linux Turns Me Into

Saturday April 12th, 2025

Tags: archive, LinuxSaga, rant, tech

I don't have anything planned this weekend outside of the usual chores, so I embarked on the project of setting up linux on my computer. I had made the decision weeks ago, but I wanted to wait until we finished this round of archipelago streams, because I knew it might take days or weeks to get my streaming setup working and stable again. We finished on Thursday, so on Friday I backed up all my essential files, and today I did a clean install. I had stuck with Windows 7 as long as possible, but it's time to finally pull the plug.

Archipelago is the thing that finally convinced me: most of the game integrations don't work with Windows 7, and the April 1 update killed Windows 7 support completely. I could've stuck with the old version--none of the newly supported games are in my wheelhouse--but my options would still be extremely limited. Most supported games that otherwise run fine on 7, like VVVVVV, have randomizers that require windows 10. It doesn't make sense to me, because you can write a program for Windows 7 and it'll still work on Windows 10. There's backwards compatibility. I don't know why people use new APIs just because they exist.

Anyway, the installation went fine, all my hardware seems to be supported (it's a Thinkpad, so no surprises there) but every single facet of using the software has required painstaking research to figure out what I'm supposed to do. The app store on this version of linux (fedora XFCE) is called "dandified yum dragora", a terrible and meaningless name I'll never remember, so it will always be duke nukem forever to me. Some of the programs I want to use are on there, but a lot of them aren't. I installed VLC to watch videos, and it didn't come with any of the codecs it apparently needs to work. Codecs? I thought the whole point of VLC is that it doesn't require codecs. I was thrilled in 2009 when VLC came along and I no longer had to mess with "k-lite codec pack" and the like.

After googling and finding dozens of forum threads for ways to install the codecs and trying 3 or 4 of them, I finally gave up and took someone's advice to install VLC from "flatpack" instead. Flatpack is like DNF, but different. It doesn't have a UI, so I had to use a command prompt to install it.

The two main uses for a computer are 1. using the web, and 2. watching videos. Linux came with firefox, so #1 was at least taken care of, but I shouldn't have to go into the command prompt to do the very next thing on the list. Off to a bad start!

Once it said it was finished installing, it wasn't installed, so I had to google what to do next. I logged out and back in. It's there now.

Next I had to install Chrome for when my spouse wants to use my computer. This was a piece of cake! I went to the chrome website, I clicked the "get chrome" button, it downloaded a file, I double-clicked it and installed chrome. I hate chrome, but you gotta hand it to them, they make it easy to use their program. If only every program cared about whether people use it.

Next I needed to install bizhawk, for games. It's not on any of the app stores, but it wasn't too hard to set up. I downloaded a .tar.gz file (which is like a zip file but worse) and extracted the contents into a folder. I tried running the executable, but nothing happened. This took some figuring out, but basically the program doesn't run if you click the executable directly, you have to make a desktop shortcut. So I did that, and it launched, but I couldn't play any games. As it turns out, this version doesn't come with any of the firmware you need. Everything, everything on linux requires at least two or three extra steps nobody tells you about.

I googled the bizhawk firmware and downloaded all of them. I got a couple NES and PSX games to work. When I tried to set up the PSX controller, the icons for triangle, square and O don't show up. Just X. So I'll have to trial-and-error to figure out which fields correspond to which buttons. But first I have to figure out why all of the buttons on my controller aren't working. When I first tried to configure it, start and select weren't working. I unplugged it and plugged it back in. Now L and R aren't working. When I use hardwaretester.com, all of the buttons are recognized, so I don't know what the problem is. AFAICT, Linux doesn't have a gamepad configuration tool, so I have no way to even troubleshoot it.1

Okay, let's forget about programs for a minute and talk about UI: at a glance, modern linux desktops don't look too bad. Some of them even have themes where everything doesn't look completely flat. Nice! Way better than modern Windows.

However, even on themes modeled after Classic Windows, the illusion of user-friendliness shatters as soon as you try to use it. You immediately find yourself confronted with missing UI functionality you weren't even aware you need until it's gone, at which point you realize how indispensable it is.

For example, on my default installation, the color of the active window's title bar was the same as inactive title bars, no matter what theme I used. Not being able to tell which window has focus meant I would start typing a chat message in Discord, and suddenly whatever I had open in Firefox would start responding to a bunch of hotkeys I didn't intend to press. Maddening!

There are about a million different settings menus that sound like they might let you change UI colors, such as "Display", "Appearance", "Color profiles", "Desktop", "Panel", "Panel Profiles", "Window Manager", "Window Manager Tweaks", "XF Dashboard", etc. etc. Can you guess which one of these has the option to change the active window title bar color? If you guessed "none of them", you would be correct. I had to go into the folder for the theme I'm using, create a CSS file, and add a line of CSS I'd have never known about if I didn't happen to find a forum thread where someone asked this question. There isn't even a placeholder file with a bunch of example code I can uncomment, I have to somehow know what the elements are called.

What about the taskbar? Looks normal, but observe: The Firefox taskbar item isn't all the way to the left, even though it was the first program I opened:

The web browser has been the main program I use on a computer for at least 20 years. I have 20 years of muscle memory that says the web browser is always the very first thing on the taskbar. If this is ever not the case, I drag it all the way to the left so it is the first thing. On linux, of course dragging doesn't do anything.

I stumbled on the answer on my own, which is good because I have no idea what these things are called or how to google them. They're not icons; they have icons, but what do you call the thing the icon and text label lives on? The answer is "window buttons", apparently, but I've never consciously thought of them as "buttons" before now. I didn't need a name for them, because they worked the way they're supposed to.

Anyway, you have to go into "Panel Preferences"--"panel" is what the taskbar is called on linux, even though the word "taskbar" isn't trademarked and they could just call it that--and enable the setting for the "sorting order" to "allow drag-and-drop". Why isn't this the default? Why do I have to request special permission?

You are a computer. Let me drag. Let me drop.

Speaking of dragging, here's a UI thing no amount of googling or experimentation is helping with: when you move or resize a window, it has this little tooltip in the middle showing the current position and size of the window. I see how this could be useful in some circumstances, but there's a bug where it doesn't properly erase and redraw the tooltip when you move the window, causing this "snaking" effect I find incredibly annoying. So I'd like to turn this feature off please.

I had to take a photo of my screen with my phone, because there's no way to make the screenshot key take a screenshot. Pressing it opens the screenshot-taking program, but it won't let you open this program while a window is in motion. Want to take a screenshot while you're moving a window? "Fuck you", that's what linux has to say.

I can't find a single piece of documentation or official communication that acknowledges this feature exists. I found one reddit thread with someone asking how to turn it off, and no one had any idea what he was talking about. What are the magic words I need to find a solution? "XFCE window size tooltip" seems like a good bet, but googling that brings up nothing but unrelated problems using the same words. Is it not a tooltip? What is it? I want to throw my computer from the window of a moving train. I want to walk into the sea.

I hate what linux turns me into. I turn into a gibbering problem-solving maniac. I can't cope with everything being broken at once. It's not just adjusting to a new workflow, it's building a new workflow from scratch atom by atom. My brain wants to fix everything at once, and it's so hard to interrupt the doom cycle. My spouse practically had to physically drag me away from the keyboard so I could get to the laundry room before it closes. It's ADHD kryptonite.

It's like being overwhelmed by sidequests in Skyrim, except I get a new sidequest when I open the menu. I get a new sidequest for every page of the inventory, every tab on the skill tree, every item slot I try to equip. I press the "jump" button and I'm given a sidequest to complete before I unlock jumping. No quest targets appear on my compass except the ones to the north. I have to do sidequests to unlock east, west and south.

I would not play this game. I would uninstall it immediately. But this isn't a game. It's the software I need to do literally everything. No one should have to endure this.

Well, I could complain about broken UI literally all day. The whole reason I'm here is because of archipelago, so let's fire up the new version and have a lo--

Fatal Python error: init_fs_encoding: failed to get the 
Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00007f215ebd95c0 (most recent call first):
  <no Python frame>

Apr 13 2025 See Kami's response to this post, I'm sorry, but you're holding it wrong, and my response, Linux Mint.


  1. It doesn't come with one, but I found a program called input remapper that allowed me to remap every gamepad button to a key on the keyboard. So it's like JoyToKey except that I have to use it for everything, not just keyboard games. Whatever works, I guess. ↩︎

Linux Mint

Sunday April 13th, 2025

Tags: archive, correspondence, LinuxSaga, rant, tech

In response to my last post, Kami wrote a reply which boils down to:

Just get Linux Mint.

A reader named Mark sent a reply with much the same advice. I appreciate both of your responses.

When I used Mint, I had a number of problems similar to the ones described in my previous post, but the worst is that the filesystem would gradually become more and more corrupt as I used it. I would randomly find myself unable to do anything because the entire hard drive would become locked down to "read only" mode. When I rebooted, the OS wouldn't load, and it would bring me to a grub prompt. I could run a fsck command, which would temporarily fix the problem and allow me to use the computer a little longer, but the filesystem would inevitably become corrupt again. Each time I ran fsck, it took a little bit longer, eventually needing 30-45 minutes to run its course; and each time this happened, I would have less and less time before the filesystem shit itself again. Eventually it would reach a point of unrecoverability, and I would need to wipe the hard drive and reinstall the OS. This happened about once a month.

Mobile Data Banditry

Thursday May 01st, 2025

Tags: hacks, internet, long, phones, tech

I have a cheap no-contract phone plan that offers a couple gigabytes of data plus "unlimited talk and text" for $15 a month. Since this is supplementary to my home internet, the couple GB is usually enough, if I'm careful to use mostly text-based applications. Every once in awhile there's a new podcast I want to download and listen to immediately, or I want to look at a site on the adweb, but these occasions are rare and I've gotten pretty good at rationing my data to last all 30 days.

In April, I ran out on day 29. So close! I knew I'd be fine without for a day, I could still text my partner and I could still call someone if there was an emergency. But when this happens, I get curious whether there might be a way to circumvent the data restriction.

You see, my phone is still receiving data. Text is data. I can visit the website for my phone carrier and pay my bill. I can send and receive multimedia messages, that's potentially a lot more data than a text. My phone still says I'm connected to LTE. Clearly there's a normal data connection there and my carrier is just limiting what sources of data I can connect to. But what if I can fool the network into thinking I'm doing approved data activities when I'm not?

I touch on technical concepts about which I have some basic understanding but am not an expert. If you don't care about my kibitzing, here's the

TL;DR

I didn't find a way to fool it, but I think MMS has some untapped potential, I discovered a loophole that gives me access to some useful google web functions, and I might have forced my cell phone provider to fix a very cute exploit.

background: what is a phone?

I pride myself on having approximate knowledge of many things, but I'll be honest, I don't have a clue how phone networks operate. Modern ones, I mean. When you're talking about old copper-wire POTS1, I can trace a conceptual line from the telegraph and electrical sound modulation to pulse dialing and switchboards with human operators; then to touch-tone dialing and electronic switchboards controlled by DTMF tones. I may not understand the fine details, but I get the gist.

Now that everything is cell phones and VOIP, I have no clue. It's a black box. I know people have set up their own home PBX/VOIP systems with software like asterisk, but I can't conceptualize how it works. I know it involves "leasing" a phone number, but how? From who? Who owns phone numbers? The government? Do I call up the FCC and say "one phone number, please"? I think it probably involves multiple levels of intermediate wholesalers, and I can't imagine the total expense is anything but prohibitive.

Likewise, I have no idea how cell phones differentiate "stuff that comes through the phone number" and "stuff that comes through the internet". So, my first idea is totally hypothetical and based on shit I don't understand.

method 0: MMS

Multimedia Messaging Service (MMS) is an extention of the old Short Message Service (SMS) used for texts. These days, it's most famous for being abused by texting apps that want to cosplay as full-featured chat programs, with reactions and rich media, so if you're in a group text with a bunch of people using iphones, it's this annoying bullshit smeared over dozens of sprawling incoherent messages:

conversation screenshot

The future of communication.

But before Apple did what Apple always does to standards, it was a perfectly nice way to send pictures or voice messages to your friends. It seems like the maximum size for an MMS message is 300KB, 600KB, or 1MB, depending on which google result you believe and whether your carrier is using the most recent standard.

So, it seems like it should be fairly simple to send any size file you want in chunks encoded as png images or Base64 text.

The hard part would be automating a system that can send via whatever pipe MMS messages are sent through. I don't have a computer with a phone number, and I don't know how to send anything to a phone number.

But interestingly, the server my carrier uses to relay MMS is http!

mobile access settings screenshot

Luckily, the photo editor on my phone has a weird bug that makes images look gnarly and cybre whenever I use the pen tool. Redaction-core!

If the MMS data is sent over http—assuming it's not somehow encrypted (the "wapenc" in the url could be a clue that it's being encrypted or it could just mean encoding, I have no idea)—it should be possible to snoop on the packets, figure out how they're being sent, and reverse-engineer a way to send your own data through that pipe. And this is where my well of technical knowledge has run dry. I have no idea how to do what I described. I just suspect it may be possible.

method 1: hang on a sec

But wait... you don't necessarily have to text someone from a phone number. Every (?) cell phone carrier gives you an e-mail address. It's your phone number @ a special domain, like 5558675309@txt.carrier.com. So you'd just need to encode the data chunks, e-mail them, then reassemble. This is a system someone could actually build. Sending large amounts of data this way might cause you to get rate limited or throttled, but ah, that would mean the "unlimited texting" they promised is a filthy lie, wouldn't it? Then they got a lawsuit on their hands 🙃

But hey, with smaller files, encoding shenanigans might not even be necessary. At first, I assumed that MMS systems won't let you attach arbitrary file types, because when I try to include an attachment in a text message, the options presented by the android UI are pretty limited:

attachment modal screenshot

But if I'm sending an email, I'm not restricted to what this UI will allow me to attach. Can I text myself Super Mario Bros.?

An MMS message that reads "additional media content is included. Please check the message in detail.

Hm, okay, "Please check the message in detail." I can probably do that by... uh... "long-pressing" on it?

screenshot of message details. It shows a size of 41 kilobytes.

This time I cropped out the part of the UI with alpha transparency and it didn't fuck it up at all. What's the deal, phone?

Okay, 41KB. Mario is in there somewhere, in some form. How do I get him out? Mario's not equipped to survive in computer world. He doesn't have a frisbee made of light or anything.2

At first I assumed it's impossible and the system isn't built for these kinds of attachments, so I went through a whole bunch of rigamarole trying to send it with a .txt extension, copy the text, and turn it back into a .nes file on the other end, which didn't work (it just strips the part where all the binary data's hidden.) Then I tried to encode the rom into Base64 and decode it, which also didn't work. I spent a lot of time trying to figure out what I was doing wrong (I think it has something to do with incompatible line ending format between the two programs I was using) which is part of what made it take so long for me to finish writing this.

But I had an epiphany, and none of that was necessary. Turns out all I needed to do was long-press on the message and choose the worst-named function in UI history:

"share" 🙄

It gave me a list of different apps I could share it with. One of the options was the file manager. When I "shared" the message with it, I got to choose a location where I wanted to save it:

screenshot of message: smb001.nes copied to android storage

And there you have it. It always appends 001 to the filename for some reason, but otherwise it's the same file. I texted myself an NES rom via e-mail and it works in Nesoid. No metered data required.

screenshot of super mario bros being played on a horizontal phone with virtual buttons

Finally, Mario the way it's meant to be played: while smooshing your thumbs against indiscernible spots on an unyielding glass screen.

So now that I know it works, it's time to test the limits.

First off, I don't know whether this is obvious, but you do need an active data connection to get the attachments. I tried turning mobile data off, and messages will come through, but it's just the SMS text notifying you that you received something; none of the data in the MMS layer is accessible over the edge network. Once I turned LTE back on, it came in properly.

I know it works on a data connection that's been suspended for going over the cap, but it wouldn't work if I were suspended for nonpayment; even though there is an active LTE connection, I wouldn't be able to get calls or texts.

  • I tried it with the Dragon Warrior 3 rom, which is 512KB, and that went through fine.

  • I wanted to see if it would allow me to send an APK, so I found one small enough, a tiny storage analysis utility called DiskUsage. It sent and installed with no issues.3 ⚠️ This should go without saying, but do not install random apk files from the web, or open any executable file from an unknown source. Doing so may may put your phone at risk. ⚠️

  • I wanted to send a different file type between 600KB and 1MB, so I looked through my downloads and found a 700KB .mobi copy of Frank Herbert's Children of Dune. It also went through no problem.

  • I sent a .7z archive of a GBA rom slightly more than 1MB, expecting it to fail, but it went through. Might the limit not be 1MB after all? Hm...

  • A 5MB PDF? No probalo 👌

  • A 16MB game boy advance rom? Well, now it gets complicated.

I assume it failed, and thus the file size limit is somewhere between 5 and 16MB, but I can't be sure, because it didn't bounce back on the e-mail end or give me some sort of undeliverable message warning on the phone end. It just silently failed. Or, maybe it hasn't failed yet.

This is where we get to the big caveat for this method: not only is it very slow, it's slow in an unpredictable way. A 5MB file might go through almost immediately, or a 50k file might take 10 minutes. The GBA rom might show up eventually, but at this point it's been half an hour, which is longer than any other file has taken, so I'm assuming the network unceremoniously discarded it. If this changes, I'll add an erratum here.4

Still, if it's not urgent, this is a way to get a non-trivial amount of data without counting against your cap. I can definitely see a scenario where it's practical to have a system where you send an SMS containing the URL for a file to an e-mail inbox on a server you control, a script fetches the file, and the system replies with the file attached. With a very low monthly cap, it's prudent to preserve every precious megabyte possible.

method 2: elite hacking skills

I have access to my carrier's website. What if I use the browser developer tools and drop an <iframe> on the page that loads the website I want?

Well, chromium-based browsers on Android (the one I use is Kiwi Browser) do have developer tools, just like Chrome on PC, but it's barely functional on a phone. When you try to edit a page element, the keyboard pushes the UI up to completely obscure what you're typing, so I had to type the tag in a text editor, carefully position my cursor, and use the paste button on the keyboard.

android chromium dev tools screenshot

The ultimate development environment. A real hacker can sense the code.

I wanted the iframe to contain this website, so I pasted this just after the body tag:

<iframe src="http://bluelander.bearblog.dev">

Having the carrier website open in one tab and the developer tools open in another tab uses about 900% of my available ram, and doing anything at all with the dev tools slowed everything to a crawl, but eventually I managed to paste the tag and switch back to the site tab without the browser crashing. There was a big white box superimposed over the site that may have been an iframe failing to load the requested content, or may have just been general jank. I could no longer scroll or interact with the site in any way. I realize now that I should have used the TLS version of the URL, since it probably won't want to load an http iframe on an https site even under the best conditions, but if by some miracle the https version worked, this still clearly wouldn't be functional enough to rely on.

method 3: the samsung/telecom goodwidget pact

I have a samsung phone, so it comes with its own terrible built-in browser that I never use and can't uninstall. However, when I was experimenting, I discovered something shocking: even when data is restricted, google search is 100% functional in the samsung browser. Additionally, it's faster than any other website I use over LTE, ever.

I have an unlocked xcover 4 that originates from outside the US and a BYOP plan, so I assume samsung has worked out a deal with all the carriers to prioritize google search traffic, so people using samsung phones won't complain that the search widget sucks.

When I discovered this, I immediately set out to discover what limitations are placed on it. What I'm allowed to do is very granular: I can do a google search or a google image search. All of the instant search results still work, so I can find the weather for my area, or convert cups to millilitres, or calculate the square root of 7, or see the tallest punk singers in descending order of height.5

As soon as I tap on one of the results, the connection fails, even if it's an AMP page.

I can't go to most google subdomains directly, but some of them sort of work if I do a google search and then click on the link from the google search results. For example, nothing happens if I type books.google.com into the URL bar, but if I search for "google books" and click the link in the result, I have pretty much full access. I thought this would be a way to get to public-domain books, but gbooks itself doesn't seem to host any full texts, even ones it has the rights to. If I search for "Frankenstein", I can't find, like, a text version from Project Gutenberg. It's just various commercial publications, at best all I can get is a preview. You can find noncommercial versions, but they all link to a $0 purchase in the google play store, which I would argue is slightly less free than actually free.

I was able to get to google translate, which was exciting because there was a chance I could use the old anti-firewall trick: you can use google translate as a proxy to view whatever webpage you want, just "translate" a page that's already in english from another language into english. But no dice. Google Translate loaded, it looked like it was going to work, but when I clicked the link to view the translated page, just an infinite throbber.

While I was at it, I also took a stab at seeing if the google web cache would work, but nope, no connection.

Some subdomains are accessible, but less functional. If I search for "google drive", the link takes me to a splash page inviting me to log in, even if I'm already logged in. Clicking the link fails to do anything. Weirdly, youtube works, even when I type youtube.com into the address bar, but it has no video thumbnails and (naturally) I can't watch videos there. I guess this is so you can get fast results when you do a video search with the widget. And some subdomains like gmail and google news don't work at all.

I tried every google product I could think of that might be a backdoor to useful data—docs, sites, chat, voice, hangouts, blogger, podcasts, even weird shit like google arts and culture—and if I could access any of them at all, I was stymied as soon as I tried to do anything useful with them. They locked everything down as tightly as possible. That said, I consider this a small victory, because there are useful things I can do with my phone when I'm out of data. If I ever desperately need to prove who won the 1942 World Series to win a bar bet, there's nothing my telecom can do to stop me!

very glitchy screenshot of google search results with a purple line on it

Oh no, I brought back the wrong sports almanac, this is the blaseball result!

method 4: sneak in through the help docs

This one's my favorite. Not only did it almost work, but it reminds me of a classic windows exploit only 90s kids will remember.

So, I'm back to Kiwi Browser. I load up my carrier's homepage. I'll be using this site to demonstrate the steps.

Tap the little lock icon in the URL bar, and tap where it says "Connection is secure".

Screenshot

screenshot

It'll show you some info about the page's encryption status.

UI screenshot

I didn't want the joke to wear thin, so I begrudgingly downloaded a different image editor. Don't worry, the glitchy isn't going anywhere.

At the bottom, tap "what do these mean?" and it'll take you to the google support page about TLS certificates.

web screenshot

Normally there's not many places you can go from here, but I'm logged in, and it's inviting me to take a look at my account settings.

From there, I can tap the waffle menu at the top and get access to a bunch of google services.

web screenshot

Now, this modal didn't work when I was using google in the samsung browser: it gave me a throbber that spun for a minute but eventually errored out.

web screenshot

It would give me a similar error if I tried to tap my account picture.

But here, it came up right away. So I tap News, and it takes me to google news. I wasn't able to get there with the samsung trick! Excited, I tap the waffle menu again and tap "drive". It takes me straight to my google drive account. I can see all my files.

But something's amiss. I can see the file names, but there are no thumbnails, and the javascript or CSS didn't load properly, because the page looks broken (I was too excited to think to screenshot this, a shame I will never live down) but I tapped one of my files, and... nothing. A throbber that throbbed forever. I force-closed kiwi browser, opened it again, tried to get back to the google help doc, and this time nothing happened. They caught me. I don't know how they noticed it so quickly, maybe it's because I was already fucking around to see what I could get away with, but that door is now closed. Still though, what a thrill. For just a moment, I could say... I'm in 😎⚡🖥️

If you're not familiar with it, the Windows 98 trick involves using a byzantine series of help menus to bypass the login screen, as immortalized in this gif.

conclusions

Method #4 ended up inconclusive, but it was exciting to find a back door, even if they did immediately slam it shut.

Method #3 is interesting, but probably not an actual exploit, and I don't know how universal it is, i.e. whether it's all samsung phones or just my specific model, or even if it would still work if my OS was up to date. Still, it's an actually useful feature I didn't know I had before.

Method #2 was a silly idea I didn't expect to work, but it was fun to discover new depths of just how bad an interface can be.

MMS is definitely the most promising option. I never guessed it would allow you to receive any type of file, as long as you know how to operate the arcane UI. The 5MB limit makes it tricky, but I remember in the days of shaky dial-up and only-barely-less-awful DSL, it wasn't uncommon to find large files distributed as dozens of chunks you stitch together with a program like hjsplit. Desperate times call for creative solutions.

I think we could be getting more milage out of MMS as a text delivery platform, too. If I had the technical chops, I think the first thing I would make is a relay to accept text messages, turn them into a wikipedia search query, and reply with a text-only version of the requested article. This should work even on the cheapest pre-paid normalphones that aren't useful multimedia devices, and I know wikipedia has its limitations, but having a cheap device with a cheap connection that lets you instantly find information about anything, well, it reminds me of something

xkcd comic

[view big] [transcript]

So uh, if you read this far, thanks! Hope you had a good time. The moral of the story is: fuck around and find out, because fucking around is fun, and learning is cool 🦝


  1. Plain ol' telephone service. ↩︎

  2. But maybe he should. Nintendo: call me 🤙 ↩︎

  3. Sidenote: not only did it install just fine, it's also a surprisingly useful app. It's essentially an Android version of SpaceMonger, the free 1.40 release of which has been my go-to storage analysis program on Windows for years. ↩︎

  4. Today protonmail sent me an error notice that says "Your message could not be delivered for more than 12 hour(s). It will be retried until it is 2 day(s) old." Which is kind of a weird failure mode. Also, since writing this, I've tried different attachment sizes to see if I can pinpoint the exact limit, and nothing larger than 5MB has sent, so looks like I got it in 1. ↩︎

  5. Joey Ramone was 6'6"? Holy shit. ↩︎

Kiki URL Rewrites With Managed Hosting

Saturday April 26th, 2025

Tags: blog, kiki, meta, tech

Just a quick note about URL redirects with kiki: the user guide gives some steps for enabling URL rewriting (under the heading "SEO-Friendly Permalinks") for use with the "easy" style of permalinks. For example, instead of example.com/index.php?page=blog, it's much cleaner to simply have example.com/blog.) I figure most people using kiki would prefer this setup, if possible.

The steps in the documentation assume you're running your own apache server1 and have access to the configuration, but with a managed hosting provider (such as mine) the process is different. It took some figuring out, but here's what worked for me:

Create a file in your root folder called .htaccess. It should be a text file with only the following lines:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

Here's what each line does:

RewriteEngine on enables the URL rewriting feature.

RewriteCond %{REQUEST_FILENAME} !-d says this rule only applies to anything that isn't an existing folder name.

RewriteCond %{REQUEST_FILENAME} !-f says this rule only applies to anything that isn't an existing file name.

RewriteRule ^(.*)$ index.php?page=$1 [L,QSA] is what does the rewriting. ^(.*)$ is what's know as a "wildcard expression".2 It ensures that the rule applies to whatever the visitor types after the .com/.3 the $1 is a reference tag. It refers to whatever appears in the first (in this case only) set of parentheses. So if a visitor types example.com/whatever, as long as "whatever" isn't an existing file or folder name, that it'll display as if the person instead visited example.com/index.php?page=whatever. Importantly, this doesn't forward the visitor, it actually changes the URL. That's the difference between a rewrite and a redirect; I confused the terminology in a previous draft, sorry about that.

[L,QSA] is part of the Apache rule. L means "last", i.e. "stop after you process this rule." QSA is a flag that allows the rule to work with queries, i.e. anything after the ? in the URL.4

Big thanks to RaVBaker for helping me piece this together, particularly his extended example. This stuff is tricky and most of the tutorials out there do not explain things well.

The solution may be different for you depending on your hosting provider, but hopefully this will point you in the right direction.


  1. I unfortunately don't have any information about nginx. ↩︎

  2. To get even more into the weeds: the ^ means "the beginning of the line". The $ means "the end of the line". The . means "any letter, number or symbol". The * means "I'll keep looking for the previous thing until you tell me to stop". Putting the wildcard in parentheses like (.*) means you can refer to whatever is between them later in the expression with $1. Regular expressions are very powerful, but they can make your head spin a bit. ↩︎

  3. Or in my case of course, .zone/ ↩︎

  4. See RewriteRule Flags at Apache.org. ↩︎