SlideShare a Scribd company logo
1 of 62
Download to read offline
Get started with
Lua programming


Etiene Dalcol
@etiene_d
@etiene_dTopConf Tallinn 2015
@etiene_d
@etiene_dTopConf Tallinn 2015
Sailor!
An MVC web framework in Lua

sailorproject.org
@etiene_dTopConf Tallinn 2015
Lua Ladies

A female Lua user group

lualadies.org
@etiene_dTopConf Tallinn 2015
Google Summer of Code
LabLua
@etiene_dTopConf Tallinn 2015
What’s Lua
Why Lua
Key Concepts
Going further
@etiene_dTopConf Tallinn 2015
@etiene_dTopConf Tallinn 2015
• Script Language
• Duck-typed
• Multi-paradigm
• procedural, OO, functional
• Garbage collection
• Coroutines
• First-class functions
• Lexical scoping
• Proper tail calls
• MIT License
What is Lua?
@etiene_dTopConf Tallinn 2015
Why Lua?
Powerful.
@etiene_dTopConf Tallinn 2015
Why Lua?
Size
(docs included)
First-class functions

+
Lexical scoping
+
Metatables
Native C API
276 Kb
Object Orientation
Ada, Fortran, Java,
Smalltalk, C#, Perl,
Ruby etc.
+
@etiene_dTopConf Tallinn 2015
Simple.Powerful.
Why Lua?
@etiene_dTopConf Tallinn 2015
_G
_VERSION
assert
collectgarbage
dofile
error
getmetatable
ipairs
load
loadfile
next
pairs
pcall
print
rawequal
rawget
rawlen
rawset
require
select
setmetatable
tonumber
tostring
type
xpcall
bit32.arshift
bit32.band
bit32.bnot
bit32.bor
bit32.btest
bit32.bxor
bit32.extract
bit32.lrotate
bit32.lshift
bit32.replace
bit32.rrotate
bit32.rshift
coroutine.create
coroutine.resume
coroutine.running
coroutine.status
coroutine.wrap
coroutine.yield
debug.debug
debug.getuservalue
debug.gethook
debug.getinfo
debug.getlocal
debug.getmetatable
debug.getregistry
debug.getupvalue
debug.setuservalue
debug.sethook
debug.setlocal
debug.setmetatable
debug.setupvalue
debug.traceback
debug.upvalueid
debug.upvaluejoin
io.close
io.flush
io.input
io.lines
io.open
io.output
io.popen
io.read
io.stderr
io.stdin
io.stdout
io.tmpfile
io.type
io.write
file:close
file:flush
file:lines
file:read
file:seek
file:setvbuf
file:write
math.abs
math.acos
math.asin
math.atan
math.atan2
math.ceil
math.cos
math.cosh
math.deg
math.exp
math.floor
math.fmod
math.frexp
math.huge
math.ldexp
math.log
math.max
math.min
math.modf
math.pi
math.pow
math.rad
math.random
math.randomseed
math.sin
math.sinh
math.sqrt
math.tan
math.tanh
os.clock
os.date
os.difftime
os.execute
os.exit
os.getenv
os.remove
os.rename
os.setlocale
os.time
os.tmpname
package
package.config
package.cpath
package.loaded
package.loadlib
package.path
package.preload
package.searchers
package.searchpath
string.byte
string.char
string.dump
string.find
string.format
string.gmatch
string.gsub
string.len
string.lower
string.match
string.rep
string.reverse
string.sub
string.upper
table.concat
table.insert
table.pack
table.remove
table.sort
table.unpack
@etiene_dTopConf Tallinn 2015
TopConf Tallinn 2015 @etiene_d
"Since Lua itself is so
simple, it tends to
encourage you to solve
problems simply."
Ragnar Svensson - Lead Developer at King
(Lua Workshop Oct 15 2015)
@etiene_dTopConf Tallinn 2015
Fast.Simple.Powerful.
Why Lua?
@etiene_dTopConf Tallinn 2015
http://www.humbedooh.com/presentations/ACNA%20-%20mod_lua.odp Introducing mod_lua by Daniel Gruno
@etiene_dTopConf Tallinn 2015
My Reasons
• It looks cool
(I heard you could make games with it)
Better
@etiene_dTopConf Tallinn 2015
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)
@etiene_dTopConf Tallinn 2015
• 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
Better Reasons
@etiene_dTopConf Tallinn 2015
• The index starts at 1
• There’s no continue
• The non-equality operator is ~=
• null is nil
• Comments are - -
• Only nil and false are equivalent to false
• Functions can genuinely return multiple values
• Variables are global by default
• Pattern matching is not regular expression
• The concatenation operator is ..
What’s different
@etiene_dTopConf Tallinn 2015
@etiene_dTopConf Tallinn 2015
• The index starts at 1
• There’s no continue
• The non-equality operator is ~=
• null is nil
• Comments are - -
• Only nil and false are equivalent to false
• Functions can genuinely return multiple values
• Variables are global by default
• Pattern matching is not regular expression
• The concatenation operator is ..
What’s different
@etiene_dTopConf Tallinn 2015
Quick idioms
• a, b = b, a
• There’s no ternary operator but you can 

return x==1 and “yes” or “no”
• The access to local variables is faster than global
local match = string.match
@etiene_dTopConf Tallinn 2015
Using Lua: three approaches
Embedded Scripting General-purpose
@etiene_dTopConf Tallinn 2015
Getting Lua
• lua.org > download
• OS package manager
• apt-get install lua
• brew install lua
LuaRocks
• luarocks.org > install
• OS package manager
• apt-get install luarocks
@etiene_dTopConf Tallinn 2015
Key Concepts
@etiene_dTopConf Tallinn 2015


• The only way to structure data
• Array, dictionary, object, list, queue, module…
• Any value can be a key, except nil and nan
• Behind the scenes: array or hash table
• Passed as reference
• The length operator: #
• pairs(t) x ipairs(t)
Tables
@etiene_dTopConf Tallinn 2015
Tables
Header
key value
“x” 9.2
nil
value
100
200
300
nil
@etiene_dTopConf Tallinn 2015


• The only way to structure data
• Array, dictionary, object, list, queue, module…
• Any value can be a key, except nil
• Behind the scenes: array or hash table
• Passed as reference
• The length operator: #
• pairs(t) x ipairs(t)
Tables
@etiene_dTopConf Tallinn 2015
Tables
local a = { 1, 3, 5, 7, 9}
local sum = 0
for i=1,#a do
sum = sum + a[i]
end
print(sum) -- 25
@etiene_dTopConf Tallinn 2015
local a = { 1, 3, 5, 7, 9}
local sum = 0
for i=1,#a do
sum = sum + a[i]
end
print(sum) -- 25
Tables
local a = {}
a[1] = 1
a[2] = 3 -- etc
local sum = 0
for _, x in ipairs(a) do
sum = sum + x
end
print(sum)
@etiene_dTopConf Tallinn 2015
local a = { 1, 3, 5, 7, 9}
local sum = 0
for i=1,#a do
sum = sum + a[i]
end
print(sum) -- 25
local a, x = 10, “y”
local point = { x = a, y = 25}
print(point[“x”], point[“y”]) -- 10 25
print(point[x], point[y]) -- 25 nil
print(point.x, point.y) -- 10 25
Tables
@etiene_dTopConf Tallinn 2015
local a = { 1, 3, 5, 7, 9}
local sum = 0
for i=1,#a do
sum = sum + a[i]
end
print(sum) -- 25
local a, x = 10, “y”
local point = { x = a, y = 25}
print(point[“x”], point[“y”]) -- 10 25
print(point[x], point[y]) -- 25 nil
print(point.x, point.y) -- 10 25
-- sets and multisets
local ips = { “5.101.112.0” = true, “213.35.128.0” = true }
local connections = { “5.101.112.0” = 5, “213.35.128.0” = 2 }
Tables
@etiene_dTopConf Tallinn 2015
-- Cipher module
--[[ Based on algorithms/caesar_cipher.lua
by Roland Yonaba ]]
local cipher = {}
local function ascii_base(s)
return s:lower() == s and ('a'):byte() or ('A'):byte()
end
function cipher.caesar( str, key )
return str:gsub('%a', function(s)
local base = ascii_base(s)
return string.char(((s:byte() - base + key) % 26) + base)
end)
end
return cipher
Modules
@etiene_dTopConf Tallinn 2015
-- Cipher module
--[[ Based on algorithms/caesar_cipher.lua
by Roland Yonaba ]]
local cipher = {}
local function ascii_base(s)
return s:lower() == s and ('a'):byte() or ('A'):byte()
end
function cipher.caesar( str, key )
return str:gsub('%a', function(s)
local base = ascii_base(s)
return string.char(((s:byte() - base + key) % 26) + base)
end)
end
return cipher
Modules
@etiene_dTopConf Tallinn 2015
-- Cipher module
--[[ Based on algorithms/caesar_cipher.lua
by Roland Yonaba ]]
local cipher = {}
local function ascii_base(s)
return s:lower() == s and ('a'):byte() or ('A'):byte()
end
function cipher.caesar( str, key ) --cipher.caesar = function(str,key)
return str:gsub('%a', function(s)
local base = ascii_base(s)
return string.char(((s:byte() - base + key) % 26) + base)
end)
end
return cipher
Modules
public
@etiene_dTopConf Tallinn 2015
-- Cipher module
--[[ Based on algorithms/caesar_cipher.lua
by Roland Yonaba ]]
local cipher = {}
local function ascii_base(s)
return s:lower() == s and ('a'):byte() or ('A'):byte()
end
function cipher.caesar( str, key )
return str:gsub('%a', function(s)
local base = ascii_base(s)
return string.char(((s:byte() - base + key) % 26) + base)
end)
end
return cipher
Modules
private
@etiene_dTopConf Tallinn 2015
-- Cipher module
--[[ Based on algorithms/caesar_cipher.lua
by Roland Yonaba ]]
local cipher = {}
local function ascii_base(s)
return s:lower() == s and ('a'):byte() or ('A'):byte()
end
function cipher.caesar( str, key )
return str:gsub('%a', function(s)
local base = ascii_base(s)
return string.char(((s:byte() - base + key) % 26) + base)
end)
end
return cipher
Modules
local cipher = require “cipher”
print(cipher.caesar(“test”,3) -- whvw
@etiene_dTopConf Tallinn 2015


• Overload operators
• Override built-in functions such as tostring
• Treat missing fields or intercept new field creation
• Call table as a function
• Metamethods:

__add, __sub, __mul, __div, __mod, __pow, __unm,
__concat, __len, __eq, __lt, __le, __index, __newindex,
__call, __tostring, __ipairs, __pairs, __gc
Metatables
@etiene_dTopConf Tallinn 2015
local mt = {}
local function new(r, i)
return setmetatable({ real = r or 0, im = i or 0}, mt)
end
local function is_complex(v)
return getmetatable(v) == mt
end
local function add(c1, c2)
if not is_complex(c1) then
return new(c2.real + c1, c2.im)
elseif not is_complex(c2) then
return new(c1.real + c2, c1.im)
end
return new(c1.real + c2.real, c1.im + c2.im)
end
local function tos(c)
return tostring(c.real) .. "+".. tostring(c.im) .. "i"
end
mt.__add = add
mt.__tostring = tos
Complex numbers
@etiene_dTopConf Tallinn 2015
local mt = {}
local function new(r, i)
return setmetatable({ real = r or 0, im = i or 0}, mt)
end
local function is_complex(v)
return getmetatable(v) == mt
end
local function add(c1, c2)
if not is_complex(c1) then
return new(c2.real + c1, c2.im)
elseif not is_complex(c2) then
return new(c1.real + c2, c1.im)
end
return new(c1.real + c2.real, c1.im + c2.im)
end
local function tos(c)
return tostring(c.real) .. "+".. tostring(c.im) .. "i"
end
mt.__add = add
mt.__tostring = tos
Complex numbers
@etiene_dTopConf Tallinn 2015
local mt = {}
local function new(r, i)
return setmetatable({ real = r or 0, im = i or 0}, mt)
end
local function is_complex(v)
return getmetatable(v) == mt
end
local function add(c1, c2)
if not is_complex(c1) then
return new(c2.real + c1, c2.im)
elseif not is_complex(c2) then
return new(c1.real + c2, c1.im)
end
return new(c1.real + c2.real, c1.im + c2.im)
end
local function tos(c)
return tostring(c.real) .. "+".. tostring(c.im) .. "i"
end
mt.__add = add
mt.__tostring = tos
Complex numbers
@etiene_dTopConf Tallinn 2015
local mt = {}
local function new(r, i)
return setmetatable({ real = r or 0, im = i or 0}, mt)
end
local function is_complex(v)
return getmetatable(v) == mt
end
local function add(c1, c2)
if not is_complex(c1) then
return new(c2.real + c1, c2.im)
elseif not is_complex(c2) then
return new(c1.real + c2, c1.im)
end
return new(c1.real + c2.real, c1.im + c2.im)
end
local function tos(c)
return tostring(c.real) .. "+".. tostring(c.im) .. "i"
end
mt.__add = add
mt.__tostring = tos
Complex numbers
@etiene_dTopConf Tallinn 2015
local mt = {}
local function new(r, i)
return setmetatable({ real = r or 0, im = i or 0}, mt)
end
local function is_complex(v)
return getmetatable(v) == mt
end
local function add(c1, c2)
if not is_complex(c1) then
return new(c2.real + c1, c2.im)
elseif not is_complex(c2) then
return new(c1.real + c2, c1.im)
end
return new(c1.real + c2.real, c1.im + c2.im)
end
local function tos(c)
return tostring(c.real) .. "+".. tostring(c.im) .. "i"
end
mt.__add = add
mt.__tostring = tos
Complex numbers
@etiene_dTopConf Tallinn 2015
local mt = {}
local function new(r, i)
return setmetatable({ real = r or 0, im = i or 0}, mt)
end
local function is_complex(v)
return getmetatable(v) == mt
end
local function add(c1, c2)
if not is_complex(c1) then
return new(c2.real + c1, c2.im)
elseif not is_complex(c2) then
return new(c1.real + c2, c1.im)
end
return new(c1.real + c2.real, c1.im + c2.im)
end
local function tos(c)
return tostring(c.real) .. "+".. tostring(c.im) .. "i"
end
mt.__add = add
mt.__tostring = tos
>local c1 = new(2,3)

>print( c1 + 5 )

7+3i
Complex numbers
@etiene_dTopConf Tallinn 2015
local square = { x = 10, y = 20, side = 25 }
function square.move(obj, dx, dy)
obj.x = obj.x + dx
obj.y = obj.y + dy
end
function square:area()
return self.side ^ 2
end
print(square:area()) -- 625
Objects
@etiene_dTopConf Tallinn 2015
local square = { x = 10, y = 20, side = 25 }
function square.move(obj, dx, dy)
obj.x = obj.x + dx
obj.y = obj.y + dy
end
function square:area()
return self.side ^ 2
end
print(square:area()) -- 625
Objects
@etiene_dTopConf Tallinn 2015
local square = { x = 10, y = 20, side = 25 }
function square.move(obj, dx, dy)
obj.x = obj.x + dx
obj.y = obj.y + dy
end
function square:area()
return self.side ^ 2
end
print(square:area()) -- 625
Objects
@etiene_dTopConf Tallinn 2015
local square = { x = 10, y = 20, side = 25 }
function square.move(obj, dx, dy)
obj.x = obj.x + dx
obj.y = obj.y + dy
end
function square:area()
return self.side ^ 2
end
print(square:area()) -- 625
Objects
@etiene_dTopConf Tallinn 2015
local square = { x = 10, y = 20, side = 25 }
function square.move(obj, dx, dy)
obj.x = obj.x + dx
obj.y = obj.y + dy
end
function square:area()
return self.side ^ 2
end
print(square:area()) -- 625
local square2 = (x = 30, y = 5, side = 10}
print(square.area(square2)) -- 100
Objects
@etiene_dTopConf Tallinn 2015
local square = { x = 10, y = 20, side = 25 }
function square.move(obj, dx, dy)
obj.x = obj.x + dx
obj.y = obj.y + dy
end
function square:area()
return self.side ^ 2
end
print(square:area()) -- 625
local square2 = (x = 30, y = 5, side = 10}
print(square.area(square2)) -- 100
Objects
@etiene_dTopConf Tallinn 2015
local Square = {}
function Square:new(x, y, side)
local o = { x = x, y = y, side = side}
setmetatable(o, self)
self.__index = self
return o
end
function Square:move(dx, dy)
self.x = self.x + dx
self.y = self.y + dy
end
function Square:area()
return self.side ^ 2
end
return Square
Object Orientation
@etiene_dTopConf Tallinn 2015
local Square = {}
function Square:new(x, y, side)
local o = { x = x, y = y, side = side}
setmetatable(o, self)
self.__index = self
return o
end
function Square:move(dx, dy)
self.x = self.x + dx
self.y = self.y + dy
end
function Square:area()
return self.side ^ 2
end
return Square
Object Orientation
@etiene_dTopConf Tallinn 2015
local Square = {}
function Square:new(x, y, side)
local o = { x = x, y = y, side = side}
setmetatable(o, self)
self.__index = self
return o
end
function Square:move(dx, dy)
self.x = self.x + dx
self.y = self.y + dy
end
function Square:area()
return self.side ^ 2
end
return Square
Object Orientation
@etiene_dTopConf Tallinn 2015
local Square = {}
function Square:new(x, y, side)
local o = { x = x, y = y, side = side}
setmetatable(o, self)
self.__index = self
return o
end
function Square:move(dx, dy)
self.x = self.x + dx
self.y = self.y + dy
end
function Square:area()
return self.side ^ 2
end
return Square
Object Orientation
@etiene_dTopConf Tallinn 2015
local Square = {}
function Square:new(x, y, side)
local o = { x = x, y = y, side = side}
setmetatable(o, self)
self.__index = self
return o
end
function Square:move(dx, dy)
self.x = self.x + dx
self.y = self.y + dy
end
function Square:area()
return self.side ^ 2
end
return Square
local Square = require “square”
local s1 = Square:new(10,20,25)
local s2 = Square:new(30,5,10)
print(s1:area()) -- 625
print(s2:area()) -- 100
Object Orientation
@etiene_dTopConf Tallinn 2015
Going further
@etiene_dTopConf Tallinn 2015
• Books
• Programming in Lua: http://www.lua.org/pil/
• Lua Programming Gems: http://www.lua.org/gems/
• Tutorials
• Lua Style Guide: 

http://lua-users.org/wiki/LuaStyleGuide
• Lua Missions: https://github.com/kikito/lua_missions

• Misc
• CodeCombat: https://codecombat.com
• Community
• Lua mail list: http://www.lua.org/lua-l.html
Resources
@etiene_dTopConf Tallinn 2015


• Hardware
• eLua: http://www.eluaproject.net/
• nodemcu: http://nodemcu.com

• Math and scientific computing
• SciLua http://www.scilua.org/
• Torch: http://torch.ch
• GSL Shell: http://www.nongnu.org/gsl-shell/
Cool tools in Lua
@etiene_dTopConf Tallinn 2015


• Game development
• Love2D: https://love2d.org/
• Defold: http://www.defold.com/
• Cocos2d: http://www.cocos2d-x.org/
• Corona: https://coronalabs.com

• Web development
• OpenResty http://openresty.org
• Lapis: http://leafo.net/lapis/
• Luvit: https://luvit.io/
• Sailor: http://sailorproject.org/
• Moonshine: http://moonshinejs.org/
Cool tools in Lua
@etiene_dTopConf Tallinn 2015
• IDE
• ZeroBrane Studio: http://studio.zerobrane.com/

• Testing
• Busted: http://olivinelabs.com/busted/
• Package management
• LuaRocks http://luarocks.org

• Misc
• Moonscript: http://moonscript.org/
• Awesome Lua:

https://github.com/LewisJEllis/awesome-lua
Cool tools in Lua
Thank you!
etiene.net

github.com/Etiene/
dalcol@etiene.net
@etiene_d

More Related Content

What's hot

Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...
Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...
Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...Thoughtworks
 
Functional Programming in JavaScript
Functional Programming in JavaScriptFunctional Programming in JavaScript
Functional Programming in JavaScriptTroy Miles
 
Scala.js for large and complex frontend apps
Scala.js for large and complex frontend appsScala.js for large and complex frontend apps
Scala.js for large and complex frontend appsOtto Chrons
 
A Brief Intro to Scala
A Brief Intro to ScalaA Brief Intro to Scala
A Brief Intro to ScalaTim Underwood
 
Node Boot Camp
Node Boot CampNode Boot Camp
Node Boot CampTroy Miles
 
Treasure Data Summer Internship 2016
Treasure Data Summer Internship 2016Treasure Data Summer Internship 2016
Treasure Data Summer Internship 2016Yuta Iwama
 
The Why and How of Scala at Twitter
The Why and How of Scala at TwitterThe Why and How of Scala at Twitter
The Why and How of Scala at TwitterAlex Payne
 
3 things you must know to think reactive - Geecon Kraków 2015
3 things you must know to think reactive - Geecon Kraków 20153 things you must know to think reactive - Geecon Kraków 2015
3 things you must know to think reactive - Geecon Kraków 2015Manuel Bernhardt
 
Exploring Clojurescript
Exploring ClojurescriptExploring Clojurescript
Exploring ClojurescriptLuke Donnet
 
Solr Indexing and Analysis Tricks
Solr Indexing and Analysis TricksSolr Indexing and Analysis Tricks
Solr Indexing and Analysis TricksErik Hatcher
 
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun..."ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...Julia Cherniak
 
Introduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaIntroduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaFlorent Pillet
 
Cassandra UDF and Materialized Views
Cassandra UDF and Materialized ViewsCassandra UDF and Materialized Views
Cassandra UDF and Materialized ViewsDuyhai Doan
 
Java to Scala: Why & How
Java to Scala: Why & HowJava to Scala: Why & How
Java to Scala: Why & HowGraham Tackley
 

What's hot (20)

Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...
Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...
Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...
 
2012: ql.io and Node.js
2012: ql.io and Node.js2012: ql.io and Node.js
2012: ql.io and Node.js
 
Functional Programming in JavaScript
Functional Programming in JavaScriptFunctional Programming in JavaScript
Functional Programming in JavaScript
 
Scala.js for large and complex frontend apps
Scala.js for large and complex frontend appsScala.js for large and complex frontend apps
Scala.js for large and complex frontend apps
 
Concurrecny inf sharp
Concurrecny inf sharpConcurrecny inf sharp
Concurrecny inf sharp
 
A Brief Intro to Scala
A Brief Intro to ScalaA Brief Intro to Scala
A Brief Intro to Scala
 
PlantUML
PlantUMLPlantUML
PlantUML
 
Node Boot Camp
Node Boot CampNode Boot Camp
Node Boot Camp
 
Treasure Data Summer Internship 2016
Treasure Data Summer Internship 2016Treasure Data Summer Internship 2016
Treasure Data Summer Internship 2016
 
The Why and How of Scala at Twitter
The Why and How of Scala at TwitterThe Why and How of Scala at Twitter
The Why and How of Scala at Twitter
 
3 things you must know to think reactive - Geecon Kraków 2015
3 things you must know to think reactive - Geecon Kraków 20153 things you must know to think reactive - Geecon Kraków 2015
3 things you must know to think reactive - Geecon Kraków 2015
 
Exploring Clojurescript
Exploring ClojurescriptExploring Clojurescript
Exploring Clojurescript
 
Mini Rails Framework
Mini Rails FrameworkMini Rails Framework
Mini Rails Framework
 
Solr Indexing and Analysis Tricks
Solr Indexing and Analysis TricksSolr Indexing and Analysis Tricks
Solr Indexing and Analysis Tricks
 
XNA L01–Introduction
XNA L01–IntroductionXNA L01–Introduction
XNA L01–Introduction
 
Spark workshop
Spark workshopSpark workshop
Spark workshop
 
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun..."ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...
 
Introduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaIntroduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoa
 
Cassandra UDF and Materialized Views
Cassandra UDF and Materialized ViewsCassandra UDF and Materialized Views
Cassandra UDF and Materialized Views
 
Java to Scala: Why & How
Java to Scala: Why & HowJava to Scala: Why & How
Java to Scala: Why & How
 

Similar to Get started with Lua programming

Get started with Lua - Hackference 2016
Get started with Lua - Hackference 2016Get started with Lua - Hackference 2016
Get started with Lua - Hackference 2016Etiene Dalcol
 
Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015
Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015
Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015AboutYouGmbH
 
Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...
Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...
Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...Etiene Dalcol
 
The Road to Lambda - Mike Duigou
The Road to Lambda - Mike DuigouThe Road to Lambda - Mike Duigou
The Road to Lambda - Mike Duigoujaxconf
 
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...GeeksLab Odessa
 
Exploring SharePoint with F#
Exploring SharePoint with F#Exploring SharePoint with F#
Exploring SharePoint with F#Talbott Crowell
 
The joy of functional programming
The joy of functional programmingThe joy of functional programming
The joy of functional programmingSteve Zhang
 
Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...
Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...
Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...InfluxData
 
Swift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-CSwift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-CAlexis Gallagher
 
Introduction to coding using Python
Introduction to coding using PythonIntroduction to coding using Python
Introduction to coding using PythonDan D'Urso
 
Migrating from matlab to python
Migrating from matlab to pythonMigrating from matlab to python
Migrating from matlab to pythonActiveState
 
The Present and Future of the Web Platform
The Present and Future of the Web PlatformThe Present and Future of the Web Platform
The Present and Future of the Web PlatformC4Media
 
Refactoring @ Mindvalley: Smells, Techniques and Patterns
Refactoring @ Mindvalley: Smells, Techniques and PatternsRefactoring @ Mindvalley: Smells, Techniques and Patterns
Refactoring @ Mindvalley: Smells, Techniques and PatternsTristan Gomez
 
A Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoMatt Stine
 
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVMVoxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVMManuel Bernhardt
 

Similar to Get started with Lua programming (20)

Get started with Lua - Hackference 2016
Get started with Lua - Hackference 2016Get started with Lua - Hackference 2016
Get started with Lua - Hackference 2016
 
Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015
Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015
Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015
 
Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...
Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...
Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...
 
Return of c++
Return of c++Return of c++
Return of c++
 
The Road to Lambda - Mike Duigou
The Road to Lambda - Mike DuigouThe Road to Lambda - Mike Duigou
The Road to Lambda - Mike Duigou
 
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
 
Exploring SharePoint with F#
Exploring SharePoint with F#Exploring SharePoint with F#
Exploring SharePoint with F#
 
What the f is a monad?
What the f is a monad?What the f is a monad?
What the f is a monad?
 
Labs_20210809.pdf
Labs_20210809.pdfLabs_20210809.pdf
Labs_20210809.pdf
 
Introduction to Kotlin
Introduction to KotlinIntroduction to Kotlin
Introduction to Kotlin
 
The joy of functional programming
The joy of functional programmingThe joy of functional programming
The joy of functional programming
 
Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...
Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...
Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...
 
Swift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-CSwift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-C
 
Introduction to coding using Python
Introduction to coding using PythonIntroduction to coding using Python
Introduction to coding using Python
 
What`s New in Java 8
What`s New in Java 8What`s New in Java 8
What`s New in Java 8
 
Migrating from matlab to python
Migrating from matlab to pythonMigrating from matlab to python
Migrating from matlab to python
 
The Present and Future of the Web Platform
The Present and Future of the Web PlatformThe Present and Future of the Web Platform
The Present and Future of the Web Platform
 
Refactoring @ Mindvalley: Smells, Techniques and Patterns
Refactoring @ Mindvalley: Smells, Techniques and PatternsRefactoring @ Mindvalley: Smells, Techniques and Patterns
Refactoring @ Mindvalley: Smells, Techniques and Patterns
 
A Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to Go
 
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVMVoxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
 

More from Etiene Dalcol

Making wearables with NodeMCU - FOSDEM 2017
Making wearables with NodeMCU - FOSDEM 2017Making wearables with NodeMCU - FOSDEM 2017
Making wearables with NodeMCU - FOSDEM 2017Etiene Dalcol
 
Crescendo com Software livre e Lua
Crescendo com Software livre e LuaCrescendo com Software livre e Lua
Crescendo com Software livre e LuaEtiene Dalcol
 
Web development in Lua @ FOSDEM 2016
Web development in Lua @ FOSDEM 2016Web development in Lua @ FOSDEM 2016
Web development in Lua @ FOSDEM 2016Etiene Dalcol
 
What I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginnersWhat I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginnersEtiene Dalcol
 
Web development with Lua and Sailor @ GeeCon 2015
Web development with Lua and Sailor @ GeeCon 2015Web development with Lua and Sailor @ GeeCon 2015
Web development with Lua and Sailor @ GeeCon 2015Etiene Dalcol
 
What I learned teaching programming to ~150 young women
What I learned teaching programming to ~150 young womenWhat I learned teaching programming to ~150 young women
What I learned teaching programming to ~150 young womenEtiene Dalcol
 
Humblelotto @HackJSY
Humblelotto @HackJSYHumblelotto @HackJSY
Humblelotto @HackJSYEtiene Dalcol
 
Lua web development and Sailor @conc_at 2015
Lua web development and Sailor @conc_at 2015Lua web development and Sailor @conc_at 2015
Lua web development and Sailor @conc_at 2015Etiene Dalcol
 
Sailor - A web MVC framework in Lua by Etiene Dalcol (Lua Workshop 2014)
Sailor - A web MVC framework in Lua by Etiene Dalcol (Lua Workshop 2014)Sailor - A web MVC framework in Lua by Etiene Dalcol (Lua Workshop 2014)
Sailor - A web MVC framework in Lua by Etiene Dalcol (Lua Workshop 2014)Etiene Dalcol
 

More from Etiene Dalcol (9)

Making wearables with NodeMCU - FOSDEM 2017
Making wearables with NodeMCU - FOSDEM 2017Making wearables with NodeMCU - FOSDEM 2017
Making wearables with NodeMCU - FOSDEM 2017
 
Crescendo com Software livre e Lua
Crescendo com Software livre e LuaCrescendo com Software livre e Lua
Crescendo com Software livre e Lua
 
Web development in Lua @ FOSDEM 2016
Web development in Lua @ FOSDEM 2016Web development in Lua @ FOSDEM 2016
Web development in Lua @ FOSDEM 2016
 
What I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginnersWhat I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginners
 
Web development with Lua and Sailor @ GeeCon 2015
Web development with Lua and Sailor @ GeeCon 2015Web development with Lua and Sailor @ GeeCon 2015
Web development with Lua and Sailor @ GeeCon 2015
 
What I learned teaching programming to ~150 young women
What I learned teaching programming to ~150 young womenWhat I learned teaching programming to ~150 young women
What I learned teaching programming to ~150 young women
 
Humblelotto @HackJSY
Humblelotto @HackJSYHumblelotto @HackJSY
Humblelotto @HackJSY
 
Lua web development and Sailor @conc_at 2015
Lua web development and Sailor @conc_at 2015Lua web development and Sailor @conc_at 2015
Lua web development and Sailor @conc_at 2015
 
Sailor - A web MVC framework in Lua by Etiene Dalcol (Lua Workshop 2014)
Sailor - A web MVC framework in Lua by Etiene Dalcol (Lua Workshop 2014)Sailor - A web MVC framework in Lua by Etiene Dalcol (Lua Workshop 2014)
Sailor - A web MVC framework in Lua by Etiene Dalcol (Lua Workshop 2014)
 

Recently uploaded

Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 

Recently uploaded (20)

Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 

Get started with Lua programming