SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Breaking The Monotony

      @sai_venkat &
      @harikrishnan83
Or
Theme



The Agility we seek is from the code we write
and systems we build and not just from
processes and practices we follow.
Why this talk?
 ●   As Craftsmen we are on look out for right
     tool for the job and sharing our
     experiences with you.
 ●   This talk is based on the experiences we
     have on our day to day projects – The
     choice we make when we build the
     application can bring us agility.
 ●   We have chosen to concentrate on these
     areas because in any decent sized
     (Enterprise :P) project these problems are
     common.
Introspection
Modeling time
●   Aim – To build the world's largest resume builder.
●   We choose you as the architect (or funky name – Master
    Craftsman) to create a model of a profile builder.
●   Tell us what you need (tools, frameworks) and your model.
●   Catch – We don't want to restrict the resumes coming in
    from public in any way. We want the users to give as much
    information about them as possible
Person_PK LastName                                       Resume Person Title                         Summary
                                                           _PK    _FK
  1                        clouseau
                                                           2                  1              Inspector Developer with
                                                                                             turned    instincts of an
                                                                                             Developer inspector
Resume_FK                  Skill_FK
2                          1                                          Skill_PK               Name       Description
2                          2                                          1                      Java       Statically
2                          3                                                                            typed
                                                                                                        language
                                                                      2                      Clojure    Lisp like
                                                                                                        language
                                                                      3
S E L E C T * F R O M P e r s o n p , R e s u m e r, S k ill s , R e s u m e _ S k ill r s
                                                                                             Haskel     Functional
W HERE                                                                                                  language
       p .P e r s o n _ P K = r.P e r s o n _ F K A N D
       r.R e s u m e _ P K = r s . R e s u m e _ F K A N D
       s . S k ill_ P K = r s . S k ill_ F K A N D
       s .N a m e in ( “ J a v a ” , “ C lo j u r e ” )
Same Data Modeled as Documents
 {                                                   {
     Name: “Closseau”,                                   Name: “Mr Magoo”,
     title: “Inspector turned developer”,                title: “Funny developer”,
     Skills: [“Ruby”, “Haskell”, “C#”],                  Skills: [“Ruby”, “Self”, “Clojure”],
     Telephone_Numbers: [9611805466],                    Email-id: “magoo@looneytoons.com”,
     Experience: 5                                       Experience: 4
 }                                                   }


Querying the Data:

Map function:

function(doc) {
  if (contains(doc.skills, [“java”, “clojure”])) {
    emit(null, doc);
  }
}
A Case for Non Relational
                Databases
●   Schema less Data helps us to evolve the model over the
    course of application development and maintenance (Ex.
    FriendFeed, github, Sourceforge)
●   Scaling out is easy in nosql databases. Throw in more
    commodity machine.
●   You may not always need atomic consistency (Dirty interface
    of mnesia)
●   Most nosql Databases are simpler than conventional
    RDBMS, hence more robust and lightweight
●   SQL Engines are only a convenience If they are not helping
    don't have to use them (Waffle on Mysql Datastore)
Polyglot & PolyParadigm
                Programming
●   Today's Applications Need to
    ●   Must scale
    ●   Must be resilient and secure
    ●   Must evolve for future
    ●   Work with large volumes of data and users.
Hope you don't have someone like this
in your team -

I work only with Java.....
Polyglot & PolyParadigm
                  Programming
●   Are there any advantages to writing an entire application in one
    language or one stack (Microsoft shop or Java shop anyone)?
●   Is one language best for all domains?
●   Are we harnessing the power we have in our hardware?
●   Languages have their boundaries – Imperative vs Functional, Static vs
    Dynamic, Procedural vs Object Oriented
●   Advantages are mostly relative and context sensitive.
●   Examples:
    Flightcaster, Facebook Chat, github - BERT, Runa – Swarmiji, Twitter
●   No Language Wars please :)
In Erlang
                                    In Java
-module (fact).
-export ([fact/1]).                 public int fact(int value)
                                     {
fact(0) -> 1;                          if (value == 0)
fact(N) -> N * fact(N -1).             {
                                         return 0;
                                       }
                                       else
 Tail Recursion Optimized              {
                                         return value * fact(value - 1);
 -module (fact).                       }
 -export ([fact/1]).                 }

 fact(N) -> fact(N, 1).

 fact(0, A) -> A;
 fact(N, A) -> fact(N -1, N * A).
Polyglotism in Testing

We would use Java or C# to write functional tests as our application code is in that language

                                                         require “watir”
 package org.openqa.selenium.example;
                                                         browser = Watir::Browser.new(:firefox)
 import   org.openqa.selenium.By;
                                                         browser.goto “http://www.google.com”
 import   org.openqa.selenium.WebDriver;
                                                         browser.text_field(:name, “q”).set “Cheese”
 import   org.openqa.selenium.WebElement;
                                                         browser.button(:name, “btnG”).click
 import   org.openqa.selenium.htmlunit.HtmlUnitDriver;
                                                         puts “Page title is #{browser.title}”
 public class Example  {
     public static void main(String[] args) {
         WebDriver driver = new HtmlUnitDriver();
         driver.get("http://www.google.com");
         WebElement element =
 driver.findElement(By.name("q"));
         element.sendKeys("Cheese!");
         element.submit();
         System.out.println("Page title is: " +
 driver.getTitle());
     }
 }
Polyglotism in Testing
Using Cucumber + Jruby or Groovy for acceptance testing of services and API
interfaces in Java.


             Feature: Proposal notification
              In order to reduce time spent on emailing
              Administrators should be able to mail
              all proposals owners depending on status
              Scenario: Email accepted proposal
                Given hari@gmail.com proposed 'Breaking the Monotony'
                And the 'Breaking the Monotony' proposal is approved
                When I send mass proposal email
                Then hari@gmail.com should get email
                 """
                 Hi hari@gmail.com
                 Congratulations, 'Breaking the Monotony' was accepted.
                 See you at 'Agile India 2010'!
                 """
Polyglotism in Testing
Using Cucumber + Jruby or Groovy for acceptance testing of services and API
interfaces in Java.


             Feature: Proposal notification
              In order to reduce time spent on emailing
              Administrators should be able to mail
              all proposals owners depending on status
              Scenario: Email accepted proposal
                Given hari@gmail.com proposed 'Breaking the Monotony'
                And the 'Breaking the Monotony' proposal is approved
                When I send mass proposal email
                Then hari@gmail.com should get email
                 """
                 Hi hari@gmail.com
                 Congratulations, 'Breaking the Monotony' was accepted.
                 See you at 'Agile India 2010'!
                 """
Build and Deployment
●   Build script or Build code?
●   9000 lines of XML Code and still no test?
●   We really need a first class language for flexibility
    ●   Programming in XML doesn't make sense
    ●   Pure declarative model solves some problems but reduces
        flexibility
    ●   Testing is much simpler with a real language
●   Use Ruby or Groovy for build (Example: FubuMVC in Rake)
    and Capistrano for deployment.
●   Continuous Deployment.
●   Cloud for deployment.
The path less traveled
Thank you for listening to us.

                Sai Venkatakrishnan

                Twitter - http://twitter.com/sai_venkat
                Github - http://github.com/saivenkat
                Blog - http://developer-in-test.blogspot.com

                Harikrishnan

                Twitter - http://twitter.com/harikrishnan83
                Github - http://github.com/harikrishnan83
                Blog - http://harikrishnan83.wordpress.com

Contenu connexe

Tendances

Natural Language Toolkit (NLTK), Basics
Natural Language Toolkit (NLTK), Basics Natural Language Toolkit (NLTK), Basics
Natural Language Toolkit (NLTK), Basics Prakash Pimpale
 
Have Your Cake and Eat It Too: Meta-Programming Techniques for Java
Have Your Cake and Eat It Too: Meta-Programming Techniques for JavaHave Your Cake and Eat It Too: Meta-Programming Techniques for Java
Have Your Cake and Eat It Too: Meta-Programming Techniques for JavaHoward Lewis Ship
 
Little Helpers for Android Development with Kotlin
Little Helpers for Android Development with KotlinLittle Helpers for Android Development with Kotlin
Little Helpers for Android Development with KotlinKai Koenig
 
Kotlin for Android Developers - 1
Kotlin for Android Developers - 1Kotlin for Android Developers - 1
Kotlin for Android Developers - 1Mohamed Nabil, MSc.
 
Natural Language Processing and Python
Natural Language Processing and PythonNatural Language Processing and Python
Natural Language Processing and Pythonanntp
 
Polyglot Programming in the JVM
Polyglot Programming in the JVMPolyglot Programming in the JVM
Polyglot Programming in the JVMAndres Almiray
 
Agile 2012 Simple Design Applied
Agile 2012 Simple Design AppliedAgile 2012 Simple Design Applied
Agile 2012 Simple Design AppliedDeclan Whelan
 
JEST: REST on OpenJPA
JEST: REST on OpenJPAJEST: REST on OpenJPA
JEST: REST on OpenJPAPinaki Poddar
 
JavaScript Parser Infrastructure for Code Quality Analysis
JavaScript Parser Infrastructure for Code Quality AnalysisJavaScript Parser Infrastructure for Code Quality Analysis
JavaScript Parser Infrastructure for Code Quality AnalysisAriya Hidayat
 
Python and Zope: An introduction (May 2004)
Python and Zope: An introduction (May 2004)Python and Zope: An introduction (May 2004)
Python and Zope: An introduction (May 2004)Kiran Jonnalagadda
 
Kotlin for Android Developers - 3
Kotlin for Android Developers - 3Kotlin for Android Developers - 3
Kotlin for Android Developers - 3Mohamed Nabil, MSc.
 
Puppet DSL gotchas, and understandiing Roles & Profiles pattern
Puppet DSL gotchas, and understandiing Roles & Profiles patternPuppet DSL gotchas, and understandiing Roles & Profiles pattern
Puppet DSL gotchas, and understandiing Roles & Profiles patternAlex Simenduev
 
Building DSLs with Xtext - Eclipse Modeling Day 2009
Building DSLs with Xtext - Eclipse Modeling Day 2009Building DSLs with Xtext - Eclipse Modeling Day 2009
Building DSLs with Xtext - Eclipse Modeling Day 2009Heiko Behrens
 

Tendances (20)

Natural Language Toolkit (NLTK), Basics
Natural Language Toolkit (NLTK), Basics Natural Language Toolkit (NLTK), Basics
Natural Language Toolkit (NLTK), Basics
 
NLTK in 20 minutes
NLTK in 20 minutesNLTK in 20 minutes
NLTK in 20 minutes
 
Polyglot JVM
Polyglot JVMPolyglot JVM
Polyglot JVM
 
Have Your Cake and Eat It Too: Meta-Programming Techniques for Java
Have Your Cake and Eat It Too: Meta-Programming Techniques for JavaHave Your Cake and Eat It Too: Meta-Programming Techniques for Java
Have Your Cake and Eat It Too: Meta-Programming Techniques for Java
 
Little Helpers for Android Development with Kotlin
Little Helpers for Android Development with KotlinLittle Helpers for Android Development with Kotlin
Little Helpers for Android Development with Kotlin
 
Kotlin for Android Developers - 1
Kotlin for Android Developers - 1Kotlin for Android Developers - 1
Kotlin for Android Developers - 1
 
Simple Design
Simple DesignSimple Design
Simple Design
 
Text analysis using python
Text analysis using pythonText analysis using python
Text analysis using python
 
Natural Language Processing and Python
Natural Language Processing and PythonNatural Language Processing and Python
Natural Language Processing and Python
 
Polyglot Programming in the JVM
Polyglot Programming in the JVMPolyglot Programming in the JVM
Polyglot Programming in the JVM
 
Agile 2012 Simple Design Applied
Agile 2012 Simple Design AppliedAgile 2012 Simple Design Applied
Agile 2012 Simple Design Applied
 
Os Borger
Os BorgerOs Borger
Os Borger
 
JEST: REST on OpenJPA
JEST: REST on OpenJPAJEST: REST on OpenJPA
JEST: REST on OpenJPA
 
Java Full Throttle
Java Full ThrottleJava Full Throttle
Java Full Throttle
 
Groovy DSL
Groovy DSLGroovy DSL
Groovy DSL
 
JavaScript Parser Infrastructure for Code Quality Analysis
JavaScript Parser Infrastructure for Code Quality AnalysisJavaScript Parser Infrastructure for Code Quality Analysis
JavaScript Parser Infrastructure for Code Quality Analysis
 
Python and Zope: An introduction (May 2004)
Python and Zope: An introduction (May 2004)Python and Zope: An introduction (May 2004)
Python and Zope: An introduction (May 2004)
 
Kotlin for Android Developers - 3
Kotlin for Android Developers - 3Kotlin for Android Developers - 3
Kotlin for Android Developers - 3
 
Puppet DSL gotchas, and understandiing Roles & Profiles pattern
Puppet DSL gotchas, and understandiing Roles & Profiles patternPuppet DSL gotchas, and understandiing Roles & Profiles pattern
Puppet DSL gotchas, and understandiing Roles & Profiles pattern
 
Building DSLs with Xtext - Eclipse Modeling Day 2009
Building DSLs with Xtext - Eclipse Modeling Day 2009Building DSLs with Xtext - Eclipse Modeling Day 2009
Building DSLs with Xtext - Eclipse Modeling Day 2009
 

Similaire à Breaking The Monotony

JavaScript in Object-Oriented Way
JavaScript in Object-Oriented WayJavaScript in Object-Oriented Way
JavaScript in Object-Oriented WayChamnap Chhorn
 
"Xapi-lang For declarative code generation" By James Nelson
"Xapi-lang For declarative code generation" By James Nelson"Xapi-lang For declarative code generation" By James Nelson
"Xapi-lang For declarative code generation" By James NelsonGWTcon
 
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...Codemotion
 
Introduction to Clojure
Introduction to ClojureIntroduction to Clojure
Introduction to ClojureRenzo Borgatti
 
Douglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsDouglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsAjax Experience 2009
 
Going to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific LanguagesGoing to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific LanguagesGuillaume Laforge
 
Smoothing Your Java with DSLs
Smoothing Your Java with DSLsSmoothing Your Java with DSLs
Smoothing Your Java with DSLsintelliyole
 
Groovy On Trading Desk (2010)
Groovy On Trading Desk (2010)Groovy On Trading Desk (2010)
Groovy On Trading Desk (2010)Jonathan Felch
 
Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Guillaume Laforge
 
Java Basics for selenium
Java Basics for seleniumJava Basics for selenium
Java Basics for seleniumapoorvams
 
purely_functional_play_framework_application
purely_functional_play_framework_applicationpurely_functional_play_framework_application
purely_functional_play_framework_applicationNaoki Aoyama
 
Supercharging WordPress Development in 2018
Supercharging WordPress Development in 2018Supercharging WordPress Development in 2018
Supercharging WordPress Development in 2018Adam Tomat
 
Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009spierre
 
BDD Testing Using Godog - Bangalore Golang Meetup # 32
BDD Testing Using Godog - Bangalore Golang Meetup # 32BDD Testing Using Godog - Bangalore Golang Meetup # 32
BDD Testing Using Godog - Bangalore Golang Meetup # 32OpenEBS
 
Scala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologistScala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologistpmanvi
 
Enabling White-Box Reuse in a Pure Composition Language
Enabling White-Box Reuse in a Pure Composition LanguageEnabling White-Box Reuse in a Pure Composition Language
Enabling White-Box Reuse in a Pure Composition Languageelliando dias
 

Similaire à Breaking The Monotony (20)

JavaScript in Object-Oriented Way
JavaScript in Object-Oriented WayJavaScript in Object-Oriented Way
JavaScript in Object-Oriented Way
 
"Xapi-lang For declarative code generation" By James Nelson
"Xapi-lang For declarative code generation" By James Nelson"Xapi-lang For declarative code generation" By James Nelson
"Xapi-lang For declarative code generation" By James Nelson
 
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
 
Introduction to Clojure
Introduction to ClojureIntroduction to Clojure
Introduction to Clojure
 
Douglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsDouglas Crockford Presentation Goodparts
Douglas Crockford Presentation Goodparts
 
Going to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific LanguagesGoing to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific Languages
 
Smoothing Your Java with DSLs
Smoothing Your Java with DSLsSmoothing Your Java with DSLs
Smoothing Your Java with DSLs
 
Groovy On Trading Desk (2010)
Groovy On Trading Desk (2010)Groovy On Trading Desk (2010)
Groovy On Trading Desk (2010)
 
Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007
 
Java Basics for selenium
Java Basics for seleniumJava Basics for selenium
Java Basics for selenium
 
purely_functional_play_framework_application
purely_functional_play_framework_applicationpurely_functional_play_framework_application
purely_functional_play_framework_application
 
Supercharging WordPress Development in 2018
Supercharging WordPress Development in 2018Supercharging WordPress Development in 2018
Supercharging WordPress Development in 2018
 
Goodparts
GoodpartsGoodparts
Goodparts
 
Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009
 
Java For Automation
Java   For AutomationJava   For Automation
Java For Automation
 
BDD Testing Using Godog - Bangalore Golang Meetup # 32
BDD Testing Using Godog - Bangalore Golang Meetup # 32BDD Testing Using Godog - Bangalore Golang Meetup # 32
BDD Testing Using Godog - Bangalore Golang Meetup # 32
 
Scala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologistScala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologist
 
Enabling White-Box Reuse in a Pure Composition Language
Enabling White-Box Reuse in a Pure Composition LanguageEnabling White-Box Reuse in a Pure Composition Language
Enabling White-Box Reuse in a Pure Composition Language
 
Lecture7
Lecture7Lecture7
Lecture7
 
Perl 101
Perl 101Perl 101
Perl 101
 

Plus de Naresh Jain

Problem Solving Techniques For Evolutionary Design
Problem Solving Techniques For Evolutionary DesignProblem Solving Techniques For Evolutionary Design
Problem Solving Techniques For Evolutionary DesignNaresh Jain
 
Agile India 2019 Conference Welcome Note
Agile India 2019 Conference Welcome NoteAgile India 2019 Conference Welcome Note
Agile India 2019 Conference Welcome NoteNaresh Jain
 
Organizational Resilience
Organizational ResilienceOrganizational Resilience
Organizational ResilienceNaresh Jain
 
Improving the Quality of Incoming Code
Improving the Quality of Incoming CodeImproving the Quality of Incoming Code
Improving the Quality of Incoming CodeNaresh Jain
 
Agile India 2018 Conference Summary
Agile India 2018 Conference SummaryAgile India 2018 Conference Summary
Agile India 2018 Conference SummaryNaresh Jain
 
Agile India 2018 Conference
Agile India 2018 ConferenceAgile India 2018 Conference
Agile India 2018 ConferenceNaresh Jain
 
Agile India 2018 Conference
Agile India 2018 ConferenceAgile India 2018 Conference
Agile India 2018 ConferenceNaresh Jain
 
Agile India 2018 Conference
Agile India 2018 ConferenceAgile India 2018 Conference
Agile India 2018 ConferenceNaresh Jain
 
Pilgrim's Progress to the Promised Land by Robert Virding
Pilgrim's Progress to the Promised Land by Robert VirdingPilgrim's Progress to the Promised Land by Robert Virding
Pilgrim's Progress to the Promised Land by Robert VirdingNaresh Jain
 
Concurrent languages are Functional by Francesco Cesarini
Concurrent languages are Functional by Francesco CesariniConcurrent languages are Functional by Francesco Cesarini
Concurrent languages are Functional by Francesco CesariniNaresh Jain
 
Erlang from behing the trenches by Francesco Cesarini
Erlang from behing the trenches by Francesco CesariniErlang from behing the trenches by Francesco Cesarini
Erlang from behing the trenches by Francesco CesariniNaresh Jain
 
Anatomy of an eCommerce Search Engine by Mayur Datar
Anatomy of an eCommerce Search Engine by Mayur DatarAnatomy of an eCommerce Search Engine by Mayur Datar
Anatomy of an eCommerce Search Engine by Mayur DatarNaresh Jain
 
Setting up Continuous Delivery Culture for a Large Scale Mobile App
Setting up Continuous Delivery Culture for a Large Scale Mobile AppSetting up Continuous Delivery Culture for a Large Scale Mobile App
Setting up Continuous Delivery Culture for a Large Scale Mobile AppNaresh Jain
 
Towards FutureOps: Stable, Repeatable environments from Dev to Prod
Towards FutureOps: Stable, Repeatable environments from Dev to ProdTowards FutureOps: Stable, Repeatable environments from Dev to Prod
Towards FutureOps: Stable, Repeatable environments from Dev to ProdNaresh Jain
 
Value Driven Development by Dave Thomas
Value Driven Development by Dave Thomas Value Driven Development by Dave Thomas
Value Driven Development by Dave Thomas Naresh Jain
 
No Silver Bullets in Functional Programming by Brian McKenna
No Silver Bullets in Functional Programming by Brian McKennaNo Silver Bullets in Functional Programming by Brian McKenna
No Silver Bullets in Functional Programming by Brian McKennaNaresh Jain
 
Functional Programming Conference 2016
Functional Programming Conference 2016Functional Programming Conference 2016
Functional Programming Conference 2016Naresh Jain
 
Agile India 2017 Conference
Agile India 2017 ConferenceAgile India 2017 Conference
Agile India 2017 ConferenceNaresh Jain
 
Unleashing the Power of Automated Refactoring with JDT
Unleashing the Power of Automated Refactoring with JDTUnleashing the Power of Automated Refactoring with JDT
Unleashing the Power of Automated Refactoring with JDTNaresh Jain
 

Plus de Naresh Jain (20)

Problem Solving Techniques For Evolutionary Design
Problem Solving Techniques For Evolutionary DesignProblem Solving Techniques For Evolutionary Design
Problem Solving Techniques For Evolutionary Design
 
Agile India 2019 Conference Welcome Note
Agile India 2019 Conference Welcome NoteAgile India 2019 Conference Welcome Note
Agile India 2019 Conference Welcome Note
 
Organizational Resilience
Organizational ResilienceOrganizational Resilience
Organizational Resilience
 
Improving the Quality of Incoming Code
Improving the Quality of Incoming CodeImproving the Quality of Incoming Code
Improving the Quality of Incoming Code
 
Agile India 2018 Conference Summary
Agile India 2018 Conference SummaryAgile India 2018 Conference Summary
Agile India 2018 Conference Summary
 
Agile India 2018 Conference
Agile India 2018 ConferenceAgile India 2018 Conference
Agile India 2018 Conference
 
Agile India 2018 Conference
Agile India 2018 ConferenceAgile India 2018 Conference
Agile India 2018 Conference
 
Agile India 2018 Conference
Agile India 2018 ConferenceAgile India 2018 Conference
Agile India 2018 Conference
 
Pilgrim's Progress to the Promised Land by Robert Virding
Pilgrim's Progress to the Promised Land by Robert VirdingPilgrim's Progress to the Promised Land by Robert Virding
Pilgrim's Progress to the Promised Land by Robert Virding
 
Concurrent languages are Functional by Francesco Cesarini
Concurrent languages are Functional by Francesco CesariniConcurrent languages are Functional by Francesco Cesarini
Concurrent languages are Functional by Francesco Cesarini
 
Erlang from behing the trenches by Francesco Cesarini
Erlang from behing the trenches by Francesco CesariniErlang from behing the trenches by Francesco Cesarini
Erlang from behing the trenches by Francesco Cesarini
 
Anatomy of an eCommerce Search Engine by Mayur Datar
Anatomy of an eCommerce Search Engine by Mayur DatarAnatomy of an eCommerce Search Engine by Mayur Datar
Anatomy of an eCommerce Search Engine by Mayur Datar
 
Setting up Continuous Delivery Culture for a Large Scale Mobile App
Setting up Continuous Delivery Culture for a Large Scale Mobile AppSetting up Continuous Delivery Culture for a Large Scale Mobile App
Setting up Continuous Delivery Culture for a Large Scale Mobile App
 
Towards FutureOps: Stable, Repeatable environments from Dev to Prod
Towards FutureOps: Stable, Repeatable environments from Dev to ProdTowards FutureOps: Stable, Repeatable environments from Dev to Prod
Towards FutureOps: Stable, Repeatable environments from Dev to Prod
 
Value Driven Development by Dave Thomas
Value Driven Development by Dave Thomas Value Driven Development by Dave Thomas
Value Driven Development by Dave Thomas
 
No Silver Bullets in Functional Programming by Brian McKenna
No Silver Bullets in Functional Programming by Brian McKennaNo Silver Bullets in Functional Programming by Brian McKenna
No Silver Bullets in Functional Programming by Brian McKenna
 
Functional Programming Conference 2016
Functional Programming Conference 2016Functional Programming Conference 2016
Functional Programming Conference 2016
 
Agile India 2017 Conference
Agile India 2017 ConferenceAgile India 2017 Conference
Agile India 2017 Conference
 
The Eclipse Way
The Eclipse WayThe Eclipse Way
The Eclipse Way
 
Unleashing the Power of Automated Refactoring with JDT
Unleashing the Power of Automated Refactoring with JDTUnleashing the Power of Automated Refactoring with JDT
Unleashing the Power of Automated Refactoring with JDT
 

Dernier

Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 

Dernier (20)

Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 

Breaking The Monotony

  • 1. Breaking The Monotony @sai_venkat & @harikrishnan83
  • 2. Or
  • 3. Theme The Agility we seek is from the code we write and systems we build and not just from processes and practices we follow.
  • 4.
  • 5. Why this talk? ● As Craftsmen we are on look out for right tool for the job and sharing our experiences with you. ● This talk is based on the experiences we have on our day to day projects – The choice we make when we build the application can bring us agility. ● We have chosen to concentrate on these areas because in any decent sized (Enterprise :P) project these problems are common.
  • 7. Modeling time ● Aim – To build the world's largest resume builder. ● We choose you as the architect (or funky name – Master Craftsman) to create a model of a profile builder. ● Tell us what you need (tools, frameworks) and your model. ● Catch – We don't want to restrict the resumes coming in from public in any way. We want the users to give as much information about them as possible
  • 8. Person_PK LastName Resume Person Title Summary _PK _FK 1 clouseau 2 1 Inspector Developer with turned instincts of an Developer inspector Resume_FK Skill_FK 2 1 Skill_PK Name Description 2 2 1 Java Statically 2 3 typed language 2 Clojure Lisp like language 3 S E L E C T * F R O M P e r s o n p , R e s u m e r, S k ill s , R e s u m e _ S k ill r s Haskel Functional W HERE language p .P e r s o n _ P K = r.P e r s o n _ F K A N D r.R e s u m e _ P K = r s . R e s u m e _ F K A N D s . S k ill_ P K = r s . S k ill_ F K A N D s .N a m e in ( “ J a v a ” , “ C lo j u r e ” )
  • 9. Same Data Modeled as Documents { { Name: “Closseau”, Name: “Mr Magoo”, title: “Inspector turned developer”, title: “Funny developer”, Skills: [“Ruby”, “Haskell”, “C#”], Skills: [“Ruby”, “Self”, “Clojure”], Telephone_Numbers: [9611805466], Email-id: “magoo@looneytoons.com”, Experience: 5 Experience: 4 } } Querying the Data: Map function: function(doc) { if (contains(doc.skills, [“java”, “clojure”])) { emit(null, doc); } }
  • 10. A Case for Non Relational Databases ● Schema less Data helps us to evolve the model over the course of application development and maintenance (Ex. FriendFeed, github, Sourceforge) ● Scaling out is easy in nosql databases. Throw in more commodity machine. ● You may not always need atomic consistency (Dirty interface of mnesia) ● Most nosql Databases are simpler than conventional RDBMS, hence more robust and lightweight ● SQL Engines are only a convenience If they are not helping don't have to use them (Waffle on Mysql Datastore)
  • 11. Polyglot & PolyParadigm Programming ● Today's Applications Need to ● Must scale ● Must be resilient and secure ● Must evolve for future ● Work with large volumes of data and users.
  • 12. Hope you don't have someone like this in your team - I work only with Java.....
  • 13. Polyglot & PolyParadigm Programming ● Are there any advantages to writing an entire application in one language or one stack (Microsoft shop or Java shop anyone)? ● Is one language best for all domains? ● Are we harnessing the power we have in our hardware? ● Languages have their boundaries – Imperative vs Functional, Static vs Dynamic, Procedural vs Object Oriented ● Advantages are mostly relative and context sensitive. ● Examples: Flightcaster, Facebook Chat, github - BERT, Runa – Swarmiji, Twitter ● No Language Wars please :)
  • 14. In Erlang In Java -module (fact). -export ([fact/1]). public int fact(int value) { fact(0) -> 1; if (value == 0) fact(N) -> N * fact(N -1). { return 0; } else Tail Recursion Optimized { return value * fact(value - 1); -module (fact). } -export ([fact/1]). } fact(N) -> fact(N, 1). fact(0, A) -> A; fact(N, A) -> fact(N -1, N * A).
  • 15. Polyglotism in Testing We would use Java or C# to write functional tests as our application code is in that language require “watir” package org.openqa.selenium.example; browser = Watir::Browser.new(:firefox) import org.openqa.selenium.By; browser.goto “http://www.google.com” import org.openqa.selenium.WebDriver; browser.text_field(:name, “q”).set “Cheese” import org.openqa.selenium.WebElement; browser.button(:name, “btnG”).click import org.openqa.selenium.htmlunit.HtmlUnitDriver; puts “Page title is #{browser.title}” public class Example  {     public static void main(String[] args) {         WebDriver driver = new HtmlUnitDriver();         driver.get("http://www.google.com");         WebElement element = driver.findElement(By.name("q"));         element.sendKeys("Cheese!");         element.submit();         System.out.println("Page title is: " + driver.getTitle());     } }
  • 16. Polyglotism in Testing Using Cucumber + Jruby or Groovy for acceptance testing of services and API interfaces in Java. Feature: Proposal notification In order to reduce time spent on emailing Administrators should be able to mail all proposals owners depending on status Scenario: Email accepted proposal Given hari@gmail.com proposed 'Breaking the Monotony' And the 'Breaking the Monotony' proposal is approved When I send mass proposal email Then hari@gmail.com should get email """ Hi hari@gmail.com Congratulations, 'Breaking the Monotony' was accepted. See you at 'Agile India 2010'! """
  • 17. Polyglotism in Testing Using Cucumber + Jruby or Groovy for acceptance testing of services and API interfaces in Java. Feature: Proposal notification In order to reduce time spent on emailing Administrators should be able to mail all proposals owners depending on status Scenario: Email accepted proposal Given hari@gmail.com proposed 'Breaking the Monotony' And the 'Breaking the Monotony' proposal is approved When I send mass proposal email Then hari@gmail.com should get email """ Hi hari@gmail.com Congratulations, 'Breaking the Monotony' was accepted. See you at 'Agile India 2010'! """
  • 18. Build and Deployment ● Build script or Build code? ● 9000 lines of XML Code and still no test? ● We really need a first class language for flexibility ● Programming in XML doesn't make sense ● Pure declarative model solves some problems but reduces flexibility ● Testing is much simpler with a real language ● Use Ruby or Groovy for build (Example: FubuMVC in Rake) and Capistrano for deployment. ● Continuous Deployment. ● Cloud for deployment.
  • 19. The path less traveled
  • 20. Thank you for listening to us. Sai Venkatakrishnan Twitter - http://twitter.com/sai_venkat Github - http://github.com/saivenkat Blog - http://developer-in-test.blogspot.com Harikrishnan Twitter - http://twitter.com/harikrishnan83 Github - http://github.com/harikrishnan83 Blog - http://harikrishnan83.wordpress.com