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

инженер

Send message

Бессильный сборщик мусора или неуправляемая память в .NET

Level of difficultyMedium
Reading time7 min
Views13K

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

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

Читать далее

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

Level of difficultyEasy
Reading time8 min
Views50K

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

Не верите?

Давайте я покажу вам.

Монолог про отказоустойчивость микросервисных приложений, или Что может пойти не так?

Level of difficultyEasy
Reading time20 min
Views9.8K

Давным-давно я работал в одной компании, где всё хостилось на одном-единственном сервере. Как это обычно бывает, в субботу вечером сгорел блок питания, и я, отдыхая в это время на природе, сидя в лодке, через телефон, при помощи консоли, пытался перенести сервер на другой хост. 

Как вы уже поняли, мы поговорим об отказоустойчивости.

Читать далее

Что происходит, когда запускаешь «Hello World» в Linux

Level of difficultyMedium
Reading time15 min
Views30K

Сегодня я задумалась о том, что происходит, когда запускаешь в Linux простую программу «Hello World» на Python.

print("hello world")

Вот как это выглядит в командной строке:

$ python3 hello.py
hello world

Но внутри происходит гораздо больше. Я объясню, что там творится, и, что гораздо важнее, расскажу об инструментах, при помощи которых вы сами сможете исследовать происходящее. Мы воспользуемся readelf, strace, ldd, debugfs, /proc, ltrace, dd и stat. Я не буду рассматривать относящиеся к Python части, только объясню, что происходит при выполнении динамически компонуемых исполняемых файлов.
Читать дальше →

История компьютерных стратегий. Часть 6. «Red Alert»: Эйнштейн против Гитлера, Сталин против всех

Level of difficultyEasy
Reading time10 min
Views12K

Итак, «Warcraft: Orcs & Humans» от Blizzard и «Command & Conquer» от Westwood Studios непосредственно наследовали «Dune II». «C&C» продолжал её почти напрямую, а авторы первого «Варкрафта» просто были очень впечатлены и решили сделать что-то в том же духе. Обе игры оказались удачными, обе легли в основу обширных серий и заложили краеугольные камни многолетней популярности жанра RTS. Естественно, что две конкурирующие студии не собирались почивать на лаврах и буквально сразу после релиза принялись развивать тему. Но если Blizzard напрямую продолжили свою историю борьбы людей и орков в фэнтезийном мире «Warcraft 2», то Westwood Studios решили сделать приквел к C&C и представили версию Второй мировой войны без нацистской Германии. Так родился развесисто-клюквенный сеттинг «Red Alert».
Читать дальше →

Древнейшая проблема бэйкинга и её изящное решение

Level of difficultyMedium
Reading time9 min
Views9.2K

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

Также мы наглядно разберём причины возникновения этих недостатков и рассмотрим способы их решения.

Читать далее

Умный дом с голосовым ассистентом на минималках

Level of difficultyMedium
Reading time8 min
Views19K

Небольшой лонгрид с предысторией и планами, чтобы лучше понимать почему, что и как получилось.

Разработка шла с переменной скоростью в течении лет 5. Совсем не сразу взялся за летопись, поэтому прошу прощения, если что-то будет некорректно ;)

В результате имеем масштабируемое решение, которое можно использовать в любом месте (квартира, дом или еще что).

Читать далее

Бенчмаркая Capacity 18 коллекций: как быстрей?

Level of difficultyEasy
Reading time5 min
Views2.5K

Уважаемые читатели, в этой статье я хочу рассказать о тесте 18 коллекций с и без capacity и поставить точку в данном вопросе. Тесты сделаны на .net 7 с использованием BenchmarkDotNet и представлен полный код для повторения. Базовые значения 1000 и 10_000.

В данной статье не буду сильно углубляться в коллекции, но немного напишу, что да как.

Основная цель понять, насколько важно задавать начальную емкость, даже примерно и насколько все страдает, если так не делать. Сразу отмечу, что на подавляющем большинстве увиденного мною кода практически всегда не задается capacity.

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

Да, не всегда важно, согласен, но секунда дела и улучшить памяти и скорость, чем плохо?

Кратко о коллекциях, где емкость не задается:

Читать далее

Как IndVarSimplification применяет математику в вашем коде

Level of difficultyMedium
Reading time3 min
Views3.9K

Многие оптимизации в компиляторе выглядят естественными. Но IndVarSimplification, предмет этой статьи, сильно выделяется среди них. Это та оптимизация, которая сначала кажется темной магией, но за маской на самом деле скрывается математика.

В этой статье я постарался разобраться, как работает IndVarSimplification. Будет немного кода на Rust, чтение ассемблера и копание в коде LLVM.

Читать далее

Алгоритмы балансировки нагрузок

Level of difficultyMedium
Reading time8 min
Views51K

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

В этом посте мы рассмотрим способы, которыми один балансировщик нагрузок может распределять HTTP-запросы на множество серверов. Мы начнём снизу и проделаем весь путь вверх до современных алгоритмов балансировки нагрузок.
Читать дальше →

Полезен ли сегодня быстрый обратный квадратный корень из Quake III?

Reading time23 min
Views75K

В 2005 году id Software опубликовала под лицензией GPL-2 исходный код своей игры 1999 года Quake III Arena. В файле code/game/q_math.c есть функция для вычисления обратного квадратного корня числа, которая на первый взгляд выглядит очень любопытным алгоритмом:

float Q_rsqrt( float number )
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;

    x2 = number * 0.5F;
    y  = number;
    i  = * ( long * ) &y;                       // зловещий хакинг чисел с плавающей запятой на уровне битов
    i  = 0x5f3759df - ( i >> 1 );               // какого чёрта?
    y  = * ( float * ) &i;
    y  = y * ( threehalfs - ( x2 * y * y ) );   // первая итерация
//  y  = y * ( threehalfs - ( x2 * y * y ) );   // вторая итерация, можно удалить

    return y;
}

Об этом алгоритме написано множество статей, и ему посвящена хорошая страница Википедии, где он назван fast inverse square root (быстрым обратным квадратным корнем). На самом деле, этот алгоритм упоминался на различных форумах ещё до публикации исходного кода Q3. Ryszard из Beyond3D провёл в 2004-2005 годах исследование и в конечном итоге выяснил, что первоначальным автором алгоритма был Грег Уолш из Ardent Computer, который создал его десятью годами ранее.
Читать дальше →

«Чистый» код, ужасная производительность

Reading time16 min
Views67K
Один из самых часто повторяемых советов программистам, особенно начинающим — это рекомендация писать «чистый» код. Она сопровождается длинным списком правил, сообщающих, что нужно делать, чтобы код был «чистым».

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

Если посмотреть на список правил «чистого» кода и вытащить из него правила, которые действительно влияют на структуру кода, то мы получим следующее:

  • Отдавайте предпочтение полиморфизму, а не «if/else» и «switch»
  • Код не должен знать о внутреннем устройстве объектов, с которыми он работает
  • Функции должны быть маленькими
  • Каждая функция должна выполнять одну задачу
  • Принцип «DRY» — Don’t Repeat Yourself («не повторяйся»)

Эти правила достаточно чётко формулируют то, как должен создаваться конкретный фрагмент кода, чтобы быть «чистым». Но я задам такой вопрос: если мы создадим фрагмент кода, соответствующий этим правилам, какова будет его производительность?
Читать дальше →

6.4 Устойчивость систем автоматического регулирования. Частотный критерий устойчивости Михайлова

Reading time7 min
Views17K

Продолжаем лекции по управлению в технических устройствах (УТС). Данные лекции читаются в МГУТ им. Баумана. Автор лекций к.т.н. Козлов Олег Степанович, кафедра Ядерные Энергетические Установки, факультета машиностроения. За что ему огромное спасибо!

1. Введение в теорию автоматического управления.2. Математическое описание систем автоматического управления 2.1 — 2.32.3 — 2.82.9 — 2.13

3. ЧАСТОТНЫЕ ХАРАКТЕРИСТИКИ ЗВЕНЬЕВ И СИСТЕМ АВТОМАТИЧЕСКОГО УПРАВЛЕНИЯ РЕГУЛИРОВАНИЯ. 3.1. Амплитудно-фазовая частотная характеристика: годограф, АФЧХ, ЛАХ, ФЧХ3.2. Типовые звенья систем автоматического управления регулирования. Классификация типовых звеньев. Простейшие типовые звенья3.3. Апериодическое звено 1–го порядка инерционное звено. На примере входной камеры ядерного реактора3.4. Апериодическое звено 2-го порядка3.5. Колебательное звено3.6. Инерционно-дифференцирующее звено3.7. Форсирующее звено.  3.8. Инерционно-интегрирующее звено (интегрирующее звено с замедлением)3.9. Изодромное звено (изодром)3.10 Минимально-фазовые и не минимально-фазовые звенья3.11 Математическая модель кинетики нейтронов в «точечном» реакторе «нулевой» мощности

4. Структурные преобразования систем автоматического регулирования.

5. Передаточные функции и уравнения динамики замкнутых систем автоматического регулирования (САР).

6. Устойчивость систем автоматического регулирования. 6.1 Понятие об устойчивости САР. Теорема Ляпунова. 6.2 Необходимые условия устойчивости линейных и линеаризованных САР. 6.3 Алгебраический критерий устойчивости Гурвица.

Читать далее

Подключение инкрементального механического энкодера к микроконтроллеру ATmega8

Level of difficultyMedium
Reading time2 min
Views5.6K

Типовая схема подключения энкодера к микроконтроллеру ATmega8 представлена на рисунке 1. На схеме тактовые выводы A и B подтянуты с помощью резисторов R1 и R2 к питанию и дают низкий сигнал при срабатывании.

Читать далее

4 простых способа оптимизировать объём индексов в Elasticsearch

Level of difficultyMedium
Reading time11 min
Views15K

Всем привет! Меня зовут Данила, я выполняю роль SR-инженера в Usetech. В этой статье я бы хотел рассказать о 4-х способах, которые помогут сократить объём ваших индексов в Elasticsearch.

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

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

Мы видели 2 пути решения проблемы:

Читать далее

От Arduino к Wiren Board за 10 лет. История автоматизации дома с солнечными панелями

Reading time11 min
Views13K

Пробовали ли вы когда‑нибудь сделать умный дом своими руками? Герой моего нового рассказа Алексей сначала собрал автоматизацию на Arduino десять лет назад, но затем от нее отказался и перешел на оборудование Wiren Board. В чем же причины такого шага?

Интересно? Тогда ныряйте под кат.

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

Читать далее

Удаленный доступ к IP камерам. Часть 3. HEVC и web

Reading time11 min
Views13K

HEVC (High Efficiency Video Coding — высокоэффективное кодирование видеоизображений), также известный как H.265, это видеокодек, широко используемый, в том числе, в системах видеонаблюдения. До недавнего времени веб браузеры практически не поддерживали этот формат. Но ситуация изменилась с выходом браузеров Chrome/Chromium версии 106. Это событие показалось мне достойным упоминания на Хабре, и в этой части статьи я расскажу, почему поддержка HEVC важна, о своих попытках подружить IP камеры с браузером и что из этого получилось.

Читать далее

Припой припою рознь, или Несколько слов о флюсах

Reading time7 min
Views48K

Общаясь сейчас со связистами на предмет «сообщите, кому какой припой нужен», получил достаточно типовой ответ — «хороший, чтобы всё паял». Углублённое обсуждение вопроса вынесло на поверхность несколько запомнившихся людям торговых марок — в первую очередь Asahi — но и только. Про флюсы и их различия сказано ничего не было.

Спектр задач по пайке при этом у связистов простирается от антенно-фидерного хозяйства (кабели, разъёмы), через аксессуары (зарядки, гарнитуры) и до ремонта собственно радиоаппаратуры (SMD-компоненты).

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

Итак: какие бывают флюсы в припоях, что лучше — ORL0 или ROM1 (я проверил гуглем, обе аббревиатуры на Хабре встречались 0 раз), где искать эту информацию и зачем вообще это надо.

Читать далее

Js, трюки, наблюдения, бенчмарки и как Лиса уничтожает Хром. Я протестировал всё, что вам было лень

Reading time4 min
Views26K
Картинка, конечно, стронгли анрилейтед

Разные трюки я тестировал на Google Chrome 107.0.5304.107 и Mozilla Firefox 107.0 на Windows 10.

Чтобы результаты всегда были железно воспроизводимыми, я отключил все С-State’ы, ядра зафиксировал на 5 ГГц.

У меня 9900К, это Coffee Lake c AVX256, какие оптимизации применит Jit для вашего процессора — я не знаю, результат на вашем компьютере может отличаться от моего, в т.ч. из-за микроархитектуры процессора.

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

Information

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