My blog

I write mostly about security, mail, web and linux. My contacts are: mail://me@andreybondarenko.com and shaman007 all around Telegram, FB chat, WhatsApp.

Primary use me@andreybondarenko.com and @shaman007:matrix.andreybondarenko.com

Buy me a beer / Автору на пиво:

shaman007@andreybondarenko.com (paypal)
17QxrNyk9BCrP6LGUbqCNnXCzu4oeoYKaH (btc) 0x57500960FBC986225209E597D5B97065A9A10043 (eth)

Links turned out to be useful / не потерявшие актуальности ссылки:

Растаможка автомобиля из России в Чехии
Поиск работы за границей РФ: доступ из вашей страны запрещен и другие важные вещи
Как правильно искать работу
Почему закон о блокировке сайтов в рунете – это очень плохо

Year of linux desktop

Чёт 2026 – год Линукса. Я лет 7 сидел в Windows-11, там с встраиванием линукса, особенно WSL2 стало можно жить. Но последние “удивительные” новшества – fuck this shit, I’m out. А тут за это время все так удобно стало, все работает, все настраивается, даже игори лучше чем в виндусе стали, слава Габену. Еще и кодекс все настраивает, а что нельзя сделать – можно дописать функционал. Поставил модный молодежный Noctalia – за 20 минут взлетело всё, что я хотел 20 лет.

Мак говно, ненавижу. Если что, у меня с 2007 по 2017 год все было Apple, даже роутер, даже часы. И сейчас рабочий ноут, но я на нем сильно усилился внешним монитором и клавиатурой.

Тайловый оконный менеджер + ChatGPT – очень круто. Теоретически я знал, что развесить всякие часто используемые вещи на хоткеи и раскидать детерминированно всегда используемые приложения, прикольно, но это же делать надо. А тут сказал ему – он сделал, результат еще и as a code сохранил, чтобы можно было потом к этому всему вернуться.

Потом еще в венде была классная функция поиска текста в скриншоте. Сказал, хочу так же. Тут оно написало скрипт, который дергается по хоткею, делает скриншот по твоему выбору, ищет текст и копирует его в клипбоард. Удобно! (в виндусе Win+t или Win+Shift+t). А в Маке так можно?

Попросил его: а давай то же самое, но из текущего звукового потока. Он: “Ок, сейчас whisper.cpp скачаю, модельку для английского-русского и все будет”. Надо еще поток с микрофона прикрутить. Так саммари звонков можно будет делать в любом приложении и dictation тоже полностью локально тоже в любом месте.

Hi-End бати: подводные камни

Я всегда тяготел к качественному звуку для музыки, как инженер – без snake oil, как (бывший) коммерческий директор – без переплат. Особенно когда переехал на должность сотрудника техподдеожки, переплаты неприятны. Я хотел слушать музыку в хорошем качестве недорого и побегал по граблям. Этот пост носит информационно-развлекательных характер и призывает так не делать.

Так вот. Что мы считаем хорошим сетапом для прослушивания музыки? Устройства с высоким разделением каналов, хорошим амплитудно-частотным диапазоном (нота ФА не уезжает, если нота ЛЯ выставлена верно), хорошим фазо-частотным диапазоном (низкие и высокие частоты приезжают в наушники и динамики одновременно), хорошим динамическим диапазоном (какой уровень самый тихий и какой самый громкий в вашем устройстве). Гетто-бластер, который был у всех старперов, плох во всем!

Узнали? Согласны? Это отличное устройство для своего времени, денег и задач, много музыки сводилось так, чтобы на нем звучать отлично. Бритни Спирс или любой евроденс на нем звучит именно так как надо, но мы хотим больше.

В начале 2000х альфой и омегой домашнего воспроизведения без соплей девственниц в конденсаторах, без серебряных проводов в розетку, без подствок под ножки, без прогрева гоев и межкомпонентных проводов коричневым шумом была Yamaha AX-590, Natural Sound Amplifier. Годная была так же 4хх серия, просто менее мощная и 3хх, но там была иная компонентная база и над вашей скромной экономией уже посмеивались. Вот мой экземляръ (на фотографии там, где усилитель):

Оно все отличного качества, очень тактильное, очень красивое.

И вам это не надо, об этом пост.

После того как я переехал в Чехию из Москвы, купил там квартиру, сделал некоторый ремонт и т.п. у меня возникла проблема: нет денег совсем. Элементы шикарной жизни хотелось, например, музыку слушать не через встроенный в матплату усилитель для наушников, так что я пошёл смотреть что есть по низу рынка ебей. Как раз тогда маячил брекзит, продавалось очень много всего интересного пока “одна граница” за недорого. 2 мутные фотографии на ебее, 60 что-ли евро за все дела и мне доставили это:

некоторое время, год с чем-то, он работал отлично, если не трогать громкость. Громкость шипела с самого начала немного, потом если приловчиться, потом совсем стала шипеть.

С тех пор я поднялся, закрыл часть ипотеки и на ебее уже нашел Yamaha AX-590 за тоже смешные деньги, хоть и без пультика.

Принято считать, что в винтажных (то есть почти с помойки) усилителях первыми приходят конденсаторы. Вспучиваются. Это на самом деле не проблема, потому что конденсатор такой же характеристики производится капиталистами, вполне вероятно, что такого же форм-фактора.

Где же засада? В первую очередь – схема. Это в нынешних бездушных все как-то раутится электроникой. А в старом вы видите эти классные такие тактильные кнопки и ручки? Через них идет сигнал. Даже через кнопку, которую можно было бы вынести в блок управления даже в 1980 году, но это было дорого. Нет. Там сигнал. А еще реле перегруза (к счастью, они стандартные).

Они все окисляются и срут в конечный сигнал. Они физически ломаются. Можно сколько угодно рассуждать о заложенной разрушаемости, но японцы в Marantz не думали, что их поделка будет неиронично чиниться через 40 лет и использоваться каждый день, там местами это заметно.

Не все механические компоненты равны. Реле перегруза можно выкинуть. Кнопки можно некоторые просто закоротить, например, на Maratnz PM-310 все 3, они в 2026м году для красоты. Селектор входа в целом тоже. Баланс тоже не нужен. Но вот если умерла ручка громкости, то всё. Их просто нет запасных. Ноль. Вы не найдёте ни одной. В мастерской сразу спрашивают про симптомы, если “отрубает сигнал на определенной громкости”, то как бы не был в сохране корпус, это приговор. Мне повезло. Видимо этот экземпляр где-то пылился и был на брекзите продан по panic sale, с мутными фотками на ебее. Я ожидал весьма пожёванный и поцарапанный корпус, а приехал mint condition 1983 года выпуска. Сегодня вымытый, реставрированный и почищенный, он такой:

В Yamaha AX-590 перед продажей что-то помыли изопропиловым спиртом, который продержался пол года. Потом левый канал стал тише. Потом начал шуметь правый канал, потом все стало плохо: стали явными шумы и отлетания перегрузочных реле, которые полностью механические и не были рассчитаны на 20 лет жизни.

После реставрации он звучит как новый и выглядит так:

Здорово, но через каждую кнопку, через каждую крутилку идет настоящий конечный сигнал.

В каждом устройстве каждый механический компонент вносил искажения. Даже самый мелкий, вроде ничего не делающей кнопки.

Экоеномика процессов:

Martantz PM-310: сам – 60 евро (даром), реставрация – 50 евро, перходник его питания на современный формат – неожиданныхе 30 евро. Итого: 140 евро.

Yamaha AX-590: сам – 200 евро, реставрация – 100 евро, пультик – 30 евро. Итого: 330 евро.

Теперь reality check, новая YAMAHA A-S 501 – 540 евро. Без проблем, без поисков ремонтника, на гарантии, без ожидания, доставка завтра.

Новую Yamaha A-S 801 со встроенным DAC поискать, конечно, но так и наши деды со внешним.

Я хотел получить хороший звук дёшево и поэтому покупал старую приличную аудиотехнику. На бумаге идея отличная: схемотехника хорошая, характеристики хорошие, цены смешные. На практике проблема не в «звуке старых усилителей» и не в электролитах. Проблема в десятах механических компонентов в сигнальном тракте, которым 30–40 лет и для которых больше нет запчастей.
Поэтому дешёвый винтаж превращается в покупку, ремонт и поиск мастера, поиск доноров, риск неремонтопригодности.
Внезапно новая Yamaha за 540 евро оказывается не дорогой, а рациональной.

nVidia is fucked

Кстати, если вдуматься, nVidia is fucked. Следите за руками.

– они делали видеокарты для игр.

– игры до какого-то момента выглядели все красивее и нажористее каждую новую игру

– где-то в районе пятого Фаркрая уже не выглядят. Жрать ресурсы как не в себя (привет TOW2) – да, но это другая проблема. Да что там пятый Фаркрай, четвертая Форца, третий Ведьмак, Эдленринг, ГТА-V. Одним графонием уже не заинтересуешь, у всех графоний! Нужен сюжет, нужны механики! Просто вспомните сколько лет Prey!

– ???

– а прирост между поколениями тоже не х2 как раньше, а вовсе даже 30% на черрипикнутых тестах!

– фичи тоже не прямо валом валят, ну вот RTX прикольная штука, да, сколько лет назад вышла?

– цена апгрейда уже не та. За 300 можно только как в шутке про тракториста.

Получается, что любитель игр скорчит рожу, купит 5080 (в конце концов, если у вас машина, там эти 5080 могут отлетать запросто, сносились покрышки и дождь залил электронику). И будет на ней сидеть 10 лет, потому что она мощнее консоли, и 2х следующих некстгенов еще будет.

Раньше вы продавали любителям игр раз в год-два карту за 300-500, теперь карту за 2500 (официально 999, но то официально), меньшему количеству и раз в 10 лет. И делать эту карту стало тоже дороже.

То есть их поворот в сторону продажи карт 5 корпоратам как бы был неизбежен.

И тут тоже есть нюанс: я на 4070ti могу крутить довольно много ворклоадов с достаточной производительностью и достаточным качеством. Лица на фотках поискать, аномалии в логах посмотреть, расставить диакритические знаки вот это всё. nVidia v100 списанная из ДЦ сейчас стоит дешевле грязи, с тем, что деплоится сегодня, через 5-8 лет будет то же самое. Да, на v100 есть нюансы и современные модели не взлетят нормально, так она и подешевела за последний год раза в 3 уже со дна цены.

То есть сегодняшний тяжелый ворклоад через 10 лет можно будет (с оговорками, но. Скажите мне 10 лет назад, что у меня на бюджетном железе сейчас immich может) крутить в домашней лабе чтобы там Сэм Альтман и Дженсен Хуанг не говорили.

Судя потому, что производители памяти не бегут строить заводы роняя тапки, а делают это не спеша, без суеты: аккуратно и с иронией, такая цепочка рассуждений не только у меня.

Мертвые герои: звуковые карты 20 лет назад

DISCLAIMER: это я нашел статью, которую напислал 5 лет назад для Vas3k, с тех пор что0то поменялось.

Умерла моя ДИСКРЕТНАЯ звуковая карта, сегодня я ее починил и
вьетнамские флешбеки догнали меня с вопросом: “почему я вообще
заморачиваюсь на эту тему?” Ведь любому разумному человеку знакомы опыты
с вешалкой и слепые тесты самых дешевых DAC’ов пятнадцатилетней
давности против самых дорогих DAC’ов современности, а ESI Juli@ сейчас
стоит… Да нихрена она не стоит.

Времена, когда компьютеры были большими, я не застал, потому что родители мне не разрешали. Мой первый компьютер я получил на первом курсе, в 1998 году. Это была система, собранная из почти, но не совсем, устаревшего железа (тогда негде было узнать про компонетны, кроме Фидо и магазинов, а в Фидо ты попадал уже с как-то купленным “собранным” компьютером, обычно выяснялось, что тебя наебали в магазине). Родители были против развлекательных функций, но Creative Sound Blaster AWE 64 “Овца” Value нашел-таки свой путь в недра моей пекарни.

Ретроспективно, Sound Blaster был де-факто стандартом звуковых карт для игр, потому что слушать музыку на компьютере никому в голову не приходило. Например, у нас дома для этого существовал (и существует как артефакт эпохи) Marantz 63 SE , который был конечно сильно качественнее уже тогда дешевого CD-привода (нет).

Чем были AWE 32 и 64? Во-первых, они были звуковыми картами на шине ISA 16, которую уже не встретишь в современных компьютерах. Во-вторых, цифры после названия не означали ничего, что бы относилось к качеству прослушиваемого вами материала или количеству каналов звука. Все они были стерео, все они не могли больше 16 бит дискретизации и 44100Гц частоты дискретизации. Цифры – это были аппаратные (вмешался маркетинг и стало не так) MIDI инстументы, которые карта могла прожевать: то есть, теоретически, AWE 32 могла одновременно сэмулировать 32 одновременно используемые клавиши пианино (тут нужно некоторое уточнение: клавиша фортепиано используется не когда нажата тоже, когда она все еще звучит например, при этом дудка всегда будет одноголосной сколько ни было бы дырок на вашем тромбоне).

AWE 64 в свою чередь могла изобразить две рояли на 32 клавиши одновременно: одно аппаратно, одно программно. Сегодня это вообще никому не интересно, но в 90х музыка в играх в основном была в виде MIDI-файлов (чиатай – ноты) + сэмплы, загружаемые в звуковую карту. Из интересного, AWE 32 позволяла использовать стандартные для того времени SIM’ы, а 64 требовала собственный блок расширения памяти, который стоил примерно в 10-100 раз дороже рынка.

Даже нашлись энтузиасты, выпустившие адаптер на SIM’ы, которыми двигало то, что этот блок памяти просто невозможно было купить ни за какие деньги!

Но я отвлекся: мечтал ли битард в 90е о Саунд Бластре?

Нет, не мечтал. Мечтать тогда надо было о Гусе, то есть Gravis Sultrasound. Gravis UltraSound PnP Pro можно было втретить в РФ, чип AMD, их MIDI-синтезатор AMD InterWave хорошо звучал в играх, но главное, что Гусь мог преобразовывать цифровой сигнал в аналоговый и не шипеть, как это делал Sound Blaster. Это было некоторое волшебство того времени: MIDI не шипели нигде, CD не шипели почти, но когда включаешь MP3 через твой любимый WinAMP, SNR давал о себе знать как сейчас не шумят копеечные звуковые карты USB-to-3.5mm.

Еще можно было мечтать о Turtle Beach Pinnacle, но о ней только легенды ходили.

Потом произошло сразу несколько событий с точки зрения технологии воспроизведения звука на компьютере. Во-первых, умерло MIDI в играх и многоголоисие звуковых карт стало ненужно: с одной стороны, полностью программный синтезатор не жрал ресурсов примерно никак и не упирался в размер сэмплов на карте, с другой стороны, уже небыло проблем положить все звуки в саму игру. Во-вторых, PCI (еще не PCI-e) звуковые карты получили качественные дешевые AC97-кодеки с программным микшером. Аналоговый микшер старых ISA-кард ничего не стоил для операционной системы, но он очень сильно шумел, потому что был дешевым для “домашнего применения”. В третьих, каналов стало сильно больше двух, MIDI умерло для этого сценария вообще совсем, кодеки на много каналов с адекватным динамическим диапазоном и АЧХ стали буквально укладываться в 1 доллар. Весь целиком аппаратный пост-процессинг на компьютере тоже не взлетел, потом у что он во-первых почти никому не нужен, во-вторых очень вычислительно дешев. Звуковые интерфейсы стали типичным commodity. Top-tier попытались сохранить свой added value, прифигачивая к картам бесполезные панельки на пятидюймовыйо отсек для флоппи-драйвов (помнитие такие?)

Почему же нужны дискретные звукокарты в том или ином виде в 2021м году? Во-первых, latency, когда у вас комьютер – это микшер для гитары и клавиш. Я не настоящий сварщик, но знакомые музыканты говорят, что им очень важно когда ты нажал на клавишу и когда ты услышал то, что получилось после всех фильтров и эффектов. Во-вторых, latency в играх, потому что для некоторых встраиваемых в матплату интерфейсов он говно. В моем случае, это Realtek HD для которого внезапный случайный лаг в пол секунды без причин – норма жизни. По всем параметрам он хороший, просто иногда звук пропадает, ничего страшного!

Я здесь пропускаю весьма быстрый расцвет и закат дешевых и качественных PCI AC97 Windows-only звукокарт: Yamaha разных наименований и цены отличающиеся только драйвером, Turtle Beach Vortex 2, Pinnacle уже отдельно от Turtle Beach…

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

My personal price to buck (для дома) в 2000м и сегодня

Mastodon bookmarks media downloads.

Problem: if you’re hosting your own Mastodon instance and subscribe to some feed with images, your instance footprint would grow like hell. You can purge ‘old media,’ but that’ll ruin your bookmarks. This snippet will get all your media from bookmarks.

Generate a list of S3 URLs for media attached to bookmarked statuses. Output: export/bookmarked_media_s3_urls.txt

# script/list_bookmarked_media_s3.rb
#
# Generate list of S3 URLs for media attached to bookmarked statuses.
# Output: export/bookmarked_media_s3_urls.txt

require "fileutils"
require "uri"

S3_HOST   = "https://s3.andreybondarenko.com"
S3_BUCKET = "mastodon" # path-style bucket

EXPORT_DIR  = Rails.root.join("export")
OUTPUT_PATH = EXPORT_DIR.join("bookmarked_media_s3_urls.txt")

FileUtils.mkdir_p(EXPORT_DIR)

puts "Writing S3 URL list to: #{OUTPUT_PATH}"

File.open(OUTPUT_PATH, "w") do |out|
  Bookmark.includes(status: :media_attachments).find_each do |bookmark|
    status = bookmark.status
    next unless status

    status.media_attachments.each do |media|
      begin
        uploader = media.file if media.respond_to?(:file)
        next unless uploader

        key = nil

        # 1) Try file.path (often S3 key or local path)
        if uploader.respond_to?(:path) && uploader.path.present?
          path = uploader.path.to_s

          # If this is a local path with /system/ in it, strip everything up to /system/
          if path.include?("/system/")
            key = path.split("/system/", 2).last
            key = "system/#{key}"
          else
            # Otherwise assume it's already a key
            key = path.sub(%r{^/}, "")
          end
        end

        # 2) Fallback: parse from file.url if path wasn't usable
        if key.nil? && uploader.respond_to?(:url) && uploader.url.present?
          url = uploader.url.to_s

          if url.start_with?("http")
            uri = URI(url)
            # If path starts with /mastodon/, strip that as bucket prefix
            # /mastodon/system/... -> system/...
            path = uri.path.sub(%r{^/}, "")
            if path.start_with?("#{S3_BUCKET}/")
              key = path.sub(%r{^#{Regexp.escape(S3_BUCKET)}/}, "")
            else
              # If it's already like system/..., accept as key
              key = path
            end
          else
            # relative url like /system/media_attachments/...
            key = url.sub(%r{^/}, "")
          end
        end

        unless key && !key.empty?
          warn "Could not determine key for media #{media.id}, bookmark #{bookmark.id}"
          next
        end

        full_url = "#{S3_HOST}/#{S3_BUCKET}/#{key}"
        out.puts(full_url)
      rescue => e
        warn "Error for bookmark #{bookmark.id}, media #{media.id}: #{e.class} #{e.message}"
      end
    end
  end
end

puts "Done."

Sieve shinannigans

Welp, if you’re using Sieve with the Dovecot (like you should), the client may behave strange, due to Sieve needs some dot-files and they naturally may come in your mailbox/maildir dir. Some clients are aware, some clients not, but the best way is to put dotfiles somewhere else. Like:

  90-sieve: |
    plugin {
      sieve = file:~/sieve;active=/var/mail/sieve/%u/.dovecot.sieve
    }

Otherwise errors/warnings in the logs, like in Mail:app of the Nextcloud.