TGViewer
Channel Public Channel
msavin | Backend & PHP

msavin | Backend & PHP

@msavin_php

Пишу про пыху и backend разработку. Менторю, смотри закреп
ЛС - @msavin_dev
Subscribers
794
Photos
22
Videos
1
Links
43

Showing posts older than #41 · Back to latest

Older Posts 16 shown
Post #40 1.78K
Правило для ректора, добавляющее именованные аргументы, теперь умеет убирать дефолтные значения из переданных аргументов, чтобы код был еще выразительнее, пробуйте 🙂
GitHub GitHub - savinmikhail/AddNamedArgumentsRector: Plugin to rector, that adds named arguments to your codebase Plugin to rector, that adds named arguments to your codebase - savinmikhail/AddNamedArgumentsRector
  • 🔥 10
Post #39 1.48K
Замутил бэйджик для библиотек, которые оптимизировали свой дистрибутив для скачивания конечным пользователем
Вот инструкция, как добавить его к своему репозиторию
  • 👍 6
  • ❤ 1
Post #38 1.42K
Итак, по результатам опроса 44% респондентов используют AAA pattern при тестировании
Я обычно отделяю части комментариями, хотя кто-то просто пустыми строками, но периодически сам забываю, периодически команда приносит тесты с несколькими act-assert
Поэтому запилил правило для ректора на этот счет, может и вам будет полезно
Telegram msavin Используете AAA (arrange-act-assert/given-when-then) при тестировании? да / нет / не пишу тесты
  • 🔥 4
  • ❤ 1
Post #36 1.39K
А как вы относитесь к graphql?
❤️ - мне нравится, особенно типизация на фронте
💩 - мне не нравится, особенно генерация схемы на бэке
🤔 - что это?
  • 🤔 27
  • 💩 22
  • ❤ 11
Post #35 1.81K
Написал обзор на преимущества zsh над bash, которые я нашел для себя за время использования
Буду рад услышать ваши лайфхаки на эту тему !
  • 👍 8
  • ❤ 3
  • 🤔 2
  • 🤝 1
Post #34 1.86K
Post #33 1.7K
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 😅. В обычном бэкенде и подумать смешно о таких оптимизациях, но в контексте приложений, где счет идет на миллисекунды помноженные на тысячи операций в день - это профит!
Docs Diagnosing latency issues Finding the causes of slow responses
  • 🔥 16
  • ❤ 3
  • 👏 2
Post #32 1.37K
Под предыдущим видео было много комментариев, шо вопросы слишком рандомные и поверхностные, поэтому сделал видос, где большую часть времени (35 минут) мы с интервьюером разбираем бизнес задачу

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

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

Ссылка 👇
https://youtu.be/4qV7G1tR21g
YouTube Решение бизнес задачи на собеседовании PHP 350к В этом видео показано мое техническое собеседование на Senior позицию по PHP с уклоном в Symfony В комментариях под прошлым видео вы много раз сказали, что на собеседовании вопросы были рандомные и никак не раскрывали инженера В этом видео я постарался…
  • ❤ 12
  • 👍 3
Post #31 1.32K
Post #30 1.28K
Modulith

Написал туториал по этой незамысловатой архитектуре для Symfony приложений.
Не нашел норм статей, а сам каждый раз забываю, как писать все эти конфигурационные файлы, и иду рыться в старых проектах в поисках примера 😢
Хабр Как сделать Modulith в Symfony Modulith — архитектурный стиль, при котором приложение остаётся монолитом, но код внутри разбит на модули (подпапки) по доменам. Содержание Введение Конфигурация модулей DI Routing Doctrine Утилиты и...
  • 🤮 51
  • 👎 20
  • 👍 9
  • ❤ 2
  • 😢 2
  • 💘 1
Post #29 2.16K
Export-ignore-check

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

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

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

Я прогнал топ тысячу пакетов с packagist, 470 из них могут быть оптимизированы, так шо возможно и вам пригодится
  • 👎 21
  • 👍 12
  • 🔥 5
Post #28 1.09K
AI + opensource

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

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

Сразу возникает вопрос, а чем я лучше чатгпт, я тоже списываю код у других, не очень то спрашивая лицензию :(
  • 👎 21
  • 👍 11
  • 💘 2
  • 💯 1
Post #25 1.26K
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
Post #22 1.14K
Gamethon

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

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

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

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

1 фото - одна из наших удачных башен
2 фото - одна из наших неудачных башен
3 фото - башня здорового человека
  • 🤮 49
  • 🔥 12
  • 👏 2
  • ❤ 1
  • 👍 1
  • 😁 1
Post #20 1.51K
Тестирование

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

Изначально этот материал служил моим конспектом для проведения лекций, потом я пытался сделать из этого сценарий для видео на ютуб, в итоге получилась статья 😁
  • 🔥 17
  • ❤ 2
  • 👏 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →