На днях ходил на собеседование и меня спросили почему я выбираю postgresql вместо mysql, на что я ответил следующее:
1. в постгресе есть схемы, которые позволяют лучше группировать таблицы по смыслу
2. структурные изменения (редактирование/удаление таблиц и прочее) являются транзакционными
И вроде бы всё, но для меня даже этих доводов достаточно, чтобы никогда не глядеть в сторону мускула, несмотря на его размер и быстродействие
А сегодня, работая над старым проектом проявилась ещё одна "потрясающая" особенность:
оказалось, что в мускуле существует неявное приведение типов, поэтому поиск пользователей по id со значением "834d885862330efee5e414bcda2b145b" внезапно выдал мне пользователя с id = 843
Я сначала думал это orm такое творит, потому подумал на pdo, но запрос из phpmyadmin развеял все сомнения
Да, наверняка, в конфиге или в connection string можно указать настройку, чтобы такого не происходило, но я не помню когда последний раз лазал в настройки базы, потому что из коробки всё отлично работает
О разработке, работе руками и сношении с машиной
-
PostgreSQL против MySQL на практике
-
$object::class в PHP 8
Я как-то в списке изменений php8 пропустил это, но теперь наконец-то можно делать $object::class, а не get_class($object)
https://php.watch/versions/8.0/class-constant-on-objects
-
Ночное вдохновение кодить
Такое чувство часто, когда уже засыпаю и внезапно приходит озарение — руки чешутся покодить и сон как рукой снимает

-
Транзакционная файловая система на PHP
меня всегда волновал вопрос транзакционности файловой системы: почему в базах данных поддержка есть, а в ОС нет? (ну, есть конечно, но этим надо отдельно заниматься и устанавливать)
в работе пару раз сталкивался с ситуациями, когда такой функционал был бы крайне полезен, но в итоге обходился блоками try-catch и чисткой ресурсов при ошибках
а вот около двух недель назад понял, что уже не маленький и наверное смогу сам что-то подобное в жизнь претворить
тут как раз были майские, поэтому я плотно засел за этот проект и вот что вышло: https://github.com/ddruganov/php-transactional-filesystem
в readme и тестах есть руководство по пользованию, но если кратко, то:
1. создаётся экземпляр транзакционной файловой системы
2. работаем с ней как с обычной файловой системой (есть все crud-операции)
3. по итогу зовёмcommit()(или `rollback()`)
4. готово
пакет поддерживает операции только с простыми файлами и папками, без символических ссылок
тестовые сценарии для коммита будут потихоньку добавляться по мере использования пакета, сейчас там описаны простые частые случаи
кстати, именно тут нашли применение типизированные массивы и пока работал над этим проектом, то нашёл несколько недочётов и исправил их
пошёл дальше заниматься разработкой экосистемы своих сервисов, сейчас со свежей головой можно к ним вернуться наконец-то
-
Пакет для типизированных массивов в PHP
при разработке одного из домашних проектов очень понадобились типизированные массивы
я не теряю надежду, что когда-нибудь в пхп завезут дженерики, но пока остаётся только писать какие-то заместители
поэтому, представляю вам простецкий пакет для создания типизированных массивов: https://github.com/ddruganov/php-typed-array
с композера тоже можно поставить, инструкция в репе
как говорит packagist.com, такие пакеты уже есть (у одного даже почти такая же имплементация), но мне пофиг, это был хорошая разминка для мозга на часик в выходной вечер 🙂
-
Пакет PHPVerbalExpressions
обнаружил вот такой замечательный пакет для упрощения написания регулярных выражений:
https://github.com/VerbalExpressions/PHPVerbalExpressions
в бою пока не использовал, но выглядит очень интересно
-
Комментарий про выборку из Oracle
нашёл такой замечательный комментарий в коде, который обращается к базе oracle и вытаскивает только одну страницу выборки 😀

-
Пакет yii2-api-essentials
И раз уж начал писать про свои пакеты, то вот ещё один, тоже для yii2: https://github.com/ddruganov/yii2-api-essentials
Его суть в том, что при разработке апи постоянно нужны одни и те же повторяющиеся элементы, без которых уже совсем неудобно работать и которые из раза в раз доказывают свою полезность. Среди них, кстати, есть и вышеупомянутый ExecutionResult 🙂 а так же всякие сильно недостающие исключения типа NotImplementedException.
Пакет небольшой, но пока работал над системой авторизации появилось много мыслей по доработке, потихоньку буду допиливать
-
Пакет единой авторизации для Yii2
Наконец-то закончил доделывать систему единой авторизации для всех своих текущих и будущих сервисов.
Все пакеты, которые в этом деле участвуют, написаны для yii2 на php8.1.
1. https://github.com/ddruganov/yii2-api-auth
Это основной пакет и он управляет основным сервером авторизации. На этот сервер вы отправляете пользователей логиниться/регистрироваться, а в дальнейшем на этом сервере проверяете и обновляете токены авторизации. На этот же сервер уходит запрос для выхода из аккаунта.
Так же, вся работа по определению доступа пользователей к ресурсам производится на этом же сервере через rbac. Каждое разрешение пользователя привязано к определённому приложению из заданного реестра. Кстати, сам учёт приложений в вашей сети ведётся здесь же.
2. https://github.com/ddruganov/yii2-api-auth-proxy
Этот пакет проксирует все вызовы авторизации и проверки прав на основной сервер авторизации. Здесь дублируются все экшены из первого пакета, так что при желании можно заменить один пакет другим за минимальное время не теряя в функционале.
Планируется этот пакет перенести на c#, так это будет делом простым, а пощупать разработку апи на шарпе хочется уже слишком давно.Так как я только закончил работу над пакетами, то многие моменты там оставляют желать лучшего, из самых ярких: readme, тесты и эндпоинты создания ролей/разрешений/приложений. В ближайшую неделю постараюсь с этим разобраться, пока главное, что это всё работает)
-
Скриншот бота для водоканала
А вот и сам скриншот. Почему-то в прошлом сообщение ограничение по символам не дало прикрепить
