Трудоголизм и прокрастинация
298 subscribers
602 photos
46 videos
22 files
486 links
Продукт блоговый, идентичный натуральному by @Pozitronik
От создателя "Вестника Апокалипсиса" и всего такого прочего.
Kinda digest: https://t.me/pozitronik_blog/2492
Download Telegram
Сегодня рассказал своим пацанам про фичу PHP, которая для меня стала натуральным открытием. Штука реализована уже довольно давно, но словно попадала в какое-то слепое пятно — я был уверен, что пыха так не умеет принципиально.
Речь о многопоточности. PHP, по историческим причинам, нативно не умеет в условный fork(). В обычных сценариях применения пыхи (принять от веб-сервера параметры, немножко помучаться, выплюнуть результат обработки), это не проблема. Но однажды вам приходит в голову отличная идея начать писать на пыхе всякое разное другое (или параллелить веб-обработчики), и тогда невозможность многопотока приходится обходить разными костылями. Есть, например, Swoole и ReactPHP, которые слишком сложны для освоения среднестатистической похапе-макакой (я не осилил), есть древний pcntl, который тоже сложноват по своей природе, и не будет нормально работать для веб-скриптов. И есть, наконец, pthreads, которое выглядит ну почти норм, но только оно мёртвое. Вот об этом наборе костылей я и знал до вчерашней недели.
Оказывается существует нормальное, работающее решение: parallel. Оно делает запуск параллельного исполнения кода максимально простым, всё, что нужно сделать — запихнуть в parallel\Runtime::run() ваше замыкание, получив фьючерс, в который упадут результаты исполнения. Основной поток же будет исполняться дальше. Расширение также предоставляет инструменты для обмена данными между потоками (блокирующие и неблокирующие каналы + события) и примитивы для реализации мьютексов и семафоров. И это должно работать в php-fpm, архитектурно там ничего не препятствует (но я гонял только в cli).
Из минусов — у расширения крайне скупая документация и мало примеров. Я заготовил репу в которую накидал примеров, показывающих, как работать с parallel\Runtime, parallel\Channel и parallel\Events (как с Sync работать ещё не разобрался, там ноль доки): тыц (собираем контейнер в docker-compose, открываем шелл, composer install, код примеров в /commands, запуск в шелле php yii controllername/actionname, например php yii parallel/example-five).
Как заповедывал Кларк, любая достаточно развитая технология становится неотличима от магии. В том числе — обрастает обрядами, приметами и суевериями.
Вот взять разработку ПО: что уж может быть прогрессивнее и технологичнее? Распределённые базы данных, искусственные интеллекты, виртуальные миры, зубодробительные алгоритмы и нечеловеческие оптимизации... Всё это ведёт к вершине эволюции современного IT, с которой взирает на киберпейзан его Величество Excel.
Но 90% разработки — это, конечно, всякая рутинная скукота, вроде перекладывания джейсонов из одного горшка в другой. Никуда от этого не деться; так однажды нам прилетела очередная подобная задача, что-то куда-то интегрировать. Условия классические: скучная апиха, документация «спроси в слаке», ломающиеся эндпойнты; я даже могу не рассказывать подробности, потому что каждый с таким сталкивался примерно бесконечное количество раз.
Взялся за интеграцию один разработчик, пилил-пилил — уволился. Вовсе не из-за неё, просто так получилось.
Взялся второй, пилил-пилил — уволился. Причины абсолютно левые, честно.
Интеграцию осторожненько, двумя пальцами, как лежалую и начавшую подванивать селёдку, взяли и принесли мне. Я же ведь никуда не денусь, правда ведь? Правда?
Ну и по абсолютно несвязанным с этой, очевидно проклятой, интеграцией, я уволился из билайна. Можно не верить в суеверия, и объяснять всё совпадениями, но я не просто так привёл цитату Кларка в начале.
(Ход был просчитан, ещё в начале года я передал свой разработческий бубен Димону, чтобы тот вручил его достойному занять моё место).

Тут я сначала хотел подбить итоги своего техлидирования, но пришёл к выводу, что понятия не имею, каких результатов добился. Контрольного образца для сравнения у меня, по очевидным причинам, нет. Запрос к пацанам обосрать меня и мою деятельность анонимно остался почти без реакции, из чего я делаю вывод, что и они понятия не имеют, чем я был полезен (правда, и вреда от меня тоже не почувствовали), ну или не хотят задумываться. Действительно, постаравшись выстроить по своему разумению процессы и ввести их в привычку, я не лез под руку без просьбы, стараясь снять с ребят головняки где-то там, в фоне.
Сам я за последний год понял, насколько ограничен в знаниях. Миллион раз в обсуждениях и спорах я узнавал что-то новое, и чувствовал себя отставшим от жизни. Когда-то я ныл, что команда в сборе меня интеллектуально здорово превосходит, а с тех пор она здорово выросла и качественно и количественно. В какой-то момент я совсем уж обессилел пасти это стадо котов, понадеявшись, что проложенной колеи хватит, чтобы разработка катилась хотя бы примерно в нужную сторону. Судя по наблюдениям — так и есть, значит мне можно свалить без вреда для команды.

Сбросив груз ответственности, я планирую предаваться греху праздности, пока не надоест. Месяц, два, полгода — не знаю, но по моему прошлому опыту через какое-то время мне станет скучно, и я опять впишусь в какой-то весёлый треш.
🍌 Поговорим про порнографию.
Как это «не тема канала»? Очень даже: любой просвещённый человек знает и ценит вклад порнографии в развитие науки, техники и человеческого общества. Да если бы не прон, мы до сих пор сидели на модемах с 56,6 kbps, потому что если не прон, то нахрена больше? Да что я говорю — общеизвестно, что The Internet is For Porn. А до этого были видеокассеты: до сих пор идут споры о том, насколько доступность VHS-кассет с порнухой повлияла на победу формата в «войне» с Betamax. Цветная фотография, качественная печать — ну как вы думаете, ради чего это всё было? Вообразите-ка себе какой-нибудь «Плейбой» (или, применительно к российским реалиям, «Спид-Инфо») на серой бумаге с чёрно-белыми изображениями. Да ну нафиг!
Я уверен, что каждый, кому уже за тридцать, без труда вспомнит, на какие хитрости шёл в детстве, чтобы добыть себе немножко запретного прончика. Фап в доинтернетную эпоху был сопряжён с неисчислимым числом трудностей, которые никого не останавливали, и преодоление которых прокачивало навыки скрытности, хитрости и, иногда, торговли (за колоду порнографических карт на чёрном рынке школы можно было выменять бесконечное количество ценностей).
Сейчас же практически любой контент можно получить очень легко, было бы желание (и хороший VPN, если вы находитесь в роскомнадзоренной юрисдикции). Доступность снизила интерес, и вряд ли кто-то готов сейчас фапать на то, на что фапал подростком. И не приплетайте сюда возросшую доступность секса — порнуха это другое, одно другому не мешает.
Но как бы там ни было, желание одних людей смотреть на других голых людей продолжает двигать прогресс. Лет восемь назад стали появляться первые порнодипфейки: ужасного качества ролики, в которых с помощью сложнейших математических расчётов и дорогостоящего вычислительного оборудования лица порноактрис заменялись на чьи-нибудь другие лица. На мой взгляд, никакой эротической ценности те видосы (конечно я посмотрел их все) не несли, скорее они служили демонстрацией тогдашних возможностей нейросетей. Но вот беда: поиграться самому с созданием AI-прона было довольно сложно. Я, например, так тогда и не осилил.
Но годы шли, технологии развивались, датасеты наполнялись, видеокарты ускорялись. Поставить себе локально Stable Diffusion по гайду можно уже с минимальным набором красноглазия, и генерить порно с несуществующими людьми (и даже не людьми). А можно вовсе ничего не ставить — вбейте в гугле «ai generated porn» и обнаружите кучу сервисов, которые бесплатно нагенерируют вам хоть Гермиону Грейнджер, хоть Красную Шапочку. Потому что

НИЧТО НЕ ИСТИННО, ВСЁ ДОЗВОЛЕНО

Продолжаем👇
Трудоголизм и прокрастинация
🍌 Поговорим про порнографию. Как это «не тема канала»? Очень даже: любой просвещённый человек знает и ценит вклад порнографии в развитие науки, техники и человеческого общества. Да если бы не прон, мы до сих пор сидели на модемах с 56,6 kbps, потому что если…
🍌🍌 Но и Гермиону, и Шапочку, и смешариков и даже (для ценителей выдержанного продукта) Аллу Пугачёву можно найти и так, без всяких генераций. r34-артисты давно уже нарисовали всё, что можно было нарисовать руками. Но никто не нарисует тебе прон с твоей однокласницей, стояк на которую ты стыдливо прикрывал учебником билогии. Ах, эти юношеские незакрытые гештальты!
Что ж, я не просто так начал с того, что прон двигает прогресс. И он додвигал уже до того, что собрать видеопорноролик с кем угодно можно теперь самому, благодаря проекту s0md3v/roop (быстро пошли и поставили ему звёздочку). Задисклеймерюсь, что всё это было можно сделать и раньше, но этот инструмент — самое простое, что сейчас существует. Всё, что ему нужно — исходный ролик, фотка вашей ЕОТ и время на обработку. Качество получается очень хорошее (в зависимости от исходных материалов, конечно), при этом не нужно ничего тренировать. Своп может работать на видеокарте (быстро) или на процессоре (небыстро), но работать будет в любом случае. А поскольку это опенсорс, немножко повозиться всё-таки придётся.

Не буду тут пересказывать инструкцию и базу, предполагается, что раз вы тут сидите, то способны спулить и развернуть проект. Я расскажу только про подводные камни, с которыми сам столкнулся.
Я параллельно пытался завести проект в Windows 11 нативно и в WSL2. Во втором случае я зафейлился ставить разные версии python и сломал pip, а вот с нативным вариком всё получилось идеально. Впрочем, добавлять слой виртуализации в любом случае было бы плохой идеей; на CPU оно наверняка бы заработало, но с прокидыванием GPU могло вовсе ничего не получиться.
Под винду по умолчанию ставится (на момент написания этого текста) из магазина python 3.11. Возможно, из-за этого, возможно — из-за криво подобранных зависимостей установка нужных пакетов из requirements.txt не сработает. Я не очень шарю за pip, но у меня не получилось просто указать диапазон версий для зависимостей, чтобы оно хоть как-то собралось, поэтому я подобрал версии вручную:

numpy==1.24.2
onnxruntime-gpu>=1.15.0
tensorflow==2.13.0rc1

С этим оно собирается и работает на CPU. Важно: проект постоянно обновляется, те же патчи по зависимостям прилетают несколько раз в день, поэтому тут важно показать принцип решения проблемы, если у вас она возникнет.
Теперь вы можете начать играться, но свапфейс в проне пока работать не будет — в коде есть определение NSFW-контента, если обнаружится плохое, то работать ничего не будет. Чтобы порногенератор заработал, из run.py нужно убрать вызов opennsfw2.predict_video_frames:

seconds, probabilities = predict_video_frames(video_path=args['target_path'], frame_interval=100)
if any(probability > 0.85 for probability in probabilities):
quit()

Ну и импорт from opennsfw2 в начале скрипта можно удалить.

Всё, доступ к безлимитному дипфейк-прону открыт. Если есть хорошая видеокарта, в доке к проекту есть инструкции, как завести на ней (у меня на ноутбучной 3060 завелось сразу, даже рассказывать не о чем).
В комментах можно порассуждать о моральных аспектах подобных развлечений, похвастаться собственными достижениями, ну и поспрашивать советов мудрых.
🌴Ездил с друзьями в Батуми, и, как водится, в посте делюсь впечатлениями.
Я не фанат курортного отдыха. Конечно, где-то в детстве закрепилось неотпускающее ощущение, что загорать и купаться — это весело. Но нет: просто валяться под солнцем довольно скучно, плавать тоже надоедает минут через десять. Тем не менее, мне в Батуми понравилось, потому что не морем единым. Но по порядку:
🌊 Море, кстати, ещё довольно прохладное, хотя курортный сезон уже официально открыт. Купаться можно, но пока не комфортно + сильные волны, мешающие входить и выходить из воды. Вода вот вообще не такая прозрачная, как где-нибудь в Анталии, но вполне нормальная.
🏖 Пляж длинный, довольно чистый, и купаться можно где угодно. За пять лари тебе подтащат лежак, ещё за пять — зонтик. В лучших традициях черноморья среди отдыхающих курсируют продавцы всякой дряни, типа горячей кукурузы (фу, кто вообще ест эту гадость?), фруктов и бухла. До середины дня все, по ходу, отсыпаются — все дни пляж был почти пустой часов до двух. Да и в «час пик» полно места, если пройтись немного.
Да, батумский пляжик — галечный. Мне это в кайф, ведь я не люблю песок. Он грубый, жесткий и проникает повсюду. Поэтому галька предпочтительнее, но ходить по ней лучше в тапках (их можно купить прям там же).
🏨 Мы жили в апартаментах Orbi City, и это было среднепогано. Нам достался корпус рядом со стройкой (впрочем, город на 60% состоит из стройки, вряд ли бы нам удалось избежать такого соседства), и шум техники будил меня каждое утро. Но зато из номеров был неплохой вид и всего пять минут до пляжа. Обходилось это в буржуинские сто лари в сутки с человека; говорят, с прошлого года цены заметно выросли. Но по городу на каждом углу висят объявления о сдаче жилья на любой ценник; учитывая, что возвращаться туда вы будете только чтобы принять душ и поспать, вообще пофигу, где останавливаться. Городок маленький, общественный транспорт отличный, такси копеечное, можно снять хату подальше от моря, но подешевле, и здорово сэкономить.
🌇 Сам город скорее понравился. Я уже упоминал, что он весь в новостройках, и у меня было ощущение, что это какой-то непрекращающийся и слабоорганизованный процесс. По рассказам товарищей, вечная стройка здесь — нормальное состояние.
Но, несмотря на это, город всё равно симпатичный и нескучный. Я успел погулять по нему вдоволь, и насмотрелся всякого: тут есть и абсолютный совок, и собянин-стайл новострои, и пальмовые аллеи, чисто как в кино про Беверли-Хиллз. И это всё может быть рядом, на одной улице, гуляя по которой ты смотришь на красивые муралы, спотыкаешься о сонных, повсюду валяющихся, собак и рвёшь мушмулу прям с дерева (да, она вполне съедобная). Ну и виды местами открываются поразительные: город окружён горами, и привыкнуть к этому быстро не получится, выглядит очень уж круто.
🥙 Про пожрать и про цены на пожрать.
Грузия в целом — это гастрономический рай, и моя рекомендация — вкушать плоды этого райского сада, и только их. Во всех ресторанах грузинской кухни, от больших сетевых, вроде «Пасанаури», до каких-то мелких локальных, всё было божественно вкусно и очень недорого. Огромные, заполненные бульоном хинкали, жирнющие, сытные хачапури (в Батуми обязательно надо брать аджарские), всякие рулетики и салатики, уф, это никогда не приедается!
А вот во всех местах, куда мы заходили за какой-то европейской кухней (да хоть просто попить кофе с печенькой) мне лично попадался полный шлак за космические деньги. И, чаще всего, чем больше это стоило, тем отвратительнее было на вкус; возможно, просто всё так совпало, но я для себя выводы сделал.
Ещё можно хавать бесконечные и недорогие фрукты и ягоды, они тут продаются на каждом углу. Но лучше пробуйте перед покупкой (везде разрешают) — на продажу плоды рвут сразу, как только станет можно, и часто попадается незрелая кислятина.
И, конечно, обязательно нужно сгонять на Fish Market. Там можно выбрать любую морскую тварь, тыкнуть в неё пальцем, и вам её там же приготовят и подадут. Всё свежайшее, и охренительно вкусное.
✈️ Суммируя ощущения: тут не идеально, но довольно кайфово почилить с недельку. Есть проблемы с сервисом и инфраструктурой, но зато тут очень дружелюбные люди и расслабленная атмосфера. Местами довольно завышенные цены — но если разобраться, то можно не особо тратиться. Здесь все сразу говорят по русски, а английский часто просто не понимают.
Мне кайфово знать, что такой курорт доступен мне в любое время (пять часов в комфортном поезде из Тбилиси) — и я определённо наведаюсь туда в этом году ещё. Я не успел съездить в Батумский ботсад (а это пипец красивое место), не выбрался ко всяким крутым водопадам и пещерам, в общем, не всё интересное заценил. Буду навёрстывать.
Please open Telegram to view this post
VIEW IN TELEGRAM
Трудоголизм и прокрастинация
ЧТО БЫЛО ПРИ БАЛМЕРЕ. ЧТО МЫ ПОТЕРЯЛИ. 1. ВИНДЫ ПИСАЛИ НА ЧИСТОМ АССЕМБЛЕРЕ. ЯДРО МОЖНО БЫЛО В HEXVIEW ЧИТАТЬ. 2. ДИСТРИБУТИВ ВИНДЫ НА ДИСКЕТКУ УМЕЩАЛСЯ. ЛЮДИ J3QQ4 ВВОДИЛИ С РАЗБЕГУ. 3. 640 КИЛОБАЙТ ПАМЯТИ ДЛЯ ВСЕГО ХВАТАЛО. СВОП СПЕЦИАЛЬНО ВКЛЮЧАЛИ, ЧТОБ…
Попросил ChatGPT поделиться десятью правдивыми фактами о жизни в Грузии:
1. В ГРУЗИИ КАЖДОЕ УТРО СОЛНЦЕ ЛИЧНО ПРОСЫПАЕТСЯ, ЧТОБЫ ПРИГОТОВИТЬ СВЕЖУЮ ГРУЗИНСКУЮ СОЛНЕЧНУЮ ЭНЕРГИЮ ДЛЯ ВСЕХ ЖИТЕЛЕЙ СТРАНЫ.
2. ЗНАМЕНИТЫЕ ГРУЗИНСКИЕ ХИНКАЛИ ТАКИЕ БОЛЬШИЕ, ЧТО ОДНОГО ХИНКАЛЯ ХВАТАЕТ, ЧТОБЫ НАКРЫТЬ СТОЛ ДЛЯ ВСЕЙ СЕМЬИ И СОСЕДЕЙ.
3. ГРУЗИНСКИЙ ТАНЕЦ ХАМБУРГЕР, КОТОРЫЙ МОЖНО ПОТАНЦЕВАТЬ, А ПОТОМ СЪЕСТЬ, СТАЛ ОБЯЗАТЕЛЬНЫМ ПРЕДМЕТОМ ШКОЛЬНОЙ ПРОГРАММЫ.
4. В ГРУЗИИ УЛИЧНЫЕ ФОНАРИ ЗАМЕНЕНЫ НА ВЕЧНО ГОРЯЩИЕ СВЕЧИ, ЧТОБЫ СОЗДАВАТЬ РОМАНТИЧЕСКУЮ АТМОСФЕРУ НА КАЖДОМ УГЛУ.
5. В ГРУЗИНСКИХ СУПЕРМАРКЕТАХ ПРОДАВЦЫ АККОМПАНИРУЮТ ПОКУПАТЕЛЯМ НА НАЦИОНАЛЬНЫХ МУЗЫКАЛЬНЫХ ИНСТРУМЕНТАХ, ЧТОБЫ ВДОХНОВИТЬ ИХ НА ВЫБОР ПРОДУКТОВ.
6. ГРУЗИНСКАЯ ПОЛИЦИЯ ОБЯЗАТЕЛЬНО ПРЕПОДАЕТ ТАНЦЫ И ПЕНИЕ КАЖДОМУ НОВОМУ СОТРУДНИКУ, ЧТОБЫ УЛУЧШИТЬ ВЗАИМОДЕЙСТВИЕ С ОБЩЕСТВОМ.
7. В ГРУЗИИ ГОРЫ ТАКИЕ ВЫСОКИЕ, ЧТО ОБЛАКА ПОЗВОЛЯЮТ ЖИТЕЛЯМ ИСПОЛЬЗОВАТЬ ИХ В КАЧЕСТВЕ ПУШИСТЫХ ПОДУШЕК ДЛЯ СНА.
8. ВМЕСТО ОБЫЧНЫХ ПЕШЕХОДНЫХ ПЕРЕХОДОВ В ГРУЗИИ ЕСТЬ ТАНЦЕВАЛЬНЫЕ ПЛОЩАДКИ, ГДЕ ЛЮДИ ИСПОЛНЯЮТ ТАНЦЫ, ПОКА ОЖИДАЮТ ЗЕЛЕНЫЙ СИГНАЛ СВЕТОФОРА.
9. ВСЕ ДНИ НЕДЕЛИ В ГРУЗИИ НАЗВАНЫ В ЧЕСТЬ ИЗВЕСТНЫХ ГРУЗИНСКИХ БЛЮД, ЧТОБЫ КАЖДЫЙ ДЕНЬ БЫЛ ПРАЗДНИКОМ КУЛИНАРИИ.
10. ГРУЗИНСКИЕ ДЕТИ, КАК ТОЛЬКО НАЧИНАЮТ ГОВОРИТЬ, СРАЗУ ПЕРЕХОДЯТ НА ОБЩЕНИЕ НА НЕСКОЛЬКИХ ЯЗЫКАХ, ВКЛЮЧАЯ ДИАЛЕКТЫ ПТИЦ И ЖИВОТНЫХ, ЧТОБЫ ЛУЧШЕ ПОНИМАТЬ ПРИРОДУ.
Трудоголизм и прокрастинация
СЯУ: в Грузии есть древняя игра «лело бурти», больше всего она похожа на регби. Очень жёсткий регби — с выбитыми зубами, поломанными конечностями, иногда — со случайными жмурами. Ну как без жмуров, если «мячик» весит как гантеля, играть одновременно могут…
СЯУ: ещё одна совершенно грузинская история, я ору, как гипопотам.
Восемь лет назад из-за непогоды Тбилиси сильно затопило. Бурные воды обрушились на городской зоопарк, причиняя смерть и разрушение всем животинам, кроме бегемота Беги. Бегемоту (если не бить его по морде чайником), непогода по барабану, а водное обилие только в радость. Воспользовавшись обстановкой, Беги последовал заветам Егора Летова, и ушёл из зоопарка.
Надо сказать, что бегемоты — дико опасные твари, готовые рвать и топтать всех и всё, потому что а шо ты ему сделаешь. Но Беги спокойно себе гулял по Тбилиси, никого не тронув и не забодав, пока его не хватились, и не отвели обратно, деликатно подталкивая под жопку.
А в прошлом году открылся памятник, посвящённый тем событиям, во время которых жители города сплотились перед лицом бедствия. Памятник охуенный, в виде серебряного бегемота.
Гайз, серьёзный вопрос.
Я тут понемногу контрибьючу в чужой опенсорс, ну так, на полшишечки. Вот думал уволюсь, и IDE месяц запускать не буду — фиг там, даже недели не продержался.
Сейчас ментейнер проекта взял и сделал git rebase && git force --push на всю историю изменений. Вся история коммитов переписалась и расплющилась, все хеши потерялись, вся история веток потерялась.
Я спросил ментейнера — зачем ты это сделал (и предложил восстановить историю из сохранившейся у меня локальной копии)? «Упс, я привык так делать, сорян, но ты тоже для своей ветки ребейз сделай, и норм всё будет». Я попытался ему объяснить, что переписывать историю коммитов — плохая практика, это портит жизнь всем участникам проекта и нарушает фундаментальные принципы git, но к согласию мы не пришли.
С одной стороны, чел сотворил каку. Возможно, конечно, что я что-то упускаю, но весь мой опыт подтверждает, что за такое надо обоссывать и выгонять из профессии. С другой стороны — чел шарит и делает реально полезные штуки, тратя собственное время и силы. Ментейнить популярный открытый проект — это пиздец нагрузка, за которую даже «спасибо» редко кто скажет, а вот воплей «почиму не работаит!» и «сделой быстро!» всегда хватает.
Я взял паузу подумать до вечера. Помогите принять решение 👇
Трудоголизм и прокрастинация
Как я должен поступить?
Договорились о том, что он так больше делать не будет, чтобы не портить жизнь другим контрибьюторам (хотя ничего плохого в подобных ребейзах всё ещё не видит), а я перетерплю этот случай. Всё-таки это хоббийный (хотя и хайповый) проект, а не сериус бизнесс, и мы тут просто веселимся и чему-то учимся.
Плюсы: любимые голоса на озвучке, есть Затрас.
Минусы: выглядит, как «дети против волшебников», путешествия во времени в сюжете.
Media is too big
VIEW IN TELEGRAM
Warner Bros. опубликовала первый трейлер анимационного продолжения «Вавилона-5» с подзаголовком «Дорога домой», в котором Джон Шеридан попадает в альтернативные измерения.

Премьера состоится 15 августа.

https://www.mirf.ru/news/pervyj-trejler-multfilma-prodolzheniya-vavilona-5/
Тащем, как мои родители страдали от безвнучия, может представить каждый постсовковый ребёнок, у которого родители используют «когда внуки? внуков давай!» при общении вместо знаков пунктуации. Примерно так: Павлик когда внуки? внуков давай! иди кушать когда внуки? внуков давай! а то остынет когда внуки? внуков давай!
Но я давно и навсегда сбежал из фамильного гнезда, ведя все эти годы столь детоотрицательный образ жизни, что даже маман перестала заводить свою хочустатьбабушкой-мантру при каждой нашей встрече. Вместо этого родители сосредоточили свой гипноз на младшем брате, в котором пассионарности оказалось меньше, а семейственности больше.
Я не был свидетелем того, как Макс объявлял родителям о грядущем пополнении семейства, но допускаю, что радостные вопли были слышны вплоть до той стороны Кавказского хребта, а над родительским домом воссияла радуга счастья. Да что там радуга — с таких новостей батя решился уйти на триста лет назад заслуженную пенсию (я был уверен, что он так на работе и кончится, прислонившись к любимому сварочному агрегату).
Эту новость я пропустил по уважительным эмигрантским причинам. Зато я был свидетелем того, как происходило объявление пола грядущего ребятёнка.
Почему это важно? Ну, это нам, людям современным и толерантным в принципе пофигу — мальчик, девочка или атакующий монгольский всадник. Но не моему бате: тот с однозначностью китайского богдыхана заявил, что ему нужен только наследник. Наследнику он сразу отпишет всё своё имущество — квартиру, тридцатилетнюю «шаху» и коллекцию свёрл по бетону. А если будет девчонка... Тогда тьма спустится на Землю, и все могут идти нахер, а сам батя пойдёт в другую сторону — к долгому и горькому запою, потому что не может быть хуже новости. Это без шуток, практически прямая речь в моём вольном изложении.

Макс до конца держал интригу — от бати, потому что остальные каким-то образом уже знали. Но за общим семейным столом объявление всё таки состоялось — и будущий дед, услышав заветное «мальчика ждём», обмяк душевно и моментально передал Максу все свои рублёвые накопления.

Это было два месяца назад, и все эти два месяца я открыто надеялся, что Макс, желая батю разыграть (а то и немного наказать за шовинизм) наврал, и на самом деле будет девочка. Пожалуй, тогда бы батя смог прилететь ко мне в Тбилиси на одной только жопной тяге, где его пришлось отпаивать от стресса абрикосовой чачей. А я бы сдох со смеху.
Но увы, прикол сорвался, младшой сегодня стал папкой здорового мальчишки, с чем я его и поздравляю.
Эх, такие лулзы упущены...
Трудоголизм и прокрастинация
Договорились о том, что он так больше делать не будет, чтобы не портить жизнь другим контрибьюторам (хотя ничего плохого в подобных ребейзах всё ещё не видит), а я перетерплю этот случай. Всё-таки это хоббийный (хотя и хайповый) проект, а не сериус бизнесс…
Как быстро летит время, когда занимаешься интересным делом! С усилием отрываюсь от этого дела, чтобы вам о нём рассказать.
Не так давно я писал о проекте roop — завирусившемся инструменте для дипфейков. Несмотря на сложность выполняемой задачи, это очень простая скриптовая обёртка над сторонними моделями и рантаймами; вся нейрохрень уже заготовлена, и её нужно просто запустить с нужными параметрами. Даже не имея практически никакого опыта с python, легко разобраться в местном индусском коде и начать контрибьютить.
Вернее, я думал, что контрибьютить будет легко, но с текущим ментейнером проекта мы не сошлись в подходах. Хотя мы достаточно корректно переписывались и проговаривали какие-то вещи в чате, он под разными предлогами отбивал мои PR (кроме совсем уж простых, вроде исправлений опечаток). PR на поддержку сохранения состояния, для отклонения которого повода не нашлось, он просто не принимал «до стабилизации кода». Оказалось, что под «стабилизацией» он подразумевает сквош всех коммитов dev-ветки, из-за чего история git изменилась, мой PR детачнулся, и тогда уж он его с чистой совестью закрыл. Кстати, squash ещё подразумевает, что из истории выкинулись имена всех, кто в проект контрибьютил, а это уже свинство (я, например, хотел бы иметь возможность на собесах флексить своим вкладом в опенсорс).
Это был не единственный, но финальный эпизод, после которого я воспламенил стул решил воспользоваться величайшей возможностью лицензии GNU GPL — забрать код, и сделать хорошо самому.
Вот и делаю: sinner (sinner is non exactly roop).
Здесь уже есть поддержка сейвов (обработку можно в любой момент прервать, и продолжить с того же места), обрабатываемые кадры извлекаются по мере чтения в память (а не валяются гигабайтами файлов на диске), есть понятная цепочка обработки (можно сначала поменять лицо в ролике, а затем прогнать через улучшайзер), можно натравливать обработку на каталог с картинками, а не только на видосы и фотки а ещё там нет nsfw-фильтра. Я уже знаю, как ускорить процессинг, и примерно догадываюсь, как реализовать некоторые фичи, от которых в roop отказались. Идей куча.
Но главное — мой код гораздо лучше спроектирован, в отличие от откровенного индокода roop (атавизмы которого у меня ещё присутствуют). Мне было больно наблюдать, как там выдумывают собственную реализацию интерфейсов, лишь бы не переходить на ООП — и я сделал нормально. В оригинале забили на тесты — я сразу стараюсь их писать. В целом, я просто стараюсь сделать код, который будет легко поддерживать и расширять.
В то же время я изучаю python прямо по ходу, и хотя он мне кажется простым до примитивности, я могу не знать каких-то приёмов, или следовать своим привычкам из других языков. Поэтому прошу знатоков посмотреть и поговнить, если я где-то сделал плохо, или не так, как принято.
А ещё это первый проект, который я пишу с активным использованием ChatGPT, и это очень кайфово. Раньше, когда я начинал писать на незнакомом языке, мне приходилось тратить кучу времени на гуглёж и расковыривание; сейчас можно просто поставить задачу и получить готовый, полностью разобранный код. Осечки случаются, но на уровне погрешности, и это в любом случае выходит на два порядка эффективнее, чем без ChatGPT. При этом я не думаю, что ИИ уже способен заменять хотя бы джунов: чтобы создавать с его помощью хотя бы базовый код, нужен человек с достаточным уровнем понимания теории и хоть каким-то практическим опытом. Неопытный человек просто не сможет корректно поставить задачу роботу. Но если опыт есть, то помогайка получается классная.
Давным-давно, в те древние времена, когда президентом был Ельцин, Internet Explorer 5.0 был актуальной новинкой, а третий «пентиум» с «вудой» — недостижимой гранью желанной роскоши в прайсах Тех-ЛС, я, безкомпьютерный старшеклассник, иногда заходил в гости к упоминаемому неоднократно ранее Вовке, позырить (а то и причаститься) на компльюхтерные игры внутри его роскошного P166. Именно там и тогда я получил импринтинг на кучу всякой годноты, определившей дальнейшие игровые вкусы. «Червячки», «Кармагеддон», «Dungeon Keeper», «Need for speed» — большей частью то были игры понятные, в которых ты сразу (ну или очень быстро) понимал, что там происходит.
Как-то раз зайдя к Вовке, я обнаружил его крутящим колесико яркости на мониторе. «Ночь, не вижу, куда Тени надо ползти» — безуспешно попробовал он объяснить мне смысл крутьбы, но тут же махнул рукой: смотри, мол, только не мешай.
Я стал смотреть на экран, на котором, кроме панелек интерфейса, было почти ничего не видать, и пытался понять, что за ништяк всплыл у Вовки на этот раз.

Раздались хлопки выстрелов. «Промазал, Деревяшкин» — ехидно произнес кто-то из темноты. Следующий стрелок оказался удачливее: «Ммм! Ну ё-моё, перевязать бы меня, а то моча и кровь смешаются и я умру от заражения мочи» — откомментировал раненый. За этот гениальный элемент драматургии я сразу выставил игре высший балл, и добавил в очередь поиграть, когда обзаведусь своей пекой.
Так я познакомился с Jagged Alliance 2, игрушкой, позднее съевшей кучу моего времени. Высокая вариативность, ненадоедливый юмор, затягивающий геймплей с кучей механик, ух.
JA3 я ждал, пробуя почти каждый опус «по мотивам», и тут же вышвыривая его вон с диска и из памяти. Упрощенные механики, нулевая тактикульность, болванчики вместо харизматичных наёмников — всё это были жалкие подделки. Хотя казалось бы: сделайте просто ровно так же, ничего не меняя, только графику осовременьте (она уже на момент выхода смотрелась кое-как, а сейчас из-за этого играть в JA2 — это как тогда играть в первую, ещё досовскую джагу). Почему так не делали — вопрос не ко мне, я слышал о каких-то проблемах с авторскими правами на игру. Но ведь и достойных аналогов тоже не было.
Короче, лет через десять я ждать перестал. И когда JA3 анонсировали — просто рукой махнул, лучше уж сразу ни на что не надеяться...

...пять суток я играю в JA3, прерываясь только на сон, когда уже сам падаю от усталости. Так меня не засасывало со времени вторых «Космических рейнджеров» — ну, или я не позволял себе так наркоманить.
Это вот прямо очень хорошая попытка сделать новый Jagged Alliance. Результат даже близко не идеальный, тут много что упрощено или вовсе отсутствует, но видно, что разработчики любили и понимали старую игру. Поэтому новая ощущается как джага, играется, как джага, и радует, как джага. Неочевидные, иногда даже третьестепенные элементы, дающие те самые ощущения, перенесены, и чем чаще ты их замечаешь, тем больше уверяешься, что это сделано не для галочки, а потому что в этом и есть суть игры. То, как работает и ощущается оружие, какие характеры у мерков, и как они меж собой взаимодействуют — я вот об этих вещах говорю. Да что там — здесь работают ровно те же приёмы и тактики.
Если патчами или аддонами добавят то, что очевидно не успели довести до ума (вроде тупейшего инвентаря, или довольно однообразных типов противников) — будет уж совсем хорошо.