Scala eXchange 2013 – dag 2

Følger opp rapporten fra dag 1 med en oppsummering av de foredragene jeg fikk med meg på Scala eXchange 2013 dag 2.

The Road to Akka Cluster, and Beyond…

Dag 2 startet også med en felles keynote, denne gang av Jonas Bonér, grunnleggeren av Akka. Han snakket om utfordringer og løsninger i distribuerte systemer, og gikk igjennom teori og forskningsresultater rundt slike systemer. CAP-teoremet er kanskje det mest kjente av disse og har vært vesentlig for NoSQL-bølgen de siste årene, men nå beveger pendelen seg noe tilbake igjen med blant annet Higly Available Transactions (HAT). Siste del av foredraget handlet om Akka sin cluster-løsning og detaljer om hvordan cluster-konfigurasjonen vedlikeholdes, f.eks. gjennom gossip-protokoller for utveksling av node-status.

Reconciling Eventually-Consistent Data

Noel Welsh ga en introduksjon til hvordan man kan aggregere endringer fra flere noder i distribuerte systemer ved å ta i bruk konflikt-frie replikerte datatyper (CRDTs). Tenk deg datastrukturer som kan slå sammen endringer og aldri få merge-konflikter. Eksempler han gir er distribuerte tellere (f.eks. side-visninger) og set (mengder). Synes dette var en veldig god introduksjon til grunnleggende byggestener i CRDTs, som man så kan bygge mer avanserte datastrukturer ut ifra.

Scala and Graphs

Dette viste seg å være en mer eller mindre ren introduksjon til graf-databasen Neo4J, og hadde lite å gjøre med Scala. Men foredragsholderen var morsom og entuastisk så hvis man ønsker å få en intro til graf-databaser generelt og Neo4J spesielt, så synes jeg det var bra 🙂 Han snakket også om spørrespråket Cypher, som er et SQL-aktig språk for å gjøre spørringer mot Neo4J basert på pattern-matching. Her kom vel den eneste ordentlige Scala-relaterte, ved at han viste eksempler på bruk av AnormCypher som er et bibliotek for å gjøre Cypher-spørringer fra Scala.

Hidden Gems in ScalaTest 2.0

Bill Venners holdt dagens andre keynote og fulgte opp foredraget sitt fra dag 1 ved å vise mange kule funksjoner i ScalaTest 2.0.

Akka for the Rest of Us

Phil Willis fra The Guardian snakket om hvilke deler av Akka man kan ha nytte av selv om man ikke kjører på et cluster med 2400 noder 😉 Han var skeptisk til hele systemer basert på Actors, hovedsakelig på grunn av at man mister en av styrkene til Scala, nemlig typesikkerhet. De bruker allikevel Actors i noen spesifikke situasjoner. I tillegg bruker de Schedulers for å spre last fra automatiske jobber utover korte tidsperioder, og Agents som et alternativ til standard caching der man har et lite, velkjent antall elementer som alltid skal holdes i minnet.

Overcoming U-Turns and Dead Ends

Endelig et erfaringsforedrag 🙂 Foredragsholderne hadde tatt i bruk Scala, Akka, Spray, Heroku, MongoDB, Redis, m.m. på et greenfield-prosjekt – uten å ha særlig erfaring med noen av de fra før. De delte villig av feilene de hadde gjort og fellene de hadde gått i. Interessant og underholdende foredrag.

Patterns for Slick Database Applications

Siste foredrag på konferansen ble en gjennomgang av en del mer avanserte patterns for bruk av Slick, et bibliotek for databaseintegrasjon fra Scala. Slick 2.0 kommer med en rekke forbedringer som vil føre til mindre boilerplatekode, blant annet i forbindelse med joins, og bedre håndtering av auto-increment kolonner. En grei gjennomgang, men skulle gjerne heller ha sett litt mer erfaringsbasert foredrag om bruk av Slick og hvilke tradeoffs man må gjøre i forhold til f.eks. direkte bruk av SQL.

Oppsummering

Så hva er konklusjonen? Er Scala eXchange verdt å få med seg?

Jeg synes det var en bra konferanse. Jevnt over godt nivå på foredrag og foredragsholdere. Skal jeg trekke frem noen enkeltforedrag så var det vel Spray-foredraget dag 1, og “Overcoming U-Turns …” fra dag 2. Skulle gjerne sett flere erfaringsforedrag, men det virker å være samme situasjon på flere andre tilsvarende konferanser om Scala. Savnet også litt lyntaler, som jeg synes er en veldig bra måte å få inn flere nye impulser på kort tid, men det er ingen show-stopper. Det var sosiale happenings begge kveldene, med øl + mat + panel-debatt første dagen og tur på puben etter konferansen sluttet dag 2.

Kommer gjerne tilbake 🙂

Scala eXchange 2013 – dag 1

Her kommer en kort rapport fra dag 1 på Scala eXchange 2013 i London. Konferansen er delt i tre spor, med noen felles keynotes underveis.

Lenses

Dagen startet frisk med en keynote av Simon Peyton Jones om Lens-biblioteket i Haskell. Lenses gjør det mulig å “gripe inn i” hierarkiske datastrukturer og hente ut eller endre data, men på en funksjonell måte som muliggjør immutability, komposisjon osv. Her gikk det relativt kjapt i svingene, og jeg fikk definitivt bruk for hver minste lille dråpe med Haskell-kunnskap jeg har. Det var allikevel ikke et foredrag om Haskell i seg selv, men mer om konseptene i Lens-biblioteket og styrken i abstraksjoner som sterkt typede (funksjonelle) språk gir en.

Scala har selvfølgelig flere Lens-implementasjoner, som RillitShapeless og Scalaz. Se f.eks. Lenses-foredrag fra Scala Days 2013 for en god intro.

SPJ er vel forøvrig en av de få som kan komme unna med å bruke Comic Sans på slidene sine, i gult på blå bakgrunn intet mindre… 😉

What’s new in Lift 3

Lift var det første web-rammeverket skrevet i Scala, men de senere åra har det vært mer stille rundt Lift. Andre web-rammeverk som Play! og mer lettvekts REST-biblioteker som Unfiltered, Scalatra og Spray har fått mer oppmerksomhet.

David Pollack & co holder nå på med versjon 3.0 av Lift. En av de store nyhetene er støtte for “klientside” actors. Lift 3.0 støtter actor-kall fra klient til server og tilbake med automatisk (de)serialiseing av JSON begge veier. Det er mye fokus på REST og asynkrone tjenester. Utover dette har Lift sterk støtte for sikkerhet, og tar seg automatisk av en del lavnivå ting som håndtering av http-connections (multipleksing, osv.) og retry av kall som timer ut. Litt usikker på argumentene for hvorfor Lift bruker egne typer/biblioteker for Futures o.l., må se nærmere på dette i forhold til Play!, Akka o.l.

Implicit Conversions => Implicit Parameters

Bill Venners fortalte en del om hans oppdagelser og erfaringer med bruk av implicit parametere i Scala og hvordan det hadde åpnet for ny funksjonalitet i ScalaTest2.0 i forhold til bruk av implicit conversions i ScalaTest 1.x. Blant annet bedre støtte for konfigurasjon, typesikkerhet, med mer.

Failure: Deal With It!

Viktor “Legend of” Klang fra Typesafe holdt en keynote om feilhåndtering. Hovedbudskapet var at man bør håndtere validering og feilhåndtering hver for seg. Validering er planlagt/ønsket, mens feilhåndtering tar for seg de uforutsette hendelsene. Dette er ofte ortogonale aspekter og bør håndteres i forskjellige deler av koden. Han snakket om hvordan feilhåndtering gjøres i Akka ved hjelp av supervisor-hierarkier, ikke i selve applikasjonslogikken.

How to Please Everyone, All of the Time

Jon Pretty snakket om hvordan man kan bruke type classes i Scala for å tilby forskjellig funksjonalitet til forskjellige brukere. Han viste hvordan man ved hjelp av import av utvalgte type classes kan gjøre feilhåndtering implisitt (exceptions) eller eksplisitt (Either/Try som retur-typer). Synes han brukte vel lang tid på å komme til poenget, snakket mye om Monoids og slikt før han kom til det som egentlig burde ha vært motivasjonen for foredraget.

Let the Types Set You Free

Et foredrag om korrekt bruk av typer for å signalisere funksjonalitet og hensikt i koden din. F.eks. bruke Option for å angi at funksjoner kan ha en retur-verdi eller ikke, eller Scalaz sin IO-monade for å signalisere eventuelle feil som kan oppstå under IO. Foredraget var ganske kort (drøye 20 minutter?) og kunne med fordel ha gått litt mer i dybden på en del ting, og også forklart det litt mer detaljert. Hvis man har vært borti Option og lest litt om monads så synes jeg ikke det ga så mye.

Spray: Http for your Akka Actors

Siste foredrag jeg fikk med meg denne ettermiddagen handlet om Spray, et lettvekts-bibliotek for håndtering av HTTP-kall i Scala, både som server og klient. Foredraget besto for det meste av live-koding, og ga en god intro til mulighetene i Spray. Blant annet viste han kobling mot Akka actors og hvordan man kan bruke både lav- og høynivå-mekanismene i Spray for å håndtere slikt som HTTP-connections, uthenting og validering av query-parametere, og f.eks. komprimering av HTTP-responsen.

Economies of Scala

As a consultancy, we’re always on watch to see what might be the next step forward in the field of software development. I usually find that paying attention to what our developers are playing with provides a good clue.

These days, many of them are toying with Scala, and they are eager to try it out on a project. I have challenged them to come up with compelling business reasons to use Scala on a project, but they have come up short.

I figured I would help them find a good business case for Scala.

For software companies in a tight employment market like the one in Norway, most technical advantages are dwarfed by one concern: Access to good developers. It clearly doesn’t matter what kinds of technical advantages a new language can bring if you can’t hire any developers to work with it. On the flip side, if you can bring great developers to your project, you’re probably in good shape no matter what language you have chosen.

The question, then, is what language should you choose to maximize your access to good programmers?

Continue reading