8. Appendix

8.1. Workshop media

A media is provided which contains all you need to do the Haka workshop. You can download it from our web-site in the section Resources.

This media contains a full bootable live system that contains all dependencies of Haka (usable in a virtual machine (VirtualBox for instance) or directly as a bootable USB or CD.

8.1.1. Tips Default user/password

The default user of the live system is user and password live. Changing keyboard mapping

On the console:

$ sudo dpkg-reconfigure keyboard-configuration
$ sudo service keyboard-setup restart

Inside X11:

$ setxkbmap fr

8.2. Lua

Lua is a simple, lightweight and powerful language. It is used inside Haka to define configurations.

The full documentation is available at http://www.lua.org/.

Some basic tutorial to introduce Lua are also available at http://lua-users.org/wiki/TutorialDirectory.

You can do some tests with the lua interpreter :

$ lua
Lua 5.2.1  Copyright (C) 1994-2012 Lua.org, PUC-Rio

The following is aimed at giving a quick overview of Lua language.


Lua one-line comments are done with a --:

-- This is a comment

8.2.2. Variables

Lua variables are global except if they are preceded with local keyword. It is possible to declare it anywhere.

local mylocalvar = "foo"
myglobalvar = "bar"


It is strongly discouraged to use global variables.

8.2.3. Types in Lua Basic types

Lua define the following basic types:

  • nil - represent a nil value. It is also a keyword.
  • boolean - represent a boolean value. Can be true or false.
  • number - represent a number. Can be either an integer or a floating point number.
  • string - represent a character string.
  • table - represent a table of object.
  • function - represent a function.
  • userdata - a complex type used to map C data. String

Lua allow to easily concatenate string with the .. keyword.

foo = "foo"
bar = "bar"
print(foo.." : "..bar)

To format a string, the Lua library string provides an utility function to do this.

print(string.format("%s: %d", "foo", 42) Tables

As tables are used almost everywhere in Lua (and obviously in haka) you should know a few things about it. It can be used to represent an array or an object.

Lua table declaration is made with {}.

When used as an array, Lua table index starts at 1.

mytable = { "foo" }

Getting a inexistent element of a table return nil. It is then not an error to access an element not present.

mytable = { "foo" }

Setting an element in a table to nil simply remove it from the table.

mytable = { "foo", "bar" }
mytable[1] = nil


Lua does not reorder the table when an element is removed from it. To do this, check the Lua library table.

Lua tables can be used as a map. Namely you can index element of a table with any type of value.

Declaration of such element are done with a simple = in declaration or by adding it a posteriori:

mytable = { foo = "myfoostring" }
mytable.bar = "mybarstring"

Access to this element can be done with the usual [] or directly with a ..



Don’t forget that accessing an inexistent element of a table return nil. Even for a table used as a map.

It is possible to mix indexed table and mapped table.

mytable = { "foo" }
mytable.bar = "bar"


Lua provide two iterator function to loop on table.

First one is called ipairs() and it will loop over indexed value of the table.

Second one is called pairs() and it will loop over every value of the table.

See also

for loops for more information on how to use pairs() and ipairs().

8.2.4. Boolean logic

Lua offers the usual boolean operators:

  • and
  • or
  • not


In Lua, everything is true except nil and false. For instance 0 is true.

8.2.5. Control flow if-then-(else)

Lua if-then-(else) statement looks like:

if condition then
    -- [...]
    -- [...]


It is not required to wrap conditions inside parenthesis. for loops

Lua for loop statement looks like:

for i = first,last,delta do
    -- [...]


delta may be negative, allowing the for loop to count down or up.

Lua have a for-in loop statement:

for _, element in pairs(mytable) do
    -- [...]

A for-in statement use the special in keyword followed by a call to one of pairs() or ipairs() functions. Both return two values: index, value.


Lua recommends the use of _ for unused variable while and repeat-until loops

Lua have a while loop statement:

while condition do
    -- [...]

Lua provide an opposite loop statement called repeat-until:

    -- [...]
until condition

8.2.6. Functions

Lua functions are declared with the function keyword.

function myfunc()
    -- [...]

Lua function can return multiple values.

function myfunc()
    return true, 1, "foo"

ok, count, bar = myfunc()

There is not error when calling a function with an incorrect number of arguments. The extra arguments are not used and the missing one are set to nil.

function myfunc(a, b, c)
    print(a, b, c)

myfunc(10) -- b and c will be equal to nil

Function are first-class value in Lua. This means that they can be used exactly like a number for instance. As an example, it is possible to return a function from a function.

function myfunc(a)
    return function ()