The Dragon Code News
260 subscribers
215 photos
7 videos
4 files
237 links
Рассказываем о том, над чем работаем и что может быть полезным разработчикам 🙂

dragon-code.pro
Download Telegram
Обновил сайт 😎

Стал легче, быстрее. Со стороны кода тоже 🚀

Избавился от монструозного Vuetify 3 и решил попробовать Laravel VueJS Starter Kit. Фронтовую часть писал сам, зато роутинг подсмотрел в стартер ките. Работает отлично на первый взгляд, а там посмотрим 🙂

Также автоматизировал то, что раньше было гвоздями приколочено к vue файлам.

ЗЫ: под мобилы даже не смотрел вёрстку 😅

https://dragon-code.pro
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥5
Сегодняшней ночью в одном из проектов было создано две иссуи с таким контекстом.

НИКОГДА НЕ ПЕРЕХОДИТЕ ПО ССЫЛКАМ ИЗ НИХ даже по тем, что внизу письма находятся (скрин из почтового клиента)

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

Рекомендуемые действия в таком случае:

1. Перейти в проект на GitHub через браузер (не по ссылкам из письма);
2. Скопировать ссылку на иссую и сделать её скриншот;
3. Перейти из интерфейса GitHub в профиль отправителя;
4. Слева под фото нажать на ссылку "Block or Report", во всплывающей форме нажать "Report abuse";
5. На открывшейся странице в поле категории ввести "spam" и выбрать соответствующий пункт из предложенных;
6. В тело сообщения вставить скопированную ссылку на иссую и приложить скриншот. Подробнее можно даже не писать;
7. Отправить.

Поддержка GitHub на такие случаи довольно быстро реагирует и аккаунт отправителя будет забанен.

Также Вы можете удалить иссую из репозитория. Для этого на её странице в правой колонке нужно нажать на соответствующую ссылку.
👍61👌1
Сегодня я осознал что работаю с PHP уже 20 лет 😱

Как же быстро летит время...

HTML - ~24 года
CSS - ~24 года
JavaScript - ~22 года

И, конечно, звуковое сопровождение 😅

https://music.yandex.ru/album/26119228/track/114422104
🎉13❤‍🔥3👍2
Filament или MoonShine? Пора разобраться.

Если ты работаешь с Laravel — почти наверняка ты писал админку.
Типовой CRUD, кастомные формы, фильтры, роли, доступы...
Иногда ТЗ простое, иногда — ад.

Кто-то пишет с нуля, кто-то выбирает готовые решения: Nova, Filament, MoonShine…

Недавно на Laravel World провели опрос — и все три админки набрали почти одинаковое количество голосов.
У каждой админки есть свои сильные стороны, но в комьюнити до сих пор нет чёткого ответа, какая же админка лучше?

Давайте это исправим! CutCode устраивает баттл Laravel-админок:
MoonShine vs Filament


Я буду защищать MoonShine, а кто-то из комьюнити (один или несколько разработчиков) — Filament.

Если ты фанат Filament, уверенно разбираешься в нём, всем в чате советуешь использовать только его и не теряешься на камеру — напиши в личку.
Если есть кто-то на примете, можете тоже намекнуть мне)

Формат — прямой эфир, с реальными кейсами для честного сравнения.
Чтобы всё не закочилось потасовкой, позовём авторитетных жюри.

👀 В эфире:
💡 Часть 1 — Знакомство с админками и их философией
💡 Часть 2 — “Проблемные” задачи из жизни. Участники показывают, как справляется их админка
💡 Часть 3 — Дуэль фич: один “нападает” сильной стороной, второй парирует
💡 Часть 4 — Итоги и мнения жюри

💬 Соберем вопросы для баттла!
Чтобы баттл был не “ради шоу”, а реально полезным, мы собираем настоящие проблемы разработчиков:

— какие самые частые боли при разработке на готовых админках
— что по вашему мнению реализовать в админке сложнее всего
— что останавливает когда хотите выбрать готовую админку, и вы решаете написать свою
— что вы не смогли сделать в админке и пришлось сказать заказчику что сделать это нереально

📌 Не стесняйся, напиши в моего бота в свободной форме.
Не надо идеально формулировать — просто чтобы была понятна суть проблемы/кейса.

Telegram бот для записи вопросов на баттл админок

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

Это не интервью, не конкурс, не доклад, а полезное обсуждение!
Честный разбор “что болит” у разработчиков и как это можно реализовать.

Дату баттла выберем, когда определимся с участниками и соберем вопросы!
🔥4👍3
Для тех кто использует Laravel Octane в связке с FrankenPHP

Laravel Octane 2.9 и ниже не умеет работать с FrankenPHP 1.5 - при запуске будет возникать ошибка:

Local: https://127.0.0.1:9000

Press Ctrl+C to stop the server

WARN unable to determine directory for user configuration; falling back to current directory.
WARN HTTP/2 skipped because it requires TLS.
WARN HTTP/3 skipped because it requires TLS.
WARN $HOME environment variable is empty - please fix; some assets might be stored in ./caddy.


Временный фикс:

-php artisan octane:install --server=frankenphp -q
+curl https://github.com/dunglas/frankenphp/releases/download/v1.4.4/frankenphp-linux-x86_64 -o frankenphp


https://github.com/laravel/octane/issues/1020
👍3
50 миллионов скачиваний — это наш общий успех!

Друзья, хочу поделиться с вами замечательной новостью! Суммарно по всем моим проектам было совершено 50 миллионов скачиваний! Это невероятный результат, и я очень рад, что мои программные продукты находят такой отклик у пользователей.

Хочу выразить огромную благодарность каждому, кто использует мои разработки. Ваше доверие и поддержка вдохновляют меня на новые свершения и помогают двигаться вперёд.

Спасибо, что вы со мной! Вместе мы сможем достичь ещё больших высот!

https://dragon-code.pro
👏12👍10🔥52🫡1
2👏1🤬1
Три способа построения запроса к релейшенам в Laravel

// Вариант 1
Inventory::query()
->where('city_id', $city->id)
->where('product_id', $product->id)
->where('store_id', $store->id)
->get();

// Вариант 2
Inventory::query()
->whereCityId($city->id)
->whereProductId($product->id)
->whereStoreId($store->id)
->get();

// Вариант 3
Inventory::query()
->whereBelongsTo($city)
->whereBelongsTo($product)
->whereBelongsTo($store)
->get();


Результаты бенчмарка на 100'000 итераций с вызовом метода toRawSql() вместо get() из примера выше:

 ------- -------------------- -------------------- --------------------- 
# where(column_id) whereColumnId whereBelongsTo
------- -------------------- -------------------- ---------------------
min 0.061 ms - 0 bytes 0.067 ms - 0 bytes 0.202 ms - 0 bytes
max 2.509 ms - 2.00 MB 1.155 ms - 2.00 MB 25.029 ms - 2.00 MB
avg 0.087 ms - 0 bytes 0.096 ms - 0 bytes 0.28 ms - 0 bytes
total 23285.103 ms 24046.848 ms 42309.312 ms
------- -------------------- -------------------- ---------------------
Order - 1 - - 2 - - 3 -
------- -------------------- -------------------- ---------------------


https://laravel.com/docs/12.x/eloquent-relationships#querying-belongs-to-relationships
2
👍5🫡31
Laravel Tip 💡: Объединение конфигураций в классы

Конфигурации Laravel часто используются повторно по всей кодовой базе, что может стать болезненным для управления. Вместо этого сгруппируйте связанные конфигурации в класс для более чистого и простого обслуживания 🚀
👍32
🚀 Улучшенное взаимодействие с конфигами в Laravel

1. Создайте файл stubs/config_class.stub со следующим содержимым:

<?php

declare(strict_types=1);

namespace DummyNamespace;

class DummyClass
{
public static function hasDebug(): bool
{
return config('app.debug');
}
}


2. В корне проекта создайте файл ide.json либо добавьте объект генерации если файл уже существует:

{
"$schema": "https://laravel-ide.com/schema/laravel-ide-v2.json",
"codeGenerations": [
{
"id": "app.config.class",
"name": "Create Config Class",
"classSuffix": "Config",
"regex": ".+",
"files": [
{
"appNamespace": "Config",
"name": "${INPUT_CLASS|replace: ,_|className|upperCamelCase}.php",
"template": {
"type": "stub",
"path": "stubs/config_class.stub",
"parameters": {
"DummyNamespace": "${INPUT_FQN|namespace}",
"DummyClass": "${INPUT_CLASS|replace: ,_|className|upperCamelCase}"
}
}
}
]
}
]
}


Теперь по хоткею Laravel Idea можно легко создавать классы для конфигов.
👍4
Наглядное представление отличий при использовании дефолтных значений, назначаемых колонкам БД от назначаемых внутри Laravel модели.

Schema::create('foo', function (Blueprint $table) {
$table->boolean('is_active')->default(false);
});

return Foo::create()->is_active; // null
return Foo::first()->is_active; // false


vs

Schema::create('foo', function (Blueprint $table) {
$table->boolean('is_active')->default(false);
});

class Foo extends Model
{
protected $attributes = [
'is_active' => true,
];
}

return Foo::create()->is_active; // true
return Foo::first()->is_active; // true
👍4
Hawk - российский трекер ошибок

Может работать с Sentry SDK

https://hawk.so
https://hawk-tracker.ru/pricing.pdf
👍3🔥2
Удобный способ выгрузки приложения из памяти без открытия окна диспетчера задач в Windows 11

Для активации нужно зайти в "Параметры" - "Система" - "Для разработчиков" и активировать опцию "Завершить задачу".

После этого появится новый пункт меню при клике правой кнопкой мыши по иконке программы.
3👍2
Forwarded from Laravel World
Сегодня PHP отмечает своё 30-летие.
👏84🍾2🎉1
🧙‍♂️ Притча о свитке и кузнеце

В одном городе был мудрец, который создавал подробнейшие свитки с описанием дел. Он выписывал каждую мелочь: и где стоит камень, и как дует ветер, и в какой момент лучше всего начать путь. Свитки были ясны, как дневной свет.

Но вот кузнецы, которым предназначались эти свитки, часто бросали лишь взгляд на начало, хватали молот и бежали работать. А потом возвращались с вопросами:
— А где найти камень?
— А что за ветер сбил нас с пути?

Мудрец, устав от повторов, однажды сказал:
— Кто не читает свиток, тот рискует биться лбом об тот же камень, про который я уже трижды писал.

С тех пор в мастерской повесили табличку:
«Прежде чем ковать — прочти весь свиток. Возможно, он убережёт тебя от лишней боли и спасёт чьё-то терпение».
👍2
Позавчера Тейлор запустил новый сервис - Laravel Nightwatch.

Это сервис мониторинга работы приложения.

Краткий отзыв по истечении двух дней его использования вместе с анти-спам ботом @KvedeBot:

- Выдаёт общую информацию (есть или нет проблемы), в детали не вдаётся;
- Показывает список реально вызываемых консольных команд. Так, например, я узнал о команде php artisan schedule:finish, которая была вызвана 2'120 раз за это время... И да, эта команда также лимиты жрёт;
- Можно увидеть запросы к БД, но без самих данных - только конструкт;
- От внешних запросов виден лишь адрес без тела запроса;
- По общей статистике использования видим что из 200к бесплатных эвентов за двое суток приложение сожрало 173'596 (87%), из которых 49'009 эвентов - работа с кэшем. Да, эти cache hit, read, write и т.д. тоже считаются.

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

В целом, сервис прикольный, но на полном серьёзе на сервере его использовать ну такое.
5👍31