Как стать автором
Обновить
14
0

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

Отправить сообщение

Напиши мне GraphQL сервер на C#

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

Как-то выдалась у меня пара выходных, и я набросал GraphQL сервер к нашей Docsvision платформе. Ниже расскажу, как все прошло.


Постер - по щучему велению

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

Мониторинг акторов в Akka.Net, но на F#

Время на прочтение15 мин
Количество просмотров6.3K
Сразу скажу, хаба для F# на хабре нет, поэтому пишу в C#.

Для тех кто не знаком с F#, но знаком с C#, рекомендую наисвежайшую статью от Microsoft.
Она поможет Вам испытывать меньше WTF моментов при прочтении, т.к. моя статья не туториал к синтаксису.


Контекст задачи


Есть сервис, написанный на Akka.NET, он вываливает в разные текстовые логи кучу инфы. Отдел эксплуатации грепает эти логи, жарит по ним регекспами, чтобы узнать о кол-ве ошибок (бизнесовых и не очень), о кол-ве входящих в сервис сообщений и кол-ве исходящих. Далее эта информация заливается в ElasticDB, InfluxDB и показывается в Grafana и Kibana в разных срезах и агрегациях.

Звучит сложно, да и парсить текстовые логи сервиса, который генерит несколько десятков ГБ текстового мусора в день — занятие неблагодарное. Поэтому встала задача — сервис должен быть способен поднять ендпоинт, который можно дёрнуть и получить сразу всю инфу о нём.

Решать задачу будем так:

  1. Напишем доменную модель для метрик
  2. Замапим доменную модель метрик на реализацию App.Metrics и поднимем апишечку
  3. Сделаем структурированный доменный логгер, который натянем на внутренний логгер Akka
  4. Сделаем обёртку для функциональных акторов, которая спрячет работу с метриками и логгером
  5. Соберём всё вместе и запустим
Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии3

29 докладов DotNext 2017 Piter: От .NET Standard и контейнеров до безопасности и перфоманса

Время на прочтение14 мин
Количество просмотров8.9K
Когда мы начинали делать DotNext, мы пошли по пути технического хардкора и мозголомной сложности, ровно так же, как делали это в Java-мире с Joker и JPoint. Шли годы, конференция росла, мы получали фидбеки и делали конференцию лучше, меняли программу, доклады, спикеров… И вот недавно, общаясь с людьми на DotNext и JPoint, я пришел для себя к интересному выводу — .NET разработчики не хотят упоротого хардкора:

  • Здесь нет безумного зоопарка фреймворков, работу которых надо в обязательном порядке знать на уровне исходников;
  • нет 5 GC, каждый из которых обладает своими особенностями;
  • качество документации стандартной библиотеки и развитых фреймворков в среднем выше;
  • большинство инструментов работают четко и счетчики производительности обычно не врут (это я в основном про .NET Framework говорю, с Core не все так радужно пока);
  • сам язык, в конце концов приятен и понятен (хотя под JVM можно пользоваться тем же Kotlin).

Зато есть много чего другого интересного:

  • Если вы работаете на низком уровне, модели памяти никуда не деваются;
  • Работа над улучшением производительности и оптимизации по памяти по прежнему с нами;
  • Сама платформа развивается огромными темпами — надо оставаться в курсе;
  • С кроссплатформенностью приходят новые инструменты и новые проблемы.

Поэтому новую программу конференции мы решили строить немного по-другому. Получается, что DotNext 2017 Piter — уже не только хардкор. А если не хардкор, то кто? Подробности смотрите под катом.


Читать дальше →
Всего голосов 37: ↑36 и ↓1+35
Комментарии9

Поиск неисправностей с помощью WinDbg, Sos и Sosex

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


Изображение: Julien Dumont, Flickr


К сожалению, иногда случаются ситуации, когда система перестает работать или начинает безудержно потреблять ресурсы, а логи и системные метрики не могут помочь. Ситуация еще усугубляется тем, что на системе в продакшене нет Visual Studio или какого-либо отладчика, невозможно поотлаживаться удаленно. Чаще всего даже нет возможности получить доступ этой машине. В данном случае единственным решением является анализ дампа памяти процесса. Я хочу описать несколько общих сценариев поиска проблем на таких дампах. Это поиск взаимоблокировок, утечек памяти и высокого потребления процессорных ресурсов.

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

Реактивные приложения с паттерном RxPM. Прощайте​ MVP и MVVM

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

Уже продолжительное время я размышляю над паттерном RxPM и даже успешно применяю его в «продакшене». Я планировал сначала выступить с этой темой на Mobius, но программный комитет отказал, поэтому публикую статью сейчас, чтобы поделиться с Android-сообществом своим видением нового паттерна.


Все знакомы с MVP и MVVM, но мало кто знает, что MVVM является логическим развитием паттерна Presentation Model. Ведь единственное отличие MVVM от PM – это автоматическое связывание данных (databinding).


В этой статье речь пойдет о паттерне Presentation Model с реактивной реализацией биндинга. Некоторые ошибочно называют его RxMVVM, но корректно будет называть его RxPM, потому что это модификация шаблона Presentation Model.


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



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

Пишем свои монады на Scala на примере CSV-парсера

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

За последнее время мы очень многое узнали о монадах. Мы уже разобрались что это такое и даже знаем как их можно нарисовать, видели доклады, объясняющие их предназначение. Вот и я решил заскочить в уходящий монадный поезд и написать по этой теме, пока это окончательно не стало мейнстримом. Но я зайду с немного другой стороны: здесь не будет выкладок из теории категорий, не будет вставок на самом-лучшем-языке, и даже не будет scalaz/shapeless и библиотеки parser-combinators. Как известно, лучший способ разобраться как что-то устроено — сделать это самому. Сегодня мы с вами будем писать свою монаду.


image


Задача


Возьмем для примера банальную задачу: парсинг CSV-файла. Допустим нам требуется распарсить строки файла в case classes, чтобы потом отправить их в базу, сериализовать в json/protobuf и так далее. Забудем про escaping и кавычки, для еще большей простоты, считаем что символ разделителя в полях встречаться не может. Думаю, если кто-то решит затащить это решение в свой проект, докрутить эту фичу будет не трудно.


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

В ногу со временем: Используем JWT в ASP.NET Core

Время на прочтение6 мин
Количество просмотров42K
В июне 2016 вышел релиз ASP.Net Core 1.0 и теперь, если вас не пугает возраст нового фреймворка, можно аккуратно запустить микросервис в продакшн (все ведь используют микросервисную архитектуру, не так ли?). Для того, чтобы ограничить доступ к вашему микросервису для третьих лиц, необходимо сделать аутентификацию, используя довольно распространенный способ — токены. В статье под катом мы расскажем подробнее о том, как это сделать с помощью JSON Web Token (JWT), а также о плюсах и минусах этого подхода.


Читать дальше →
Всего голосов 29: ↑27 и ↓2+25
Комментарии7

Полное практическое руководство по Docker: с нуля до кластера на AWS

Время на прочтение39 мин
Количество просмотров1.6M



Содержание



Вопросы и ответы


Что такое Докер?


Определение Докера в Википедии звучит так:


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



Ого! Как много информации.

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

Azure Service Fabric: вторые шаги

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

Снова Чарли Чаплин на фабрике в фильме «Новые времена»


Продолжаем разговор про Azure Service Fabric. В предыдущей статье я упомянул о планах написать сначала про stateful сервисы, а затем уже перейти к модели акторов в ASF. Концепция изменилась — подумалось мне, что неплохо бы для примеров использовать если уж не production-решение, то что-то близкое, чтобы была теоретическая польза и практический смысл. Можно объединить все компоненты ASF в одном флаконе — чтобы и корованы набигали, и лунапарк, и Винни-Пух и все-все-все. Вот с такими мыслями я и пошел на кладбище домашних проектов в поисках кандидата на оживление.


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

Azure Service Fabric: первые шаги

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

Чарли Чаплин в фильме «Новые времена»

Про Azure Service Fabric уже немало написано статей и даже книг, благо около года продукт находился в состянии preview. Однако 1 апреля 2016 года без всяких шуток Azure Service Fabric наконец достиг состояния General availability, и есть основания полагать, что он задержится здесь всерьез и надолго. А раз так — почему бы не пройтись по нему если не из прикладного, то хотя бы из академического интереса? Тем более что информации по Azure Service Fabric на русском языке явно маловато.

Зачем же вообще потребовался Azure Service Fabric? В мире ПО существует довольно много серверов, привязанных к экосистемам определенного языка или платформы. Исторически так сложилось, что в экосистеме Java таких серверов едва ли не больше всех — Tomcat, JBoss, WebSphere и пр. Увы, платформа .NET таким богатством выбора похвастаться пока не может. На ум приходят разве что IIS, “облачные” сервисы Azure и их “локальный” близнец Windows Azure Pack (не считая хелперов-оберток типа Topshelf). Azure Service Fabric призван расширить этот недлинный список в сторону популярной нынче концепции SOA и остромодной подконцепции микросервисов, упрощая развертывание сервисов и обеспечивая их масштабируемость и отказоустойчивость. И после этого лирического отступления перейдем, наконец, в наступление.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии3

Find.By — finding & verifying locators

Время на прочтение1 мин
Количество просмотров5.7K
Начну эту статью с того, что я работаю QA Automationg и того, что я люблю автоматизировать все рутинные действия. Так вот в последнее время для меня таковым стало написание, редактирование и проверка локаторов к элементам на странице.

Обычно это процесс выглядит так: я пишу xpath выражение в chrome или firepath, потом копирую его и добавляю атрибут к элементу в C# коде. Но локаторы часто нужно исправлять или просто проверить, на какой элемент он указывает. И даже такое просто изменение предиката как [@id='myId'] на [contains(@id = 'Id')] заканчивается падением теста во время выполнения потому, что я написал '=' вместо ',' и поленился проверить изменения. В общем, слишком много действий с копированием, вставкой, переключений между окнами и тому подобного для такой простой задачи. Решил я написать плагин для ReSharper, который бы по Alt+Enter подсвечивал мой элемент в браузере.
Посмотреть плагин
Всего голосов 15: ↑14 и ↓1+13
Комментарии4

Как не наступить на грабли, работая с сериализацией

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


Несмотря на то, что использовать механизм сериализации при программировании на C# достаточно просто и удобно, есть моменты, которые стоит учитывать. О том, на какие грабли можно наступить, работая с сериализацией, о примерах кода, в котором эти грабли припрятаны, а также о том, как PVS-Studio поможет вам избежать шишек на лбу, и будет эта статья.
Читать дальше →
Всего голосов 28: ↑23 и ↓5+18
Комментарии12

Что собой представляют образы Docker none:none?

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

Предлагаю вашему вниманию перевод статьи What are Docker none:none images? из блога Project Atomic.


Последние несколько дней я потратил на упражнения с образами Docker <none>:<none>. Чтобы объяснить, что они собой представляют, и что могут натворить, я пишу этот пост, в котором ставлю вопросы:


  1. Что собой представляют образы Docker <none>:<none> ?
  2. Что собой представляют обособленные (dangling) образы ?
  3. Почему я вижу кучу образов <none>:<none>, когда делаю docker images -a ?
  4. В чем разница между docker images и docker images -a ?

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

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

C# — есть ли что-то лишнее?

Время на прочтение16 мин
Количество просмотров33K
Все будет быстро. Это выступление Анатолия Левенчука, в последнее время не дает мне покоя. Успехи глубинного обучения в последний год говорят о том, что все очень быстро изменится. Слишком долго кричали волки-волки говорили «искусственный интеллект», а его все не было. И вот, когда он, наконец, приходит к нам, многие люди этого просто не осознают, думая, что все закончится очередной победой компьютера в очередной интеллектуальной игре. Очень многие люди, если не все человечество, окажется за бортом прогресса. И этот процесс уже запущен. Думаю, что в этот момент меня не очень будет интересовать вопрос, который вынесен в заголовок статьи. Но, пока этот момент еще не настал, попытаюсь поднять этот потенциально спорный вопрос.

Программируя уже более 25 лет, застал достаточно много различных концепций, что-то смог попробовать, еще больше не успел. Сейчас с интересом наблюдаю за языком Go, который можно отнести к продолжателям “линейки языков Вирта” — Algol-Pascal-Modula-Oberon. Одним из замечательных свойств этой цепочки является то, что каждый последующий язык становится проще предыдущего, но не менее мощным и выразительным.

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

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


Почему же тогда существуют сложные языки? Все дело в выразительности. Если какая-то конструкция позволяет коротко описать необходимое действие, то это вполне может окупить негативные стороны усложнения языка.
Читать дальше →
Всего голосов 45: ↑30 и ↓15+15
Комментарии140

Ценность многошрифтового дизайна

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


Я заметила, что одна из особенностей моего дизайнерского стиля — это готовность использовать, на первый взгляд, слишком большое количество разных гарнитур шрифтов. Я видела неисчислимое множество статей о сочетаниях и системах использования шрифтов, и почти везде рекомендуется использовать меньше шрифтов в любом дизайне. Я и к своей работе получала такие комментарии – дескать, работы приятные, несмотря на количество используемых шрифтов.
«Очень нравится сайт, потому что он не боится нарушать одно из первых правил шрифта – не использовать слишком много разных гарнитур. Используется четыре шрифта, два из семейства sans-serif и два из serif — Galaxie Copernicus, Interstate, Harriet и Nimbus Sans. Основной момент такого дизайна – последовательность, и сайт Бетани Хек последовательно использует каждый из шрифтов для своей цели.»
— Джеремия Шоаф, Typewolf


Расцениваю это, как вызов. Спасибо, Джеремия!

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



Так почему же у нас есть правила насчёт количества используемых гарнитур?
Реально много больших картинок.
Всего голосов 17: ↑16 и ↓1+15
Комментарии4

Событийная модель на основе async и await

Время на прочтение7 мин
Количество просмотров25K
В далеком 2012, когда цена на нефть еще была трехзначной, а трава зеленее, майкрософтом был выпущен .NET 4.5, а с ним и конструкция async/await. Про неё написано уже довольно много статей (Async в C#), а большинство разработчиков C# хорошо её изучили. Но все ли варианты использования были рассмотрены, можно ли выжать из await немного больше?

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

В классическом варианте это выльется в использование CancellationToken для обработки отмены, try catch для обработки разрыва соединения и код анализа возвращенных данных, для оценки результата запроса. Но можно ли уместить всё это в единой парадигме? В этот статье я предлагаю рассмотреть альтернативный подход, основанный на событийной модели с использованием синтаксического сахара async/await.
Читать дальше →
Всего голосов 24: ↑23 и ↓1+22
Комментарии18

Как настроить двухфакторную аутентификацию для логина и sudo

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


Безопасность в моде, как это и должно быть. Мы живем в мире, где данные — невероятно ценная валюта, которую вы всегда рискуете потерять. Поэтому вы должны сделать все, чтобы убедиться, что то, что вы держите на серверах и десктопах — в безопасности. Для этого администраторы и пользователи создают невероятно сложные пароли, используют менеджеры паролей и т.д. Но что, если я вам скажу, что вы можете логиниться на ваши серверы и десктопы Linux за два шага, вместо одного? Вы можете это делать благодаря Google Authenticator. Более того, это невероятно легко настроить.

Я собираюсь провести вас через процесс настройки двухфакторной аутентификации для использования ее на логине и sudo. Я продемонстрирую это на десктопной Ubuntu 16.04, но процесс также работает и для сервера. Чтобы справиться с двухфакторной стороной вещей, я буду использовать Google Authenticator.
Читать дальше →
Всего голосов 69: ↑53 и ↓16+37
Комментарии86

Win-Win: Спикеры DotNext на встрече SPB .NET Community и наоборот

Время на прочтение4 мин
Количество просмотров3.2K
В июне исполняется год нашему сообществу .NET программистов SPB .NET Community. Я не буду подводить итоги и рассказывать, что было, так как… не до этого, заняты подготовкой новой встречи, двенадцатой! В четверг, 2 июня у нас приглашенные гости, ведущие докладчики конференции DotNext: гуру .NET Performance Sasha Goldshtein и активный участник .NET User Group Minsk Сергей Щегрикович. Темы, как мы любим: производительность, memory traffic, отладка, CoreCLR, внутренности, расчленёнка…



Кому интересно, загляните под кад
Всего голосов 23: ↑21 и ↓2+19
Комментарии3

Эволюция нейросетей для распознавания изображений в Google: Inception-v3

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

Продолжаю рассказывать про жизнь Inception architecture — архитеткуры Гугла для convnets.
(первая часть — вот тут)
Итак, проходит год, мужики публикуют успехи развития со времени GoogLeNet.
Вот страшная картинка как выглядит финальная сеть:
image
Что же за ужас там происходит?

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

Создание in-memory кэша первого уровня для .NET-клиентов StackExchange.Redis

Время на прочтение11 мин
Количество просмотров16K
Джонатан Карди написал .NET-библиотеку StackRedis.L1 с открытым исходным кодом, которая позволяет создавать кэш первого уровня для Redis. Иными словами, используя библиотеку StackExchange.Redis в .NET-приложении, вы можете подключить к ней StackRedis.L1 для ускорения работы за счет локального кэширования данных в оперативной памяти. Это позволяет избежать лишних обращений к Redis в тех случаях, когда данные не подвергались изменениям. Библиотека доступна на GitHub и NuGet.
В этой статье рассказывается о том, как и почему она была создана.


Читать дальше →
Всего голосов 20: ↑18 и ↓2+16
Комментарии2
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Amsterdam, Noord-Holland, Нидерланды
Дата рождения
Зарегистрирован
Активность