<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>FreeSource - Мусорка/AltLinux/Sisyphus/Alterator/drivers</title>
<link>http://freesource.info/wiki/Мусорка/AltLinux/Sisyphus/Alterator/drivers</link>
<description>History/revisions of FreeSource/Мусорка/AltLinux/Sisyphus/Alterator/drivers</description>
<language>en-us</language>
<item>
<title>2006-09-08 18:27:42</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers/show?time=2006-09-08+18%3A27%3A42</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".musorka.altlinux.sisyphus.alterator.drivers" href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;drivers&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2006-09-08+18%3A27%3A42">2006-09-08 18:27:42&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers">2006-10-26 13:00:43&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Несколько слов о&amp;nbsp;HTTP-браузере. На&amp;nbsp;данный момент это&amp;nbsp;типичное AJAX-приложение для&amp;nbsp;Web-браузера. При&amp;nbsp;необходимости производятся &amp;laquo;скрытые&amp;raquo;  (xmlHttpRequest) запросы через cgi-шлюз (а потом и&amp;nbsp;через локальный сокет, как&amp;nbsp;вы&amp;nbsp;видели в&amp;nbsp;примере выше) к&amp;nbsp;lookout и&amp;nbsp;в зависимости от&amp;nbsp;ответов производятся те&amp;nbsp;или иные модификации в&amp;nbsp;интерфейсе. Для&amp;nbsp;изображения на&amp;nbsp;web-странице интерфейсов используется Javascript библиотека  &lt;a href="http://www.innoscript.org" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />QuiX&lt;/a>.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Несколько слов о&amp;nbsp;HTTP-браузере. На&amp;nbsp;данный момент это&amp;nbsp;типичное AJAX-приложение для&amp;nbsp;Web-браузера. При&amp;nbsp;необходимости производятся &amp;laquo;скрытые&amp;raquo;  (xmlHttpRequest) запросы через cgi-шлюз (а потом и&amp;nbsp;через локальный сокет, как&amp;nbsp;вы&amp;nbsp;видели в&amp;nbsp;примере выше) к&amp;nbsp;lookout и&amp;nbsp;в зависимости от&amp;nbsp;ответов производятся те&amp;nbsp;или иные модификации в&amp;nbsp;интерфейсе. Для&amp;nbsp;изображения на&amp;nbsp;web-странице интерфейсов используется Javascript библиотека &lt;a href="http://qooxdoo.oss.schlund.de/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />qooxdoo&lt;/a>. В&amp;nbsp;будущем возможно будет использоваться библиотека &lt;a href="http://www.innoscript.org" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />QuiX&lt;/a>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-09-08 18:26:22</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers/show?time=2006-09-08+18%3A26%3A22</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;drivers&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2006-09-08+18%3A26%3A22">2006-09-08 18:26:22&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2006-09-08+18%3A27%3A42">2006-09-08 18:27:42&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;ul>&lt;li> &lt;strong>HTTP-browser&lt;/strong> &amp;ndash; рисует виджеты в&amp;nbsp;окне любого WWW-браузера.&lt;/li>&lt;/ul>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;ul>&lt;li> &lt;strong>&lt;span class="missingpage">HTTP-browser&lt;/span>&lt;a href="http://freesource.info/wiki/http/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>&lt;/strong> &amp;ndash; рисует виджеты в&amp;nbsp;окне любого WWW-браузера.&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-04-18 17:24:37</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers/show?time=2006-04-18+17%3A24%3A37</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;drivers&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2006-04-18+17%3A24%3A37">2006-04-18 17:24:37&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2006-09-08+18%3A26%3A22">2006-09-08 18:26:22&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">(use-modules  (alterator transport pipe-channel)&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(alterator transport client-socket))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
Обратите внимание на&amp;nbsp;то что&amp;nbsp;необходимо подгрузить расширения для&amp;nbsp;используемых модулей.&lt;br />
(use-modules (alterator transport pipe-channel))&lt;br />
&lt;div class="indent">(lookout)&lt;/div>
(use-modules (alterator transport server-socket))&lt;br />
&lt;div class="indent">(lookout)&lt;/div>
Браузер и&amp;nbsp;lookout общаются между собой на&amp;nbsp;достаточно простом языке. Сначала происходит открытие новой сессии (да, lookout &amp;mdash; это&amp;nbsp;много сессионный модуль интерфейсов), возможно для&amp;nbsp;этого потребуется некоторая авторизация. После открытия сессии браузер получает от&amp;nbsp;lookout команды на&amp;nbsp;создание/удаление/модификацию виджетов, а&amp;nbsp;в ответ сообщает о&amp;nbsp;тех или&amp;nbsp;иных интерфейсных событиях (например о&amp;nbsp;нажатии некоторой кнопки). Надо отметить, что&amp;nbsp;оповещать он&amp;nbsp;будет только о&amp;nbsp;тех событиях, о&amp;nbsp;которых его&amp;nbsp;попросили. То&amp;nbsp;есть если у&amp;nbsp;некоторой кнопки не&amp;nbsp;было зарегистрировано обработчика &amp;#8220;clicked&amp;#8221;, то&amp;nbsp;браузер не&amp;nbsp;будет дёргать лишний раз&amp;nbsp;lookout на&amp;nbsp;предмет этого бессмысленного события.&lt;br />
Примечание: в&amp;nbsp;новой версии http-интерфейса для&amp;nbsp;связи браузера и&amp;nbsp;alterator используется протокол XML-RPC.&lt;br />
Несколько слов о&amp;nbsp;HTTP-браузере. На&amp;nbsp;данный момент это&amp;nbsp;типичное AJAX-приложение для&amp;nbsp;Web-браузера. При&amp;nbsp;необходимости производятся &amp;laquo;скрытые&amp;raquo;  (xmlHttpRequest) запросы через cgi-шлюз (а потом и&amp;nbsp;через локальный сокет, как&amp;nbsp;вы&amp;nbsp;видели в&amp;nbsp;примере выше) к&amp;nbsp;lookout и&amp;nbsp;в зависимости от&amp;nbsp;ответов производятся те&amp;nbsp;или иные модификации в&amp;nbsp;интерфейсе. Для&amp;nbsp;изображения на&amp;nbsp;web-странице интерфейсов используется Javascript библиотека &lt;a href="http://qooxdoo.oss.schlund.de/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />qooxdoo&lt;/a>. В&amp;nbsp;будущем возможно будет использоваться библиотека &lt;a href="http://www.innoscript.org" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />QuiX&lt;/a>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;div class="indent">(lookout auth-all)&lt;br />
(admiral &amp;laquo;/usr/lib/alterator/model/&amp;raquo;)&lt;br />
(rear-admiral &amp;laquo;/usr/lib/alterator/model/&amp;raquo;)&lt;br />
(lookout auth-all)&lt;br />
(admiral &amp;laquo;/usr/lib/alterator/model/&amp;raquo;)&lt;br />
(rear-admiral &amp;laquo;/usr/lib/alterator/model/&amp;raquo;)&lt;/div>
Браузер и&amp;nbsp;lookout общаются между собой на&amp;nbsp;достаточно простом языке. Сначала происходит открытие новой сессии (да, lookout &amp;mdash; это&amp;nbsp;много сессионный модуль интерфейсов), возможно для&amp;nbsp;этого потребуется некоторая авторизация. После открытия сессии браузер получает от&amp;nbsp;lookout команды на&amp;nbsp;создание/удаление/модификацию виджетов, а&amp;nbsp;в ответ сообщает о&amp;nbsp;тех или&amp;nbsp;иных интерфейсных событиях (например о&amp;nbsp;нажатии некоторой кнопки). Надо отметить, что&amp;nbsp;оповещать он&amp;nbsp;будет только о&amp;nbsp;тех событиях, о&amp;nbsp;которых его&amp;nbsp;попросили. То&amp;nbsp;есть если у&amp;nbsp;некоторой кнопки не&amp;nbsp;было зарегистрировано обработчика on-click, то&amp;nbsp;браузер не&amp;nbsp;будет дёргать лишний раз&amp;nbsp;lookout на&amp;nbsp;предмет этого бессмысленного события.&lt;br />
Несколько слов о&amp;nbsp;HTTP-браузере. На&amp;nbsp;данный момент это&amp;nbsp;типичное AJAX-приложение для&amp;nbsp;Web-браузера. При&amp;nbsp;необходимости производятся &amp;laquo;скрытые&amp;raquo;  (xmlHttpRequest) запросы через cgi-шлюз (а потом и&amp;nbsp;через локальный сокет, как&amp;nbsp;вы&amp;nbsp;видели в&amp;nbsp;примере выше) к&amp;nbsp;lookout и&amp;nbsp;в зависимости от&amp;nbsp;ответов производятся те&amp;nbsp;или иные модификации в&amp;nbsp;интерфейсе. Для&amp;nbsp;изображения на&amp;nbsp;web-странице интерфейсов используется Javascript библиотека &lt;a href="http://qooxdoo.oss.schlund.de/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />qooxdoo&lt;/a>.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-04-18 17:24:10</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers/show?time=2006-04-18+17%3A24%3A10</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;drivers&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2006-04-18+17%3A24%3A10">2006-04-18 17:24:10&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2006-04-18+17%3A24%3A37">2006-04-18 17:24:37&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;ul>&lt;li> &lt;strong>&lt;span class="missingpage">HTTP-browser&lt;/span>&lt;a href="http://freesource.info/wiki/http/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>&lt;/strong> &amp;ndash; рисует виджеты в&amp;nbsp;окне любого WWW-браузера.&lt;/li>&lt;/ul>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;ul>&lt;li> &lt;strong>&lt;span class="missingpage">~HTTP-browser&lt;/span>&lt;a href="http://freesource.info/wiki/http/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>&lt;/strong> &amp;ndash; рисует виджеты в&amp;nbsp;окне любого WWW-браузера.&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-02-14 11:25:30</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers/show?time=2006-02-14+11%3A25%3A30</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;drivers&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2006-02-14+11%3A25%3A30">2006-02-14 11:25:30&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2006-04-18+17%3A24%3A10">2006-04-18 17:24:10&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;ul>&lt;li> &lt;strong>&lt;span class="missingpage">~HTTP-browser&lt;/span>&lt;a href="http://freesource.info/wiki/http/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>&lt;/strong> &amp;ndash; рисует виджеты в&amp;nbsp;окне любого WWW-браузера.&lt;/li>&lt;/ul>
Браузер находится во&amp;nbsp;главе шины Woobus. Возможно что&amp;nbsp;lookout и&amp;nbsp;браузер физически находятся на&amp;nbsp;одной машине, а&amp;nbsp;возможно и&amp;nbsp;нет. Даже внешне обычное GUI-приложение alterator может реально работать с&amp;nbsp;какой-нибудь удалённой машиной.&lt;br />
HTTP-браузер подключается через входящую транспортную точку server-socket, сам&amp;nbsp;же&amp;nbsp;реально существует в&amp;nbsp;виде CGI-скрипта и&amp;nbsp;набора функций на&amp;nbsp;Javascript.&lt;br />
Браузер и&amp;nbsp;lookout общаются между собой на&amp;nbsp;достаточно простом языке. Сначала происходит открытие новой сессии (да, lookout &amp;mdash; это&amp;nbsp;много сессионный модуль интерфейсов), возможно для&amp;nbsp;этого потребуется некоторая авторизация. После открытия сессии браузер получает от&amp;nbsp;lookout команды на&amp;nbsp;создание/удаление/модификацию виджетов, а&amp;nbsp;в ответ сообщает о&amp;nbsp;тех или&amp;nbsp;иных интерфейсных событиях (например о&amp;nbsp;нажатии некоторой кнопки). Надо отметить, что&amp;nbsp;оповещать он&amp;nbsp;будет только о&amp;nbsp;тех событиях, о&amp;nbsp;которых его&amp;nbsp;попросили. То&amp;nbsp;есть если у&amp;nbsp;некоторой кнопки не&amp;nbsp;было зарегистрировано обработчика on-click, то&amp;nbsp;браузер не&amp;nbsp;будет дёргать лишний раз&amp;nbsp;lookout на&amp;nbsp;предмет этого бессмысленного события.&lt;br />
Протокол общения в&amp;nbsp;некотором смысле &amp;laquo;асинхронный&amp;raquo;. Чтобы каждая сторона не&amp;nbsp;занималась написанием лишних парсеров в&amp;nbsp;одну сторону идёт XML&amp;nbsp;(ответы lookout), в&amp;nbsp;другую &amp;mdash; S-выражения (запросы браузера).&lt;br />
Несколько слов о&amp;nbsp;HTTP-браузере. На&amp;nbsp;данный момент это&amp;nbsp;типичное AJAX-приложение для&amp;nbsp;Web-браузера. При&amp;nbsp;необходимости производятся &amp;laquo;скрытые&amp;raquo;  (xmlHttpRequest) запросы через cgi-шлюз (а потом и&amp;nbsp;через локальный сокет, как&amp;nbsp;вы&amp;nbsp;видели в&amp;nbsp;примере выше) к&amp;nbsp;lookout и&amp;nbsp;в зависимости от&amp;nbsp;ответов производятся те&amp;nbsp;или иные модификации в&amp;nbsp;интерфейсе. Для&amp;nbsp;изображения на&amp;nbsp;web-странице интерфейсов используется Javascript библиотека &lt;a href="http://qooxdoo.oss.schlund.de/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />qooxdoo&lt;/a>.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;ul>&lt;li> &lt;strong>Http-browser&lt;/strong> &amp;ndash; рисует виджеты в&amp;nbsp;окне любого WWW-браузера.&lt;/li>&lt;/ul>
Браузер находится во&amp;nbsp;главе шины Woobus. Возможно что&amp;nbsp;lookout и&amp;nbsp;браузер физически находятся на&amp;nbsp;одной машине, а&amp;nbsp;возможно и&amp;nbsp;нет. Даже внешне обычное GUI&amp;nbsp;приложение alterator может реально работать с&amp;nbsp;какой-нибудь удалённой машиной.&lt;br />
Http-браузер подключается через входящую транспортную точку server-socket, сам&amp;nbsp;же&amp;nbsp;реально существует в&amp;nbsp;виде CGI-скрипта и&amp;nbsp;набора функций на&amp;nbsp;Javascript.&lt;br />
Браузер и&amp;nbsp;lookout общаются между собой на&amp;nbsp;достаточно простом языке. Сначала происходит открытие новой сессии (да lookout &amp;ndash; это&amp;nbsp;много сессионный модуль интерфейсов), возможно для&amp;nbsp;этого потребуется некоторая авторизация. После открытия сессии браузер получает от&amp;nbsp;lookout команды на&amp;nbsp;создание/удаление/модификацию виджетов, а&amp;nbsp;в ответ сообщает о&amp;nbsp;тех или&amp;nbsp;иных интерфейсных событиях (например о&amp;nbsp;нажатии некоторой кнопки). Надо отметить, что&amp;nbsp;оповещать он&amp;nbsp;будет только о&amp;nbsp;тех событиях, о&amp;nbsp;которых его&amp;nbsp;попросили. То&amp;nbsp;есть если у&amp;nbsp;некоторой кнопки не&amp;nbsp;было зарегистрировано обработчика on-click, то&amp;nbsp;браузер не&amp;nbsp;будет дёргать лишний раз&amp;nbsp;lookout на&amp;nbsp;предмет этого бессмысленного события.&lt;br />
Протокол общения в&amp;nbsp;некотором смысле &amp;laquo;асинхронный&amp;raquo;. Чтобы каждая сторона не&amp;nbsp;занималась написанием лишних парсеров в&amp;nbsp;одну сторону идёт XML&amp;nbsp;(ответы lookout), в&amp;nbsp;другую &amp;ndash; S-выражения (запросы браузера).&lt;br />
Несколько слов о&amp;nbsp;Http-браузере. На&amp;nbsp;данный момент это&amp;nbsp;типичное AJAX приложение для&amp;nbsp;Web-браузера. При&amp;nbsp;необходимости производятся &amp;laquo;скрытые&amp;raquo;  (xmlHttpRequest) запросы через cgi-шлюз (а потом и&amp;nbsp;через локальный сокет, как&amp;nbsp;вы&amp;nbsp;видели в&amp;nbsp;примере выше) к&amp;nbsp;lookout и&amp;nbsp;в зависимости от&amp;nbsp;ответов производятся те&amp;nbsp;или иные модификации в&amp;nbsp;интерфейсе. Для&amp;nbsp;изображения на&amp;nbsp;web-странице интерфейсов используется Javascript библиотека qooxdoo.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2005-10-27 10:51:17</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers/show?time=2005-10-27+10%3A51%3A17</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;drivers&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2005-10-27+10%3A51%3A17">2005-10-27 10:51:17&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2006-02-14+11%3A25%3A30">2006-02-14 11:25:30&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a name="h5336-1">&lt;/a>&lt;h2>Многоликие интерфейсы&lt;/h2>
&lt;strong>Lookout&lt;/strong>,   интерфейсный модуль на&amp;nbsp;шине Woobus,  работает с&amp;nbsp;&amp;laquo;виртуальными&amp;raquo; виджетами. Когда в&amp;nbsp;описании интерфейса вы&amp;nbsp;спрашиваете или&amp;nbsp;меняете те&amp;nbsp;или иные аттрибуты у&amp;nbsp;виджета,  на&amp;nbsp;самом деле вы&amp;nbsp;работаете с&amp;nbsp;простым контейнером свойств. Для&amp;nbsp;того чтобы сделанные изменения отразились в&amp;nbsp;реальных виджетах от&amp;nbsp;alterator требуется проделать некоторую дополнительную работу.&lt;br />
Реальные же&amp;nbsp;виджеты предоставляет &lt;strong>браузер интерфейса&lt;/strong>. На&amp;nbsp;данный момент поддерживаются да&amp;nbsp;вида браузеров:&lt;br />
&lt;ul>&lt;li> &lt;strong>Qt-browser&lt;/strong> &amp;ndash; внешне выглядит как&amp;nbsp;обычное GUI&amp;nbsp;приложение
&lt;/li>&lt;li> &lt;strong>Http-browser&lt;/strong> &amp;ndash; рисует виджеты в&amp;nbsp;окне любого WWW-браузера.&lt;/li>&lt;/ul>
Браузер находится во&amp;nbsp;главе шины Woobus. Возможно что&amp;nbsp;lookout и&amp;nbsp;браузер физически находятся на&amp;nbsp;одной машине, а&amp;nbsp;возможно и&amp;nbsp;нет. Даже внешне обычное GUI&amp;nbsp;приложение alterator может реально работать с&amp;nbsp;какой-нибудь удалённой машиной.&lt;br />
Например, следующий layout показывает что&amp;nbsp;qt-browser соединён с&amp;nbsp;шиной ведущей через &amp;laquo;транспортную развязку&amp;raquo; в&amp;nbsp;другую шину.&lt;br />
(telegraph&lt;br />
&lt;div class="indent">(pipe-in &amp;laquo;/usr/bin/qtbrowser&amp;raquo;);gate to&amp;nbsp;qtbrowser&lt;br />
(client-socket)) ;gate to&amp;nbsp;other alterator&lt;/div>
А&amp;nbsp;вот традиционное подключение в&amp;nbsp;рамках одной машины:&lt;br />
(telegraph&lt;br />
&lt;div class="indent">(pipe-in &amp;laquo;/usr/bin/qtbrowser&amp;raquo;)&lt;br />
(lookout auth-all)&lt;br />
(admiral &amp;laquo;/usr/lib/alterator/model/&amp;raquo;)&lt;br />
(rear-admiral &amp;laquo;/usr/lib/alterator/model/&amp;raquo;)&lt;br />
(ensign))&lt;/div>
.....&lt;br />
Http-браузер подключается через входящую транспортную точку server-socket, сам&amp;nbsp;же&amp;nbsp;реально существует в&amp;nbsp;виде CGI-скрипта и&amp;nbsp;набора функций на&amp;nbsp;Javascript.&lt;br />
(telegraph&lt;br />
&lt;div class="indent">(server-socket) ;for HTTP brower&lt;br />
(lookout auth-all)&lt;br />
(admiral &amp;laquo;/usr/lib/alterator/model/&amp;raquo;)&lt;br />
(rear-admiral &amp;laquo;/usr/lib/alterator/model/&amp;raquo;)&lt;br />
(ensign))&lt;/div>
Браузер и&amp;nbsp;lookout общаются между собой на&amp;nbsp;достаточно простом языке. Сначала происходит открытие новой сессии (да lookout &amp;ndash; это&amp;nbsp;много сессионный модуль интерфейсов), возможно для&amp;nbsp;этого потребуется некоторая авторизация. После открытия сессии браузер получает от&amp;nbsp;lookout команды на&amp;nbsp;создание/удаление/модификацию виджетов, а&amp;nbsp;в ответ сообщает о&amp;nbsp;тех или&amp;nbsp;иных интерфейсных событиях (например о&amp;nbsp;нажатии некоторой кнопки). Надо отметить, что&amp;nbsp;оповещать он&amp;nbsp;будет только о&amp;nbsp;тех событиях, о&amp;nbsp;которых его&amp;nbsp;попросили. То&amp;nbsp;есть если у&amp;nbsp;некоторой кнопки не&amp;nbsp;было зарегистрировано обработчика on-click, то&amp;nbsp;браузер не&amp;nbsp;будет дёргать лишний раз&amp;nbsp;lookout на&amp;nbsp;предмет этого бессмысленного события.&lt;br />
Протокол общения в&amp;nbsp;некотором смысле &amp;laquo;асинхронный&amp;raquo;. Чтобы каждая сторона не&amp;nbsp;занималась написанием лишних парсеров в&amp;nbsp;одну сторону идёт XML&amp;nbsp;(ответы lookout), в&amp;nbsp;другую &amp;ndash; S-выражения (запросы браузера).&lt;br />
Несколько слов о&amp;nbsp;Http-браузере. На&amp;nbsp;данный момент это&amp;nbsp;типичное AJAX приложение для&amp;nbsp;Web-браузера. При&amp;nbsp;необходимости производятся &amp;laquo;скрытые&amp;raquo;  (xmlHttpRequest) запросы через cgi-шлюз (а потом и&amp;nbsp;через локальный сокет, как&amp;nbsp;вы&amp;nbsp;видели в&amp;nbsp;примере выше) к&amp;nbsp;lookout и&amp;nbsp;в зависимости от&amp;nbsp;ответов производятся те&amp;nbsp;или иные модификации в&amp;nbsp;интерфейсе. Для&amp;nbsp;изображения на&amp;nbsp;web-странице интерфейсов используется Javascript библиотека qooxdoo.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;a name="h5336-1">&lt;/a>&lt;h2>Интерфейсные драйверы в&amp;nbsp;alterator&lt;/h2>
На&amp;nbsp;данный момент в&amp;nbsp;alterator поддерживаются интерфейсы Qt&amp;nbsp;и Http. Как&amp;nbsp;же&amp;nbsp;удаётся lookout одновременно работать со&amp;nbsp;столь различными по&amp;nbsp;подходу вариантами? Всё дело в&amp;nbsp;волшебных пузырьках &amp;ndash; то&amp;nbsp;есть в&amp;nbsp;драйверах.&lt;a name="h5336-2">&lt;/a>&lt;h3>Интерфейс драйвера&lt;/h3>
Каждый драйвер интерфейса предоставляет как&amp;nbsp;минимум следующую информацию:&lt;br />
&lt;ul>&lt;li> О&amp;nbsp;реализации основных виджетов, например button, label, textbox.  Делается это&amp;nbsp;через инструкцию &lt;em>declare-widget&lt;/em>. Реализация описывается как&amp;nbsp;правило с&amp;nbsp;помощью &lt;span class="missingpage">объектов&lt;/span>&lt;a href="http://freesource.info/wiki/objects/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>.
&lt;/li>&lt;li> Определение конструктора интерфейса (например для&amp;nbsp;Qt&amp;nbsp;&amp;ndash; это&amp;nbsp;соответствует созданию объекта QApplication), деструктура интерфейса и&amp;nbsp;запуска интерфейса. Делается это&amp;nbsp;через инструкции: &lt;em>declare-application-constructor&lt;/em>, &lt;em>declare-application-destructor&lt;/em> и&amp;nbsp;&lt;em>declare-application-runner&lt;/em>.
&lt;/li>&lt;li> Определение корневого виджета в&amp;nbsp;который погружается любое описание интерфейса &amp;ndash; &lt;em>declare-root-widget&lt;/em>.
&lt;/li>&lt;li> Определение popup виджета в&amp;nbsp;который погружается описание интерфейса, который мы&amp;nbsp;желаем видеть как&amp;nbsp;всплывающий диалог &amp;ndash; &lt;em>declare-popup-widget&lt;/em>.
&lt;/li>&lt;li> Определение процедуры, которая выдаёт список языковых предпочтений &amp;ndash; это&amp;nbsp;&lt;span class="missingpage">специфично для&amp;nbsp;отдельных видов интерфейса&lt;/span>&lt;a href="http://freesource.info/wiki/international/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>. Инструкция &amp;ndash; &lt;em>declare-language-selector&lt;/em>.
&lt;/li>&lt;li> Дополнительные определения, например схема работы с&amp;nbsp;&lt;em>tabbox&lt;/em> оказалась настолько различной в&amp;nbsp;разных реализациях интерфейсов, что&amp;nbsp;потребовалась ручное определение функций.&lt;/li>&lt;/ul>
 &lt;br />
Вот&amp;nbsp;небольшой фрагмент описания готового драйвера для&amp;nbsp;http-интферфейса:&lt;br />
(declare-widget button (make-http-widget &amp;#8220;button&amp;#8221;) text)&lt;br />
(declare-widget label (make-http-widget &amp;#8220;label&amp;#8221;) text)&lt;br />
(declare-widget edit (make-http-widget &amp;#8220;edit&amp;#8221;) text)&lt;br />
(declare-widget hbox (make-http-widget &amp;#8220;hbox&amp;#8221;))&lt;br />
(declare-widget vbox (make-http-widget &amp;#8220;vbox&amp;#8221;))&lt;br />
(declare-widget groupbox (make-http-widget &amp;#8220;groupbox&amp;#8221;) title)&lt;br />
(declare-widget textbox (make-http-widget &amp;#8220;textbox&amp;#8221;) text)&lt;br />
(declare-widget tab-page (make-http-widget &amp;#8220;tab-page&amp;#8221;) text)&lt;br />
(declare-widget tabbox (make-http-widget &amp;#8220;tabbox&amp;#8221;))&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
;wrapper over tab-page&lt;br />
(define-macro (tab &amp;lt;name&amp;gt; . &amp;lt;args&amp;gt;)&lt;br />
&lt;div class="indent"> `(tab-page, &amp;lt;name&amp;gt; (vbox ., &amp;lt;args&amp;gt;)))&lt;/div>
(declare-widget listbox (make-http-widget &amp;#8220;listbox&amp;#8221; make-http-listbox))&lt;br />
(declare-application-constructor make-http-application)&lt;br />
(declare-application-destructor delete-http-application)&lt;br />
(declare-application-runner exec-http-application)&lt;br />
(declare-root-widget (make-http-widget &amp;#8220;vbox&amp;#8221;))&lt;br />
(declare-popup-widget (make-http-widget &amp;#8220;dialog&amp;#8221; make-http-dialog))&lt;br />
(declare-lang-selector (lambda()&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> (define-operation get-lang)&lt;br />
 (list (or (get-lang (fluid-ref http-session)) &amp;#8220;en&amp;#8221;))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
 &lt;a name="h5336-3">&lt;/a>&lt;h3>Драйвер Qt&lt;/h3>
Драйвер Qt&amp;nbsp;устроен относительно просто (суммарный объём исходного текста драйвера &amp;ndash; чуть больше 120K).&lt;br />
Создание, удаление интерфейса соответствует в&amp;nbsp;точности созданию и&amp;nbsp;удалению &lt;strong>QApplication&lt;/strong>.  Описание виджетов практически напрямую отображаются соответствующие объекты Qt: &lt;strong>QPushButton&lt;/strong>, &lt;strong>QLabel&lt;/strong>, и&amp;nbsp;так далее. Корневой виджет &amp;ndash; фактически &lt;strong>vbox&lt;/strong>, а&amp;nbsp;Popup &amp;ndash; &lt;strong>QDialog&lt;/strong>. Запуск интерфейса состоит в&amp;nbsp;получении описания виджета с&amp;nbsp;идентификатором &amp;laquo;/&amp;raquo;, заключению его&amp;nbsp;в&amp;nbsp;popup и&amp;nbsp;запуске диалога. По&amp;nbsp;завершению работы с&amp;nbsp;основным диалогом работа с&amp;nbsp;интерфейсом заканчивается.&lt;br />
Большая часть драйвера описана на&amp;nbsp;C++, остальное &amp;ndash; на&amp;nbsp;&lt;em>Scheme&lt;/em>. Мостик между этими языками настолько крошечный что&amp;nbsp;при переходе на&amp;nbsp;другую реализацию схемы менять придётся не&amp;nbsp;много. Связующие функции делатся на&amp;nbsp;две группы:&lt;br />
&lt;ul>&lt;li> Функции управления виджетами:
&lt;ul>&lt;li> &lt;strong>dlg-make-виджет&lt;/strong>  &amp;ndash; серия функций для&amp;nbsp;создания того или&amp;nbsp;иного виджета. Указатель на&amp;nbsp;&lt;strong>qt_widget&lt;/strong>* хранится в&amp;nbsp;scheme как&amp;nbsp;SMOB.
&lt;/li>&lt;li> &lt;strong>widget-set-attr&lt;/strong> &amp;ndash; изменение аттрибута Qt-виджета
&lt;/li>&lt;li> &lt;strong>widget-get-attr&lt;/strong> &amp;ndash; получение аттрибута Qt-виджета
&lt;/li>&lt;li> &lt;strong>widget-start&lt;/strong> &amp;ndash; запуск диалога
&lt;/li>&lt;li> &lt;strong>widget-stop&lt;/strong> &amp;ndash; останов диалога (в принципе эти&amp;nbsp;два метода можно свести к&amp;nbsp;widget-set-attr)
&lt;/li>&lt;li> &lt;strong>widget-delete&lt;/strong> &amp;ndash; удаление виджета. Обращаю внимание что&amp;nbsp;применяется отложенное удаление виджетов через deleteLater потому что&amp;nbsp;иногда виджеты могут удалять сами себя, например, при&amp;nbsp;замене содержимого диалога &amp;laquo;на лету&amp;raquo;.
&lt;/li>&lt;/ul>&lt;/li>&lt;li> Функции трансформирования объектов &lt;em>Scheme&lt;/em> в&amp;nbsp;объекты &lt;em>C++&lt;/em>:
&lt;ul>&lt;li>  &lt;strong>bool2scm, scm2bool&lt;/strong>  &amp;ndash;  в&amp;nbsp;bool и&amp;nbsp;обратно.
&lt;/li>&lt;li> &lt;strong>str2scm,scm2str&lt;/strong> &amp;ndash; в&amp;nbsp;&lt;em>char*&lt;/em> и&amp;nbsp;обратно
&lt;/li>&lt;li> &lt;strong>num2str,str2num&lt;/strong> &amp;ndash; в&amp;nbsp;&lt;em>int&lt;/em> и&amp;nbsp;обратно.
&lt;/li>&lt;li> &lt;strong>symbol2scm,scm2symbol&lt;/strong> &amp;ndash; символы в&amp;nbsp;строки и&amp;nbsp;обратно.&lt;/li>&lt;/ul>&lt;/li>&lt;/ul>
 В&amp;nbsp;части C++ построена иерархия объектов, наследников базового типа qt_widget. Каждый наследник является маленькой оболочкой вокруг того или&amp;nbsp;иного виджета qt&amp;nbsp;и в&amp;nbsp;его задачу входит: разбирать входящие запросы на&amp;nbsp;изменение/получение аттрибутов. Перехватывать события qt&amp;nbsp;и передавать их&amp;nbsp;вызов в&amp;nbsp;соответствующий callback на&amp;nbsp;уровне &lt;em>Scheme&lt;/em>. Часть слотов реализована так&amp;nbsp;что их&amp;nbsp;вызов происходит отложенным ибо&amp;nbsp;может происходить изменение объекта &amp;laquo;из-под самого себя&amp;raquo;, чего не&amp;nbsp;могут пережить часть виджетов Qt. Также во&amp;nbsp;избежание проблем с&amp;nbsp;зацикливанием вызов callback'a Scheme происходит только в&amp;nbsp;случае поступления события от&amp;nbsp;пользователя, а&amp;nbsp;не в&amp;nbsp;случае попутного вызова в&amp;nbsp;результате операций set.&lt;br />
В&amp;nbsp;части Scheme построена небольшая иерархия &lt;span class="missingpage">объектов&lt;/span>&lt;a href="http://freesource.info/wiki/objects/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>. Иерархия потребовалась для&amp;nbsp;введения уточнений и&amp;nbsp;более удобной работы с&amp;nbsp;&lt;em>listbox&lt;/em> и&amp;nbsp;&lt;em>popup&lt;/em>.&lt;br />
Предпочитаемые языки определяются согласно переменным среды, то&amp;nbsp;есть фактически точно также как&amp;nbsp;действовал бы&amp;nbsp;обычный gettext.&lt;a name="h5336-4">&lt;/a>&lt;h3>Драйвер Http&lt;/h3>
Более сложный драйвер. Состоит из&amp;nbsp;трёх отдельных частей:&lt;br />
 * сервер &amp;ndash; обеспечивает хранение состояний пользовательских сессий, аутентификацию и&amp;nbsp;обработку callback'ов.&lt;br />
 * fcgi-скрипт &amp;ndash; мостик между сервером и&amp;nbsp;web-браузером. Принимает Http-запросы, считывает и&amp;nbsp;выставляет &lt;em>cookies&lt;/em>.&lt;br />
 * javascript &amp;ndash; работает на&amp;nbsp;клиентском браузере, здесь собственно заканчивается alterator и&amp;nbsp;начинается движок интерфейса &amp;ndash; *qooxdoo*.&lt;br />
 Можно смотреть как&amp;nbsp;на&amp;nbsp;мостик между &lt;em>Javascript&lt;/em> и&amp;nbsp;&lt;em>Scheme&lt;/em>.&lt;br />
Создание/запуск/останов/ &amp;ndash; интерфейса состоит в&amp;nbsp;открытии локального сокета, приёмке и&amp;nbsp;обработке сообщений от&amp;nbsp;клиентов.&lt;br />
Протокол общения между клиентом и&amp;nbsp;сервером несколько специфический. Чтобы не&amp;nbsp;писать лишних парсеров, каждый отдаёт данные в&amp;nbsp;таком формате, который был&amp;nbsp;бы&amp;nbsp;наиболее приятен для&amp;nbsp;собеседника. Так&amp;nbsp;fcgi-скрипт пишет для&amp;nbsp;javacript'a на&amp;nbsp;xml. А&amp;nbsp;обратно получает ответ в&amp;nbsp;виде s-выражений.&lt;br />
Содержимое протокола очень простое. От&amp;nbsp;клиента к&amp;nbsp;серверу идут запросы двух типов:&lt;br />
&lt;ul>&lt;li> (alterator-request action &amp;#8220;get&amp;#8221;) &amp;ndash; дай&amp;nbsp;мне содержимое текущей страницы
&lt;/li>&lt;li> (alterator-request action &amp;#8220;event&amp;#8221; name ... state) &amp;ndash; произошло событие такое-то, состояние виджетов которые мог&amp;nbsp;бы&amp;nbsp;&amp;laquo;подкрутить&amp;raquo; пользователь такое-то.
&lt;/li>&lt;li> (auth-request user password ... ) &amp;ndash; хочу получить новую сессию как&amp;nbsp;пользователь такой-то с&amp;nbsp;паролем таким-то&lt;/li>&lt;/ul>
От&amp;nbsp;сервера к&amp;nbsp;клиенту идут ответы, содержащие описания изменения состояния виджетов:&lt;br />
&lt;ul>&lt;li> &amp;lt;command action &amp;#8220;new&amp;#8221; &amp;ndash; создать новый виджет
&lt;/li>&lt;li> ... action &amp;#8220;set&amp;#8221; &amp;ndash; установить параметр виджета в&amp;nbsp;некоторое значение
&lt;/li>&lt;li> ... action &amp;#8220;delete&amp;#8221; &amp;ndash; удалить виджет
&lt;/li>&lt;li> ... action &amp;#8220;clear&amp;#8221; &amp;ndash; очистить окно от&amp;nbsp;всех виджетов. Все&amp;nbsp;остальные команды после данной читать нет&amp;nbsp;смысла.  Ответом на&amp;nbsp;неё служит всегда (alterator-request action &amp;#8220;get&amp;#8221;).
&lt;/li>&lt;li> .... action &amp;#8220;forbidden&amp;#8221; &amp;ndash; отказано в&amp;nbsp;доступе.&lt;/li>&lt;/ul>
Чтобы лучше понять принцип работы, а&amp;nbsp;заодно познакомиться с&amp;nbsp;тем как&amp;nbsp;устроена аутентификация пользователей рассмотрим некий типовой сеанс работы с&amp;nbsp;alterator.&lt;br />
Пользователь открывает в&amp;nbsp;браузере страницу с&amp;nbsp;клиентским кодом &lt;em>Alterator&lt;/em> а&amp;nbsp;&lt;em>Javacsipt&lt;/em>. Последний делает запрос &amp;#8220;alterator-request action get&amp;#8221;. В&amp;nbsp;ответ приходит &amp;ndash; &amp;#8220;forbidden&amp;#8221;. Тогда у&amp;nbsp;пользователя спрашивается имя&amp;nbsp;и&amp;nbsp;пароль и&amp;nbsp;делается запрос на&amp;nbsp;создание новой сессии  &amp;#8220;auth-request&amp;#8221;. В&amp;nbsp;разультате ответа приходит команда &amp;#8220;clear&amp;#8221;, а&amp;nbsp;заодно в&amp;nbsp;&lt;em>cookies&lt;/em> возникают правильные идентификаторы пользователя и&amp;nbsp;сессии. Далее следует повторный запрос &amp;quot;&amp;quot;action &amp;#8220;get&amp;#8221; &amp;ndash; и&amp;nbsp;на основе данной последовательности команд даются инструкции &lt;strong>qooxdoo&lt;/strong> как&amp;nbsp;и&amp;nbsp;что изобразить на&amp;nbsp;экране, вешаются обработчики событий на&amp;nbsp;виджеты, но&amp;nbsp;не на&amp;nbsp;все а&amp;nbsp;только на&amp;nbsp;которые требуется согласно описанию виджета. Предположим, что&amp;nbsp;пользователь нажимает на&amp;nbsp;кнопку, на&amp;nbsp;которую назначено то&amp;nbsp;или иное действие. Возникает запрос к&amp;nbsp;серверу, на&amp;nbsp;нём отрабатывает callback на&amp;nbsp;scheme и&amp;nbsp;если есть какие изменения в&amp;nbsp;состоянии виджетов, то&amp;nbsp;они отсылаются обратно на&amp;nbsp;клиента.&lt;br />
Теперь перенесёмся на&amp;nbsp;мостик между основным кодом alterator и&amp;nbsp;web-сервером. Что&amp;nbsp;там происходит. Получив запрос, выясняется, является  ли&amp;nbsp;это запросом типа &amp;#8220;auth&amp;#8221;, если да, то&amp;nbsp;он отправляется дальше как&amp;nbsp;есть, иначе просматриваются cookies и&amp;nbsp;&amp;#8220;alterator-request&amp;#8221; заворачивается в&amp;nbsp;&amp;#8220;auth&amp;#8221; запрос как&amp;nbsp;конверт и&amp;nbsp;отсылается дальше. При&amp;nbsp;обратном движении, &amp;#8220;auth&amp;#8221; запрос изучается, если надо выставляются cookies, вытаскивается содержимое (обычный ответ), превращается в&amp;nbsp;xml и&amp;nbsp;отправляется клиенту.&lt;br />
Что&amp;nbsp;же&amp;nbsp;происходит на&amp;nbsp;сервере? Когда запрос пройдёт успешно через систему аутентификации дальнейшая его&amp;nbsp;обработка происходит в&amp;nbsp;контексте конкретной пользовательской сессии (созданой заново или&amp;nbsp;уже существующей). В&amp;nbsp;результате работы в&amp;nbsp;исходящей очереди сообщений накапливаются команды на&amp;nbsp;изменение состояние, кои&amp;nbsp;потом благополучно и&amp;nbsp;отсылаются в&amp;nbsp;качестве ответа.&lt;br />
Особый момент &amp;ndash; организация запуска дополнительных модальных диалогов. Если в&amp;nbsp;случае Qt&amp;nbsp;интерфейса всё происходит просто и&amp;nbsp;естественно, то&amp;nbsp;в данном случае задача усложняется тем&amp;nbsp;что:&lt;br />
&lt;ul>&lt;li> на&amp;nbsp;клиенской стороне могут быть запрещены всплывающие окна (спасибо рекламе на&amp;nbsp;некоторых уважаемых сайтах). А&amp;nbsp;посему приходится имитировать переход в&amp;nbsp;другой диалог, путём затирания имеющегося и&amp;nbsp;последующим его&amp;nbsp;пересозданием.
&lt;/li>&lt;li> на&amp;nbsp;серверной стороне код&amp;nbsp;может быть заблокирован вызванным модальным диалогом и&amp;nbsp;по окончании работы последнего должен корректно продолжить свою работу.&lt;/li>&lt;/ul>
Первая проблема решается сама собой. Поскольку пользователь в&amp;nbsp;любой момент может нажать кнопку &amp;#8220;Reload&amp;#8221;, то&amp;nbsp;всё-равно реализована поддержка &amp;laquo;пересоздания&amp;raquo; имеющегося виджета.&lt;br />
Вторая решается несколько хитрее. С&amp;nbsp;каждой сессией связывается некий поток. При&amp;nbsp;запуске дополнительного диалога, поток исполнения блокируется и&amp;nbsp;вместо него запускается другой, обслуживающий запущенный popup. После завершения работы последнего, связанный с&amp;nbsp;ним поток завершает свою работу, исходный поток разблокируется и&amp;nbsp;продолжает обслуживание клиента. Когда происходит выход из&amp;nbsp;основного диалога &amp;ndash; сессия удаляется (клиент видит это&amp;nbsp;как опять возникшее приглашение ввести пароль и&amp;nbsp;имя пользователя). Потоки потоков и&amp;nbsp;основного кода сервера, который принимает запросы из&amp;nbsp;сокета &amp;laquo;перестукиваются&amp;raquo; через входящую и&amp;nbsp;исходящие очереди сообщений сессии и&amp;nbsp;упорядочивают своё взаимодействие парой condition variables.&lt;br />
Ну&amp;nbsp;и наконец предпочитаемые языки определяются браузером пользователя, в&amp;nbsp;отличие от&amp;nbsp;локальных переменных как&amp;nbsp;было в&amp;nbsp;случае с&amp;nbsp;Qt.&lt;br />
Таким образом драйвер написан частично на&amp;nbsp;&lt;em>Scheme&lt;/em> и&amp;nbsp;частично на&amp;nbsp;&lt;em>Javascript&lt;/em>&lt;br />
&lt;em>Scheme&lt;/em> часть представляет собой небольшую иерархию &lt;span class="missingpage">объектов&lt;/span>&lt;a href="http://freesource.info/wiki/objects/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>. Базовый объект в&amp;nbsp;иерархии является простым универсальным хранилищем  аттрибутов. Хранение полного набора требуемых аттрибутов на&amp;nbsp;сервере требуется для&amp;nbsp;поддержки функции &amp;laquo;пересоздания&amp;raquo; и&amp;nbsp;корректной работы callback'ов, написанных на&amp;nbsp;&lt;em>Scheme&lt;/em>.&lt;br />
&lt;em>Javascript&lt;/em> часть представляет собой небольшой набор функций-обёрток для&amp;nbsp;транслирования действий в&amp;nbsp;движок &lt;em>qooxdoo&lt;/em>.&lt;br />
Так&amp;nbsp;что и&amp;nbsp;этот драйвер можно считать в&amp;nbsp;общем-то не&amp;nbsp;очень сложным ;)  (общий объём кода не&amp;nbsp;сильно превышает 100K).&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2005-10-26 16:24:23</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers/show?time=2005-10-26+16%3A24%3A23</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;drivers&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2005-10-26+16%3A24%3A23">2005-10-26 16:24:23&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2005-10-27+10%3A51%3A17">2005-10-27 10:51:17&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;ul>&lt;li> на&amp;nbsp;клиенской стороне могут быть запрещены всплывающие окна (спасибо рекламе на&amp;nbsp;некоторых уважаемых сайтах). А&amp;nbsp;посему приходится имитировать переход в&amp;nbsp;другой диалог, путём затирания имеющегося и&amp;nbsp;последующим его&amp;nbsp;пересозданием.&lt;/li>&lt;/ul>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;ul>&lt;li> на&amp;nbsp;клиенской стороне могут быть запрещены сплывающие окна (спасибо рекламе на&amp;nbsp;некоторых уважаемых сайтах). А&amp;nbsp;посему приходится имитировать переход в&amp;nbsp;другой диалог, путём затирания имеющегося и&amp;nbsp;последующим его&amp;nbsp;пересозданием.&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2005-10-26 15:53:10</title>
<link>http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers/show?time=2005-10-26+15%3A53%3A10</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers&amp;" class="">/Мусорка&amp;nbsp;/&amp;nbsp;Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;drivers&lt;/a> за &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2005-10-26+15%3A53%3A10">2005-10-26 15:53:10&lt;/a> и &lt;a href="http://freesource.info/wiki/Musorka/AltLinux/Sisyphus/Alterator/drivers?time=2005-10-26+16%3A24%3A23">2005-10-26 16:24:23&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">* fcgi-скрипт &amp;ndash; мостик между сервером и&amp;nbsp;web-браузером. Принимает Http-запросы, считывает и&amp;nbsp;выставляет &lt;em>cookies&lt;/em>.&lt;br />
Создание/запуск/останов/ &amp;ndash; интерфейса состоит в&amp;nbsp;открытии локального сокета, приёмке и&amp;nbsp;обработке сообщений от&amp;nbsp;клиентов.&lt;br />
Протокол общения между клиентом и&amp;nbsp;сервером несколько специфический. Чтобы не&amp;nbsp;писать лишних парсеров, каждый отдаёт данные в&amp;nbsp;таком формате, который был&amp;nbsp;бы&amp;nbsp;наиболее приятен для&amp;nbsp;собеседника. Так&amp;nbsp;fcgi-скрипт пишет для&amp;nbsp;javacript'a на&amp;nbsp;xml. А&amp;nbsp;обратно получает ответ в&amp;nbsp;виде s-выражений.&lt;br />
Содержимое протокола очень простое. От&amp;nbsp;клиента к&amp;nbsp;серверу идут запросы двух типов:&lt;br />
&lt;ul>&lt;li> (alterator-request action &amp;#8220;get&amp;#8221;) &amp;ndash; дай&amp;nbsp;мне содержимое текущей страницы
&lt;/li>&lt;li> (alterator-request action &amp;#8220;event&amp;#8221; name ... state) &amp;ndash; произошло событие такое-то, состояние виджетов которые мог&amp;nbsp;бы&amp;nbsp;&amp;laquo;подкрутить&amp;raquo; пользователь такое-то.
&lt;/li>&lt;li> (auth-request user password ... ) &amp;ndash; хочу получить новую сессию как&amp;nbsp;пользователь такой-то с&amp;nbsp;паролем таким-то&lt;/li>&lt;/ul>
От&amp;nbsp;сервера к&amp;nbsp;клиенту идут ответы, содержащие описания изменения состояния виджетов:&lt;br />
&lt;ul>&lt;li> &amp;lt;command action &amp;#8220;new&amp;#8221; &amp;ndash; создать новый виджет
&lt;/li>&lt;li> ... action &amp;#8220;set&amp;#8221; &amp;ndash; установить параметр виджета в&amp;nbsp;некоторое значение
&lt;/li>&lt;li> ... action &amp;#8220;delete&amp;#8221; &amp;ndash; удалить виджет
&lt;/li>&lt;li> ... action &amp;#8220;clear&amp;#8221; &amp;ndash; очистить окно от&amp;nbsp;всех виджетов. Все&amp;nbsp;остальные команды после данной читать нет&amp;nbsp;смысла.  Ответом на&amp;nbsp;неё служит всегда (alterator-request action &amp;#8220;get&amp;#8221;).
&lt;/li>&lt;li> .... action &amp;#8220;forbidden&amp;#8221; &amp;ndash; отказано в&amp;nbsp;доступе.&lt;/li>&lt;/ul>
Чтобы лучше понять принцип работы, а&amp;nbsp;заодно познакомиться с&amp;nbsp;тем как&amp;nbsp;устроена аутентификация пользователей рассмотрим некий типовой сеанс работы с&amp;nbsp;alterator.&lt;br />
Пользователь открывает в&amp;nbsp;браузере страницу с&amp;nbsp;клиентским кодом &lt;em>Alterator&lt;/em> а&amp;nbsp;&lt;em>Javacsipt&lt;/em>. Последний делает запрос &amp;#8220;alterator-request action get&amp;#8221;. В&amp;nbsp;ответ приходит &amp;ndash; &amp;#8220;forbidden&amp;#8221;. Тогда у&amp;nbsp;пользователя спрашивается имя&amp;nbsp;и&amp;nbsp;пароль и&amp;nbsp;делается запрос на&amp;nbsp;создание новой сессии  &amp;#8220;auth-request&amp;#8221;. В&amp;nbsp;разультате ответа приходит команда &amp;#8220;clear&amp;#8221;, а&amp;nbsp;заодно в&amp;nbsp;&lt;em>cookies&lt;/em> возникают правильные идентификаторы пользователя и&amp;nbsp;сессии. Далее следует повторный запрос &amp;quot;&amp;quot;action &amp;#8220;get&amp;#8221; &amp;ndash; и&amp;nbsp;на основе данной последовательности команд даются инструкции &lt;strong>qooxdoo&lt;/strong> как&amp;nbsp;и&amp;nbsp;что изобразить на&amp;nbsp;экране, вешаются обработчики событий на&amp;nbsp;виджеты, но&amp;nbsp;не на&amp;nbsp;все а&amp;nbsp;только на&amp;nbsp;которые требуется согласно описанию виджета. Предположим, что&amp;nbsp;пользователь нажимает на&amp;nbsp;кнопку, на&amp;nbsp;которую назначено то&amp;nbsp;или иное действие. Возникает запрос к&amp;nbsp;серверу, на&amp;nbsp;нём отрабатывает callback на&amp;nbsp;scheme и&amp;nbsp;если есть какие изменения в&amp;nbsp;состоянии виджетов, то&amp;nbsp;они отсылаются обратно на&amp;nbsp;клиента.&lt;br />
Теперь перенесёмся на&amp;nbsp;мостик между основным кодом alterator и&amp;nbsp;web-сервером. Что&amp;nbsp;там происходит. Получив запрос, выясняется, является  ли&amp;nbsp;это запросом типа &amp;#8220;auth&amp;#8221;, если да, то&amp;nbsp;он отправляется дальше как&amp;nbsp;есть, иначе просматриваются cookies и&amp;nbsp;&amp;#8220;alterator-request&amp;#8221; заворачивается в&amp;nbsp;&amp;#8220;auth&amp;#8221; запрос как&amp;nbsp;конверт и&amp;nbsp;отсылается дальше. При&amp;nbsp;обратном движении, &amp;#8220;auth&amp;#8221; запрос изучается, если надо выставляются cookies, вытаскивается содержимое (обычный ответ), превращается в&amp;nbsp;xml и&amp;nbsp;отправляется клиенту.&lt;br />
Что&amp;nbsp;же&amp;nbsp;происходит на&amp;nbsp;сервере? Когда запрос пройдёт успешно через систему аутентификации дальнейшая его&amp;nbsp;обработка происходит в&amp;nbsp;контексте конкретной пользовательской сессии (созданой заново или&amp;nbsp;уже существующей). В&amp;nbsp;результате работы в&amp;nbsp;исходящей очереди сообщений накапливаются команды на&amp;nbsp;изменение состояние, кои&amp;nbsp;потом благополучно и&amp;nbsp;отсылаются в&amp;nbsp;качестве ответа.&lt;br />
Особый момент &amp;ndash; организация запуска дополнительных модальных диалогов. Если в&amp;nbsp;случае Qt&amp;nbsp;интерфейса всё происходит просто и&amp;nbsp;естественно, то&amp;nbsp;в данном случае задача усложняется тем&amp;nbsp;что:&lt;br />
&lt;ul>&lt;li> на&amp;nbsp;клиенской стороне могут быть запрещены сплывающие окна (спасибо рекламе на&amp;nbsp;некоторых уважаемых сайтах). А&amp;nbsp;посему приходится имитировать переход в&amp;nbsp;другой диалог, путём затирания имеющегося и&amp;nbsp;последующим его&amp;nbsp;пересозданием.
&lt;/li>&lt;li> на&amp;nbsp;серверной стороне код&amp;nbsp;может быть заблокирован вызванным модальным диалогом и&amp;nbsp;по окончании работы последнего должен корректно продолжить свою работу.&lt;/li>&lt;/ul>
Первая проблема решается сама собой. Поскольку пользователь в&amp;nbsp;любой момент может нажать кнопку &amp;#8220;Reload&amp;#8221;, то&amp;nbsp;всё-равно реализована поддержка &amp;laquo;пересоздания&amp;raquo; имеющегося виджета.&lt;br />
Вторая решается несколько хитрее. С&amp;nbsp;каждой сессией связывается некий поток. При&amp;nbsp;запуске дополнительного диалога, поток исполнения блокируется и&amp;nbsp;вместо него запускается другой, обслуживающий запущенный popup. После завершения работы последнего, связанный с&amp;nbsp;ним поток завершает свою работу, исходный поток разблокируется и&amp;nbsp;продолжает обслуживание клиента. Когда происходит выход из&amp;nbsp;основного диалога &amp;ndash; сессия удаляется (клиент видит это&amp;nbsp;как опять возникшее приглашение ввести пароль и&amp;nbsp;имя пользователя). Потоки потоков и&amp;nbsp;основного кода сервера, который принимает запросы из&amp;nbsp;сокета &amp;laquo;перестукиваются&amp;raquo; через входящую и&amp;nbsp;исходящие очереди сообщений сессии и&amp;nbsp;упорядочивают своё взаимодействие парой condition variables.&lt;br />
Ну&amp;nbsp;и наконец предпочитаемые языки определяются браузером пользователя, в&amp;nbsp;отличие от&amp;nbsp;локальных переменных как&amp;nbsp;было в&amp;nbsp;случае с&amp;nbsp;Qt.&lt;br />
Таким образом драйвер написан частично на&amp;nbsp;&lt;em>Scheme&lt;/em> и&amp;nbsp;частично на&amp;nbsp;&lt;em>Javascript&lt;/em>&lt;br />
&lt;em>Scheme&lt;/em> часть представляет собой небольшую иерархию &lt;span class="missingpage">объектов&lt;/span>&lt;a href="http://freesource.info/wiki/objects/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>. Базовый объект в&amp;nbsp;иерархии является простым универсальным хранилищем  аттрибутов. Хранение полного набора требуемых аттрибутов на&amp;nbsp;сервере требуется для&amp;nbsp;поддержки функции &amp;laquo;пересоздания&amp;raquo; и&amp;nbsp;корректной работы callback'ов, написанных на&amp;nbsp;&lt;em>Scheme&lt;/em>.&lt;br />
&lt;em>Javascript&lt;/em> часть представляет собой небольшой набор функций-обёрток для&amp;nbsp;транслирования действий в&amp;nbsp;движок &lt;em>qooxdoo&lt;/em>.&lt;br />
Так&amp;nbsp;что и&amp;nbsp;этот драйвер можно считать в&amp;nbsp;общем-то не&amp;nbsp;очень сложным ;)  (общий объём кода не&amp;nbsp;сильно превышает 100K).&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">* fcgi-скрипт &amp;ndash; мостик между сервером и&amp;nbsp;web-браузером. Принимает Http-запросы, считывает и&amp;nbsp;выставляет cookies.&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
