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

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

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


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


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


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


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


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

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

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

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

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

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

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

.NET 6: PriorityQueue

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

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

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

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

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

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

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

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

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

Векторные пространства и поиск ближайших соседей на production

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

Иногда при решении задач классификации необходимо применять алгоритм kNN в векторных пространствах. И если при обучении всё просто и знакомо, то при выводе в production люди сталкиваются с проблемами.

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

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

Делаем базу знаний для .NET разработчиков

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

Мы вместе с DotNetRu решили сделать базу знаний для .NET разработчиков. Собрать доступные в открытом доступе материалы по .NET и выбрать из них лучшие. Разбить все это по категориям и сложности, выстроить порядок изучения. А еще пригласить известных экспертов в каждой из тем, чтобы они помогли выбрать материалы и рассказали, что и почему вам будет полезно изучить.

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

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

Как и зачем делать доклады?

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

Всем привет, меня зовут Рома Неволин и я много занимаюсь докладами. Готовлю доклады, выступаю с докладами, делаю доклады, ищу докладчиков, ищу темы для докладов, а еще постоянно отвечаю на вопросы про доклады. А их всегда много.

Откуда брать тему и будет ли мой доклад интересен хоть кому-нибудь — загадка. Как собрать кучу хаотичных знаний во что-то стройное тоже непонятно. А ведь с этим нужно еще и куда-то подаваться, да и вообще, на кой оно мне нужно?

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

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

Как мы поучаствовали в ICFPC 2021 и что из этого вышло

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

Одна старая академическая конференция, International Conference on Functional Programming, уже больше двадцати лет организует соревнование по программированию своего имени. 1 задание, 72 часа, участвуют команды произвольного размера. На этом ограничения все. Задача может быть любой, решения — тем более.

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

Под катом обзор контеста 2021 года и нашего участия в нем. А еще алгоритмы, теории, байки и разбор решений других команд.

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

Над чем задуматься перед тем, как брать ML-задачу в работу

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

В Контуре мы решаем самые разные задачи с помощью машинного обучения: распознаем документы и ищем подделки паспортов, анализируем банковские транзакции, предсказываем вероятность банкротства компаний, классифицируем товары, автоматически отвечаем на вопросы в чате, развиваем собственный speech-to-text… и еще десятки проектов, которые привносят в продукты новые фичи или помогают оптимизировать процессы.

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

В этой статье я приведу ответы на вопросы, над которыми стоит задуматься в самом начале, если вдруг вам пришла в голову идея "прикрутить к проекту ML-фичу" (добавить ложечку Data Science / AI / другие модные названия).

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

Транспортный агент MS Exchange для защиты от вирусов и нежелательной почты

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

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

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

Что происходит в Контуре в этот момент

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

Гуляем с фотографом по новому офису Контура и заодно рассказываем о всяком, что в этом офисе происходит.

Читать далее
Всего голосов 29: ↑21 и ↓8+13
Комментарии22

Как работать с иерархической структурой классов

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

Задача классификации - одна из самых известных в машинном обучении. Очень многие проблемы, решаемые с помощью ML, так или иначе сводятся к классификации — распознавание изображений, например. И все выглядит просто и понятно, когда нам нужно определить объект в один из нескольких классов. А что если у нас не плоская структура из нескольких классов, а сложная разветвленная иерархия на 683 категории? Именно о таком случае мы сегодня и поговорим. Под катом - рассказ о том, зачем в задачах классификации нужны сложные иерархии и как с ними жить.

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

Как мы перестали проверять всё подряд одной задачей и ускорили проверку тестовых на стажировку

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

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

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

От WPF к Авалонии

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

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

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

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

Как Контур балансирует нагрузку в микросервисах

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

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

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

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

Вышел .NET 5. И что?

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

Несколько недель назад вышел .NET 5. На сайте Microsoft можно найти подробный анонс со всеми изменениями, но главный вопрос для меня, как для разработчика — и что с того? Что мне с выхода пятого дотнета, как я могу его использовать, есть ли смысл переходить на новую версию прямо сейчас? На эти вопросы я постараюсь ответить дальше.


image

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

[Анонс] Advent of Code 2020: решаем вместе с разработчиками Контура

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

Декабрь — время предвкушения Рождества. На западе эти 24 дня даже имеют специальное название — адвент. Обычные люди в этот период покупают адвент-календари и скрашивают ожидание праздников конфетами. А разработчики придумали кое-что поинтереснее — Advent of Code!

Ну-ка, что там
Всего голосов 18: ↑17 и ↓1+16
Комментарии1

Авалония для самых маленьких

Время на прочтение8 мин
Количество просмотров27K
В свежем превью Rider, помимо прочего, появилась поддержка Авалонии. Авалония — это самый крупный .NET фреймворк для разработки кроссплатформенного UI, и его поддержка в IDE — отличный повод наконец разобраться, как писать десктопные приложения для любых платформ.

В этой статье я на примере простой задачи по реализации калькулятора покажу:

  • как управлять разметкой,
  • как связывать функциональность с компонентами,
  • как управлять стилями.


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

Анонс онлайн-митапа по .NET: три доклада о кроссплатформенных десктопных приложениях

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

Вы уже не ждали, а мы сделали. В этот четверг, спустя почти год после предыдущего митапа, мы проводим первую (надеюсь, среди многих ?) онлайн-встречу с тремя бомбическими докладами про кроссплатформенные десктопные приложения. Миша Романов рассмотрит всевозможные фреймворки для кроссплатформенных приложений и расскажет, как и зачем. Никита Цуканов потравит байки про разработку Avalonia — интероп с COM и автогенерированный CQRS прилагаются. А Саша Якунин расскажет о разработке библиотеки для отслеживания изменений в данных, которая позволяет делать real-time UI (как и другие штуки) действительно быстрыми.

Когда: 26 ноября в 17:00 (Мск)
Где: Ютуб-канал Контура

Давай подробности!
Всего голосов 7: ↑7 и ↓0+7
Комментарии4

ICFP Contest 2020 от идеи до воплощения. Как организовать контест и выжить

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


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

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

Информация

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