Как стать автором
Обновить
78.56
Контур
Делаем сервисы для бизнеса
Сначала показывать

Комната с опускающимся потолком

Уровень сложности Простой
Время на прочтение 11 мин
Количество просмотров 3.5K
Кейс

Приветствую. Меня зовут Устюжанин Игорь. Мне довелось поработать в разных ролях при разработке ИТ-продуктов - от инженера-программиста до руководителя продукта. Этот опыт я получил в компании СКБ Контур, куда пришел разработчиком аж в 1999 году, будучи студентом 4-го курса.

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

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

Читать далее
Всего голосов 14: ↑13 и ↓1 +12
Комментарии 2

ThreadPool.Workers

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

На этот раз длинная история. Но длинная она в основном из-за множества примеров, которые вы можете легко повторить у себя.

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

Читать далее
Всего голосов 13: ↑12 и ↓1 +11
Комментарии 4

Сказка про For vs Foreach

Уровень сложности Простой
Время на прочтение 10 мин
Количество просмотров 21K


Ходят слухи, что foreach быстрее for. А ещё ходят слухи, что for быстрее foreach. Пора разобраться, что быстрее!

Читать далее
Всего голосов 50: ↑48 и ↓2 +46
Комментарии 21

ThreadPool.Chain

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 4.5K


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

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

Читать далее
Всего голосов 13: ↑11 и ↓2 +9
Комментарии 8

Сказка про Branch prediction

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

Конвейер трудится изо всех сил, чтобы повысить производительность твоей программы. А злобные «if»'ы нагло врываются посреди его работы и всё портят!

На сколько полезен конвейер в современных ЭВМ? Как сильно мешаются ветвления в коде, которые ты написал? И как архитекторы процессоров сглаживают ущерб, который «if»'ы наносят по производительности программ?

Читать далее
Всего голосов 42: ↑42 и ↓0 +42
Комментарии 23

Как внедрить SLO в продукт и получить от этого пользу

Время на прочтение 14 мин
Количество просмотров 2.6K
Кейс

SLO — это практика, входящая в состав SRE-методологии, которая помогает найти баланс между скоростью развития сервиса и его надёжностью.

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

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

Reciprocal throughput

Уровень сложности Простой
Время на прочтение 10 мин
Количество просмотров 8.7K

Современные процессоры очень круты. Они таят в себе великое множество секретов и невероятных возможностей. И просто восхитительно, что некоторые из способностей процессоров легко продемонстрировать даже из такого высокоуровневого языка, как C#, буквально за десять строчек кода!

Читать далее
Всего голосов 76: ↑75 и ↓1 +74
Комментарии 39

ThreadPool. async/await

Уровень сложности Простой
Время на прочтение 13 мин
Количество просмотров 6.3K

А вы никогда не задумывались, что async и await выглядят как-то инородно среди прочего C# кода? Больше нигде не встречается такого странного синтаксиса и таких модификаторов, кроме как в методах, работающих с Task и Task<T>.

А ещё интересно, сколько вообще стоит пользоваться async/await? И когда можно (нужно?) обходиться без них?

Читать далее
Всего голосов 10: ↑9 и ↓1 +8
Комментарии 15

yield return

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

А вы никогда не задумывались, что yield return выглядит как-то инородно среди прочего C# кода? Больше нигде не встречается такого странного синтаксиса и такой инструкции, кроме как внутри методов, возвращающих перечисление.

А ещё интересно, сколько же на самом деле стоит перечислять элементы с помощью yield return? И можно ли лучше?

Читать далее
Всего голосов 27: ↑27 и ↓0 +27
Комментарии 9

Пародия на замыкания

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


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

Читать далее
Всего голосов 24: ↑22 и ↓2 +20
Комментарии 24

Несите трубы! Как мы строили пайплайн ML-эксперимента

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

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

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

ThreadPool.Intro

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

Тема тредпула, скажем так, complex and hard. У меня в жизни было два «осознания», когда я гордо говорил себе — вот теперь-то я точно понял, как устроен и как работает тредпул в дотнете! Впрочем, после второго раза я неоднократно осознавал, как же я ошибался.

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

Пришло время пересмотреть структуру проектов на .NET

Уровень сложности Простой
Время на прочтение 11 мин
Количество просмотров 13K
Мнение
Перевод

C релизом .net 6 у нас появился новый упрощенный подход для быстрого создания сервисов  Minimal APIs. Эта статья появилась потому, что с новым подходом появились новые вопросы, связанные с организацией кода внутри проекта.

Это — немного вольный перевод статьи "Maybe it's time to rethink our project structure with .NET 6" от Tim Deschryver про подход к созданию сервисов с помощью Minimal APIs, который может помочь нам сделать архитектуру приложения более чистой, простой и легкой в поддержке и развитии.

Читать далее
Всего голосов 16: ↑13 и ↓3 +10
Комментарии 24

Как Контур меняет стандарты обучения разработчиков и работает с ними

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

В Екатеринбурге есть Уральский Федеральный Университет (УрФУ), а в нем направление фундаментальной информатики и информационных технологий (ФИИТ), на котором готовят разработчиков. С 2019 года Контур совместно с IT-сообществом региона меняет, развивает и поддерживает это направление.

Здесь сократили количество обязательных математических дисциплин, позвали разработчиков читать лекции и дали студентам самим выбирать предметы для изучения.

В статье расскажем про процесс работы над программой и объясним, зачем она нужна Контуру, региону, IT-сообществу и абитуриентам.

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

Инструменты анализа эффективности работы приложения. PerfView

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

Иногда приходится разбираться, почему .NET приложение работает "плохо". Не так, как мы ожидали. Тупит, медленно работает, зависает, запросы «не исполняются», утекает память или потребляется слишком много CPU.

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

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

Сказка про Method as Parameter

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

Наверняка вы вызывали методы в C#. И казалось бы, что тут может быть интересного. Но тут есть о чем поговорить, есть что интересного рассказать.

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

Читать далее
Всего голосов 41: ↑41 и ↓0 +41
Комментарии 7

MVI и State Machine — объединяем концепции. Визуализация и анализ диаграммы состояний в Android и KMM проектах

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


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


В итоге мы получаем конечный автомат.


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


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


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

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

Повторение — мать выгорания: как «Контур» борется с рутиной

Время на прочтение 6 мин
Количество просмотров 21K
Спецпроект

Казалось бы, IT-индустрия бесконечно далека от сборочных цехов Генри Форда. Однако даже труженики нуля и единицы порой чувствуют себя пойманными в порочный круг. День за днём одни и те же таски, каждый обеденный перерыв — одни и те же статьи на Хабре…

Давно пора положить этому конец. Сегодня, дорогие хабровчане, мы приветствуем вас в самой нерутинной статье про рутину. Четверо сотрудников компании «Контур» в четырёх разных форматах поделятся своими историями про борьбу с рутиной. Пристегните ремни и добро пожаловать под кат.

Читать далее
Всего голосов 40: ↑36 и ↓4 +32
Комментарии 10

.NET 6: PriorityQueue

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

В .NET 6 появилась новая коллекция — PriorityQueue<TElement,TPriority>. До этого очереди с приоритетами уже были в .NET, но только в виде внутренних классов — они использовались под капотом разных механизмов в WPF, Rx.NET и в других частях фреймворка. 

Но в .NET 6 PriorityQueue стала новой коллекцией, которой теперь можно пользоваться из клиентского кода. Давайте посмотрим, что предлагает эта очередь, как она устроена внутри и насколько быстро работает. Под катом будет постепенное погружение: от примеров использования в коде к введению n-арные деревья.

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

Сказка про Guid.NewGuid()

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

C#. Guid.NewGuid(). Linux. Windows. Randomness or Uniqueness. RNG and PRNG. Performance. Benchmarking.

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

Читать далее
Всего голосов 71: ↑69 и ↓2 +67
Комментарии 34

Информация

Сайт
tech.kontur.ru
Дата регистрации
Дата основания
Численность
5 001–10 000 человек
Местоположение
Россия