• Используем Cake для сборки C# кода

    Всем привет! Я хочу рассказать о таком инструменте как Cake (C# Make).


    Cake build


    Итак, что такое Cake?


    Cake — это кроссплатформенная система сборки, использующая DSL с синтаксисом C# для того, что осуществлять в процессе сборки такие вещи, как сборка бинарников из исходных кодов, копирование файлов, создание/очищение/удаление папок, архивация артефактов, упаковка nuget-пакетов, прогоны юнит-тестов и многое другое. Так же Cake имеет развитую систему аддонов (просто C# классы, зачастую упакованные в nuget). Стоит отметить, что большое количество полезных функций уже встроены в Cake, а еще больше, практически на все случаи жизни, написаны сообществом и довольно успешно распространяются.

    Читать дальше →
    • +18
    • 13.5k
    • 6
  • Архитектура клиентского приложения (механизмы структуризации)

      История первая


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

      image

      Игровая компания немца разрабатывала 3 вида игр:

      1. Флэш-игры для мобильных телефонов с поддержкой технологии J2ME.
      2. Обучающие игры для портативной игровой приставки Nintendo DS. Заказчиками этих игр были европейские издатели, а покупателями — родители, чьи чада имели проблемы с обучением по математике, английскому или немецкому языкам. Подразделение игр для Nintendo DS выпустило много игр. Хотя они и не стали AAA-тайтлами, но окупили свою разработку и принесли небольшую прибыль.
      3. Игры для платформы Nintendo Wii.

      В последней команде был я. Команда должна была разработать игру для маленьких девочек по детскому бренду. Бренд был достаточно известен в Германии (это был основной рынок) и в ряде других европейских стран: во Франции и в Великобритании.

      Читать дальше →
      • +15
      • 10.8k
      • 6
    • Синхронизация состояний в многопользовательских играх

      • Translation
      image

      Проблема многопользовательских игр


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

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

      Обычно программа игры должна симулировать следующее:

      изменения в окружении с учётом времени и вводимых игроками данных.

      Игра — это программа, хранящая состояние, поэтому она зависит от времени (реального или логического). Например, PACMAN симулирует окружение, в котором постоянно перемещаются призраки.

      Многопользовательская игра не является исключением, однако из-за взаимодействия игроков её сложность намного выше.
      Читать дальше →
    • Обратная сторона авиабилета. Как Туту.ру помогает подобрать оптимальный тариф

        image


        Весной 2014 года были приняты поправки к Воздушному кодексу РФ, позволяющие авиакомпаниям заключать договор на перевозку без возврата платы за проезд в случае расторжения договора. Иными словами, на рынке авиаперевозок появились невозвратные тарифы. До этих изменений авиакомпании могли лишь удерживать штраф в размере не более 25% от стоимости билета, если пассажир сдавал билет позднее, чем за сутки до вылета. Новые поправки позволили авиакомпаниям предложить пассажирам более дешевые, но невозвратные билеты.


        В это же время появились бюджетные «безбагажные тарифы». На самом деле, полностью безбагажными их назвать нельзя: по закону РФ, пассажир имеет право провезти с собой до 10 кг личных вещей. И здесь есть интересный момент: закон не регулирует, каким образом пассажир перевозит эти 10 кг — в салоне самолета или в багажном отсеке. Как известно, в салон нельзя брать множество вещей: например, жидкость более 100 мл, маникюрные ножницы, пилочку и некоторые гаджеты. Даже если тариф включает провоз багажа, каждая авиакомпания сама определяет максимальный вес и размеры багажа и ручной клади на одного пассажира.


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

        Читать дальше →
      • Для чего нужен Apache Ignite / GridGain, на примере .NET & C#

          В последнее время имена GridGain и Apache Ignite нередко мелькают в интернетах. Однако, судя по комментариям (например, здесь), мало кто понимает, что же это за продукт и с чем его едят.


          В этой статье я попытаюсь доступным языком объяснить, и на примерах кода показать, что умеет Apache Ignite.


          Apache Ignite Logo


          Читать дальше →
        • GameDev с нуля: Как выйти из хаоса и начать работать

            Вот и настал этот день, когда мы представляем последнюю статью из цикла «GameDev с нуля». В ней тимлид и геймдизайнер из OVIVO рассказывает о структурном подходе к разработке игрового проекта.


            Читать дальше →
          • Как стать веб-разработчиком в 2017 году — план действий

            Светлана Шаповалова, редактор «Нетологии» адаптировала заметку Quincy Larson, в которой он представил три возможных пути становления веб-разработчика: для фронтенда, бекэнда и DevOps.


            Читать дальше →
          • 12 инструментов для отладки .NET-приложений по производительности и по памяти

              В недавнем интервью с Джоном Скитом мы пришли к выводу, что профессиональная работа с любой технологией подразумевает умение диагностировать проблемы и понимать, как ваши приложения работают под капотом. Вдогонку к тому разговору, я узнал у Саши goldshtn Гольдштейна, одного из лучших в мире экспертов по производительности .NET, автора книги «Pro .NET Performance», на какие инструменты следует обратить внимание .NET-разработчикам.

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


              Читать дальше →
              • +37
              • 16.5k
              • 8
            • Внутренние механизмы ТСР, влияющие на скорость загрузки: часть 2

              • Translation


              В первой части мы разобрали «тройное рукопожатие» TCP и некоторые технологии — TCP Fast Open, контроль потока и перегрузкой и масштабирование окна. Во второй части узнаем, что такое TCP Slow Start, как оптимизировать скорость передачи данных и увеличить начальное окно, а также соберем все рекомендации по оптимизации TCP/IP стека воедино.
              Читать дальше →
              • +14
              • 18.8k
              • 6
            • Concurrency структуры в .net. ConcurrentQueue изнутри

                ConcurrentQueue можно отнести к lock-free конкурентным структурам данных. В ее реализации нет блокировок (lock, Mutex…) и реализована она с использованием:
                — классической функции CompareExchange;
                — SpinWait
                — volatile (используется как memory-barrier)
                В основу ConcurrentQueue заложена структура ring-buffer (кольцевой буфер).
                Читать дальше →
                • +12
                • 22.4k
                • 4
              • Tarantool как основное хранилище данных для серверных приложений, написанных на .NET

                  image


                  Привет, Хабр! Сегодня хочу поделиться с вами текстовой версией доклада, представленного на Tarantool Meetup второго марта 2017-го года в Mail.Ru Group с поправкой на то, что прошёл уже месяц, и кое-что из обещанного уже было реализовано, поэтому текст будет интересен даже тем, кто видел выступление. Я работаю в компании eVote, которая разрабатывает сервис онлайн-опросов. Мы активно применяем Windows и .NET-технологии в наших продуктах, и в этом посте я расскажу про то, как мы добавили к стеку наших технологий СУБД Tarantool.


                  Большое спасибо коллегам, друзьям и сотрудникам компании Mail.Ru Group, которые помогали написать эту статью.

                  Читать дальше →
                • Инструкция по публикации iOS-приложения в App Store

                  • Tutorial
                  Однажды менеджеры Лайв Тайпинг подумали: «Как хорошо было бы иметь инструкцию-чеклист, чтобы ничего не забыть перед публикацией приложения в стор. С ней можно перестать носить всё в голове и не объяснять вновь пришедшим менеджерам, что к чему, а просто скинуть гуглдок». Подумали и написали — для себя. Но потом поняли, что нехорошо скрывать полезную информацию от общественности. Поэтому мы надеемся, что инструкция поможет менеджерам всех остальных студий так же, как помогает нам.

                  Тема этой заметки — публикация приложения в App Store. Чуть позже мы опишем порядок действий для публикации в Google Play.

                  Что же нужно сделать PM`y в ходе публикации:

                  1. создать аккаунт в App Store для заказчика, если у заказчика его нет, или предложить
                  2. опубликовать приложение с нашего аккаунта;
                  3. подготовить маркетинговые материалы (иконка, скриншоты, текст, видео для предпросмотра приложения);
                  4. приложить к сборке сертификат цифровой подписи;
                  5. настроить оплату за пользование приложения;
                  6. Отправить сборку в App Store.

                  Идём под кат и разбираем по порядку.


                  Читать дальше →
                • Java и Docker: это должен знать каждый

                  • Translation
                  Многие разработчики знают, или должны знать, что Java-процессы, исполняемые внутри контейнеров Linux (среди них — docker, rkt, runC, lxcfs, и другие), ведут себя не так, как ожидается. Происходит это тогда, когда механизму JVM ergonomics позволяют самостоятельно задавать параметры сборщика мусора и компилятора, управлять размером кучи. Когда Java-приложение запускают без ключа, указывающего на необходимость настройки параметров, скажем, командой java -jar myapplication-fat.jar, JVM самостоятельно настроит некоторые параметры, стремясь обеспечить наилучшую производительность приложения.

                  В этом материале мы поговорим о том, что необходимо знать разработчику перед тем, как он займётся упаковкой своих приложений, написанных на Java, в контейнеры Linux.
                  Читать дальше →
                • Современная JWT авторизация для современного Node.js фреймворка Koa

                  image
                  Задача авторизации возникает практически в каждом Node.js проекте, однако, чтобы ее правильно настроить, необходимо подключить большое количество модулей и собрать кучу информации из разных источников.

                  В этой статье я опишу полноценное решение по авторизации на основе JSON Web Token (JWT) для Node.js и Koa с хранением хэшей паролей в MongoDB. От читателя ожидаются базовые знания Node.js и принципов работы с MongoDB через Mongoose.
                  Читать дальше →
                • Как с помощью maven работать с библиотеками, которых в maven нет

                  • Tutorial

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


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


                  Эта статья для тех, кто только начинает осваивать java.


                  image


                  В моей предыдущей статье было сказано, что maven сам скачает все указанные в pom.xml зависимости. А вот что будет, если он какую-нибудь зависимость не найдёт? В таком случае maven скажет, что зависимость не обнаружена и прервёт процесс сборки с ошибкой. Что делать в этом случае?

                  Читать дальше →
                • Использование Tarantool в .NET-проекте на Windows

                  • Tutorial

                  В последнее время на Хабре появляется достаточно много статей про Tarantool — базу данных и сервер приложений, который используется в Mail.Ru Group, Avito, Yota на разных высоконагруженных проектах. И вот, когда в маленьком стартапе, который я иногда консультирую, возникла необходимость разделения прекрасного, но, к сожалению, монолитного приложения на микросервисы, я подумал: а чем мы хуже других компаний? — и решил посмотреть в сторону Tarantool. Однако, в отличие от большинства компаний, где используется Tarantool, в нашем случае разработка проекта ведётся в Visual Studio на Windows. Предполагается, что даже с переходом на микросервисную архитектуру большинство микросервисов будет написано на языке C#. А Tarantool… Стоит зайти на официальный сайт — и сразу понимаешь: Tarantool даже установить на Windows проблематично, так как на эту операционную систему он не портирован. Как я боролся с такими сложностями, для какого именно микросервиса выбрал Tarantool и как вы можете использовать Tarantool в своих .NET-проектах, я расскажу в данной статье. А пока спойлер — практически все трудности преодолимы, и мой опыт можно без сомнений назвать положительным. Например, на то, чтобы скачать и запустить Tarantool, а потом сделать к нему запрос из кода на языке C#, у меня ушло менее десяти минут. И я покажу вам, как это сделать!


                  image


                  Данная статья представляет собой туториал, описывающий работу с Tarantool как таковую. Здесь нет описания проекта, построенного на Tarantool, или сравнения Tarantool с другими продуктами (статей на эту тему и так уже написано достаточно много). Материал родился как попытка ответить на вопрос: а что бы я хотел прочитать, когда только начинал работать с Tarantool. Но вначале немного расскажу, для чего мы, собственно, Tarantool применяем в реальной жизни.

                  Читать дальше →
                • Как работать с JIT

                  • Translation

                  enter image description here


                  В некоторых внутренних системах для быстрого поиска по большому битовому массиву мы в Badoo используем JIT. Это очень интересная и не самая известная тема. И, чтобы исправить такую досадную ситуацию, я перевел полезную статью Элая Бендерски о том, что такое JIT и как его использовать.

                  Читать дальше →
                  • +49
                  • 12.5k
                  • 8
                • Tarantool: Хороший, Плохой, Злой

                  • Tutorial
                  image Многие слышали о NoSQL базе данных Tarantool, знают о том, что она умеет хранить данные в памяти, очень быстро их обрабатывает и обладает высокой производительностью. Тарантул был написан серьезными ребятами, которые обслуживают сервисы с сотнями тысяч запросов в секунду.

                  Система кажется сложной. Несмотря на российские корни, изначально даже не было документации на русском языке. Чем же может помочь этот мощный инструмент обычным парням — программистам и начинающим разработчикам? Остальные могут сразу посмотреть результат

                  Попробуем написать простой занимательный сервис, способный выдержать большую нагрузку. И никакого SQL!
                  Начнем!
                • Исследование связности в мозге на основе электрофизиологических данных. Лекция в Яндексе

                    Раз уж идеология нейросетей в IT строилась с оглядкой на реальный прототип, о нем тоже иногда полезно вспомнить. Предлагаем посмотреть или почитать лекцию Ильи Захарова, выпускника кафедры психофизиологии факультета психологии МГУ. Илья объясняет, как можно анализировать сети в мозге, какие данные для этого нужны, какие подводные камни могут возникать при анализе, а главное — что нового позволили узнать подобные исследования.


                    Под катом — расшифровка и большинство слайдов.
                    Читать дальше →
                    • +48
                    • 12.5k
                    • 7