...

суббота, 20 мая 2017 г.

Лекции Техносферы. Инфопоиск. Часть 1 (весна 2017)

[Из песочницы] Терминология. Борьба со сложностью

Что нам стоит CDN построить


Медленные сайты раздражают пользователей. Когда основной контент — фоточки, а сайт тормозит — это раздражает вдвойне. И как бы мы ни оптимизировали свой сервис, всегда остаётся такой фактор, как качество связи между пользователем и нашим ЦОДом. В решении этой проблемы нам помогает CDN.

Мы — это компания «Колёса Крыша Маркет», разработчик самых крупных и посещаемых сайтов частных объявлений в Казахстане и фотографии из объявлений — критически важная часть нашего бизнеса.

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

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

Мы искали публичный CDN под свои нужды и нашли только присутствующий в Алматы Akamai без каких-либо подробностей по стоимости и планах расширения на остальную часть Казахстана. Мы приняли решение строить свой.

Первой идеей было получить по ip-адресу пользователя его географическое положение и отдать ему данные с ближайшего сервера. Однако этот вариант был быстро отвергнут — мы вспомнили кейсы, когда трафик в соседнюю деревню идёт через 1000 км и в таком случае скорость может быть даже ниже, чем без использования CDN.

По тем же причинам не стали мы использовать и любое другое гео-позиционирование. Один из наших админов предложил «пинговать сервер из браузера», что и послужило отправной точкой в реализации текущей схемы.

Мы построили свой CDN на связке OpenResty и Lua с использованием JavaScript. Это не потребовало никаких доработок в коде сайтов (менеджеры и разработчики рады — можно «пилить» фичи вместо инфраструктурных задач :)) и немножко «допилов» в мобильных приложениях.

OpenResty — это прекрасный форк Nginx от китайских разработчиков, о котором неоднократно писали на Хабре. Мы использовали его в качестве реверс-прокси.

Lua — простой, мощный, встраиваемый язык, который тоже получил достаточно внимания на Хабре.

При первом заходе пользователя на сайт (запуске мобильного приложения) мы определяем хост, с которого пользователь получает данные максимально быстро. На сайте для этого в ответ сервера встраивается небольшой код на JavaScript (в мобильных приложениях эту логику пришлось реализовать дополнительно). Он, в свою очередь, встраивает в страницу по одной невидимой картинке с каждого из хостов CDN и замеряет время, за которое эта картинка была получена. По результатам измерений пользователю на основной домен ставится кука с именем самого быстрого хоста.

function getFastestHost() {
    var
        fastest         = arguments[0], 
        fastestDuration = 600000,
        timing          = [],
        track           = function (host) {
            var tracker = new Image();

            tracker.src = "/set.gif?cdn=" + host;
        };

    for (var i = 0; i < arguments.length; i++) {
        (function(host) {
            var
                image     = new Image(),
                timeStart = (new Date()).getTime();

            image.onload = function () {
                var duration = (new Date()).getTime() - timeStart;

                if (duration < fastestDuration) {
                    fastestDuration = duration;
                    fastest = host;
                }

                timing[timing.length] = duration;

                if (timing.length == arguments.length) {
                    track(fastest);
                }
            }

            image.onerror = function () {
                timing[timing.length] = -1

                if (timing.length == arguments.length) {
                    track(fastest);
                }
            }

            image.src = host + "/empty.gif";
        }(arguments[i]));
    }
}

При последующих запросах OpenResty запускает код на Lua, который проверяет наличие куки, валидирует её и, если всё хорошо, подменяет в URL изображений хост на тот, что был получен из куки.
init_by_lua_block {
    -- получение хостов из файла
    function getCdnHosts(file)
        local hosts = {}
        for line in io.lines(file) do
            table.insert(hosts, line)
        end
        return hosts
    end

    -- разбор строки хостов в массив по регулярному выражению
    function stringToTable(t, s)
        local it, err = ngx.re.gmatch(s, "(//[^;]+);?")
        while true do
            local m, err = it()

            if not m then
                break
            end

            table.insert(t, m[1])
        end

        return t
    end

    -- поиск значения в таблице
    function valueExists(tbl, value)
        for k,v in pairs(tbl) do
            if value == v then
                return true
            end
        end

        return false
    end
}

server {
    server_name kolesa.kz;
    # компонент куки cdn
    set $cdn_project kl;
    # хост куки cdn
    set $cookie_host .kolesa.kz;
    # файл с хостами cdn
    set $cdn_hosts_file "/etc/nginx/cdn/cdn.data.active";
    # хосты статики
    set $replace_hosts "//photos-a-kl.kcdn.kz;//photos-b-kl.kcdn.kz";

    # проверка наличия куки и подмена ответа с правильными uri
    location / { 
        proxy_set_header Host kolesa.kz;
        proxy_pass http://kolesa;

        header_filter_by_lua_block {
            ngx.header.content_length = nil
        }

        body_filter_by_lua_block {
            allCdnHosts = getCdnHosts(ngx.var["cdn_hosts_file"])
            replaceHosts = stringToTable({}, ngx.var["replace_hosts"])
            cdnHost = ngx.var["cookie_" .. ngx.var["cdn_project"] .. "_cdn_host"]
            replaceEof = ngx.arg[2]

            if cdnHost ~= nil and valueExists(allCdnHosts, cdnHost) == true then
                -- кука есть, перезапишем на него всё, что нужно
                for k,v in pairs(replaceHosts) do
                    local newStr, n, err = ngx.re.gsub(ngx.arg[1], v, cdnHost)

                    if n > 0 then
                        ngx.arg[1] = newStr
                        replaceEof = false
                    end
                end
            else
                -- кука ещё не установлена, добавим скрипт и он поставит куку
                local scriptStr = "" ..
                    ""

                local newStr, n, err = ngx.re.gsub(ngx.arg[1], "(</body>)", scriptStr .. "$1", "i")
                if n > 0 then
                    ngx.arg[1] = newStr
                    replaceEof = false
                end
            end

            ngx.arg[2] = replaceEof
        }
    }
}

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

Хостов CDN на данный момент у нас 5 штук — три в Алматы и по одному в Астане и Шымкенте. Каждый хост обслуживают два сервера Supermicro (для отказоустойчивости). На каждом крутится OpenResty + Memcached на 120 Gb для кэширования фотографий.

По результатам внедрения мы снизили трафик на основной ЦОД (1.2 Гбит против 400 Мбит) и увеличили общий трафик от нас к пользователям (1.5 Гбит против 1.2 Гбит). Фоточки перестали тормозить у пользователей отдельных интернет-провайдеров (что частенько бывало до внедрения CDN) и в целом наши клиенты стали счастливее.

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

Комментарии (0)

    Let's block ads! (Why?)

    пятница, 19 мая 2017 г.

    Security Week 20: Поддельные WannaCry, у HP в дровах кейлоггер, Chrome загружает лишнее

    WannaCry успел прославиться так, что даже неграмотная часть населения планеты что-то где-то слышала, а уж те, кто имеет хоть какое-то отношение к информационной безопасности, успели досконально изучить многочисленные исследования троянца и FAQ по нему. Такого ажиотажа по поводу вредоносного ПО еще не было, так что у нас есть первая троянская суперзвезда. И у этой популярности уже появились последствия.

    Даже самые ленивые админы закрыли доступ к порту 445 из Интернета (у кого был зачем-то открыт) и накатили обновления, то же сделали многие обычные пользователи, наши и британские ресерчеры синкхольнули стоп-домены нескольких вариантов WannaCry, однако полностью остановить эпидемию пока не удается. Теперь выяснилось, что кто-то очень предприимчивый лихо прицепляется к этому поезду прямо на ходу, и пытается намыть себе копеечку.

    Шон Диллон из RiskSense рассказал, что они там выявили несколько новых версий WannaCry, которые почти не отличаются от изначальной, только не радуют – вот только адрес бикойн-кошелька, на который требуется переводить выкуп, нагло перебит в хекс-редакторе. И еще одно крохотное изменение: подражатели, с помощью все той же грубой правки файла, отключили механизм самоуничтожения троянца, то есть стоп-домены для этих версий отсутствуют.

    Отличная бизнес-схема: ничего и делать не надо, просто поправили семпл и выпустили на волю, дальше он вормится по всему миру самостоятельно. EternalBlue + DoublePulsar и вперед, ничто их не остановит. Получается, жертвы этой волны не получат свои файлы назад даже после оплаты выкупа: ведь ключа для расшифровки файлов у владельцев кошелька нет. В принципе, это неплохой урок для любителей поддерживать бизнес рансомварщиков звонким бикойном, но ущерб от этого квази-воннакрая может быть очень серьезен.

    В аудиодрайверах HP нашли кейлоггер

    Такая вот новость. Аудиодрайвер Conexant, установленный на некоторых компьютерах производства Хьюлетта с Паккардом, пишет в лог все, что жмет на клавиатуре пользователь, а лог аккуратненько складывает в C:\Users\Public\MicTray.log. Ничего не шифрует при этом.

    Обычно безопасники больше всего ломают голову над вопросами «кто виноват» и «что делать», но в этот раз актуальнее вопрос «ЗАЧЕМ?!». Причина оказалась самая идиотская: разработчики таким образом на стадии отладки ловили баги при нажатиях горячих клавиш, да отключить забыли.

    Список моделей с такой «особенностью» весьма обширен:

    • HP EliteBook 820 G3 Notebook PC
    • HP EliteBook 828 G3 Notebook PC
    • HP EliteBook 840 G3 Notebook PC
    • HP EliteBook 848 G3 Notebook PC
    • HP EliteBook 850 G3 Notebook PC
    • HP ProBook 640 G2 Notebook PC
    • HP ProBook 650 G2 Notebook PC
    • HP ProBook 645 G2 Notebook PC
    • HP ProBook 655 G2 Notebook PC
    • HP ProBook 450 G3 Notebook PC
    • HP ProBook 430 G3 Notebook PC
    • HP ProBook 440 G3 Notebook PC
    • HP ProBook 446 G3 Notebook PC
    • HP ProBook 470 G3 Notebook PC
    • HP ProBook 455 G3 Notebook PC
    • HP EliteBook 725 G3 Notebook PC
    • HP EliteBook 745 G3 Notebook PC
    • HP EliteBook 755 G3 Notebook PC
    • HP EliteBook 1030 G1 Notebook PC
    • HP ZBook 15u G3 Mobile Workstation
    • HP Elite x2 1012 G1 Tablet
    • HP Elite x2 1012 G1 with Travel Keyboard
    • HP Elite x2 1012 G1 Advanced Keyboard
    • HP EliteBook Folio 1040 G3 Notebook PC
    • HP ZBook 17 G3 Mobile Workstation
    • HP ZBook 15 G3 Mobile Workstation
    • HP ZBook Studio G3 Mobile Workstation
    • HP EliteBook Folio G1 Notebook PC

    Не исключено, что кто-то давно это выяснил, и использует в своих гнусных целях. Реакция самих Conexant и HP на открытие была нулевая: когда Торстен Шредер из ModZero, обнаруживший проблему, попытался до них достучаться, ответа он не получил ни оттуда, ни оттуда. Пришлось ему опубликовать описание «уязвимости» и доказательство концепции, только после этого вендоры зашевелились.

    Но зашевелились как-то специфически: функция протоколирования клавиатуры в драйвере осталась, ее лишь отключили ключом в реестре. ModZero предлагают пользователям замечательных компьютеров HP не надеяться на обновления, а просто грохнуть экзешник C:\Windows\System32\MicTray64.exe, пожертвовав возможностями регулирования звука с кнопок, ну и сам лог, конечно же.

    Уязвимость в Chrome позволяет красть учетные данные

    Новость. Исследование. Если вы думаете, что Windows 10 с последними обновлениями и новейшая версия Chrome защитит вас от злобных эксплойтных сайтов, то… ну, вы поняли. Прекращайте так думать, ибо в DefenseCode придумали хитроумную атаку через самый популярный браузер.

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

    И снова – что же тут опасного, раз Explorer просто пытается загрузить иконку, а не исполняет ее? Просто при этом он пытается авторизоваться на SMB-сервере и выдает ему логин пользователя, домен, и хэш пароля NTLMv2. Соответственно, хакер может попытаться расхэшить пароль (что для простого пароля занимает часы), просто авторизоваться с этими данными на внешнем сервисе, использующем NTLMv2 – например, на сервере Exchange, – или же использовать их внутри взломанной сети, что полезно для повышения привилегий. Для пользователей Windows 8/10, логинящихся с помощью аккаунта Microsoft, это может привести к компрометации их учетных записей в OneDrive, Outlook.com, Office 365, Office Online, Skype, Xbox Live.

    Защититься от подобной атаки можно, установив в настройках Chrome обязательный запрос на сохранение файла перед его загрузкой. Другие браузеры, как указывают в DefenseCode, SCF-файлы автоматически не загружают.

    Древности


    «V-944»

    Нерезидентный опасный вирус. Стандартно поражает .COM-файлы текущего каталога и каталогов, отмеченных в COMSPEC. Перехватывает int 16h (клавиатура) и, в зависимости от вводимых с клавиатуры символов, запускает по 25-й строке экрана справа налево и обратно символ рожицы (ASCII 1). Движение рожицы сопровождается жужжанием. Достаточно жестко обходится с int 16h, может «завесить» систему. Снимает атрибут read-only, значение времени файла устанавливает в 62 секунды.

    Цитата по книге «Компьютерные вирусы в MS-DOS» Евгения Касперского. 1992 год. Страницa 89.

    Disclaimer: Данная колонка отражает лишь частное мнение ее автора. Оно может совпадать с позицией компании «Лаборатория Касперского», а может и не совпадать. Тут уж как повезет.

    Комментарии (0)

      Let's block ads! (Why?)

      [Из песочницы] Текстуры и RGB-каналы в Unreal Engine 4

      RGB и Unreal Engine


      Общие понятия RGB-каналов


      RGB (часто RGBA) — это аббревиатура от Red-Green-Blue (Alpha). Что означает 3 канала цветов, смешивание которых приводит к передаче нужного оттенка цвета (Если используется Альфа, то и указание степени прозрачности того или иного элемента).

      Каждый канал состоит из значений от 0 до 255. Эти значения являются уровнем канала. Чем выше уровень, тем сильнее в канале цвет. Каждый пиксель текстуры (любого изображения и вашего монитора) отображается в формате RGB — то есть, у каждого пикселя одновременно работают 3 канала цветов — каждый со своим уровнем.

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

      Ниже на картинке активен только красный канал, остальные имеют значения, равные нулю:

      image

      Стоит отметить, что в движке Unreal Engine 4 значения цветов имеют не 0-255, а от 0 до 1. На самом деле, это сделано для удобства программирования, а по факту уровни каналов все так же имеют значения от 0 до 255, только представлены в рамках 0-1, где 0 = 0, а 1 = 255.

      Unreal Engine 4 способен работать со всеми каналами одновременно (передача полноценной цветовой гаммы) и с каждым каналом отдельно.

      Ниже на картинке показано, как нода цвета выглядит в движке:

      image

      Эта нода не содержит в себе цвет. Это набор из 4-х значений — RGBA-каналов, которые записываются, как числа с плавающей точкой от 0 до 1 каждый. И можно установить в каждый канал свое значение и выдавать его. Цвет — лишь общая сумма этих значений в одном пикселе.

      Первый пин из ноды — это сумма трех каналов — RGB.

      Второй, третий и четвертый пины — это выходы каждого из каналов соответственно.

      Пятый пин — это четвертый канал или Альфа-канал. По задумке и общему представлению, этот канал используется для контроля прозрачности — что должно быть прозрачным, что не должно быть прозрачным, а что — полупрозрачным.

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

      Офтоп. Вообще, эта нода является вектором — контейнером, содержащим в себе 4 значения.

      Использование каналов в Unreal Engine 4


      Обычно в Unreal Engine 4 используется текстура типа TARGA. Она позволяет работать с каждым каналом отдельно.

      В PBR* существуют такие карты, как АО, Metallic, Roughness, Specullar и Emissive (Еще куча вариантов, но нам и этого достаточно). Все эти карты используют только значения от 0 до 1 (черно-белые карты). То есть, движку для расчета этих карт достаточно 1-го канала со значениями от 0 до 1.

      Например, Metallic может быть либо 0, либо 1 (либо металл, либо не металл). Соотвественно, пиксель может иметь значение 1 (белый цвет в визуальном представлении) или 0 (черный цвет в визуальном представлении).

      Для примера есть такая текстура. В RGB-канале (все три канала вместе) отображается след.картина:

      image

      Если посмотреть на каждый канал отдельно, то видно, как изменяются текстуры — один канал отвечает за Roughness, второй — за Specular, третий за AO, четвертый — за альфу.

      image
      image
      image
      image

      На последней картинке так же отображается шкала цвета в Adobe Photoshop, в которой нельзя указать никакой другой цвет, кроме как градиент белого (от 0 до 255) при редактировании в каком-то одном канале (на картинке редактирование происходит на канале «Альфа»).

      Соответственно, текстуру можно использовать теперь для подключения в материал Unreal Engine 4 сразу по трем (или 4) параметрам. Канал «альфа» не обязательно использовать для прозрачности — он так же может быть использован в качестве любой другой текстуры, где требуется указывать значения от 0 до 1 в рамках одного канала.

      *PBR — PHYSICALLY BASED RENDERING. Физически корректный рендер (рендер, основанный на физике). Система отображения текстур согласно физическому поведению реального света.

      Комментарии (0)

        Let's block ads! (Why?)

        Защищённый сервис обмена текстовыми сообщениями

        Что нужно учесть при проектировании системы, чтобы не было мучительно больно?

        В статье описаны проблемы при проектировании баз данных и немного всего приложения, которые потом с ростом проекта все сложнее и сложнее решить. Моменты, которые важно учесть на этапе дизайна, и не задумываться о них в последствии. Ну или задумываться за чашкой чая и фразой «А помнишь, как мы решили это сделать сразу? Сколько времени мы этим себе сэкономили!», а не с ощущением зубной боли и болезненном вздрагивании при каждом воспоминании. По мере роста системы и числа пользователей, дизайн базы все сложнее и сложнее изменить, и масштаб изменений становится все более глобальным и трудоемким.

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

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



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

        И так, основные ошибки:

        1. Отсутствие возможности локализации.

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

          • Часовые пояса

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

          • Разные языки

            При выборе текстовых полей следует использовать формат Unicode или тип NVarchar, впоследствии это облегчит работу с приложением. Необходимо обратить внимание на правила сортировки и сравнения строк в вашей БД. Убедитесь, что Вы выбрали не сортировку (Collation) по умолчанию, а сортировку, которая будет корректно работать при сравнении диакритических знаков, иероглифов и символов нестандартной ширины, при условии, что конечный пользователь вводит какую-либо информацию. Скажете ваше приложение будет работать только для США или только для Европы? Тогда нужно спросить себя – будут ли там данные, которые может ввести конечный пользователь. Хотя бы что-то строка комментария или какую то информацию для себя? Если такая возможность есть – сделайте хранение строк в Unicode. Мир уже давно перемешался и вы не застрахованы, от того, что человек, пользующийся японским что-то внесет в вашу БД как пользователь. Конечная цель в том, чтобы данные пользователя правильно сохранились и потом корректно выводились.

          • Валюта

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

          • Естественные ключи

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

            Например, в одном из проектов мы думали использовать ИНН в качестве естественного ключа для контрагентов, но отказалась от этой идеи. Не могу описать словами, как мы в последствии радовались этому, так как компания начала развиваться и сотрудничать с юридическими лицами за пределами России.

        2. Типы данных

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

          Например, при создании таблицы со списком сотрудников только Вашей компании, допустимо использовать первичный ключ типа INT, так как вероятность роста компании до 2млд человек очень мала. Однако, если Вы создаете БД сотрудников компаний Ваших клиентов, необходимо использовать тип данных большей размерности, например, BIGINT, так как есть вероятность, что 500 тыс. сотрудников при условии смены работы четыре раза создадут 2 млн. записей в вашей БД, и таблица для хранения списка сотрудников компаний-клиентов, при наличии большого количества клиентов, вполне может разрастись и превысить 2 млрд. Это же правило действует для таблиц, которые хранят логи пользователей, и другие бизнес операции, которые с ростом приложения могут увеличиться в миллионы раз.

        3. Синхронная реакция на действия пользователя

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

          Если обработка будет немедленной, то при росте системы в дальнейшем возможны проблемы с производительностью сервера. Также, рабочая нагрузка системы при обработке всех запросов синхронно будет напрямую зависеть от действий пользователей. Например, при стандартной загрузке, системе хватает 10% ресурсов для обработки всех запросов в штатном режиме. При появлении пользовательского супер-запроса, такого как приглашение 500 тысячам пользователей одновременно, загрузка системы может возрасти до 100%. Пример несколько синтетический, но, думаю, суть понятна. При этом система перестанет штатно обрабатывать запросы остальных отдельных пользователей, пока не завершит обработку данного огромного запроса.

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

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

        4. Накопление ненужных данных

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

          Например, важно хранить логи действий пользователя в течение 1-2х недель на случай, если он обратится в техническую поддержку. Затем эту информацию можно удалить. Поэтому важно продумать и сразу ввести процесс удаления старых данных до того как таких данных накопится слишком много. Если сразу не прописать данный процесс, то есть большая вероятность столкнуться с проблемой, когда в БД добавляется огромный поток новых данных, и система не справляется с удалением ненужных данных. Необходимо продумать эффективную систему удаления старых данных, такую, чтобы она не только превосходила по скорости новый поток данных, но и смогла в обозримые сроки удалить огромный массив информации за прошлые годы работы.

          Правило удаления старых ненужных данных должно касаться и всех новых функций.

        5. Отсутствие тестов и документации

          Обычно стратап-проекты спешат запуститься побыстрее. Также обычно стратапы реализует сравнительно небольшая команда разработчиков, которая знает наизусть всю бизнес логику приложения и не понимает, зачем терять время на написание документации, а иногда и тестов. Работа идет по принципу «сейчас запустимся, а потом напишем». Однако, как только система запускается, появляется огромное количество новых задач, и времени на написание документации не остается.

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

          Настоятельно рекомендуем писать документацию сразу. Впоследствии это окупится сполна.
          Что касается тестов, как только команда разработчиков увеличивается, необходимо убедиться, что разработка новых функций или доработка/изменение существующих не оказывают негативного влияния на весь остальной существующий функционал системы. Тесты – самый простой и эффективный способ проверки функциональности.

        6. Масштабирование

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

          Было бы хорошо задать себе и разработчикам следующие вопросы:

          • Как увеличится производительность системы, если нарастить мощность оборудования?
          • Можно ли создать копию системы на другом сервере и включить его в работу? Если нет, что нужно изменить в дизайне, чтобы это стало возможным?
          • Насколько большой масштаб изменений нужен для разбиения системы на несколько частей и перестройки архитектуры с использованием принципов SOA или микросервисов?

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

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

        Комментарии (0)

          Let's block ads! (Why?)

          Зло живёт в функциях сравнения

          Игра на опережение: ключевые направления PR в 2017 году

          Комментарии (0)

            Let's block ads! (Why?)

            Машинное обучение для страховой компании: Реалистичность идеи

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



            Цикл статей «Машинное обучение для страховой компании»


            1. Реалистичность идеи.
            2. Обработке данных и исследование алгоритмов.
            3. Оптимизация алгоритмов.

            Введение


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

            Большое количество успешных проектов с применением машинного обучения реализовано в США, и в основном это решения из области интеллектуальных приложений. Разработавшие их компании изменили рынок и правила игры в своей индустрии. К примеру, Amazon ввёл рекомендательную систему покупок на своем сайте — и это предопределило сегодняшний вид онлайн-магазинов. Google через алгоритмы машинного обучения разработал систему целевой рекламы, предлагающей пользователю индивидуально подобранные товары на основе известной о нем информации. Netflix, Pandora (интернет-радио), Uber стали ключевыми фигурами на своих рынках и задали им дальнейший вектор развития, а в основе решений лежало машинное обучение.

            Зачем страховой компании машинное обучение?


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

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

            Для медицинской страховой компании (нашего клиента) прогнозирование затрат на лечение застрахованных лиц — хороший способ сокращения издержек. Если известно, что в ближайший месяц или два на лечение клиента потребуется достаточно серьезная сумма, нужно присмотреться к нему повнимательнее: например, передать его более квалифицированным врачам-кураторам, предложить пройти диагностические обследования заранее, отслеживать выполнение рекомендаций врачей и так далее, чтобы тем самым снизить в ряде случаев стоимость будущего лечения.

            Но как прогнозировать затраты на лечение каждого клиента, когда их больше миллиона?
            Одним из вариантов может быть индивидуальный анализ известной о пациенте информации. Так можно предсказать, к примеру, резкое повышение (если рассматривать относительные значения) или просто пик (абсолютные величины) затрат. Данные в этой задаче содержат много шума, поэтому здесь нельзя рассчитывать на результат, близкий к 100% верных предсказаний. Однако, поскольку речь идет о несбалансированной по классам статистике, даже 50% предсказанных пиков при 80-90% предсказанных отсутствий повышения затрат могут дать важную информацию для компании. Подобная задача может быть эффективно решена только средствами машинного обучения. Конечно, можно подобрать вручную набор правил по уже существующим данным, который будет очень грубым и неэффективным в долгосрочной перспективе в сравнении с алгоритмами машинного обучения, поскольку вручную подобрать оптимальные граничные значения и коэффициенты практически невозможно.

            Реализация машинного обучения


            В подобных проектах часто актуальна реализация программного комплекса в виде веб-сервиса. Для реализации машинного обучения клиент рассматривал 2 наиболее известных решения в этой области: MS Azure ML и Amazon ML.

            Так как Amazon ML поддерживает работу только 1 алгоритма — линейную регрессию (и его адаптацию для задач классификации — логистическую). Это ограничивает возможности реализуемых решений.

            Microsoft Azure ML представляет собой более гибкий сервис:

            • большое количество встроенных алгоритмов + поддержка встраивания своего кода на R и Python;
            • во встроенных инструментах есть все необходимое для базовой работы в областях классификации, кластеризации, регрессии, компьютерного зрения, работы с текстом и др.;
            • есть функционал для предобработки, манипуляции и организации данных;
            • модули в Azure ML организованы как блок-схемы, что делает порог вхождения низким, а работу интуитивной — поэтому Azure ML стал удобным средством прототипирования, позволяющим быстро реализовать базовые решения для проверки жизнеспособности гипотез, идей и проектов.

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

            Прототипирование


            Проверим реалистичность идеи предсказания пиков затрат. В качестве исходных данных, для получения базовой отметки, возьмем необработанные данные: возраст пациента, количество приемов врача, количество потраченных на клиента денег за несколько последних месяцев. Границу для пика затрат на следующий месяц выберем как $1000. Выгрузим данные в Azure и разделим их на тренировочную и тестовую выборки в соотношении 4 к 1 (валидацию на этом этапе проводить не будем, поэтому выборка для нее в данной ситуации не предусмотрена).

            Если в загруженных данных находится больше столбцов, чем нужно, или наоборот, некоторые данные находятся в другом источнике — их можно легко объединить или убрать из матрицы входных данных.

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

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

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

            В нашем эксперименте базовый алгоритм на необработанных данных при границе разделения классов, установленной на 0.9, предсказал около 60% пиков и 49% их отсутствия. Это свидетельствует о том, что концепцию стоит развивать на более сложных схемах, что и будет сделано в дальнейшем.

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

            Об авторах


            Команда WaveAccess создаёт технически сложное, высоконагруженное и отказоустойчивое программное обеспечение для компаний из разных стран. Комменатрий Александра Азарова, руководителя направления machine learning в WaveAccess:
            Машинное обучение позволяет автоматизировать области, где на текущий момент доминируют экспертные мнения. Это дает возможность снизить влияние человеческого фактора и повысить масштабируемость бизнеса.

            Комментарии (0)

              Let's block ads! (Why?)

              [Из песочницы] GTD и бла-бла-бла

              Приглашаем на Unreal Engine Meetup 24 мая

              24 мая в московском офисе Mail.Ru Group состоится второй официальный митап по игровому движку Unreal Engine 4. Мы продолжаем наше общение на актуальные для сообщества темы и поднимаем острые вопросы разработки: как оптимально подойти к созданию игр на UE4, какие инструменты использовать и на что обращать внимание, когда проект уже почти готов.

              На этот раз доклады будут построены по принципу кейсов — коротких рассказов на определенную тему с увеличенным временем для Q&A. Митап — это в первую очередь общение! В программе мероприятия четыре доклада, подробности читайте под катом.

              — «Unreal Engine как инструмент геймдизайна»
              Филипп Дербенёв, технический дизайнер студии Pushkin, Mail.Ru Group

              Как работать с движком, если вы не программист C++, но хотите делать игры? Блюпринты — это «вермишельное проклятие» или шаг вперёд для организации разработки? Чем страшен путь от прототипа до релизного билда? Спикер расскажет об этом и других путях геймдизайна в анриле.

              — «Оптимизация проекта на UE4»
              Александр Блинцов, UEngine.Ru

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

              — «UE4 для Unity-разработчиков: создание 2D-игр»
              Александр Чуриков, программист студии Pushkin, Mail.Ru Group

              По традиции, автор представит беспристрастное сравнение средств UE4 с аналогичными инструментами в Unity и проведёт обзор методов и компонентов для создания 2D-игр на Unreal Engine 4. В рамках доклада рассматрит реализацию контроллера персонажа, создание спрайтовых атласов и интеграцию Spine для двухмерной скелетной анимации.

              — «Как мы делали Redeemer»
              Дмитрий Качков, Sobaka Studio

              Рассказ о том, какой подвиг может совершить команда размером всего в пять человек, работая с Unreal Engine 4. Докладчик расскажет, какие сложные проблемы и неочевидные моменты пришлось преодолеть на пути к релизу, а также раскроет секреты организации боевой системы для топдаун проекта при наличие далеко не простой боёвки и правильных фаталити.

              Сбор участников и регистрация: 18:00.
              Начало докладов: 18:30.

              Адрес: офис компании Mail.Ru Group, Ленинградский проспект, 39, стр. 79.

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

              Комментарии (0)

                Let's block ads! (Why?)

                У вас есть право на анонимность. Часть 1. Введение и мировая практика

                Правовое регулирование анонимности в России и в мире
                Часть 1. Введение и мировая практика

                image

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

                Так что же такое «право на анонимность», если мы говорим про интернет-пространство:

                ✓ Право на анонимный сёрфинг (поиск информации в сети) и анонимную отправку личных сообщений (e-mail, мессенджеры)
                Пользователи должны иметь право на анонимный поиск информации в интернете, в том числе скрывать свои IP-адреса и отправлять сообщения анонимно. Осенью 2016 года Европейский суд справедливости (European Court of Justice) рассмотрел запрос немецкого Федерального Суда, связанного с иском представителя немецкой Пиратской партии к федеральному правительству. Жалоба была подана немецким гражданином в отношении хранения на правительственных сайтах динамических IP адресов после того, как пользователь покидает сайт. Европейский суд в своем решении признал динамический адреса (как и ранее статические адреса) персональными данными и указал, что операторы не имеют права сохранять динамические IP-адреса, кроме как для защиты от кибератак.

                ✓ Право на анонимный постинг (публикации информации в интернете, в т.ч. в социальных сетях)
                В связи с появлением онлайн-цензуры, сбора и прослушки данных рядовых пользователей с дальнейшим их преследованием, пользователи интернета должны иметь право пользоваться технологиями по предоставлению анонимного доступа к сети и анонимному размещению материалов (посты, комментарии и другое) в интернете. Это позволяет реализовать права гражданина на свободу мнения и его выражения в цифровую эпоху. Такого мнения придерживается Совет по правам человека ООН, утвердивший доклад, посвященный проблеме анонимности пользователей в сети.

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

                ✓ Право на анонимное создание и распространение произведений
                Ст. 1265 Гражданского кодекса РФ предусматривает, что право автора на имя предусматривает право использовать или разрешать использование произведения под своим именем, под вымышленным именем (псевдонимом) или без указания имени, то есть анонимно. Аналогичное положение содержится и в Бернской конвенции, устанавливающей, что авторское право на произведение обнародованное анонимно либо под псевдонимом действует в течение 50 лет после даты его правомерного обнародования.

                Однако, право на анонимность прямо не зафиксировано ни в одном международном документе, подлежащим обязательному исполнению национальными государствами и может претендовать пока лишь на рекомендации независимых международных организаций (прежде всего ООН) и стейкхолдеров, а также выработанную судебную практику. Вместе с тем, в 2016 году была принята расширенная резолюция об «онлайн-правах» со стороны Совета по правам человека ООН. В итоговой резолюции Генассамблея ООН призвала страны «…пересмотреть свои процедуры, практику и законодательные акты, касающиеся перлюстрации переписки, а также применяемые ими меры перехвата и сбора личной информации, включая практику массовой слежки, в целях защиты права на неприкосновенность частной жизни».

                В США право на анонимное высказывание мнения защищается первой поправкой, а необходимость его защиты была неоднократно признана Верховным судом. В Совете Европы и Европейском союзе также была выработана определенная правовая позиция по праву на анонимность. Например, Комитет министров Совета Европы принял декларацию о свободе коммуникаций и интернете в мае 2003 года. Пункт 7 документа предусматривает, что:

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

                В своей судебной практике ЕСПЧ (дело K.U. v Finland, Appl. No.2872/02 от 02 Декабря 2008, дело Delfi v Estonia, App. No.64569/09 от 10 Октября 2013) также неоднократно признавал важность анонимности для прав на свободу выражения мнения и неприкосновенность частной жизни. В то же время, суд прояснил, что анонимность не может быть абсолютной и может быть ограничена для защиты других интересов, особенно защиты уязвимых групп:

                «Анонимность и конфиденциальность в интернете не должны побуждать государства отказываться от защиты прав потенциальных жертв, преступных действия, совершенных в сети. Хотя свобода выражения мнений и конфиденциальность сообщений являются первичными соображениями, а пользователям телекоммуникаций и интернет сервисов должны предоставляться гарантии того, что их личная неприкосновенность и свобода выражения будут соблюдаться, такая гарантия не может быть абсолютной и должна иногда подчиняться другим законным императивам, таким как предотвращение беспорядков или преступлений или защита прав и свобод других лиц».

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

                Дэвид Кэй так объясняет необходимость защиты права на анонимность:

                «Анонимность — это состояние избегания идентификации. Анонимность, будучи обычным человеческим желанием защитить свою личность от толпы, способна дать возможность пользователю исследовать и распространять свои идеи и мнения в большем объеме, чем если бы он делал это под своей реальной личностью. Физические лица в онлайне могут использовать псевдонимы (или, к примеру, выдуманные e-mail или аккаунты в соц.сетях) для того, чтобы сокрыть свою личность, лицо, голос, местонахождения и т.д., однако конфиденциальность, предоставляемая с помощью таких псевдонимов, является поверхностной и легко нарушается правительствами или другими лицами, обладающими необходимым опытом. В случае отсутствия набора инструментов по шифрованию и анонимизации, цифровые следы, которые оставляет пользователь, легко позволяют его идентифицировать. Пользователи, желающие обеспечить полную анонимность или скрыть свою личность (например, скрывающие свой IP-адрес) от правительственных органов или преступного вторжения могут использовать такие инструменты как виртуальные частные сети (VPN), прокси-серверы, анонимные сети, приложения, и P2P-сети. Наиболее известный инструмент анонимности TOR. развертывает более 6000 децентрализованных компьютерных серверов по всему миру, для того, чтобы получать и ретранслировать информацию несколько раз для сокрытия идентифицирующих сведений о конечных точках, создавай при этом сильную защиту анонимности пользователей».

                В сегменте социальных сетей, анонимность также стала важным стандартом, претендующим на то, чтобы стать обычаем делового оборота. Так, например, компания Facebook в свое время отказалась от разработанной ей «политики реальных имен» после массового общественного протеста. Крупнейшая в мире соцсеть также сделала еще один весьма интересный шаг — открыла своё представительство в анонимной сети Tor, тем самым прививая интерес пользователей к сетевым инструментам, повышающих защиту личных данных.

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

                Так что же происходит с проблематикой анонимности и прайваси в России?

                Об этом — в следующих частях:
                Часть 2. Законодательство против анонимности
                Часть 3. Правоприменительная борьба с инструментами анонимности

                Подготовлено:
                Саркис Дарбинян, Алёна Рыжикова для Центра защиты цифровых прав

                Комментарии (0)

                  Let's block ads! (Why?)

                  Июньская DevCon-школа: AI, BlockChain, Azure Stack и 12 мастер-классов

                  Всем привет!

                  Для тех, кому немножечко лень читать вводную часть, сразу перейду к делу:

                  • 1 июня мы проводим в Москве уже шестую DevCon-школу;
                  • В программе три интенсива (AI, BlockChain и Azure Stack) и 12 мастер-классов;
                  • Участие бесплатное, но надо ответить на вопросы. Места, как обычно, быстро заканчиваются.



                  Контекст


                  Пару недель назад завершилась наша большая технологическая конференция Build 2017 (см. также анонсы 1 дня и 2 дня). Одна из ключевых тем — это постепенная эволюция мира «Cloud First Mobile First» в сторону «Intelligent Cloud Intelligent Edge». Казалось бы, простая игра слов, но в реальности это изменение носит фундаментальный характер.

                  Во-первых, становится понятным, что интеллектуальные решения (то есть ИИ) будут проникать на конечные устройства или системы, будь то смартфон, автономная машина, круизный лайнер или система управления металлопрокатным оборудованием. Причем не просто проникать, будучи доступными из облака, но и исполняться непосредственно там, где генерируются данные. Тут огромный спектр технологических вопросов и в зависимости от масштаба, решением может быть чипсет, спроектированный под задачи работы с нейронными сетями, или, скажем Azure IoT Edge, позволяющий перенести часть умной облачной логики на локальные сервера.

                  Во-вторых, благодаря многочисленным усилиям индустрии, направленным на переносимость кода (прежде всего, речь идет про решения с открытым кодом), последовательно стираются технические границы между публичными и приватными облаками. Здесь снова широкий набор технологий — от последовательного расширения поддержки в облаке популярных решений (например, PostgreSQL и MySQL) и контейниризации до таких инфраструктурных решений, как Azure Stack. Где-то в светлом будущем границы будут определяться конфигурациями контуров безопасности, размещения данных и вычислительных мощностей.

                  И, в-третьих, то, что интеллектуальная начинка будет везде, в том числе на клиенте, прослеживается из трендов развития пользовательского опыта. Тут и единый граф данных (в нашем случае, Microsoft Graph + Project Rome), связывающий в единую сеть различные конечные устройства, и адаптивные карточки, подстраивающиеся под разные контексты, будь то бот, мобильное приложение, уведомление или поисковая система. И конечно, смешанная реальность, для которой взамодействие с трехмерным окружением пронизано ИИ-прослойкой — от голосового управления до анализа изображения при наложении трехмерных объектов и эффектов.

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

                  Июньская DevCon-школа


                  В июне мы повторяем формат широкой школы с выделенными интенсивами и мастер-классами по аналогии с тем, что мы делали в ноябре прошлого года.

                  Мероприятие пройдет 1 июня, в Москве (Digital October). Мы готовим для вас:

                  • 1 ключевой доклад (он же открытие)
                  • 3 интенсива:
                    • Практическое введение в нейронные сети и глубокое обучение
                    • Гибридные приложения и практики DevOps на базе Azure Stack
                    • Blockchain: от первого «умного контракта» до ICO

                  • 12 практических мастер-классов:
                    • Azure Service Fabric — платформа для распределенных проектов на практике
                    • Возможности Microsoft Visual Studio Team Services и Azure для Java-разработчиков
                    • Контейнеризация и DevOps приложений на примере Docker и Visual Studio Team Services
                    • Postgres в облаке Azure
                    • Контейнеры на практике
                    • Сбор системной телеметрии в реальном времени
                    • Рефакторинг унаследованного кода: как разорвать зависимости?
                    • Построение процесса безопасной разработки
                    • Программируем в мире Minecraft с фреймворком Malmo от MS Research
                    • Машинное обучение в облаке Microsoft Azure
                    • Визуализация данных с помощью Power BI
                    • И еще один мастер-класс

                  Для справки: интенсив — это активность на 6 часов с теорией и практикой, мастер-класс — это 2 часа теории и практики. Соответственно, регистрируясь на мероприятие, вы выбираете либо один интенсив (из числа доступных на момент регистрации), либо посещение мастер-классов.

                  Как попасть в школу


                  1. Мы проводим школу бесплатно для участников.
                  2. Необходимо подать заявку на участие, ответив на несколько вопросов.
                  3. Если вы получили подтверждение, следуйте дальнейшим инструкциям, включая установку необходимого ПО на ваш ноутбук в зависимости от выбранных интенсивов или мастер-классов.

                  До встречи 1 июня!

                  Комментарии (0)

                    Let's block ads! (Why?)

                    [Перевод] Подборка слайдов от Джулии Эванс

                    [Из песочницы] Ubuntu + XRDP + x11RDP терминальный сервер, с поддержкой звука, для серфинга в интернете — пошаговое руководство

                    Особенно нетерпеливых отсылаю сразу в конец статьи где будет ссылка на готовый .deb-пакет для установки.

                    А для всех остальных…

                    Предисловие


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

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

                    Сборка и тестирование производилось на виртуальной машине от virtualbox. При использовании чистого железа так же могут возникнуть проблемы с настройками драйверов. Из программного обеспечения были использованы Ubuntu 16.04 LTS server / x11RDP 7.6 / xRPD 0.9.2. На других версиях данное решение не тестировалось и не проверялось.

                    XRDP


                    XRDP является специальным прокси-сервером который прослушивает RDP port 3389 на предмет внешних запросов. Принимает на него подключения и далее, в зависимости от настроек, переадресовывает их на внутренние порты OS.

                    Для установки скомпилируем необходимые пакеты:

                    sudo apt install -y git autoconf libtool pkg-config libxrandr-dev nasm libssl-dev libpam0g-dev \
                    libxfixes-dev  libx11-dev  libxfixes-dev libssl-dev libxrandr-dev libjpeg-dev flex \
                    bison libxml2-dev intltool xsltproc xutils-dev python-libxml2 xutils libpulse-dev make libfuse-dev
                    

                    По умолчанию в репозиториях UBUNTU 16.04 находится пакет xRDP v0.6.0 в котором я не смог найти решения для рализации передачи звука. Поэтому собирать новую версию xRDP будем из исходников.

                    На многих сайтах советуют клонировать свежую версию при помощи git:

                    git clone git://github.com/FreeRDP/xrdp.git

                    Но, в данном случае, возникает риск того что, на момент тестирования, вы можете столкнуться с совершенно новой версией имеющей значительные отличия от v0.9.2 и что то может пойти не так. Поэтому скачиваем и распаковываем фиксированный пакет XRDP v0.9.2 с сайта разработчиков.
                    cd~ 
                    wget http://ift.tt/2pZVYto
                    unzip v0.9.2
                    mv xrdp-0.9.2 xrdp 
                    

                    Перейдем в каталог с XRPD и начнем компиляцию:
                    cd ~/xrdp
                    ./bootstrap
                    

                    На данном этапе необходимо указать компилятору что в готовую сборку необходимо добавить модуль поддержки звука. Более подробно об этом можно прочесть в файле который теперь находится на вашем диске в каталоге с исходниками XRDP.
                    cat ~/xrdp/sesman/chansrv/pulse/pulse-notes.ubuntu.txt

                    Установим библиотеки необходимые для переадресации звука.
                    sudo apt-get install -y libjson0-dev libsndfile1-dev
                    

                    Добавляем ключ активирующий звук --enable-load_pulse_modules при конфигурации пакета, собираем и устанавливаем.
                    ./configure --enable-load_pulse_modules --enable-jpeg --enable-fuse --disable-ipv6
                    make
                    sudo make install
                    
                    

                    Теперь скопируем ключ защиты. В данном файле содержится пара ключей RSA, используемая для аутентификации удаленного клиента. Открытый ключ является самозаверяющим. Если этого не сделать то при подключении получим ошибку протокола RDP.
                    sudo mkdir /usr/share/doc/xrdp
                    sudo cp /etc/xrdp/rsakeys.ini /usr/share/doc/xrdp/rsakeys.ini
                    

                    Добавляем XRDP в автозагрузку. Для автозагрузки будем использовать systemd:
                    sudo sed -i.bak 's/EnvironmentFile/#EnvironmentFile/g' /lib/systemd/system/xrdp.service
                    sudo sed -i.bak 's/sbin\/xrdp/local\/sbin\/xrdp/g' /lib/systemd/system/xrdp.service
                    sudo sed -i.bak 's/EnvironmentFile/#EnvironmentFile/g' /lib/systemd/system/xrdp-sesman.service
                    sudo sed -i.bak 's/sbin\/xrdp/local\/sbin\/xrdp/g' /lib/systemd/system/xrdp-sesman.service
                    sudo systemctl daemon-reload
                    sudo systemctl enable xrdp.service 
                    

                    Перезагружаемся.
                    sudo reboot
                    

                    Проверим прошла ли установка:
                    xrdp -v
                    

                    $ xrdp: A Remote Desktop Protocol server.
                    Copyright © Jay Sorg 2004-2014
                    See www.xrdp.org for more information.
                    Version 0.9.2

                    Если все сделано верно то теперь можно попробовать подключиться к серверу при помощи любого RDP клиента с другого компьютера. Или установить на этой же тестовой машине клиент freerdp:
                    sudo apt install -y freerdp-x11
                    

                    И подключится локально внутри системы.
                    xfreerdp /v:127.0.0.1
                    

                    Дальше стартовой заставки дело не пойдет потому что у нас пока не установлена серверная часть ПО которой прокси сервер XRDP был бы должен передать управление.

                    x11RDP


                    В качестве серверной части могут быть использованы серверные модули поддерживающие разные протоколы передачи данных. В данном варианте будем использовать x11RDP v7.6.

                    Небольшое отступление


                    Все дело в том, что установленный нами ранее прокси XRDP 0.9.2 не может, без доработок, перебрасывать подключения к предыдущей версии сервера x11RDP v7.1 на котором, в свою очередь, отсутствует известная проблема с переключением раскладок клавиатуры ru/en как при создании нового сеанса так и при переподключении к старой сессии.

                    А при использовании старой версии прокси XRDP 0.6.0 с которой работает сервер x11RDP v7.1 мы не сможем осуществить переброс звука так как XRDP 0.6.0 не поддерживает ключ --enable-load_pulse_modules.

                    Для установки x11RDP v 7.6 вернемся в каталог:

                    cd ~/xrdp/xorg/X11R7.6
                    

                    Создадим каталог для установки пакета и произведем сборку.
                    sudo mkdir /opt/X11rdp
                    time sudo ./buildx.sh /opt/X11rdp
                    
                    

                    Сборка происходит достаточно долго 15-30 мин. Команда time позволит нам увидеть, по окончании процесса процесса, сколько было затрачено времени.

                    Создадим симлики:

                    sudo ln -s /opt/X11rdp/bin/X11rdp /usr/local/bin/X11rdp
                    sudo ln -s /usr/share/fonts/X11 /opt/X11rdp/lib/X11/fonts
                    
                    

                    Теперь у нас есть и RDP прокси и RDP сервер которому прокси передаст управление. Но нет графического приложения которое RDP сервер сможет вывести на экран.

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

                    sudo apt -y install xterm
                    

                    И попробуем подключиться к серверу со стороны, или локально если ранее установили freerdp.
                    xfreerdp /v:127.0.0.1
                    

                    Теперь из меню необходимо выбрать x11RDP чтобы указать прокси какому именно серверу должно быть передано управление и ввести логин и пароль к ubuntu серверу.

                    Если все верно то на экране мы увидим графический интерфейс терминала xterm.

                    Настройка языковой консоли и режима переключения языков


                    Почти все основные настройки клавиатуры в ubuntu осуществляются при прмощи пакета setxkbmap.

                    Для начала закроем терминальную сессию и вернемся в консоль нашего ubuntu сервера
                    посмотрим что творится с клавиатурой.

                    setxkbmap -print –verbose
                    
                    

                    $ keycodes: xfree86+aliases(qwerty)
                    types: complete
                    compat: complete
                    symbols: pc+us+ru:2+group(alt_shift_toggle)
                    geometry: pc(pc104)
                    xkb_keymap {
                    xkb_keycodes { include «xfree86+aliases(qwerty)» };
                    xkb_types { include «complete» };
                    xkb_compat { include «complete» };
                    xkb_symbols { include «pc+us+ru:2+group(alt_shift_toggle)» };
                    xkb_geometry { include «pc(pc104)» };
                    };

                    Теперь подключимся к серверу терминалов и в терминале xterm выполним ту же команду:
                    setxkbmap -print –verbose
                    

                    $ Trying to build keymap using the following components:
                    keycodes: xfree86+aliases(qwerty)
                    types: complete
                    compat: complete
                    symbols: pc+us+inet(pc105)
                    geometry: pc(pc105)
                    xkb_keymap {
                    xkb_keycodes { include «xfree86+aliases(qwerty)» };
                    xkb_types { include «complete» };
                    xkb_compat { include «complete» };
                    xkb_symbols { include «pc+us+inet(pc105)» };
                    xkb_geometry { include «pc(pc105)» };
                    };

                    Обратим внимание на несоответствие в показаниях. На нашем ubuntu сервере все нормально:
                    symbols: pc+us+ru:2+group(alt_shift_toggle)

                    Есть русская консоль и определены клавиши переключения языка alt_shift. На сервере терминалов противоположность:
                    symbols: pc+us+inet(pc105)

                    Есть только английский язык и клавиши переключения языка не определены.

                    Есть еще одна странность. Локально, на сервере ubuntu, модель клавиатуры определилась как pc104:

                    geometry: pc(pc104)

                    А на сервере терминалов как pc105:
                    geometry: pc(pc105)

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

                    Вернемся к ubuntu серверу и посмотрим что установлено в конфигурационных файлах системы
                    по умолчанию

                    cat /etc/default/keyboard
                    

                    $ # KEYBOARD CONFIGURATION FILE
                    # Consult the keyboard(5) manual page.
                    XKBMODEL=«pc105»
                    XKBLAYOUT=«us,ru»
                    XKBVARIANT=","
                    XKBOPTIONS=«grp:alt_shift_toggle,grp_led:scroll»
                    BACKSPACE=«guess»

                    Установим hwinfo (сборщик информации об аппаратной части системы) и посмотрим информацию о железе:
                    sudo apt install -y hwinfo
                    sudo hwinfo | grep XkbModel
                    
                    

                    $ XkbModel: pc104

                    В итоге аппаратно модель клавиатуры, в нашем случае определяется как pc104, в файлах конфигурации системы прописано обращение к устройству pc105. На локальном сервере определяется pc104, на сервере терминалов pc105. Из за данного несоответствия, в частности, возникает несколько глюков. Многие пишут что не могут справиться с настройкой локали на терминальном сервере. У некоторых пропадает русификация после переподключении к отвалившейся сессии и те пе.

                    Откроем в любом текстовом редакторе (я использую в примере редактор nano) файл конфигурации системы и исправим тип клавиатуры по умолчанию в соответствии с данными полученными от hwinfo:

                    sudo nano /etc/default/keyboard
                    

                    XKBMODEL=«pc104»

                    Файл клавиатурных настроек программы XRDP 0.9.2 находится в файле
                    /etc/xrdp/xrdp_keyboard.ini. Эти данные прокси передает xRDP серверу как данные клиента который производит подключение. Откроем его и добавим в конец данного файла блок поддержки русской локали.

                    Источник

                    Предварительно исправив модель клавиатуры на верную model=pc104 (в оригнальной версии установлена pc105):

                    sudo nano /etc/xrdp/xrdp_keyboard.ini
                    
                    

                    Добавляем в конец файла:
                    [rdp_keyboard_ru]
                    keyboard_type=4
                    keyboard_subtype=1
                    model=pc104
                    options=grp:alt_shift_toggle
                    rdp_layouts=default_rdp_layouts
                    layouts_map=layouts_map_ru

                    [layouts_map_ru]
                    rdp_layout_us=us,ru
                    rdp_layout_ru=us,ru


                    Перезагружаемся.

                    Подключаемся к терминальному серверу. Проверяем клавиатурные настройки:

                    setxkbmap -print -verbose
                    

                    $ Trying to build keymap using the following components:
                    keycodes: xfree86+aliases(qwerty)
                    types: complete
                    compat: complete
                    symbols: pc+us+ru:2+group(alt_shift_toggle)
                    geometry: pc(pc104)
                    xkb_keymap {
                    xkb_keycodes { include «xfree86+aliases(qwerty)» };
                    xkb_types { include «complete» };
                    xkb_compat { include «complete» };
                    xkb_symbols { include «pc+us+ru:2+group(alt_shift_toggle)» };
                    xkb_geometry { include «pc(pc104)» };

                    Все в порядке, клавиатура определяется верно:

                    geometry: pc(pc104)

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

                    ЗВУК


                    В ubuntu старше 10.10, по умолчанию, за вывод звука отвечает сервер pulseaudio. В десктопных дистрибутивах он уже установлен. В серверных нет. Поэтому установим его.
                    sudo apt install -y pulseaudio
                    

                    Посмотрим и запишем номер версии пакета который по умолчанию установился в нашу систему:
                    pulseaudio –version
                    

                    $ pulseaudio 8.0

                    Теперь нам необходимо собрать библиотеки для переадресации звука. Подробно об этом написано в файле с исходниками XRDP который мы уже просматривали ранее при сборке XRDP.
                    cat ~/xrdp/sesman/chansrv/pulse/pulse-notes.ubuntu.txt

                    Для начала скачаем исходники pulseaudio. Сделать это можно двумя способами.

                    1. Скачать общую версию с сайта разработчиков (http://ift.tt/2rlhM6G) скачивать надо именно ту версию которую мы определили ранее. В нашем случае pulseaudio 8.0

                    2. Более правильно — подключить deb-src репозитории системы и получить исходники которые использовали авторы данного ubuntu дистрибутива.

                    По умолчаню ссылки на исходники в ubuntu отключены. Для подключения отредактируем файл списка репозиториев:

                    sudo nano /etc/apt/sources.list
                    

                    Необходимо удалить значки # перед всеми списками deb-src репозиториев.

                    Было:

                    deb http://ift.tt/2rlfILQ xenial universe
                    #deb-src http://ift.tt/2rlfILQ xenial universe
                    deb http://ift.tt/2rlfILQ xenial-updates universe
                    #deb-src http://ift.tt/2rlfILQ xenial-updates universe

                    Стало:
                    deb http://ift.tt/2rlfILQ xenial universe
                    deb-src http://ift.tt/2rlfILQ xenial universe
                    deb http://ift.tt/2rlfILQ xenial-updates universe
                    deb-src http://ift.tt/2rlfILQ xenial-updates universe

                    В противном случае получим ошибку:
                    $ E: Вы должны заполнить sources.list, поместив туда URI источников пакетов

                    Скачиваем исходники:
                    cd ~
                    sudo apt update
                    apt-get source pulseaudio
                    sudo apt-get build-dep pulseaudio
                    cd ~/pulse*
                    time dpkg-buildpackage -rfakeroot -uc -b
                    
                    

                    Переходим в установочный каталог XRDP:
                    cd ~/xrdp/sesman/chansrv/pulse/
                    

                    Исправляем make файл.
                    sudo nano Makefile
                    

                    В строчке:
                    PULSE_DIR = /home/lk/pulseaudio-1.1

                    Меняем путь на наш каталог с библиотеками pulseaudio.Причем, обратите внимание, конструкции типа ~/pulseaudio* в данном случае не проходят. Необходимо точно прописать адрес каталога.
                    PULSE_DIR = /home/admin/pulseaudio-8.0

                    Замените admin на имя пользователя в Вашей системе. Сохраняем исправленный файл и делаем:
                    sudo make
                    

                    Если все выполнено верно в каталоге будут скомпилированы 2 новых библиотеки
                    module-xrdp-sink.so и module-xrdp-source.so.

                    Осталось только скопировать их в рабочий каталог с библиотеками сервера pulseaudio:

                    sudo chmod 644 *.so
                    sudo cp *.so /usr/lib/pulse*/modules
                    

                    После перезапуска звук будет активирован.

                    Осталось установить любую удобную графическую оболочку. Для терминального сервера желательно что то не ресурсоемкое.

                    XFCE
                    Минимальный набор элементов:

                    sudo apt-get install xfce4
                    

                    Полный набор элементов:
                    sudo apt-get install xubuntu-desktop 
                    

                    LXDE
                    Минимальный набор элементов:
                    sudo apt-get install lxde-core
                    

                    Полный набор элементов:
                    sudo apt-get install lxde
                    

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

                    Для LXDE

                    echo lxsession > ~/.xsession
                    

                    Для XFCE

                    echo xfce4-session > ~/.xsession
                    

                    Готовый пакет для установки


                    http://ift.tt/2rlmK3b
                    в который включены:

                    XRDP v0.9.2 + скомпилированные библиотеки pulseaudio 8.0 + исправленный keyboard.ini файл для поддержки русификации. Те же кто не хочет сам собирать бакенд x11RDP v7.6 по этой же ссылке могут скачать готовый deb пакет бакенда xorg v.0.2.0. Порядок установки для совсем ленивых

                    sudo apt-get -y install pulseaudio
                    sudo dpkg -i xrdp-v0.9.2-rus-audio.deb
                    sudo dpkg -i xorgxrdp-0.2.0.deb
                    sudo apt install -y xfce4 chromium-browser
                    sudo reboot
                    

                    Повторюсь что пакеты собирались практически на коленках и работа протестирована только
                    на ubuntu 16.04 server. Работоспособность данных .deb-пакетов на других системах не гарантирована.

                    Комментарии (0)

                      Let's block ads! (Why?)

                      Надежда Морошкина: «Вы же не подбираете команду по знакам Зодиака?»

                      Открытая трансляция DotNext 2017 Piter: Jon Skeet, Sasha Goldshtein и Андрей Акиньшин в прямом эфире

                      Мы продолжаем наш цикл открытых трансляций для всех желающих проводить субботы с пользой! До этого мы делали вещание с Mobius 2017 и JPoint 2017 (доступ к ней уже закрыли вроде) В этот раз у нас есть кое-что интересное для .NET-разработчиков.

                      Завтра в 10 утра начнется бесплатная YouTube-трансляция первого трека DotNext 2017 Piter!

                      Первый трек – самый большой и популярный среди наших участников, а значит спикеры и темы соответствующие. Оцените сами:

                      • Sasha goldshtn Goldshtein – The Performance Investigator's Field Guide
                      • Jon Skeet – The changing state of immutability C#
                      • Tomas Herceg – Entity Framework Core: Is It Ready Yet?
                      • Андрей DreamWalker Акиньшин – Поговорим про память
                      • Игорь Лабутин – Межпроцессные разговоры: причины и способы
                      • Алексей Савватеев – Задача о коллективной ответственности

                      Кроме того, утром в 10:10 вы сможете посмотреть live-интервью с Джоном Скитом, а также еще пяток интервью с другими нашими спикерами. Будет круто!

                      Ссылка на YouTube-трансляцию под катом.

                      Программа трека


                      10:30-11:30 SashagoldshtnGoldshtein — The Performance Investigator's Field Guide

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

                      Прежде всего, мы рассмотрим анти-методы проведения performance investigations и чеклист, разработанный для поиска узких мест в Windows и .NET приложениях. После этого Саша перейдет к обзору идеального инструмента для анализа производительности и покажет, насколько доступные на сегодняшний день приложения близки к идеалу: речь пойдет прежде всего об Event Tracing for Windows, но кроме него Саша покажет несколько собственных open source разработок, которые он до этого в докладах не презентовал.

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



                      12:00-13:00 Jon Skeet — The changing state of immutability C#

                      Доклад о том, что такое immutability, в чем ее преимущества и как она развивалась в C#. Кроме того, речь пойдет о различных вариантах реализации неизменяемости объектов/состояний, их плюсах и минусах (особенно в случаях, когда язык или платформа ее не поощряют), а также о том, что будет происходить с этой концепцией в будущем.



                      13:30-14:30 Tomas Herceg — Entity Framework Core: Is It Ready Yet?

                      Этот доклад рассчитан на тех, кто ещ не работал с Entity Framework Core, но хотел бы попробовать. Речь пойдет о различиях между Entity Framework и Entity Framework Core, а также о том, какой фреймворк выбрать для вашего проекта. Обсудим фичи Entity Framework Core, которые Томас покажет в демках на разных СУБД под Linux.

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



                      15:15-16:15 АндрейDreamWalkerАкиньшин — Поговорим про память

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

                      Обсудим как низкоуровеные хардварные штуки (CPU cache и его ассоциотивность, выравнивание, store forwarding, 4K aliasing, prefetching, cache/page splits, cache bank conflicts и т.п.), так и более .NET-специфичные проблемы (pinned objects, large object heap, особенности работы кучи в полном .NET Framework и Mono).



                      16:45-17:45 Игорь Лабутин — Межпроцессные разговоры: причины и способы

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



                      18:15-19:15 Алексей Савватеев — Задача о коллективной ответственности

                      Крутой кейноут, взорвавший сцену на JPoint 2017, приходит в Петербург на DotNext!

                      Представьте себе, что вы – дежурный милиционер в турникетном зале. Безбилетники пытаются прыгать через турникеты, Вы их ловите. Вы один, их – много. Возможно ли им задать такие «правила игры», чтобы они не смели пытаться перепрыгивать, даже если заранее известно, что поймаете вы в любом случае только одного из них? Оказывается, возможно.

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

                      Если вам интересна тема теории игр, если вам интересно узнать об исследованиях, за которые уже несколько раз присуждали премию Нобелевского комитета по экономике, то добро пожаловать на доклад.

                      Трансляция в перерывах


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

                      Мы решили эту проблему по-своему – в перерывах будут транслироваться события, происходящие на конференции, а также интервью со спикерами. Вести интервью буду я вместе с phillennium – скучать вам не придется. Вопросы, буде таковые вдруг возникнут, можно будет задать в Telegram-канале конференции: t.me/dotnextconf

                      Ограничения


                      • Поскольку трансляция бесплатная, она предоставляется по принципу as is: мы уверены, что все будет хорошо, но если вдруг что – не обессудьте!
                      • Видеозаписей не будет. То есть они, конечно, будут, но только для участников конференции, оставивших фидбек. А для всех остальных мы традиционно выложим их через 3-4 месяца.
                      • Вы не сможете смотреть, что происходит в других залах. А там будет много интересного. В следующий раз регистрируйтесь и смотрите все без ограничений.

                      Комментарии (0)

                        Let's block ads! (Why?)

                        Разбор ошибок в работе продавца

                        Как разрабатываются отраслевые и специализированные решения для 1С:ERP

                        В этой статье мы попытаемся рассказать, как с помощью удаленных и территориально распределенных команд мы наладили процесс выпуска прикладных решений, расширяющих функциональность нашего продукта «1С:ERP Управление предприятием 2».

                        Отраслевые и специализированные продукты, расширяющие функциональность «1С:ERP Управление предприятием 2»


                        На основе нашей технологической платформы «1С:Предприятие 8» мы сами, фирма «1С», выпускаем около 20 решений самого разного калибра – от «Управления небольшой фирмой», «1С:Бухгалтерии» разных редакций (от «Упрощенки» до «Корпоративной») до нашего самого функционально насыщенного решения — «1С:ERP Управление предприятием 2».

                        «1С:ERP 2» — решение, автоматизирующее бОльшую часть процессов многопрофильных предприятий. Но есть целые классы задач и отраслевых особенностей, требующих более детальной проработки, нежели она есть в «1С:ERP 2» – торговля, логистика, управление складом, строительство, сельское хозяйство и т.д. Включать эту функциональность в типовое решение нецелесообразно, т.к. это приведет к усложнению работы большинства пользователей. К тому же у нас самих может не хватить ресурсов для полноценной реализации требуемой функциональности.

                        Итак, перед нами стоит задача:

                        • Уметь создавать отраслевые/специализированные решения под потребности рынка
                        • с минимально возможным привлечением ресурсов собственно фирмы «1С»
                        • и с гарантированным качеством реализации

                        Эту задачу мы решаем так:
                        • Решения создаются нашими партнерами, имеющими экспертизу в соответствующей области
                        • От фирмы «1С» в создании решения принимает участие «модераторы» — архитекторы проекта, и кураторы направлений
                        • Мы разработали регламенты проектирования и разработки решений, позволяющие контролировать качество продукта

                        Продукты, расширяющие функциональность «1С:ERP», выпускаются в рамках проекта «1С-Совместно».

                        Сотрудничество с партнерами «1С-Совместно»


                        По проекту «1С-Совместно» продукт создается партнером фирмы «1С», но правообладателем является фирма «1С». Мы сами определяем требования к продукту и контролируем его качество.
                        Порядок разработки совместных решений:
                        • Мы ищем востребованную рынком функциональность, еще не реализованную в наших продуктах, и составляем функциональные требования к новому продукту;
                        • Мы объявляем конкурс на разработку новых «1C-Совместных» решений, а также принимаем заявки на выпуск продуктов по инициативе партнеров;
                        • Мы определяем партнеров с наибольшими компетенциями и готовностью долгосрочного развития направления;
                        • Мы заказываем партнеру разработку, развитие и поддержку продукта.

                        Мы следим за уровнем качества наших решений. Так, по данным анкетирования оценивают качество самих продуктов, работы партнера и линии консультаций разработчика:
                        график качества
                        image

                        Концепция модульного подхода в архитектуре решений на базе «1С:ERP Управление предприятием 2»


                        С точки зрения концепции и архитектуры, «1С:ERP» является совершенно новым продуктом по сравнению с его предшественником «1С:Управление производственным предприятием». Одно из ключевых отличий нового решения — главенство функций управления. При разработке линейки отраслевых и специализированных решений важно было поддержать это и в решениях «1С-Совместно». Особое внимание было уделено задачам интегрируемости решений между собой и с «1С:ERP», возможности построения единой информационной системы, состоящей из набора модулей с ключевым интеграционным ядром – «1С:ERP».
                        Цель – единая бесшовная информационно-управленческая система, построенная на базе «1C:ERP» и других решениях «1С:Предприятие 8»:
                        image
                        Была разработана концепция модульного подхода в архитектуре решений на базе «1С:ERP». Концепция определяет принципы разработки, унификации и интеграции различных конфигураций в рамках единой системы управления и учета.

                        Все решения в рамках программы «1С-Совместно», расширяющие возможности «1С:ERP», должны следовать концепции модульного подхода. Ключевыми задачами модульного подхода являются:

                        • Формирование линейки продуктов, взаимодействующих как на уровне интеграционного ядра «1С:ERP», так и между собой
                        • Упрощение создания единого решения для пользователей из набора отраслевых и специализированных решений
                        • Минимизация трудозатрат по изменению состава модулей решения и дальнейшему сопровождению решения
                        • Исключение дублирования общих функциональных подсистем в различных продуктах

                        image
                        На момент написания статьи количество уже выпущенных решений линейки – 31 (18 партнеров-разработчиков), с учетом планов разработки, во 2 квартале 2017г. количество решений достигнет 52 (24 партнера-разработчика).

                        Процесс проектирования, разработки и контроля отраслевых и специализированных решений для «1С:ERP»


                        Взаимодействие разработчиков в единой среде проектирования


                        В работе над проектом участвуют территориально распределенные и слабо связанные между собой команды разработчиков. Так, на сегодня у нас в работе:
                        • 28 территориально распределенных команд разработчиков;
                        • 44 активных проекта;
                        • 19 новых решений.

                        Для контроля качества работы команд мы регламентировали общие принципы взаимодействия команд и проектов:
                        • Анализ, проектирование и документирование функциональности
                        • Формулирование требований к другим решениям
                        • Контроль сроков прохождения этапов проектирования и разработки
                        • Актуализация модели решения
                        • Контроль заявленной функциональности
                        • Обсуждение требований и пожеланий в рамках Круглого стола для разработчиков

                        Круглый стол для разработчиков решений «1С-Совместно» проводится ежегодно, в рамках данного мероприятия обсуждаются проблемы и предложения, организуются площадки для общения и взаимодействия партнеров-разработчиков и разработчиков 1С:ERP.
                        image

                        СППР для отраслевых и специализированных решений (СППР ОР/СР) – CASE-средство для совместного проектирования решений


                        Все разработчики решения взаимодействуют через продукт «1С:Система проектирования прикладных решений» (сокращенно СППР). СППР помогает проектировать прикладные решения на платформе «1С:Предприятие» и позволяет обслуживать задачи полного цикл разработки ПО — сбор требований, контроль изменений, документирование, баг-трекинг и т.д. СППР разработана как конфигурация на платформе «1С:Предприятие 8».

                        СППР может быть использована как в качестве инструмента для проектирования новых информационных систем, разрабатываемых в среде «1С:Предприятия 8», так и для описания и документирования существующих систем, разработанных ранее без использования СППР.

                        Мы выбрали СППР как наиболее удобный и подходящий для наших задач и соответствующий выдвигаемым нами требованиям к CASE-средству:

                        • Возможность построения модели сложной системы
                        • Управление жизненным циклом продукта
                        • Мультипроектность
                        • Кастомизируемость
                        • Интеграция со средой разработки
                        • Доступность для партнеров-внедренцев 1С

                        В рамках разработки Линейки решений для «1С:ERP», всем участникам проекта доступна общая облачная база СППР ОР/СР, работа с которой определяется регламентом:
                        Цели
                        • Управление жизненным циклом выпуска продуктов
                        • Проектирование и документирование проектных решений
                        • Контроль результатов разработки

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

                        image

                        Управление жизненным циклом выпуска продуктов


                        Весь проект разделен на функциональные области (разделы проекта), каждый раздел курирует руководитель направления со стороны «1С». Разделы наполняются функциональностью решений (продуктов), причем:
                        • функциональность одного раздела не обязательно определяется одним продуктом,
                        • функциональность всего раздела может разрабатываться несколькими партнерами-разработчиками.

                        К решениям, реализующим функциональность одного раздела проекта, предъявляются особые требования к возможности интеграции.

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

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

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

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

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

                        Логическая модель решений в методологии IDEF0


                        В базе СППР ОР/СР функциональность всех решений линейки описывается в рамках одного проекта. В основе логического проектирования заложена методология IDEF0.

                        Целостность и непротиворечивость функциональной модели модерируется функциональным архитектором проекта, назначенным со стороны «1С».

                        В рамках СППР основные понятия трактуются следующим образом:

                        • Функциональный блок (Activity Box) – некоторая конкретная функция создания новой информации в рамках рассматриваемой системы
                        • Связь – информация, которая обрабатывается функциональным блоком (входы и выходы) или оказывает иное влияние на функцию (управление и исполняющие связи – профили пользователей):
                          • Вход функции – связь (информация), потребляемая функцией. На схеме отражается в виде стрелки, направленной к левой стороне функционального блока
                          • Выход функции – связь (информация), порождаемая в результате выполнения функции. На схеме отражается в виде стрелки, исходящей из правой стороны функционального блока
                          • Управление (управляющее воздействие на функцию, правило) – связь (информация) анализируемая для принятия решений в рамках функций. На схеме отражается в виде стрелки к верхней стороне функционального блока.
                          • Исполнение (профиль пользователя) – воздействие на функцию со стороны одного или нескольких пользователей системы. На схеме отражается в виде стрелки к верхней стороне функционального блока.

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

                          Варианты поставки продуктов


                          Концепция модульного подхода допускает различные варианты поставки продуктов:
                          • функциональность в составе «1С:ERP»,
                          • функциональность в виде самостоятельно работающей конфигурации,
                          • функциональность для интеграции в «1С:ERP».

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

                          Например, «1С:ERP Управление строительной организацией 2» (партнер – разработчик «1С-Рарус») содержит в своем составе:

                          • функциональные возможности типовой «1С:ERP»,
                          • собственную оригинальную отраслевую функциональность,
                          • функциональность отдельных решений:
                            • «1С:Смета 3»,
                            • Модуль «1С:Риэлтор. Управление продажами недвижимости для 1С:ERP»,
                            • Модуль «1С:Аренда и управление недвижимостью для 1C:ERP»,
                            • Модуль «1С:Управление автотранспортом для 1С:ERP».

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

                          Библиотека функциональных подсистем 1С-Совместно


                          В целях унификации решений линейки выделяется общий универсальный функционал и формируется «Библиотека функциональных подсистем 1С-Совместно».
                          Библиотека предоставляет собой инструментарий для разработчиков решений «1С:Совместно», содержащий набор универсальных функциональных подсистем, готовые разделы для пользовательской документации и технологию для интеграции в отраслевые и специализированные решения с целью унификации в рамках единой линейки, что позволяет:
                          • Обеспечить общие подходы в реализации единых универсальных механизмов в решениях «1С-Совместно»;
                          • сократить трудоемкость выпуска новых решений за счет использования готового функционала;
                          • упростить интеграцию решений различных партнеров-разработчиков при объединении конфигураций;
                          • сократить количество различных реализаций единых механизмов для пользователей, одновременно использующих несколько решений.

                          Состав библиотечных функций модерируется функциональным архитектором проекта «1С» и наполняется партнерами-разработчиками.

                          Уведомление ответственных о ходе реализации технических проектов


                          Учитывая большое количество участников проектов разработки, необходимы контрольные инструменты для уведомления ответственных о ходе реализации технических проектов.
                          В базе СППР ОР/СР настроены регламентные задания, формирующие рассылки писем. В этих целях выделены следующие группы получателей:
                          • Ответственные за проект
                          • Ответственные за разделы проекта
                          • Ответственные за технические проекты

                          И типы рассылок:
                          • Контроль выполнения технических проектов — еженедельно
                          • Контроль активности партнеров-разработчиков — еженедельно
                          • Уведомления о необходимости выполнения действий в базе (задачи, сообщения и т.п.) — ежедневно
                          • Уведомления о наличии ошибок в моделях — ежедневно

                          Ответственные получают по электронной почте такие отчеты, как:
                          • Сроки выполнения контрольных точек (этапов)
                          • Сроки выполнения технических проектов
                          • Изменения объектов метаданных типовой конфигурации
                          • Ошибки и предупреждения в модели
                          • Актуальные задачи
                          • Активность работы над техническим проектом

                          Примеры отчетов
                          imageimage
                          imageimage

                          Подготовка конфигураций к тиражированию


                          Общая функциональная схема предпроизводственной проверки решения:
                          image

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

                          Партнер-разработчик несет ответственность за качество тестирования, комплектность материалов и передает материалы фирме «1С» для проверки перед выпуском полностью работоспособными, протестированными, соответствующими требованиям сертификации «1С:Совместимо», «Системе стандартов и методик разработки конфигураций для платформы 1С:Предприятие 8» и требованиям Регламентов взаимодействия с разработчиками совместных решений.

                          Также рассматривается возможность включения дополнительных проверок на соответствие функциональной модели в базе СППР ОР/СР: контроль соответствия заявленного функционала ОР/СР реализованному и контроль соответствия модификации объектов типовой конфигурации заявленным в СППР ОР/СР.

                          Сервис 1С:Облачная карта решений


                          Для потенциальных пользователей новых решений нужно сделать удобный и простой сервис, с легкодоступными для понимания инструментами. Для этого был разработан специальный веб-сервис и клиент для отображения схем:
                          image
                          Сервис «1С:Облачная карта решений» предоставляет доступ к функциональным моделям ряда решений фирмы «1С», а также отраслевых и специализированных решений, выпускаемых по схеме 1С-Совместно. Актуализация функциональной модели обеспечивается прямым обращением к веб-сервису базы «СППР для отраслевых и специализированных решений», модель решений в которой поддерживается в актуальном состоянии в соответствии с Концепцией модульного подхода в архитектуре решений на базе «1С:ERP Управление предприятием 2».

                          Сервис поддерживает переходы по прямым ссылкам на схемы функций, например:


                          Преимущества использования сервиса


                          Для потенциальных клиентов:
                          • Получение представления о функционале готовых решений фирмы «1С»
                          • Подготовка функциональных требований для организации конкурсов по проектам автоматизации

                          Для пользователей продуктов фирмы «1С»:
                          • Изучение функциональности готовых решений для автоматизации отраслевых и специализированных бизнес-процессов, определение продуктов, содержащих требуемую функциональность.
                          • Возможность выбрать партнера, ознакомиться с условиями приобретения, информационными материалами, успешными проектами внедрения, а также принять участие в ближайших мероприятиях и получить доступ к демонстрационной базе (при наличии такой возможности), путем перехода на страницу продукта сайта http://solutions.1c.ru
                          • Расширение областей автоматизации в рамках используемых решений путем изучения и применения всех заложенных функциональных возможностях.

                          Использование сервиса партнерами


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

                          Команда разработчиков – команда профессионалов


                          Результаты любого проекта зависят от команды. Для разработки линейки решений для «1С:ERP» удалось собрать большую команду Профессионалов, готовых к экспериментам, готовых совместно преодолевать трудности. Учитывая количество партнеров-разработчиков, привести полный список сложно, выделять отдельных партнеров тоже не хотелось бы.
                          в выборе партнеров, их компетенции каждого в своей области и синергии в достижении единой цели, мы не ошиблись.

                          В заключение


                          Мы поделились с вами ключевыми процессами разработки линейки решений для 1С:ERP. Полностью процесс достаточно сложный, включающий большое количество участников, как с нашей стороны, так и со стороны партнеров-разработчиков. В первую очередь хотелось донести до читателя процессы проектирования и контроля хода такого сложного проекта. Подобный подход мы применяем впервые и надеемся распространить этот опыт и на разработку других линеек решений.

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

                          Были бы рады обсудить наш опыт, получить обратную связь о предлагаемом сервисе. Постараемся учесть полезные замечания.

                        Комментарии (0)

                          Let's block ads! (Why?)