Как стать автором
Обновить
1
0
Калмыков Юрий @Videoman

Пользователь

Отправить сообщение

Ищем Арнольда Шварценеггера среди мужчин, женщин и детей с помощью нейросети на С++

Уровень сложностиСредний
Время на прочтение24 мин
Количество просмотров7.8K

Привет, Хабр! Меня зовут Кирилл Колодяжный, я ведущий инженер-программист в YADRO. Помимо основных рабочих задач, включающих исследование проблем производительности СХД, я увлекаюсь машинным обучением. Участвовал в коммерческих проектах, связанных с техническим зрением, 3D-сканерами и обработкой фотографий. В задачах часто использовал С++, хотя машинное обучение традиционно ассоциируется с Python. Этот язык программирования буквально захватил сферу, его используют повсюду — от обучающих курсов до серьезных ML-проектов.

Однако Python — не единственный язык, на котором можно решать задачи машинного обучения. Так, альтернативой может стать С++. Если последний вам ближе, вам будет интересен и полезен этот текст.

Под катом разберемся:

как организовать работу с данными и загрузку обучающего датасета, 

как описать структуру нейронной сети, 

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

как организовать конвейер обучения сети, 

как использовать предобученные глубокие сети для решения задач. 

Читать далее
Всего голосов 22: ↑21 и ↓1+20
Комментарии15

Самое понятное объяснение Специальной теории относительности

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров98K

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

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

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

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

Читать далее
Всего голосов 386: ↑386 и ↓0+386
Комментарии388

Люди не понимают ООП

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров113K

«ООП для меня означает лишь обмен сообщениями, локальные ограничения и защиту, сокрытие состояния процесса и крайне позднее привязывание», — Алан Кэй (человек, придумавший термин «объектно-ориентированное программирование»)1

Похоже, многим не нравится объектно-ориентированное программирование. Первое, что приходит в голову, когда слышишь эту трёхбуквенную аббревиатуру — это пример с автомобилем, наследование, геттеры, сеттеры и ObjectFactoryFactorySingleton.

Мне это всегда казалось довольно странным. Мне не только нравится ООП, я ещё и считаю, что часто это лучший/наиболее очевидный способ моделирования задачи. И ниже я расскажу, почему.
Читать дальше →
Всего голосов 154: ↑147 и ↓7+140
Комментарии457

Неожиданное взаимодействие предсказания ветвлений и подсистем памяти

Время на прочтение10 мин
Количество просмотров6.6K

Это 15-я статья в серии, посвящённая оптимизации подсистем памяти. Остальные доступны здесь (англ.).

В ней мы изучим взаимодействие механизма предсказания ветвлений с подсистемой памяти. В повествовании мы будем исходить из предположения, что вам знаком принцип предсказания ветвлений и работы подсистем памяти в современных процессорах.
Читать дальше →
Всего голосов 45: ↑43 и ↓2+41
Комментарии6

Поговорим об оптимизирующих компиляторах. Сказ восьмой: размотка циклов

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров8.7K

Есть оптимизации, польза от которых очевидна всегда или почти всегда. Например, не делать лишнюю проверку лучше, чем делать. Не считать два раза одно и то же обычно лучше, чем считать (если только мы не упёрлись в нехватку регистров или имеем другие подобные проблемы на нижнем уровне). Вычислять выражения вне цикла выгоднее, чем в цикле. И так далее.

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

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

Читать далее
Всего голосов 55: ↑55 и ↓0+55
Комментарии6

Почему программистам нужны кабинеты с закрывающимися дверями?

Время на прочтение8 мин
Количество просмотров17K
Обычная ситуация: вы сидите за своим рабочим столом, погрузившись в размышления, и пытаетесь разрешить проблему, которая вот уже неделю не дает вам продвинуться в работе. В глубинах сознания вы выстраиваете структуру из мыслей и вероятностей, о которой ни один философ и не мечтал: выявляете концепты, прилаживаете их друг к другу, поворачиваете так и эдак, чтобы они состыковались. Что-то вроде арки, сложенной из камней: когда она будет закончена, то окажется достаточно прочной, чтобы пережить целые поколения – но пока не готова, может развалиться до основания, если слишком рано перестать удерживать части.



Триумфальная арка © Verity Cridland/flickr

Тут мимо проходит коллега и замечает, что вы просто сидите, возможно, со слегка приоткрытым ртом, не исключено, что голова у вас слегка склонена, глаз подергивается и общее выражение лица такое, будто вы проглотили муху (или это только у меня так?). В общем, очевидно, что вы ничем не заняты. Поэтому коллега трогает вас за плечо и говорит: «Эй, можно тебя на минутку? Я только хотел спросить…»

И вот, в эту самую секунду роскошная полуарка, которую вы с таким трудом удерживали, обрушивается к вашим ногам.
Читать дальше →
Всего голосов 33: ↑32 и ↓1+31
Комментарии23

Реализация консенсусного алгоритма Raft

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров3.1K

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

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

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

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

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

Читать далее
Всего голосов 17: ↑15 и ↓2+13
Комментарии1

CRC — это просто (деление столбиком)

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров12K

Целостность можно достичь различными способами. Например, чек-суммами. Вот как раз была такая задача - обеспечить целостность с помощью чек-сумм.

На ум сразу пришел CRC. Ну тут просто - взял скопировал готовый код, бери не хочу, реализаций на разных языках куча.

Но это простой путь слишком просто - так не интересно (да и лишних часов на таску надо тоже поставить). Поэтому решил усложнить себе жизнь разобраться в работе CRC!

Читать далее
Всего голосов 27: ↑26 и ↓1+25
Комментарии8

Реляционные системы управления базами данных становятся проблемой. Что с этим делать?

Время на прочтение9 мин
Количество просмотров21K

С реляционными базами данных я знаком очень давно, с конца 90-х. Мои первые шаги в мире компьютеров и программирования связанны именно с ними. Реляционным БД было отведено особое место в моей образовательной программе и стажировке на инженера-программиста. Они преследовали меня на протяжении всей моей карьеры. Я буквально провалился на самое дно кроличьей норы реляционных систем управления базами данных (РСУБД) – и до сих пор люблю их.

За годы работы я испробовал практически все РСУБД, а их попадалось мне немало: MySQL, Postgres, Oracle, Microsoft SQL Server, DBase, Access, SQLite, DB2, MariaDB, AWS RDS, Azure SQL, Google Cloud SQL. Нельзя любить РСУБД, если не любишь SQL, а это отдельная вселенная. И не все SQL одинаковы. Есть MySQL со своим собственным жаргоном, есть T-SQL от Microsoft и всемирно известный PL/SQL от Oracle. Наверное, не стоит упоминать, что все они несовместимы друг с другом.

Читать далее
Всего голосов 34: ↑20 и ↓14+6
Комментарии56

Разбираем TLS по байтам. Кто такой этот HTTPS?

Уровень сложностиСредний
Время на прочтение32 мин
Количество просмотров23K


Подключение к сайту бывает защищённым, а бывает нет — это надо знать всем детям. Только мало детей знают, что это значит и как работает.

Я, изучая веб-разработку, узнал об HTTP. Разобраться в нём несложно: в каждой статье о протоколе множество наглядных примеров запросов и ответов. Затем узнал о схеме HTTPS, с которой всё не так наглядно. В ней используется то ли SSL, то ли TLS, и что-то где-то шифруется, и зачем-то нужны какие-то сертификаты. Короче, всё расплывалось в тумане: где пример ответа, запроса, сертификата, как его создать, зачем он нужен и почему гайд по созданию http-сервера уже написал каждый школьник, а https-сервер — недоступная для начинающих разработчиков роскошь?

В связи с этим, предлагаю обсудить протокол TLS и его роль в вебе. Статья состоит из двух частей. В первой поговорим о защите соединения: от чего и как защищаемся, почему именно так, а не иначе, сколько и каких ключей для этого нужно, и разберёмся с системой сертификатов; а в конце создадим свой сертификат и посмотрим, как его использовать для разработки.

Во второй обсудим, как это дело реализуется в протоколе TLS и разберём формат TLS-пакетов по байтам. Статьи рассчитаны в первую очередь на изучающих веб-разработку, знакомых с HTTP и жаждущих осознать, кто такое https. Но материал актуален для любых применений TLS, будь то веб или не веб.
Читать дальше →
Всего голосов 62: ↑61 и ↓1+60
Комментарии21

Актуальный гайд по написанию простого Windows-драйвера

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров34K

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

Читать далее
Всего голосов 61: ↑61 и ↓0+61
Комментарии40

Поиск по регулярным выражениям может быть простым и быстрым

Уровень сложностиСредний
Время на прочтение28 мин
Количество просмотров9.1K

Данный пост является переводом первой статьи 2007 года про устройство регулярных выражений от автора библиотеки RE2. Для понимания требуется немного терпения и свободного времени, чтобы осилить прочтение статьи до конца. Будет плюсом знакомство с теорией автоматов и языком программирования Си (но это необязательное требование).

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

Как оказалось, с тех пор мало что поменялось, так что статья не потеряла своей актуальности.

Обо всех ошибках и опечатках большая просьба сообщать, чтобы я мог их поправить.

Заблудиться в тёмном лесу
Всего голосов 34: ↑33 и ↓1+32
Комментарии6

Сохранение древовидной структуры в Visual Studio с CMake или создание папок в проекте

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров4.5K

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

Читать далее
Всего голосов 7: ↑7 и ↓0+7
Комментарии3

Тайная жизнь COM: как устроен Component Object Model в Windows и стратегии выбора объекта для атаки

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров7.2K

Анализируя отчеты по разбору вредоносного ПО приходишь к выводу, что одним из популярных методов для закрепления в системе является COM Hijacking (T1546.015). Примером такого вредоносного ПО является Fancy Bear или Jumplump. Таким образом, становится очень важно команде Blue Team уметь детектировать данный вид атаки. Поэтому было принято решение выпустить серию статей, посвященных технологии Component Object Model, разбору атаки COM Hijacking и ее детектированию.

Читать далее
Всего голосов 15: ↑15 и ↓0+15
Комментарии3

Теорема Байеса для чайников

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров52K

Теорема (формула) Байеса позволяет выяснить вероятность события при условии, что произошло связанное с ним другое событие.

Теорема позволяет рассчитать вероятность события, если причину и следствие поменять местами. Например, мы знаем распространенность симптома среди больных и здоровых. Значит, мы можем вычислить вероятность заболевания от наличия симптома.

Читать далее
Всего голосов 24: ↑23 и ↓1+22
Комментарии35

Что делает ChatGPT… и почему это работает?

Уровень сложностиСредний
Время на прочтение75 мин
Количество просмотров146K

То, что ChatGPT может автоматически генерировать что-то, что хотя бы на первый взгляд похоже на написанный человеком текст, удивительно и неожиданно. Но как он это делает? И почему это работает? Цель этой статьи - дать приблизительное описание того, что происходит внутри ChatGPT, а затем исследовать, почему он может так хорошо справляться с созданием более-менее осмысленного текста. С самого начала я должен сказать, что собираюсь сосредоточиться на общей картине происходящего, и хотя я упомяну некоторые инженерные детали, но не буду глубоко в них вникать. (Примеры в статье применимы как к другим современным "большим языковым моделям" (LLM), так и к ChatGPT).

Читать далее
Всего голосов 248: ↑248 и ↓0+248
Комментарии121

Гетерогенный поиск в ассоциативных контейнерах на C++

Время на прочтение3 мин
Количество просмотров9.7K

Ассоциативные контейнеры в C++ работают с конкретным типом ключа. Для поиска в них по ключу подобного типа (std::string, std::string_view, const char*) мы можем нести существенные потери в производительности. В этой статье я расскажу как этого избежать с помощью относительно недавно добавленной возможности гетерогенного поиска.

Читать дальше →
Всего голосов 33: ↑33 и ↓0+33
Комментарии24

Улучшенная эвристика при квантовании цветовой палитры

Время на прочтение11 мин
Количество просмотров1.4K

В 2015 году я написал статью о том, как было улучшено квантование цветовой палитры в FFmpeg для создания красивых анимированных гифок. По какой-то причине эта статья — по сей день самая популярная из всех моих постов.

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

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

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

Читать далее
Всего голосов 23: ↑23 и ↓0+23
Комментарии1

RSync на стероидах с поддержкой Windows

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров28K


На Хабре периодически рассказывают о новых инструментах для синхронизации данных. Это интересная тема. Такие программы используются:

  • для синхронизации файлов на разных устройствах,
  • дедупликации,
  • резервного копирования,
  • сжатия.

Малейшая оптимизация даёт экономию трафика, места, ускоряет синхронизацию и общую производительность любых систем. Всё, везде и сразу. В эпоху веб-приложений и клиент-серверной архитектуры со множеством девайсов, которые работают в единой инфраструктуре, синхронизация — Святой Грааль, одна из базовых технологий в компьютерной области.

Кроме того, инструменты синхронизации интересны с алгоритмической точки зрения. Любопытно, как люди умудряются оптимизировать базовые алгоритмы типа rsync, которые вроде бы работают идеально. Но нет, всегда можно придумать что-то получше.
Читать дальше →
Всего голосов 62: ↑62 и ↓0+62
Комментарии27

Нормально разбираемся в Нормальном распределении

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров33K

Интуитивное понимание Нормального распределения

Читать далее
Всего голосов 53: ↑51 и ↓2+49
Комментарии14

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность