500-A Montgomery St.
San Francisco, California
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.
Registration and badge pick-up
Roberto IerusalimschyWelcome to the Lua Workshop
DaurnimatorOn the history of Lua
Justin DonaldsonThe Haxe Lua target
Gianpiero NapoliPeer to Peer publish/subscribe using Lua and DDS
Lee BusbyIREP and Lua
Daogang CaoCreating mobile app using object Lua
Jamie JenningsRegex Considered Harmful: Use Rosie Pattern Language Instead
Bennett KalafutMass spectrometry assay optimization using functional programming patterns in Lua
Hisham MuhammadLuaRocks 3
Pizza, beer and Lua, courtesy of MashapeMashape's office
Peter CawleyLuaJIT: something interesting inside
Rajive JoshiWorking with strongly typed data models in Lua for building Industrial Internet of Things (IIoT) applications
MitchellAPI Design for Lua and C Applications
ThePhDA Sun For the Moon - A Zero-Overhead Lua Abstraction using C++
Leaf CorcoranBuilding a large web application in Lua with Lapis: itch.io
Robert PaprockiLua in WAFs: An examination of Lua's use in ModSecurity and other web application firewalls
Yichun ZhangWriting optimal Lua code for LuaJIT and OpenResty
Eric WingThe history and design of LuaCocoa
Jean-Luc Jumpertz Programming iOS in Lua: a bridge story
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.
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.
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.
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.
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.
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)
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 firstname.lastname@example.org with your registration.
The Lua Workshop is free to attend, but seats are limited. If you wish to attend then please send an e-mail to email@example.com. Please include the name of your company or organization if applicable.
The Lua Workshop will take place at the Mashape HQ in the Financial District of San Francisco.
500-A Montgomery Street
San Francisco, CA 94111 (USA)
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).
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.
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:
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.
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.
Erik Hougaard (E Foqus)
Milind Gupta (Merlin Tech)
Hisham Muhammad (PUC-Rio)
Ryota Kimishima (Ignis Ltd.)
Akira Nakamura (Tokyo Denki University)
Gianpiero Napoli (RTI)
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.)
Peter Cawley (corsix.org)
Xin Xie (Apple)
Jamie Jennings (IBM)
Björn Ritzl (King)
Ramesh Subramonian (NerdWallet)
Thomas Stitt (LLNL)
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)
Jeff Shimbo (RTI)
Ean Schuessler (Brainfood)
Craig Pires (NASA Ames Research Center)
Aapo Talvensaari (Talvensaari Solutions)
Rajive Joshi (RTI)
Ajay Kemparaj (Adobe)
William Ahern (Barracuda Networks)
Erick Ingleby (ForeScout Technologies)
Brian Mirletz (Catalia Health)
Justin Troutman (Freedom of the Press Foundation)
Akshar Ranka (Hewlett Packard Enterprise)
Eric Wing (PlayControl Software)
Jiale Zhi (Uber)
Robert Paprocki (DreamHost)
Erica Lee (AstrX)
Pedro Oguri (Apple)
Asumu Takikawa (Igalia)
Yichun Zhang (CloudFlare)
Ahmed Charles (Box)
Jean-Luc Jumpertz (Celedev)
Lee Taylor (LLNL)
Zhao Han (Symantec)
Andrew Winkler (NerdWallet)
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)
Andrew Stein (Distil Networks)
Dragos Dascalita Haut (Adobe)