Este documento describe el proceso de migración de una aplicación legado a una nueva aplicación basada en Symfony. La aplicación legado consta de múltiples bases de datos inconsistentes y más de 1.5 millones de líneas de código escrito en PHP 4. La nueva aplicación se construye utilizando Symfony 2.1, PHP 5.4 y principios REST. Se implementan varias estrategias para la migración de datos, incluyendo el mapeo de entidades, migraciones por lotes, migraciones divididas en pasos y migrac
Cloud Computing: las nuevas Capas de PersistenciaDavid J. Brenes
Uno de los primeros problemas con que debemos lidiar en la Web 2.0 es la recuperación de datos para el usuario. ¿Qué nuevas capas de persistencia han sido desarrolladas para hacer frente al reto?
En las transparencias se hace una muy leve introducción a Apache CouchDB y Amazon SimpleDB.
Estas transparencias están basadas en unas confeccionadas por mi para un curso sobre Cloud Computing.
DBI es una interfaz independiente de base de datos que permite el acceso común a diferentes bases de datos a través de controladores de base de datos (DBD). DBI representa una conexión a la base de datos mediante un manejador de base de datos (DBH) y las sentencias SQL mediante un manejador de sentencia (STH). Los signos de interrogación en las sentencias SQL se reemplazan con valores de parámetros mediante el método execute del STH.
Este documento describe un sistema simple de registro de usuarios en PHP y MySQL con manejo de sesiones. Explica cómo crear una base de datos y tablas, y desarrollar cuatro archivos PHP (conexión, registro, login y perfil) para permitir que los usuarios se registren, inicien sesión y accedan a páginas protegidas. El sistema almacena datos de usuario en una base de datos y utiliza sesiones para autenticar a los usuarios registrados.
Prototype.js es una biblioteca JavaScript creada en 2005 como parte del soporte AJAX de Ruby on Rails. Proporciona funcionalidades como manipulación e inspección del DOM, gestión de eventos, extensiones a JavaScript y AJAX de alto nivel. Una de sus características diferenciadoras es que añade métodos al DOM para facilitar su manipulación. También incluye funcionalidades como iteradores funcionales, soporte para programación orientada a objetos e implementa un estilo de programación similar a Ruby.
Componentes, el arma secreta de Symfony2Javier López
Este documento presenta información sobre Javier López, un desarrollador de Symfony que vive en Londres. Brevemente describe su lugar de nacimiento, lugar de residencia actual, lugar de trabajo y sitios web personales en los que escribe y tuitea.
The document discusses how publishers should view and address piracy. It argues that publishers should not see piracy as theft or try to fight it through threats or lawsuits. Instead, they should see it as an opportunity to learn how to better serve customers. The document recommends that publishers offer a wide catalog of titles across all formats and devices without DRM, experiment with pricing models, and launch titles worldwide simultaneously to address the issues that drive people to piracy.
El taller practico y la documentación usada la encuentran en leninmhs.wordpress.com
Presentación que acompaño a taller practico del framework de desarrollo web de PHP5 YII, con postgreSQL como manejador de bases de datos y sobre s.o Canaima, en la 5ta Jornastec del 2011.
Código fuente y demás recursos del taller en: http://leninmhs.wordpress.com/2011/10/18/v-jornastec-taller-yii-framework/
Cloud Computing: las nuevas Capas de PersistenciaDavid J. Brenes
Uno de los primeros problemas con que debemos lidiar en la Web 2.0 es la recuperación de datos para el usuario. ¿Qué nuevas capas de persistencia han sido desarrolladas para hacer frente al reto?
En las transparencias se hace una muy leve introducción a Apache CouchDB y Amazon SimpleDB.
Estas transparencias están basadas en unas confeccionadas por mi para un curso sobre Cloud Computing.
DBI es una interfaz independiente de base de datos que permite el acceso común a diferentes bases de datos a través de controladores de base de datos (DBD). DBI representa una conexión a la base de datos mediante un manejador de base de datos (DBH) y las sentencias SQL mediante un manejador de sentencia (STH). Los signos de interrogación en las sentencias SQL se reemplazan con valores de parámetros mediante el método execute del STH.
Este documento describe un sistema simple de registro de usuarios en PHP y MySQL con manejo de sesiones. Explica cómo crear una base de datos y tablas, y desarrollar cuatro archivos PHP (conexión, registro, login y perfil) para permitir que los usuarios se registren, inicien sesión y accedan a páginas protegidas. El sistema almacena datos de usuario en una base de datos y utiliza sesiones para autenticar a los usuarios registrados.
Prototype.js es una biblioteca JavaScript creada en 2005 como parte del soporte AJAX de Ruby on Rails. Proporciona funcionalidades como manipulación e inspección del DOM, gestión de eventos, extensiones a JavaScript y AJAX de alto nivel. Una de sus características diferenciadoras es que añade métodos al DOM para facilitar su manipulación. También incluye funcionalidades como iteradores funcionales, soporte para programación orientada a objetos e implementa un estilo de programación similar a Ruby.
Componentes, el arma secreta de Symfony2Javier López
Este documento presenta información sobre Javier López, un desarrollador de Symfony que vive en Londres. Brevemente describe su lugar de nacimiento, lugar de residencia actual, lugar de trabajo y sitios web personales en los que escribe y tuitea.
The document discusses how publishers should view and address piracy. It argues that publishers should not see piracy as theft or try to fight it through threats or lawsuits. Instead, they should see it as an opportunity to learn how to better serve customers. The document recommends that publishers offer a wide catalog of titles across all formats and devices without DRM, experiment with pricing models, and launch titles worldwide simultaneously to address the issues that drive people to piracy.
El taller practico y la documentación usada la encuentran en leninmhs.wordpress.com
Presentación que acompaño a taller practico del framework de desarrollo web de PHP5 YII, con postgreSQL como manejador de bases de datos y sobre s.o Canaima, en la 5ta Jornastec del 2011.
Código fuente y demás recursos del taller en: http://leninmhs.wordpress.com/2011/10/18/v-jornastec-taller-yii-framework/
Este documento describe el modelo Doctrine para gestionar bases de datos en aplicaciones Symfony. Explica los componentes clave de Doctrine como el ORM para mapear objetos a tablas de base de datos, el DBAL para abstraer la capa de acceso a datos, y los repositorios para realizar consultas de forma uniforme. También cubre conceptos como entidades, queries, migraciones y más.
Este documento presenta varias consultas SQL realizadas con Propel en Symfony. Explica cómo realizar consultas básicas, ordenadas, con criterios de búsqueda y joins. También cubre temas como consultas personalizadas, paginación con sfPropelPager y el uso de criterios OR. Por último, introduce los comandos freeze y unfreeze para congelar proyectos, y rsync para sincronizar cambios de forma segura.
JHipster es un generador de código basado en Yeoman que nos genera un proyecto con Spring Boot en el back-end y con Angular en el front-end.
Llevo un año y medio desarrollando con Spring Boot y Angular y desde hace unos meses, mis nuevos desarrollos los realizo con JHipster. Por eso me he decidido a proponer este taller en donde montaré una pequeña aplicación con este tándem, y en donde hablaré también de mi propia experiencia.
Para poder asistir al taller es necesario tener instalado JHipster y tu IDE favorito (yo usaré Spring Tool Suite para back y Visual Studio Code para front). Para no tener problemas de descarga durante el taller tenéis que crearos un proyecto vacío, en el cual haremos modificaciones durante el taller. Creároslo con los valores por defecto, y luego ejecutarlo con ./mvnw para que se descarguen todas las librerías. Deberíais poder ver algo en http://localhost:8080 ;)
Este documento describe varias herramientas y marcos para el desarrollo de servicios web, incluyendo JBoss, Oracle Fusion Middleware, IBM Lotus Domino, Axis, NuSOAP y PHP. Explica cómo usar NuSOAP para crear servicios web en PHP y consumirlos como cliente. También cubre cómo usar Axis con un servidor de aplicaciones para crear y desplegar servicios web.
Este documento describe varias herramientas y plataformas para el desarrollo de servicios web, incluyendo NuSOAP, Axis, y servidores de aplicaciones como JBoss y WebLogic. También presenta ejemplos de cómo crear e implementar servicios web utilizando NuSOAP y Axis, así como sitios que ofrecen servicios web de código abierto como Libre Projects y Web Service Share.
Este documento describe cómo desarrollar aplicaciones móviles que interactúan con mapas de Google Maps y obtienen la ubicación del usuario. Explica cómo agregar marcadores a mapas, ajustar el zoom y la posición de la cámara, y solicitar permisos de ubicación al usuario. También cubre el uso de intents para tomar fotos, hacer llamadas y más funciones. Por último, introduce el desarrollo de una API REST con PHP para conectar una aplicación móvil a una base de datos.
Este documento describe cómo crear reportes en JDeveloper utilizando JasperReports e IReport. Explica cómo configurar IReport para conectarse a una base de datos, diseñar un reporte simple con un campo de búsqueda, y ejecutar el reporte para generar un archivo JRXML que luego puede usarse en JDeveloper.
Uso de CouchDB como base de datos para soluciones que ameriten el manejo de gran cantidad de información a través de aplicaciones Android.
La presentación muestra una pequeña introducción sobre ¿Cómo conectarse y manejar bases de datos CouchDB en Android?
Las diapositivas fueron desarrolladas por mi persona para ExpoTech 2013 (31-01 al 01-02-2013) , en Puerto Ordaz - Venezuela.
Este documento presenta las principales novedades de Drupal 7 relacionadas con el desarrollo, incluyendo las entidades en el núcleo, Entity API, Field API, Form API, render arrays, caché, File API, registro de código y Queue API. El orador destaca cómo estas mejoras facilitan el desarrollo y proporcionan más flexibilidad.
El documento describe el funcionamiento del navegador web y el protocolo HTTP. Explica que el navegador renderiza HTML y ejecuta JavaScript, y que HTTP se usa para solicitar y transferir recursos como páginas web, imágenes y archivos. También describe los componentes clave de una petición y respuesta HTTP como la operación, URL, cabeceras y cuerpo.
Este documento describe diferentes herramientas y servicios para el desarrollo de servicios web, incluyendo servidores como JOnAS, Microsoft .NET, Zope y JBoss. Luego se enfoca en Axis y NuSOAP, marcos de trabajo populares para crear y desplegar servicios web en Java y PHP respectivamente. Finalmente, menciona dos sitios web que proveen servicios web gratuitos de diferentes categorías.
Este documento presenta una introducción a las inyecciones SQL, incluyendo una explicación de qué son, cómo ocurren, y varios ejemplos de cómo un atacante podría explotar vulnerabilidades de inyección SQL para extraer datos de una base de datos, causar un ataque de denegación de servicio, o evadir un mecanismo de autenticación. También discute posibles contramedidas como la validación de entradas, el uso de consultas parametrizadas, y sistemas de prevención de intrusos.
Jquery para principianes
JQUERY
AJAX ENVIAR FORMULARIOS SIN RECARGAR
ACTUALIZAR UN ELEMENTO SIN RECARGAR
COMBOS DEPENDIENTES AJAX BASE DE DATOS
STAR RATING JQUERY SIN BASE DE DATOS
STAR RATING JQUERY PLUGIN
DROPDOWN MENU DESPLEGABLE
ENVIA CORREOS SIN RECARGAR
PANEL DE IMAGENES CAROUSEL
INTERCAMBIO DE ELEMENTOS ENTRE 2 LISTAS
RECARGAR TEXTO AUTOMATICAMENTE
AGREGAR GRAFICOS ESTADISTICOS PIE
VALIDAR FORMULARIOS
INCLUIR TOOLTIP EN MAPA DE IMÁGENES
SUBIR MULTIPLES ARCHIVOS
WEB MODULAR PHP
SLIDER CONTENIDO DESTACADO
VENTANA MODAL
AGREGAR BORRAR CAMPOS
MODIFICANDO ATRIBUTOS
JQUERY MUSIC PLAYER
OCULTAR /MOSTRAR SECCIONES DE NUESTRO SITIO
Este documento proporciona resúmenes breves de varias técnicas y funcionalidades de jQuery y JavaScript para el desarrollo web. Incluye cómo enviar formularios sin recargar la página usando AJAX, actualizar elementos sin recargar, crear combos dependientes con una base de datos, agregar calificaciones de estrellas interactivas, crear menús desplegables, y más. El objetivo es ofrecer múltiples soluciones comunes con jQuery de una manera concisa y de alto nivel.
Deployer PHP. Presentación para #PHPSevillaAgencia INNN
Este documento describe el uso de DeployerPHP para automatizar el despliegue de aplicaciones Symfony. DeployerPHP es una herramienta que permite configurar tareas para actualizar el código, instalar dependencias, compilar assets y más, de forma atómica y con rollbacks. Incluye recetas predefinidas para Symfony que automatizan tareas comunes como instalar vendors, limpiar caché y enlazar symlinks. El documento explica cómo configurar servidores, crear tareas personalizadas y utilizar funciones y variables para personalizar el pro
Se aprenderá a desarrollar una API siguiendo la metodología MADA que tiene como misión reducir la complejidad a la hora de desarrollar una API y que utiliza RAML como lenguaje de definición de APIs. A patir del RAML, se generará toda la documentación necesaria para exponer a los developers, se podrá construir un fake para probarlo en la consola de pruebas y se generará un esqueleto en node.js. El taller desarrollará un ejemplo utilizando objetos en memoria y otro ejemplo utilizando MongoDB como base de datos.
Este documento describe el modelo Doctrine para gestionar bases de datos en aplicaciones Symfony. Explica los componentes clave de Doctrine como el ORM para mapear objetos a tablas de base de datos, el DBAL para abstraer la capa de acceso a datos, y los repositorios para realizar consultas de forma uniforme. También cubre conceptos como entidades, queries, migraciones y más.
Este documento presenta varias consultas SQL realizadas con Propel en Symfony. Explica cómo realizar consultas básicas, ordenadas, con criterios de búsqueda y joins. También cubre temas como consultas personalizadas, paginación con sfPropelPager y el uso de criterios OR. Por último, introduce los comandos freeze y unfreeze para congelar proyectos, y rsync para sincronizar cambios de forma segura.
JHipster es un generador de código basado en Yeoman que nos genera un proyecto con Spring Boot en el back-end y con Angular en el front-end.
Llevo un año y medio desarrollando con Spring Boot y Angular y desde hace unos meses, mis nuevos desarrollos los realizo con JHipster. Por eso me he decidido a proponer este taller en donde montaré una pequeña aplicación con este tándem, y en donde hablaré también de mi propia experiencia.
Para poder asistir al taller es necesario tener instalado JHipster y tu IDE favorito (yo usaré Spring Tool Suite para back y Visual Studio Code para front). Para no tener problemas de descarga durante el taller tenéis que crearos un proyecto vacío, en el cual haremos modificaciones durante el taller. Creároslo con los valores por defecto, y luego ejecutarlo con ./mvnw para que se descarguen todas las librerías. Deberíais poder ver algo en http://localhost:8080 ;)
Este documento describe varias herramientas y marcos para el desarrollo de servicios web, incluyendo JBoss, Oracle Fusion Middleware, IBM Lotus Domino, Axis, NuSOAP y PHP. Explica cómo usar NuSOAP para crear servicios web en PHP y consumirlos como cliente. También cubre cómo usar Axis con un servidor de aplicaciones para crear y desplegar servicios web.
Este documento describe varias herramientas y plataformas para el desarrollo de servicios web, incluyendo NuSOAP, Axis, y servidores de aplicaciones como JBoss y WebLogic. También presenta ejemplos de cómo crear e implementar servicios web utilizando NuSOAP y Axis, así como sitios que ofrecen servicios web de código abierto como Libre Projects y Web Service Share.
Este documento describe cómo desarrollar aplicaciones móviles que interactúan con mapas de Google Maps y obtienen la ubicación del usuario. Explica cómo agregar marcadores a mapas, ajustar el zoom y la posición de la cámara, y solicitar permisos de ubicación al usuario. También cubre el uso de intents para tomar fotos, hacer llamadas y más funciones. Por último, introduce el desarrollo de una API REST con PHP para conectar una aplicación móvil a una base de datos.
Este documento describe cómo crear reportes en JDeveloper utilizando JasperReports e IReport. Explica cómo configurar IReport para conectarse a una base de datos, diseñar un reporte simple con un campo de búsqueda, y ejecutar el reporte para generar un archivo JRXML que luego puede usarse en JDeveloper.
Uso de CouchDB como base de datos para soluciones que ameriten el manejo de gran cantidad de información a través de aplicaciones Android.
La presentación muestra una pequeña introducción sobre ¿Cómo conectarse y manejar bases de datos CouchDB en Android?
Las diapositivas fueron desarrolladas por mi persona para ExpoTech 2013 (31-01 al 01-02-2013) , en Puerto Ordaz - Venezuela.
Este documento presenta las principales novedades de Drupal 7 relacionadas con el desarrollo, incluyendo las entidades en el núcleo, Entity API, Field API, Form API, render arrays, caché, File API, registro de código y Queue API. El orador destaca cómo estas mejoras facilitan el desarrollo y proporcionan más flexibilidad.
El documento describe el funcionamiento del navegador web y el protocolo HTTP. Explica que el navegador renderiza HTML y ejecuta JavaScript, y que HTTP se usa para solicitar y transferir recursos como páginas web, imágenes y archivos. También describe los componentes clave de una petición y respuesta HTTP como la operación, URL, cabeceras y cuerpo.
Este documento describe diferentes herramientas y servicios para el desarrollo de servicios web, incluyendo servidores como JOnAS, Microsoft .NET, Zope y JBoss. Luego se enfoca en Axis y NuSOAP, marcos de trabajo populares para crear y desplegar servicios web en Java y PHP respectivamente. Finalmente, menciona dos sitios web que proveen servicios web gratuitos de diferentes categorías.
Este documento presenta una introducción a las inyecciones SQL, incluyendo una explicación de qué son, cómo ocurren, y varios ejemplos de cómo un atacante podría explotar vulnerabilidades de inyección SQL para extraer datos de una base de datos, causar un ataque de denegación de servicio, o evadir un mecanismo de autenticación. También discute posibles contramedidas como la validación de entradas, el uso de consultas parametrizadas, y sistemas de prevención de intrusos.
Jquery para principianes
JQUERY
AJAX ENVIAR FORMULARIOS SIN RECARGAR
ACTUALIZAR UN ELEMENTO SIN RECARGAR
COMBOS DEPENDIENTES AJAX BASE DE DATOS
STAR RATING JQUERY SIN BASE DE DATOS
STAR RATING JQUERY PLUGIN
DROPDOWN MENU DESPLEGABLE
ENVIA CORREOS SIN RECARGAR
PANEL DE IMAGENES CAROUSEL
INTERCAMBIO DE ELEMENTOS ENTRE 2 LISTAS
RECARGAR TEXTO AUTOMATICAMENTE
AGREGAR GRAFICOS ESTADISTICOS PIE
VALIDAR FORMULARIOS
INCLUIR TOOLTIP EN MAPA DE IMÁGENES
SUBIR MULTIPLES ARCHIVOS
WEB MODULAR PHP
SLIDER CONTENIDO DESTACADO
VENTANA MODAL
AGREGAR BORRAR CAMPOS
MODIFICANDO ATRIBUTOS
JQUERY MUSIC PLAYER
OCULTAR /MOSTRAR SECCIONES DE NUESTRO SITIO
Este documento proporciona resúmenes breves de varias técnicas y funcionalidades de jQuery y JavaScript para el desarrollo web. Incluye cómo enviar formularios sin recargar la página usando AJAX, actualizar elementos sin recargar, crear combos dependientes con una base de datos, agregar calificaciones de estrellas interactivas, crear menús desplegables, y más. El objetivo es ofrecer múltiples soluciones comunes con jQuery de una manera concisa y de alto nivel.
Deployer PHP. Presentación para #PHPSevillaAgencia INNN
Este documento describe el uso de DeployerPHP para automatizar el despliegue de aplicaciones Symfony. DeployerPHP es una herramienta que permite configurar tareas para actualizar el código, instalar dependencias, compilar assets y más, de forma atómica y con rollbacks. Incluye recetas predefinidas para Symfony que automatizan tareas comunes como instalar vendors, limpiar caché y enlazar symlinks. El documento explica cómo configurar servidores, crear tareas personalizadas y utilizar funciones y variables para personalizar el pro
Se aprenderá a desarrollar una API siguiendo la metodología MADA que tiene como misión reducir la complejidad a la hora de desarrollar una API y que utiliza RAML como lenguaje de definición de APIs. A patir del RAML, se generará toda la documentación necesaria para exponer a los developers, se podrá construir un fake para probarlo en la consola de pruebas y se generará un esqueleto en node.js. El taller desarrollará un ejemplo utilizando objetos en memoria y otro ejemplo utilizando MongoDB como base de datos.
Desarrollo de aplicaciones web usando Catalyst y jQuery
De symfony 2013 dr. jenkins y mr. hyde - slides-842359017
1.
2.
3. Dr. Jenkins y Mr. Hyde
Acto I - Los personajes
Acto II - Envuelvelo en una API "REST"
Acto III - Dos en uno
Acto IV - Sangre, sudor y migraciones
Acto V - URL's y Redis
desymfony 2013 Dr. Jenkins & Mr. Hyde
4. ACTO I - Los personajes
desymfony 2013 Dr. Jenkins & Mr. Hyde
6. • PHP 4 Spaghetti western
• Ausencia MVC
• Inicio del desarrollo en 2000
• Reescritura del 90% en 2007
• + de 25 desarrolladores
• 4 Bases de datos
• Más de 1.5M de líneas de código
• Formado por: Directorio, CRM+ERP, Lista de bodas,
Estadisticas, Extranet para clientes, CMS, Área de
contenidos, WebTV, Etc.
Mr. Hyde
desymfony 2013 Dr. Jenkins & Mr. Hyde
9. • REST
• PHP 5.4
• Symfony 2.1.x
• LAM
• SQLite
• Redis con Twemproxy
• MongoDB
• RabbitMQ
• Jenkins, PHPUnit & Capifony
• Satis
Dr. Jenkins
desymfony 2013 Dr. Jenkins & Mr. Hyde
10. Joel Spolsky (Stack Overflow co-founder) dijo:
(sobre Netscape)" Bueno, si. Lo hicieron. Lo hicieron al tomar la peor
decisión estratégica que una empresa de software puede hacer:
decidieron re-escribir el código desde 0"
fuente: http://www.joelonsoftware.com/articles/fog0000000069.html
Dan Milsten, fundador de Hub8, en un post en On Startups (publicado
por Dharmesh Shah, inversor de Stack Exchange):
"Prepárate para que este proyecto no termine jamás.Lo primero y
absolutamente crítico que tienes que entender sobre empezar una
reescritura es que va a tomar muchísimo más de lo que esperas. Incluso
después de que quitas el típico optimismo del desarrollador. He aquí
porqué: Migrar datos es lo peor que puedes echarte a la cara, más allá
de cualquier otra cosa.“
fuente: http://onstartups.com/tabid/3339/bid/97052/How-To-Survive-a-Ground-Up-Rewrite-Without-Losing-Your-Sanity.aspx
Re-escribir desde 0, según los expertos
desymfony 2013 Dr. Jenkins & Mr. Hyde
11. ACTO II - Envuelvelo en una API "REST"
desymfony 2013 Dr. Jenkins & Mr. Hyde
13. Las bases de datos
BBDD 1
BBDD 3 BBDD 4
BBDD 2
desymfony 2013 Dr. Jenkins & Mr. Hyde
BBDD 1
BBDD 3 BBDD 4
Relacionadas entre si por claves extranjeras mantenidas por software
14. //namespace BDKLegacyDbBundleEntity;
/**
* @ORMTable(name="boda.CLIENTE")
* @ORMEntity
*/
class Cliente
{
//...
/**
* @ORMManyToMany(targetEntity="Tags")
* @ORMJoinTable(name="bodamoll.b_tags",
* joinColumns={@ORMJoinColumn(name="id_cliente", referencedColumnName="ID")},
* inverseJoinColumns={@ORMJoinColumn(name="id_tag", referencedColumnName="id")}
* )
*/
private $id_tag;
//...
Hackeando las DQL
desymfony 2013 Dr. Jenkins & Mr. Hyde
15. public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
{
if ($this->kernel->getEnvironment() != 'test') {
return;
}
$classMetadata = $eventArgs->getClassMetadata();
$assoMap = $classMetadata->getAssociationMappings();
foreach ($assoMap as $asso) {
if (isset($asso["joinTable"])) {
$asso["joinTable"]["name"] = str_replace(".", "_", $asso["joinTable"]["name"]);
$classMetadata->setAssociationOverride($asso["fieldName"],$asso);
}
}
$tableName = $classMetadata->getTableName();
$classMetadata->setPrimaryTable(array('name' => str_replace(".", "_", $tableName)));
}
Hackeando las DQL
desymfony 2013 Dr. Jenkins & Mr. Hyde
27. Perfil del
usuario
Enlaces a la plataforma antigua
Login
Frontal
login
único
App.
nueva
App.
antigua
Perfil del
usuario
Info del
usuario
OAuth + Token WSSE (login)
Acceso al perfil del usuario
desymfony 2013 Dr. Jenkins & Mr. Hyde
28. Internet Reverse
Proxy
Perfil del usuario - Reverse Proxy
bodaclick.com/^((?!my).)*$
bodaclick.com/my
desymfony 2013 Dr. Jenkins & Mr. Hyde
30. Perfil del usuario - Reverse Proxy
desymfony 2013 Dr. Jenkins & Mr. Hyde
Internet Reverse
Proxy
bodaclick.com/^((?!my).)*$
bodaclick.com/my
iframe
31. ACTO IV - Sangre, sudor y migraciones
desymfony 2013 Dr. Jenkins & Mr. Hyde
32. • 4 bases de datos
• Datos inconsistentes
• Emails repetidos
• Fechas como 0000-00-00
• Enums
• Tenemos tablas con más de 100 campos
• Campos por defecto a 0000-00-00
• Tablas tanto innodb como MyISAM
• Cotejamientos diferentes (utf8, latin)
• Tablas > 6 GB
API Legacy - Mapeo
desymfony 2013 Dr. Jenkins & Mr. Hyde
44. Evento asíncrono comunicado al driver
AsyncEventDispatcher
Controlador
Evento
propio
desymfony 2013 Dr. Jenkins & Mr. Hyde
45. //abstract class AsyncWeddingEvent implements AsyncEventInterface;
//class PostCreatWeddingEvent extends AsyncWeddingEvent;
$event = new PostCreateWeddingEvent();
$event->setWedding($wedding);
$event->setUserProfile($userProfile);
$this->container->get('bdk.async_event_dispatcher')->dispatch($event);
Evento asíncrono lanzado
desymfony 2013 Dr. Jenkins & Mr. Hyde
46. Evento asíncrono comunicado al driver
Listener/
Publicador
o Driver
AsyncEventDispatcher
Controlador
Evento
propio
desymfony 2013 Dr. Jenkins & Mr. Hyde
47. Evento asíncrono para un sistema pub/sub
Sistema Pub/Sub
Listener/
Publicador
o Driver
AsyncEventDispatcher
Controlador
Evento
propio
desymfony 2013 Dr. Jenkins & Mr. Hyde
49. Evento asíncrono para un sistema pub/sub
Sistema Pub/Sub
Subscriptor MySQLMySQL
Listener/
Publicador
o Driver
AsyncEventDispatcher
Controlador
Evento
propio
desymfony 2013 Dr. Jenkins & Mr. Hyde
App. nueva App. antigua
50. Evento asíncrono para un sistema pub/sub
Consumidor MySQLMySQL
Listener/
Productor
o Driver
AsyncEventDispatcher
Controlador
Evento
propio
desymfony 2013 Dr. Jenkins & Mr. Hyde
*.wedding.event
RabbitMQ
Topic Exchange
App. nueva App. antigua
51. //BDKLegacyBundleEventListenerAsyncWeddingEventListener
class WeddingEventListener implements ConsumerInterface
{
//...
if ($wedding->getProvince()) {
$legacyCountry = $this->legacyEm->getRepository('BDKLegacyDbBundle:Pais')
->findOneByCodPais($wedding->getProvince()->getCountry());
$legacyProvince = $this->legacyEm->getRepository('BDKLegacyDbBundle:Provincia')
->findOneBy(['idPais' => $legacyCountry->getId(), 'provincia' =>
$wedding->getProvince()->getName()]);
$legacyEventUser->setProvinciaId($legacyProvince->getId());
}
//...
}
Consumidor
desymfony 2013 Dr. Jenkins & Mr. Hyde
59. @etorras79
etorras
@BodaclickIT
Enrique Torras, como Mr. Hyde
• Ingeniero en Informática
• Desarrollando web desde 2004
• Actualmente dirige el área de
desarrollo en Bodaclick
desymfony 2013 Dr. Jenkins & Mr. Hyde
slideshare.net/etorras
60. @egulias
egulias
• Desarrollador web desde 2006
• Coqueteando con Symfony (y
otros frameworks) desde 2007
• Miembro de Symfony Madrid
• Actualmente trabajando como
líder de equipo en Bodaclick
@BodaclickIT
Eduardo Gulias, como Dr. Jenkins
slideshare.net/egulias
joind.in/talk/view/8834
desymfony 2013 Dr. Jenkins & Mr. Hyde