Web development with Lua
Programming Language
Introducing Sailor, a web MVC framework in Lua
Etiene Dalcol
@etiene_d
@etiene_d
Sailor!

http://sailorproject.org
Web development with Lua @ GeeCON 2015 @etiene_d
Lua Ladies

http://lualadies.org
Web development with Lua @ GeeCON 2015 @etiene_d
Google Summer of Code
LabLua
Web development with Lua @ GeeCON 2015 @etiene_d
Web development with Lua @ GeeCON 2015 @etiene_d
Advantages
Web development with Lua @ GeeCON 2015 @etiene_d
Web development with Lua @ GeeCON 2015 @etiene_d
better reasons
• It looks cool
(I heard you could make games with it)
Web development with Lua @ GeeCON 2015 @etiene_d
better reasons
• It looks cool
(I heard you could make games with it)
• It’s made in my home country
(In my university to be more precise)
Web development with Lua @ GeeCON 2015 @etiene_d
better reasons
• It looks cool
(I heard you could make games with it)
• It’s made in my home country
(In my university to be more precise)
• It’s easy to learn
Web development with Lua @ GeeCON 2015 @etiene_d
?
?
?
?
?
?Web development with Lua @ GeeCON 2015 @etiene_d
Lua on the web
• Early stage
• cgilua ~ 1995
• Kepler Project ~ 2003
Web development with Lua @ GeeCON 2015 @etiene_d
“ I have myself developed Web sites with pure C++, Java, C#, PHP, and
Python. The easiest way to go was definitely Python. If the libraries existed,
Lua would be not quite as easy to use as Python, but probably quite a bit more
efficient; I think it would become my first choice... if the libraries existed.”
Michael Gogins
“ Recently there was some discussion about mod_lua on the Apache
developers mailing list. I mentioned there that I feel Lua could replace PHP as
the number one web scripting language if mod_lua were stable (i.e. not still in
beta) and it were implemented well (not making some of PHP's mistakes such
as putting everything in the global scope with no consistent naming or
parameter schemes). I've wanted to use Lua for all the things I currently use
PHP for ever since I discovered it.” Rena
Web development with Lua @ GeeCON 2015 @etiene_d
Web development with Lua @ GeeCON 2015 @etiene_d
Web development with Lua @ GeeCON 2015 @etiene_d
Web development with Lua @etiene_d
Web development with Lua @ GeeCON 2015 @etiene_d
Web development with Lua @ GeeCON 2015 @etiene_d
Why?
Web development with Lua @ GeeCON 2015 @etiene_d
Web development with Lua @ GeeCON 2015 @etiene_d
Servers
• Apache: mod_lua
• Nginx: OpenResty
Web development with Lua @ GeeCON 2015 @etiene_d
Servers
Web development with Lua @ GeeCON 2015 @etiene_d
• Apache: mod_lua
• Nginx: OpenResty
Servers
• Apache: mod_lua
• Nginx: OpenResty
• Xavante
• Others
Web development with Lua @ GeeCON 2015 @etiene_d
Frameworks
• Orbit (2007)
Least known
No significant updates since 2010
MVC
Web development with Lua @ GeeCON 2015 @etiene_d
Frameworks
• Orbit (2007)
Least known
No significant updates since 2010
MVC
• Luvit (2011)
Most popular
Intense development
node.js port 2-4x faster
Web development with Lua @ GeeCON 2015 @etiene_d
Frameworks
• Lapis (2012)
Intense development
Moonscript and Lua
Very well documented
Templater
OpenResty only
Not MVC
Web development with Lua @ GeeCON 2015 @etiene_d
Frameworks
• Lapis (2012)
Intense development
Moonscript and Lua
Very well documented
Templater
OpenResty only
Not MVC
• Others
Complicated, abandoned, poorly documented, license
issues or I never heard about it...
Web development with Lua @ GeeCON 2015 @etiene_d
Sailor!
Web development with Lua @ GeeCON 2015 @etiene_d
Sailor!
Web development with Lua @ GeeCON 2015 @etiene_d
Sailor!
Web development with Lua @ GeeCON 2015 @etiene_d
Sailor!
0.1
(Venus)
0.2
(Mars)
Web development with Lua @ GeeCON 2015 @etiene_d
What exactly is Sailor?
• It’s an MVC web framework
• Completely written in Lua
• Compatible with Apache (mod_lua), Nginx (OpenResty),
Mongoose, Xavante and Lwan
• Compatible with Linux, Windows and Mac
• Compatible with different databases
• MIT License
• Pre alpha v0.2 (Mars)
• 0.3 (Jupiter) will be released TODAY!
Web development with Lua @ GeeCON 2015 @etiene_d
Web development with Lua @ GeeCON 2015 @etiene_d
What (else) is cool about Sailor?
• Routing and friendly URLs
• Session, cookies, include, redirect…
• Lua Pages parsing
• Mail sending
• Simple Object Relational-Mapping
• Validation (valua)
• Basic login and authentication modules
• Form generation
• Themes (Bootstrap integration out of the box)
• App generator (Linux and Mac only)
• Model and CRUD generator
Web development with Lua @ GeeCON 2015 @etiene_d
• Routing and friendly URLs
• Session, cookies, include, redirect…
• Lua Pages parsing
• Mail sending
• Simple Object Relational-Mapping
• Validation (valua)
• Basic login and authentication modules
• Form generation
• Themes (Bootstrap integration out of the box)
• App generator (Linux and Mac only)
• Model and CRUD generator
• Lua at client
What (else) is cool about Sailor?
Web development with Lua @ GeeCON 2015 @etiene_d
Not so great things
• It’s still in early development
• Things are changing fast
• It lacks features
• Documentation
Web development with Lua @ GeeCON 2015 @etiene_d
How to get Sailor!
$ luarocks install sailor
$ sailor_create ‘My App’ /var/www
$ cd /var/www/my_app
$ lua start-server.lua
Web development with Lua @ GeeCON 2015 @etiene_d
Web development with Lua @ GeeCON 2015 @etiene_d
How to get Sailor!
$ luarocks install sailor
$ sailor_create ‘My App’ /var/www
$ cd /var/www/my_app
$ lua start-server.lua
$ luarocks install luasql-mysqlOptional
Web development with Lua @ GeeCON 2015 @etiene_d
/conf
/controllers
/models
/pub
/runtime
/themes
/views
App structure
Web development with Lua @ GeeCON 2015 @etiene_d
Example!
-- /controllers/site.lua
local site = {}
function site.index(page)
local msg = “Hello World”
page:render(‘index’, { msg = msg } )
end
function site.notindex(page)
page:write(“I’m different!”)
end
return site
Web development with Lua @ GeeCON 2015 @etiene_d
Example!
<!-- /views/site/index.lp -->
<p>
A message from the server:
<?lua page:print(msg) ?>
<br/>
The message again:
<%= msg %> <!-- same thing as above —>
</p>
Web development with Lua @ GeeCON 2015 @etiene_d
Example!
Web development with Lua @ GeeCON 2015 @etiene_d
Example!
<?lua@server -- Code here runs on the server ?>
<?lua -- Same as above ?>
<?lua@client -- Runs at the client ?>
<?lua@both -- Runs at the server and the client ?>
<?lua@both
another_msg = “Another message”
?>
<?lua page:print(another_msg) ?>
<?lua@client
js.window.alert(another_msg)
?>
Web development with Lua @ GeeCON 2015 @etiene_d
Example!
Web development with Lua @ GeeCON 2015 @etiene_d
Example!
local user = {}
local v = require “valua” -- validation module
user.attributes = {
{ id = “safe” },
{ name = v:new().not_empty() }
}
user.db = {
key = ‘id’,
table = ‘users’
}
user.relations = {
posts = { -- u.posts
relation = “HAS_MANY”, model = “post”, attribute = “author_id”
}
}
return user
Web development with Lua @ GeeCON 2015 @etiene_d
Example!
-- /controllers/site.lua
local site = {}
function site.index(page)
local User = sailor.model(‘user’)
local u = User:new()
u.name = ‘Arnold’
local msg
if u:save() then
msg = ‘Success’
else
msg = table.unpack(u.errors)
end
local users = User:find_all()
page:render(‘index’, { msg = msg, users = users } )
end
return site
Web development with Lua @ GeeCON 2015 @etiene_d
sailorproject.org
github.com/Etiene/sailor
dalcol@etiene.net
@etiene_d
Example!
Web development with Lua @ GeeCON 2015 @etiene_d
sailorproject.org
github.com/Etiene/sailor
dalcol@etiene.net
@etiene_d

Web development with Lua and Sailor @ GeeCon 2015

  • 1.
    Web development withLua Programming Language Introducing Sailor, a web MVC framework in Lua Etiene Dalcol @etiene_d
  • 2.
  • 3.
  • 4.
  • 5.
    Google Summer ofCode LabLua Web development with Lua @ GeeCON 2015 @etiene_d
  • 6.
    Web development withLua @ GeeCON 2015 @etiene_d
  • 7.
    Advantages Web development withLua @ GeeCON 2015 @etiene_d
  • 8.
    Web development withLua @ GeeCON 2015 @etiene_d
  • 9.
    better reasons • Itlooks cool (I heard you could make games with it) Web development with Lua @ GeeCON 2015 @etiene_d
  • 10.
    better reasons • Itlooks cool (I heard you could make games with it) • It’s made in my home country (In my university to be more precise) Web development with Lua @ GeeCON 2015 @etiene_d
  • 11.
    better reasons • Itlooks cool (I heard you could make games with it) • It’s made in my home country (In my university to be more precise) • It’s easy to learn Web development with Lua @ GeeCON 2015 @etiene_d
  • 12.
    ? ? ? ? ? ?Web development withLua @ GeeCON 2015 @etiene_d
  • 13.
    Lua on theweb • Early stage • cgilua ~ 1995 • Kepler Project ~ 2003 Web development with Lua @ GeeCON 2015 @etiene_d
  • 14.
    “ I havemyself developed Web sites with pure C++, Java, C#, PHP, and Python. The easiest way to go was definitely Python. If the libraries existed, Lua would be not quite as easy to use as Python, but probably quite a bit more efficient; I think it would become my first choice... if the libraries existed.” Michael Gogins “ Recently there was some discussion about mod_lua on the Apache developers mailing list. I mentioned there that I feel Lua could replace PHP as the number one web scripting language if mod_lua were stable (i.e. not still in beta) and it were implemented well (not making some of PHP's mistakes such as putting everything in the global scope with no consistent naming or parameter schemes). I've wanted to use Lua for all the things I currently use PHP for ever since I discovered it.” Rena Web development with Lua @ GeeCON 2015 @etiene_d
  • 15.
    Web development withLua @ GeeCON 2015 @etiene_d
  • 16.
    Web development withLua @ GeeCON 2015 @etiene_d
  • 17.
    Web development withLua @etiene_d
  • 18.
    Web development withLua @ GeeCON 2015 @etiene_d
  • 19.
    Web development withLua @ GeeCON 2015 @etiene_d
  • 20.
    Why? Web development withLua @ GeeCON 2015 @etiene_d
  • 21.
    Web development withLua @ GeeCON 2015 @etiene_d
  • 22.
    Servers • Apache: mod_lua •Nginx: OpenResty Web development with Lua @ GeeCON 2015 @etiene_d
  • 23.
    Servers Web development withLua @ GeeCON 2015 @etiene_d • Apache: mod_lua • Nginx: OpenResty
  • 24.
    Servers • Apache: mod_lua •Nginx: OpenResty • Xavante • Others Web development with Lua @ GeeCON 2015 @etiene_d
  • 25.
    Frameworks • Orbit (2007) Leastknown No significant updates since 2010 MVC Web development with Lua @ GeeCON 2015 @etiene_d
  • 26.
    Frameworks • Orbit (2007) Leastknown No significant updates since 2010 MVC • Luvit (2011) Most popular Intense development node.js port 2-4x faster Web development with Lua @ GeeCON 2015 @etiene_d
  • 27.
    Frameworks • Lapis (2012) Intensedevelopment Moonscript and Lua Very well documented Templater OpenResty only Not MVC Web development with Lua @ GeeCON 2015 @etiene_d
  • 28.
    Frameworks • Lapis (2012) Intensedevelopment Moonscript and Lua Very well documented Templater OpenResty only Not MVC • Others Complicated, abandoned, poorly documented, license issues or I never heard about it... Web development with Lua @ GeeCON 2015 @etiene_d
  • 29.
    Sailor! Web development withLua @ GeeCON 2015 @etiene_d
  • 30.
    Sailor! Web development withLua @ GeeCON 2015 @etiene_d
  • 31.
    Sailor! Web development withLua @ GeeCON 2015 @etiene_d
  • 32.
  • 33.
    What exactly isSailor? • It’s an MVC web framework • Completely written in Lua • Compatible with Apache (mod_lua), Nginx (OpenResty), Mongoose, Xavante and Lwan • Compatible with Linux, Windows and Mac • Compatible with different databases • MIT License • Pre alpha v0.2 (Mars) • 0.3 (Jupiter) will be released TODAY! Web development with Lua @ GeeCON 2015 @etiene_d
  • 34.
    Web development withLua @ GeeCON 2015 @etiene_d
  • 35.
    What (else) iscool about Sailor? • Routing and friendly URLs • Session, cookies, include, redirect… • Lua Pages parsing • Mail sending • Simple Object Relational-Mapping • Validation (valua) • Basic login and authentication modules • Form generation • Themes (Bootstrap integration out of the box) • App generator (Linux and Mac only) • Model and CRUD generator Web development with Lua @ GeeCON 2015 @etiene_d
  • 36.
    • Routing andfriendly URLs • Session, cookies, include, redirect… • Lua Pages parsing • Mail sending • Simple Object Relational-Mapping • Validation (valua) • Basic login and authentication modules • Form generation • Themes (Bootstrap integration out of the box) • App generator (Linux and Mac only) • Model and CRUD generator • Lua at client What (else) is cool about Sailor? Web development with Lua @ GeeCON 2015 @etiene_d
  • 37.
    Not so greatthings • It’s still in early development • Things are changing fast • It lacks features • Documentation Web development with Lua @ GeeCON 2015 @etiene_d
  • 38.
    How to getSailor! $ luarocks install sailor $ sailor_create ‘My App’ /var/www $ cd /var/www/my_app $ lua start-server.lua Web development with Lua @ GeeCON 2015 @etiene_d
  • 39.
    Web development withLua @ GeeCON 2015 @etiene_d
  • 40.
    How to getSailor! $ luarocks install sailor $ sailor_create ‘My App’ /var/www $ cd /var/www/my_app $ lua start-server.lua $ luarocks install luasql-mysqlOptional Web development with Lua @ GeeCON 2015 @etiene_d
  • 41.
  • 42.
    Example! -- /controllers/site.lua local site= {} function site.index(page) local msg = “Hello World” page:render(‘index’, { msg = msg } ) end function site.notindex(page) page:write(“I’m different!”) end return site Web development with Lua @ GeeCON 2015 @etiene_d
  • 43.
    Example! <!-- /views/site/index.lp --> <p> Amessage from the server: <?lua page:print(msg) ?> <br/> The message again: <%= msg %> <!-- same thing as above —> </p> Web development with Lua @ GeeCON 2015 @etiene_d
  • 44.
    Example! Web development withLua @ GeeCON 2015 @etiene_d
  • 45.
    Example! <?lua@server -- Codehere runs on the server ?> <?lua -- Same as above ?> <?lua@client -- Runs at the client ?> <?lua@both -- Runs at the server and the client ?> <?lua@both another_msg = “Another message” ?> <?lua page:print(another_msg) ?> <?lua@client js.window.alert(another_msg) ?> Web development with Lua @ GeeCON 2015 @etiene_d
  • 46.
    Example! Web development withLua @ GeeCON 2015 @etiene_d
  • 47.
    Example! local user ={} local v = require “valua” -- validation module user.attributes = { { id = “safe” }, { name = v:new().not_empty() } } user.db = { key = ‘id’, table = ‘users’ } user.relations = { posts = { -- u.posts relation = “HAS_MANY”, model = “post”, attribute = “author_id” } } return user Web development with Lua @ GeeCON 2015 @etiene_d
  • 48.
    Example! -- /controllers/site.lua local site= {} function site.index(page) local User = sailor.model(‘user’) local u = User:new() u.name = ‘Arnold’ local msg if u:save() then msg = ‘Success’ else msg = table.unpack(u.errors) end local users = User:find_all() page:render(‘index’, { msg = msg, users = users } ) end return site Web development with Lua @ GeeCON 2015 @etiene_d
  • 49.
  • 50.
    Example! Web development withLua @ GeeCON 2015 @etiene_d
  • 51.