Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)<br />José Juan Reyes Zuñiga<br />CIO<br />SynergyJ<br />
2<br />Objetivo<br />Demostrarlasventajascompetitivas al desarrollarcon Groovy & Grails, llevar el control del versionado ...
Agenda<br />Groovy<br />Grails<br />Git<br />Google AppEngine<br />3<br />
Groovy…¿Qué es…?<br />Es un lenguaje dinámico para la JVM<br />Construido con la fuerza de Java pero incluyendo caracterís...
HolaMundo en Java<br />publicclassHolaMundo {<br />privateStringnombre;<br />publicStringgetNombre() {<br />returnnombre;<...
HolaMundo en Groovy<br />publicclassHolaMundo {<br />privateStringnombre;<br />publicStringgetNombre() {<br />return nombr...
Mejor a la manera Groovy<br />classHolaMundo {<br />Stringnombre<br />def saluda() { &quot;Hola  ${this.nombre} !!!&quot; ...
¿Cómo llegamos a esto…?<br />Tener el JDK instalado<br />Establecer la variable JAVA_HOME y agregarla al PATH en el subdir...
+ Groovy en una mirada<br />Totalmente Orientado a objetos<br />Perfecta integración con Java<br />Closures<br />Convenció...
Azúcar sintáctica + GDK<br />Listas<br />defnumeros = [1,2,3,4,5]<br />Mapas<br />def mapa = [DF:&apos;Distrito Federal&ap...
Groovy en profundidad<br />Meta-programación<br />La habilidad de un lenguaje para modificarse a sí mismo<br />Transformac...
Ahora hablemos de …<br />
¿Que es Grails?<br />Una plataforma para desarrollo ágil en Web<br />Un framework MVC full-stack<br />Un proyecto Open Sou...
Stack de tecnologías<br />
¿qué me provee?<br />MVC zero-configurationDependency_Injectiongsptransacciones JNDI groovyInternacionalización Web_FlowTa...
Let’scodeagain!!!<br />
Más Grails…<br />Mappings<br />Internacionalización<br />Ajax<br />WebFlow<br />GORM<br />Servicios<br />Plugins<br />Segu...
La vida y los proyectos…<br />“…así la vida como los proyectos de software son aburridos si se cuentan y se desarrollan de...
Git– Control de versiones<br />Git es:<br />“Un sistema de control de versiones distribuido libre y open source, diseñado ...
¿Distribuido?<br />Colaboración<br />Cambios sin perturbar a los demás<br />Las ramas(branches) que afectan al repositorio...
Aaahhh Distribuido….<br />
Diferencias y ventajas con CVCS<br />No hay copias de referencia, solo copias de trabajo locales<br />Las operaciones más ...
Formas de trabajo con Git & DCVS<br />Alone<br />En pares<br />Centralizado<br />Descentralizado<br />
Instalación de Git<br />En función del Sistema Operativo:<br />Basado en RedHat<br />RPM<br />Basado en Debian<br />Debs<b...
Continuemos entonces…<br />
Puesta en producción…<br />
Infraestructura<br />
Una opción…<br />
Google AppEngine<br />Solución de CloudComputing de Google<br />Correr aplicaciones en la infraestructura escalable de Goo...
Entorno GAE<br />Corre en Java 6(con algunas limitaciones)<br />El request será terminado si no se completa en 30 segundos...
Escalabilidad en GAE<br />30 requests dinámicos simultáneos<br />El tiempo de procesamiento del lado servidor es de 75ms<b...
Servicios en GAE<br />URL Fetch<br />Mail<br />Memcache<br />Manipulación de Imágenes<br />Manejo de usuarios<br />Consola...
Almacenamiento en GAE<br />Datastore<br />Almacenamiento de datos distribuido y transaccional<br />Filtrado y ordenamiento...
Persistencia en GAE<br />Toda la persistencia es definida por clases @not@d@s<br />JDO<br />JPA<br />Todo es almacenado en...
Desarrollo en GAE<br />Cuenta con un SDK descargable<br />Incluye un webserver<br />Emula los servicios<br />Incluye una h...
Plugin de GAE para Grails<br />Crear una appGrails que coincida con el nombre de nuestra app GAE<br />Desinstalar el plugi...
GAE es una opción<br />Existen también:<br />Amazon EC2<br />SpringSourceCloudFoundry<br />Entre otros…<br />
All in one-place<br />
em@il: jjuan.reyes@synergyj.com<br />facebook, flickr, digg, twitter, delicious: neodevelop<br />Comunidad: http://grails....
Upcoming SlideShare
Loading in...5
×

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

1,464

Published on

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.

Published in: Technology, Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,464
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
44
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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

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

    Clipping is a handy way to collect important slides you want to go back to later.

×