<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>lua nova &#187; webserver</title>
	<atom:link href="http://www.luanova.org/tag/webserver/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.luanova.org</link>
	<description>welcome to the moon</description>
	<lastBuildDate>Thu, 23 Sep 2010 12:46:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Setting Orbit to use Apache2</title>
		<link>http://www.luanova.org/setting-orbit-to-use-apache2/</link>
		<comments>http://www.luanova.org/setting-orbit-to-use-apache2/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 13:44:23 +0000</pubDate>
		<dc:creator>ryanpusztai</dc:creator>
				<category><![CDATA[Lua]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[orbit]]></category>
		<category><![CDATA[web frameworks]]></category>
		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://luanova.org/?p=70</guid>
		<description><![CDATA[This article will cover how to install Lua Orbit on an Ubuntu 8.04+ server. This will explain how to setup Apache2 and Xavante on the server. This allows for production code to run through Apache2 and then develop using Xavante. To hook Orbit to Apache2 we will be using FastCGI for the best performance. NOTE: [...]]]></description>
			<content:encoded><![CDATA[<p>This article will cover how to install <a href="http://keplerproject.github.com/orbit/index.html">Lua Orbit</a> on an Ubuntu 8.04+ server. This will explain how to setup Apache2 and Xavante on the server. This allows for production code to run through Apache2 and then develop using Xavante. To hook Orbit to Apache2 we will be using <strong>FastCGI</strong> for the best performance.</p>

<p>NOTE: This is just one way to configure your server to run Orbit applications; it does require that you have root access.  There are also local sandboxed methods which we will cover in a future article.</p>

<h2>Installing Apache</h2>

<p>Connect to your server. Use ssh or however your host instructs you, and install Apache2 and support modules:</p>

<pre><code>$ sudo apt-get install apache2 libapache2-mod-fcgid libfcgi-dev build-essential
</code></pre>

<p>Enable required Apache2 modules:</p>

<pre><code> $ sudo a2enmod rewrite
 $ sudo a2enmod fcgid
 $ sudo /etc/init.d/apache2 force-reload
</code></pre>

<h2>Install LuaRocks</h2>

<p>If you are running a fresh distribution (Ubuntu Lucid or Debian Squeeze) then you can get a suitable LuaRocks from the repositories &#8211; otherwise you must install it directly, as described below. If unsure, look at ‘aptitude show luarocks’ &#8211; the luarocks version must be 2.0.x.  This will also make sure you have Lua and its development library:</p>

<pre><code>$ sudo apt-get install luarocks
</code></pre>

<p>Otherwise, you have to do it by hand:</p>

<p>Install Lua, using the appropriate methods for your system.</p>

<pre><code>$ sudo apt-get install lua5.1 liblua5.1-0-dev
</code></pre>

<p>Download and unpack the LuaRocks tarball (http://luarocks.org/releases).</p>

<pre><code>$ wget http://luarocks.org/releases/luarocks-2.0.2.tar.gz
$ tar xvfz luarocks-2.0.2.tar.gz
</code></pre>

<p>Change directories to the new extracted LuaRocks directory and configure. (This will attempt to detect your installation of Lua. If you get any error messages, the main problem will probably be the location of the Lua include files &#8211; this uses the standard Debian/Ubuntu locations.</p>

<pre><code>$ cd luarocks-2.0.2
$ ./configure --with-lua-include=/usr/include/lua5.1"
$ make
$ make install
</code></pre>

<p>Install <strong>WSAPI</strong>, <strong>fcgi</strong>, <strong>Orbit</strong>, and <strong>Xavante</strong></p>

<pre><code>$ sudo luarocks install orbit
$ sudo luarocks install wsapi-xavante
$ sudo luarocks install wsapi-fcgi
</code></pre>

<p>[Optional] Install support libraries; <strong>LuaSQL</strong>,<strong>Sqlite3</strong> and <strong>md5</strong>:</p>

<pre><code>$ sudo apt-get install libmysqlclient15-dev libsqlite3-dev
$ sudo luarocks install md5
$ sudo luarocks install luasql-sqlite3
$ sudo luarocks install luasql-mysql MYSQL_INCDIR=/usr/include/mysql
</code></pre>

<h2>Setting up Apache2</h2>

<p>Edit the site config file with your favourite editor. (default site is named ‘default’)</p>

<pre><code>$ sudo joe /etc/apache2/sites-available/default
</code></pre>

<p>Add this following section below the <code>&lt;Directory /var/www/&gt;</code> section of the config file. If this section has a ‘AllowOverride None’ then you need to change the ‘None’ to ‘All’ so that the .htaccess file can override the configuration locally.</p>

<pre><code>&lt;IfModule mod_fcgid.c&gt;
    AddHandler fcgid-script .lua
    AddHandler fcgid-script .ws
    AddHandler fcgid-script .op
    FCGIWrapper "/usr/local/bin/wsapi.fcgi" .ws
    FCGIWrapper "/usr/local/bin/wsapi.fcgi" .lua
    FCGIWrapper "/usr/local/bin/op.fcgi" .op
    #FCGIServer "/usr/local/bin/wsapi.fcgi" -idle-timeout 60 -processes 1
    #IdleTimeout 60
    #ProcessLifeTime 60
&lt;/IfModule&gt;
</code></pre>

<p>Restart the server.</p>

<p>To enable your application you need to add <strong>+ExecCGI</strong> to an .htaccess file in the root of your Orbit application &#8211; in this case, /var/www.</p>

<pre><code>Options +ExecCGI
DirectoryIndex index.ws
</code></pre>

<p>Here is a simple example of a “Hello World” orbit application. Put this in /var/www/index.ws</p>


<div class="wp_syntax"><div class="code"><pre class="lua" style="font-family:monospace;">    #<span style="color: #66cc66;">!/</span>usr<span style="color: #66cc66;">/</span>bin<span style="color: #66cc66;">/</span>env wsapi.fcgi
&nbsp;
    <span style="color: #b1b100;">require</span><span style="color: #ff0000;">&quot;orbit&quot;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">-- Orbit applications are usually modules,</span>
    <span style="color: #808080; font-style: italic;">-- orbit.new does the necessary initialization</span>
&nbsp;
    module<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">&quot;hello&quot;</span>, package.seeall, orbit.new <span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">-- These are the controllers, each receives a web object</span>
    <span style="color: #808080; font-style: italic;">-- that is the request/response, plus any extra captures from the</span>
    <span style="color: #808080; font-style: italic;">-- dispatch pattern. The controller sets any extra headers and/or</span>
    <span style="color: #808080; font-style: italic;">-- the status if it's not 200, then return the response. It's</span>
    <span style="color: #808080; font-style: italic;">-- good form to delegate the generation of the response to a view</span>
    <span style="color: #808080; font-style: italic;">-- function</span>
&nbsp;
    <span style="color: #b1b100;">function</span> index<span style="color: #66cc66;">&#40;</span> web <span style="color: #66cc66;">&#41;</span>
        <span style="color: #b1b100;">return</span> render_index<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #b1b100;">end</span>
&nbsp;
    <span style="color: #b1b100;">function</span> say<span style="color: #66cc66;">&#40;</span> web, name <span style="color: #66cc66;">&#41;</span>
        <span style="color: #b1b100;">return</span> render_say<span style="color: #66cc66;">&#40;</span> web, name <span style="color: #66cc66;">&#41;</span>
    <span style="color: #b1b100;">end</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">-- Builds the application's dispatch table, you can</span>
    <span style="color: #808080; font-style: italic;">-- pass multiple patterns, and any captures get passed to</span>
    <span style="color: #808080; font-style: italic;">-- the controller</span>
&nbsp;
    hello:dispatch_get<span style="color: #66cc66;">&#40;</span> index, <span style="color: #ff0000;">&quot;/&quot;</span>, <span style="color: #ff0000;">&quot;/index&quot;</span> <span style="color: #66cc66;">&#41;</span>
    hello:dispatch_get<span style="color: #66cc66;">&#40;</span> say, <span style="color: #ff0000;">&quot;/say/(%a+)&quot;</span> <span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">-- These are the view functions referenced by the controllers.</span>
    <span style="color: #808080; font-style: italic;">-- orbit.htmlify does through the functions in the table passed</span>
    <span style="color: #808080; font-style: italic;">-- as the first argument and tries to match their name against</span>
    <span style="color: #808080; font-style: italic;">-- the provided patterns (with an implicit ^ and $ surrounding</span>
    <span style="color: #808080; font-style: italic;">-- the pattern. Each function that matches gets an environment</span>
    <span style="color: #808080; font-style: italic;">-- where HTML functions are created on demand. They either take</span>
    <span style="color: #808080; font-style: italic;">-- nil (empty tags), a string (text between opening and</span>
    <span style="color: #808080; font-style: italic;">-- closing tags), or a table with attributes and a list</span>
    <span style="color: #808080; font-style: italic;">-- of strings that will be the text. The indexing the</span>
    <span style="color: #808080; font-style: italic;">-- functions adds a class attribute to the tag. Functions</span>
    <span style="color: #808080; font-style: italic;">-- are cached.</span>
    <span style="color: #808080; font-style: italic;">--</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">-- This is a convenience function for the common parts of a page</span>
&nbsp;
    <span style="color: #b1b100;">function</span> render_layout<span style="color: #66cc66;">&#40;</span> inner_html <span style="color: #66cc66;">&#41;</span>
        <span style="color: #b1b100;">return</span> html
        <span style="color: #66cc66;">&#123;</span>
            head<span style="color: #66cc66;">&#123;</span> title<span style="color: #ff0000;">&quot;Hello&quot;</span> <span style="color: #66cc66;">&#125;</span>,
            body<span style="color: #66cc66;">&#123;</span> inner_html <span style="color: #66cc66;">&#125;</span>
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #b1b100;">end</span>
&nbsp;
    <span style="color: #b1b100;">function</span> render_hello<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #b1b100;">return</span> p.hello <span style="color: #ff0000;">&quot;Hello World!&quot;</span>
    <span style="color: #b1b100;">end</span>
&nbsp;
    <span style="color: #b1b100;">function</span> render_index<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #b1b100;">return</span> render_layout<span style="color: #66cc66;">&#40;</span> render_hello<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>
    <span style="color: #b1b100;">end</span>
&nbsp;
    <span style="color: #b1b100;">function</span> render_say<span style="color: #66cc66;">&#40;</span> web, name <span style="color: #66cc66;">&#41;</span>
        <span style="color: #b1b100;">return</span> render_layout<span style="color: #66cc66;">&#40;</span> render_hello<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> .. p.hello<span style="color: #66cc66;">&#40;</span> <span style="color: #66cc66;">&#40;</span>
    eb.input.greeting <span style="color: #b1b100;">or</span> <span style="color: #ff0000;">&quot;Hello &quot;</span> <span style="color: #66cc66;">&#41;</span> .. name .. <span style="color: #ff0000;">&quot;!&quot;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>
    <span style="color: #b1b100;">end</span>
&nbsp;
    orbit.htmlify<span style="color: #66cc66;">&#40;</span> hello, <span style="color: #ff0000;">&quot;render_.+&quot;</span> <span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> _M</pre></div></div>


<p>Now you should be able to launch your web browser and goto                http://hostname and you should see “Hello World!”</p>

<p>If you go to http://hostname/index.ws/say/yourname you should see:</p>

<pre><code>“Hello World!
Hello yourname!”
</code></pre>

<p>You are done!  You can now look at LuaNova&#8217;s <a href="http://luanova.org/orbit1-2/">Orbit Introduction</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.luanova.org/setting-orbit-to-use-apache2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Golden Wombat of Destiny</title>
		<link>http://www.luanova.org/golden-wombat-destiny/</link>
		<comments>http://www.luanova.org/golden-wombat-destiny/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 01:58:07 +0000</pubDate>
		<dc:creator>nathany</dc:creator>
				<category><![CDATA[mod_wombat]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[computer programming]]></category>
		<category><![CDATA[GSoC]]></category>
		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://luanova.wordpress.com/?p=12</guid>
		<description><![CDATA[The Golden Wombat of Destiny was a text adventure game (interactive fiction) written by Huw Collingbourne in early `80s. I honestly never got very far in that game, preferring Colossal Cave and The Hitchhiker&#8217;s Guide to the Galaxy in the days of the Kaypro IV. Today we&#8217;re going to talk about a different wombat, with [...]]]></description>
			<content:encoded><![CDATA[<p><em>The Golden Wombat of Destiny</em> was a text adventure game (interactive fiction) written by Huw Collingbourne in early `80s. I honestly never got very far in that game, preferring Colossal Cave and The Hitchhiker&#8217;s Guide to the Galaxy in the days of the Kaypro IV.</p>

<p>Today we&#8217;re going to talk about a different wombat, with a different <em>destiny.</em></p>

<p>Spear-headed by <a href="http://kasparov.skife.org/blog/src/wombat/">Brian McCallister</a>, <strong>mod_wombat</strong> embeds the <a href="http://www.lua.org">Lua</a> programming language into the <a href="http://httpd.apache.org/">Apache HTTP server</a> in the same fashion as mod_perl, mod_php and mod_python bring their respective languages into the Apache world of web development.</p>

<p>How mod_wombat differs has a lot to do with how Lua differs from other languages. Lua is a very lightweight scripting language originally designed for non-programmers to customize the software it is embedded in. It is simple to pick up, while offering a good amount of flexibility and power. Its popularity in game scripting has pushed its&#8217; interpreter towards being very efficient and multi-thread ready.</p>

<p>Apache is the heavy-weight champion of HTTP servers, responsible for <a href="http://news.netcraft.com/archives/web_server_survey.html">serving up half the Internet</a>. Apache 2.x was a substantial reworking, providing:</p>

<ul>
<li>The Apache Portable Runtime (APR) so Module writers don&#8217;t need to deal with all the OS-specific issues.</li>
<li>Swappable multi-processing modules (MPMs) including Prefork (non-threaded), Worker threads, and an Event MPM that decouples server threads from the HTTP connection (read: very efficient).</li>
</ul>

<p>Lua is designed for embedding in C-based programs, which allows mod_wombat to take advantage of the substantial infrastructure Apache provides. More than any other language module, mod_wombat endeavors to <em>work with</em> Apache.</p>

<p>Matthew Burke is <a href="http://mail-archives.apache.org/mod_mbox/httpd-dev/200803.mbox/%3c47CA13D9.7080900@gwu.edu%3e">looking for students</a> to work on mod_wombat as part of the 2008 <a href="http://code.google.com/soc/2008/">Google Summer of Code</a>. If you are a student who is interested, you should definitely get in touch with Matthew Burke and Brian McCallister to discuss your ideas. Who knows, this could be your <em>destiny?</em> <img src='http://www.luanova.org/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<h2>This is gonna be great</h2>

<p>Lua atop Apache could make for a very sweet development platform for web applications, both large and small.</p>

<ul>
<li>Lua is simpler than other scripting languages used for web development, making it easy to pick-up. This is exemplified by the use of <em>tables</em> as a universal data structure (like PHP Arrays, but unlike Python or Ruby). </li>
<li>Lua has several commonalities with JavaScript, like first-class functions, closures, and prototype-based object orientation. Yet it steps beyond most languages with proper tail calls and coroutines.</li>
<li>There is a fairly clean slate to start with, meaning it doesn&#8217;t carry the baggage of hundreds of procedural methods like PHP, or code mixed into HTML templates. APIs can be nicely organized and designed for simplicity (i.e. ColdFusion&#8217;s DateFormat and TimeFormat make it easier to reason about date formatting than Ruby or PHP&#8217;s methods).</li>
<li>Apache&#8217;s efficient threading modules combined with Lua&#8217;s low-overhead and thread-safety make for a very performant platform. That means it is able to handle a load of traffic without a huge hardware investment.</li>
<li>Deploying with an Apache module is often the preferred method, as opposed to more complicated reverse proxy setups or FastCGI. For ease of deployment, this is an advantage over the popular Ruby platform, which <a href="http://www.rubyinside.com/no-true-mod_ruby-is-damaging-rubys-viability-on-the-web-693.html">has no true mod_ruby</a>.</li>
<li>The mod_wombat project was started by Apache Software Foundation members, is hosted with Apache, and has their backing as a supported module for Apache users.</li>
</ul>

<h2>Ideas</h2>

<p>If you are a student joining the GSoC, you will need to come up with your own proposal. I&#8217;m not a student, so I don&#8217;t qualify, but I will post here a few of the basic ideas that I believe are of general consensus.</p>

<h3>Simplify installation</h3>

<p>For mod_wombat to become a platform of choice, it needs to be dead-simple to deploy, whether as a development environment or a production server. This would be served by relying only on <a href="http://httpd.apache.org/docs/2.2/mod/">those modules</a> included with the Apache distribution.</p>

<p>There has been a desire to remove the dependency on <a href="http://httpd.apache.org/apreq/docs/libapreq2/">libapreg2</a>, which is used to parse HTTP cookies, query-strings and POST data. The required functionality would need to be incorporated into mod_wombat directly.</p>

<h3>Tighter integration with Apache HTTP Server 2.2</h3>

<p>There is a lot that can be done to further integrate Lua with Apache, whether using Lua to configure Apache, or to pull Apache functionality into Lua.</p>

<p>Perhaps the most significant and obvious, would be integration with <strong>Apache&#8217;s Database Framework</strong>. With DBD, the database drivers for your web application are bundled with Apache, and Apache manages a pool of database connections in an intelligent way appropriate for the MPM being used. With mod_wombat, Lua could be the first language to really take advantage of this feature, new to Apache 2.2.</p>

<h3>Write something with it</h3>

<p>What mod_wombat provides is an API to higher-level web frameworks and applications. It&#8217;s hard to know how those APIs should be written without using them. Building a small project atop mod_wombat could go a long way in designing a <strong>concise and friendly API.</strong></p>

<p>Preferably using some sort of <a href="http://ajato.titanatlas.com/developer/code-standards">code standards</a>.</p>

<h2>Resources</h2>

<p>If you choose to partake in this endeavor, there a few things you must know.</p>

<ul>
<li>Working knowledge of ANSI C, perhaps <a href="http://www.careferencemanual.com/">C: A Reference Manual</a> will help.</li>
<li><a href="http://www.inf.puc-rio.br/~roberto/pil2/">Programming in Lua</a> is an excellent resource for both the Lua programming language and how to interface it with C.</li>
<li><a href="http://www.informit.com/store/product.aspx?isbn=0132409674">The Apache Modules Book</a> goes over Apache&#8217;s architecture and writing Modules for it, including a chapter on DBD.
<li>A willingness to work with <a href="http://www.gnu.org/software/autoconf/">autoconf</a> and related build tools. There is but one book dedicated to the subject, and the <a href="http://sourceware.org/autobook/">online version</a> is more up-to-date.</li>
<li>Familiarity with existing web development environments and experience with database systems.</li>
<li>An understanding of just how <a href="http://code.google.com/soc/2008/">Google Summer of Code</a> works.</li>
<li>Go through Brian&#8217;s <a href="http://kasparov.skife.org/wombat_ac_us_07.pdf">slides</a> and download the <a href="http://svn.apache.org/repos/asf/httpd/mod_wombat/trunk">source code</a> from Subversion to familiarize yourself with mod_wombat.</li>
</ul>

<p>And that&#8217;s all there&#8217;s to it. Ready to get coding?</p>

<h2>Follow-up</h2>

<p>Maxime Petazzoni has accepted the role of working on mod_wombat for GSoC this year. See the Apache <a href="http://mail-archives.apache.org/mod_mbox/httpd-dev/200804.mbox/%3c20080429195230.GA3397@bulix.org%3e">mailing list</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luanova.org/golden-wombat-destiny/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lua and the web: an overview</title>
		<link>http://www.luanova.org/lua-web-overview/</link>
		<comments>http://www.luanova.org/lua-web-overview/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 01:50:03 +0000</pubDate>
		<dc:creator>nathany</dc:creator>
				<category><![CDATA[Lua]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Kepler]]></category>
		<category><![CDATA[webserver]]></category>
		<category><![CDATA[Wiki]]></category>

		<guid isPermaLink="false">http://luanova.wordpress.com/?p=11</guid>
		<description><![CDATA[Lua is among the top 20 most popular programming languages, according to the TIOBE Programming Community index. Lua is also faster and has a smaller memory footprint than other interpreted scripting languages (compare with Ruby, Python, PHP and JavaScript SpiderMonkey). We haven&#8217;t heard a lot about Lua on the web, even though there are a [...]]]></description>
			<content:encoded><![CDATA[<p>Lua is among the top 20 most popular programming languages, according to the <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">TIOBE Programming Community index</a>. Lua is also faster and has a smaller memory footprint than other interpreted scripting languages (compare with <a href="http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;lang=lua&amp;lang2=ruby">Ruby</a>, <a href="http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;lang=lua&amp;lang2=python">Python</a>, <a href="http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;lang=lua&amp;lang2=php">PHP</a> and <a href="http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;lang=lua&amp;lang2=javascript">JavaScript SpiderMonkey</a>).</p>

<p>We haven&#8217;t heard a lot about Lua on the web, even though
there are a number of developers working with Lua on the server-side. Lets take a brief look.</p>

<h2>The Kepler Project</h2>

<p><a href="http://www.keplerproject.org/">Kepler</a> is a &#8220;web development platform&#8221; named after astronomer Johannes Kepler. It looks to be the most ambitious project of the bunch. Kepler is written as a number of modules that fit together, and includes its&#8217; own web server named Xavante.</p>

<p>There is also an endeavor to build <em>WSAPI,</em> in similar fashion to
Python&#8217;s <a href="http://www.python.org/dev/peps/pep-0333/">WSGI</a> interface, that support pretty much any web server and configuration (CGI, FastCGI, SCGI, etc, etc.)</p>

<h2>Nanoki</h2>

<p>When I joined to Kepler mailing list, &#8220;Petite Abeille&#8221; was the first person to respond. He has been developing a Wiki called <a href="http://alt.textdrive.com/nanoki/">Nanoki</a>.</p>

<p>However, it is not built on top of Kepler. Instead there is a small built-in web server or will run atop the Unix tcp command. All the source code is released under a MIT license, and is instructive in building a light, focussed web application vs. the broad scope of Kepler.</p>

<h2>mod_wombat</h2>

<p><a href="http://kasparov.skife.org/blog/">Brian McCallister</a> spear-headed a project to embed Lua in an Apache HTTP Server module. Going through Brian&#8217;s <a href="http://kasparov.skife.org/wombat_ac_us_07.pdf">slides</a> is quite inspiring as to just how good a fit this is. Apache does all the heavy-lifting, such as providing a fully multi-threaded &#8220;worker MPM&#8221; (multi-processing module) and a portable runtime (APR) environment. Lua is a thread-safe language, with &#8220;share-nothing&#8221; Lua <em>states</em>, so it fits right in and is super-efficient.</p>

<p>Skimming through <a href="http://www.informit.com/store/product.aspx?isbn=0132409674">The Apache Modules Book</a> is even more inspiring, as you can see the potential of mod_wombat if it took advantage of Apache&#8217;s database connection pooling (DBD) and the various other facilities of Apache HTTP Server.</p>

<p>Wombat is still a little rough around the edges, but you can find the Apache-licensed source code at:
<a href="http://svn.apache.org/repos/asf/httpd/mod_wombat/trunk">http://svn.apache.org/repos/asf/httpd/mod_wombat/trunk</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luanova.org/lua-web-overview/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

