Как стать автором
Обновить
419.19

Веб-разработка *

Делаем веб лучше

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

JavaScript повсюду или почему веб-технологии захватили мир

Время на прочтение18 мин
Количество просмотров15K

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

Пробежимся галопом по истории интернета, перемоем косточки фронтендерам и придем к неутешительному заключению. Буду ругать и хвалить, но выводы делать лишь вам. Хотя и не надеюсь кого-то в чем-то убедить. Добро пожаловать под кат!

Читать далее
Всего голосов 42: ↑39 и ↓3+36
Комментарии38

Ох уж эти CSS-переменные

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


Я люблю создавать компоненты везде и всегда, поэтому пользовательские CSS-свойства, также известные как CSS-переменные, являются одной из моих любимых фишек, которая позволяет писать более модульный код. При работе с ними я набил достаточно шишек, выпил литры чая и убил кучу времени. Теперь я «мастер», и хочу поделиться своим опытом.
Читать дальше →
Всего голосов 56: ↑56 и ↓0+56
Комментарии13

Над какими проектами работали студенты образовательного центра VK в Бауманке

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

Привет, Хабр! VK совместно с МГТУ им. Н.Э. Баумана много лет активно развивает образовательные программы для студентов. Для этого у нас есть направление VK Education, которое помогает нам обучать студентов по широкому спектру IT и digital-специальностей. Один из совместных проектов – учебный центр для разработчиков на базе МГТУ им Н.Э. Баумана. На протяжении двух лет ребята проходили программу обучения, объединялись в команды и под руководством преподавателей и экспертов из VK создавали собственные проекты по разным направлениям — web-, ML- и Java-разработка высоконагруженных приложений.

Недавно в московском офисе VK состоялась защита выпускных работ. Экспертный совет выбрал лучшие проекты, часть из них удостоилась победы в специальной номинации –  «Выбор ментора».

В этой статье мы познакомим вас с разработками выпускников и расскажем, какие из них стали победителями. С видеопрезентациями работ можно познакомиться в сообществе VK Education ВКонтакте. 

Читать далее
Всего голосов 26: ↑26 и ↓0+26
Комментарии0

Разворачиваем веб-приложение в Kubernetes с нуля

Уровень сложностиПростой
Время на прочтение31 мин
Количество просмотров34K

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

Всё это время для простоты разработки и отладки компоненты приложения запускались локально через Docker Compose. Но как развернуть такое приложение в настоящем продакшн-окружении? Как обеспечить горизонтальное масштабирование? Как раскатывать новые релизы без простоя? 

В этой статье мы разберёмся, как разворачивать многокомпонентное веб-приложение в кластере Kubernetes на примере его локальной реализации — minikube. Мы поднимем виртуальный кластер прямо на рабочем ноутбуке, разберёмся с основными сущностями Kubernetes, запустим и соединим между собой компоненты демо-приложения и обсудим, какие ещё возможности Kubernetes пригодятся нам в суровом энтерпрайзе. Если вы занимаетесь разработкой и слышали о Kubernetes, но ещё не имели возможности пощупать его руками — добро пожаловать под кат!

Скорее к YAML-инженерии
Всего голосов 38: ↑38 и ↓0+38
Комментарии10

Истории

Разбираем HTTP/2 по байтам

Уровень сложностиСредний
Время на прочтение24 мин
Количество просмотров27K

image


Откройте любую статью с обзором HTTP/1.1. Скорее всего, там найдётся хотя бы один пример запроса и ответа, допустим, такие:


GET / HTTP/1.1
Host: localhost

HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Content-Length: 38
Content-Type: text/html; charset=utf-8

<!DOCTYPE html>
<h1>Привет!</h1>

Теперь откройте статью с обзором HTTP/2 или HTTP/3. Вы узнаете о мультиплексировании запросов, о сжатии заголовков, о поддержке push-технологий, но вряд ли увидите хоть одно конкретное сообщение. Ясно, почему так: HTTP/1.1 — текстовый протокол, тогда как сиквелы к нему бинарные. Это очевидное изменение открывает дорогу ко множеству оптимизаций, но упраздняет возможность просто и доступно записать сообщения.


Поэтому в этой статье предлагаю покопаться в кишках у HTTP/2: разобрать алгоритмы установки соединения, формат кадров, примеры взаимодействия клиента с сервером.

Читать дальше →
Всего голосов 115: ↑115 и ↓0+115
Комментарии45

Прекратите превращать программирование в религию (восклицательный знак)

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров49K

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

Не верите?

Давайте я покажу вам.
Всего голосов 239: ↑205 и ↓34+171
Комментарии302

Я бы пересмотрел вообще всё

Время на прочтение4 мин
Количество просмотров76K

В программировании нет вообще никаких непреложных истин. Даже самые очевидные правила могут иметь контекст, в которых их применять нельзя. К сожалению в 99% организаций есть прям заповеди, обязательные к исполнению. И есть правила, которые считаются правилами хорошего тона (как не сморкаться в занавеску). Однако всегда бывают ситуации, когда лучше все-таки сморкаться.


Вот примеры.


1) Например, DRY — don’t repeat yourself. Хорошее полезное правило, но его можно довести до маразма. Из того что я встречал на практике: есть два разных по бизнес-смыслу раздела, которые начинались с простого CRUD, и многие части (и фронта и бека) выглядели во многом абсолютно одинаково. Если их объединить с помощью общей высосанной из пальца абстракции и тем самым избавиться от небольшого дублирования кода, то потом (очень скоро) можно будет сойти с ума, потому что эти две вещи скоро разъедутся, обрастая кастомными фичами, и абстракция будет только вредить. Нельзя абстрагировать неабстрагуемое, даже если DRY нарушен.


«[Немного] дублирования обходится гораздо дешевле, чем неправильная абстракция» — Сэнди Мец

Т.е. DRY — хороший принцип, но бывают исключения.

Читать дальше →
Всего голосов 261: ↑219 и ↓42+177
Комментарии346

Неразрешимые проблемы разработки

Время на прочтение3 мин
Количество просмотров10K


Сроки


В разработке ПО существует неразрешимое противоречие — это оценка сроков.


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


С другой стороны, разработка порою в душе не е... вообще не знает, сколько надо времени, особенно если


  • новая функциональность нетипична
  • есть зависимости на другие команды
  • будет задействована новая технология
  • ТЗ надо сильно уточнять
  • надо разобраться в логике легаси-кода

Часто, для того, чтобы точно оценить сроки, нужно, собственно, сделать половину работы. Чем точнее надо оценить сроки, тем больше надо на это затратить времени, что приводит к суммарному увеличению time-to-market, причем все равно без гарантий.

Читать дальше →
Всего голосов 49: ↑46 и ↓3+43
Комментарии128

Чёрт тебя возьми, CSS

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

У CSS много моментов, которые сбивают с толку. Разработчики плюются от него. А мне нравится CSS, несмотря на мои потраченные нервы. Подумав, как помочь другим меньше мучаться, я собрал ряд неочевидных моментов. Они сбивали с толку меня и моих знакомых. Надеюсь, вам будет полезно.

Читать дальше →
Всего голосов 60: ↑58 и ↓2+56
Комментарии52

Если ваш фронтендер перестал бояться IE6, покажите ему SmartTV

Время на прочтение7 мин
Количество просмотров22K

В декабре 2021 года под новогодние праздники в приложении Кинопоиска для SmartTV появился раздел с Яндекс Музыкой. Он позволил пользователям на телевизорах открывать новые для себя треки в Моей волне, включать популярные подборки и слушать собственную коллекцию на телевизорах.

При создании этого раздела я впервые столкнулась с миром SmartTV. Не каждый фронтендер встречает в своей практике подобные задачи, даже несмотря на то, что сейчас разработка под ТВ довольно популярна.

Меня зовут Лена и я фронтенд-разработчик Яндекс Музыки. В этой статье я расскажу про особенности работы SmartTV и разработки под них на примере свежей фичи, которую мы назвали Время клипов. Теперь в приложении вы можете посмотреть клипы любимых артистов и открывать для себя новых исполнителей, которые подходят вам по настроению.

Под катом обсудим ключевые отличия работы фронтенда над вебом и SmartTV, поговорим про оптимизацию и вёрстку и посмотрим на фотографии множества пультов (без пакетиков).

Читать далее
Всего голосов 64: ↑64 и ↓0+64
Комментарии85

Учимся разрабатывать REST API на Go на примере сокращателя ссылок

Уровень сложностиСредний
Время на прочтение30 мин
Количество просмотров41K

В этой статье мы напишем полноценный REST API сервис — URL Shortener — и задеплоим его на виртуальный сервер с помощью GitHub Actions.

Говоря «полноценный», я имею в виду, что это будет не игрушечный проект, а готовый к использованию:

  • мы выберем для него актуальный http-роутер,
  • позаботимся о логах,
  • напишем тесты: unit-тесты, тесты хэндлеров и функциональные,
  • настроим автоматический деплой через GitHub Actions и др.

Но важно понимать, что «готовый к продакшену» != «энтерпрайз».

Кратко обо мне: меня зовут Николай Тузов, я много лет занимаюсь разработкой на Go, очень люблю этот язык. Также веду свой YouTube-канал, на котором есть видеоверсия текущего гайда, с более подробными объяснениями.
Читать дальше →
Всего голосов 57: ↑56 и ↓1+55
Комментарии40

Мои любимые вопросы о CSS с ответами. Версия 2023 года

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

В 2020 году я поделился списком моих любимых вопросов о CSS, который стал довольно популярным, судя по просмотрам. Спустя 3 года CSS изменился, и я решил дополнить список, добавив вопросы про гриды, пользовательские свойства (CSS-переменные), новые селекторы и свойства.

Работая над вопросами, мне хотелось помочь вам в изучении новых возможностей CSS и тех моментов, которые многие разработчики упускают, судя по моей практике. Также вы можете использовать их, если проводите интервью. Я буду только рад этому. А теперь давайте начнём.
Читать дальше →
Всего голосов 50: ↑49 и ↓1+48
Комментарии18

Скажи что-нибудь на разрабском, Figma

Время на прочтение5 мин
Количество просмотров18K

Привет! С вами Виктор 👺, тэнгу‑хранитель одной из дизайн‑систем Ozon.

В июне 2023 года Figma выкатила мощное обновление, во многом ориентированное на разработчиков. Точнее на поиск общего языка между проектировщиком и программистом. Я давно занимаюсь дизайн‑системами и знаю как тесно связан дизайн и код. Насколько взаимопонимание между дизайнером и разработчиком ускоряет доставку продукта до пользователя.

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

Помогут ли новые фишки Figma наладить общение?

Потрогаем Dev Mode →
Всего голосов 41: ↑41 и ↓0+41
Комментарии15

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

Неудачное внедрение Redis Cluster в монолит на PHP 7.2.X

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

Исповедь о том как принес в проект проблему, которую так и не устранил в течение долгого времени.

Осторожно! Статья может вызвать обострение профессиональных заболеваний вплоть до боли ниже поясницы.

Читать далее
Всего голосов 28: ↑28 и ↓0+28
Комментарии12

История одной XSS в Telegram

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

Здравствуйте, уважаемые читатели Хабра! Сегодня я хочу поделиться с вами информацией о XSS-уязвимости, которую я обнаружил в Telegram около двух недель назад. Также статья коснется некоторых особенностей работы программы поиска уязвимостей от Telegram. Моя цель — не только продемонстрировать вам интересный и относительно простой пример XSS, но и обозначить причины, по которым, возможно, не стоит тратить свои усилия на участие в багбаунти программе Telegram.

Читать далее
Всего голосов 148: ↑145 и ↓3+142
Комментарии59

В поисках лучшей версии EcmaScript для сборки сайта

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров6.2K

Как оказалось, выбор версии ES для сборки веб приложения, а так же организация самой этой сборки, может оказаться весьма сложной задачей. Задачей, включающей в себя много разнообразных вопросов.

В статье вы увидите бенчмарк производительности EcmaScript фич; узнаете какой из компиляторов генерирует самый производительный JavaScript код; а также можно ли добиться прироста производительности, начав собирать сайт в более поздней версии ES.

Читать далее
Всего голосов 26: ↑26 и ↓0+26
Комментарии18

Китайские сайты такие китайские

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

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

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

Дисклеймер. Ничего из сказанного ниже не стоит воспринимать как камень в огород китайского дизайна и его создателей. Все, о чем пойдет речь в статье, просто непривычно европейцу.

Читать далее
Всего голосов 38: ↑34 и ↓4+30
Комментарии46

Массовый дефейс веб-сайтов .РФ

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

26 мая 2023 года произошёл массовый дефейс веб-серверов национального сегмента сети интернет .РФ. В качестве цели атаки выступила CMS «Битрикс».

В ходе расследования выяснилось, что атака подготовлена заранее. Подготовка велась с 2022 года через известные уязвимости, включая CVE-2022-27228. Техническое описание см. на форуме разработчиков. Возможно, это самая крупная атака против национального сегмента .РФ в его истории.

Компания CyberOK выпустила отчёт c описанием атаки и разъяснением необходимых действий для того, чтобы удалить с сервера бэкдор, устранить уязвимости «Битрикса» и восстановить приложение. Также приведены рекомендации по защите веб-приложения.
Читать дальше →
Всего голосов 83: ↑77 и ↓6+71
Комментарии102

Создаем блог на Django с опросами и тестами. Краткая инструкция. Часть 2

Время на прочтение6 мин
Количество просмотров8.5K

В предыдущей части мы частично разобрали шаблон для нашего блога, выбрали виртуальную машину и запустили на ней нативный веб-сервер Django. Однако он предназначен только для тестирования и запуска приложений во время разработки. Для обработки запросов в продакшене нужно настроить Nginx и WSGI Gunicorn. В этой статье показываем, как это сделать.
Читать дальше →
Всего голосов 45: ↑45 и ↓0+45
Комментарии6

Битва CLIs: почему мы отказались от Angular CLI в пользу Nx

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

Привет! Меня зовут Даниил, я фронтенд-разработчик в Тинькофф Бизнесе. Мы строим удобные интерфейсы, чтобы клиенты могли быстро зарегистрировать бизнес.

Сегодня я хочу рассказать, почему мы используем Nx для всех наших Angular-проектов, какие проблемы решает этот инструмент и чем он лучше Angular CLI.

Читать далее
Всего голосов 25: ↑25 и ↓0+25
Комментарии5

Вклад авторов