Я снимаю кинофестивали, шины от поставщика Формулы-1 и даже робота-хирурга прямо в операционной. Но снимал и из багажника, в студии-каморке, и начинал с подручных средств. Поэтому решил собрать 3 комплекта для съемок под разный бюджет: от бабушкиной пенсии до зарплаты айтишника.
User
Заблуждения программистов о времени
Музей-скансен эпохи Средневековья в Дании в режиме обычной работы (слева) ставит целью воссоздать повседневную жизнь города на стыке XIV и XV веков. Для съёмок фильма (справа) он «погрязнел»
Для киносъёмок в музей под открытым небом Middelaldercentret внесли несколько изменений. Вместо аккуратной каменной улицы развели неприятную кашицу из грязи, не самые роскошные стеклянные окна прикрыли досками и развесили везде выцветшее тряпьё. Здания как следует измазали чем-то коричневым, кое-где зачем-то перемешав субстанцию с соломой. В случайное здание воткнули факел, а не попытались изобразить лучину или фонарь.
Причина проста: кинозритель должен узнать на экране эпоху. Приходится снабжать снимаемое полным набором заблуждений про грязных неграмотных горожан, непрекращающиеся войны и еду без специй.
При проектировании информационных систем задача стоит ровно обратная: необходимо отразить реальность и не допустить в код собственные заблуждения. Ошибок восприятия много. По крайней мере, про карты и почтовые адреса получаются длинные списки.
Попытки собрать заблуждения про время и часовые пояса на Хабре уже были шесть и десять лет назад. Но без контрпримеров не так интересно.
Заблуждение 1. В сутках 24 часа или 86 400 секунд
Иногда и кое-где стрелки часов переводят, создавая сутки длиной в 23 и 25 часов — всё очевидно. Будет неплохо углубиться в случаи поэкзотичней.
4 миллиарда операторов if
Просматривая недавно соцсети, я наткнулся на этот скриншот. Разумеется, его сопровождало множество злобных комментариев, критикующих попытку этого новичка в программировании решить классическую задачу computer science: операцию деления с остатком.
В современном мире, где ИИ постепенно заменяет программистов, отнимая у них работу и совершая переворот в том, как мы подходим к рассуждениям о коде, нам, возможно, следует быть более открытыми к мыслям людей, недавно пришедших в нашу отрасль? На самом деле, показанный выше код — идеальный пример компромисса между временем и задействованной памятью. Мы жертвуем временем и в то же время памятью и временем компьютера! Поистине чудесный алгоритм!
Поэтому я решил изучить эту идею проверки чётности числа при помощи одних сравнений, чтобы понять, насколько хорошо она работает в реальных ситуациях. Я сторонник высокопроизводительного кода, поэтому решил реализовать это на языке программирования C, потому что он и сегодня остаётся самым быстрым языком в мире с большим отрывом от других (благодаря гению Денниса Ричи).
История user-agent в браузерах
И потом пришел новый веб-браузер, известный как «Mozilla», что сокращением было для «Mosaic Killer»(«Убийца Мозаики»), но Mosaic не понравилось это, так что имя было изменено на Netscape и Netscape называл себя Mozilla/1.0 (Win3.1), и не было больше счастья. И Netscape поддерживал фреймы и фреймы стали популярны в народе, но Mosaic не поддерживал фреймы, и поэтому пришло время вынюхивания user agent-ов, и для Mozilla вебмастеры посылали фреймы, но для других браузеров не посылали.
Запускаем PostgreSQL в Docker: от простого к сложному
О простых и продвинутых способах запуска PostgreSQL в Docker: добавляем healthcheck, ставим на мониторинг, настраиваем параметры.
Clickhouse — непростая жизнь в продакшене
Около двух лет назад вышла небольшая статья Kafka Streams — непростая жизнь в production, в которой я описывал сложности, с которыми наша команда столкнулась при попытке решить задачи проекта с помощью kafka-streams. Эксперимент вышел неудачным, и мы в итоге совсем отказались от этой технологии. Вместо нее решили попробовать Clickhouse (CH), и сейчас уже можно сказать, что эта база нам очень хорошо подошла и отлично решает почти все задачи, которые нам ставит бизнес. В этой статье я расскажу об особенностях использования CH.
Как я вошёл в клуб бага 323
Это история о баге, который бы заставил вас рвать на себе волосы. Из-за такого бага вы можете подумать: «Но это невозможно, должно быть, компилятор сломался, других вариантов нет!»
А баг компилятора — это серьёзно: за двенадцать лет программирования на C++ я обнаружил (и написал отчёт) всего... об одном. И могу сказать, что перед отправкой отчёта о баге GCC, я максимально тщательно протестировал и проверил его, чтобы не выглядеть идиотом.
Впрочем, ладно, вот моя история.
Мощь декораторов TypeScript на живых примерах. Декорирование методов класса
Декораторы — инструмент декларативного программирования. С их помощью можно легко и элегантно добавить к классам и членам класса метаданные. На основе этих метаданных можно расширять или изменять поведения классов и членов класса, не изменяя при этом кодовую базу, к которой применен декоратор. Саму технологию можно отнести к мета-программированию или декларативному программированию.
В рамках этой статьи разбирается несколько примеров из реальных проектов, где применение декораторов сильно упростило код для понимания и исключило его дублирование.
Нужно ли чистить строки в JavaScript?
Да, могут.
//.....Какой-то код
console.log(typeof str); // string
console.log(str.length); // 15
console.log(str); // "ччччччччччччччч"
Вы думаете, в этом примере строка занимает 30 байт?
А вот и нет! Она занимает 30 мегабайт!
garbage.collect()
В теории звучит хорошо. На практике пользователь открывает 20 вкладок с YouTube, соцсетями, что-то читает, работает, браузер ест память, как Hummer H2 — бензин. Сборщик мусора, как этот монстр с шваброй, бегает по всей памяти и добавляет неразберихи, все тормозит и падает.
Чтобы таких ситуаций не происходило и производительность наших сайтов и приложений не страдала, фронтенд-разработчику стоит знать, как мусор влияет на приложения, как браузер его собирает и оптимизирует работу с памятью и как это все отличается от суровой реальности. Как раз об этом доклад Андрея Роенко (flapenguin) на Frontend Conf 2018.
Мы пользуемся сборщиком мусора (не дома — во фронтенд-разработке) каждый день, но особо не задумываемся, что он вообще есть, чего это нам стоит и какие у него есть возможности и ограничения.
Если бы в JavaScript действительно работала сборка мусора, большинство npm-модулей удаляли бы сами себя сразу после установки.
Но пока это не так, и мы поговорим про то, что есть — про сборку ненужных объектов.
4 часа недоступности: постмортем падения Dodo IS
Вечером пятницы 23 сентября, в самое «горячее» время для Додо Пиццы, развалилась платформа Dodo IS. Приём заказов превратился в тыкву, клиенты и пиццерии 4 часа испытывали проблемы. Это было наше самое крупное падение с 2018-го года как в техническом плане, так и по недополученной выручке.
Особенная боль — то, что мы упали в прайм-тайм. Наш бизнес устроен циклично и зависит от сезона: осенью заказов больше, чем летом, а по вечерам пятницы больше в несколько раз, чем в утром вторника. Обычно пик заказов приходится на вечер пятницы (с 16 до 20 по Москве). Это время — самое напряженное для системы и самое ценное для бизнеса.
У Dodo IS произошёл каскадный сбой и мы долго не могли реанимировать систему. В этой статье делимся постмортемом инцидента: разберём причины, опишем действия по устранению и расскажем о действиях, которые позволят избежать таких падений в будущем.
Как ускорить разжатие LZ4 в ClickHouse
Данные в ClickHouse хранятся в сжатом виде. А во время выполнения запросов ClickHouse старается почти ничего не делать — использовать минимум ресурсов CPU. Бывает, что все вычисления, на которые могло тратиться время, уже хорошо оптимизированы, да и запрос хорошо написан пользователем. Тогда остаётся выполнить разжатие.
Вопрос — почему разжатие LZ4 может быть узким местом? Казалось бы, LZ4 — очень лёгкий алгоритм: скорость разжатия, в зависимости от данных, обычно составляет от 1 до 3 ГБ/с на одно процессорное ядро. Это уже существенно больше скорости работы дисковой подсистемы. Более того, мы используем все доступные ядра, а разжатие линейно масштабируется по всем физическим ядрам.
Обзор и сравнение контроллеров Ingress для Kubernetes
При запуске кластера Kubernetes для конкретного приложения следует понимать, какие требования представляет к этому ресурсу само приложение, бизнес и разработчики. При наличии этой информации можно приступать к принятию архитектурного решения и, в частности, к выбору конкретного Ingress-контроллера, коих на сегодняшний день уже большое количество. Чтобы составить базовое представление об имеющихся вариантах без необходимости изучать множество статей/документации и т.п., мы и подготовили этот обзор, включив в него основные (production ready) Ingress-контроллеры.
Надеемся, что он поможет коллегам в выборе архитектурного решения — по крайней мере, станет отправной точкой для получения более подробной информации и практических экспериментов. Предварительно мы изучили другие подобные материалы в сети и, как ни странно, не обнаружили ни одного более-менее полного, а главное — структурированного — обзора. Итак, заполним же этот пробел!
[Карьера в IT] Как составить резюме, чтобы взяли в Долину. С плохими и хорошими примерами из практики
Какое резюме точно зацепит рекрутеров и из стартапов, и из FAANG? Этой статьей запускаем серию материалов с универсальными карьерными советами. Разберем весь процесс: от резюме и поиска работы до принятия оффера. Особенно актуально для тех, кто ищет работу за рубежом, но и для российских компаний подойдет. Внутри этой статьи — чек-лист, взгляд профессиональных рекрутеров, примеры и практический опыт разработчиков. Пишите в комментариях, на какие еще карьерные вопросы вы хотели бы получить ответы — постараемся рассказать об этом в следующих статьях.
Распад протона — невозможность 2,5 класса
Среди фундаментальных физических проблем особое место занимает самопроизвольный распад протона – явление гипотетическое и до сих пор не наблюдавшееся, реальность которого, однако, не удается не только подтвердить, но и опровергнуть. Протон является самой распространенной барионной частицей во Вселенной, а также самым распространенным носителем положительного заряда. Тем не менее, протон не является подлинно элементарной частицей, то есть, разложим на более легкие частицы. Гипотетически это может означать, что протон обладает некоторым невероятно долгим периодом полураспада, поэтому в далеком будущем вся материя, состоящая из протонов, развоплотится в фотоны и другие мелкие элементарные частицы (в частности, мезоны). Еще в 1970-е годы будущий нобелевский лауреат Стивен Вайнберг (1933-2021) указывал, что не существует физического закона, который бы принципиально исключал распад протона. Тем не менее, все эксперименты, поставленные по сей день, не зафиксировали ни одного распада протона. Об этих экспериментах, их контексте и подоплеке пойдет речь под катом.
Алгоритм создания технических курсов, которые хочется проходить до конца
Недавно, забросив свой очередной курс, который я обязательно как-нибудь пройду, я подумал: «Хватит это терпеть!».
И перестал это терпеть.
И решил рассказать о том, как делать интересные курсы, которые до чесотки хочется пройти до конца.
7 способов улучшить производительность Node.js в масштабе
Производительность — один из самых важных аспектов разработки веб-приложений. Быстрое приложение будет радовать пользователей, разработчиков и другие заинтересованные лица, в то время как медленное приложение наверняка разочарует все три стороны.
В этой статье мы рассмотрим некоторые методы, которые следует использовать для масштабирования серверов Node.js. Впоследствии ваши серверы смогут справиться с высокой рабочей нагрузкой без ухудшения пользовательского опыта.
Следуя всем проверенным и протестированным советам по производительности в этой статье, вы сможете улучшить скорость и производительность вашего продукта, обеспечив ему преимущество, необходимое для успеха на рынке.
Пишем nest.js с нуля на typescript
Nest.js - популярный node.js фреймворк с отличной архитектурой, основанной на Angular.
Под капотом Nest использует надежные платформы HTTP-серверов, такие как Express (по умолчанию), и при желании также может быть настроен для использования Fastify! Nest обеспечивает уровень абстракции по сравнению с этими распространенными платформами Node.js (Express/Fastify), но также предоставляет свои API-интерфейсы непосредственно разработчику. Это дает разработчикам свободу использовать множество сторонних модулей, доступных для базовой платформы.
Рисуем коммитами на Гитхабе
[Пятничное]
Всегда хотел сделать свой график активности пользовательского профиля на Гитхабе. Например, выкладывать коммиты каждый день так, чтобы через год этот график превратился в какую-нибудь картинку, пусть и с ограничением по размерам в 52×7 квадратиков-пикселей (52 недели в году × 7 дней в неделе).
Проблема была в том, что даже при полной автоматизации процесса всё равно ждать целый год. А тут я почитал документацию Гитхаба и понял, что задача решается проще и более того — за один раз. А значит, надо делать не откладывая. Обычно названия проектам придумывать сложно, но тут оно пришло само. Кай рисовал льдинками, а Герда рисует коммитами!
Пишущая машинка: вечное легаси
Это самое древнее ретро в моей коллекции. И самое непрактичное: первое, что компьютеры научились делать гораздо лучше, чем раньше — это набор букв. Сегодня я хочу рассказать об опыте механической машинописи. Оценить связь между современными устройствами и технологиями столетней (и более) давности. В общем, сделать то, что в англоязычном интернете описывают емкой фразой: press F to pay respects.
Information
- Rating
- Does not participate
- Registered
- Activity