The idea behind Lightning.io is that the whole conference program consists of lightning talks, i.e. 5-minute talks about a topic that fascinates you. Every attendee at Lightning.io must give one lightning talk. This year, Lightning.io was on August 16 in Świnoujście (German: Swinemünde), a Polish city on the Baltic Sea.

A timer is set for 5 minutes and when it rings your talk is over, no matter if you’re finished with your material or not. So you better try to get your main point across in the allotted time, which can be quite challenging. On the other hand, the bar is not so high for giving a good talk – talking about something for 5 minutes is not that hard, especially if you find it really interesting. For the audience the big advantage is that even a boring talk can last only 5 minutes.

The order of presentations is determined by drawing paper ballots with speakers names.

There were not as many participants as expected so we had more time available. Instead of making the talks longer it was decided to add a short Q&A to each talk. Turns out that this makes the whole thing even more interesting. The audience can dig deeper into the more interesting aspects of the talk. As a speaker you have a chance to add some clarifications so there is not so much pressure to get everything right the first time.

Overall, there was a good mix of technical and non-technical topics. Here are some notes from the talks, together with what I remember.

The Lightning Talks

Michał Taszycki @mehowte was selected as the first speaker by random draw. He talked about C64 assembly programming using a short animation as his example. Big props for live coding in 6502 assembler (here is his only slide).

The animation was done with an interrupt that occurs 60 times per second. You inject your own subroutine into the interrupt handling. Even “multithreading” is possible by chaining several routines. A nice reminder that you can understand this stuff down to the byte and address level. He plans to do regular screencasts on C64 assembly programming.

(Michał then drew the next speaker, and so on.)

Finn Pauls @finnpauls talked about “The depressed developer” (update: slides). There were several professions with high prevalence of depression, e.g. cleaners. Can’t remember the other ones. He could not find any specific studies about developers, but the prevalence among engineers is about average. Depression is correlated with low reward / effort ratio and low autonomy, so you should try to find (or create) environments where high responsibility comes with great rewards and latitude in decision making.

Arne Brasseur @plexus showed us how to make sounds and music with a Clojure program in a talk called “Drawing an Owl with Overtone”. He did live coding using Overtone, a Clojure library for “Collaborative Programmable Music”. Overtone is a wrapper around the SuperCollider audio library. SuperCollider supports real time audio synthesis and algorithmic composition, MIDI, using an external keypad for input etc. The programming style is very functional, of course. A waveform is a function and you can filter it by applying another function. During Q&A he mentioned that there are DJs using this setup Meta-eX. Here is a longer tech talk by Meta-eX, the music starts at 15:40.

Chris demonstrated the problems and pitfalls around using Numbers in Ruby. It starts with precision of floating point numbers, for example 0.1 cannot be represented as a finite fraction in binary. The problems continue with very big (and very small) numbers and decimal computations involving money. IIRC, the stated precisions in ruby’s BigDecimal cannot be trusted. The recent IEEE 754 floating point standard covers big decimal numbers but it is not widely implemented. In Q&A we learned that the problem arose in the context of Bitcoin transactions and they ended up implementing their own custom class for dealing with the fractions.

I talked about Data Analysis with pandas and Ipython notebook. My example was analyzing a web server log file to find possible causes for intermittent server outages (500 Internal Server Error). Pandas was used to find requests whose frequency is correlated to the frequency of the errors and plot the results in a way that makes the correlation obvious.

Łukasz Mokrzycki @mokrzu presented Append-only Datastores. These are datastores where you do not modify data once it is written. Append-only datastores are part of the batch layer of a lambda architecture. Datomic is an example of an immutable database. Change of data over time is handled by making time an explicit part of any query (“What is the person’s address per July 1, 2014?”). Some interesting discussions ensued concerning problems like deleting records (you “revoke” them) and updating (you make a new version).

Michal Papis @mpapis talked about “Bottled Happiness” with a review of research around addiction and related behavior. He quoted a number of “myths” about addiction, and some interesting research around positive effects of moderate alcohol consumption.

Tim Lossen’s @tlossen talk was titled “Project Backstop” projectbackstop.org. Imagine a catastrophy where, say, 90% of the population dies (a virus, an asteroid) and civilization as we know it stops functioning. Where do you get the skills for basic survival if there is no internet anymore to look it up? Do you know how to do the most basic things, like making bricks for a house, making an axe, making a rope? Project backstop wants to collect recipes for everything that you could use in a situation like this. Tim says the goal would be to help with survival and get back up to a stage that is comparable to the Amish way of life. The information would cover how to make a community self sufficient in the long term, not necessarily restoring every technology that was there before. There was lots of interesting discussion after the talk.

Norbert Wójtowicz @pithyless showed ClojureScript, which gives you “a real Clojure in the browser”. One of his main points was that you can have the parallelism concepts from Clojure, e.g. core.async an implementation of the idea of communicating sequential processes. My impression was that you write sequential parts that can easily be combined to execute in parallel.

Lots of things I’d like to look up and learn more about:

  • React.js, a javascript library for dynamic user interfaces
  • Om, a ClojureScript wrapper around React.js
  • a talk from EuroClojure where Om, OmTools was used to produce dynamic charts. (This seems to be “Reactive data visualisations with Om” by Anna Pawlicka.)
  • lein-figwheel which does dynamic code reloads in the browser so that you can develop with zero turnaround time. It is supposed to reload only the necessary parts so the application can remain in the same state.
  • The blog of David Nolen where he demonstrates these technologies. David Nolen will give a webinar this Friday: Designing Front End Applications with core.async, Friday August 22, 2014, 2:00 p.m. Eastern

Julia talked about Sleep, a topic that is relevant to all of us. My main takeaway point was that there is still no widely accepted scientific consensus on why we need to sleep. There were interesting remarks in the Q&A, like that the golden age of sleep research was before it became ethically unacceptable to deprive human subjects of sleep. I also learned that an iPhone app can detect sleep phases (REM / non REM) by just using the built-in sensors for acceleration and sound.

Mateusz Lenik @_mlen showed Dependent Types in Idris, a programming language that incorporates several advanced features for functional programming. If I understood it correctly, a dependent type is like a data type but with some constraints on the actual value. Say you are implementing a stack (backed by a list), then popping an element from an empty stack should not be allowed. With dependent types you can express the constraint that your code only works for a stack that has at least one element. As I understood it, you can have a compiler that alerts you to overlooked corner cases such as the empty stack.

Mariano Vallés @zucaritask talk was titled “How I earned B 0.0009”. One day he was updating a rails application from ruby 1.9.2 to (I think) ruby 2.1 and saw one unit test fail. This led to a pull request on Rails core, which was merged after lots of back and forth with the rails maintainers. After the merge, Mariano found out that he had been tipped B 0.0009 by tip4commit for his efforts. Along the way, Mariano quoted lots of interesting conversions to illustrate the value of the tip. For example, BTC 0.0009 was equal to RUB 2.1 or 1/2 argentinian pesos, or € 0.04.

Summary

The new format with 5 minutes talks + 5 minutes discussion worked really well. I had a great time learning new things and meeting interesting people. The organizers did a wonderful job, people enjoyed the talks and having nice catering with coffee, tea and cake was just great.

I’m looking forward to Lightning.io 2015. If you want to stay in the loop join the google group or follow @lightning_io. Suggestions for another cool location for next year are very much welcome.