Доброго времени суток.
Хочу рассказать о проекте, над которым я сейчас работаю. За последние шесть месяцев он стал весьма объёмен, и мне уже сложно управиться одному, поэтому я буду рад, если найдутся люди, которым этот проект также окажется интересным, и которые пожелают присоединиться к разработке. С другой стороны, сейчас уже есть что показать.
Проект называется Helios Javascript framework and libraries (http://gna.org/projects/helios/ хотя страница давно не обновлялась). Первый релиз состоялся 14 февраля сего года.
Фреймворк helios предоставляет способ создания приложений написанных на javascript и запускаемых в броузере. Основная вещь, которую делает ядро helios'а --- это управление модулями и их зависимостями. Модуль --- это отдельный .js файл с кодом, который может быть подключен (included) к некоторому другому модулю. Программист начинает код приложения в модуле main.js, к которому он может подключить другие необходимые модули. Ядро helios'а загрузит все требуемые модули в броузер, распарсит их и проинициализирует в порядке зависимостей. В общем, это вполне обычная функциональнасть доступная на большинстве других платформ и отсутствующая в броузерном javascript. Также есть несколько дополнительных фич, таких как динамическая загрузка и выгрузка модулей.
С точки зрения броузера, есть index.html, который ничего не содержит, кроме включения скрипта с ядром helios'а, которое, в свою очередь, подключает модуль main.js и все его зависимости, и, наконец, запускает код.
Всё это дело работает полностью на клиентской стороне (я однажды видел солюшн, который предоставлял такую же функциональность с загруской модулей, используя ajax и таким образом требуя запущенного сервера, здесь не тот случай). Это также означает, что такое приложение может быть загружено в броузер с удалённого http сервера, как и обычная веб-страница.
Основная идея заключается в том, что появляется возможность создавать "богатые" веб-приложения, и при этом клиентский и серверный код оказываются полностью разделены (забудьте про ужасный javascript внутри html внутри php).
Helios поставляется с некоторыми полезными библиотеками, без которых было бы сложно создать приложение. Низкоуровневые библиотеки определяют такие объекты как Signal (реализация паттерна observer) и Property (который хранит значение, предоставляет геттер и сеттер, а так же Signal, посылаемый при изменении значения). Есть также несколько библиотек более высокого уровня, такие как math (расширяет объект Math некоторыми дополнительными объектами), color (предоставляет функции для манипуляций с цветом), canvas (сейчас содержит функции рисования некоторых примитивов, а в будущем будет также обеспечивать совместимость между различными реализациями в броузерах), и, конечно, уже традиционнная для JS фреймворков ;) библиотека под названием anime, которая предоставляет функции для создания различных типов анимации.
Сейчас я работаю над библиотекой виджетов (которая пока называется heliwidgets). На самом деле, остальные библиотеки, упомянутые выше, расширяются по мере необходимости в какой-то функциональности для heliwidgets, поэтому практически каждый объект из других библиотек используется где-то в heliwidgets. На сегодня в heliwidgets уже реализовано несколько стандартных виджетов, в их числе Frame, Button, Label, Glasscase, Table и Selector. Heliwidgets также включает в себя подержку движков (engines), которые осуществляют рендеринг виджетов. Сейчас есть только один движок, который использует canvas для рисования.
Я написал простой калькулятор с использованием heliwidgets для того, чтобы продемонстрировать, как приложение на helios работает и выглядит (на сегодня, оно правильно работает только под firefox, в опере некоторые виджеты рендерятся криво):
http://absens.org/helios/helioscalc/
Чтоб лучше понять, как устроено приложение для helios, я рекомендую ознакомиться с исходным кодом. Это может заинтересовать программистов. Так как пока нет документации по heliwidgets, я написал код для каклькулятора в виде "codecast" (подробно откомментированный код с объяснением библиотечных вызовов), что должно хорошо продемонстрировать основные возможности helios и его библиотек. Вы можете загрузить исходный код калькулятора (запакованного вместе с helios и библиотеками) отсюда:
http://absens.org/helios/helioscalc.tar.gz
Я бы ещё хотел продемонстрировать одну фичу библиотеки heliwidgets под названием свойства стиля (style properties). Она относится к движку (engine), то есть движок предоставляет некоторый граф (зависимостей) из style properties, а программист может переопределить некоторые свойства для каких-нибудь виджетов. Когда некоторое свойство переопределяется для некоторого виджета, все свойства, от него зависимые вычисляются заново, а все дочерние виджеты наследуют эти изменения. Например, изменяя свойство primaryColor виджета rootWidget на #112233, можно перекрасить приложение так:
http://absens.org/helios/helioscalc_dark/
Исходный код фреймворка и библиотек доступен под GPLv3. Если кому-либо проект покажется интересным, пишите на heliosframework в гмейле.
Сайт absens.org к проекту отношения не имеет, просто нужно было где-то выложить :)