Charla que di en la Bilbostack 2022 sobre Kubernetes.
Discutía casos de uso, cuando usarlo y cuando no y algunos consejos destinados a aquellos que se están planteando usarlo.
Microservicios es una aproximacion de desarrollo en pequeños servicios, independientes uno del otro, que pueden ejecutarse en procesos aislados y que se comunican mediante un mecanismo ligero basado en api http
Charla que di en la Bilbostack 2022 sobre Kubernetes.
Discutía casos de uso, cuando usarlo y cuando no y algunos consejos destinados a aquellos que se están planteando usarlo.
Microservicios es una aproximacion de desarrollo en pequeños servicios, independientes uno del otro, que pueden ejecutarse en procesos aislados y que se comunican mediante un mecanismo ligero basado en api http
Divide y Vencerás: introducción a los MicroserviciosThoughtworks
Actualmente está muy de moda los términos SOA, descentralización de servicios, microservicios... pero, ¿qué significan realmente?
En esta charla intentaremos aclarar estas dudas además de explicar como podemos utilizar los nuevos paradigmas y diseños arquitectónicos para crear aplicaciones sencillas de construir, escalables y que sigan cumpliendo los requerimientos del negocio.
Esta charla se presentó por primera vez en el evento ComparTI/Tech Stage en las oficinas de Thoughtworks Quito en Enero de 2015. http://info.thoughtworks.com/ComparTI-Quito-Enero_Registration-Page.html
Escalabilidad y alto rendimiento con Symfony2Ricard Clau
En esta charla se pretenden tocar todas las cosas que debemos tener en cuenta para sacar el máximo rendimiento y poder escalar usando Symfony2.
Se toca desde parámetros de configuración de PHP y APC, optimización de Composer, dónde optimizar, quick wins varios, cómo hacer profiling correctamente, BBDD NoSQL vs SQL y por supuesto lecciones aprendidas en mis anteriores trabajos
Presentación hecha en el SpringIO 2012 en Madrid España. Donde se muestra un poco de la experiencia adquirida durante el desarrollo y puesta a producción de la plataforma de eCommerce mas grande de LatinoAmerica construida con Grails
Esta sesión comparte desde un punto de vista técnico las experiencias y aprendizajes obtenidos al orquestar contenedores usando la tecnología Kubernetes en SUNAT, la dependencia de gobierno federal en Perú encargada de la administración tributaria.
Siempre que hablamos de Azure, decimos que pese a que es un ecosistema 100% Microsoft no importa el lenguaje en el que esté desarrollada tu aplicación. Pero todas las demos que vemos son con aplicaciones desarrolladas en .NET...
Vale speaker, ya está bien, sal de tu zona de confort y enséñame como desplegar algo que no sea .NET!!
En esta sesión, mezclaremos agua y aceite, es decir, JavaScript con Azure. Veremos qué es Node.js, como desarrollar una API en Node.js (desde VS 2017 y desde VS Code), y lo mejor, como mezclarla con las cositas de azure.
Automatización del despliegue de aplicaciones multi cloudSoftware Guru
Platicaremos sobre opciones para la automatización del despliegue de aplicaciones en ambientes multi cloud (AWS, Azure), utilizando herramientas de Infrastructure as Code y configuration management. Primero daremos un panorama teórico de lo que sucede y luego mostraremos ejemplos usando Terraform y Ansible.
Con la ciencia en las Nubes
Present y futuro de la Nube Privada Corporativa del CSIC
Talk held in Techday Madrid, 2017. More info:
https://opennebula.org/community/techdays/techday-madrid-2017/
Kubernetes es mas conocido por hacer despliegues de contenedores no dependientes del estado, pero tambien es capaz de manejar cargas de trabajo que dependen del estado, como las bases de datos. Con Kubernetes es muy facil tener aplicaciones que tengan alta disponibilidad y que los cambios se hagan de una forma transparente. Pero, ¿Podemos/Queremos tener estos beneficios para las bases de datos? ¿Que pasa con los servicios gestionados como Azure SQL? En esta sesion mi objetivo es introducirte al mundo de Kubernetes respecto al manejo de aplicaciones dependientes del estado y cuales son las opciones junto a los conceptos que existen en el ecosistema. Luego, a travez de una demostracion podras ver si te vale desplegar tu base de datos en Kubernetes, o no.
Divide y Vencerás: introducción a los MicroserviciosThoughtworks
Actualmente está muy de moda los términos SOA, descentralización de servicios, microservicios... pero, ¿qué significan realmente?
En esta charla intentaremos aclarar estas dudas además de explicar como podemos utilizar los nuevos paradigmas y diseños arquitectónicos para crear aplicaciones sencillas de construir, escalables y que sigan cumpliendo los requerimientos del negocio.
Esta charla se presentó por primera vez en el evento ComparTI/Tech Stage en las oficinas de Thoughtworks Quito en Enero de 2015. http://info.thoughtworks.com/ComparTI-Quito-Enero_Registration-Page.html
Escalabilidad y alto rendimiento con Symfony2Ricard Clau
En esta charla se pretenden tocar todas las cosas que debemos tener en cuenta para sacar el máximo rendimiento y poder escalar usando Symfony2.
Se toca desde parámetros de configuración de PHP y APC, optimización de Composer, dónde optimizar, quick wins varios, cómo hacer profiling correctamente, BBDD NoSQL vs SQL y por supuesto lecciones aprendidas en mis anteriores trabajos
Presentación hecha en el SpringIO 2012 en Madrid España. Donde se muestra un poco de la experiencia adquirida durante el desarrollo y puesta a producción de la plataforma de eCommerce mas grande de LatinoAmerica construida con Grails
Esta sesión comparte desde un punto de vista técnico las experiencias y aprendizajes obtenidos al orquestar contenedores usando la tecnología Kubernetes en SUNAT, la dependencia de gobierno federal en Perú encargada de la administración tributaria.
Siempre que hablamos de Azure, decimos que pese a que es un ecosistema 100% Microsoft no importa el lenguaje en el que esté desarrollada tu aplicación. Pero todas las demos que vemos son con aplicaciones desarrolladas en .NET...
Vale speaker, ya está bien, sal de tu zona de confort y enséñame como desplegar algo que no sea .NET!!
En esta sesión, mezclaremos agua y aceite, es decir, JavaScript con Azure. Veremos qué es Node.js, como desarrollar una API en Node.js (desde VS 2017 y desde VS Code), y lo mejor, como mezclarla con las cositas de azure.
Automatización del despliegue de aplicaciones multi cloudSoftware Guru
Platicaremos sobre opciones para la automatización del despliegue de aplicaciones en ambientes multi cloud (AWS, Azure), utilizando herramientas de Infrastructure as Code y configuration management. Primero daremos un panorama teórico de lo que sucede y luego mostraremos ejemplos usando Terraform y Ansible.
Con la ciencia en las Nubes
Present y futuro de la Nube Privada Corporativa del CSIC
Talk held in Techday Madrid, 2017. More info:
https://opennebula.org/community/techdays/techday-madrid-2017/
Kubernetes es mas conocido por hacer despliegues de contenedores no dependientes del estado, pero tambien es capaz de manejar cargas de trabajo que dependen del estado, como las bases de datos. Con Kubernetes es muy facil tener aplicaciones que tengan alta disponibilidad y que los cambios se hagan de una forma transparente. Pero, ¿Podemos/Queremos tener estos beneficios para las bases de datos? ¿Que pasa con los servicios gestionados como Azure SQL? En esta sesion mi objetivo es introducirte al mundo de Kubernetes respecto al manejo de aplicaciones dependientes del estado y cuales son las opciones junto a los conceptos que existen en el ecosistema. Luego, a travez de una demostracion podras ver si te vale desplegar tu base de datos en Kubernetes, o no.
Zend Framework Taller de SeeD Software, Colombiarazigal
Esta es la diapositiva del taller 'Zend Framework' presentada por Luca Urech de SeeD Software (www.seedcorporate.com), realizada el dia 30 de abril del año 2008.
Symfony-Community: Introducción a Symfony Frameworkexcedesoft
El seminario está dirigido a aquellos estudiantes, profesionales, universidades y empresas dedicados a la industria de software que deseen aprender sobre la iniciación de una aplicación Symfony. Se demostrá como descargar e instalar el framework, configuración inicial y conceptos necesarios para el desarrollo de una aplicación web simple.
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...espinozaernesto427
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta intensidad son un tipo de lámpara eléctrica de descarga de gas que produce luz por medio de un arco eléctrico entre electrodos de tungsteno alojados dentro de un tubo de alúmina o cuarzo moldeado translúcido o transparente.
lámparas más eficientes del mercado, debido a su menor consumo y por la cantidad de luz que emiten. Adquieren una vida útil de hasta 50.000 horas y no generan calor alguna. Si quieres cambiar la iluminación de tu hogar para hacerla mucho más eficiente, ¡esta es tu mejor opción!
Las nuevas lámparas de descarga de alta intensidad producen más luz visible por unidad de energía eléctrica consumida que las lámparas fluorescentes e incandescentes, ya que una mayor proporción de su radiación es luz visible, en contraste con la infrarroja. Sin embargo, la salida de lúmenes de la iluminación HID puede deteriorarse hasta en un 70% durante 10,000 horas de funcionamiento.
Muchos vehículos modernos usan bombillas HID para los principales sistemas de iluminación, aunque algunas aplicaciones ahora están pasando de bombillas HID a tecnología LED y láser.1 Modelos de lámparas van desde las típicas lámparas de 35 a 100 W de los autos, a las de más de 15 kW que se utilizan en los proyectores de cines IMAX.
Esta tecnología HID no es nueva y fue demostrada por primera vez por Francis Hauksbee en 1705. Lámpara de Nernst.
Lámpara incandescente.
Lámpara de descarga. Lámpara fluorescente. Lámpara fluorescente compacta. Lámpara de haluro metálico. Lámpara de vapor de sodio. Lámpara de vapor de mercurio. Lámpara de neón. Lámpara de deuterio. Lámpara xenón.
Lámpara LED.
Lámpara de plasma.
Flash (fotografía) Las lámparas de descarga de alta intensidad (HID) son un tipo de lámparas de descarga de gas muy utilizadas en la industria de la iluminación. Estas lámparas producen luz creando un arco eléctrico entre dos electrodos a través de un gas ionizado. Las lámparas HID son conocidas por su gran eficacia a la hora de convertir la electricidad en luz y por su larga vida útil.
A diferencia de las luces fluorescentes, que necesitan un recubrimiento de fósforo para emitir luz visible, las lámparas HID no necesitan ningún recubrimiento en el interior de sus tubos. El propio arco eléctrico emite luz visible. Sin embargo, algunas lámparas de halogenuros metálicos y muchas lámparas de vapor de mercurio tienen un recubrimiento de fósforo en el interior de la bombilla para mejorar el espectro luminoso y reproducción cromática. Las lámparas HID están disponibles en varias potencias, que van desde los 25 vatios de las lámparas de halogenuros metálicos autobalastradas y los 35 vatios de las lámparas de vapor de sodio de alta intensidad hasta los 1.000 vatios de las lámparas de vapor de mercurio y vapor de sodio de alta intensidad, e incluso hasta los 1.500 vatios de las lámparas de halogenuros metálicos.
Las lámparas HID requieren un equipo de control especial llamado balasto para funcionar
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informáticavazquezgarciajesusma
En este proyecto de investigación nos adentraremos en el fascinante mundo de la intersección entre el arte y los medios de comunicación en el campo de la informática.
La rápida evolución de la tecnología ha llevado a una fusión cada vez más estrecha entre el arte y los medios digitales, generando nuevas formas de expresión y comunicación.
Continuando con el desarrollo de nuestro proyecto haremos uso del método inductivo porque organizamos nuestra investigación a la particular a lo general. El diseño metodológico del trabajo es no experimental y transversal ya que no existe manipulación deliberada de las variables ni de la situación, si no que se observa los fundamental y como se dan en su contestó natural para después analizarlos.
El diseño es transversal porque los datos se recolectan en un solo momento y su propósito es describir variables y analizar su interrelación, solo se desea saber la incidencia y el valor de uno o más variables, el diseño será descriptivo porque se requiere establecer relación entre dos o más de estás.
Mediante una encuesta recopilamos la información de este proyecto los alumnos tengan conocimiento de la evolución del arte y los medios de comunicación en la información y su importancia para la institución.
Actualmente, y debido al desarrollo tecnológico de campos como la informática y la electrónica, la mayoría de las bases de datos están en formato digital, siendo este un componente electrónico, por tanto se ha desarrollado y se ofrece un amplio rango de soluciones al problema del almacenamiento de datos.
3Redu: Responsabilidad, Resiliencia y Respetocdraco
¡Hola! Somos 3Redu, conformados por Juan Camilo y Cristian. Entendemos las dificultades que enfrentan muchos estudiantes al tratar de comprender conceptos matemáticos. Nuestro objetivo es brindar una solución inclusiva y accesible para todos.
En este documento analizamos ciertos conceptos relacionados con la ficha 1 y 2. Y concluimos, dando el porque es importante desarrollar nuestras habilidades de pensamiento.
Sara Sofia Bedoya Montezuma.
9-1.
3. Agenda
Definiciones
Comparaciones con otros Frameworks
Anatomía de una Aplicación Zend
Recomendaciones para lograr Mantenibilidad
Recomendaciones para lograr Alta Disponibilidad
Recomendaciones de Seguridad
5. Agenda
Definiciones
• Framework
• ¿Qué es un Framework?
• Problemas comunes que resuelven los Frameworks
• Tipos
• Zend
• Componentes
• Filosofía
• Proceso de Calidad ZF
• Usos
• MVC
Comparativas otros Frameworks
Anatomía de una Aplicación Zend
Recomendaciones para lograr Mantenibilidad
Recomendaciones para lograr Alta Disponibilidad
Recomendaciones de Seguridad
8. ¿Qué es un Framework?
• Herramientas
• Conceptos
• Prácticas
• Criterios
Enfocados en resolver ciertos tipos de problemas
9. Framework
• Un conjunto estandarizado de conceptos, prácticas y criterios
para enfocar un tipo de problemática particular, que sirve como
referencia para enfrentar y resolver nuevos problemas de
índole similar.
10. Problemas comunes
• Persistencia de Datos • WebServices
• Validación de • Manejo de Sesión
Formularios
• ACL
• Autenticación
• Configuración
• E-mailing
• Seguridad • Manejo de
Excepciones
• Routing
• Cache • Búsquedas
• Log • Paginado
• Etc…
12. • Zend Framework es un framework de código abierto para
desarrollar aplicaciones web, servicios web, scripts con PHP5.
• Zend Framework es una implementación que usa código 100%
orientado a objetos.
• Cada componente está construido con una baja dependencia
de otros componentes.
• Zend Framework ofrece un gran rendimiento y una robusta
implementación MVC.
• Licencia BSD. Business friendly
• Documentación en muchos idiomas
• >80% code covered por pruebas unitarias
13.
14. Componentes de ZF
• MVC • Zend_Controller
– Front Controller
• Database – Router
• I18N – Dispatcher
– Action Controller
• Auth y ACL – Plugins y Helpers
• Web Services – Request y Response
• Zend_View
• Mail, Formats, Search – PHP-based views
• Utilitarios – Helpers
• Zend_Layout
• Zend_Form
15. Componentes de ZF
• MVC • Zend_Db_Adapter
• Database – Adaptadores para la
mayoría de extensiones
• I18N de PHP
• Auth y ACL • Zend_Db_Profiler
• Web Services • Zend_Db_Select
• Mail, Formats, Search • Zend_Db_Table
• Utilitarios – Zend_Db_Table_Rowset
– Zend_Db_Table_Row
24. Filosofía de Zend Framework
• Simplicidad y Extensibilidad
– Soluciones fáciles para el 80% de la funcionalidad comúnmente
requerida en una aplicación web.
– La extensibilidad nos posibilita una fácil adecuación al 20%
restante
– No hay complejos archivos XML de configuración
• Buenas practicas Ágiles y Orientadas a Objetos
– Arquitectura Use-at-Will
– Full Stack Framework
– Diseñado para Extensibilidad
– Unit tested
25. Proceso de Calidad ZF
1. Cuéntanos que es lo que propones
1. Redactar el Proposal Document
2. Impleméntalo
1. Escribe código OO que implemente tu propuesta
2. Escribe las pruebas unitarias, Si usas TDD, aun mejor
3. Documenta cómo funciona
3. Verifica que cumple con la propuesta
1. Publica tu implementación para la revisión de la comunidad
2. Obtener Feedback e introducir mejoras.
3. Revisión del Zend-Team para validar conformidad
Enlace Proposals: http://framework.zend.com/wiki/display/ZFPROP/Home
26. Usos de ZF
• Como Full Stack web framework
– Aplicaciones web
• Como Component Library
– Cron Jobs
• cron_importar_adecsys.php
• cron_despublicar_avisos.php
– Tools
• zf.php
• sync.php
• test_ws.php
• scrapers
Lectura Recomendada:
http://www.slideshare.net/shahar/zend-framework-components-for-nonframework-use
Shahar Evron 2008 – colaborador de ZF
29. Agenda
Definiciones
Comparaciones con otros Frameworks
• Cuadro Comparativo
• Pros & Cons ZF
Anatomía de una Aplicación Zend
Recomendaciones para lograr Mantenibilidad
Recomendaciones para lograr Alta Disponibilidad
Recomendaciones de Seguridad
30. CakePHP CodeIgniter Symfony Yii ZF
Licencia MIT OSL MIT New BSD BSD
Inicio 2005-08 2006-01 2005-10 2008-01 2006-03
PHP 5.2+ 5.1+ 5 5.1+ 5.2.4+
MVC Si Si Si Si Si
I18n Si Incompleto Si Si Si
ORM Active Record Third Party Only Doctrine, Propel DAO, Zend_Db
Data Maper Active Record
Testing Si Next Release Si Si Si
Seguridad ACL Si Plugin ACL, RBAC. ACL
Plugins
Templates Si Si Si Si Si
Caché Si Si Si Si Si
Scaffolding Si No Si Si No
Fuente: http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks
31. CakePHP CodeIgniter Symfony Yii ZF
PHP4 SI SI NO NO NO
PHP5 SI SI SI SI SI
Multiple DB SI SI SI SI SI
Validation SI SI SI SI SI
Ajax SI NO SI SI SI
Auth SI NO SI SI SI
Modular SI NO SI SI SI
Fuente: http:///www.phpframeworks.com
32. PROS CONS
• Open Source • Menos CoC que otros FWs
• Bajo acoplamiento • Menos RAD que otros FWs
• Flexibilidad • Pocos ejemplos, tutoriales
• Buena Documentación • Mayor curva de aprendizaje
• 100% OO • No hay scaffolding
• Uso de Patrones
• Amplia Librería
• Business – friendly
– Licencia
– Soporte
• Zend Server
• Certificable
41. Bootstrap
• La clase Bootstrap define que recursos y componentes
que se deben inicializar.
• De forma predeterminada, el Front Controller es
inicializado (Zend_Controller_Front), y configura por
defecto el directorio “application/controllers/” para
manejar los Controladores (Action Controllers).
42. Bootstrap por defecto
al crear un proyecto
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
?>
43. Bootstrap con métodos _init*
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initFoo()
{
// ...
}
protected function _initBar()
{
// ...
}
protected function _initBaz()
{
// ...
}
}
?>
47. Controlador Zend
<?php
class IndexController extends Zend_Controller_Action
{
public function init()
{
}
public function indexAction()
{
}
public function arraydataAction()
{
$this->view->users = array(
array('nombre'=>'Carlos'),
array('nombre'=>'Pedro'),
array('nombre'=>'Juan'),
array('nombre'=>'José')
);
}
}
48. Pasar variables del controlador a la vista
A través de
$this->view->var = „valor„;
$this->asign(„var„, „valor');
<?php
class IndexController extends Zend_Controller_Action
{
public function seeRequestAction()
{
$this->view->username = ”eanaya”;
}
}
Usuario: <?=$this->username?> <br />
49. Front Controller
• Zend_Controller_Front implementa el patrón Front
Controller usado en aplicaciones MVC .
• También implementa el patrón Singleton
• Su propósito es:
– inicializar el entorno de la solicitud
– rutear la solicitud (Request) entrante
– y luego hacer un envío de cualquier de las acciones
descubiertas
– le agrega las respuestas y las regresa cuando se completa el
proceso.
Ref. http://en.wikipedia.org/wiki/Front_Controller_pattern
50.
51. ¿Cómo es posible que capture todas las peticiones?
.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
56. short_open_tag = On
PROS CONS
• Legibilidad • Menos Portabilidad
• Rapidez • Podría llegar a hacer
conflictos si es que se
configura el servidor web
para que mod_php procese
archivos xml
<? foreach ($this->categorias as $categoria): ?>
<tr> … … … </tr>
<? endforeach; ?>
<?xml version="1.0" encoding="UTF-8"?>
<feed>…</feed>
57. Escapar cadenas en la vista
<?php
// mala idea
echo $this->variable;
// buena práctica
echo $this->escape($this->variable);
?>
• No ‘escapar’ las vistas puede ocasionar fallos de seguridad
como Cross Site Scripting[1].
• Se deben escapar las cadenas que fueron ingresadas por
usuarios.
<?php foreach ($this->categorias as $categoria): ?>
<tr>
<td><?php echo $this->escape($categoria[„nombre']) ?></td>
<td><?php echo $this->escape($categoria[„descripcion']) ?></td>
</tr>
<?php endforeach; ?>
[1] http://es.wikipedia.org/wiki/Cross-site_scripting
70. Zend_Form simplifica la creación y manejo de formularios en
nuestra aplicación web. Realiza las siguientes tareas:
• Agregar, eliminar, modificar Elementos
• Filtrar y Validar Elementos
• Ordenamiento de Elementos
• Renderizado de Elementos y Formularios, incluyendo
escape
• Agrupamientos de Elementos
• Configuración a nivel de Formulario y Elemento
configuration
78. View Helpers
• En los templates es frecuente hacer acciones varias veces:
• Formatear fechas
• Bloques
• Widgets
• Etc.
• Pincipio de funcionamiento: “Desacoplar la data de la presentación”
79. View Helpers
• En los templates es frecuente hacer acciones varias veces:
• Formatear fechas
• Bloques
• Widgets
• Etc.
• Pincipio de funcionamiento: “Desacoplar la data de la presentación”
• Zend viene con algunos View Helpers
• Tambien podemos construir los nuestros
88. Ejemplos Plugins: ACL
class My_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request) {
$acl = new Zend_Acl();
$acl->addRole('admin');
$acl->addRole('ventas');
$acl->addRole('supervisor_ventas','ventas');
$acl->addRole('logistica');
$acl->addResource('productos');
$acl->addResource('categorias');
$acl->addResource('fabricantes');
$acl->addResource('reportes');
$acl->allow('ventas','productos','vender');
$acl->allow('logistica','reportes','ultimos10');
$acl->allow('supervisor_ventas','reportes','ultimos10');
$acl->allow('admin');
// guardamos la ACL en sesión
$regAcl = Zend_Registry::get('acl');
$regAcl->acl = $acl;
parent::preDispatch($request);
}
}
89. Registramos los plugins en el bootstrap
protected function _initPlugins()
{
Zend_Controller_Front::getInstance()->registerPlugin(
new My_Controller_Plugin_Acl()
);
Zend_Controller_Front::getInstance()->registerPlugin(
new My_Controller_Plugin_Routes()
);
}
93. Registrando los Action Helpers en el
bootstrap
// bootstrap
protected function _initActionHelpers()
{
Zend_Controller_Action_HelperBroker::addHelper(
new My_Controller_Action_Helper_Auth()
);
Zend_Controller_Action_HelperBroker::addHelper(
new My_Controller_Action_Helper_MyFlashMessenger()
);
}
;Application.ini
resources.frontController.actionhelperpaths.App_Controller_Action_Helper =
"App/Controller/Action/Helper"
94. Ejemplo Action Helper
class My_Controller_Action_Helper_Rand
extends Zend_Controller_Action_Helper_Abstract
{
public function getRand($max)
{
return rand(1, $max);
}
public function direct($max)
{
return $this->getRand($max);
}
}
95. Usando los Action Helpers
public function actionHelpersAction() {
if ($this->isAuth) {
$this->log->debug($this->auth);
}
$randHelper = $this->getHelper('Rand');
$this->view->rand1 = $randHelper->getRand(100);
$randHelper = $this->_helper->getHelper('Rand');
$this->view->rand2 = $randHelper->getRand(100);
$randHelper = $this->_helper->Rand;
$this->view->rand3 = $randHelper->getRand(100);
$this->view->rand4 = $this->_helper->Rand(100);
}
97. Agenda
Definiciones
Comparaciones con otros Frameworks
Anatomía de una Aplicación Zend
Recomendaciones para lograr Mantenibilidad
Parametrización
DRY
View Helpers
Action Helpers
Coding Standards:
PHP_CodeSniffer
Object Calisthenics PHP
Manejo de Errores con Zend
Uso de Logs
Grupo de discusión: php-standards
Recomendaciones para lograr Alta Disponibilidad
Recomendaciones de Seguridad
PHP
98. Parametrización
• El objetivo es evitar futuros cambios de código en la aplicación
; ADECSYS
adecsys.wsdl = "http://dev.wsadecsys.info/AppService.asmx?wsdl"
; Parametros Globales reales DPCH
adecsys.proxy.enabled = 1 adecsys.proxy.param.proxy_host = '192.168.1.5'
adecsys.proxy.param.proxy_port = '8123'
adecsys.proxy.param.proxy_login = 'user'
adecsys.proxy.param.proxy_password = 'pass'
100. Parametrización
[subjects]
nuevoUsuario = '{%subjectMessage%} a Aptitus.pe, {%nombre%}„
nuevoAdm = 'Bienvenido a Aptitus.pe'
nuevaEmpresa = '{%empresa%} registro de empresa en Aptitus.pe'
postularAviso = '{%nombre%}, postulaste al aviso de {%nombrePuesto%} en Aptitus.pe'
confirmarCompra = '{%nombre%}, compraste un aviso en Aptitus.pe'
confirmarVoucherPagoEfectivo = '{%nombre%}, registraste un aviso en Aptitus.pe„
avisoPublicado = 'Su aviso de {%nombrePuesto%} se publicó en Aptitus.pe'
avisoRegistrado = 'Su aviso de {%nombrePuesto%} está pendiente de Publicación'
recuperarContrasenaPostulante = '{%nombre%}, cambia tu contraseña en Aptitus'
recuperarContrasenaEmpresa = 'Cambio de contraseña en Aptitus'
recuperarContrasenaAdministrador = '{%nombre%}, cambia tu contraseña en Aptitus'
invitarPostular = '{%nombre%}, tienes una invitacion en Aptitus.pe'
mensajePostulante = '{%nombre%},tienes un mensaje de la empresa {%empresa%} en Apt.'
132. Agenda
Definiciones
Comparaciones con otros Frameworks
Anatomía de una Aplicación Zend
Recomendaciones para lograr Mantenibilidad
Recomendaciones para lograr Alta Disponibilidad
Performance
Base de datos
Indices
Desnormalizar
Correcto uso de Zend_Paginator
Cache
Adaptadores
Cache Metadata
Escalabilidad
Zend_Sesion_SaveHandler_ DbTable
No hardcodear links
Recomendaciones de Seguridad
PHP
145. • Escalabilidad
Si la aplicación va a ser desplegada en un ambiente
distribuido, se deben de tomar algunas consideraciones
App1
DB
App2
iNET LB
…
Otros
Serv.
AppN
146. • Escalabilidad
• Carga distribuida
• Zend_Sesion_SaveHandler_DbTable
resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable“
resources.session.saveHandler.options.name = "zend_session“
resources.session.saveHandler.options.primary = "id“
resources.session.saveHandler.options.modifiedColumn = "modified“
resources.session.saveHandler.options.dataColumn = "data“
resources.session.saveHandler.options.lifetimeColumn = "lifetime"
Almacenar las sesiones en un punto central
149. Agenda
Definiciones
Comparaciones con otros Frameworks
Anatomía de una Aplicación Zend
Recomendaciones para lograr Mantenibilidad
Recomendaciones para lograr Alta Disponibilidad
Recomendaciones de Seguridad
Top OWASP 2010
Sql Injection
Cross Site Scripting
Cross-site Request Forgery