msavin – Telegram
msavin
641 subscribers
21 photos
1 video
1 file
36 links
Пишу про пыху и backend разработку. Менторю, смотри закреп
ЛС - msavin_dev
Download Telegram
Git config

Попалась статья о настройке git'а, мои эмоции – 🤯. Столько болей закрылось, что настоятельно рекомендую к прочтению

Как пример приведу сортировку тегов до и после (см. скрины)
🤯3
CI/CD

Опубликовали мою большую статью на Habr. На этот раз не в песочнице, а дали инвайт (ура ура). Забавно, что я узнал об этом факте из рекомендаций гугла по хабру

В этой статье я привел конкретные примеры и советы по использованию GitLab CI/CD для PHP проектов
🔥14
msavin pinned «Welcome post Меня зовут Михаил. Я работаю тимлидом на 2-х проектах, пишу бэкенд на PHP Люблю опенсорс, контрибьютил к примеру в Docker, ClickHouse, JetBrains, Laravel и др. Мой аккаунт на ГитХаб На ютуб выкладываю записи техсобесов Топ статьи на хабре:…»
Тестирование

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

Изначально этот материал служил моим конспектом для проведения лекций, потом я пытался сделать из этого сценарий для видео на ютуб, в итоге получилась статья 😁
🔥172👏1
Gamethon

Никогда не участвовал в хакатонах, а тут решил поиграть в геймтон https://datsteam.dev/datscity

Суть была в том, чтоб за минуту построить башенку по определенным правилам из предоставленных слов. Больше 4 слов сконнектить не удалось 😢. Всего было 515 команд, 90 смогли что-то отправить, а моя команда из 2 человек заняла почетное 56 место 😁 (спасибо, @szxcvbbn)

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

Выражаю респект командам победителям

1 фото - одна из наших удачных башен
2 фото - одна из наших неудачных башен
3 фото - башня здорового человека
🤮49🔥12👏21👍1😁1
CTF

Приняли участие в CTF (capture the flag) от T-bank с @aldardeb и @tsym_tima

На данный момент мы аж на 1205 месте). Это оказалось еще сложнее, чем предыдущий gamethon😅

На выбор есть множество заданий, одно из простейших - на первом скрине. У Вас есть магазин, 100 монет, а надо купить флаг за 1337. Чуть покопавшись, нашли, что количество капитокенов передается в jwt в cookies.
Правда токен не токен - пользовательская информация в header, не указан алгоритм шифрования, тело вообще по всей видимости являлось бинарным обозначением движения средств (скрин 2)

Логично было бы подменить токен.
Сначала попробовали прописать "alg": "none" флаг, шоб обойти проверку.
Вторым вариантом было подобрать секрет из логичных вариантов (ctf, название команды, uuid команды и прочее).
Потом попробовали забрутфорсить секрет. Спустя часа 2 мы дошли только до 7-символьных секретов, что оч долго (скрин 3)
Таким образом наши идеи кончились

Я пересмотрел кучу видосов по прохождению машин, но ума мне это не прибавило)

Может кто-то из вас уже решал подобные задачи?
🤮48🔥10
AI + opensource

В opensource проектах стали появляться просьбы не использовать написанные AI PRs.

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

Сразу возникает вопрос, а чем я лучше чатгпт, я тоже списываю код у других, не очень то спрашивая лицензию :(
👎21👍11💘2💯1
Export-ignore-check

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

Но у меня лично каждый раз боль глазами сравнивать структуру файлов и содержимое .gitattributes (export-ignore директива), тем более часто случается рассинхрон, в том числе и у крупных библиотек (тот же phpstorm-stubs)

В связи с этим написал либу, которая призвана проверить, что там за архив получается из вашей библиотеки (через git archive или скачав напрямую с packagist) и найти там ненужные файлы. Она покажет вам сколько вы сэкономите кБ, вдобавок автоматически может добавить рекомендуемые изменения в ваш .gitattributes.

Я прогнал топ тысячу пакетов с packagist, 470 из них могут быть оптимизированы, так шо возможно и вам пригодится
👎21👍12🔥5
Modulith

Написал туториал по этой незамысловатой архитектуре для Symfony приложений.
Не нашел норм статей, а сам каждый раз забываю, как писать все эти конфигурационные файлы, и иду рыться в старых проектах в поисках примера 😢
🤮51👎20👍92😢2💘1
Под предыдущим видео было много комментариев, шо вопросы слишком рандомные и поверхностные, поэтому сделал видос, где большую часть времени (35 минут) мы с интервьюером разбираем бизнес задачу

Мне лично нравятся собесы, где не блиц опрос по 100 темам (как это в ВК, например), а вы решаете одну крупную задачу - будь то рефакторинг кода, system design, или проектирование, как вот здесь

Надеюсь, вам тож такой собес зайдет

Ссылка 👇
https://youtu.be/4qV7G1tR21g
12👍3
Shared Memory vs Redis: микросекунды против миллисекунд

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

Привычным решением было бы использовать Redis.
Там затраты были бы около 0.10 - 0.12 ms, если не надо открывать TCP соединение заново.
Если надо - то уже около 0.30 ms (тык тык тык).
И это если Redis стоит на локалхосте, иначе затраты могли бы вырасти до 3 порядков

Подход с разделением оперативной памяти в результате испытаний по моему бенчмарку дал 27 µs (~0.03 ms) задержки на передачу данных, что в примерно в 4 раза быстрее, чем Redis с persistent connection

В php оказалось готовое API и для семафоров, и для мьютексов, и для самой shared memory:

<?php

$key = 0xDEADBEEF;
$size = 1024;

$shm = shmop_open($key, 'c', 0666, $size);
$mutex = new SyncMutex('crypto_rate_mutex');

$mutex->lock();
shmop_write($shm, $payload, 0);
$mutex->unlock();


Есть и другие варианты IPC, но показались неподходящими

Как итог, сэкономили около 0.07 ms 😅. В обычном бэкенде и подумать смешно о таких оптимизациях, но в контексте приложений, где счет идет на миллисекунды помноженные на тысячи операций в день - это профит!
🔥163👏2
А как вы относитесь к graphql?
❤️ - мне нравится, особенно типизация на фронте
💩 - мне не нравится, особенно генерация схемы на бэке
🤔 - что это?
1🤔27💩2211