PNWScala 2014

Join other Scala fans and practitioners in Portland, Oregon for 2 days of enlightening talks.

The Pacific Northwest Scala Conference is a regional event focusing on a wide range of Scala-related topics, and will bring together Scala enthusiasts from the Pacfic Northwest and far beyond.









PNWScala 2014

NOV 14-15, 2014


8:30 am - Doors Open / Badge Pickup

8:50 am - Welcome / Announcements

Rapture is a collection of libraries for everyday programming tasks like I/O, JSON & XML processing and cryptography, with a focus on beautiful, concise and intuitive code. Rapture packs a lot of power into a single line of code, and Jon will race through fifty of Rapture's smartest one-liners faster than one-a-minute, showing you how easy it is to perform everyday file and network I/O, structured data and cryptography operations, without compromising type safety. All the code in the talk will be easy for beginners to understand, but more advanced developers may also learn some new tricks, so there should be something for everyone!

"We've all seen them on the corner of our local software development neighborhoods: FP purists, shamelessly peddling scalaz to unsuspecting developers. Lured in by promises of Free Monoids, Semigroups, and Endofunctors these developers soon seem lost in throes of ecstatic coding. "

To the skeptical and stubbornly practical among us, the above might ring a little true – especially if read in Rob Serling's voice. Images of gibbering horrors lurking in the depths of mathematical perfection swim before our eyes.

But what if there is true value in the world of scalaz? What if it is possible to use these tools for good (and a little bit of evil – it's fun to use learning for evil!) and profit... Without getting hopelessly lost in the opium dens of FP?

In this talk we will look at some of the "gateway drugs" of scalaz: Validation, NonEmptyList, \/, OptionT, and more. How do they work from a practical standpoint? What is their value for real world applications? And just how fun is it to *really* code with these tools?

At first glance, the pattern matcher appears to be a mechanism merely for choosing among structural conditions of your data structures. However, scalac is much more powerful than that; many patterns have interesting type-level consequences on the other side of their associated rocketships (=>). This is a powerful tool for modeling in a functional style, as well as a source of interesting type-system bugs. We'll examine various type-level effects of patterns, how you can use them to write safer programs, and what pitfalls arise in scalac's current implementation.

11:30 am - Lunch

Streaming algorithms are a set of techniques for computing on data streams in which the stream of data is presented as a sequence of elements with each element only being processed once. Additionally, these methods are only allowed a constant memory footprint, independent of the size of the input stream. These constraints often lead to required tradeoffs. Solutions are often correct to a threshold, with approximations being required. Understanding the vast application of these methods and how to best integrate them into their software should be a core competency in the modern engineers toolbox.

This talk will weave together

  1. real-world applications of streaming algorithms encountered here at Socrata,
  2. the types and data structures (with open-source implementations in Scala) used internally to implement our streaming algorithm data pipeline,
  3. the theory and data structures behind approximation algorithms including the popular Count-Min Sketch and HyperLogLog as well as other lesser-known techniques, and
  4. references to and examples of integrating JVM-based implementations of these methods found in Twitter’s Algebird and Clearspring’s stream-lib into the working engineer’s data pipeline.

2:00 pm - Break

This session introduces you to Spark by starting with something basic: Scala collections and functional data transforms. We then look at how Spark expands the functional collection concept to enable massively distributed, fast computations. The second half of the talk is for those of you who want to know the secrets to make Spark really fly for querying tabular datasets. We will dive into row vs columnar datastores and the facilities that Spark has for enabling interactive data analysis, including Spark SQL and the in-memory columnar cache. Learn why Scala's functional collections are the best foundation for working with data!

In this talk we will step into Spark over Cassandra with Spark Streaming and Kafka. Then put it in the context of an event-driven Akka application for real-time delivery of meaning at high velocity. We will do this by showing how to easily integrate Apache Spark and Spark Streaming with Apache Cassandra and Apache Kafka using the Spark Cassandra Connector. All within a common use case: working with time-series data, which Cassandra excells at for data locality and speed.

4:00 pm - Break

Generics are now a must-have in any statically typed programming language. Yet, there is a strong tension between the uniform interface exposed to programmers and the low level implementation, which has to deal with data of different sizes and semantics: booleans, integers, floating-point numbers and heap objects. Different languages have taken in very different paths to implementing generics, each with its own advantages and drawbacks. In Java and other JVM languages the standard is boxing primitive values, meaning that heap objects are used to carry primitive values. This leads to significant slowdowns and increased heap consumption, especially when using generic collections for primitive types.

Scala proposes specialization as an alternative to boxing: the compiler can duplicate and adapt user code for each primitive type, thus using unboxed data. Specialization has been shown to reliably speed up code and is extensively used in established community libraries, such as spire (non/spire) and breeze ( But statically duplicating code can result in significant jar sizes and long compilation times. For example, specializing a 3-element tuple, which takes three type parameters, yields 1000 almost-identical classes.

In the miniboxing project we set out to reduce the static bytecode size while maintaining optimality: we build on the idea of tagged union, thus offering a single variant of the code for all primitive value types. This means the 3-element tuple can now be specialized with just 8 classes. But matching the performance of specialization was a long and convoluted journey. In this presentation I will explain the basics of miniboxing and show what we had to do to match the speed of specialized code.

The project's website,, contains all you need to get started: the miniboxing compiler plugin, documentation, usage examples and benchmarks.

Scala has many, well-known WTF LOLs that result from the language too enthusiastically attempting to help the programmer. Scala can also be written across a wide range of styles from the Typelevel to the Better Java.

The Scala ecosystem has static analysis and linting tools which can help avoid confusing behavior, baffling compiler messages, and divergent coding styles. We'll survey the available tools, considering which can be best applied in greenfield and existing projects.

Attendees will leave with steps to immediately improve their production builds and strategies to introduce more sweeping changes with time.

8:30 am - Doors open

8:50 am - Announcements

Brushfire is a framework for distributed, supervised learning of ensembles of decision trees. It is designed to be extremely scalable (both in number of observations and number of features) and extremely customizable: it makes heavy use of Scala generics and typeclasses to allow easy parameterization of each stage of the tree building algorithm. This talk will walk through the overall architecture and algorithm, then show some simple concrete examples of using Brushfire with Scalding to build trees on Hadoop.

Programming in Scala, by Martin Odersky et al., is one of the most comprehensive and the de facto reference for Scala.

However, the book, originally published in 2008 for Scala 2.7.2, has not been updated since its second edition in 2010, covering up until Scala 2.8.1. In the meantime, Scala had 3 major releases with numerous fresh and advanced features.

While we wait for a third edition of Programming in Scala to describe all the latest and greatest Scala features introduced in the last 4 years, this talk presents the main features introduced in Scala 2.9, 2.10, and 2.11:

  • Parallel collections
  • Value classes, implicit classes, and extension methods
  • String interpolation
  • Futures and Promises
  • Akka actors
  • Macros and quasiquotes
  • Reflection
  • Modularization
  • Dynamic types
  • Error handling with Try
  • The App trait
  • New methods in collections
  • Case classes with more than 22 parameters
  • Predef.???
  • sbt incremental compilation
  • 2.12 and beyond: what's in Scala future?

How do three people build a scalable backend in a language only one has ever used before in just three months? By getting something else to do the heavy lifting.

When Conspire graduated from TechStars and began planning our revamped product, we knew we needed a backend that was resilient, scalable and simple to understand. I was the company’s first hire and the only person on the team with any Scala experience but I convinced them to go with Akka and Scala. In roughly four months, we built exactly the backend we envisioned.

That system has been in production for over a year. I'll discuss the challenges we faced with Scala and Akka and the lessons we've learned as we adapt our system to the changing needs of the business. Most importantly, I'll talk about what we did wrong and how we're addressing those issues going forward. (Bonus: the story of how our cluster crashed and burned the first time we put it into production!)

11:30 am - Lunch

This talk will explore the hands-on beginner experience of making things with Scala.js. In particular, it will cover a few topics:

  • How to make a standalone Scala.js single-page web app
  • How to make and publish a cross-platform (JS/JVM) Scala library
  • How to make a client-server Scala.js website with shared code

Each topic will take 25 minutes, and will take you through the entire process from "clone this repo from Github" to "complete, usable project". By the end of this, anyone who's familiar with both Scala and web-dev should be ready to begin cranking out their next project in Scala.js, whatever that may be.

Bring your computers with SBT and IDEs ready to follow along!

2:00 pm - Break

If computers are supposed to be good at math, then why is it so hard to do math correctly with computers? We have trained programmers to reach for floating point types, and to deal with the fallout using some combination of profanity, resignation, and numerical analysis.

We will explore alternatives, focusing on computable real numbers as implemented in Spire, as well as discussing alternatives such as Algebraic numbers and Continued fractions. The focus will be on practical use cases, as well as the benefits of laziness and functional programming when implementing and using these exotic types.

Aren't you tired of just nodding along when your friends starts talking about morphisms? Do you feel left out when your coworkers discuss a coproduct endofunctor? From the dark corners of mathematics to a programming language near you, category theory offers a compact but powerful set of tools to build and reason about programs. What's a category? What's a functor? This talks aims to present the basic concepts and why they matter to everyday coding.

Next time, you too can be the soul of the party and impress your friends with category theory!*

*(results may vary)

4:00 pm - Break

Here at Whitepages, we are redesigning a search system that must execute tasks concurrently, while providing smart flow-control and recovery in the presence of failures.

We need a nuanced handling of errors for a variety of failure modes, which standard Futures alone do not provide. The system must also support timeouts at multiple levels in a way that allows recovery of useful information. Furthermore, the plan definition code must be clear, concise, and correct.

In order to achieve the above goals in a functional and type-safe manner, we need a new, powerful abstraction. We decided to build a new future for ourselves! We would very much like to talk about our experience using and adapting Scalaz and Shapeless to implement functional, multi-faceted error handling of concurrent tasks.

SBT 0.13.5 introduced AutoPlugins as the future of SBT plugin development. AutoPlugins provide interesting features that simplify plugin development while enabling exciting new possibilities for plugin composition. At the Allen Institute for Artificial Intelligence, we are composing some core AutoPlugins into "Archetype" plugins for Library, CLI, WebService, and WebApplication projects. This strategy has proven to greatly simplify our SBT builds while enforcing consistency across projects (something we value very much at AI2!).

In this talk, I will:

  • provide an introduction to AutoPlugins features that enabled our Archetype strategy
  • discuss our specific motivations (pain points) that led to this strategy
  • show our plugins, how they are composed, and how they are used to simplify builds and enforce consistency across projects.


Avi Bryant

Avi has led product, engineering, and data science teams at Etsy, Twitter and Dabble DB (which he co-founded and Twitter acquired). He’s known for his open source work on projects such as Seaside, Scalding, and Algebird. Avi currently works at Stripe.

Eddie Carlson

Eddie has been building distributed search services in Scala for the last year and a half. He joined Whitepages two years ago, after graduating from the University of Washington. Whitepages had just begun to adopt Scala, and Eddie has worked to pioneer Scala usage at the company. He attended last year’s PNW Scala Conference.

Gabriel Claramunt

Gabriel was a happy enterprise developer until he found Scala and ruined his life. Now he wanders around mumbling strange words like "functors" and "curry-howard". In spite of claiming to live in Uruguay, he had a pretty nomadic life, having lived in many places across the Americas.

Evan Chan

Evan loves to design, build, and improve bleeding edge distributed data and backend systems using the latest in open source technologies. He has led the design and implementation of multiple big data platforms based on Storm, Spark, Kafka, Cassandra, and Scala/Akka, including a columnar real-time distributed query engine. He is an active contributor to the Apache Spark project and co-creator of the open-source Spark Job Server. He is a big believer in GitHub, open source, and meetups, and have given talks at various conferences including the Spark Summit and Cassandra Summit. He has Bachelor's and Master's degrees in Electrical Engineering from Stanford University.

Stephen Compall

Stephen Compall, is one of the Scalaz devs, firmly in the typelevel camp, currently working with the Ermine group at McGraw Hill Financial. You can find a few of his writings about Scala on the typelevel blog.

Jean-Rémi Desjardins

Jean-Rémi Desjardins just started at Whitepages a few months ago. He joins bringing a wealth of experience in Scala. Although he has only been involved in the Scala community for just over two years now, he has made contributions to important open source projects such as sbt, Play, shapeless, scalaz and Scala itself.

Helena Edelson

Helena has been working with Scala since 2010 in R&D as a Senior Cloud Engineer at VMware and CrowdStrike, and has recently joined the DataStax (Cassandra) Analytics Engineering Team. She is an open source committer on Akka, Spark Cassandra Connector, Scala Cassandra Driver, (soon to be) Slick (adding Cassandra), & previous Spring Committer.

Li Haoyi

Li Haoyi is a software engineer at Dropbox who writes Python/Coffeescript during the day and Scala/Scala.js at night.

Marconi Lanna

Marconi has been writing software for fun and profit since last century, when the Internet was still black & white and silent. He loves computers, Internet, curly braces, angle brackets, Scala, and working with great people. Marconi is Senior Software Innovator at Originate and spends most of his free time trying to get his little daughter out of trouble. He has been programming in Scala since 2010.

Brendan McAdams

Having recently returned from several wilderness years of being an itinerant conference speaker, trainer, & consultant for such fine companies as MongoDB & Typesafe, Brendan now writes Scala code for Netflix, building beautiful APIs with Scalatra & Swagger.

Marc Millstone

Marc Millstone is a Lead Backend Engineer at Socrata, leading the Analytics and Machine Learning (AniML) team. Before joining Socrata, Marc spent two years in the Mathematical Sciences group at IBM Watson Research, as both a post-doc and Research Staff Member. He obtained his Ph.D. from the Courant Institute of Mathematical Sciences at New York University, where he worked jointly with Lawrence Berkeley National lab, specializing in methods for solving large-scale practical optimization problems.

Erik Osheim

Erik is one of the creators of Spire, a Typelevel project designed to support fast, generic, and precise numerical programming in Scala. He is a contributor to the Scala compiler and standard library, and uses Scala to push the limits of JVM performance and expressiveness. Erik works at Meetup, where he collects, processes, and analyzes data to learn how to more effectively create community.

Jon Pretty

Jon has been involved in the Scala community for the last ten years, having launched the first commercial and open-source Scala software back in 2005. Since then, he has successfully deployed Scala projects into small, medium and large businesses, and UK government, but is best known these days for his work on Rapture.

Mark Schaake

Mark Schaake is a full-stack software engineer at the Allen Institute for Artificial Intelligence. He's been a software engineer since 2005. He's been full-time developing with Scala and Akka since 2011. He is passionate about Scala and Akka (and all things reactive). He enjoys building web services with Spray and web applications with AngularJS.

Ryan Tanner

Ryan Tanner lives in Boulder, CO and is a full-stack developer at Conspire, working primarily with Scala, Akka, Play, ElasticSearch and Neo4j. Conspire tells you exactly how to get the best introduction to whoever you want to meet — a customer, employer or investor.

Vlad Ureche

Vlad is a PhD student in the Scala Lab at EPFL, where he's working on optimizing high-level patterns in the Scala programming language down to fast JVM bytecode. His main project, miniboxing (, is aimed at compiling generic classes down to very efficient bytecode. Vlad also contributed to the Scala compiler in the areas of specialization, the JVM backend and on the scaladoc tool, where you may have seen the diagrams and the implicit member listings he developed.

Leif Wickland

Leif Wickland writes Scala at Oracle in a quiet little corner that nobody has heard about. He lives in Bozeman, Montana, where he attempts to keep up with the neighbors by running, cycling, and skiing long distances on various surfaces. He's better at riding a bike uphill than downhill. He's getting better at skiing uphill. He still sucks at running at any pitch.


PNWScala would not be possible without the help of our generous sponsors.




Friend of PNWScala



  • 101 North Weidler Street, Portland, OR

Code of Conduct

The Short Version

PNWScala is dedicated to providing a harassment-free conference experience for everyone, regardless of gender, gender identity and expression, sexual orientation, disability, physical appearance, body size, race, or religion (or lack thereof). We do not tolerate harassment of conference participants in any form.

All communication should be appropriate for a professional audience including people of many different backgrounds. Sexual language, innuendo, and imagery is not appropriate for any conference venue, including talks.

Conference participants violating these rules may be asked to leave the conference without a refund at the sole discretion of the conference organizers.

The Long Version

Harassment includes offensive verbal comments related to gender, gender identity and expression, sexual orientation, disability, physical appearance, body size, race, or religion; sexual images in public spaces; deliberate intimidation; stalking, following, harassing photography or recording; sustained disruption of talks or other events; inappropriate physical contact, and unwelcome sexual attention.

Participants asked to stop any harassing behavior are expected to comply immediately.

Sponsors and other exhibitors are also subject to the anti-harassment policy. In particular, exhibitors should not use sexualized images, activities, or other material. Booth staff (including volunteers) should not use sexualized clothing/uniforms/costumes, or otherwise create a sexualized environment.

If a participant engages in harassing behavior, the conference organizers may take any action they deem appropriate, including warning the offender or expulsion from the conference with no refund.

We expect participants to follow these rules at all conference venues and conference-related social events

Contact Information

If you are being harassed, notice that someone else is being harassed, or have any other concerns, please contact a member of the conference staff immediately.

For any questions or concerns, please email the organizers at Phone number contacts for organizers and law enforcement will be available on this page during the event.

Conference staff will be happy to help participants contact hotel/venue security or local law enforcement, provide escorts, or otherwise assist those experiencing harassment to feel safe for the duration of the conference. We value your attendance.


This Code of Conduct was derived from the example policy from the Geek Feminism wiki, created by the Ada Initiative and other volunteers and the Conference Code of Conduct by and is licensed under a Creative Commons Attribution 3.0 Unported License.

Creative Commons License