Пятиминутка PHP
2.87K subscribers
334 photos
27 videos
827 links
Подкаст о PHP, DBA, архитектуре, DevOps. Авторское мнение о современных трендах в веб-разработке и интересные беседы с гостями. Темы про СУБД, Linux, DevOps

Автор: @petrmyazin
Download Telegram
Forwarded from Laravel Idea
ChatGpt, видимо, уже считает Laravel Idea частью шторма)
😁10
😁15😢5👍2
Forwarded from PHP умирает?!
Media is too big
VIEW IN TELEGRAM
Итоги конкурса от канала PHP умирает?!

🥈 место получает @DdStas и его вариант озвучки фильма «Властелин колец: Возвращение короля» (Питер Джексон, 2003).

Приз: месяц подписки array на Пых Boosted! Поздравляем победителя лайками!
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣28👍11😁4👏2
Вы, наверняка, слышали, что ChatGPT может составить равёрнутый текст на заданную тему. Например, подготовить Email сообщение по кратким тезисам.

Я попробовал тоже самое в PhpStorm с помощью Github Copilot. Как известно под капотом Copilot теже нейронки от Open AI, но натренинованные на коде. Впрочем, это не мешает ему писать или дополнять простой текст на английском: открываю PhpStorm -> File -> New Scratch File и получаю отличное автодополнение к простому тексту (не коду) 👆
👍11
Можно использовать GitHub Copilot прямо внутри PhpStorm даже как переводчик с русского на английский
👍12
Если вы не знаете, как корректно сделать code review, чтобы никого не обидеть, GitHub Copilot спешит на помощь!
😁34👍4
Новая бизнес-ниша: нейронка по модели SaaS заточенная под генерацию кода Laravel проектов https://smousss.com

На самом деле у них нет никакой своей нейронки, они перенаправляют запросы в OpenAI API с заранее отточенными настройками prompt, результат пишется сразу в PHP файлы на локальной машине пользователя. Удобная обёртка, чтобы не копипастить код туда-сюда вручную в/из ChatGPT.

Пока заготовлены такие сценарии:
- Convert all your tests from PHPUnit to Pest 2
- Create Laravel Nova admin panels at light speed
- Enjoy the convenience of migrations again
- Magically add missing Model Factories
- Make entire Laravel projects translatable

Пример: создание Fillament админки по классу модели
php artisan smousss:filamentize App\\Models\\Post
🤔7🔥2🥴21🤡1
Пятиминутка PHP
Новая бизнес-ниша: нейронка по модели SaaS заточенная под генерацию кода Laravel проектов https://smousss.com На самом деле у них нет никакой своей нейронки, они перенаправляют запросы в OpenAI API с заранее отточенными настройками prompt, результат пишется…
Продолжая эту идею, что по сути сделал автор smousss:
1) Подготовил набор artisan команд, которые читают локальный код (например, модели), отправляют его в облако (в сервис smousss), ответ пишут в php файлы на локальном диске
2) Где-то внутри облака smousss происходит подготовка API вызовов к OpenAI с заранее настроенными и проверенными prompts.

Это можно было бы реализовать и виде open-source пакета, который будет включать в себя:
1) Набор artisan команд (или одна команда на всё), которые читают локальный код, отправляют его напрямую в OpenAI, дополняя нужными prompts, ответ пишут в php файлы на локальном диске
2) Набор подготовленных prompts с настройками, где я мог бы локально переопределить или донастроить запросы к OpenAI (например, у меня самописный фреймворк или какие-то особенности проекта)
3) Конфиг для подстановки моего OpenAI токена

Либо всё это встроить в Laravel Idea!
Пример: нахожусь внутри класса модели, запускаю Laravel -> Code Generation -> Create Fillament / Nova resource (AI) -> код генерируется не строгим алгоритмом плагина, а через вызов к OpenAI.

Можно и более общий плагин к PhpStorm придумать: нахожусь в некоем классе, нажимаю "Refactor with AI" - получаю SOLIDный код! Правда, не факт что рабочий 😆

Кстати, рефакторинга через AI уже встроена в VS Code. Но там одна проблема - это сам VS Code 🤢
😁9💩3👍2
Небольшой пример, как Copilot помогает в ежедневной работе в мелочах. В MySQL таблице есть колонка именем и фамилией (в одной колонке, не разделено). Потребовалось вывести в обратном порядке: фамилия и имя.

Решение вроде понятное: нужно найти позицию пробела, взять строку до этой позиции, после этой позиции, склеить в обратном порядке.

Хочу сделать одним SQL запросом, но я не помню названия конкретных функций для нужных мне манипуляций со строками в MySQL, редко этим пользуюсь.

🧐 Педантичный подход: открыть документацию к MySQL по функциям работы со строками, найти нужные мне, скомпоновать. Заодно, в процессе чтения документации, освежить в памяти названия и других полезных функций.

🔎 Google + StackOverflow подход: написать запрос в Google, скорее всего первая ссылка будет на StackOverflow - для простых задачек типа этой решение обычно видно сразу и оно верное. Проверил прямо сейчас: действительно, первая ссылка на решение моей задачи, но для SQL Server. Чуть ниже для PostgreSQL. Возможно сработает, возможно нет, надо проверять. Либо вернуться на вкладку Google и попробовать вторую ссылку из результатов поиска.

🤖 Copilot подход: написать задачу в комментариях непосредсвенно в PHP коде (иногда я создаю для этого scratch файл).

Пример на скриншоте 👆

Я получил готовый ответ гораздо быстрее, чем если бы открывал барузер и копался в документации или Google/StackOverflow. Почти 10x программист 😝

p.s. оказывается в MySQL есть функция SUBSTRING_INDEX, которая совмещает в себе и поиск позиции и извлечение подстроки.
12👍6
Второй день пробую ортолинейную клавиатуру: пока тяжело идёт, много промахов (что такое ортолинейная: https://habr.com/ru/companies/dododev/articles/511664/).

💡 А пока вот что придумалось: переменные в PHP начинаются с символа $ - выходит это один из самых популярных символов при наборе PHP-кода. Почему бы не наcтроить цифровой ряд на символы по умолчанию? А если нужны цифры, то их набирать с зажатым shift. По крайней мере символ $ набираем чаще, чем цифру 4.
👍10🥰1
На Windows я использовал Total Commander для массового переименования файлов. Давно перешел на macOS и, честно говоря, не сталкивался с этой задачей до недавнего времени. И вот понадобилось переименовать много файлов по определенному алгоритму - написал PHP-скрипт 😎 (спасибо, что не bash!)

Только что обнаружил, что в macOS можно выделить несколько файлов и через контекстное меню переименовать их все! Возможности самые базовые, но стоит иметь ввиду эту функцию.
👍12😁4
Адель пишет грустную историю о трёх комитах оставшихся на сломанном устройстве, которые он не успел отправить (сделать push) (см forward сообщения ниже 👇)

Поделюсь своим опытом: все рабочие проекты находятся в папке Dropbox!

Каждая строчка кода сразу после сохранения сохранена и в облаке!

Дальше больше: не доделал какую-то работу на одном компьютере, убежал, сел за другой - все правки на месте!

Обратите внимание, я даже в git не комитил, не пушил. Потом, конечно, сделаю commit.

Переключился на одном компе на на другую ветку в git - на другом компьютере тоже переключилось.

Установил новые composer/npm зависимости - на другом автоматически появились все новые файлы в node_modules/vendor.

Dropbox - просто идеальная среда для синхронизации двух рабочих мест. Если же рабочее место всего одно, тоже может пригодиться, чтобы не попасть в ситуацию как у автора.

p.s. пробовал Яндекс Диск - задумывается на бесконечное время в попытке синхронизировать папку с исходниками.
👍15🤔5💩5🤮4
Forwarded from adelf on programming
Где-то в ноябре я решил побыть настоящим свободным художником и поработать в шезлонге у бассейна. Но судьба быстро дала понять, что всю жизнь мне суждено быть офисным или максимум домашним работником. Пацану лет 3 было скучно и он окатил мой ноут с водяного пистолета. Я успел посидеть там минуты две) Тогда с ноутом ничего не произошло, но на днях моник просто погас и все.
Отнес на ремонт - поменяют материнку, займет две недели. Там остались незапушенными 3 коммита. И я 2 дня вспоминал что в них было. Вспомнил. Восстанавливаю.
Мораль - пушьте свою работу в гит. Он в том числе и для этого создан.
😢7🐳5
Решил попробовать так называемую универсальную раскладку от Никиты Прокопова (он же nikitonsky или tonsky, не путать с Никитой Поповым): https://github.com/tonsky/Universal-Layout

В целом мотивация всех изменений сделанных в этой раскладке хорошо описана (https://tonsky.livejournal.com/318571.html), понятна. Но знак $ на букве Ж? Как теперь PHP-код писать-то?

Прямо хоть садись и делай свою раскладку здорового PHP-программиста.
😁11💩1
Пока я привыкаю к ортолинейной клавиатуре, моя скорость печати драматически мала - клавогонки показывают 50 знаков в минуту на PHP-коде, в то время как на обычной клавиатуре мой средний показатель около 300 знаков в минуту.

И теперь я начал особо ценить функцию Live Templates в PhpStorm! Раньше пользовался буквально 5 шаблонами, лень было запоминать другие, т.к. "вручную" мог напечатать очень быстро все типовые конструкции и ключевые слова. Но спустившись на отметку 50 зн/мин почувствовал на своей шкуре сильнейший профит от подстановки через Live Templates и уже накидал несколько своих шаблончиков.

Совет дня: если вы раньше пренебрегали Live Templates с мыслью "надо разбираться, запоминать, я лучше напечатаю сам" (как это делал и я), дайте им второй шанс! Это как наточить пилу перед работой.
👍24🤡4🔥3
May the 4th be with you!
11❤‍🔥3😁3
Наткнулся на полезную статью с рекомендациями по неймингу (одна из самых сложных проблем в программировании!): https://habr.com/ru/companies/dododev/articles/714512/

🧐 Из необычного для меня, выделю этот совет:

Одна переменная — одна цель. Например, вы хотите записать дату и время окончания смены и одновременно по этой же переменной понимать, закончилась ли смена. Никогда так не делайте! Только явное обозначение в другой булевой переменной. ShiftEndedAt, IsShiftEnded.

🆚 Подхожу к этому вопросу полностью противоположно: по наличию или отсутствию временнОй метки можно определить факт начала или окончания процесса.

Даже больше: бывали на практике случаи, когда изначально в системе использовался только флаг, типа IsShiftEnded, а потом мы понимали, что нужна ещё и отметка времени - в результате рефакторинга булево значение убиралось из кода и из базы в пользу метки времени.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👎42
Чтение входного дня: перевод неплохой статьи про модульные монолиты на Хабре: https://habr.com/ru/companies/dododev/articles/650721/

tldr, скопирую последний абзац:

Итог
1 Монолит — это программная система, состоящая из ровно одной единицы развёртывания.
2 Монолитная система не подразумевает некачественного дизайна и отсутствия модульности. То, что система монолитная, ничего не говорит о её качестве.
3 Модульный монолит — это способ проектирования монолитной системы с учётом модульности.
4 «Настоящий» модуль должен быть независимым, самостоятельным и иметь чётко определённый интерфейс.
👍6🤔2
🔥27😁15🤔2