• Интеграция Cake и TeamCity

    • Перевод

    Cake — замечательный инструмент для создания конвеера доставки для ваших приложений. Я люблю его, поскольку он позволяет мне писать этот конвеер на языке C#, который я знаю хорошо. Прекрасным свойством Cake, PSake и дургих подобных фреймворков является то, что они создают скрипт, который можно выполнять как на локальной машине разработчика, так и на CI серверах. Здесь я объясню, как организовать взаимодействие скрипта Cake с TeamCity.

    Читать дальше →
  • .NET — локализация без боли. (N)gettext + poedit

    • Tutorial


    Создавая новый проект, мне приходилось использовать либо *.resx для WinForms, либо I2Localization для Unity, либо другие решения для локализации приложений. Все эти решения похожи тем, что приходится придумывать ключ-локализации, вставлять его в код и в словарь. Поначалу все хорошо, но со временем этот процесс начинает раздражать. Вместе с тем, смотря на ключ в коде не всегда понятно о чем речь.

    О ситуации когда нужно добавить локализацию в большой проект где её вообще не было, я даже говорить не буду как это сложно.

    Не знаю почему, но оказывается существует уже давно такое готовое решение как gnu/gettext. Расспрашивая своих знакомых и коллег (тех кто работает с .NET), большинство даже и не слышал о таком. Поэтому решил поделиться с этим удобным инструментом.

    Принцип прост. Вы пишите код со строками на английском языке, запускаете утилиту, которая сканирует исходники и предоставляет вам возможность перевода. Никаких ключей придумывать не надо. Текст на английском и есть ключ.
    Читать дальше →
  • Сущности в DDD-стиле с Entity Framework Core

    • Перевод
    • Tutorial
    Эта статья о том, как применить принципы Domain-Driven Design (DDD) к классам, отображаемым Entity Framework Core (EF Core) на базу данных, и почему это может быть полезно.

    TLDR


    В DDD-подходе есть множество преимуществ, но главное – DDD переносит код операций создания / изменения внутрь класса сущности. Это значительно понижает шансы неверного понимания / интерпретации разработчиком правил создания, инициации и использования экземпляров классов.
    Читать дальше →
  • AI в игре Hase und Igel: minimax на троих


      После настоящего бума настольных игр конца 00-х в семье осталась несколько коробок с играми. Одна из них — игра “Заяц и Ёж” в оригинальной немецкой версии. Игра для нескольких игроков, в которой элемент случайности сведен к минимуму, а побеждает трезвый расчет и способность играющего “заглядывать” вперед на несколько шагов.

      Мои частые поражения в игре привели меня к мысли написать компьютерный “интеллект” для выбора наилучшего хода. Интеллект, в идеале, способный сразиться с гроссмейстером Зайца и Ежа (а что, чай, не шахматы, игра попроще будет). Далее в статье идет описание процесса разработки, логики AI и ссылка на исходники.
      Читать дальше →
    • Как мы удвоили скорость работы с Float в Mono

      • Перевод

      Мой друг Aras недавно написал один и тот же трассировщик лучей на разных языках, в том числе на C++, C# и компиляторе Unity Burst. Разумеется, естественно ожидать, что C# будет медленнее, чем C++, но мне показалось интересным, что Mono настолько медленнее .NET Core.

      Опубликованные им показатели были плохими:

      • C# (.NET Core): Mac 17.5 Mray/s,
      • C# (Unity, Mono): Mac 4.6 Mray/s,
      • C# (Unity, IL2CPP): Mac 17.1 Mray/s

      Я решил посмотреть, что происходит, и задокументировать места, которые можно улучшить.

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

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

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

      Результаты на моём домашнем iMac для Mono и .NET Core были следующими:

      Рабочая среда Результаты, MRay/sec
      .NET Core 2.1.4, отладочная сборка dotnet run 3.6
      .NET Core 2.1.4, релизная сборка dotnet run -c Release 21.7
      Ванильный Mono, mono Maths.exe 6.6
      Ванильный Mono с LLVM и float32 15.5
      Читать дальше →
    • Как правильно работать с исключениями в DDD

        image

        В рамках недавно прошедшей конференции DotNext 2018 состоялся BoF по Domain Driven Design. На нем был затронут вопрос работы с исключениями, который вызвал жаркий спор, но не получил развернутой дискуссии, поскольку не являлся основной темой.

        Также, изучая множество ресурсов, начиная от вопросов на stackoverflow и заканчивая платными курсами по архитектуре, можно наблюдать, что в IT-сообществе сложилось неоднозначное отношение к исключениям и к тому, как их использовать.

        Наиболее часто упоминается, что с использованием исключений легко построить поток исполнения, имеющий семантику оператора goto, что плохо сказывается на читабельности кода.

        Есть разные мнения о том, стоит ли создавать собственные типы исключений или использовать стандартные, поставляемые в .NET.

        Кто-то делает валидацию на исключениях, а кто-то повсеместно использует монаду Result. Справедливо, что Result позволяет по сигнатуре метода понять, возможно ли не только успешное выполнение. Но не менее справедливо, что в императивных языках (к которым относится C#) повсеместное использование Result приводит к плохо читаемому коду, засыпанному конструкциями языка настолько, что с трудом можно разглядеть исходный сценарий.

        В данной статье я расскажу о практиках, принятых в нашей команде (если кратко — мы используем все подходы и ни один из них не является догмой).

        Речь пойдет об enterprise-приложении, построенном на базе ASP.NET MVC+WebAPI. Приложение построено по луковой архитектуре, общается с базой данных и брокером сообщений. Используется структурированное логирование в ELK-стек и настроен мониторинг при помощи Grafana.
        Читать дальше →
      • Расширение редактора Unity через Editor Window, Scriptable Object и Custom Editor

          Всем привет! Меня зовут Гриша, и я основатель CGDevs. Сегодня хочется поговорить про расширения редактора и рассказать про один из моих проектов, который я решил выложить в OpenSource.

          Юнити — прекрасный инструмент, но в нём есть небольшая проблема. Новичку, чтобы сделать простую комнату (коробку с окнами), необходимо либо осваивать 3д моделирование, либо пытаться что-то собрать из квадов. Недавно стал полностью бесплатным ProBuilder, но это так же упрощённый пакет 3д моделирования. Хотелось простой инструмент, который позволит быстро создавать окружения вроде комнат со окнами и правильными UV при этом. Достаточно давно я разработал один плагин для Unity, который позволяет быстро прототипировать окружения вроде квартир и комнат с помощью 2д чертежа, и сейчас решил выложить его в OpenSource. На его примере мы разберём, каким образом можно расширять редактор и какие инструменты для этого существуют. Если вам интересно – добро пожаловать под кат. Ссылка на проект в конце, как всегда, прилагается.


          Читать дальше →
          • +20
          • 3,8k
          • 2
        • Самые быстрые отчёты на диком западе. И горстка багов в придачу…

            Picture 3

            Не только Microsoft в последнее время выкладывает код собственных проектов в открытый доступ — другие компании тоже следуют этой тенденции. Для нас же — разработчиков PVS-Studio — это отличный способ ещё раз протестировать анализатор, посмотреть, что интересного он сможет найти, и сообщить об этом авторам проекта. Сегодня заглядываем внутрь проекта компании Fast Reports.
            Читать дальше →
            • +33
            • 5,6k
            • 6
          • Обзор самых интересных докладов DotNext 2018: версия EastBanc Technologies

              Привет, хабровчане!

              Мы вернулись с конференции для .NET-разработчиков DotNext и честно делимся впечатлениями про самые запомнившиеся доклады. Надеемся, наш отзыв пригодится тем, кто будет смотреть видеозаписи выступлений.

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


              Читать дальше →
            • Запускаем контейнер с юнит тестами в Azure DevOps (VSTS)

              • Tutorial
              С приходом .Net Core у нас появилась прекрасная возможность не только запускать наш код на разных ОС, но и тестировать его на разных ОС. А что может быть лучше Docker при работе с разными ОС?
              Читать дальше →

            Самое читаемое