All streams
Search
Write a publication
Pull to refresh
-4
Эдуард Зиганшин @e-zigread⁠-⁠only

Разработка электроники

Send message

Понимание lvalue и rvalue в C и С++

Reading time9 min
Views209K
Привет, Хабр! Представляю вашему вниманию перевод статьи Eli Bendersky, Understanding of lvalues and rvalues in C and C++.

От переводчика: предлагаю Вашему вниманию перевод интересной статьи об lvalue и rvalue в языках C/C++. Тема не нова, но знать об этих понятиях никогда не поздно. Статья рассчитана на новичков, либо на программистов переходящих с C (или других языков) на C++. Поэтому будьте готовы к подробному разжёвыванию. Если вам интересно, добро пожаловать под кат
Читать дальше →

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

Reading time19 min
Views22K

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

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

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

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

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

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

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

Reading time47 min
Views6.4K

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

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

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

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

Читать далее

Константные ссылки — не всегда ваши друзья

Reading time8 min
Views16K

Когда мы преподаем современный C++, в самом начале мы учим, что все, что не подпадает под критерии малых данных (small data)1, по умолчанию должно передаваться через константные ссылки:

Читать далее

Просто о сложном — пишем тесты с Google C++ Testing Framework (GTest, GMock)

Reading time9 min
Views80K

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

Читать далее

RVO и NRVO в C++17

Reading time8 min
Views34K

Предположим, что в программе на C++ вы возвращаете из функции локальную переменную. Что происходит при вызове оператора return: копирование, перемещение или ни то, ни другое? От этого зависит длительность вызова функции и эффективность наших программ. Я постарался разобраться с этим вопросом и дам рекомендации по написанию функций так, чтобы повысить шансы на применение этой оптимизации компиляторами. Ну, а сокращения в названии статьи — это Return Value Optimization (RVO) и Named Return Value Optimization (NRVO).

Читать далее

Как буткиты внедряются в современные прошивки и чем UEFI отличается от Legacy BIOS

Reading time15 min
Views16K

Привет, Хабр! На связи Антон Белоусов и Алексей Вишняков, и мы продолжаем вместе с вами изучать буткиты — наиболее опасный класс вредоносного ПО. Гонка вооружений между разработчиками решений в области ИБ и вирусописателями не останавливается ни на секунду: первые активно внедряют новые механизмы противодействия киберугрозам, а вторые — инструменты их обхода. Как раз с точки зрения безопасности нас заинтересовал современный стандарт предзагрузки операционных систем UEFI. Поэтому в этом посте мы решили:

разобраться, чем загрузка в режиме UEFI отличается от загрузки в режиме Legacy BIOS;

рассказать о новых экземплярах буткитов, нацеленных на компрометацию UEFI;

выяснить, похожи ли они на своих предшественников (обширную группу так называемых legacy-буткитов мы подробно изучили в прошлый раз);

рассмотреть используемые злоумышленниками техники и слабые места систем на платформе UEFI.

Подробнее

Правильная работа с потоками в Qt

Reading time13 min
Views90K
Qt — чрезвычайно мощный и удобный фреймворк для C++. Но у этого удобства есть и обратная сторона: довольно много вещей в Qt происходят скрыто от пользователя. В большинстве случаев соответствующая функциональность в Qt «магически» работает и это приучает пользователя просто принимать эту магию как данность. Однако когда магия все же ломается то распознать и решить неожиданно возникшую на ровном казалось бы месте проблему оказывается чрезвычайно сложно.

Эта статья — попытка систематизации того как в Qt «под капотом» реализована работа с потоками и о некотором количестве неочевидных подводных камней связанных с ограничениями этой модели.

Основы
Thread affinity, инициализация и их ограничения
Главный поток, QCoreApplication и GUI
Rendering thread
Заключение

А Вы правильно работаете с QThread и сигналами?

Синдром дефицита внимания и гиперактивности — откуда берутся самые невыносимые хулиганы и что с этим делать

Reading time12 min
Views35K


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

Но до сих пор сохраняется, и даже среди врачей, мнение, что это «модный выдуманный диагноз».

Поэтому нужно научиться отличать «что это на него нашло?» (то есть эпизодические сложности) от, собственно, дефицита внимания. Чтобы поставить СДВГ, мало проблем с учёбой или плохого поведения. Мало пропускать задания в учебнике, потому что что-то отвлекло. Мало «считать ворон» на уроке. Время от времени такое бывает у каждого, однако у некоторых людей проблемы настолько распространены и серьёзны, что мешают сразу нескольким аспектам их жизни: общению дома, успешности в учебе, реализации на работе.

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

Например, максимальная продолжительность активного внимания у детей в пять–семь лет — 15 минут. Когда ребёнок в три года непоседлив, криклив и не может сосредоточиться на каком-то одном деле дольше 10 минут — это нормально. Если то же самое происходит с ребёнком 9-10 лет, то это уже нарушение.
Читать дальше →

OSINT по спутниковым изображениям

Reading time3 min
Views51K
image

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

Зеленый Кот нашел разбившуюся советскую исследовательскую станцию «Марс-3» по снимкам со спутника, тысячи экологов следят за лесами Амазонки и состоянием береговой линии, школьники делают учебные проекты по слежке за популяцией моржей, репортеры проводят расследования, освобождают рабов, мониторят лагеря беженцев.

Предлагаю вам подборку бесплатных ресурсов и проектов со спутниковыми данными, программами обработки этих данных и полезные статьи.
Читать дальше →

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

Reading time17 min
Views52K

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

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

Читать далее

Разглядывая JTAG: что внутри?

Reading time27 min
Views15K

Ознакомившись с работой JTAG в общих чертах и написав файл BSDL для воображаемой микросхемы в предыдущей статье, можно рассмотреть работу модуля JTAG внутри микросхем более детально. Для этого мы напишем прошивку для микроконтроллера и для ПЛИС (на «Си» и на «SystemVerilog»), которые позволят считывать/устанавливать логические уровни на отдельных выводах микросхемы через данный интерфейс.

Реализовать интерфейс JTAG

Создание собственных команд в GIT

Reading time6 min
Views8.4K

Эта статья предназначена для тех, кто уже имеет начальный уровень работы с GIT и BitBucket. В статье рассматриваются примеры в Git Bash version 2.33.0, API BitBucket 2.0, https://bitbucket.org

Читать далее

С днем рождения, Кевин Келли: еще 103 непрошенных совета

Reading time12 min
Views14K
image

Кевин Келли, создатель журнала WIRED, уже третий год подряд на свой день рождения дарит всем непрошенные советы (вот прошлый перевод на Хабре: 68 непрошеных советов (c ↑+78))

28 апреля ему исполнилось 70 лет и он выкатил еще 103 непрошенных совета (они просто взорвали HackerNews)

Хочется побыстрее поделиться этими премудростями от прикольного дядьки и поэтому выкладываю перевод «в реальном времени» (если хотите помочь с переводом — контрибьютьте тут)

  1. Примерно в 99% случаев подходящее время — прямо сейчас.
  2. Никто так не впечатлен вашим имуществом, как вы сами.
  3. Никогда не работайте на того, кем не хотите стать.
  4. Развивайте отношения с 12 людьми, которые вас любят, потому что они стоят более 12 миллионов человек, которым вы нравитесь.
  5. Не повторяйте одни и те же ошибки; попробуй сделать новые ошибки.

Читать дальше →

Регистры STM32 в структурах на битовых полях, UART (Tx, Rx-длина?) + DMA

Reading time18 min
Views21K

Цель статьи - рассказать, как получить удобный доступ к битам регистра STM32 без использования битовых операций и пользоваться битами микроконтроллера как обычными переменными. Чтобы не быть голословным, создадим проект UART+DMA с передачей и приёмом данных неизвестной длины, работающую чисто на структурах c битовыми полями, которые привязаны к адресам периферии STM32.

Читать далее

Расставим точки над структурами C/C++

Reading time4 min
Views285K
Недавно познакомился со структурами C/C++ — struct. Господи, да «что же с ними знакомиться» скажете вы? Тем самым вы допустите сразу 2 ошибки: во-первых я не Господи, а во вторых я тоже думал что структуры — они и в Африке структуры. А вот как оказалось и — нет. Я расскажу о нескольких жизненно-важных подробностях, которые кого-нибудь из читателей избавят от часовой отладки…


Читать дальше →

У вашей кожи тоже стресс

Reading time10 min
Views10K

Классический модельный механизм для изучения стресса

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

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

Все проблемы начинаются, когда система запускается, но вместо попытки выжить человек сидит на своём рабочем месте и переживает по поводу геополитики, чудаков в Интернете и премии. Хронический стресс, особенно нереализованный в виде физической активности, приводит к обратному эффекту. Организм не может долго функционировать на форсаже, что приводит к целому ряду проблем:

  • Длительное повышение глюкокортикоидов начинает подавлять собственную иммунную систему и замедлять регенерацию.
  • Истощение резервов и нарушение иммунного ответа приводят к тому, что просыпаются хронические инфекции, которые до этого никак себя не проявляли. Кандидоз, вагиноз, герпетическая инфекция и хламидиоз — вполне типичный набор. Хотя для того, чтобы получить хламидиоз, просто понервничать недостаточно.

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

С++ без классов?

Reading time6 min
Views20K

(на картинке изображён С++ среди других функциональных языков)

Классы - это скорее всего первое, что добавил Страуструп в далёких 1980х, ознаменовав рождение С++. Если представить, что мы археологи древних плюсов, то косвенным подтверждением этого факта для нас будет this, который по прежнему в С++ является указателем, а значит, скорее всего, он был добавлен до "изобретения" ссылок!

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

В конце(СПОЙЛЕР) мы попытаемся превратить С++ в функциональный язык за несколько простых действий.

Для начала рассмотрим базовое применение классов:

Начать погружение

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

Reading time7 min
Views48K

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

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

Information

Rating
Does not participate
Location
Мытищи, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

System Software Engineer, Hardware Engineer
Senior
From 225,000 ₽
C++
Qt
Verilog HDL
VHDL
C
Git
Linux