Date post: | 06-May-2015 |
Category: |
Technology |
Upload: | naresh-jain |
View: | 3,959 times |
Download: | 0 times |
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
1 clouseau
Resume_PK
Person_FK
Title Summary
2 1 Inspector turned Developer
Developer with instincts of an inspector
Resume_FK Skill_FK
2 1
2 2
2 3
Skill_PK Name Description
1 Java Statically typed language
2 Clojure Lisp like language
3 Haskel Functional language
S E L E C T * F R O M P e r so n p , R e s u m e r, S k il l s , R e s u m e _ S k i l l r s W H E R E
p .P e r so n _ P K = r.P e r s o n _ F K A N Dr.R e s u m e _ P K = r s .R e s u m e _ F K A N Ds .S k i l l_ P K = r s .S k i l l_ F K A N Ds .N a m e in ( “ J a v a ” , “ C lo ju r e ” )
Same Data Modeled as Documents
{ Name: “Mr Magoo”, title: “Funny developer”, Skills: [“Ruby”, “Self”, “Clojure”], Email-id: “[email protected]”, Experience: 4}
{ Name: “Closseau”, title: “Inspector turned developer”, Skills: [“Ruby”, “Haskell”, “C#”], Telephone_Numbers: [9611805466], Experience: 5}
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
-module (fact).-export ([fact/1]).
fact(0) -> 1;fact(N) -> N * fact(N -1).
Tail Recursion Optimized
-module (fact).-export ([fact/1]).
fact(N) -> fact(N, 1).
fact(0, A) -> A;fact(N, A) -> fact(N -1, N * A).
In Java
public int fact(int value) { if (value == 0) { return 0; } else { return value * fact(value - 1); } }
Polyglotism in Testing
package org.openqa.selenium.example;
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.htmlunit.HtmlUnitDriver;
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()); }}
require “watir”
browser = Watir::Browser.new(:firefox)browser.goto “http://www.google.com”browser.text_field(:name, “q”).set “Cheese”browser.button(:name, “btnG”).clickputs “Page title is #{browser.title}”
We would use Java or C# to write functional tests as our application code is in that language
Polyglotism in Testing
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 [email protected] proposed 'Breaking the Monotony' And the 'Breaking the Monotony' proposal is approved When I send mass proposal email Then [email protected] should get email """ Hi [email protected] Congratulations, 'Breaking the Monotony' was accepted. See you at 'Agile India 2010'! """
Using Cucumber + Jruby or Groovy for acceptance testing of services and API interfaces in Java.
Polyglotism in Testing
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 [email protected] proposed 'Breaking the Monotony' And the 'Breaking the Monotony' proposal is approved When I send mass proposal email Then [email protected] should get email """ Hi [email protected] Congratulations, 'Breaking the Monotony' was accepted. See you at 'Agile India 2010'! """
Using Cucumber + Jruby or Groovy for acceptance testing of services and API interfaces in Java.
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_venkatGithub - http://github.com/saivenkatBlog - http://developer-in-test.blogspot.com
Harikrishnan
Twitter - http://twitter.com/harikrishnan83Github - http://github.com/harikrishnan83Blog - http://harikrishnan83.wordpress.com