Как стать автором
Обновить
1
0
Эрнст Маурер @amigo421

C++ разработчик

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

Современный С++ в разработке девайсов

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

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

Меня зовут Андрей Белобров. Я тимлид одной из команд, разрабатывающих приложения для умных девайсов Сбера.

На прошедшей недавно конференции Салют, OS DevConf! я выступил с докладом, в котором рассказал, как мы с командой разрабатываем приложения на С++ для умных устройств с виртуальным ассистентом. А также о том, как инструменты статического и динамического анализа помогают поддерживать единый стиль и высокое качество кода в проекте.

Во время доклада меня попросили подробнее описать детали нашего подхода в статье, поэтому рад поделиться с вами расширенной текстовой версией.

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

Язык С++ позволяет писать эффективный и переносимый между различными платформами код, поэтому выбор языка программирования для нашего приложения был очевиден. При этом язык известен своей сложностью и возможностью выполнить одну и ту же задачу несколькими способами.
Чтобы успешно разрабатывать большой проект на языке C++, необходимо хорошо настроить процесс разработки в команде (а это несколько десятков инженеров). Также можно значительно осовременить разработку на C++ за счет использования подходящих инструментов статического и динамического анализа, и правильной интеграции их в процесс разработки.

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

Когнитивные ошибки. Как перепрошить мысли?

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

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

На связи RISE: сообщество про ноотропы и личную продуктивность. Разберемся с когнитивными ошибками и способами их исправить.

Читать далее
Всего голосов 10: ↑5 и ↓50
Комментарии5

Насколько жарко — это слишком жарко? Жара + влажность становятся опасными быстрее, чем многие думают

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

По мере изменения климата волны жары становятся все более интенсивными: они длятся дольше, идут чаще, а температуры всё выше. Сейчас одна такая волна проносится через Европу: в Испании и Португалии только за прошедшую неделю умерли 1100 человек. Люди просто оказались не готовы к температурам выше 35 ºС: у них в домах не было кондиционеров, а многие днем выходили и пытались работать как обычно. И получили огромные проблемы со здоровьем.

В целом по Европе за одно это лето счет идет уже на десятки тысяч. Этот год, по всей видимости, станет даже более смертоносным, чем печально известный 2003-й, когда в Европе от жары погибло 30 000 людей. Но тогда температура доходила до 37 ºС, сейчас — под тем же Парижем фиксируют уже до +42 ºС.

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

Попытаемся ответить.

Читать далее
Всего голосов 114: ↑109 и ↓5+104
Комментарии609

[Личный опыт] Стоит ли программисту «покорять» Америку

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

Х. работает в «американской мечте» программистов — Кремниевой долине. Он поделился своим собственным взглядом на жизнь в Америке, где большие зарплаты, но плохой сервис; прекрасная природа, но ужасные отели; много возможностей, но сложно достичь вершины. А также почему Америка — страна дряхлых технологий, и в чем не прав Дудь. Передаем слово!

Читать далее
Всего голосов 133: ↑111 и ↓22+89
Комментарии181

Ехать или не ехать? Check list

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

Эта статья не даст вам советов, ехать или не ехать. Принять решение вы должны сами, однако, я попытаюсь систематизировать аргументы ЗА и ПРОТИВ так как сам жил и работал за границей по 3 года дважды - в Америке и Франции.

Читать далее
Всего голосов 187: ↑133 и ↓54+79
Комментарии468

Строковые алгоритмы на практике. Часть 2 — Алгоритм Бойера — Мура

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

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

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

Польза как проклятие: особенности самовосприятия IT-специалистов

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

Всем привет! Меня зовут Сергей и я практикующий психолог.

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

Кстати, о пользе. Я задам вам всего один вопрос: "Кто вы без своей работы?".

Узнать правильный ответ
Всего голосов 36: ↑33 и ↓3+30
Комментарии34

Что в голове у программиста? ч.4

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

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

Традиционный дисклеймер: это не истина в последней инстанции. Это описание методов, которые показали определенную эффективность в определенных вопросах. Не факт, что вам поможет. Как и не факт, что это вам вообще нужно. В общем, не стоит потом меня обвинять, что вы потратили драгоценные минуты жизни на прочтение потенциально бесполезной для вас информации. Я предупредил ;)

Ссылки на предыдущие части, чтобы быть в контексте происходящего:
часть 1
часть 2
часть 3

Покончить с этим!
Всего голосов 7: ↑6 и ↓1+5
Комментарии8

Что в голове у программиста? ч.3

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

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

Если вы не понимаете, о чём идет речь, то рекомендую ознакомиться с первыми частями: часть 1, часть 2.

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

Узнать как жить лучше
Всего голосов 12: ↑12 и ↓0+12
Комментарии19

Что в голове у программиста? ч.2

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

Всем привет! Меня зовут Сергей и я практикующий психолог.

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

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

Познать себя
Всего голосов 23: ↑22 и ↓1+21
Комментарии9

Что в голове у программиста? ч.1

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

Все привет!
Меня зовут Сергей и я практикующий психолог.

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

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

Познать себя
Всего голосов 54: ↑48 и ↓6+42
Комментарии125

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

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

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


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

Массивы в C++

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


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


Эта статья посвящена массивам. Массивы можно отнести к наиболее древним слоям C++, они пришли из первых версий C. Тем не менее, массивы вошли в объектно-ориентированную систему типов C++, хотя и с определенными оговорками. Программисту важно знать об этих особенностях, чтобы избежать потенциальных ошибок. В статье также рассмотрено другое наследие C – тривиальные типы и неинициализированные переменные. Часть нововведений C++11, С++14, С++17 затрагивают работу с массивами, все эти новые возможности также подробно описаны. Итак, попробуем рассказать о массивах все.



Читать дальше →
Всего голосов 21: ↑19 и ↓2+17
Комментарии17

«Скользкие» места C++17

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

В последние годы C++ шагает вперед семимильными шагами, и угнаться за всеми тонкостями и хитросплетениями языка бывает весьма и весьма непросто. Уже не за горами новый стандарт, однако внедрение свежих веяний — процесс не самый быстрый и простой, поэтому, пока есть немного времени перед C++20, предлагаю освежить в памяти или открыть для себя некоторые особо «скользкие» места актуального на данный момент стандарта языка. 

Сегодня я расскажу: почему if constexpr не является заменой макросов, каковы «внутренности» работы структурного связывания (structured binding) и его «подводные» камни и правда ли, что теперь всегда работает copy elision и можно не задумываясь писать любой return. 

Если не боишься немного «испачкать» руки, копаясь во «внутренностях» языка, добро пожаловать под кат.
Читать дальше →
Всего голосов 95: ↑94 и ↓1+93
Комментарии112

Ускоряем std::shared_mutex в 10 раз

Время на прочтение35 мин
Количество просмотров52K
В этой статье мы детально разберем атомарные операции и барьеры памяти C++11 и генерируемые ими ассемблерные инструкции на процессорах x86_64.

Далее мы покажем как ускорить работу contfree_safe_ptr<std::map> до уровня сложных и оптимизированных lock-free структур данных аналогичных по функциональности std::map<>, например: SkipListMap и BronsonAVLTreeMap из библиотеки libCDS (Concurrent Data Structures library): github.com/khizmax/libcds

И такую многопоточную производительность мы сможем получить для любого вашего изначально потоко-небезопасного класса T используемого как contfree_safe_ptr<T>. Нас интересуют оптимизации повышающие производительность на ~1000%, поэтому мы не будем уделять внимание слабым и сомнительным оптимизациям.
Читать дальше →
Всего голосов 54: ↑54 и ↓0+54
Комментарии22

Нерекурсивный алгоритм генерации перестановок

Время на прочтение4 мин
Количество просмотров55K
Предлагаемый ниже нерекурсивный алгоритм несколько отличается от изложенных в книге Липского [1] и обнаруженных мной в русскоязычном сегменте интернета. Надеюсь будет интересно.
Читать дальше →
Всего голосов 35: ↑22 и ↓13+9
Комментарии49

Работа со строками на этапе компиляции в современном C++

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


Если вы программируете на C++, то наверняка задавались вопросом почему нельзя сравнить два строковых литерала или выполнить их конкатенацию:


auto str = "hello" + "world"; // ошибка компиляции

if ("hello" < "world") { // компилируется, но работает не так, как ожидалось
    // ...
}

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

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

Жизнь и смерть митохондрий

Время на прочтение14 мин
Количество просмотров90K
Митохондрии – маленькие труженики или большие начальники?

Если вы думаете, что самая важная для нас история совместной жизни начинается во время свадьбы, то это совсем не так. Самая важная история совместной жизни каждого человека началась более миллиарда лет назад, когда наши далекие одноклеточные предки вынуждены были подписать «брачный контракт» с теми, кого мы сейчас называем митохондрии (см. теория симбиогенеза).

Митохондрии имеют две мембраны (внутреннюю и внешнюю) и собственный наследственный материал в виде ДНК (рис.1). На внутренней мембране митохондрий находится система окислительного фосфорилирования, работа которой обеспечивает окисление энергетических субстратов с образованием АТФ.


Рис. 1. Схематическое строение митохондрии

В брачном контракте клетки и митохондрии нет пункта «в болезни и здравии», — и хорошо. Если митохондрия становится старой, клетка может ее убить в процессе митофагии, а митохондрии, в свою очередь, регулируют процесс апоптоза у недееспособных и старых клеток. Если процесс обоюдного контроля качества нарушается, запускаются механизмы старения. Нарушаются механизмы апоптоза, увеличивается количество свободных радикалов, не контролируемых митохондрией. Это вызывает системное воспаление, повреждение ДНК клетки. Таким образом, есть сильная взаимосвязь между МХ дисфункцией, возраст-зависимыми заболеваниями, старением организма и метаболическими дисфункциями [1]. Метаболическая дисфункция – неизменный всадник апокалипсиса старения.
Читать дальше →
Всего голосов 49: ↑48 и ↓1+47
Комментарии53

Обзор задач по алгоритмам для собеседований — генерация множеств

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

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


Этим постом начинается разбор задачек по алгоритмам, которые крупные IT-компании (Mail.Ru Group, Google и т.п.) так любят давать кандидатам на собеседованиях (если плохо пройти собеседование по алгоритмам, то шансы устроиться на работу в компанию мечты, увы, стремятся к нулю). В первую очередь этот пост полезен для тех, кто не имеет опыта олимпиадного программирования или тяжеловесных курсов по типу ШАДа или ЛКШ, в которых тематика алгоритмов разобрана достаточно серьезно, или же для тех, кто хочет освежить свои знания в какой-то определенной области.


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



Повествование будет разбито на разные темы, и начнем мы с генерирования множеств с определенной структурой.

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

Алгоритм Хаффмана на пальцах

Время на прочтение5 мин
Количество просмотров522K
Вы вероятно слышали о Дэвиде Хаффмане и его популярном алгоритме сжатия. Если нет, то поищите информацию в интернете — в этой статье я не буду вас грузить историей или математикой. Сегодня я хочу просто попытаться показать вам практический пример применения алгоритма к символьной строке.
Разархивировать текст статьи
Всего голосов 58: ↑54 и ↓4+50
Комментарии59
1

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность

Специализация

Бэкенд разработчик
Старший
Linux
C++