Pull to refresh
22
0.2
Даниил Солопов @dan_sw

Software Engineer, Bachelor of Computer Science

Send message

RAII 2.0: RAII как архитектурный инструмент в C++

Level of difficultyMedium
Reading time7 min
Views5.1K

Идиома RAII — давно зарекомендовал себя как удобный способ автоматического управления ресурсами в C++. Обычно мы применяем его для управления памятью, файловыми дескрипторами или мьютексами. Однако что, если расширить понятие RAII до управления не только физическими ресурсами, но и логическими контрактами и состояниями системы?

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

Читать далее

Прокачиваем силу — Rust и Windows API

Reading time10 min
Views19K


Недавно я написал статью Трясём стариной — или как вспомнить Ассемблер, если ты его учил 20 лет назад. В статье рассказывается о том, как изучать ассемблер на примере игрушки 2048. Возможно для целей самой статьи игрушка была подходящая, но конечный результат меня немного удручил. Бинарник размером в 10 килобайт, который потребляет 2 мегабайта памяти, из-за неправильно слинкованной библиотеки резал глаза.

Посему я задался вопросом, а как это можно было бы сделать правильнее? Наверняка есть намного более удачное решение. (И организовал ещё один конкурс с призами в конце статьи)

А почему бы не сделать на Rust, и правильно прикрученных библиотеках? При этом, если вы знаете, что делаете, то вы можете запросто уменьшить количество потребляемой оперативной памяти, но при этом написать визуальную игрушку с использованием Windows API.

Причём это не значит, что вы будете использовать какую-то нестандартную библиотеку. Встречайте — windows-rs, проект поддерживаемый Microsoft. Ваш билет в мир Windows, если вы пишете на Rust.
Читать дальше →

Под капотом Pine Script: как устроен и для чего используется язык TradingView

Level of difficultyEasy
Reading time7 min
Views4.5K

Pine Script — это язык программирования, разработанный командой TradingView как Domain Specific Language, то есть специализированный язык для решения конкретной задачи — анализа и визуализации финансовых данных. Он создан для тех, кто хочет строить собственные индикаторы, тестировать торговые стратегии и делать всё это прямо в интерфейсе графика — без установки Python, без импорта исторических котировок и без настройки среды разработки.

Pine Script предельно прост по синтаксису, но в то же время достаточно мощный, чтобы покрыть 95% потребностей розничного трейдера. В нём предусмотрены ключевые блоки: работа с таймсериями, доступ к фундаментальным данным, рисование на графике и даже поддержка таблиц.

Все примеры на Гитхабе.

Что за Pine Script?

Я стала злодейкой и теперь мои контроллеры лежат в библиотеках. Архитектурный паттерн SUFA в .net приложении

Level of difficultyMedium
Reading time8 min
Views8.7K

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

Читать далее

Устройство CPython. Доклад Яндекса

Reading time21 min
Views37K
Мы публикуем конспект вступительной лекции видеокурса «Бэкенд-разработка на Python». В ней Егор Овчаренко egorovcharenko, тимлид в Яндекс.Такси, рассказал о внутреннем устройстве интерпретатора CPython.


— Если кратко, какой у нас будет план? Сначала мы поговорим о том, почему будем изучать именно Python. Затем посмотрим, как работает интерпретатор CPython более глубоко, как он управляет памятью, как устроена система типов в Python, на словари, генераторы и исключения. Я думаю, это займет примерно час.
Читать дальше →

Что такое конвейер данных? И почему вы должны это знать

Reading time4 min
Views9K

Конвейер данных (Data Pipeline) - это последовательность шагов для обработки данных. Если данные еще не присутствуют в платформе данных, они поступают в начале конвейера. Затем конвейер обрабатывает данные через ряд этапов, где выход каждого этапа становится входом следующего. Этот процесс продолжается до тех пор, пока конвейер не будет завершен. В некоторых случаях независимые этапы могут выполняться одновременно.

Читать далее

System Design для начинающих: всё, что вам нужно. Часть 5

Level of difficultyEasy
Reading time11 min
Views16K

Продолжаем наращивать базу знаний по System Design! В этот раз освятим использование Pub/Sub, Event-Driven Architecture, Distributed Systems, Leader Election. Посмотрим на их концепции и области применения при проектирование высокодоступных отказоустойчивых систем.

Читать далее

«Это база», — сказал тимлид и украл мою идею

Level of difficultyEasy
Reading time6 min
Views75K

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

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

Читать далее

Краткое описание спецификаций OAuth 2.0

Level of difficultyMedium
Reading time19 min
Views3K

Про OAuth 2.0 уже написано немало статей, в том числе на Хабре, но у этих статей есть особенность - в то время как после основного RFC 6749 вышло несколько дополнительных RFC, расширяющих, объясняющих и дополняющих основной RFC, обычно описывают только базовую спецификацию. Это не говорит, что статьи плохие - наоборот, они полезны. Но хотелось бы сделать обзор вообще всего, что можно отнести к OAuth 2.0, более того часть их них рекомендована к использованию. Поэтому в данной статье попробую кратко описать большинство спецификаций, которые относятся к OAuth 2.0.

Читать далее

Radiance Cascades — Новый взгляд на глобальное освещение

Level of difficultyMedium
Reading time3 min
Views1.9K

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

Многие алгоритмы, включая path tracing, radiosity и voxel cone tracing, пытаются справиться с этой задачей десятилетиями. Некоторые дают красивую картинку, но требуют больших вычислительных ресурсов. Другие - быстрые, но страдают от шума, артефактов и утечек света.

Что если можно приблизиться к качеству трассировки бесконечного количества лучей, потратив ограниченное количество ресурсов? Именно такую цель преследует метод Каскадов яркости (Radiance Cascades), впервые предложенный Александром Санниковым из Grinding Gear Games. (заготовку его статьи можно посмотреть вот в этом репозитории).

Читать далее

Таблица виртуальных методов и техника безопасности

Reading time10 min
Views43K
Техника безопасностиВ качестве небольшой разминки перед статьёй хотелось бы, чтобы читатель задал себе следующий вопрос: нужно ли фотографу для получения качественных снимков знать, как работает фотоаппарат? Ну, по крайней мере, должен ли он знать понятие «диафрагма»? «Отношение сигнал-шум»? «Глубина резкости»? Практика подсказывает, что даже со знанием таких сложных слов снимки могут получиться у наиболее «рукастых» не особо лучше снятых на мобильник через 0.3-МПикс-дупло. И наоборот, по-настоящему хорошие снимки могут получаться благодаря исключительно опыту и наитию при полном незнании матчасти (хотя это, скорее, исключения из правил, но всё же). Однако вряд ли со мной кто-то будет спорить, что профессионалам, которые хотят выжать из своей техники всё (а не только количество мегапикселей на квадратный миллиметр матрицы), эти знания нужны в обязательном порядке, поскольку в противном случае ему и называться профессионалом-то нельзя. И верно это не только для отрасли цифровой фотографии, но и для практически любой другой.

Верно это и для программирования, а для программирования на языке С++ – вдвойне. В этой статье будет описано важное понятие языка, известное как «Виртуальный табличный указатель», что присутствует почти во всех сложных классах, и то, каким образом его можно случайно повредить. Это может, в свою очередь, вести к едва поддающимся отладке ошибкам. Сначала напомню, что это вообще такое, а затем и поделюсь своими соображениями по поводу того, как и что может там сломаться.
Читать дальше →

Как мы пишем ML-приложения с использованием паттерна пайплайнов

Level of difficultyMedium
Reading time10 min
Views3.8K

Привет, Хабр! Я Тимофей Милованов, ведущий Golang-разработчик в команде VoiceKit, где мы занимаемся голосовыми технологиями. Мы разрабатываем сервисы по распознаванию и синтезу голоса, преобразованию одного голоса в другой, а еще голосовой биометрией.

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

Читать далее

Разделение смыслов через Sense Embeddings: как отличать омонимы

Level of difficultyEasy
Reading time10 min
Views1.3K

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

Иногда можно столкнуться с ситуацией, когда простые текстовые эмбеддинги не могут распознать контекст слова, и в итоге тот же “python” моделируется как змея, а не язык программирования (или наоборот).

Мы поговорим о том, что такое Sense Embeddings, почему контекстно-зависимые модели всё ещё могут путаться, и как решить задачу омонимии.

Читать далее

Виноград, Фурье и немного наивности: 4 подхода к реализации сверток с простыми примерами

Level of difficultyMedium
Reading time9 min
Views8.8K

Привет, Хабр! Меня зовут Кирилл Колодяжный, я работаю в YADRO и продолжаю изучать машинное обучение на С++. Я уже писал, как реализовать модели для распознавания лиц на фото и для поиска объекта в пространстве с помощью computer vision. Ссылки на материалы ищите в конце статьи.

Сегодня затрону «математическую» тему и расскажу о реализации сверток: что это за операция и какие есть алгоритмы для вычисления. Приведу простые примеры с кодом, чтобы вы могли опробовать решения.

У статьи будет вторая часть: про особенности реализации одного из этих алгоритмов с использованием CUDA в рамках фреймворка PyTorch и про то, как адаптировать его под свои задачи.

Читать далее

slots в Python

Level of difficultyEasy
Reading time4 min
Views6K

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

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

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

Читать далее

Топ-7 платформ для проведения IT-соревнований

Reading time10 min
Views1.9K


Говорят, что спортивное программирование — совсем другая область, которая сильно отличается от рабочих задач. Пусть так. Но опыт показывает, что умный и талантливый человек проявит себя в обеих сферах. Если он стал чемпионом по спортивному программированию, в ML-соревновании или CTF — то и спрос на такой талант больше обычного. А сколько отличных проектов создано на хакатонах! Вспомнить хотя бы приложение MSQRD, которое написали на хакатоне за 48 часов, а потом продали Фейсбуку за десятки миллионов долларов.

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

  1. Где самое активное ML-комьюнити в России.
  2. Какая платформа предлагает самый большой функционал для проведения соревнований.
  3. Чем отличаются различные платформы для соревнований по спортивному программированию.
  4. Как провести любое IT-мероприятие на одной платформе.
  5. Что делать, если нужно локальное решение для IT-соревнования.

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

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

Reading time11 min
Views131K

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

Читать далее

Пишем свой pastebin, используя только userver

Reading time18 min
Views4.5K

Всем привет! Меня зовут Василий Куликов, я работаю ведущим разработчиком в Техплатформе Екома и Райдтеха Яндекса и последние пять лет разрабатываю фреймворк userver.

Это веб‑фреймворк, который позволяет создавать высоконагруженные отказоустойчивые сервисы на С++. Сегодня я расскажу, как написать на нём игрушечный, но рабочий сервис, который реализует функциональность pastebin.

Читать далее

План самостоятельного обучения DDD, CQRS, EventSourcing

Reading time7 min
Views54K

Если вы собрались плотно погрузиться в тему Doman Driven Design (DDD), о том как его применять, как использовать, для чего он нужен, и как с ним связаны Command and Query Responsibility Segregation (CQRS), Event Sourcing и другие термины из мира DDD то можно воспользоваться планом обучения, который последовательно погрузит вас в эти темы и поможет сориентироваться. Часть информации на русском, часть на английском языке, так как русскоязычных аналогов я не смог найти.

Погрузиться в DDD

Какую литературу читать, чтобы научиться проектировать ракеты?

Reading time3 min
Views28K

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

Читать далее

Information

Rating
3,957-th
Location
Иркутск, Иркутская обл., Россия
Date of birth
Registered
Activity

Specialization

Software Engineer, ML Engineer
Middle
C++
Python
TENSORFLOW
Pytorch
Cmake
Linux
Deep Learning
Cuda
Computer Science
Keras