empty: Automation that matters

I’m happy to share that empty, my long-running open source project hosted on SourceForge, has received the Open Source Excellence Award. This recognition is given to a relatively small number of projects that reach notable milestones in downloads and user engagement across more than 500,000 open source projects on the platform.

empty is a lightweight automation utility designed to run interactive console programs under a pseudo-terminal (PTY). In practical terms, it helps automate tasks that traditionally required manual input or heavier tools. Today we call this “automation” and “DevOps plumbing”, although the problem itself was just as real twenty years ago. empty focuses on doing one thing well: enabling reliable, scriptable interaction with interactive command-line tools, without pulling in a large runtime or framework.

One of the project’s strengths has always been portability. Over the years, empty has been ported and used across a wide range of systems, from Linux to various Unix flavors. It has quietly found its way into scripts, build systems, embedded environments, and long-lived infrastructures where simplicity and predictability matter more than trends. It’s even mentioned on Wikipedia in the article for expect-family tools for Shells.

The project has existed for many years, and seeing it still actively downloaded and used is genuinely rewarding. While awards are not the reason open source software gets written, they do serve as a reminder that small, focused tools can remain relevant and useful over time.

Thanks to everyone who has used empty, shared feedback, or relied on it in their automation workflows. And thanks to SourceForge for the recognition.

Empty project page

Посторонним выход

Написал новый текст.
Небольшой. Странный. Про человека, который делает вещи руками и иногда думает лишнее.

Без спойлеров и пояснений.
Если хочется — читайте.
Если не хочется — все равно читайте.

Ссылки на PDF ниже. Остальные форматы текста на GitHub

В круге Синаспейса

“В круге Синаспейса” — сатирическая антиутопическая повесть

Добро пожаловать в яркий, технологичный мир будущего, где корпоративная культура и забота о планете скрывают абсурд и стандартизацию. Это история (~7700 слов) о том, как человек пытается сохранить личность и рассудок среди навязанных правил и иллюзий свободы.

Ниже вы можете прочитать небольшой фрагмент текста и скачать полный PDF-файл.

Фрагмент

Утро. Засыпать в Синаспейсе — сплошное удовольствие, да и просыпаться тоже. Ни всяких, там беспокойных мыслей до, ни гадкого настроения после. Уж не знаю, как это у вас — ведь многое зависит от эмпатического шаблона Синасинка, но у меня от свежих паттернов — лишь ощущение спокойного счастья и уютной невесомости, будто бы как в детстве, купаюсь в теплой ванне.

Впрочем, что это я — вы и так все прекрасно знаете: Синк же подключают всем. Хотя, наверное, бывают исключения — по медицинским показаниям или что-то там еще… Но такие луддиты лично мне ни разу не попадались — разве что где-нибудь в переходных регионах ещё обитают. Простите, но я совершенно не представляю, как люди обходились без Синка раньше и, вообще, каким нужно быть дикарем, чтобы в середине XXI века добровольно загонять себя в пещеры. Отказаться от технологий, открывающих весь мир современных возможностей — ну, ни бред ли!

Скачать полный текст

How to install TS-Warp proxy client on Mac?

Easy. ChatGPT knows how to deal with it!

TS-Warp is a transparent SOCKS5/4, HTTP, and SSH proxy server and client for macOS, Linux, FreeBSD/OpenBSD, and Windows with WSL2. It supports both standard and transparent proxy modes, allowing seamless TCP traffic redirection without modifying applications.

NetBSD 10.x kernel MATH_EMULATION

This is my battle-worn, falling-apart laptop rocking an CPU from the early ’90s. It’s so ancient that it doesn’t even have an FPU (Actually, that’s not true, they just cut-out FPU from i486DX to make CPU cheaper)! Anyway, I’ve always dreamed of running a modern UNIX-like OS on it.

So, I spent some time resurrecting math emulation in the -10.x kernel, and guess what? I did it! But here’s the kicker—the very moment I finished compiling the kernel, ready to test my work, my laptop decided to stop recognizing the Enter key. Just like that. Now, I have no idea if my FPU emulation actually works or not!

So, folks—if anyone out there has an i486SX machine and is willing to give this a spin, I’d really appreciate it!

UPD: 11.03.2025: Significant progress

  1. FPU-emulation code is triggered by the kernel – done
  2. First successful addition operation using FPU instruction: fadd 3.5 + 2.5 for single precision short real – done
  3. All other instructions and formats to be checked and probably fixed.

UPD: 31.03.2025: Results delivered to the user

Today the simple, yet correct, calculation results were successfully delivered to the user!

UPD 2025.04.27:🚀 First Release is Here! 🚀

I’m excited to announce the first release of i486SX_soft_FPU — a software FPU emulator for the classic Intel 486SX CPU, running on NetBSD 10!

This project brings floating-point support back to life for 486SX machines, even though modern NetBSD versions no longer natively support processors without a hardware FPU.
If you’re into retrocomputing, operating system hacking, or just love old-school hardware, check it out!

👉 Project page: https://github.com/mezantrop/i486SX_soft_FPU
Contributions, feedback, and testing are all very welcome!

Let’s keep these vintage machines alive! 🔥🖥️

UPD 2025.05.03: 86Box

Just successfully tested -10.1 with on

TS-Warp-1.5.5 with DPI bypass

Только что добавил в TS-Warp – проки функцию обхода блокировок. Теперь надо протестировать, действительно помогает или нет. TS-Warp работает в macOS, на BSD, Linux и даже под Windows с WSL. Качать тут: https://github.com/mezantrop/ts-warp, feedback слать мне. Репосты, само-собой, приветствуются 🙂#bypassdpi #proxy #youtube

Just added a blocking bypass function to TS-Warp – proxy. Now I need to test whether it really helps or not. TS-Warp works on macOS, BSD, Linux and even on Windows with WSL. Download here: https://github.com/mezantrop/ts-warp, send me feedback. Reposts are, of course, welcome #bypassdpi #proxy #youtube

Reinventing a wheel again: tSQLike

tSQLike is my Python 3 module to work with tabular data using SQL approach with such “primitives” as “select” or “join”. The idea was to make the library small and useful, while for the rest of tasks you can still use Pandas or NumPy.

from tsqlike import tsqlike

t1 = tsqlike.Table(data=[['h1', 'h2', 'h3', 'h4'],
                        ['a', 'b', 'c', 'd'],
                        ['b', 'c', 'd', 'd'],
                        ['f', 'g', 'h', 'i']],
                   name='first')
t2 = tsqlike.Table().import_list_dicts(data=[{'h1': 1, 'h2': 2, 'h3': 3},
                                            {'h1': 'd', 'h2': 'e', 'h3': 'f'}],
                                       name='second')
t3 = t1.join(t2, on='first.h4 == second.h1').select('*').order_by('second.h2', direction=tsqlike.ORDER_BY_DEC)
t3.write_csv(dialect='unix')

"first.h1", "first.h2", "first.h3", "first.h4", "second.h1", "second.h2", "second.h3"
"b", "c", "d", "d", "d", "e", "f"
"a", "b", "c", "d", "d", "e", "f"

Installation is simple as:

pip install tsqlike

Beating eval() slowness in Python

Turned out, eval() function, which evaluates and executes the specified expression, is dramatically slow in Python, as the compilation is done on the fly. Seeking for a way to enhance the performance, I have stumbled at the Stackoverflow discussion which highlights two key methods to speedup the process:

  • compile()
  • lambda()

Experiments with it show, that combination of both methods gives the best results:

Needless to say, my script, which used to take 20 minutes to complete, now ends in 50 seconds.

Just submitted my first bug-report to Apple Feedback Assistant

Let’s see how fast they are 🙂

TS-Warp-1.4.0 is out!

TS-Warp is an open-source transparent proxy server and traffic wrapper. Supports Socks4/5 and HTTP in proxy and transparent modes, runs on Mac, *BSD and Linux. More details and Download on GitHub

ts-warp-1.4.0, gui-warp-1.0.11 (gui-warp-v1.0.18-mac), ns-warp-1.0.7

  • ts-warp: Incompatible to previous versions, CLI options for connections: -T Transparent, -S Socks, -H HTTP
  •   ts-warp: Transparent connections port: 10800, Internal Socks server port: 7080, Internal HTTP server: 8080
  • http.c: Internal HTTP proxy fixes
  • http.c: http_server_request() special buffer for replies
  • gui-warp.app: Create missed leafs of configuration directory tree if they are not exist
  • socks.c: Finish only client processes on Socks errors
  • http.c: http_server_request() reply the same protocol as in the request