SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
INTRODUCTION TO GROOVY
AND GRAILS AT TAULIA
2012-07-11 for TechTalks.ph
Philip Stehlik
About
•  Entrepreneur living in San Francisco
•  Co-Founder and CTO Taulia
•  Coding since teenage years (PHP, Objective-
     C, ABAP, JS, Java, Groovy)
•    Taulia serving Fortune 2000 companies with
     financial software (SaaS + Add-On for SAP)
•    Engineering team of ~20 people
•    Almost everything in Groovy
Taulia's tech stack
•  Groovy and Grails from day 1 (Grails 1.0)
•  Completely in the cloud
•  Integrating with many outside systems
•  Partners (e-invoicing, orders, payment
     details, ...)
•    Web Services
•    Interfacing with 'Legacy' technologies
•    Gradle, Spring, Hibernate, Jersey, Maven, ...
How to interact with our systems
•  Browser
•  REST
•  SOAP
•  XMLRPC
•  File exchange (FTP(S), AS2, SSH)
•  Lots of data munching and transformation
Kinds of data
•  Invoices, Payment history, Orders
•  Vendor data – address, social security, tax ID
•  Messages, logins, users
•  Logs
•  Complete history of 2 yrs of our customers
  upon project launch
Why we like Groovy
•  Simple, nice language
•  Dynamic features (for builders, testing, ...)
•  Closures
•  Tight and easy integration possibilities with
     Java
•    Open source (Apache 2 license)
•    Grails
Groovy
•  Started development in 2003
•  Groovy 1.0 January 2, 2007
•  Dynamic language for the Java Virtual
  Machine
Groovy
•  Almost all valid Java code is valid Groovy
     code
•    Mostly dynamic typing (static typing since 2.0
     in core)
•    Closures
•    DSLs and builders
•    Object oriented
•    Also 'scripting language'
System.out.println("Hello,           // optional semicolon
  World!");                          // System.out, brackets,
println 'Hello, World!'              // main(), class defn

                                     // dynamic typing
def name = 'Luke'                    // GString
println "$name, I am your father."


String yodaSays = """${name}, your   // multi-line string
father he is."""                     // with static typing

                                     // BigDecimal equals()
assert 0.5 == 1/2


def printSize(obj) {                 // optional duck typing
      print obj?.size()              // safe dereferencing
}                                    //   native list syntax
def letters = ['a', 'b', 'c']        //   closure support
letters.each { letter ->             //   overload '<' on String
                                     //   or: for (pet in pets)
    assert letter < 'd'
}
Java
for(int x = 0; x < 20; x++){
  System.out.println("counter is: "
                     + x );
}

Groovy
20.times {
  println "counter is: ${it}"
}
Running .groovy files
•  from command line groovy [file name]
•  compile and distribute as JAR/WAR
•  groovyConsole
•  online http://groovyconsole.appspot.com/
•  groovy sh
Code
Grails
•  High productivity web development
     framework
•    First version in 2006 (1.0 in 2008)
•    Version 2.1 recently released
•    Open source (Apache 2 license)
•    Supported by SpringSource (VMware)
Grails
•  Spring, Hibernate, Groovy
•  MVC
•  GroovyServerPages
•  Convention over configuration
•  Plugin system
  o  MongoDB, Redis
  o  Jquery, Mootols, Bootstrap, BlueprintCSS
  o  Quartz, Apache Shiro, GoogleAppEngine
  o  ...
Code
Additional info
•  IDE
  o  IntelliJ
  o  STS (SpringSource Tool Suite)
  o  Eclipse plugin


•  Other prominent users
  o  Netflix (Just released Asgard)
  o  Sky.com
  o  wired.com
  o  ...
More?
Taulia Architecture
•  Everything running on AWS
•  Multiple zones and regions
•  Tomcat
•  Apache
•  HAProxy
•  MySQL, MongoDB, S3
•  All traffic and business data encrypted with at
     least AES256
•    Multiple Grails apps, Servlets, jobs
Idea to Deployment
•  One-Pager
•  Product team:
  o  Product Manager
  o  Engineer
  o  Quality Engineer
     Meeting at least weekly with everybody involved to
     gauge progress.
•  Paper prototyping, interviews, refining
•  Everybody involved from the beginning
Idea to Deployment #2
•  Developer codes locally
•  All tests on each commit (Jenkins)
•  Auto deploys to integration environment (also
     publicly accessible for feedback and demos)
•    QE and product feedback
•    Iterate
•    Two week sprints – deploy to public QA and
     PRD
•    Using sleeping features
Thanks!


Say hi when you are in San Francisco!

p@pstehlik.com
@pstehlik
http://pstehlik.com

Mais conteúdo relacionado

Mais procurados

Secrets with Ansible
Secrets with AnsibleSecrets with Ansible
Secrets with AnsibleDougBridgens
 
MongoDB at RubyEnRails 2009
MongoDB at RubyEnRails 2009MongoDB at RubyEnRails 2009
MongoDB at RubyEnRails 2009Mike Dirolf
 
Advanced jQuery (Ajax Exp 2007)
Advanced jQuery (Ajax Exp 2007)Advanced jQuery (Ajax Exp 2007)
Advanced jQuery (Ajax Exp 2007)jeresig
 
Introduction to jQuery (Ajax Exp 2007)
Introduction to jQuery (Ajax Exp 2007)Introduction to jQuery (Ajax Exp 2007)
Introduction to jQuery (Ajax Exp 2007)jeresig
 
JavaScript Library Overview (Ajax Exp West 2007)
JavaScript Library Overview (Ajax Exp West 2007)JavaScript Library Overview (Ajax Exp West 2007)
JavaScript Library Overview (Ajax Exp West 2007)jeresig
 
MongoDB at ZPUGDC
MongoDB at ZPUGDCMongoDB at ZPUGDC
MongoDB at ZPUGDCMike Dirolf
 
Drupal 7: What's In It For You?
Drupal 7: What's In It For You?Drupal 7: What's In It For You?
Drupal 7: What's In It For You?karschsp
 
MongoDB: a gentle, friendly overview
MongoDB: a gentle, friendly overviewMongoDB: a gentle, friendly overview
MongoDB: a gentle, friendly overviewAntonio Pintus
 
Mongo db in 3 minutes BoilerMake
Mongo db in 3 minutes   BoilerMakeMongo db in 3 minutes   BoilerMake
Mongo db in 3 minutes BoilerMakeValeri Karpov
 
State of jQuery and Drupal
State of jQuery and DrupalState of jQuery and Drupal
State of jQuery and Drupaljeresig
 
C# Development (Sam Corder)
C# Development (Sam Corder)C# Development (Sam Corder)
C# Development (Sam Corder)MongoSF
 
Firebird Interbase Database engine hacks or rtfm
Firebird Interbase Database engine hacks or rtfmFirebird Interbase Database engine hacks or rtfm
Firebird Interbase Database engine hacks or rtfmqqlan
 
MongoDB at FrozenRails
MongoDB at FrozenRailsMongoDB at FrozenRails
MongoDB at FrozenRailsMike Dirolf
 
Palm Developer Day PhoneGap
Palm Developer Day PhoneGap Palm Developer Day PhoneGap
Palm Developer Day PhoneGap Brian LeRoux
 
Introducing DynaTrace AJAX Edition
Introducing DynaTrace AJAX EditionIntroducing DynaTrace AJAX Edition
Introducing DynaTrace AJAX EditionKyoungtaek Koo
 

Mais procurados (20)

Kiosk / PHP
Kiosk / PHP Kiosk / PHP
Kiosk / PHP
 
Secrets with Ansible
Secrets with AnsibleSecrets with Ansible
Secrets with Ansible
 
ElasticSearch
ElasticSearchElasticSearch
ElasticSearch
 
CouchDB in The Room
CouchDB in The RoomCouchDB in The Room
CouchDB in The Room
 
nodecalgary1
nodecalgary1nodecalgary1
nodecalgary1
 
MongoDB at RubyEnRails 2009
MongoDB at RubyEnRails 2009MongoDB at RubyEnRails 2009
MongoDB at RubyEnRails 2009
 
Advanced jQuery (Ajax Exp 2007)
Advanced jQuery (Ajax Exp 2007)Advanced jQuery (Ajax Exp 2007)
Advanced jQuery (Ajax Exp 2007)
 
Introduction to jQuery (Ajax Exp 2007)
Introduction to jQuery (Ajax Exp 2007)Introduction to jQuery (Ajax Exp 2007)
Introduction to jQuery (Ajax Exp 2007)
 
JavaScript Library Overview (Ajax Exp West 2007)
JavaScript Library Overview (Ajax Exp West 2007)JavaScript Library Overview (Ajax Exp West 2007)
JavaScript Library Overview (Ajax Exp West 2007)
 
MongoDB at ZPUGDC
MongoDB at ZPUGDCMongoDB at ZPUGDC
MongoDB at ZPUGDC
 
Drupal 7: What's In It For You?
Drupal 7: What's In It For You?Drupal 7: What's In It For You?
Drupal 7: What's In It For You?
 
MongoDB: a gentle, friendly overview
MongoDB: a gentle, friendly overviewMongoDB: a gentle, friendly overview
MongoDB: a gentle, friendly overview
 
Mongo db in 3 minutes BoilerMake
Mongo db in 3 minutes   BoilerMakeMongo db in 3 minutes   BoilerMake
Mongo db in 3 minutes BoilerMake
 
State of jQuery and Drupal
State of jQuery and DrupalState of jQuery and Drupal
State of jQuery and Drupal
 
C# Development (Sam Corder)
C# Development (Sam Corder)C# Development (Sam Corder)
C# Development (Sam Corder)
 
Firebird Interbase Database engine hacks or rtfm
Firebird Interbase Database engine hacks or rtfmFirebird Interbase Database engine hacks or rtfm
Firebird Interbase Database engine hacks or rtfm
 
MongoDB at FrozenRails
MongoDB at FrozenRailsMongoDB at FrozenRails
MongoDB at FrozenRails
 
Palm Developer Day PhoneGap
Palm Developer Day PhoneGap Palm Developer Day PhoneGap
Palm Developer Day PhoneGap
 
Introducing DynaTrace AJAX Edition
Introducing DynaTrace AJAX EditionIntroducing DynaTrace AJAX Edition
Introducing DynaTrace AJAX Edition
 
bcgr3-jquery
bcgr3-jquerybcgr3-jquery
bcgr3-jquery
 

Semelhante a Philip Stehlik at TechTalks.ph - Intro to Groovy and Grails

Big Data, Data Lake, Fast Data - Dataserialiation-Formats
Big Data, Data Lake, Fast Data - Dataserialiation-FormatsBig Data, Data Lake, Fast Data - Dataserialiation-Formats
Big Data, Data Lake, Fast Data - Dataserialiation-FormatsGuido Schmutz
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on RailsAvi Kedar
 
1.6 米嘉 gobuildweb
1.6 米嘉 gobuildweb1.6 米嘉 gobuildweb
1.6 米嘉 gobuildwebLeo Zhou
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.jsorkaplan
 
13 practical tips for writing secure golang applications
13 practical tips for writing secure golang applications13 practical tips for writing secure golang applications
13 practical tips for writing secure golang applicationsKarthik Gaekwad
 
Nodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredevNodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredevFelix Geisendörfer
 
Node.js: The What, The How and The When
Node.js: The What, The How and The WhenNode.js: The What, The How and The When
Node.js: The What, The How and The WhenFITC
 
Practical Use of MongoDB for Node.js
Practical Use of MongoDB for Node.jsPractical Use of MongoDB for Node.js
Practical Use of MongoDB for Node.jsasync_io
 
Webdevcon Keynote hh-2012-09-18
Webdevcon Keynote hh-2012-09-18Webdevcon Keynote hh-2012-09-18
Webdevcon Keynote hh-2012-09-18Pierre Joye
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVCAlive Kuo
 
node.js: Javascript's in your backend
node.js: Javascript's in your backendnode.js: Javascript's in your backend
node.js: Javascript's in your backendDavid Padbury
 
Event-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineEvent-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineRicardo Silva
 
Managing Your Security Logs with Elasticsearch
Managing Your Security Logs with ElasticsearchManaging Your Security Logs with Elasticsearch
Managing Your Security Logs with ElasticsearchVic Hargrave
 

Semelhante a Philip Stehlik at TechTalks.ph - Intro to Groovy and Grails (20)

Big Data, Data Lake, Fast Data - Dataserialiation-Formats
Big Data, Data Lake, Fast Data - Dataserialiation-FormatsBig Data, Data Lake, Fast Data - Dataserialiation-Formats
Big Data, Data Lake, Fast Data - Dataserialiation-Formats
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
 
1.6 米嘉 gobuildweb
1.6 米嘉 gobuildweb1.6 米嘉 gobuildweb
1.6 米嘉 gobuildweb
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.js
 
13 practical tips for writing secure golang applications
13 practical tips for writing secure golang applications13 practical tips for writing secure golang applications
13 practical tips for writing secure golang applications
 
Nodejs - A quick tour (v6)
Nodejs - A quick tour (v6)Nodejs - A quick tour (v6)
Nodejs - A quick tour (v6)
 
Node azure
Node azureNode azure
Node azure
 
Nodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredevNodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredev
 
Node.js: The What, The How and The When
Node.js: The What, The How and The WhenNode.js: The What, The How and The When
Node.js: The What, The How and The When
 
Practical Use of MongoDB for Node.js
Practical Use of MongoDB for Node.jsPractical Use of MongoDB for Node.js
Practical Use of MongoDB for Node.js
 
Webdevcon Keynote hh-2012-09-18
Webdevcon Keynote hh-2012-09-18Webdevcon Keynote hh-2012-09-18
Webdevcon Keynote hh-2012-09-18
 
REST easy with API Platform
REST easy with API PlatformREST easy with API Platform
REST easy with API Platform
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.js
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC
 
About Clack
About ClackAbout Clack
About Clack
 
node.js: Javascript's in your backend
node.js: Javascript's in your backendnode.js: Javascript's in your backend
node.js: Javascript's in your backend
 
Nodejs - A quick tour (v5)
Nodejs - A quick tour (v5)Nodejs - A quick tour (v5)
Nodejs - A quick tour (v5)
 
.NET7.pptx
.NET7.pptx.NET7.pptx
.NET7.pptx
 
Event-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineEvent-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 Engine
 
Managing Your Security Logs with Elasticsearch
Managing Your Security Logs with ElasticsearchManaging Your Security Logs with Elasticsearch
Managing Your Security Logs with Elasticsearch
 

Último

From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
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
 
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
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
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
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
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
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
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
 
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
 

Último (20)

From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
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
 
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)
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
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
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
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
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
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
 
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
 

Philip Stehlik at TechTalks.ph - Intro to Groovy and Grails

  • 1. INTRODUCTION TO GROOVY AND GRAILS AT TAULIA 2012-07-11 for TechTalks.ph Philip Stehlik
  • 2. About •  Entrepreneur living in San Francisco •  Co-Founder and CTO Taulia •  Coding since teenage years (PHP, Objective- C, ABAP, JS, Java, Groovy) •  Taulia serving Fortune 2000 companies with financial software (SaaS + Add-On for SAP) •  Engineering team of ~20 people •  Almost everything in Groovy
  • 3. Taulia's tech stack •  Groovy and Grails from day 1 (Grails 1.0) •  Completely in the cloud •  Integrating with many outside systems •  Partners (e-invoicing, orders, payment details, ...) •  Web Services •  Interfacing with 'Legacy' technologies •  Gradle, Spring, Hibernate, Jersey, Maven, ...
  • 4. How to interact with our systems •  Browser •  REST •  SOAP •  XMLRPC •  File exchange (FTP(S), AS2, SSH) •  Lots of data munching and transformation
  • 5. Kinds of data •  Invoices, Payment history, Orders •  Vendor data – address, social security, tax ID •  Messages, logins, users •  Logs •  Complete history of 2 yrs of our customers upon project launch
  • 6.
  • 7. Why we like Groovy •  Simple, nice language •  Dynamic features (for builders, testing, ...) •  Closures •  Tight and easy integration possibilities with Java •  Open source (Apache 2 license) •  Grails
  • 8. Groovy •  Started development in 2003 •  Groovy 1.0 January 2, 2007 •  Dynamic language for the Java Virtual Machine
  • 9. Groovy •  Almost all valid Java code is valid Groovy code •  Mostly dynamic typing (static typing since 2.0 in core) •  Closures •  DSLs and builders •  Object oriented •  Also 'scripting language'
  • 10. System.out.println("Hello, // optional semicolon World!"); // System.out, brackets, println 'Hello, World!' // main(), class defn // dynamic typing def name = 'Luke' // GString println "$name, I am your father." String yodaSays = """${name}, your // multi-line string father he is.""" // with static typing // BigDecimal equals() assert 0.5 == 1/2 def printSize(obj) { // optional duck typing print obj?.size() // safe dereferencing } // native list syntax def letters = ['a', 'b', 'c'] // closure support letters.each { letter -> // overload '<' on String // or: for (pet in pets) assert letter < 'd' }
  • 11. Java for(int x = 0; x < 20; x++){ System.out.println("counter is: " + x ); } Groovy 20.times { println "counter is: ${it}" }
  • 12. Running .groovy files •  from command line groovy [file name] •  compile and distribute as JAR/WAR •  groovyConsole •  online http://groovyconsole.appspot.com/ •  groovy sh
  • 13. Code
  • 14.
  • 15. Grails •  High productivity web development framework •  First version in 2006 (1.0 in 2008) •  Version 2.1 recently released •  Open source (Apache 2 license) •  Supported by SpringSource (VMware)
  • 16. Grails •  Spring, Hibernate, Groovy •  MVC •  GroovyServerPages •  Convention over configuration •  Plugin system o  MongoDB, Redis o  Jquery, Mootols, Bootstrap, BlueprintCSS o  Quartz, Apache Shiro, GoogleAppEngine o  ...
  • 17. Code
  • 18. Additional info •  IDE o  IntelliJ o  STS (SpringSource Tool Suite) o  Eclipse plugin •  Other prominent users o  Netflix (Just released Asgard) o  Sky.com o  wired.com o  ...
  • 19. More?
  • 20. Taulia Architecture •  Everything running on AWS •  Multiple zones and regions •  Tomcat •  Apache •  HAProxy •  MySQL, MongoDB, S3 •  All traffic and business data encrypted with at least AES256 •  Multiple Grails apps, Servlets, jobs
  • 21. Idea to Deployment •  One-Pager •  Product team: o  Product Manager o  Engineer o  Quality Engineer Meeting at least weekly with everybody involved to gauge progress. •  Paper prototyping, interviews, refining •  Everybody involved from the beginning
  • 22. Idea to Deployment #2 •  Developer codes locally •  All tests on each commit (Jenkins) •  Auto deploys to integration environment (also publicly accessible for feedback and demos) •  QE and product feedback •  Iterate •  Two week sprints – deploy to public QA and PRD •  Using sleeping features
  • 23. Thanks! Say hi when you are in San Francisco! p@pstehlik.com @pstehlik http://pstehlik.com