Lua Workshop 2016

October 13-14

Mashape HQ,
500-A Montgomery St.
San Francisco, California

About workshop

The Lua Workshop 2016 will be held in San Francisco on the 13th and 14th of October. This year's workshop will mark the 11 year anniversary of the Lua workshops!

As in previous workshops, the main goal of the workshop is to allow the Lua community to get together and meet in person and talk about the Lua language, its uses, and its implementation.

The spoken language of the workshop will be English.

Schedule

Day 1, October 13

09:00

Registration and badge pick-up

09:30-10:30

Roberto Ierusalimschy
Welcome to the Lua Workshop

10:30-11.00

Coffee break

11:00-11:30

Daurnimator
On the history of Lua

11:30-12:00

Justin Donaldson
The Haxe Lua target

12:00-12:30

Mitchell
Practical LPeg

12:30-14:00

Lunch

14:00-14:30

Gianpiero Napoli
Peer to Peer publish/subscribe using Lua and DDS

14:30-15:00

Lee Busby
IREP and Lua

15:00-15:30

Daogang Cao
Creating mobile app using object Lua

15:30-16:00

Coffee break

16:00-16:30

Jamie Jennings
Regex Considered Harmful: Use Rosie Pattern Language Instead

16:30-17:00

Bennett Kalafut
Mass spectrometry assay optimization using functional programming patterns in Lua

17:00

Hisham Muhammad
LuaRocks 3

17:30

Pizza, beer and Lua, courtesy of Mashape
Mashape's office

Day 2, October 14

09:30-10:30

Peter Cawley
LuaJIT: something interesting inside

10:30-11.00

Coffee break

11:00-11:30

Rajive Joshi
Working with strongly typed data models in Lua for building Industrial Internet of Things (IIoT) applications

11:30-12:00

Mitchell
API Design for Lua and C Applications

12:00-12:30

ThePhD
A Sun For the Moon - A Zero-Overhead Lua Abstraction using C++

12:30-14:00

Lunch

14:00-14:30

Leaf Corcoran
Building a large web application in Lua with Lapis: itch.io

14:30-15:00

Robert Paprocki
Lua in WAFs: An examination of Lua's use in ModSecurity and other web application firewalls

15:00-15:30

Yichun Zhang
Writing optimal Lua code for LuaJIT and OpenResty

15:30-16:00

Coffee break

16:00-16:30

Eric Wing
The history and design of LuaCocoa

16:30-17:00

Eric Wing
Tales of a Lua engine embedder thrown into the JavaScript world

17:00

Jean-Luc Jumpertz
Programming iOS in Lua: a bridge story

Workshop 2016 - abstracts (IN PROGRESS)

TBA
Roberto Ierusalimschy (PUC-Rio)

The Haxe Lua target
Justin Donaldson (Salesforce)

The Haxe Lua target brings some benefits that greatly help large, complex Lua applications. It has standard OOP, structural typedef, dynamic, and flexible macro-defined type checking, and has an especially speedy compiler. In addition, it has special support for Lua externs and idioms, and can emit code that runs universally on Lua/LuaJit, or it can enable LuaJit specific features with special compiler flags.

Practical LPeg
Mitchell

LPeg is a fantastic text processing tool. It has a number of useful applications, including the parsing of source code for syntax highlighting, defining grammars for templating engines, and much more. Come learn how to leverage LPeg in practical ways in order to solve real-world problems.

On the history of Lua
Daurnimator

LuaRocks 3
Hisham Muhammad

This talk will discuss LuaRocks 3, the upcoming major release of the Lua package manager. LuaRocks 3 will feature the first update of the rockspec file format since LuaRocks 1.0, released in 2008. I will present what is being planned for LuaRocks and its rockspec format, and take the opportunity to discuss with the community the directions we want to take the project from there on.

Peer to Peer publish/subscribe using Lua and DDS
Gianpiero Napoli (RTI)

During this talk we will explore how in RTI we used Lua to simply Publish Subscribe communication in a distributed system. Lua was first used to add scripting capability to one of our Rapid Prototyping tool, and then elevated to first class citizen scripting language to create complex pub/sub distributed systems based on the OMG standard Data Distribution Service (DDS) Data Distribution Service (DDS) is the platform for the Industrial Internet of Things (IIoT). It offers real-time, peer-to-peer, standard, data-centric publish subscribe. With RTI DDSConnector you can now exploit the power of DDS within Lua without having to deal with complex APIs. Define your data types, your data writers, data readers and desired quality of service in a XML file and simply load it in your Lua application. Your applications will effortlessly become participants in a logically shared, but decentralized peer-to-peer data-space with other applications over a LAN or WAN. DDS is an open real-time connectivity framework standard that has proven itself in industrial systems for building highly reliable systems that can be trusted without a single point of failure, and as a peer-to-peer (P2P) architecture with no message servers or brokers. If you need a connectivity framework that is fast, that can scale to hundreds of nodes, that is monitorable and robust, and if your system has to last, adapt to new technologies, work in heterogeneous environments or connect to legacy systems, DDS is the answer. If you want to do all that in Lua, DDSConnector is your answer. We will cover the basics of DDS with some practical examples and then dive in a few demos on how to use DDS in Lua through RTI DDS Prototyper.

IREP and Lua
Lee Busby (LLNL)

The Intermediate Representation (IREP) reads program input from Lua tables, and transfers the data into compiled structures whose layout is similar to the tables. The compiled structures are shareable between C/C++ and Fortran. IREP can handle most varieties of "Plain Old Data" and has mechanisms to extend it beyond POD. Structure templates are written using simple cpp(1) macros. No preprocessing nor metaprogramming is necessary. The Lua table reader is generic. No additional code beyond the structure template is normally required for IREP to read the matching Lua table. IREP uses only standard language features. Interestingly, this requires a couple of capabilities new in Fortran. Our next generation physics simulation code is embedding Lua as its configuration and steering language, and now includes IREP.

Creating mobile app using object Lua
Daogang Cao

1) ObjectOriented program using lua; 2) cross-platform lua engine (IOS & android) 3) api framework 4) demo: create mobile app using lua (for both iOS & android)

LuaJIT: something interesting inside
Peter Cawley (corsix.org)

Have you ever wondered what happens when you check out the LuaJIT sources and type "make"? Have you ever questioned how the LuaJIT interpreter implements call frames and function calls? Of course you haven't, because these sound like the dullest questions ever. However, thanks to LuaJIT being a treasure-trove of a codebase, even questions such as these turn out to have really interesting answers, and those answers deserve more time in the spotlight than they've had to date.

Regex Considered Harmful: Use Rosie Pattern Language Instead
Jamie Jennings (IBM)

Of the more than 2.5 billion Gb of data being produced daily, about 75% is unstructured, and only about 0.5% is ever analyzed. The goal of big data analytics is to fish useful insights out of the rising tide of available data -- but the first step is to parse the raw data, and the most popular tools today are built on a shaky foundation. Most tools (e.g. Perl, PCRE, ElasticSearch, Splunk, most Apache parsers) for processing unstructured text rely on regexes, extensions of regular expressions. But regexes are not easy to write, and are notoriously difficult to read and maintain. Also, regexes have surprisingly variable performance in practice. So it's best to avoid putting a regex engine in your big data pipeline. In this talk, we introduce Rosie Pattern Language, an alternative to regexes. RPL shares key concepts and notation with regexes, but RPL patterns are more powerful. RPL is designed like a programming language: composable patterns are bound to identifiers; comments and whitespace are allowed within patterns; and patterns may be grouped into modules. Such features facilitate the creation, maintenance, and sharing of patterns. Finally, RPL matching (parsing) is consistently fast, often several times faster than competing tools. Rosie Pattern Language is implemented in Lua; the RPL compiler produces expressions which are then processed at run-time by the lpeg pattern matching engine. While patterns are defined (specified) in RPL, post-match processing (including data format conversion) is done in Lua. Thus, Lua is the extension language for RPL, allowing users to add new data format conversion and validation routines. Rosie is open source, released under the MIT License, and can be found at https://github.com/jamiejennings/rosie-pattern-language.

Mass spectrometry assay optimization using functional programming patterns in Lua.
Bennett Kalafut (Thermo Fisher Scientific)

Determination of fragment ions and tuning of compound-specific ion source and ion-optical parameters is a necessary step in the development of specific and sensitive tandem mass spectrometry assays. Using embedded Lua, we have automated this optimization process for Thermo Fisher Scientific's TSQ Quantiva and TSQ Endura mass spectrometers. Treating the combination of optimizations as function composition and higher-order functions as composable iterators has allowed us to adopt programming concepts from functional languages such as map, filter, reduce, and function decorators/functionals. This has resulted in a simple and flexible design, easily extendable to accommodate new peripherals and new user options such as loop flow injection of samples. I will present this design, including what we do to remove or hide state and side-effects.

Working with strongly typed data models in Lua for building Industrial Internet of Things (IIoT) applications
Rajive Joshi (RTI)

Building IIoT systems involves integrating independently developed components using shared strongly typed data models rooted in the physics of the application domain. Data Domain Specific Language (DDSL) is a pure Lua module that makes it easy and fun to work with strongly typed data models in Lua. It was borne out of a practical need for effectively working with data types constrained by an underlying data model in the dynamically typed Lua environment. It is being used with the Data Distribution Service (DDS), the predominant open standard connectivity framework for IIoT systems integration. Like an Interface Description Language (IDL), DDSL can be used to define data models; however, unlike an IDL the data models can be defined programmatically and incrementally, thus providing the foundation for automated data model mapping and machine learning. Data model instances are kept in sync with the underlying data model---when a model is changed, all the linked instances get updated. A newly added field is automatically initialized to the correct instance specific hierarchical path leading up to that field in the data model. This can be viewed as an automatically generated index for storage, and is used, for example, to access the fields when exchanging complex data types using DDS. DDSL has been applied to create data generators for automated testing; it can also be applied for specifying range constraints and units, for automated checking of data instance fields, and feeding templating engines. DDSL can also export the data models to IDL, or import data models defined in XML. This talk will provide the rationale behind DDSL, an introduction to data modeling with DDSL, and show a working demonstration of how it is being used to build data-centric distributed IIoT applications with Lua and DDS.

API Design for Lua and C Applications
Mitchell

Lua is well known for its unique abilities as an embedded scripting language. Not only can developers extend their C applications with Lua, but with the proper interface, users can too! Designing APIs for both internal and external use can be tricky and require many iterations to "get it right". Over the last 9 years, the Textadept text editor's Lua and C APIs have benefited from relentless refactorings and reworkings, and users can extend the application more easily and intuitively than ever before. Come and learn about how you can enable users to extend your C applications with Lua, as we explore many of the lessons learned about API design from Textadept's development.

A Sun For the Moon - A Zero-Overhead Lua Abstraction using C++
ThePhD

Oftentimes, programmers wish to integrate Lua into an existing application, mainly into C or C++ codebases. For this, they use the C API. Because of its low-level stack-based semantics, individuals often try to wrap it up into useful primitives or small wrapper libraries. Sometimes, they do this well: in other cases, it is not executed nearly as nicely. This presentation will talk about what it takes to wrap the Lua C API up in a C++ interface that's easy to use, using the sol2 library as an example. It will discuss the implementation choices and potential pitfalls in both the context of C and C++ using existing libraries (Luabind, Selene, etc.) and highlight how to properly use the Lua 5.1, 5.2 and 5.3 C API for both performance and ease of use.

Building a large web application in Lua with Lapis: itch.io
Leaf Corcoran

itch.io is an independent game marketplace, home to over 44k independent creations. It's build in MoonScript and Lapis, with over 130k lines of MoonScript (Compiled to ~200k Lua). Lapis is a web framework that runs inside of OpenResty. In this talk I'll discuss how Lapis is structured from a high level, how itch.io's application code is organized, how we develop new features, advantages we've noticed compared to other frameworks, how we test, and how itch.io influences Lapis's design.

Lua in WAFs: An examination of Lua's use in ModSecurity and other web application firewalls
Robert Paprocki (DreamHost)

As web applications evolve and grow in complexity and ubiquity, the need to develop performant web application firewall (WAF) solutions as grown as well. This talk will focus on the history and use of Lua in open source WAF solutions. We will discuss how the Apache (and now platform-agnostic) ModSecurity leverages embeded Lua to provide rule authors a powerful extension to the ModSecurity DSL. We will also discuss how developments in the OpenResty community allow for the development of complex Lua applications in the context of the Nginx proxy ecosystem, and examine one such project (lua-resty-waf) in close detail, discussing performance, comparing its feature set with existing open source WAF projects, and discussing the role Lua and LuaJIT plays in optimizing execution times.

Writing optimal Lua code for LuaJIT and OpenResty
Yichun Zhang (CloudFlare)

OpenResty is a high performance web platform built on Lua and NGINX. We have large-scale Internet products built upon OpenResty in companies like CloudFlare, Jingdong, Adobe, Tencent, Sina, Alibaba, Youku, and many others. Over the years, we created many advanced profiling tools that can do online and offline performance analysis. In this presentation, the creator of OpenResty, Yichun Zhang, will examine various important Lua coding details that matter a lot in high performance Lua web applications atop LuaJIT and OpenResty. Then he will walk through some interesting details in the LuaJIT internals when performance is concerned. Finally, approaches like higher level DSLs will be proposed to do automatic Lua code optimizations on Lua programmers' behalf.

The history and design of LuaCocoa
Eric Wing (PlayControl Software)

This talk will explore the subtle details of building a full featured language bridge between Lua and Cocoa, which needs to go far beyond just Objective-C bridging and address the evolution of technology and requirements on Apple platforms over the past 15 years of LuaCocoa's history, such as memory management and the optional Obj-C garbage collector, C types, subclassing, blocks, BridgeSupport, Scripting Bridge, sandboxing, etc.

Tales of a Lua engine embedder thrown into the JavaScript world
Eric Wing (PlayControl Software)

This talk will compare and reflect the process and challenges of embedding JavaScript from the perspective of somebody who comes from the Lua embedding world. To further spice things up, iOS and Android (and maybe WinRT) will be the target platforms discussed, all of which are partially locked down platforms with non-standards compliant parts which even in the Lua case poses additional challenges.

Programming iOS in Lua: a bridge story
Jean-Luc Jumpertz (Celedev)

Building a solid bridge between Lua and an entire OS SDK is certainly a complex and challenging task. You need to adapt the calling conventions and design patterns used in the OS SDK to make them feel simple and natural in Lua; you have to manage the peaceful coexistence of different memory management models, and of different typing systems; and of course you have to write the binding code that allow Lua code and the native OS SDK to communicate with each other. In this talk, I will explain how these points were handled in the Lua to iOS / macOS bridge we have developed as part of the CodeFlow IDE, and how integrating the bridge with the IDE can greatly improve the developer experience.

If you'd like to speak at the workshop, please send a tentative title and a short abstract to lua.workshop@gmail.com with your registration.

Attend

Registration

The Lua Workshop is free to attend, but seats are limited. If you wish to attend then please send an e-mail to lua.workshop@gmail.com. Please include the name of your company or organization if applicable.

Location

The Lua Workshop will take place at the Mashape HQ in the Financial District of San Francisco.

Mashape HQ

500-A Montgomery Street
San Francisco, CA 94111 (USA)

Badges

Before being admitted to the Lua Workshop all attendees are required to register and pick up a badge. Badges can be picked up in the morning on day one before the workshop sessions begin (please refer to the schedule).

Travel

San Francisco International Airport (SFO), the main airport to the city, is located 12 miles south of San Francisco. The Oakland Internation Airport (OAK) is the secondary airport located across the Bay, located about 21 miles from San Francisco.

BART is the Bay Area Rapid Transit train that you can take from the airports to reach the city. Upon landing, you may need to take the airport express train to the right terminal in order to take a BART train.

The Mashape HQ is located close to the Montgomery St. BART Station.

Last, but not least, San Francisco is also very well served by Uber and Lyft, and very convenient if you are using UberPool or Lyft Line. Consider using them for moving around the city, and as an alternative to BART when traveling to/from the airport.

Lodging

The Mashape HQ is located in the Financial District, a few blocks away from North Beach, Union Square and Nob Hill. There is a good variety of Hotels in the area, including:

  • Omni Hotel, 500 California St ~$246/night (2 Min Walk)
  • Hilton Financial District, 750 Kearny St ~$211/night (3 Min Walk)
  • Le Méridien, 333 Battery St ~$229/night (4 Min Walk)
  • Palace Hotel, 2 New Montgomery St ~$235/night (9 Min Walk)
  • Hotel Beresford, 635 Sutter Street ~$152/night (17 Minutes Walk)
  • Pickwick Hotel, 85 5th St ~$169/night (19 Min Walk)
  • Mystic Hotel, 417 Stockton St ~$178 (13 Min Walk)
  • Clift Hotel, 495 Geary St, ~$203 (19 Min Walk)
Airbnb is also an option.

Areas to avoid: try to avoid staying in the Tenderloin/Lower Nob Hill/Civic Center neighborhoods. Nothing on or lower than "Geary Street" too. San Francisco is one of the richest cities in the world, but also a city with the most homeless people in the world.

San Francisco Visitor Info

Visit the official San Francisco Visitors website to learn more about the many sights, shops, and restaurants you can discover while you’re in the city.

Registered participants

Justin Donaldson
Charles Heywood
Erik Hougaard (E Foqus)
Mitchell
Daurnimator
Milind Gupta (Merlin Tech)
Hisham Muhammad (PUC-Rio)
Gary Vaughan
Ryota Kimishima (Ignis Ltd.)
Akira Nakamura (Tokyo Denki University)
Gianpiero Napoli (RTI)
Volmar Machado
Lee Busby (LLNL)
Shu Kit Chan (Yahoo Inc.)
Saravanan B (Yahoo Inc.)
Karthikeyan Thangaraj (Yahoo Inc.)
Ruchit Mehta (Yahoo Inc.)
Rashmi Hadli (Yahoo Inc.)
Pushkar Sachdeva (Yahoo Inc.)
Alexandr Kuznetsov (Yahoo Inc.)
Nick Iaquinto
John Thompson
Daogang Cao
Steven Massey
Peter Cawley (corsix.org)
Xin Xie (Apple)
Jamie Jennings (IBM)
Björn Ritzl (King)
Ramesh Subramonian (NerdWallet)
Thomas Stitt (LLNL)
Qingping Hou
John P. Eurich (Engineering DataXpress)
Holger Kruse (Qualys)
Raphael Amorim (Hewlett Packard Enterprise)
Memo Salas (RTI)
Bennett Kalafut (Thermo Fisher Scientific)
Tom Newman (Corona Labs)
Winslow Cuthbert (PG&E)
Geppy Parziale (iNVASIVECODE)
Eva Diaz-Santana (iNVASIVECODE)
Marco Palladino (Mashape)
Nicole Bantique (Mashape)
Shashi Ranjan (Mashape)
Thijs Schreijer (Mashape)
Augusto Marietti (Mashape)
Morgan Davies (Mashape)
Nijiko Yonskai (Mashape)
Eric Scher (Mashape)
Thibault Charbonnier (Mashape)
Sam Putman (Voltaiq)
Rudra Pratap Sinha (Wikimedia Foundation)
Manjunath Basaralu Srinivasa (Atlassian)
Renato Aguiar (Hewlett Packard Enterprise)
Tyler Neylon

Jeff Shimbo (RTI)
Ean Schuessler (Brainfood)
Ana Balan
Craig Pires (NASA Ames Research Center)
Aapo Talvensaari (Talvensaari Solutions)
Tomi Tavela
Rajive Joshi (RTI)
Indrajeet Singh
Ajay Kemparaj (Adobe)
Edward Wang
William Ahern (Barracuda Networks)
Erick Ingleby (ForeScout Technologies)
Brian Mirletz (Catalia Health)
Justin Troutman (Freedom of the Press Foundation)
Akshar Ranka (Hewlett Packard Enterprise)
Bernard Julve
Eric Wing (PlayControl Software)
Jiale Zhi (Uber)
ThePhD
Pablo Pissanetzky
Leaf Corcoran
Robert Paprocki (DreamHost)
Erica Lee (AstrX)
John Belmonte
Pedro Oguri (Apple)
Sean J
Asumu Takikawa (Igalia)
Yichun Zhang (CloudFlare)
Ahmed Charles (Box)
Paul Rubin
Jean-Luc Jumpertz (Celedev)
Lee Taylor (LLNL)
Zhao Han (Symantec)
Andrew Winkler (NerdWallet)
Victor Tang
Vanya A. Sergeev
Tyler Julian (Uber)
Lewis Ellis (Sentry)
Andy Gayton (Imgix)
Josh Enders (Pinterest)
Kynan Lalone (Pinterest)
Marek Vavrusa (Cloudflare)
Anders Holtsberg (Apple)
Guanlan Dai (Cloudflare)
Zach Levow (Barracuda Networks)
Eugene Ma
Izzy Oneironautia
David Favro
Andrew Stein (Distil Networks)
Dragos Dascalita Haut (Adobe)
Paul Workman

Organizers:

Share:

Facebook Twitter Google Digg Reddit LinkedIn Pinterest StumbleUpon Email