Мой набор команд для обновления контейнера WSL в Windows
Конечно, кроме этого нужно также создать ssh ключ, запретить парольную аутентификацию и закрыть снаружи все порты кроме 80 и 443 для начала.
wsl --install -d Ubuntu-24.04
wsl --set-default -d Ubuntu-24.04
wsl --unregister -d Ubuntu-22.04
wsl --update
wsl
sudo su
apt update && apt upgrade -y
apt install -y lsb-release ca-certificates apt-transport-https software-properties-common postgresql-client imagemagick
add-apt-repository ppa:ondrej/php
apt update && apt install -y php8.4 php8.4-curl php8.4-mbstring php8.4-xml php8.4-zip php8.4-bcmath php8.4-intl php8.4-readline php8.4-redis php8.4-sqlite3 php8.4-opcache php8.4-pdo php8.4-mysql php8.4-pgsql php8.4-imagick
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php && php -r "unlink('composer-setup.php');" && mv composer.phar /usr/local/bin/composer
composer global require ergebnis/composer-normalize
apt update && apt upgrade -y && apt autoremove --purge -y && apt autoclean -y && apt clean -y
Конечно, кроме этого нужно также создать ssh ключ, запретить парольную аутентификацию и закрыть снаружи все порты кроме 80 и 443 для начала.
👍6❤4🔥2🤔2
Laravel-Zero - это микро-фреймворк для консольных приложений на базе Laravel Framework, позволяющий легко и быстро разрабатывать функционал работающий без веба. Но инициатором этой статьи стал кейс при использовании Laravel Prompts с несколькими часами потраченного времени.
Для экономии Вашего времени при столкновении с этой ошибкой или вовсе преждевременным её устранением, добро пожаловать в пост:
https://habr.com/ru/articles/892010/
Для экономии Вашего времени при столкновении с этой ошибкой или вовсе преждевременным её устранением, добро пожаловать в пост:
https://habr.com/ru/articles/892010/
50🔥4👍2
Laravel-Lang: 6 миллионов скачиваний — присоединяйтесь к успешным проектам!
🎉 Наш проект Laravel-Lang: Lang достиг важной вехи — 6 миллионов скачиваний на Packagist! 🎉
С момента своего перехода в 2020 году из местечкового
Почему выбирают Laravel-Lang?
- Простота использования.
- Регулярные обновления.
- Поддержка большого и дружного сообщества.
Не упустите возможность локализовать свои проекты с помощью Laravel-Lang. Присоединяйтесь к нам и убедитесь, насколько легко и удобно работать с нашим продуктом!
👉 Посетите наш сайт и узнайте больше: https://laravel-lang.com
🎉 Наш проект Laravel-Lang: Lang достиг важной вехи — 6 миллионов скачиваний на Packagist! 🎉
С момента своего перехода в 2020 году из местечкового
caouecs/laravel-lang, проект вырос до 24 репозиториев и объединил 32 талантливых специалиста. Мы гордимся тем, что наше решение помогает тысячам разработчиков по всему миру.Почему выбирают Laravel-Lang?
- Простота использования.
- Регулярные обновления.
- Поддержка большого и дружного сообщества.
Не упустите возможность локализовать свои проекты с помощью Laravel-Lang. Присоединяйтесь к нам и убедитесь, насколько легко и удобно работать с нашим продуктом!
👉 Посетите наш сайт и узнайте больше: https://laravel-lang.com
Laravel Lang Help
Lang | Laravel Lang
Translations for Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova and Laravel UI.
❤7🎉1
Коротко о том как работает метод "Cache::flexible()" в Laravel
Метод
Например, какой-то код выполняется 10 секунд. Таким образом, первый запросивший будет ждать 10 секунд прежде чем получит ответ в случае отсутствия кэшированных данных.
Именно эту проблему и призван решить метод "Cache::flexible()".
Вторым параметром метода указывается массив из двух значений, например,
- 600 - это то самое время (TTL) жизни кэша в целом;
- 480 - время, через которое ключ можно считать устаревающим.
В данном примере мы запоминаем значение сроком на 10 минут, а устаревшими данными считаются по истечении 8-ми минут.
Что это значит и как это работает? А работает это довольно просто благодаря функционала Concurrency, работающим с процессами PHP без блокировки ответа.
Другими словами, кэш живёт 10 минут и при постоянном обращении к нему в ответ будет всегда выводиться результат кэширования. В итоге получаем отсутствие ожидания времени выполнения в 10 секунд при "протухшем" кэше ибо протухание "самоустраняется", так сказать.
Допустим, результат запрашивается каждую минуту. При самом первом запросе пользователь будет ждать 10 секунд пока выполнятся какие-то действия, после чего результат будет записан в кэш. При ежеминутных запросах
Вот и получаем что при постоянных запросах код становится, так сказать, "самопрогреваемым".
Если прямо "на пальцах", то при вызове
При повторном вызове метода проверяется наличие того самого второго ключа и, пока он жив, данные считаются актуальными.
Как только тот второй пропадает, запускается функция механизм Concurrency, создающий фоновый процесс для обновления данных, а ответ из запроса по-прежнему возвращается из кэша.
Фоновый процесс, закончив выполнение, кладёт свежие данные в кэш и создаёт новый вспомогательный ключ сроком на 480 секунд.
И так по кругу.
Минус у этого способа один - если эти данные будут запрашиваться, скажем, раз в 20 минут, тогда при каждом запросе нужно будет ожидать 10 секунд, так как в кэше этих данных уже не будет. Решить эту проблему можно двумя способами в зависимости от нужд приложения - либо создать крон-команду с "прогревом", т.е. когда команда раз в N времени будет просто запрашивать этот механизм, таким образом создавая прецендент на срабатывание, либо увеличить срок жизни кэша.
https://laravel.com/docs/12.x/cache#swr
Метод
Cache::remember "запоминает" данные на определённый промежуток времени, по истечении которого, следующий за ним запрос будет вынужден ожидать вычислений с последующей записью в кэш.Например, какой-то код выполняется 10 секунд. Таким образом, первый запросивший будет ждать 10 секунд прежде чем получит ответ в случае отсутствия кэшированных данных.
Именно эту проблему и призван решить метод "Cache::flexible()".
Вторым параметром метода указывается массив из двух значений, например,
[480, 600], где:- 600 - это то самое время (TTL) жизни кэша в целом;
- 480 - время, через которое ключ можно считать устаревающим.
В данном примере мы запоминаем значение сроком на 10 минут, а устаревшими данными считаются по истечении 8-ми минут.
Что это значит и как это работает? А работает это довольно просто благодаря функционала Concurrency, работающим с процессами PHP без блокировки ответа.
Другими словами, кэш живёт 10 минут и при постоянном обращении к нему в ответ будет всегда выводиться результат кэширования. В итоге получаем отсутствие ожидания времени выполнения в 10 секунд при "протухшем" кэше ибо протухание "самоустраняется", так сказать.
Допустим, результат запрашивается каждую минуту. При самом первом запросе пользователь будет ждать 10 секунд пока выполнятся какие-то действия, после чего результат будет записан в кэш. При ежеминутных запросах
Cache::flexible() "увидит" что наступило время истечения срока годности токена и создаёт не блокирующий процесс на его обновление. Таким образом, при запросе на 9-й минуте пользователь всё также быстро получит результат кэша потому как он был записан, а фоновый процесс выполнит то самое действие и обновит этот самый кэш.Вот и получаем что при постоянных запросах код становится, так сказать, "самопрогреваемым".
Если прямо "на пальцах", то при вызове
Cache::flexible() создаётся два ключа - один с данными на 600 секунд, а второй на 480 как метка времени.При повторном вызове метода проверяется наличие того самого второго ключа и, пока он жив, данные считаются актуальными.
Как только тот второй пропадает, запускается функция механизм Concurrency, создающий фоновый процесс для обновления данных, а ответ из запроса по-прежнему возвращается из кэша.
Фоновый процесс, закончив выполнение, кладёт свежие данные в кэш и создаёт новый вспомогательный ключ сроком на 480 секунд.
И так по кругу.
Минус у этого способа один - если эти данные будут запрашиваться, скажем, раз в 20 минут, тогда при каждом запросе нужно будет ожидать 10 секунд, так как в кэше этих данных уже не будет. Решить эту проблему можно двумя способами в зависимости от нужд приложения - либо создать крон-команду с "прогревом", т.е. когда команда раз в N времени будет просто запрашивать этот механизм, таким образом создавая прецендент на срабатывание, либо увеличить срок жизни кэша.
https://laravel.com/docs/12.x/cache#swr
👍4🔥4
Forwarded from AI News | Нейросети
Синий «экран смерти» УМЕР: Microsoft перекрасили культовый экран. Теперь при ошибке будет виднеться плашка с зелёным или чёрным фоном.
Самый ор это причина апдейта — страх нового поколения юзеров, которые впервые сталкиваются с «экраном смерти». По этой причине убрали QR-код и смайлик.
Ушла эпоха🫡
● GPT News | ChatGPT BOT
Самый ор это причина апдейта — страх нового поколения юзеров, которые впервые сталкиваются с «экраном смерти». По этой причине убрали QR-код и смайлик.
Ушла эпоха
● GPT News | ChatGPT BOT
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😢2😭1👻1
Помощник деплоя был переработан и улучшен. Новая версия включает в себя следующие изменения:
- Добавлена строгая типизация во всех файлах;
- Добавлен новый хелпер OperationHelper для быстрого вызова операций;
- Добавлена интеграция с миграциями (вызов любых операций при выполнении любой миграции);
- Документация была переписана на Writerside;
- Удалили лишние и перегруженные свойства и методы;
- Прекращена поддержка Laravel 10
- Удалены консольные команды
operations:refresh, operations:reset и operations:upgradeИ другие изменения, список которых можно найти на странице релиза.
Апгрейд гайд доступен в документации: https://deploy-operations.dragon-code.pro/upgrade-7.html
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Release 7.0.0 · TheDragonCode/laravel-deploy-operations
Added
A strict typification has been added by @andrey-helldar in #191
Added OperationHelper by @andrey-helldar in #205
Added withOperation method to migrations by @andrey-helldar in #200
Added imp...
A strict typification has been added by @andrey-helldar in #191
Added OperationHelper by @andrey-helldar in #205
Added withOperation method to migrations by @andrey-helldar in #200
Added imp...
🔥6👍1
Обновил сайт 😎
Стал легче, быстрее. Со стороны кода тоже🚀
Избавился от монструозного Vuetify 3 и решил попробовать Laravel VueJS Starter Kit. Фронтовую часть писал сам, зато роутинг подсмотрел в стартер ките. Работает отлично на первый взгляд, а там посмотрим 🙂
Также автоматизировал то, что раньше было гвоздями приколочено к vue файлам.
ЗЫ: под мобилы даже не смотрел вёрстку 😅
https://dragon-code.pro
Стал легче, быстрее. Со стороны кода тоже
Избавился от монструозного 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 на такие случаи довольно быстро реагирует и аккаунт отправителя будет забанен.
Также Вы можете удалить иссую из репозитория. Для этого на её странице в правой колонке нужно нажать на соответствующую ссылку.
НИКОГДА НЕ ПЕРЕХОДИТЕ ПО ССЫЛКАМ ИЗ НИХ даже по тем, что внизу письма находятся (скрин из почтового клиента)
О том что это именно иссуя, я узнал зайдя в сам репозиторий проекта на GitHub и увидел его. В теле письма нижние ссылки на гитхаб оказались настоящие, а вот все остальные - фишинговые.
Рекомендуемые действия в таком случае:
1. Перейти в проект на GitHub через браузер (не по ссылкам из письма);
2. Скопировать ссылку на иссую и сделать её скриншот;
3. Перейти из интерфейса GitHub в профиль отправителя;
4. Слева под фото нажать на ссылку "Block or Report", во всплывающей форме нажать "Report abuse";
5. На открывшейся странице в поле категории ввести "spam" и выбрать соответствующий пункт из предложенных;
6. В тело сообщения вставить скопированную ссылку на иссую и приложить скриншот. Подробнее можно даже не писать;
7. Отправить.
Поддержка GitHub на такие случаи довольно быстро реагирует и аккаунт отправителя будет забанен.
Также Вы можете удалить иссую из репозитория. Для этого на её странице в правой колонке нужно нажать на соответствующую ссылку.
👍6❤1👌1
Сегодня я осознал что работаю с PHP уже 20 лет 😱
Как же быстро летит время...
HTML - ~24 года
CSS - ~24 года
JavaScript - ~22 года
И, конечно, звуковое сопровождение 😅
https://music.yandex.ru/album/26119228/track/114422104
Как же быстро летит время...
HTML - ~24 года
CSS - ~24 года
JavaScript - ~22 года
И, конечно, звуковое сопровождение 😅
https://music.yandex.ru/album/26119228/track/114422104
🎉13❤🔥3👍2
Forwarded from Новости от CutCode
Filament или MoonShine? Пора разобраться.
Если ты работаешь с Laravel — почти наверняка ты писал админку.
Типовой CRUD, кастомные формы, фильтры, роли, доступы...
Иногда ТЗ простое, иногда — ад.
Кто-то пишет с нуля, кто-то выбирает готовые решения: Nova, Filament, MoonShine…
Недавно на Laravel World провели опрос — и все три админки набрали почти одинаковое количество голосов.
У каждой админки есть свои сильные стороны, но в комьюнити до сих пор нет чёткого ответа, какая же админка лучше?
Давайте это исправим! CutCode устраивает баттл Laravel-админок:
MoonShine vs Filament
Я буду защищать MoonShine, а кто-то из комьюнити (один или несколько разработчиков) — Filament.
Если ты фанат Filament, уверенно разбираешься в нём, всем в чате советуешь использовать только его и не теряешься на камеру — напиши в личку.
Если есть кто-то на примете, можете тоже намекнуть мне)
Формат — прямой эфир, с реальными кейсами для честного сравнения.
Чтобы всё не закочилось потасовкой, позовём авторитетных жюри.
👀 В эфире:
💡 Часть 1 — Знакомство с админками и их философией
💡 Часть 2 — “Проблемные” задачи из жизни. Участники показывают, как справляется их админка
💡 Часть 3 — Дуэль фич: один “нападает” сильной стороной, второй парирует
💡 Часть 4 — Итоги и мнения жюри
💬 Соберем вопросы для баттла!
Чтобы баттл был не “ради шоу”, а реально полезным, мы собираем настоящие проблемы разработчиков:
— какие самые частые боли при разработке на готовых админках
— что по вашему мнению реализовать в админке сложнее всего
— что останавливает когда хотите выбрать готовую админку, и вы решаете написать свою
— что вы не смогли сделать в админке и пришлось сказать заказчику что сделать это нереально
📌 Не стесняйся, напиши в моего бота в свободной форме.
Не надо идеально формулировать — просто чтобы была понятна суть проблемы/кейса.
Telegram бот для записи вопросов на баттл админок
Почему стоит скинуть свой кейс?
Мы разберём его в прямом эфире.
Ты узнаешь, как бы это сделали с другой админкой.
Возможно, найдётся решение проще, чем ты думал.
Это не интервью, не конкурс, не доклад, а полезное обсуждение!
Честный разбор “что болит” у разработчиков и как это можно реализовать.
Дату баттла выберем, когда определимся с участниками и соберем вопросы!
Если ты работаешь с Laravel — почти наверняка ты писал админку.
Типовой CRUD, кастомные формы, фильтры, роли, доступы...
Иногда ТЗ простое, иногда — ад.
Кто-то пишет с нуля, кто-то выбирает готовые решения: Nova, Filament, MoonShine…
Недавно на Laravel World провели опрос — и все три админки набрали почти одинаковое количество голосов.
У каждой админки есть свои сильные стороны, но в комьюнити до сих пор нет чёткого ответа, какая же админка лучше?
Давайте это исправим! CutCode устраивает баттл Laravel-админок:
MoonShine vs Filament
Я буду защищать MoonShine, а кто-то из комьюнити (один или несколько разработчиков) — Filament.
Если ты фанат Filament, уверенно разбираешься в нём, всем в чате советуешь использовать только его и не теряешься на камеру — напиши в личку.
Если есть кто-то на примете, можете тоже намекнуть мне)
Формат — прямой эфир, с реальными кейсами для честного сравнения.
Чтобы всё не закочилось потасовкой, позовём авторитетных жюри.
👀 В эфире:
💡 Часть 1 — Знакомство с админками и их философией
💡 Часть 2 — “Проблемные” задачи из жизни. Участники показывают, как справляется их админка
💡 Часть 3 — Дуэль фич: один “нападает” сильной стороной, второй парирует
💡 Часть 4 — Итоги и мнения жюри
💬 Соберем вопросы для баттла!
Чтобы баттл был не “ради шоу”, а реально полезным, мы собираем настоящие проблемы разработчиков:
— какие самые частые боли при разработке на готовых админках
— что по вашему мнению реализовать в админке сложнее всего
— что останавливает когда хотите выбрать готовую админку, и вы решаете написать свою
— что вы не смогли сделать в админке и пришлось сказать заказчику что сделать это нереально
📌 Не стесняйся, напиши в моего бота в свободной форме.
Не надо идеально формулировать — просто чтобы была понятна суть проблемы/кейса.
Telegram бот для записи вопросов на баттл админок
Почему стоит скинуть свой кейс?
Мы разберём его в прямом эфире.
Ты узнаешь, как бы это сделали с другой админкой.
Возможно, найдётся решение проще, чем ты думал.
Это не интервью, не конкурс, не доклад, а полезное обсуждение!
Честный разбор “что болит” у разработчиков и как это можно реализовать.
Дату баттла выберем, когда определимся с участниками и соберем вопросы!
Telegram
Laravel World
Подведем итоги опроса о лучшей админке для Laravel. Проголосовало более двух с половиной тысяч человек, но однозначного лидера мы не выявили. Первая тройка идёт очень плотной группой, набрав по ~16% каждая. Тем не менее, по набранным голосам побеждает
FILAMENT…
FILAMENT…
🔥4👍3
Для тех кто использует Laravel Octane в связке с FrankenPHP
Laravel Octane 2.9 и ниже не умеет работать с FrankenPHP 1.5 - при запуске будет возникать ошибка:
Временный фикс:
https://github.com/laravel/octane/issues/1020
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
GitHub
$HOME environment variable is empty · Issue #1020 · laravel/octane
Octane Version 2.9.0 Laravel Version 12.8.1 PHP Version 8.4.6 What server type are you using? FrankenPHP Server Version 1.5.0 Database Driver & Version Postgres 17 Description When downloading ...
👍3
50 миллионов скачиваний — это наш общий успех!
Друзья, хочу поделиться с вами замечательной новостью! Суммарно по всем моим проектам было совершено 50 миллионов скачиваний! Это невероятный результат, и я очень рад, что мои программные продукты находят такой отклик у пользователей.
Хочу выразить огромную благодарность каждому, кто использует мои разработки. Ваше доверие и поддержка вдохновляют меня на новые свершения и помогают двигаться вперёд.
Спасибо, что вы со мной! Вместе мы сможем достичь ещё больших высот!
https://dragon-code.pro
Друзья, хочу поделиться с вами замечательной новостью! Суммарно по всем моим проектам было совершено 50 миллионов скачиваний! Это невероятный результат, и я очень рад, что мои программные продукты находят такой отклик у пользователей.
Хочу выразить огромную благодарность каждому, кто использует мои разработки. Ваше доверие и поддержка вдохновляют меня на новые свершения и помогают двигаться вперёд.
Спасибо, что вы со мной! Вместе мы сможем достичь ещё больших высот!
https://dragon-code.pro
👏12👍10🔥5❤2🫡1
Три способа построения запроса к релейшенам в Laravel
Результаты бенчмарка на 100'000 итераций с вызовом метода
https://laravel.com/docs/12.x/eloquent-relationships#querying-belongs-to-relationships
// Вариант 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
Laravel
Eloquent: Relationships | Laravel 12.x - The clean stack for Artisans and agents
Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing you to create without sweating the small things.
❤2