Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)
Upcoming SlideShare
Loading in...5
×
 

Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

on

  • 2,342 views

Esta ponencia tiene como objetivo mostrar como conjuntar y aprovechar las ventajas de trabajar con Groovy & Grails, llevar el control del versionado con Git y simular la puesta en producción de la ...

Esta ponencia tiene como objetivo mostrar como conjuntar y aprovechar las ventajas de trabajar con Groovy & Grails, llevar el control del versionado con Git y simular la puesta en producción de la aplicación en GoogleAppEngine.

Statistics

Views

Total Views
2,342
Views on SlideShare
2,327
Embed Views
15

Actions

Likes
3
Downloads
42
Comments
0

2 Embeds 15

http://www.slideshare.net 14
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine) Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine) Presentation Transcript

  • Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)
    José Juan Reyes Zuñiga
    CIO
    SynergyJ
  • 2
    Objetivo
    Demostrarlasventajascompetitivas al desarrollarcon Groovy & Grails, llevar el control del versionado con Git ysimular la puesta en producción de la aplicación.
  • Agenda
    Groovy
    Grails
    Git
    Google AppEngine
    3
  • Groovy…¿Qué es…?
    Es un lenguaje dinámico para la JVM
    Construido con la fuerza de Java pero incluyendo características poderosas inspiradas en lenguajes como Python, Ruby y Smalltalk
    Es un proyecto con licencia Open Source-Apache
    Gramática relajada derivada de Java 5
    Integración fluida con todos los objetos Java y los cientos de librerías
    Compila a bytecode Java, por lo tanto, se puede usar donde sea
    Simplifica las pruebas
    Aumenta la productividad del desarrollador
    Su curva de aprendizaje mínima
  • HolaMundo en Java
    publicclassHolaMundo {
    privateStringnombre;
    publicStringgetNombre() {
    returnnombre;
    }
    publicvoidsetNombre(String nombre) {
    this.nombre = nombre;
    }
    publicString saluda() {
    return"Hola " + this.nombre + " !!!";
    }
    publicstaticvoidmain(String[] args) {
    HolaMundo objeto = newHolaMundo();
    objeto.setNombre("@SG09Conf");
    System.out.println(objeto.saluda());
    }
    }
  • HolaMundo en Groovy
    publicclassHolaMundo {
    privateStringnombre;
    publicStringgetNombre() {
    return nombre;
    }
    publicvoidsetNombre(String nombre) {
    this.nombre = nombre;
    }
    publicString saluda() {
    return"Hola " + this.nombre + " !!!";
    }
    publicstaticvoidmain(String[] args) {
    HolaMundo objeto = newHolaMundo();
    objeto.setNombre("@SG09Conf");
    System.out.println(objeto.saluda());
    }
    }
  • Mejor a la manera Groovy
    classHolaMundo {
    Stringnombre
    def saluda() { "Hola ${this.nombre} !!!" }
    }
    def objeto = newHolaMundo(nombre:"@SGConf")
    println(objeto.saluda())
  • ¿Cómo llegamos a esto…?
    Tener el JDK instalado
    Establecer la variable JAVA_HOME y agregarla al PATH en el subdirectorio /bin
    Descargamos la distribución de Groovy en http://groovy.codehaus.org/
    Creamos una variable de entorno GROOVY_HOME apuntando al directorio donde se descomprimió la distribución
    Adicionalmente, incluir en el PATH el directorio /bin de la variable de entorno GROOVY_HOME, es decir: %GROOVY_HOME%/bin
    Let’s rock thecode!!!
  • + Groovy en una mirada
    Totalmente Orientado a objetos
    Perfecta integración con Java
    Closures
    Convención de JavaBeans
    Esencia vs. Ceremonia
    Aritmética con BigDecimal por default para la operación de punto flotante
    API’s amigables y prácticas
    XML, JDBC, JMX, Swing
    DSL(DomainSpecificLanguage)
    Builders
    Sobrecarga de operadores
    GDK
  • Azúcar sintáctica + GDK
    Listas
    defnumeros = [1,2,3,4,5]
    Mapas
    def mapa = [DF:'Distrito Federal',MTY:'Monterrey']
    Rangos
    def rangos = 199..299
    Asignación Múltiple
    def (a,b) = [10,20]
    Return Opcional
    defmetodo(bool) { if(bool) 1else0 }
  • Groovy en profundidad
    Meta-programación
    La habilidad de un lenguaje para modificarse a sí mismo
    Transformaciones AST
    @Singleton
    @Inmutable, @Lazy, @Delegate
    @Newify
    @Category & @Mixin
    @PackageScope
    @Bindable & @Vetoable
    @Grab
  • Ahora hablemos de …
  • ¿Que es Grails?
    Una plataforma para desarrollo ágil en Web
    Un framework MVC full-stack
    Un proyecto Open Source
    Corre en la JVM
    Desarrollo de Aplicaciones con Groovy
    Altamente expresivo
    Totalmente orientado a Objetos
    Dinámico
    Sintaxis familiar
    Perfecta integración con Java
    Convención sobre configuración
    DRY(Don'tRepeatYourself)
  • Stack de tecnologías
  • ¿qué me provee?
    MVC zero-configurationDependency_Injectiongsptransacciones JNDI groovyInternacionalización Web_FlowTag_librariesCachinghibernatescaffolding REST LayoutsAJAX JettyUnit testingIntegrationtestinggrailsplugins quartzacegiactivemqamazon-s3 gaeaxiscamelcriteriaGORM dwrextSpring
    flexfreemarkerjava geoipgwtivyjpajqueryldap mail openidpaypalpdfsakaispringmvctaggableterracottatomcattwitterwebtestxfireyui
  • Let’scodeagain!!!
  • Más Grails…
    Mappings
    Internacionalización
    Ajax
    WebFlow
    GORM
    Servicios
    Plugins
    Seguridad
    Web Services
    Más…
  • La vida y los proyectos…
    “…así la vida como los proyectos de software son aburridos si se cuentan y se desarrollan de manera líneal…”
  • Git– Control de versiones
    Git es:
    “Un sistema de control de versiones distribuido libre y open source, diseñado para manejar cada objeto en proyectos pequeños y grandes con velocidad y eficiencia…”
    Creado por Linus Torvalds
  • ¿Distribuido?
    Colaboración
    Cambios sin perturbar a los demás
    Las ramas(branches) que afectan al repositorio local son inaceptables
    Confianza en tus datos
    Sin tener que creer implícitamente en los demás o en el hosting
    Liberaciones de Ingeniería
    Ciclos concurrentes de desarrollo/pruebas/liberaciones
  • Aaahhh Distribuido….
  • Diferencias y ventajas con CVCS
    No hay copias de referencia, solo copias de trabajo locales
    Las operaciones más comunes son regularmente más rápidas ya que no tienen que comunicarse con un servidor central
    No hay necesidad de hacer update antes de hacer commit
    No hay problemas con la red y la latencia generada
    No necesitamos hacer una instalación en un servidor remoto
    Los desarrolladores pueden trabajar sin estar conectados a su red local o a Internet
    Branches experimentales
    Performance
  • Formas de trabajo con Git & DCVS
    Alone
    En pares
    Centralizado
    Descentralizado
  • Instalación de Git
    En función del Sistema Operativo:
    Basado en RedHat
    RPM
    Basado en Debian
    Debs
    Windows
    .exe
    OS X
    DMG
    Solaris
  • Continuemos entonces…
  • Puesta en producción…
  • Infraestructura
  • Una opción…
  • Google AppEngine
    Solución de CloudComputing de Google
    Correr aplicaciones en la infraestructura escalable de Google
    El pago es basado en los recursos usados: almacenamiento, ancho de banda(medido en GB)
    De manera gratuita:
    Hasta 500MB de almacenamiento
    Hasta 5 millones de páginas vistas por mes
    Ahora está disponible para la JVM
    Por lo tanto para Scala, JRuby y...
    GROOVY!!!
  • Entorno GAE
    Corre en Java 6(con algunas limitaciones)
    El request será terminado si no se completa en 30 segundos, arrojando excepción
    Además:
    No hay sockets
    No hay hilos o timers
    No hay JNDI
    System.gc(),System.exit(),etc, no hacen nada
    Algunos problemas con el classloader
  • Escalabilidad en GAE
    30 requests dinámicos simultáneos
    El tiempo de procesamiento del lado servidor es de 75ms
    Alrededor de 400 request/seg. Sin latencia adicional
  • Servicios en GAE
    URL Fetch
    Mail
    Memcache
    Manipulación de Imágenes
    Manejo de usuarios
    Consola de administración
    Calendarización
  • Almacenamiento en GAE
    Datastore
    Almacenamiento de datos distribuido y transaccional
    Filtrado y ordenamiento por el valor del propiedad
    No es relacional, es “esquemático”
  • Persistencia en GAE
    Toda la persistencia es definida por clases @not@d@s
    JDO
    JPA
    Todo es almacenado en BigTable
    Es masivamente escalable
    Es un sistema de almacenamiento distribuido
    Usada por Google para muchas cosas
    Para Java, la API usa el optimizador de Datanucleus
  • Desarrollo en GAE
    Cuenta con un SDK descargable
    Incluye un webserver
    Emula los servicios
    Incluye una herramienta de Upload
    Soporta Java 5 y 6
    Existen un plugin de GAE para Eclipse y uno para Grails
    Debemos de cubrir un proceso de registro sencillo
    Solo podemos subir 10 aplicaciones(gratuitamente)
  • Plugin de GAE para Grails
    Crear una appGrails que coincida con el nombre de nuestra app GAE
    Desinstalar el plugin de Hibernate
    Instalar el plugin app-engine(previokit de GAE instalado)
    Establecer la versión(a 1 preferentemente)
    Desplegar
    Listo..
  • GAE es una opción
    Existen también:
    Amazon EC2
    SpringSourceCloudFoundry
    Entre otros…
  • All in one-place
  • em@il: jjuan.reyes@synergyj.com
    facebook, flickr, digg, twitter, delicious: neodevelop
    Comunidad: http://grails.org.mx
    Preguntas y Respuestas