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

Breaking The Monotony

  • 1.
    Breaking The Monotony @sai_venkat & @harikrishnan83
  • 2.
  • 3.
    Theme The Agility weseek is from the code we write and systems we build and not just from processes and practices we follow.
  • 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.
  • 6.
  • 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 Modeledas 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 forNon 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'thave 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 Wewould 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 UsingCucumber + 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 UsingCucumber + 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 lesstraveled
  • 20.
    Thank you forlistening 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