Pull to refresh
7
0
Send message

Гайд: чем снимать видео дома. Подборка оборудования от 11 000₽ до 420 000₽

Level of difficultyEasy
Reading time6 min
Views10K

Я снимаю кинофестивали, шины от поставщика Формулы-1 и даже робота-хирурга прямо в операционной. Но снимал и из багажника, в студии-каморке, и начинал с подручных средств. Поэтому решил собрать 3 комплекта для съемок под разный бюджет: от бабушкиной пенсии до зарплаты айтишника.

Читать далее
Total votes 48: ↑43 and ↓5+54
Comments74

Заблуждения программистов о времени

Reading time12 min
Views75K

Музей-скансен эпохи Средневековья в Дании в режиме обычной работы (слева) ставит целью воссоздать повседневную жизнь города на стыке XIV и XV веков. Для съёмок фильма (справа) он «погрязнел»

Для киносъёмок в музей под открытым небом Middelaldercentret внесли несколько изменений. Вместо аккуратной каменной улицы развели неприятную кашицу из грязи, не самые роскошные стеклянные окна прикрыли досками и развесили везде выцветшее тряпьё. Здания как следует измазали чем-то коричневым, кое-где зачем-то перемешав субстанцию с соломой. В случайное здание воткнули факел, а не попытались изобразить лучину или фонарь.

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

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

Попытки собрать заблуждения про время и часовые пояса на Хабре уже были шесть и десять лет назад. Но без контрпримеров не так интересно.

Заблуждение 1. В сутках 24 часа или 86 400 секунд


Иногда и кое-где стрелки часов переводят, создавая сутки длиной в 23 и 25 часов — всё очевидно. Будет неплохо углубиться в случаи поэкзотичней.
Читать дальше →
Total votes 152: ↑145 and ↓7+177
Comments313

4 миллиарда операторов if

Level of difficultyMedium
Reading time7 min
Views114K

Просматривая недавно соцсети, я наткнулся на этот скриншот. Разумеется, его сопровождало множество злобных комментариев, критикующих попытку этого новичка в программировании решить классическую задачу computer science: операцию деления с остатком.

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

Поэтому я решил изучить эту идею проверки чётности числа при помощи одних сравнений, чтобы понять, насколько хорошо она работает в реальных ситуациях. Я сторонник высокопроизводительного кода, поэтому решил реализовать это на языке программирования C, потому что он и сегодня остаётся самым быстрым языком в мире с большим отрывом от других (благодаря гению Денниса Ричи).

Читать далее
Total votes 312: ↑295 and ↓17+342
Comments153

История user-agent в браузерах

Reading time3 min
Views39K
imageВ начале был NCSA Mosaic, и Mosaic называл себя NCSA_Mosaic/2.0 (Windows 3.1), и Mosaic показывал картинки с текстом, и счастье пришло.



imageИ потом пришел новый веб-браузер, известный как «Mozilla», что сокращением было для «Mosaic Killer»(«Убийца Мозаики»), но Mosaic не понравилось это, так что имя было изменено на Netscape и Netscape называл себя Mozilla/1.0 (Win3.1), и не было больше счастья. И Netscape поддерживал фреймы и фреймы стали популярны в народе, но Mosaic не поддерживал фреймы, и поэтому пришло время вынюхивания user agent-ов, и для Mozilla вебмастеры посылали фреймы, но для других браузеров не посылали.
И что дальше случилось, подкат расскажет вам
Total votes 260: ↑200 and ↓60+140
Comments68

Запускаем PostgreSQL в Docker: от простого к сложному

Level of difficultyEasy
Reading time12 min
Views539K

О простых и продвинутых способах запуска PostgreSQL в Docker: добавляем healthcheck, ставим на мониторинг, настраиваем параметры.

Читать далее
Total votes 34: ↑32 and ↓2+35
Comments39

Clickhouse — непростая жизнь в продакшене

Level of difficultyHard
Reading time13 min
Views21K

Около двух лет назад вышла небольшая статья Kafka Streams — непростая жизнь в production, в которой я описывал сложности, с которыми наша команда столкнулась при попытке решить задачи проекта с помощью kafka-streams. Эксперимент вышел неудачным, и мы в итоге совсем отказались от этой технологии. Вместо нее решили попробовать Clickhouse (CH), и сейчас уже можно сказать, что эта база нам очень хорошо подошла и отлично решает почти все задачи, которые нам ставит бизнес. В этой статье я расскажу об особенностях использования CH.

Читать далее
Total votes 41: ↑41 and ↓0+41
Comments8

Как я вошёл в клуб бага 323

Level of difficultyMedium
Reading time12 min
Views30K

Это история о баге, который бы заставил вас рвать на себе волосы. Из-за такого бага вы можете подумать: «Но это невозможно, должно быть, компилятор сломался, других вариантов нет!»

А баг компилятора — это серьёзно: за двенадцать лет программирования на C++ я обнаружил (и написал отчёт) всего... об одном. И могу сказать, что перед отправкой отчёта о баге GCC, я максимально тщательно протестировал и проверил его, чтобы не выглядеть идиотом.

Впрочем, ладно, вот моя история.

Читать далее
Total votes 97: ↑97 and ↓0+97
Comments127

Мощь декораторов TypeScript на живых примерах. Декорирование методов класса

Reading time12 min
Views24K

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

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

Читать далее
Total votes 20: ↑20 and ↓0+20
Comments6

Нужно ли чистить строки в JavaScript?

Reading time6 min
Views79K
Что? Строки могут быть «грязными»?

Да, могут.

//.....Какой-то код
console.log(typeof str); // string
console.log(str.length); // 15
console.log(str); // "ччччччччччччччч"

Вы думаете, в этом примере строка занимает 30 байт?

А вот и нет! Она занимает 30 мегабайт!
Читать дальше →
Total votes 220: ↑219 and ↓1+218
Comments224

garbage.collect()

Reading time20 min
Views26K
Браузеру для исполнения JavaScript нужно немножко памяти, нужно же где-то хранить объекты, примитивы, функции, которые создаются на все действия пользователя. Поэтому браузер сначала выделяет нужный объем RAM, а когда объекты не используются — чистит её самостоятельно.

В теории звучит хорошо. На практике пользователь открывает 20 вкладок с YouTube, соцсетями, что-то читает, работает, браузер ест память, как Hummer H2 — бензин. Сборщик мусора, как этот монстр с шваброй, бегает по всей памяти и добавляет неразберихи, все тормозит и падает.



Чтобы таких ситуаций не происходило и производительность наших сайтов и приложений не страдала, фронтенд-разработчику стоит знать, как мусор влияет на приложения, как браузер его собирает и оптимизирует работу с памятью и как это все отличается от суровой реальности. Как раз об этом доклад Андрея Роенко (flapenguin) на Frontend Conf 2018.

Мы пользуемся сборщиком мусора (не дома — во фронтенд-разработке) каждый день, но особо не задумываемся, что он вообще есть, чего это нам стоит и какие у него есть возможности и ограничения.

Если бы в JavaScript действительно работала сборка мусора, большинство npm-модулей удаляли бы сами себя сразу после установки.

Но пока это не так, и мы поговорим про то, что есть — про сборку ненужных объектов.

Читать дальше →
Total votes 37: ↑36 and ↓1+35
Comments23

4 часа недоступности: постмортем падения Dodo IS

Reading time16 min
Views29K

Вечером пятницы 23 сентября, в самое «горячее» время для Додо Пиццы, развалилась платформа Dodo IS. Приём заказов превратился в тыкву, клиенты и пиццерии 4 часа испытывали проблемы. Это было наше самое крупное падение с 2018-го года как в техническом плане, так и по недополученной выручке.

Особенная боль — то, что мы упали в прайм-тайм. Наш бизнес устроен циклично и зависит от сезона: осенью заказов больше, чем летом, а по вечерам пятницы больше в несколько раз, чем в утром вторника. Обычно пик заказов приходится на вечер пятницы (с 16 до 20 по Москве). Это время — самое напряженное для системы и самое ценное для бизнеса.

У Dodo IS произошёл каскадный сбой и мы долго не могли реанимировать систему. В этой статье делимся постмортемом инцидента: разберём причины, опишем действия по устранению и расскажем о действиях, которые позволят избежать таких падений в будущем.

Читать далее
Total votes 127: ↑125 and ↓2+157
Comments106

Как ускорить разжатие LZ4 в ClickHouse

Reading time23 min
Views14K
При выполнении запросов в ClickHouse можно обратить внимание, что в профайлере на одном из первых мест часто видна функция LZ_decompress_fast. Почему так происходит? Этот вопрос стал поводом для целого исследования по выбору лучшего алгоритма разжатия. Здесь я публикую исследование целиком, а короткую версию можно узнать из моего доклада на HighLoad++ Siberia.

Данные в ClickHouse хранятся в сжатом виде. А во время выполнения запросов ClickHouse старается почти ничего не делать — использовать минимум ресурсов CPU. Бывает, что все вычисления, на которые могло тратиться время, уже хорошо оптимизированы, да и запрос хорошо написан пользователем. Тогда остаётся выполнить разжатие.



Вопрос — почему разжатие LZ4 может быть узким местом? Казалось бы, LZ4 — очень лёгкий алгоритм: скорость разжатия, в зависимости от данных, обычно составляет от 1 до 3 ГБ/с на одно процессорное ядро. Это уже существенно больше скорости работы дисковой подсистемы. Более того, мы используем все доступные ядра, а разжатие линейно масштабируется по всем физическим ядрам.
Читать дальше →
Total votes 66: ↑63 and ↓3+60
Comments15

Обзор и сравнение контроллеров Ingress для Kubernetes

Reading time9 min
Views38K


При запуске кластера Kubernetes для конкретного приложения следует понимать, какие требования представляет к этому ресурсу само приложение, бизнес и разработчики. При наличии этой информации можно приступать к принятию архитектурного решения и, в частности, к выбору конкретного Ingress-контроллера, коих на сегодняшний день уже большое количество. Чтобы составить базовое представление об имеющихся вариантах без необходимости изучать множество статей/документации и т.п., мы и подготовили этот обзор, включив в него основные (production ready) Ingress-контроллеры.

Надеемся, что он поможет коллегам в выборе архитектурного решения — по крайней мере, станет отправной точкой для получения более подробной информации и практических экспериментов. Предварительно мы изучили другие подобные материалы в сети и, как ни странно, не обнаружили ни одного более-менее полного, а главное — структурированного — обзора. Итак, заполним же этот пробел!
Читать дальше →
Total votes 47: ↑46 and ↓1+45
Comments19

[Карьера в IT] Как составить резюме, чтобы взяли в Долину. С плохими и хорошими примерами из практики

Reading time5 min
Views19K

Какое резюме точно зацепит рекрутеров и из стартапов, и из FAANG? Этой статьей запускаем серию материалов с универсальными карьерными советами. Разберем весь процесс: от резюме и поиска работы до принятия оффера. Особенно актуально для тех, кто ищет работу за рубежом, но и для российских компаний подойдет. Внутри этой статьи — чек-лист, взгляд профессиональных рекрутеров, примеры и практический опыт разработчиков. Пишите в комментариях, на какие еще карьерные вопросы вы хотели бы получить ответы — постараемся рассказать об этом в следующих статьях.

Читать далее
Total votes 16: ↑10 and ↓6+7
Comments5

Распад протона — невозможность 2,5 класса

Reading time9 min
Views30K

Среди фундаментальных физических проблем особое место занимает самопроизвольный распад протона – явление гипотетическое и до сих пор не наблюдавшееся, реальность которого, однако, не удается не только подтвердить, но и опровергнуть. Протон является самой распространенной барионной частицей во Вселенной, а также самым распространенным носителем положительного заряда. Тем не менее, протон не является подлинно элементарной частицей, то есть, разложим на более легкие частицы. Гипотетически это может означать, что протон обладает некоторым невероятно долгим периодом полураспада, поэтому в далеком будущем вся материя, состоящая из протонов, развоплотится в фотоны и другие мелкие элементарные частицы (в частности, мезоны). Еще в 1970-е годы будущий нобелевский лауреат Стивен Вайнберг (1933-2021) указывал, что не существует физического закона, который бы принципиально исключал распад протона. Тем не менее, все эксперименты, поставленные по сей день, не зафиксировали ни одного распада протона. Об этих экспериментах, их контексте и подоплеке пойдет речь под катом.

Читать далее
Total votes 68: ↑66 and ↓2+92
Comments50

Алгоритм создания технических курсов, которые хочется проходить до конца

Reading time6 min
Views3.6K

Недавно, забросив свой очередной курс, который я обязательно как-нибудь пройду, я подумал: «Хватит это терпеть!».

И перестал это терпеть.

И решил рассказать о том, как делать интересные курсы, которые до чесотки хочется пройти до конца.

Итак, начнём
Total votes 6: ↑5 and ↓1+4
Comments2

7 способов улучшить производительность Node.js в масштабе

Reading time11 min
Views10K

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

В этой статье мы рассмотрим некоторые методы, которые следует использовать для масштабирования серверов Node.js. Впоследствии ваши серверы смогут справиться с высокой рабочей нагрузкой без ухудшения пользовательского опыта.

Следуя всем проверенным и протестированным советам по производительности в этой статье, вы сможете улучшить скорость и производительность вашего продукта, обеспечив ему преимущество, необходимое для успеха на рынке.
Читать дальше →
Total votes 9: ↑8 and ↓1+13
Comments3

Пишем nest.js с нуля на typescript

Reading time28 min
Views19K

Nest.js - популярный node.js фреймворк с отличной архитектурой, основанной на Angular.

Под капотом Nest использует надежные платформы HTTP-серверов, такие как Express (по умолчанию), и при желании также может быть настроен для использования Fastify! Nest обеспечивает уровень абстракции по сравнению с этими распространенными платформами Node.js (Express/Fastify), но также предоставляет свои API-интерфейсы непосредственно разработчику. Это дает разработчикам свободу использовать множество сторонних модулей, доступных для базовой платформы.

Читать далее
Total votes 7: ↑6 and ↓1+8
Comments0

Рисуем коммитами на Гитхабе

Reading time5 min
Views36K

[Пятничное]


Всегда хотел сделать свой график активности пользовательского профиля на Гитхабе. Например, выкладывать коммиты каждый день так, чтобы через год этот график превратился в какую-нибудь картинку, пусть и с ограничением по размерам в 52×7 квадратиков-пикселей (52 недели в году × 7 дней в неделе).


Проблема была в том, что даже при полной автоматизации процесса всё равно ждать целый год. А тут я почитал документацию Гитхаба и понял, что задача решается проще и более того — за один раз. А значит, надо делать не откладывая. Обычно названия проектам придумывать сложно, но тут оно пришло само. Кай рисовал льдинками, а Герда рисует коммитами!


График коммитов на Гитхабе в виде картинки

Как нарисовать свою картинку коммитами на GitHub
Total votes 91: ↑83 and ↓8+75
Comments36

Пишущая машинка: вечное легаси

Reading time7 min
Views19K
Пишущая машинка была у моего деда, он почти каждый день пользовался ей лет сорок, и только в конце жизни пересел на ноутбук, который я ему подарил. А для меня это был самый первый, и от того самый крутой гаджет: мне было лет пять, и я очень хотел печатать, а дед сомневался — вдруг испорчу вещь, а она единственная. Я же аргументировал тем, что в детском садике на машинке печатают все. Вообще все. Прошло много лет, деда не стало в прошлом году. Я совершенно этому не рад, но его пишущая машинка — теперь моя. Печатай сколько хочешь. В двадцать первом веке эти артефакты прошлого, придуманные вообще в веке девятнадцатом, вызывают у меня подлинное восхищение, и не только из-за детских воспоминаний. Это общий предок всех современных компьютеров. Это заточенная под единственную задачу вещь, которая позволяет набирать текст, создавать нетленку в любых условиях. Это неубиваемая техника, которая прослужит еще лет 150-200.


Это самое древнее ретро в моей коллекции. И самое непрактичное: первое, что компьютеры научились делать гораздо лучше, чем раньше — это набор букв. Сегодня я хочу рассказать об опыте механической машинописи. Оценить связь между современными устройствами и технологиями столетней (и более) давности. В общем, сделать то, что в англоязычном интернете описывают емкой фразой: press F to pay respects.
Читать дальше →
Total votes 48: ↑44 and ↓4+60
Comments137
1

Information

Rating
Does not participate
Registered
Activity