Как стать автором
Обновить
19
0.2

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

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

Вы все еще пишете многопоточку на C++ с ошибками синхронизации?

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров20K
Привет, коллеги! В этой статье я покажу свой подход к написанию многопоточного кода, который помогает избежать типовых ошибок, связанных с использованием базовых примитивов синхронизации.

Демонстрация идеи будет проходить на живых примерах кода на современном C++. Большинство описанных решений я применял сначала на собственных проектах, а теперь часть этих подходов уже используется в нашей собственной микроядерной операционной системе «Лаборатории Касперского» (KasperskyOS).

Сразу хочу оговориться, что тема многопоточности — очень большая и серьезная. И эта статья — не полноценный анализ проблем многопоточки, а только частНЫе (но довольно частЫе) кейсы, когда мы вынуждены использовать мьютексы.
Читать дальше →
Всего голосов 50: ↑51.5 и ↓-1.5+53
Комментарии128

Доступ к серверу за NAT

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

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

Читать далее
Всего голосов 10: ↑8 и ↓2+6
Комментарии33

Бесплатные курсы для изучения C++ в 2024 году

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


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

Учить C++ в 2024 году по бесплатным курсам имеет несколько преимуществ. Вот несколько причин, почему это стоит делать:

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

2. Высокая производительность: C++ известен своей высокой производительностью и эффективностью. Он позволяет разрабатывать быстрые и оптимизированные приложения, особенно в сферах, где требуется работа с большими объемами данных или высокая скорость выполнения.

3. Множество полезных библиотек: C++ предоставляет широкий набор инструментов и библиотек для разработки приложений.

4. Доступно множество полезных ресурсов: Язык C++ очень популярный, существует множество различных онлайн-ресурсов, форумов и сообществ, где можно получить помощь и поддержку от опытных разработчиков.

Читать
Всего голосов 37: ↑35 и ↓2+33
Комментарии18

Python Multiprocessing. Обмен данными между процессами. Передача объектов пользовательских классов

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

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

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

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

О том, как с этим обходиться, я и расскажу в этой статье.

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

Компилятор за выходные: синтаксические деревья

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

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

Итак, чтобы самому разобраться в теме, я собираюсь написать транслятор с эзотерического языка программирования wend (сокращение от week-end), который я только что сам придумал, в обычный ассемблер. Задача уложиться в несколько сотен строк питоновского кода. Основной репозиторий живёт на гитхабе (не забудьте заглянуть в мой профиль и посмотреть другие tiny* репозитории).

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

Затыкаем рот Windows 10

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


Windows 10 очень любит Интернет. Обновления, синхронизации, телеметрия и ещё куча разной другой очень нужной ЕЙ информации постоянно гуляет через наши сетевые соединения. В «стандартном» сценарии использования, когда Windows 10 управляет домашним или рабочим компьютером, это, в общем-то, терпимо, хотя и не очень приятно.

Однако жизнь сложная штука и не ограничивается только стандартными вариантами. Существуют ситуации, когда подобная сетевая активность операционной системы (ОС) нежелательна и даже вредна. За примерами далеко ходить не надо. Попробуйте подключить к Интернету давно не используемый резервный компьютер, собранный на старом железе. Пока софт на нём не обновится, использовать его будет практически невозможно, всё будет дико тормозить и еле шевелиться. А если вам в этот момент нужно срочно что-то сделать?

Для того чтобы подобного не происходило, необходимо «заткнуть рот Windows», то есть сделать так, чтобы она самостоятельно перестала «стучаться» в Интернет, устанавливать обновления и заниматься прочими непотребствами. Вот именно этим мы с вами и займёмся.
Читать дальше →
Всего голосов 217: ↑207 и ↓10+197
Комментарии308

Синхронизация операций в .NET на примерах

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

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

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

Читать далее
Всего голосов 15: ↑11 и ↓4+7
Комментарии26

Сборка мусора в JavaScript

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

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

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

Погнали собирать мусор!

Собрать мусор
Всего голосов 17: ↑16 и ↓1+15
Комментарии5

Как оптимизировать код на С для x86-процессоров: подсистема кэша и памяти, инструкции AVX-512

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

Меня зовут Андрей Бакшаев, я ведущий инженер-программист в YADRO. Моя команда занимается разработкой и оптимизацией математических библиотек под архитектуру x86. До этого я 15 лет работал в Intel. Значительная часть моих задач заключалась в том, чтобы реализовывать некоторые алгоритмы обработки изображений и сигналов в довольно известной математической библиотеке IPP, максимально эффективно используя возможности процессоров. Я также исследовал производительность этих алгоритмов в процессорах на ранней стадии проектирования. 

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

Читать далее
Всего голосов 54: ↑51 и ↓3+48
Комментарии23

VBA, Windows 10: манипуляция файлами с длинными путями

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

Недавно, работая в VBA, при попытке переименовать группу файлов, расположенных в длинных вложенных директориях я столкнулся с кучей ошибок. Оказалось, что в Windows (в данном случае была 10 версия) существуют ограничения на длину путей (см.к примеру https://learn.microsoft.com/ru-ru/windows/win32/fileio/maximum-file-path-limitation?tabs=registry). Решения, найденные в результате поиска не принесли результата. Да, для манипуляции с длинными путями необходимо разрешить их в реестре (Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnable - значение 1), но даже если они будут разрешены, манипулировать вы ими не можете, т.к. сам проводник виндовс не позволяет работать с длинными путями. В то же время с длинными путями хорошо работает проводник 7-Zip File Manager, при этом он имеется практически на каждом компьютере.

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

скрипт VBA, файлы с длинными путями
Всего голосов 9: ↑7 и ↓2+5
Комментарии16

Поговорим об оптимизирующих компиляторах. Сказ четвёртый: Циклы

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

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

Зациклиться
Всего голосов 30: ↑30 и ↓0+30
Комментарии8

Как процессоры x86 декодировали инструкции в RISC-форму: история легенды

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

Распространено мнение, будто современные высокопроизводительные процессоры x86 работают так: декодируют «сложные» инструкции x86 в «простые» RISC-подобные инструкции, которые затем обрабатываются в оставшейся части конвейера. Но насколько эта идея на самом деле отражает, как именно устроен внутри процессор?

Чтобы ответить на этот вопрос, давайте проанализируем, как следующий простой цикл обрабатывают различные процессоры x86, от P6 (первой микроархитектуры Intel «современного» типа до современных конфигураций). Код сделан 32-разрядным лишь для того, чтобы можно было затронуть и очень старые процессоры с архитектурой x86.

Читать далее
Всего голосов 53: ↑49 и ↓4+45
Комментарии6

Хороший, плохой, злой и… свободный? Сравниваем глуповатые, но усердные AI-плагины для разработки

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

Привет, Хабр! Меня зовут Арсений, я — тимлид в команде разработки инструментов разработчика KasperskyOS. Работа нашей команды заключается в том, чтобы делать жизнь разработчика ПО под нашу собственную микроядерную OS удобной, так что любые технологии, упрощающие жизнь разработчика, не оставляют нас равнодушными. Вместе со всеми мы следим за хайпом вокруг нейросетей и решили сделать небольшой обзор AI-плагинов автодополнения кода, которые каждый из нас может использовать уже сейчас.


image


В этой заметке попробуем сравнить следующие AI плагины VSCode:


  • Copilot v1.84.61 — самый нашумевший робот
  • Tabnine v3.6.45 — самый старый из трех и самый дорогой
  • Codeium v1.2.11 — самый свежий и самый малоизвестный
  • FauxPilot — Open source, self-hosted аналог Copilot, использующий модели от CodeGen; посмотрим, что может противопоставить коммерческим продуктам OSS-проект, развернутый на моем запечном сервере.

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

Читать дальше →
Всего голосов 49: ↑48 и ↓1+47
Комментарии12

Wireshark — подробное руководство по началу использования

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

Wireshark – это широко распространённый инструмент для захвата и анализа сетевого трафика, который активно используется как для образовательных целей, так и для устранения неполадок на компьютере или в сети. Wireshark работает практически со всеми протоколами модели OSI, обладает понятным для обычного пользователя интерфейсом и удобной системой фильтрации данных. Помимо всего этого, программа является кроссплатформенной и поддерживает следующие операционные системы: Windows, Linux, Mac OS X, Solaris, FreeBSD, NetBSD, OpenBSD.

Читать далее
Всего голосов 41: ↑39 и ↓2+37
Комментарии21

Процессор ЭВМ ЕС-1020. Микропрограммное управление

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

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

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

Какого провайдера VPS выбрать для собственного сервера в 2023 году. Платим за всё российской картой

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

Иметь свой VPS для VPN довольно выгодно. Нет ограничений по количеству клиентов, можно обеспечить VPN подключением всех своих родных, друзей и знакомых. При этом можно за это платить 160-300 рублей в месяц. И если общедоступные VPN вовсю банятся по DNS и IP, то личные VPN пока что избегают этой участи.

Минусы есть, это администрирование сервера и отсутствие разнообразия географии.

Для VPN нужен зарубежный сервер, а с зарубежными сервисами в России уже больше года есть проблемы с оплатой. Но есть российские компании, которые предоставляют зарубежные сервера и при этом им можно платить с помощью российской карточки.
Я зарегистрировался в дюжине провайдеров, до покупки VPS дошёл у пяти. А после тестов остались только трое.

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

Атаки на RDP и способы защиты от них

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

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

В 2020 году увеличилось использование сторонних сервисов для обмена данными, работа сотрудников на домашних компьютерах в потенциально незащищенных сетях Wi-Fi. Увеличилось количество людей, использующих инструменты удаленного доступа. Это стало одной из главных проблем для сотрудников ИБ.

Одним из наиболее популярных протоколов прикладного уровня, позволяющим получать удаленный доступ к рабочей станции или серверу под управлением ОС Windows, является проприетарный протокол Microsoft — RDP (англ. Remote Desktop Protocol - Протокол удаленного рабочего стола). Во время карантина в сети Интернет появилось большое количество компьютеров и серверов, к которым можно подключиться удаленно. Наблюдался рост активности злоумышленников, которые хотели воспользоваться текущим положением вещей и атаковать корпоративные ресурсы, доступные для сотрудников, отправленных на удаленную работу. На рисунке 1 представлена статистика атак на RDP. По графику видно, что количество атак на RDP значительно увеличилось с начала пандемии.

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

E2K: от истоков до нюансов Российской архитектуры [ч. 1]

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

В этой статье я попробую объяснить простым и понятным языком в чем «соль» этой архитектуры. Сразу оговорюсь, базовое понимание математики, информатики и принципов работы компьютера или телефона с которого читается статья — обязательна.

Статья разбита на части, пишу в свободное от работы и личных забот время. Эта творчество, скажем, пробник в первую очередь — себя. Если будет положительный фидбэк — то проба пера успешная:3

Читать далее
Всего голосов 25: ↑17 и ↓8+9
Комментарии58

Эмоциональная история процессоров для первых компьютеров с 70-х до начала 90-х: AIM PowerPC

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

В первой части были обзорно описаны многие разные процессоры до середины 90-х. Во второй части был обзор процессоров мейнфреймов IBM. Недавно мне предоставилась возможность немного попрограммировать для PowerPC, на основе чего появилась возможность добавить ещё одну часть к этим обзорам.

Читать далее
Всего голосов 29: ↑28 и ↓1+27
Комментарии10

Взаимодействие между процессами на С++ и PHP. Сокеты, семафоры и разделяемая память

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

Доброго всем дня!

Хочу рассказать о своём практическом опыте реализации взаимодействия между процессами в среде Linux в условиях, когда вычислительных ресурсов существенно не хватает. По условию, один из процессов написан на C++, второй на PHP, потому дополнительно мы рассмотрим доступность соответствующих API из PHP а также варианты действий в случае, когда для нужного API PHP-обёртка отсутствует.

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

Информация

В рейтинге
2 261-й
Зарегистрирован
Активность