Хэндлим тему | Дерепко
رفتن به کانال در Telegram
Discussion group @handle_topic_chat Contact with me @xepozz
نمایش بیشتر229
مشترکین
اطلاعاتی وجود ندارد24 ساعت
+77 روز
+1330 روز
آرشیو پست ها
Repost from Новости от CutCode
Видео обзор плагина MetaStorm для PHPStorm 🚀
Покажу, как работает MetaStorm и как он упрощает работу с автокомплитом в PHPStorm! Так и не дождался поддержки MoonShine в Laravel Idea, но получилось всё что хотел реализовать в MetaStorm! Сразу скажу, скорость работы с MoonShine повышает максимально!
Вы увидите:
- Примеры конфигураций MetaStorm и принцип работы
- Возможности автокомплита для иконок, полей, методов и моделей
+ Интервью с автором плагина - Дмитрием Дерепко, планы на развитие и взгляд на Open Source
https://youtu.be/pUhnl03ckEM
📌 Полезные ссылки:
MetaStorm на jetbrains - https://plugins.jetbrains.com/plugin/26121-metastorm
Обзоры от автора на Хабре:
https://habr.com/ru/articles/868898/
https://habr.com/ru/articles/872000/
GitHub репозиторий - https://github.com/xepozz/meta-storm-idea-plugin
Телеграмм канал MetaStorm @meta_storm
MetaStorm⚡️
Редизайн. Масштабируемая архитектура композитного типа. Коллекции. Коллекторы. Переменные. Таблицы. Атрибуты. Система поиска XPath. Cycle. Temporal. Moonshine.
Вот что произошло с плагином за пару недель. Серьезные обновления на основе фидбека от вас. Стало реально проще читать и писать конфиги. Новый релиз уже в проде и доступен для обновления.
Кстати, для у плагина появился свой телеграмм канал, где мы обсуждаем его полезность.
Описал все что произошло с плагином на Хабре, а парни из CutCode сделали обзор и даже взяли у меня интервью!
Ждем видос, а пока можете почитать статью и сказать стало ли понятнее 😄
Статья на Хабре
Пора уже форкать PhpStorm?
——
@handle_topic
@meta_storm
Всех с наступившим Новым 2️⃣0️⃣2️⃣5️⃣ годом 🎅
В новом году нас с вами ждут много классных проектов, тысячи нереализованных идей, куча статей, сотни крутых материалов для изучения и конечно релиз Yii3!
А плагин MetaStorm уже готов к финальной полировке рефакторинга структуры конфигов, а новые фичи уже просятся в релиз.
Остаемся на связи 👋
👍Апрувнули релиз, плагин теперь доступен, статья лежит на хабре, можно пользоваться и хейтить.
Короткий обзор возможностей:
Плагин позволяет сделать строчки чем-то большим, чем просто строковый литерал.
Например, строка может быть:
- Названием файла
- Названием свойства класса
- Названием метода
- Еще что-то?
Плагин имеет некую систему базового референса, от которого можно делать вычисления:
- Проект
- Директория
- Текущий файл
- Переменная ($var->…)
- Аргумент (method($var, …))
Описывая эти вещи самому можно сделать довольно сложные вычисления простым декларативным языком:
Подсказки для Yii2 метода
render():
<files
className="\yii\base\Controller"
methodName="render"
argumentIndex="0"
fileExt="php"
relatedTo="file"
>
<directoryProcessors>
<regexp from="Controller\.php" to=""/>
<regexp from="([a-z])([A-Z])" to="$1-$2"/>
<regexp from="/controllers/" to="/views/"/>
<regexp from="/modules/([^\\/]+)/views/" to="/themes/default/modules/$1/views/"/>
</directoryProcessors>
</files>
Подсказка метода render() в файле представления:
<files
className="\yii\base\View"
methodName="render"
argumentIndex="0"
fileExt="php"
relatedTo="directory"
/>
Подсказка мейлера:
<files
className="\yii\swiftmailer\Mailer"
methodName="compose"
argumentIndex="0"
fileExt="php"
relatedTo="project"
>
<directoryProcessors>
<append value="common/mail/" />
</directoryProcessors>
</files>
Подсказка Active Form:
<properties
className="\yii\widgets\ActiveForm"
methodName="field"
argumentIndex="1"
relatedTo="argument"
relatedArgumentIndex="0"
/>
Плагин позволяет комбинировать множество файлов конфигурации.
Можно предоставлять конфиги через библиотеки, чтобы конечные пользователи уже имели у себя весь набор подсказок.
Не делаем плагины под технологию, делаем конфиги к одному плагину.
——
Статья: https://habr.com/ru/articles/868898
Публичный репозиторий: https://github.com/xepozz/meta-storm-idea-plugin
Плагин на маркетплейсе: https://plugins.jetbrains.com/plugin/26121-meta-storm
@handle_topicКуда пропал?
#оффтоп
С середины Апреля ничего не писал, но много разного произошло.
Если перестал писать статьи и заметки, то чем дольше этого не делаешь, тем дольше будешь это откладывать. Кто занимается подобным то скорее всего меня понимает. При этом у меня в черновиках есть несколько "продакшен-реди" статей, даже это откладывалось.
Решил не делать новогодних резолюций, а взять и написать сегодня.
Буду наверстывать, вкидывать уже что-то из прошлого и делиться своими мыслями, и уже совсем скоро будет приятный бонус всем кто использует PHPStorm для разработки на PHP. Нет, не лицензия и не прокси сервер, вы уж там сами 😁
Пока готовлю статью для хабра, жду финальных апрувов, надеюсь вам понравится.
Всех с наступающим 🎄❄️☃️
Регулярные выражения! 👻
Не страшно? И не должно!
#мысли
Пару недель назад решил написать серию статей по регулярным выражениям.
Сел описывать все свои знания. Хотел очень кратко уложиться в 1-2 поста, чтобы захватить минимальный комфортный максимум, чтобы не забивать голову о рекурсиях и прочих вещах, но в то же время суметь написать регулярку для какого-нибудь DSL.
В общем, из 1-2 постов это переросло в 8 и там я еще не уложил реально сложные вещи.
Хотел сделать ежедневную серию, чтобы был какой-то фидбек от вас с решением задачек: от простых к легким. А в конце могли бы подвести итог разбором или созданием своего парсера, например, урезанной версии PHP или Python.
В общем, нужно времени дописать и поделить это как-то грамотно, но пока что выдохся.
На прошедшей недели по работе пришлось сделать пару вещей на регулярках и опять пришел к мысли о написании серии постов.
Однако вчера пришла другая идея: создать отдельный канал а-ля “5min regexp”: раз в какое-то время базово проходиться по базовым и сложным вещам, время от времени публиковать разборы задачек, интерактивы в виде выбора правильного результата и задач на размышление.
Пока не знаю, будет ли это кому-то интересно, поэтому хотел бы узнать у вас.
Что думаете, отдельный канал с интерактивами, задачками, обучалками, разборами или серия больших и жирных постов?
С новым годом!
Вчера День Космонавтики, а сегодня Новый Год в Тайланде!
Называется Songcran. Отмечают его несколько дней. В больших туристических местах просто засады с обливанием водой друг друга. У каждого уважающего себя тайца имеется мега водяная пушка. А самых хитрые берут кастрюлю и поливают тебя из ведра, а совсем ниндзя приспускают окно в машине стреляют в тебя 👍
Поехал покататься по центру и, честно говоря, купаться совсем не горел желанием. А когда облили пару раз уже и настроение поднялось, и поехал еще пару кругов навернул по центру 😂
На популярных пляжах вроде бы вообще пенные вечеринки на улицах.
Тайцы веселые и добрые. Будьте, как тайцы 😉
С днем космонавтики!
День космонавтики — отмечаемая сначала в СССР, а после в России и других странах постсоветского пространства 12 апреля дата, установленная в ознаменование первого полёта человека в космос.
SSE или стримы на PHP
#пост
SSE – Server-sent events. Стрим – потоковая передача данных в рамках одной сессии.
SSE – протокол общения сервера и клиента, когда сервер отдает информацию частично, при этом не обрывая и не завершая соединение.
Для простой реализации такого протокола потребуется:
- Добавить в HTTP Headers
Content-Type: text/event-stream
- В HTTP Body писать следующее:
- Передача сообщения начинается с data:
- Заканчивается сообщение с \n\n на конце строки
- Таких сообщений может быть неограниченное количество
- Задержка между сообщения может быть любая: секунда, минута, 30 минут, прочее
Рассмотрим несколько примеров с возможностями SSE:
- Так пишутся комментарии, с двоеточием вначале
: comment
: another comment
data: ...
- Кастомное имя события. Если не указать event, то событие будет типа message. В моем примере тип события = question с телом в виде JSON
event: question
data: {"tg_channel":"@handle_topic"}
- Событие с id. Не вижу в этом id какой-то полезности для себя.
data: text message
id: 55
- Длинные строки. Это всё еще одно событие.
data: looooooooooooooooong text
data: looooooooooooooooong text
data: looooooooooooooooong text
- А это уже два разных сообщения:
data: payload1
data: payload2
- Еще можно указать retry в milliseconds. Будет учтено при обрыве соединения и попытке восстановления. Например, 1 секунда (1000 миллисекунд).
data: ok
retry: 1000
Это довольно удобная штука, когда нужно что-то недолго* постримить пользователю:
- Прогресс бар для загрузки файлов
- Какое-то реалтайм действие
- Асинхронная операция и прочее
Реализация
Реализовать на чистом PHP довольно просто: посмотреть пример можно здесь.
Однако, мало кто пишет на чистом пхп свои бекенды. Скорее всего на бекенде используется какой-то фреймворк с ответами в виде класса Response. Либо сразу в контроллере, либо под капотом происходит трансформация возвращаемого значения в строковый ответ.
Если разбирать PSR ResponseInterface , то HTTP Body формируется через метод withBody, который принимает объект StreamInterface. Ага, вот и стримы обещанные.
Стримы
Так как задать несколько ответов с задержкой?
Раз уж наш ответ является стримом, то стрим не обязан возвращать все данные “за одно чтение”.
Поэтому можно сделать некий буфер, который будет вычитываться в методе read() . Если данных больше не будет, то достаточно поменять флаг eof и вернуть его в соответствующем методе объекта стрима.
Однако, набирать буффер и потом его сбрасывать может быть чревато разными проблемами:
- Бекенд будет думать, что клиент всё принял и обработал
- Клиент получит часть, что-то сломается, и получить остальную часть он уже не сможет
- Дополнительные затраты на память
Поэтому, можно сделать небольшой sleep() в методе чтения стрима и производить обработку следующего события только после того, как первое было успешно выдано клиенту.
Ограничения
Разберем еще несколько ограничений SSE:
- Можно стримить только body
- Хедеры нельзя менять после начала стрима
- Кодировка всегда UTF-8
Emitter фреймворка должен уметь в стримы, чтобы не выдать первый результат и закрыть стрим, либо объект стрима должен сам уметь блокироваться и чанковать данные.
Проблемы
- Сложная реализация
- Реализовывать стримминг событий на PHP при помощи SSE еще и в PSR обёртках?
- Проще подключить Mercure и настроить его.
- Протокол – пустышка
- Ни авторизации, ни разделения на каналы, ни бродкастинга
- Всё делать либо в HTTP, либо самому
- По сути в нем можно перегонять лишь текст и всё
- Это как HTTP внутри HTTP. Шутка про монитор в мониторе
- Свободные воркеры
- Свободные воркеры веб-сервера превращаются в зомби за мгновение
- Поэтому таймауты обязательны
- Либо Non-blocking I/O. Кстати, надо бы попробовать.
---
Полезные ссылки:
MDN Server-sent events
StreamInterface
HTML Standard
@handle_topicRepost from Авва
В мире компьютерной безопасности сегодня интересный день. Точнее, он начался вчера вечером, когда немецкий разработчик Андрес Фройнд опубликовал отчет о тайной лазейке (бэкдор), которую он обнаружил в новых версиях широко используемой библиотеки для сжатия liblzma (часть архиватора xz). Лазейка позволяет взломщикам заходить через SSH на системы, в которых установлены эти новые версии - к счастью, похоже, что это всего несколько дистрибутивов Линукса в их до-релизовых версиях.
Всех очень впечатлило, насколько эта лазейка была сделана хитро, и как взломщик или взломщики серьезно поработали над тем, чтобы замести следы:
- взломщик под именем/псевдонимом Jia Tan почти два года (!) участвовал в разработке опенсорсного пакета xz, завоевал доверие его мейнтейнеров и получил доступ к прямому коммиту в его репозиторию. Он сделал больше 700 коммитов, лишь малая часть которых медленно подготовила код для лазейки
- основной код лазейки спрятан в тестовых файлах проекта (примеры "плохих" и "хороших" архивов)
- исходный код, который включает лазейку в собственно библиотеку, вообще не является частью основной репозитории в Github. Он спрятан в тар-архивах двух последних релизов, которые обычно используются мейнтейнерами дистрибутивов. То есть есть таг релиза, есть архив, якобы собранный из репозитории в момент этого тага, но на самом деле в нем есть крохотная добавка; в самой репозитории ее нет
- эта добавка прячется в конфигурационной магии autoconf, которую все ненавидят лютой ненавистью и никто никогда не заглядывает внутрь
- она проверяет, когда исходники конфигурируют именно для постройки дебиан-пакета или RPM-пакета (т.е. то, что будут делать мейтейнеры дистрибутивов), и только в этом случае вынимает из тестовых файлов определенные куски и добавляет в код библиотеки
- внутри библиотеки код лазейки заменяет несколько функций, которые работают с символьными таблицами библиотек во время их подгружения. Затрачены специальные усилия, чтобы имена функций не появлялись в двоичном коде. Что именно дальше делает код лазейки, до конца еще не ясно, но он обрабатывает сам символьные таблицы библиотек, и видимо находит то, что имеет отношение к SSH серверу, и что-то там заменяет. Это еще проверяют сейчас.
- интересно, что openssh, стандартный SSH-сервер под линуксом, не использует библиотеку liblzma, в которую вставили эту лазейку, но несколько популярных дистрибутивов добавляют в него поддержку уведомлений системы, systemd, а библиотека libsystemd уже в свою очередь использует liblzma.
- после того, как вышли версии библиотеки с ошибкой, несколько разных людей с незамеченными до того именами (очевидно, альты взломщика или сообщники) стали открывать запросы в разных программах и пакетах сделать апгрейд на эти новые версии, и в некоторых случаях преуспели
Взломщик допустил только одну ошибку: код лазейки, когда он работает как часть openssh, довольно медленно обрабатывает эти символьные таблицы, или что он еще там делает, и даже неудачная попытка логина на такую систему занимает на полсекунды дольше, чем обычно. Андрес Фройнд заметил эти полсекунды задержки. Они его раздражали. Он решил найти, какой новый баг к этому приводит, и нашел эту лазейку.
Если бы все происходило быстро и не было задержки в полсекунды, очень может быть, что это не заметили бы месяцы и годы, и этот код попал бы в основные дистрибутивы, в версии Линукса, которые запускаются у основных облачных провайдеров итд. Они реально очень, ОЧЕНЬ хорошо замели следы.
Теперь все думают, что надо было/надо теперь делать по-другому, и как обнаружить следующую лазейку такого типа - или предыдущую, если она уже есть и никто не знает! - не опираясь на удачу и героическую занудливость Андреаса Фройнда.
#оффтоп
Хороший кейс, почему нужно писать свои программы быстро :)
Разбор, конечно, очень поверхностный, но сама история довольно интересная. Рекомендую к прочтению.
