Обновить
34
0

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

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

Современное состояние инструментов поиска утечек памяти

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

Несмотря на большое количество доступных инструментов поиска утечек памяти, в том числе от таких гигантов ИТ как FaceBook, существуют ряд ограничений применимости этих инструментов. В данном статье приводится сравнение существующих инструментов и их границы применимости.

Читать далее

Базовый набор для решения задач на LeetCode/Codeforces, ч.1

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

«Время — это единственная вещь, которую все хотят иметь, но которую нельзя купить или продлить» — Харви Маккей

Эта серия тредов пригодится тем, кто только начинает учиться решать задачи на таких сайтах как LeetCode или Codeforces, используя при этом C++. В тексте присутствует описание основных библиотек и также по одному небольшому примеру.

Читать далее

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

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

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

Читать далее

Что скрывают программы от отладчика?

Время на прочтение2 мин
Охват и читатели5.6K

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

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

Посмотрим, как справиться с противодействием отладке на примере 1337ReverseEngineer's The Junkrat https://crackmes.one/crackme/62dc0ecd33c5d44a934e9922 .

Посмотрим, что там

Суперклей ABI, или Как применять C++ где угодно

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

Привет, Хабр! Меня зовут Михаил, я backend-разработчик в SimbirSoft. Время от времени я сталкиваюсь с понятием «двоичный», он же «бинарный» интерфейс приложений, или просто ABI (application binary interface). Все найденные мной материалы на эту тему были либо очень скудны, либо вели к многостраничным эпопеям, которые напоминали сборную солянку из описания, например, архитектуры процессора x86, сдобренную стандартом С++.

Но потом я наткнулся на перевод публикации Тита Винтерса в рабочей группе 21 (WG21) — комитета по стандартизации языка C++. В ней он поднимает вопрос поддержки обратной бинарной совместимости. Значит, вопрос актуальный — это и стало мотивацией для написания этой статьи. В ней я сфокусируюсь на примерах и практике использования С++ в других языках программирования. Материал будет полезен middle+ и senior-разработчикам, а также всем, кто хочет сделать гибкий, долгоживущий, легко настраиваемый под заказчика продукт.

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

Читать далее

Полное руководство по проектированию систем в виде схемы

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

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

Читать далее

Работа с void* в стиле C++

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

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

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

Читать далее

Linux на esp32s3

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

Вопрос о том, можно ли загрузить линукс на микроконтроллерах Espressif я
впервые услышал в 2015, в период бума esp8266. Тогда мой ответ на него
был: "нет, не это ядро и не на этом железе". Но прошло 8 лет и ответ
изменился на "да, и у меня есть рабочий пример". Дальше рассказ о том,
как это произошло.

Читать далее

Заметка о восстановлении Grub UEFI для Proxmox 7.xx (Debian 11)

Время на прочтение4 мин
Охват и читатели16K

Доброго времени суток, Хабр!

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

Недавно, после установки драйверов видеокарты NVIDIA для XFCE4 на Proxmox 7.xx перестал пинговаться гипервизор с роутера и компов сети. После его перезагрузки я увидел черный экран и надписью "grub disk native sectors not found".

Как восстановить загрузку с диска LVM Deb

Пишем драйвер ядра Linux для неизвестного USB-устройства

Время на прочтение15 мин
Охват и читатели22K
image

В этой статье объяснен весь процесс, на выходе которого получается рабочий драйвер ядра Linux для недокументированного USB-устройства. Выполнив обратную разработку коммуникационного протокола USB, я покажу архитектуру драйвера ядра для USB. Кроме драйвера ядра в этой статье будет рассказано о простом инструменте для пользовательского пространства; при помощи этого инструмента можно управлять таким устройством. Конечно, придется углубиться в подробности, касающиеся конкретного прибора, но не сомневайтесь – описанный процесс с тем же успехом применим и к другим USB-устройствам.
Читать дальше →

Раскрываем секреты загрузочных ISO-образов

Время на прочтение20 мин
Охват и читатели151K


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

STM32 BluePill + RNDIS, или делаем из нехитрых приспособлений троллейбус…

Время на прочтение13 мин
Охват и читатели25K

Привет, Хабр. Год назад я круто изменил направление своей деятельности с desktop разработчика на программиста микроконтроллеров. Хочу поговорить о том, как прошел этот год, поделиться своими наблюдениями, рассказать в одном месте о чем никто не рассказывает. А, еще и RNDIS на STM32F103 поднимем.

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

...и знать ничего не хотят

Создание .NET библиотеки от А до Я

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

Думаете о создании .NET библиотеки, но не знаете, в какую сторону двигаться? Уже разрабатываете нечто подобное, но хочется открыть для себя что-то новое? Ищете варианты расширить автоматизацию? Не знаете, что делать с пользователями?

Надеюсь, данная статья поможет ответить на эти и другие вопросы. На примере своей библиотеки с открытым исходным кодом – DryWetMIDI – рассмотрим различные аспекты создания подобных проектов. И хотя речь будет идти про .NET/C#, уверен, многое применимо и к другим популярным платформам и языкам программирования.

Читать далее

Руководство по CMake для разработчиков C++ библиотек

Время на прочтение18 мин
Охват и читатели136K

Данное руководство позволит читателю составить полную картину того, как организовать сборку C++ библиотек с использованием современных возможностей CMake. Предполагается, что читатель имеет представление о базовых понятиях из мира CMake и динамических/статических C++ библиотек, так как в руководстве они могут не объясняться.

Читать далее

Элементы языка С, которые являются неподдерживаемыми в языке С++

Время на прочтение7 мин
Охват и читатели34K

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

Этот материал я уже публиковал на другом ресурсе в менее причесанном виде, Я бы, наверное, поддался прокрастинации и никогда не собрался опубликовать эту коллекцию здесь, но из-за горизонта уже доносится стук копыт неумолимо приближающегося С23, который безжалостно принесет некоторые жемчужины моей коллекции в жертву богам С-С++ совместимости. Поэтому мне и пришлось встать с печи, пока они еще актуальны...

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

Читать далее

77+ примеров использования смарт-контрактов

Время на прочтение19 мин
Охват и читатели25K

77+ примеров использования смарт-контрактов

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

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

Чтобы преодолеть отсутствие такого связующего звена, гибридные смарт-контракты используют оракулы в качестве посредника для сбора информации из внешних источников данных, предоставления информации во внешние источники, и для вычислений off-chain. Оракулы обеспечивают не только двустороннюю связь между смарт-контрактами и внешним миром,  но и безопасную среду, которая защищает от любого риска единой точки отказа (single point of failure), например, от манипуляции данных или системного сбоя.

Читать далее

Как работают регулярные выражения, или Движок regex с анимацией

Время на прочтение5 мин
Охват и читатели18K

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

Читать далее

Во что вам обойдется конкурентная обработка. Иерархия проблем

Время на прочтение47 мин
Охват и читатели6.8K

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

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

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

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

Читать далее

Гайд по архитектуре приложений для Android. Часть 1: обзор

Время на прочтение7 мин
Охват и читатели69K

Перевод обновлённого гайда Android по архитектуре приложений. Это — первая часть из пяти: обзор рекомендаций по архитектуре.

Читать далее

Моя система физического и ментального здоровья гика

Время на прочтение8 мин
Охват и читатели19K
Мне 39 лет и с 19 работаю разработчиком и руководителем проектов, женат, есть ребенок. Всё норм, единственный нюанс – тело досталось с начальными параметрами гораздо хуже средних.
Когда ребенок рождается, его состояние оценивается по шкале Апгар 0-10. 7-10 – это норма, 0-2 балла — сильные отклонения в состоянии здоровья. У меня было – 2 балла. Мне повезло, и я выжил, но получил детский церебральный паралич, вторую группу инвалидности и справку о нетрудоспособности. Руки и ноги дергаются, говорю непонятно (но привыкнуть можно),  правая рука умеет только здороваться и зажимать ctrl, хожу как зомби.

Здоровье было всю жизнь не айс, однако тело реально посыпалось около 30, плюсом к ДЦП: гастрит, колит, простатит, аритмия, множественные экструзии межпозвоночных дисков, остеопороз, постоянный мышечный спазм всего тела, нарушение зрения, бессоница и др.  Когда я спросил у кардиолога, почему у меня в таком раннем возрасте развилась аритмия, она объяснила очень просто: ДЦП постоянно фигачит все мышцы, сердце – это мышца, просто до этой мышцы добрались не сразу.

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

Моя система состоит из трех компонентов:

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


Далее подробнее расскажу о системе.
Читать дальше →

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность