Pull to refresh
-3
0

Пользователь

Send message

Как мы анализируем потребление памяти нативными приложениями (C++, Windows, Linux)

Reading time13 min
Views8.7K

Технологическая платформа 1С:Предприятие – это большой программный продукт (только на С++ - более 10 миллионов строк кода, а есть ещё Java и JavaScript). Подробнее про устройство платформы можно прочитать тут.

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

О том, какие инструменты мы пробовали использовать, почему они нам не подошли и как мы в итоге решили задачу анализа использования памяти – под катом.

Читать далее

Compile Time Dependency Injection в С++: как обуздать зависимости не прибегая к позднему связыванию

Level of difficultyMedium
Reading time26 min
Views9.4K

Начав свою карьеру в качестве C# разработчика, я постоянно сталкивался с использованием техники внедрения зависимостей (Dependency Injection). За то время, что я работаю с C++, я не заметил здесь такого же широкого распространения этой идеи.

В то же время мне показалась весьма интересной такая возможность C++, как написание кода, который частично либо полностью может быть выполнен на этапе компиляции.

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

Читать далее

Основы проектирования архитектуры простой социальной сети

Level of difficultyEasy
Reading time15 min
Views13K

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

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

Читать далее

В борьбе со сложностью, или Как обуздать лог-линейный алгоритм (со ссылкой на код)

Level of difficultyHard
Reading time14 min
Views2.8K

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

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

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

Читать далее

Выделение регионов памяти в C++: советы и приёмы

Reading time12 min
Views9K

Эта статья обсуждалась на Hacker News.

В течение минувшего года я шлифовал мой подход к выделению регионов. Практика показывает, что это эффективный, простой и быстрый подход; обычно его используют в качестве средства для сборки мусора без издержек. В зависимости от того, что нам требуется, в аллокаторе может быть всего 7–25 строк кода — идеально для случаев, когда мы работаем без среды исполнения. Теперь, когда я окончательно сформулировал ключевые аспекты моего подхода, самое время их задокументировать и рассказать вам о том, что мне удалось выучить. Определённо, это не единственный возможный подход к выделению регионов. Я просто расскажу вам о приёмах, которые сам выработал для упрощения программ и искоренения ошибок.

Регион (арена) — это буфер памяти и смещение до этого буфера. Изначально это смещение равно нулю. Чтобы выделить объект, нужно взять указатель на него с заданным смещением, увеличить смещение на размер объекта, а затем вернуть указатель. Этим дело не ограничивается — например, нужно обеспечить выравнивание и доступность. До этого мы ещё дойдём. Объекты не высвобождаются каждый по отдельности. Напротив, сразу высвобождаются целые группы ранее выделенных объектов, и смещение откатывается к более раннему значению. Когда не предусмотрены собственные времена жизни для отдельных объектов, деструкторы писать также не требуется, а вашим программам не приходится прямо во время выполнения обходить структуры данных и убирать ненужные. Кроме того, больше можно не беспокоиться об утечках памяти.

Читать далее

Авто-регистрация тестов на С средствами языка

Reading time14 min
Views8.6K
Тестирование в CСравнительно недавно была статья «Полуавтоматическая регистрация юнит-тестов на чистом С», в которой автор продемонстрировал решение задачи с использованием счётчиков из Boost. Следуя этому же принципу, была предпринята (успешная) попытка повторить данный опыт уже без использования Boost из соображения нелогичности наличия в проекте на C зависимости от Boost, да ещё и в таком небольшом объёме. При этом в тестах присутствовали вспомогательные директивы препроцессора в большом количестве. И всё бы так и осталось, но практически на завершающей стадии был найден альтернативный способ регистрации, который позволяет полностью избавится от дополнительных действий. Это C89-решение для регистрации тестов и чуть более требовательное к системе сборке решение для регистрации наборов тестов.
Каким образом

Тесты на Си без SMS и регистрации

Reading time6 min
Views12K

скришот Cutter Недавно zerocost написал интересную статью «Тесты на C++ без макросов и динамической памяти», в которой рассматривается минималистический фреймворк для тестирования Си++ кода. Автору (почти) удалось избежать использования макросов для регистрации тестов, однако вместо них в коде появились «волшебные» шаблоны, которые лично мне кажутся, простите, невообразимо уродскими. После прочтения статьи у меня оставалось смутное чувство неудовлетворённости, так как я знал, что можно сделать лучше. Я сразу не смог вспомнить где, но я точно видел код тестов, который не содержит ни единого лишнего символа для их регистрации:


void test_object_addition()
{
    ensure_equals("2 + 2 = ?", 2 + 2, 4);
}

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

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

Breeks — построй свою неделю

Reading time5 min
Views8.4K

Breeks - десктопное приложение, в котором совмещены несколько практик планирования. У нас есть классическое расписание – для планирования дня и недели, заметки – для записи идей и составления списков и набор “кубиков” – для строительства своих привычек и организации свободного времени.

Читать далее

WebSocket. Краткий экскурс в пентест ping-pong протокола

Level of difficultyMedium
Reading time12 min
Views20K

"Краткость - сестра таланта" - именно так сказал Антон Павлович Чехов, и теперь говорю я. Сегодня, завтра и до конца дней habr-а речь пойдет о WebSocket-ах: "Что это?", "Как работает?" и главное - "Как это взламывать?" (в целях этичного хакинга конечно). Начнем с простого и будем идти к более сложному, пробираясь через тернии к звёздам.

Приятного чтения

Кто такой архитектор ПО и как им стать

Reading time11 min
Views37K

Всем привет! Меня зовут Виктор Василенко, я техлид и Solution-архитектор. Я работал в Яндексе и X5 Group и уже не первый год сотрудничаю с Практикумом. Я делюсь опытом на курсах «Алгоритмы и структуры данных» и «Асинхронное программирование на Python».

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

Пока что индустрия не может чётко определить эту деятельность как профессию. В общероссийском классификаторе профессий ОКПДТР архитектор встречается скорее ландшафтный, чем программного обеспечения. В вузах вы не сможете найти специальность «Архитектура программного обеспечения». 

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

В этой статье я хочу поделиться своим видением роли архитектора ПО и рассказать:

Кто такой архитектор ПО и какие они бывают;

Чем занимается архитектор решений в компаниях разного масштаба;

Чем отличаются инженеры от архитекторов ПО;

Какие обычно задачи стоят перед архитектором ПО;

Конкретно: какие нужны навыки и компетенции;

Как перейти из инженера на позицию архитектора.

Читать далее

Как вести за собой команду, ставить личные цели и помогать в этом сотрудникам

Level of difficultyEasy
Reading time8 min
Views7.5K

Привет, меня зовут Лера Коряковцева. Я — Customer Journey Owner, больше 10 лет занимаюсь product management, сейчас создаю и развиваю продукты для юридических лиц  в Альфа-Банке.

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

Личная стратегия — база любого менеджмента. Нужно уметь составлять планы и помочь своим сотрудникам сделать то же самое. Сегодня мы разберёмся, что такое личная стратегия, из чего она состоит и с какими инструментами вы точно найдёте свою цель. 

Читать далее

Как стать гуру или WiFi Cheat Sheet

Level of difficultyMedium
Reading time21 min
Views51K

А что мы знаем про пентест Wi-Fi?

Кажется, что уже всё, но вот на offzone 2023 была представлена атака WPA‑E (Надеюсь, в скором времени выложат запись и pdf) и я задумался, а так ли всё хорошо с моими знаниями... Нет, я всё с концами оставил на старых ЖД и где‑то далеко в памяти, пришлось восстанавливать по крупицам всю информацию. Заметки, время и старания — главное составляющее статьи.

Этот документ больше похож на чек‑лист для самопроверки и может содержать полезные советы и хитрости, за основу я взял структуру «WiFi Penetration Testing Cheat Sheet». Я очень благодарен автору, но он забросил вести данную шпаргалку и многие вещи устарели.

Все было протестировано на Kali Linux v2023.1 (64-битной версии), а также проработано на реальном опыте проведения тестирования на проникновение Wi‑Fi и в лабораторных условиях.

Пора ознакомиться

Выбор структур данных для самописного текстового редактора

Level of difficultyMedium
Reading time13 min
Views11K

Программирование текстовых редакторов может быть очень интересной и сложной задачей. Типы задач, которые должны решать текстовые редакторы, варьируются от тривиальных до невероятно трудных. Недавно я занимался переработкой внутренних структур данных редактора, над которым я работаю. В частности, самой фундаментальной для любого текстового редактора структуры данных: текста.

Ресурсы


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

  • Build Your Own Text Editor — наверно, самый фундаментальный пост о создании текстового редактора с нуля, который я видел. Это превосходный туториал на случай, если вы хотите начать писать собственный текстовый редактор. Стоит заметить, что в редакторе из этого туториала в качестве внутренней структуры для текста используется, по сути, вектор строк.
  • Text Editor: Data Structures — отличный обзор множества структур данных, которые можно использовать при реализации текстового редактора. (Спойлер: как минимум одна из них будет рассмотрена в моём посте)
  • Плейлист Ded (Text Editor) на YouTube — это потрясающая серия, в которой @tscoding фиксирует процесс создания с нуля текстового редактора. Эти видео стали для меня источником вдохновения.

Зачем?


Если в сети есть так много хороших ресурсов о создании собственного текстового редактора (не говоря уже о том, что уже существует множество феноменальных текстовых редакторов), то зачем я это пишу? На то есть несколько причин:

  1. Я хотел заняться проектом, непохожим ни на один свой прошлый.
  2. Я хотел создать инструмент, которым смогу пользоваться.
  3. Мне всегда хотелось глубже разобраться с созданием собственных структур данных.
Читать дальше →

Мониторинг: измеряем потери пакетов с помощью C++

Level of difficultyEasy
Reading time14 min
Views6.2K

В этой заметке я покажу, как с помощью Zabbix и C++ можно заниматься мониторингом потерь пакетов с очень высокой точностью. В этом примере пороговое значение - 0,01% потерь, но можно его ещё уменьшить при необходимости. Если интересно - добро пожаловать под кат.

Читать далее

Про unit-тесты кратко

Level of difficultyEasy
Reading time7 min
Views15K

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

Один из моих коллег-автоматизаторов упомянул, что к нему обращаются разработчики с вопросом: "А как написать unit-тест?". Не конкретный тест, а "в принципе". Это послужило для меня поводом подготовить эту статью, и адресована она молодым программистам. Они смогут ознакомиться с рекомендациями, которым стоит следовать при разработке unit-тестов. Но также может быть любопытна и QA-инженерам - ведь полезно получить представление об аспектах тестирования, выполняемого разработчиками.

Читать далее

CI/CD в Playrix: как мы собираем и тестируем наши игры

Reading time11 min
Views13K
Команда должна фокусироваться на создании прекрасных и успешных игр, для всего остального есть CI.

Где мы применяем CI? Какие подходы и концепции используем? Зачем собирать и тестировать билды? Развернутый рассказ о CI и о том, как он устроен в Playrix, потянет на курс лекций. Под катом — краткая выжимка и немного акцентов.

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

Глобальные объекты и места их обитания

Reading time8 min
Views17K
Глобальные объекты получили широкое распространение из-за удобства их использования. В них хранят настройки, игровые сущности и вообще любые данные, которые могут понадобиться где угодно в коде. Передача же в функцию всех нужных аргументов может раздуть список параметров до очень большого размера. Помимо удобства есть и недостатки: порядок инициализации и разрушения, дополнительные зависимости, сложность написания юнит-тестов. Многие программисты предвзято считают, что глобальные переменные используют только новички и это уровень студенческих лабораторных. Однако в больших проектах, как CryEngine, UDK, OGRE, глобальные объекты также применяются. Разница только в уровне владения этим инструментом.



Итак, что же за зверь этот глобальный объект, как его приручить и пользоваться удобствами, сведя недостатки к минимуму? Давайте разбираться вместе.
Читать дальше →

Дизайн API в С++

Level of difficultyHard
Reading time26 min
Views26K

В этом году на C++ Russia я рассказывал про API дизайн. Эта статья — пересказ и переосмысление моего доклада.

То, что я здесь расскажу, основано на моем личном опыте — про API дизайн я думаю уже лет 15, с того момента как в 2008м начал читать ревью библиотек на входе в boost (кстати, всем рекомендую).

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

Читать далее

Дружим Flutter с С# и С++

Level of difficultyMedium
Reading time8 min
Views12K

На Flutter`е очень удобно и хорошо пишутся интерфейсы для пользователей. Но использовать Dart для решения алгоритмических задач тяжко и неэффективно. Семейство Си справляется гораздо лучше и позволяет легко распараллеливать вычисления. Кроме того, за многолетнюю историю С++ и С# обзавелись множеством полезных библиотек, не все из которых имеют аналоги во Flutter.

Зная про существование библиотеки FFI для Flutter, что позволяет даже синхронно запускать Си-шный код, я решил закопаться в эту тему и попробовать объединить наследие Си и их эффективность с удобным фреймворком. Учитывая то, что в интернете маловато информации про использование FFI, особенно с C#, я решил поделиться своим опытом "построения мостов" на примере двух приложений в этой статье.

Читать далее

.xlsx изнутри. Разбор структуры файлов. Разбор каждого .xml файла

Reading time25 min
Views60K

Это статья о разборе excel изнутри. Вы узнаете как работать со стилями ячеек, листов через xml, как вносить данные и формулы в ячейки и мого другого.

Читать далее

Information

Rating
Does not participate
Registered
Activity

Specialization

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