Pull to refresh
135
0
Михаил Бусырев @Aquahawk

инженер

Send message

Когда TCP-сокеты отказываются умирать

Reading time10 min
Views42K

Когда TCP-сокеты отказываются умирать

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

Читать далее

Никто не бесил меня больше, чем Google Play Team

Reading time10 min
Views25K

Меня зовут Дэниел Рид. Я пишу код уже более двадцати лет. Я сооснователь и ведущий разработчик SaaS-компании, предоставляющей ПО для управления фитнес-студиям, например студиям йоги.

Наше базовое приложение хостит все студии в одном месте, однако за дополнительную цену мы разрабатываем и публикуем «брендированное приложение», которое, по сути, является версией нашего базового приложения, привязанным только к одной студии.

Недавно Google Play сообщил нам, что нам нужно обновить версию целевого SDK, в противном случае наши приложения больше не будут отображаться в Google Play Store.

Без проблем! Эти приложения уже много раз проходили процесс проверки и подтверждения, поэтому нам достаточно было лишь запустить целевой SDK и выполнить наш скрипт для отправки новых приложений… или, по крайней мере, так думал я.

В этом посте я расскажу о двух неделях общения мелкого разработчика с Google Play Team.
Читать дальше →

Физика вращения 3д тел

Reading time11 min
Views12K

Когда я раньше задумывался о вращении в 3д, мне было неуютно. Оно казалось сложным. Вспомнить, например, эффект Джанибекова с прецессией свободно вращающейся гайки. Настало время разобраться!

В статье Вас ждут математика, физика, а заодно численное моделирование и визуализация в libgdx.

Можно провести аналогии между массой тела в поступательном движении и моментом инерции. Разница только в том, что масса выражается одним-единственным числом, а момент инерции - матрицей 3х3. В большинстве примеров ограничиваются вращением в 2д, где существует только одна возможная ось вращения, либо симметричными телами типа мяча, когда момен инерции по всем осям одинаковый. Вместо этого я рассмотрю наиболее общий случай.

Читать далее

Приручаем многопоточность в Node.js (часть 1/5: базовые концепты)

Reading time8 min
Views24K

Продолжаем серию статей, посвященных разным прикладным концептуальным решениям, которые могут существенно "прокачать" производительность вашего Node.js-приложения.

В прошлой статье мы рассмотрели реализацию эффективной очереди на основе "эластичного" кольцевого буфера, а в этой попробуем разобраться с особенностями использования модуля Worker threads в Node.js - какие проблемы внедрения многопоточности будут нас ждать при попытках сделать код более производительным, и узнаем, как их можно обойти, применяя типовые концепты.

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

Читать далее

Опыты с сертификатами — клиентскими и серверными

Reading time11 min
Views30K

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

К тому же, в собственной сети не так важен правильный сертификат, когда на всех клиентских устройствах можно предустановить свой доверенный корневой сертификат и подписывать им сертификаты внутренних ресурсов. Но у автора статьи просто был спортивный интерес и на досуге хотелось вникнуть в тему.

Читать далее

Дюк, вынеси мусор! — 4. ZGC

Reading time9 min
Views32K

С тех пор, как мы рассматривали принципы работы различных сборщиков мусора (раз, два, три), входящих в состав виртуальной машины Java HotSpot, прошел уже не один год. За это время было разработано еще несколько сборщиков, один из которых — ZGC — достаточно давно вышел из разряда экспериментальных и начиная с 15-й версии OpenJDK может похвастаться статусом production ready.

Раз есть такой хороший повод, давайте продолжим цикл, взяв сегодня на рассмотрение этот сборщик.

А давайте

Повторил заставку канала Топлес

Reading time6 min
Views29K

Всем привет, это Денис Вебер.

Однажды, я листал свои подписки на YouTube и наткнулся на канал Топлес. В одном из роликов была просто нереальная заставка с 3д анимацией и эта заставка так меня вдохновила, что я решил её повторить и рассказать о процессе создания в своём новом видео и статье.

Как обычно, специально для тех, кому больше нравится формат видео, а не текст, видео я оставлю в конце статьи.

Читать далее

Обзор книги «Искусство объяснять: Как сделать так, чтобы вас понимали с полуслова», автор Ли ЛеФевер

Reading time7 min
Views21K

Чему учит эта книга: быть понятным

Чему она научила меня: вести коммуникацию так, чтобы после нее люди выходили уверенные и окрыленные

Что я хочу от материала: кратко объяснить основные идеи книги, которые помогают упаковать свои мысли в более понятную форму 

Читать далее

Клубничная чудо-коробка 2.0. Часть вторая

Reading time15 min
Views31K

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

Читать далее

Dashboard as code, или как мы создание дашбордов автоматизировали

Reading time4 min
Views9.5K

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

Часто такой сервис отвечает за конкретную небольшую фичу в нашем продукте (или вообще за часть фичи), или же за часть какого-то большого процесса. Нам такой подход нравится, поскольку микросервисы имеют независимые жизненные и релизные циклы, мы можем релизить фичи независимо друг от друга. Кроме того, различные команды могут работать в рамках одного продукта параллельно над разными фичами, не мешая друг другу и не сталкиваясь лбами. Это даёт нам возможность независимо масштабировать микросервисы и гораздо быстрее проверять гипотезы. В общем, плюсов много. 

Сейчас будет «Но», правда?

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

Читать далее

Как я встраивал JS в свой игровой движок

Reading time14 min
Views8.1K

Писать на С++ игры долго и дорого, но при этом по перфомансу получается хорошо. Но далеко не всё в играх, требовательно к производительности, особенно 2D. Например всякие окошечки не производят тяжелых расчетов внутри. А на больших проектах они могут занимать до 80% всего объема кода. И на С++ есть проблемы на продакшене - если где-то крешится или бажит, приходится перезаливать приложение.

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

Совсем недавно прикрутил JS к своему движку. Кому интересны подробности - добро пожаловать под кат.

Читать далее

Так все же, насколько быстры каналы в Linux?

Reading time26 min
Views23K

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

Читать далее

Борьба с цветными полосами в JPEG

Reading time7 min
Views10K

Если вы хоть раз сохраняли фото в формате JPEG, вы возможно знаете, насколько ужасно могут выглядеть джипеги. Десятилетия доминирования этого формата привели к тому, что у многих интернет-пользователей сформировалась стойкая аллергия к тому, что называется «артефакты JPEG».



Лувр. 480×245 пикселей, сильно сжатый JPEG


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

Читать дальше →

Почему закон о персональных данных глубже, чем кажется

Reading time6 min
Views8K

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

Про буферные конденсаторы

Reading time3 min
Views13K

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

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

Читать далее

Видеоускоритель Apple и невозможный баг

Reading time9 min
Views11K
В конце 2020 года компания Apple выпустила M1 — первого представителя собственной архитектуры GPU под названием AGX, по слухам, созданной на основе серии Imagination PowerVR. С тех пор мы занимались реверс-инжинирингом AGX и созданием опенсорсных графических драйверов. В январе прошлого года я отрендерила треугольник при помощи своего собственного кода, но с тех пор нас продолжал преследовать ужасный баг:

Драйвер не справлялся с рендерингом больших количеств геометрии.

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


Частично отрендеренный по Фонгу кролик

Сложно было определить, какой объём мы можем рендерить без сбоев. Это зависело не только от сложности геометрии. Одна и та же геометрия могла рендериться с простыми шейдерами, но давать сбой со сложными.
Читать дальше →

4k @ 144Hz: DP, HDMI, USB-C Alt-Mode & cables…

Reading time11 min
Views69K

Я недавно сделал себе небольшой апгрейд и у меня появился монитор 4k@144Hz. Разумеется, на 144Hz он не заработал. Потому что нюансы. Мне пришлось в это нырнуть глубже, чем хотелось бы...

Спойлеры: DP, USB-C Alt-mode, Thunderbolt, USB4 3x2, 40Gbps, HDMI.
Оглавление: кабели, протоколы, режимы.

Лыдыбр: Моя старая видеокарта на компьютере сумела завести его на 4k @ 60Hz с помощью Display Port. (Либо 2k @ 144Hz). Это её техническое ограничение, больше она не может. Дальше я попытался воткнуть в монитор ноутбук (все 5 шт, какие нашлись у меня и знакомых) и обнаружил, что всё настолько сложно, что мне потребовалось несколько заходов чтения спецификации, пока я "это завёл". Выписываю свои наблюдения и эксперименты. Актуальность - первая половина 2022 года. Монитор under study - Gigabyte M32U, хотя, в принципе, это не существенно для обсуждаемого вопроса. У монитора разъёмы HDMI, DP, USB-C.

Разбирать проблему я буду слоями. Начём с физики.

Читать далее

1x PCIe чтобы управлять всем

Reading time10 min
Views12K

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

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

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

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

Читать далее

Экспорт статей Хабра в html, markdown

Reading time2 min
Views13K

image


До меня было написано 4 статьи по экспорту статей с хабра в FB2 и pdf:



Я захотел получить исходники своих статей.

Читать дальше →

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity