Pull to refresh
17
0.1

User

Send message

Продление жизни временных значений в С++: рецепты и подводные камни

Reading time19 min
Reach and readers25K

Прочитав эту статью вы узнаете:

1. Способы, которыми можно продлить время жизни временного объекта в С++.

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

Информация из статьи может быть полезна как новичкам, так и профессионалам.

Если заинтересовало, то самое время налить чая, и погнали разбираться где тут референсы висят.

Чай готов, начинаем погружение

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

Reading time7 min
Reach and readers20K


Если я хочу поиграть с друзьями, то мы либо долго спорим в какую игру по сети будем играть, т.к. ребята предпочитают шутеры, вроде CS и Battleground, а я фанатею от League of Legends. Если договориться не вышло, мы назначаем встречу в аналоговом мире и тащим с собой несколько коробок настолок, потому что у каждой игры свои поля, фишки, карты и вообще вдруг количество игроков изменится.

Древние любители игр о такой ерунде не парились. Начертили поле на земле, камушков набрали и играют, радуются. У игроков, которые могли донатить, конечно были vip-скины, к примеру, игровые фигурки не из дерева, а из слоновой кости. На игровой процесс это не сильно влияло, а археологам помогает сейчас восстанавливать древние игры. Под катом подборка популярных игр из древнего Египта, Месопотамии, Северной Америки времен ацтеков и Скандинавии, а еще ссылочки на их браузерные версии.

Еще я веду канал в Telegram GameDEVils и блог на Substack , делюсь там клевыми материалами (про геймдизайн, разработку и историю игр).
Читать дальше →

Неклассические контейнеры в C++

Reading time17 min
Reach and readers60K

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

В стандартную библиотеку C++ входит несколько контейнеров. Кроме этого, в Open Source есть несколько контейнеров, которые покрывают больше юзкейсов. Я опишу устройство интересных контейнеров вне STL и их отличия от классических контейнеров.

Читать далее

Дампы LSASS для всех, даром, и пусть никто не уйдет обиженный

Reading time12 min
Reach and readers75K

Здравствуйте, хабролюди!

Меня зовут @snovvcrash, и я работаю в отделе анализа защищенности компании Angara Security. Отвечаю я, значится, за инфраструктурный пентест, и в этой статье я хотел бы поговорить об одном из самых эффективных методов добычи учетных данных на «внутряке» — извлечении секретов из памяти процесса lsass.exe (MITRE ATT&CK T1003.001) — и, в частности, об особенностях реализации этого метода в ру-сегменте тестирования на проникновение.

За два года работы пентестером мои нервы были изрядно потрепаны нашим любимым отечественным антивирусным решением Kaspersky Endpoint Security (далее — KES), который установлен у каждого первого второго нашего клиента, и который, в отличие от других средств антивирусной защиты, наглухо блокирует все попытки потенциального злоумышленника получить доступ к lsass.exe (не реклама!).

Далее я расскажу свой опыт использования и кастомизации публично доступных инструментов, которые в разные промежутки времени позволяли мне сдампить память LSASS при активном «Касперском».

Читать далее

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

Reading time7 min
Reach and readers58K

Почтовый ящик с письмами — это личная собственность человека. Никто не имеет права доступа к архиву, кроме владельца.

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

Особенности реализации STL в Clang, GCC и Microsoft С++

Reading time21 min
Reach and readers23K

Любая программа состоит из данных и алгоритмов их обработки. Для написания программ на C++ в начале 90-х годов прошлого века Александр Степанов с коллегами разработал библиотеку STL. Я, Михаил Полукаров из команды разработки VK Teams, заглянул под капот этой библиотеки чтобы разобраться, как правильно ей пользоваться, в каких случаях лучше использовать другие библиотеки, а в каких стоит написать что-то своё. 

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

Читать далее

Кратко о форматах TLV, BER, CER, DER, PER

Reading time8 min
Reach and readers27K

Я хотел бы кратко рассказать о таких форматах данных, распространенных в ИТ-индустрии, в том числе в области инфраструктур открытых ключей (ИОК), смарт-картах, включая документы нового поколения на базе смарт-карт, в мобильной связи. Хотя рассматриваемые форматы и связаны с ASN.1, но некоторые из них ушли далеко за пределы этой области. О некоторых из них многие знают, но не все знают настолько, чтобы, допустим, уметь отличать BER от DER, а некоторые варианты типа PER вообще являются экзотикой.

Глубоко в тему погружаться не буду. Просто познакомлю с главными особенностями, чтобы понимать, что это такое и с чем это едят. Досконально и в полном объеме всё это описано в соответствующих стандартах ITU-T X.690 и ISO 7816.

Одна из моих мотивирующих задач — это уложить тему в своей голове по полочкам.

Правила абстрактной нотации (ASN.1) используются, когда надо специфицировать формат некой структуры данных. Сами правила описаны в стандартах ITU-T X.680–X.683. Пожалуй, что наиболее распространенный вариант применения — это форматы сертификатов X.509 и всего, что имеет к ним отношение. Пример текстовой нотации может выглядеть как-то так:

Читать далее

Подводные камни HttpClient в .NET

Reading time9 min
Reach and readers99K
Продолжая серию статей о «подводных камнях» не могу обойти стороной System.Net.HttpClient, который очень часто используется на практике, но при этом имеет несколько серьезных проблем, которые могут быть сразу не видны.

Достаточно частая проблема в программировании — то, что разработчики сфокусированы только на функциональных возможностях того или иного компонента, при этом совершенно не учитывают очень важную нефункциональную составляющую, которая может влиять на производительность, масштабируемость, легкость восстановления в случае сбоев, безопасность и т.д. Например, тот же HttpClient — вроде бы и элементарный компонент, но есть несколько вопросов: сколько он создает параллельных соединений к серверу, как долго они живут, как он себя поведет, если DNS имя, к которому обращался ранее, будет переключено на другой IP адрес? Попробуем ответить на эти вопросы в статье.
Читать дальше →

Дженерики в Go — подробности из блога разработчиков

Reading time10 min
Reach and readers22K

В Go 1.18 добавлена поддержка дженериков. Это самое большое нововведение с момента первого Open Source выпуска Go. Не будем пытаться охватить все детали, затронем всё важное. Подробное описание со множеством примеров смотрите в документе с предложением по улучшению языка. Материалом делимся к старту курса по Backend-разработке на Go.

Читать далее

Как писать bash-скрипты надежно и безопасно: минимальный шаблон

Reading time8 min
Reach and readers74K

Скрипты на Bash. Как много в этом слове. Любому разработчику рано или поздно приходится их писать. Почти никто не скажет "да, я люблю писать bash-скрипты", и поэтому этой теме уделяют мало внимания.

Я не буду пытаться сделать из вас эксперта в Bash, а просто покажу минимальный шаблон, который поможет сделать ваши скрипты более надежными и безопасными.

Читать далее

Обнаружение наличия функциональности в C++ на этапе компиляции

Reading time10 min
Reach and readers7.3K

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

Хорошо, если есть поддержка концептов или рефлексии. А что делать, если их ещё нет, или они не в полной мере поддерживаются?

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

Читать далее

Генерируем Rust обёртку для FMOD

Reading time27 min
Reach and readers3.6K

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

Это руководство содержит общий обзор и конкретные приемы написания сложной Rust обёртки для звукового движка FMOD с помощью парсера pest и квази-цитирования.

Читать далее

Шаблоны C++: как итерировать по std::tuple — основы

Reading time9 min
Reach and readers36K

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

Читать далее

Как заходить в чужой монастырь

Reading time18 min
Reach and readers21K

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

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

Эта статья может быть интересна ребятам, которые переходят в новые компании на руководящие должности техлидов и тимлидов, либо разработчикам, которым выпало неожиданно возглавить не их «родные» команды.

Итак, рассмотрим ситуацию, когда в команду разработки (или в командЫ разработки) приходит новый руководитель, о котором самим участникам команды ничего не известно. И этот руководитель — вы.

Читать далее

Из чего состоит мировой эфир. Последняя теория Менделеева

Reading time8 min
Reach and readers66K

В марте 1869 года была опубликована первая версия периодической системы Менделеева. Систематический вид из рядов и групп она приобрела через пару лет – вот так выглядел вариант от 1871 года. Как известно (о чем я уже упоминал в статье про пределы таблицы Менделеева и элемент фейнманий). Дмитрий Иванович Менделеев (1834-1907) принципиально превзошел своих учителей и коллег, в частности, Роберта Бунзена, Жана Лекока Буабодрана и Лотара Майера в том, что пытался не только классифицировать уже известные к тому времени химические элементы, но и расположить их в соответствии с увеличением атомного веса и периодическим паттерном химических свойств. Поэтому он не только оставил в своей таблице пустые клетки, но и сделал два исключения из периодического закона на материале известных ему элементов. Тем не менее, Менделеев весьма превратно представлял себе варианты заполнения «краев» таблицы. Ошибки Менделеева, в которых он даже упорствовал, были связаны с двумя неверными исходными посылками. Во-первых, Менделеев всерьез воспринимал концепцию мирового эфира (написал о нем серьезную аналитическую статью в 1902 году), хотя, еще в 1887 году был неоднократно поставлен эксперимент Майкельсона-Морли, фактически доказавший, что эфир не существует. Кроме того, на момент составления таблицы еще не была известна внутренняя структура атома (атом считался неделимым), а также Менделеев не предусмотрел в таблице 8-й группы, то есть, столбца с благородными газами.

Читать далее

Unity: 8 причин отказаться от Coroutine в пользу Async

Reading time9 min
Reach and readers47K

Когда речь заходит об асинхронных операциях в Unity, на ум первым делом приходит coroutine. И это не удивительно, так как большинство примеров в сети реализованы именно через них. Но мало кто знает, что Unity поддерживает работу с async/await еще с 2017 версии.

Так почему же большинство разработчиков до сих пор использует coroutine вместо async/await? Во первых, как я уже упомянул, большая часть примеров написана с использованием coroutine. Во вторых, async/await кажется очень сложным для начинающих разработчиков. Ну и в третьих, когда речь заходит о коммерческих проектах, где основным из критериев является стабильность, предпочтение отдается проверенному годами подходу.

Но технологии не стоят на месте и появляются библиотеки, которые делают работу с async/await в Unity удобной, стабильной и самое главное высокопроизводительной.

Читать далее

18 февраля — День памяти Криса Касперски. Пять лет как нет Николая Лихачева

Reading time14 min
Reach and readers25K
Не могу поверить, но уже прошло пять лет как нет Криса. За это время мир очень сильно изменился. Ему очень было бы интересно жить в этом новом мире, мире блокчейна, биткоинов, эфириума, телеграмм каналов, мире биг-даты, машинного обучения, нейронных сетей и искусственного интеллекта, программ вымогателей, АПТ группировок, новых операционных систем, а также Windows 10 и 11. Но увы его нет с нами. От него остались только его книжки и статьи в разных журналах и его отец, который помнит всю его жизнь от момента рождения и трагического падения. Несмотря на то, что Крис уже не жил в России, он постоянно переписывался с отцом по электронной почте и присылал свежие фотографии. Отец же начал работу над книгой — биографией своего сына, кусочком которой он поделился со мной, а я делюсь с Вами.
Читать дальше →

Язык программирования C∀ (CForAll)

Reading time14 min
Reach and readers26K

Мой интерес к дизайну языков программирования приводит меня иногда к интересным, но почти неизвестным в широких кругах проектам. Один из таких проектов - язык C∀ (CForAll), разрабатываемый Университетом Ватерлоо. C∀ является расширением ISO C и обеспечивает обратную совместимость с C. Помимо исправления некоторых недостатков Си (которые можно исправить без нарушения обратной совместимости), в C∀ есть некоторые весьма интересные и оригинальные фичи: некоторые расширения классических управляющих операторов, альтернативный синтаксис объявления квалификаторов, кортежи и множественные операции, оригинальное расширение ссылок, своя реализация полиморфизма, сопрограммы и т.д.

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

Читать далее

Лучшие альтернативы для Docker

Reading time7 min
Reach and readers89K

Изобретение интермодальных контейнеров вызвало бум международной торговли и стало одним из основных элементов глобализации

Контейнеры от компании Docker произвели настоящую революцию в разработке, тестировании и развёртывании приложений. Хотя вовсе не она изобрела Linux-контейнеры. Ведь LXC и OpenVZ появились раньше под Linux, а до них много лет существовали Jails/Zones в BSD/Solaris.

Но именно Docker представил контейнеры в виде удобного и простого «массового продукта». Примерно как Apple позаимствовала идеи MP3-плеера и смартфона и доработала их. То же самое сделал Docker. Хотя не довёл дело до конца, то есть до получения прибыли.

Сейчас компания Docker разваливается на глазах. Однако Linux-контейнеры отлично работают и без неё, это же опенсорс.
Читать дальше →

Kernel Queue: The Complete Guide On The Most Essential Technology For High-Performance I/O

Reading time65 min
Reach and readers25K

When talking about high-performance software we probably think of server software (such as nginx) which processes millions requests from thousands clients in parallel. Surely, what makes server software work so fast is high-end CPU running with huge amount of memory and a very fast network link. But even then, the software must utilize these hardware resources at maximum efficiency level, otherwise it will end up wasting the most of the valuable CPU power for unnecessary kernel-user context switching or while waiting for slow I/O operations to complete.

Thankfully, the Operating Systems have a solution to this problem, and it's called kernel event queue. Server software and OS kernel use this mechanism together to achieve minimum latency and maximum scalability (when serving a very large number of clients in parallel). In this article we are going to talk about FreeBSD, macOS and kqueue, Linux and epoll, Windows and I/O Completion Ports. They all have their similarities and differences which we're going to discuss here. The goal of this article is for you to understand the whole mechanism behind kernel queues and to understand how to work with each API.

Read more

Information

Rating
3,676-th
Registered
Activity