fa
Feedback
Хэндлим тему | Дерепко

Хэндлим тему | Дерепко

رفتن به کانال در Telegram
229
مشترکین
اطلاعاتی وجود ندارد24 ساعت
+77 روز
+1330 روز
آرشیو پست ها
Видео обзор плагина 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_topic

Repost from Авва
В мире компьютерной безопасности сегодня интересный день. Точнее, он начался вчера вечером, когда немецкий разработчик Андрес Фройнд опубликовал отчет о тайной лазейке (бэкдор), которую он обнаружил в новых версиях широко используемой библиотеки для сжатия liblzma (часть архиватора xz). Лазейка позволяет взломщикам заходить через SSH на системы, в которых установлены эти новые версии - к счастью, похоже, что это всего несколько дистрибутивов Линукса в их до-релизовых версиях. Всех очень впечатлило, насколько эта лазейка была сделана хитро, и как взломщик или взломщики серьезно поработали над тем, чтобы замести следы: - взломщик под именем/псевдонимом Jia Tan почти два года (!) участвовал в разработке опенсорсного пакета xz, завоевал доверие его мейнтейнеров и получил доступ к прямому коммиту в его репозиторию. Он сделал больше 700 коммитов, лишь малая часть которых медленно подготовила код для лазейки - основной код лазейки спрятан в тестовых файлах проекта (примеры "плохих" и "хороших" архивов) - исходный код, который включает лазейку в собственно библиотеку, вообще не является частью основной репозитории в Github. Он спрятан в тар-архивах двух последних релизов, которые обычно используются мейнтейнерами дистрибутивов. То есть есть таг релиза, есть архив, якобы собранный из репозитории в момент этого тага, но на самом деле в нем есть крохотная добавка; в самой репозитории ее нет - эта добавка прячется в конфигурационной магии autoconf, которую все ненавидят лютой ненавистью и никто никогда не заглядывает внутрь - она проверяет, когда исходники конфигурируют именно для постройки дебиан-пакета или RPM-пакета (т.е. то, что будут делать мейтейнеры дистрибутивов), и только в этом случае вынимает из тестовых файлов определенные куски и добавляет в код библиотеки - внутри библиотеки код лазейки заменяет несколько функций, которые работают с символьными таблицами библиотек во время их подгружения. Затрачены специальные усилия, чтобы имена функций не появлялись в двоичном коде. Что именно дальше делает код лазейки, до конца еще не ясно, но он обрабатывает сам символьные таблицы библиотек, и видимо находит то, что имеет отношение к SSH серверу, и что-то там заменяет. Это еще проверяют сейчас. - интересно, что openssh, стандартный SSH-сервер под линуксом, не использует библиотеку liblzma, в которую вставили эту лазейку, но несколько популярных дистрибутивов добавляют в него поддержку уведомлений системы, systemd, а библиотека libsystemd уже в свою очередь использует liblzma. - после того, как вышли версии библиотеки с ошибкой, несколько разных людей с незамеченными до того именами (очевидно, альты взломщика или сообщники) стали открывать запросы в разных программах и пакетах сделать апгрейд на эти новые версии, и в некоторых случаях преуспели Взломщик допустил только одну ошибку: код лазейки, когда он работает как часть openssh, довольно медленно обрабатывает эти символьные таблицы, или что он еще там делает, и даже неудачная попытка логина на такую систему занимает на полсекунды дольше, чем обычно. Андрес Фройнд заметил эти полсекунды задержки. Они его раздражали. Он решил найти, какой новый баг к этому приводит, и нашел эту лазейку. Если бы все происходило быстро и не было задержки в полсекунды, очень может быть, что это не заметили бы месяцы и годы, и этот код попал бы в основные дистрибутивы, в версии Линукса, которые запускаются у основных облачных провайдеров итд. Они реально очень, ОЧЕНЬ хорошо замели следы. Теперь все думают, что надо было/надо теперь делать по-другому, и как обнаружить следующую лазейку такого типа - или предыдущую, если она уже есть и никто не знает! - не опираясь на удачу и героическую занудливость Андреаса Фройнда.

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