Алоха, коллеги! 👋
Канал растёт, я уже почти 8 лет веду свой канал и хочу сделать один небольшой шаг, который поможет лучше понимать вас и то, что здесь действительно ценно. Подготовил короткую форму - всего пару кликов, но для меня это важно.
❓Снизу я задам вам 4 вопроса, давайте проявим максимальную активность и познакомимся поближе.
Канал растёт, я уже почти 8 лет веду свой канал и хочу сделать один небольшой шаг, который поможет лучше понимать вас и то, что здесь действительно ценно. Подготовил короткую форму - всего пару кликов, но для меня это важно.
❓Снизу я задам вам 4 вопроса, давайте проявим максимальную активность и познакомимся поближе.
❤5🔥2⚡1🐳1
Чем сейчас занимаетесь?
Anonymous Poll
16%
учусь/не работаю
69%
работаю в IT
1%
работаю в сфере ИИ
9%
работаю в найме
3%
работаю на фрилансе
2%
предприниматель
❤2
Если работаете уже в айтишке или планируете то какой Грейд
Anonymous Poll
15%
Еще не работаю но хочу
3%
Трейни
12%
Джун
36%
Мидл
23%
Сеньор
8%
Тех или Тим-Лид
3%
Босс покрупнее
🔥4❤2🐳1
Сколько зарабатываете?
Anonymous Poll
18%
не зарабатываю
1%
до 15.000
2%
от 15.000 до 30.000
4%
от 30.000 до 50.000
7%
от 50.000 до 80.000
10%
от 80.000 до 120.000
14%
от 120.000 до 180.000
44%
от 180.000
😁16👀6❤2🐳2
Forwarded from xCode Journal
Такую статистику показало новое исследование. Больше половины работодателей в России сталкивались с приукрашенным резюме у кандидатов. При этом чаще всего врут разработчики ПО, за ними идут тестировщики и руководители проектов.
А вот меньше всего обманывают эйчаров датасаентисты, аналитики, сетевые инженеры и специалисты технической поддержки.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8👍5❤2🔥1
Баланс: pet-проекты vs работа
Каждый разработчик хоть раз ловил себя на мысли: “Хочу сделать свой проект. Но после работы нет ни сил, ни желания писать код.”
И вот тут начинается борьба между желанием развиваться и желанием просто отдохнуть.
✅ Pet-проекты — это топливо для роста.
Ты пробуешь новые технологии без дедлайнов, без легаси и без код-ревью с “а зачем тут вообще useMemo?”.
Это та самая зона, где возвращается интерес к разработке, особенно когда на работе монотонные задачи.
Но.
🙅♂️ Pet-проект не должен превращаться во вторую работу.
Если ты после 8 часов продакшена садишься за ещё 4 часа кода — это не развитие, это выгорание в красивой обёртке.
И так: как найти баланс?:
Итог:
Работа — даёт стабильность.
Pet-проекты — дают развитие.
Отдых — даёт энергию, чтобы выдержать первые два пункта.
Главное — не забывать, что кодить “в кайф” иногда важнее, чем кодить “всё время”.
Каждый разработчик хоть раз ловил себя на мысли: “Хочу сделать свой проект. Но после работы нет ни сил, ни желания писать код.”
И вот тут начинается борьба между желанием развиваться и желанием просто отдохнуть.
Ты пробуешь новые технологии без дедлайнов, без легаси и без код-ревью с “а зачем тут вообще useMemo?”.
Это та самая зона, где возвращается интерес к разработке, особенно когда на работе монотонные задачи.
Но.
Если ты после 8 часов продакшена садишься за ещё 4 часа кода — это не развитие, это выгорание в красивой обёртке.
И так: как найти баланс?:
🔘 Делай pet-проекты короткими и законченными.
Маленький тул или демо — лучше, чем вечный “стартап мечты”.🔘 Ставь себе ограничение по времени.
Например, кодишь только 2 вечера в неделю.🔘 Не чувствуй вины, если не делаешь ничего.
Отдых — тоже часть продуктивности.
Мой личный опыт:
Pet-проекты реально помогают не терять интерес к коду.
Но только когда они не конкурируют с отдыхом, а заменяют бессмысленный скролл YouTube чем-то, что тебя вдохновляет.
Итог:
Работа — даёт стабильность.
Pet-проекты — дают развитие.
Отдых — даёт энергию, чтобы выдержать первые два пункта.
Главное — не забывать, что кодить “в кайф” иногда важнее, чем кодить “всё время”.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤21🔥3🐳3
Storage API в 2025: что, где и когда хранить
Хранение данных в браузере — это не просто localStorage.setItem().
Современные API дают кучу способов работать с кэшем, оффлайном и большими объёмами данных.
Главное — понимать, какой инструмент для чего.
💛 LocalStorage — для простого и быстрого
💛 IndexedDB — когда данных много
💛 Cache Storage API — для сетевых запросов
💛 Best Practices
📍 Итог:
Браузер — уже не просто “тонкий клиент”.
Он умеет кэшировать, хранить и синхронизировать данные не хуже бэкенда.
Главное — не пихать всё в localStorage и думать, что этого достаточно
Хранение данных в браузере — это не просто localStorage.setItem().
Современные API дают кучу способов работать с кэшем, оффлайном и большими объёмами данных.
Главное — понимать, какой инструмент для чего.
- Объём: до ~5MB
- Синхронный API (блокирует поток)
- Только строки✅ Идеально для:
- Настроек интерфейса (тема, язык)
- Состояния, не критичного к потере🙅♂️ Не подходит для:
- Частых записей
- Больших данных
- Асинхронных операций🔘 Частая ошибка: хранить JWT или токены авторизации.
Не делай так — XSS и ты в опасности. Лучше HttpOnly cookie.
- Асинхронная, ключ-значение база прямо в браузере
- Поддерживает сложные структуры (объекты, Blob, файлы)
- Работает оффлайн✅ Идеально для:
- SPA с оффлайн-режимом
- Кеширования запросов
- Локальных кэшей для heavy UI (например, таблицы на тысячи строк)🙅♂️ Минусы:
- API громоздкий (лучше использовать обёртки вроде Dexie.js)
- Не всегда очевидное управление версиями
Используется вместе с Service Worker.
Позволяет сохранять ответы от fetch и выдавать их оффлайн.✅ Идеально для:
- PWA и offline-first приложений
- Кэширования статики (CSS, JS, картинки)
- Быстрых перезапусков SPA🙅♂️ Не путай с LocalStorage — это не просто “сохранил строку”, а полноценный HTTP-кеш.
🔘 Комбинируй: IndexedDB для данных, Cache для запросов, LocalStorage для мелочей.🔘 Удаляй устаревшие версии данных (особенно при обновлении схем).🔘 Не храни чувствительные данные — браузер ≠ сейф.🔘 Проверяй лимиты хранилища (navigator.storage.estimate() — underrated).🔘 Используй Background Sync, если нужно синхронизировать оффлайн-данные.
Браузер — уже не просто “тонкий клиент”.
Он умеет кэшировать, хранить и синхронизировать данные не хуже бэкенда.
Главное — не пихать всё в localStorage и думать, что этого достаточно
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍4🔥3👀3🐳1
Quantum CSS и ML-оптимизация верстки — будущее фронтенда?
Звучит как хайп, но тренд реальный:
всё чаще ML-алгоритмы применяются не только для генерации кода, но и для оптимизации CSS, DOM и layout-процессов.
Что такое Quantum CSS
ML-оптимизация верстки
Что нас ждёт
Мой вывод
А как ты относишься к идее ML-CSS?
Хотел бы, чтобы браузер сам решал, какие стили тебе нужны — или всё-таки контроль должен оставаться за человеком?
Звучит как хайп, но тренд реальный:
всё чаще ML-алгоритмы применяются не только для генерации кода, но и для оптимизации CSS, DOM и layout-процессов.
Что такое Quantum CSS
Если коротко — это концепция (а не фреймворк), где браузер или сборщик анализирует и оптимизирует стили на уровне движка, не дожидаясь ручной оптимизации от разработчика.
Mozilla когда-то начала этот путь с Project Quantum (оптимизация движка Firefox), и идея живёт:
браузер сам решает, как рендерить части DOM параллельно и какие CSS-правила реально нужны в viewport.
Главная цель:
ускорить перерисовку и минимизировать “CSS-инфляцию” — когда у проекта тысячи неиспользуемых классов и стилей.
ML-оптимизация верстки
ML-модели уже умеют анализировать структуру страницы и:
выявлять дублирующиеся CSS-паттерны;
предлагать оптимальную архитектуру классов (например, по BEM или atomic-подходу);
предсказывать layout shifts и предлагать фиксы для CLS;
автоматически “чистить” стили после деплоя (CSS pruning с учётом поведения реальных пользователей).
Что нас ждёт
Через пару лет мы можем прийти к IDE, которая:💛 отслеживает реальное использование на проде,💛 сама обучается оптимизировать layout.
Типа “GitHub Copilot для CSS”, но с реальной экономией трафика и FPS.
Мой вывод
CSS медленно превращается из “ручного ремесла” в систему адаптивной оптимизации.
И если сейчас мы думаем “как проще написать стили”,
то скоро будем думать “как обучить модель писать и обслуживать их за нас”.
А как ты относишься к идее ML-CSS?
Хотел бы, чтобы браузер сам решал, какие стили тебе нужны — или всё-таки контроль должен оставаться за человеком?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤2👎2🐳1👀1
Нативные API, о которых все забывают: File System, Clipboard, Web Share
Иногда кажется, что фронтенд уже придумал всё — фреймворки, SSR, рендеринг в стримах, use-сотый-хук.
А потом натыкаешься на Web API, которые о которых раньше не слышал.
🔘 File System Access API
🔘 Clipboard API
🔘 Web Share API
✅ Граница между «вебом» и «десктопом» становится всё тоньше.
То, что раньше было возможно только в Electron или нативных приложениях, сегодня работает прямо в браузере.
И это открывает довольно интересные UX-возможности — от локальных IDE до оффлайн-редакторов и менеджеров файлов.
Иногда кажется, что фронтенд уже придумал всё — фреймворки, SSR, рендеринг в стримах, use-сотый-хук.
А потом натыкаешься на Web API, которые о которых раньше не слышал.
Позволяет работать с файлами прямо на диске пользователя — читать, писать, сохранять без танцев с input[type=file].
Почти VS Code в браузере.
Отлично подходит для локальных редакторов, playground'ов, PWA-приложений.
Но важно: требует HTTPS и согласия пользователя (пожалуй это и хорошо).const handle = await window.showSaveFilePicker();
const stream = await handle.createWritable();
await stream.write("Hello world!");
await stream.close();
Уже давно не просто document.execCommand('copy').
Можно копировать/вставлять не только текст, но и изображения, HTML, JSON.
Если делаете дашборд, таблицы, визуальные тулзы — must have.await navigator.clipboard.writeText("Copied!");
const image = await navigator.clipboard.read();
Штука, которая превращает ваш сайт в «родное» приложение.
Позволяет вызвать системное окно шаринга (например, переслать ссылку в Telegram или Mail прямо из браузера).
Особенно удобно для мобильных PWA.await navigator.share({
title: "Frontend Magic",
text: "Проверь этот пост!",
url: location.href
});
То, что раньше было возможно только в Electron или нативных приложениях, сегодня работает прямо в браузере.
И это открывает довольно интересные UX-возможности — от локальных IDE до оффлайн-редакторов и менеджеров файлов.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍6⚡3
Forwarded from xCode Journal
ИИ-ассистент будет теперь доступен везде — так что ему можно будет поручать задачи или просить что-то объяснить. Плюс браузер будет подстраиваться под пользователя из-за встроенной памяти. Это новая эпоха поиска, официально.
Будет доступно бесплатно на macOS.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🐳3⚡1❤1😁1
Может, вам тоже знакома эта ситуация: работа в команде, где каждый день — это вызов? Или, возможно, вы хотите «запомниться» коллегам? Давайте посмотрим на проверенные методы, которые гарантированно обеспечат вам статус в офисе... правда, не самый положительный.
✅ Метод «Википедии»
Не можете найти общий язык с коллегами? Заведите раздел в корпоративной вики, где будете подробно описывать все «косяки» ваших товарищей. Скриншоты, временные метки и даже свидетели – всё в помощь! Через год у вас будет целая энциклопедия непроверенных данных, а новые сотрудники точно оценят вашу внимательность. Главное — не забывайте развивать «историю».✅ Техника «Zoom-бомбинга»
Следующий уровень: не бояться вмешиваться в чужие встречи. Особенно когда это ретроспективы других команд. Ну, а если коллега с начальником один на один? Скажите, что у вас «появился важный вопрос», и добавьтесь в Zoom-сессию. Так вы точно «услышите» не только своё мнение.✅ Стратегия «Героического непонимания»
Получил задачу, которую сразу не понял? Не спеши спрашивать. Поищи ошибки в коде, перепиши часть проекта и создай несколько гипотез. И только когда дедлайн уже на носу, напиши в чат: «Кто-нибудь понимает, о чём речь?» Ты же герой, и время для вопросов настало лишь накануне релиза.✅ Метод «Git-археологии»
Каждая ошибка коллеги должна стать поводом для расследования. И неважно, что это было два года назад. «А вот в коммите от марта ты сделал то же самое!» Найди старые косяки и просто забудь про свой собственный вклад в проект.✅ Стратегия «Собеседование саботажа»
Приехали на собеседование? Отлично! Теперь нужно создать атмосферу для будущих разработчиков. Садитесь в телефоне, задавайте вопросы, не относящиеся к теме, и жалуйтесь на отсутствие талантов. Главное — дайте понять, что молодёжь не та.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🐳3👀1
🚀 До 29 октября открыта регистрация на Yandex Cup 2025 — международный чемпионат по программированию с призовым фондом 12 млн рублей и финалом в Стамбуле.
Для участия доступно шесть направлений: аналитика, фронтенд, бэкенд, мобильная разработка, машинное обучение и «Алгоритм». Принять участие могут юниоры 14-18 лет из России и опытные программисты со всего мира.
Зарегистрироваться и пройти пробный тур можно до 29 октября, квалификация для большинства направлений — 2 ноября. Отборочный тур по ML проводится отдельно до 5 ноября.
Очный финал чемпионата пройдет в 5-7 декабря Стамбуле. Он будет посвящен мастерам, которые веками совершенствовали искусство крафта. Разработчикам предстоит почувствовать себя в роли древних мастеров, продолжая эту философию в коде с тем же вниманием к деталям и стремлением к идеалу.
Подать заявку и пройти пробный тур можно на сайте состязания.
Для участия доступно шесть направлений: аналитика, фронтенд, бэкенд, мобильная разработка, машинное обучение и «Алгоритм». Принять участие могут юниоры 14-18 лет из России и опытные программисты со всего мира.
Зарегистрироваться и пройти пробный тур можно до 29 октября, квалификация для большинства направлений — 2 ноября. Отборочный тур по ML проводится отдельно до 5 ноября.
Очный финал чемпионата пройдет в 5-7 декабря Стамбуле. Он будет посвящен мастерам, которые веками совершенствовали искусство крафта. Разработчикам предстоит почувствовать себя в роли древних мастеров, продолжая эту философию в коде с тем же вниманием к деталям и стремлением к идеалу.
Подать заявку и пройти пробный тур можно на сайте состязания.
❤2
Тестирование — это не просто «привет, юнит-тесты» и «проверим кнопку». Когда речь идет о больших приложениях с кучей состояний, анимаций и взаимодействий, интерфейсы становятся одним из самых уязвимых мест. И, если не тестировать интерфейсные взаимодействия должным образом, то рано или поздно придётся искать баги, скрытые за пользовательскими проблемами.
✅ Интерактивность и поведение: Простой пример — форма, которая не отправляется после клика, или чекбокс, который не обновляет свой статус. Такие вещи сложно отловить вручную, но они могут стать причиной огромного недовольства пользователей.✅ Кросс-браузерность и адаптивность: Интерфейс может выглядеть идеально в Chrome, но ломаться в Safari или на мобильном. С тестами таких проблем можно избежать, проверяя поведение компонентов на разных устройствах и браузерах.✅ UI/UX баги: Строго говоря, это не «классовые» баги, а проблемы, которые влияют на восприятие приложения. Несоответствие дизайну, неправильные анимации — всё это может уйти незамеченным в процессе обычного тестирования, но сказаться на восприятии вашего продукта.
👀 Cypress: Простой и мощный инструмент для энд-ту-энд тестирования. Он позволяет тестировать, как ваш интерфейс ведет себя в реальных сценариях: клики, заполнение форм, навигация, и многое другое. Cypress особенно удобен для динамичных SPA-приложений, где важно протестировать все возможные переходы и взаимодействия.👀 Если вам нужно больше гибкости, попробуйте Playwright. Он поддерживает тестирование нескольких браузеров и идеально подходит для тестирования UI на разных платформах, таких как Chrome, Firefox и WebKit. А ещё, в отличие от Cypress, Playwright поддерживает тестирование мобильных устройств из коробки.👀 React Testing Library: Если вы работаете с React, этот инструмент поможет вам тестировать компоненты с учётом пользовательских взаимодействий. Он фокусируется на тестах, которые проверяют не только логику, но и правильное поведение в контексте UI. Например, как компоненты реагируют на пользовательский ввод или как они отображаются при разных состояниях.👀 В случае, если вам нужно тестировать поведение интерфейса в браузере, Puppeteer — это тот инструмент, который поможет вам автоматизировать тесты в реальных браузерах. Это идеальный выбор для UI-тестов, где важен контроль над браузерными событиями и точность.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2👀2
Алоха коллеги.
Помогите улучшить контент 🤝
Хочу делать канал ещё интереснее и полезнее для вас.
Ответьте, пожалуйста, на 6 коротких вопросов — это займёт пару минут, а ваше мнение очень важно для меня!
https://docs.google.com/forms/d/e/1FAIpQLSf5K_4EzVd3piPXfM9B5dw2AiMHEEWU2y7_gNNAxUgpUuCMNA/viewform?usp=header
Помогите улучшить контент 🤝
Хочу делать канал ещё интереснее и полезнее для вас.
Ответьте, пожалуйста, на 6 коротких вопросов — это займёт пару минут, а ваше мнение очень важно для меня!
https://docs.google.com/forms/d/e/1FAIpQLSf5K_4EzVd3piPXfM9B5dw2AiMHEEWU2y7_gNNAxUgpUuCMNA/viewform?usp=header
Google Docs
Анкета для улучшения канала
Ответь на вопросы максимально честно🤝
👀4⚡2❤1
В JavaScript есть много мощных инструментов, которые не всегда получают должное внимание. Proxy и Reflect — это как раз те штуки, которые часто остаются за кадром. Но на самом деле, их возможности могут существенно упростить разработку, если знать, как правильно использовать. Давайте взглянем на несколько реальных примеров, где Proxy и Reflect могут быть полезными.
// Представьте, что вам нужно отследить, кто и когда обращается к объекту. Вместо того чтобы забивать код десятками console.log, можно просто использовать Proxy для перехвата. Теперь любое обращение к объекту будет логироваться. Это очень удобно, если вы работаете с большими стейтами, как в Vue или MobX.
const user = { name: "Alex", age: 25 };
const loggedUser = new Proxy(user, {
get(target, prop) {
console.log(`GET ${prop}`);
return Reflect.get(target, prop);
},
set(target, prop, value) {
console.log(`SET ${prop} = ${value}`);
return Reflect.set(target, prop, value);
}
});
loggedUser.name; // GET name
loggedUser.age = 26; // SET age = 26// Proxy может отловить некорректные значения и не дать им попасть в бизнес-логику. С таким подходом можно сделать простые data-models без классов и лишнего кода. Валидация и контроль за данными — проще не бывает.
const product = new Proxy({}, {
set(target, prop, value) {
if (prop === 'price' && value < 0) {
throw new Error("Цена не может быть отрицательной");
}
return Reflect.set(target, prop, value);
}
});// Reflect — набор методов для безопасной работы с объектами. Они выполняют стандартные операции, но предотвращают неожиданные ошибки и обеспечивают предсказуемое поведение.
Reflect.get(obj, 'key'); // вместо obj.key
Reflect.set(obj, 'key', 'value'); // возвращает true/false, не выбрасывает ошибки
// Комбо с Proxy выглядит так:
const safe = new Proxy(obj, {
get: (t, p) => Reflect.get(t, p),
set: (t, p, v) => Reflect.set(t, p, v)
});Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3🐳1
Многие, когда слышат термин utility-first CSS, сразу думают о Tailwind. Но на самом деле это не просто фреймворк, а подход к верстке. Tailwind лишь помог сделать этот подход популярным. Давайте разберёмся, что это за стиль и как его можно применить.
<!-- В классическом CSS мы описываем сущности. Utility-first CSS — это немного другой подход. Вместо того чтобы описывать компоненты, мы описываем свойства. Каждый класс — это атомарная единица стиля, которая выполняет одно действие. Когда нужно собрать сложный элемент, мы комбинируем несколько таких атомов, чтобы получить нужный результат -->
<button class="bg-black text-white rounded-lg px-4 py-2">Click</button>• Открыл HTML и сразу видишь, как выглядит элемент. Нет нужды прыгать по CSS-файлам, чтобы понять, как что-то стилизовано.
• Изолированность без сложных каскадов. Нет таких длинных цепочек, как .card .button.active:hover. Всё работает локально и предсказуемо.
• Нужно создать новый элемент? Просто комбинируешь существующие утилиты, без копирования и написания новых классов. Не нужно писать «ещё одну кнопку, только поменьше».
• Если нужно изменить отступы, это быстрее, чем искать, где в CSS заданы padding. Например, меняем класс px-4 на px-6 и сразу видим результат.
Этот подход можно применить и без фреймворка.
— Заведи слой утилит в обычном CSS:
.flex { display: flex; }
.gap-2 { gap: 0.5rem; }
.text-sm { font-size: 14px; }
— Используй CSS custom properties для хранения токенов, как --color-primary, --space-sm.
— Используй PostCSS или UnoCSS, чтобы собирать утилиты динамически.Если команда не договорится об atomic naming и начнёт использовать названия вроде text-12px flex1 mt-8px, это может привести к путанице и усложнить понимание кода. Особенно это критично в проектах без дизайн-системы, где утилиты могут превратиться в хаос. В таких ситуациях лучше использовать гибридный подход, комбинируя утилитарный стиль с обычными компонентами, чтобы обеспечить масштабируемость и переиспользование блоков.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👎1
