📝 Прокачиваем бекап проекта простым путём
Это продолжение предыдущего поста. Я решил сделать более интересный вариант:
- резервировать в холодный S3-бакет;
- прикрутить нотификации на телефон об ошибках и успехах резервирования;
- исправить пару недочётов из прошлой версии.
В прошлом посте можешь глянуть исходную версию скрипта. Здесь мы его скорректируем и нарастим вкусным мясом.
https://axenov.dev/?p=1272
#mysql #shell #s3 #блог #моё
👨💻 @axenov_dev 👍 @axenov_blog
Это продолжение предыдущего поста. Я решил сделать более интересный вариант:
- резервировать в холодный S3-бакет;
- прикрутить нотификации на телефон об ошибках и успехах резервирования;
- исправить пару недочётов из прошлой версии.
В прошлом посте можешь глянуть исходную версию скрипта. Здесь мы его скорректируем и нарастим вкусным мясом.
https://axenov.dev/?p=1272
#mysql #shell #s3 #блог #моё
Please open Telegram to view this post
VIEW IN TELEGRAM
Блог Аксенова
Прокачиваем бекап проекта простым путём
Photo by Pero Kalimero on Unsplash Это продолжение предыдущего поста про резервирование. Я решил сделать более интересный вариант: резервировать в холодный S3-бакет;прикрутить нотификации на телефон об ошибках и успехах резервирования;исправить пару недочётов…
👍1
Немного полезной информации об опкодах в #php.
🔹 JIT в PHP 8: Просто о сложном — коротко о том, как работает opcache, JIT-компиляция и как это включить.
🔹 How to dump and inspect PHP OPCodes — как просмотреть опкоды скриптов на примерах. Полезно в изучении подкапотного оптимизатора.
К слову: JIT-компиляция несовместима с xdebug. Кроме того, он местами довольно существенно замедляет выполнение скриптов. Поэтому на продах его ставить не следует, но следует держать это в голове даже при локальной отладке.
@axenov_dev
🔹 JIT в PHP 8: Просто о сложном — коротко о том, как работает opcache, JIT-компиляция и как это включить.
🔹 How to dump and inspect PHP OPCodes — как просмотреть опкоды скриптов на примерах. Полезно в изучении подкапотного оптимизатора.
К слову: JIT-компиляция несовместима с xdebug. Кроме того, он местами довольно существенно замедляет выполнение скриптов. Поэтому на продах его ставить не следует, но следует держать это в голове даже при локальной отладке.
@axenov_dev
YouTube
JIT в PHP 8: Просто о сложном
Привет, друзья!
В данном видео мы поговорим о JIT в PHP 8. В ходе просмотра видео вы узнаете что это такое, зачем это вообще нужно, как это включить и какую пользу с этого можно получить.
0:00 Введение
1:47 Как выполняется код на PHP?
4:14 PHP и OPCache…
В данном видео мы поговорим о JIT в PHP 8. В ходе просмотра видео вы узнаете что это такое, зачем это вообще нужно, как это включить и какую пользу с этого можно получить.
0:00 Введение
1:47 Как выполняется код на PHP?
4:14 PHP и OPCache…
👍1
Если ты при выполнении
Теоретически, также можно откатиться на <=1.1.2, но быстрого способа я пока не нашёл. Конкретно мне случайно помог мой скрипт переустановки докера, составленный по офиц. мануалу — там как раз, по сути, containerd был переустановлен и запущен сызнова, так что ошибка ушла.
На самом деле, вполне можно обойтись командой:
В любом случае, ждём релиза с фиксом.
#docker @axenov_dev
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
GitHub
[1.1] Fix failed exec after systemctl daemon-reload (regression in 1.1.3) by kolyshkin · Pull Request #3554 · opencontainers/runc
A regression reported for runc v1.1.3 says that after systemctl
daemon-reload runc exec fails:
exec failed: unable to start container process: open /dev/pts/0: operation not permitted: unknown
Ap...
daemon-reload runc exec fails:
exec failed: unable to start container process: open /dev/pts/0: operation not permitted: unknown
Ap...
👍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
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
📝 Сбросить пароль пользователя MediaWiki
Что делать, если пользователь MediaWiki потерял пароль от учётной записи и требуется восстановить доступ.
https://axenov.dev/сбросить-пароль-пользователя-mediawiki/
#блог #моё
👨💻 @axenov_dev 👍 @axenov_blog
Что делать, если пользователь MediaWiki потерял пароль от учётной записи и требуется восстановить доступ.
https://axenov.dev/сбросить-пароль-пользователя-mediawiki/
#блог #моё
Please open Telegram to view this post
VIEW IN TELEGRAM
Блог Аксенова
Сбросить пароль пользователя MediaWiki
Пользователь MediaWiki потерял пароль от учётной записи, требуется восстановить доступ. Решение 1: через скрипт обслуживания (рекомендуется) Зайти на сервер, перейти в директорию maintenance и выполнить sudo php changePassword.php --user=username --password=NEWPASS…
👍1
Спец. рубрика — "Я не умею пользоваться IDE"
Для #laravel 5.5+, помимо основной документации, на основе докблоков генерируется подробный справочник по всем классам и их методам.
https://laravel.com/api/9.x/index.html
#php @axenov_dev
Для #laravel 5.5+, помимо основной документации, на основе докблоков генерируется подробный справочник по всем классам и их методам.
https://laravel.com/api/9.x/index.html
#php @axenov_dev
😁1
Есть такой малоизвестный микрофреймворк FlightPHP.
Я решил им воспользоваться для рефакторинга iptv.axenov.dev. Нацепил твиг, обмазал коллекциями, насыпал своих хелперов с конфигами, завернул в докер и получилось годно.
Местами запаривался, потому что привыкзапариваться к некоторым (действительно удобным) фишкам #laravel и попытался по минималке их имплементировать. Потом подчищал откровенно чересчур усложнённое, а местами поклал болт.
В чистом виде, этот проект на FlightPHP мог бы уместиться в паре файлов, как и ранее, но я хотел предсказуемого порядка. (Таки приятно, когда сам строишь свой движок, не упираясь в кем-то придуманную структуру и правила.)
Роутинг, шаблонизатор какой хочешь, DI, реквесты, респонсы, мидлвари. Всё, что тебе надо — в единственном фасаде. Чего не хватает — расширил фасад через
Под капотом с лупой этот фреймворк не изучал, так что за его адекватность зуб не дам, хотя отладчиком я приходил в одно странное место. Вообще, там довольно много динамики и порой непонятно где нахрен ошибка.
Однако он довольно прост в использовании, гибок, шустр и расширябелен для небольших проектов и прототипов. Сам по себе зависимостей не тянет, самодостаточен, потихоньку развивается.
Вот как всё было плохо, и вот как всё стало прекрасно:
https://github.com/anthonyaxenov/iptv
Короче, рекомендую. Мне нравится. Хочу поверх него дописать свой framework-like boilerplate, чтобы уже на нём писать какие-нибудь небольшие проекты для души. Не везде же симфони с ларами пихать.
#моё #foss #php @axenov_dev
Я решил им воспользоваться для рефакторинга iptv.axenov.dev. Нацепил твиг, обмазал коллекциями, насыпал своих хелперов с конфигами, завернул в докер и получилось годно.
Местами запаривался, потому что привык
В чистом виде, этот проект на 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
Генератор файлов конфигурации с правилами для 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 (например,
У меня на packagist есть пакет-библиотека, это — проект, считай, чуть иной опыт, интересный. Щупайте, жду issues.
#composer #php #моё #foss @axenov_dev
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
Простая, наглядная и открытая песочница для изучения работы flex-свойств CSS
#foss #tools #js #css @axenov_dev
👍1
Написал простой скрипт для копирования файлов из одной директории в другую. Что?
Ситуация: syncthing синхронит фотки/видюхи с мобилки на комп в один конец (и создание, и удаление). Это уже хорошо, но мне постоянно приходится держать файлы на мобилке, чтобы потом на компе их скопировать всё куда надо, и только потом уже чистить мобилку. Иначе на компе тоже всё затрётся.
Довольно поздно, но всё же я решил полениться правильно: по мере появления файлов, копировать их из директории syncthing в другую. Эта другая просто будет постепенно копиться и сортироваться мной уже в любое время вручную. Это даст мне безопасно очистить место на мобилке и не потерять копии на компе.
В итоге написал простую обёртку над
В общем, если у тебя есть какой-то похожий кейс, то можешь заточить скриптик под себя:
👩💻 https://gist.github.com/anthonyaxenov/49c640dd4aaee77e8df33d6f5d2eeb0c
#foss #моё #shell @axenov_dev
Ситуация: syncthing синхронит фотки/видюхи с мобилки на комп в один конец (и создание, и удаление). Это уже хорошо, но мне постоянно приходится держать файлы на мобилке, чтобы потом на компе их скопировать всё куда надо, и только потом уже чистить мобилку. Иначе на компе тоже всё затрётся.
Довольно поздно, но всё же я решил полениться правильно: по мере появления файлов, копировать их из директории syncthing в другую. Эта другая просто будет постепенно копиться и сортироваться мной уже в любое время вручную. Это даст мне безопасно очистить место на мобилке и не потерять копии на компе.
В итоге написал простую обёртку над
inotifywait
. Он ждёт, пока наступит событие MOVED_TO
. Здесь фига в том, что syncthing при синхронизации создаёт временный скрытый файл, пишет его и потом переименовывает (перемещает) в правильное имя. Когда файл записан, событие MOVED_TO
, в отличие от многих других, гарантированно возникает лишь единожды. А чтобы игнорировать лишние файлы, я строго урезал нужные по регулярке.В общем, если у тебя есть какой-то похожий кейс, то можешь заточить скриптик под себя:
#foss #моё #shell @axenov_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Gist
[SHELL] Backup files synced from Syncthing
[SHELL] Backup files synced from Syncthing. GitHub Gist: instantly share code, notes, and snippets.
👍2
Репозиторий с материалами для изучения по разным проверенным годами технологиям. Нацелен на профи, которые хотят вкатиться во что-то новое и повысить продуктивность. Обновляется редко, охватывает прежде всего *nix операционные системы, инструменты контейнеризации, деплоя и оркестрации.
#docs #github #codecamp @axenov_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - scottslowe/learning-tools: A collection of tools and files for learning new technologies
A collection of tools and files for learning new technologies - scottslowe/learning-tools
🔥2
Утилита для получения короткой справки по командам с конкретными примерами использования. Поддерживается сообществом.
#foss #javascript #shell #docs
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему вам не нужна версия для слабовидящих
Спойлер: потому что надо сразу делать сайт доступным для многих. Отличный #доклад по фронтенду на тему доступности интерфейса.
👨💻 @axenov_dev
Спойлер: потому что надо сразу делать сайт доступным для многих. Отличный #доклад по фронтенду на тему доступности интерфейса.
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Почему вам не нужна версия для слабовидящих
Представьте, что в кафе на застолье пришел веган. Его друзья, зная это, специально выбрали кафе с отдельным меню для веганов. Но в нем только макароны с кабачками и вишневый компот, а в обычном меню...
Утилита для установки переменных окружения в зависимости от текущей директории. Более простая альтернатива:
#foss #shell
Please open Telegram to view this post
VIEW IN TELEGRAM
Написал скрипт для генерации cue-sheet к аудиофайлам, которые были скачаны через youtube-dl. Вкратце: качаешь аудио-дорожку с YT или YTM (можно моим готовым алиасом) вместе с метаинформацией, запускаешь ytdlcue с указанием аудио файла и БАМ — готовый cue оказывается рядом.
Для этого в видео должны быть метки: их можно заметить по засечкам и названиям конкретных мест на полосе перемотки (например, как здесь).
Когда я собирал инфу о том, какие вообще есть решения, их оказалось по пальцам одной руки, да и те — на питоне и js. Мне потребовались только баш и jq для парсинга json, который выкачивает youtube-dl с метаинформацией о видео.
Скрипт не учитывает некоторые мелочи, но отрабатывает очень хорошо, результат проверен.
#моё #foss #shell
Please open Telegram to view this post
VIEW IN TELEGRAM
Gist
[SHELL] CUE-sheet generator for youtube-dl
[SHELL] CUE-sheet generator for youtube-dl. GitHub Gist: instantly share code, notes, and snippets.