• Пишем простой UDP BitTorrent-трекер на Netty + MongoDB

    Введение


    В это статье освещается работа UDP Tracker Protocol. Все примеры, приведенные в статье, будут на Java с использованием NIO-фреймворка Netty. В качестве БД взята MongoDB.

    Обычно торрент-трекеры работают через протокол HTTP, передавая данные посредством GET-запросов. Работа трекера по протоколу UDP позволяет существенно сократить траффик (более чем в 2 раза), а так же избавиться от ограничения на количество одновременных соединений, которое накладывает протокол TCP.

    Ссылка на UDP-трекер в клиенте может выглядеть так: udp://tracker.openbittorrent.com:80/announce, где на месте announce может быть что угодно (либо вообще ничего). А вот указание порта обязательно, в отличие от HTTP трекера.
    Читать дальше →
  • Почему мы выбрали MongoDB

      Эта статья появилась на свет после прочтения материала «Почему вы никогда не должны использовать MongoDB». Ниже — история о том, как мы постепенно отказались от MySQL и пришли к использованию MongoDB в качестве основного хранилища данных.



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

      Первым делом были сформулированы:
      Требования
    • MongoDB или как разлюбить SQL

        Введение

        Коллеги, при разработке приложений, мы каждый день сталкиваемся с потребностью в гибком хранении информации (обновлении, поиске по ней, и т.д.). Класс продуктов, которые решают этот круг задач, как все мы знаем — Базы данных. Но что это такое в нашем понимании? У многих «база данных» твердо ассоциируется с MySQL, таблицами и SQL-запросами. И это устраивает до определенного момента. Действительно, реляционные базы данных дают массу преимуществ в работе: поскольку данные имеют сильную связанность, не нужно контролировать целостность базы данных. Используя простой под-запрос можно выбрать количество комментариев к каждому посту в блоге. Используя JOIN нетрудно делать сложные связанные выборки и получать данные сразу о нескольких сущностях.
        Читать дальше →
      • Делаем проект на Node.js с использованием Mongoose, Express, Cluster. Часть 1

        Введение


        Добрый день, дорогой %username%! Сегодня мы будем описывать создание каркаса приложение по типу MVC на Node.js с использованием кластеров, Express.js и mongoose.


        Задача — поднять сервер который имеет несколько особенностей.


        • Работает в несколько асинхронных потоков.
        • Сессионная информация будет в общей для всех потоков.
        • Поддержка HTTPS.
        • Авторизация.
        • Легко масштабируем.

        Статья написана новичком для новичков. Буду рад любым замечаниям!

        Читать дальше →
      • Сложности нагрузочного тестирования – интервью с Владимиром Ситниковым (Netcracker) и Андреем Дмитриевым



          В преддверии конференции Heisenbug мы поговорили о тонкостях нагрузочного тестирования с Владимиром vladimirsitnikov Ситниковым (уже 10 лет работает над производительностью и масштабируемостью Netсracker OSS — ПО, используемого операторами связи для автоматизации процессов управления сетью и сетевым оборудованием, увлекается вопросами производительности Java и Oracle Database) и Андреем real_ales Дмитриевым (java-программист, разрабатывал JDK в компании Sun и Oracle, руководил командой разработки под Android в QuickOffice. В компании Netcracker руководил группой, занимающейся нагрузочным тестированием OSS-платформы (Java, OracleDB, JMeter, etc.)).

          JUG.ru: Расскажите, пожалуйста, о своей работе и той роли, которую играет в ней нагрузочное тестирование.
          Читать дальше →
          • +30
          • 10.4k
          • 6
        • Паттерн Стратегия на JavaScript

            Ранее я уже публиковал перевод статьи с таким же названием. И под ней товарищ aTei оставил комментарий:


            По-моему кое-чего не хватает в этой статье и в статье в википедие — примера в стиле «Было плохо — стало хорошо». Сразу получается «хорошо» и не достаточно ясно, что это действительно хорошо. Буду благодарен за такой пример.

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


            Крохи теории встречаются где-то по тексту. Но большая часть статьи посвящена практическим способам применения этого паттерна и вариантам его применения избежать.

            Читать дальше →
          • Redux-form. Когда работать с формами просто

            • Tutorial
            Думаю, большинство знает схему работы библиотеки redux: view → action → middlewares → reducers → state → view

            Подробности здесь.

            Хочу представить вашему вниманию библиотеку, которая работает по тому же принципу для форм.

            image
            Читать дальше →
          • Строим DSL на C# при помощи парсер-комбинаторов

            • Translation

            Перевод статьи Николаса Блумхардта, известного .NET разработчика, автора IoC/DI контейнера Autofac. В этой статье Николас показывает на реальном примере как с наименьшими усилиями написать парсер предметно-ориентированного языка программирования с помощью Sprache, библиотеки парсер-комбинаторов.


            Наш текущий проект включает в себя небольшой процесс подачи и утверждения заявок на создание учетных записей пользователей. Это хороший пример для обсуждения предметно-ориентированных языков и Sprache. Сейчас я опишу некоторые требования.

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

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

            Читать дальше →
          • Наследование грамматик в Sprache (или еще один настраиваемый калькулятор выражений для .NET)

            • Tutorial
            Статья демонстрирует технику создания парсеров с использованием наследования грамматик. Наследование позволяет описывать новые грамматики на основе уже существующих путем добавления новых правил или переопределения унаследованных, что существенно упрощает реализацию новых парсеров. Изменения в базовой грамматике автоматически становятся доступными во всех порожденных грамматиках. Основная область применения такой техники — поддержка нескольких диалектов или версий языков.
            Читать дальше →
            • +17
            • 9.6k
            • 2
          • Создание материалов для Unity в Substance Designer

            • Translation

            Ужасные мучения


            Текстурирование и создание игровых материалов всегда были интересной… и мучительной работой одновременно. До перехода на Substance Designer я использовал для создания всех нужных карт Photoshop и xNormal. Приходилось много раз переключаться между двумя этими приложениями, и это надоедало. Теперь я избавился от этой проблемы.

            Substance Designer (SD) — это программное обеспечение, позволяющее создавать материалы и текстуры «на лету». В нём используется удивительно простая система узлов. Я художник, и обычно меня очень пугала работа с узлами (и вообще всем, кроме кисти). Честно говоря, когда я впервые увидел SD, то слегка вздрогнул. К счастью, у авторов программы есть видео, демонстрирующие её возможности. Они дают такого мотивирующего «пинка», что вам приходится совершить «прыжок веры».
            Читать дальше →
            • +22
            • 22.4k
            • 6
          • Теория категорий на JavaScript. Часть 1. Категория множеств

            • Tutorial


            Абстракция – это одна из основных техник в ИТ. Любой язык программирования или моделирования, любая парадигма программирования (процедурная, функциональная, ООП, …) дают ответ на вопрос, как и от чего нужно абстрагироваться. Причём, адепты каждого подхода предлагают какой-то свой вариант абстракции.

            Если вы хотите увидеть истинную, универсальную абстракцию, то вступайте в нашу… изучайте теорию категорий. В статье на примере категории множеств с картинками и JavaScript-кодом объясняются самые базовые понятия теории категорий: пределы, универсальное свойство. Рассматривается вычислительный аспект теории категорий.

            Также немного говорится про классы, примеси и смеси в JavaScript.

            Примеры из статьи можно посмотреть тут.
            Читать дальше →
          • Лямбды и анонимные классы: кто больше жрёт

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

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

              • Translation
              В этом эссе описана схема работы Git. Предполагается, что вы знакомы с Git достаточно, чтобы использовать его для контроля версий своих проектов.

              Эссе концентрируется на структуре графа, на которой основан Git, и на том, как свойства этого графа определяют поведение Git. Изучая основы, вы строите своё представление на достоверной информации, а не на гипотезах, полученных из экспериментов с API. Правильная модель позволит вам лучше понять, что сделал Git, что он делает и что он собирается сделать.

              Текст разбит на серии команд, работающих с единым проектом. Иногда встречаются наблюдения по поводу структуры данных графа, лежащего в основе Git. Наблюдения иллюстрируют свойство графа и поведение, основанное на нём.

              После прочтения для ещё более глубокого погружения можно обратиться к обильно комментируемому исходному коду моей реализации Git на JavaScript.
              Читать дальше →
            • Система сборки Xcode: advanced tutorial

              • Tutorial
              image
              Конфигурация проекта в Xcode выглядит, как пульт управления космическим кораблем. Зачастую люди понимают, как работает система сборки, но путают термины. В этой статье мы пройдемся по структуре проекта, таргетам, настройкам конфигураций и воркспейсам. Поехали!
              Читать дальше →
              • +23
              • 23.8k
              • 3
            • История языков программирования: C# — впереди планеты всей



                С# живет по принципу «всякая сущность есть объект». Его причисляют к объектно-ориентированным, а точнее объектным, языкам программирования. «Язык основан на строгой компонентной архитектуре и реализует передовые механизмы обеспечения безопасности кода» – так принято характеризовать его. Однако скептики сомневаются как минимум в его безопасности.

                Сторонники C# называют его самым мультипарадигменным, универсальным, продвинутым и удобным в использовании языком программирования. Учитывая тот факт, что за ним стоит платформа Microsoft .NET, число таких сторонников достаточно велико.
                Читать дальше →
              • О производительности именованных каналов в многопроцессных приложениях

                  В статье об особенностях новой версии Visual Studio одним из главных нововведений (с моей точки зрения) оказалось разделение ранее монолитного процесса среды разработки (devenv.exe) на компоненты, которые будут работать в отдельных процессах. Это уже сделано для системы контроля версий (переезд с libgit на git.exe) и некоторых плагинов, а в будущем и другие части VS будут вынесены в подпроцессы. В связи с этим в комментариях возник вопрос: «А не замедлит ли это работу, ведь обмен данными между процессами требует использования IPC (Inter Process Communications)?»

                  Нет, не замедлит. И вот почему.
                  Читать дальше →
                  • +18
                  • 6.2k
                  • 7
                • Node.js 7.0.0 зарелизился. Встречайте async/await без babel

                    File:Node.js logo 2015.svg

                    7-я нода зарелизилась, ура! Что нового:

                    • Движок V8 обновлён до версии 5.4.500.36, в которой обеспечена поддержка 98% возможностей JavaScript, определённых в спецификации ES2015 (ES6) и, частично, будущим стандартом ES2017.
                    • Отмечается новый парсер URL, соответствующий стандарту оформления URL, подготовленному сообществом WHATWG.
                    • Доработана работа с Buffer, Child Process, Cluster, файловой системой, промисами
                    • Полный список изминений

                    Для меня это долгожданный релиз, так как появилась возможность изпользовать конструкцию async/await без транспайлера babel. Включается это все ключом --harmony.

                    Теперь можно без babel так:
                    Читать дальше →
                  • Как мы попробовали DDD, CQRS и Event Sourcing и какие выводы сделали

                      Вот уже около трех лет я использую в работе принципы Spec By Example, Domain Driven Design и CQRS. За это время накопился опыт практического применения этих практик на платформе .NET. В статье я хочу поделиться нашим опытом и выводами, которые могут быть полезными командам, желающим использовать эти подходы в разработке.

                      Факты, цифры, код
                    • Анатомия KD-Деревьев

                      image

                      Эта статья полностью посвящена KD-Деревьям: я описываю тонкости построения KD-Деревьев, тонкости реализации функций поиска 'ближнего' в KD-Дереве, а также возможные 'подводные камни', которые возникают в процессе решения тех или иных подзадач алгоритма. Дабы не запутывать читателя терминологией(плоскость, гипер-плоскость и т.п), да и вообще для удобства, полагается что основное действо разворачивается в трехмерном пространстве. Однако же, где нужно я отмечаю, что мы работаем в пространстве другой размерности. По моему мнению статья будет полезна как программистам, так и всем тем, кто заинтересован в изучении алгоритмов: кто-то найдет для себя что-то новое, а кто-то просто повторит материал и возможно, в комментариях дополнит статью. В любом случае, прошу всех под кат.
                      Читать дальше →
                    • DSL для регулярных выражений на Kotlin

                      • Tutorial


                      Всем привет!


                      Эта статья про реализацию одного конкретного DSL (domain specific language, предметно-ориентированный язык) для регулярных выражений средствами Kotlin, но при этом она вполне может дать общее представление, о том, как написать свой DSL на Kotlin и что обычно будет делать "под капотом" любой другой DSL, использующий те же возможности языка.


                      Многие уже используют Kotlin или хотя бы пробовали это делать, да и остальные вполне могли слышать о том, что Kotlin располагает к написанию изящных DSL, чему есть блестящие примеры — Anko и kotlinx.html.


                      Конечно же, для регулярных выражений подобное уже делали (и ещё: на Java, на Scala, на C# — реализаций много, похоже, это распространённое развлечение). Но если хочется попрактиковаться или попробовать DSL-ориентированные языковые возможности Kotlin, то добро пожаловать под кат.

                      Читать дальше →
                      • +13
                      • 6.4k
                      • 9