SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Lessons Learned from a 2-year-old Play App
Aug 14, 2015 Scala By The Bay Oakland CA
Play Architecture, Implementation,
Shiny Objects, and Proposal
• About me
• About the Cadenza web app that powers
ScalaCourses.com
• Brief History of Play Framework
• Architectural Features for Multimedia
Scalability
• Standards and Processes
Outline
Who is this guy, and why should I care?
About Mike Slinn
About Mike Slinn – Today
• Architect and lead developer of Cadenza, the webapp that powers ScalaCourses.com
• Co-ordinates the ScalaCourses.com instructors
• Contributor to the Scala / Play courses provided through ScalaCourses.com
About Mike Slinn – Selected History
• Co-founder of Vancouver AutoCAD User Society (“Oldest and Most Dangerous AutoCAD User
Group”, world’s largest)
• Co-Chair of Silicon Valley Ruby Conference (world’s largest)
• Former primary organizer Bay Area Scala Enthusiasts (grew to world’s largest)
• Former organizer of SF Scala , Scala for Startups
About Mike Slinn – Author & Expert
• Wrote 3 books, including “Composable Futures With Akka 2.0”
• Wrote over 5 dozen technical articles for computer magazines
• Former product marketing manager at Borland for C, C++, .NET & Ruby on Rails IDEs
• Traveled the world for decades teaching computer software commercially
• Now travel much less and uses video conferencing instead
• Often retained as a software expert for court cases and arbitrations involving software
Powers ScalaCourses.com
About Cadenza
ScalaCourses.com
ScalaCourses.com
• Best learning experience for Scala and Play Framework
• Most cost-effective option
• Material is maintained up-to-date
• Students have access for a year at a time
• We are looking for course authors
"Better to train outstanding people into new areas than to accept
marginal people with some skills" – NASA
Cadenza – Powers ScalaCourses.com
• ScalaCourses.com has been serving online Scala and Play training material for 2+ years
• Cadenza is:
• Online content editor and multimedia delivery mechanism
• Play Framework 2 application
• Written in Scala, uses Akka, Slick, AWS and Postgres
• Originally deployed app to Heroku, now on Digital Ocean (1GB droplet)
• Still using Heroku database
• Some functionality is broken out into microservices
• View free Cadenza course at ScalaCourses.com to learn more
Cadenza Features – A&A
• Sophisticated and fine-grained authentication and authorization (A&A)
• Hierarchical permissions control access to hierarchy of entities
• Entities: Lecture, Section, Course, Group, PublishingConfiguration, User, Roles
• Next release adds: StudyGuide, Exam
• Roles: Visitor, Student, TA, Instructor, Videographer, CopyEditor, Publisher, SuperUser
• Deep integration of webapp framework, A&A dependencies and persistence mechanism
• Breaking changes in Play Framework seriously impacted plugin developers, which locked us
in Play 2.2.6 – more on this later
Architectural Features for Multimedia Scalability
• Cadenza serves large amounts of multimedia data quickly and economically
• Play app does not handle any data
• Play app only handles authorization and authentication
• Use AWS S3 and CloudFront to serve data
• Signed URLs
• Avoid enumeratees, very slow; perhaps Akka-HTTP for Play will eventually be an alternative?
Cadenza Features – Online Editors
• Quick demo of lecture editor and section organizer
Cadenza Features – Live Content Caching
• Content is parsed, summarized and cached
• Lots of lazy vals, memoization and usage of caches
• Decision of which caching mechanism and cache type to use depends on artifact purpose
• Tabs in web pages are demand-loaded to increase responsiveness and decrease system load
• Students can download a course notes by printing to PDF on demand
• Current content is printed
• Content is aggregated by course
Cadenza Features – White Label Branding
• Designed to be branded for third parties who use Cadenza for course authoring and delivery
of their own courses
Cadenza Features – Asset Controller
• Videos and images are delivered by AWS CloudFront
• Cadenza’s asset manager only delivers assets when in development mode
• AWS signed URLs provide time-limited access to remote assets
• App is optimized for data retrieval (read access), so students do not present a significant load
• A separate instance for course authoring is recommended, with more memory
Google Guava to the rescue!
Concurrency, Persistence & Caching
Cadenza Features – Database
• No joined tables; domain model is created in memory
• Cadenza’s AbstractTrainingEntity trait provides write-through caching support
• Most database requests are served from local in-memory domain model cache
• Domain model is immutable; stale entities are flushed from cache and replaced as required
• Fast and scalable
• “Immutable domain model with write-through caching” (IMWC) pattern is easy to program to
• IMWC requires a deep integration of webapp framework and database
Cadenza Features – Immutable / Lazy Domain Model
Cadenza Features – Immutable / Lazy Domain Model
• A lazily instantiated, immutable domain model starts fast
• Naturally optimized for read access
• Naturally supports concurrency
• Stateless so it scales horizontally
• Best when coupled with or implemented by local cache
• Must differentiate between:
• Core domain model, running out of local cache
• User data, run from a distributed cache or loaded from a database
• Transient data, not cached
Caches and Concurrency
• The Play cache interface is not threadsafe (affects all implementations, such as EHCache).
• This does not matter if multiple threads attempt to set the same value, however.
• Better to implement a threadsafe cache using Google Guava’s CacheBuilder.
Cadenza Front Page (Cached)
def apply(pubConf: PublisherConfig, referrer: String="")
(implicit request: RequestHeader): Html =
views.html.main(Model.frontPageTitle, enableGoogleAnalytics=true) { Html.empty } {
Html(s"""<div class="row-fluid">
| <div class="span6">
| ${pubConf.cache("courseBlurbs", courseBlurbs)}
| </div>
| <div class="span6">
| ${ pubConf.comments.getOrElse("") }
| </div>
|</div>
|${ request.flash.get("signedUp").map { _ => signedUp }.mkString("n") }
|""".stripMargin)
}
Those ignorant of history are doomed to repeat it
Brief History of Play Framework
Play Framework is Popular
Play versions
• 1.0 Oct 19 2009
• 1.1 Nov 01 2010
• 1.2 Apr 13 2011
• 2.0 Mar 13 2012
• 2.1.0 Feb 06 2013
• 2.2.0 Sep 20 2013
• 2.3.0 May 30 2014
• 2.4.0 May 26 2015
• 3.0 May 2016
Huge API churn
2010-11-01 v1.1 RC3
2012-04-07 v1.2.4
2012-04-13 - Play 2.0 announced
2013-05-18 – v2.1.1
2013-09-29 – v2.2.0
2014-06-25 – v2.3.0
2015-08-14 – v2.4.x
Next year: Play 3.0
• Biggest feature: Reworked dependency injection
• No details yet, even though ship date is likely 7 months away.
• No indication if CDI 2.0 (Contexts and Dependency Injection), which implements JSR 365, will
be supported
• Initial reaction to my suggestion was that nothing could be learned from standards
Scala Ecosystem generally lacks S&P
Standards and Processes
Hmm…
• Go-Karts - Feel fast, are slow
• 747s - Feel slow, are fast
• “Ship it!” - Feels fast, is slow
• “Test + Document it!” - Feels slow, is fast
• “Define standards and engage community” – Feels slow, is powerful
• Build the right thing (product management, standards) vs. build the thing right (agile)
• High agile velocity without adult supervision => API churn
Standards Engage Ecosystems
• “Lack of standards threatens to derail the big data innovation train” – Jonas Bonér
• Standards also important for Scala ecosystem in general and Play in particular
• Jonas only recently has begun to profess the standards religion
• The Akka project is the only one within Typesafe that shows evidence of interest in standards
Standards and Process
• Standards bring people together: core developers, customers, 3rd party developers
• Result (of a healthy standards process):
• Well thought out specifications
• Quality reference implementations
• This drives:
• Customer adoption
• Lower cost of operation
• Less API churn
Play Framework is Special
• Play Framework requires integrating language features, persistence, security, A&A, etc
• Integration success metrics are hugely affected by availability of good standards
• Change in mindset required:
• What can be learned from existing standards?
• How can customer usage patterns be codified into standards with competing implementations?
• Result:
• Huge reduction in API churn
• Much greater adoption by enterprises
• Much higher quality product
Standards and Process Can Be Powerful
• Sun was bureaucratic but that allowed them to foster standards
• Java is still hugely important decades later as a result
• Ruby was initiated by young developers
• Disdained standards (our projects are so different that standards do not apply)
• Ruby became merely the language that powered Ruby on Rails
• 40% drop in demand for Rubyists in 2014, downward trend is continuing
• Scala’s ecosystem also lacks standards and a vehicle to provide process
Just Enough Bureaucracy
• Bureaucracy is boring, but when used appropriately it allows many participants to interact
effectively
• Project management requires bureaucracy
• Release planning
• Experimentation prior to making design decisions
• Communicating and engaging users
• Integration with other products
“The bug wasn't ours. It was in an open source project we use,
but do not fund or contribute to in any way.”
Proposal: Play Framework Foundation
Set Play Free!
• Open source is becoming even more open – because it has to
• Joyent gave away Node.js to the Node.js Foundation
• Google gave away all rights for Kubernetes to the Cloud Native Computing Foundation
• Backed by Cisco, eBay, Goldman Sachs, IBM, Intel, Joyent, Twitter, Google and Docker
• VMware gave away Cloud Foundry to the Cloud Foundry Foundation
• All of these foundations are managed by the Linux Foundation, which is now a meta-foundation
• Typesafe should give Play a boost by doing the same:
The Play Framework Foundation
Thank you!
• Mike Slinn
• mslinn@scalacourses.com
• @scalacourses

Weitere ähnliche Inhalte

Was ist angesagt?

The (not so) Dark Art of Atlassian Performance Tuning
The (not so) Dark Art of Atlassian Performance TuningThe (not so) Dark Art of Atlassian Performance Tuning
The (not so) Dark Art of Atlassian Performance Tuningcolleenfry
 
Calculating the Savings of Moving Your Drupal Site to the Cloud
Calculating the Savings of Moving Your Drupal Site to the CloudCalculating the Savings of Moving Your Drupal Site to the Cloud
Calculating the Savings of Moving Your Drupal Site to the CloudAcquia
 
Impact of cloud services on the work of oracle technology experts
Impact of cloud services on the work of oracle technology expertsImpact of cloud services on the work of oracle technology experts
Impact of cloud services on the work of oracle technology expertsAndreas Chatziantoniou
 
Profiling and Tuning a Web Application - The Dirty Details
Profiling and Tuning a Web Application - The Dirty DetailsProfiling and Tuning a Web Application - The Dirty Details
Profiling and Tuning a Web Application - The Dirty DetailsAchievers Tech
 
Prototyping like it is 2022
Prototyping like it is 2022 Prototyping like it is 2022
Prototyping like it is 2022 Michael Yagudaev
 
How to run a global, cloud scale event for 10.000 people
How to run a global, cloud scale event for 10.000 peopleHow to run a global, cloud scale event for 10.000 people
How to run a global, cloud scale event for 10.000 peopleRobBos10
 
Moving Windows Applications to the Cloud
Moving Windows Applications to the CloudMoving Windows Applications to the Cloud
Moving Windows Applications to the CloudRightScale
 
Drupal Site Hosting and Management: Acquia Case Studies from the Frontlines
Drupal Site Hosting and Management: Acquia Case Studies from the FrontlinesDrupal Site Hosting and Management: Acquia Case Studies from the Frontlines
Drupal Site Hosting and Management: Acquia Case Studies from the FrontlinesAcquia
 
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26Derek Ashmore
 
Scaling up to 30M users - The Wix Story
Scaling up to 30M users - The Wix StoryScaling up to 30M users - The Wix Story
Scaling up to 30M users - The Wix StoryAviran Mordo
 
SAP Teched 2012 Session Tec3438 Automate IaaS SAP deployments
SAP Teched 2012 Session Tec3438 Automate IaaS SAP deploymentsSAP Teched 2012 Session Tec3438 Automate IaaS SAP deployments
SAP Teched 2012 Session Tec3438 Automate IaaS SAP deploymentsChris Kernaghan
 
Managing Performance in the Cloud
Managing Performance in the CloudManaging Performance in the Cloud
Managing Performance in the CloudDevOpsGroup
 
Service-Oriented Design and Implement with Rails3
Service-Oriented Design and Implement with Rails3Service-Oriented Design and Implement with Rails3
Service-Oriented Design and Implement with Rails3Wen-Tien Chang
 
Get A Head on Your Repository
Get A Head on Your RepositoryGet A Head on Your Repository
Get A Head on Your Repositoryeosadler
 
Harvard it summit 2016 - opencast in the cloud at harvard dce- live and on-d...
Harvard it summit 2016  - opencast in the cloud at harvard dce- live and on-d...Harvard it summit 2016  - opencast in the cloud at harvard dce- live and on-d...
Harvard it summit 2016 - opencast in the cloud at harvard dce- live and on-d...kevin_donovan
 
Automated Configuration & Deployment of Atlassian Applications
Automated Configuration & Deployment of Atlassian ApplicationsAutomated Configuration & Deployment of Atlassian Applications
Automated Configuration & Deployment of Atlassian Applicationscolleenfry
 
Operations for databases – the agile/devops journey
Operations for databases – the agile/devops journeyOperations for databases – the agile/devops journey
Operations for databases – the agile/devops journeyEduardo Piairo
 
SQL Server Disaster Recovery on Azure - SQL Saturday 921
SQL Server Disaster Recovery on Azure - SQL Saturday 921SQL Server Disaster Recovery on Azure - SQL Saturday 921
SQL Server Disaster Recovery on Azure - SQL Saturday 921Marco Obinu
 
Spark SQL & Machine Learning - A Practical Demonstration
Spark SQL & Machine Learning - A Practical DemonstrationSpark SQL & Machine Learning - A Practical Demonstration
Spark SQL & Machine Learning - A Practical DemonstrationCraig Warman
 

Was ist angesagt? (20)

The (not so) Dark Art of Atlassian Performance Tuning
The (not so) Dark Art of Atlassian Performance TuningThe (not so) Dark Art of Atlassian Performance Tuning
The (not so) Dark Art of Atlassian Performance Tuning
 
Calculating the Savings of Moving Your Drupal Site to the Cloud
Calculating the Savings of Moving Your Drupal Site to the CloudCalculating the Savings of Moving Your Drupal Site to the Cloud
Calculating the Savings of Moving Your Drupal Site to the Cloud
 
Impact of cloud services on the work of oracle technology experts
Impact of cloud services on the work of oracle technology expertsImpact of cloud services on the work of oracle technology experts
Impact of cloud services on the work of oracle technology experts
 
Profiling and Tuning a Web Application - The Dirty Details
Profiling and Tuning a Web Application - The Dirty DetailsProfiling and Tuning a Web Application - The Dirty Details
Profiling and Tuning a Web Application - The Dirty Details
 
Prototyping like it is 2022
Prototyping like it is 2022 Prototyping like it is 2022
Prototyping like it is 2022
 
How to run a global, cloud scale event for 10.000 people
How to run a global, cloud scale event for 10.000 peopleHow to run a global, cloud scale event for 10.000 people
How to run a global, cloud scale event for 10.000 people
 
Moving Windows Applications to the Cloud
Moving Windows Applications to the CloudMoving Windows Applications to the Cloud
Moving Windows Applications to the Cloud
 
Drupal Site Hosting and Management: Acquia Case Studies from the Frontlines
Drupal Site Hosting and Management: Acquia Case Studies from the FrontlinesDrupal Site Hosting and Management: Acquia Case Studies from the Frontlines
Drupal Site Hosting and Management: Acquia Case Studies from the Frontlines
 
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
 
Scaling up to 30M users - The Wix Story
Scaling up to 30M users - The Wix StoryScaling up to 30M users - The Wix Story
Scaling up to 30M users - The Wix Story
 
SAP Teched 2012 Session Tec3438 Automate IaaS SAP deployments
SAP Teched 2012 Session Tec3438 Automate IaaS SAP deploymentsSAP Teched 2012 Session Tec3438 Automate IaaS SAP deployments
SAP Teched 2012 Session Tec3438 Automate IaaS SAP deployments
 
Managing Performance in the Cloud
Managing Performance in the CloudManaging Performance in the Cloud
Managing Performance in the Cloud
 
Service-Oriented Design and Implement with Rails3
Service-Oriented Design and Implement with Rails3Service-Oriented Design and Implement with Rails3
Service-Oriented Design and Implement with Rails3
 
Get A Head on Your Repository
Get A Head on Your RepositoryGet A Head on Your Repository
Get A Head on Your Repository
 
Lift Introduction
Lift IntroductionLift Introduction
Lift Introduction
 
Harvard it summit 2016 - opencast in the cloud at harvard dce- live and on-d...
Harvard it summit 2016  - opencast in the cloud at harvard dce- live and on-d...Harvard it summit 2016  - opencast in the cloud at harvard dce- live and on-d...
Harvard it summit 2016 - opencast in the cloud at harvard dce- live and on-d...
 
Automated Configuration & Deployment of Atlassian Applications
Automated Configuration & Deployment of Atlassian ApplicationsAutomated Configuration & Deployment of Atlassian Applications
Automated Configuration & Deployment of Atlassian Applications
 
Operations for databases – the agile/devops journey
Operations for databases – the agile/devops journeyOperations for databases – the agile/devops journey
Operations for databases – the agile/devops journey
 
SQL Server Disaster Recovery on Azure - SQL Saturday 921
SQL Server Disaster Recovery on Azure - SQL Saturday 921SQL Server Disaster Recovery on Azure - SQL Saturday 921
SQL Server Disaster Recovery on Azure - SQL Saturday 921
 
Spark SQL & Machine Learning - A Practical Demonstration
Spark SQL & Machine Learning - A Practical DemonstrationSpark SQL & Machine Learning - A Practical Demonstration
Spark SQL & Machine Learning - A Practical Demonstration
 

Andere mochten auch

Social Media, Journalism and Branding
Social Media, Journalism and BrandingSocial Media, Journalism and Branding
Social Media, Journalism and BrandingMandy Jenkins
 
Lacoste (English version)
Lacoste (English version)Lacoste (English version)
Lacoste (English version)Eitan Rosenthal
 
Tananyagkészítő alkalmazások a differenciálás szolgálatában
Tananyagkészítő alkalmazások a differenciálás szolgálatábanTananyagkészítő alkalmazások a differenciálás szolgálatában
Tananyagkészítő alkalmazások a differenciálás szolgálatábanSzilvia Tóth-Mózer
 
Hike the Salth Paths in Italy: ancient trails from Piedmont to the coast.
Hike the Salth Paths in Italy: ancient trails from Piedmont to the coast.Hike the Salth Paths in Italy: ancient trails from Piedmont to the coast.
Hike the Salth Paths in Italy: ancient trails from Piedmont to the coast.Cinzia Gallia Schlicksup
 
Branding for Journalists
Branding for JournalistsBranding for Journalists
Branding for JournalistsMandy Jenkins
 
Social Media for News Brands
Social Media for News BrandsSocial Media for News Brands
Social Media for News BrandsMandy Jenkins
 
Markkinointiviestintä – Mitä tehdä itse, mitä ulkoistaa
Markkinointiviestintä – Mitä tehdä itse, mitä ulkoistaa Markkinointiviestintä – Mitä tehdä itse, mitä ulkoistaa
Markkinointiviestintä – Mitä tehdä itse, mitä ulkoistaa Worldcom Public Relations Group
 
Adatvizualizáció online eszközökkel
Adatvizualizáció online eszközökkelAdatvizualizáció online eszközökkel
Adatvizualizáció online eszközökkelSzilvia Tóth-Mózer
 
01 03 Cagliari
01 03 Cagliari01 03 Cagliari
01 03 CagliariClubIN
 
Webcare sho oxfamnovib
Webcare sho oxfamnovibWebcare sho oxfamnovib
Webcare sho oxfamnovibSMC070
 
Breaking News and Social Verification - #ONACamp
Breaking News and Social Verification - #ONACampBreaking News and Social Verification - #ONACamp
Breaking News and Social Verification - #ONACampMandy Jenkins
 
World Usability Day 2014 - Keene State College - Usable Documentation - Kevin...
World Usability Day 2014 - Keene State College - Usable Documentation - Kevin...World Usability Day 2014 - Keene State College - Usable Documentation - Kevin...
World Usability Day 2014 - Keene State College - Usable Documentation - Kevin...Braun Interactive
 
Sreejith Sr.Software Engineer Java J2 Ee 4 Years
Sreejith Sr.Software Engineer Java J2 Ee 4 YearsSreejith Sr.Software Engineer Java J2 Ee 4 Years
Sreejith Sr.Software Engineer Java J2 Ee 4 Yearssreejith82
 
生活拍樂趣 (二) 拍出你的美食樂趣
生活拍樂趣 (二) 拍出你的美食樂趣生活拍樂趣 (二) 拍出你的美食樂趣
生活拍樂趣 (二) 拍出你的美食樂趣Huang Yu Ming
 
Why It's An Exciting Time to Be a Female Journalist
Why It's An Exciting Time to Be a Female JournalistWhy It's An Exciting Time to Be a Female Journalist
Why It's An Exciting Time to Be a Female JournalistMandy Jenkins
 
Building Your Audience on Social Media
Building Your Audience on Social MediaBuilding Your Audience on Social Media
Building Your Audience on Social MediaMandy Jenkins
 
02 01 Modena
02 01 Modena02 01 Modena
02 01 ModenaClubIN
 

Andere mochten auch (20)

Social Media, Journalism and Branding
Social Media, Journalism and BrandingSocial Media, Journalism and Branding
Social Media, Journalism and Branding
 
Lacoste (English version)
Lacoste (English version)Lacoste (English version)
Lacoste (English version)
 
Tananyagkészítő alkalmazások a differenciálás szolgálatában
Tananyagkészítő alkalmazások a differenciálás szolgálatábanTananyagkészítő alkalmazások a differenciálás szolgálatában
Tananyagkészítő alkalmazások a differenciálás szolgálatában
 
Hike the Salth Paths in Italy: ancient trails from Piedmont to the coast.
Hike the Salth Paths in Italy: ancient trails from Piedmont to the coast.Hike the Salth Paths in Italy: ancient trails from Piedmont to the coast.
Hike the Salth Paths in Italy: ancient trails from Piedmont to the coast.
 
Branding for Journalists
Branding for JournalistsBranding for Journalists
Branding for Journalists
 
Social Media for News Brands
Social Media for News BrandsSocial Media for News Brands
Social Media for News Brands
 
Markkinointiviestintä – Mitä tehdä itse, mitä ulkoistaa
Markkinointiviestintä – Mitä tehdä itse, mitä ulkoistaa Markkinointiviestintä – Mitä tehdä itse, mitä ulkoistaa
Markkinointiviestintä – Mitä tehdä itse, mitä ulkoistaa
 
Adatvizualizáció online eszközökkel
Adatvizualizáció online eszközökkelAdatvizualizáció online eszközökkel
Adatvizualizáció online eszközökkel
 
01 03 Cagliari
01 03 Cagliari01 03 Cagliari
01 03 Cagliari
 
Webcare sho oxfamnovib
Webcare sho oxfamnovibWebcare sho oxfamnovib
Webcare sho oxfamnovib
 
Breaking News and Social Verification - #ONACamp
Breaking News and Social Verification - #ONACampBreaking News and Social Verification - #ONACamp
Breaking News and Social Verification - #ONACamp
 
World Usability Day 2014 - Keene State College - Usable Documentation - Kevin...
World Usability Day 2014 - Keene State College - Usable Documentation - Kevin...World Usability Day 2014 - Keene State College - Usable Documentation - Kevin...
World Usability Day 2014 - Keene State College - Usable Documentation - Kevin...
 
Sreejith Sr.Software Engineer Java J2 Ee 4 Years
Sreejith Sr.Software Engineer Java J2 Ee 4 YearsSreejith Sr.Software Engineer Java J2 Ee 4 Years
Sreejith Sr.Software Engineer Java J2 Ee 4 Years
 
Saba
SabaSaba
Saba
 
Network Summary
Network SummaryNetwork Summary
Network Summary
 
生活拍樂趣 (二) 拍出你的美食樂趣
生活拍樂趣 (二) 拍出你的美食樂趣生活拍樂趣 (二) 拍出你的美食樂趣
生活拍樂趣 (二) 拍出你的美食樂趣
 
Funny Traffic Signs
Funny Traffic SignsFunny Traffic Signs
Funny Traffic Signs
 
Why It's An Exciting Time to Be a Female Journalist
Why It's An Exciting Time to Be a Female JournalistWhy It's An Exciting Time to Be a Female Journalist
Why It's An Exciting Time to Be a Female Journalist
 
Building Your Audience on Social Media
Building Your Audience on Social MediaBuilding Your Audience on Social Media
Building Your Audience on Social Media
 
02 01 Modena
02 01 Modena02 01 Modena
02 01 Modena
 

Ähnlich wie Lessons Learned from a 2-year-old Play App

Apache Cayenne: a Java ORM Alternative
Apache Cayenne: a Java ORM AlternativeApache Cayenne: a Java ORM Alternative
Apache Cayenne: a Java ORM AlternativeAndrus Adamchik
 
Drupal status report for all staff day
Drupal status report for all staff dayDrupal status report for all staff day
Drupal status report for all staff daysbclapp
 
Geek Sync | Deployment and Management of Complex Azure Environments
Geek Sync | Deployment and Management of Complex Azure EnvironmentsGeek Sync | Deployment and Management of Complex Azure Environments
Geek Sync | Deployment and Management of Complex Azure EnvironmentsIDERA Software
 
OpenStack Documentation in the Open
OpenStack Documentation in the OpenOpenStack Documentation in the Open
OpenStack Documentation in the OpenAnne Gentle
 
Going Agile: Brought to You by the Public Broadcasting System - Atlassian Sum...
Going Agile: Brought to You by the Public Broadcasting System - Atlassian Sum...Going Agile: Brought to You by the Public Broadcasting System - Atlassian Sum...
Going Agile: Brought to You by the Public Broadcasting System - Atlassian Sum...Atlassian
 
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksBuilding Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksFITC
 
DrupalSouth 2015 - Performance: Not an Afterthought
DrupalSouth 2015 - Performance: Not an AfterthoughtDrupalSouth 2015 - Performance: Not an Afterthought
DrupalSouth 2015 - Performance: Not an AfterthoughtNick Santamaria
 
OpenStack Doc Overview for Boot Camp
OpenStack Doc Overview for Boot CampOpenStack Doc Overview for Boot Camp
OpenStack Doc Overview for Boot CampAnne Gentle
 
USG Summit - September 2014 - Web Management using Drupal
USG Summit - September 2014 - Web Management using DrupalUSG Summit - September 2014 - Web Management using Drupal
USG Summit - September 2014 - Web Management using DrupalEric Sembrat
 
Front End page speed performance improvements for Drupal
Front End page speed performance improvements for DrupalFront End page speed performance improvements for Drupal
Front End page speed performance improvements for DrupalPromet Source
 
The Great Consolidation - Entertainment Weekly Migration Case Study - SANDcam...
The Great Consolidation - Entertainment Weekly Migration Case Study - SANDcam...The Great Consolidation - Entertainment Weekly Migration Case Study - SANDcam...
The Great Consolidation - Entertainment Weekly Migration Case Study - SANDcam...Jon Peck
 
Architecting for Huper Growth and Great Engineering Culture
Architecting for Huper Growth and Great Engineering CultureArchitecting for Huper Growth and Great Engineering Culture
Architecting for Huper Growth and Great Engineering CultureSARCCOM
 
Architecting for Hyper Growth and Great Engineering Culture
Architecting for Hyper Growth and Great Engineering CultureArchitecting for Hyper Growth and Great Engineering Culture
Architecting for Hyper Growth and Great Engineering Cultureifnu bima
 
Single Page Applications - Desert Code Camp 2012
Single Page Applications - Desert Code Camp 2012Single Page Applications - Desert Code Camp 2012
Single Page Applications - Desert Code Camp 2012Adam Mokan
 
Docker for the enterprise
Docker for the enterpriseDocker for the enterprise
Docker for the enterpriseBert Poller
 
Stay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolithStay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolithMarkus Eisele
 
Yow Conference Dec 2013 Netflix Workshop Slides with Notes
Yow Conference Dec 2013 Netflix Workshop Slides with NotesYow Conference Dec 2013 Netflix Workshop Slides with Notes
Yow Conference Dec 2013 Netflix Workshop Slides with NotesAdrian Cockcroft
 
Whitepages Practical Experience Converting from Ruby to Reactive
Whitepages Practical Experience Converting from Ruby to ReactiveWhitepages Practical Experience Converting from Ruby to Reactive
Whitepages Practical Experience Converting from Ruby to ReactiveDragos Manolescu
 
UI Dev in Big data world using open source
UI Dev in Big data world using open sourceUI Dev in Big data world using open source
UI Dev in Big data world using open sourceTech Triveni
 

Ähnlich wie Lessons Learned from a 2-year-old Play App (20)

Apache Cayenne: a Java ORM Alternative
Apache Cayenne: a Java ORM AlternativeApache Cayenne: a Java ORM Alternative
Apache Cayenne: a Java ORM Alternative
 
Apereo OAE - Bootcamp
Apereo OAE - BootcampApereo OAE - Bootcamp
Apereo OAE - Bootcamp
 
Drupal status report for all staff day
Drupal status report for all staff dayDrupal status report for all staff day
Drupal status report for all staff day
 
Geek Sync | Deployment and Management of Complex Azure Environments
Geek Sync | Deployment and Management of Complex Azure EnvironmentsGeek Sync | Deployment and Management of Complex Azure Environments
Geek Sync | Deployment and Management of Complex Azure Environments
 
OpenStack Documentation in the Open
OpenStack Documentation in the OpenOpenStack Documentation in the Open
OpenStack Documentation in the Open
 
Going Agile: Brought to You by the Public Broadcasting System - Atlassian Sum...
Going Agile: Brought to You by the Public Broadcasting System - Atlassian Sum...Going Agile: Brought to You by the Public Broadcasting System - Atlassian Sum...
Going Agile: Brought to You by the Public Broadcasting System - Atlassian Sum...
 
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksBuilding Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
 
DrupalSouth 2015 - Performance: Not an Afterthought
DrupalSouth 2015 - Performance: Not an AfterthoughtDrupalSouth 2015 - Performance: Not an Afterthought
DrupalSouth 2015 - Performance: Not an Afterthought
 
OpenStack Doc Overview for Boot Camp
OpenStack Doc Overview for Boot CampOpenStack Doc Overview for Boot Camp
OpenStack Doc Overview for Boot Camp
 
USG Summit - September 2014 - Web Management using Drupal
USG Summit - September 2014 - Web Management using DrupalUSG Summit - September 2014 - Web Management using Drupal
USG Summit - September 2014 - Web Management using Drupal
 
Front End page speed performance improvements for Drupal
Front End page speed performance improvements for DrupalFront End page speed performance improvements for Drupal
Front End page speed performance improvements for Drupal
 
The Great Consolidation - Entertainment Weekly Migration Case Study - SANDcam...
The Great Consolidation - Entertainment Weekly Migration Case Study - SANDcam...The Great Consolidation - Entertainment Weekly Migration Case Study - SANDcam...
The Great Consolidation - Entertainment Weekly Migration Case Study - SANDcam...
 
Architecting for Huper Growth and Great Engineering Culture
Architecting for Huper Growth and Great Engineering CultureArchitecting for Huper Growth and Great Engineering Culture
Architecting for Huper Growth and Great Engineering Culture
 
Architecting for Hyper Growth and Great Engineering Culture
Architecting for Hyper Growth and Great Engineering CultureArchitecting for Hyper Growth and Great Engineering Culture
Architecting for Hyper Growth and Great Engineering Culture
 
Single Page Applications - Desert Code Camp 2012
Single Page Applications - Desert Code Camp 2012Single Page Applications - Desert Code Camp 2012
Single Page Applications - Desert Code Camp 2012
 
Docker for the enterprise
Docker for the enterpriseDocker for the enterprise
Docker for the enterprise
 
Stay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolithStay productive_while_slicing_up_the_monolith
Stay productive_while_slicing_up_the_monolith
 
Yow Conference Dec 2013 Netflix Workshop Slides with Notes
Yow Conference Dec 2013 Netflix Workshop Slides with NotesYow Conference Dec 2013 Netflix Workshop Slides with Notes
Yow Conference Dec 2013 Netflix Workshop Slides with Notes
 
Whitepages Practical Experience Converting from Ruby to Reactive
Whitepages Practical Experience Converting from Ruby to ReactiveWhitepages Practical Experience Converting from Ruby to Reactive
Whitepages Practical Experience Converting from Ruby to Reactive
 
UI Dev in Big data world using open source
UI Dev in Big data world using open sourceUI Dev in Big data world using open source
UI Dev in Big data world using open source
 

Mehr von Mike Slinn

Evaluating Blockchain Companies
Evaluating Blockchain CompaniesEvaluating Blockchain Companies
Evaluating Blockchain CompaniesMike Slinn
 
Fullsize Smart Contracts That Learn
Fullsize Smart Contracts That Learn Fullsize Smart Contracts That Learn
Fullsize Smart Contracts That Learn Mike Slinn
 
Dotty (Scala 3) Preview
Dotty (Scala 3) PreviewDotty (Scala 3) Preview
Dotty (Scala 3) PreviewMike Slinn
 
EmpathyWorks – Towards an Event-Based Simulation/ML Hybrid Platform
EmpathyWorks – Towards an Event-Based Simulation/ML Hybrid PlatformEmpathyWorks – Towards an Event-Based Simulation/ML Hybrid Platform
EmpathyWorks – Towards an Event-Based Simulation/ML Hybrid PlatformMike Slinn
 
Smart Contracts That Learn
Smart Contracts That LearnSmart Contracts That Learn
Smart Contracts That LearnMike Slinn
 
Polyglot Ethereum - Smart Contracts for the Enterprise
Polyglot Ethereum - Smart Contracts for the EnterprisePolyglot Ethereum - Smart Contracts for the Enterprise
Polyglot Ethereum - Smart Contracts for the EnterpriseMike Slinn
 
Composable Futures with Akka 2.0
Composable Futures with Akka 2.0Composable Futures with Akka 2.0
Composable Futures with Akka 2.0Mike Slinn
 
Scala adoption by enterprises
Scala adoption by enterprisesScala adoption by enterprises
Scala adoption by enterprisesMike Slinn
 
Sbt, idea and eclipse
Sbt, idea and eclipseSbt, idea and eclipse
Sbt, idea and eclipseMike Slinn
 
Adobe Flash Platform for the Enterprise
Adobe Flash Platform for the EnterpriseAdobe Flash Platform for the Enterprise
Adobe Flash Platform for the EnterpriseMike Slinn
 

Mehr von Mike Slinn (11)

Evaluating Blockchain Companies
Evaluating Blockchain CompaniesEvaluating Blockchain Companies
Evaluating Blockchain Companies
 
Fullsize Smart Contracts That Learn
Fullsize Smart Contracts That Learn Fullsize Smart Contracts That Learn
Fullsize Smart Contracts That Learn
 
Dotty (Scala 3) Preview
Dotty (Scala 3) PreviewDotty (Scala 3) Preview
Dotty (Scala 3) Preview
 
EmpathyWorks – Towards an Event-Based Simulation/ML Hybrid Platform
EmpathyWorks – Towards an Event-Based Simulation/ML Hybrid PlatformEmpathyWorks – Towards an Event-Based Simulation/ML Hybrid Platform
EmpathyWorks – Towards an Event-Based Simulation/ML Hybrid Platform
 
Smart Contracts That Learn
Smart Contracts That LearnSmart Contracts That Learn
Smart Contracts That Learn
 
Polyglot Ethereum - Smart Contracts for the Enterprise
Polyglot Ethereum - Smart Contracts for the EnterprisePolyglot Ethereum - Smart Contracts for the Enterprise
Polyglot Ethereum - Smart Contracts for the Enterprise
 
Composable Futures with Akka 2.0
Composable Futures with Akka 2.0Composable Futures with Akka 2.0
Composable Futures with Akka 2.0
 
Scala adoption by enterprises
Scala adoption by enterprisesScala adoption by enterprises
Scala adoption by enterprises
 
Sbt, idea and eclipse
Sbt, idea and eclipseSbt, idea and eclipse
Sbt, idea and eclipse
 
Hanuman
HanumanHanuman
Hanuman
 
Adobe Flash Platform for the Enterprise
Adobe Flash Platform for the EnterpriseAdobe Flash Platform for the Enterprise
Adobe Flash Platform for the Enterprise
 

Kürzlich hochgeladen

How is AI changing journalism? (v. April 2024)
How is AI changing journalism? (v. April 2024)How is AI changing journalism? (v. April 2024)
How is AI changing journalism? (v. April 2024)Damian Radcliffe
 
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)Delhi Call girls
 
✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663
✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663
✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663Call Girls Mumbai
 
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.soniya singh
 
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort ServiceEnjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort ServiceDelhi Call girls
 
Networking in the Penumbra presented by Geoff Huston at NZNOG
Networking in the Penumbra presented by Geoff Huston at NZNOGNetworking in the Penumbra presented by Geoff Huston at NZNOG
Networking in the Penumbra presented by Geoff Huston at NZNOGAPNIC
 
Nanded City ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready ...
Nanded City ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready ...Nanded City ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready ...
Nanded City ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready ...tanu pandey
 
CALL ON ➥8923113531 🔝Call Girls Lucknow Lucknow best sexual service Online
CALL ON ➥8923113531 🔝Call Girls Lucknow Lucknow best sexual service OnlineCALL ON ➥8923113531 🔝Call Girls Lucknow Lucknow best sexual service Online
CALL ON ➥8923113531 🔝Call Girls Lucknow Lucknow best sexual service Onlineanilsa9823
 
On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024APNIC
 
Call Now ☎ 8264348440 !! Call Girls in Sarai Rohilla Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Sarai Rohilla Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Sarai Rohilla Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Sarai Rohilla Escort Service Delhi N.C.R.soniya singh
 
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024APNIC
 
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Call Girls in Nagpur High Profile
 
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call GirlVIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girladitipandeya
 
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableCall Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableSeo
 

Kürzlich hochgeladen (20)

How is AI changing journalism? (v. April 2024)
How is AI changing journalism? (v. April 2024)How is AI changing journalism? (v. April 2024)
How is AI changing journalism? (v. April 2024)
 
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
 
✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663
✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663
✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663
 
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
 
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
 
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
 
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort ServiceEnjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
 
Networking in the Penumbra presented by Geoff Huston at NZNOG
Networking in the Penumbra presented by Geoff Huston at NZNOGNetworking in the Penumbra presented by Geoff Huston at NZNOG
Networking in the Penumbra presented by Geoff Huston at NZNOG
 
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
Nanded City ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready ...
Nanded City ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready ...Nanded City ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready ...
Nanded City ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready ...
 
Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
CALL ON ➥8923113531 🔝Call Girls Lucknow Lucknow best sexual service Online
CALL ON ➥8923113531 🔝Call Girls Lucknow Lucknow best sexual service OnlineCALL ON ➥8923113531 🔝Call Girls Lucknow Lucknow best sexual service Online
CALL ON ➥8923113531 🔝Call Girls Lucknow Lucknow best sexual service Online
 
On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024
 
Call Now ☎ 8264348440 !! Call Girls in Sarai Rohilla Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Sarai Rohilla Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Sarai Rohilla Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Sarai Rohilla Escort Service Delhi N.C.R.
 
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
 
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
 
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call GirlVIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
 
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
 
Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...
Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...
Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...
 
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableCall Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
 

Lessons Learned from a 2-year-old Play App

  • 1. Lessons Learned from a 2-year-old Play App Aug 14, 2015 Scala By The Bay Oakland CA Play Architecture, Implementation, Shiny Objects, and Proposal
  • 2. • About me • About the Cadenza web app that powers ScalaCourses.com • Brief History of Play Framework • Architectural Features for Multimedia Scalability • Standards and Processes Outline
  • 3. Who is this guy, and why should I care? About Mike Slinn
  • 4. About Mike Slinn – Today • Architect and lead developer of Cadenza, the webapp that powers ScalaCourses.com • Co-ordinates the ScalaCourses.com instructors • Contributor to the Scala / Play courses provided through ScalaCourses.com
  • 5. About Mike Slinn – Selected History • Co-founder of Vancouver AutoCAD User Society (“Oldest and Most Dangerous AutoCAD User Group”, world’s largest) • Co-Chair of Silicon Valley Ruby Conference (world’s largest) • Former primary organizer Bay Area Scala Enthusiasts (grew to world’s largest) • Former organizer of SF Scala , Scala for Startups
  • 6. About Mike Slinn – Author & Expert • Wrote 3 books, including “Composable Futures With Akka 2.0” • Wrote over 5 dozen technical articles for computer magazines • Former product marketing manager at Borland for C, C++, .NET & Ruby on Rails IDEs • Traveled the world for decades teaching computer software commercially • Now travel much less and uses video conferencing instead • Often retained as a software expert for court cases and arbitrations involving software
  • 9. ScalaCourses.com • Best learning experience for Scala and Play Framework • Most cost-effective option • Material is maintained up-to-date • Students have access for a year at a time • We are looking for course authors
  • 10. "Better to train outstanding people into new areas than to accept marginal people with some skills" – NASA
  • 11. Cadenza – Powers ScalaCourses.com • ScalaCourses.com has been serving online Scala and Play training material for 2+ years • Cadenza is: • Online content editor and multimedia delivery mechanism • Play Framework 2 application • Written in Scala, uses Akka, Slick, AWS and Postgres • Originally deployed app to Heroku, now on Digital Ocean (1GB droplet) • Still using Heroku database • Some functionality is broken out into microservices • View free Cadenza course at ScalaCourses.com to learn more
  • 12. Cadenza Features – A&A • Sophisticated and fine-grained authentication and authorization (A&A) • Hierarchical permissions control access to hierarchy of entities • Entities: Lecture, Section, Course, Group, PublishingConfiguration, User, Roles • Next release adds: StudyGuide, Exam • Roles: Visitor, Student, TA, Instructor, Videographer, CopyEditor, Publisher, SuperUser • Deep integration of webapp framework, A&A dependencies and persistence mechanism • Breaking changes in Play Framework seriously impacted plugin developers, which locked us in Play 2.2.6 – more on this later
  • 13. Architectural Features for Multimedia Scalability • Cadenza serves large amounts of multimedia data quickly and economically • Play app does not handle any data • Play app only handles authorization and authentication • Use AWS S3 and CloudFront to serve data • Signed URLs • Avoid enumeratees, very slow; perhaps Akka-HTTP for Play will eventually be an alternative?
  • 14. Cadenza Features – Online Editors • Quick demo of lecture editor and section organizer
  • 15. Cadenza Features – Live Content Caching • Content is parsed, summarized and cached • Lots of lazy vals, memoization and usage of caches • Decision of which caching mechanism and cache type to use depends on artifact purpose • Tabs in web pages are demand-loaded to increase responsiveness and decrease system load • Students can download a course notes by printing to PDF on demand • Current content is printed • Content is aggregated by course
  • 16. Cadenza Features – White Label Branding • Designed to be branded for third parties who use Cadenza for course authoring and delivery of their own courses
  • 17. Cadenza Features – Asset Controller • Videos and images are delivered by AWS CloudFront • Cadenza’s asset manager only delivers assets when in development mode • AWS signed URLs provide time-limited access to remote assets • App is optimized for data retrieval (read access), so students do not present a significant load • A separate instance for course authoring is recommended, with more memory
  • 18. Google Guava to the rescue! Concurrency, Persistence & Caching
  • 19. Cadenza Features – Database • No joined tables; domain model is created in memory • Cadenza’s AbstractTrainingEntity trait provides write-through caching support • Most database requests are served from local in-memory domain model cache • Domain model is immutable; stale entities are flushed from cache and replaced as required • Fast and scalable • “Immutable domain model with write-through caching” (IMWC) pattern is easy to program to • IMWC requires a deep integration of webapp framework and database
  • 20. Cadenza Features – Immutable / Lazy Domain Model
  • 21. Cadenza Features – Immutable / Lazy Domain Model • A lazily instantiated, immutable domain model starts fast • Naturally optimized for read access • Naturally supports concurrency • Stateless so it scales horizontally • Best when coupled with or implemented by local cache • Must differentiate between: • Core domain model, running out of local cache • User data, run from a distributed cache or loaded from a database • Transient data, not cached
  • 22. Caches and Concurrency • The Play cache interface is not threadsafe (affects all implementations, such as EHCache). • This does not matter if multiple threads attempt to set the same value, however. • Better to implement a threadsafe cache using Google Guava’s CacheBuilder.
  • 23. Cadenza Front Page (Cached) def apply(pubConf: PublisherConfig, referrer: String="") (implicit request: RequestHeader): Html = views.html.main(Model.frontPageTitle, enableGoogleAnalytics=true) { Html.empty } { Html(s"""<div class="row-fluid"> | <div class="span6"> | ${pubConf.cache("courseBlurbs", courseBlurbs)} | </div> | <div class="span6"> | ${ pubConf.comments.getOrElse("") } | </div> |</div> |${ request.flash.get("signedUp").map { _ => signedUp }.mkString("n") } |""".stripMargin) }
  • 24. Those ignorant of history are doomed to repeat it Brief History of Play Framework
  • 25. Play Framework is Popular
  • 26. Play versions • 1.0 Oct 19 2009 • 1.1 Nov 01 2010 • 1.2 Apr 13 2011 • 2.0 Mar 13 2012 • 2.1.0 Feb 06 2013 • 2.2.0 Sep 20 2013 • 2.3.0 May 30 2014 • 2.4.0 May 26 2015 • 3.0 May 2016 Huge API churn
  • 29. 2012-04-13 - Play 2.0 announced
  • 34. Next year: Play 3.0 • Biggest feature: Reworked dependency injection • No details yet, even though ship date is likely 7 months away. • No indication if CDI 2.0 (Contexts and Dependency Injection), which implements JSR 365, will be supported • Initial reaction to my suggestion was that nothing could be learned from standards
  • 35. Scala Ecosystem generally lacks S&P Standards and Processes
  • 36. Hmm… • Go-Karts - Feel fast, are slow • 747s - Feel slow, are fast • “Ship it!” - Feels fast, is slow • “Test + Document it!” - Feels slow, is fast • “Define standards and engage community” – Feels slow, is powerful • Build the right thing (product management, standards) vs. build the thing right (agile) • High agile velocity without adult supervision => API churn
  • 37.
  • 38. Standards Engage Ecosystems • “Lack of standards threatens to derail the big data innovation train” – Jonas Bonér • Standards also important for Scala ecosystem in general and Play in particular • Jonas only recently has begun to profess the standards religion • The Akka project is the only one within Typesafe that shows evidence of interest in standards
  • 39. Standards and Process • Standards bring people together: core developers, customers, 3rd party developers • Result (of a healthy standards process): • Well thought out specifications • Quality reference implementations • This drives: • Customer adoption • Lower cost of operation • Less API churn
  • 40. Play Framework is Special • Play Framework requires integrating language features, persistence, security, A&A, etc • Integration success metrics are hugely affected by availability of good standards • Change in mindset required: • What can be learned from existing standards? • How can customer usage patterns be codified into standards with competing implementations? • Result: • Huge reduction in API churn • Much greater adoption by enterprises • Much higher quality product
  • 41. Standards and Process Can Be Powerful • Sun was bureaucratic but that allowed them to foster standards • Java is still hugely important decades later as a result • Ruby was initiated by young developers • Disdained standards (our projects are so different that standards do not apply) • Ruby became merely the language that powered Ruby on Rails • 40% drop in demand for Rubyists in 2014, downward trend is continuing • Scala’s ecosystem also lacks standards and a vehicle to provide process
  • 42. Just Enough Bureaucracy • Bureaucracy is boring, but when used appropriately it allows many participants to interact effectively • Project management requires bureaucracy • Release planning • Experimentation prior to making design decisions • Communicating and engaging users • Integration with other products
  • 43. “The bug wasn't ours. It was in an open source project we use, but do not fund or contribute to in any way.” Proposal: Play Framework Foundation
  • 44. Set Play Free! • Open source is becoming even more open – because it has to • Joyent gave away Node.js to the Node.js Foundation • Google gave away all rights for Kubernetes to the Cloud Native Computing Foundation • Backed by Cisco, eBay, Goldman Sachs, IBM, Intel, Joyent, Twitter, Google and Docker • VMware gave away Cloud Foundry to the Cloud Foundry Foundation • All of these foundations are managed by the Linux Foundation, which is now a meta-foundation • Typesafe should give Play a boost by doing the same: The Play Framework Foundation
  • 45.
  • 46.
  • 47.
  • 48. Thank you! • Mike Slinn • mslinn@scalacourses.com • @scalacourses

Hinweis der Redaktion

  1. This immutable domain model is lazily instantiated. Thus, the app starts very quickly, is optimized for read access and supports concurrency without locking. Updating the model takes considerably more computational resources. Lecture.upsert() invokes Section.upsert() which invokes Course.upsert() which invokes Group.upsert() which invokes PublisherConfiguration.upsert()
  2. http://blog.takipi.com/the-top-100-scala-libraries-in-2015-based-on-64562-github-libraries/ Play (@ # 3) much more popular than Spark (@ #35)
  3. Play started as an internal project at Zenexity in 2007 Open source project in 2009 Python build scripts Groovy template language Java based Used archive.org WayBack Machine
  4. 2010-11-01 v1.1 RC3 Fix the bug and hit reload Stateless model ("share nothing") Ready for REST, horizontal scaling. Efficient template system Resolve errors quickly Provides integration with Hibernate, OpenID, Memcached Plugin system. Pure Java Code. Integrates nicely with eclipse or netbeans. Starts fast and runs fast! Plugin system was heavily used, lots of plugins were created, playframework.org hosted them
  5. Top of page says "Play framework is joining the Typesafe Stack“ V1.x users were thrown under the bus – v2 was completely incompatible, there was no migration strategy except a total rewrite using a different language and build system V1 productivity was due to: Off-the-shelf modules that could be customized Quick turnaround Expressive language V2+ essentially forgot about modules/plugins
  6. Complete rewrite. Huge number of features, many of which were never completed (for example, asset pipeline) Released too early, chaos has yet to subside. Front page: lightweight, stateless, web-friendly architecture and features predictable and minimal resource consumption (CPU, memory, threads) for highly-scalable applications - thanks to its reactive model, based on Iteratee IO Iteratees are a producer/consumer implementation, with very poor performance and are difficult to work with. No mention of plugins, and modules page says: "These modules are for the Play 1.x series only. Play 2.0 modules can be hosted anywhere on any Ivy, Maven or Git repository. We will add a directory for them here shortly." ... never happened to this day. Ready to use with latest Web technologies like Less CSS, Google Closure and CoffeeScript. Philosophy page said: Built for asynchronous programming Focused on type safety provides native Akka support for highly-distributed systems templates and route files will be easier to package and reuse (not true yet) Native support for Java and Scala new Anorm SQL component container-less deployment (traded in Tomcat for Docker / Heroku / etc) SBT build system Datastore and model integration: built-in relational database access libraries such as Ebean, JPA and Anorm Docs said: “A type safe DSL to generate SQL is a mistake” https://web.archive.org/web/20120317020635/http://www.playframework.org/documentation/2.0/ScalaAnorm Zenexity’s DB philosophy was at odds with Typesafe’s. Today, the result is a confusing set of poorly supported mechanisms. Start of yearly major release schedule Meet the team: Guillaume Bort, co-founder of Zenexity Nicolas Leroux, technical director at Lunatech Research Erwan Loisant, Senior Architect at Zenexity Peter Hilton, Operations Director at Lunatech Research Morten Kjetland, consultant Peter Hausel, Typesafe Sadek Drobi, CTO of Zenexity (told me he was principal mover behind Scala support in v2) Maxime Dantec, Zenexity UI director
  7. 2013-05-18 .org now redirects to .com v2.1.1 "The High Velocity Web Framework For Java and Scala" Main message: Play Framework makes it easy to build web applications with Java & Scala. Play is lightweight, stateless, web-friendly architecture, minimal resource consumption for highly-scalable applications. JSON is a first class citizen Websockets, Comet, EventSource Hype: RESTful by default Asset Compiler for CoffeeScript, LESS, etc Extensive NoSQL & Big Data Support Numerous Play plugins (for Play 1.x, docs for Play 2 plugins were incomplete, few people bothered to reverse engineer Play plugins) Zenexity logo is still shown at bottom of page next to Typesafe logo.
  8. play command was replaced by activator Most changes were poorly communicated in advance and surprised users, not well documented. Play 2.3 release did not mesh well with nearly concurrent Scala 2.11 release Some important 3rd party developers gave up when this version was released; their enhancements still have no replacements. Contributors, in the order listed: Guillaume Bort Alexandre Chatiron Rich Dougherty Sadek Drobi Arthur Gautier Peter Hausel Peter Hilton Christopher Hunt, Typesafe Takafumi Ikeda Morten Kjetland Nicolas Leroux Erwan Loisant, Senior Architect at Zenexity Ben McCann Greg Methvin Nilanjan Raychaudhuri James Roper, tech lead for the Play team at Typesafe Will Sargent Josh Suereth Peter Vlugter Pascal Voitot Cédric Chantepie
  9. Current Temporary Modules directory in 2.4.0 docs lists a bunch of stuff that is mostly incompatible with 2.x, and almost nothing that works with 2.4.x Roadmap effectively abandoned, communication with 3rd party developers at all-time low