Pull to refresh
14
0
Send message

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

Reading time15 min
Views6.3K
Сразу скажу, хаба для F# на хабре нет, поэтому пишу в C#.

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


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


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

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

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

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

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

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

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

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

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

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


Читать дальше →
Total votes 37: ↑36 and ↓1+35
Comments9

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

Reading time15 min
Views12K


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


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

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

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

Reading time12 min
Views40K

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


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


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


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



Читать дальше →
Total votes 23: ↑20 and ↓3+17
Comments42

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

Reading time6 min
Views9.5K

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


image


Задача


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


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

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

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


Читать дальше →
Total votes 29: ↑27 and ↓2+25
Comments7

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

Reading time39 min
Views1.6M



Содержание



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


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


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


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



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

Читать дальше →
Total votes 125: ↑124 and ↓1+123
Comments44

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

Reading time12 min
Views7.9K

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


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


Читать дальше →
Total votes 14: ↑13 and ↓1+12
Comments10

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

Reading time10 min
Views23K

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

Про 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 и остромодной подконцепции микросервисов, упрощая развертывание сервисов и обеспечивая их масштабируемость и отказоустойчивость. И после этого лирического отступления перейдем, наконец, в наступление.
Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments3

Find.By — finding & verifying locators

Reading time1 min
Views5.7K
Начну эту статью с того, что я работаю QA Automationg и того, что я люблю автоматизировать все рутинные действия. Так вот в последнее время для меня таковым стало написание, редактирование и проверка локаторов к элементам на странице.

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

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

Reading time17 min
Views31K


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

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

Reading time3 min
Views22K

Предлагаю вашему вниманию перевод статьи 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>: хорошие и плохие.

Читать дальше →
Total votes 22: ↑19 and ↓3+16
Comments4

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

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

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

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

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


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

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

Reading time15 min
Views18K


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


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

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



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

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

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

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

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

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

Reading time4 min
Views50K


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

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

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

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



Кому интересно, загляните под кад
Total votes 23: ↑21 and ↓2+19
Comments3

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

Reading time4 min
Views40K

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

Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments10

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

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


Читать дальше →
Total votes 20: ↑18 and ↓2+16
Comments2
1
23 ...

Information

Rating
Does not participate
Location
Amsterdam, Noord-Holland, Нидерланды
Date of birth
Registered
Activity