В Angular 22 появился интересный способ подключить ИИ-агентов напрямую к процессу разработки.
Достаточно добавить в корень проекта файл
Сервер Angular CLI MCP пока находится в экспериментальном статусе.
После подключения агенты вроде Claude Code получают доступ к инструментам Angular CLI и могут:
- запускать dev-сервер Angular
- останавливать dev-сервер
- выполнять команды Angular CLI
- ждать завершения сборки
По сути агент становится участником цикла разработки:
То есть агент может самостоятельно проходить через типичный workflow разработки вместо того, чтобы после каждого шага ждать следующую команду от разработчика.
@WebDev_Plus
Достаточно добавить в корень проекта файл
.mcp.json:{
"mcpServers": {
"angular-cli": {
"command": "npx",
"args": [
"-y",
"@angular/cli",
"mcp",
"--experimental-tool",
"devserver"
]
}
}
}Сервер Angular CLI MCP пока находится в экспериментальном статусе.
После подключения агенты вроде Claude Code получают доступ к инструментам Angular CLI и могут:
- запускать dev-сервер Angular
- останавливать dev-сервер
- выполнять команды Angular CLI
- ждать завершения сборки
По сути агент становится участником цикла разработки:
внести изменения
собрать проект
обнаружить ошибки
исправить ошибки
повторить цикл
То есть агент может самостоятельно проходить через типичный workflow разработки вместо того, чтобы после каждого шага ждать следующую команду от разработчика.
@WebDev_Plus
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Совет по дизайн-инжиринг:
Отделяйте объект от его тени.
Когда элемент приподнимается над поверхностью, тень не обязана двигаться вместе с ним. Если оставить тень на месте и постепенно уменьшать её интенсивность по мере удаления объекта, можно добиться более убедительного ощущения глубины и физичности.
При аккуратном использовании этот приём делает интерфейс более осязаемым и помогает избежать ощущения, будто перед пользователем просто набор слоёв, парящих в воздухе.
Я бы не применял это повсюду, но в местах, где нужен дополнительный акцент, эффект может оказаться очень выразительным.
@WebDev_Plus
Отделяйте объект от его тени.
Когда элемент приподнимается над поверхностью, тень не обязана двигаться вместе с ним. Если оставить тень на месте и постепенно уменьшать её интенсивность по мере удаления объекта, можно добиться более убедительного ощущения глубины и физичности.
При аккуратном использовании этот приём делает интерфейс более осязаемым и помогает избежать ощущения, будто перед пользователем просто набор слоёв, парящих в воздухе.
Я бы не применял это повсюду, но в местах, где нужен дополнительный акцент, эффект может оказаться очень выразительным.
const card = document.querySelector(".notification");
const shadow = document.querySelector(".shadow");
card.animate(
[
{ transform: "translateY(0)" },
{ transform: "translateY(-160px)" },
],
{
duration: 900,
easing: "cubic-bezier(.64,0,.78,0)"
}
);
shadow.animate(
[
{ opacity: 0.5, transform: "scaleX(1)" },
{ opacity: 0, transform: "scaleX(.35)" },
],
{
duration: 700,
easing: "ease-out"
}
);@WebDev_Plus
Вышел Chrome 149 DevTools.
Что нового:
- Agent Walkthrough и Copy to Coding Agent в AI Assistance
- Автодополнение CSS на базе Gemini прямо во вкладке Styles
- Инструменты для отладки WebMCP в панели Application
- DevTools for Agents 1.0 с поддержкой пользовательских инструментов
Похоже, DevTools всё активнее адаптируют под агентный сценарий работы.
Теперь браузерные инструменты помогают не только разработчику, но и ИИ-агенту: можно передавать контекст, подключать инструменты, отлаживать MCP-интеграции и ускорять цикл «изменил → проверил → исправил».
Подробнее:
https://goo.gle/4v55cVT
@WebDev_Plus
Что нового:
- Agent Walkthrough и Copy to Coding Agent в AI Assistance
- Автодополнение CSS на базе Gemini прямо во вкладке Styles
- Инструменты для отладки WebMCP в панели Application
- DevTools for Agents 1.0 с поддержкой пользовательских инструментов
Похоже, DevTools всё активнее адаптируют под агентный сценарий работы.
Теперь браузерные инструменты помогают не только разработчику, но и ИИ-агенту: можно передавать контекст, подключать инструменты, отлаживать MCP-интеграции и ускорять цикл «изменил → проверил → исправил».
Подробнее:
https://goo.gle/4v55cVT
@WebDev_Plus
Лето начинается: водные развлечения, гриль на острове и новые маршруты в бутик-отеле «Заонежье»
Для гостей бутик-отеля «Заонежье» к новому сезону подготовлены лесные трассы для первых заездов на новых квадроциклах — они позволяют исследовать дикие уголки карельской тайги и скалистые берега озер. Велопрогулки по дорогам Заонежья стали еще комфортнее благодаря электробайкам, которые этой весной пополнили велопарк отеля.
В мае, в отеле открылся сезон водных развлечений: гостям доступны сапы, каяки и весельные лодки. В этом году пользование ими - комплементарное для всех гостей. Также появились новые маршруты для катеров по заливам Онежского озера.
Ресторан «Руна» представляет летнюю серию гриль-сетов, которые можно приготовить самостоятельно на одном из необитаемых островов или устроить барбекю на лужайке у дома. В меню — овощные и рыбные сеты, а также мясное ассорти.
Бутик-отель «Заонежье» приглашает к активному отдыху среди озер и северной природы Карелии.
Для гостей бутик-отеля «Заонежье» к новому сезону подготовлены лесные трассы для первых заездов на новых квадроциклах — они позволяют исследовать дикие уголки карельской тайги и скалистые берега озер. Велопрогулки по дорогам Заонежья стали еще комфортнее благодаря электробайкам, которые этой весной пополнили велопарк отеля.
В мае, в отеле открылся сезон водных развлечений: гостям доступны сапы, каяки и весельные лодки. В этом году пользование ими - комплементарное для всех гостей. Также появились новые маршруты для катеров по заливам Онежского озера.
Ресторан «Руна» представляет летнюю серию гриль-сетов, которые можно приготовить самостоятельно на одном из необитаемых островов или устроить барбекю на лужайке у дома. В меню — овощные и рыбные сеты, а также мясное ассорти.
Бутик-отель «Заонежье» приглашает к активному отдыху среди озер и северной природы Карелии.
Если ты веб-разработчик и юзаешь ИИ… ставь это!
Agent Skills от Addy Osmani (Google) для:
✓ Веб‑производительности
✓ Лучших практик
✓ Доступности (Accessibility)
✓ SEO
Для React, Vue, Angular, Astro или чего угодно.
@WebDev_Plus
Agent Skills от Addy Osmani (Google) для:
✓ Веб‑производительности
✓ Лучших практик
✓ Доступности (Accessibility)
✓ SEO
Для React, Vue, Angular, Astro или чего угодно.
$ npx add-skill addyosmani/web-quality-skills
@WebDev_Plus
👍3🤣1
Angular 22 теперь с собственным AI Agent Skill.
Установил один раз — и любой кодирующий агент сразу понимает:
✅Лучшие практики Angular 22
✅ Signals и Signal Forms
✅ Standalone Components
✅ Zoneless Angular
✅ Современная архитектура Angular
✅ Кодинг-конвенции Angular
Теперь агент думает как эксперт по Angular, а не просто генерирует общий код.
Установка:
AI эффективен только в контексте.
Для максимума подключите Angular 22 MCP Server и включите экспериментальные devserver задачи.
#Angular #Angular22 #AI #ClaudeCode #TypeScript #WebDev
@WebDev_Plus
Установил один раз — и любой кодирующий агент сразу понимает:
✅Лучшие практики Angular 22
✅ Signals и Signal Forms
✅ Standalone Components
✅ Zoneless Angular
✅ Современная архитектура Angular
✅ Кодинг-конвенции Angular
Теперь агент думает как эксперт по Angular, а не просто генерирует общий код.
Установка:
npx angular-cli-ai install-skill
AI эффективен только в контексте.
Для максимума подключите Angular 22 MCP Server и включите экспериментальные devserver задачи.
#Angular #Angular22 #AI #ClaudeCode #TypeScript #WebDev
@WebDev_Plus
Привет, Laravel-разработчики
Начиная с Laravel v13.15.0, во фасаде Cache появился новый метод
По сути, этот метод делает две вещи.
Сначала он проверяет, существует ли указанный ключ в кэше. Если ключ найден, метод просто возвращает сохранённое значение. Если ключа нет, выполняется callback, а его результат сохраняется в кэше под этим ключом.
Это полностью совпадает с поведением существующего метода
Но у
Один из полезных сценариев применения — отправка клиенту собственного HTTP-заголовка с информацией о статусе кэша.
Например, можно явно указывать, был ли ответ получен из кэша (
#laravel #php
@WebDev_Plus
Начиная с Laravel v13.15.0, во фасаде Cache появился новый метод
rememberWithState().По сути, этот метод делает две вещи.
Сначала он проверяет, существует ли указанный ключ в кэше. Если ключ найден, метод просто возвращает сохранённое значение. Если ключа нет, выполняется callback, а его результат сохраняется в кэше под этим ключом.
Это полностью совпадает с поведением существующего метода
remember().Но у
rememberWithState() есть дополнительная возможность: вместе со значением он возвращает булевый флаг (true или false), который показывает, было ли значение уже в кэше или оно было сгенерировано только что.Один из полезных сценариев применения — отправка клиенту собственного HTTP-заголовка с информацией о статусе кэша.
Например, можно явно указывать, был ли ответ получен из кэша (
cache hit) или сформирован заново (cache miss).#laravel #php
@WebDev_Plus
Следующий урок, который мы усвоили при масштабной эксплуатации Laravel Scout:
Если в Scout включены очереди, индексация моделей выполняется через фоновые задачи, которые ставятся в очередь при вызове
В нагруженных приложениях могут возникать две ситуации:
одна и та же модель может сохраняться несколько раз за короткий промежуток времени;
очередь Scout может накапливаться, пока воркеры постепенно обрабатывают задачи.
В обоих случаях в очередь попадает множество дублирующихся задач на индексацию одной и той же модели ещё до того, как воркер успеет обработать первую из них.
Это создаёт лишнюю нагрузку, поскольку во время обработки задачи актуальная версия модели заново загружается из базы данных. В итоге каждая дублирующаяся задача повторно получает и индексирует одно и то же финальное состояние модели.
Чтобы решить эту проблему, я отправил PR (который был принят), добавляющий две новые задачи, которые можно включить по желанию. Они реализуют интерфейс
Таким образом, пока задача индексации конкретной модели находится в очереди, новые дублирующиеся задачи для неё создаваться не будут. Это уменьшает количество лишней работы, снижает нагрузку на очередь и сокращает число ненужных операций индексации.
@WebDev_Plus
Если в Scout включены очереди, индексация моделей выполняется через фоновые задачи, которые ставятся в очередь при вызове
$model->save().В нагруженных приложениях могут возникать две ситуации:
одна и та же модель может сохраняться несколько раз за короткий промежуток времени;
очередь Scout может накапливаться, пока воркеры постепенно обрабатывают задачи.
В обоих случаях в очередь попадает множество дублирующихся задач на индексацию одной и той же модели ещё до того, как воркер успеет обработать первую из них.
Это создаёт лишнюю нагрузку, поскольку во время обработки задачи актуальная версия модели заново загружается из базы данных. В итоге каждая дублирующаяся задача повторно получает и индексирует одно и то же финальное состояние модели.
Чтобы решить эту проблему, я отправил PR (который был принят), добавляющий две новые задачи, которые можно включить по желанию. Они реализуют интерфейс
ShouldBeUniqueUntilProcessing, который не позволяет ставить в очередь задачи для моделей, уже ожидающих индексации в очереди.Таким образом, пока задача индексации конкретной модели находится в очереди, новые дублирующиеся задачи для неё создаваться не будут. Это уменьшает количество лишней работы, снижает нагрузку на очередь и сокращает число ненужных операций индексации.
@WebDev_Plus
Когда в Node.js появляются тяжёлые вычислительные задачи, производительность приложения может заметно просесть.
Из-за этого многие делают вывод, что Node.js плохо подходит для таких сценариев или что проблема в самом JavaScript. Но решение есть.
В этом руководстве от Sumit Saha подробно разбирается многопоточность в Node.js с помощью Worker Threads.
Что внутри:
* зачем нужны Worker Threads;
* чем они отличаются от Event Loop;
* как выносить CPU-intensive задачи в отдельные потоки;
* обмен данными между потоками;
* практические примеры и паттерны использования.
Хороший материал для тех, кто хочет использовать все возможности Node.js и не блокировать основной поток тяжёлыми вычислениями.
https://freecodecamp.org/news/how-to-implement-multi-threading-in-nodejs-with-worker-threads-full-handbook/
@WebDev_Plus
Из-за этого многие делают вывод, что Node.js плохо подходит для таких сценариев или что проблема в самом JavaScript. Но решение есть.
В этом руководстве от Sumit Saha подробно разбирается многопоточность в Node.js с помощью Worker Threads.
Что внутри:
* зачем нужны Worker Threads;
* чем они отличаются от Event Loop;
* как выносить CPU-intensive задачи в отдельные потоки;
* обмен данными между потоками;
* практические примеры и паттерны использования.
Хороший материал для тех, кто хочет использовать все возможности Node.js и не блокировать основной поток тяжёлыми вычислениями.
https://freecodecamp.org/news/how-to-implement-multi-threading-in-nodejs-with-worker-threads-full-handbook/
@WebDev_Plus
freeCodeCamp.org
How to Implement Multi-Threading in Node.js With Worker Threads [Full Handbook]
JavaScript is a single-threaded programming language, and Node.js is the runtime environment for JavaScript. This means that JavaScript essentially runs within Node.js, and all operations are handled through a single thread. But when we perform tasks...
❤🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Этот инструмент проверяет производительность всего сайта.
Он сканирует все страницы и выставляет оценку каждой из них.
Что-то вроде Lighthouse, но с обзором всего сайта целиком.
Запуск:
@WebDev_Plus
Он сканирует все страницы и выставляет оценку каждой из них.
Что-то вроде Lighthouse, но с обзором всего сайта целиком.
Запуск:
npx unlighthouse --site <ваш-сайт>
@WebDev_Plus
Хочешь, чтобы твой AI-агент на Laravel использовал недорогую Gemini для простых диалогов, а при сложных задачах автоматически переключался на более мощную модель Claude?
Тогда стоит использовать динамическое переключение моделей
Переопределить модель по умолчанию можно прямо внутри метода
@WebDev_Plus
Тогда стоит использовать динамическое переключение моделей
Переопределить модель по умолчанию можно прямо внутри метода
prompt(). @WebDev_Plus