Обновить

Фронтенд

Сначала показывать
Порог рейтинга
Уровень сложности

Прощай, Tkinter: Как я написал FreedomGUI для создания красивых интерфейсов на Python

Время на прочтение1 мин
Охват и читатели260

Hello World!

Я много раз видел, как новички в программировании пытаются писать свои первые интерфейсы на Tkinter. Но результат выглядит, мягко говоря, не очень - старый, серый дизайн из девяностых часто отбивает любое желание продолжать.

Именно поэтому я решил создать FreedomGUI - максимально простую библиотеку, с которой писать код под интерфейсы станет легко, быстро, а главное — приятно.

Читать далее

Новости

Как я запарился считать плитку для ванной и написал свой калькулятор раскладки

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели576

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

Плиточник говорит — берите пятнадцать процентов запаса и всё. Пятнадцать процентов от плитки по 2000 с лишним за метр это уже сумма, я в столбик посчитал и решил что нет, надо по‑другому. Калькуляторы онлайн — площадь на цену умножают, я и сам умею. В CAD полез — там сначала модель строй, а мне не чертежи нужны были.

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

Читать далее

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

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели1.7K

Привет, это команда Яндекс Практикума. До конца приёмной кампании 2026 осталось чуть больше недели, но за это время можно успеть поступить в онлайн-магистратуру ИТМО или НИЯУ МИФИ в партнёрстве с Яндексом. Для этого выберите подходящее направление и оставьте заявку, а мы пришлём вам на почту дальнейшие инструкции. Чтобы оплатить обучение, вы можете использовать образовательный кредит с господдержкой с льготной ставкой 3%. В статье расскажем, как это сделать. 

Читать далее

DI во фронтенде: от Context API к Composition Root

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели2.2K

Современные веб-приложения содержат сложную бизнес-логику, которая ранее традиционно располагалась на бэкенде. С ростом сложности возникает необходимость в эффективном управлении зависимостями для поддержания тестируемости, модульности и слабого зацепления этих модулей в приложении. Принцип Инверсии зависимостей (Dependency Inversion, DIP) и его реализация в лице механизма Внедрения зависимостей (Dependency Injection, DI) становится ключевым инструментом для решения этих задач.

Читать далее

Платформер в стиле DOOM: портируем старую курсовую на чистый JavaScript

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели3.7K

Несколько лет назад у нас с одногруппником был зачёт по C++, и вместо того чтобы сделать что-то скромное (например, «Калькулятор» или «Генератор паролей»), мы, конечно же, решили замахнуться на какую-то игру, и тогда нам попалась новость о 30-летнем юбилее игры DOOM. План был красивый, т. к. на тот момент командной работы у нас не было, мы решили, что мой одногруппник пишет псевдо-3D-движок в духе классического рейкастинга, а я делаю 2D-платформер, который в итоге должен был запускаться прямо внутри его мира, как игровой автомат, который запускался бы перед игрой, и сколько патронов ты собрал, столько у тебя и будет в игре.

Проблема появилась не в архитектуре и не в гейм-дизайне, а гораздо раньше — на этапе, который мы оба благополучно пропустили: мы не договорились, на чём пишем. Я по рекомендации преподавателя взял SFML — с ним я уже возился на парах, там всё human-readable, спрайты, окна, звук из коробки. Товарищ выбрал SDL, т. к. видел гайд про DOOM на SDL — она даёт прямой доступ к буферу пикселей, что для рейкастинга буквально то, что нужно: рисуешь вертикальные полоски стен вручную, без лишней абстракции между тобой и экраном.

По отдельности оба выбора были правильными, а вместе — нет. Слинковать в одном проекте SDL и SFML можно, но два разных event loop, два разных подхода к окну и таймингу — это уже не работа для автомата по зачёту, а отдельная курсовая работа, на которую у нас оставалось дня два-три. Мы посчитали и сдали как два независимых проекта. Препод посмотрел, оценил — и выдал ровно ту фразу, которую в такой ситуации выдал бы любой человек, который знал о проекте: «Идея классная, жалко, что не объединили», но нам это было неважно на тот момент, как говорится, зачёт получили — и на этом спасибо.

Читать далее

Как находить работу в IT в 2026 году

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели5.9K

В апреле этого года я уже проводила похожее исследование: сравнивала теплые контакты и отклики на hh (всегда проверяю его на работоспособность). Конечно, победили теплые контакты - здесь я имела дело с людьми, а не с роботом или мало профессиональным рекрутером. И, что немаловажно, я нашла работу, но об этом чуть ниже.

Читать далее

Access‑token в переменной, refresh — в HttpOnly‑cookie: безопасная авторизация на Go + Vue 3

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели6.4K

Тема хранения токенов — одна из самых больных в авторизации. Многие, не до конца понимая, как авторизация должна работать, кладут оба токена в cookie или — что ещё хуже — в localStorage. В этой статье мы соберём схему, в которой access‑token живёт в памяти приложения, refresh‑token — в HttpOnly‑cookie, а фронтенд сам восстанавливает сессию после перезагрузки страницы и незаметно обновляет протухший access.

Бекенд — на Go, фронтенд — на Vue 3 (Vuex + vue‑router + axios), но концепция так же применима к React и Next.js. Верстку и стили оставляю за кадром — в статье только логика авторизации.

Читать далее

После комментариев на Хабре мы развернули тестовую ветку БОЛТУНа: Electron, WinUI 3 или Tauri 2?

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели5.3K

После первой статьи о БОЛТУНЕ мы развернули отдельную тестовую ветку и начали выбирать новый стек интерфейса. С помощью ИИ сравнили Electron, WinUI 3 и Tauri 2, проверили выводы по документации и собрали прототип на Tauri. Рассказываем, почему не переносим звук из C++ в WebView, как устроили границу WebView → Rust → C++, что уже работает, а что ещё предстоит измерить.

Читать эксперимент

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

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели5.1K

Всем привет! Меня зовут Лена, я ведущий DevRel в компании Lenta Tech (ИТ-бренд «Группы Лента»). Если заголовок этой статьи привлек ваше внимание, есть шанс, что вы часто выступаете на конференциях или митапах и хотите сделать свои выступления еще круче. 

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

Далее мы с вами обсудим общие советы по подготовке и отдельное внимание уделим подготовке именно ИТ-специалистов.

Читать далее

Как Omit {T, K} растворил типы, или что такое дистрибутивность типов в TypeScript

Время на прочтение7 мин
Охват и читатели87K

Представьте ситуацию: вы выкатываете новую фичу, а бэкендер спрашивает вас: «Слушай, а почему вместо событий — пустой объект?». Вы в шоке: «Как так — пустой объект? У меня же TypeScript, всё типизировано, такого не могло быть!». Спойлер — могло. 

Меня зовут Денис Платонов, я старший разработчик интерфейсов в Телемосте и я отвечаю за on-premise развёртывание веб-клиента Телемоста в инфраструктуре заказчика. В этой статье я расскажу о том, как безобидный на первый взгляд Omit превратил наш аккуратный тип событий в пустой объект. Заодно разберём, как работает дистрибутивность типов в TypeScript и поделимся, чему нас научил этот кейс.

Читать далее

Думал, Android пишет двигатель хуже iOS. Передумал. Потом оказалось, что прав, но по своему

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели5.3K

Полторы тысячи записей моторов с телефонов. Виноват был не бренд и не цена телефона, а то, чей DSP отрабатывает запрос браузера.

На iOS та же правка сработала наоборот.

Почему в Chrome маленькие JPEG выглядят иначе

Время на прочтение4 мин
Охват и читатели11K

Этот значок на компьютере моего коллеги выглядит лучше

Как-то я общался с коллегой у него за компьютером и заметил, что логотип выглядит не совсем так, как моём компьютере. На компьютере коллеги он казался тоньше и больше походил на исходное изображение. Он имел размер 15px; на картинке выше показана его увеличенная версия.

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

Если прищуриться или отойти подальше, то изображение из Chrome выглядит толще. Это немного странно, но если заменить картинку на SVG, то проблема исчезнет. Однако мне всё равно стало любопытно: почему она вообще так рендерится?

Я провёл исследование и обнаружил в Chrome изящную оптимизацию, используемую для рендеринга JPEG в мелком масштабе.

Читать далее

GridStack: цена выбора API для nested grids

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели4.8K

Реальный кейс с nested grids в GridStack:

— почему подход на addGrid() привёл к ручной синхронизации DnD, проблемам с lifecycle и множеству фиксов;

— как переход на subGridOpts упростил архитектуру и сделал поведение стабильным.

Читать далее

Ближайшие события

Страница, которая не моргает: SPA-роутинг для HTML и Web Components

Время на прочтение4 мин
Охват и читатели5.1K

Фреймворки дают клиентский роутинг из коробки. У HTML и Web Components его нет. Если сайт уже отдаёт полные страницы, а клиентская навигация нужна только для части разделов, переписывать всё на фреймворк незачем.

Aura Router решает эту задачу, сохраняя HTML исходной точкой: маршруты объявляются как Custom Elements, а ссылки остаются обычными <a href>. Без JavaScript те же URL открываются как обычные страницы.

В статье соберём минимальный сайт из двух страниц и проверим прямой заход по URL, клиентскую навигацию и работу ссылок без JavaScript.

Читать далее

Мои любимые CSS-трюки для фронтендеров, которые не используют Tailwind

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели12K

Привет, Хабр!

Сегодня фронтендеры любят подход атомарных классов, в частности Tailwind. Я не имею ничего против этого подхода. Каждый волен выбирать сам, с чем ему работать.

Но если вы пишете стили по-старому с использованием семантических классов, то у меня есть несколько интересных трюков для вас. Ими пришёл поделиться с вами сегодня.

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

Давайте посмотрим, что я вам подготовил.

Читать далее

Tinted — то, из‑за чего ты захочешь использовать терминал

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели5.8K

Всем привет! Меня зовут Илья, я frontend‑разработчик.
Но сегодня хочу поговорить не о JavaScript, а о терминале.

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

Обычно мысли о терминале вызывают ступор. Кажется, что это что‑то непонятное, черно‑зеленое и предназначенное только для «настоящих программистов», и на практике большинство ограничивается npm run dev, git status и на этом все.

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

Сразу оговорюсь: речь пойдет исключительно о терминале, а не о NeoVim.
NeoVim — это отдельная большая тема.

Читать далее

Как я ускорил TypeScript-типы в 15.7 раза

Время на прочтение3 мин
Охват и читатели7.1K

Иногда TypeScript думает мучительно долго. У меня это вылезло не самым приятным способом: @_chenglou — он работал над React, ReasonML и ReScript, а сейчас над Midjourney — завёл в моей библиотеке схем issue «Large TS types cause type inference slowdown».

Ну… неприятно. Но я знал, что в системе типов TS люди собирали и не такое, вплоть до Doom, — значит, тормоза лечатся, а не заложены в фундамент.

Дальше всё оказалось довольно механически. Сначала тесты на типы, чтобы ничего не сломать молча: оптимизация типов легко превращает { a: string } в { a?: string }, и никто вам об этом не сообщит. Потом замеры через @ark/attest от создателей ArkType — он считает, во сколько инстанцирований типов обходится выражение, и фиксирует это как бейзлайн, который дальше можно занести в CI. И только после этого — сама оптимизация.

Фикс в итоге оказался на одну строчку. S.Output матчился по всему типу Schema<…> — большому объекту с перегрузками, пересечённому с юнионом всех вариантов схемы, — хотя готовый тип всё это время лежал в соседнем поле ~standard. Достаточно было заглянуть сразу туда.

Извлечение типа стало дешевле в 15.7 раза и перестало зависеть от размера схемы. В статье — таблица со всеми замерами до и после, код тестов и бенчмарков и рецепт, который можно применить к своему проекту.

Читать далее

RAG без магии: что действительно влияет на качество системы

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели9.3K

У большинства разработчиков, не работающих с ИИ, ментальная модель RAG либо ошибочна, либо опасно неполна. И дело не в том, что они плохие инженеры, — просто почти всё, что написано про RAG, это либо десятиминутный туториал по фреймворку, за которым не видно ни одного реального решения, либо научная статья для тех, кто и так занимается этим профессионально. Между этими крайностями почти ничего нет.

Эта статья — как раз то, что между ними. Недавно я собрал продакшн-систему RAG поверх 62 книг по античной истории (~46 000 чанков) и проверил каждое проектное решение на фиксированном тестовом наборе — включая те решения, которые не сработали. Я пропущу маркетинг фреймворков и расскажу о тех немногих вещах, которые действительно определяют, можно ли доверять вашей RAG-системе, — и подкреплю всё цифрами.

Всем привет, меня зовут Лев Рябов, я фронтенд-разработчик в М2 Tech. После прочтения этой статьи вы поймете, что чтобы во всём разобраться, знания ML не нужны. Если вы умеете писать REST API и делать запросы к PostgreSQL, вы сможете построить всё, что здесь описано.

Читать далее

Когда setState недостаточно: как я написал транзакционный стейт-менеджер на TypeScript

Уровень сложностиПростой
Время на прочтение18 мин
Охват и читатели11K

Стейт-менеджеров в JavaScript уже столько, что идея написать ещё один выглядит немного сомнительно. Есть Redux Toolkit, Zustand, MobX, Jotai, XState и десятки менее известных библиотек. Почти для любого способа хранить состояние уже существует готовое решение. Но все же в качестве эксперимента, решил реализовать свою идею.

Читать далее

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

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели12K

Привет, это команда Яндекс Практикума! Напоминаем, что приёмная кампания на программы онлайн-магистратур совсем скоро закончится — осталось меньше месяца. Делимся с вами инструкцией, как подать документы в онлайн-магистратуру через Госуслуги: какие документы понадобятся, как подать согласие и как избежать самых распространённых ошибок.

Подать документы в онлайн-магистратуру можно онлайн через суперсервис «Поступление в вуз онлайн» на Госуслугах. Вам не обязательно лично посещать приёмную комиссию: заявление заполняется в личном кабинете, туда же загружаются документы, статус заявки можно отслеживать онлайн.

Читать далее
1
23 ...