• Избавляемся от постоянного написания конструкторов для инжекта зависимостей с помощью C# Source Generators

    Все мы привыкли инжектить кучу зависимостей в класс и инициализировать их в конструкторе. На выходе обычно получаем спаггети конструктор. Лично меня - это достало!

    Поэтому я решил автоматизировать это дело, благо в .NET 5 у нас есть такая возможность в виде Source Generators.

    А так же хотелось поделиться библиотекой с теми, кого так же как и меня достало написание спагетти конструкторов!

    Читать далее
  • Посмотрим на девочек? Или ml.net в работе

      К сожалению, мир машинного обучения принадлежит python.

      Он давно закрепился, как рабочий язык для Data Silence, с чем Microsoft решила поспорить. Так появился ML.NET, кросс-платформенная и открытая система машинного обучения для разработчиков .NET.

      В данной статье, я хочу показать, что использовать ml.net - не сложнее, чем остальные варианты, которые есть, на реально работающем примере, ссылку на который оставлю внизу. Это канал в телеграмме, который в автоматическом режиме забирает данные, классифицирует их(это и будем рассматривать) и постит. Кому интересно, добро пожаловать.

      Ознакомиться
    • Минимальное PWA

        Какие характеристики должны быть у web-приложения, чтобы соответствовать критерию "прогрессивное"? Понятно, что, как и обычные web-приложения, прогрессивные строятся на базе "большой тройки" web-технологий - HTML/CSS/JS. Но что именно делает web-приложения прогрессивными?

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

        Читать далее
      • Как выбрать движок для создания игр на .NET (рассматриваем 7 кандидатов)

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

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


          Читать дальше →
        • Замеряем производительность с помощью BenchmarkDotNet

            imageДобрый день. Неделю назад я в третий раз применил библиотеку для создания\запуска .NET бенчмарков BenchmarkDotNet. Библиотека оказалась достаточно удобной, но практически не освещенной на хабре, что я сейчас и исправлю.

            Под бенчмарком я подразумеваю измерение времени выполнения метода(ов). Для начала представим процесс написания бенчмарка руками. Создаем тестируемый метод, выбираем Release билд, создаем «замеряющий» метод, в нем собираем мусор, ставим StopWatch в начале и в конце, запускаем прогрев, запускаем тестируемый метод. Если тестируемый метод выполняется быстрее одного «тика» StopWatch, запускаем тестируемый метод много раз (пусть будет миллион), делим суммарное время на миллион, получаем результат (при этом нужно не забыть вычесть из суммарного времени время «холостого» прогона цикла на миллион операций).

            А ведь это еще не все!
          • Юноше, обдумывающему электронику. Ключи к материалу для самостоятельного изучения

              Перевод учебника «Искусство схемотехники» пополнился Частью 3, в которой разбираются полевые транзисторы. Книга приобрела целостный, хотя всё ещё не окончательный, вид. На данный момент отсутствуют три части — 11 («Программируемая логика»), 14 («Компьютеры, контроллеры и шины данных»), 15 («Микроконтроллеры») — и таблицы. Таблицы отложены до завершения перевода (там почти одни цифры, с которыми можно ознакомиться и в оригинале), а остающиеся темы при всём уважении к авторам лучше изучать по другим источникам. В анонсе перевода среди жалоб на несовершенство мира была высказана мысль о необходимости грамотного руководства освоением нового материала. Здесь предлагается метод изучения, рационализирующий данный процесс и некоторые соображения о повышении КПД знаний, относящиеся к системе Цеттелкастен.
              Читать дальше →
            • Максимально оптимизированная веб-загрузка изображений в 2021 году

              • Перевод
              • Tutorial

              В этой статье я расскажу про 8 методик оптимизации загрузки изображений, которые уменьшают необходимую пропускную способность сети и нагрузку на процессор при выводе на экран. Приведу примеры аннотированного HTML, чтобы вам было легче воспроизвести. Какие-то методики уже давно известны, а какие-то появились относительно недавно. В идеале, ваш любимый механизм публикации веб-документов (например, CMS, генератор статичных сайтов или фреймворк для веб-приложений) должен всё это реализовывать из коробки.
              Читать дальше →
            • Делаем фильтры «как в экселе» на ASP.NET Core

                «Сделайте нам фильтры «как в экселе», — довольно популярный запрос на разработку. К сожалению, реализация запроса в общем виде «слегка» длинее, чем его лаконичная постановка. Если вдруг вы никогда не пользовались этими фильтрами, то вот пример. Основная фишка в том, что в строчке с названиям колонок появляются выпадающие списки со значениями из выбранного диапазона. Например в колонках А и B — 4000 строк и 3999 значений (первую строчку занимают названия колонок). Таким образом, в соответсвтующих выпадающих списках будет по 3999 значений. В колонке C — 220 строк и 219 значений в выпадающем списке соответственно.


                Пример реализации на C# под катом
                • +14
                • 4,4k
                • 9
              • Как классифицировать мусор с помощью Raspberry Pi и машинного обучения Arm NN

                • Перевод


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

                Производительность таких решений сильно зависит от пропускной способности сети и задержки. Кроме того, отправка данных внешнему сервису может привести к проблемам с конфиденциальностью. В этой статье демонстрируется возможность переноса ИИ из облачной среды на периферию. Чтобы продемонстрировать ML с использованием периферийных ресурсов, мы будем использовать API-интерфейсы Arm NN для классификации изображений мусора с веб-камеры, подключённой к компьютеру Raspberry Pi, который покажет результаты классификации.

                Приятного чтения!
              • Функциональное мышление. Часть 1

                • Перевод

                В этой серии статей вы познакомитесь с основными принципами функционального программирования и поймёте, что значит «мыслить функционально» и как этот подход отличается от объектно-ориентированного или императивного программирования.


                Читать дальше →
              • Букварь по F# для любопытствующих C#-разработчиков

                • Перевод

                Предисловие


                Мой переход на F# в качестве излюбленного языка был слегка усеян препятствиями. Примерно через десять лет почти постоянного использования C# у меня пробудилось любопытство, когда я услышал об этом другом #-языке. Моя первая реакция была той, которую с тех пор видел у других C#-разработчиков — отрицание, — C# является хорошим языком, и мне с ним комфортно, так зачем тратить силы на изучение другого? Но любопытство осталось — и, по крайней мере, несколько раз выделил вечер, чтобы прочитать базовый вводный пост и попытаться написать каких-нибудь ката на F#. Это не прижилось, потому что я просто чувствовал себя потерянным и не мог воплотить свой опыт использования C# в ощущение даже отдаленного комфорта с F#. Достаточно легко опустить фигурные скобки, немного замяться, чтобы не забыть let вместо var — но как сделать то, что я хотел?


                Тогда я этого не осознавал, но, на мой взгляд, наблюдал потенциальный недостаток в том, как F#-разработчики говорят, описывают и представляют свой язык внешнему миру. Существует обширная база материалов обо всех возможностях и функциональности F#: Algebraic Data Types, Exhaustive Matching, Type Inference и т.д. Есть много статей, посвященных тому, как решать широкий спектр задач с помощью F#. Но, как мне кажется, не хватает чего-то вроде следующего: некоторых указаний о том, как взять то, что вам уже удобно в C#, и перевести их на F#. Так что мне интересно, можем ли мы как-то закрыть этот недостаток.

                Читать дальше →
              • Многорукие бандиты: особенности использования алгоритмов ранжирования


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

                  Поскольку цель — как можно проще объяснить, почему мог не завестись выбранный алгоритм бандитов, я предполагаю, что ты уже в курсе, что это такое, и какими методами их решают. Например, можно посмотреть здесь, ну, или заглянуть на вики.
                  Читать дальше →
                  • +29
                  • 2,8k
                  • 8
                • Все, что вам нужно знать о маршрутизации между страницами Flutter

                  • Перевод

                  В Winkl, когда мы начали играть с анимацией, мы поняли, что переход на страницу может действительно сделать ваш пользовательский интерфейс красивым. Если вы хотите иметь слайд-переход, как IOS вы используете CupertinoPageRoute. Вот и все, ничего больше.

                  Но для пользовательского перехода Flutter предоставляет различные виджеты перехода. Давайте посмотрим, как мы можем их использовать.

                  Читать далее
                • Практика использования спецификации CSS Scroll Snap

                  • Перевод
                  Часто ли у вас возникало желание воспользоваться какой-нибудь возможностью CSS, позволяющей, без лишних усилий, создать элемент-контейнер, поддерживающий прокрутку? CSS, что очень хорошо, даёт нам такую возможность. Я, когда только начинал заниматься фронтенд-разработкой, пользовался для создания прокручиваемых элементов JavaScript-плагинами. Но иногда нужно что-то такое, что позволяет создавать подобные элементы просто и быстро, без привлечения JavaScript. Сделать это можно, воспользовавшись спецификацией CSS Scroll Snap.



                  Здесь я хочу раскрыть основы практического использования этой спецификации. Я сам только недавно разобрался с CSS Scroll Snap, поэтому рассказывать всё это буду, так сказать, «по горячим следам».
                  Читать дальше →
                  • +39
                  • 10,8k
                  • 6
                • Гибриды побеждают или холивары дорого

                    Мотивом для написания данной статьи послужил тот факт, что на habr.com участилось появление материалов маркетингового характера про Apache Kafka. А также тот факт, что из статей складывается впечатление что пишут их немного далекие от реального использования люди — это конечно же только впечатление, но почему-то в большинстве своем статьи обязательно содержат сравнение Apache Kafka с RabbitMQ, причем не в пользу последнего. Что самое интересное — читая подобные статьи управленцы без технического бэкграунда начинают тратить деньги на внутренние исследования, чтобы ведущие разработчики и технические директора выбрали одно из решений. Так как я очень жадный/домовитый, а также так как я сторонник тезиса "В споре НЕ рождается истина" предлагаю вам ознакомится с другим подходом — почти без сравнения разных брокеров.

                    Читать дальше →
                  • Жизнь .NET приложения в Kubernetes

                    • Tutorial

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

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

                    Читать далее
                    • +10
                    • 5,6k
                    • 7
                  • Как перестать впаривать и начать развивать продукт, привлекая новых клиентов

                      Мы привыкли, что менеджеры по продажам должны продавать, а разработчики — разрабатывать. А что, если есть такая магия, которая позволяет разработчикам вшивать «продаваемость» прямо в продукт…



                      Разберем конфликт между Персонами и Работами, узнаем, как с их помощью круто подрасти в продажах и скорости разработки. Для этого поймём, кто такие Персоны и Работы, зачем они нужны, где их брать и как с их помощью достичь искомых целей.
                      Читать дальше →
                    • Как мы автоматизировали выгрузки и другие Ad-hoc задачи аналитика с помощью Zeppelin

                        На момент написания этой статьи в компании Cardsmobile, которая разрабатывает мобильное приложение «Кошелёк», работает 195 человек: 8 аналитиков и 187 потенциальных заказчиков аналитиков. Мы делаем приложение для конечных пользователей, а также работаем с ритейлом, банками, брендами и другими партнерами. Долгое время работа аналитика в Кошельке состояла не только из исследований поведения пользователя, но и из различных выгрузок, типовых анализов для партнеров и прогнозов для потенциальных клиентов. Конечно, дашборды сильно спасали нам жизнь и позволяли всей компании следить за показателями продукта. Но мы всё ещё тратили время на остальную текучку, и с ростом команды (заказчиков) и бизнеса упёрлись: Ad-hoc задач стало слишком много, а исследования, желание развиваться и светлое будущее простаивали в отсутствие у нас времени.

                        Читать дальше →
                      • Делаем печатные ссылки кликабельными с помощью TensorFlow 2 Object Detection API

                        • Перевод

                        Links Detector Cover


                        TL;DR


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


                        С помощью TensorFlow 2 Object Detection API мы научим TensorFlow модель находить позиции и габариты строк https:// в изображениях (например в каждом кадре видео из камеры смартфона).


                        Текст каждой ссылки, расположенный по правую сторону от https://, будет распознан с помощью библиотеки Tesseract. Работа с библиотекой Tesseract не является предметом этой статьи, но вы можете найти полный исходный код приложения в репозитории links-detector repository на GitHub.


                        Запустить Links Detector со смартфона, чтобы увидеть конечный результат.

                        Открыть репозиторий links-detector на GitHub с полным исходным кодом приложения.

                        Вот так в итоге будет выглядеть процесс распознавания печатных ссылок:


                        Читать дальше →
                        • +16
                        • 3,1k
                        • 2