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 ” )
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.
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