-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexamples-and-dependencies-ru.html
145 lines (143 loc) · 7.95 KB
/
examples-and-dependencies-ru.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
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;
}
#header
{
background: #2BA6E3;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
a
{
color: #3A91CB;
text-decoration: none;
}
.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: 50px;
color: #aaa;
}
#lang
{
float: right;
}
</style>
</head>
<body>
<center>
<div id="header">
<a href="index-ru.html">Новости</a>
<a href="games-ru.html">Игры</a>
<a href="tools-ru.html">Инструменты</a>
<a href="about-ru.html">О нас</a>
<div id="lang">
<a href="examples-and-dependencies.html">EN</a>
<a href="examples-and-dependencies-ru.html">RU</a>
</div>
</div>
<h1>В новостях</h1>
<div class="news_item">
<h2 class="news_item_title">
<a href="
2018-08-21-examples-and-dependencies-ru.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="Screenshot" /><figcaption>Screenshot</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="2018-06-27-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>
<script type="text/javascript">
</script>
</body>
</html>