Махровый fullstack
16 subscribers
66 photos
27 links
Личный блог @nornik:
- Бэкенд, фронтенд и случайные мысли - в произвольных сочетаниях.
- Иногда литература, иногда всё, что взбредёт в голову.
Download Telegram
Когда foreach встречает дзен

Сегодня хочу рассказать о генераторах, которые такие же как итераторы, но только лучше.

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

$statistics = [];
foreach ($items as $item) {
$statistics[] = setPaymentId($item);
}


И при обработке записей словил бы логичное сообщение о превышением памяти:

Fatal error: Allowed memory size of xxxxxx bytes exhausted (tried to allocate xxxxx bytes) in BalanceController.php on line xx


Но хорошо, что есть они – генераторы!

С использованием генераторов код немного видоизменится и перестанет есть память как не в себя:

$generator = function (): Generator {    
foreach ($items as $item) {
yield $item;
}
};

foreach ($generator() as $item) {
setPaymentId($item);
}


Генераторы позволяют перебрать набор данных не загружая их в полном объёме в память, а обрабатывать их по одному элементу.

В PHP это достигается через использования ключевого слова yield.

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

По некоторым данным, использование генераторов дают выигрыш в скорости работы: примерно в 4 раза быстрее чем итераторы и на 40% быстрее обычного перебора.

И, как итог, тезисно о генераторах:
- Это не новая функциональность, а развитие существующей;
- Увеличенная скорость обработки большого кол-ва данных;
- Генераторы однонаправленны и работают только «вперёд»;
– Позволяют строить более понятные кодовые конструкции;

Что ж, придётся поправить кое-какие скрипты, обрабатывающие статистику. 📊

А для более любопытствующих есть и развёрнутая версия.

#php, #yield, #генераторы, #web, #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Наводим порядок в миграциях в Laravel

Ранее, я рассказывал про структурирование миграций в Yii2, а теперь пришла очередь поговорить и о Laravel.

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

Итак, что делаем:
– Подготавливаем имеющиеся стабы;
– Создаём новую консольную команду, на основе основной, которая удобнее;
– Создаём провайдер, который будет автоматически считывать пути с миграциями, при выполнении стандартной команды;

Звучит как план!
А реализация этого плана с деталями и кодом на расстоянии одного клика.

#php, #laravel, #миграции, #web, #разработка
CONST умер! Да здравствует ENUM!

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

Но время шло, трава становилась всё менее зелёной, а требования к коду – всё выше. Да и ошибки могли нет-нет, да и проскочить при использовании констант:

- Ошибки в значениях: легко случайно присвоить неправильный числовой идентификатор или строку;
- Отсутствие встроенного контроля типов: компилятор или интерпретатор не могли гарантировать правильность передаваемых значений;

И удобного механизма сравнения при работе с константами тоже не имелось: приходилось постоянно сравнивать строки или числа вручную.

Всё это и привело к появлению стандартизированного способа объявления перечислений, который был добавлен в PHP8.1.

Что умеет ENUM

- Перечисления могут быть обычные:
enum Status {     
case Active;
case Inactive;
}


- А могут быть типизированными:
enum Status: string {     
case Active = ‘active’;
case Inactive = ‘inactive’;
}

Причём перечисления могут быть или только чистыми, или только типизированными, а их пересечение не допускается. Так же есть ограничения и по типу скалярных значений для типизированных перечислений – это integer и string.

- Благодаря встроенному методу cases, enum удобно перебирать:
foreach (Status::cases() as $status) {
echo $status->value;
}

Например для построения выпадающих списков.

- Так же enum можно использовать для подсказки типов в функциях:
function setStatus(Status $status) {
// сохранение статуса в базу данных
}

Благодаря этому аргумент метода ожидает опцию только из перечисления.
----------------
Таким образом применение перечислений облегчает разработку, снижает вероятность ошибок и делает приложение стабильнее и надежнее. Поэтому использование перечислений можно считать лучшей практикой в современном PHP.

И традиционно, для любопытствующих, чуть больше информации 😉

#php #enum #перечисления #web #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Читальня. Дерек Кюнскен – Квантовый волшебник

— Обзор второй книги - Квантовый сад


— Слушай, ты, espece de con! —

Пожалуй, начну с главного, malparidos!

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

Итак, нас забрасывает в далёкое будущее. Здесь межпланетные перелёты - это норма, кротовые норы – обыденность, а генная модификация породила новые виды человечества.

Одним из таких ГМО-людей и будет главный герой. По происхождению homo quantus – человек, смотрящий на мир сквозь призму квантового бытия, Создан он был для научных исследований и созерцательной деятельности, но что-то в квантовых мозгах коротнуло и жизнь ему такая обрыдла. И стал герой, ни много ни мало, а лучшим вором и аферистом по эту сторону млечного пути галактики.

Имея такую замечательную репутацию, добровольно вляпывается товарищ, в военно-политический заказ, с далеко идущими последствиями.

А для выполнения заказа, герою необходима команда, надо сказать, весьма колоритная. Тут у нас и неоднозначные homo pupa, они же люди-куклы, и homo iridanus – люди-акулы, и холеричная баба-подрывник, и больной наставник, и, конечно же, искин, считающий себя Спасителем.

Дрим-тим, одним словом.

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

Интересно описаны пост-люди:
– homo quantus – эдакие учёные до мозга костей, которые живут в собственном мире, буквально и фигурально;
– homo pupa – выведенные для служения, с довольно таки противоричивой, а местами и отвратительной, философией и взглядом на мир;
– homo eridanus – лучшие пилоты империума галактики, панки по натуре, да и по жизни;

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

Итого: необычный мир, яркие персонажи и вполне бодрый сюжет. Так что книгу можно смело читать ради мира и команды. Но если в какой-то момент Белизариус снова начнёт объяснять устройство двадцатидвухмерного пространства - не пугайтесь. Это просто квантовая механика пытается вас усыпить.

7 homo pupa из 10

#книги #почитать #ДерекКюнскен #Кюнскен #КвантоваяЭволюция #КвантовыйВолшебник #приключенческая #фантастика #космос
🔥2
Маркетинг в XVIII веке или как одна лошадь тянула паровую машину

Как-то листаю я на днях ленту и вижу: «лошадь во время бега развивает мощность 12-15 лошадиных сил». И я такой: «Чо бля?!».

Садись, дружище! Нам надо с тобой серьёзно поговорить!

Термин «лошадиная сила» ввел шотландский инженер и изобретатель Джеймс Ватт, хорошо знакомый нам по школьной программе по физике и по тарифам на электроэнергию. На тот момент, в XVIII веке, Ватт занимался усовершенствованием, паровых машин и неплохо преуспел в этом деле.

Надо сказать, что на тот момент, основным движителем на предприятиях того времени были лошади. Они использовались на пивоварнях, шахтах, мельницах, фермах и т.д. В общем, повсеместно использовались.

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

Изобретатель проводил время на угольной шахте и наблюдал за тем, как лошади поднимают грузы и людей из шахт. Основываясь на этих наблюдениях, Ватт установил, что среднестатистическая лошадь может поднять 250 кг груза на высоту в 30 см за 1 секунду, что и было принято за значение 1 лошадиной силы.

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

Такой вот маркетинг XVIII века.

Но откуда же 12-15 лошадок при беге лошади?

– в реальности средняя лошадь может развивать мощность около 1 лошадиной силы при длительной равномерной работе - именно это Ватт и использовал в своём маркетинге;
– в тоже время скаковая лошадь на пике бега на несколько секунд может развивать мощность до 15 лошадиных сил;
– а пиковая, теоретическая мощность мускулатуры лошади, с учётом биомеханики, может доходить до 20 лошадиных сил;

А что там люди?

– среднестатистический человек развивает мощность 0.15-0.2 лошадиные силы;
– среднестатистический спортсмен развивает мощность 0.4-0.5 лошадиные силы;
– среднестатистический спортсмен-рекордсмен может развивать мощность до 2 лошадиных сил, а Усэйн Болт развивал пиковую мощность около 3 лошадиных сил в начале бега;

—
И вот уже прошли три столетия, а человечество продолжает измерять мощность двигателей в лошадиных силах. Термин, придуманный однажды в целях маркетинга, прошёл через века и стал настолько привычным, что кажется вечным.

Источники: про паровые машины, про лошадиные силы

#внезапно #позновательно #изюм #лошадиная #сила
👍1
Водка, дружба и стыковка Союз-Аполлон

Сегодня, 17 июля, отмечается знаменательное событие в истории мировой космонавтики, а именно произошла стыковка двух космических кораблей в космосе: советского «Союз-19» и американского «Apollo».

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

И вот 15 июля 1975 года с космодрома Байконур стартовал советский корабль «Союз-19» с экипажем, состоявшем из Алексея Леонова и Валерия Кубасова. Следом, спустя несколько часов, с мыса Канаверал отправился американский «Apollo» корабль с товарищами Томасом Стаффордом, Вэнсом Брандом и Дональдом Слейтоном.

А уже 17 июля 1975 года произошла первая в истории стыковка космических кораблей.

Но, разумеется, это не всё.

Существует легенда, согласно которой, Алексей Леонов разыграл своих американских коллег, предложив «бахнуть» за встречу.

Во время одного из совместных обедов Леонов вручил членам экипажа «Apollo» несколько тюбиков с едой, на которых были приклеены этикетки с названием популярных марок советской водки («Столичная», «Русская», «Пшеничная»). При этом Леонов заявлял, что согласно русским традициям необходимо обязательно выпить за встречу, подчеркнув важность соблюдения традиций гостеприимства.

Кто-то утверждает, что водка таки была.
Другие, уверены, что это был коньяк.
А Алексей Леонов позже рассказывал, что на самом деле это был борщ в тюбиках. ;)

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

#внезапно #позновательно #изюм #союз_аполлон #космос
😁2
Псевдокласс, который слишком много знал

Никогда бы не подумал, что CSS может стать источником беспокойства. Однако, как оказалось, css-псевдокласс :visited скрывал в себе уязвимость, которая позволяла отслеживать историю посещённых страниц пользователя.

Эта история началась ещё в конце прошлого века, когда веб был молод и зелен, а разработчики хотели сделать жизнь простого пользователя проще и ярче. И придумали они выделять посещённые ссылки другим цветом, чтобы было легче ориентироваться среди бесконечных просторов интернета.

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

Впервые, ещё 28 мая 2002 года, проблему зафиксировал Дэвид Барон, работавший в то время в Mozilla. Это произошло через несколько месяцев после того, как исследователь безопасности Эндрю Кловер опубликовал концепцию атаки, ссылаясь на статью «Атаки по времени на веб-приватность» исследователей из Принстона Эдварда Фелтена и Майкла Шнайдера, вышедшую в 2000 году.

Проблема по итогу оказалась довольно серьёзной. Исследователи безопасности продемонстрировали множество атак, связанных с этой уязвимостью: тайминговые атаки, анализ изменения пикселей, взаимодействий с пользователем и даже атаки на уровне процессов. Всё это позволяло злодеям незаметно извлекать сведения о поведении пользователя в браузере.

Но не только кулхацкеры пользовались этой брешью в приватности. Один из ярких примеров использования данной уязвимости произошёл в начале 2020-х годов, когда крупные корпорации начали активно внедрять инструменты мониторинга сотрудников. Используя технику определения посещённых ссылок, работодатели пытались выяснить, посещают ли работники запрещённые ресурсы или проводят слишком много времени на развлекательных платформах.

Одним из первых шагов решения проблемы было введение ограничений на применение CSS-свойств, применяемых для псевдокласса :visited, разрешив использовать лишь ограниченный набор свойств: цвет текста, цвет фона и цвет границ. Также были введены ограничения на стороне JavaScript и функция getComputedStyle() теперь возвращает одинаковый стиль как для псевдоклассов :link и :visited.

И вот в апреле 2025 года Google представила технологию «разделённой истории посещений» (Partitioned Visited Links History). Суть метода заключается в том, что каждый сайт получает отдельную область хранения истории посещений, что исключает возможность просмотра общей истории всеми сайтами одновременно. Благодаря этому нововведению, даже если один сайт попытается использовать уязвимость, он сможет увидеть только те ссылки, которые относятся непосредственно к нему.

В итоге псевдокласс :visited больше не работает глобально — он зависит от контекста. Что делает браузеры более приватными по умолчанию, а защита теперь встроена в механизм работы с веб-страницами.

Источники: хабр, securitylab

#css #security #frontend #web #разработка
Читальня. Вадим Панов – Zандр

— в Зандре опасны все, а особенно тот, кто выглядит подчеркнуто миролюбиво —

И пока два берсерка - оранжевый Донни и всадник апокалипсиса ДАМ - мерятся размерами атомных подводных лодок в твитторах, предлагаю взглянуть на один из возможных сценариев постапокалипсиса, созданный Вадимом Пановым на страницах книги «Zандр». ☢️

—————

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

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

В книгу, вошли три повести:
– «Аттракцион «Безнадёга» – история одного бандитского притона,
– «Нянька Сатана» - история про ветерана со стальным характером и младенцем в рюкзаке,
– «Седьмой круг Зандра» – история об изголодавшейся флоре и её садовниках.

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

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

И, знаете, меня по-настоящему завораживает этот мир. Хочется узнать больше — не о катастрофе, а о тех, кто в ней выжил. Кто научился жить среди обломков, вдыхая радиоактивную пыль и сражаться за право увидеть ещё один рассвет. В очередной раз восхититься, но не разрухой и жестокостью, а человеком, способным выжить в самом враждебном из возможных миров.

Итого: получилась добротная боевая фантастики с философским привкусом. Если вам по душе скрип песка на зубах, свист ядерных пуль над головой и вечная тоска по человеку, — читать обязательно.

8 комби из 10.

#книги #почитать #ВадимПанов #Панов #Зандр #боевая #фантастика #постапокалипсис
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Быстрый и неутомимый fastcgi_finish_request!

Ооооо! Чо расскажу! Чо нашёл! Чо узнал!

Итак, ситуация:
В веб-приложение прилетает вебхук с внешней системы. Мы его обрабатываем, отдаём 200 OK — вроде бы всё хорошо. Но нет!

Обработка занимает слишком много времени. За это время внешняя система решает, что что-то пошло не так, и дёргает вебхук снова, и снова, и снова...

В результате:
- куча лишних запросов;
- сервер впустую тратит ресурсы;
- некрасивые побочные эффекты.

Побаловшись с оптимизацией некоторое время, и не добившись каких-либо значительных результатов – выполнение обработчика в тайминги не укладывается – приуныл.

На тот момент единственным рабочим решением виделось использование очередей и выполнение отложенных задач – это решение было отложено как план Б из-за длительности реализации.

И отправился искать советы в эти наши интернеты. Искал медь, но нашёл золото. 🤌

Без лишних предисловий – спас ситуацию fastcgi_finish_request.

Эта функция позволяет завершить отправку ответа клиенту, но продолжить выполнение скрипта на сервере.

public function onStatusChanged(Request $request)
{
echo "OK";
fastcgi_finish_request();

// делаем основную логику
}

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

Когда применяем: когда нам не важно дожидаться результатов выполнения скрипта и можно освободить соединение:
– обработка webhook;
– выполнение отложенных задач;
– ускорение API
– и т.д.

Особенности и ограничения:
– работает только в окружениях FastCGI;
– после вызова нельзя отправлять данные клиенту так как соединение уже закрыто;
– всё, что идёт после, всё ещё выполняется в том же PHP-процессе;
– если скрипт будет выполняться долго, на него всё ещё влияют max_execution_time и memory_limit;

В общем, вещь волшебная.
И пусть ваши вебхуки будут быстрыми и неутомимыми!

#php #fastcgi #оптимизация #web #разработка
🔥2
Локальный HTTPS без гипсу, без пыли, без шуму...

Все современные веб-приложения используют SSL для работы, в то время как для локальной разработки это не обязательно. Но бывают случаи, когда без SSL локальная разработка невозможна или крайне затруднительна (например, при работе с WebSocket, push-уведомлениями и т.д.).

Классическое решение задачи сводится к созданию самоподписанного сертификата через OpenSSL, но у такого решения есть проблема: созданный сертификат не является доверенным и поэтому браузеры будут об этом навязчиво напоминать. Да и чего греха таить – команды каждый раз приходится гуглить 😱

И на днях я нашёл настоящую серебряную пулю для этой задачи – mkcert:

- создаёт локальный корневой сертификат;
- автоматически добавляет его в доверенные хранилища;
- генерирует «валидные» серты для любых доменов: localhost, *.test, myapp.local;
- доступная для Windows, MacOS и Linux.

Установка проста и не требует танцев с бубном:

brew install mkcert
brew install nss


При первом запуске mkcert, необходимо запустить с флагом -install:

mkcert -install


Если увидели следующее сообщение, то всё прошло как надо.

Created a new local CA
The local CA is now installed in the system trust store! ️
The local CA is now installed in the Firefox trust store (requires restart)!


А теперь создаём сертификат под конкретный проект:

mkcert app.local


Всего лишь одна команда, а колоссальная экономия времени и нервов.

Must-have для любого дев-окружения. 🔥

#ssl #https #mkcert #web #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Читальня. Чайна Мьёвиль – Город и город.

— Андрюха, у нас труп, возможно пролом —

Знакомство с этим произведением у меня началось с сериала BBC с одноимённым названием, после просмотра которого осталось ощущение недосказаности и неполноты картины.

Решив, что сценарист бездарность, а режиссёр халтурщик – я обратился к первоисточнику и взял в руки книгу. Это была вторая попытка понять произведение. Результат тот же - «Боже! Какая же муть!». 😑

Уж не знаю что на меня нашло, но я перечитал это дело ещё раз...
——

Книга нас встречает трупом девушки в среднестатистическом дворе в городе Бешель.

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

А оно прекрасно своей шизой.

Действие происходит в восточноевропейском городе Бешель, который гросс-топически делит территорию с другим городом – Уль-Комой. Если быть более точными, то это даже не города, а страны – с таможней, границами и прочей атрибутикой. И всё бы ничего, но границы городов обусловлены только способностью не-замечать жителей другого города.

А чтобы не-видеть было удобнее, жители одного города отличаются от жителей другого одеждами, походкой, какими-то прочими микро-признаками, которые за столетия жители научились анализировать не задумываясь. Отличаются дома, машины, улочки, киоски фастфуда и т.д. и т.п. Как там было у классика: "когда у общества нет цветовой дифференциации штанов, то у общества нет цели". Так вот тут - это доведено до абсолюта.

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

На этом сложность градоустройства не ограничивается – так как логически города два, а физически один, то есть места пересечения. Расположение городов может быть крайне неудобным: это могут быть чередующиеся дома, пересечения улиц и даже (!) этажи в одном здании могут принадлежать разным городам.

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

К сожалению, автор не отвечает на эти вопросы, а ставит многоточие. Бесячее многоточие, как, практически во всех диалогах, обрывая фразы на полуслове.

Итого: как детектив книга скучная, как фантастика - забористо-наркоманская. Читать ли? Конечно! Почему только прочитавшие это произведение должны страдать? 😈
А если серьёзно - книга интересна своей задумкой разделенных городов и людей, но вот раскрыть эту задумку, на мой взгляд, автору не удалось.

⚠️ Читать на свой страх и риск.

5 проломов из 10

#книги #почитать #ЧайнаМьёвиль #Мьёвиль #ГородИГород #детектив #нуар
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓2👍1
Один cron, чтобы править всеми задачами

Итак, продолжаем улучшать yii2.

На проекте случилось несколько проблем разом:
- кол-во cron-задач стало разрастаться: тут и обновление телепрограммы, и сбор статистики, и синхронизация рекламных компаний и ещё десяток других задач;
- переносить задачи по цепочке local => stage => prod стало проблематично - легко что-нибудь потерять;
- и так как задач много, то не плохо бы их и записать в git;

‼️ Согласно рекомендациям лучших собаководов был выбран пакет omnilight/yii2-scheduling, который добавляет удобный планировщик задач в духе Laravel Scheduler.

Основная красота в двух моментах:
- в cron оставляем только одну строку:
* * * * * php yii schedule/run --scheduleFile=@app/config/schedule.php >> /dev/null 2>&1


- все остальные задачи добавляем в специальный конфиг-файл config/schedule.php с человекопонятным написанием:
$schedule->exec("php yii lime/load-program")
->withoutOverlapping()
->cron("30 1 * * *");


На что ещё стоит обратить внимание:
- предусмотрен механизм защиты от параллельного запуска задач;
- можно записывать вывод cron-команды в файл или email;

Всё! Пара Па Па Пам! 👍

#php #backend #yii2 #cron #scheduling #web #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Хеллоуин со славянским колоритом

🎃 Сегодня 31 октября, а значит многими отмечается Хеллоуин, Самайн, День всех святых, Тыквенный спас, Велесова ночь!

Благодаря глобализации и голливуду, мы узнали, что 31 октября мир традиционно отмечает Хэллоуин. Нам уже известна вся атрибутика этого праздника: тыквы-фонари, ряженые в страшных костюмах, Майкл Мейерс с тесаком и прочие прелести. Всё это впитывалось нами десятилетиями с каждым новым глотком кока-колы.

Чуть позже, поскребя хеллоуин, оказалось, что он имеет кельтские корни и в девичестве назывался Самайном/Самхейном. А фонарь из тыквы, совсем даже фонарь из репы и зовут его фонарём Джека. Ну и как бы ладно не об этом сегодня речь.

Но сегодня, я узнал, что у древних славян тоже был праздник 31 октября - Велесова ночь!

Велесова ночь – это древнеславянский праздник, посвященный смене времен года, а именно переходу осени в зиму. Кроме того, согласно поверьям, в ночь на 1 ноября граница между тремя мирами - Явь (нашим миром), Навь (загробным миром) и Правь (миром богов) - стирается, и у живых людей, душ умерших и духов (причем как добрых, так и злых) появляется возможность перемещаться между ними.

Властелином всех трех миров в древнеславянской мифологии считался Велес - бог плодородия, животноводства, мудрости и богатства. Он также покровительствовал колдунам, мастерам, купцам и путешественникам, был проводником умерших в Навь, а душ младенцев в Явь. Славяне верили, что в ночь на 1 ноября Велес вместе с другими духами спускается на Землю, чтобы преподнести людям урок, либо даровать свое благословение. Именно поэтому это время называли Велесовой ночью.

interfax


‼️ Однако, говорят, царь праздник не настоящий!

Прямых письменных свидетельств о Велесовой ночи в древнерусских источниках не обнаружено.

А упоминание Велисовой ночи, по некоторым источникам, впервые встречается у некоего волхва Велеслава в 2000-м году в одноименном рассказе.

Вот что говорит заведующий кафедрой всеобщей истории и международных отношений АлтГУ Сергей Усольцев.
А Велесова ночь – праздник, который кто-то выдумал позавчера. Нет никаких письменных свидетельств, дошедших до нас, о том, что был такой праздник. Мы толком ничего не знаем про Велеса. Никакая культура, связанная с Велесом (кроме кратких упоминаний в летописи) не сохранилась


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

А отмечать этот день или нет - каждый решает сам, благо, выбор праздников огромен.

А можно просто пойти спать. 💤

Про хэлоуин и репу Джека
Про Велисову ночь
Немного скепсиса

#внезапно #позновательно #изюм #хэллоуин #велесова_ночь
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🌚1
По следам осеннего IT Link 2025 🐾

❗Пост не рекламный и не заказной, но с ссылками.

В Чебоксарах 8 ноября 2025 года состоялась осенняя IT-конференция IT Link 2025.

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

Основная канва конференции - это использование ИИ в различных сферах деятельности, разумеется, IT. Было несколько основных треков: product & design, highload, аналитика, разработка и инфобез.

Для себя выделил, несколько докладов, которые зацепили.

1️⃣. Егор Пустовит, "Почему не нужно внедрять ИИ в ваш продукт"

Честно, очень хотелось послушать что-то трезвое на данную тематику на фоне дичайшего хайпа по нейронкам.

К сожалению не сложилось.

В итоге Егор выступил с докладом "Будущее без занудства" - доклад получился довольно интересным, особенно на фоне прогнозов, раздающихся из каждого утюга, о чудо-нейронках, которые уже завтра заменят всех программистов / художников / дизайнеров / копирайтеров / юристов / бухгалтеров. Насколько это не так говорят сообщения, которые посыпались последние недели как из рога изобилия, о том, что компании набирают обратно сотрудников в штат 🫠. Или о том, что роботами, которые должны управляться ИИ и помогать по дому, будут управлять индусы 🫠.

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

В общем, нужно немного притормозить и не вестись на хайп понапрасну.

Канал Егора: Разговоры в Пустоте

2️⃣. Игорь Кожелин, "Применение космических данных и ИИ в интересах бизнеса"

Игорь сооснователь частной космической компании SR DATA. Компания занимается предоставлением космических снимков с последующим их анализом, системами на основе математического моделирования и искусственного интеллекта. Были рассмотрены варианты использования снимков со спутников ДЗЗ в разных сферах, поговорили, о том что космосом в России может заниматься не только государство, но и частный бизнес, а лицензию можно получить через госуслуги за 2-3 клика, но это не точно 😏.

Из интересных цифр:
- 80% космической индустрии - это частный бизнес;
- объём рынка космических услуг к 2030 году ожидается 💵1430 млрд;
- а в России самый простой путь войти в SpaceTech 🚀

3️⃣. Антон Жбанков, "Настоящий ИТ хайлоад по хардкору"

Тема, которую поднял Антон в докладе не часто встречается в наших интернетах, но ИИ это не только LLM, алисы и прочие gpt, но это ещё и энергетика. Даже так - ЭНЕРГЕТИКА.

Шутка ли, но стандартный 48-юнитовый шкаф с ИИ-шным железом съедает десятки ⚡️мегават⚡️ электроенергии. Была рассмотрена тема как эту энергию рассеивать: сложные системы жидкостного охлаждения, градирни, кондиционеры, по отдельности и вместе взятые. Рассмотрели предел развития ИИ, но не с точки зрения софта, а с точки зрения железа. А по железу всё довольно печально - на текущий момент всё уже упирается в физические свойства материалов.

Было очень познавательно и необычно рассматривать ИИ с этой точки зрения.

И да, самый важный-то момент - будущее ИИ без электриков и сантехников с соответствующими доступами кажется туманным. Возможно, в будущем выпускники ПТУ будут ценнее, программистов 😉

Канал Антона: BeerPanda. Органично недоразвитый DevOps

4️⃣. Андрей Дорожный, "Как убеждать заказчика, начальника и коллег с помощью визуализации данных"

Тема была не про ИИ, но полезная, о том как надо и не надо визуализировать данные так, что бы они помогали, а не запутывали. Пожалуй тут больше ничего не скажу, это надо видеть )

Канал Андрея: Дата-сторителлинг

Что ж, возможно и я когда-нибудь доберусь до сцены, а пока выражаю искреннюю благодарность организатору меропрития компании Лайм Эч Ди !

Было позновательно!

#ITLink2025 #ITЧебоксары #ITконференция
Please open Telegram to view this post
VIEW IN TELEGRAM
👏4
Читальня. Питер В. Бретт – Меченый

— Обзор второй книги - Копьё пустыни
— Обзор третьей книги - Дневная битва
— Обзор четвёртой книги - Трон Черепов


— Хочешь, чтобы демоны умерли - убивай их своими руками —

Настало очередное будущее на страницах истории.

Когда-то очень давно, люди владели секретами магии во всех деталях. Под предводительством Избавителя - великого воина, объединившего мир под знамёнами борьбы с демонами, люди смогли загнать нечисть в Недра на долгие тысячелетия. И настал Золотой Век человечества.

Люди стали развивать технологии и науку, стали забывать магию и уроки прошлого, стали стремиться к светлому будущему. Демоны в Недрах смиренно ждали своего часа и дождались - так наступила Эпоха Разрушения.

Мир скатился в тёмное средневековье. Некогда единое королевство Тес распалось на отдельные герцогства и свободные города: Форт Милн, Форт Энджирс, Форт Райзон, Лактон и, немного особняком - Форт Красия.

Здесь днём люди занимаются обычными делами: пашут поля, ловят рыбу, охотятся, и занимаются прочим ремеслом. А по ночам из под земли на охоту выходят кровожадные монстры - подземники. Единственное спасение от напасти - остатки магических знаний - защитные метки. Их наносят на здания, на защитные столбы, для защиты открытых территорий, а так же на переносные круги для защиты во время путешествий.

По городам и весям путешествуют вестники, почтальоны по нашему, и сшивают разбросанные города по всему миру. Профессия, в те времена, опасная, высокооплачиваемая и престижная. Компанию вестникам составляют жонглёры, почему-то, и развлекают публику - профессия тоже не менее престижная. Ну а самый почёт и уважение метчикам - единственные защитники остатков человечества.

Чуть не забыл о местных праведниках - Рачителях, которые несут слово и рассказывают легенды об Избавителе, который должен явиться снова и положить конец бедствию с подземниками.

В этом жестоком мире, появляются три интересные судьбы, которые должны сыграть не последнюю роль в этой истории - боевой маг Арлен Тюк, хилер Лиша Свиток и бард Рожер Восьмипалый. У каждого из них непростая судьба, разные мотивы к развитию и становлению, но в итоге судьба их сводит вместе.

Читать ли?

О да! Конечно! Это, пожалуй, одна из самых увлекательных книг, которую я читал за последнее время.

Тройной сёнэн про героев развивается на каждой странице: Арлен из мальчишки медленно, но верно в боевого мага. Лиша Свиток попадает под крыло к своенравной, но харизматичной знахарке Бруне, которая взращивает из георини первоклассную травницу, ну а Рожер раскрывается как жонглёр и скрипач. Все приключения, злоключения, мытарства и прочие активности героев захватывают и не отпускают до последней страницы!

А ещё это первая книга в серии "Война с демонами", которая лишь приоткрывает завесу тайн этого мира.

Итого: Всё ооооофигенно!

9 алагай из 10.

#книги #почитать #ПитерВБретт #Бретт #ВселеннаяМеченого #Меченый #тёмное #фентези #магия #монстры
👍3🔥1
Секреты, которые лучше не трогать… но это не точно

Нет ничего лучше (и более стимулируещего), что бы познакомиться с чем-то новым, как неработающий прод...ведь, да?

------------

Тележка пикнула бодрым: "Привет, у нас сайт недоступен из-за сертификата".

Быстренько глянул на проблемный сертификат. Убедился, что это let's encrypt и, лихо отрапортовав: "Давай рута, там делов на 5 минут", приступил к задачке на 5 минут.

Там делов на 5 минут
Там делов на 5 минут
Там делов на 5 минут
ТАМ ДЕЛОВ НА 5 МИНУТ

Все же знают эту магическую фразу, да?
Да, ожидаемо, там оказалось делов не на 5 минут.

------------

На сервере, не особо задумываясь, делаю привычное движение руками - certbot --nginx renew и получаю первый отлуп. Не могу, говорит certbot, обновить сертификат - 80 порт занят каким-то супостатом.

Выяснив, что супостат этот docker, да ещё и в режиме swarm, что для меня совсем новьё, откладываю мысль о том, что бы полазить в докере на потом. Не то что бы не могу, но это прод, а черного пояса по devops у меня нет, да он ещё и в режиме роя. Ну его нахер. 😰

Решаю, что сначала надо получить сертификат.

Пробую certbot с различными флагами - херушки-воробушки. Нужен 80 порт.

Тут меня посещает отличная мысль - надо сгенерировать сертификат на другой машине - изи-пизи!
Но и тут ждало разочаровнаие. А что бы убедиться, что ситуация усугубляется, я спросил у гугола, я спросил у яндекса, я спросил у знающих человеков - а можно ли сгенерировать сертификат на чужой машине? И, надо сказать, что гуголы/яндексы сказали правду - сгенерировать сертификат на чужой машине, без прямого доступа к DNS - нельзя, а вот человек, который меня уверял, что "да это фигня, я так тыщу раз делал", оказался не прав. 🤌

Тут стоит отметить, что раньше не задумывался как работает утилита, но оказалось, что для обновления сертификатов ей нужен 80 порт или доступ к зоне DNS. 🫠


И тут приходит осознание, что назревает вызов.
В голове вырисовывается план, которого, разумеется, будем придерживаться:
- положить веб-сервер и высвободить 80 порт;
- сгенерировать новый сертификат;
- заменить сертификат;
- запустить веб-сервер с новыми сертификатами;

Всё бы хорошо, но пугающие docker swarm и прод заставляют много думать, потеть и грызть ногти.

Хотя, с другой стороны, что я прод ни разу не клал что ли...
И на этой оптимистичной ноте я полез в docker с немытими руками...

В итоге всё оказалось не так страшно, как думалось. А думалось сначала в сторону killall -9 docker 🤪

И шаг за шагом к цели:
- снял с публикации порты 80/443
docker service update --publish-rm 80:80 service_name

docker service update --publish-rm 443:443 service_name


- сгенерировал новый сертификат
certbot certonly -d example.ru -d example.ru


- вернул порты на место
docker service update --publish-add published=80,target=80 service_name

docker service update --publish-add published=443,target=443 service_name


- сгенерировал новые секреты для docker
docker secret create fullchain-2025-12 fullchain.pem

docker secret create privkey-2025-12 privkey.pem


- заменил секреты
docker service update \
  --secret-rm fullchain \
  --secret-rm privkey \
  --secret-add source=fullchain-2025-12,target=fullchain \
  --secret-add source=privkey-2025-12,target=privkey \
  service_name


Ииии...чуда не произошло. Таргеты для секретов, брал из конфига docker-compose, который лежал рядышком, но оказалось, что конфиг не актуальный 😮, а для деплоя используется ansible, к которым доступа нет.

Пришлось копнуть глубже и поизучать секреты:
docker service inspect service_name --format '
{{range .Spec.TaskTemplate.ContainerSpec.Secrets}}
secret: {{.SecretName}}
target: {{.File.Name}}
---
{{end}}'


И уже, наконец, сделал правильные апдейты новых секретов.

К чему я это всё - а что б не забыть! 💪

#backend #devops #docker #docker_swarm #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Подруга подкинула проблем...

И да, спасибо группе "2ва Самолёта", за максимально релевантное название, неожиданно случившегося опыта.🤔

Кто работает с laravel знает, или по крайней мере, догадывается, что в ней (или в нём?) есть всё, собственно как и в Греции. Сегодня хочу рассмотреть один такой момент, который, как мне кажется, довольно интересный, а именно использование трейта softDeletes и не самая очевидная его особенность.

Нацепив на модель трейт softDeletes, мы её награждаем полем deleted_at, в результате чего запись из БД не удаляется физически, а помечается на удаление - deleted_at становится не null. Это полезно, если мы хотим сохранить данные для какого-то аудита или защитить данные от случайных приступов криворукости.

Стоит отметить, что сам по себе трейт не создаёт поле deleted_at и не добавляет соответствующих полей в БД. Поля для БД необходимо предусмотреть на этапе проектировния таблицы и указать явно в миграции $table->softDeletes() и, лучше добавить по полю индекс.

Пупупупупу-у-у-у! А у меня ж индексы везде стоят? Ведь да же?..😰


Итак, всё, вроде бы, круто - данные сохранили, индексы, для +10 к скорости выборки, добавили. При использовании ORM удалённые записи не возвращаются в запросах, model-route-binding тоже сыпит 404 ошибкой при обращении к удалённым записям. Всё хорошо!

Хорошо-хорошо, да не очень-то...


Для меня стало неожиданным сюрпризом, что в правилах валидации, таких как exists и unique, эта магия не работает 😭. Да, блин! В правилах валидации требуется явное указание, что нужно исключать записи, помеченные на удаление, например так:

Rule::exists(PromoCode::class, 'code')->withoutTrashed();


Laravel весь такой магический, что волей-неволей приучает нас, что везде ожидается одинаковое поведение, но суровая жопа реальности сказала, что магии не существует! Самое обидное, что в основной документации об этом ни слова, но, справедливости ради, есть в API документации.

Почему такая несправедливость?

Потому что softDeletes является частью мира ORM и представляет собой глобальный скоуп. В то время как валидаторы - это прямые запросы к БД и ни про какие ORM и scope слыхом не слыхивали.

Что жжжж, ожидание-реальность как оно есть. 😮

Учите матчасть!

——

🎶 А пока писал пост заслушал до дыр:
- Дарья Безбородова, Дмитрий Гусаров - Винил
- Дарья Безбородова, Дмитрий Гусаров - Блюз о крыльях, ногах и хвостах.

Просто восторг!

#laravel #softDeletes #php #backend #web #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🔥1
Что ж, 2025‑й честно старался, но не справился и мы выстояли.
Значит, всё было не зря.

С Новым годом и с новыми силами! 🎅
Please open Telegram to view this post
VIEW IN TELEGRAM
2025: 1813 часов за клавиатурой и другие итоги года

Пока идут длинные выходные, можно устроить небольшое ретро на прошедшие 365 дней. Раньше я такого не делал, так что не судите строго, братцы!

👩‍💻 Fullstack

Начнём с основной деятельности - благо, её проще отследить благодаря сервису WakaTime.

За год я накодил 1 813 часов - в среднем это 7 часов 20 минут в день. И это только чистое время кодинга: без учёта созвонов, писем, чатов и философских размышлений о смысле жизни.

При этом самый длинный день кодинга длился 12 часов и 51 минуту - видимо, поймал волну 🧑‍💻.

А самым продуктивным днём недели была среда (потому что в среду мало созвонов? 😏 )

В этом году самым востребованными языками у меня были PHP и TypeScript, которые использовались в проектах на Laravel, Yii2, Vue/Nuxt и React/Next. Так же было много:
- SQL,
- Sass/SCSS
- CoffeeScript
- Docker
- Bash
- немного Go и ряд других языков.

По задачам всё довольно буднично: много рутины, но нашлось и несколько интересных кейсов, которые заставили возвращаться к ним по нескольку раз.

📖 Книги

Не осталась обделённой и моя слабость - книги.

За год было прочитано почти 6 кг (5.89 кг, если точнее), что составляет 5 696 страниц или 12 книг.
По жанрам разбивка получилась такая:
- 58% - фантастика,
- 25% - фентези,
- 17% - детектив.

Конечно, хотелось бы читать больше, но кто тогда будет работать? Зато книги действительно читались, а не просто украшали полку.

Ещё я опробовал аудиокниги - формат, честно говоря, не мой. Мне бы страничками пошуршать, ощутить приятную тяжесть в руках да вдохнуть запах типографской краски. Но, возможно, для каких-то случаев, аудиоформат и пригодится. Посмотрим...

💪 Спорт

Дабы окончательно не превратиться в офисный кактус, спорт был со мной на протяжении всего года:

- 114 часов кардио - 684 км, сожжено примерно 45 600 ккал
- 156 часов силовых - 93 600 ккал в минус

До Аполлона, конечно, как до Китая на корячках...

☺️ A ещё...

- 80 285 очков заработал в "зелёной сове", провёл 3 935 минут занятий в 6 языках в течение 397 дней без перерыва;
- посетил IT-конфу за последние много лет и напомнил себе, что айти существует не только в чатах и таск-трекерах;
- накидал простенькую сцену платформера в Unity, дабы запустить немного свежего воздуха в трудовые будни;
- и начал вести этот канал - покоряем новые горизонты.

——

Всё ещё не выгорел и всё ещё интересно.
Значит, можно смело двигаться дальше - в 2026‑й!

#итоги #год_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
Лангр. Сыр, который не прочь побаловать себя игристым

Сегодня хочется рассказать об одной своей слабости - мягком сыре лангр. Захомячив очередную небольшую головку этого сыра, душа просит рассказать о нём миру. Погнали знакомиться...

Что же ты такое

Лангр (фр. Langres) - французский мягкий сыр из коровьего молока со сморщенной корочкой оранжевого цвета. Корочка обычно клейкая и немного влажная. Свой цвет корочка получает за счёт того, что во время созревания сыр протирают рассолом с добавлением оранжевого красителя из семян аннато. А ещё, у головки сыра имеется ямка в верхней части - кто-то называет её короной, а турофилы называют его "фонтаном" (уж не знаю почему 🤷‍♀️).

Головки сыра, как правило, делают небольшими - диаметром 7,5 - 9 см, высотой 4 - 6 см и весом около 150 г. На ранней стадии созревания тело сыра может быть упругим (мне такие не попадались ни разу), а с течением времени становится более сливочным и текучим (самый самолёт как по мне 😋).

Сыр обладает довольно резким запахом (о, да, в холодильнике лучше его не хранить вне закрытых ёмкостей 😫) и острым, терпким вкусом, который часто сравнивают с копчёным беконом. Говорят, что на ранних стадиях созревания ещё может присутствовать запах луговых цветов.

История и происхождение

Как и многие ремесленные сыры, сыр лангр появился на сельскохозяйственных угодьях на лангрском плато, в честь которого сыр и назван. Изначально его изготавливали фермеры, используя терракотовые ёмкости и свежее тёплое молоко коров. Согласно легенде, фермеры сушили сыр на листьях липы и раскладывали его для созревания на соломе. По некоторым данным, его происхождение восходит к династии Меровингов, правившей в 700 году нашей эры.

Первоначальную популярность сыр снискал у местных монахов, доминиканского аббатства, находящегося в городе Лангр. Один из монахов даже выдумал похвальную песню в честь этого сыра.

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

Однако, в мае 1991 года сыр лангр получил сертификат AOC (Appellation d’Origine Contrôlée), который подтверждает его происхождение и стандарты производства. С 2009 года сыр имеет статус Appellation d’Origine Protégée (защищённое обозначение происхождения).

Традиции и особенности 🍷

Характерная особенность лангра - это выемка в центре головки, которое образуется из-за того, что во время созревания сыр никогда не переворачивают в результате чего верх головки оседает. Эта особенность породила особый гастрономический обычай: перед употреблением в выемку наливают немного алкоголя: граппы или шампанского и дают сыру пропитаться. Алкоголь делает структуру сыра ещё более сливочной и подчёркивает его вкус.

Ранее в "фонтан" наливали коньяк, чтобы избавиться от мелких жучков, которые могли забиваться в морщинки корочки. Хотя сейчас сыр производится в санитарных условиях и наличие жуков исключено, традиция сохранилась. 

А ещё лангр не принято резать на кусочки, его едят ложкой.

Источники: novostioede.ru, tastingtable.com, ruwiki.ru

#внезапно #позновательно #изюм #сыр #лангр
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤩2
Читальня. Ричард Морган – Видоизменённый углерод

— Возвращение из мёртвых может быть очень мучительным —

Заметили как в последнее время посыпались новости то про лекарства от рака, то про искусственную кровь, то про увеличение средней продолжительности жизни человека, - вот и мировые лидеры в кулуарах обсуждают средний срок жизни в 150 - 170 лет. Некоторые учёные просят не помирать ближайшие 10 лет, потому что скоро наука сможет возвращать тело человека в состояние, как у 20-ти летнего. Глядишь такими темпами и на нашем веку бессмертие заработает.

А вот в мире, созданном Ричардом Морганом, бессмертие уже изобретено и доступно не только лишь всем. При наличии достаточного количества кредитов можно позволить себе прожить не одну сотню лет.

Бессмертие не тела, но разума.

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

А средства, как полагается, есть только у богатейших мира сего, а остальным достаётся что осталось, по ОМС.

На этой идее - перемещения сознания в разные тела - и построен роман.

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

События в книге развиваются с бешеным темпом: перестрелки сменяют друг друга, кровь льётся литрами, а тела разлетаются на части - здесь потеря руки или головы не всегда означает смерть, а иногда лишь временное неудобство. В минуты затишья - допросы, разговоры, виртуальная реальность, наркотики, секс и Эдгар Аллан По. Всё это описано жёстко, откровенно, красочно, брутально, но при этом удивительно увлекательно.

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

Итого: отличный бодрый, местами жестокий, детектив о будущем, в котором технологии шагнули далеко вперёд, а вот человечность - совсем не факт.

А какое отношение имеет к этой истории Эдгар Алан По я предлагаю выяснить самостоятельно.

8 "жеребцов" из 10

#книги #почитать #РичардМорган #Морган #ТакесиКовач #ВидоизменённыйУглерод #детектив #киберпанк #нуар #фантастика
👍2🔥1