Lynx icon

Lynx thoughts


2026-01-23-10-49-21

Writing in Perl, with all its ugly syntax and arrogant community, can still be seen as a form of rebellion.

Besides, the ugliness of Perl and the arrogance of its community is like a percent of a percent of those of Rust.

Nevertheless, a real rebellion is not in Perl.

Sometimes, when I write a simple script for my personal usage, I do this in Python just out of laziness, but always ask myself: “Could I get away with just POSIX AWK?”

And the truth is, unless you require any networking, GUI or raw binary data processing, you can get away with POSIX AWK. It has more installations than Perl for sure, especially if we count all the Busyboxes and other embedded setups. That’s why AWK does, and always will, remain one of my porting targets for all interesting offline, text-oriented stuff.

But what if we (let’s put the GUI aside for now) also need networking and binary data? What’s the next smallest programming/scripting language whose distribution offers these features while still being smaller than Perl, Tcl or Micropython?

Well… One of such options seems to be Lua where binary data can be processed with ease, but they still haven’t incorporated LuaSocket inside their builds. Nevertheless, static Lua builds weigh about 350K, making it one of the smallest scripting runtimes out there after NAWK aka one-true-awk/original-awk (for comparison, Tcl without Tk is about 8 MB, Perl and Python are even larger, and dynamically linked MicroPython is 870K). There also exist some things like Berry and fe but they are definitely more on the exotic side of things.

Lastly, there always exists your default shell with some nc+curl+jq thrown in for networking and fq+xxd thrown in for binary data parsing. Not a frugal way of doing things but… it’s already there anyway.


2026-01-22-09-43-36

I’ve been considering adding some MySpace style “p*mp my profile” features.

What would be cool to do in this regard?

It would be cool if your site finally started working in normal, non-JS Web browsers, but it became clear long ago that your real target audience is totally different from what your design implies. So, whatever.

I’m old enough to remember the rise and fall of VampireFreaks. Unless you change the vector sooner than later, make the site really accessible and not big-tech-dependent and stop catering to posers, lamers and cultists, your project is doomed to the same fate.


2026-01-22-08-21-51

By the way, NES and GB releases of Scoundrel have been updated with a minor but important fix: now it asks for a confirmation if you press Start mid-game, so you don’t lose your progress if you press it accidentally.

I have also decided to stick to a single version number for all my ports, so the GB one is also marked as v3 even though it’s physically v2.


2026-01-22-08-11-44

Looks like Octo has become a de-facto standard for modern CHIP-8 development.

Need to get more familiar with it if I want my port of Scoundrel to become a reality.


2026-01-21-13-56-28

A real engineer developed netstrings.

Overengineers developed protobuf.


2026-01-20-09-34-06

Well… The first GB port of Scoundrel has been released along with the second version for Famicom/NES, where the cards finally are proper rectangles.

The sound bit wasn’t too difficult to figure out, and I managed to make the GB jingles to be almost identical to those on the NES.

I think Scoundrel is one of the most perfect candidates to play on cheap monochrome pocket devices, especially those with a few buttons onboard. As such, given that e.g. Rockbox has a CHIP-8 emulation support, I wonder how difficult would it be to create a port that’s not even remotely based upon my “bedrock” C code. And if this turns out to be successful, I think this will be the first roguelike for a vanilla, non-extended CHIP-8 environment, not SuperCHIP or XO-CHIP or other fancy-mancy.

I think a 4096-byte game with immense replayability potential is something worth investing my time into. Just need to find enough of it first.


2026-01-20-07-31-28

Hey, Linux nerds: Any idea why termscp (installed via brew)…

That’s one way to declare yourself a hardcore Cook-fag. I know that brew also exists for Linux but absolutely no one needs it here. Also, using “nerds” in this connotation just adds to the impression.

…is capping out at ~120kbs for SFTP transfers, while Filezilla or the bog standard sftp command is hitting 10megs+ from the same host?

Because termscp is another piece of rubbish written in a cancerous language. Most Rust addicts are too young to know how to properly deal with SFTP connections, maybe that part was just “vibe-coded”, I wouldn’t be surprised.

So, the ones you need to ask are not “Linux nerds” but Rusty zombies. Adios.


2026-01-20-07-22-03

Started something I’d planned some time ago: porting Scoundrel to Game Boy.

Didn’t expect the biggest challenge would be to redraw the title screen in a consistent style…

Sound effects will also need to be added, but later.


2026-01-18-14-01-17

Meanwhile, in the “parallel reality”:

Vue is ultra tight and well made. Svelte is supposed to be elite too.
Nuxt has incredible scaffolding for making anything from a mini site to a complex app like […] without bloat.

Bruh. My delusionometer is off the scale with statements like this one.

Learn proper HTML and CSS, learn to write your own backends and manage them, not put bloаt on top of other bloat and call it a “lightweight” website.

Oh, yeah, I forgot. Claudeaganda cannot teach you these things. Because you might start thinking for yourself and become too dangerous for them.

It still isn’t too late to choose the right side of history though. If/when you do, you know how to find me.


2026-01-18-13-52-49

In case anyone didn’t know why I took Playfair and designed InterPlay-36, and then took CONDI and designed DRACONDI, the answer is simple.

Imagine a scenario where you cannot trust your input device and need to encrypt everything before you even type it. To do that, you need an easy to use pen and paper cipher where you don’t have to write down your intermediate encryption results. The other trusted party would then decrypt the info the same way.

For those of you who think this threat model is rather extreme, think again: why else would governments push for rewriting everything in Rust, even granting huge money to do so to Linux distros considered non-mainstream anyway?

Soon, the only kind of encryption you can rely upon will be one that you can run fully offline.


2026-01-17-13-46-53

If you ever feel useless, just remember that there exists a PuTTY version for Linux.


2026-01-16-08-59-43

What I would aim for at this point is a Rust-free distro. Woke-free is a secondary priority. Rust is shoved into every hole by the same people who dream of building a world-scale digital Gulag. A backdoor in the toolchain (which, unlike e.g. C, has no alternative implementations) looks like only a matter of time.


2026-01-16-08-47-30

Ideologically, I understand why some people might prefer Omarchy to e.g. CachyOS or Garuda when it comes to Arch Linux flavors.

Technically though, it is a total landfill of files and apps the world hasn’t seen since Slackware Linux. The key difference is, Slackware can run on any x86 toaster, and Omarchy can only run on the hardware supported by Wayland. Even if I installed it on the supported hardware, I still would have to delete like 70% of preinstalled stuff, which begs the question: why not install normal Arch instead?

Bottom line: not worth the hype. If you aim for a woke-free distro, either build one yourself or look for less bloated alternatives like Void (glibc-based, musl-based one is quite buggy), Devuan, OpenMandriva, Gobolinux etc. Yes, even OpenMandriva is less bloated than Omarchy.

But if you still are into the idea for some crazy-ass maintainer to fully decide what’s best for you… well… Slackware itself hasn’t gone anywhere.


2026-01-15-08-29-48

As a Wayland-native desktop environment built in Rust, COSMIC…

… must die ASAP.


2026-01-15-07-43-39

Look, I can understand why Rust cultists exist.
I can understand why ChatGPT cultists exist.

But… Claude cultists? Seriously?
Within the high ranks of the company, no less?

“Hand me your sidearm, officer…”


2026-01-13-22-38-06

Another card game port is being prepared.

This time it’s Joker Jailbreak.

Scoundrel still is on the top though.


2026-01-12-09-57-33

Fixed a potential entropy issue in eznes.h, the library I’m building for Scoundrel and other future NES ports.

Meanwhile, in the “parallel reality”, monkey consumerism blooms and blossoms. Gadgets, movies, hardware upgrades… And, of course, more attentionwhoring with first-world problems that don’t even resemble anything problem-like for everyone else.

There are some interesting specimens there too though:

After spending too much time online trying to find a sense in this mess of existence, I erased all of my social accounts in 2020. Since then, I’ve been active on the fediverse and other alt social network.

Hell no bro, if you erase all of your social accounts, you erase all of them, not create other ones.

“Alt social networks” are a myth. Sheeple are the same everywhere. Zombification is everywhere. If you don’t have a basic (hashbang.sh-like) IQ test in front of the entrance, any social medium you’re trying to build inevitably becomes another Reddit or Zuckerbook. The place where the quoted post was written is no exception to that.

Go fully independent or go with the herd. There are no half-choices here.


2026-01-11-10-51-07

Speaking of Bulls&Cows, now that I have at least some foundation for CC65 coding, maybe I’ll also create some B&C version for Famicom/NES.

Since the ROMs created by CC65 are mapperless (with the default build config), I also might want to dig up one of my old scripts to build an 11-in-1 composite multicart. Which means that, after Scoundrel, I have ten more game ports to develop…

That’s one way to go but I’m still ruminating about it.


2026-01-10-08-59-42

I don’t know why this game has become my new obsession. But it allows me to keep polishing the algorithms, learn new stuff about retro systems and keep the brain sharper when both playing and porting. Also, it’s simple enough for the code to be reasonably compact on any platform and language, so others can understand it too.

That’s why I’m saying this is my new Bulls&Cows.


2026-01-09-21-35-52

Well… The first version of my Scoundrel Famicom/NES port is ready.

Will it also be the last one? Who knows. But it already has color, a win screen with credits and some sound effects.

The source code is here, the ROM itself can be found among the other binary releases. Feel free to test it out. It’s a simple mapperless game that should run on any compatible emulator and, of course, bare NTSC consoles. Try and beat it.

As for my further plans… There are many more ports to come. It won’t get boring anytime soon.


2026-01-08-21-51-29

Porting Scoundrel to NES has begun.

A long road lies ahead but gameplay-wise, everything is already there.

Stay tuned…


2026-01-07-11-28-40

What’s the way to keep score when playing Scoundrel with a physical deck of cards, you may ask? Especially if you don’t want to waste paper or don’t have a D20…

Well… do you have a calculator? Any cheap 8-digit calc will do but an RPN-capable one fits even better.

I wish I still had that ultrathin card-sized calc that can only be powered by its solar cell. It could fit into the card deck box perfectly.


2026-01-07-08-59-00

And now, Z80-based systems such as MSX and ZX Spectrum have been added to the Scoundrel support list. And it still can be compiled from the same C source file, but using zcc from Z88DK as opposed to cl65 from CC65.

This thing is unstoppable.


2026-01-06-20-43-12

So, what do we have at the end of the day? Scoundrel gaining support for:

That’s +12 machines enabled from a single C file, in addition to any systems supporting standard ANSI C. Just thanks to correctly written, no-quirk code.

And that still is just the beginning.


2026-01-06-12-57-51

As a side effect of doing things right, Commodore family support (PET/C16/C64/C128/Plus-4) came for free with my C89 port of Scoundrel. Just needed to add a conditional macro in two places to distinguish between CC65 and “desktop” C compiler when seeding the PRNG upon game start. For VIC-20, I think there’s not enough memory to fit it though.

Technically, Apple II/IIe build should also work but I think I’ve lost a reliable way to test this out.

For a NES implementation, a lot more needs to be done (even if it’s gonna be pure text) but the foundation is definitely already there.


2026-01-06-09-29-11

Porting Scoundrel to pure ANSI C89 has been successful. Also, I’ve beaten the game and verified it works correctly.

The port list is now being maintained in a dedicated repo of mine. You can also see all the plans and priorities in its README.

By the way, since one of my ultimate targets is NES, I’m also going to train my CC65 skills on Apple IIe (which I already have a bit of experience with) and C64 first. Having a pure C89 version of the game, with all static allocation and in-place deck rotation debugged, will make porting process much, much easier.

And this situation makes me think of something one more time: we need to have more indie developers target actual retro platforms with actual constraints, as opposed to lazy pseudo-retro pixel graphics that requires you to waste the power of modern PC hardware anyway.

Seems like I keep screaming in the desert though. Let’s get to work and eventually kick the hipstas' asses with the Scoundrel on a NES.


2026-01-05-21-22-08

Porting Scoundrel to pure C has begun. This will open a way to something I’ve never tried before.


2026-01-04-10-03-48

Something I should have done a long time ago:

alias gcm='git commit -a -m'  
alias gp='git push origin'  
alias gpm='git push origin master'  


2026-01-03-07-31-56

So-called “Hacker News” is just a Reddit for the subset of cattle pretending not to be cattle.

To those who fleed Reddit for HN: congratulations, you played yourself.


2026-01-02-20-27-45

I’ve decided to up the challenge and start porting Scoundrel to several other platforms.

And these are just some things I can think of. This is gonna become my new Bulls and Cows, or at least on par with it.

Oh yeah, Bulls and Cows is surely coming to T-DeckARD as well.


2026-01-02-11-11-51

I lost access to password manager. There’s no way to change the e-mail or password of this account. Once I close my browser, I can’t log back in.

Mwahahahaha.

Keep further relying upon the tech out of your control, and this will be the least of your problems.

A “password manager” is a very convenient way to lose all your credentials at once.

But of course, it’s always better to mute smarter people than to listen to them at least once in your life, right?


2026-01-02-10-54-18

As promised, the first game for T-DeckARD is finally here.

It’s called Scoundrel, and it blurs the line between card solitaires and roguelike RPGs. The official ruleset is so deceptively simple that it can be ported to almost anything (maybe even TI-74 BASIC), yet the replayability is enormous and one can spend hours trying to finally conquer this dungeon. I think I’m going to dedicate my upcoming Gopher post to the details of this game and why it’s so awesome to port and play on any medium available.

For now though, I’ll just let you know that Scoundrel is finally available on T-DeckARD. And that’s just the beginning.


2026-01-01-20-54-30

To anyone screaming “T-DeckARD HAS NO GAEMZ!!!11”:

I have already decided which one I’ll implement first. It’s quite unusual and very simple yet elegant and with rich gameplay.

Stay tuned.


2025-12-31-22-37-18

Another big optimization is coming to the browser component. It has to do with how the main menu input loop is organized right now.

Honestly, I’d never notice such a bug on a regular desktop system. T-Deck, with its limitations, forces you to think in terms of optimal code. I surely missed that feeling since the MK52.


2025-12-31-20-56-25

And so, my last goal for 2025 is achieved an hour before the new year: DeckBro is ready and operational as a part of the T-DeckARD suite.

Some optimizations may still come to the engine, but I’m generally satisfied with the result.

See ya in 2026!


2025-12-31-20-28-42

Big thanks: Claude Code

Oh, so he does admit it openly. Well, that’s a start.

Doesn’t justify anything else, but still.


2025-12-31-11-54-26

Spent some time on DeckText parser optimization. Now it works almost instantly on this very blog’s HTML code.

Time to write the browser applet itself. Maybe I’ll call it… DeckBro.

But first, I need to get some sleep before the New Year night.


2025-12-30-17-57-22

This looks like a very interesting concept that definitely might develop into something really awesome.

Keeping tabs on it.


2025-12-30-11-44-47

Kind of hard to believe it myself, but Sony MDR-ZX110 headphones are actually much more comfortable on the head than Bose QC Ultra. Maybe because the Sony 1) are lighter, 2) don’t make my ears sweaty.

Anyway, I think there are some good reasons why they are so popular, and that’s not just the price tag.


2025-12-30-06-49-07

How many days has passed before the first public message about closed-sourceness of the official “parallel reality” TUI on the platform itself?

Five days. Five, man.

And the guy who wrote about this still ran it and started using it on a daily basis, from what I can tell. He’s a modern macOS luser though, self-preservation instincts are not their forte.

I mean, compared to the entire Faildows zombieland, this might look like a much more adequate choice, but not to those who know what’s real.


2025-12-29-20-35-29

Good news everyone, the first version of the DeckText specification is finally published, along with the parser’s reference implementation inside the T-DeckARD’s deck.text module.

The next step is going to be a full-on DeckText browser applet. And, of course, I’m gonna at least try adding the corresponding markup to this blog.

Which is gonna be fun by itself.

What’s next? Who knows…


2025-12-29-06-51-08

I also wanted to play with colors on the T-Deck but it turns out the escape color code support in CircuitPython is still buggy and applies the most recent color to the entire screen. A workaround library seems to exist but I think that’s a bit of an overkill. Having to print every message twice (once on the terminal object and once with the standard print()) in all places is the last thing I want to do.

Nevertheless, maybe I’m still going to append some terminal-related niceties to T-DeckARD even within current limitations. At least to not have to hardcode terminal width and height or resort to other defaults.


2025-12-29-05-59-26

There’s something really symbolic about the phrase “reverse engineering” being commonly shortened to “reveng”.


2025-12-28-22-11-05

The spec has been written and mostly finalized. Time to start implementing it. Inside T-DeckARD, of course.

Alas, it won’t be a single-pass parser but I’ll try making it as optimal as I can.


2025-12-28-07-46-11

The 10-item menu component, deck.menu, wasn’t hard to implement. An (id, label) tuple list in, an ID string out. Or an empty string if the user entered c to cancel the selection. And yes, it’s quite convenient to use on the T-Deck as well. So, I think I’ll stick to this design for the time being.

Now, about my upcoming spec which I think I’ll call DeckText (because DeckML sounds too lame, and DTML is JAFA). It will be a subset of HTML, yes, but it’s going to be very short, because the entire idea is for it to suit embedded devices with the absolute minimum amount of parsing required. Unlike full HTML, DeckText-compatible web pages ideally will be parseable with regexes and even simple string-splitting operations.

This is the kind of Web we’ll be not ashamed to promote. But let’s see how it goes.


2025-12-28-06-20-32

Before that though, I think there’s one UI component that T-DeckARD is still missing: a menu system.

Something very simple, presenting numbered options and then returning the label/ID associated with the number.

Most probably integrated with the print_paged routine.

Another menu style might involve the fact that the T-Deck keyboard doesn’t have any softkeys but has exactly 10 keys per row (except the last one), and the top row only consists of letters. So the QWERTYUIOP line can be used for a 10-item menu, with the alternate selector keys being just 1234567890.

Still thinking which style is better to fit inside the (effective) 52x18 screen space. Maybe will implement both. The second one doesn’t need print_paged and overall looks more elegant though.

We’ll see.


2025-12-27-22-13-26

After ruminating for a while about my experiments with line-oriented UIs and bringing the T-Deck online, I have come to a conclusion that we need a special subset of Web.

No, I’m not talking about Gemini, Spartan, Nex or any other Gopher descendant. This can be done via the usual HTTP and even using normal basic HTML. But how?

Well, I have several ideas about that. And they come from my own experience with the interface I’m typing this very post on right now. What’s left is the spec itself, and I think I can prepare it tomorrow.

What I can say is that you’ll be surprised about how little will be required to write a fully functional browser for this HTML subset. That, my chooms, is intentional.

Stay tuned.


2025-12-27-16-35-55

T-DeckARD now implements HOTP and TOTP to be used for various 2FA services. Now only shaped as the deck.otp module that exports corresponding functions, but a convenient applet is also in the plans.

Unlike the utotp library it was initially based upon, I’ve tried to make this module platform-agnostic so that it can work on any Python version, be it CircuitPython, MicroPython or full-featured CPython. It’s not that trivial, and the T-Deck capability itself still depends upon NTP sync as it doesn’t have any energy-independent clock and gets reset upon every shutdown.

Yet this module still is a powerful tool to add to the kit. I had plans to implement it long ago since the very start of T-DeckARD (even when I didn’t know what the whole project would be called yet), and now it’s finally here.

Meanwhile, a random new post in the “parallel reality”:

How the fuck do you play Fallout 3/New Vegas on windows 11?

Nuff said.


2025-12-27-10-32-13

One aspect of the “leech economy” that I fully support is pirating cloud-based LLM APIs.

With how what those companies say differs from what they actually do, no one should be paying for that in the first place.


2025-12-26-21-52-06

Remember when memes were funny and computing was personal?


2025-12-26-14-49-59

So yeah, now my ed-like text editor inside T-DeckARD also includes the x command.

What does it do? Interprets the supplied line range as Python code, compiles and executes it in place. This way, you can test your code or its fragments without even exiting the editor or saving the source file.

For on-device development flows, this turned out to be extremely convenient. Not just when you write Python, by the way. For example, if you just forgot to unlock the root FS or mount the SD card, you can write a line with the corresponding call and then issue the x command to execute this call without having to think how to save what you’ve already written in the editor.

If this development environment can’t be considered integrated, then I don’t know which one can.


2025-12-26-12-43-20

The llmchat() applet in T-DeckARD just got a whole bunch of new chat commands: /add, /saveconv, /savelast, /savecode and /edcode. That’s right, now you can basically vibecode directly on the T-Deck.

The flow is: add necessary files to the context with /add, then prompt the LLM about writing or fixing code, then extract it from the most recent assistant’s message with /savecode or better /edcode to edit, save and run it locally. For more convenience, I might also need to add some code evaluation commands to the app.ed.Ed editor class itself (so that we could test Python code without exiting the editor), but this looks very promising already.

Of course, all of it is much more convenient to do on a “big” PC or any system that can run a normal (Unix-like) OS. However, you need to be nearby that PC. With a T-Deck that’s always in your pocket but provides zero distractions, this experience feels really special.


2025-12-26-09-00-11

A damn snowstorm outside. Panels don’t work and the Starlink dish consumes 10 to 15 watts more just to melt the snow off itself. Terrible conditions for my situation. Yet I’m still thinking on how to improve what I have come up with so far.

What’s important to note is that T-DeckARD isn’t positioned as anything professional, it’s purely hobbyist-level stuff (after all, that’s who CircuitPython itself was designed for in the first place) and might never reach “production readiness”, whatever that means in this particular case. However, I am and always will be transparent about what it actually is doing, both in code and docs. Everyone is more than welcome to fork it and modify any component according to their personal needs. Like T-Decks themselves, this project is a Lego, not a monolith.

Now, compare all that to closed-source 4MB blobs of who-knows-what that supposedly just output pretty terminal forms. You get the idea.


2025-12-26-08-31-11

Updated T-DeckARD with small quality of life improvements for paged output and methods for fetching a remote HTTP(S) URL into an editable or viewable buffer. The more integrated (and interlinked) components like this it has, the easier it is to create new applets and build on top of existing ones.

Meanwhile, in the “parallel reality”, potential botnet members continue praising the release of the binary-only TUI.

I have downloaded it too, but not to run it. Looking at the stringdump doesn’t show any outright suspicious activity, but that only reveals import names, nothing more. Everything else is mangled. The import list, however, shows which libraries the author had used, which intensifies my suspicion about genAI usage in the process.

Seriously though, “trust me bro” attitude doesn’t work anymore.

Talk is cheap. Show me the code.

— Linus Torvalds


2025-12-26-06-32-20

Having to press Alt+B after the device reset is a bit annoying if I want the keyboard backlight to stay on.

But I can deal with that.


2025-12-26-06-24-19

Still in the bed, with the T-Deck in my hands.
First time I have improved the codebase directly on the device. Using my built-in ed clone.
I am even using this clone to write this post as an ephemeral file to be sent to the blogpost_str method.
Until I issue the q! command, it won’t be sent out.

This is getting serious.


2025-12-25-21-49-08

Not getting why folks still post sarcastic comments about ed.
Ed has outlived hundreds of other text editors and will outlive many more.
Just because “editor as a REPL” is such a brilliant and resource-frugal concept that, in some cases, it will always be irreplaceable.
That’s why I chose to implement a simplified ed clone in T-DeckARD as well.
Looks like a nice choice so far.


2025-12-25-21-30-50

I believe CircuitPython here supports some terminal output codes, so there is a potential to beautify this place a bit.
Also have some ideas about future applets. This env is too much fun tbh.


2025-12-25-21-17-23

Can T-Deck be used for vibecoding?
I think so, just need to add some export functionality to the llmchat module.
This can be hilarious if done right.


2025-12-25-21-09-40

I’m fine with whatever solutions other authors come with, as long as they are fair and accessible to everyone.

But I’m not fine with these levels of hypocrisy.


2025-12-25-21-04-29

And, like, no one even asks questions where the code is. As if this is completely normal.

What’s more hilarious is the amount of Claude suckage on the author’s GH profile. I’d say it’s a bit too much for an author with an openly “no AI” stance that he’s bragging about. Starting to suspect that the TUI sources were fully generated as well so he hides them so that no one can notice this discrepancy.

This place is a circus,
You just see the surface,
They cover shit under the rug…

— Maneskin — Gossip


2025-12-25-20-44-00

Meanwhile, in the “parallel reality”, a TUI client is released on GitHub.

In the form of… just binaries.

n
o
t
h
i
n
g

e l s e

That’s… A new low. I really thought that project still had some hope, but after this kind of a move…

No hope. No future. Another trojan-by-design.

Writing this on the T-Deck, lying in my bed, contemplating choices.

Khan definitely made the wrong ones.


2025-12-25-20-27-11

This definitely wasn’t as straightforward as I thought it would be. First, it involved setting up a dedicated API server. Which, of course, needed to be HTTPSed, thus containerized (аlong with a simplified version of my “CMS” script) and put behind my usual reverse proxy. Second, it involved adapting the existing “CMS” scripts to the new post backup path (more on that later). Third, it required creating new helper methods for T-DeckARD to handle URI component and form parameter encoding, because the version of Requests library used in Micro/CircuitPython just ain’t as smart as the “big” one. For the amount of moving parts, I managed to pull all this off surprisingly quickly. Maybe some more optimizations will come along the way.

As a side effect of this capability, the Markdown source code for all posts is now available in plaintext for viewing via any non-HTML-enabled devices. You can do curl https://lynx.luxferre.top/posts and see the unaltered feed in your favorite plaintext viewer. Thinking about also making this feed somehow available via Gopher, Nex and other lightweight protocols, because… why not?

Anyway, like I said, this is just the beginning.


2025-12-25-18-03-38

If you can read this, then I have successfully set up microblogging from my T-Deck.

Nothing compares to this feeling.


2025-12-25-17-54-27

Closing in.

Just a final test left.


2025-12-25-16-44-35

Now, if everything is OK, the previous post shouldn’t be autodeleted.


2025-12-25-16-39-22

Everything may break now.

Don’t fret.


2025-12-25-14-32-00

I have realized that I put a (previously reformatted) generic 8GB microSD card into the T-Deck but still ain’t using it for anything but testing the features of mounting and unmounting its FAT32 file system.

I think I am going to use it for something, but as the matter of fact, as I already said, very few people understand how huge a megabyte actually is, let alone a gigabyte. That is, if you don’t waste any space on suboptimal code, NIH-driven runtimes and multimedia bells and whistles.

The core T-DeckARD distribution, along with all its required .mpy dependencies, still hasn’t surpassed 100K. Yet it’s already very close to enabling me to write to my microblog directly from the device. But, of course, I won’t just stop there.

The New Year’s eve, provided that I survive that far, is gonna be exciting for sure.

Cyberpunk ain’t cyberdead.


2025-12-24-20-46-06

Merry Crisis ©


2025-12-24-17-34-40

There’s a reason of why we here live like that, particularly IT-wise.

It’s because we have adopted something that can be called “leech economy”. This is one of our biggest strengths and biggest vulnerabilities at the same time. We got so used to getting everything for free, even the stuff “civilized” people pay for, that it had become our second nature. However, such mentality makes people especially easy to manipulate. Promise a freebie where some other “loser” would otherwise pay, et voila, you get them hooked. With normal OSes and other FOSS that end users don’t pay for, there’s no such “loser” to feel the advantage over, so that does not feel that interesting. This is how Dirty Billy won this market. That and huge amount of cash forwarded to suits in charge in order to use their proprietary crap in governmental institutions.

People often ask, like, “would there be so many computer-literate people here, were it not for piracy?” Maybe, maybe not. I personally don’t consider piracy a crime, and I’m ready to spit in the face of anyone who does. However, I’d rather see everyone getting the hang of GCC than pirated Borland C++. Just because it doesn’t get everyone hooked to another, more inferior, proprietary and trojan-by-design product it runs on. When it comes to Faildows and a lot of Faildows-only software that actually deserves to be wiped off the face of the planet, making it free via piracy actually is harmful for humanity in the long run, because people just won’t be motivated enough to seek better alternatives. Oftentimes, they don’t even know that any alternative exists at all.

Should we considered such people computer-literate though? I don’t think so. They are leeches, lusers and NPCs.

Leeches do what they always do. They suck. But one day, even they will find that there’s nothing left to suck on.


2025-12-24-09-49-45

Todo for today:


2025-12-24-09-40-48

Morning Wordle is always useful for your brain.


2025-12-23-21-36-07

Finally, it’s back up.

Now I can say that the core functionality of T-DeckARD components is near complete.

Applets and extra components though… is a whole another story.

Which I’m going to tackle a bit later when the work situation is sorted out.

The goal of being able to microblog and IRC from the T-Deck itself still remains a goal, but now I’m a lot closer to it than e.g. three days ago.

Show must go on.


2025-12-23-20-21-42

Looks like Codeberg is (partially) down, at least its SSH endpoint.

If it doesn’t get back up until tomorrow morning, I’ll consider moving T-DeckARD to my own Git server. At least temporarily.


2025-12-23-18-17-02

Opus.Magnum.finde(mich)  
Ich.bin(rein).wie(Blütenweiß)  
Opus.Magnum.binde(mich)  
Nimm(mich, auf).in(deinem.Kreis)  


2025-12-23-16-20-22

:tabe deck/http.py  
  
# It's time to complete the core with the last building block  
# Created by Luxferre in 2025, released into public domain  


2025-12-23-08-09-16

T-DeckARD now enables easy battery voltage reading, SD card mounting and a whole bunch of file management operations. Still need to make the copy function more optimized though.

Also, given two things:

… I have decided to incorporate tdeck_repl inside my own T-DeckARD repo, simplifying the entire flow a little.

Right now, the only external dependencies belong to the official Adafruit bundle, and I hope it stays that way.


2025-12-22-16-12-01

As of now, the entire T-DeckARD distribution along with all the .mpy dependencies weighs about 89 KiB. Without the dependencies, it weighs just under 62 KiB.

Obviously, it will grow larger over time. But it’s remarkable how few people understand how large a megabyte actually is. Especially when everything is just source code, or just bytecode which is even more compact.

I doubt that T-DeckARD will ever grow over half a meg even when all its planned core functionality is completed. That’s just how it is. And that’s how it should be.


2025-12-22-10-48-09

I’m pretty sure there are some valid and cool use cases for the recently re-issued Commodore 64.

I’m also pretty sure that buying it to just play some vintage crap (that was outdated even when it was new) is not one of them.


2025-12-22-09-34-09

The project has taken a shape. And it’s got a name too: T-DeckARD.

Yes, that’s another Blade Runner reference. At least the vibes match.


2025-12-21-13-15-24

Am I ready to switch to 53x19 terminal size instead of 80x25?

Surely not… But do I have a choice?


2025-12-21-13-07-30

Well, there’s been some huge progress:

I can already see a whole friggin' operating environment slowly but surely growing from the ground up using all those components. Maybe, one of my not so remote goals is going to be able to microblog from the T-Deck itself.


2025-12-21-08-31-11

Now, here I have something to say about Python indentation.

Tabs vs. spaces: spaces. Tabs only make sense when the script lives on a single machine and gets edited on that very machine, which is almost certainly never the case. Also, that machine has to enable easy tab entering with a single keystroke. The T-Deck, for instance, doesn’t have a Tab key at all. Default mobile keyboards don’t either.

How many spaces though? Two. Several years ago, the PEP 8 guide finally switched from the absurd waste of useful screen space with 8-space indentation to much more reasonable 4 spaces, however, let’s remember again about machines where you can’t indent with one keystroke. Pressing whitespace twice isn’t much more of an effort than pressing Tab once. And, being the smallest thing that still is semantically different from a single whitespace, two-space indentation helps preserving the valuable character real estate on mobiles and other small screens like the 320x240 one in T-Deck.

Why do I care? Because I want to be able to program the T-Deck from itself, without having to rely on “big” PCs. A sort of an editor definitely is coming. True autonomy is closer than it seems.


2025-12-21-07-40-38

Another concerning trend among tech people is putting their list of mental diseases before their achievements (if they even have any).

Yesterday, I’ve seen an introductory post in the “parallel reality” and just imagined a possible dialogue between me and that person.

“Hi, I’m Luxferre, a senior/techlead DevOps and AIOps engineer by trade, a hacker by hobby; among my biggest past projects were GerdaOS, Wallace Toolbox, FastContact, BFG browser, lexipwn, you can find the links to all of them on my personal webpage luxferre dot top; among my current projects is a hobbyist-level, CircuitPython-centric and mostly MicroPython-compatible component library and application pool for usage on devices such as LilyGo T-Deck…”

“Hi, I’m [nickname redacted], my pronouns are they/them, a nonbinary software engineer, been a furry for 9 years, still doing web dev work within the fandom… oh, and I also love Rust btw…”

“…kthxbye”

I wish this was made up. But no. It’s not the first time I see introductions like this. What are you capable of and what did you actually create? Where can I see it? When I see your postings in a public place, I don’t care about your pronouns, gender identity, sexual preferences and other cockroaches in your head that are none of my business, just as the cockroaches in my head are none of yours. Show me what you can do as a specialist, that’s the only thing that really matters.

And, of course, such people, among their other issues, now also use Rust btw. Every single fucking time.


2025-12-20-21-05-51

When the REPL is your only available shell, something interesting starts to happen.

It motivates you to start creating your own toolboxes.

In particular, only when I got a T-Deck with CircuitPython as the only viable option, this motivated me to start creating my own component library.

Right now, this library only can into exposing sockets and Requests (library) instances, constructing custom chat interfaces and some interaction with remote LLMs. Not bad of a start, especially since all this was built in a single Saturday with a lot of distractions.

However, I expect it to eventually do more, much more.

And I’ll try to keep it as portable as possible, with MicroPython being the lowest common denominator. But we’ll see how this goes.


2025-12-20-10-46-17

I never saw this as a big deal, but that finally got me too. Think git config --global advice.defaultBranchName false is a must at this point.


2025-12-20-09-49-53

The amount of doofuses (or is it doofi?) who constantly confuse the terms “computer” and “PC” seems to be growing at an alarming rate.

Yes, T-Deck is a computer. A real computer. The fact that it’s being powered by a rather high-end MCU doesn’t change that.

Consecutively, Cardputer by M5Stack also is a computer. Just a very niche one.

Is there anyone who doesn’t agree that Macintosh 128K was a real computer? Well, people got (MCU-powered) Raspberry Pi Pico emulating that now. So, MCUs like RP2 or ESP32-S3 are by definition more computery than the things they are capable of emulating.

Why so? Because the line is so blurred now that it became pure marketing.

Don’t fall for it.


2025-12-19-17-03-05

After multiple tons of critique that its local models suck with tool calling, Google has finally released FunctionGemma (270M).

And this one even seems to do actual tool calling without having to dance around it with a shamanic drum. Splendid.


2025-12-18-21-15-05

To fully get the T-Deck ready for the adventures, you need just two more bits.

First, populate the settings.toml file with your WiFi credentials. It should look like this:

CIRCUITPY_WIFI_SSID = "wifissid"  
CIRCUITPY_WIFI_PASSWORD = "wifipassword"  
CIRCUITPY_WEB_API_PASSWORD= "webpassword"  
(yes, it also exposes a Web interface for some primitive file management so you better password-protect it too)

Second, don’t forget the external CircuitPython libraries (including but not limited to very useful ones, like adafruit_requests or adafruit_connection_manager):

  1. Go here and download the library bundle for version 10.x (looks like it’s updated daily).
  2. Unzip it and go to the lib/ subdirectory.
  3. Mount your device and copy the necessary libraries (in the .mpy format) to the lib/ subdirectory on the device.

That should work. After unmounting and resetting the device, the modules should be accessible to CircuitPython.

And yes, you should be able to issue HTTPS requests and do other advanced stuff after these manipulations. Add a microSD card (which will be accessible at /sd) and you get yourself a full-featured pocket Python battlestation.

Looks very inspiring. This setup is a definite keeper for now on this particular T-Deck.


2025-12-18-19-49-06

OK, here’s a micro-tutorial on getting a minimal usable CircuitPython on the T-Deck Plus (assuming you already have esptool installed).

  1. Download the latest stable CircuitPython firmware from here (select the .BIN format). Version 10.0.3 works fine for me.
  2. Clone the tdeck_repl repo: git clone https://github.com/RetiredWizard/tdeck_repl.git
  3. Connect the T-Deck in the flashing mode (reset or turn on while pressing down on the trackball) and flash the ROM using this command (I’m using my ROM file name as an example): sudo esptool write-flash -e 0 adafruit-circuitpython-lilygo_tdeck-en_US-10.0.3.bin.
  4. After the flashing process finishes and esptool exits, pull the cable out and reset the device.
  5. Once CircuitPython is booted, you’ll see the keyboard doesn’t work. Connect the device back via USB, a small removable medium should be available for mounting.
  6. Delete everything on that medium, place the following files from the tdeck_repl repo there instead: code.py, virtcode.py, tdeck_repl.py.
  7. If everything goes right, you’ll be able to use the REPL right away. The flow is the same as for using “normal” MicroPython/CircuitPython, but you’ll need to rewrite the virtcode.py file instead of code.py when uploading your application startup script.

This, I think, may be a good start for getting a dream setup on this device.


2025-12-18-17-14-26

So, my stuff has arrived. Three 5-inch HDMI-enabled touchscreens and three LilyGo T-Deck Plus units (one with a black keyboard and two with white).

Am I interested in Meshtastic? Not quite (yet). Am I interested in having a sturdy ESP32-S3-based handheld with extended wireless capabilities and a hardware killswitch? Absolutely. The question is, what can I run on it?

And thus, I begin my list of various T-Deck Plus firmware, not counting Meshtastic itself. To reset the T-Deck into flashing mode, just keep the trackball pressed down when pressing reset button on the left of the unit. After flashing is complete, disconnect the cable and just press reset once more.

This list may (and most probably will) be extended in some of my upcoming posts on this topic. If only I had enough time to tinker with all available options… For now, I think I’ll explore the CircuitPython route a bit more thoroughly.


2025-12-18-11-31-47

One of the biggest giveaways of LLM-generated code, regardless of how good or terrible that code may be, is emojis in log messages. That’s bizarre on so many levels. First, who are they catering to with that? Are they assuming that software developers have degraded to the bottom of not understanding any message if there’s no picture attached to it? Second, what happens if the logs are processed by a non-UTF8-clean environment which doesn’t even have to understand non-surrogate characters beyond BMP (basic multilingual plane, i.e. first 65535 codepoints)? Third, who the fuck (in the age above 13) would insert emojis there when writing code by hand anyway?

Well, when I went to inspect the scripts that reveal the details of how itty.bitty.site works, guess what I found?

Emojis all over the place! At least that’s the main script, not the engine itself. But still, that’s indicative of the code quality and, most importantly, the author’s attitude.

When time permits, I’m gonna write a sane replacement for itty.bitty. That’s inevitable. Right now though, I’ll have to deal with it for a few more days.


2025-12-18-11-07-18

Hmm. Since when did dark UI themes become “white on grey”?

Someone at Google clearly hasn’t seen enough dark-themed sites. Like this one.


2025-12-18-10-50-27

Secret Satan is more fun to play than Secret Santa.


2025-12-17-20-54-17

One of the most inexpensive headphones turned out to be the most pleasant to wear.

I’m talking about Sony MDR-ZX110. No NC, no AP model, just plain ones.

And today I learned that Koss Porta Pro have a wireless edition now.

And also about some other things.

I need to process all those tomorrow. Now I need to sleep.

Somehow.


2025-12-17-17-52-22

It’s quite hard to find things more dystopian than quarterly “all-hands” meetings in tech companies. Especially now, when everything is filled with “AI first” propaganda full of lies and delusions.

That being said, some of my teammates turned out to be such moronic slackers that even (Google’s) Gemini 3 Pro writes better code than them. That’s quite sad, actually.


2025-12-16-21-36-43

Why is everyone suddenly bothered about Firefox embracing more “AI” features?

Who are those people still using vanilla Firefox instead of e.g. Librewolf anyway?

Should their opinion count at all?


2025-12-16-13-10-20

More realistically though, I think it’s gonna be something like MicroPython + LVGL.

Gotta love the MicroPython project. It’s something I already tested on some of my ESP8266EX boards, and it, again, is pretty self-contained with all the ways of interacting with the device available right from the Python environment. Although it misses some of the “standard” modern Python features, it still is very convenient to work with. And there is a build that comes with LVGL bindings, which definitely will make it easier to develop stuff for graphics-enabled MCU-based hardware.

Nevertheless, I’ll see what else I can dig up. Time permits.


2025-12-16-11-12-55

With its invasive, cancerous nature, it was only a matter of time before Rust made it into Linux kernel.

Well, now Linux will have less platforms it will be available for. I think that’s what the crazy cultists on the corporate payroll wanted.

At the end of the day though, that might not really matter. I run Linux on mainstream architectures because there’s objectively nothing better yet. However, it remains quite computationally intensive and thus power-hungry. Where every watt matters and even 10W is too big, you don’t want to run anything x86, ARM or even RISC-V. You wanna run something like Xtensa. That is, ESP8266EX, ESP32-S3 and so on. And there’s no usable Linux kernel for such platforms. In fact, we don’t even need Linux for such platforms, we can get necessary runtimes onto there directly without an intermediate OS.

I am utterly frustrated with the software I have to deal with. Windows is beyond comprehension! UNIX is no better. DOS is no better. There is no reason for an OS. It is a non-thing. Maybe it was needed at one time.

— Chuck Moore, 1997

If they are starting from the OS they have made the first mistake. The OS isn’t going to fit on a floppy disk and boot in ten seconds.

— Chuck Moore, 1999

Yes, these are the quotes from the inventor of Forth. And I fully agree with them.

Early Forth systems were all self-contained and required nothing except a bootloader to run them. All interaction with the outer world (files, network, other peripherals) was done through Forth routines themselves. It was simple and efficient.

I have a TI-74S portable computer. It directly boots into a BASIC environment. I wish it was Forth but whatever. I had even ported my DRACONDI cipher and my n808 VM to this machine. And they work. Without any unnecessary levels of abstraction. Oh, and did I mention that TI-74 can run off a small foldable 10W solar panel without a hiccup? I even have made a special cable to power two of its interface pins from a USB socket.

Anyway, I’m going to explore available Forth runtimes for ESP32-S3 when the necessary hardware finally arrives. My point is, if you try being power-efficient and still require an OS, you’re doing it wrong.


2025-12-16-10-31-38

I’d love to test out Ichi City hosting but, unfortunately, getting “exit status 4” error every time I’m trying to register.

Too bad, because I like it, it doesn’t even ask for an email address or anything else it shouldn’t really ask. Just the username and password.


2025-12-16-08-24-59

I fully stopped using Faildows in 2008. I got a new laptop which was fully mine, and decided there was no place for that garbage anymore.

Why? Because I didn’t want to be a part of a botnet. And still don’t.

Everything is a trojan until proven otherwise. With Faildows, you don’t even have a legal way to prove otherwise.

Now, even M$ itself doesn’t hide that they have spyware inside their systems, only now it’s “AI-driven”. Do NPCs care? Not at all. Just like they didn’t care about Stuxnet, WannaCry, Crowdstrike…

But they do get offended when I call them NPCs. Because that’s what they were programmed to do.

Homo Sapiens, it seems, has been largely replaced by Homo Windows.

The entire species of humanoid robots unable to think for themselves.

The Uneducatables.

When the time comes (and it will), we’ll need to keep in mind that Homo Windows will fight on the megacorp opressors' side.

Need to get ready by then.


2025-12-16-07-10-10

People who can’t express their sincere opinion don’t differ much from “AI bots”, i.e. LLMs leaving automated comments.

If every piece of social media promotes the “you can remain a moron and never educate yourself because no one here is allowed to call you stupid anyway” kind of ideology, then the Web desperately needs antisocial media. The sooner, the better.


2025-12-15-16-32-01

There’s no limit on how those suits can annoy me. Always talking about getting things done while putting in place every possible obstacle to actually getting things done.


2025-12-15-15-46-59

Cloud computing can be fun if you are in control of the cloud.


2025-12-14-21-09-51

The deck has gotten a voice: a portable Bluetooth speaker, JBL Go 3. Fits perfectly in between the left wall and the screen.

This one is A2DP-only and without a mic, so privacy isn’t compromised. Sounds quite good and the charge holds quite nicely too. Do recommend.


2025-12-14-15-29-51

I’m generally not a fan of Macs, even old ones, but if I had to choose, Bondi Blue iMac G3 would be one of the candidates.


2025-12-14-11-13-01

The official Neocities CLI is nice to have but has a noticeable drawback: it only allows you to operate one site at a time. To manage another one, you have to log out. Additionally, it’s written in Ruby which might have some gem dependency issues on some platforms.

That’s why I have created Multicities aka cities.sh. This is a POSIX shell script that depends upon several external utilities but provides the same functionality as the official Ruby-based CLI and also seamless multi-accounting. It always accepts two mandatory command-line parameters, sitename and command, and may accept some additional parameters depending on the particular Multicities command.

It’s recommended to start with cities.sh sitename login, although if you don’t, the auth flow will ask you for the password anyway before doing anything else. Once you enter the password and the API token is received, you don’t need to worry about this login part anymore. Multicities will fetch the token from the ~/.multicities.json file based on the sitename/username you provided. And you can have as many logins/tokens in that file as you wish. Combined with the plus-suffix email usage upon signup, it’s not hard to imagine the possibilities this can give you.

Afterwards, several commands will be available to you that reflect the official Neocities API. One that doesn’t and is the most interesting is the sync command. You use it like this: cities.sh sitename sync [local_dir]. If you don’t specify the [local_dir] path, then it will use the current working directory as one. So, what does this command do? Simple: gets the current filelist (paths + hashes) already present on the website, then gets the list of paths under the specified directory, iterates over it and uploads every local file from ther that’s not present or its hash mismatches. Files that already match by their SHA1 hash get ignored in order to preserve API calls. This is akin to how rsync works in any SSH-based hosting or VPS, and IMO is a good substitute for WebDAV only enabled for paid Neocities accounts.

I hope this project will make Neocities much more attractive and accessible to power users who got used to working with websites via CLI.


2025-12-13-11-44-58

There exist some websites that would work perfectly in Lynx but block it by user agent. To counteract this, you need to do three things:

  1. Add the following line to your lynx.cfg (see the previous post): ENABLE_LYNXRC:USERAGENT:ON
  2. Open Lynx, go to the options menu (o key) and update the user agent string. Even just Mozilla/5.0 will do fine in most cases.
  3. Go to the beginning of the options menu and check the “Save options to disk” option, if that’s not done yet. Then, press “Accept changes” to save the new user agent.

Afterwards, the ~/.lynxrc file will appear with a lot of options from the menu, including your useragent field which you’ll be able to change both in the options menu or directly in the file.

I’m not really sure why they haven’t enabled this option directly in lynx.cfg or in the CLI flags, but that will do for now.


2025-12-13-11-06-31

Okay, here’s my first attempt at a lynx.cfg (no advanced theming or anything):

DEFAULT_USER_MODE:ADVANCED  
STARTFILE:http://frogfind.com  
VI_KEYS_ALWAYS_ON:TRUE  
ASSUME_CHARSET:utf-8  
PREFERRED_CHARSET:utf-8  
ASSUME_LOCAL_CHARSET:utf-8  
CHARACTER_SET:utf-8  
REUSE_TEMPFILES:TRUE  
AUTO_SESSION:TRUE  
SESSION_FILE:~/.lynx_session  
USE_MOUSE:TRUE  
ACCEPT_ALL_COOKIES:TRUE  
PERSISTENT_COOKIES:TRUE  
SYSTEM_EDITOR:vim  
TAGSOUP:TRUE  
COLOR:0:white:black  
COLOR:1:blue:black  
COLOR:2:yellow:black  
COLOR:3:green:black  
COLOR:4:magenta:black  
COLOR:5:blue:black  
COLOR:6:red:black  
COLOR:6:brightred:black  
COLOR:7:black:cyan  
Then, I point the LYNX_CFG env var to this file and everything is alright.

In the COLOR directive, first we specify the UI element code (0 to 7), then the foreground color, then the background color. According to the docs, valid color names are:

   black         red            green         brown  
   blue          magenta        cyan          lightgray  
   gray          brightred      brightgreen   yellow  
   brightblue    brightmagenta  brightcyan    white  
And the UI element codes are as follows:

Of course, the colors themselves follow your terminal theme if one can be set, so be wary of that.

And that’s just the surface of Lynx ricing, one that just requires a single file. I haven’t even configured file associations yet to be able to open various multimedia right from the page. Overall, I recommend diving into official docs if you wanna learn much more about this wonderful browser.


2025-12-12-21-53-01

It’s really hard to decide which song better describes what happened to the “parallel reality” throughout some really brief time of its existence: Gossip by Måneskin or Zombified by Falling in Reverse.


2025-12-12-21-37-28

Ordered several things that may change my perception of cyberdecking forever, if they actually work, that is.


2025-12-12-15-10-15

And for some reason, I’m not surprised about the avalanche of newcoming brainrotten faildows-gamers there.

While others in the same cattle-feed complain about the amount of brainrot around. I haven’t checked but sometimes they might be the same lusernames.


2025-12-12-15-01-06

I had an issue when logging into the “parallel reality” after changing the DoH endpoint to LibreDNS (because DNSBUNKER had an outage in the morning). Works fine when I changed it back to DNSBUNKER.

I wish I hadn’t changed it. Whenever I see the fresh feed, at least two new posts in it are always faildows-related.

Maybe that’s why it’s called “the feed”: less people, more cattle.


2025-12-12-09-06-01

TIL that Lynx (the browser) has the -vikeys CLI option.

With it enabled, J jumps to the next link, K jumps to the previous link, L follows the link and H goes back.

Honestly, that’s pretty much everything I missed from there. I also remember some Lynx versions not supporting UTF-8, but that’s not a problem anymore in the current builds.

Gopher support also is something to not forget about. Only Lynx and Offpunk have it out of the box. However, I doubt that Offpunk will work with plausible speed on some systems where Lynx just flies.

Now, I’m seriously thinking about my next deck being console-only. And a Lynx browser installation will most probably be a part of it.


2025-12-11-13-57-54

Another privacy-oriented DNS I stumbled upon is DNSBUNKER. Unlike radicalDNS/libreDNS, it only supports DoH (https://dnsbunker.org/dns-query) and DoT (dnsbunker.org), which is something I can’t configure on my mesh router, only on end devices, where it works just fine as well.


2025-12-11-13-21-07

While everyone else keeps cuckolding @rustophile-Cloudflare’s DNS (which refused to resolve both of my main domain names several times recently), may I recommend Greece-based radicalDNS instead as a really privacy-friendly alternative? They also DoH (DNS-over-HTTPS) and DoT (DNS-over-TLS) on their sister website, as well as other cool stuff.

Here are their current services, just so that you don’t have to collect all the info from their multiple pages:

I may cover a lot more privacy-friendly services in the future, but this one works just fine for me and I hope it will continue doing so.


2025-12-11-09-06-57

A rather long time has passed since any message about my first cyberdeck, which is by design fully dismantlable at any time. I think there’s virtually nothing to add or to take away, so I consider this design stable. And now, it’s time to describe what it consists of.

The setup is not without its quirks (especially with what’s required to get the powerbank fully powered off) but is otherwise quite portable (not pocketable or even backpackable though, unless everything is out of the case) as the case has a reliable handle to carry it around and the lid closes securely. I think that’s fine for now.

For the next project though, I think there’s going to be many more challenges to overcome. Especially if I still want to conserve the true spirit of DIY. But that’s something to take care of for the future me.


2025-12-11-07-55-53

Zoomers rediscovering flightradar24 in late 2025 was not on my bingo card.


2025-12-10-06-47-39

Despite all my sarcastic comments about vibecoders and whatnot, I’m not strictly against genAI as a whole. I’m primarily against cloud-based genAI owned by big tech.

As I already put somewhere in the “parallel reality” behind the signup-wall:

You either use the models or you don’t.
If you do, you either run them yourself or you don’t.
If you do run them yourself, you own them.
If you don’t, they own you.

The thing is, most models aren’t that feasible to run locally, that is, if you don’t want to become an NVidia slave and burn extra kilowatts before you even decide it’s useful for you. That’s why the largest one I actually run on my main Thinkpad is a 30B-A3B MoE. What I’m really looking for is something A1B MoE and various sub-1B models, which also keep getting better and better. This is the true path to accessibility: something that can easily run on 4GB RAM without a dedicated GPU. This is what the technology itself should focus on. Everything else about genAI now is a large-scale corporate scam.

And the employer wants me to use Cursor + Claude on a daily basis. Just because “it will increase productivity”. I can’t stress enough how much I want them to fuck off with such delusional demands.


2025-12-09-20-48-23

Mainstream disguised as counterculture.

Conformity disguised as resistance.

Consumption disguised as creation.

Hypocrisy disguised as tolerance.

Blandness disguised as modernity.

Idiocracy disguised as diversity.

Slavery disguised as freedom.

Lies disguised as undebatable truth.

Is this the cyberspace you really want?


2025-12-09-17-35-11

Hmm, I wonder what prevents me from cloning itty bitty, hosting it on my own server and removing that stupid logo when iframing HTML stuff.

I think I’ll do it. Feeling like a CORSair at this point.

But first, I need to come up with a normal Neocities uploader capable of handling multiple accs at a time.


2025-12-09-05-02-31

HTML framesets are underrated.

IDGAF they are marked as deprecated (a lot of things are). They are still supported everywhere and are the most native things ever to embed several equally important pages into one.

Worth playing around with them on my experimental Neocities page.


2025-12-08-17-34-45

Meanwhile, the parallel reality introduced “guilds”. As if this is capable of saving the situation there somehow.

Gotta love this desire for reinventing the bicycle without fixing the fundamentals first.

Webrings >>>>>>> guilds. For sure.


2025-12-08-17-18-08

I don’t understand some ringmasters though.

In some webrings, you need to create a pull request to their Git repo in order to apply.

The thing is, such repos are always hosted on GitHub (as if no other Git hosting exists). So, you need to have a GitHub account first. So, you need to submit your personal data to M$ before you can even manifest your presence on the indie Web. Looks extremely absurd, doesn’t it?

Well, that’s because it is. Same, but to a bit lesser extent, goes about applying for a webring membership through Google Forms. Yeah, I’ve seen that too today.

Just stop this please. Make the process automatic or semi-automatic. Don’t require or assume having big tech accounts by people whose entire (or main) point of personal website creation is running away from big tech.


2025-12-08-16-37-01

Continuing the webring topic. This webring list might be a bit incomplete but includes all major ones, while showing the current situation with them.

Most are manually approved but some are automatic. I found Hotline and Retronaut webrings the easiest ones to get started with. They also are quite fun to browse around.

The null webring also works but it’s JS-only and limited to Neocities.


2025-12-08-13-36-12

Oh, Neocities also has an API. Which, on one hand, might seem pretty limited but, on the other hand, allows you to make your own site management tools in any language you want.

Browsing through Neocities and webrings seems a whole other experience. Looks like a lot of good people are there but the bad ones are just better united.


2025-12-08-12-16-13

“Okay”, you might ask, “but how in the world can indie Web creations be discovered by other such creators and usual people if they are not promoted on big media and drown beneath a heap of useless search engine results?”

Good question, and I think there is an answer to that: webrings.

In the old day, it was considered a good practice to leave some links to thematically close websites in the footer, in the last section of the page body or even on a dedicated HTML page. A bit later on, such links transformed into small banners, sometimes animated. Having a wall of such banners was a special topic of bragging. But what to do if you don’t know whose links to put into your footer or just building your organic network of connections too slowly? Here’s where webrings come to help. You give some info about your page to the ringmaster and put the ring’s links into your page. If the page gets approved, it can be visited from any other page in the ring (by pressing on the “next”/“previous”/“random” links, depending on which mechanism is supported), as well as seen in the overall ring’s page directory. This allows for self-sustainable interconnection without having to rely on mainstream search engines or other corporate “sources of truth”.

Of course, there are some issues with webrings being isolated from one another, but a lot of indie websites often apply to several rings at once, so, in theory, one can navigate from one webring to another by just jumping around the sites. And, of course, good old direct linking never hurt anyone.

I think I might join some too. Just in case, to be prepared when the bubble finally pops.


2025-12-08-09-58-35

Ok, I checked whether you can create multiple Neocities sites with the same email.

No, with a free account, you can’t. If, however, your email provider supports plus-aliases (making name+somestuff@provider.org point to the same inbox as name@provider.org), then nothing prevents you from using the same real email with different plus-aliases to create several free websites on Neocities.

I think that’s fair enough. Again, the website subdomain name is the one you use for login, email is just for signup purposes. So, I can live with that.


2025-12-08-07-27-41

Neocities turns out to be an even nicer place than I initially thought. There are some “social” features (like ability to “follow” each other’s sites) but they are so non-invasive that it doesn’t matter. It also has a nice CLI utility for website management, written in Ruby (which I don’t mind at this point). There’s only one thing left to test: since your handle ([handle].neocities.org) is primary and email is just for verification, can several websites be registered with a single email? I couldn’t find any confirmation or disproval about that, so there’s only one way to find out.

Meanwhile, the “parallel reality” keeps getting more bizarre and further away from the initial spirit of the project. As I predicted, it just keeps becoming a reskin of mainstream social media with the same kind of people pervasively occupying the space. Never, never in my 20-year Internet presence could I feel so much hypocrisy in one place, mostly practiced by those who blame others for putting out divisive posts.

Speaking of 20 years… Yes, 2005 was the year I finally got some internet access. I could browse the Web that was mostly not infested with bloat, corporate egos and SJW agendas yet. Freedom of speech was mostly unaffected back then. We already needed HTTPS to protect from our own ISPs (and saying too much on a local ISP forum was a no-no, I found that out the hard way), but felt rather safe otherwise. No one would get offended if anyone called a lamer a lamer, for instance. People in general had a greater sense of humor and healthier self-esteem, as it looks like.

Nowadays, “social media” is unbearable because all of that has been mutilated long ago. You can make text-only (or text-first) portals as much as you like but that won’t work because you can’t import 2005s people with that free-thinking mindset straight into today. I managed to preserve that mindset through all of the troubles in my life, but most folks gave in. And they raised other folks who don’t even know what it’s like to think outside the agenda. That’s why “social media” is doomed. Only individual (but interlinked) web pages and standalone blogs can truly revive the spirit.


2025-12-07-20-38-43

If you thought I could get away with data: URIs, then no, they are blocked via their CSP as well.


2025-12-07-19-38-48

For some reason, I have decided to create a Neocities account myself. Honestly don’t regret it. It’s an interesting case study. Especially intresting is the fact that it disallows CORS requests via CSP for free accounts. Of course, there’s a way to bypass that using another, no less interesting “ephemeral” hosting called itty bitty. You just create the long URL of the web page you need to enable CORS for, e.g. using this alias for ibs command:

alias ibs='ibsf(){ cat $* | lzma -9 | base64 -w0 | xargs -0 printf "https://itty.bitty.site/#/%s\n"; }; ibsf'  
Then, you just embed this page into the main “restricted” page using an iframe:

<iframe src="https://itty.bitty.site/#/(long hash of your page)" width=800 height=480></iframe>  
And that’s pretty much it. Of course, to render the embed correctly, you also need to keep in mind the styles itty bitty alters by itself. In particular, it changes the following CSS properties for the body element: margin, padding, max-width, line-height, word-wrap, color, background-color. So, you might want to adjust some or all of them within the HTML document you encode for itty bitty.

I honestly miss the time when such tinkering was the essence of the art of Web development. Neocities even managed to remind me of this time in such an unusual way.


2025-12-07-14-03-41

Look. I don’t see any problem with web applications per se. Most of the time, they work fine and solve a lot of tasks that would otherwise be solved in a trojan-first and/or Faildows-only way. At least a modern browser gives you a cross-platform sandbox to run the same code everywhere, and that’s a good thing that’s hard to not agree with.

What I definitely don’t agree with is constant shovage of web app functionality into places that never needed it. I remember the times when you could use Web forums and entire portals without JS, let alone view someone’s blog feed. Nowadays, you often can’t view a fucking landing page without JS and WebGL. Even if the owner doesn’t use JS, you will be turned away by Cloudflare, Fastly or other shitty gateway that requires you to turn it on… just because. Lynx? Links2? Elinks? Dillo+? W3M? Offpunk? Netsurf? Fuck off then, we only serve normies. Remember when some pages refused to display the contents if you didn’t have ActiveX or Flash plugin enabled? Well, now the Web standards are mostly adhered to, but somehow the situation is ten times worse if you think about it.

This “everything is an app” paradigm is the way to long-term failure. Not everything on the Web has to be an app. HTTP stands for “hypertext transfer protocol”, and HTML stands for “hypertext markup language”. The keyword here is hypertext, and that’s more than enough for plenty of use cases, which is something lazy app-cash-grabbers don’t seem to understand with their reacts, nextjses and other tailwinds. They don’t know proper Web development techniques, haven’t adopted any Web design culture, yet still think they can produce something opposite to mainstream while using the same mainstream approach. Still, I don’t think there’s any malicious intent hidden in their minds, just basic tech illiteracy combined with desire to “conquer the world” and attract gullible investors as quickly as possible.

What can we do to combat this on the Web itself, without moving away to Gopher/Nex/Gemini? Boycott every “non-app” webpage, forum or social portal that doesn’t display in Netsurf or other non-JS browsers. Learn the actual HTML and some CSS and create your own, really independent Web content that doesn’t suffer from this bloat. Link to each other’s lightweight pages. Fully understand the markup you write. Embrace the power of plain hypertext as opposed to application-centric logic.

If you need a place to start creating before leveling up to self-hosting, I think Neocities and Surge are both good starting points. The former is the place one can spend hours clicking on various sites that keep the spirit of truly independent Web alive. The latter is for those only interested in bare functionality that allows you to get up and running as quickly as possible (if you’re fine with installing a NodeJS package, that is). If, on the other hand, you think you’re ready for self-hosting, I’ll write about my approach to that a bit later.

And so, we don’t give up. And we will return.


2025-12-07-12-48-26

TIL that you don’t even have to unzip the .wsz skins for Audacious to work with them.

Just move the skin file itself to ~/.local/share/audacious/Skins and everything will be fine.

Of course you have to mkdir -p this directory if it doesn’t exist yet.


2025-12-07-12-11-45

To have some fun:

  1. Install Audacious and switch to the Winamp Classic interface in the settings menu (Ctrl+P).
  2. Go to e.g. this site and download some .wsz skins.
  3. Save this shell script and use it to install skins:

#!/bin/sh  
# Install Winamp skins for Audacious  
SKINDIR=${HOME}/.local/share/audacious/Skins  
SKINNAME="$(basename -s.wsz $1)"  
mkdir -p $SKINDIR  
unzip $1 -d "${SKINDIR}/${SKINNAME}"  
echo "Skin $SKINNAME installed!"  
4. Select the installed skins in the Audacious settings menu.


2025-12-07-11-27-31

Oh to be 13 again, chatting with friends on msn messenger over dial-up and listening to linkin park in winamp

I think this luser made a couple of typos about Gaim and XMMS.

The modern equivalents would be Pidgin and Audacious, of course. Although I personally never considered either of these UIs something outstanding. Maybe gonna rediscover Audacious for nostalgia sake, but I’m just fine with mpg123 and mpv.


2025-12-07-11-07-26

Having rlwrap and ed on a remote host greatly helps with quick edits of a single file via SSH.


2025-12-07-11-02-13

Don’t hate the jargon. It’s not some secret knowledge.


2025-12-07-10-30-11

Ok, here are some great music sets for you to yt-dlp -t mp3:

To be continued…


2025-12-07-08-07-03

Not sure how ethical it would be to leave YT music links here.

On one hand, the URLs can be fed into yt-dlp -t mp3 for free downloading.

On the other hand, this still increases your engagement with commercial platforms.

On the third :) hand, I don’t have enough exposed storage in a place secure enough to provide direct DL links, and torrenting might be problematic for some. It wouldn’t be problematic if they were encrypted, but the idea is to add them ad hoc, and encrypting every individual file can be tedious.

So, for now, I think I’m going to settle on the links from YT and other non-mandatory-signup sources along with specifying full track names. It’s up to you to download them with yt-dlp or any other sources you see fit.


2025-12-07-07-41-28

Meanwhile, in the “parallel reality”:

I reckon something went wrong there from the very beginning. Well, at least there’s some visual style to borrow, especially with the warm, lynx-colored text.


2025-12-07-07-20-44

The CMS now looks like this:

#!/bin/sh  
# vars  
scriptdir="$(dirname "$(realpath "$0")")"  
postfile="${scriptdir}/posts"  
tmpfile="$(mktemp)"  
# the vars file must define BLOG_HOST, BLOG_CONTENT_DIR and BLOG_BACKUP  
. "${scriptdir}/vars"  
target="${BLOG_HOST}:${BLOG_CONTENT_DIR}"  
backup="${BLOG_HOST}:${BLOG_BACKUP}"  
# fetch the backup  
echo "Fetching the post backup..."  
rsync $backup $postfile  
if [ "$1" != "upd" ]; then # prepare the post  
  echo "Preparing the post..."  
  dt="$(date -Is -u | cut -d + -f 1| tr ':T' -)"  
  printf '<span class=dim id="%s">[%s](#%s)</span>\n\n' "$dt" "$dt" "$dt" > $tmpfile  
  cat >> $tmpfile  
  printf '\n%s\n' '*****' >> $tmpfile  
  cat $postfile >> $tmpfile  
  mv $tmpfile $postfile  
fi  
# compile and cleanup  
echo "Compiling..."  
markdown -5 -G -f links,image,pants,html,ext,fencedcode,strikethrough $postfile > $tmpfile  
cat ${scriptdir}/start.html $tmpfile ${scriptdir}/end.html > ${scriptdir}/index.html  
rm -f $tmpfile  
# send it  
echo "Sending..."  
rsync ${scriptdir}/lynx128.png ${target}/  
rsync ${scriptdir}/index.html ${target}/  
rsync $postfile $backup  
ssh $BLOG_HOST 'docker restart lynx-server'  
echo "Done"  
The markdown command here is provided by the discount package.

If there are any further changes to this script, they are gonna be very minor.


2025-12-07-06-53-12

Don’t get me wrong, I like pandoc, it’s just an overkill for this particular task.


2025-12-06-23-15-14

Looks like transitioning from pandoc to discount went smoothly. Less bloat, more compatibility.


2025-12-06-22-32-12

Testing another Markdown filter. Things may break.


2025-12-06-13-55-33

Speaking of .vimrc, mine is now just 20 lines long:

syntax off  
filetype indent off  
set encoding=utf-8  
set backspace=indent,eol,start  
set autoindent  
set copyindent  
set noswapfile  
set nobackup  
set tabstop=2  
set shiftwidth=2  
set softtabstop=2  
set expandtab  
set wrap  
set ignorecase  
set ruler  
set magic  
set scrolloff=4  
set smartindent  
set shiftround  
set shortmess=I  
Minimal and efficient.


2025-12-06-13-50-34

Hmm, I noticed that if you open bare Vim then it no longer displays the Uganda related message all the time. Only sometimes.

Anyway, will probably add set shortmess=I into all of my .vimrc instances.


2025-12-06-13-27-12

Played around with Q4OS (TDE edition) on A1370. Looks very promising.

This is the first distro so far that offered me to adjust the display scaling from the start, also providing a virtual ruler for the user to match it with a physical one.

Other than that, it’s a Debian Trixie with some heavy ricing and UX optimizations.

The 32-bit version is still based upon Debian Bookworm simply because there won’t be any 32-bit Trixie anymore. Yet the Q4OS team vows to provide updates to the previous release until June 2028. Impressive.

I don’t like x86 as a whole but I think ditching its 32-bit support is a huge L for Debian project. No wonder since rust-a-mans and leftists started taking over it as well.

In a few years, there will be fewer distros that I can run on my nc2400 and still get fresh software versions. Oh well, I hope to DIY everything to reach a sustainable level then.


2025-12-06-09-22-26

Decided to experiment on the Air first. The nc2400 still needs battery replacement.

From the live+install image, Q4OS definitely looks and feels like a distro for the normies. Well, TDE tries to look like current KDE, even with the same standard theme but without all of the bloat.

Not sure why the installation takes so long though. Maybe my thumbdrive I use to install OSes from is just that old.


2025-12-06-08-42-33

Glad for @cyberpilate to finally find a nice LTS distro for his Vaio P.

Maybe will give Q4OS a try on my old MBA or even nc2400 and see what this TDE is all about.

Because Crunchbang++ is boring.


2025-12-06-08-22-56

Chromium on the deck (recent Raspbian) started living its own life, scrolling around the page. I said “enough is enough” and installed LibreWolf here:

sudo apt update && sudo apt install extrepo -y  
sudo extrepo enable librewolf  
sudo apt update && sudo apt install librewolf -y  
Now everything looks stable and quiet.
Although I only need a non-text browser for certain types of content.


2025-12-06-07-31-49

If IMEI modification is explicitly illegal in your jurisdiction, then your jurisdiction sucks ass and deserves a revolution.


2025-12-06-07-08-41

How to know whether a piece of software is written in Rust?

Simple: its author will tell you about it before anything else. Before telling what this software is doing or how it’s better than any existing one for the same purpose or how to use it.

Look at GitHub (not encouraging you to use it, far from it), Codeberg or any other public repository platform and search for the phrase “written in Rust”. Thousands of results. Over 34K on GitHub and about 540 on Codeberg (which already implies which hosting is better, but still). People put this phrase into the project’s description as if this is the main merit of the project (or maybe their own). I used to put the language into the descriptions of some of my early projects but stopped doing so long ago. And advise everyone to stop doing so, regardless of the languages used (unless it’s some exotics like TI-74 BASIC, VTL-2, Brainfuck or Intercom 1000). Why?

First, this is plain useless. All of those platforms now show which (mainstream) languages the project uses in the project’s sidebar. If it’s written in Rust, everyone will see that anyway, even without looking at the files.

Second, end users mostly don’t care what the project is written in, at least as long as it builds and works correctly. They don’t even look at the languages in the sidebar. Most of them don’t look anywhere beyond the readme. And that’s totally normal. On the other hand, I’m not “most users” and I can use the phrase “written in Rust” to filter out potential crap without even having to try it out. For the record, good Rust projects (like ripgrep) never use this phrase in their project descriptions.

Third, and this is most important, such phrases are solid indicators of the authors' insecurity. They show that the authors don’t know how else to justify their NIH syndrome besides putting the language as a distinct feature. In almost 100% cases, this phrase shows two things: 1) that such software already exists and the author brings nothing new to the scene, 2) that the author thinks of Rust as of a panacea that will solve every possible problem with security, stability etc. Which is obviously not the case (see the recent sudo-rs and Cloudflare outages when they rewrote their core to Rust). These two points are enough to filter out such projects without even trying.

Again, even having to highlight issues like this shows that Rust has turned into something very unhealthy. Like, you know… cancer.

P.S. This post is written in Markdown. Do I make a big deal of it?


2025-12-05-16-10-58

Here’s more of a final version of my CMS (with host and directory names redacted):

#!/bin/sh  
# vars  
scriptdir="$(dirname "$(realpath "$0")")"  
postfile="${scriptdir}/posts"  
tmpfile="$(mktemp)"  
targethost="..."  
target="${targethost}:..."  
backup="${targethost}:..."  
# fetch the backup  
echo "Fetching the post backup..."  
rsync $backup $postfile  
if [ "$1" != "upd" ]; then # prepare the post  
  echo "Preparing the post..."  
  dt="$(date -Is -u | cut -d + -f 1| tr ':T' -)"  
  printf '<span class=dim id="%s">[%s](#%s)</span>\n\n' "$dt" "$dt" "$dt" > $tmpfile  
  cat >> $tmpfile  
  printf '\n%s\n' '*****' >> $tmpfile  
  cat $postfile >> $tmpfile  
  mv $tmpfile $postfile  
fi  
# compile and cleanup  
echo "Compiling..."  
pandoc -f markdown -t html5 -o $tmpfile $postfile  
cat ${scriptdir}/start.html $tmpfile ${scriptdir}/end.html > ${scriptdir}/index.html  
rm -f $tmpfile  
# send it  
echo "Sending..."  
rsync ${scriptdir}/lynx128.png ${target}/  
rsync ${scriptdir}/index.html ${target}/  
rsync $postfile $backup  
ssh $targethost 'docker restart lynx-server'  
echo "Done"  


2025-12-05-16-06-29

I think even moving the symlink to .local/bin should work fine.


2025-12-05-16-03-06

Attempt at a raw live posting, no editor whatsoever. The script still should work fine when I end this sentence with ^D.


2025-12-05-15-56-04

Posting from the deck some symlinks later…


2025-12-05-15-27-15

Imagine signing up in a place that poses to be the opposite of big, commercialized Web, “striving to bring back the spirit of Web 1.0”, designed in a cyberpunk asethetics, emphasizing on usage of no AI, algorithms, tracking or other modern scum, distancing itself from “the cyber malls of the corpos”. The place looks nice and promising a great hacker vibe at the first glance.

But then, you open the feed. And get instantly bombarded with words like… Windows. Iphone. Spotify. Apple Music. Rust. C#.

“Lolwut? Where am I really?”

And then you read the FAQ.

Images aren’t loading? They need a WebGL shader component to render. Enable WebGL in your browser settings.

Stack? Nuxt frontend. Firebase backend. Vercel hosting. Your email and password are safe and encrypted using Firebase Auth.

And then you open the CSS styles. Tailwind over the top.

And the site doesn’t even display in Dillo Plus because its “Vercel security check” requires JS. Even with JS, the auth doesn’t work on some Android browsers.

And then, the more you read the feed, the more you realize all of it is a fucking charade.

No real hackers there. No believers in the cause. Not a single person who knows what it’s really like to live in a dystopia (which I’ve been trapped in for the last 4 years btw). Just average lusers with their first-world problems, not having a slightest clue what they are doing, hipsters who think they are somehow different (by going all-in form over function) and aggressive commies who call to silence and cancel anyone who doesn’t agree with their doctrine of conformity.

It’s just another fad. Just another pseudo-underground to steal your attention from what really matters.

I created this microblog to not be lured into such places ever again.

And you, you, whoever stumbles upon it, can read it with any Web browser imaginable with HTTPS support. Even lynx. And it’s going to stay that way.


2025-12-05-13-55-00

This even displays nicely in the Offpunk browser. The footer is cut out for some reason though. Maybe because it’s semantically meaningless.


2025-12-05-13-37-41

Some shell aliases I use

alias ab='abduco'  
alias aba='abduco -A'  
alias aliases='vim $HOME/.aliases && . $HOME/.aliases'  
alias doas='sudo'  
alias edr='ef() { ssh "$1" rlwrap ed -p: "$2"; }; ef'  
alias ee='rlwrap ed -p:'  
alias eer='doas rlwrap ed -p:'  
alias fbstream='stream --vo=drm'  
alias grep='grep --color=auto'  
alias ibs='ibsf(){ cat $* | lzma -9 | base64 -w0 | xargs -0 printf "https://itty.bitty.site/#/%s\n"; }; ibsf'  
alias l='ls -lahF'  
alias musgrab='yt-dlp -t mp3'  
alias n='echo -e "$(date -Im)\t$*" >> ~/n'  
alias nixclean='sudo nix-collect-garbage -d && sudo nixos-rebuild switch'  
alias nixupgrade='sudo nixos-rebuild switch --upgrade'  
alias r13='r13(){ echo "$*" | tr "A-Za-z" "N-ZA-Mn-za-m"; }; r13'  
alias radio='mpv --vid=no --sid=no --ytdl-format=bestaudio/best'  
alias reload-aliases='. $HOME/.aliases'  
alias rootsh='sudo $SHELL'  
alias stream='mpv --ytdl-format="bestvideo[height<=?768][vcodec!=vp9]+bestaudio/best"'  
alias toraria='torsocks aria2c --async-dns=false -x 16 -j 16'  
alias tornew='echo -e "AUTHENTICATE \"\"\r\nsignal NEWNYM\r\nQUIT" | nc 127.0.0.1 9051'  
alias websrv='python3 -m http.server'  


2025-12-05-12-18-34

To prevent OpenSSH from treating you like a toddler with those quantum scarecrow warnings, just append WarnWeakCrypto no to your ~/.ssh/config file under the Host * section.


2025-12-05-12-10-30

Oh, and every post’s date line actually is a permalink.

What if everyone, instead of using a locked down social platform, created their own web pages with their own unique content, linking to each other’s posts on different sites? Crazy, huh?

Oh well, I guess it’s much easier to sit inside a walled garden and still call yourself “indie web”. Disgusting.


2025-12-05-12-04-47

Wanna see my CMS for this?

#!/bin/sh  
# vars  
scriptdir="$(dirname "$0")"  
postfile="${scriptdir}/posts"  
tmpfile="$(mktemp)"  
targethost="..."  
target="${targethost}:..."  
if [ "$1" != "upd" ]; then # prepare the post  
  dt="$(date -Is -u | cut -d + -f 1| tr ':T' -)"  
  printf '<span class=dim id="%s">[%s](#%s)</span>\n\n' "$dt" "$dt" "$dt" > $tmpfile  
  cat >> $tmpfile  
  printf '\n%s\n' '*****' >> $tmpfile  
  cat $postfile >> $tmpfile  
  mv $tmpfile $postfile  
fi  
# compile and cleanup  
pandoc -f markdown -t html5 -o $tmpfile $postfile  
cat ${scriptdir}/start.html $tmpfile ${scriptdir}/end.html > ${scriptdir}/index.html  
rm -f $tmpfile  
# send it  
rsync ${scriptdir}/lynx128.png ${target}/  
rsync ${scriptdir}/index.html ${target}/  
ssh $targethost 'docker restart lynx-server'  
And I post everything directly from a Vim buffer via :w !./post.sh.

Keep it simple, stupid.


2025-12-05-11-58-33

Hellorld!

Starting this new microblog for the reasons I’ll explain a bit later. Still in testing phase.

Main features: no JS, no tailwind, no cookies. Just content.