Pull to refresh
0
Василь Бєляєв @VXPread⁠-⁠only

C#, C++, Lua

Send message

Почему важно оптимизировать формат данных

Level of difficultyMedium
Reading time21 min
Views18K
image

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

Алгоритмы — важнейшая часть программы: замена «горячего» алгоритма O(n) менее сложным, например, O(log n), обеспечивает практически произвольное увеличение производительности. Однако существенно влияет на производительность и структурированность данных: программы выполняются на физических машинах с физическими свойствами, например, разными задержками чтения/записи данных в кэши, на диски или в ОЗУ. После оптимизации алгоритмов стоит изучить эти свойства, чтобы достичь наибольшей производительности. Оптимизированный формат данных учитывает используемые алгоритмы и паттерны доступа при выборе того, как сохранять структуру данных на физическом носителе. Благодаря этому можно увеличить скорость алгоритмов в несколько раз. В этом посте мы покажем пример, в котором нам удалось достичь четырёхкратного повышения скорости чтения простым изменением формата данных в соответствии с паттерном доступа.

Сравнение хранилищ данных AoS и SoA


Современное оборудование, и, в частности CPU, спроектировано так, чтобы обрабатывать данные определённым образом. Расположение данных в памяти влияет на то, насколько эффективно программа сможет использовать кэш CPU, как часто она сталкивается с промахами кэша и насколько оптимально она сможет задействовать векторные команды (SIMD). Даже при использовании оптимальных алгоритмов выбор неподходящего формата данных может приводить к частым перезагрузкам кэша, простаивающим конвейерам и чрезвычайно большому объёму передач содержимого памяти; всё это снижает производительность.
Читать дальше →

Генератор неслучайных чисел

Reading time4 min
Views21K
Этот код напечатает случайную последовательность латинских букв, так ведь?

import java.util.Random;

class WTF {
    public static void main(String[] args) {
        Random r = new Random(76880392499L<<11);
        String alphabet = " abcdefghijklmnopqrstuvwxyz";
        int n;
        while ((n = r.nextInt(alphabet.length())) > 0)
        	System.out.print(alphabet.charAt(n));
    }
}

Можете проверить; вывод кажется совсем не случайным. Как же так вышло?

Прежде всего: какой шанс, что из всех последовательностей латинских букв напечатается именно эта? Сгенерировано 10 случайных чисел, каждое выбиралось из 27 вариантов, значит всего вариантов было $27^{10} \approx 2.06\cdot10^{14}$. Если считать, что все варианты равновероятны, то нам выпал один шанс из двухсот миллионов миллионов! Ух!
Читать дальше →

Ремонт HDD Western Digital My Book Essential: система не видит диск, нет питания. Дело в плате

Reading time4 min
Views11K

Привет, Хабр! В прошлый раз я публиковал статью об очередном походе на испанскую барахолку. В ней рассказывал про купленные внешние жесткие диски. Один из них работал. Второй, HDD Western Digital My Book Essential — нет. Причем дело вовсе не в диске — обычно именно они выходят из строя. В моем случае дело было в электронике, т. е. в плате.

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

Почему кошки ненавидят закрытые двери: что выяснили ученые

Reading time5 min
Views130K

Привет, жители Хабра! Это Даша Фролова из команды спецпроектов МТС Диджитал. Ворвемся в новую рабочую неделю… с котиков!

Если вы близко знакомы с кошками, то в курсе, как их триггерят закрытые двери. Одни пытаются выцарапать в закрытой двери портал во внешний мир, другие просто истошно вопят, третьи, не жалея себя, просовывают лапы в щель и пытаются просочиться за ними. И это не предел: мой рыжий Кокс (привет фанатам «Клиники») еще и прыгает на дверную ручку, а потом висит на ней, пока дверь не откроется. Прикол в том, что когда проход будет открыт, кот может никуда и не пойти: ему сам факт закрытой двери не нравится.

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

Читать далее

Быстрое сравнение double

Reading time1 min
Views16K
Вчера здесь вышла статья о быстром парсинге double, я зашёл во блог к её автору, и нашёл там ещё один интересный трюк. При сравнении чисел с плавающей точкой особое внимание приходится уделять NaN (восемь лет назад я писал про них подробнее); но если сравниваемые числа заведомо не NaN, то сравнить их можно быстрее, чем это делает процессор!

Положительные double сравнивать очень просто: нормализация гарантирует нам, что из чисел с разной экспонентой больше то, чья экспонента больше, а из чисел с равной экспонентой больше то, чья мантисса больше. Стандарт IEEE 754 заботливо поместил экспоненту в старшие биты, так что положительные double можно сравнивать просто как int64_t.



С отрицательными числами немного сложнее: они хранятся в прямом коде, тогда как int64_t — в дополнительном. Это значит, что для использования целочисленного сравнения младшие 63 бита double необходимо инвертировать (при этом получится -0. < +0., что не соответствует стандарту, но на практике не представляет проблемы). Явная проверка старшего бита и условный переход уничтожили бы всю выгоду от перехода к целочисленному сравнению; но есть способ проще!

inline int64_t to_int64(double x) {
	int64_t a = *(int64_t*)&x;
	uint64_t mask = (uint64_t)(a >> 63) >> 1;
	return a ^ mask;
}

inline bool is_smaller(double x1, double x2) {
	return to_int64(x1) < to_int64(x2);
}

a>>63 заполняет все 64 бита копиями знакового бита, и затем >>1 обнуляет старший бит.
Читать дальше →

Устраняем уязвимости в Active Directory Windows. Часть 1

Level of difficultyMedium
Reading time12 min
Views19K


Известно, что с 2025 года нужно переходить на отечественное ПО, но я думаю, что очень большое количество организаций ещё используют Windows. Поэтому считаю, что данная статья будет актуальна.

В нашей статье основным инструментом позволяющим провести проверку безопасности AD будет PingCastle.
Читать дальше →

Самый необычный Windows-коммуникатор

Level of difficultyEasy
Reading time7 min
Views7.4K
Приветствую всех!

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



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

Как устроены серийники для Windows, и как восстановить стёршийся COA

Level of difficultyMedium
Reading time9 min
Views27K

Эта история начинается с того, что я попытался переустановить Windows на ноутбуке, доставшемся мне вот с такой наклейкой Certificate of Authenticity (COA): часть символов серийника видны хорошо, остальные – в большей или меньшей степени угадываются; но несколько попыток ввести серийник «на глаз» успехом не увенчались. Пришлось углубляться в вопрос подробнее.

Читать далее

Исходный код на прощание: разбор ошибок в проектах закрывшейся инди-студии

Reading time7 min
Views12K

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

Читать далее

Кибератаки уровня «космос»: зачем хакеры взламывают спутники и к чему это приводит

Reading time6 min
Views4.6K

Есть ли в космосе место для хакеров? Увы, где человек что-то сотворил, найдутся и те, кто захочет созданное разрушить или обратить себе на пользу. Единственного в истории подозреваемого в хакерстве на орбите — астронавта Энн Маклейн — суд оправдал. Зато соседи по планете неоднократно наносили недружественный визит космической инфраструктуре.

Меня зовут Денис Макрушин, я — технический директор компании МТС RED. Специально к Дню космонавтики расскажу, как злоумышленники нарушают киберустойчивость спутниковой инфраструктуры и как им можно противостоять.

Читать далее

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

Reading time10 min
Views9K

Курортная жизнь под кондиционером.

Я езжу на пляжно-морской отдых в осенний бархатный сезон: в первой половине сентября в Турцию или в первой половине октября в Египет.

Такой выбор времени связан с двумя факторами:

1. Меньше людей, так как кончились летние каникулы  у детей и прошёл  сезон августовских отпусков в Европе у взрослых.

2. Жара сильно уменьшилась, так что жить в номере можно даже и без кондиционера.

Предыдущие 5-6 поездок я действительно в эти периоды практически не включал кондиционер, особенно ночью. Шум от сильно изношенного кондиционера в ночной тишине вообще как-то не очень приятен.

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

Так как моя текущая работа- это проектирование систем ОВиК (отопления, вентиляция и кондиционирование), то наблюдение за  климатом в помещении  в зависимости от работы  кондиционера при разных внешних условиях стало для меня неким интеллектуальным развлечением на всю неделю отдыха.

Читать далее

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

Level of difficultyEasy
Reading time7 min
Views14K

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

Однако неполадки в компьютерной системе госкорпорации могут превратить жизни множества людей в настоящий сюжет антиутопии. Как это уже было в истории с британской почтой и софтом Horizon от японской компании Fujitsu: тысячи разрушенных репутаций, 700 обвинительных приговоров и 236 человек, по ошибке отправленных за решетку. Не говоря уже о нескольких суицидах…

Читать далее

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

Reading time4 min
Views6.8K

Привет, Хабр! Это Виктор Сергеев из команды спецпроектов МТС Диджитал. Сегодня обсудим, как убийца динозавров положил начало грибному фермерству.

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

Читать далее

SysMocap — очень простой захват движений в 3D с помощью вебкамеры. Как сделать из себя втубера?

Level of difficultyEasy
Reading time6 min
Views13K

Большое слово — Mocap


Большинство знает о mocap (захвате движений) из киноиндустрии: чёрный костюм с множеством точек на теле. Однако технологии не стоят на месте, и уже сейчас в домашних условиях для создания развлекательного контента достаточно одной веб-камеры, чтобы полностью захватить движения и преобразовать их в ваш аватар в режиме реального времени. Отличным примером такой технологии является SysMocap. Программа бесплатна, имеет открытый исходный код, работает в реальном времени и не требует предварительной настройки. В данной статье я рассмотрю SysMocap и несколько его аналогов, использующих формат технологии VRM.
Читать дальше →

Альтернативный список заблокированных в РФ ресурсов Re:filter

Reading time5 min
Views63K

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

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

Читать далее

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

Level of difficultyEasy
Reading time23 min
Views12K

Привет, Хабр!

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

Голова на подушке, попкорн и песочные часы: какие дефекты можно встретить при рентген-контроле качества печатных узлов

Reading time13 min
Views8.5K

Качество монтажа компонентов на печатной плате требует постоянного контроля. Пропущенный дефект может вылиться в брак итогового устройства — его некорректную работу или полное отсутствие «жизни». На современных производствах давно используют системы оптического контроля — AOI и SPI, но не всегда они применимы. Так, ими не проверить качество пайки внутренних выводов микросхем в BGA-корпусе или монтажа термопадов QFN-, QFP-корпусов. Для них используют рентген-контроль.

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

Читать далее

Анонимная сеть в 200 строк кода на Go

Level of difficultyMedium
Reading time15 min
Views20K

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

Вследствие этого, можно сказать just-for-fun, у меня появился вопрос: можно ли реализовать анонимную сеть настолько малую, чтобы её программный код смог понять даже начинающий программист за короткое время?

Читать далее

Используем Buildpacks вместо Dockerfile

Level of difficultyMedium
Reading time3 min
Views8.3K

Привет! На связи Александр Бархатов — DevOps-инженер в крупнейшем продуктовом холдинге и автор статей в медиа вАЙТИ.. Самое популярное средство для сборки контейнеризированного приложения — это Dockerfile, текстовый файл, в котором прописаны специальные инструкции для готовых Docker-образов. Несмотря на всеобщую популярность Docker, в 2011 году вышел инструмент под названием Buildpacks, принцип работы которого мы рассмотрим в этой статье.

Читать далее

Information

Rating
Does not participate
Location
Одесса, Одесская обл., Украина
Date of birth
Registered
Activity