www.samag.ru
Журнал «БИТ. Бизнес&Информационные технологии»      
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Интеграция Open Source-решений  

Open Source в облачной среде

Облачные решения становятся всё более популярными в мире. Компании стремятся использовать их для

 Читать далее...

Автоматизация  

Нейросеть вам в руки! Как использовать ИИ для автоматизации задач

Использование ИИ для автоматизации задач помогает компании получить конкурентное преимущество, поскольку объединение

 Читать далее...

Рынок труда  

Специалист по этическому ИИ, инженер по квантовым вычислениям или аналитик по метавселенной?

Новые тенденции в развитии ИТ могут привести к возникновению новых специальностей в

 Читать далее...

Книжная полка  

Учитесь убеждать и побеждать

Издательство «БХВ», как всегда, порадовало своих читателей хорошими книжными новинками. Кроме популярных

 Читать далее...

Сетевая инфраструктура  

Как удаленная работа меняет подход к сетевой инфраструктуре?

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

 Читать далее...

Мониторинг  

Какой мониторинг нужен сегодня?

По мнению экспертов ГК InfoWatch, действия сотрудников – самая распространенная причина инцидентов

 Читать далее...

Книжная полка  

Руководство для тех, кто увлечен ИИ, программированием. И дизайном

Накануне лета издательство «БХВ» выпустило книжные новинки, от которых любителям чтения будет

 Читать далее...

Мобильные приложения  

Искусственный интеллект в мобильных приложениях: возможности и перспективы

Обзор современных применений ИИ в мобильных приложениях, анализ перспектив развития этой технологии,

 Читать далее...

ИТ-образование  

Как сделать ИТ-образование эффективным?

Эксперты ИТ-отрасли отвечают на вопросы «СА». Обсуждаем ключевые аспекты для улучшения образовательных

 Читать далее...

Work-life balance  

Как айтишнику найти баланс между работой и личной жизнью?

Обсуждаем инструменты для эффективного управления временем, снижения уровня стресса и достижения гармонии. На

 Читать далее...

Книжная полка  

Всё самое нужное – под одной обложкой

Отличительная черта книжных новинок, выпущенных недавно издательством «БХВ» – это их универсальность. Не просто

 Читать далее...

ИТ-инфраструктура  

Системы мониторинга ИТ-инфраструктуры-2025

Без мониторинга ИТ-инфраструктуры не обходится ни одна компания, хотя бы потому, что

 Читать далее...

Открытое ПО  

Безопасность Open Source: рискуем или контролируем?

Компания «Кросс технолоджис» изучила, как используется ПО с открытым кодом в компаниях

 Читать далее...

Работа с нейросетью  

Скажи, есть ли у тебя AI, и я скажу, кто ты

Недавно сервис по поиску работы SuperJob выяснил, что каждый второй россиянин уже

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 9605
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 9780
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 7202
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 4484
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 5283
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 5292
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 7967
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 4656
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 4898
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 8927
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 12370
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 13913
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 15688
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 10553
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 8583
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 6795
Комментарии: 4
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 5944
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 4833
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 4511
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 4737
Комментарии: 1
Рецензия на книгу «MongoDB в действии»

 Читать далее...

Друзья сайта  

 Native Client – Rich Internet Applications от Google

Архив номеров / 2009 / Выпуск №2 (75) / Native Client – Rich Internet Applications от Google

Рубрика: Острый угол /  Острый угол

Кирилл Сухов Кирилл Сухов

Native Client – Rich Internet Applications от Google

Rich Internet Applications – что это такое и где применяется? Мы этим уже пользуемся или это только туманное будущее? Попытаемся разобраться в данных вопросах, рассмотрев концепцию RIA на различных примерах. Сегодня мы установим и опробуем Google Native Client.

Что такое Rich Internet Applications? Если честно, так и хочется ляпнуть что-то вроде «очередной маркетинговый термин», но в данном случае я погрешу против истины. RIA – это приложения, работающие через сеть и предоставляющие клиенту ресурсы веб-сервера, но обладающие функциональностью полноценных настольных приложений. Это определение не страдает академичностью. Я его только что выдумал, но (по моему мнению) оно не хуже любого другого. По сути Rich Internet Applications (RIA) – это следующая ступень эволюции: от страничек, сайтов, через веб-приложения к чему-то далёкому и полнофункциональному.

Как правило, RIA-приложения кроссплатформенны, запускаются в браузере и не требуют какой-либо дополнительной установки программного обеспечения на стороне клиента. В качестве примера веб-приложений, близких по идеологии к RIA, можно привести Google Maps, GMail или ролики YouTube.

Впервые этот термин прозвучал из уст маркетологов компании Macromedia теперь уже в далёком 2001 году. С тех пор появилось немало технологий и реализаций данной концепции. Наиболее известные из них: Adope Air, Alchemy, Flex, JavaFX, Microsoft Silverlight, XULRunner от Mozilla Foundation и только что появившийся Google Native Client.

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

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

Google Native Client – Quake в браузере и другие

Понятно, что такой гигант, как Google, не мог стоять в стороне от тенденции, которую сам же и создал. Первый шаг в этом направлении, замечательный инструментарий Google Gears, был выпущен ещё в конце весны 2008 года, а в декабре 2008 года компания представила свою RIA-технологию – Google Native Client. Её суть – запуск в браузере модулей, написанных на нативном коде (увы, адекватного перевода термина «native code» в голову не приходит) для архитектуры x86.

В отличие от JavaFX или Silverlight в этой технологии нет компиляции в байт-код и какой-либо виртуальной машины. Была создана среда выполнения, позволяющая запускать обычные, «родные» для этой платформы программы в безопасном для данной системы окружении. Разработчики идеально выдержали модель «песочницы».

Во избежание взаимодействия Native Client непосредственно с операционной системой весь код исполняется в отдельном, изолированном контейнере. Это позволяет модулю использовать системные ресурсы, но в то же время ограждает ОС от возможного случайного или злонамеренного повреждения [2].

В целом Native Client (NaCL) состоит из контейнера, играющего роль песочницы, и среды исполнения (runtime) нативного кода. Третьим элементом выступает плагин для веб-браузера. Для коммуникации между браузером и NaCL-модулем предоставляет два варианта: simple RPC-интерфейс (SRPC) и давно известный Netscape Plugin Application Programming Interface (NPAPI).

Писать модули для Google Native Client предполагается на любом компилирующемся на данной системе языке программирования.

В настоящий момент Google Native Client рассматривается как экспериментальная технология, но разве это мешает нам попробовать её в деле прямо сейчас?

Первое знакомство

Скачиваем Native Client SDK со странички проекта – http://code.google.com/p/nativeclient/wiki/Downloads.

Сразу хочу заметить, что хотя технология и позиционируется как кроссплатформенная (представлены сборки SDK для Linux, Windows и Mac, а также исходный код приложения), чтобы в полной мере её опробовать, пользователям ОС Windows придется выполнить несколько больше телодвижений, а именно установить интерпретатор Python и возможно cygwin. Причём Pyhton (это уже касается пользователей любой операционной системы) должен быть версии 2.4.x-2.5.x (на момент написания этой статьи работа с Python 2.6 давала ошибки).

Полученный архив распаковываем в любое удобное место и рассматриваем полученный результат. На рис. 1 показана структура Native Client SDK.

Рисунок 1. Структура Google Native Client

Рисунок 1. Структура Google Native Client

Директории common/ и tests/ содержат исходные коды примеров и тестов, директории scons-out/, site_scons/ и ite_scons_general/ содержат файлы, имеющие отношение к сборке Native Client-приложений. В поддиректории scons-out/*/staging находятся скомпилированные примеры для тестирования Native Client-плагина браузера.

Файлы Sconstruct, scons.bat и scons предназначены для сборки самой программы Native Client, а также примеров и тестов в различных операционных системах.

В директориях include/, intermodule_comm/, ncv/, nonnacl_util/, npapi_plugin/ и service_runtime/ содержится исходный код ядра Native Client, в частности npapi_plugin/ содержит исходники плагина для браузера.

В tools/ находятся исходные коды Native Client SDK.

В gtest/ – Open Source-фрэймворк для юнит-тестирования от Google.

В директориях third-party/ и native_client/third-party/ содержатся, как это понятно из названия, инструменты не гугловского происхождения, в частности gcc и imagemagick и собранная версия Native Client SDK. В директории documentation/ – документация (какая неожиданность!).

Теперь, сориентировавшись, можно опробовать работоспособность Native Client. Для этого отправимся в директорию googleclient/native_client/tests/, выбираем там, к примеру, папку /life, набираем в консоли команду:

python run.py

И наслаждаемся результатом (см. рис. 2).

Рисунок 2. Native Client приложение «life»

Рисунок 2. Native Client приложение «life»

В общем, всё работает, но не затем мы всё это разворачивали, чтобы увидеть ту же «жизнь» в браузере. Попытка открыть файл life.html приведёт к выдаче сообщения о незагруженном плагине. Что и разумно – мы пока ничего не ставили. Немедленно исправим эту ситуацию, тем более что в директории tests/ среди других призывно маячит папка quake/.

Устанавливаем Native Client-плагин

Сначала закроем все экземпляры браузера, который мы хотим пропачтить (в данном случае это рекомендуемый руководством Firefox 3).

Затем отправляемся в директорию googleclient/native_client/ и запускаем команду:

./scons --prebuilt firefox_install

Скрипт установки, проверив систему, разок спросит нас, продолжать ли, установит плагин и закончит свою работу сообщением вроде:

 

*****************************************************************

* You have successfully installed the NaCl Firefox plugin.

* As a self-test, please confirm you can run

* /root/.mozilla/plugins/sel_ldr

* from a shell/command prompt. With no args you should see

* No nacl file specified

* on Linux or Mac and no output on Windows.

*********************************************************************

* To test this installation also try the test links on the page

* scons-out/nacl/staging/index.html

*****************************************************************

scons: done building targets.

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

.\scons --prebuilt firefox_install

но, несмотря на все усилия, мне так и не удалось добиться нормального выполнения этой команды. Но можно пойти другим путём – необходимо скопировать из папки \nacl\googleclient\native_client\scons-out\opt-win\staging в папку C:\Program Files\Mozilla Firefox\plugins следующие 3 файла: inpGoogleNaClPlugin.dll, SDL.dll, sel_ldr.exe и перезапустить браузер.

Теперь проверим установленный плагин. Зайдём в директорию googleclient/native_client/scons-out/nacl/staging и раскроем браузером файл index.html. Мы получим доступ к различным тестам, представляющими собой html-странички с внедрёнными скомпилированными приложениями Google Native Client (см. рис. 3).

Рисунок 3. Тестируем плагин

Рисунок 3. Тестируем плагин

Если посмотреть исходный код такого html-файла, мы увидим примерно следующую конструкцию:

<HTML>

<HEAD>

<TITLE>Some Demo</TITLE>

<script type="text/javascript">

var nacl_elt;

// Before scripting the loaded module, ensure the Native

// Client module is loaded.

var startupTimeout;

var PostLoadInit = function() {

if (nacl_elt.__moduleReady == 1) {

clearTimeout(startupTimeout);

nacl_elt.focus();

} else {

if (nacl_elt.__moduleReady == undefined) {

alert('The Native Client plugin was unable to load');

return;

}

startupTimeout = setTimeout(PostLoadInit, 100);

}

}

 

// Init is called when the document has completed loading.

// It downloads the NativeClient modules.

 

var Init = function() {

// service_url contains the location of the NativeClient

// module to be loaded as a service.

nacl_elt = document.getElementById('embed1');

PostLoadInit();

}

</script>

</HEAD>

<BODY id="bodyId" onload="Init();" >

<h1>SomeDemo</h1>

<p>

Some text

</p><embed id="embed1" src="some_demo.nexe" type="application/x-nacl-srpc" width=512 height=512>

<br>

<script>

var embed1 = document.getElementById('embed1');

</script>

</BODY>

</HTML>

Земля в иллюминаторе

Возвращаемся в директорию /googleclient/native_client/tests в папку earth/ (см. рис. 4).

Рисунок 4. Файлы примера

Рисунок 4. Файлы примера

Как нетрудно догадаться, сценарий run.py запускает приложение, но нам это совсем не нужно. Вместо этого откроем в браузере html-страницу earth.html. и... получим то самое сообщение (см. рис. 5). Как же так? Ведь плагин мы установили?

Рисунок 5. Модуль не загружен

Рисунок 5. Модуль не загружен

Дело в том, что, несмотря на наличие Native Сlient-плагина, модуль не грузится по той простой причине, что он не собран, не откомпилирован, а представлен только исходным кодом (файл earth.сс), на языке С++. Впрочем, в той же папке мы видим файл Makefile, и это позволяет надеяться, что ситуацию можно исправить. Сначала соберём и запустим Standalone-приложение:

make debug run

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

Теперь соберём Native client-модуль:

make release nacl

Если все прошло нормально, появятся ещё два файла – earth.nexe и earth_release.nexe. Можно опять открыть earth.html в браузере, и теперь картинка должна быть совсем другой (см. рис. 6).

Рисунок 6. Земля!!!

Рисунок 6. Земля!!!

Рассмотрим пример посложнее. В папке googleclient/native_client/tests/xaos находятся исходники и сценарий сборки известного фрактального конструктора Xaos. Правда, не исходники самого Xaos, их сборочный скрипт скачает отдельно. Собирать просто:

./xaos_tool.sh all

И, раскрыв браузером xaos.html, наслаждаемся результатом (см. рис. 7).

Рисунок 7. Редактируем фракталы

Рисунок 7. Редактируем фракталы

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

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

Заходим в папку googleclient/native_client/tests/quake/ и скачиваем исходные коды игры:

wget http://www.libsdl.org/projects/quake/src/sdlquake-1.0.9.tar.gz

...

wget http://www.libsdl.org/projects/quake/data/quakesw-1.0.6.tar.gz

...

Теперь их разархивируем:

tar -x --strip-components=1 -f sdlquake-1.0.9.tar.gz

...

tar -x -f quakesw-1.0.6.tar.gz

...

Должно образоваться множество файлов – исходников и одна директория – id1/.

Следующим шагом наложим необходимый патч из native Client:

patch -p1 <nacl_quake.patch

Всё, теперь можно приступать к сборке:

make clean nacl

make debug nacl

make release nacl

Осталось открыть в браузере файл quake.html, и можно гонять монстров (см. рис. 8).

Рисунок 8. Наши победят!

Рисунок 8. Наши победят!

И пока всё...

Да, на этом, к сожалению, пока всё. К сожалению, технология пока действительно сырая, и автору не удалось последовательно написать с нуля и запустить Google Native Client-приложение ни на одной платформе. Более того, на данный момент времени NaCL отказывается собираться с Python 2.6.x, браузер с установленным NaCL-плагином неоднократно замечен в неадекватном поведении, некоторые тесты не запускаются под платформой Windows.

С другой стороны, API NaCL открыт и документирован (/googleclient/native_client/scons-out/doc/html), поэтому для настоящего энтузиаста нет препятствий попробовать свои силы в написании приложений «невзирая на». Трудно сейчас сказать, насколько перспективным окажется это занятие, но интересным – наверняка.

  1. Домашняя страница проекта – http://code.google.com/p/nativeclient.
  2. Описания архитектуры GoogleNative Client (PDF) – http://nativeclient.googlecode.com/svn/trunk/nacl/googleclient/native_client/documentation/nacl_paper.pdf.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru