• Практика функционального программирования на JavaScript с использованием Ramda

    • Translation
    Мы в rangle.io давно увлекаемся функциональным программированием, и уже опробовали Underscore и Lodash. Но недавно мы наткнулись на библиотеку Ramda, которая на первый взгляд похожа на Underscore, но отличается в небольшой, но важной области. Ramda предлагает примерно тот же набор методов, что и Underscore, но так организовывает работу с ними, что функциональная композиция становится легче.

    Разница между Ramda и Underscore – в двух ключевых местах – каррирование и композиция.
    Читать дальше →
  • Анонс MongoDB 3

    Как-то незаметно прошел анонс новой версии MongoDB. Изменение номера версии с 2 на 3 указывает на значительные изменения внутри базы данных. Разработчики заявляют о значительном увеличении производительности и улучшении маштабируемости. Немного подробнее под катом.
    image
    Читать дальше →
  • Введение в разработку слайд-шоу на JavaScript

    • Translation
    В этой статье мы опишем основные принципы построения слайд-шоу на JavaScript, то, из чего они строятся (HTML, CSS, JavaScript) и техники, которые используются при их создании.

    JS-код будет представлен в двух видах – ванильном и jQuery. Это сделано специально, чтобы подчеркнуть: в современных браузерах даже простой JS можно прекрасно использовать, особенно комбинируя его с анимациями и переходами CSS. jQuery хорош, если нам не хочется волноваться насчёт несовместимостей браузеров или использовать более простой API. Предоставленный код преследует лишь в демонстрационные цели.

    В примерах с ванильным JS я использую простейший метод инициализации объектов, init(). Этот метод занимается вызовом нужного кода для создания экземпляра объекта через new. В этой ветке на Stack Overflow всё объясняется подробнее. Почему объекты, а не функции? Для ответа на этот вопрос понадобилась бы отдельная статья – но, в общем, просто чтобы код был более организованным и простым для повторного использования.
    Читать дальше →
    • +11
    • 69k
    • 6
  • Доказательство некорректности алгоритма сортировки Android, Java и Python

    • Translation
    Тим Петерс разработал гибридный алгоритм сортировки Timsort в 2002 году. Алгоритм представляет собой искусную комбинацию идей сортировки слиянием и сортировки вставками и заточен на эффективную работу с реальными данными. Впервые Timsort был разработан для Python, но затем Джошуа Блох (создатель коллекций Java, именно он, кстати, отметил, что большинство алгоритмов двоичного поиска содержит ошибку) портировал его на Java (методы java.util.Collections.sort и java.util.Arrays.sort). Сегодня Timsort является стандартным алгоритмом сортировки в Android SDK, Oracle JDK и OpenJDK. Учитывая популярность этих платформ, можно сделать вывод, что счёт компьютеров, облачных сервисов и мобильных устройств, использующих Timsort для сортировки, идёт на миллиарды.

    Но вернёмся в 2015-й год. После того как мы успешно верифицировали Java-реализации сортировки подсчётом и поразрядной сортировки (J. Autom. Reasoning 53(2), 129-139) нашим инструментом формальной верификации под названием KeY, мы искали новый объект для изучения. Timsort казался подходящей кандидатурой, потому что он довольно сложный и широко используется. К сожалению, мы не смогли доказать его корректность. Причина этого при детальном рассмотрении оказалась проста: в реализации Timsort есть баг. Наши теоретические исследования указали нам, где искать ошибку (любопытно, что ошибка была уже в питоновской реализации). В данной статье рассказывается, как мы этого добились.

    Статья с более полным анализом, а также несколько тестовых программ доступны на нашем сайте.
    Читать дальше →
  • UI для Ensemble Workflow на Angular



      Те, кто знаком с платформой для интеграции и разработки приложений InterSystems Ensemble, знают, что такое подсистема Ensemble Workflow и как она бывает полезна для автоматизации взаимодействия людей. Для тех же, кто не знаком с Ensemble (и/или Workflow), я кратко опишу её возможности (остальные могут пропустить эту часть и узнать, как они могут использовать пользовательский интерфейс Workflow на Angular.js).
      Читать дальше →
      • +11
      • 6.1k
      • 2
    • Новый взгляд на хранение файлов и ссылок

        Привет, хабр! Сегодня мы хотим кратко представить вам проект над которым мы работали последние 10 месяцев. Нас в команде 4 человека и мы, используя ruby и js, создали Staply — приложение, где удобно работать вместе и хранить всё, что угодно.



        Предисловие


        На текущий момент существует огромное количество приложений для хранения и обмена данными:
        Читать дальше →
      • Ещё один пост о сборке front-end проекта

        • Tutorial
        Js app starter

        Я потратил прилично времени на структуризацию и автоматизацию сборки фронта. Задача это интересная и стоит того, чтобы о ней рассказать.

        Что умеет делать сборщик:
        • Собирать front-end проект для development & production окружений.
        • Собирать по несколько js/css бандлов на проект.
        • Использовать стиль CommonJS модулей в браузере.
        • Использовать ES6-синтаксис.
        • Спрайты, картинки и многое другое.

        Читать дальше →
      • Взаимодействие PHP и Erlang посредством RabbitMQ

        Вступление


        Чем больше программируешь на php, тем чаще попадаются задачи, для решения которых нужен демон на сервере. Да, конечно существует phpDaemon, cron или костыли, которые при каждом n-ом запуске скрипта вызывают какой-то определенный набор операций. Но когда мы говорим о проектах с нагрузкой больше, чем на обычном сайте, мы начинаем расстраиваться.

        В одном из проектов для решения такой задачи мы решили использовать связку php+RabbitMQ+erlang. На php уже был написан необходимый функционал, нам надо было лишь разнести вызовы по времени и на разные машинки. Конкретно задача звучала так: написать парсер пользователей с внешнего хранилища данных и, самое главное, поддерживать актуальность данных, а в случае их изменения, посылать уведомления.
        Читать дальше →
      • Тестируем распределение контента в GlusterFS

          Нашел несколько статей на хабре о базовой установке и настройке GlusterFS, но не нашел ничего о типах распределения контента, которые он поддерживает и с которыми я долго игрался. О чем и пойдет речь в данной статье.
          image
          Читать дальше →
        • Как JavaScript Grid работает с протоколом OData

            В прошлой статье мы упоминали, что:
            В настоящее время существует большое количество библиотек, поддерживающих протокол OData, и каждый день появляются новые. В частности, с OData работают такие JavaScript библиотеки, как Kendo UI, DevExtreme Web, Syncfusion HTML5 controls, Infragistics HTML5 controls, OpenUI5, Wijmo, JayData, Breeze.js, datajs, ODataJS, angular-odata, и т.д.

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

            Мы подготовили примеры того, как гриды работают с OData.

            Основные запросы грида к серверу:
            • Получить общее количество записей, удовлетворяющих некоторому условию.
            • Получить выборку из общего набора записей для показа на одной странице.
            • Получить весь набор записей.
            • Отсортировать записи по одному или нескольким полям.
            • Отфильтровать записи по некоторому набору условий.
            • Добавить новую запись.
            • Модифицировать запись.
            • Удалить запись.
            • Batch update – добавление, изменение и удаление группы записей.

            Рассмотрим детальнее основные запросы на примере
            Читать дальше →
          • Автоматизируем и ускоряем процесс настройки облачных серверов с Ansible. Часть 3: Переменные и файл inventory

              В первой части мы начали изучение Ansible, популярного инструмента для автоматизации настройки и развертывания ИТ-инфраструктуры. Ansible был успешно установлен, описаны принципы работы, базовая настройка. В завершении статьи мы показали как быстро установить nginx на несколько серверов.

              Во второй части мы разобрались в выводе playbook, научились отлаживать и повторно использовать скрипты Ansible.



              В этой части вы узнаете, как писать единый Ansible playbook для разных ОС (например с rpm и deb), как обслуживать множество хостов и не писать их все в inventory, как сгруппировать сервера по регионам InfoboxCloud и многое другое.
              Читать дальше →
            • Атомный реактор в каждый сайт

                Все слышали о том, что PHP создан, чтобы умирать. Так вот, это не совсем правда. Если захотеть — PHP может не умирать, работать асинхронно, и даже поддерживает честную многопоточность. Но не всё сразу, в этот раз поговорим о том, как сделать чтобы он жил долго, и поможет нам в этом атомный реактор!


                Читать дальше →
              • Использование npm для глобальной установки приложений, наделённых GUI и основанных на nw.js

                • Tutorial
                Команда «npm install» в менеджере пакетов npm чаще всего употребляется для локальной установки зависимостей некоторого модуля, совершаемой в его подкаталоге «/node_modules».

                Однако возможен и запуск этой команды с ключом «-g» (от слóва «global»). Он обеспечивает установку указанного ей пакета в некоторое глобальное (то есть общее для всей системы) место. Кроме того, в PATH (для последующего запуска из любого желаемого каталога) оказывается прописанною та команда, которая была указана в свойстве «"bin"» в файле package.json у установленного пакета.

                Таким общим местом, согласно документации, под Windows служит подкаталог «/node_modules» в каталоге установки Node. В остальных же системах таким общим местом чаще всего оказывается каталог «/usr/local/lib/node_modules» (тогда как Node там устанавливается в каталог «/usr/local/bin»).

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

                • Команда «npm install jshint -g» обеспечивает появление в PATH команды «jshint», служащей для запуска JSHint.
                   
                • Команда «npm install browserify -g» обеспечивает появление в PATH команды «browserify», служащей для запуска Browserify.
                   
                • Команда «npm install less -g» обеспечивает появление в PATH команды «lessc», служащей для запуска Less.js.

                Однако на CLI (на командной строке) свет клином не сошёлся — и читателям Хабрахабра должно уж вполне быть известно, что приложение на языке JavaScript, употребляющее API Node.js, можно снабдить и GUI (графическим интерфейсом пользователя), сочинённым на языках HTML и CSS. Для этого придётся и запускать такое приложение вместо Node на том движке, который до прошлого года назывался node-webkit, а в нынешнем (2015) году оказался 14 января переименованным в nw.js.

                Ваши GUI-приложения также могут глобально быть установлены в системе из npm-пакета при помощи npm. Давайте поговорим об этом.

                Читать дальше →
                • +22
                • 16.1k
                • 4
              • Правильная платформа для Java EE приложений: как z/OS + DB2 оказались в 3 раза быстрее Linux + Oracle

                  Введение


                  В настоящее время все больше и больше корпоративных приложений разрабатываются на основе переносимых кроссплатформенных технологий, таких как Java Enterprise Edition. В состав данной платформы входит набор программных интерфейсов, позволяющих разработчикам абстрагироваться от конкретных СУБД и механизмов очередей сообщений. Это позволяет развернуть приложение практически на любой платформе, в том числе и на мейнфрейме.

                  В сообществе специалистов по информационным технологиям распространено представление, что мейнфреймы – это очень надежная, но уступающая по производительности привычным решениям на основе процессоров Intel и операционной системе Linux платформа. В данной статье мы хотели бы поделиться результатами тестирования производительности одной и той же банковской платежной системы, работающей на IBM zEnterprise EC12, но в одном случае использующей Linux и СУБД Oracle, а в другом – операционную систему z/OS и СУБД DB2.
                  Читать дальше →
                • Любителям Ruby и Coffeescript — очередной велосипед?

                  image

                  Меня всегда привлекали отзывчивые, динамичные интерфейсы, созданные на Javascript, но каждый раз, пытаясь погрузиться в изучение этого языка, я превращал свой мозг в кашу и ел её оставлял это до «лучших» времен, возвращаясь к статичным страницам на клиенте и PHP на сервере. Время шло.

                  Год назад, шатаясь по страницам сети, я наткнулся на статью про Coffeescript. Хм, интересно… Пары примеров кода было достаточно, чтобы заразиться идеей где-то его применить, но что то меня напрягало — хотелось мне какой-то фреймворк, который сам заботился бы о компиляции coffee в js. Так я нашел Rails, а вместе с ним ruby, gems, sass и кучу всего того, что привело меня в экстаз критическую точку невозврата…

                  Доброго времени суток, господа! Меня зовут Денис, и в этой статье я хочу поделиться с вами своими взглядами на разработку front-end'a и небольшой историей изобретения одного велосипеда, а вот очередного или нет — судить вам.
                  Читать дальше →
                • Реализация словаря в Python 2.7

                  В этой статье пойдёт речь о том, как реализован словарь в Python. Я постараюсь ответить на вопрос, почему элементы словаря не упорядочены, описать, каким образом словари хранят, добавляют и удаляют свои элементы. Надеюсь, что статья будет полезна не только людям, изучающим Python, но и всем, кто интересуется внутренним устройством и организацией структур данных.
                  Читать дальше →
                • Плавильный котел: бой в Skyforge

                    Всем привет! Меня зовут Дмитрий Бородин, я работаю гейм-дизайнером в команде боя на проекте Skyforge. В Allods Team я уже более четырех лет, и это время не прошло даром — я узнал много нового и интересного из самых разных областей геймдева. В основном же моя работа была связана с реализацией боя в игре, и сейчас я расскажу о том, как мы делали его в Skyforge.



                    Бой, или комбат, как мы его чаще всего называем, в целом можно описать как активное взаимодействие игрока с враждебным ему окружением. В современных MMO комбат занимает до 90% игрового времени, и задача сделать его увлекательным и не надоедающим — одна из самых главных и одновременно одна из самых сложных. Поэтому для Skyforge была сформирована специальная большая команда, которая занимается исключительно этой проблемой.

                    Основной вклад в комбат ММО вносят 3 составляющие:
                    1. Классы — связанные наборы умений, которые игрок будет использовать в бою.
                    2. Мобы — враждебные игроку монстры.
                    3. Интерфейс и камера.

                    Про каждый из этих пунктов надо рассказывать основательно в отдельных статьях, и я расскажу про первый — про классы.
                    Читать дальше →
                  • 14 вопросов об индексах в SQL Server, которые вы стеснялись задать

                    • Translation
                    • Tutorial
                    Индексы — это первое, что необходимо хорошо понимать в работе SQL Server, но странным образом базовые вопросы не слишком часто задаются на форумах и получают не так уж много ответов.
                    Роб Шелдон отвечает на эти, вызывающие смущение в профессиональных кругах, вопросы об индексах в SQL Server: одни из них мы просто стесняемся задать, а прежде чем задать другие сначала подумаем дважды.


                    От переводчика
                    Данный пост является компиляцией двух статей Роба Шелдона:

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

                    Перейти к чтению
                  • Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 1 из 6

                    Содержание курса



                    Улучшение кода






                    Official translation (with a bit of polishing) is available here.




                    Постановка задачи


                    Цель этого цикла статей — показать, как работает OpenGL, написав его (сильно упрощённый!) клон самостоятельно. На удивление часто сталкиваюсь с людьми, которые не могут преодолеть первоначальный барьер обучения OpenGL/DirectX. Таким образом, я подготовил краткий цикл из шести лекций, после которого мои студенты выдают неплохие рендеры.

                    Итак, задача ставится следующим образом: не используя никаких сторонних библиотек (особенно графических) получить примерно такие картинки:



                    Внимание, это обучающий материал, который в целом повторит структуру библиотеки OpenGL. Это будет софтверный рендер, я не ставлю целью показать, как писать приложения под OpenGL. Я ставлю целью показать, как сам OpenGL устроен. По моему глубокому убеждению, без понимания этого написание эффективных приложений с использованием 3D библиотек невозможно.
                    Читать дальше →