WebCraft - ремесло веб разработки @web_craft Channel on Telegram

WebCraft - ремесло веб разработки

@web_craft


Интересуешься php , js , css , html , Laravel , Vue ? Этот канал для тебя

Админ, сотрудничество, реклама: @seniorFrontPromo, @maria_seniorfront
Менеджер по рекламе: @Spiral_Yuri

Купить рекламу: https://telega.in/c/web_craft

WebCraft - ремесло веб разработки (Russian)

Если вы интересуетесь php, js, css, html, Laravel, Vue, то канал @web_craft идеально подойдет для вас. Здесь вы найдете самые актуальные новости, полезные советы, интересные статьи и многое другое, связанное с веб-разработкой

Админы канала всегда рады помочь вам и ответить на ваши вопросы. Если у вас есть предложения по сотрудничеству или вы хотите разместить рекламу, обратитесь к админам @seniorFrontPromo или @maria_seniorfront. Менеджер по рекламе @Spiral_Yuri также всегда готов проконсультировать вас и помочь с размещением вашей рекламы

Не упустите возможность купить рекламу на канале @web_craft и донести ваше сообщение до тысяч подписчиков. Посетите https://telega.in/c/web_craft для получения дополнительной информации и приобретения рекламного места. Присоединяйтесь к каналу WebCraft - ремесло веб разработки и расширьте свои знания и навыки в области веб-разработки!

WebCraft - ремесло веб разработки

28 Jan, 08:10


Метод createImageBitmap() для обработки изображений

Метод createImageBitmap() асинхронно создает объект Bitmap из изображений, файлов или Blob. Это полезно для работы с большими изображениями без блокировки основного потока, особенно в сочетании с Web Workers.

Пример: загрузка изображения через fetch и создание Bitmap:
async function processImage(url) {
const response = await fetch(url);
const blob = await response.blob();
const bitmap = await createImageBitmap(blob);
console.log(bitmap.width, bitmap.height); // Лог размеров изображения
return bitmap;
}

processImage('https://example.com/image.jpg')
.then(bitmap => console.log('Bitmap создан:', bitmap))
.catch(error => console.error('Ошибка:', error));

Этот код загружает изображение, преобразует его в Blob и создает Bitmap, который можно использовать для рисования на Canvas или дальнейшей обработки в отдельном потоке.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

27 Jan, 11:00


Разделение коллекций с помощью chunkWhile() в Laravel

Метод chunkWhile() в Laravel Collections позволяет разбивать коллекции на группы, основываясь на условии, которое проверяется для каждого элемента. Новая группа начинается, если условие нарушается.

Рассмотрим пример: есть массив заказов, отсортированный по дате, и нужно сгруппировать заказы по дню. С chunkWhile() это реализуется просто:
$orders = collect([
['id' => 1, 'date' => '2025-01-10'],
['id' => 2, 'date' => '2025-01-10'],
['id' => 3, 'date' => '2025-01-11'],
['id' => 4, 'date' => '2025-01-12'],
]);

$groupedOrders = $orders->chunkWhile(function ($current, $key, $collection) {
$previous = $collection[$key - 1] ?? null;
return $previous ? $current['date'] === $previous['date'] : true;
});

Этот код разделит заказы на группы по дате: каждая группа будет содержать заказы только одного дня.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

27 Jan, 07:00


⭐️ Symfony и Kafka — союз, о котором мечтают разработчики!

👉 Узнайте, как интеграция Symfony Messenger с Kafka делает обработку асинхронных задач надёжной и масштабируемой. Мы разберём примеры, лучшие практики и подводные камни.

Хотите уверенно работать с этой мощной связкой и прокачать свои проекты? 28 января в 20:00 мск вас ждёт открытый урок, где мы расскажем, как настроить и использовать Kafka как транспорт.

Спикер Михаил Каморин — Dev Tech Lead в Skyeng, участник и организатор конференций по PHP, член ПК Podlodka PHP Crew.

👉 Регистрируйтесь на вебинар сейчас и получите скидку на обучение на курсе «Symfony Framework»: https://vk.cc/cHSE9m

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru erid 2SDnjcAVVFS

WebCraft - ремесло веб разработки

26 Jan, 09:13


Поведение метода Promise.any()

Что произойдёт, если все промисы завершатся с ошибкой?

Забыли? Вернитесь к посту от 06.01.2025.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

25 Jan, 15:14


Работа с методом queryScoped()

Для чего используется метод queryScoped()?

Забыли? Вернитесь к посту от 06.01.2025.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

25 Jan, 06:52


Как пройти все этапы собеседования в IT: качества идеального кандидата

Статья разбирает ключевые этапы собеседований в IT, включая технические и soft skills. Описываются качества, которые работодатели ищут в кандидатах, и даются советы по подготовке к собеседованиям, чтобы выделиться среди других.

👉 @web_craft | #собес

WebCraft - ремесло веб разработки

24 Jan, 08:02


Вы задумывались о том, какое значение имеет ваш код?

❤️ - Нет, пишу на автомате, не задумываясь об этом.

👍 - Да, и это меня мотивирует.

🤔 - Да, и именно поэтому я избегаю серьезных проектов.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

23 Jan, 14:36


Анимация собаки на CSS

Анимация собаки из картонных коробок на CSS.

👉 @web_craft |#frontend

WebCraft - ремесло веб разработки

23 Jan, 07:12


Скажи «нет» console.log

Статья рассказывает, почему использование console.log не всегда эффективно для отладки, и предлагает альтернативы.

Чем пользуетесь вы?

❤️ - Привычный console.log().

👍 - Альтернативные способы.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

22 Jan, 06:52


Часто пользуетесь инструментами разработчика для повседневных задач?

❤️ - Да, это уже привычка.

👍 - Только когда пишу код.

🤔 - Я не знал, что так можно было.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

21 Jan, 15:15


Работа с конкурентностью и параллелизмом в PHP

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

👉 @web_craft | #php

WebCraft - ремесло веб разработки

21 Jan, 13:15


Готовишься к собеседованию?

Разбираем для тебя самые актуальные вопросы для подготовки

Выбирай направление:

👩‍💻 Frontend
🖥 Backend
👩‍💻 JS
👩‍💻 Python
👩‍💻 Go
👩‍💻 Java
👩‍💻 C/C++
👩‍💻 C#
👩‍💻 PHP
👩‍💻 QA
📊 SQL
👩‍💻 Git

WebCraft - ремесло веб разработки

21 Jan, 07:29


Точное отслеживание видимости в JS

Метод takeRecords() в IntersectionObserver предоставляет возможность получить все записи о пересечениях элементов, которые произошли до момента вызова метода, но еще не были обработаны через callback.

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

Пример:
const observer = new IntersectionObserver((entries) => {
// Стандартный callback может пропустить события
});

// Получаем все накопленные записи
const records = observer.takeRecords();
// Теперь можно обработать каждую запись, не беспокоясь о пропущенных событиях
records.forEach(record => {
if (record.isIntersecting) {
console.log('Элемент стал видимым:', record.target);
}
});

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

20 Jan, 08:11


Автоматическая отложенная загрузка в Laravel

LazyByDefault в Laravel предоставляет решение для автоматической отложенной загрузки отношений в моделях Eloquent. Этот трейт позволяет избежать проблемы N+1 запросов без явного использования метода with() для каждого отношения. После подключения трейта, все отношения модели будут загружаться лениво только при первом обращении к ним.

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

Пример:
use Illuminate\Database\Eloquent\LazyLoadingViolationException;
use Illuminate\Database\Eloquent\Concerns\LazyByDefault;

class Post extends Model
{
use LazyByDefault;

public function comments()
{
return $this->hasMany(Comment::class);
}
}

// Теперь при обращении к comments отношение загрузится автоматически
$post = Post::find(1);
$post->comments; // Ленивая загрузка происходит здесь

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

19 Jan, 09:17


Работа с оператором ??=?

Какие значения обрабатывает оператор ??=? ?

Забыли? Вернитесь к посту от 31.12.2024.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

18 Jan, 14:15


Работа с методом preventLazyLoading()

Что произойдет, если при включенном строгом режиме обратиться к незагруженной связи?

Забыли? Вернитесь к посту от 30.12.2024.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

18 Jan, 08:50


Нужно ли сообщать работодателю о поиске работы с более высокой зп

Разработчики обсуждают, стоит ли информировать работодателя о прохождении собеседований в других компаниях с целью получения более высокой зарплаты. Некоторые считают, что сотрудник не обязан уведомлять об этом, другие полагают, что предварительный диалог с руководством необходим. Также высказываются мнения о важности оценки своей ценности на рынке труда и поддержания открытых отношений с работодателем.

А вы предупреждаете своего работодателя, что ищете другую вакансию с большей зп?

❤️ - Да.

🤔 - Нет.

👍 - Только если уже готова почва.

👉 @web_craft | #собес

WebCraft - ремесло веб разработки

17 Jan, 08:06


Вы бы прошли такое собеседование?

❤️ - Легко.

👍 - Нет.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

16 Jan, 15:10


Neon Animated Search Bar

Анимированная поисковая строка на CSS.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

16 Jan, 07:31


Создание очередей на JavaScript

В статье рассматривается реализация очереди в JavaScript — структуры данных, работающей по принципу "первым пришёл — первым ушёл" (FIFO). Рассматриваются основные операции с очередью: добавление элемента (enqueue) с использованием метода push(), удаление элемента (dequeue) с помощью shift(), просмотр первого элемента (peek) и разворот очереди. Приводится пример реализации очереди с использованием класса ES6 и методов для каждой операции.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

15 Jan, 08:31


Как часто используете чужой код?

❤️ - Почти всегда, если есть такая возможность.

👍 - Я предпочитаю писать сам, но не буду изобретать велосипед заново.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

14 Jan, 14:00


Пример HTTP-сервера на PHP с использованием файберов

В статье представлен пример конкурентного HTTP-сервера, написанного на PHP с использованием файберов (Fibers). Сервер регистрирует анонимных пользователей, выдавая каждому JWT-токен, и использует Redis в качестве хранилища. Каждый HTTP-запрос обрабатывается в отдельном файбере, обеспечивая кооперативную многозадачность с неблокирующим вводом-выводом.

👉 @web_craft | #php

WebCraft - ремесло веб разработки

14 Jan, 08:10


Форматирование чисел и дат с помощью toLocaleString()

Метод toLocaleString() в JavaScript позволяет форматировать данные в соответствии с локальными стандартами. Это особенно полезно для отображения чисел в виде валюты или преобразования дат с учетом региональных настроек.

Пример: форматирование валюты и даты одновременно.
const number = 1234567.89;  
const formattedNumber = number.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' });
console.log(formattedNumber); // "1.234.567,89 €"

const date = new Date('2024-12-31T23:59:59');
const formattedDate = date.toLocaleString('ja-JP', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });
console.log(formattedDate); // "火曜日, 2024年12月31日"


Первый вызов форматирует число как сумму в евро с немецким разделителем, второй — возвращает японскую запись даты с указанием дня недели.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

13 Jan, 07:40


Closure::fromCallable для динамического вызова методов

Closure::fromCallable позволяет превратить любую callable-функцию или метод в объект Closure, сохраняя контекст выполнения. Это особенно полезно, когда требуется передать метод объекта в качестве callback.

Рассмотрим пример, где используется нестатический метод класса:
class Logger {  
private string $prefix;

public function __construct(string $prefix) {
$this->prefix = $prefix;
}

public function log(string $message): void {
echo "{$this->prefix}: {$message}\n";
}
}

$logger = new Logger("INFO");
$logCallback = Closure::fromCallable([$logger, 'log']);

$messages = ['Загрузка...', 'Данные обработаны', 'Завершено'];
array_map($logCallback, $messages);


Код связывает метод log с объектом $logger, а затем вызывает его для каждого сообщения в массиве.

👉 @web_craft | #php

WebCraft - ремесло веб разработки

12 Jan, 09:13


Работа с ResizeObserver

Что делает ResizeObserver?

Забыли? Вернитесь к посту от 24.12.2024.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

09 Jan, 14:36


Pokemon Battle

Анимированная сцена битвы покемонов на чистом CSS.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

09 Jan, 07:12


Основы JavaScript для начинающих — простые шаги для создания вашей первой программы

Статья предлагает пошаговое руководство для начинающих по созданию первой программы на JavaScript. Автор объясняет, как настроить компьютер для работы с JavaScript, используя консоль браузера или текстовые редакторы, такие как Sublime, Webstorm или VS Code. Далее рассматриваются базовые элементы структуры кода JavaScript: операторы, комментарии, порядок выполнения и зарезервированные ключевые слова. Статья подчеркивает, что JavaScript является одним из самых популярных и простых для изучения языков программирования, подходящим даже для детей.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

08 Jan, 06:52


Вы фуллстек, что сделаете в первую очередь?

❤️ - Разберусь с NullPointerException.

🔥 - Почищу логи сервера.

👍 - Выберу новый оттенок зелёного для бордера.

👉 @web_craft | #юмор

WebCraft - ремесло веб разработки

07 Jan, 14:33


Открытая настольная песочница для PHP

В статье представлено бесплатное и открытое настольное приложение TweakPHP, разработанное на основе Electron, которое позволяет писать и запускать PHP-код непосредственно на компьютере. Интерфейс включает редактор кода с автодополнением и подсветкой синтаксиса, а также консоль для отображения результатов. Для работы требуется предварительно установить PHP и указать путь к его исполняемому файлу в настройках. Приложение находится в стадии бета-тестирования и поддерживает версии PHP до 8.2.

👉 @web_craft | #php

WebCraft - ремесло веб разработки

06 Jan, 14:40


Метод Promise.any() для работы с несколькими промисами

Promise.any() возвращает первый успешно выполненный промис из массива, игнорируя промисы с ошибками. Если все промисы завершатся с ошибкой, будет сгенерирован объект AggregateError.

Пример получения данных от нескольких API с запасными источниками:
const primaryAPI = new Promise((resolve, reject) =>
setTimeout(reject, 1000, 'Primary API failed')
);
const backupAPI1 = new Promise((resolve, reject) =>
setTimeout(resolve, 2000, 'Backup API 1 data')
);
const backupAPI2 = new Promise((resolve, reject) =>
setTimeout(resolve, 3000, 'Backup API 2 data')
);

Promise.any([primaryAPI, backupAPI1, backupAPI2])
.then(result => console.log('Result:', result)) // 'Result: Backup API 1 data'
.catch(error => console.error('All failed:', error));

В примере запрос к основному API завершится с ошибкой, но результат будет возвращён от первого успешного резервного API (Backup API 1).

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

06 Jan, 12:40


⚡️ В сети начали массово сливать курсы и книги известных онлайн школ

Вот отсортированная база с тонной материала(постепенно пополняется):

БАЗА (4687 видео/книг):

(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL/БД
(163 видео, 29 книги) — Linux
(107 видео, 43 книги) — СисАналз
(181 видео, 32 книги) — Go
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — UI/UX
(129 видео, 73 книги) — QA
(213 видео, 63 книги) — Rust
(121 видео, 24 книги) — Ruby

Скачивать ничего не нужно — все выложили в Telegram

WebCraft - ремесло веб разработки

06 Jan, 08:11


Метод queryScoped() для локального использования глобальных скопов

В Laravel метод queryScoped() позволяет временно включить глобальные скопы для отдельного запроса. Метод используется, когда необходимо применить логику глобального скопа в конкретном запросе, не затрагивая поведение модели в целом.

// Модель Post с глобальным скопом, скрывающим неопубликованные записи
class Post extends Model
{
protected static function booted()
{
static::addGlobalScope('published', function ($builder) {
$builder->where('is_published', true);
});
}
}

// Обычный запрос — глобальный скоп активен
$posts = Post::all(); // Вернет только опубликованные посты

// Используем queryScoped для временного включения скопа в запросе
$allPosts = Post::withoutGlobalScope('published')
->queryScoped('published')
->get();

dd($allPosts); // Вернет опубликованные записи, временно включая логику скопа

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

05 Jan, 09:17


Свойство navigator.hardwareConcurrency

Для чего используется navigator.hardwareConcurrency?

Забыли? Вернитесь к посту от 17.12.2024.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

04 Jan, 14:15


Работа с методом shouldDiscoverEvents

Для чего используется метод shouldDiscoverEvents?

Забыли? Вернитесь к посту от 16.12.2024.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

04 Jan, 08:50


Christmas Wishes

Интерактивная обложка открытки на CSS и Particle.js.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

03 Jan, 08:06


Каждый разработчик однажды в жизни был на его месте.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

02 Jan, 15:10


Манипуляция URI в Laravel

Статья объясняет, как в Laravel использовать класс Illuminate\Support\Uri для работы с URI. Рассматриваются методы для парсинга и манипуляции URL-адресами, включая обработку третьесторонних URL.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

02 Jan, 07:31


Использование оператора spread с вложенными объектами в JavaScript

Статья объясняет, как правильно использовать оператор spread для копирования вложенных объектов и избежать распространенных ошибок при работе с ним.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

01 Jan, 08:31


А у вас код работал с первого раза?

👍 - Иногда везёт.

❤️ - Никогда.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

31 Dec, 15:20


Christmas loader

Загрузчик в виде снежинки на CSS.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

31 Dec, 08:10


Работа с вложенными объектами и свойствами с помощью оператора ??=

Оператор ??= не только позволяет задавать значения по умолчанию для переменных, равных null или undefined, но и отлично подходит для работы с вложенными объектами и конфигурациями.

Пример:
let settings = {
database: { host: null, port: undefined },
logging: { level: "info", enabled: undefined },
};

// Применяем значения по умолчанию
settings.database.host ??= "localhost";
settings.database.port ??= 3306;
settings.logging.enabled ??= true;

console.log(settings);
/*
{
database: { host: "localhost", port: 3306 },
logging: { level: "info", enabled: true }
}
*/

// Обработка вложенных структур
const config = {};
config.api?.timeout ??= 5000; // Ничего не изменит, так как config.api === undefined
console.log(config); // {}

В этом примере оператор предотвращает ошибки при отсутствии свойства (config.api) и задает значения по умолчанию только там, где это необходимо.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

30 Dec, 07:40


Защита от случайной ленивой загрузки в Laravel

Метод preventLazyLoading() помогает избежать неявной ленивой загрузки реляционных данных. При его активации попытка обратиться к незагруженной связи вызывает исключение, что позволяет выявлять ошибки в запросах. Это полезно для загрузки данных через with() или load() заранее.

Пример:
// Активация строгого режима
use Illuminate\Database\Eloquent\Model;

Model::preventLazyLoading();

// Модель с реляцией
class Post extends Model {
public function comments() {
return $this->hasMany(Comment::class);
}
}

// Попытка ленивой загрузки
$post = Post::find(1);

// Исключение, так как 'comments' не загружены явно
$post->comments;

Для локального контроля строгий режим можно активировать на уровне отдельной модели:
class Post extends Model {
protected $preventLazyLoading = true;
}

Это исключает ошибки при случайном обращении к реляционным данным, делая архитектуру приложения более предсказуемой.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

29 Dec, 09:13


Разница между performance․now() и Date․now()

Чем отличается метод performance.now() от Date.now()?

Если забыли, то вернитесь к посту от 09.12.2024.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

28 Dec, 15:14


Работа с методом withTrashed()

Что делает метод withTrashed()?

Если забыли, то вернитесь к посту от 09.12.2024.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

28 Dec, 06:52


Почему разработчикам приходится проходить через этот унизительный процесс собеседований

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

👉 @web_craft | #собес

WebCraft - ремесло веб разработки

27 Dec, 08:02


Жизненно?

👍 - Да.

❤️ - Нет, всегда участвую в обсуждениях.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

26 Dec, 14:36


Side by Side Perspective Loader

Анимация загрузчика на CSS.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

26 Dec, 07:12


Генераторы в JavaScript: понятие и примеры

Статья объясняет, что такое генераторы в JavaScript, как они работают и где их можно применять. Рассматриваются примеры использования генераторов для упрощения работы с итерациями, асинхронным кодом и потоками данных.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

25 Dec, 06:52


Ваш while() когда-нибудь уходил в бесконечность?

👍 - Да, было.

❤️ - Никогда, у меня все циклы под контролем.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

24 Dec, 14:33


5 практических примеров использования функции Defer в Laravel

Статья объясняет, как использовать функцию Defer в Laravel для оптимизации и упрощения работы с задачами. Рассматриваются пять реальных сценариев её применения: от отложенного выполнения действий до улучшения читаемости и производительности кода.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

24 Dec, 07:29


Отслеживание изменений размеров элементов с помощью ResizeObserver

ResizeObserver — встроенный API JS для отслеживания изменений размеров DOM-элементов. Полезен для адаптивных интерфейсов и динамического управления стилями, так как срабатывает при изменении размеров.

Пример:
const element = document.querySelector('.resizable');
const resizeObserver = new ResizeObserver(entries => {
for (let entry of entries) {
const { width, height } = entry.contentRect;
console.log(`New dimensions: ${width}x${height}`);
element.style.backgroundColor = width > 300 ? 'lightblue' : 'lightcoral';
}
});

// Начинаем наблюдение за изменением размеров элемента
resizeObserver.observe(element);

// Прекращаем наблюдение при необходимости
// resizeObserver.unobserve(element);
// resizeObserver.disconnect();

Здесь ResizeObserver следит за изменением размеров элемента с классом resizable. Если ширина становится больше 300, фон элемента меняется на голубой, иначе — на красный.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

23 Dec, 08:11


Метод Route::view() для создания простых шаблонов

Route::view() в Laravel позволяет быстро создавать маршруты, которые возвращают статичные страницы. Этот метод подходит для страниц, где нет необходимости в контроллере или сложной логике. Вместо того чтобы создавать отдельные контроллеры, можно просто указать маршрут, который будет отображать Blade-шаблон с минимальными или без каких-либо динамических данных.

Пример использования:
Route::view('/user/{id}/profile', 'user.profile', function ($id) {
$user = User::find($id);
return [
'user' => $user,
'postsCount' => $user->posts->count(),
'profileCompleted' => $user->profile_complete
];
});

В этом примере мы создаем маршрут для страницы профиля пользователя. В URL передается параметр {id}, который используется для извлечения данных пользователя из базы данных. Далее данные о пользователе, количестве его постов и статусе профиля передаются в Blade-шаблон user.profile.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

22 Dec, 09:17


Работа с методом navigator.clipboard

Какой метод API navigator.clipboard используется для копирования текста?

Если забыли, то вернитесь к посту от 03.12.2024.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

21 Dec, 14:15


Работа с хелпером whenNotEmpty

Что делает хелпер whenNotEmpty?

Если забыли, то вернитесь к посту от 02.12.2024.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

21 Dec, 08:50


Прохождение собеседования на позицию веб-разработчика

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

👉 @web_craft | #собес

WebCraft - ремесло веб разработки

20 Dec, 08:06


Это креативность или халтура?

❤️ - Конечно, креативность.

👍 - Немного халтуры, но с умом.

🤔 - Сложно сказать, где граница.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

19 Dec, 15:10


Mode7

Пиксельная анимация на CSS.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

19 Dec, 07:31


Модульный оператор в JavaScript

Статья объясняет, как работает модульный оператор (%) в JavaScript, на что он влияет, и показывает примеры его использования. Автор также освещает нюансы, связанные с отрицательными числами, и предлагает альтернативные способы вычислений.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

18 Dec, 08:31


Что у вас в try-catch?

👍 - Всё приложение.

❤️ - Только самое важное.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

17 Dec, 15:20


Использование нестандартных колонок в миграциях Laravel

Статья рассказывает, как создавать и использовать нестандартные типы колонок в миграциях Laravel. Автор объясняет, как настроить пользовательские типы данных, такие как JSON, UUID или географические типы, и дает примеры их применения.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

17 Dec, 08:10


Определения числа потоков процессора

Свойство navigator.hardwareConcurrency позволяет узнать количество логических потоков процессора устройства, что делает его незаменимым инструментом для оптимизации задач, требующих интенсивного вычисления. Например, вы можете адаптировать производительность приложения под устройство пользователя, избегая перегрузки процессора.

Пример:
const threads = navigator.hardwareConcurrency || 4; // fallback на 4 потока
console.log(`Доступно потоков: ${threads}`);

const tasks = Array.from({ length: threads }, (_, i) => `Задача ${i + 1}`);

console.log('Задачи распределены:');
tasks.forEach((task, index) => {
console.log(`Поток ${index + 1}: ${task}`);
});

В этом примере мы определяем количество потоков и распределяем задачи между ними. Это удобно для обработки больших массивов данных или запуска параллельных вычислений.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

16 Dec, 07:40


ShouldDiscoverEvents в Laravel

Метод shouldDiscoverEvents в Laravel позволяет автоматизировать регистрацию слушателей событий. Это избавляет от необходимости вручную указывать слушателей в методе listen внутри EventServiceProvider.

Пример настройки:
protected function shouldDiscoverEvents()
{
return true;
}

Для указания директорий используется discoverEventsWithin:
protected $listen = []; // можно оставить пустым

public function discoverEventsWithin()
{
return [
app_path('Listeners'),
];
}

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

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

29 Nov, 08:02


А как вы относитесь к лени?

👍 - Это мой козырь, ленивый человек быстрее сделает всю свою работу, чтобы у него осталось больше времени на "ничего не делать".

❤️ - Я к ней не отношусь.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

28 Nov, 14:36


Circus - CSS Doodle

Анимация дудла на CSS.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

28 Nov, 07:12


Новый оператор JavaScript, который значительно упрощает код

Статья описывает новый оператор ?= в JavaScript, который упрощает обработку ошибок при присваивании, делая код более компактным и читабельным, без использования try-catch.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

27 Nov, 06:52


Знакомо? Решение всех проблем одним вопросом.

👍 - Да, это работает.

🤔 - Пробовал, не помогает.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

26 Nov, 14:33


Настраивать xdebug для первого запуска не нужно вообще! Как в Phpstorm запустить отладку за минуту и без браузера

Статья описывает упрощённый метод настройки Xdebug в PhpStorm для отладки PHP-скриптов без необходимости конфигурирования файлов php.ini или xdebug.ini.

👉 @web_craft | #php

WebCraft - ремесло веб разработки

26 Nov, 07:29


Метод FinalizationRegistry для автоматической очистки памяти

Метод FinalizationRegistry в JavaScript – это механизм, который помогает автоматизировать процесс освобождения памяти, ассоциируя очистку с объектами, когда они больше не нужны.

FinalizationRegistry создаёт "реестр финализации", в который можно зарегистрировать объекты с указанием "очистительной" функции, которая будет вызвана сборщиком мусора, когда объект станет недоступен.

Пример:
const registry = new FinalizationRegistry((heldValue) => {
console.log(`Ресурс "${heldValue}" был очищен из памяти`);
});

(function() {
let userSession = { id: 'session_12345' };
registry.register(userSession, 'User Session Resource');
userSession = null; // Устанавливаем в null, чтобы позволить сборщику мусора освободить память
})();

Здесь объект userSession регистрируется с меткой "User Session Resource", и когда сборщик мусора удалит его, будет выполнена функция, выводящая сообщение об освобождении памяти.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

25 Nov, 08:11


Внедрение Dependency Injection через Service Container в Laravel

Метод Route::macro() в Laravel позволяет добавлять собственные методы в маршрутизацию, это расширяет возможности стандартного роутинга и позволяет создавать более читабельный код.

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

Пример использования:
use Illuminate\Support\Facades\Route;

Route::macro('adminRoutes', function ($callback) {
Route::prefix('admin')
->namespace('Admin')
->middleware('auth')
->group($callback);
});

Route::adminRoutes(function () {
Route::get('/dashboard', 'DashboardController@index');
Route::resource('users', 'UserController');
});

В этом примере метод adminRoutes добавляет префикс и пространство имен для всех маршрутов внутри вызова, упрощая организацию кода и делая его более модульным.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

24 Nov, 09:17


Работа с методом queueMicrotask()

В какой момент выполняется задача, добавленная через queueMicrotask()?

Если забыли, то вернитесь к посту от 05.11.2024.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

23 Nov, 14:15


Работа с методом whenHas()

Для чего используется метод whenHas()?

Если забыли, то вернитесь к посту от 04.11.2024.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

22 Nov, 08:06


Все так и было.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

21 Nov, 15:10


YSWS - Cascade Submission

Пример анимации на СSS.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

21 Nov, 07:31


Как JavaScript обрабатывает синтаксические ошибки до выполнения вашего кода

Статья объясняет, как JavaScript обрабатывает синтаксические ошибки перед выполнением кода. Автор рассказывает о процессе "парсинга" (разбора) кода, когда движок JavaScript проверяет его на ошибки перед запуском. Если в коде есть синтаксическая ошибка, выполнение прерывается, и программа не запускается. Также рассматриваются типичные примеры синтаксических ошибок и объясняется, как их избежать для стабильной работы приложений.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

20 Nov, 08:31


Возникают сложности, когда используете чужой код?

👍 — Нет, я всё понимаю.

🤔 — Иногда встречаются сюрпризы.

❤️ — Проще самому все сделать.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

19 Nov, 18:00


Как запретить выполнение опасных команд базы данных в Laravel

Статья рассказывает, как в Laravel можно предотвратить выполнение опасных команд базы данных (например, db:wipe, migrate:fresh) в продакшене, используя метод DB::prohibitDestructiveCommands(). Это помогает защитить данные от случайного удаления или изменения в рабочей среде.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

19 Nov, 14:00


💭 Многие разработчики представляют себе IT как сферу постоянного развития, высоких зарплат и интересных проектов. Однако, на практике часто оказывается иначе: работа с устаревшим стеком, рутинные задачи и стагнация дохода. Это вызывает вопросы: как перейти на новые технологии, как выйти на более высокий уровень и добиться зарплаты, соответствующей вложенным усилиям?

Эти вопросы — не редкость. Множество программистов сталкиваются с такой ситуацией, но выйти из неё вполне реально. В своём канале я делюсь конкретными действиями, которые помогают:

Понять, какие навыки и технологии сейчас востребованы, и что стоит доучить.
Выстроить своё резюме и подготовку так, чтобы привлекать внимание к своим знаниям и опыту.
Пройти собеседования на более высокие позиции и получать офферы с адекватными условиями.
Если пришло время поднять карьеру на новый уровень, присоединяйся — пусть усилия приносят заслуженные результаты!

Подписаться на канал

WebCraft - ремесло веб разработки

19 Nov, 08:10


Метод Reflect.construct() для динамического создания экземпляров классов

Метод Reflect.construct() предоставляет инструмент для динамического создания экземпляров классов в JavaScript. В отличие от обычного вызова конструктора через new, Reflect.construct() позволяет вызывать конструкторы с массивом аргументов и даже устанавливать прототип для нового объекта.

Например, создадим класс User и динамически создадим его экземпляр с помощью Reflect.construct():
class User {
constructor(name, age) {
this.name = name;
this.age = age;
}
}

const user = Reflect.construct(User, ['Alice', 25]);
console.log(user); // User { name: 'Alice', age: 25 }


В этом примере Reflect.construct() вызывает конструктор User с массивом аргументов ['Alice', 25]. Такой подход позволяет гибко инициализировать объекты, когда их тип и параметры неизвестны на этапе компиляции.

Дополнительно можно передать третий параметр — прототип для создаваемого объекта.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

18 Nov, 07:40


Внедрение Dependency Injection через Service Container в Laravel

Dependency Injection (DI) — паттерн, позволяющий передавать зависимости объекта извне, а не создавать их внутри. В Laravel DI реализуется через Service Container.

С помощью Service Container мы можем привязывать классы и интерфейсы, позволяя Laravel автоматически разрешать зависимости. Представьте, что у нас есть интерфейс PaymentGatewayInterface и его реализация StripePaymentGateway. Мы можем зарегистрировать его в контейнере:
$this->app->bind(PaymentGatewayInterface::class, StripePaymentGateway::class);

Теперь, при вызове PaymentGatewayInterface, Laravel передаст объект StripePaymentGateway. Это упрощает подмену реализаций, например, для тестирования.

Также можно использовать singleton, если нужно, чтобы зависимость создавалась один раз на весь жизненный цикл приложения:
$this->app->singleton(PaymentGatewayInterface::class, StripePaymentGateway::class);

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

17 Nov, 09:13


Работа с Symbol.iterator

Какую роль выполняет Symbol.iterator в объекте?

Если забыли, то вернитесь к посту от 29.10.2024.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

16 Nov, 15:14


Использование метода replicate()

Что происходит с полями модели в процессе выполнения replicate()?

Если забыли, то вернитесь к посту от 28.10.2024.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

16 Nov, 06:52


Чему я научился, пройдя множество собеседований в компаниях и стартапах из сферы ИИ

В статье автор делятся выводами о подготовке к собеседованиям в крупных IT-компаниях, таких как DeepMind и Microsoft. Автор рассказывает о создании портфолио, GitHub-профиля, успешном прохождении интервью, а также о выборе компаний по их целям и возможностям для развития.

ИИ - это не совсем по теме нашего канала, но опыт, практики и советы автора будут полезны всем, кто ищет работу в области разработки.

👉 @web_craft | #собес

WebCraft - ремесло веб разработки

15 Nov, 08:02


Сколько времени уходит на обдумывание кода?

👍 — Больше половины времени.

❤️ — Чуть-чуть, сразу код пишу.

🤔 — Всё зависит от задачи.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

14 Nov, 14:36


BOUNCY Radio Selector

Прыгающий селектор кнопок на CSS.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

14 Nov, 07:12


Как заставить все показатели Lighthouse показывать 100 баллов с помощью JavaScript

Статья описывает простой JavaScript-код, который временно меняет отображаемые баллы в отчёте Google Lighthouse на 100. Этот трюк предназначен исключительно для забавы или демонстрации, так как он не влияет на реальные показатели производительности или качества сайта. Автор объясняет, как вставить код в браузерную консоль, чтобы измененные баллы отобразились в интерфейсе Lighthouse.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

13 Nov, 06:52


Как реагируете, когда фичу отменяют после долгой работы?

👍 — Обида и грусть.

❤️ — Принимаю как есть.

🤔 — Зависит от фичи.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

12 Nov, 14:33


Как реализовать классы-обёртки в PHP

Статья объясняет, как создавать классы-обёртки в PHP для более удобного и модульного кода. Классы-обёртки используются для инкапсуляции или дополнения поведения существующих классов, добавляя новую функциональность или облегчая повторное использование кода. Автор показывает, как создать такой класс на примере, а также обсуждает, когда и зачем его использовать, чтобы улучшить читаемость и поддержку кода.

👉 @web_craft | #php

WebCraft - ремесло веб разработки

12 Nov, 07:29


Создание глубокой копии объекта с помощью structuredClone()

Метод structuredClone() — это встроенная функция JavaScript для создания глубокой копии объектов, включая сложные структуры, такие как вложенные массивы и объекты. Раньше для этого использовали различные техники, такие как JSON.stringify/parse или рекурсивные функции.

Преимущество structuredClone() в том, что он корректно обрабатывает многие типы данных, включая Map, Set, ArrayBuffer, и даже циклические ссылки, с которыми не справляется метод JSON.stringify().

Пример:
const original = { name: "Alex", data: { age: 25, hobbies: ["reading", "gaming"] } };
const copy = structuredClone(original);
copy.data.age = 26;

console.log(original.data.age); // 25, оригинальный объект не изменился
console.log(copy.data.age); // 26, независимая копия

Здесь structuredClone() создаёт полную копию объекта original, позволяя изменять данные в copy без влияния на оригинальный объект.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

11 Nov, 10:08


Как не терять сообщения в Symfony при отправке через внешний брокер?

Разберёмся на бесплатном открытом уроке «Надёжная отправка и получение сообщений через RabbitMQ в Symfony»

Дата и время: 12 ноября, 20:00 МСК

В программе:
- сценарии потери сообщений, отправляемых через внешний брокер;
- как поступать в ситуации, когда обработку сообщения нужно повторить;
- реализация Transactional Outbox для гарантированной отправки сообщений.

🔥Вебинар проведёт Михаил Каморин, техлид в Skyeng

Урок будет полезен всем PHP-разработчикам, которые хотят повысить свою квалификацию!

После открытого урока можно записаться на курс «Symfony Framework», который доступен в рассрочку

👉🏻
Записаться на событие

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576 erid 2SDnjdtxCPu

WebCraft - ремесло веб разработки

10 Nov, 18:07


Проверка подписанных URL-адресов с помощью signedRoute() в Laravel

Метод signedRoute() предоставляет простой способ создания подписанных URL-адресов, которые помогают ограничивать доступ к ресурсам и предотвращают их несанкционированное изменение. Такие URL содержат цифровую подпись, которая подтверждает, что они были созданы вашим приложением. Это особенно полезно для ссылок, которые нужно защитить, например, для сброса пароля или приглашений с ограниченным доступом.

Пример создания подписанного URL:
use Illuminate\Support\Facades\URL;

$url = URL::signedRoute('user.verify', ['user' => 1]);

В этом примере создается URL с подписью для маршрута user.verify. Если кто-то изменит параметры URL, подпись станет недействительной, и Laravel отклонит запрос.

Проверка подписи:
Для этого достаточно добавить Middleware signed, который автоматически проверяет действительность ссылки:
Route::get('/email/verify', function () {
// действие
})->name('user.verify')->middleware('signed');

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

10 Nov, 09:17


Работа с методом Object.getOwnPropertySymbols()

Что возвращает метод Object.getOwnPropertySymbols()?

Если забыли, то вернитесь к посту от 22.10.2024.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

09 Nov, 14:15


Работа с методом метод assertViewIs()

Что проверяет метод assertViewIs() в Laravel?

Если забыли, то вернитесь к посту от 21.10.2024.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

08 Nov, 17:45


Как пройти собеседование на backend в топовую IT-компанию

Статья о том, как подготовиться и успешно пройти собеседование на должность backend-разработчика в ведущие IT-компании. Автор делится личным опытом, подробно описывает этапы собеседования, включая первичный отбор, технические интервью по алгоритмам, проектированию систем и оценке совместимости с командой.

👉 @web_craft | #собес

WebCraft - ремесло веб разработки

08 Nov, 15:40


Закрытый клуб для айтишников

FAANG School, чьи выпускники работают в Яндексе, СБЕРЕ и других гигантах, запустили бесплатное сообщество для всех, кто изучает Java.

Общайся в ламповом чате с такими же людьми «в теме», получай фидбек у опытных разрабов и черпай практические рекомендации от экспертов школы.

В чате уже больше 10 000 человек, а новенькие, которые подключатся сейчас, получат доступ к большой библиотеке Java Junior с полезными материалами:

– Пошаговая RoadMap по Java
– Мануал по Docker. Основные команды и концепции
– Микросервисы. Вопросы с собеседований
– Шпаргалка по Kafka
– Инструкция по работе с Git
– Подробный гайд, как найти работу в IT без опыта
– Подборка платформ с вакансиями для java-разработчиков

Вступай сейчас. Открыли доступ всего на 24 часа!

WebCraft - ремесло веб разработки

08 Nov, 08:06


Когда не хочешь разбираться в регулярных выражениях.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

07 Nov, 13:00


CSS 16x16 display

Примеры пиксельных анимаций на CSS.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

07 Nov, 06:02


Приходите на курс “PHP Performance”

Хороший программист не только умеет пилить классные фичи, но и знает, как работает его код в продакшене, а также может разобраться, почему его сервис тормозит. Для этого слово «телеметрия» должно стать не просто словом, а инструментом для поиска и устранения проблем.

На курсе мы на практике изучим нужные инструменты, расскажем, как находить проблемы производительности, и как их исправлять.

🌐 В программе курса:

▪️
Архитектура бекенд-серверов на PHP и её особенности: php-fpm, RoadRunner, использование ресурсов, параметры конфигурации
▪️OpenTelemetry: применение на примере SigNoz
▪️Суб-real-time телеметрия поверх UDP c PINBA и промстэком (Grafana/Prometheus).

🥸 Кто мы: R&D-центр https://devhands.ru, наш канал (https://t.me/rybakalexey). Автор курса — Михаил Курмаев, эксперт по сложным распределённым системам. Долгое время строил платформу в Badoo/Bumble, сейчас в Т-банке развивает дата-платформу.

🗓 Старт курса: 28 ноября, 4 недели обучения.
Изучить программу и записаться можно здесь.

Ждем вас!

Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzqufgxJq

WebCraft - ремесло веб разработки

06 Nov, 14:00


Ставить точку с запятой в JavaScript или нет?

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

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

06 Nov, 12:00


💻 10 лет в IT, и я публикую только то, что сам читаю или собираюсь прочитать.
Это самые важные статьи и новости, которые действительно нужны разработчику.

Решил поделиться тем, что помогает мне быть в курсе всего.

Подписывайся на DevDrafts | RSS — здесь только то, что стоит твоего времени!

👉 @devdrafts_rss

WebCraft - ремесло веб разработки

06 Nov, 08:31


А у вас бывали такие же глупые ошибки?

👍 - Да.

❤️ - Нет.

🤔 - Жду бригаду в комментах.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

05 Nov, 15:20


Автоматизация резервного копирования баз данных c Laravel

Статья рассказывает, как автоматизировать резервное копирование баз данных в Laravel. В ней объясняется, как использовать планировщик задач Laravel и сторонние облачные хранилища, такие как AWS S3, для создания и хранения бэкапов базы данных. Пошагово описывается создание пользовательской команды Artisan, настройка регулярных резервных копий и конфигурация для безопасного хранения данных в облаке.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

05 Nov, 08:10


Метод queueMicrotask() в JavaScript

Метод queueMicrotask() добавляет микрозадачу в очередь для выполнения после текущего синхронного кода, но перед макрозадачами. Это полезно, когда нужно выполнить что-то асинхронно, но без задержек.
function simulateHeavyOperation() {
console.log('Начало операции');
queueMicrotask(() => {
console.log('Микрозадача 1');
});

for (let i = 0; i < 1e6; i++) {
if (i === 1e6 - 1) {
console.log('Операция завершена');
}
}

queueMicrotask(() => {
console.log('Микрозадача 2');
});

console.log('Завершение основной задачи');
}

simulateHeavyOperation();

// Макрозадача
setTimeout(() => {
console.log('Макрозадача');
}, 0);

В этом примере мы добавили несколько микрозадач внутри функции, которая выполняет "тяжелую" операцию с циклом.

Микрозадачи будут выполнены между завершением основной операции и перед макрозадачей setTimeout().

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

04 Nov, 07:40


Условная фильтрация через наличие реляционных данных

Метод whenHas() в Laravel Eloquent позволяет гибко управлять запросами, добавляя условия только тогда, когда существуют связанные реляционные данные. Это упрощает работу с запросами к базе данных, где нужно учитывать наличие связи с другой таблицей. Например, можно динамически добавлять фильтрацию по записям, у которых есть связанные комментарии. Это сокращает количество ненужных запросов и повышает производительность, так как дополнительная логика применяется только к тем данным, где она необходима.

Пример:
$posts = Post::query()
->whenHas('comments', function ($query) {
$query->where('approved', true);
})
->get();

В этом примере запрос вернёт только те записи из модели Post, у которых есть одобренные комментарии.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

03 Nov, 09:13


Работа с Object.preventExtensions()

Что произойдёт при попытке добавить новое свойство в объект после вызова Object.preventExtensions(obj)?

Если забыли, то вернитесь к посту от 14.10.2024.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

02 Nov, 15:14


Работа с хуком eloquent.restoring

Когда срабатывает хук eloquent.restoring?

Если забыли, то вернитесь к посту от 14.10.2024.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

02 Nov, 06:52


Вопросы и ответы для собеседования на позицию frontend-разработчик

Статья рассматривает типовые вопросы, с которыми можно столкнуться на техническом собеседовании для frontend-разработчика. Она охватывает ключевые темы, такие как работа с циклом событий, различие между типами данных, работа с this, разница между var, let, const, замыкания и другие концепции JavaScript.

👉 @web_craft | #собес

WebCraft - ремесло веб разработки

01 Nov, 08:02


Вам тяжело дался CSS?

👍 - Без особых проблем.

🤔 - Он мне еще не дался.

❤️ - Новые навыки это всегда нелегко.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

31 Oct, 14:36


Spinner

Анимация узора на чистом CSS.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

31 Oct, 07:12


Компиляторы лучше людей

Статья о том, почему компиляторы могут быть эффективнее человека в рутинных задачах программирования, приводя примеры использования Kotlin и его корутин. Автор рассматривает, как Kotlin упрощает многопоточность и управление асинхронными процессами.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

30 Oct, 06:52


Похоже на ваши комментарии?

❤️ - 100%

👍 - Вы просто еще не видели мои комментарии.

🤔 - Нет, первый раз такое вижу.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

29 Oct, 14:33


Гибкое кэширование в Laravel — это очень просто

Статья рассказывает о функции кэширования в Laravel — Cache::flexible(), которая позволяет балансировать между производительностью и свежестью данных с помощью двухуровневой системы TTL (Time to Live). Обсуждаются сценарии применения метода, такие как рекомендации в интернет-торговле, работа с аналитикой, и рассматриваются примеры реализации. Также описаны ситуации, когда эту функцию не следует использовать.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

29 Oct, 07:29


Symbol.iterator в JavaScript

Symbol.iterator — это встроенный символ в JavaScript, который позволяет объектам быть итерируемыми с помощью цикла for...of. Это важно для создания собственных итераторов и управления последовательным доступом к данным объекта.

Пример:
const iterableObj = {
items: ['apple', 'banana', 'cherry'],
[Symbol.iterator]() {
let index = 0;
return {
next: () => ({
value: this.items[index],
done: index++ >= this.items.length
})
};
}
};

for (const item of iterableObj) {
console.log(item); // 'apple', 'banana', 'cherry'
}

В этом примере объект становится итерируемым с использованием собственного итератора, реализованного через Symbol.iterator.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

28 Oct, 08:11


Хук eloquent.replicating в Laravel

В Laravel eloquent.replicating позволяет обработать момент клонирования модели с помощью метода replicate(). Этот хук предоставляет возможность изменения или очистки данных перед созданием копии. Например, можно исключить чувствительные данные, такие как email, или сбросить уникальные поля, чтобы избежать конфликтов при сохранении клонированной записи в базе данных.

Пример:
use App\Models\User;
use Illuminate\Support\Facades\Event;

Event::listen('eloquent.replicating: ' . User::class, function (User $user) {
// Очищаем уникальные поля перед копированием
$user->email = null;
$user->api_token = null;
});

В данном примере email и токен пользователя очищаются перед тем, как модель будет скопирована. Это необходимо, чтобы избежать конфликта уникальных значений при сохранении новой записи.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

27 Oct, 09:17


Тонкости точного сравнения в JS

Что произойдет при сравнении двух объектов с одинаковыми свойствами через Object.is()?

Если забыли, то вернитесь к посту от 08.10.2024.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

26 Oct, 14:15


Реакция на ложные выражения в assert()

Что произойдет, если выражение в assert() окажется неверным?

Если забыли, то вернитесь к посту от 07.10.2024.

👉 @web_craft | #php

WebCraft - ремесло веб разработки

26 Oct, 08:50


Вас просто стало слишком много

Статья обсуждает текущее состояние IT-рынка труда, где наблюдается перенасыщение разработчиков, особенно начинающих специалистов. Автор анализирует, почему так произошло, рассматривая рост числа IT-курсов и изменение уровня требований со стороны работодателей. Также рассматриваются последствия этого явления для новичков и специалистов среднего уровня.

👉 @web_craft | #собес

WebCraft - ремесло веб разработки

25 Oct, 13:54


🔥Крупнейшая региональная IT–конференция Merge ждет вас в Сколково 15-16 ноября
 
Что ждет участников конференции Merge:

🔺 6 тематических направлений: Разработка, Управление, Маркетинг, HR, Тренды, IT-рынки
🔺 150+ докладов от топовых спикеров российских и международных компаний
🔺 2000+ участников из 60+ городов
🔺 Мастер-классы, воркшопы, BoF-сессии, круглые столы, панельные дискуссии

Мероприятие будет полезно разработчикам, QA, тимлидам, Project/Product-менеджерам, маркетологам, аналитикам, редакторам, PR-специалистам, HR-менеджерам, а также тем, кто только начинает свой путь в IT. 

По промокоду KR10  - скидка 10% на билеты.
Все подробности о Merge на сайте.

#реклама
О рекламодателе

WebCraft - ремесло веб разработки

25 Oct, 08:06


Согласны?

👍 — Да.

❤️ — Сложно не согласиться.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

24 Oct, 16:50


Анимированная собака на CSS

Анимация собаки на чистом CSS.

👉 @web_craft |#frontend

WebCraft - ремесло веб разработки

24 Oct, 12:50


⁉️Хотите повысить свою квалификацию в php-разработке?

🐘 Инвестируйте в успех своей карьеры прямо сейчас!
На курсе «PHP Developer. Professional» вы получите:

✔️ Инфраструктура — Docker, виртуальные машины, облака, сетевое взаимодействие, обеспечение безопасности приложения, Composer, управление зависимостями, очереди и построение асинхронного взаимодействия.
✔️ Хранилище — PostgreSQL, MySQL, NoSQL (Clickhouse, ElasticSearch) и взаимодействие PHP с различными типами хранилищ.
✔️ Тестирование — не только unit-тесты, но и покрытие тестами всех слоёв приложения

➡️ Пройдите короткий тест прямо сейчас, чтобы получить специальную цену на обучение: https://vk.cc/cDbsZq

🎁 А еще приятный бонус: до конца октября действует скидка 10% на обучение.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576 erid 2SDnjc7hFj9

WebCraft - ремесло веб разработки

24 Oct, 07:31


Хойстинг в JavaScript: почему это важно и как это работает

В статье объясняется концепция хойстинга в JavaScript, при которой объявления переменных и функций перемещаются в начало своей области видимости во время компиляции. Рассматриваются примеры работы всплытия для переменных, функций, стрелочных функций и блоков let и const. Также обсуждается, как всплытие влияет на выполнение кода, и рассматривается концепция "Временной мёртвой зоны" (TDZ) для let и const.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

23 Oct, 08:31


Запомни, одна ошибка и ты ошибся.
(с) JSON Statham.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

22 Oct, 17:15


Как Pinkary избегает регистрации с временных электронных адресов

В статье описывается, как платформа Pinkary (построенная на Laravel и Livewire) использует специальное правило валидации UnauthorizedEmailProviders для блокировки регистраций и обновлений email с временных доменов. Правило проверяет домен электронной почты с помощью списка запрещенных провайдеров, чтобы не допускать использования одноразовых адресов при регистрации на платформе.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

22 Oct, 13:15


Laravel - ключ к успешной карьере PHP-разработчика!

🦾 Пройди тест по Laravel! 🦾

➡️ Проверь себя и свои знания. Сможешь сдать — пройдёшь на продвинутый курс "Framework Laravel" от OTUS по специальной цене.

👩‍💻 Присоединяйся к новому потоку онлайн-курса «Framework Laravel» в OTUS. В программе курса — удобные и мощные наработки огромного Laravel-сообщества, а практика — решение бизнес-задач.

👨‍💻 За 3 месяца обучения твое портфолио пополнится мини-проектами и выпускной работой.

Приятный бонус Курс можно приобрести в рассрочку и без переплаты

👉 ПРОЙТИ ТЕСТ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru erid 2SDnjeSXktB

WebCraft - ремесло веб разработки

22 Oct, 08:10


Метод для работы с символами в JavaScript

Object.getOwnPropertySymbols() возвращает массив символов, которые являются свойствами указанного объекта. В JS символы — это уникальные идентификаторы, которые могут использоваться в объектах для создания скрытых свойств, не отображаемых при обычных обходах объекта.

Пример:
const sym1 = Symbol('first');
const sym2 = Symbol('second');
const obj = {
[sym1]: 'Первое значение',
[sym2]: 'Второе значение',
regularKey: 'Обычное свойство'
};

// Получаем все символы объекта
const symbols = Object.getOwnPropertySymbols(obj);
console.log(symbols); // [Symbol(first), Symbol(second)]

// Доступ к значению символа
console.log(obj[symbols[0]]); // 'Первое значение'

В этом примере создаются два символа sym1 и sym2, которые добавляются как свойства объекта obj. Метод Object.getOwnPropertySymbols() возвращает массив символов, позволяя получить доступ к их значениям.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

21 Oct, 07:40


Метод assertViewIs() для тестирования представлений в Laravel

assertViewIs() проверяет, что контроллер или маршрут возвращают конкретное представление, которое вы ожидаете увидеть.

Проверка, что страница входа использует правильный шаблон:
public function testLoginPageReturnsCorrectView() {
$response = $this->get('/login');
$response->assertViewIs('auth.login');
}

Проверка представления на основе ролей пользователей:
public function testAdminUserSeesAdminPanel() {
$user = User::factory()->create(['role' => 'admin']);
$this->actingAs($user);

$response = $this->get('/dashboard');
$response->assertViewIs('admin.panel'); // Проверка на представление для админа
}

public function testRegularUserSeesHomePage() {
$user = User::factory()->create(['role' => 'user']);
$this->actingAs($user);

$response = $this->get('/dashboard');
$response->assertViewIs('home'); // Проверка на представление для обычного пользователя
}

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

20 Oct, 09:13


Работа с методом Object.freeze()

Какой эффект оказывает метод Object.freeze() на удаление свойств объекта?

Забыли? Вернитесь к посту от 30.09.2024.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

19 Oct, 15:14


Работа с моделями Laravel

Какой метод используется для изменения данных перед сохранением в модели?

Если забыли, то вернитесь к посту от 23.09.2024.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

19 Oct, 06:52


Не так страшно собеседование, как его себе представляют: технические собесы и необычные кейсы в Сбере

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

👉 @web_craft | #собес

WebCraft - ремесло веб разработки

18 Oct, 08:02


Тонкости эволюции с точки зрения IT.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

17 Oct, 14:36


Kubrick much?

Абстрактная анимация на CSS.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

17 Oct, 10:30


🐘 Что нового в PHP 8.4 и как это повлияет на вашу работу?

Приглашаем на открытый урок

🗓 23 октября в 20:00 МСК

🆓 Бесплатно. Урок в рамках старта курса «PHP Developer. Professional»

На вебинаре разберем:

- какие нововведения появятся в PHP 8.4;
- как эти изменения повлияют на вашу работу;
- какие новые функции и улучшения ждут разработчиков.

Спикер Александр Пряхин — технический руководитель юнита в Авито, ITIL4 Certified.

Все участники вебинара получат специальную цену на обучение!

🔗 Ссылка на регистрацию: https://vk.cc/cCFijf

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru erid 2SDnjdPS7e3

WebCraft - ремесло веб разработки

17 Oct, 07:12


Мастерство работы с DOM в JavaScript: Обзор основных вопросов для собеседований

Статья объясняет ключевые вопросы и концепции, связанные с Document Object Model (DOM) в JavaScript, которые часто задаются на собеседованиях. Рассматриваются такие темы, как выбор элементов, работа с методами querySelector и querySelectorAll, добавление и удаление элементов, управление событиями через делегирование, а также различия между innerHTML и textContent. Это поможет лучше подготовиться к техническим собеседованиям, где проверяются фундаментальные знания DOM.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

16 Oct, 06:52


Работаете из дома?

👍 - Да.

❤️ - Нет.

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

15 Oct, 16:00


Новый функционал для работы с массивами в PHP 8.4

Статья описывает новые функции для работы с массивами, которые появились в PHP 8.4: array_find, array_find_key, array_any и array_all. Эти функции позволяют проще и удобнее проверять наличие элементов в массиве, получать ключи по условию и проверять элементы на соответствие заданным критериям. Приведены примеры использования каждой функции с объяснением, как они работают.

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

14 Oct, 16:12


Оптимизация объектов с помощью Object.preventExtensions()

Метод Object.preventExtensions(obj) запрещает добавление новых свойств в объект obj.

Пример:
const config = { apiEndpoint: '/api', timeout: 5000 };
Object.preventExtensions(config);

// Попытка добавить новое свойство
config.retryAttempts = 3; // Не будет добавлено

console.log(config.retryAttempts); // undefined

При создании объектов настроек, где важно сохранить неизменяемую структуру, можно использовать функцию:
function createImmutableConfig(options) {
const config = { ...options };
Object.preventExtensions(config);
return config;
}

const appConfig = createImmutableConfig({ debug: true, version: '1.0.0' });

appConfig.newFeature = true; // Не будет добавлено
console.log(appConfig); // { debug: true, version: '1.0.0' }

Это гарантирует, что конфигурация приложения останется предсказуемой и защитит от случайного добавления лишних свойств.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

14 Oct, 08:11


Хук для отмены восстановления удалённых моделей

Хук eloquent.restoring вызывается перед тем, как восстановить мягко удалённую модель. Если вернуть false в функции-обработчике, Laravel отменит восстановление модели, и она останется помеченной как удалённая.
use App\Models\User;
use Illuminate\Support\Facades\Event;

// Запрещаем восстановление заблокированных пользователей
Event::listen('eloquent.restoring: ' . User::class, function (User $user) {
if ($user->isBlocked) {
return false;
}
});

Также можно использовать хук eloquent.restoring для логирования попыток восстановления или выполнения асинхронных операций перед тем, как модель будет восстановлена:
Event::listen('eloquent.restoring: ' . User::class, function (User $user) {
Log::info('Попытка восстановления пользователя: ' . $user->id);

if ($user->restorationAttempts >= 3) {
$user->sendRestorationWarning(); // Отправка предупреждения при частых попытках
return false;
}
});

👉 @web_craft | #laravel

WebCraft - ремесло веб разработки

13 Oct, 09:17


Работа с Symbol.species

Как Symbol.species влияет на методы класса-наследника?

Если забыли, то вернитесь к посту от 24.09.2024.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

12 Oct, 14:15


Работа с массивом $guarded

Что делает массив $guarded в модели Laravel?

Если забыли, то вернитесь к посту от 23.09.2024.

👉 @WebCraft | #laravel

WebCraft - ремесло веб разработки

12 Oct, 08:50


Удавка на собесе

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

👉 @web_craft | #собес

WebCraft - ремесло веб разработки

11 Oct, 08:06


Дети раньше: играют в игры на улице, смотрят мультики, дурачатся.

Дети сейчас:

👉 @web_craft |#юмор

WebCraft - ремесло веб разработки

10 Oct, 16:00


CSS-only game: find 10 differences

Игра с поиском отличий на CSS.

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

10 Oct, 07:31


Промисы с нуля

Статья объясняет, как работают промисы в JavaScript, начиная с основ. Автор рассказывает, почему промисы важны для работы с асинхронным кодом, и сравнивает их с колбэками. Описаны создание промисов, их цепочка, обработка ошибок, а также использование async/await для упрощения работы с асинхронностью. Статья включает практические примеры и решает проблему "Callback Hell".

👉 @web_craft | #frontend

WebCraft - ремесло веб разработки

09 Oct, 08:31


Что предпочитаете?

❤️ — MySQL.

👍 — MongoDB.

👉 @web_craft |#юмор