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.
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
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 rso n p , R e su m e r, S k ill s, R e su m e _ S k ill rs W H E R E p .P e rso n _ P K = r.P e rso n _ F K A N D r.Re su m e _P K = rs.R e su m e _ F K A N D s.S k ill_ P K = rs.S k ill_ F K A N D s .N a m e in ( “J a v a ”, “C lo ju re ”)
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)
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 :)
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”).click puts “Page title is #{browser.title}” We would use Java or C# to write functional tests as our application code is in that language
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.
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.
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.