2 Years of. Real World FP at Scala Developer at

Size: px
Start display at page:

Download "2 Years of. Real World FP at Scala Developer at"

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 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 information

Notes 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.) 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 information

Using Scala for building DSL s

Using 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 information

Microservices on AWS. Matthias Jung, Solutions Architect AWS

Microservices 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 information

MongoDB Web Architecture

MongoDB 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 information

Microservices Architekturen aufbauen, aber wie?

Microservices 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 information

GAVIN KING RED HAT CEYLON SWARM

GAVIN 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 information

Optimizing Higher-Order Functions in Scala

Optimizing 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 information

Programming: 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 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 information

Analysis Tool Project

Analysis 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 information

Stanko Tadić

Stanko 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 information

Who 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. 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 information

Think like an Elm developer

Think 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 information

These are notes for the third lecture; if statements and loops.

These 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 information

Philipp Wille. Beyond Scala s Standard Library

Philipp 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 information

Serverless Architecture Hochskalierbare Anwendungen ohne Server. Sascha Möllering, Solutions Architect

Serverless 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 information

COMP390 (Design &) Implementation

COMP390 (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 information

Learning to Provide Modern Solutions

Learning 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 information

TA hours and labs start today. First lab is out and due next Wednesday, 1/31. Getting started lab is also out

TA 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 information

Programming in Scala Second Edition

Programming 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 information

Parametricity. Types Are Documentation. Tony Morris

Parametricity. 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 information

Docker at Lyft Speeding up development Matthew #dockercon

Docker 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 information

3 Continuous Integration 3. Automated system finding bugs is better than people

3 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 information

hybris-as-a-service A microservices architecture in action

hybris-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 information

Parametricity. Types Are Documentation. Tony Morris

Parametricity. 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 information

CS252 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 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 information

Buy 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 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 information

Backend Development. SWE 432, Fall Web Application Development

Backend 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 information

Meetu 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 information

COMP390 (Design &) Implementation

COMP390 (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 information

Enums. 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. 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 information

You ve encountered other ways of signalling errors. For example, if you lookup an unbound key in a hashtable, Java (and Scala) produce nulls:

You 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 information

First Programming Language in CS Education The Arguments for Scala

First 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 information

Scala, Your Next Programming Language

Scala, 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 information

Lecture 21: The Many Hats of Scala: OOP 10:00 AM, Mar 14, 2018

Lecture 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 information

Microservices. Webservices with Scala (II) Microservices

Microservices. 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 information

Containers & Microservices For Realists. Karthik

Containers & 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 information

CISC-124. Casting. // this would fail because we can t assign a double value to an int // variable

CISC-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 information

Using 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 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 information

Microservices Smaller is Better? Eberhard Wolff Freelance consultant & trainer

Microservices 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 information

Evolution of the "Web

Evolution 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 information

Client Side JavaScript and AJAX

Client 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 information

Extending JON 2.3 Use cases

Extending 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 information

CIS 3308 Logon Homework

CIS 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 information

Garbage Collection (1)

Garbage 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 information

We turn hard problems into great software.

We 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 information

COMP390 (Design &) Implementation

COMP390 (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 information

CS457/557 Functional Languages

CS457/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 information

David Pollak CUFP September 26 th, 2008

David 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 information

Read & 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. 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 information

Arne Brüsch Philipp Wille. Pattern Matching Syntax

Arne 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 information

Harvard School of Engineering and Applied Sciences CS 152: Programming Languages

Harvard 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 information

Don t give up on mocking

Don 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 information

Everything 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 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 information

Overview. Elements of Programming Languages. Advanced constructs. Motivating inner class example

Overview. 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 information

Functional Programming Invades Architecture. George Fairbanks SATURN May 2017

Functional 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 information

The SD-WAN implementation handbook

The 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 information

CIS 194: Homework 3. Due Wednesday, February 11, Interpreters. Meet SImPL

CIS 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 information

Contents in Detail. Foreword by Xavier Noria

Contents 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 information

Scala - Some essential concepts -

Scala - 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 information

Scala.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 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 information

Incoherent Rant about Code

Incoherent 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 information

GraphQL. 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 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 information

COPYRIGHTED MATERIAL. Getting Started with Google Analytics. P a r t

COPYRIGHTED 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 information

Using Scala in CS241

Using 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 information

Scala : an LLVM-targeted Scala compiler

Scala : 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 information

Shift Left and Friends And What They Mean for Testers

Shift 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 information

flask-dynamo Documentation

flask-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 information

mismatch between what is maybe possible today and what is going on in many of today's IDEs.

mismatch 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 information

Stop coding Pascal. Saturday, April 6, 13

Stop 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 information

Inverting the Pyramid

Inverting 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 information

TOP DEVELOPERS MINDSET. All About the 5 Things You Don t Know.

TOP 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 information

Dreamweaver 101. Here s the desktop icon for Dreamweaver CS5: Click it open. From the top menu options, choose Site and New Site

Dreamweaver 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 information

Writing 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 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 information

Practically Functional. Daniel Spiewak

Practically 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 information

COURSE LISTING. Courses Listed. Training for Database & Technology with Development in SAP Cloud Platform. 1 December 2017 (22:41 GMT) Beginner

COURSE 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 information

COURSE LISTING. Courses Listed. Training for Cloud with SAP Cloud Platform in Development. 23 November 2017 (08:12 GMT) Beginner.

COURSE 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 information

Upload to your web space (e.g., UCSC) Due this Thursday 4/8 in class Deliverable: Send me an with the URL Grading:

Upload 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 information

Ruby on Rails Welcome. Using the exercise files

Ruby 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 information

Unit testing in CakePHP. Making bullet resistant code.

Unit 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 information

Object Model Comparisons

Object 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 information

Oracle Forms and Oracle APEX The Odd Couple

Oracle 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 information

Jquery.ajax Call Returns Status Code Of 200 But Fires Jquery Error

Jquery.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 information

Harnessing Java with Scala

Harnessing 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 information

Heresies and Dogmas in Software

Heresies 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

You ve Got Mail! List Offer Creative. Timely insights & trends. Katie Parker Editorial Director. Zach Christensen Creative Director

You 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 information

This document licensed exclusively to: Mark Richards No Fluff Just Stuff TM. Redistribution strictly prohibited.

This 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 information

SDx and the Future of Infrastructure

SDx 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 information

Frustrated by all the hype?

Frustrated 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 information

Unity 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 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 information

CS162 Week 1. Kyle Dewey. Friday, January 10, 14

CS162 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 information

Creating 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 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 information

CS 2340 Objects and Design - Scala

CS 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 information

Finatra: Fast, Testable, Scala Services. Steve Cosenza Finatra & Data API Tech

Finatra: 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 information

Scala Where It Came From Where It is Going

Scala 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 information

Real Web Development. yeah, for real.

Real 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 information

Detailed instructions for video analysis using Logger Pro.

Detailed 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 information

The Attraction of Complexity

The 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 information

Software Engineering Design & Construction

Software 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