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

Пройти мимо хайповой темы было невозможно 🙂

#chatgpt, #шалости
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
12 апреля 1961 года — легендарный день!

В этот день советский космонавт Юрий Гагарин совершил первый пилотируемый полёт в космическое пространство и облетел Землю за 108 минут.

А кодовая фраза «Вижу горизонт», подтверждающая успешный выход в космос, стала символом успешного старта космической эры.

И пара интересных моментов:
— Существует история, что Юрия Гагарина на борт космического корабля "Восток-1" поднимали с помощью подъёмного крана. Это было связано с конструктивными особенностями корабля и скафандра. Скафандр был достаточно громоздким, и подниматься по лестнице в таком облачении было сложно;
— Так же есть история, из разряда неподтверждённых, что когда Юрий Гагарин приземлился в районе села Смеловка Саратовской области и повстречался с аборигенами, они его испугались, так как он был в скафандре. И тогда Гагарин сказал: "Свой, ребята, свой. Из космоса прилетел!"; 🇷🇺

С праздником! 🚀

#с_праздником
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2💯1
Мамкин DevOps или CI/CD на коленке

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


tl;dr
GitLab webhook + простой серверный обработчик = автоматизированный git pull. Дёшево, сердито и без регистраций и смс.


Да, сегодня на повестке дня рутина - ручная накатка обновлений на сервер. Но и эту скучную рутину можно и нужно автоматизировать.

Речь пойдёт о максимально простом варианте CI/CD. Без GitLab Runner, Kubernetes, Jenkins и прочих инструментов взрослых и серьёзных дядек. Сегодня нам понадобятся только GitLab, webhook и небольшой серверный обработчик.

Что такое webhook
Если отбросить умные определения, webhook — это обычный HTTP-запрос по событию. Произошёл push в репозиторий — GitLab отправил запрос на указанный URL. Для наших целей webhook будет выполнять одну простую задачу — запускать обновление проекта.

Как это работает
— На сервере создаём endpoint для webhook.
— В GitLab настраиваем webhook на этот URL.
— GitLab получает push.
— GitLab отправляет POST-запрос.
— Сервер проверяет токен.
— Сервер выполняет деплой.

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

Настраиваем GitLab
В проекте открываем: Settings → Webhooks
Далее указываем:
— URL обработчика;
— Secret Token;
— событие Push Events;
— при необходимости ограничиваем веткой main.

После сохранения GitLab начнёт отправлять запросы при каждом пуше в целевую ветку.

Настраиваем сервер
На сервере потребуется обработчик, который:
— принимает только POST-запросы;
— проверяет токен;
— убеждается, что прилетел нужный branch;
— запускает обновление проекта;
— пишет лог.

В результате у нас не проект, а автономный зверь, который обновляется сам.

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

А главное — больше не придётся вспоминать, обновил ли ты этот сервер вчера или только собирался.

#cicd #devops #gitlab #webhook #deploy #разработка #backend #automation
👍3
Когда сайт опережает мысли: искусство префетчинга.

Сегодня поговорим о том как ускорить работу сайта не потратив ни копейки. Для этого внимательно почитаем документацию на тему ресурсных подсказок (resource hints).

Дёшево, сердито и эффективно. Особенно, когда поднимаем гугл-попугаев в зелёную область. 🦜

#html, #prefetch, #resource_links, #оптимизация, #frontend, #web, #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Читальня. Айзек Азимов – Я, Робот.

— О трёх законах робототехники замолвите слово —

В 2004 году вышел фильм «Я, робот» с Уиллом Смитом и фильм мне прям зашёл. После этого я решил, что такую историю я обязан прочитать. Для меня это нормально – сначала посмотреть кино, а потом почитать.

На тот момент о книге я знал несколько вещей:
– Книга написана одним из столпов фантастики;
– Автор сформулировал знаменитые три закона робототехники;
– Книга входит в золотой фонд научной фантастики;

И с этими знаниями я открыл книжку, в ожидании крутого экшона. Как же я ошибался...

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

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

А книга это прям твёрдая научная фантастика. Прям твёрже гранита!

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

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

Итого: при всём уважении к фантастам-основателям - современному человеку, на мой взгляд, книга может показаться скучной. Но если очень хочется узнать «как это было» или есть академический интерес к старой фантастике, то однозначно да! Читать!

И да - фильм 2004 года имеет к книге примерно такое же отношение, как терминатор к учебнику по кибернетике.

6 жестянок из 10.

#книги #почитать #АйзекАзимов #Азимов #ЯРобот #классика #научная #фантастика #роботы
👍2
Не самый полезный фидбэк

Просматривая сериал Зло (4-й сезон, 3-я серия), узнал о существовании такого термина как фидбэк в контексте аграрного сектора. Так как в миру фидбэк ассоциируется с получением обратной связи, то использование привычного термина да не в привычном месте задело струнки любопытства. Ну, полюбопытствуем...

Так вот, фидбэк в аграрном производстве – это практика скармливания животным останков других животных. На английском это называется meat-and-bone meal (MBM), а на русском – мясокостная мука (МКМ).

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

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

Практика использования мясокостной муки (МКМ) в разных странах регулируется по разному. После вспышки BSE в 1990-х запрет на использования MKM введён, например, в Евросоюзе, Японии, Канаде и других странах. Евросоюз, правда, в 2021 частично снял ограничения и разрешил использование MKM от свиней в кормах для птицы и наоборот, при условии отсутствия перекрестного загрязнения. А в таких странах как США и Австралия MKM разрешены для использования частично, а Вьетнам активно импортирует МКМ для использования в кормах для животных.

А что у нас на Родине?

В России использование мясокостной муки (МКМ) в кормлении животных регулируется законодательством и санитарными нормами, с акцентом на безопасность и предотвращение распространения заболеваний.

– запрещено использование МКМ, содержащей белки жвачных животных, в кормах для жвачных животных (коров, овец, коз);
– использование МКМ в кормах для нежвачных животных, таких как свиньи и птицы, разрешено при термической обработке при температуре не ниже 130°C в течение не менее 30 минут для инактивации потенциальных патогенов;
– а при производстве кормов для домашних животных, таких как кошки и собаки МКМ используется довольно широко.

Такие дела, брат.

Согласитесь, что фраза «получить фидбэк» заиграла новыми красками? 🐷

Источники: ruwiki, ФГБНУ «ФЦОБКП АПК», Своё фермерство, АгроЭксперт, wiki

#внезапно, #позновательно, #изюм, #feedback
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤓1
Спекуляции по правилам

Продолжаем тему ускорения загрузки страниц сайта, поднятую в прошлой теме.

И сегодня на повестке Speculation Rules API - эволюционное развитие prefetch и prerender.

Честно говоря, информации получилось много, а опытных результатов - мало. Пока полноценно сей вундервафель никуда применить не удалось, но, на лабораторных крысах тестовом стенде результат получился впечатляющим - субъективно скорость рендера страницы (категория товаров с фильтром) изменилась с 3-х секунд до каких-то мгновений.⚡️

Впечатляет!

#html, #prefetch, #speculation, #speculation_rules_api, #оптимизация, #frontend, #web, #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
С Днём Победы! 🇷🇺

#с_праздником
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Google Page Speed или как Google оценивает сайты

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

А было всё это для того, что бы улучшить показатели в Google Page Speed, которые называются Core Web Vitals.

Итак, Core Web Vitals от Google - это набор характеристик, которые показывают, насколько удобен для пользователя сайт. Эти показатели основываются на времени загрузки сайта, визуальной стабильности и удобстве взаимодействия с сайтом.

На текущий момент используются следующие показатели:
- FCP-метрика
- INP-метрика
- LCP-метрика
- CLS-метрика
- TTFB-метрика

Эти характеристики участвуют в качестве одного из факторов ранжирования сайта в поисковой выдаче Google и именно поэтому нужно стремиться их повысить.

Зачастую бытует мнение, что Google Page Speed показывает скорость загрузки сайта, но это не совсем так. Важно понимать, что показатели Google Page Speed отображают, насколько сайт соответствует рекомендациям Google в плане удобства пользования. Поэтому ориентироваться на показатели Google Page Speed, как на метрику скорости загрузки сайта, не корректно. Вполне может быть ситуация, что сайт может грузиться мгновенно, а количество баллов при тесте будет неудовлетворительным. Например, можно посмотреть на показатели таких сайтов как: ozon.ru, youtube.com, wb.ru и т.п.

🚨 Показатели Google Page Speed действительно играют важную роль, однако их следует воспринимать скорее как полезные рекомендации, которые помогают выявлять возможности для дальнейшего улучшения, а не как абсолютные критерии оценки производительности сайта.

Предлагаю на всё это дело посмотреть подробнее...

#google, #page, #speed, #core, #web, #vitals, #оптимизация, #frontend, #web, #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯1
Читальня. Александра Голубева – Катастеризм.

— Вы же знаете для чего нужны водители в такси? —

Надо сказать, что купился на обложку: чел с вросшей головой в стену, и камеры, следящие во все стороны – сразу представил киберпанк, власть корпораций и вот это всё. На подкорке сознания всплывают Нил Стивенсон, Ричард Морган и «Джонни Мнемоник».

Но всё мимо кассы оказалось...

Это не классическая фантастика с геперпространством, нейромантами и световыми мечами.

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

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


Это фантастика про «завтра», и в этом «завтра» правят балом: нейросети, видеонаблюдение, социальные сети и прочая знакомая нам атрибутика.

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

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

—

Итого: несмотря на, в целом, депрессивный лад и эмоциональную тяжесть происходящего, книгу к прочтению я рекомендую!

7 нейронок из 10

#книги #почитать #альфина #голубева #катастеризм #социальная #фантастика #будущее
🔥2👍1
Когда 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