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

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

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

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


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


Читать дальше →
Всего голосов 31: ↑30 и ↓1+29
Комментарии3

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

Время на прочтение5 мин
Количество просмотров17K
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:


Читать дальше →
Всего голосов 72: ↑71 и ↓1+70
Комментарии31

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

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

image


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


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


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


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

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

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

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

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




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


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


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


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



Читать дальше →
Всего голосов 32: ↑26 и ↓6+20
Комментарии10

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

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

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



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


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


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

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

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

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

Меня зовут Евгений Жиров, я разработчик в инфраструктурной команде Контур.Экстерна. Этот пост — текстовая версия моего доклада с недавнего митапа Perm Tech Talks.


У нас в команде 200 микросервисов, которые должны быть отказоустойчивыми, чтобы пользователи не замечали никаких проблем. А проблемы, конечно, возникают. Поэтому мы собираем метрики, чтобы знать, как дела у конкретных сервисов и у системы в целом. Метрики помогают вовремя среагировать и всё починить.


Метрики можно собирать, хранить и визуализировать. И есть много способов собрать метрики неправильно, нарисовать с ошибками и сделать неверные выводы.


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


Какие бывают метрики?



Метрика requests.count.byhost.*

Читать дальше →
Всего голосов 32: ↑30 и ↓2+28
Комментарии8

Как я поехал на летнюю стажировку и остался

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

Меня зовут Ренат Тазиев. Мне 22 года, и я разработчик.



(Пишу код на Чемпионате Урала по спортивному программированию.)


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


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

Читать дальше →
Всего голосов 17: ↑14 и ↓3+11
Комментарии20

Как мы отмечали 256 день года и рисовали пиксели через API

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

13 сентября в Контуре отмечали День программиста. В самом большом офисе разработки играли в Pac-Man и пытались съесть 280 коробок с пиццей. Одновременно полторы тысячи человек рисовали пиксели в онлайне. В этом посте четыре разработчика рассказывают, как делали праздник.



Часть 1. Рассказывает Игорь green_hippo, который стырил идею на Reddit


День программиста у нас отмечает вся компания, а не только разработчики. Поэтому была нужна идея для онлайновой игры, в которой могут участвовать все желающие. Я вспомнил, что в апреле прошёл Reddit Place — социальный эксперимент по коллективному рисованию на холсте 1000×1000 пикселей, в котором участвовал миллион человек.


Я решил, что надо сделать свой Place, с таймлапсом и API.

Читать дальше →
Всего голосов 25: ↑24 и ↓1+23
Комментарии10

ICFP Contest 2017 — проверка на прочность для настоящих разработчиков

Время на прочтение5 мин
Количество просмотров7.7K
ICFPC — ежегодное соревнование для программистов. Оно проходит в онлайне и длится 72 часа. ICFPC 2017 начнётся в пятницу 4 августа в 12:00 (UTC) и закончится в понедельник.

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


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

Сказ о стажировке в маленькой компании или как мы с Контуром конкурировали [Часть I]

Время на прочтение9 мин
Количество просмотров13K
В этом году я уже в третий раз буду наставником на контуровской летней стажировке, но первый опыт проведения стажировки я получил в маленькой компании до Контура. Сейчас, спустя почти четыре года, я хочу поделиться этим опытом и провести некоторые параллели с тем, как проходит стажировка в большой компании. Надеюсь, прочитав этот текст, вы тоже решитесь на организацию стажировки. Буду рад, если мой опыт вам в этом поможет!

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

Во второй части расскажу о том, как всё получилось на самом деле, какие выводы мы сделали и чему научились. Здесь продолжение статьи.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии4

Краткое руководство по выходу в opensource: кому это нужно, для чего и как

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

На прошлой внутренней конференции разработчиков Контура я выступал с докладом. В моей презентации был слайд, на котором были перечислены известные российские ИТ-компании, разделенные на два столбца. Между компаниями в правом и левом столбцах было одно весомое различие.


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


Отличие их состояло в том, что они активно распространяют свои технологии и знания — делятся с профессиональным сообществом открытым кодом и понятными мануалами, выступают на конференциях. Они осознанно вкладываются в развитие своих opensource-проектов. Технологии и описания многих из них лежат в открытом доступе на специально созданных сайтах tech.yandex.ru, opensource.mail.ru, techno.2gis.ru/opensource, и известны многим разработчикам за пределами компаний.


Если вы вдруг решили заняться благотворительностью (почти) и сделать что-то подобное в своей компании, надеюсь, мой текст поможет ответить на вопросы: нужно ли это вам, сколько ресурсов потребуется и что в итоге получится. У нас вышел такой сайт: tech.skbkontur.ru.

Читать дальше →
Всего голосов 21: ↑19 и ↓2+17
Комментарии4

Песнь о могучем Деплое: безостановочное прозрачное развёртывание веб-сервиса

Время на прочтение14 мин
Количество просмотров13K
Песнь о могучем Деплое

Пролог


Пришло время, когда нам — команде Эльбы — захотелось поделиться с миром подробностями некоторых магических и загадочных деталей нашего продукта. Решили начать с одного из самых сложных проектов, который является предметом особой гордости и лёгкого поклонения. Он покрыт налётом тайны и окутан ореолом тёмной магии. Легенды о нём передаются из уст в уста. Лишь малая часть знаний задокументирована в вики или ютреке, большая же — сокрыта в исходниках системы контроля версий. Премудрых старцев, умеющих расшифровать этот тайный код, в проекте всё меньше и меньше. Пришла пора записать все магические заклинания в подробном манускрипте. Речь пойдёт о системе развёртывания Эльбы — о могучем Деплое.
Читать дальше →
Всего голосов 33: ↑32 и ↓1+31
Комментарии10

Кому должен фрилансер?

Время на прочтение3 мин
Количество просмотров8.9K
Рассказываем о том, какие обязательства перед государством есть у фрилансера, который зарегистрировал ИП, но им не пользуется.

Бывает, что фрилансер открывает ИП, но продолжает оставаться «свободным художником». Причины появления таких ИП-нулевок могут быть разные. Кто-то регистрирует ИП, чтобы привлекать заказчиков. Кто-то на время передумал заниматься бизнесом.
В каком случае ИП может официально считать себя нулевкой? Если он не оказывает никаких услуг или ничего не продает, а на его расчетном счете и в кассе нет движения средств. Однако, несмотря на то что предприниматель фактически ничего не делает, ему нужно сдавать отчетность в контролирующие органы и платить взносы в страховые фонды.
Читать дальше →
Всего голосов 11: ↑9 и ↓2+7
Комментарии10

Moira: Realtime Alerting

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

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

Эта инфраструктура порождает метрики на всех технологических уровнях — нагрузка на железо, состояние ОС, метрики приложений. Исходные данные собираются в один большой кластер Graphite. Сейчас у нас есть миллион уникальных метрик, по которым суммарно генерируется 20 тысяч значений в секунду.

Ясно, что за миллионом метрик не уследить глазами на телевизорах и дашбордах — нужна система отправки уведомлений о нештатных ситуациях. Перед тем как написать свою систему Moira, мы использовали для этой задачи Seyren.
Читать дальше →
Всего голосов 18: ↑18 и ↓0+18
Комментарии4

Xamarin и Xamarin.Forms – кактус в шоколаде. Часть 2

Время на прочтение7 мин
Количество просмотров14K
Совсем недавно мы опубликовали статью про особенности и проблемы популярного мобильного фреймворка Xamarin. Сегодня же мы продолжим рассказ и сосредоточимся на нюансах библиотеки Xamarin.Forms. Под катом вас ждёт история о том, какие грабли поджидают решившего сделать кроссплатформенный UI.
Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии11

Xamarin и Xamarin.Forms – кактус в шоколаде. Часть 1

Время на прочтение9 мин
Количество просмотров22K
Мы в Контур.Эльбе обожаем мобильные приложения. У нас уже был опыт написания приложения под iOS, а также разработки и дальнейшей поддержки приложения под Android. В этом году мы вновь выпустили версию под iOS, но на этот раз на базе Xamarin и Xamarin.Forms, и нам не терпится поделиться опытом. Пока что мы успели рассмотреть разработку только под iOS, но впечатлений уже море, да и про Android пару слов однозначно скажем.
Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Комментарии29

QCTF Starter: компьютерная безопасность на четверых или как мы сделали турнир для новичков в 19 городах одновременно

Время на прочтение5 мин
Количество просмотров9.4K
UPD: ссылка на онлайн-турнир online.qctf.ru

CTF-соревнования знакомы многим, ещё больше людей о них хотя бы раз слышали. Про них тут хорошо написано. Чтобы участвовать в серьёзных CTF-турнирах нужна неслабая подготовка, но мало кто знает, как и где её получить. Мы решили исправить это, а именно — провести массовые соревнования по компьютерной безопасности для новичков. И назвали их QCTF Starter. Возможно, для участников это станет первой ступенькой на пути к профессиональным CTF-турнирам.

QCTF Starter прошёл вчера на площадках по всей стране, а с понедельника (10:00 по МСК) мы запустим онлайн-версию по мотивам соревнования для тех, кто не смог присоединиться к нам в оффлайне. Ссылка появится на сайте прямо перед стартом тура. Мы обязательно напомним вам о начале игры, если вы оставите тут свои координаты. На онлайн-зеркало приглашаем всех желающих.

В этом году нам удалось сделать почти невозможное: собрать 208 команд в 19 городах на 22 площадках. Одна даже находилась за пределами России, в Минске. Но мы неумолимы и надеемся, что в следующем году площадок станет ещё больше.

Благодаря энтузиастам, согласившимся взять на себя организацию соревнований в своих городах, мы смогли набрать такое большое количество команд (QCTF Starter стал самым большим очным CTF-соревнованием, когда-либо проводившимся в России). Как нам это удалось и что получилось в итоге, читайте под катом.

image
(Фото сделано участником соревнования QCTF Starter в Екатеринбурге)
Читать дальше →
Всего голосов 15: ↑13 и ↓2+11
Комментарии3

Долгая дорога в App Store, или как потратить 43 дня на премодерацию приложения

Время на прочтение14 мин
Количество просмотров25K
В прошлом году мы рассказывали про разработку приложения Контур.Эльба под Android (причем неоднократно). Реализовав в нем все задуманное, мы принялись за разработку версии под iOS, которая недавно появилась в App Store. Пост про разработку с использованием Xamarin.Forms будет позже, а пока сосредоточимся на, казалось бы, банальном вопросе: выкладывание приложения в App Store и общение с модераторами.

Начнём с выводов, которые мы получили в процессе общения с модераторами Apple:

  • следует внимательно перечитывать App Store Review Guidelines: рекомендации меняются, и то что вчера было разрешено, сегодня могут уже запретить;
  • модераторы Apple не всегда внимательно изучают приложение и могут пропустить контент внутри;
  • нужно внимательно читать ответы модераторов;
  • решение после проверки может не соответствовать правилам App Store. Пример в тексте ниже: требование подключения in app purchase для приложения без поддержки платных фич;
  • в непонятных ситуациях лучше сразу написать апелляцию, чтобы не тратить неделю на ожидание ответа. Если ответ не устраивает или непонятен – новые апелляции;
  • модерация может занять много времени: минимум 8 дней, из которых 7 дней – ожидание в очереди на проверку.

Представляем лог общения с модераторами с неожиданными поворотами, расследованиями, тотальным непониманием, но со счастливым завершением сюжетной арки.
Читать дальше →
Всего голосов 22: ↑18 и ↓4+14
Комментарии19

Заказчики из-за границы: как сделать всё легально

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


Из-за падающего курса рубля многие фрилансеры уже давно работают на зарубежных клиентов. Среди них не все желают сотрудничать с обычными физлицами: крупные заказчики требуют оформлять контракт и оплачивать работы в иностранной валюте. Чтобы охватить новый рынок, придётся зарегистрироваться как предприниматель и соблюдать серьезное валютное законодательство. Обо всех этих правилах мы постарались рассказать понятными словами.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии15

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

Время на прочтение4 мин
Количество просмотров4.5K
ИТ-компании часто тратят деньги на развитие сегмента и вкладываются в будущих сотрудников. На это много причин: говорят об обязательствах лидеров отрасли, развитии местного профессионального сообщества, социальной ответственности и бла-бла-бла. На деле всё прозаичнее: хочешь хорошего специалиста — воспитай сам. Не быстро, зато надежно. Мы — такая социально-ориентированная компания с земными интересами. Будущих программистов и разработчиков у нас помогают готовить Образовательные программы. Как все устроено и чем именно занимается отдел, рассказывать не буду — это тема отдельного поста. Поделюсь опытом работы над одним из проектов направления — грантовой программой для преподавателей.
image
Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии2

Информация

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