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

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

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

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

Сбер. Как некрасиво поступить на конкурсе красоты

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

Хабр - не жалобная книга, я знаю. Но тут история про код, с примерами, разбором антипаттернов и всё такое, поэтому я рискну.

Всё началось, когда я узнал про конкурс красоты кода от Сбера. Я как раз хотел поучаствовать в каком-нибудь эпичным конкурсе, а тут как раз он мне и подвернулся, тем более что я - тот человек, которому есть что рассказать про красивый код. Я даже целую статью запилил о том, как писать красивый и понятный код. Так что что я решил, что в данном случае мои шансы на победу - в отличие от остальных конкурсов - всё же больше 0%. Кроме того, я хотел выступить на конференции PiterPy (спойлер: хрен мне), чтобы рассказать там про красивый код и всё такое, поэтому участие в конкурсе и сравнение результатов было бы классным подспорьем.

Что же пошло не так?
Всего голосов 301: ↑286 и ↓15+271
Комментарии93

Новости

Географические ограничения на Хабре

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

Несколько лет назад мы рассказали про то, как Хабр обрабатывает официальные обращения, а также анонсировали наш раздел Transparency report, в котором мы своевременно публикуем информацию об обращениях. Что ж, с тех пор кое‑что поменялось и настало время для новой публикации с небольшим апдейтом.

Читать далее
Всего голосов 194: ↑192 и ↓2+190
Комментарии87

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

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

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


Вот примеры.


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


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

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

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

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

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

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

Не верите?

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

Истории

Капибара, Новый Старый Пикабу

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

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

Читать далее
Всего голосов 180: ↑173 и ↓7+166
Комментарии225

Насколько потолстел JavaScript к 2024 году?

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

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

И всё это время я жил с мыслью, что если средний размер страницы равен, скажем, 3 МБ, то JS-бандл должен составлять около 1 МБ. Естественно, основную часть объёма должно занимать содержимое, не так ли?

Что ж, проверить это можно лишь экспериментальным путём, чем я и займусь! Эту статью я пишу в 2024 году и думаю, что через пару лет эксперимент неплохо бы повторить.
Читать дальше →
Всего голосов 160: ↑157 и ↓3+154
Комментарии159

Хороший ретрай, плохой ретрай, или История одного падения

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

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

Меня зовут Денис Исаев, и я работаю в Яндекс Go. Сегодня я поделюсь опытом решения проблем с отказоустойчивостью из-за ретраев. Основано на реальных инцидентах в системе из 800 микросервисов.

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

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

Тирания маргинального юзера. Почему всё вокруг становится примитивнее

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


C каждым годом софт требует всё больше ресурсов: больше памяти, мощного CPU, аппаратного ускорения графики и т. д. Причина в целом понятна. Постоянные тормоза веб-платформы и нового софта — отчасти плата за удобство разработки (с повышением уровня абстракций). Железо становится мощнее, индустрия это использует. Всё нормально.

Но непонятно другое. Почему происходит реальная деградация интерфейсов. Грубо говоря, почему они становятся всё более примитивными и тупыми, словно рассчитаны на жителей «Идиократии» (на КДПВ). И речь не только о веб-сайтах.
Читать дальше →
Всего голосов 176: ↑162 и ↓14+148
Комментарии596

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

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

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

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

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

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

Пару месяцев назад я запустила сервис y.gy, навороченный сокращатель URL. Вызвано это было личной нуждой: в другом моём проекте, getwaitlist.com, используется множество реферальных ссылок, а доступные сервисы сокращения url не внушали мне доверия. В итоге я решила создать собственный инструмент, который наверняка окажется полезен не только мне.

Я разработала лучший в своём роде сокращатель со всеми возможными примочками, начиная с обширной кастомизации и заканчивая хорошей аналитикой трафика. Это всё, что мне было нужно. По аналогии со многими аналогичными инструментами я разместила интерфейс «Shorten Link» по центру домашней страницы. Регистрация для использования сервиса не требуется. Я сделала доступ бесплатным и неограниченным, опираясь на принцип: «бесплатность – лучшая маркетинговая стратегия». Закончив с настройкой, я без громких заявлений сделала релиз и начала потихоньку продвигать свой проект.
Читать дальше →
Всего голосов 146: ↑142 и ↓4+138
Комментарии70

16-, 8- и 4-битные форматы чисел с плавающей запятой

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

Уже лет 50, со времён выхода первого издания «Языка программирования Си» Кернигана и Ритчи, известно, что «числа с плавающей запятой» одинарной точности имеют размер 32 бита, а числа двойной точности — 64 бита. Существуют ещё и 80-битные числа расширенной точности типа «long double». Эти типы данных покрывали почти все нужды обработки вещественных чисел. Но в последние несколько лет, с наступлением эпохи больших нейросетевых моделей, у разработчиков появилась потребность в типах данных, которые не «больше», а «меньше» существующих, потребность в том, чтобы как можно сильнее «сжать» типы данных, представляющие числа с плавающей запятой.

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

Читать далее
Всего голосов 132: ↑131 и ↓1+130
Комментарии99

На светлом-светлом Хабре появилась тёмная-тёмная тема

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

Привет, Хабр! Мы приготовили для вас долгожданный подарок (из заголовка вы уже поняли, какой), но мы вам его просто так, как говорится, не отдадим 😃

Читать далее
Всего голосов 157: ↑140.5 и ↓16.5+124
Комментарии137

Разбираем 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

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

Как мы заработали 1700000 руб на Telegram-боте для создания фотокниг с помощью нейросети. Фейлы и выводы

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

Решил сэкономить вам 2 года, и разобрать фейлы, которые мы допустили на этапе запуска и продвижения продукта. Будет полезно, если думаете запустить свой IT продукт.

Читать далее
Всего голосов 145: ↑128 и ↓17+111
Комментарии132

Назад в будущее Хабра. Трекер 3.0

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

Приветствуем вас, наши дорогие пользователи! Без долгих предварительных ласк: новый трекер, налетайте 🙂

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

Утечки памяти, которые не утечки

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

Что случилось? Авария, ужас-ужас

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

В один прекрасный день боевое сопровождение приходит с ужасной проблемой — память в контейнерах Node.js течёт, сервисы падают с OOM каждый день, все пропало!

Да, картинка действительно удручающая. Всё время, когда есть нагрузка, память в контейнере прирастает и почти не очищается при снятии нагрузки. Все остальные метрики, которые мы собирали были в норме: event loop lag, использование CPU, active request, open handles. Прирастала только используемая память и незначительно увеличивалось время отклика сервиса.

Что-ж, выглядит как классическая утечка, надо искать источник.

Читать далее
Всего голосов 108: ↑107 и ↓1+106
Комментарии15

Программирование и ИТ во мгле, но это не точно

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

Приветствую хабравчане!

В данной статье хочу поделиться проблемами в ИТ. Высказать об этом своё мнение. Обсудить в комментариях, всё ли так плохо на самом деле и каков выход из данной ситуации. Меня не покидает ощущение, что мы как программисты, что то потеряли при очередном витке ИТ прогресса. Обсудим?

Давай, чё там у тебя
Всего голосов 157: ↑130.5 и ↓26.5+104
Комментарии304

Скрытые возможности элемента <input>

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

Элемент <input> в HTML самый интересный.

Большинство его собратьев вне зависимости от своих атрибутов ведут себя одинаково. При этом атрибут type элемента <input> может принимать 22 разных значения, которые не только меняют его поведение, но и влияют на внешний вид (зачастую в ущерб стилистике).

Элемент <input> отвечает за всё, начиная с текстового ввода и чекбоксов, заканчивая переключателями и кнопкой для сброса всех полей в форме. В этой статье я опишу не только различные типы <input>, но и сопутствующие атрибуты, о которых вы могли не знать, и которые делают этот элемент более удобным и применимым в различных ситуациях. Приступим!
Читать дальше →
Всего голосов 103: ↑102 и ↓1+101
Комментарии22

М.Видео: Нам всё равно

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

3 месяца и 40 обращений. Ровно столько времени и усилий мне потребовалось, чтобы прийти к выводу в заголовке статьи.
Но статья – не жалобная книга. Опираясь на полученный опыт, я поделюсь с вами полезными советами, как решать проблемы с компанией М.Видео. Да и с другими компаниями тоже.
Помимо этого, в статье масса примеров того, как делать не надо с точки зрения UI и UX.
Хочу всё знать
Всего голосов 173: ↑134 и ↓39+95
Комментарии230

Бесплатные векторные карты на своём хостинге

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

Векторные карты Protomaps на базе OSM

Каждый веб-разработчик знает о OpenStreetMap (OSM), свободной альтернативе Google Maps. Несмотря на всеобщую известность OSM, у некоторых всё-таки возникают вопросы: как сделать веб-карту с открытыми данными OSM, как самостоятельно публиковать карты?

На эту тему есть популярные руководства, в том числе по работе с базами PostGIS и запуску тайлсерверов для реализации бесшовных карт OSM. Но есть принципиально иной подход — векторные карты Protomaps, которые обеспечивают более высокое разрешение, настройку внешнего вида и наложение произвольных меток. Они изначально предполагают максимальную простоту в создании своих карт. А главное, что разместить тайлы можно на своём хостинге или в облаке.
Читать дальше →
Всего голосов 89: ↑86 и ↓3+83
Комментарии12
1
23 ...

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