Lift
An 8 Year Retrospective
Scala eXchange 2014
David Pollak / @dpp
Thanks to the Lift Committers:
Burak Emir -
Diego Medina -
Peter Petersson -
David Bernard -
Kris Nuttycombe -
Matt Farmer -
Maciek Starzyk -
Philipp Schmidt -
David Pollak -
Alex Boisvert -
Debby Meredith -
Stepan Koltsov -
Alex Payne -
Marius Danciu -
Indrajit Raychaudhuri -
Lee Mighdoll -
Andreas Joseph Krogh -
Ross Mellgren -
Vassil Dichev -
Antonio Salazar Cardozo -
Carsten -
Joe Barnes -
Dave Whittaker -
Ján Raška -
Jonas Bonér -
Eric Torreborre -
Jonathan Hoffman -
Julien Wetterwald -
Franz Bettag -
Viktor Klang -
Daniel Green -
Jorge Ortiz -
Torsten Uhlmann -
Steve Jenson -
Mads Hartmann Jensen -
Timothy Perrett -
Francois Bertrand -
Tyler Weir -
Reuben Doetsch -
Derek Chen-Becker -
Jeppe Nejsum Madsen -
Chris Wilkes -
Harry Heymann -
Heiko Seeberger -
Al Thompson
A Word from a Lift supporter
If you want to use this stuff to make the world function better (pun
intended) and do so in a great team, email: paul.dale@elemica.com
Elemica employs more Lift committers than anyone else
About @dpp
- Founded Lift web framework
- Wrote a bunch of commercial spreadsheets
- Crazy passionate lawyer-trained tech dude
- The Lift codebase is more than 8 years old
- Top 3% of team size, commits, velocity, age
- More than a software project: Volunteer effort
'Hello, Joe' & Rubyconf 2006
Mocking another language turned me off.
As did disdain for types and "Enterprisey" things.
Googled "Functional language, jvm"
Found Scala
- Best of Ruby and Java
- Java interop "Just Worked"™
- Seemed like the best thing EVER!!
Scala 2.2 days
- Very small community (wiki included most members)
- Friendly, mostly academic
- Jon Pretty: the commercial user
Me: Mostly Web Dev
- Had done a couple of (proprietary) web frameworks
- Spring (the hotness at the time) sucked
- So, I decided to do my own web framework... for Scala
Pre-Lift: Scala with Sails
- ORM and some Rails-like controller stuff... and Textile
- Dec 7, 2006 - Feb 2007
- Lift name from Roger Rohrbach from Gabble.
Runner up: Escalate
Feeding Bears
- Title going back 20+ years
- John Irving: Hotel New Hampshire, etc.
- Balancing community, customers, partners, etc.
Used Lift for photo-sharing dropbox thingie
- Focused on REST
- Some support for Actors and Comet
- Tool-chain challenge
Not to be left out in the “doing cool things on the web”, is a fairly
new framework for Scala (another highly functional language with some similar features to Erlang and Smalltalk) called lift. There’s an interesting post by the author showing a twittr clone he claims can scale to
handle twittr’s traffic with only 2 machines thanks to message
persistence with the Actor based model.
lift stresses security, developer productivity, ease of deployment, ease of maintainability, performance, and compatibility with existing systems.
Lift's description, today
Lift applications are:
Secure
Developer centric
Designer friendly
Scalable
Modular
Interactive like a desktop app
Early Stuff
- Steve Jenson, Alex Boisvert, and I lived a few blocks from each other
- I vowed never to do a release ... only broke vow once
- David Bernard (another twin dad)
set up the build process, system, and infrastructure
Innovation Games
- Luke Hohmann wrote about serious games to play with business folks
- Hired me to put browser-based multi-player games online
- Forcing function for Lift's Comet... in IE 6
Stuff at SAP
- Innovation Games played at SAP
- Needed to integrate with some of SAP's systems
- Tried (and failed) to excite SAP about Scala
Scala-tools.org & Scala-blogs.org
- One day at SAP, IMed with David Bernard
- He suggested an official Maven repo -- thus Scala-tools.org
- And a shared Scala Blog: Scala-blogs.org... hosted at Blogger as an homage to @stevej
Bay FP
- Was sole Scala rep at first meeting
- All the functional web framework folk in one place
Ev's Thing
- Ev Williams incubated Twitter and a bunch of other stuff out of a south park office
- Had an idea and asked Steve Jenson to do a prototype
- Steve asked me to help him do it in Lift... got to visit the Twitter offices and get to know Twitter engineers
Silicon Valley Code Camp
- Presented Scala and Lift over years
- Met Java Posse and Bill Venners
- Eishay Smith from LinkedIn... convinced switch from Groovy to Scala
Twitter
- Invited to me help out with issues
- Martin and I did full frontal assault to get Twitter to adopt Scala
- For a while, Lift ran the public timeline service
Scala Lift Off
- First in SF 2008... tipping point for Scala @ Twitter
- Held 5 events over 3 years in SF and London
- Open Space conference oriented to community sharing
ESME
- Behind the firewall, corporate Twitter-style communication thingie
- James Governor hooked me up with Richard Hirsch, Darren Hague and others in the SAP ecosystem... and Vassil Dichev joined the merry bunch.
- Demoed Lift-powered ESME to 6,000 SAP developers in Nov 2008
- First Scala-based Apache project in 2009
JavaOne 2009
- 50% attendance drop vs. 2008
- Lots of Scala and Lift presentations
- Scala and Lift books (3 total) all in top 10 at bookstore sales
AMPLab Scala Preso
- "We are teaching a class on highly productive parallel programming languages tu/th 2:30-4 and would love to have a talk on scala.
Are you possibly interested and avaialble?
More about the class can be found at
http://parlang.pbwiki.com"
- Spent an afternoon discussing Ruby vs. Scala and distributing JVM bytecode to a cluster
- This group went on to build Spark
Maven & CI
- Thanks to Chris Wilkes, Lift was the first Scala project to use Maven
- Lift had its own repo... but was soon shared with the community as scala-tools.org
- Thanks to Indrajit and Derek, Lift had a cross-Scala-version build system
- Had the first Jenkins system and code review system in Scala-land
Git & GitHub
- Lift initially hosted at Google Code
- 2008: got taken to lunch by the Octocats
- Git changed the way the community discussed features
Code of Conduct
- Informal in the beginning
- Codified in 2011
- Led to a really excellent community
DOM Templating
- Templating via DOM re-write rather than String vomit
- More secure
- Liberally borrowed CSS Selector Transforms from Enlive
- Heisted by certain eponymous Haskell projects
- DOM writing the hotness in JS frameworks, eg ReactJS
Misc Tech Stuffs
- Futures in Scala... and fast fail on collection of Futures
- Parallel and lazy page render
- Non-core-library Actors in Scala
- Automatic Async support (including by return type)
Lift 3 is alive
- Breaking changes to fix cruft... much of the cruft 8 year legacy of @dpp
- Streaming promises, Futures everywhere, Single Page Apps
- Curated by Antonio, Matt, and Diego
Community
- Continues to be strong and warm
- Linear participant growth, flat question frequency
- New committers (Hi Joe) continue to add new energy
A Decade of Lift?
- Yes!
- Will Lift have a massive growth spike? No.
- Likely to be Eiffel-like...
Lift's documentation is out of date and sucks
Yes! This is entirely my fault. And many Lift folks have tried to address the issue... in vain.
@dpp quit Scala and Lift
Lift grew beyond a BDFL. I recognized this and made myself intentionally a much quieter voice in the community. I still make my living doing Lift, Scala, and Clojure work.
@dpp is a nice guy
I can be
@dpp is a real bastard
I am very clear about my expectations and consequences. And I don't bluff.
Lift is stateful
Wrong. Lift has well defined and very graduated stateless to stateful rules. See above about being very clear.
Lift doesn't do Async
Beyond wrong. Lift has the best Async support of any web framework.
Lift is Servlet-only
Wrong. Marius Danciu wrote an abstraction layer for Lift requests. Jordan West and I did a Netty-Lift adapter in an afternoon and Franz Bettag has improved on it.
Lift is HTML only
Wrong. Lift has the best REST support around including a unified synchronous/async support based on return type.
Lift makes you us its JavaScript
Wrong. Lift has a series of abstractions over plumbing and default implementations... but build your own.
Biggest Lift-related mistake?
Not being opinionated enough about there being one way to do things in Lift. Second: crappy documentation.
Would you do it again?
In a heartbeat
Why?
I've met truly spectacular people and built wicked cool stuff!