SlideShare una empresa de Scribd logo
1 de 17
Ringio o cómo hacer realidad una
 aplicación de telefonía en Grails

         Mamen González
         4 Noviembre 2011
ÍNDICE

1.   ¿Qué es Ringio?
2.   Características
3.   Ringio en acción
4.   Arquitectura
5.   Evolución de la arquitectura: Ringio over Rayo
6.   Ventajas de RoR
7.   ¿Por qué Grails?
8.   Conclusiones
1 - ¿Qué es Ringio?




               Ringio es una centralita telefónica
          virtual, integrada con CRMs, que ayuda a las
           PYMES a mejorar la calidad de atención al
                              cliente.




                                                         3
2 - Características


  - Producto SaaS en la nube
  - Configurable a través de la web
  - Aplicaciones para escritorio y smartphones
  - Permite utilizar cualquier teléfono
  - Integración con CRMs y redes sociales
  - Control de llamada (Call Control) y Respuesta de Voz
  Interactiva (IVR)
  - Evita que se pierdan llamadas: callblast



                                                           4
3 – Ringio en acción (1/2) – Llamada entrante




        http://www.screencast.com/t/EqQz2ElaZD
3 – Ringio en acción (2/2) – Llamada saliente




         http://www.screencast.com/t/dFIVFNSfpz
4 – Arquitectura

     CRM plugins                                          BD
                                 API
                                REST

                                                         Servidor
                                         Ringio          ejabberd
                                         Server
                                                   XMPP
  Aplicaciones cliente
   móvil & escritorio
                                                  Aplicación
                                       HTTP        CCXML




               Ringio Clients                       Ringio Core

                                                               7
5 – Evolución de la arquitectura:
    Ringio over Rayo                                          BD
                                     Ringio
                       BD            Server                Servidor
                                                           ejabberd

                                                 XMPP
    Ringio            Servidor
                                    HTTP
                      ejabberd
    Server                                    Ringio over Rayo

               XMPP
                                                            client
                                              XMPP
                                                           server
               Aplicación
 HTTP           CCXML                           JSR 309   JSR 289




               Ringio Core                           Ringio Core
                                                                     8
6 – Ventajas de RoR

    <transition event="personal">
           <var name="srcParticipant" expr="getSourceParticipant(participants)"/>
                                                                                         No es necesario
           <var name="dstParticipant" expr="getDestinationParticipant(participants)"/>   utilizar CCXML /
           <if cond="srcParticipant.isBlackListed">
                                call.output(‘Hello Greach!’)
              <dialogstart src="blackDlgPath()" type="TYPE" dialogid="blacklistedDlg"    VoiceXML
    connectionid="getSrcConnId(participants)" parameters="voxeoUrls"/>
              <assign name="state" expr="'release'"/>                call.hold()
           <elseif cond="srcParticipant.isVIP &amp;&amp; dstParticipant.isCheckedIn"/>   Flujo más legible
    call.input(ringioMainMenuInput)
              <dialogstart src="welcomeDlgPath()" type="TYPE" dialogid="welcomeDlg"
    connectionid="getSrcConnId(participants)" parameters="participants
    extensionSelected voxeoUrls"/>                         call.disconnect()
              <assign name="state" expr="'waitingForUser'"/>
                                                                                         Call control
call.isHold() cond="!dstParticipant.isIdle || !dstParticipant.isCheckedIn"/>
                            call.answer()
           <elseif                                                                       en Groovy / Java
              <dialogstart src="userNotAvailPath()" type="TYPE"
                                                   outgoingCall.join()
                   call.isMute()
    dialogid="userNotAvailableDlg" connectionid="getSrcConnId(participants)"
    parameters="participants voxeoUrls"/>                                                Abstracción de
                                                    call.unHold()
  call.mute() name="state" expr="'vmailorcallback'"/>
              <assign
           <else/>                                                                       los detalles de
                           call.unMute()
              <dialogstart src="welcomeDlgPath()" type="TYPE" dialogid="welcomeDlg"
                                                                                         implementación
    connectionid="getSrcConnId(participants)" parameters="participants
    extensionSelected voxeoUrls"/>
              <assign name="state" expr="'waitingForUser'"/>                             Facilita el
           </if>
         </transition>                                                                   desarrollo
                                                                                         y la depuración

                                                                                                      9
7 – ¿Por qué Grails? (1/5)



    Desarrollo más ágil

        • Scaffolding

        • Convención sobre configuración

        • Facilidades para configuración de entornos

        • Se escribe menos en Groovy que en Java




                                                       10
7 – ¿Por qué Grails? (2/5)



    Facilidad para crear servicios JSON

        • En Ringio hacemos un uso extenso de JSON
        (comunicaciones con Voxeo, con aplicaciones desktop /
        móvil, API REST…)

        • parsers y converters de Grails:

            render. participant as JSON
                                            JSON.parse(response)




                                                                   11
7 – ¿Por qué Grails? (3/5)



    Sistema de plugins

        • El plugin ringobon-base contiene el modelo de datos y los
        servicios básicos.

        • El módulo Ringio Server está dividido en varios
        submódulos independientes que utilizan ese plugin.




                                                                      12
7 – ¿Por qué Grails? (4/5)



    Acceso a librerías Java

        • Se pueden usar APIs Java

        • En Ringio usamos, entre otras:

                   XMPP, Google Contacts, Voxeo Rayo…




                                                        13
7 – ¿Por qué Grails? (5/5)



    GORM

       • Facilidades para realizar consultas mediante Criteria,
       Dynamic finders o HQL. Ejemplos:

                     User.findAllByAccount(account)

                         Conversation.findAll()

       • Facilidades para almacenar datos de auditoría (fechas de
       creación, actualización…)




                                                                    14
8 – Conclusiones


   Nuestra experiencia con Grails ha sido muy satisfactoria.

                ágiles desarrollando
                rápidos en la adaptación a los cambios
         De ahí que en Paradigma Tecnológico se hayan
                implementado más proyectos en Grails




                                                               15
Q&A

      16
¡¡Gracias!!
  @gmamenl
  @mpermar

              17

Más contenido relacionado

Similar a Greach 2011 - Ringio, o como hacer realidad una aplicación de telefonía con Grails

Protocolo syslog
Protocolo   syslogProtocolo   syslog
Protocolo syslogUTP
 
App engine
App engineApp engine
App engineThirdWay
 
Novedades en Arquitectura Front End // Meetup UX UI @UTN Mendoza
Novedades en Arquitectura Front End // Meetup UX UI @UTN MendozaNovedades en Arquitectura Front End // Meetup UX UI @UTN Mendoza
Novedades en Arquitectura Front End // Meetup UX UI @UTN MendozaDiego Suarez
 
Html5 para móviles, las reglas no escritas
Html5 para móviles, las reglas no escritasHtml5 para móviles, las reglas no escritas
Html5 para móviles, las reglas no escritasCarlos Toxtli
 
Codemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayerCodemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayerIván López Martín
 
6.android introduccion
6.android   introduccion   6.android   introduccion
6.android introduccion guidotic
 
Node Js & 3D Printer
Node Js & 3D PrinterNode Js & 3D Printer
Node Js & 3D Printernanusefue
 
2015 10 - Curso Cliente @firma INAP día 2
2015 10 - Curso Cliente @firma INAP día 22015 10 - Curso Cliente @firma INAP día 2
2015 10 - Curso Cliente @firma INAP día 2Tomás García-Merás
 
Aprende a crear y desplegar una aplicación de python que use APIs de BlueVia
Aprende a crear y desplegar una aplicación de python que use APIs de BlueViaAprende a crear y desplegar una aplicación de python que use APIs de BlueVia
Aprende a crear y desplegar una aplicación de python que use APIs de BlueViaBlueVia
 
Vaadin y Grails Barcamp 2013
Vaadin y Grails Barcamp 2013Vaadin y Grails Barcamp 2013
Vaadin y Grails Barcamp 2013Carlos Camacho
 

Similar a Greach 2011 - Ringio, o como hacer realidad una aplicación de telefonía con Grails (20)

Real-time web
Real-time webReal-time web
Real-time web
 
RPC
RPCRPC
RPC
 
Protocolo syslog
Protocolo   syslogProtocolo   syslog
Protocolo syslog
 
App engine
App engineApp engine
App engine
 
Novedades en Arquitectura Front End // Meetup UX UI @UTN Mendoza
Novedades en Arquitectura Front End // Meetup UX UI @UTN MendozaNovedades en Arquitectura Front End // Meetup UX UI @UTN Mendoza
Novedades en Arquitectura Front End // Meetup UX UI @UTN Mendoza
 
Html5 para móviles, las reglas no escritas
Html5 para móviles, las reglas no escritasHtml5 para móviles, las reglas no escritas
Html5 para móviles, las reglas no escritas
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Despliegue de la solución de software
Despliegue de la solución de softwareDespliegue de la solución de software
Despliegue de la solución de software
 
Codemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayerCodemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayer
 
6.android introduccion
6.android   introduccion   6.android   introduccion
6.android introduccion
 
Presentacion jade
Presentacion jadePresentacion jade
Presentacion jade
 
Node Js & 3D Printer
Node Js & 3D PrinterNode Js & 3D Printer
Node Js & 3D Printer
 
Build and deploy
Build and deploy Build and deploy
Build and deploy
 
Grails barcamp 2013
Grails barcamp 2013Grails barcamp 2013
Grails barcamp 2013
 
Microservicios con .NET
Microservicios con .NETMicroservicios con .NET
Microservicios con .NET
 
Docker consul service discovery esp
Docker consul service discovery espDocker consul service discovery esp
Docker consul service discovery esp
 
2015 10 - Curso Cliente @firma INAP día 2
2015 10 - Curso Cliente @firma INAP día 22015 10 - Curso Cliente @firma INAP día 2
2015 10 - Curso Cliente @firma INAP día 2
 
Aprende a crear y desplegar una aplicación de python que use APIs de BlueVia
Aprende a crear y desplegar una aplicación de python que use APIs de BlueViaAprende a crear y desplegar una aplicación de python que use APIs de BlueVia
Aprende a crear y desplegar una aplicación de python que use APIs de BlueVia
 
Vaadin y Grails Barcamp 2013
Vaadin y Grails Barcamp 2013Vaadin y Grails Barcamp 2013
Vaadin y Grails Barcamp 2013
 
GraphQL Reactivo
GraphQL ReactivoGraphQL Reactivo
GraphQL Reactivo
 

Más de greach_es

Greach 2011 - Novedades de Grails 2.0
Greach 2011 - Novedades de Grails 2.0Greach 2011 - Novedades de Grails 2.0
Greach 2011 - Novedades de Grails 2.0greach_es
 
Greach 2011 - Cloud Foundry
Greach 2011 - Cloud FoundryGreach 2011 - Cloud Foundry
Greach 2011 - Cloud Foundrygreach_es
 
Greach 2011 - Migración de proyectos JEE a Grails
Greach 2011 - Migración de proyectos JEE a GrailsGreach 2011 - Migración de proyectos JEE a Grails
Greach 2011 - Migración de proyectos JEE a Grailsgreach_es
 
Greach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DBGreach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DBgreach_es
 
Greach 2011 - Engrandeciendo Grails con MongoDB
Greach 2011 - Engrandeciendo Grails con MongoDBGreach 2011 - Engrandeciendo Grails con MongoDB
Greach 2011 - Engrandeciendo Grails con MongoDBgreach_es
 
Greach 2011 - Opening keynote
Greach 2011 - Opening keynoteGreach 2011 - Opening keynote
Greach 2011 - Opening keynotegreach_es
 

Más de greach_es (6)

Greach 2011 - Novedades de Grails 2.0
Greach 2011 - Novedades de Grails 2.0Greach 2011 - Novedades de Grails 2.0
Greach 2011 - Novedades de Grails 2.0
 
Greach 2011 - Cloud Foundry
Greach 2011 - Cloud FoundryGreach 2011 - Cloud Foundry
Greach 2011 - Cloud Foundry
 
Greach 2011 - Migración de proyectos JEE a Grails
Greach 2011 - Migración de proyectos JEE a GrailsGreach 2011 - Migración de proyectos JEE a Grails
Greach 2011 - Migración de proyectos JEE a Grails
 
Greach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DBGreach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DB
 
Greach 2011 - Engrandeciendo Grails con MongoDB
Greach 2011 - Engrandeciendo Grails con MongoDBGreach 2011 - Engrandeciendo Grails con MongoDB
Greach 2011 - Engrandeciendo Grails con MongoDB
 
Greach 2011 - Opening keynote
Greach 2011 - Opening keynoteGreach 2011 - Opening keynote
Greach 2011 - Opening keynote
 

Último

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 

Último (11)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 

Greach 2011 - Ringio, o como hacer realidad una aplicación de telefonía con Grails

  • 1. Ringio o cómo hacer realidad una aplicación de telefonía en Grails Mamen González 4 Noviembre 2011
  • 2. ÍNDICE 1. ¿Qué es Ringio? 2. Características 3. Ringio en acción 4. Arquitectura 5. Evolución de la arquitectura: Ringio over Rayo 6. Ventajas de RoR 7. ¿Por qué Grails? 8. Conclusiones
  • 3. 1 - ¿Qué es Ringio? Ringio es una centralita telefónica virtual, integrada con CRMs, que ayuda a las PYMES a mejorar la calidad de atención al cliente. 3
  • 4. 2 - Características - Producto SaaS en la nube - Configurable a través de la web - Aplicaciones para escritorio y smartphones - Permite utilizar cualquier teléfono - Integración con CRMs y redes sociales - Control de llamada (Call Control) y Respuesta de Voz Interactiva (IVR) - Evita que se pierdan llamadas: callblast 4
  • 5. 3 – Ringio en acción (1/2) – Llamada entrante http://www.screencast.com/t/EqQz2ElaZD
  • 6. 3 – Ringio en acción (2/2) – Llamada saliente http://www.screencast.com/t/dFIVFNSfpz
  • 7. 4 – Arquitectura CRM plugins BD API REST Servidor Ringio ejabberd Server XMPP Aplicaciones cliente móvil & escritorio Aplicación HTTP CCXML Ringio Clients Ringio Core 7
  • 8. 5 – Evolución de la arquitectura: Ringio over Rayo BD Ringio BD Server Servidor ejabberd XMPP Ringio Servidor HTTP ejabberd Server Ringio over Rayo XMPP client XMPP server Aplicación HTTP CCXML JSR 309 JSR 289 Ringio Core Ringio Core 8
  • 9. 6 – Ventajas de RoR <transition event="personal"> <var name="srcParticipant" expr="getSourceParticipant(participants)"/> No es necesario <var name="dstParticipant" expr="getDestinationParticipant(participants)"/> utilizar CCXML / <if cond="srcParticipant.isBlackListed"> call.output(‘Hello Greach!’) <dialogstart src="blackDlgPath()" type="TYPE" dialogid="blacklistedDlg" VoiceXML connectionid="getSrcConnId(participants)" parameters="voxeoUrls"/> <assign name="state" expr="'release'"/> call.hold() <elseif cond="srcParticipant.isVIP &amp;&amp; dstParticipant.isCheckedIn"/> Flujo más legible call.input(ringioMainMenuInput) <dialogstart src="welcomeDlgPath()" type="TYPE" dialogid="welcomeDlg" connectionid="getSrcConnId(participants)" parameters="participants extensionSelected voxeoUrls"/> call.disconnect() <assign name="state" expr="'waitingForUser'"/> Call control call.isHold() cond="!dstParticipant.isIdle || !dstParticipant.isCheckedIn"/> call.answer() <elseif en Groovy / Java <dialogstart src="userNotAvailPath()" type="TYPE" outgoingCall.join() call.isMute() dialogid="userNotAvailableDlg" connectionid="getSrcConnId(participants)" parameters="participants voxeoUrls"/> Abstracción de call.unHold() call.mute() name="state" expr="'vmailorcallback'"/> <assign <else/> los detalles de call.unMute() <dialogstart src="welcomeDlgPath()" type="TYPE" dialogid="welcomeDlg" implementación connectionid="getSrcConnId(participants)" parameters="participants extensionSelected voxeoUrls"/> <assign name="state" expr="'waitingForUser'"/> Facilita el </if> </transition> desarrollo y la depuración 9
  • 10. 7 – ¿Por qué Grails? (1/5) Desarrollo más ágil • Scaffolding • Convención sobre configuración • Facilidades para configuración de entornos • Se escribe menos en Groovy que en Java 10
  • 11. 7 – ¿Por qué Grails? (2/5) Facilidad para crear servicios JSON • En Ringio hacemos un uso extenso de JSON (comunicaciones con Voxeo, con aplicaciones desktop / móvil, API REST…) • parsers y converters de Grails: render. participant as JSON JSON.parse(response) 11
  • 12. 7 – ¿Por qué Grails? (3/5) Sistema de plugins • El plugin ringobon-base contiene el modelo de datos y los servicios básicos. • El módulo Ringio Server está dividido en varios submódulos independientes que utilizan ese plugin. 12
  • 13. 7 – ¿Por qué Grails? (4/5) Acceso a librerías Java • Se pueden usar APIs Java • En Ringio usamos, entre otras: XMPP, Google Contacts, Voxeo Rayo… 13
  • 14. 7 – ¿Por qué Grails? (5/5) GORM • Facilidades para realizar consultas mediante Criteria, Dynamic finders o HQL. Ejemplos: User.findAllByAccount(account) Conversation.findAll() • Facilidades para almacenar datos de auditoría (fechas de creación, actualización…) 14
  • 15. 8 – Conclusiones Nuestra experiencia con Grails ha sido muy satisfactoria. ágiles desarrollando rápidos en la adaptación a los cambios De ahí que en Paradigma Tecnológico se hayan implementado más proyectos en Grails 15
  • 16. Q&A 16
  • 17. ¡¡Gracias!! @gmamenl @mpermar 17