<?xml version="1.0" encoding="UTF-8" ?>
<messages>
  <message id="template">
    <div id="top_wrapper">
      <div id="top_content">
	${languages}
	<div id="top_wt">
	  <a href="http://www.emweb.be/">
	    <img src="/css/wt/emweb_powered.jpg" alt="Emweb" height="22" />
	  </a>
	</div>
      </div>
    </div>

    <div id="banner_wrapper">
      <div id="banner_content">
	<div id="banner_end">
	  <div id="banner">
	    <!-- <a href="#">Wt</a> -->
	  </div>
	</div>
      </div>
    </div>

    <div id="main_wrapper" class="home">
      <div id="main_content">
	<div id="main_menu">
	  ${menu}
	  ${sidebar}
	</div>
	${contents}

	<div class="clearall"></div>
      </div>
    </div>

    <div id="footer_wrapper">
      <div id="footer_content">
	<div id="footer_copyright"> 
	  <a href="http://www.emweb.be/">
	    <img src="/css/wt/emweb_large.jpg" height="25" width="101"
		 alt="Emweb.be" title="emweb.be"/></a>
	  Решения для систем на базе web<br/>
	  <a href="http://www.emweb.be/">www.emweb.be</a>
	</div>

	<div id="footer_menu"> 
	  <a href="http://www.webtoolkit.eu/wt">Главная</a>
	  | <a href="http://www.emweb.be/contact">Контакты</a>

	</div>

	<div id="chat"></div>
	<script src="http://www.webtoolkit.eu/wt/examples/simplechat/chat.js?div=chat" type="text/javascript"></script>

	<div class="clearall"></div>
      </div>
      <script type="text/javascript">
	    /*<![CDATA[*/
            window.pageTracker = null;
            loadScript("http://www.google-analytics.com/ga.js", function() {
              window.pageTracker = _gat._getTracker('UA-4345578-1');
              window.pageTracker._initData();
              window.pageTracker._trackPageview();
            });
            /* ]]> */
      </script>
    </div>
  </message>

  <message id="wt">Wt, инструментарий C++ для Web</message>

  <message id="introduction">Введение</message>
  <message id="blog">Блог</message>
  <message id="features">Возможности</message>
  <message id="documentation">Документация</message>
  <message id="examples">Примеры</message>
  <message id="download">Загрузка</message>
  <message id="community">Поддержка</message>
  <message id="other-language">!C++</message>

  <message id="hello-world">Здравствуй, мир!</message>
  <message id="charts">Графики (диаграммы)</message>
  <message id="wt-homepage">Домашняя страница Wt</message>
  <message id="treeview">Класс Treeview</message>
  <message id="git">Обозреватель Git</message>
  <message id="chat">Чат</message>
  <message id="mail-composer">Редактор писем</message>
  <message id="hangman">Виселица</message>
  <message id="widget-gallery">Галерея виджетов</message>

  <message id="home.news">
    <h3><span>Новости</span></h3>
  </message>
  <message id="home.latest-news">
    <h4><span>Последние новости</span></h4>
  </message>
  <message id="home.historical-news">
    <h4><span>Исторические новости</span></h4>
  </message>

  <message id="source-browser-link">
    <a href="{1}">Просмотр исходного кода</a>
  </message>

  <message id="src-title">
    <div>
    </div>
  </message>

  <message id="home.intro">

<h3><span>Wt: Введение</span></h3>

<p>Wt (произносится "<i>витти</i>") - это библиотека C++ для разработки
web-приложений.</p>

<p>API, центральное место в котором занимают <b>виджеты</b>, использует хорошо
проверенные паттерны разработки GUI, адаптированные для web. Это позволяет
разработчику абстрагироваться от специфических для web деталей реализации,
включая протоколы взаимодействия клиента и сервера, управление событиями,
поддержку графики, постепенную деградацию (graceful degradation) или
прогрессивное расширение (progressive enhancement), а также работу с URL.</p>

<p>В отличии от многих странично-ориентированных фреймворков,
Wt была разработана для создания web-приложений, обладающих состоянием, которые,
к тому же, весьма интерактивны (благодаря задействованию всех возможностей
таких технологий, как WebSockets и Ajax), и доступны (благодаря поддержке
браузеров простого HTML), автоматически осуществляя <b>постепенную деградацию
или прогрессивное расширение</b>. То, что естественно и просто сделать с
помощью Wt, может потребовать чрезмерных усилий при попытке осуществить это
самостоятельно, например: анимационная смена виджетов без ущерба для правильной
индексации по URL поисковыми роботами, или постоянно открытый виджет чата,
который работает даже в таких старых браузерах как
Microsoft Internet Explorer 6.
</p>

<p>В библиотеку входит сервер приложений, который действует как
самостоятельный сервер Http(s)/WebSockets или интегрируется через FastCGI
с другими web-серверами.</p>

<h4>Интерактивна, безопасна, доступна</h4>

<p>Странично-ориентированные фреймворки (Django, Ruby on Rails, PHP и т.п.)
не пытаются абстрагироваться от лежащих в их основе технологий
(HTML/XHTML, JavaScript, CSS, Ajax, WebSockets, Comet, Forms, DHTML,
SVG/VML/Canvas). Как следствие, разработчик должен быть знаком
со всеми этими постоянно развивающимися технологиями, а так же предусматривать
постепенную деградацию на случай ограниченных возможностей браузера.
Структура многих web-приложений по сей день во многом следует
странично-ориентированной парадигме времён ранних версий HTML. Это означает
не только необходимость реализовывать контроллер для учёта перемещения
пользователя от страницы к странице, но и, при использовании Ajax или
WebSockets, - самостоятельно проектировать и реализовывать взаимодействие
клиента и сервера.</p>

<p>С другой стороны, использование "чистых" Ajax-фреймворков приводит к
утомительному программированию на JavaScript, где необходимо иметь дело с
причудами браузеров и реализовывать безопасное взаимодействие с ресурсами
сервера. Обычно такие приложения не отвечают рекомендациям принципов
доступности web-содержимого разными способами (accessibility guidelines),
и не могут быть проиндексированы поисковыми роботами.</p>

<p>Генерация кода HTML или использование шаблонов HTML провоцирует проблемы
безопасности, такие как <a
href="http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B8%D0%BD%D0%B3">
XSS (Cross-Site-Scripting - "Межсайтовый скриптинг")</a>, непреднамеренно
позволяя коду JavaScript быть вставленному в страницу,
 и <a
href="http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D0%BB%D0%BA%D0%B0_%D0%BC%D0%B5%D0%B6%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D1%8B%D1%85_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2">CSRF
(Cross-Site Request Forgery - "Подделка межсайтовых запросов")</a>,
доверяя информации об аутентификации, находящейся в куках (cookies).
Упомянутых проблем трудно избежать при использовании традиционных фреймворков
когда Вы, как разработчик, должны реализовывать некоторый функционал на
JavaScript, который в этом случае не сможет быть отфильтрован фреймворком.</p>

<p>Напротив, web-приложение на базе Wt разрабатывается только с использованием
C++ API, и библиотека сама генерирует необходимый код HTML, CSS, Javascript,
CGI, SVG/VML/Canvas и Ajax. Безопасность и кросс-браузерность web-приложений
обеспечивается Wt. Например, когда это возможно, Wt максимально задействует
JavaScript, Ajax и даже WebSockets, хотя, в то же время, Wt-приложения
корректно функционируют и без JavaScript. Сначала Wt запускает
простое приложение HTML/CGI, и затем прогрессивно расширяет его до 
Ajax-приложения, если это оказывается возможным. Wt также обеспечивает
встроенную по умолчанию безопасность.</p>

<h4>Типичные сценарии использования:</h4>

<ul>
  <li><b>Высокопроизводительные, сложные</b> web-приложения, которые
  полностью персонализированы (и, как следствие, кэширование для которых
  не приносит выигрыша), с полной поддержкой Ajax, и, в то же время,
  полностью доступные и оптимизированные для поисковых систем.</li>
  <li>GUI на базе web для <b>встроенных систем</b>, благодаря
  малому размеру web-сервера приложения на C++.</li>
  <li>GUI на базе web, которому требуется <b>интеграция с (существующими)
  библиотеками C++</b>, например, для научных или инженерных приложений,
  или <b>с существующими настольными приложениями C++</b>.</li>
</ul>

<h4>Другие выгоды от использования Wt</h4>

<ul>
  <li>Разработка web-приложений с использованием хорошо знакомых
  паттернов разработки GUI настольных систем.</li>
  <li>Наличие обширного набора виджетов, которые могут работать без
  JavaScript (но с ним работают ещё лучше).</li>
  <li>Единая спецификация клиентской и серверной валидаций и управления
  событиями.</li>
  <li>Возможноть использования XHTML и CSS для компоновки и оформления.</li>
  <li>Генерация отвечающего стандартам HTML или XHTML кода.</li>
  <li>Переносимая, сглаженная (anti-aliased) графика, оптимизированная для
  использования в web (посредством встроенного VML, встроенного SVG,
  HTML5 canvas или изображений PNG), которая также может быть использована
  для вывода в PDF.</li>
  <li>Позволяет избежать распространённых проблем безопасности поскольку
  обладает полным контролем над уровнем представления и проактивно фильтрует
  <i>активные</i> тэги и атрибуты, не влияя на бизнес логику,
  и упрощает аутентификацию благодаря наличию состояний у приложений.</li>
  <li>Сверхбыстрая загрузка и рачительное использование канала связи,
  на которые влияет только сложность картинки, а не размер приложения.
  Wt реализует все известные приёмы оптимизации отзывчивости приложений,
  используя для этого даже специфические особенности различных браузеров.</li>
  <li>Простой API с хорошей кросс-браузерной реализацией инициируемых
  сервером событий, т.е. <i>server push</i> (посредством <i>comet</i>
  или WebSockets).</li>
  <li>Возможность использования встроенного сервера httpd для простоты
  разработки и развёртывания, или FastCGI/ISAPI для развёртывания на
  действующих web-серверах.</li>
</ul>

  </message>
  <message id="home.features">

<h3><span>Возможности</span></h3>

<h4>Ключевые возможности библиотеки</h4>

<ul>
  <li>Поддержка основных браузеров (Firefox/Gecko, Internet Explorer,
  Safari, Chrome, Konqueror и Opera), а также браузеров простого HTML
  (Links, Lynx).</li>
  <li>Разработка и развёртывание на Unix/GNU Linux или Microsoft Windows
  (Visual Studio).</li>
  <li>Идентичное поведение как при поддержке JavaScript или Ajax, так и без
  таковой, насколько это возможно, посредством постепенной деградации
  (graceful degradation) или прогрессивного расширения (progressive
  enhancement).</li>
  <li>Интегрированная поддержка Юникода и локализации.</li>
  <li>Эффективный рендеринг и низкая латентность.</li>
  <li>Поддержка перемещения с помощью истории браузера (кнопки
  "назад"/"вперёд" и закладки), лаконичные URL при доступности истории HTML5,
  оптимизация для поисковиков и однообразное поведение сессий простого HTML
  или Ajax.</li>
  <li>Настраиваемые опции отслеживания сессий, либо посредством перезаписи URL,
  либо с помощью использования кук.</li>
  <li>Высокая производительность, которая позволяет развёртывать приложения
    на встраиваемых устройсвах класса low-end,
    или энерго-, место- и бюджетно-сберегающие развёртывания web-сайтов
    в Интернет или в экстранет.</li>
  <li>Полностью событейно-управляемый асинхронный ввод/вывод:
  сессии не привязаны к потокам, и открываемые соединения не блокируют их.
  Напротив, потоки необходимы как раз для улучшения обслуживания конкурентных
  запросов или для повторяющихся циклов событий (reentrant event loops).</li>
</ul>

<h4>Обработка событий</h4>

<ul>
  <li>Использует современный типобезопасный сигнально/слотовый API для реакции
  на события.</li>
  <li>Отслеживает события клавиатуры, мыши и фокусировки, и позволяет получать
    их детали (например, позицию курсора мыши, нажатых кнопок модификаторов,
    или клавиш клавиатуры).</li>
  <li>Автоматическая синхронизация данных в полях формы между браузером и
  сервером.</li>
  <li>Динамическая трансляция из C++ в JavaScript, путём определения
    <i>слотов без состояния (stateless slot)</i>. Такие слоты определяются на
    C++, после чего обработка событий осуществляется как на стороне клиента,
    так и на стороне сервера: визуальные изменения обрабатываются на стороне
    клиента, а состояние приложения отслеживается на стороне сервера.</li>
  <li>Возможность подключения произвольного кода JavaScript (например, для
    обработки событий только на стороне клиента), и <i>эмитирования</i> из
    этого кода сигналов C++.</li>
  <li>Drag&amp;Drop API.</li> 
  <li>Повременные события и инициируемые сервером обновления
  ("server push").</li>
  <li>Использует простой HTML CGI, Ajax или WebSockets.</li>
</ul>

<h4>Собственная система рисования</h4>

<ul>
  <li>Унифицированный API рисования, который использует встроенные возможности
  браузеров отображения векторной графики (встроенный VML, встроенный SVG
  или HTML 5 canvas), или распространённые форматы растровых изображений
  (PNG, GIF и т.п.) или векторых изображений (SVG, PDF).</li>
  <li>Поддерживает произвольные пути рисователя, обрезку, текст, изображения,
  трансформации, тени.</li>
</ul>

<h4>Компоненты GUI</h4>

Смотрите <a href="http://www.webtoolkit.eu/widgets">Галерею
виджетов</a> для интерактивного обзора встроенной функциональности.

<h4>Встроенная безопасность</h4>

<ul>
  <li>Защита памяти на уровне ядра решает проблемы приватности, возникающие
    из-за ошибок программирования, так как сессии могут быть полностью
    изолированы друг от друга (в режиме отдельных процессов).</li>
  <li>Поддержка шифрования и серверной аутентификации посредством
    Secure Sockets Layer (SSL) или Transport Layer Security (TLS)
    через HTTPS.</li>
  <li>Непрерывное использование HTTPS благодаря низким требованиям к
  пропускной способности канала передачи данных (за счёт
  fine-grained Ajax).</li>
  <li>Встроенная возможность предотвращения атак типа "межсайтовый
    скриптинг" (Cross-Site Scripting - XSS). Выводимый текст всегда
    отфильтрован от потенциально вредоносного кода, делая XSS-атаки на
    приложения Wt (почти) невозможными.</li>
  <li>Неуязвима в части "подделки HTTP-запросов" (Cross-site
    Request Forgery - CSRF), потому что для отслеживания сессий не обязательно
    использовать куки, но даже если они и используются, то библиотека никогда
    не полагается исключительно на них при запросах, которые провоцируют
    запуск кода обработки события.</li>
  <li>Неуязвима в части нарушения логики приложения путём перехода по
    определённому URL, поскольку обработаны могут быть только те события,
    которые предусмотрены интерфейсом.</li>
</ul>

<h4>Библиотека объектно-реляционного отображения</h4>

Wt имеет в своём составе Wt::Dbo, самодостаточную библиотеку, реализующую
объектно-реляционное отображение (Object-Relational mapping - ORM), и, таким
образом, предоставляет удобный способ взаимодействия с системами управления
баз данных SQL из C++. Хотя такие возможности как оптимистическое управление
конкурентным доступом (optimistic concurrency control) делают эту технологию
идеальной для web-приложений, опирающихся на базу данных (она также хорошо
интегрируется с MVC классами Wt), библиотека также может быть использована
для оффлайн и других приложений (она не зависит от Wt).

Библиотека ORM (которая заслуживает отдельного рассмотрения, изложенного в <a
href="http://www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html">этом
пособии</a>) обладает следующими возможностями:

<ul>
  <li>Нет ни генерации кода, ни "макросомагии", ни XML
  конфигурирований. Используется только современный C++!</li>
  <li>Применяется шаблонизированный паттерн <i>посетитель (visitor)</i>,
  которому требуется один шаблонный метод для осуществления отображения:
  немыслимо эффективно!</li>
  <li>Вы можете определять суррогатные, автоматически инкрементируемые ключи,
  или отображать естественные (в т.ч. и составные, состоящие более чем из
  одного поля в базе данных) ключи на любой тип данных C++.</li>
  <li>Поддержка <a
    href="http://en.wikipedia.org/wiki/Optimistic_concurrency_control">
    оптимистического управления конкурентным доступом</a> с помощью
  специально выделенных для этого полей данных в базе.</li>
  <li>Возможность отображения отношений "один-ко-многим" и "многие-ко-многим"
  на STL-совместимые коллекции.</li>
  <li>Имеются операции генерирования схемы данных (т.е. DDL: data
  definition language (язык описания данных)) и работы с данными
  (т.е. DML: data manipulation language (язык манипулирования данными)).</li>
  <li>Повсеместно используются предподготовленные выражения (prepared
  statements).</li>
  <li>В каждой сессии отслеживаются "грязные" (не сохранённые) объекты и
  обеспечивается первичное кэширование.</li>
  <li>Возможность осуществления гибкой выборки отдельных полей, объектов, или
  их кортежей (с помощью Boost.Tuple).</li>
  <li>Возможность использования одного соединения или пула соединений из
    множества сессий, в которых эти соединения фактически будут использоваться
    только во время транзакций.</li>
  <li>Поддерживаются СУБД Sqlite3 и PostgreSQL, а также <a
    href="http://wtdbomysql.sourceforge.net/">MySQL (только
  GPL)</a>, поддержка которой обеспечивается сообществом (Полом Гариссоном
  (Paul Harisson)).</li>
</ul>

<h4>Тестирование</h4>

В Wt код обработки событий создаёт и манипулирует деревом виджетов,
которое может быть легко проверено тестирующим кодом. Поэтому,
<a href="http://webtoolkit.eu/wt/doc/reference/html/classWt_1_1Test_1_1WTestEnvironment.html">среда
тестирования</a> позволяет инстанцировать приложение и имитировать возникновение
событий при отсутствии браузера, тем самым сокращая время цикла обработки
запроса и ответа на него (request/response cycle), которое потребовалось бы
браузеру.

<h4>Развёртывание</h4>

<p>
Различные способы развёртывания представлены библиотекой в виде коннекторов.
Способ развёртывания определяется на этапе компоновки (редактирования связей)
с одним из коннекторов!
</p>

<h5>a) Встроенный httpd</h5>

<ul>
  <li>Простой, высокопроизводительный сервер web-приложений (многопоточный,
    с асинхронным вводом/выводом) на базе библиотеки C++ asio.</li>
  <li>Поддерживает HTTP и HTTPS посредством библиотеки OpenSSL.</li>
  <li>Поддерживает разбиение ответа на части и компрессию.</li>
  <li>Один процесс (что удобно для разработки и отладки), который может быть
  встроен в существующее приложение.</li>
  <li>Поддержка развёртывания за проксирующим (и, если необходимо,
    балансирующим нагрузку) web-сервером.</li>
  <li>Доступен для платформ UNIX и Win32.</li>
</ul>

<h5>b) FastCGI</h5>

<ul>
  <li>Интеграция с распространёнными web-серверами (apache, lighttpd).</li>
  <li>Различные стратегии отображения сессий на процессы.</li>
  <li>"Горячее" развёртывание: новые сессии используют новую версию приложения,
    в то время как старые сессии могут продолжать работать с соответствующей
    им версией приложения.</li>
  <li>Доступен только для платформ UNIX.</li>
</ul>

<h5>c) ISAPI</h5>

<ul>
  <li>Интеграция с Microsoft IIS server.</li>
  <li>Использование асинхронного API ISAPI для максимального
  быстродействия.</li>
  <li>Доступен для платформ Win32.</li>
</ul>

  </message>
  <message id="home.examples">

<h3><span>Примеры</span></h3>

<p>Посмотрите несколько работающих примеров Wt ниже.</p>

<p>
  Исходный код этих (и многих других) примеров включен в исходный
  дистрибутив Wt. Вы также можете просматривать исходный код
  каждого примера с помощью <a href="#/src">просмотрщика исходного кода</a>,
  перейдя по ссылке, расположенной под описанием каждого примера.
</p>

<p>
  Исходный код этих примеров также доступен из
  <a href="http://www.webtoolkit.eu/wt/doc/examples/html/modules.html" target="_blank">
  документации, сгенерированной системой doxygen (в новом окне)</a>.
</p>

  </message>
  <message id="home.examples.hello">
<div>
<h4 class="example">Здравствуй, мир!</h4>

<p>
  <a href="http://www.webtoolkit.eu/wt/examples/hello/hello.wt" class="run" target="_blank">
    <img src="/icons/green-play.png" style="vertical-align: top"/> Запуск
  </a>
</p>

<p>Этот простой пример иллюстрирует наиболее простые концепции Wt:</p>
<ul>
  <li>
    Создание минимального приложения Wt, используя <b>WRun()</b> для запуска
    web-сервера, и функцию создания объекта <a
    href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WApplication.html"
    target="_blank">WApplication</a>, представляющего новую сессию.
  </li>
  <li>
    <b>Создание виджетов</b> и добавление их в <b>дерево виджетов</b>.
  </li>
  <li>
    Реагирование на события с помощью механизма <b>сигнал/слот</b>.
  </li>
  <li>
    Чтение ввода пользователя и обновление виджетов.
  </li>
</ul>

<p>Для подробного (хотя немного устаревшего) разъяснения примера
"Здравствуй, мир!", смотрите также <a
href="http://www.codeguru.com/cpp/i-n/internet/browsercontrol/article.php/c15275/"
target="_blank">прекрасное введение в Wt</a>, написанное Виктором Венкманом
(Victor Venkman).</p>
</div>
  </message>
  <message id="home.examples.wt">
<div>
<h4 class="example">Домашняя страница Wt</h4>
<p>Мы сами используем то, что создаём: этот сайт является приложением Wt.</p>

<p>
  Будучи не слишком уж интерактивным приложением, домашняя страница Wt
  показывает, что Wt с успехом может быть использована для сайтов, где
  упор делается именно на содержимое (content-driven websites). Тот факт,
  что Wt поддерживает лаконичные URL одинаково как для сессий Ajax, так и для
  сессий простого HTML (используя поддержку истории HTML5, если возможно),
  позволяет использовать историю браузера и закладки, а также обеспечивает
  оптимизацию для поисковых систем.
</p>

<p>
  Навигация обеспечивается посредством <a
  href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WMenu.html"
  target="_blank">WMenu</a> и <a
  href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTabWidget.html"
  target="_blank">WTabWidget</a>. Эти виджеты обладают схожим набором
  возможностей. Для сессий Ajax они поддерживают <b>предзагрузку</b> и
  <b>отложенную загрузку</b> содержимого, ассоциированного
  с каждым пунктом. Предварительно загружаемое содержимое
  не увеличивает времени загрузки, потому что механизм рендеринга Wt
  всегда оптимизирует время ответа, передавая, в первую очередь,
  только видимые виджеты или их изменения. Всё, что невидимо (например,
  содержимое других, предварительно загруженных пунктов меню) передаётся в
  фоновом режиме после рендеринга видимого содержимого.
</p>

<p>
  Навигация по меню реализована с помощью слотов без состояния (stateless
  slots) C++, и, следовательно, в результате этого код обработки событий
  выполняется на <b>стороне клиента</b>. По желанию, с помощью CSS3 можно
  украсить смену содержимого виджета <a
  href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WStackedWidget.html"
  target="_blank">WStackedWidget</a> анимацией.
</p>

<p>
  С каждым пунктом меню или вкладкой ассоциирован URL, что позволяет
  им сохраняться в истории браузера и закладках. Когда пользователь
  просматривает страницы в истории, меню  <a
  href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WApplication.html#a674fd6a2522d66d07908e8f3d82424a9"
  target="_blank">адекватно реагирует</a>.
  Аналогично, когда пользователь добавляет URL в закладки с тем, чтобы
  посетить его позже, или переходит по некой (внешней) ссылке к приложению,
  меню распознаёт начальный внутренний путь. Всё вместе это
  создаёт децентрализованный "фрэймворк маршрутизации", обеспечивающий
  лаконичные URL, которые одинаково хорошо работают как для сессий Ajax, так
  и для сессий простого HTML.
</p>

<p>
  Виджет чата, который расположен внизу на самом деле часть <a
  href="#/examples/chat">примера "Чат"</a>.
</p>

</div>
  </message>

  <message id="home.examples.treeview">
<div>
<h4 class="example">Treeview</h4>

<p>
  <a href="http://www.webtoolkit.eu/wt/examples/treeview-dragdrop/treeview-dragdrop.wt" class="run" target="_blank">
    <img src="/icons/green-play.png" style="vertical-align: top"/>  Запуск
  </a>
</p>

Этот пример показывает некоторую функциональность MVC, которую предоставляют
встроенные виды (WTreeView, WTableView и PieChart) и модели.

<ul>
  <li>
    Пример использует виджеты <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTreeView.html"
    target="_blank">WTreeView</a>
    и <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTableView.html"
    target="_blank">WTableView</a> для отображения данных модели
    в древовидном или табличном виде.
  </li>
  <li>
    Класс <a
    href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WSortFilterProxyModel.html"
    target="_blank">WSortFilterProxyModel</a>
    обеспечивает сортировку и фильтрацию данных другой модели.
  </li>
  <li>
    Эти виды поддерживают перетаскивание выбранных элементов.
  </li>
  <li>
    Вы можете использовать вложенные менеджеры компоновки (горизонтальной и
    вертикальной
    <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WBoxLayout.html" target="_blank">
      WBoxLayout</a>)
    для автоматической компоновки в пределах окна, и, по желанию, задавать
    нужные размеры.
  </li>
  <li>
    Для ввода данных могут быть использованы модальные (или немодальные) <a
    href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WDialog.html"
    target="_blank">диалоги</a>.
  </li>
  <li>
    Можно пользоваться контекстным меню
    <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPopupMenu.html" target="_blank">
      WPopupMenu</a>.
  </li>
</ul>
</div>
  </message>

  <message id="home.examples.chart">
<div>
<h4 class="example">Графики (диаграммы)</h4>

<p>
  <a href="http://www.webtoolkit.eu/wt/examples/charts/charts.wt" class="run" target="_blank">
    <img src="/icons/green-play.png" style="vertical-align: top"/>  Запуск
  </a>
</p>

<p>Этот пример демонстрирует <a
href="http://www.webtoolkit.eu/wt/doc/reference/html/group__charts.html" target="_blank">виджеты Wt
для рисования графиков (диаграмм)</a>, которые реализованы на основе
кросс-браузерного API рисования. Этот API использует возможности самих
браузеров для отрисовки высококачественной графики. В зависимости от браузера,
встроенный VML, встроенный SVG, HTML 5 canvas, или изображение PNG
используется для отрисовки содержимого в <a
href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPaintedWidget.html"
target="_blank">WPaintedWidget</a>.
</p>

<p>Этот пример также демонстрирует то, как одна модель может быть использована
несколькими видами, и как она может оповещать об изменениях каждый из этих
видов. <a
href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTableView.html"
target="_blank">Табличный вид</a> и диаграмма образуют <i>вид</i>
на базе одной <a
href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WAbstractItemModel.html"
target="_blank">модели элементов</a>.</p>
</div>
  </message>

  <message id="home.examples.git">
<div>
<h4 class="example">Обозреватель Git</h4>

<p>
  <a href="http://www.webtoolkit.eu/wt/examples/gitmodel/gitview.wt" class="run" target="_blank">
    <img src="/icons/green-play.png" style="vertical-align: top"/>  Запуск
  </a>
</p>

<p>
  Этот пример служит демонстрацией реализации специфической модели данных,
  которая может быть использована такими классами видов, как
  <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTreeView.html" target="_blank">
    WTreeView</a>.
</p>
<p>
  <a
  href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WStandardItemModel"
  target="_blank">WStandardItemModel</a> может быть наполнена данными,
  полученными, например, из базы данных. Недостаток заключается в том, что все
  данные при этом должны быть получены заранее и находиться в памяти сессии.
  Однако, наследуя  <a
  href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WAbstractItemModel"
  target="_blank">WAbstractItemModel</a>, Вы можете реализовать модель
  которая получает (или вычисляет) данные только при необходимости,
  обеспечивая компромис между размещением данных в памяти или получением их
  из какого-либо источника.
</p>

  <p>В этом примере, мы реализовываем древовидную модель навигации по
  репозиторию <a href="http://git-scm.com/">git</a>. Модель лишь по мере
  необходимости хранит в памяти информацию о папках, однако все остальные
  данные она считывает напрямую из git. Изначально мы думали, что в качестве
  идентификаторов подойдут суммы SHA-1, однако папки с одинаковым содержимым
  в разных частях репозитория git обладают одинаковыми идентификаторами SHA-1,
  тогда как на деле они представляются различными <a
  href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WModelIndex.html"
  target="_blank">индексами модели</a>.
</p>
</div>
  </message>

  <message id="home.examples.composer">
<div>
<h4 class="example">Почтовый редактор</h4>

<p>
  <a href="http://www.webtoolkit.eu/wt/examples/composer/composer.wt" class="run" target="_blank">
    <img src="/icons/green-play.png" style="vertical-align: top"/>  Запуск
  </a>
</p>

<p>
  Этот пример реализует GMail-подобный почтовый редактор и показывает,
  по-мимо всего прочего, как асинхронно загружать файлы на сервер,
  отображая кросс-браузерный индикатор выполнения загрузки
  (cross-browser upload progress bar), и позволяя загружать несколько файлов
  сразу.
</p>

  <ul>
    <li>
      Класс <i>ContactSuggestions</i> осуществляет авто-подстановку
      адресов в поля To: Cc: и Bcc:. Виджет наследует
      класс <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WSuggestionPopup.html"
	     target="_blank">WSuggestionPopup</a>.
    </li>
    <li>
      Виджет <i>AttachmentEdit</i> использует <a
      href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WFileUpload.html"
      target="_blank">WFileUpload</a> для асинхронной
      загрузки файлов. <a
      href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WProgressBar.html"
      target="_blank">Индикатор выполнения загрузки</a> будет работать даже
      в IE6.
    </li>
    <li>
      Классы <i>Option</i> и <i>OptionList</i> показывают как слоты без
      состояний (stateless slots), трюк, позволяющий выполнять обработку
      событий на стороне клиента, но определять (реализовывать) их на C++,
      могут использоваться даже когда поведение не полностью лишено
      состояния. В данном случае, скрытие Опции влияет на смежные
      видимые опции: опция нуждается в разделителе только при наличии смежной
      (следующей) опции. Делая <b>реализации слотов без состояния
      недействительными</b>, когда состояние всё же меняется, мы можем,
      тем не менее, использовать их реализацию и наслаждаться скоростью
      обработки событий на стороне клиента!
    </li>
  </ul>
</div>
  </message>
  <message id="home.examples.chat">
<div>
<h4 class="example">Простой чат</h4>

<p>
  <a href="http://www.webtoolkit.eu/wt/examples/simplechat/simplechat.wt" class="run" target="_blank">
    <img src="/icons/green-play.png" style="vertical-align: top"/>  Запуск
  </a> (или дайте волю своим мыслям в окне чата внизу)
</p>

<p>
  Этот пример реализует простые клиент и сервер чата. Используя
  <b>инициируемые сервером обновления (server-initiated updates)</b>,
  можно легко пересылать события от одного пользователя другим
  пользователям. Инициируемые сервером обновления реализуются с помощью
  Ajax long polling или HTML5 WebSockets.
</p>

<p>
  Пример иллюстрирует также существенные преимущества подхода с использованием
  классов для разработки web-приложений: можно легко инстанцировать
  множество экземпляров одного и того же виджета. Виджет SimpleChatClient может
  быть повторно использован столь же просто, как и простые виджеты Wt,
  скажем, как кнопка.
</p>

<p>
  Чат также доступен через <i>Виджет</i>, который может
  быть встроен в другую страницу (что очень напоминает интеграцию
  виджета google maps в другое приложение). В данном случае, мы
  разместили чат прямо на домашней странице следующим образом:
</p>
  <pre>    &lt;div id="chat"&gt;&lt;/div&gt;
    &lt;script src="http://www.webtoolkit.eu/wt/examples/simplechat/chat.js?div=chat"&gt;&lt;/script&gt;</pre>
<p>
  Это работает посредством кросс-доменных (Cross-Origin) Ajax/WebSocket
  запросов (если имеется поддержка со стороны браузера, а если нет, - то
  посредством старых трюков) для взаимодействия исходной HTML страницы
  с сервером, на котором размещается Виджет, возможно даже на другом домене.
</p>

<p>
  Подобные интерактивные приложения, позволяющие пользователям отсылать текст
  HTML другим пользователям, обладают дурной славой в части пресловутых
  <b>атак межсайтового скриптинга (cross-site-scripting - XSS)</b>: пользователь
  вводит вредоносный (javascript) код как часть своего сообщения. Когда это
  сообщение отображается в браузере другого пользователя, внедрённый
  вредоносный код может передать злоумышленнику личную информацию пользователя,
  полученную, например, из кук браузера. Wt же полностью предупреждает подобные
  атаки, не требуя для этого ничего от разработчика, ибо такие виджеты как
  WText гарантируют, что отображается исключительно пассивный текст, а всё то,
  что им не является - отбрасывается.
</p>
</div>
  </message>

  <message id="home.examples.hangman">
<div>
<h4 class="example">Виселица</h4>

<p>
  <a href="http://www.webtoolkit.eu/wt/examples/hangman/hangman.wt" class="run" target="_blank">
    <img src="/icons/green-play.png" style="vertical-align: top"/> Запуск
  </a>
</p>

<p>
  В данном примере реализована простая и хорошо известная игра, и система
  рейтингов к ней, которая работает с базой данных посредством Wt::Dbo.
</p>
<p>
  Вот некоторое из того, что иллюстрирует данный пример:
</p>
<ul>
  <li>
    Различные подходы к компоновке:
    с помощью <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTemplate.html"
    target="_blank">шаблона HTML</a>,
    <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WBoxLayout.html"
    target="_blank">менеджера компоновки</a>, или совмещая простые
    виджеты и CSS.
  </li>
  <li>
    Повышенное удобство работы за счёт предварительно загружаемого скрытого
    содержимого, такого как различные картинки для изображения виселицы и
    повешенного.
  </li>
  <li>
    Навигация реализована
    с помощью <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WAnchor.html"
    target="_blank">WAnchor</a> который ссылается на внутренний путь. Дейстие выполняется
    по реакции на смену внутреннего пути.
  </li>
  <li>
    Работа с базой данных, содержащей информацию о пользователе, осуществляется
    посредством <a href="http://www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html">Wt::Dbo</a>.
  </li>
</ul>

<!--<p>Объяснение примера "виселица" приводится также в СТАТЬЕ</p>-->
</div>
  </message>

  <message id="home.examples.widgetgallery">
<div>
<h4 class="example">Галерея виджетов</h4>

<p>
  <a href="http://www.webtoolkit.eu/widgets" class="run" target="_blank">
    <img src="/icons/green-play.png" style="vertical-align: top"/>  Перейти в галерею виджетов
  </a>
</p>

<p>
 Этот пример демонстрирует большинство виджетов, которые есть в Wt, наряду с
 такими нюансами, как управление событиями и классами компоновки содержимого.
 Полезен для ознакомления с виджетами и возможностями библиотеки в действии.
</p>

</div>
  </message>

  <message id="home.download">
    <h3><span>Загрузка</span></h3>
  </message>
  <message id="home.download.license">
<h4>Лицензирование и цены</h4>

<p>Wt может быть использована на условиях лицензии открытого программного
обеспечения или на условиях коммерческой лицензии.</p>

<p>Если Вы желаете использовать библиотеку на условиях лицензии <b>GNU
General Public License (GPL)</b>, то Вы можете собрать web-приложение
Wt и установить его, но, согласно требованиям GPL, Вы обязаны предоставить
исходный код приложения всякому кто устанавливает его на своём оборудовании.
Это также относится к редистрибуции самой библиотеки Wt в оригинальном
или модифицированном виде.
</p>

<p><b>Коммерческая лицензия</b> лишена подобных ограничений: Вы можете
распространять приложения, разработанные с Wt, без необходимости
предоставлять их исходные коды. Лицензия оплачивается единовременно,
позволяя отдельному разработчику использовать Wt API (и, соответственно,
Wt::Dbo) для разработки приложений, используя самую последнюю версию Wt
или любую версию, выпущенную в течении одного года с момента оплаты.
</p>

<table class="versions">
  <tr class="trh">
    <th></th>
    <th class="product">Dbo</th>
    <th class="product">Wt + Dbo</th>
  </tr>
  <tr class="r0">
    <th>Библиотека виджетов</th>
    <td></td>
    <td>+</td>
  </tr>
  <tr class="r1">
    <th>Сервер приложения</th>
    <td></td>
    <td>+</td>
  </tr>
  <tr class="r0">
    <th>HTTP + WebSockets серверы</th>
    <td></td>
    <td>+</td>
  </tr>
  <tr class="r1">
    <th>C++ ORM</th>
    <td>+</td>
    <td>+</td>
  </tr>
  <tr class="r0">
    <th>Драйвер Sqlite3</th>
    <td>+</td>
    <td>+</td>
  </tr>
  <tr class="r1">
    <th>Драйвер PostgreSQL</th>
    <td>+</td>
    <td>+</td>
  </tr>
  <tr class="separate r0">
    <th>Лицензия</th>
    <td></td>
    <td></td>
  </tr>
  <tr class="r1">
    <th class="indent">
      Лицензия GNU (General Public License)
    </th>
    <td>бесплатно</td>
    <td>бесплатно</td>
  </tr>
  <tr class="r0">
    <th class="indent multiline">
      Коммерческая лицензия
    </th>
    <td class="multiline">
      <div><span class="price">&euro;175</span> <span class="cart" /></div>
      <div><a href="http://www.webtoolkit.eu/wt/license/Wt%20License%20Agreement.pdf" class="smallprint">(текст лицензии на английском)</a></div>
    </td>
    <td class="multiline">
      <div><span class="price">&euro;599</span> <span class="cart" /></div>
      <div><a href="http://www.webtoolkit.eu/wt/license/WtDbo%20License%20Agreement.pdf" class="smallprint">(текст лицензии на английском)</a></div>
    </td>
  </tr>
</table>

  </message>
  
  <message id="home.download.packages">
    <h4><span>Доступные для загрузки пакеты</span></h4>
  </message>
  <message id="home.download.version"><b>Версия</b></message>
  <message id="home.download.date"><b>Дата</b></message>
  <message id="home.download.description"><b>Описание</b></message>

  <message id="home.download.other">

<p>
  Если Вы используете Ubuntu, то можете установить довольно новую версию
  Wt из репозитория PPA Пау Гарсии (Pau Garcia):
</p>

<div class="fragment">
  <pre class="fragment">$ sudo add-apt-repository ppa:pgquiles/wt
$ sudo apt-get update
$ sudo apt-get install witty witty-dev witty-doc witty-examples</pre>
</div>

<p>
  С последним пакетом (<tt>witty-examples</tt>) устанавливаются примеры
  в <tt>/usr/lib/Wt/examples</tt>. Вы можете запустить любой из них следющим
  образом:
</p>

<div class="fragment">
  <pre class="fragment">$ /usr/lib/Wt/examples/hello/hello</pre>
</div>

<p>Более старые выпуски доступны на
<a href="http://sourceforge.net/project/showfiles.php?group_id=153710#files">sourceforge.net</a>.
</p>

<h4>Инсталлятор Wt: winst</h4>

Если Вам любопытно и Вы хотели бы попробовать Wt, но Ваша ОС
или её версия не предоставляет актуальную версию пакета, тогда winst может
быть тем, что Вам нужно. Он загрузит и произведёт сборку Wt и её
зависимостей в <b>UNIX(-like) окружении</b>, и также предоставит
скрипт для запуска примеров.

<p>
Необходимы <tt>CMake</tt> и <tt>GNU make</tt>, а также <tt>wget</tt> для
загрузки необходимых программных компонентов.
</p>

<p>
Загрузите пакет
(<a href="http://www.webtoolkit.eu/packages/winst-0.3.tar.gz">winst-0.3.tar.gz</a>)
или получите последнюю версию git:
<div class="fragment">
  <pre class="fragment">$ git clone http://www.webtoolkit.eu/git/winst.git</pre>
</div>
</p>

<h4>Системные требования</h4>

Для сборки и инсталляции последней версии Wt, Вам необходимы,
по крайней мере, следующие два пакета:
<ul>
  <li><a href="http://www.cmake.org/">CMake</a> - кросс-платформенная утилита
  конфигурирования сборки.<br />

    CMake &gt;= 2.6 рекомендуется (хотя, каким-то чудом, подходит и 2.4).
  </li>
  <li>
    Незаменимая <a href="http://www.boost.org/">
    библиотека C++ boost</a>: boost-1.36 или новее. <br />

    Необходимы следующие библиотеки boost (которые представлены не только
    заголовочными файлами): 
      <tt>boost_date_time</tt>, <tt>boost_regex</tt>,
      <tt>boost_program_options</tt>, <tt>boost_signals</tt>,
      <tt>boost_system</tt>, и, необязательно, (но настоятельно рекомендуется)
      <tt>boost_thread</tt>.
  </li>
</ul>

Следующие пакеты не являются обязательными, но их наличие наделяет
Wt дополнительными возможностями:
<ul>
  <li><a href="http://www.postgresql.org/">PostgreSQL</a>: если
    доступен, то будет доступен и
    <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1Dbo_1_1backend_1_1Postgres.html">коннектор postgres</a> для ORM библиотеки
    (<a href="http://www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html">Wt::Dbo</a>).
   </li>
  <li><a href="http://libharu.org/wiki/Main_Page">libharu</a>: если
    доступен, то будет доступен и класс
    <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPdfImage.html">WPdfImage</a>,
    который позволяет формировать данные в PDF. Для более полной
    поддержки шрифтов TrueType и Юникода, Вам потребуется
    <a href="https://github.com/kdeforche/libharu">модифицированная libharu</a>.
  </li>
  <li><a href="http://www.graphicsmagick.org/">GraphicsMagick</a>: если
    доступен, то будет доступен и класс
    <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WRasterImage.html">WRasterImage</a>,
    который позволяет формировать растровые изображения, такие как PNG
    или GIF.</li>
  <li><a href="http://www.pango.org/">pango</a> (LGPL): если доступен, то
    отрисовка текста при использовании WPdfImage и WRasterImage будет
    производиться с помощью этой библиотеки шрифтами TrueType, с учётом
    самого шрифта и покрытия (кодовых диапазонов) Юникода.</li>
</ul>

<p>Другие требования зависят от поддержки желаемого Вами коннектора,
который обеспечивает взаимодействие приложения Wt с браузером:</p>

<h5>Для FastCGI (только Unix):</h5>

<ul>
   <li>Apache 1 или 2, или другой web-сервер, поддерживающий протокол
   FastCGI.</li>
   <li>
     <a href="http://www.fastcgi.com/#TheDevKit">Набор разработчика FastCGI</a>
     : fcgi-2.4.0
   </li>

    <li>
      При использовании apache:
      Apache <a href="http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz">mod_fastcgi</a>:
      mod_fastcgi-2.4.x.<br />В качестве альтернативы Вы можете
      использовать <a href="http://httpd.apache.org/download.cgi#mod_fcgid">mod_fcgid</a>:
      mod_fcgid-2.3.5.
   </li> 
 </ul>

 <h5>Для встроенного httpd (wthttpd):</h5>

 <ul>
   <li>Встроенному httpd требуется библиотека C++ boost asio, которая
     представлена только лишь заголовочным файлом, включенным в boost.
  </li>
  <li>Необязательно, libz (для сжатия поверх HTTP) и openssl (для
    поддержки HTTPS).
  </li>
</ul>

<h5>Для ISAPI (только Win32):</h5>

<ul>
  <li>Коннектор ISAPI работает только для развёртывания приложений Wt в связке
    с Microsoft IIS server.</li>
</ul>

Следуйте <a
href="http://www.webtoolkit.eu/wt/doc/reference/html/InstallationUnix.html">инструкциям
по установке</a> для сборки Wt и запуска примеров, или смотрите
<a
href="http://redmine.webtoolkit.eu/projects/wt/wiki/Wt_Installation">инструкции по
установке для конкретных платформ</a>, если Ваша платформа в них присутствует.

<h4>Репозиторий Git</h4>

<p>Если Вы хотите отслеживать последние изменения, или участвовать в
разработке Wt, то Вы можете пользоваться репозиторием git.</p>

<p>
Для получения wt выполните команду:
<div class="fragment">
  <pre class="fragment">$ git clone http://www.webtoolkit.eu/git/wt.git</pre>
</div>
</p>
  </message>

  <message id="home.community">
<h3><span>Поддержка</span></h3>

<h4>Поддержка и обучение</h4>

<p>
  Вы можете приобрести <a href="http://www.emweb.be/services">поддержку и
  обучение</a> с гарантией ответа в течении трёх дней прямо от авторов
  библиотеки.
</p>

<p>
  Помощь сообщества доступна на <a
  href="http://redmine.webtoolkit.eu/projects/wt/boards">публичных
  форумах</a>. До сентября 2009 года был лишь <a
  href="mailto:witty-interest@lists.sourceforge.net">список рассылки</a>
  (<a
  href="http://lists.sourceforge.net/lists/listinfo/witty-interest">подписаться</a>),
  и старожилы ещё не покинули его. Вы можете искать или
  просматривать архивы списка рассылки посредством <a
  href="http://gmane.org/info.php?group=gmane.comp.web.witty.general">Gmane
  gateway</a> (честь и слава Пау Гарсии Кьюилесу (Pau Garcia i Quiles)
  за эту возможность).
</p>

<p>
  Чтобы быстро вникнуть в Wt и/или Wt::Dbo, Вы также можете приобрести <a
  href="http://www.emweb.be/services">тренинг</a> прямо от авторов
  библиотеки.
</p>

<h4>Авторы</h4>

<p>
Данное программное обеспечение было изначально разработано <a
href="mailto:koen@emweb.be">Коеном Дефоржем (Koen Deforche)</a>, и в настоящее
время сопровождается фирмой <a href="http://www.emweb.be/">Emweb bvba</a>.</p>

<p>Мы признательны проектам, у которых позаимствовали код:</p>
<ul>
<li>Встроенный httpd основан на примере библиотеки <a
href="http://asio.sourceforge.net/">C++ asio
</a>, разработанной Кристофером М. Кохлхоффом (Christopher M. Kohlhoff). <a
href="http://www.boost.org/LICENSE_1_0.txt">Лицензия
Boost Software License</a></li>
<li><a href="http://threadpool.sourceforge.net/">Пул потоков</a>,
реализованный Филиппом Хенкелем (Philipp Henkel). <a
href="http://www.boost.org/LICENSE_1_0.txt">Лицензия
Boost Software License</a></li>
<li>Библиотека <a href='http://rapidxml.sourceforge.net/'>RapidXML</a>
Марчина Калицинского (Marcin Kalicinski). <a
href="http://www.boost.org/LICENSE_1_0.txt">Лицензия
Boost Software License</a></li>
</ul>

<h4>Вики</h4>

<p>
Существует поддерживаемая сообществом <a
href="http://redmine.webtoolkit.eu/projects/wt/wiki">Вики Wt</a>, содержащая полезную
информацию, включая замечания по инсталляции для нескольких дистрибутивов Linux.
</p>

<h4>Контрибуции</h4>

<p>Разработка Wt спонсируется следующими компаниями и
организациями:</p>

<p>
<table>
  <tr>
    <td class="sponsor-logo"><a href="http://www.emweb.be/">
      Emweb bvba</a>
    </td>
    <td class="sponsor-role">
      Создатели, официальное сопровождение и поддержка
    </td>
  </tr>
  <tr>
    <td class="sponsor-logo">
      <a href="http://www.eurofer.be/">
      Eurofer</a>
    </td>
    <td class="sponsor-role">
      Спонсировал разработку библиотеки графиков (диаграмм), WTreeView и
      иерархических моделей.
    </td>
  </tr>
</table>
</p>

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

<p>Однако, в силу двух видов лицензирования Wt - лицензии открытого
программного обеспечения и коммерческой лицензии, для того, чтобы законно
защитить весь код  Wt в целом - как один субъект, - не заботясь об авторских
правах отдельных частей, мы требуем передачи авторских прав от контрибуторов
к фирме <a href="http://www.emweb.be/">Emweb</a> для принятия контрибуций.</p>

<h4>Переводы на другие языки</h4>

Перевод домашней страницы на Китайский язык выполнен Жимином Сонгом
(Zhimin Song).

Перевод домашней страницы на Русский язык выполнен Дмитрием Игришиным
(Dmitriy Igrishin).

<h4>Sourceforge</h4>

<a href="http://sourceforge.net"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=153710&amp;type=1" style="vertical-align:middle" width="88" height="31" border="0" alt="SourceForge.net Logo" /></a>
Проект Wt размещён на sourceforge <a href="http://sourceforge.net/projects/witty/">здесь</a>.
  </message>
  <message id="home.other-language">

<h3><span>!C++ ?</span></h3>

<p>Вам нравится функциональность библиотеки, но Вы не желаете использовать C++
в своём проекте?</p>

<p>Не отчаивайтесь. Wt существует в первоначальном (native) виде или через
привязки (bindings) из других языков:

<ul class="languages">
<li>
<div>
<img class="java-language-icon" src="/icons/java-logo.png" alt="Java"></img>

Вы можете использовать <a href="http://www.webtoolkit.eu/jwt">JWt</a>
- полноценную версию Wt для <b>Java</b>,
разрабатываемую и сопровождаемую вместе с версией C++. Она обладает, за
малыми исключениями, такими же возможностями, что и Wt, но выполняется
обычным образом в JVM и может быть развёрнута в любом контейнере сервлетов.
</div>

<br style="clear: both" />

</li>
<li>
<div>
<img class="language-icon" src="/icons/ruby-logo-R.png" alt="Ruby"></img>

Ричард Дэйл (Richard Dale)
сопровождает <a href="http://github.com/rdale/wtruby/tree/master">WtRuby</a>,
<b>Ruby</b> привязку к Wt, используя тот же фреймворк, который используется
для генерации привязки Ruby к Qt и KDE.
</div>


<br style="clear: both" />

</li>

<li>
<div>
<img class="language-icon" src="/icons/clojure-logo.png" alt="Clojure"></img>

Используя поддержку JVM для других языков, таких
как <b>Clojure</b>, варианта LISP, Ральф Мориц (Ralph Moritz) экспериментирует
с <a href="http://lispetc.posterous.com/hello-jwt-from-clojure">использованием
JWt прямо из Clojure</a>, документируя опыты в своём блоге,
и, в конечном счёте, разрабатывая маленькую библиотеку поддержки.
</div>

<br style="clear: both" />

</li>

<li>
<div>
<img class="language-icon" src="/icons/jython-logo.png" alt="Jython"></img>

Альберт Сервера ай Арени (Albert Cervera i Areny) экспериментирует с
использованеим JWt из <b>Jython</b>, -
ещё один язык, работающий с JVM. Он изложил как создать и запустить 
программу "Hello World!" на Jython <a href="http://www.nan-tic.com/en/from-pyqt-to-jythonjwt-setting-up-the-environment">в этой статье блога</a>.
</div>

<br style="clear: both" />

</li>

</ul>
</p>

  </message>
  <message id="home.documentation">
 
<h3><span>Документация</span></h3>

<h4>Сборка и инсталляция</h4>

<p>
Общие инструкции по установке (UNIX)
находятся <a href="http://www.webtoolkit.eu/wt/doc/reference/html/InstallationUnix.html">здесь</a>, а также
включены в исходный дистрибутив (файлы INSTALL или INSTALL.html).</p>
<p>
В дополнении, <a href="http://redmine.webtoolkit.eu/projects/wt/wiki">Вики
Wt</a> содержит раздел, посвящённый
<a href="http://redmine.webtoolkit.eu/projects/wt/wiki/Wt_Installation">замечаниям
по установке на конкретных платформах</a>.
</p>

<h4>Введение и пособия</h4>

<ul>
<li>Узнайте о преимуществах использования Wt перед традиционными
фреймворками web-приложений из нашего <a
href="http://www.webtoolkit.eu/doc/Wt-WhitePaper.pdf">официального
документа</a>.</li>

<li>Журнал Dr Dobbs содержит хорошую <a href="http://www.ddj.com/cpp/206401952">
вводную статью</a> (февраль 2008 года).</li>

<li>Справочное руководство содержит
<a href="http://www.webtoolkit.eu/wt/doc/reference/html/overview.html">обзор
библиотеки</a>, который является хорошей отправной точкой для начинающих.</li>

<li>Журнал Software Developers содержит (слегка устаревшее) пособие
(апрель 2006 года). Пособие использует пример кода "виселица" (смотрите также в
примерах!). Вы можете просмотреть копию статьи <a
href="http://www.webtoolkit.eu/wt/doc/tutorial/wt-sdj.xhtml">здесь</a> или
загрузить
<a href="http://www.webtoolkit.eu/wt/doc/tutorial/wt-sdj.pdf">PDF версию</a>.</li>

<li>Виктор Венкман (Victor Venkman) написал
<a href="http://www.codeguru.com/cpp/i-n/internet/browsercontrol/article.php/c15275/">прекрасное введение в Wt</a>, 
<a href="#/examples/">примера "Здавствуй, мир!"</a>.</li>

</ul>

<h4>Справочное руководство</h4>

<p>Доступно <a href="http://www.webtoolkit.eu/wt/doc/reference/html/index.html"
target="_blank"> справочное руководство (в новом окне)</a>, сгенерированное
из исходных кодов с помощью doxygen. Оно также содержит небольшое пособие
на примере tree list, обращая особое внимание на механизм реализации
слотов без состояния, который является продвинутой возможностью Wt, позволяющей
оптимизировать обработку событий кодом на стороне клиента.</p>

<h4>Аннотированные примеры</h4>

<p>Документация сгенерирована также и для примеров из их исходных кодов
и может быть просмотрена <a href="http://www.webtoolkit.eu/wt/doc/examples/html/modules.html"
target="_blank">здесь (в новом окне)</a>.</p>

<h4>Вики</h4>

<p>
Существует поддерживаемая сообществом <a href="http://redmine.webtoolkit.eu/projects/wt/wiki">Вики Wt</a> с такой полезной информацией как FAQ, советы и трюки.
</p>

  </message>

  <message id="srcview.title.CPP.">
    <div class="srcviewtitle">
      <h2>Исходный код примеров Wt</h2>

      <p>
        Смотрите ниже исходный код всех примеров, включенных в
	<a href="#/">Wt</a>.
      </p>
    </div>
  </message>

  <message id="srcview.title.">Примеры Wt</message>

  <message id="srcview.title.CPP.hello">
    <div class="srcviewtitle">
      <h2>Исходный код примера <i>Здравствуй, мир!</i></h2>

      <p>
        Смотрите ниже исходный код примера Wt
	<a href="#/examples/">Здравствуй, мир!</a>.
      </p>
    </div>
  </message>

  <message id="srcview.title.hello">Пример: Здравствуй, мир!</message>

  <message id="srcview.title.CPP.hangman">
    <div class="srcviewtitle">
      <h2>Исходный код примера <i>Виселица</i></h2>

      <p>
    Смотрите ниже исходный код примера Wt
	<a href="#/examples/">Виселица</a>.
      </p>
    </div>
  </message>

  <message id="srcview.title.hangman">Пример: Виселица</message>

  <message id="srcview.title.CPP.charts">
    <div class="srcviewtitle">
      <h2>Исходный код примера <i>Диаграммы</i></h2>

      <p>
	Смотрите ниже исходный код примера Wt
	<a href="#/examples/charts">Диаграммы</a>.
      </p>
    </div>
  </message>

  <message id="srcview.title.charts">Пример: Диаграммы</message>

  <message id="srcview.title.CPP.treeview-dragdrop">
    <div class="srcviewtitle">
      <h2>Исходный код примера <i>Treeview</i></h2>

      <p>
	Смотрите ниже исходный код примера Wt <a href="#/examples/treeview">
	  Treeview</a>.
      </p>
    </div>
  </message>

  <message id="srcview.title.treeview-dragdrop">Пример: Treeview</message>

  <message id="srcview.title.CPP.composer">
    <div class="srcviewtitle">
      <h2>Исходный код примера <i>Почтовый редактор</i></h2>

      <p>
	Смотрите ниже исходный код примера Wt
	<a href="#/examples/composer">Почтовый редактор</a>.
      </p>
    </div>
  </message>

  <message id="srcview.title.composer">Пример: Почтовый редактор</message>
  
  <message id="srcview.title.CPP.wt-homepage">
    <div class="srcviewtitle">
      <h2>Исходный код примера <i>Домашняя страница Wt</i></h2>

      <p>
	Смотрите ниже исходный код примера Wt
	<a href="#/examples/wt-homepage">Домашняя страница</a>.
      </p>
    </div>
  </message>

  <message id="srcview.title.wt-homepage">Пример: Домашняя страница Wt</message>

  <message id="srcview.title.CPP.gitmodel">
    <div class="srcviewtitle">
      <h2>Исходный код примера <i>Обозреватель Git</i></h2>

      <p>
	Смотрите ниже исходный код примера Wt 
	<a href="#/examples/gitmodel">Обозреватель Git</a>.
      </p>
    </div>
  </message>

  <message id="srcview.title.gitmodel">Пример: Обозреватель Git</message>

  <message id="srcview.title.CPP.simplechat">
    <div class="srcviewtitle">
      <h2>Исходный код примера <i>Чат</i></h2>

      <p>
	Смотрите ниже исходный код примера Wt
	<a href="#/examples/simplechat">Чат</a>.
      </p>
    </div>
  </message>

  <message id="srcview.title.simplechat">Пример: Чат</message>

  <message id="srcview.title.CPP.widgetgallery">
    <div class="srcviewtitle">
      <h2>Исходный код примера <i>Галерея виджетов</i></h2>

      <p>
	Смотрите ниже исходный код примера Wt
	<a href="#/examples/widgetgallery">Галерея виджетов</a>.
      </p>
    </div>
  </message>

  <message id="srcview.title.widgetgallery">Пример: Галерея виджетов</message>

</messages>
