2 Years of. Real World FP at Scala Developer at
|
|
- Stephanie Lane
- 5 years ago
- Views:
Transcription
1 2 Years of λ Real World FP at Scala Developer at
2 Me 14 years 5 years 5 years when possible when bored when forced
3 @ - 3 teams - 17 codebases - 43K LOC Jul 13 Jan 14 Jul 14 Jan 15
4 Why Functional Programming?
5 Compelling, tangible software engineering benefits
6 Modularity Abstraction Composability
7 Modular, abstract, composable programs are simple programs
8 Modularity
9 Can you reason about something in isolation?
10 Or do you need to fit everything in your head at once?
11 A B C K Is the cost of replacing B with K just writing K?
12 A KB C Is the cost of replacing B with K just writing K?
13 glue A K KB glue C K or rewriting half the program?
14 A pure function is just input output; no side effects You can tell what it does without Looking at surrounding context.
15 Consider: Let s parse a string like Richmond, VIC 3121 def parselocation(str: String): Location = { val parts = str.split(, ) val secondstr = parts(1) val parts2 = secondstr.split( ) Location( parts(0), parts2(0), parts(1).toint) }
16 Possible errors: 1 def parselocation(str: String): Location = { val parts = str.split(, ) val secondstr = parts(1) val parts2 = secondstr.split( ) Location( parts(0), parts2(0), parts(1).toint) } Could be null
17 Possible errors: 2 def parselocation(str: String): Location = { val parts = str.split(, ) val secondstr = parts(1) val parts2 = secondstr.split( ) Location( parts(0), parts2(0), parts(1).toint) } Might not have enough elements
18 Possible errors: 3 def parselocation(str: String): Location = { val parts = str.split(, ) val secondstr = parts(1) val parts2 = secondstr.split( ) Location( parts(0), parts2(0), parts(1).toint) } Might not have enough elements
19 Possible errors: 4 def parselocation(str: String): Location = { val parts = str.split(, ) val secondstr = parts(1) val parts2 = secondstr.split( ) Location( parts(0), parts2(0), parts(1).toint) } Might not have enough elements
20 Possible errors: 5 def parselocation(str: String): Location = { val parts = str.split(, ) val secondstr = parts(1) val parts2 = secondstr.split( ) Location( parts(0), parts2(0), parts(1).toint) } Might not have enough elements
21 Possible errors: 6 def parselocation(str: String): Location = { val parts = str.split(, ) val secondstr = parts(1) val parts2 = secondstr.split( ) Location( parts(0), parts2(0), parts(1).toint) } Might not be an int
22 Possible errors: = 9 def dosomethingelse(): Unit = { //...Do other stuff parselocation( Melbourne, VIC 3000 ) } 3 6
23 Possible errors: = 13 def anotherthing(): Unit = { //...Do even more stuff dosomethingelse() } 4 9
24 Code inherits all the errors and side-effects of code it calls. Local reasoning becomes impossible; modularity is lost.
25 Possible errors: 0 def parselocation(str: String): Option[Location] = { val parts = str.split(,") for { locality <- parts.optget(0) thereststr <- parts.optget(1) therest = thereststr.split(" ") subdivision <- therest.optget(0) postcodestr <- therest.optget(1) postcode <- postcodestr.opttoint } yield Location(locality, subdivision, postcode) }
26 All possibilities have been elevated into the type system Local reasoning is possible! Local reasoning is possible about things that call it, etc
27 Abstraction
28 Know as little as you need
29 Know as little as you need Produce as little as you can
30 def sumints( list: List[Int]): Int = { } var result = 0 for (x <- list) { result = result + x } return result
31 def flatten[a]( list: List[List[A]]): List[A] = { } var result = List() for (x <- list) { result = result ++ x } return result
32 def all[a]( list: List[Boolean]): Boolean = { } var result = true for (x <- list) { result = result && x } return result
33 def sumints( list: List[Int]): Int = { } var result = 0 for (x <- list) { result = result + x } return result
34 def flatten[a]( list: List[List[A]]): List[A] = { } var result = List() for (x <- list) { result = result ++ x } return result
35 def all[a]( list: List[Boolean]): Boolean = { } var result = true for (x <- list) { result = result && x } return result
36 Extract the essence! trait Monoid[M] { def zero: M def append(m1: M, m2: M): M }
37 def fold[m](list: List[M]) (implicit m: Monoid[M]): M = { } var result = m.zero for (x <- list) { result = m.append(result,x) } result
38 def fold[m](list: List[M]) (implicit m: Monoid[M]): M = list.foldleft(m.zero)(m.append)
39 fold(list(1, 2, 3, 4)) 10 fold(list(list("a", "b"), List("c"))) List("a", "b", "c") fold(list(true, true, false, true)) false
40 Abstraction is always a good thing! Less repetition More reuse Less decay, because code can t grow tumours around unnecessary detail
41 Composability
42 Functions compose. A => B B => C C => D D => E
43 Functions compose. A => E
44 Sideways too. A => E X => Y
45 Sideways too. (A,X) => (E,Y)
46 This works in the large, as well as the small! Entire systems can be composable like functions. without side effects
47 Truly composable systems can accrue more and more stuff without getting more complex!
48 Simplicity Modularity Reason locally Abstraction say only what you need, hide everything you don t Composability scale without accruing complexity
49 The human process
50 Software GSD development is a Coffee Tea Quiet time human process Ponies Reconsider! Technical excellence isn t enough!
51
52
53
54
55 Xi an offshore team Team Team Team Team
56 Xi an offshore team Many teams are partly based in Xi an. They re very good, but Communication is hard! It works, but requires great investment of time and money
57 Bottom-up tech decisions
58
59
60
61
62
63
64
65
66
67
68 GET /buzz/5/ POST {"partytime": "5:00"} GET /foo/bar PUT {"mode": "banana"}
69 Architect Mountain
70 Architect Mountain
71 Architect Mountain
72 Architect Mountain Don t forget your velocity Just needs more Agile More meetings, but littler NO No no no no no no no no no no no no no no no no no no no no no no no no no no no no no no no no not like this. Wake up it s a school day
73 Bottom-up tech decisions You have to win
74 Bottom-up tech decisions You have to win
75 Bottom-up tech decisions You have to win
76 Software Paleontology Everyone s got a history
77 Scriptozoic era Mostly Perl
78 Monolithocene epoch Ruby, Java Scriptozoic era Mostly Perl
79 Microservices 2012 Ruby, Scala, JS AWS Monolithocene epoch Ruby, Java Scriptozoic era Mostly Perl
80 Adoption
81 June, 2013
82
83
84
85 λ
86
87 λ λ
88 λ λ λ
89 λ λ λ
90 λ λ
91 λ λ
92 λ
93 Language choice Object Oriented Functional Powerful static types JVM
94 Object Oriented Functional Powerful static types JVM
95 Functional JVM
96 Functional JVM
97 Functional JVM
98 Functional JVM
99 Whatever works for you!
100 The journey
101 Jul 13 Jan 14 1
102 #1 Type LOC Web JSON DB Dep Inj API 6K Play2 Play2 Squeryl / Play2 Constructors
103 #1 Type LOC Web JSON DB Dep Inj API 6K Play2 Play2 Squeryl / Play2 Constructors Learning Investment Mentor Code reviews
104 #1 Type LOC Web JSON DB Dep Inj API 6K Play2 Play2 Squeryl / Play2 Constructors Learning Investment Mentor Code reviews Report card Learning curve Technical result Productivity Sentiment Steep but ok Great; but FWs too heavy OK; slight dip
105 Jul 13 Jan Some infrastructure
106 #2 Type LOC Web JSON DB Dep Inj API 3K Play2 Argonaut Squeryl / Play2 Constructors
107 #2 Type LOC Web JSON DB Dep Inj API 3K Play2 Argonaut Squeryl / Play2 Constructors Learning Investment Almost none
108 #2 Type LOC Web JSON DB Dep Inj API 3K Play2 Argonaut Squeryl / Play2 Constructors!!! Learning Investment Almost none Report card Learning curve Technical result Productivity Sentiment Learning? Needed rework; OK in the end Meh
109 Lesson #1 New tech, mindset requires investment in learning Invest in your people!
110 λ
111 Another team! λ
112 λ We ll have some of that!
113 New team; new ideas! Jul 13 Jan
114 #3,4, 5,6 Type Web app, libs, API x 2 LOC 2K, 3K, 4K, 1K Web JSON DB Dep Inj Unfinagled Argonaut Slick Constructors Learning Investment 2 x Mentor Report card Learning curve Technical result Not bad Great Productivity Sentiment Great
115 Theft & innovation Jul 13 Jan 14 Jul
116 Lesson #2 Having multiple teams is great, because you can steal from each other
117 #7 Type LOC Web JSON DB Dep Inj API 4K Unfinagled Argonaut Slick Monad Transformers
118 #7 Type LOC Web JSON DB Dep Inj API 4K Unfinagled Argonaut Slick Monad Transformers Learning Investment 2 x Mentor
119 #7 Type LOC Web JSON DB Dep Inj API 4K Unfinagled Argonaut Slick Monad Transformers Learning Investment 2 x Mentor Report card Learning curve Technical result Vertical Great Productivity Sentiment Great
120 Monad Transformers Good technical benefits, but Only 2 people could understand the code Experienced engineers felt totally helpless Learning curve way too steep
121 Devops Gurus All-rounders
122 JS / CSS / HTML Gurus All-rounders
123 AWS Gurus All-rounders
124 Scala (originally!) Gurus
125 Scala (now) Gurus Smooth learning curve is utterly essential We need more allrounders We can t leave people behind All-rounders
126 Lesson #3 Familiar, but technically unsound concepts have limited value. However if we can t make a concept learnable, then we can t use it.
127 A Ruby team considers its options λ
128 λ
129 λ
130 A 3 rd team dips its toe in the water Jul 13 Jan 14 Jul
131 #8 Type LOC Web JSON DB Dep Inj Web app 2K Play2 Play2 Anorm Constructors
132 #8 Type LOC Web JSON DB Dep Inj Web app 2K Play2 Play2 Anorm Constructors Learning Investment Trial and error Code Katas
133 #8 Type LOC Web JSON DB Dep Inj Web app 2K Play2 Play2 Anorm Constructors Learning Investment Trial and error Code Katas Report card Learning curve Technical result Productivity Sentiment Steep OK Meh
134 Lesson #4 It s really hard learning from scratch Be prepared for pain up front
135 λ
136 Latest iteration Jul 13 Jan 14 Jul 14 Jan
137 Design trends Inheritance/mixins Static functions
138 Design trends Inheritance/mixins Partial functions Static functions Total functions
139 Design trends Inheritance/mixins Partial functions Exceptions Static functions Total functions Sum types
140 Design trends Inheritance/mixins Partial functions Exceptions Strings/primitives Static functions Total functions Sum types Wrapper types
141 FP Guild Every Thursday, in work hours 7 12 people each week Reading, exercises, talks, live coding
142 #17 Type LOC Web JSON DB Dep Inj API 3K Unfiltered Argonaut Slick Free Monads
143 #17 Type LOC Web JSON DB Dep Inj API 3K Unfiltered Argonaut Slick Free Monads Learning Investment 2 x Mentors Pull Requests Code reviews Pairing FP Guild
144 #17 Type LOC Web JSON DB Dep Inj API 3K Unfiltered Argonaut Slick Free Monads Learning Investment 2 x Mentors Pull Requests Code reviews Pairing FP Guild Report card Learning curve Technical result Productivity Sentiment Smooth Brilliant Great
145 App runtime Server Web Framework Interpreter Pure core Routes Controllers Logic Script Authenticate Use config Get from DB Update DB Log result Actual DB
146 Pure tests Input Output Assert Pure Interpreter Pure core Routes Controllers Logic Script Authenticate Use config Get from DB Update DB Log result
147 Wafer thin E2E tests App runtime Pure core Input Server Web Framework Interpreter Output Assert Actual DB
148 object SearchController { } def getlist(uid: UserId): Script[Response] = { for { searches <- getsearches(uid) cfg <- getconfig results <- addlinks(searches, cfg) } yield Ok ~> Response(result.toJson) }
149 Learning curve:
150 Learning curve: Smooooth
151 Mocks
152 Stubs
153 Flaky pretend servers just to check a response code
154 Flaky tests that take 30 min to run
155 Side effects everywhere
156 Exceptions
157 Intrusive DI frameworks
158 Most business software isn t rocket science. You shouldn t be dealing with all that complexity and crap!
159 There is a better way FP is a tall tree But there is so much low hanging fruit!
160 Thank you!
HOW WE MOVED FROM JAVA TO SCALA
HOW WE MOVED FROM JAVA TO SCALA Graham Tackley guardian.co.uk @tackers mostly HOW WE MOVED FROM ^ JAVA TO SCALA Graham Tackley guardian.co.uk @tackers History Java shop since 2006 guardian.co.uk: java
More informationNotes from a Short Introductory Lecture on Scala (Based on Programming in Scala, 2nd Ed.)
Notes from a Short Introductory Lecture on Scala (Based on Programming in Scala, 2nd Ed.) David Haraburda January 30, 2013 1 Introduction Scala is a multi-paradigm language that runs on the JVM (is totally
More informationUsing Scala for building DSL s
Using Scala for building DSL s Abhijit Sharma Innovation Lab, BMC Software 1 What is a DSL? Domain Specific Language Appropriate abstraction level for domain - uses precise concepts and semantics of domain
More informationMicroservices on AWS. Matthias Jung, Solutions Architect AWS
Microservices on AWS Matthias Jung, Solutions Architect AWS Agenda What are Microservices? Why Microservices? Challenges of Microservices Microservices on AWS What are Microservices? What are Microservices?
More informationMongoDB Web Architecture
MongoDB Web Architecture MongoDB MongoDB is an open-source, NoSQL database that uses a JSON-like (BSON) document-oriented model. Data is stored in collections (rather than tables). - Uses dynamic schemas
More informationMicroservices Architekturen aufbauen, aber wie?
Microservices Architekturen aufbauen, aber wie? Constantin Gonzalez, Principal Solutions Architect glez@amazon.de, @zalez 30. Juni 2016 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
More informationGAVIN KING RED HAT CEYLON SWARM
GAVIN KING RED HAT CEYLON SWARM CEYLON PROJECT A relatively new programming language which features: a powerful and extremely elegant static type system built-in modularity support for multiple virtual
More informationOptimizing Higher-Order Functions in Scala
Optimizing Higher-Order Functions in Scala Iulian Dragos EPFL Outline A quick tour of Scala Generalities Extension through libraries Closure translation in Scala Cost Optimizations in the Scala compiler
More informationProgramming: Computer Programming For Beginners: Learn The Basics Of Java, SQL & C Edition (Coding, C Programming, Java Programming, SQL
Programming: Computer Programming For Beginners: Learn The Basics Of Java, SQL & C++ - 3. Edition (Coding, C Programming, Java Programming, SQL Programming, JavaScript, Python, PHP) PDF PLEASE NOTE: You
More informationAnalysis Tool Project
Tool Overview The tool we chose to analyze was the Java static analysis tool FindBugs (http://findbugs.sourceforge.net/). FindBugs is A framework for writing static analyses Developed at the University
More informationStanko Tadić
State of modern JavaScript development 04.02.2017. Stanko Tadić HELLO, MY NAME IS STANKO TADIĆ and I m a Principal Developer at Work & Co. I love development, music and cartoons. You might say I m a geek.
More informationWho am I? Harlan Iverson. Programming enthusiast. Seeker of truth. Imperfect. I'll be wrong about some things. Please correct me if you can.
Who am I? Harlan Iverson. Programming enthusiast. Seeker of truth. Imperfect. I'll be wrong about some things. Please correct me if you can. P.S... I hate boring presentations. Please, engage and stay
More informationThink like an Elm developer
Think like an Elm developer Piper Niehaus Denver, CO, USA Backpacker / skier Nonprofit board chair Software Engineer at Pivotal Pivotal Tracker team Elm in Production since 2016 Internal Products and Services
More informationThese are notes for the third lecture; if statements and loops.
These are notes for the third lecture; if statements and loops. 1 Yeah, this is going to be the second slide in a lot of lectures. 2 - Dominant language for desktop application development - Most modern
More informationPhilipp Wille. Beyond Scala s Standard Library
Scala Enthusiasts BS Philipp Wille Beyond Scala s Standard Library OO or Functional Programming? Martin Odersky: Systems should be composed from modules. Modules should be simple parts that can be combined
More informationServerless Architecture Hochskalierbare Anwendungen ohne Server. Sascha Möllering, Solutions Architect
Serverless Architecture Hochskalierbare Anwendungen ohne Server Sascha Möllering, Solutions Architect Agenda Serverless Architecture AWS Lambda Amazon API Gateway Amazon DynamoDB Amazon S3 Serverless Framework
More informationCOMP390 (Design &) Implementation
COMP390 (Design &) Implementation Phil (& Dave s) rough guide Consisting of some ideas to assist the development of large and small projects in Computer Science (and a chance for me to try out some features
More informationLearning to Provide Modern Solutions
1 Learning to Provide Modern Solutions Over the course of this book, you will learn to enhance your existing applications to modernize the output of the system. To do this, we ll take advantage of the
More informationTA hours and labs start today. First lab is out and due next Wednesday, 1/31. Getting started lab is also out
Announcements TA hours and labs start today. First lab is out and due next Wednesday, 1/31. Getting started lab is also out Get you setup for project/lab work. We ll check it with the first lab. Stars
More informationProgramming in Scala Second Edition
Programming in Scala Second Edition Martin Odersky, Lex Spoon, Bill Venners artima ARTIMA PRESS WALNUT CREEK, CALIFORNIA Contents Contents List of Figures List of Tables List of Listings Foreword Foreword
More informationParametricity. Types Are Documentation. Tony Morris
Parametricity Types Are Documentation Tony Morris The Journey Fast and loose reasoning is morally correct Danielsson, Hughes, Jansson & Gibbons [DHJG06] tell us: Functional programmers often reason about
More informationDocker at Lyft Speeding up development Matthew #dockercon
Docker at Lyft Speeding up development Matthew Leventi @mleventi #dockercon Lyft Engineering Lyft Engineering Organization - Rapidly growing headcount - Fluid teams - Everyone does devops Technology -
More information3 Continuous Integration 3. Automated system finding bugs is better than people
This presentation is based upon a 3 day course I took from Jared Richardson. The examples and most of the tools presented are Java-centric, but there are equivalent tools for other languages or you can
More informationhybris-as-a-service A microservices architecture in action
hybris-as-a-service A microservices architecture in action Andrea Stubbe Klaus Herrmann Product and Technology @ hybris Disclaimer This presentation outlines our general product direction and should not
More informationParametricity. Types Are Documentation. Tony Morris
Parametricity Types Are Documentation Tony Morris The Journey Fast and loose reasoning is morally correct Danielsson, Hughes, Jansson & Gibbons [DHJG06] tell us: Functional programmers often reason about
More informationCS252 Advanced Programming Language Principles. Prof. Tom Austin San José State University Fall 2013
CS252 Advanced Programming Language Principles Prof. Tom Austin San José State University Fall 2013 What are some programming languages? Why are there so many? Different domains Mobile devices (Objective
More informationBuy a Feature: an Adventure in Immutability and Actors. David Pollak BayFP August 22, 2008
Buy a Feature: an Adventure in Immutability and Actors David Pollak BayFP August 22, 2008 David Pollak Not strict, but pretty lazy Lead developer for Lift web framework Scala since November 2006, Ruby/Rails,
More informationBackend Development. SWE 432, Fall Web Application Development
Backend Development SWE 432, Fall 2018 Web Application Development Review: Async Programming Example 1 second each Go get a candy bar Go get a candy bar Go get a candy bar Go get a candy bar Go get a candy
More informationMeetu Arora Sr V.P. Quality Assurance Naukri.com Testing Team Journey @Naukri.com Automation WATIR 2008 2007 2006 Agile testing team 2010 2015 2012 Automation QTP Inception of Testing Team Automation Selenium
More informationCOMP390 (Design &) Implementation
COMP390 (Design &) Implementation Phil (& Dave s) rough guide Consisting of some ideas to assist the development of large and small projects in Computer Science (and a chance for me to try out some features
More informationEnums. In this article from my free Java 8 course, I will talk about the enum. Enums are constant values that can never be changed.
Enums Introduction In this article from my free Java 8 course, I will talk about the enum. Enums are constant values that can never be changed. The Final Tag To display why this is useful, I m going to
More informationYou ve encountered other ways of signalling errors. For example, if you lookup an unbound key in a hashtable, Java (and Scala) produce nulls:
Lecture 5 1 Required Reading Read Chapters 16 and 17 of Programming in Scala. 2 Partial Functions and Signalling Errors Many functions are not defined on all inputs. For example, if you re reading input
More informationFirst Programming Language in CS Education The Arguments for Scala
First Programming Language in CS Education The Arguments for Scala WORLDCOMP 2011 By Dr. Mark C. Lewis Trinity University Disclaimer I am writing a Scala textbook that is under contract with CRC Press.
More informationScala, Your Next Programming Language
Scala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP 2011 By Dr. Mark C. Lewis Trinity University Disclaimer I am writing a Scala textbook that
More informationLecture 21: The Many Hats of Scala: OOP 10:00 AM, Mar 14, 2018
CS18 Integrated Introduction to Computer Science Fisler, Nelson Lecture 21: The Many Hats of Scala: OOP 10:00 AM, Mar 14, 2018 Contents 1 Mutation in the Doghouse 1 1.1 Aside: Access Modifiers..................................
More informationMicroservices. Webservices with Scala (II) Microservices
Microservices Webservices with Scala (II) Microservices 2018 1 Content Deep Dive into Play2 1. Database Access with Slick 2. Database Migration with Flyway 3. akka 3.1. overview 3.2. akka-http (the http
More informationContainers & Microservices For Realists. Karthik
Containers & Microservices For Realists Karthik Gaekwad @iteration1 Karthik Gaekwad @iteration1 Principal Member of Technical Staff Oracle Container Cloud Team Previous: 10 years building cloud products
More informationCISC-124. Casting. // this would fail because we can t assign a double value to an int // variable
CISC-124 20180122 Today we looked at casting, conditionals and loops. Casting Casting is a simple method for converting one type of number to another, when the original type cannot be simply assigned to
More informationUsing Code Templates in DDE by Julian Robichaux, panagenda originally published on socialbizug.org, July 2013
Using Code Templates in DDE by Julian Robichaux, panagenda originally published on socialbizug.org, July 2013 One of the freebies that came with integrating Domino Designer with the Eclipse platform (DDE)
More informationMicroservices Smaller is Better? Eberhard Wolff Freelance consultant & trainer
Microservices Smaller is Better? Eberhard Wolff Freelance consultant & trainer http://ewolff.com Why Microservices? Why Microservices? Strong modularization Replaceability Small units Sustainable Development
More informationEvolution of the "Web
Evolution of the "Web App" @HenrikJoreteg @Hoarse_JS THIS USED TO BE SIMPLE! 1. WRITE SOME HTML 2. LAY IT OUT WITH FRAMES OR TABLES 3. FTP IT TO A SERVER! 4. BAM! CONGRATULATIONS, YOU RE A WEB DEVELOPER!
More informationClient Side JavaScript and AJAX
Client Side JavaScript and AJAX Client side javascript is JavaScript that runs in the browsers of people using your site. So far all the JavaScript code we've written runs on our node.js server. This is
More informationExtending JON 2.3 Use cases
Extending JON 2.3 Use cases Presenter JBoss Senior Solution Architect, Red Hat May 2010 04/30/10 1 Agenda How does JON help you JON in different scenarios 2 New JBoss project Migration project JON at different
More informationCIS 3308 Logon Homework
CIS 3308 Logon Homework Lab Overview In this lab, you shall enhance your web application so that it provides logon and logoff functionality and a profile page that is only available to logged-on users.
More informationGarbage Collection (1)
Coming up: Today: Finish unit 6 (garbage collection) start ArrayList and other library objects Wednesday: Complete ArrayList, basics of error handling Friday complete error handling Next week: Recursion
More informationWe turn hard problems into great software.
We turn hard problems into great software. We are passionate individuals focused on crafting impactful solutions to our clients most complex problems. CPO and Cofounder Ingrid Alongi 2 We Develop Applications
More informationCOMP390 (Design &) Implementation
COMP390 (Design &) Implementation A rough guide Consisting of some ideas to assist the development of large and small projects in Computer Science (With thanks to Dave Shield) Design & Implementation What
More informationCS457/557 Functional Languages
CS457/557 Functional Languages Spring 2018 Lecture 1: Course Introduction Andrew Tolmach Portland State University (with thanks to Mark P. Jones) 1 Goals of this course Introduce the beautiful ideas of
More informationDavid Pollak CUFP September 26 th, 2008
Buy a Feature Adventure in Immutability and Actors David Pollak CUFP September 26 th, 2008 David Pollak Not strict, but pretty lazy Lead developer for Lift web framework Scala since November 2006, Ruby/Rails,
More informationRead & Download (PDF Kindle) ASP.NET: Programming Success In A Day: Beginners Guide To Fast, Easy And Efficient Learning Of ASP.
Read & Download (PDF Kindle) ASP.NET: Programming Success In A Day: Beginners Guide To Fast, Easy And Efficient Learning Of ASP.NET Programming ASP.NET programming at its best! Discover an audiobook that
More informationArne Brüsch Philipp Wille. Pattern Matching Syntax
Scala Enthusiasts BS Arne Brüsch Philipp Wille Pattern Matching Syntax Scala Modular programming language Some used to call it objectfunctional 2 Scala Modular programming language Some used to call it
More informationHarvard School of Engineering and Applied Sciences CS 152: Programming Languages
Harvard School of Engineering and Applied Sciences CS 152: Programming Languages Lecture 18 Thursday, March 29, 2018 In abstract algebra, algebraic structures are defined by a set of elements and operations
More informationDon t give up on mocking
Don t give up on mocking - Why do people give up? - Mocking: the big step from classic way of testing - Let s take a step back and don t give up! by Szczepan Faber (a certified mock tamer) Interaction
More informationEverything you need to know about cloud. For companies with people in them
Everything you need to know about cloud For companies with people in them You used to know where you stood with the word cloud. It meant those fluffy things floating above you, bringing shade and rain,
More informationOverview. Elements of Programming Languages. Advanced constructs. Motivating inner class example
Overview Elements of Programming Languages Lecture 11: Object-oriented functional programming James Cheney University of Edinburgh October 30, 2017 We ve now covered: basics of functional programming (with
More informationFunctional Programming Invades Architecture. George Fairbanks SATURN May 2017
Functional Programming Invades Architecture George Fairbanks SATURN 2017 3 May 2017 1 Programming in the Large Yesterday: Functional Programming is PITS, i.e., just inside modules Today: FP is also PITL
More informationThe SD-WAN implementation handbook
The SD-WAN implementation handbook Your practical guide to a pain-free deployment This is the future of your business Moving to SD-WAN makes plenty of sense, solving a lot of technical headaches and enabling
More informationCIS 194: Homework 3. Due Wednesday, February 11, Interpreters. Meet SImPL
CIS 194: Homework 3 Due Wednesday, February 11, 2015 Interpreters An interpreter is a program that takes another program as an input and evaluates it. Many modern languages such as Java 1, Javascript,
More informationContents in Detail. Foreword by Xavier Noria
Contents in Detail Foreword by Xavier Noria Acknowledgments xv xvii Introduction xix Who This Book Is For................................................ xx Overview...xx Installation.... xxi Ruby, Rails,
More informationScala - Some essential concepts -
Scala - Some essential concepts - Marcel Lüthi Graphics and Vision Research Group Department of Mathematics and Computer Science University of Basel Programming an important activity Data preprocessing
More informationScala.js. Safety & Sanity in the wild west of the web. Li Haoyi, Philly ETE 8/3/2015
Scala.js Safety & Sanity in the wild west of the web Li Haoyi, Philly ETE 8/3/2015 1.1 Who am I Work at Dropbox on Web Infrastructure, writing Python/Coffeescript Using Scala open-source since 2011 Contributor
More informationIncoherent Rant about Code
Incoherent Rant about Code Aras Pranckevičius Unity Unity Bootcamp II, 2010 Nov-Dec This is pretty much on random code related things with no structure. Expect lots of topic jumps for no reason at all!
More informationGraphQL. Concepts & Challenges. - I m Robert Mosolgo - Work from home Ruby developer - From Charlottesville VA - For GitHub
GraphQL Concepts & Challenges - I m Robert Mosolgo - Work from home Ruby developer - From Charlottesville VA - For GitHub Rails API WHY - You have your Rails app, why bother with an API? - You have clients.
More informationCOPYRIGHTED MATERIAL. Getting Started with Google Analytics. P a r t
P a r t I Getting Started with Google Analytics As analytics applications go, Google Analytics is probably the easiest (or at least one of the easiest) available in the market today. But don t let the
More informationUsing Scala in CS241
Using Scala in CS241 Winter 2018 Contents 1 Purpose 1 2 Scala 1 3 Basic Syntax 2 4 Tuples, Arrays, Lists and Vectors in Scala 3 5 Binary output in Scala 5 6 Maps 5 7 Option types 5 8 Objects and Classes
More informationScala : an LLVM-targeted Scala compiler
Scala : an LLVM-targeted Scala compiler Da Liu, UNI: dl2997 Contents 1 Background 1 2 Introduction 1 3 Project Design 1 4 Language Prototype Features 2 4.1 Language Features........................................
More informationShift Left and Friends And What They Mean for Testers
And What They Mean for Testers Replica of the shift left persuasion device (i.e., 2x4) used by a test manager colleague in 1990s Introduction All the IT world is abuzz with the latest buzz words Shift
More informationflask-dynamo Documentation
flask-dynamo Documentation Release 0.1.2 Randall Degges January 22, 2018 Contents 1 User s Guide 3 1.1 Quickstart................................................ 3 1.2 Getting Help...............................................
More informationmismatch between what is maybe possible today and what is going on in many of today's IDEs.
What will happen if we do very, very small and lightweight tools instead of heavyweight, integrated big IDEs? Lecturer: Martin Lippert, VMware and Eclispe tooling expert LIPPERT: Welcome, everybody, to
More informationStop coding Pascal. Saturday, April 6, 13
Stop coding Pascal...emotional sketch about past, present and future of programming languages, Python, compilers, developers, Life, Universe and Everything Alexey Kachayev CTO at KitApps Inc. Open source
More informationInverting the Pyramid
Inverting the Pyramid Naresh Jain naresh@agilefaqs.com @nashjain http://nareshjain.com Time/Money/Opportunity Cost Plan Back in the Stone-age Happiness/Excitement Design Distribute Work in Isolation Integrate
More informationTOP DEVELOPERS MINDSET. All About the 5 Things You Don t Know.
MINDSET TOP DEVELOPERS All About the 5 Things You Don t Know 1 INTRODUCTION Coding and programming are becoming more and more popular as technology advances and computer-based devices become more widespread.
More informationDreamweaver 101. Here s the desktop icon for Dreamweaver CS5: Click it open. From the top menu options, choose Site and New Site
Dreamweaver 101 First step: For your first time out, create a folder on your desktop to contain all of your DW pages and assets (images, audio files, etc.). Name it. For demonstration, I ll name mine dw_magic.
More informationWriting code that I'm not smart enough to write. A funny thing happened at Lambda Jam
Writing code that I'm not smart enough to write A funny thing happened at Lambda Jam Background "Let s make a lambda calculator" Rúnar Bjarnason Task: write an interpreter for the lambda calculus Lambda
More informationPractically Functional. Daniel Spiewak
Practically Functional Daniel Spiewak whoami Author of Scala for Java Refugees and other articles on Scala and FP Former editor Javalobby / EclipseZone Engaged in academic research involving Scala DSLs
More informationCOURSE LISTING. Courses Listed. Training for Database & Technology with Development in SAP Cloud Platform. 1 December 2017 (22:41 GMT) Beginner
Training for Database & Technology with Development in SAP Cloud Platform Courses Listed Beginner CLD100 - Cloud for SAP Intermediate CP100 - SAP Cloud Platform Certification Exam C_CP_11 - SAP Certified
More informationCOURSE LISTING. Courses Listed. Training for Cloud with SAP Cloud Platform in Development. 23 November 2017 (08:12 GMT) Beginner.
Training for Cloud with SAP Cloud Platform in Development Courses Listed Beginner CLD100 - Cloud for SAP Intermediate CP100 - SAP Cloud Platform Certification Exam C_CP_11 - SAP Certified Development Associate
More informationUpload to your web space (e.g., UCSC) Due this Thursday 4/8 in class Deliverable: Send me an with the URL Grading:
CS 183 4/6/2010 Build a simple HTML page, topic of your choice Will use this as a basis and gradually and add more features as the class progresses Need to be done with your favorite text editor, no visual
More informationRuby on Rails Welcome. Using the exercise files
Ruby on Rails Welcome Welcome to Ruby on Rails Essential Training. In this course, we're going to learn the popular open source web development framework. We will walk through each part of the framework,
More informationUnit testing in CakePHP. Making bullet resistant code.
Unit testing in CakePHP Making bullet resistant code. Goals for next hour If you are not familiar with Unit Testing, introduce you to the concepts and practices of Unit testing. If you are familiar with
More informationObject Model Comparisons
Object Model Comparisons 1 Languages are designed, just like programs Someone decides what the language is for Someone decides what features it's going to have Can't really understand a language until
More informationOracle Forms and Oracle APEX The Odd Couple
Oracle Forms and Oracle APEX The Odd Couple About me 2 Francis Mignault CTO and Co-founder, Insum Solutions 30+ years with Oracle DB, 14+ years with APEX. (Forms 2.3 / Oracle 5) Books: Expert Oracle Application
More informationJquery.ajax Call Returns Status Code Of 200 But Fires Jquery Error
Jquery.ajax Call Returns Status Code Of 200 But Fires Jquery Error The request returns http 200 OK, but the xhr status is 0, error. jquery Ajax Request to get JSON data fires error event to make an ajax
More informationHarnessing Java with Scala
Harnessing Java with Scala OSCON 2010 July 21, 2010 Thomas Lockney @tlockney or thomas@lockney.net Trenton Lipscomb trentonl@amazon.com Introduction Understand the capabilities of sbt and Scala Demonstrate
More informationHeresies and Dogmas in Software
Heresies and Dogmas in Software Development @deanwampler CME Group Technology Conference 2011 Functional Programming for Java Developers Dean Wampler programmingscala.com polyglotprogramming.com/ fpjava
More information<?php function preprocess_drupalcon($presentation) { if ($drupal && $ionic) { if ($ionic[ app ] = Megalomaniac ) { create $presentation } } }?
Mark Conroy - Annertech @markconroy What We'll Talk About
More informationYou ve Got Mail! List Offer Creative. Timely insights & trends. Katie Parker Editorial Director. Zach Christensen Creative Director
You ve Got Mail! Timely email insights & trends Colleen Webster Digital Solutions Director Katie Parker Editorial Director Zach Christensen Director List Pop Quiz! #1 Direct marketing rule: your list better
More informationThis document licensed exclusively to: Mark Richards No Fluff Just Stuff TM. Redistribution strictly prohibited.
Mark Richards FINDING STRUCTURAL DECAY IN ARCHITECTURES Most things around us wear out and eventually experience decay; the we drive, household appliances and electronics, highway bridges, even ourselves.
More informationSDx and the Future of Infrastructure
SDx and the Future of Infrastructure John Manville, SVP, Global Infrastructure Services, Cisco Radhika Chagarlamudi, Sr. Dir., IT, Business Collaboration and Software Platforms ITM-1004 A Ten Year Journey..
More informationFrustrated by all the hype?
Fundamentals of Software Architecture Looking beyond the hype Markus Völter (voelter@acm.org) Introduction Frustrated by all the hype? If so this presentation is for you. Otherwise you should leave People
More informationUnity In diversity. ArcGIS JS API as an Integration Tool. RICARDO BANDEIRA - IplanRio
Unity In diversity ArcGIS JS API as an Integration Tool RICARDO BANDEIRA - IplanRio Introduction Integrating the processes of an entire City Hall is not an easy task. Decision making requires updated information
More informationCS162 Week 1. Kyle Dewey. Friday, January 10, 14
CS162 Week 1 Kyle Dewey Overview Basic Introduction CS Accounts Scala survival guide Office Hour Choose an hour from within: Tuesday/Thursday 11 AM - 1 PM Friday 11 AM - 4 PM Also available by appointment
More informationCreating a Hybrid Gateway for API Traffic. Ed Julson API Platform Product Marketing TIBCO Software
Creating a Hybrid Gateway for API Traffic Ed Julson API Platform Product Marketing TIBCO Software Housekeeping Webinar Recording Today s webinar is being recorded and a link to the recording will be emailed
More informationCS 2340 Objects and Design - Scala
CS 2340 Objects and Design - Scala Objects and Operators Christopher Simpkins chris.simpkins@gatech.edu Chris Simpkins (Georgia Tech) CS 2340 Objects and Design - Scala Objects and Operators 1 / 13 Classes
More informationFinatra: Fast, Testable, Scala Services. Steve Cosenza Finatra & Data API Tech
Finatra: Fast, Testable, Scala Services Steve Cosenza Finatra & Data API Tech Lead @scosenza + = FINAGLE SINATRA FINATRA Finagle is an extensible remote procedure call system for the JVM, used to construct
More informationScala Where It Came From Where It is Going
Scala Where It Came From Where It is Going Scala Days San Francisco Martin Odersky Scala Where It Came From Scala Days San Francisco Martin Odersky Scala is going nowhere Scala is a gateway drug to Haskell
More informationReal Web Development. yeah, for real.
Real Web Development yeah, for real. 1 who am i? i m still cyle i m a systems developer and architect every day i m developin i like this kind of stuff 2 real? kind of ranty, sorry web development is more
More informationDetailed instructions for video analysis using Logger Pro.
Detailed instructions for video analysis using Logger Pro. 1. Begin by locating or creating a video of a projectile (or any moving object). Save it to your computer. Most video file types are accepted,
More informationThe Attraction of Complexity
The Attraction of Complexity Carlo Bottiglieri December 10, 2017 1 Introduction How is complexity distributed through a codebase? Does this distribution present similarities across different projects?
More informationSoftware Engineering Design & Construction
Winter Semester 17/18 Software Engineering Design & Construction Dr. Michael Eichberg Fachgebiet Softwaretechnik Technische Universität Darmstadt A Critical View on Inheritance 2 A Critical View On Inheritance
More information