axenov.dev
44 subscribers
26 photos
94 links
Канал о разработке, FOSS + кросспост из блога

Навигация: https://t.iss.one/axenov_dev/11

🚀 https://t.iss.one/axenov_dev?boost
✍️ @axenov_blog — оффтоп
🤕 @anthonyaxenov
🌐 https://axenov.dev
Download Telegram
📝 Прокачиваем бекап проекта простым путём

Это продолжение предыдущего поста. Я решил сделать более интересный вариант:

- резервировать в холодный S3-бакет;
- прикрутить нотификации на телефон об ошибках и успехах резервирования;
- исправить пару недочётов из прошлой версии.

В прошлом посте можешь глянуть исходную версию скрипта. Здесь мы его скорректируем и нарастим вкусным мясом.

https://axenov.dev/?p=1272

#mysql #shell #s3 #блог #моё
👨‍💻@axenov_dev 👍@axenov_blog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Немного полезной информации об опкодах в #php.

🔹 JIT в PHP 8: Просто о сложном — коротко о том, как работает opcache, JIT-компиляция и как это включить.

🔹 How to dump and inspect PHP OPCodes — как просмотреть опкоды скриптов на примерах. Полезно в изучении подкапотного оптимизатора.

К слову: JIT-компиляция несовместима с xdebug. Кроме того, он местами довольно существенно замедляет выполнение скриптов. Поэтому на продах его ставить не следует, но следует держать это в голове даже при локальной отладке.

@axenov_dev
👍1
Большой наглядный cheat-sheet по #make

https://makefiletutorial.com

@axenov_dev
👍3
Если ты при выполнении docker exec стал часто сталкиваться с ошибкой

OCI runtime exec failed: exec failed: unable to start container process: open /dev/pts/0: operation not permitted: unknown

Значит, скорее всего, у тебя используется runc версии 1.1.3 (runc --version) с ошибкой. Она будет исправлена в runc 1.1.4, черновик релиза уже создан.

Теоретически, также можно откатиться на <=1.1.2, но быстрого способа я пока не нашёл. Конкретно мне случайно помог мой скрипт переустановки докера, составленный по офиц. мануалу — там как раз, по сути, containerd был переустановлен и запущен сызнова, так что ошибка ушла.

На самом деле, вполне можно обойтись командой:

sudo systemctl restart containerd.service

Главное, не трогать systemctl daemon-reload!

В любом случае, ждём релиза с фиксом.

#docker @axenov_dev
👍1
Рассматривая пул-реквест из прошлого поста, я обнаружил использование участниками акронимов, которые ранее не знал. Точечно прогуглив, составил небольшой список аббревиатур, которые можно встретить в обсуждении пулл-реквестов разных проектов на GitHub:

LGTM (looks good to me) — «мне нравится».

FYI (for your information) — «к вашему сведению».

PTA[C]L (please, take a [closer] look) — «посмотри, пожалуйста», требуется мнение другого участника.

ACK (acknowledgement) — подтверждение, согласованное/принятое изменение.

NACK/NAK (negative acknowledgement) — отрицательное подтверждение, несогласие с изменением и/или концепцией.

RFC (request for comments) — запрос комментариев; думаю, это хорошая идея, давайте обсудим.

WIP (work in progress) — «в работе», пока не объединять.

AFAIK/AFAICT (as far as I know/can tell) — «насколько я знаю/могу сказать».

IDK (I don't know) — я не знаю.

IIRC (if I recall correctly) — «если я правильно помню».

IANAL (I am not a lawyer) — «я не юрист», допускаю проблемы с лицензированием.

IM[H]O (in my [humble] opinion) — «по моему скромному мнению», по-моему.

В английском очень много и других акронимов, которые могут также встречаться и на ГХ, но они в целом общеупотребительны и перечислять их все здесь нет смысла. Если попадётся что-то ещё интересное, возможно, добавлю в этот пост.

#github @axenov_dev
👍1
Спец. рубрика — "Я не умею пользоваться IDE"

Для #laravel 5.5+, помимо основной документации, на основе докблоков генерируется подробный справочник по всем классам и их методам.

https://laravel.com/api/9.x/index.html

#php @axenov_dev
😁1
Есть такой малоизвестный микрофреймворк FlightPHP.

Я решил им воспользоваться для рефакторинга iptv.axenov.dev. Нацепил твиг, обмазал коллекциями, насыпал своих хелперов с конфигами, завернул в докер и получилось годно.

Местами запаривался, потому что привык запариваться к некоторым (действительно удобным) фишкам #laravel и попытался по минималке их имплементировать. Потом подчищал откровенно чересчур усложнённое, а местами поклал болт.

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

Роутинг, шаблонизатор какой хочешь, DI, реквесты, респонсы, мидлвари. Всё, что тебе надо — в единственном фасаде. Чего не хватает — расширил фасад через map()/register() и ураагша.

Под капотом с лупой этот фреймворк не изучал, так что за его адекватность зуб не дам, хотя отладчиком я приходил в одно странное место. Вообще, там довольно много динамики и порой непонятно где нахрен ошибка.

Однако он довольно прост в использовании, гибок, шустр и расширябелен для небольших проектов и прототипов. Сам по себе зависимостей не тянет, самодостаточен, потихоньку развивается.

Вот как всё было плохо, и вот как всё стало прекрасно:
https://github.com/anthonyaxenov/iptv

Короче, рекомендую. Мне нравится. Хочу поверх него дописать свой framework-like boilerplate, чтобы уже на нём писать какие-нибудь небольшие проекты для души. Не везде же симфони с ларами пихать.

#моё #foss #php @axenov_dev
🔥2
PHP Coding Standard Generator

Генератор файлов конфигурации с правилами для PHP Mess Detector (phpmd) и PHP Code Sniffer (phpcs). Выбираешь правила чекбоксами, сохраняешь полученный результат в файл phpmd.xml / phpcs.xml.

Классный помогатор, когда необходимо (на самом деле, абсолютно всегда необходимо) подключить инструмент качественного анализа кода.

#tools #php @axenov_dev
🔥1
Как и хотел, достряпал свой бойлерплейт 💃

https://packagist.org/packages/axenov/blessphp

Постарался подготовить максимально готовый минимально сложный проект, который развернул и погнал. Под капотом twig, flightphp, bootstrap 5, ionicons 6, phpunit, готовый docker-compose.yml, мультиязычность, консольный скрипт bless и коллекции от ларки.

Вообще, местами я делал BlessPHP с оглядкой на #laravel (например, bless чем-то напоминает artisan, конфиги, функции-хелперы...). Для работы с БД из коробки (пока) ничего нет, ибо это легко расширяется вручную, но у меня есть желание доработать проект под PDO и Redis через psr-совместимые пакеты. Этого там не хватает и тогда получится вполне самодостаточная связка, при этом проект сильно не разжиреет.

У меня на packagist есть пакет-библиотека, это — проект, считай, чуть иной опыт, интересный. Щупайте, жду issues.

#composer #php #моё #foss @axenov_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👏3
Flexbox Playground

Простая, наглядная и открытая песочница для изучения работы flex-свойств CSS

#foss #tools #js #css @axenov_dev
👍1
Написал простой скрипт для копирования файлов из одной директории в другую. Что?

Ситуация: syncthing синхронит фотки/видюхи с мобилки на комп в один конец (и создание, и удаление). Это уже хорошо, но мне постоянно приходится держать файлы на мобилке, чтобы потом на компе их скопировать всё куда надо, и только потом уже чистить мобилку. Иначе на компе тоже всё затрётся.

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

В итоге написал простую обёртку над inotifywait. Он ждёт, пока наступит событие MOVED_TO. Здесь фига в том, что syncthing при синхронизации создаёт временный скрытый файл, пишет его и потом переименовывает (перемещает) в правильное имя. Когда файл записан, событие MOVED_TO, в отличие от многих других, гарантированно возникает лишь единожды. А чтобы игнорировать лишние файлы, я строго урезал нужные по регулярке.

В общем, если у тебя есть какой-то похожий кейс, то можешь заточить скриптик под себя:

👩‍💻 https://gist.github.com/anthonyaxenov/49c640dd4aaee77e8df33d6f5d2eeb0c

#foss #моё #shell @axenov_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
👩‍💻 scottslowe/learning-tools

Репозиторий с материалами для изучения по разным проверенным годами технологиям. Нацелен на профи, которые хотят вкатиться во что-то новое и повысить продуктивность. Обновляется редко, охватывает прежде всего *nix операционные системы, инструменты контейнеризации, деплоя и оркестрации.

#docs #github #codecamp @axenov_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
👩‍💻 tldr.sh

Утилита для получения короткой справки по командам с конкретными примерами использования. Поддерживается сообществом.

#foss #javascript #shell #docs 👨‍💻@axenov_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 direnv.net

Утилита для установки переменных окружения в зависимости от текущей директории. Более простая альтернатива: 👩‍💻 hyperupcall/autoenv

#foss #shell 👨‍💻@axenov_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 ytdlcue.sh (mirror)

Написал скрипт для генерации cue-sheet к аудиофайлам, которые были скачаны через youtube-dl. Вкратце: качаешь аудио-дорожку с YT или YTM (можно моим готовым алиасом) вместе с метаинформацией, запускаешь ytdlcue с указанием аудио файла и БАМ — готовый cue оказывается рядом.

Для этого в видео должны быть метки: их можно заметить по засечкам и названиям конкретных мест на полосе перемотки (например, как здесь).

Когда я собирал инфу о том, какие вообще есть решения, их оказалось по пальцам одной руки, да и те — на питоне и js. Мне потребовались только баш и jq для парсинга json, который выкачивает youtube-dl с метаинформацией о видео.

Скрипт не учитывает некоторые мелочи, но отрабатывает очень хорошо, результат проверен.

#моё #foss #shell 👨‍💻@axenov_dev
Please open Telegram to view this post
VIEW IN TELEGRAM