ZuriHac Recap: 2017

Location

ZuriHac 2017 took place at Hochschule für Technik Rapperswil, a university in the beautiful Rapperswil-Jona area of Switzerland. Rapperswil-Jona is southeast of Zürich, and the HSR is here on Google Maps. The university is located right on the lake and the view was absolutely stunning:

Keynote: Neil Mitchell - Friday, June 9 @ 10:00

The kickoff keynote for the event was presented by Neil Mitchell, where he discussed how to make drive-by contributions to Haskell projects. Things like adding documentation, filing bug reports, fixing Hlint/Weeder warnings, writing tests, HPC, CI, optimization, etc in an effort to work towards larger contributions. Slides available here.

Neil Mitchell opening #Zurihac with advice on how to get started contributing to Haskell projects. Perfect start! pic.twitter.com/b2kJBflGBA — Monoid Mary ( @argumatronic ) June 9, 2017

Project Pitches - Friday, June 9 @ 11:00

After the first keynote, the Haskellers working on their own projects for ZuriHac gave short pitches advertising what is available to hack on, if their projects are beginner friendly, and so on. Some examples: servant, haskell-opencv, Blast, and foundation. Then we all dispersed to begin hacking.

Here is Pasqualino Titto Assini pitching his Quid-2 project:

Talk: Mario Meili & Cyrill Schenkel - Friday, June 9 @ 16:00

Mario Meili and Cyrill Schenkel, students at the HSR, gave a joint presentation. Mario’s portion dicussed what is blocking Haskell’s adoption and Cyrill’s portion discussed what is lacking in Haskell tooling. Multiple attendees were there to work on different aspects of tooling, so I hope Cyrill, Mario, and the tooling Haskellers got together during the weekend!

Mario Meili's talk at #ZuriHac2017 about what holds up Haskell adoption pic.twitter.com/z37IQteHGr — Jens Petersen ( @juhp ) June 9, 2017

Keynote: Julie Moronuki - Friday, June 9 @ 17:00

Julie Moronuki delivered a keynote on teaching Haskell and also teaching in general. Slides available here. The points in this talk resonated strongly for me and outline problems I have seen and experienced with education (at least in the US, not sure about elsewhere). Teachers often encourage blind memorization instead of fundamental understanding, particularly in math courses, and this can significantly hamper students’ future learning. A mathematician friend of mine from college described math as a “universal language for connecting ideas”. If students do not understand the fundamentals, they have more difficulty grokking the concepts built on top of these fundamentals. No one should be deprived of this universal language!

Teaching should be so good that concepts are internalized as naturally as beliefs. #zurihac pic.twitter.com/q1nWCZlg1U — tmpz ( @tmpz ) June 9, 2017

Dinner - Friday, June 9 @ 18:00

PIZZA TRUCK!!!

Keynote: Stephen Diehl - Saturday, June 10 @ 10:00

Stephen Diehl gave his keynote on elliptic curve crypto in Haskell. This talk had a crash course on a bit of abstract algebra/elliptic curves, and the rest of the talk was on using Haskell to establish trust between two parties using commitment schemes, zero knowledge proofs, verifiable computation, etc. My experience with cryptography is limited to basic usage of secret-key stuff in libsodium, so this provided me with plenty of future reading material. Code available here.

Keynote: Simon Thompson - Saturday, June 10 @ 17:00

Simon Thompson’s keynote was on “the essence of laziness”. He discussed the evolution of Haskell’s approach to IO, lessons learned from Miranda, how it began with interact , etc. Simon introduced an interesting Interact DSL that he expanded on throughout the talk. Code and slides available here. Thanks for the link, Adrian!

Getting to listen to one of my heroes, @thompson_si, talk about laziness and Haskell prehistory. #zurihac2017 is wonderful. pic.twitter.com/DczGKfi7q7 — Monoid Mary ( @argumatronic ) June 10, 2017

Dinner - Saturday, June 10 @ 18:00

BYOBBQ!!!

Keynote: Edward Kmett - Sunday, June 11 @ 10:00

Edward Kmett gave the final keynote and pulled a fast one on all the Haskellers - it had virtually no Haskell! His talk was on creating a subset of the Intel SPMD compiler as a C++ library. The library uses template specialization to provide architecture-specific implementations (like AVX) of vectorized ops that map to minimal assembly instructions. I used to play around with expression templates and metaprogramming in C++, so this was a fascinating and unexpected talk! There is a lot to unpack in rts . We all had a chuckle at snippets like this where Edward has macros to code gen his vector ops via preprocessor, and considering those vector ops are templates, they are compile-time instantiated, resulting in more code gen. It was not entirely unrelated to Haskell though - the name of the project hints that it may influence GHC some day…

Project Demos - Sunday, June 11 @ 16:00

I missed this portion as Marco and I were actively learning and hacking foundation. It sounds like there was a neat multiplayer “ZuriHac Plays Mario” game in the vein of “Twitch Plays…”. Code available here.

Personal Endeavors

First Timer

This was my first time attending ZuriHac and it was too much fun - will definitely be back next year! Big thanks to Jasper Van der Jeugt, Simon Meier, and all of the HSR folks that made the event happen. Props to the Haskell community too for being friendly and inviting.

Foundation

I wanted to learn Vincent Hanquez’s Foundation package as I had only read about it before ZuriHac. I spent a good chunk of my time with Marco Martinucci at ZuriHac exploring pieces of it. We found an issue that required a decent amount of refactoring and gave us something tangible to work on as we dove into the package. We came close to fixing the issue during the event, and more importantly, we learned a great deal about associated types, efficient builders, etc. It was a pleasure working with Nicolas Di Prima and Vincent. They are phenomenal and patient teachers!

Nomyx

On Saturday, I participated in Corentin Dupont’s Nomyx game. We had about 8 players total if I remember correctly. This one is interesting - each player can write the game’s rules in a Haskell DSL. Some examples include writing rules for the win conditions, rules for how player’s vote on new rules (unanimity, majority, etc), rules for concepts in the game world (like bank accounts, planets, professions, etc). The possibilities are nearly limitless! In our game, we played with bank accounts and I gave everyone a salary of 10 money delivered every minute. One player later wrote a rule to make his friend poor and I snuck a rule in to collect taxes from all players. Another player created a rule where you could only vote if you had X amount of money or something along those lines. Meanwhile, a different player was creating a rule that would output the list of players and their passed rule counts. He iterated on this a couple times, submitting each version as a new rule that we all had the opportunity to vote on. The catch though - an active win condition was “Get 10 rules passed” or something like that. The rule he was iterating on was a nice thing to have, but every iteration put him closer to winning if we majority-voted the iteration into the game! The game reminded me a bit of Fluxx, but from one game of Nomyx, I find Nomyx more fun with higher replay value since the players write the rules. The tax collector rule has been parameterized and submitted in a PR here.