Clojure is a new dynamic programming language for the Java Virtual Machine. Clojure introduces innovative ideas around state management and concurrency, while inheriting the best ideas from the long history of Lisp-like languages. It is a language designed to solve real problems, some of which are so pervasive in current programming practice that we don’t even recognize them as problems. This workshop will provide an introduction to Clojure’s syntax and key concepts, with examples of how they can make a real impact in large, complex systems.
by Martin J. Logan and Eric Merritt
A whirlwind tour of the Erlang language. This session will be based loosely on Chapter 2 from Erlang and OTP in Action. This tour will serve to teach Erlang to any very astute developers that don’t know it yet and be a nice refresher for those that already know it to some degree. Even advanced users should be able to take some new information on the Erlang language itself out of this session.
Distributed version control is all the rage these days, but is it worth it? It has been transformative for the dozens of organizations and thousands of developers that I’ve mentored on the unique implementation called Git. But don’t take my word for it. Discover the joy of a version control system that works for you, not against you, in a hands-on workshop. Bring a Windows, Mac, or Linux laptop and we’ll install, set up, use and bend Git into workflows that weren’t even possible with the version control systems of yesteryear. Be prepared to rethink how lightweight, fast, and refreshing source code control can be. After completing this workshop you’ll be able to do practical work with Git for your day job or weekend OSS hobby.
Highlights of this workshop include:
by Nate Schutta
This workshop is for web developers showing them how they can leverage HTML5 in the applications they are building today. We’ll start with a gentle overview describing just what HTML5 is all about and then we’ll delve into the details. We’ll look at the new elements HTML5 brings to the table, why canvas isn’t just something you find in the art department, how geolocation can find Waldo and much much more.
This workshop covers intermediate topics for Android developers such as:
You may be surprised to see how each of these techniques can pop up simply by working with images and multimedia in an Android application. The speaker will explain each of these techniques and talk about the real world situations that he has used them while working on two of the most popular apps on the Android Market, eBay Mobile and Bump, and while co-authoring the book Android in Practice.
by Dianne Marsh
Scala is a language which is both functional and object-oriented. Running on the Java Virtual Machine (JVM), Scala appeals to developers who enjoy a concise powerful language with modern constructs. While programmers are often attracted to Scala for its productivity gains and reduction of boilerplate code, it’s easy to become bewitched by the functional approach.
Koans are small lessons on the path to enlightenment. The aim of the Scala Koans project is to provide an easy learning environment in Scala based on a test suite with tests that the developer must either update to work, or fix the implementations being tested such that they pass. The Scala Koans were born at CodeMash 2010 by Dick Wall, updated for CodeMash 2011 and further refined at the Java Posse Roundup 2011.
Modeled after the Ruby Koans, the Scala Koans provide an interactive and fun way to learn the language. Join us and learn more about this increasingly popular language.
by Hilary Mason
by James Carr
You might have heard a lot about node.js lately, and all for good reason. It makes building scalable event driven applications easy and fun. In this workshop we’ll take a deep dive into develoment with node.js, from understanding ES5 features and syntax to building your own node.js modules to building and deploying your own real time web application. Other topics that will be explored include concurrency, behavior driven development, real time communication with websockets, working with NoSQL databases and much more. No experience with node.js is assumed but at least some familiarity with javascript is helpful.
by Nathan Marz
Cascalog is a data processing library for Clojure for processing Big Data on top of Hadoop or doing analysis on a local computer from the REPL. Cascalog combines the conciseness of a DSL with the power of a general purpose programming language. Cascalog is inspired by Datalog and blends logic programming with functional programming.
In this workshop, we’ll learn the basics of Cascalog. We’ll cover the API, inner and outer joins, functions, aggregators, negations, how the query planner works, how to create custom operations for queries, and how to read from diverse datasources like HDFS, MySQL databases, and others.
The format of the workshop is short lectures followed by interactive problem solving sessions where you’ll work on problems that utilize the new concepts from the lectures.
by Aaron Bedra
Our software collects data every day. It fills our databases, logs, and various other crevices. The question is, how do we use it? Most of us simply collect it in case we need it some day. The data your software collects can be the secret to unlocking new potential in your market. It can tell you things your users aren’t. It’s important to know how to make your data work for you.
Join Clojure/core’s Aaron Bedra as he takes you through the beginning of what will turn out to be a wonderful relationship. Aaron will introduce Incanter, a statistical programming package for Clojure. He will take you from raw data to raw power in just a few short lines of code.
by Martin J. Logan and Eric Merritt
Here is where you jump into the meat of things. In this section you use behaviours, supervision, and the application structure. These are the fundamental building blocks for the OTP framework which is at the heart of how Erlang delivers on its promises of high concurrency, scalability and high fault tollerance.
Like a lightsaber, an Emacs setup is most effective when hand-assembled and honed over much practice. This talk will show you what it takes to put together a killer set of dotfiles, starting with a tour of indispensible features and libraries and going on to cover writing your own functions to extend Emacs with Elisp. Bring a laptop (with Emacs installed, of course) and knowledge of basic navigation and commands from the tutorial.
Many Git workshops successfully focus on the basics for those new to DVCS. However, with Git having a full 5 years on the street now, there is a growing desire to address the maturing users of this innovative DVCS. This workshop will take existing Git users and bring them to a heightened level of productivity by leveraging Git’s powerful, yet underused “advanced” features.
Highlights of this workshop include:
Modern programming presents a daunting array of challenges: proliferating technologies, messy inputs, unreliable networks, huge volumes of data, how to verify that results are correct, making it all fast enough. The Haskell programming language is well suited to addressing this broad range of needs, as it uniquely combines conciseness, safety, and high performance.
In this fast-moving, interactive tutorial we will learn Haskell by developing a realistic analytic application: we’ll crawl a web site and rank its pages in order of authority. This combines some very modern concerns: network programming; handling dodgy HTML; big data; and number crunching. With our emphasis on getting real work done, we’ll show off some of Haskell’s compelling features and demonstrate how they help us to develop dependable, easy to understand code.
Django is a high-level web development framework designed for rapid development of database-backed web sites. This tutorial is designed to introduce developers to Django and to give a taste of how Django development usually “feels”. My main goal is to give a holistic impression of Django’s abilities and style: by the end, attendees should be able to decide if Django’s a good fit for them.
A high-level outline:
by Nate Schutta
Sure, Ajax might not be the hardest thing you’ll have to do on your current project, but that doesn’t mean we can’t use a little help here and there. While there are a plethora of excellent choices in the Ajax library space, jQuery is fast becoming one of the most popular. In this talk, we’ll see why. In addition to it’s outstanding support for CSS selectors, dirt simple DOM manipulation, event handling and animations, jQuery also supports a rich ecosystem of plugins that provide an abundance of top notch widgets. Using various examples, this talk will help you understand what jQuery can do so you can see if it’s right for your next project. Once we’ve established a solid understanding of just what jQuery can do out of the box, we’ll delve deeper into the plugin space. jQuery is designed to be extended and while odds are there’s a plugin that meets your needs, sometimes only a homegrown solution fits. Starting with a couple of very simple examples, we’ll work our way up to more full fledged widgets.
by Erik Meijer
For the past decade, I have been on a quest to democratize developing data-intensive distributed applications. My secret weapon to slay the complexity dragon has been category theory and monads, but in particular the concept of duality. As it turns out, the data domain is an extremely rich source of all kinds of interesting dualities. These dualities are not just theoretical curiosities, but actually solve many practical problems and help to uncover deep similarities between concepts that at first look totally unrelated.In this talk I will illustrate several of the dualities I have encountered during my journey, and show how this resulted in a novel “A co-Relational Model of Data for Large Shared Data Banks”.
In a perfect world, every company would have a web “designer” that makes our web apps pretty. It’s not a perfect world. Web developers need to know some CSS!
We’ll start by quickly covering the basics of CSS. Then we’ll dive into the CSS3 features that are supported by recent versions of popular browsers. Finally, we’ll explore a way to improve the syntax of CSS.
Sass stands for “Syntactically Awesome Stylesheets”. It provides two new syntaxes for CSS. One is a superset of CSS3 and the other is a more concise version of that. Both are translated to standard CSS
by a Ruby application before a web site/application is deployed. The features Sass adds to CSS include variables, selector nesting, mixins and selector inheritance.
by Neal Ford
Learning the syntax of a new language is easy, but learning to think under a different paradigm is hard. This session helps you transition from a Java writing imperative programmer to a functional programmer, using Java, Clojure and Scala for examples. This session takes common topics from imperative languages and looks at alternative ways of solving those problems in functional languages. As a Java developer, you know how to achieve code-reuse via mechanisms like inheritance and polymorphism. Code reuse is possible in functional languages as well, using high-order functions, composition, and multi-methods. I take a variety of common practices in OOP languages and show the corresponding mechanisms in functional languages. Expect your mind to be bent, but you’ll leave with a much better understanding of both the syntax and semantics of functional languages.
by Ken Sipe
How does your team handle release weekend? Is it the whole weekend? Is everyone on call? Is there a way to reverse the decision mid-stream? How long would it take your company or team to push a single line code fix from dev into production? Way too many organizations handle the production release through manual and tedious labor following a lengthy to-do check list. Way too many organizations have no way to reproduce their production environment.
What if you could “test” your production release before production? One of the answers to the last mile of continuous delivery is GLU. GLU is an open source project for deployment automation. It was created by one of the co-founders of LinkedIn (Yan Pujante) for automation of LinkedIn’s deployment automation.
This session is a basic tutorial, walking through the configuration of a deployment out to multiple services. We will work through serial and parallel deployments, ensuring consistency and detecting problems. This session should be a sufficient introduction to walking through: 1) installation, 2) configuration, 3) multi-server deployments 4) manual updates and 5) automated updates.
In unreliable networks, with unreliable processors (also known as “The Cloud”) one must know all the ways their thing can fail; and just as importantly, how to recover. It is even better to have the ability to recover in an automated way. I’ll go over the common failure conditions in distributed systems, and then introduce you to Doozer, the highly-available, consistant data store that makes recovering from these problems easy.
Ratpack is a micro web framework for Groovy inspired by the Sinatra web framework for Ruby. Running Jetty and Groovy’s template engine at its core, Ratpack is very capable and extensible while also enabling you to write single file web apps. It fits the sweet spot for problems too small for Grails, yet too big to start from scratch. Ratpack takes routes, also known as URLMappings in Grails, and makes them the star of the show.
In this session, you’ll learn how to create Ratpack apps, manage the application lifecycle, authentication, and persistence, and how to interface with Grails applications. Frankie and Sammy would approve…
Unit testing is an important part of software development, and many frameworks exist to support it on iOS.
In this talk, I’ll give an overview of three unit testing frameworks (SenTestingKit, Google Toolbox for Mac, and GHUnit), two UI interaction frameworks (UISpec, UIAutomation), and a mocking framework (OCMock).
I’ll write tests for a simple application using all frameworks and evaluate them based on:
by Sean Cribbs
“NoSQL is awesome! I need to use it on my next project!” … [hours later] … “How the heck do I get my data out of this thing?!”
Sound familiar? Non-relational data storage solutions (NoSQL) promise all kinds of benefits — scalability, flexibility, fault-tolerance — but (by the nature of the moniker) don’t have SQL to query with. Riak is one such solution, a distributed key-value store that implements MapReduce for querying, and has some awesome client libraries for Ruby, Java, Python, and Node.js. We’ll briefly look at why you might want to use Riak, discuss how MapReduce works in Riak, and then dive into converting some pretty common SQL queries into their MapReduce equivalents, all using code you know how to write, Javascript!
by Ian Robinson
Doctor Who is the world’s longest running science-fiction TV series. Battling daleks, cybermen and sontarans, and always accompanied by his trusted human companions, the last Timelord has saved earth from destruction more times than you’ve cursed Maven.
Neo4j is the world’s leading open source graph database. Designed to interrogate densely connected data with lightning speed, it lets you traverse millions of nodes in a fraction of the time it takes to run a multi-join SQL query.
When these two meet, the result is an entertaining introduction to the complex history of a complex hero, and a rapid survey of the elegant APIs of a delightfully simple graph database. With a data store packed full of geeky Doctor Who facts, we’ll have you answering questions of the Doctor Who universe like a die-hard fan.
We’ll start with an overview of jQuery UI and the widget factory. We’ll dive into how the widget factory works, how it provides a unified API across all jQuery UI widgets and how to leverage it to build your own widgets. We’ll also cover the jQuery UI CSS Framework and how to leverage existing themes with your own custom widgets, as well as how to build a new theme that will work with any widget that uses the CSS Framework.
by Benjamin Manes and Charles Fry
MapMaker is Google’s premier data structure for in-memory caching on the JVM. This presentation will cover lock amortization as a simpler alternative to techniques such as lock-free and elimination-based data structures. We’ll describe how amortized analysis can be used to avoid lock contention and how it is leveraged to support expiration, soft/weak reference collection, and bounded caches.
This talk will cover the theory and implementation of 6 unique functional data structures in Scala. We’ll start out with the concept of functional persistence and then dive right into actual data structures. Each data structure will be motivated and built up by the associated theory and ideas. All of these will be illustrated (with requisite colorful diagrams) and implemented with the necessary trappings to be a first-class Scala Collection. Finally, we’ll look at some of the real-world constraints imposed by hardware architecture and the JVM itself, touching on how these constraints affect data structure design in ways that the theory doesn’t show.
by Wesley Beary
Cloud computing scared the crap out of me – the quirks and nightmares of provisioning cloud computing, storage, … on AWS, Terremark, Rackspace, … – I mean, where do you even start?
Since I couldn’t find a good answer, I undertook the (probably insane) task of creating one. fog gives you a place to start by creating abstractions that work across many different providers, greatly reducing the barrier to entry (and the cost of switching later). The abstractions are built on top of solid wrappers for each api. So if the high level stuff doesn’t cut it you can dig in and get the job done. On top of that, mocks are available to simulate what clouds will do for development and testing (saving you time and money).
You’ll get a whirlwind tour of basic through advanced as we create the building blocks of a highly distributed (multi-cloud) system with some simple Ruby scripts that work nearly verbatim from provider to provider. Get your feet wet working with cloud resources or just make it easier on yourself as your usage gets more complex, either way fog makes it easy to get what you need from the cloud.
With the advent of the invokedynamic in Java 7, implementations of language runtimes on JVM will become much more performant and powerful. Invokedynamic in itself is however only the first stepping stone, the least amount of functionality exposed by the JVM sufficient to enable the new features. Language implementers still need a lot of plumbing for correct interoperability with Java objects: overloaded method resolution, property access, collections access, and so on. The JVM Dynamic Linker Framework provides these functions, a convention for specifying them as invokedynamic calls, and means to link the invocations. More importantly, it provides means for registration and discovery of the same functions for other languages, acting as a nexus that can transparently link call sites generated by one language implementation to code in another implementation. Thus, it allows a dynamic language runtime to handle not only POJOs, but also objects from any other dynamic language runtime that itself uses the framework.
United States United States, St. Louis
18th–20th September 2011