Рубрика «Программирование» - 10

В начале ноября в Минске прошла очередная посвященная языку C++ конференция C++ CoreHard Autumn 2018. На ней был сделан капитанский доклад «Actors vs CSP vs Tasks...», где речь шла о том, как может выглядеть в C++ применение более высокоуровневых, чем «голая многопоточность», моделей конкурентного программирования. Под катом преобразованная в статью версия этого доклада. Причесанная, местами подправленная, местами дополненная.

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

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

Примечание: в оригинальной презентации к докладу были обнаружены ошибки и опечатки, поэтому в статье будут использованы слайды из обновленной и отредактированной версии, которую можно найти в Google Slides или на SlideShare.

«Голая многопоточноть» — это зло!

Начать нужно с многократно повторенной банальности, которая, тем не менее, все еще остается актуальной:

Многопоточное программирование на C++ посредством голых нитей, mutex-ов и condition variables – это пот, боль и кровь.

Читать полностью »

Каршеринг, несмотря на свою молодость, — одно из самых активно развивающихся направлений в автобизнесе России. С момента запуска первой компании прошло 5 лет, и сегодня на рынке работают более 25 операторов, специализирующихся на краткосрочной аренде. С развитием каршеринга накапливаются данные о пользователях, и вот уже у каршеринга, как у банков, появляется некая система скоринга клиентов. Она также опирается на возраст, пол, стаж вождения, однако здесь рассматривается не история ваших кредитов, а история поездок. Одной из целей такого скоринга, помимо платежеспособности, валидации водительского удостоверения, штрафов, является предсказание вероятности ДТП для конкретного водителя.

Как устроен скоринг в индустрии каршеринга. Часть 1. Обзор популярных инструментов на реальных данных - 1

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

Отметим, что в статье мы продемонстрируем логику работы скоринга на примере водительской активности 50 000 пользователей и 260 000 поездок. Все данные были анонимизированны. Кроме того, мы использовали данные по 220 ДТП, совершенных с Москве и МО.
Читать полностью »

Технологии и магия

Краткое описание технологий, используемых в инструменте PVS-Studio, которые позволяют эффективно обнаруживать большое количество паттернов ошибок и потенциальных уязвимостей. Статья описывает реализацию анализатора для С и C++ кода, однако приведённая информация справедлива и для модулей, отвечающих за анализ C# и Java кода.
Читать полностью »

Blazor 0.7.0 теперь доступен! В этом обновлении основное внимание уделяется ADRs (ancestor-descendent relationships). Кроме того, мы добавили некоторые улучшения в процесс отладки. Подробнее под катом!

Немного про Blazor: фреймворк для браузерных приложений, написанный на .NET и запускающийся с помощью WebAssembly. Он даёт вам все преимущества современных одностраничных приложений (SPA), позволяя при этом использовать .NET от начала и до конца, вплоть до общего кода на сервере и клиенте. [1]

Что нового в Blazor 0.7.0 - 1Читать полностью »

Строим систему реактивных компонентов с помощью Kotlin - 1

Всем привет! Меня зовут Анатолий Варивончик, я Android-разработчик Badoo. Сегодня я поделюсь с вами переводом второй части статьи моего коллеги Zsolt Kocsi о реализации MVI, которую мы ежедневно используем в процессе разработки. Первая часть здесь.

Чего мы хотим и как мы это сделаем

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

Каждая Feature отслеживаема — есть возможность подписаться на изменения её состояния и получать уведомления об этом. При этом Feature можно подписать на источник ввода. И в этом есть смысл, ведь с включением Rx в кодовую базу у нас и так появилось множество наблюдаемых объектов и подписок на самых разных уровнях.

Именно в связи с увеличением количества реактивных компонентов пришло время поразмышлять о том, что мы имеем и можно ли сделать систему ещё лучше.
Читать полностью »

Всем доброго дня!

Стартовали новенький поток «Разработчик на Spring Framework», «внезапно», этот курс оказался очень востребованным среди, как и новых студентов, так и тех кто уже отучился у нас на «обычной» джаве и энтерпрайзе. Так что, если интересно, то заходите к нам на открытые уроки, ну и, разумеется, делимся интересными материалами по теме.

Поехали!

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

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

Знакомство с Spring Data MongoDB - 1

1. ВступлениеЧитать полностью »

Как написать код, который будет понятен всем? - 1

От переводчика: Опубликовали для вас статью Камила Лелонека о значении читабельности кода и «эмпатии программистов».

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

«Любой дурак может написать код, который будет понятен машине. Но вот код, который понятен еще и людям, пишут лишь хорошие программисты», — Мартин Фаулер.

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

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

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

Читать полностью »

Доброго времени суток, друзья и коллеги. Меня всё ещё зовут Дмитрий Смирнов, и я всё ещё, к моему вящему удовольствию, являюсь разработчиком ISPsystem. Некоторое время назад я начал работу над совершенно новым проектом, который меня очень вдохновил, поскольку новое — это в нашем случае отсутствие легаси кода и поддержки старых компиляторов. Здравствуй, Boost, C++17 и все прочие радости современной разработки.

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

Одной из последних сопутствующих задач стала необходимость написать обёртку над библиотекой libssh2 в реалиях асинхронного приложения, использующего Boost.Asio, и способного породить не более двух потоков. Об этом и расскажу.

Асинхронный обмен данными с удалённым приложением через SSH - 1

Примечание: автор предполагает, что читатель знаком с основами асинхронной разработки и boost::asio.
Читать полностью »

Azure DevOps для Commodore 64? - 1

Я – большой фанат сервиса Azure DevOps с самых ранних его дней, когда он ещё назывался Visual Studio Online. Я использую его в профессиональных и личных целях,
и рекомендую его своим клиентам по консалтингу.

Однако сколько бы я ни расхваливал эту платформу, часто бывает тяжело убедить разработчиков на Node или Java в том, что Azure DevOps прекрасно справится и с их проектами, не хуже, чем для .NET. Вне зависимости от количества демонстраций и презентаций, опровергающих предубеждения, в любой группе находятся люди, свято верящие в то, что ADO для них не подойдёт, потому что это «инструмент от Microsoft».

Отставив в сторону философские дебаты, я могу объяснить большую часть сопротивления отсутствием понимания того, как Azure DevOps развилась из своего предшественника Team Foundation Services (TFS), и стала лучшим в своём классе набором инструментов, способных поддерживать проекты любого размера «на любом языке и любой платформе». Вопрос в том, как я могу неоспоримо доказать это раз и навсегда?
Читать полностью »