<!DOCTYPE html>
<html>
    <meta charset="utf-8">
    <head>
        <style>
            #header
            {
                background: #2BA6E3;
                padding: 0.7em;
                text-align: left;
            }
            
            #header a
            {
                color: white;
                text-decoration: none;
                padding: 0.5em 1em 0.5em 1em;
            }
            .news_item
            {
                background: #FFFFFF;
                width: 720px;
                padding: 1em;
                margin-top: 2em;
                margin-bottom: 2em;
                border: 1px solid #E0E0E0;
                text-align: left;
            }
            .news_item_contents
            {
                color: #444;
                line-height: 1.5em;
            }
            .news_item_date
            {
                margin-bottom: 2em;
                color: #aaa;
            }
            body
            {
                background: #FAFAFA;
            }
            code, pre
            {
                font-family: monospace, serif;
                font-size: 1em;
                color: #7f0a0c;
            }
            figure
            {
                margin: 0px;
                padding: 0px;
            }
            img
            {
                width: 720px;
            }
            html
            {
                font-family: sans-serif;
            }
            a
            {
                color: #3A91CB;
                text-decoration: none;
            }
            #lang
            {
                float: right;
            }
            figcaption
            {
                color: #aaa;
            }
            
            table
            {
                border-collapse: collapse;
            }
            
            table, th, td
            {
                border: 1px solid #aaa;
                padding: 0.5em;
                margin-top: 0.5em;
                margin-bottom: 0.5em;
            }
        </style>
    </head>
    <body>
        <center>
        <div id="header">
            <a href="../../ru/news/index.html">Новости</a>
            <a href="../../ru/page/games.html">Игры</a>
            <a href="../../ru/page/about.html">О нас</a>
            <div id="lang">
                <a href="../../en/news/examples-and-dependencies.html">EN</a>
                <a href="examples-and-dependencies.html">RU</a>
            </div>
        </div>
        <h1>В новостях</h1>
                <div class="news_item">
                    <h2 class="news_item_title">
                        <a href="examples-and-dependencies.html">Примеры и зависимости</a>
                    </h2>
                    <p class="news_item_date">
                        2018-08-21 00:00
                    </p>
                    <div class="news_item_contents">
        <figure>
<img src="../../images/2018-08-21-examples-and-dependencies.png" alt="Облако" /><figcaption>Облако</figcaption>
</figure>
<p>Эта статья описывает два новых кросс-платформенных примера OpenSceneGraph и изменение в работе с зависимостями.</p>
<p><strong>Примеры клиента HTTP и выбора узла сцены</strong></p>
<p>После окончания работы над <a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/04.RemoteDebugging">примером удалённой отладки</a> и <a href="example-driven-development.html">сообщения об этом</a> мы с удивлением обнаружили, что безопасное соединение HTTPS между отлаживаемым приложением и брокером отладки работало лишь в веб-версии примера. Десктопная и мобильная версии работали лишь с помощью обычного соединения HTTP.</p>
<p>Т.к. текущая схема отладки не имеет авторизации, отладка по обычному соединению HTTP не несёт никаких проблем. Однако, если мы хотим получить доступ к ресурсам, расположенным на популярных сайтах вроде GitHub и BitBucket, мы обязаны поддерживать HTTPS.</p>
<p>Необходимость поддержки HTTPS на каждой платформе побудила нас создать <a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/03.HTTPClient">пример клиента HTTP</a>. Оказалось, что каждая платформа имеет собственные правила по работе с HTTPS:</p>
<ul>
<li>веб (Emscripten) предоставляет Fetch API</li>
<li>десктоп может использовать Mongoose с OpenSSL</li>
<li>Android предоставляет HttpUrlConnection в языке Java</li>
<li>iOS предоставляет NSURLSession в языке Objective-C</li>
</ul>
<p>Необходимость поддержки разных языков на разных платформах привела к созданию так называемого шаблона “хозяин-гость”:</p>
<ul>
<li>гость (не привязан к платформе)
<ul>
<li>имеет сетевое представление</li>
<li>используется кросс-платформенным кодом на C++</li>
</ul></li>
<li>хозяин (определённая платформа)
<ul>
<li>опрашивает гостя на наличие ожидающих выполнение запросов</li>
<li>обрабатывает их</li>
<li>сообщает результат гостю</li>
</ul></li>
</ul>
<p><a href="https://github.com/OGStudio/openscenegraph-cross-platform-examples/tree/master/05.NodeSelection">Пример выбора узла сцены</a> оказался простым и не создал особых проблем.</p>
<p><strong>Изменение в работе с зависимостями</strong></p>
<p>Больше года нам приходилось жить со следующими <a href="http://forum.openscenegraph.org/viewtopic.php?t=17443">недостатками</a> сборки OpenSceneGraph официальными средствами:</p>
<ul>
<li>проблемы сборки под macOS ввиду использования определённых флагов сборки</li>
<li>обход механизмов проверки зависимостей для использования PNG на Android</li>
<li>принадлежность сборок iOS под симулятор и устройство к разным проектам Xcode</li>
<li>ожидания в 20-30 минут для сборки OpenSceneGraph</li>
</ul>
<p>Эти недостатки замедляли нас и усложняли разработку новых примеров. После того, как мы десятый раз столкнулись с указанными проблемами в этом месяце, мы решили исправить их раз и навсегда. Теперь мы собираем OpenSceneGraph как часть каждого примера за 2-3 минуты без какой-либо магии. Также мы использовали этот подход включения зависимости как части каждого примера для остальных библиотек вроде Mongoose и libpng-android.</p>
<p>Теперь без этих препятствий мы можем разрабатывать быстрее. Это значительно облегчит создание следующей технической демонстрации Mahjong 2!</p>
<p>На этом мы заканчиваем описание двух новых кросс-платформенных примеров OpenSceneGraph и изменения в работе с зависимостями.</p>

                    </div>
                </div>
        </center>
    </body>
</html>