home tags events about login

continue rss

mail: continue@to.any-key.press
pgp public key: https://honk.any-key.press/d/3K2g15qPqYR63ng8mm.txt

=> gemini://any-key.press 
=> https://got.any-key.press

Вечно под луной
Тесно под рубахой

continue bonked 25 Jul 2025 22:09 +0200
original: opennet@honk.any-key.press

Каталог PyPI убрал блокировку регистрации с email-адресов inbox.ru

Администраторы репозитория Python-пакетов PyPI (Python Package Index) сняли блокировку, после того как выяснилось, что 1500 проектов были созданы не злоумышленниками, а командой, занимающейся обеспечением безопасности в компании VK, которой принадлежит домен inbox.ru. Целью была заявлена деятельность по предотвращению потенциальных атак на внешние библиотеки, используемые в VK. Представители VK извинились и заверили, что больше не будут подобным образом регистрировать проекты для выявления и предотвращения атак.

Напомним, что на прошлой неделе в PyPI было заблокировано использование почтовых адресов @inbox.ru при создании новых проектов из-за регистрации более 1500 проектов, которые предположительно могли использоваться для атак на пользователей, следующих рекомендациям чат-ботов или ошибающихся при написании названий пакетов. В проектах использовались имена несуществующих библиотек, ошибочно рекомендуемых большими языковыми моделями (слопсквоттинг) или похожих на названия популярных проектов.

Источник: https://www.opennet.ru/opennews/art.shtml?num=63628

continue honked 24 Jul 2025 15:36 +0200

Вот есть проект sqlalchemy. Люди стараются, пишут абстракции, что бы работать с SQL, как с объектами. Со стороны выглядит красиво.

Но начинаешь использовать банальные варианты: sqlite для локальных тестов, postgresql для реального сервера. Казалось бы: весь код написан на абстрактных объектах и мы просто поменяет URI базы данных и... нет, оказывается это так не работает:

  • работа с датой/временем - разные функции
  • хочешь ON CONFLICT при вставке - разные реализации в разных диалектах
  • хочешь нормальное JSON поле - не забудь сделать код, который использует тип JSONB для postgresql

И так далее. Думаешь: ОК, наверное я просто что-то не понимаю в современной библиотеке...
Ага, вот как раз под руку попалась реализация хранилища объектов в БД на основе sqlalchemy в библиотеке adk от гугла. И весь тот же самый закат солнца вручную:

$ grep dialect google/adk/sessions/database_session_service.py | grep '"'
    if dialect.name == "postgresql":
    if dialect.name == "mysql":
      if dialect.name == "postgresql":
      if dialect.name == "postgresql":
    if dialect.name == "mysql":
    if self._dialect_name == "sqlite":

(#worklog #python)

continue bonked 24 Jul 2025 11:23 +0200
original: contrinitiator@honk.any-key.press

«В эпоху якобинской диктатуры одна пьеса была запрещена потому, что реакционно настроенные зрители по непонятным причинам слишком бурно аплодировали сценам, в которых нельзя было обнаружить никаких намёков»

continue bonked 24 Jul 2025 10:07 +0200
original: contrinitiator@honk.any-key.press

«Свободный тиран», 1990

Кукольный мультфильм по сценарию писателя-фантаста Кира Булычёва.

Скромный землянин Корнелий Удалов попадает на планету, представляющую собой большой концлагерь, где все население работает в заключении, и только один тиран находится на свободе…

continue honked 23 Jul 2025 23:08 +0200

Импортозамещение импортозамещением, но минюст публикует список экстремистских материалов (который в формате csv) в виндовой кодировке 1251:

$ curl -s --insecure --user-agent "not cur1" https://minjust.gov.ru/uploaded/files/exportfsm.csv | iconv -f CP1251
#;Материал;Дата включения (указывается с 01.01.2017)
1;"Музыкальный альбом ""Музыка белых"", автор - Музыкальная группа Order, решение вынесено Первомайским районным судом г. Омска от 23.11.2006;";
2;"Книга ""Книга единобожия"", автор - Мухаммад ибн Сулейман ат-Тамими, источник публикации - Некоммерческое партнерство ""Издательский дом ""Бадр"", решение вынесено Савеловским районным судом г. Москвы от 02.04.2004;";

P.S. Да там есть RSS лента, что бы было удобно подписаться и следить за обновлениями! =)

continue bonked 23 Jul 2025 09:53 +0200
original: livefish@mastodon.ml

Меня очень вдохновляет образ скамейки под берёзой

Не знаю, почему именно берёза, но это такая атмосфера... Умел бы рисовать — нарисовал бы

continue bonked 23 Jul 2025 08:59 +0200
original: Linux@mstdn.ca

As a Meta employee, I can honestly tell you what we know, and I do not know how we obtain all of it.

* Your full name
* Your full home address
* Your phone number
* Your e-mail
* Your government ID
* Your consumer report history
* The name of every family member
* The name of every friend
* The name of their family / friends
* Your marital status
* If you are faithful to your partner
* Your work history (all of it)
* Your education history (all of it)
* Your travel history (going back years)
* Your birth gender
* Your gender ID
* Your sexuality
* Your sexual preferences
* How often you're having sex
* Your partner's details (all the above)
* Your political ideology
* Your involvement with any group
* If you protest, we know
* If you're unhappy, we know

The amount of information we collect on you is insane. And we do it all for supposedly marketing and yes, we help the government since they have access to all this too.

So when someone says they want to avoid META or GOOGLE - respect.

continue bonked 22 Jul 2025 12:24 +0200
original: northernkender@kolektiva.social

Читая "Зарю всего" (The Dawn of Everything) Грэбера и Венгроу, наткнулся на цитату из статьи о минойской цивилизации на Крите. Очень, очень точные слова. Мне очень отзывается.

"
Минойская религия и искусства совершенно не заинтересованы в самовоспроизводящемся, жаждущем власти эго. Они прославляют его противоположность: вызванное ритуалом освобождение от индивидуальности и экстаз бытия, одновременно и откровенно эротичный и сакральный (ek-stasis, или «выход за пределы себя»).

Это космос, который одновременно и заботится, и игнорирует человека, который вибрирует неотделимыми друг от друга сексуальными энергиями и духовными прозрениями.
"

В треде ниже английский оригинал.

https://jackdempseywriter.wordpress.com/2011/01/28/cosmos-erotica-the-shapes-of-minoan-desire/

#ДэвидГрэбер #ДэвидВенгроу #Крит #ДжекДемпси

continue bonked 22 Jul 2025 12:13 +0200
original: neauoire@merveilles.town

Our submission for #Catjam is complete! @rek and I set out to make a little platformer game in a #forth-like language. We made it a tough parkour type little game, give it a shot! Try to finish it in less than a minute. If you record yourself doing it in less than 45 seconds, send us a link and we'll put it in the game description

play: https://hundredrabbits.itch.io/polycat
source: https://git.sr.ht/~rabbits/polycat
video: https://www.youtube.com/watch?v=kzH6GchYMNM

A cat climbing onto a box, with a bird standing on top.

continue bonked 22 Jul 2025 12:10 +0200
original: rqm@journal.bsd.cafe

A Self-hosted, BSD-native Gemini Protocol Server Stack

A Self-hosted, BSD-native Gemini Protocol Server Stack

For those who are adventurous enough to explore the non-http corners of the Internet, the Gemini protocol is a delightful experience to use. It has been around a number of years, making the biggest bang around the time when discontent with the web’s general demise started to reach current heights (so maybe around 2022).

My “capsule”, Vigilia, is self-hosted, and has been since its inception. It used to run on a disused Macbook Pro running Fedora Server, under our TV at home, but since […]

For those who are adventurous enough to explore the non-http corners of the Internet, the Gemini protocol is a delightful experience to use. It has been around a number of years, making the biggest bang around the time when discontent with the web’s general demise started to reach current heights (so maybe around 2022).

My “capsule”, Vigilia, is self-hosted, and has been since its inception. It used to run on a disused Macbook Pro running Fedora Server, under our TV at home, but since then I have become much more confident in using OpenBSD. It used to run on a little Python CGI script I wrote, which also started to feel too bloated and complex, with too many bells and whistles that I frankly had no need for. It was time to make a change, so I replaced the old Macbook with a Raspberry Pi, and Fedora with OpenBSD, and then took my time to figure out a new “status quo”.

0. Philosophy

I wished to create a more Unix-minded stack. The more I have been using OpenBSD and Unix systems the more I have been sold on the “everything is a file” philosophy, as well as opting to use internal tools as much as possible rather than reinvent the wheel on my own. That is to say, I’d much rather work with simple scripts and shell commands than write complicated and buggy code.

So with that in mind, here’s the stack that I settled on after a some trial and error:

1. Hardware

I have absolutely no intention to expose our home IP address via DynDNS or similar. However, I like to be in control of my data as much as possible: ideally as little of my data should be hosted on “someone else’s computer”. If I can’t unplug the hard disk and put it in a drawer, I can’t guarantee it’s security from a hack.

So Vigilia is actually two servers. The server with the actual data is at home, in running on a Raspberry Pi 4B. But as a “public front” vigilia runs a reverse-proxying gemini server on a standard VPS over at OpenBSD.amsterdam.

2. Network setup

I will not go into the intricacies of the dual-wan setup in this post I have at home; but to keep things connected to each other I am using Tailscale to tie the servers together in a Virtual LAN. This is incredibly handy because they get to have easy to remember static IP addresses, all over an encrypted channel.

So here’s the rough idea:

  • Vigilia.cc’s DNS records resolve to the OpenBSD.Amsterdam VPS running gmid
  • VPS and home server both run tailscale
  • VPS reverse-proxies incoming gemini connections to home server

3. Gemini server config

Both the VPS and the local server run gmid. It’s a fast and simple gemini server that mirrors OpenBSD’s httpd; which means it is very easy to configure, it is stable and secure. It can run in chrooted environments, and as its own user, so it’s just a Good Thing all over. Most importantly, it can relay and reverse-proxy TCP connections with sni fields intact, which is something for example OpenBSD’s relayd, built primarily for HTTP, does not do.

My gmid config files look something like this:

### REMOTE_SERVER:/etc/gmid.conf#user "_gmid" # running it as its own user to achieve privilege separationchroot "/var/gemini" # and in a chroot so it can't just access random bits of the file systemlog {    syslog # log to /var/log/messages}vigilia_pem = "/etc/ssl/PUBLICKEY.pem"vigilia_key = "/etc/ssl/private/PRIVATEKEY.key"public_ip = "46.23.93.41" # OpenBSD Amsterdam VPS' public addresshomeserver = "100.REDACTED.REDACTED.101" # TailScale IP of the home machine public_port = "1965"homeserver_port = "2965"server "vigilia.cc" {    listen on $public_ip port $public_port    cert $vigilia_pem    key $vigilia_key    proxy {        proxy-v1 # this directive enables some advanced features like forwarding IP Addresses of visitors        verifyname off # I found I need to specify this somehow, maybe because of self-signed certs        sni "vigilia.cc"        relay-to $homeserver $homeserver_port    }} 

This above allows to listen for connections to vigilia.cc:1965 and forward them to HOME_SERVER:2965. So thus the homeserver has the following configuration:

### HOME_SERVER:/etc/gmid.conf#user "_gmid" chroot "/var/gemini" log {    syslog }internal_address = "100.REDACTED.REDACTED.101" # TailScale IP of the home machine internal_port = "2965"# The below are the same certificates that are in use on the VPSvigilia_pem = "/etc/ssl/PUBLICKEY.pem"vigilia_key = "/etc/ssl/private/PRIVATEKEY.key"server "vigilia.cc" {    listen on $internal_address port $internal_port proxy-v1 # add proxy-v1 support for relayed connections    cert $vigilia_pem    key $vigilia_key    log on    location "*" {        auto index on # enables directory listing    }}

4. Getting the files to the Server

Because I am lazy I want to edit files locally and I want them to magically appear on my capsule. So I am using syncthing to copy things over automagically from DESKTOP:~/public_gemini to HOME_SERVER:/var/gemini.

Syncthing runs most reliably as my own user, I found. To do this it is best to follow the documentation for the Syncthing OpenBSD package — but basically it involves starting it via the user’s crontab with the “@reboot” directive. But as it runs as my own user, I need to set the permissions properly. HOME_SERVER:/var/gemini is owned by the _gmid user in the _gmid group so I also added MYUSER on both machines to the same _gmid group, and made sure MYUSER has write access:

#!/bin/sh# HOME_SERVERusermod -G _gmid MUYSERchown -r _gmid /var/geminichmod -r ug=rwx,o=r /var/gemini

Then I set up syncthing on HOME_SERVER. As it is running headless, I needed to access the web interface, which I achieved via SSH tunneling:

$ ssh -L 9999:localhost:8384 HOME_SERVER

This way I could open a browser on DESKTOP and access the server’s Syncthing settings.

So here are the settings:

On the DESKTOP:

  • Syncthing web interface -> Add folder
  • Folder path: ~/public_gemini
  • Folder label: Gemini files (or something)
  • Ignore patterns: “*.sock” (Unix sockets might confuse the poor thing)
  • Sharing: HOME_SERVER
  • Pause syncing for now

On HOME_SERVER:

  • Establish ssh tunnel to HOME_SERVER as described above
  • Open remote Syncthing webinterface on DESKTOP: https://localhost:9999
  • Accept the incoming share request for “Gemini files” from DESKTOP; but point it to /var/gemini
  • Folder path: /var/gemini
  • Folder label Gemini files
  • Advanced: UNTICK “Wach for changes” because OpenBSD doesn’t seem to allow Syncthing to poke around in /var with those various Go modules and you’d just get errors, like I did
  • Check the Ignore patterns — if it didn’t synchronise “*.sock” then specify it manually

On DESKTOP:

  • Unpause syncing

Now any file you write into DESKTOP:~/public_gemini will sync across to HOME_SERVER:/var/gemini. Yay!

6. Setting up automatic static site generation

Now if you are content to maintain your capsule manually, you are done. As I said I am lazy so I want my little “ssg” script, Lumen, to create index pages for each directory for me. Lumen, I promise, will be made available once I tidy it up.

Lumen basically lists all files recursively and generates an index.gmi for each directory. This means that Lumen has to be re-run each time the folder changes. OpenBSD is acquiring some degree of file watching natively.1 However entr already exists in ports.

It took a bit of tweaking but basically here’s the command I ended up using, adapted from one of the examples provided in the entr manpage:

$ while sleep 0.1; do find /var/gemini/vigilia.cc/* | entr -nd python3 /var/gemini/cgi/lumen.py -d /var/gemini/vigilia.cc; done 

What it does is, in a loop it recursively lists all files every 0.1 seconds in /var/gemini/vigilia.cc, and feeds the output to entr. Then entr runs with -n to specify a non-interactive session (in interactive sessions it also responds to e.g. keystrokes and tty changes – so to be safe, I don’t want that); and with -d to specify it should be looking for changes in the parent folder of any changing files. The looping and the -d directive were added because sometimes I ran into issues when a file got deleted: entr just quit because it could not find the removed file in a “stale” file list it was provided on launch. Lumen needs a -d argument as well to specifiy which directory it needs to work on.

7. System config

Because there are a few other servers like “auld.vigilia.cc” also running on the home machine (the configs for wich aren’t reproduced above for brevity’s sake) and because those rely on a number of CGI scripts I have to start them on launch. I ended up using supervisord for these. Supervisor is a cool little daemon for launching things. I could use rc but supervisord allows me to specify a few extra bits more easily, like redirecting output to syslog and other things.

So for HOME_SERVER, here is my supervisord configuration:

#### HOME_SERVER:/etc/supervisord.conf## [... snip ...][program:gmid]command=/usr/local/bin/gmid -f ; the program (relative uses PATH, can take args)process_name=%(program_name)s  ; process_name expr (default %(program_name)s)directory=/var/gemini/         ; directory to cwd to before exec (def no cwd)priority=100                   ; the relative start priority (default 999)autostart=true                 ; start at supervisord start (default: true)startretries=3                 ; max # of serial start failures when starting (default 3)autorestart=true               ; when to restart if exited after running (def: unexpected)killasgroup=true               ; SIGKILL the UNIX process group (def false)stdout_syslog=true             ; send stdout to syslog with process name (default false)stderr_syslog=true             ; send stderr to syslog with process name (default false)[program:lumen-vigilia_cc]command=/bin/ksh -c 'while sleep 0.1; do find /var/gemini/vigilia.cc/* | entr -nd python3 /var/gemini/cgi/lumen.py -d /var/gemini/vigilia.cc; done'process_name=%(program_name)sdirectory=/var/gemini/priority=102autostart=truestartretries=3autorestart=trueuser=MYUSERNAMEstderr_syslog=truestdout_syslog=true

There are other directives that start the CGI scripts for “auld.vigilia.cc” in the config, omitted here.

Note that you can specify “priority” to control in what order you want the scripts to run. I first want the gemini server to run (100); then I want it to run the CGI scripts (101 — left out of the above example); then I want to run the static site generator’s watcher (102). Notice I am telling explicitly it to run /bin/ksh with a command specified in -c; this is because simply feeding it a complex command confuses supervisord, as I discovered.

One nice feature of supervisord is that it can redirect both stderr and stdout to syslog, so any commands and processes supervisord runs will have their output sent to /var/log/messages, neatly tagged and organised.

Conclusion

So there you have it — my Gemini stack from start to finish. It was a really fun experiment to start to use OpenBSD, instead of reinventing the wheel, or relying on some monolithic CGI scripts. You can do quite a lot with just system internals and a few packages.


  1. The watch utility was added to 7.7-current on 2025-05-19; it will make its way into 7.8 hopefully. ↩︎

Adapted from the original article “Vigilia’s New Gemini Stack” published via Gemini at vigilia.cc on 21 July 2025.

(#geminiprotocol #gmid #openbsd #selfhosting #supervisord #syncthing #tailscale #tutorial)

continue bonked 20 Jul 2025 09:00 +0200
original: liilliil@growers.social

Липа Генри (Tilia henryana) - единственный вид липы, который цветёт в конце лета! Липа Генри открыта в 1901 году Эрнестом Уилсоном и названа в честь ирландского ботаника Августина Генри (именно он обнаружил зубчастую липу в Китае в 1888 году). Среднекрупное листопадное дерево с рыхлой, широко-овальной кроной. Высота 9-12-15 м. Листья широко-яйцевидные, заостренные, у основания сердцеобразные. Длина 5-12 см, с очень длинными зубцами аж до 1см по периметру листа. При распускании лист бронзового оттенка, позже – глянцево-зелёный. Осенью окраса листьев ясно-желтая. Цветение самое позднее среди лип – конец июля –август-начало сентября месяцы. Цветки очень ароматные, кремово-белого, желтоватого цвета, собраны в свисающие зонтики длиной 10-15 см.

continue bonked 20 Jul 2025 08:59 +0200
original: ashed@mastodon.ml

Эксплуатируем Remote Code/Input Injection уязвимость в приложении Air Keyboard для iOS

#hacking #ios #airkeyboard #red_team

Air Keyboard позволяет превратить iPhone в беспроводную клавиатуру и мышь. Как оказалось, команда на ввод, отправляемая через TCP‑порт 8888, принимается без какой-либо аутентификации или шифрования. Это позволяет любому юзеру в той же Wi‑Fi сети подключиться и отправить произвольные keystroke-символы, эмулируя действия пользователя.

Эксплуатировать баг проще простого:

- Находим IP жертвы (например, nmap -p 8888 192.168.1.0/24);
- Подключаемся к приложению через WebSocket: ws://IP_жертвы:8888;
- Отправляем команду, например: json {"type":"key", "key":"h"};
- На устройстве печатается «h». Аналогичным образом можно отправить любое слово или даже команды по типу Cmd+R, Cmd+T.

Что смешно, это же приложение на Android запрашивает одноразовый код доступа, так что атака там немного сложнее.

➡️ Подробности по ссылке (https://www.mobile-hacker.com/2025/07/17/remote-input-injection-vulnerability-in-air-keyboard-ios-app-still-unpatched/).

#red_team #iOS

continue bonked 20 Jul 2025 08:57 +0200
original: kidchai@mastodon.ml

Я гуляла по деревянной тропе сквозь болото, мне было восхитительно.

Цветок в виде белого шарика — это цветоголовник Деревянная тропа, утопающая в папоротнике с двух сторон Папоротник крупным планом Деревянная тропа, почти полностью скрытая в болотной траве. На тропе стоит собака