= Nitro

Nitro is an efficient, yet simple engine for developing professional Web
Applications using the Ruby language. Nitro aims to provide a robust
infrastructure for scalable web applications that can be distributed
over a server cluster. However, Nitro can also power simple web
applications for deployment on intranets or even personal computers.


== Features

A short summary of the major features:

* XML server pages (.sx)

Nitro introduces a new format for server pages that combines the
power of embededed Ruby (like erb, eruby) with the xml compliance
of Amrita. Even though it is a 'Callback' style templating system
it is flexible enough to run as 'Pipeline' style system if the
developer prefers this mode of operation.
	
<?xml version="1.0"?>
	
<!-- example page -->
<html>
<?r	
	title = "Example"
	version = request["version"]
?>
	
<h1>#{title}</h1>

<?r if version > 1 ?>
	<b>Version:</b> #{version}
<?r	end ?>
	
</html>
	
* Shaders, XSLT templates

Nitro promotes the usage of XSLT for web templates. The functional
nature of XSL is ideal for the Web. Moreover, the engine efficiently
precompiles the xsl transformation along with other transformations
(for example localization) essentially providing a computationally
free transformation step.
	
A shader integrates many XSLT templates and or CSS stylesheets
to encapsulate all styling/skinning requirements of a Web Application.

* Multi phase evaluation

Experimental, facilitates efficient HTTP1.1 caching.

* Fragment Synthesis

Nitro server pages can include fragments at 'Compile' time or at
'RunTime' time.
	
<!-- compile time include (static include) -->
<?include xl:href="myfile.si" />
	
<!-- run time include (dynamic include) -->
<x:include xl:href="myfile.si" />

* Object-Relational Mapping

Nitro integrates the NDB object-relational mapping library. NDB
provides transparent serialization of object graphs to a RDBMS
backend. Unlike other similar libraries NDB maps standard Ruby
objects to SQL tables and not vice versa. NDB provides a flexible
and intuitive api for querieng the database, raw access to the
SQL language if needed (for example to fine tune the automatically
generated SQL tables, or for custom queries), suports deserialization
to Ruby objects or tuples and provides a collection of usefull Mixins
to synthesize common Entities.
	
* Distributed State

Nitro provides a powerfull distributed state mechanism that utilizes
the DRb library. A typicall use of this infrastructure is to provide
distributed sessions when running your application over a server
cluster. Distributed sessions are fully transparent to the developer.
	
* Synchronous Server

An experimental synchronous server for implementing services like
Chat Rooms, Multiplayer Games, etc. Compatible with Macromedia Flash.
	
* Request Filters

The develpoper has full access to the request handling pipeline.
Request filters are a powerfull mechanism for customized processing
of special requests. Example filters are the autologin filter,
a gzip filter etc.
	
* Hierarchical Caching

Nitro provides a well designed and efficient caching mechanism. Caching
will be provided at the following levels:
	
* DB Cache
* Object Cache (deserialized objects)
* Fragment Caching (cache generated sub-parts of a page, or a page)
* HTTP 1.1 Caching (downstream caching of whole pages)

The engine calculates intra-page dependencies automatically. A variety
of invalidation strategies can be implemented.

* Support for 'nice' urls.
	
Experimental

* Advanced debuging features

* When running in debug mode, all exceptions raise are logged
to a special debug panel in the current page. Find out the offending
file and line from the exception dump, fix the bug, refresh the page.
	
* in-process console: inject an irb session to a running application
server. You can use the irb console to investigate all variables
and code in your running server process.

* Parts

Parts are organized modules of web services. A Web Framework that
integrates a large collection of parts (User management, Blog,
Fora, CMS, Personalization, ..) will be released by Navel.
	
Other libraries of parts are expected from the Ruby community when
the Part API is finalized.
	
* UI Components

Nitro is distributed with a collection of usefull UI components
to make form based application development easier (for example
an efficient, ndb-aware Pager component).
	
* Path overloading

Experimental
	
* Localization

Nitro supports efficient localization of web applications.


== Download

The latest version of Nitro can be found at

* http://www.navel.gr/nitro

Documentation for Nitro can be found at

* http://www.navel.gr/nitro/doc


== Requirements

Nitro requires the following applications or libraries:

* Ruby 1.8.1 and greater (http://www.ruby-lang.org)
	Version 1.8.2.preview2 is recommended

* Apache 2.0 (http://www.apache.org)
	Will be optional in a future version.

The following applications or libraries are optional:

* PostgreSQL (http://www.postgres.org)
	Used for Database driven web applications
	
* Ruby-psql 
(http://www.postgresql.jp/interfaces/ruby/archive/ruby-postgres-0.7.1.tar.gz)
	Ruby interface to the PostgreSQL RDBMS.

* Ruby-XSLT (http://gregoire.lejeune.free.fr/ruby-xslt_0.4.0.tar.gz)
	Used for XSLT based templates.

Please install the required applications and libraries before continuing
with the installation of Nitro.


== Instalation

Nitro is distributed as a RubyGem. First of all make sure you have
installed RubyGems on your system. Then run the following command:

gem install nitro

Then try to run the examples/tiny Example application.

A tar.gz distribution is also available on http://www.navel.gr/nitro


== Support

For any questions regarding Nitro, feel free to ask on the ruby-talk
mailing list (which is mirrored to comp.lang.ruby) or contact
mailto:gm / navel.gr.



-- 
www.navel.gr | tel: +30 2106898050 | fax: +30 2106898437

Navel does not accept liability for any errors, viruses or omissions in 
the contents of this message. The full corporate policy is available on 
our site.

have fun: www.joy.gr