Un dashboard en tiempo real basado en PHP y Bootstrap

Un dashboard en tiempo real basado en PHP y Bootstrap

Ejemplos
Algo que está muy de moda por estos días es la creación de tableros de comandos (Dashboards) que se mantengan actualizados en tiempo real. Si bien la definición de tiempo real es algo vaga (Formalmente se trata de sistemas en los cuales el tiempo de respuesta es crítico), hay una suerte de conocimiento en común respecto de lo que quiere decir: que los cambios se vean en forma inmediata (o casi). En lo que hace a aplicaciones web, de lo que se trata es de permitir al visitante recibir novedades sin tener que recargar la página. Para lograr este efecto se necesitan dos partes coordinadas: Una aplicación front-end con la que el usuario interactuará en forma directaUn servidor que mantenga la información actualizada en todo momento Un frontend para el…
Leer más
Un redimensionador de imágenes eficiente hecho con PHP

Un redimensionador de imágenes eficiente hecho con PHP

Ejemplos
Un proyecto interesante que tuve la oportunidad de realizar hace unos años fue un sistema de procesamiento de imágenes. El desafío era lograr un servicio simple que permitiera escalar y rotar imágenes velozmente. Lo diseñé como un componente separado de la aplicación principal (Una red social de viajes) para poder instalarlo sin inconvenientes en un servidor diferente (y eventualmente poder vincularlo a otros proyectos). Por entonces me pareció una buena idea montarlo sobre una arquitectura RESTFul y, como era un proyecto muy simple y acotado (y tenía ganas de aprender algo nuevo de paso) decidí usar un framework especialmente diseñado para estos efectos: Tonic. Lo más importante como siempre: ¿qué nombre ponerle a una aplicación como esta? Mucho de fotografía no sé, pero buscando un poco me pareció que Bresson podía…
Leer más
Cómo pasar un sistema monolingüe a multilingüe

Cómo pasar un sistema monolingüe a multilingüe

Ejemplos
Hace un tiempo, trabajando para una red social de viajes, me topé con un desafío sumamente interesante: adaptar un sistema hecho para trabajar exclusivamente en Español para dar soporte a varios idiomas (En particular, en nuestro caso se trataba de la versión en Portugués, pero se preveía que podríamos necesitar más idiomas en el futuro). Si el sistema se arrancara desde cero no sería un gran problema. Se podría usar Symfony o algún otro framework similar que ya tienen incorporada la funcionalidad multi-idioma y listo. Desafortunadamente, en aquel momento el sistema estaba desarrollado sobre un framework propietario y la re-escritura estaba fuera de discusión. Así que, junto a mi equipo de desarrollo, comenzamos a pensar cómo resolver este problema. Lo primero que entendimos fue que teníamos que resolver dos desafíos…
Leer más
Un motor de sugerencias en PHP

Un motor de sugerencias en PHP

Ejemplos
Otro desafío interesante que me tocó encarar junto a mi equipo en el desarrollo de una red social de viajes fue el Sugeridor de Opinables. Una de las características que tenía el sitio en que estaba trabajando era la posibilidad de que los usuarios dejaran opiniones (o reseñas mejor dicho) sobre lugares que habían visitado (en general hoteles, restaurantes, atractivos, etc...). En un determinado momento, para el negocio se volvió sumamente importante incrementar la cantidad de reseñas (obviamente debían ser auténticas, no inventadas por robots ni plagiadas de otros sitios). Una idea que tuvimos junto con el equipo de producto fue la de intentar "adivinar" sobre qué otros lugares podría un usuario dejar su reseña, sabiendo qué lugares había visitado. Lo que debíamos lograr era algo similar a esto: Pero había una…
Leer más
Un ejemplo de uso del patrón strategy en PHP

Un ejemplo de uso del patrón strategy en PHP

Ejemplos
Hace poco, trabajando en una mejora para un sistema que desarrollé para un cliente me pasó lo siguiente: Una parte del trabajo de la aplicación era obtener información financiera de diferentes fuentes (básicamente se trataba de obtener precios históricos de bonos). Existían diferentes fuentes de consulta debido a que la información no siempre estaba disponible en todos los sitios (más allá de no disponer de APIs, pero esa es otra historia). El punto es que, en la primera versión de la aplicación (que obviamente estaba desarrollada sobre el framework Symfony), simplemente creamos un método dentro del Controlador: private function fetchBondPrice($symbol, \DateTime $date) { try { if ($price = $this->fetchBondPriceFromQuoteNet($symbol, $date)) { return $price; } if ($price = $this->fetchBondPriceFromMorningStar($symbol, $date)) { return $price; } } catch (Exception $e) { } return null; } Y las…
Leer más
Un sistema de caché distribuido en PHP

Un sistema de caché distribuido en PHP

Ejemplos
Hace un tiempo, cuando trabajaba para una gran .com del rubro turismo, surgió un escenario muy interesante que teníamos que resolver junto con mi equipo: Teníamos un servidor de bases de datos que daba soporte a siete servidores que hacían de FrontEnd. Nuestra aplicación era php puro (con un "framework" desarrollado in-house... muy mala idea) y todos los frontends corrían el mismo código (Todo detrás de un balanceador de carga, obvio): El problema que teníamos era que el sitio tenía bastante tráfico y la base de datos se nos convertía en un cuello de botella bastante a menudo. La solución que implementamos consistía en tener ciertas partes de las respuestas pre-calculadas. Ahora, como te imaginarás, mantener una experiencia de navegación consistente teniendo varios servidores diferentes tiene sus complicaciones, en nuestro…
Leer más

Una máquina virtual lista para PHP+Symfony2+XDebug

Ejemplos
Charlando con algunos amigos desarrolladores php surgió un tema que les estaba resultando complicado, así que decidí poner mi pequeño granito de arena (para ellos y para otros que tal vez estén pasando por lo mismo). Ya habíamos hablado del por qué usar una máquina virtual para proyectos PHP. Ya estaba claro que usar un framework es más conveniente que no usarlo (independientemente de cuál fuera) y les había comentado sobre mis herramientas favoritas de automatización (Ansible y Vagrant). Todos estábamos de acuerdo "en la teoría", pero a la hora de pasar a la práctica se veían algo frustrados por no poder lograr tener una máquina virtual que fuese fácil de usar y que soportara, entre otras cosas, el uso de XDebug. Lo que te voy a mostrar a continuación son los archivos…
Leer más