Как стать автором
Обновить
63
0

Погромист

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

Отладка драйвера Windows

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

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

Хочу ронять Windows в BSOD
Всего голосов 57: ↑57 и ↓0+57
Комментарии64

Гибкая индексация элементов в контейнере на С++ и при чём тут Boost.MultiIndex

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

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

Мультииндекснуться
Всего голосов 26: ↑26 и ↓0+26
Комментарии22

Заговор молчания: за что издатели так ненавидят эмуляторы консолей?

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

Вопреки расхожему заблуждению, создание и использование эмуляторов игровых приставок вовсе не является пиратством. Более того, мировая судебная практика как раз выступает на стороне поклонников ретрогейминга: до настоящего времени еще ни одно разбирательство против разработчиков эмуляторов не заканчивалось в пользу крупных корпораций, а в США, благодаря прецедентному праву, эмуляцию как таковую и вовсе легализовали. И тем не менее платформодержатели, крупные издатели и ангажированные представители игровой журналистики с завидной регулярностью напоминают геймерам о том, что эмуляторы — главные пособники пиратов, а их использование аморально и противозаконно. В чем же причина подобной неприязни? На первый взгляд, ответ лежит на поверхности, однако на самом деле не все так просто.

Раскрыть заговор!
Всего голосов 41: ↑38 и ↓3+43
Комментарии44

Как посчитать синус быстрее всех на хабре

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

Несмотря на свою кажущуюся банальность, темы о вычислении синуса достаточно регулярно появляются на хабре. И каждый раз их авторы или делают сомнительные утверждения, или получают сомнительные результаты. Не в силах более терпеть, я тоже решил поучаствовать и внести свой, не менее сомнительный вклад в этот вопрос.
Читать дальше →
Всего голосов 61: ↑60 и ↓1+91
Комментарии41

Безопасное использование C++

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

От переводчика. Данный текст является переводом документа Safer Usage Of C++, выложенного в общий доступ командой Chromium/Chrome из компании Google. Текст активно обсуждался на Reddit, и команда PVS-Studio решила, что аудитории Habr-а может быть интересно познакомиться с его русскоязычным вариантом. Для перевода использован текст от 20 сентября 2021, и на момент его чтения он может отличаться от текста по ссылке.

Читать дальше →
Всего голосов 20: ↑15 и ↓5+16
Комментарии12

Бывший проектировщик микросхем для Военно-Воздушных Сил США расскажет в Cколково как верифицировать FIFO

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

Если вы изучили начала цифровой схемотехники и компьютерной архитектуры по книжке Харрис & Харрис и потом вознамерились пойти собеседоваться на позицию проектировщика микросхем в Apple или NVidia, то вы интервью не пройдете. Посколько вы наверняка получите вопрос про реализацию в хардвере очередей FIFO, а это в Харрис & Харрис не описано.

Хуже того, даже если вы возьмете книжку Digital Design by William Dally & Curtis Harting, которую используют для обучения студентов в Стенфорде, и прочтете ее от корки до корки, то у вас все равно мало шансов, потому что, хотя FIFO там и есть, но в очень базисной форме, а контроль потока данных заканчивается на скид-буферах.

А что же хотят электронные компании?
Всего голосов 18: ↑17 и ↓1+24
Комментарии24

Как симулировать плохую сеть под Linux, macOS и Windows

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

Clumsy 0.2

Все распределённые системы — базы данных, мобильные приложения, корпративные SaaS и так далее — следует разрабатывать с учётом сбоев. Например, компания Stripe во время тестов убивала случайные инстансы — и смотрела, что произойдёт. Компания Netflix рандомно уничтожала инстансы прямо в продакшне с помощью программы Chaos Monkey (проект Simian Army).

Симуляция сбоев — необходимое средство тестирования. Проблема в том, что ситуации не делятся только на чёрное и белое, Есть огромная «серая» зона, где сбои явно не выражены, а проявляются в плохих условиях сети: ненадёжное соединение, узкий канал, потери пакетов, высокая задержка, дубликаты пакетов и так далее.
Читать дальше →
Всего голосов 45: ↑45 и ↓0+45
Комментарии6

C++17. Функция стандартной библиотеки std::launder и задача девиртуализации

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

В этой статье мы попробуем разобраться с одним из самых неоднозначных и непонятных нововведений стандарта C++17 — функцией стандартной библиотеки std::launder. Мы посмотрим на std::launder с другой стороны, посмотрим на источник. Разберем что лежит в основе функции на примере решения задачи девиртуализации и реализации виртуальных указателей в LLVM.


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

Как удалить «неудаляемые» приложения со смартфона

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


Чтобы увеличить привлекательность смартфонов, производители ставят на них как можно больше разных программ. Это понятно. Просто берём и удаляем ненужное… Стоп.

Оказывается, некоторые программы невозможно удалить. Например, на отдельных моделях Samsung невозможно удалить Facebook (есть только опция 'disable'). Говорят, на Samsung S9 вдобавок предустановлены «неудаляемые» приложения Microsoft.

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

Всё это надо зачистить.
Читать дальше →
Всего голосов 156: ↑145 и ↓11+168
Комментарии203

std::atomic. Модель памяти C++ в примерах

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

Для написания эффективных и корректных многопоточных приложений очень важно знать какие существуют механизмы синхронизации памяти между потоками исполнения, какие гарантии предоставляют элементы многопоточного программирования, такие как мьютекс, join потока и другие. Особенно это касается модели памяти C++, которая была создана сложной таковой, чтобы обеспечивать оптимальный многопоточный код под множество архитектур процессоров. Кстати, язык программирования Rust, будучи построенным на LLVM, использует модель памяти такую же, как в C++. Поэтому материал в этой статье будет полезен программистам на обоих языках. Но все примеры будут на языке C++. Я буду рассказывать про std::atomic, std::memory_order и на каких трех слонах стоят атомики.

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

Возможности SQLite, которые вы могли пропустить

Время на прочтение8 мин
Количество просмотров40K
Если вы используете SQLite, но не следите за его развитием, то возможно некоторые вещи, позволяющие сделать код проще, а запросы быстрее, прошли незамеченными. Под катом я постарался перечислить наиболее важные из них.
Читать дальше →
Всего голосов 76: ↑76 и ↓0+76
Комментарии35

Как Microsoft из монстра эпохи доткомов превратилась в корпорацию-мечтателя

Время на прочтение11 мин
Количество просмотров20K
Многие не любят Microsoft за ее непростое прошлое и решения, которые принимались Гейтсом, Балмером и даже Наделлой, когда они руководили компанией в разные годы. Microsoft сделала много ошибок за десятилетия своего существования, но в отличие от большинства людей, причастных к IT-индустрии, я никогда по-настоящему не испытывал ненависти к этой компании. Ну все ненавидят Microsoft, да и я буду ненавидеть, что уж тут, отбиваться от коллектива?



В этот момент многие олдовые фанаты Linux потянулись за ружьем, но давайте будем объективны: в последнее десятилетие Microsoft дает все меньше поводов для ненависти. Да, Windows 10 с каждым патчем все больше и больше выводит из себя. Да, Microsoft бросила на произвол судьбы малое, но крайне преданное сообщество фанатов их мобильной платформы.

Но при этом я, как человек, внимательно наблюдающий за новыми продуктами и вообще, за новостями компании, понимаю, что руководство Сатьи Наделлы войдет в историю Microsoft, как эпоха мечтателей и визионеров. И сейчас я постараюсь объяснить, почему я пришел к подобным выводам.
Всего голосов 52: ↑48 и ↓4+59
Комментарии33

Коды избыточности: простыми словами о том, как надёжно и дёшево хранить данные

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


Так выглядит избыточность


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



Меня зовут Вадим, в Яндексе я занимаюсь разработкой внутреннего объектного хранилища MDS. В этой статье я простыми словами опишу теоретические основы кодов избыточности (кодов Рида — Соломона и LRC). Расскажу, как это работает, без сложной математики и редких терминов. В конце приведу примеры использования кодов избыточности в Яндексе.


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


* Под термином «коды избыточности» в статье подразумевается инженерный термин «erasure codes».

Читать дальше →
Всего голосов 47: ↑43 и ↓4+54
Комментарии32

Почему в Docker не работает Strace

Время на прочтение4 мин
Количество просмотров12K
Когда я редактировала страницу о возможностях контейнеров для журнала «How Containers Work», мне потребовалось объяснить, почему в Docker не работает strace. Вот что случалось при запуске strace в Docker-контейнере на моем ноутбуке:

$ docker run  -it ubuntu:18.04 /bin/bash
$ # ... install strace ...
root@e27f594da870:/# strace ls
strace: ptrace(PTRACE_TRACEME, ...): Operation not permitted

strace работает через системный вызов ptrace, поэтому без разрешения для ptrace ничего не заработает! Но это легко исправить, и на моем ноутбуке я все сделала вот так:

docker run --cap-add=SYS_PTRACE  -it ubuntu:18.04 /bin/bash

Но мне было интересно не решить проблему, а разобраться, почему эта ситуация вообще возникает. Так почему же strace не работает, а --cap-add=SYS_PTRACE все исправляет?
Читать дальше →
Всего голосов 31: ↑30 и ↓1+44
Комментарии4

Анализатор исходного кода Microsoft Application Inspector

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

image

Компания Microsoft выпустила «Microsoft Application Inspector», кросс-платформенный опенсорсный (!) инструмент для анализа исходного кода.

Читать дальше →
Всего голосов 30: ↑27 и ↓3+35
Комментарии26

15 лучших и крупнейших библиотек иконок

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


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

Сразу уточняем: это не 15 самых лучших библиотек, а 15 из лучших. Разумеется, есть и другие, не менее замечательные, о которых я не упомянул или не знаю.
И, нет, это не рейтинг — список маркированный, а не нумерованный.
Читать дальше →
Всего голосов 20: ↑18 и ↓2+22
Комментарии12

ChaiScript — скриптовый язык для C++

Время на прочтение21 мин
Количество просмотров15K
Когда возникает потребность внедрить скриптовый язык в проект на C++, первым делом большинство людей вспоминает Lua. В этой статье его не будет, я расскажу о другом, не менее удобном и легком в освоении языке под названием ChaiScript.

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

Как проверить паспорт на действительность

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


Реквизиты паспорта — не просто набор цифр, в них закодирован вагон информации. Если правильно расшифровывать и сопоставлять реквизиты, подозрительные документы мгновенно всплывут на поверхность. Продукты HFLabs уже 14 лет проверяют клиентские данные в банках, страховых, телекомах и другом крупном бизнесе. Расскажу, как мы распознаем ошибки в российских паспортах.
Читать дальше →
Всего голосов 100: ↑98 и ↓2+130
Комментарии258

Как проводить код-ревью

Время на прочтение18 мин
Количество просмотров52K
Из документации Google's Engineering Practices

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


См. также Руководство автора CL, в котором даются подробные советы разработчикам, чьи коммиты проходят ревью.
Читать дальше →
Всего голосов 27: ↑26 и ↓1+25
Комментарии17

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

Время на прочтение4 мин
Количество просмотров15K
image

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

В то же время, код часто содержит ветвления (операторы if–then). Такие ветвления часто реализуются как «переходы», при которых процессор или переходит к выполнению инструкции ниже по коду, или продолжает текущий путь.

При суперскалярном выполнении команд вне порядка с ветвлениями справляться сложно. Для этого у процессоров имеются изощрённые блоки предсказания ветвления. То есть процессор пытается предсказать будущее. Когда он видит ветвление, а значит, переход, то пытается догадаться, каким путём пойдёт программа.
Читать дальше →
Всего голосов 53: ↑52 и ↓1+51
Комментарии24

Информация

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