Pull to refresh
9
0
Send message

[Санкт-Петербург, анонс] SpbDotNet #30 — доклады о телеметрии .NET-микросервисов и анализаторах кода ReSharper и Roslyn

Reading time2 min
Views2.4K


В пятницу 20 апреля в 19:00 в Питере пройдет тридцатый митап SpbDotNet.


В программе доклады от Контура — крупнейшего продуктового .NET-разработчика в России. Вы послушаете доклады о правильном сборе телеметрии от .NET-микросервисов, а также о применении анализаторов кода в прикладной разработке. Также узнаете, кому достанутся 4 билета на конференцию DotNext, 2 лицензии от JetBrains и другие подарки от друзей SpbDotNet. Митап пройдёт на площадке компании Selectel.

Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments3

[Екатеринбург, анонс] UralJS #7 — три доклада о React Native, удобной навигации в SPA и принципах работы с DateTime

Reading time2 min
Views1.8K

image


В четверг 19 апреля в 19:00 в лофте «Титры» пройдет седьмой митап UralJS. Обсудим, как React Native открыл JavaScript-программистам мир мобильной разработки, а потом отвлечемся от конкретных технологий и порассуждаем, что такое хорошая навигация, и как разработчики на самом деле должны работать с датами и временем.


Вот подробное описание докладов:

Читать дальше →
Total votes 8: ↑8 and ↓0+8
Comments0

О стримах и таблицах в Kafka и Stream Processing, часть 1

Reading time16 min
Views59K
* Michael G. Noll — активный контрибьютор в Open Source проекты, в том числе в Apache Kafka и Apache Storm.

Статья будет полезна в первую очередь тем, кто только знакомится с Apache Kafka и/или потоковой обработкой [Stream Processing].


В этой статье, возможно, в первой из мини-серии, я хочу объяснить концепции Стримов [Streams] и Таблиц [Tables] в потоковой обработке и, в частности, в Apache Kafka. Надеюсь, у вас появится лучшее теоретическое представление и идеи, которые помогут вам решать ваши текущие и будущие задачи лучше и/или быстрее.

Содержание:

* Мотивация
* Стримы и Таблицы простым языком
* Иллюстрированные примеры
* Стримы и Таблицы в Kafka простым языком
* Пристальный взгляд на Kafka Streams, KSQL и аналоги в Scala
* Таблицы стоят на плечах гигантов (на стримах)
* Turning the Database Inside-Out
* Заключение
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments4

Хакатон и гейм-джем в Екатеринбурге

Reading time2 min
Views5.2K
So popular! Much people! Wow! Регистрация закрыта 29 марта.

Мечтаешь сделать игру с собственными правилами и бомбическим сюжетом? Надоело ждать Half-Life 3 и смотреть, как battle royale разрывают гейм-индустрию? Тогда регистрируйся на хакатон Контура и сделай что-то по-настоящему взрывное! Поторопись, 29 марта ровно в полночь (по Мск.) мы закроем превратим в тыкву регистрацию. 7 и 8 апреля тебя ждет 27 часов непрерывной работы над собственным проектом, знакомство с самыми крутыми разработчиками города и командное месилово за призы.




Мы не будем ограничивать ни жанром, ни технологиями. Хочешь Super Mario на Марсе? Вперед! Любишь коллекционные карточные игры? Действуй! Каким бы шерстяным волчарой ты ни был, запилить крутой проект за сутки будет сложно. Даже если ты отличаешь друг от друга Defold, Corona, Unity и Unreal Engine. Поэтому тебе помогут другие разработчики, гейм-аналитики, дизайнеры — хакатон будет командным. Если у тебя есть проверенная команда — бери всех с собой. Не каждый может затусить в нашем офисе разработки на Широкой речке. А ты сможешь!



На нашем предыдущем хакатоне было клёво.

Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments33

Разбор перформансных задач с JBreak (часть 3)

Reading time36 min
Views3.9K
Публикую предпоследнюю часть разбора с третьей задачей. До этого выходил разбор первой задачи и второй задачи.

Код к третьей задаче:

    public static double compute(
            double x1, double y1, double z1,
            double x2, double y2, double z2) {
        double x = y1 * z2 - z1 * y2;
        double y = z1 * x2 - x1 * z2;
        double z = x1 * y2 - y1 * x2;
        return x * x + y * y + z * z;
    }

    public static double compute(
            double x1, double y1, double z1,
            double x2, double y2, double z2) {
        Vector v1 = new Vector(x1, y1, z1);
        Vector v2 = new Vector(x2, y2, z2);
        return v1.crossProduct(v2).squared();
    }

    public final static class Vector {
        private final double x, y, z;

        public Vector(double x, double y, double z) {
            this.x = x; this.y = y; this.z = z;
        }

        public double squared() {
            return x * x + y * y + z * z;
        }

        public Vector crossProduct(Vector v) {
            return new Vector(
                    y * v.z - z * v.y,
                    z * v.x - x * v.z,
                    x * v.y - y * v.x);
        }
    }

Условие (упрощённо):
Определить, какие методы быстрые, а какие — медленные (JRE 1.8.0_161).
Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments8

Разбор перформансных задач с JBreak (часть 2)

Reading time65 min
Views10K
Только поутихли страсти с первой части разбора, вышедшей на прошлой неделе, как публикую продолжение: сегодня речь пойдёт о второй задаче.

Код второй задачи:
    String format(String user, String grade, String company, String message) {
        return String.format(
                "Он, %s, придумал такие %s задачи. Приду на стенд %s и скажу ему %s",
                user, grade, company, message);
    }

    String format(String user, String grade, String company, String message) {
        return "Он, " + user
                + ", придумал такие " + grade
                + " задачи. Приду на стенд " + company
                + " и скажу ему " + message;
    }

    String format(String user, String grade, String company, String message) {
        return new StringBuilder("Он, ")
                .append(user)
                .append(", придумал такие ")
                .append(grade)
                .append(" задачи. Приду на стенд ")
                .append(company)
                .append(" и скажу ему ")
                .append(message)
                .toString();
    }

Условие (упрощённо):
Определить, какие методы быстрые, а какие — медленные (JRE 1.8.0_161).

Другие публикации серии: Часть 1, Часть 3, Часть 4.
Читать дальше →
Total votes 30: ↑28 and ↓2+26
Comments11

Как мы переняли опыт Khan Academy и сделали свой курс для тестировщиков

Reading time4 min
Views6.4K

Контур ежегодно запускает бесплатные курсы по программированию для студентов в Екатеринбурге, Питере, Новосибирске, Ростове-на-Дону, Ижевске, Перми и Казани. С 2013 мы выросли до 7 городов и 13 университетов, разработали свою онлайн-платформу ulearn.me, где с февраля 2018 есть курсы не только для разработчиков на C#, но и курс для тестировщиков.


Именно о нем мы поговорили с Катей Чаплинской, менеджером разработки и организатором курса. Катя рассказала какие фишки ждут курсантов в этом году, как проходила подготовка и какие перспективы у курса.


Катя, буквально в двух словах расскажи что это за курс?


— Это уже пятый курс для новичков, который знакомит курсантов с основами тестирования. Традиционно в конце февраля мы набираем группу примерно из 30 студентов и молодых специалистов. Такая небольшая группа дает возможность уделить внимание каждому курсанту, да и преподаватели не утомляются, проверяя домашку. По опыту прошлых лет предполагаем, что 10-15% студентов не дойдут до конца курса, так что группа еще сократится. Занятия начались 22 февраля, все они будут проходить на Малопрудной два раза в неделю, по вторникам и четвергам. Курс закончится еще до майских праздников, потому что в середине мая курсантам становится не до занятий =)



Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments3

Ускорение сборки JavaScript-кода с использованием webpack 2–3

Reading time8 min
Views14K
Появляется все больше SPA салонов. Даже лендинги люди пилят на React. А действительно сложное веб-приложение уже трудно представить с другим подходом. Одна из главных проблем современного фронтенда — это сборка таких проектов. С этим помогают справляться бандлеры.

Иван Соснин, фронтенд-разработчик Контура, рассказывает как настроить webpack 2 и 3, чтобы получить ощутимый прирост в скорости сборки статики. Статья будет полезна тем, кто уже работает с webpack или смотрит в его сторону.

Стоит начать с ремарки, что недавно вышел webpack 4. Там вообще все супербыстро и ничего делать не надо, а еще изменилось процесс разбиения кода на чанки.


Но тащить в продакшен библиотеки, которые обновились вчера — не мой путь.


Webpack


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


Если хочется больше базовых подробностей, можно почитать статью Рахима Давлеткалиева про webpack 1. Она немного устаревшая, но идеи и примеры в ней разобраны подробно.


За всю эту гибкость приходится платить сложной конфигурацией.

Читать дальше →
Total votes 21: ↑19 and ↓2+17
Comments5

Kontur Mobile Test Session: 446 багов за 5 часов

Reading time5 min
Views3.7K

В декабре Контур принимал ежегодную городскую тест-сессию Екатеринбурга. На этот раз 38 тестировщиков 5 часов искали баги в новом мобильном приложении. Игорь Борисихин, специалист по тестированию и организатор мероприятия, поделился опытом, рассказал что нового для тест-сессии придумал Контур и как попасть на мероприятие в этом году.




Что такое тест-сессия


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

Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments0

[Екатеринбург, анонс] Botters of the Galaxy CodingHub в офисе Контура

Reading time3 min
Views2.1K

Пора отвлечься от рабочих задач и попрограммировать что-нибудь необычное.
3 марта, в субботу, с 12:00 до 16:00 будем вместе писать ботов для игры.


Что случилось?


В ночь на 3 марта на платформе CodinGame.com стартует 10-дневное соревнование по созданию ботов для мультиплеерной игры. Какой именно игры — пока секрет, узнаем после начала соревнования. Пока известно только название — Botters of the galaxy — и тематика оформления:



Похоже, Звёздный Лорд пользуется Linux.

Что ещё за CodinGame?!
Total votes 10: ↑9 and ↓1+8
Comments1

«Календарь тестировщика» за февраль. Узнай своего клиента

Reading time5 min
Views3.4K
Мы продолжаем цикл статей «Календарь тестировщика», где каждый месяц тестировщики Контура делятся опытом и рабочими секретами. В предыдущей статье Максим Захаров рассказал как разобрать бэклог.

В этот раз Илария Тарасова и Максим Колодкин из Контур.Эльбы, расскажут, почему тестировщику нужно общаться с клиентом и какие инструменты для этого есть в Контуре. Чтобы не пропустить новую статью, подписывайтесь на телеграм-канал.

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




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


За 8 лет число пользователей сильно выросло, поэтому увеличилось и число консультантов. Сейчас их 70, они работают по жестким правилам и регламентам ради эффективности. С одной стороны, это помогает выстроить работу большой команды, а с другой, делает процесс очень негибким. Консультант может решить конкретную проблему, но у него не хватает времени, чтобы подумать шире и найти её истинную причину (например, в интерфейсе). В итоге такие проблемы не всплывают в ежемесячной статистике, а так и лежат на дне, пока не накопится критическая масса недовольных пользователей.

Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments0

«Календарь тестировщика» за январь. Разбери бэклог

Reading time7 min
Views9.5K
В Контуре работают 100 тестировщиков. В конце прошлого года они придумали «Календарь тестировщика» — цикл из 12 ежемесячных статей с практиками, секретами и лайфхаками о тестировании.

Первая статья была опубликована в январе на сайте «Сообщества тестировщиков Екатеринбурга». Мы переносим её на Хабр, чтобы её прочло больше тестировщиков. Следующая статья — за февраль — выйдет завтра, а её анонс будет в телеграм-канале.

Открывает цикл Максим Захаров, руководитель всех тестировщиков Контура и один из тестировщиков Ритейла. Он расскажет, почему копятся баги, как разобрать бэклог и уничтожить 80 багов с помощью пиццы :)

Бэклог — журнал оставшейся работы, которую необходимо выполнить команде. Термин пришел из семейства методологий Agile, в частности из Scrum, где он является одним из основных артефактов — источником пользовательских историй.




Я работаю тестировщиком в офисе примерно по 8 часов, изредка работаю в выходные. Есть большие цели на полгода и небольшие проекты на несколько недель или месяцев. Есть и обязательная рутина. Работы всегда с избытком, то есть нет объективной возможности сделать всю. Через год я не хочу увидеть, что делаю те же задачи и решаю те же проблемы. Я не Дорофеев и не Архангельский, рецепта счастья в статье не будет, но можно смело рассчитывать на пару неплохих советов и приемов.


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

Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments5

Как мы перевернули календарь и сделали из него арт-объект

Reading time4 min
Views9.1K

В Контуре работает 54 дизайнера, которые проектируют интерфейсы продуктов для каждой четвёртой компании в России. А ещё наши дизайнеры пишут Гайды, где делятся своим опытом. И вот уже больше года ребята создают календари, которые наделали шума в компании.


Что такое проект «Календарь» и как к нему отнеслись контуровцы, расскажет Юлия Красильникова, куратор проекта и проектировщик Контур.Маркета.


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


Заглянуть в мастерскую художника...
Total votes 22: ↑21 and ↓1+20
Comments9

Видео с митапа UralJS #6 — избавляемся от this, типизируем Redux-приложение и пишем на Реакте без тормозов

Reading time2 min
Views3.9K

image


На прошлой неделе в Екатеринбурге прошла встреча UralJS. Мы снова собрали сотню разработчиков и порвали коворкинг — пришлось ставить дополнительный монитор на кухне и дублировать экран проектора, чтобы снять нагрузку на основной зал.


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

Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments2

Экспресс-оценка сложности алгоритма (+разбор задачи c Joker 2017 и DotNext 2017 Moscow)

Reading time5 min
Views17K
Для любого практического применения log(n) можно считать константой. Просто в некоторых компаниях эта константа больше, чем у вас. © народная мудрость

Половину жизни я учу программировать. В том числе учу разработчиков делать быструю оценку вычислительной сложности алгоритма. Зачем?!


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


Сначала разберёмся, как делать оценку сложности, на примере короткой, но нетривиальной задачи. Потом я расскажу, как научится делать экспресс-оценку, и покажу статистику о том, как решали задачу-пример участники конференций Joker и DotNext.


Читать дальше →
Total votes 34: ↑33 and ↓1+32
Comments24

Интересные сюрпризы ConcurrentDictionary (+разбор задачи с DotNext 2017 Moscow)

Reading time5 min
Views27K

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


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


Читать дальше →
Total votes 31: ↑30 and ↓1+29
Comments3

Неслучайная случайность, или Атака на ГПСЧ в .NET

Reading time5 min
Views17K
Random numbers should not be generated with a method chosen at random.
— Donald Knuth

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


class AuthenticateByPhoneHandler
{
    /* ... */

    static string GenerateCode() => rnd.Next(100000, 1000000).ToString();

    readonly static Random rnd = new Random();
}

Проблема видна невооруженным глазом: для генерации 6-тизначного кода используется класс Random — простой некриптографический генератор псевдослучайных чисел (ГПСЧ). Займёмся им вплотную: научимся предсказывать последовательность случайных чисел и прикинем возможный сценарий атаки на сервис.


Потокобезопасность


Кстати, заметим, что в приведённом фрагменте кода доступ к статическому экземпляру rnd класса Random из нескольких потоков не синхронизирован. Это может привести к неприятному казусу, который можно часто встретить в вопросах и ответах на StackOverflow:


Читать дальше →
Total votes 72: ↑71 and ↓1+70
Comments31

[Екатеринбург, анонс] UralJS #6 — три доклада о типизации, проблемах this и оптимизации React-приложения

Reading time2 min
Views3.1K

image


В четверг 8 февраля в 19:00 в коворкинге «Соль» пройдет первая в 2018 году встреча UralJS. Разберемся, почему в Контуре TypeScript победил Flow, послушаем рецепты оптимизации от Лёши Иванова — злого марсианина и члена программного комитета Fronttalks, и поспорим, что круче: функциональщина или ООП.


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


За 2017 год мы провели 5 митапов. Обсуждали, что делать, если маленький пет-проект привлечет миллион пользователей, рассказывали, какой классный Vue и тут же бомбили по этому поводу, разбирались с интернационализацией и восхищались потокам в JS. Летом мы попробовали другие форматы. Андрей Старовойт из JetBrains сделал большой доклад о том, как разработчики WebStorm выбирают технологии для поддержки. Вместе кодили на выходных — щупали Ангуляр и решали одну и ту же задачу пять раз с разными партнерами и ограничениями.


Что будет на этот раз:

Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments3

Классненькая стажировка

Reading time4 min
Views17K

Мы продолжаем серию публикаций о стажировке в СКБ Контур. Сегодня познакомимся с Анной Шляк, которая расскажет как прошла ее стажировка в Питере и поделится советами.




Тестовое задание


Об СКБ Контур я узнала от одногруппницы: «У них есть классненькие стажировки на C#». В феврале 2017 я дождалась начала стажировки, но была дико расстроена: тестовое задание показалось мне просто непосильным. Нужно было написать сервер статистики для игры-шутера. «Классненько», — подумала я и начала стараться. К концу февраля всё-таки смогла сделать первоначальный вариант и отправить на проверку.


Отбор по тестовым шел в две волны: сначала рассматривали тех, кто отправил ответы до 1 марта, потом — до 19 марта. Я хотела попасть в первую волну, и, как оказалось, не зря. На тестовое мне ответили: «Вы справились хорошо, но немного не дотянули до нашего ТОПа. До 19-го марта есть время, чтобы улучшить ваши ответы». Так я и сделала. Пока я писала код, появлялись новые уточнения и требования по заданию. В одном из уточнений был запрет использовать базу данных MS SQL Server. Если эта база не подходит, то как выбрать нужную? Наугад я выбрала SQLite и с тревогой отправила тестовое на проверку. И прошла дальше.


Следующим этапом был креш-курс на базе отдыха под Екатеринбургом. В апреле я вылетела из Санкт-Петербурга в столицу Урала ради лекций и развлечений. Я была счастлива, что попала на креш-курс: интересные и полезные лекции, парное программирование, куча разных игр, вкусняшки.



Читать дальше →
Total votes 32: ↑26 and ↓6+20
Comments10

Как бросить аспирантуру и стать разработчиком

Reading time4 min
Views11K

Меня зовут Кирилл Протасов. Сейчас расскажу, как за год я прошёл путь от аспиранта психологического факультета до стажёра и разработчика интерфейсов на React.



Не программист


Был ноябрь 2016 года. Я закончил бакалавриат физфака и магистратуру психфака в УрФУ, учился в аспирантуре. Работал эргономистом на большом оборонном предприятии — заботился, чтобы пульты управления пуском всяких стратегических штук были удобными. В общем, занимался инженерной психологией.


Но больше всего меня интересовала разработка интерфейсов. Я самостоятельно изучал юзабилити, проектирование интерфейсов и разработку веб-приложений. Иногда на работе в свободное время решал простые алгоритмические задачи на Codewars и freeCodeCamp. Что-то сразу проверял в консоли браузера, что-то дома. В свободное от работы время учил JavaScript и делал учебные проекты на freeCodeCamp.

Читать дальше →
Total votes 20: ↑12 and ↓8+4
Comments2
1

Information

Rating
Does not participate
Works in
Registered
Activity