Кстати, писал тут недавно, что мне и VSCode хватает для разработки…
Когда взял ноут с 16 гигами, то решил, что наверное может быть и стоит попробовать PHPStorm — в итоге подсел)
Он, конечно, далеко не такой удобный, как VSCode в плане отзывчивости и простоты интерфейса, но все возможности рефакторинга и поиска по коду дают шторму выиграть
Ещё огромный плюс шторма — автогенерация кода, больше не приходится вручную писать геттеры в моделях
Вывод: экспериментируйте с инструментами разработки, возможно, некоторые из них не зайдут с первого раза, но это не повод их бросать — вернитесь к ним через полгода-год, не мала вероятность, что вы уже доросли до их использования
Рубрика: Разработка
-
Переход на PHPStorm
-
Файловый сервер на C#
На этих выходных закончил работу над простеньким прототипом файлового сервера на c#
Далось мне это не прям так чтоб просто, но каждый шаг разработки доставлял удовольствие
В очередной раз убедился, что шарп прекрасный, простой язык, особенно учитывая все нововведения, касающиеся minimal api, из-за которого теперь веб-апи на шарпе выглядит не сильно отлично от сервера на Express + TypeScript
Так вот, к сути — мне надоели виджеты загрузки изображений, используемые на работе, которые возвращают относительные пути до изображения. Да, это просто, да, быстро, но мне вот вообще не сдалось знать какой там путь до изображения и тем более какой у него формат
Поэтому работа файлового сервера следующая: загружаешь фотку — получаешь uuid. Затем по uuid получаешь эту же фотку-оригинал, либо через get-параметры указываешь параметры для модификации
Сумасшедше простой концепт, который в итоге позволяет скрыть все детали загрузки и модификации изображений.
Из минусов — деплоить и содержать приходится на один сервис больше для каждого проекта, но заказчикам обычно вообще до лампочки, а разработчики быстро оценят простоту работы с таким отделённым сервисом. -
Обзор инструментов разработки
Ну, а теперь, собственно, было бы, наверное, странно не описать все инструменты, которые я использую:
1. Браузер — chrome
Просто потому что я слишком привык к нему и сижу на нём ещё года с 2011
2. Среда разработки — VSCode
Бытует мнение, что это и не среда разработки совсем, но плагины этот вопрос решают
3. Плагины:
3.1. Intelephense — языковой сервер для PHP
3.2. Vetur — языковой сервер для Vue
4. Tabnine — автодополнение кода с помощью искусственного интеллекта
Штука крайне полезная, потому что, хоть самым бойлерплейтным языком и считают Java, в PHP тоже хватает максимально репетативных кусков кода. Раньше у них была полная лицензия для студентов, сейчас не могу найти как её включить, но если вдруг найду — отпишусь тут. В принципе, и без лицензии работает хорошо
5. Fig — автозаполнение команд, да и вообще всевозможная помощь по работе с терминалом
6. DBeaver — для взаимодействия с базами данных
Нравится тем, что поддерживает все базы данных, с которыми я работаю.
Иногда поджирает память, но это лечится перезагрузкой. Всё-таки это гораздо лучше отдельной установки pgAdmin + MySqlWorkbench.
Есть ещё DataGrip, но он как и все продукты от JetBrains очень любит вашу ОЗУ.
7. Rider — для разработки на c#
Очень долго мучился с поддержкой шарпа в VSCode, но она так и не завелась по-нормальному, мне не подошло для полноценной разработки.
Затем была попытка поставить VisualStudio, но и там не увенчалось успехом. Вижуха конечно установилась, но там было 3 шаблона для проектов и как добавлять больше (даже те, которые должны быть по умолчанию) — непонятно; мне стало слишком лень тратить много времени на это.
А вот Rider завёлся и выдал мне все шаблоны проектов сразу же. Интерфейс это проги мне знаком достаточно хорошо, потому что я очень люблю YouTube-канал одного разработчика на шарпе (https://www.youtube.com/c/Elfocrash), а он прям топит за Rider.
8. Docker — куда без него
Сменив работу в ноябре 2021, мне пришлось часто переключаться между проектами с очень разными конфигурациями. Ставить себе это всё на ноут — проще застрелиться. Пришлось осваивать docker, а теперь уже никак без него.Вроде ничего не забыл 🤷🏼♂️
Хотелось бы сказать, что выбор инструментов для разработки в некоторых случаях обусловлен только моей ОС (Мак), вероятно, на винде или линуксе дела бы обстояли по-другому -
Апгрейд ноутбука до 16 ГБ
Когда полтора года назад выбирал себе ноут, то из арсенала утилит у меня был только VSCode, браузер и pgAdmin в этом же браузере — набор, полностью соответствовавший сложности задач и моего мышления на тот момент
Но со временем потребности стали расти, активно начал пользоваться докером, standalone-приложением для взаимодействия с базой данных, приложением для автозаполнения кода с помощью ИИ, всякие плюшки для ускорения работы в терминале и так далее, и всё это жрёт память как не в себя
Если бы я всё это знал тогда, я бы точно взял ноутбук с 16гб ОЗУ, но, к сожалению, жизненные пути неисповедимы и я полтора года довольствовался 8гб ОЗУ и свопом размером иногда в 6-7 гигов
На прошлой неделе на работе началось резкое увеличение штата, а это значит, что на меня ставится теперь больше задач, как по разработке, так теперь и по менеджменту, и успевать это всё надо в те же 8 часов, что и раньше
В связи с этим всем наконец-то поменял ноут на такой же, но на 16 гигов. Придя домой поставил вообще всё что только в голову пришло и о чудо — у меня осталась свободная память и своп = 0
Мораль: берите машину для разработки с запасом, даже если вы думаете, что в приниципе и так сойдёт. Я следующий ноут точно буду брать с дичайшим запасом — 64 ОЗУ и 2ТБ хранилища минимум, чтобы наверняка 😀 хотя, пожалуй, к тому моменту как я приду к этому решению это уже будет стандартом -
PostgreSQL против MySQL на практике
На днях ходил на собеседование и меня спросили почему я выбираю postgresql вместо mysql, на что я ответил следующее:
1. в постгресе есть схемы, которые позволяют лучше группировать таблицы по смыслу
2. структурные изменения (редактирование/удаление таблиц и прочее) являются транзакционными
И вроде бы всё, но для меня даже этих доводов достаточно, чтобы никогда не глядеть в сторону мускула, несмотря на его размер и быстродействие
А сегодня, работая над старым проектом проявилась ещё одна "потрясающая" особенность:
оказалось, что в мускуле существует неявное приведение типов, поэтому поиск пользователей по id со значением "834d885862330efee5e414bcda2b145b" внезапно выдал мне пользователя с id = 843
Я сначала думал это orm такое творит, потому подумал на pdo, но запрос из phpmyadmin развеял все сомнения
Да, наверняка, в конфиге или в connection string можно указать настройку, чтобы такого не происходило, но я не помню когда последний раз лазал в настройки базы, потому что из коробки всё отлично работает -
$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
в бою пока не использовал, но выглядит очень интересно