archivo

Symfony

Imagen

Tras más de un año programando y mejorando Vavag, hoy he publicado el código bajo licencia GPL v3. Lo hago por varios motivos. El principal es que me parece justo. Todo el software que he empleado desde el servidor web (Apache) hasta el IDE (NetBeans) para escribir el código pertenecen al software libre. Si ellos me proporcionan el código, por qué no hacerlo yo también? El software libre proporciona muchas ventajas, entre ellas la de crear una comunidad y lo que antes programaba una sola persona, ahora lo pueden programar varias en paralelo y en menos tiempo. La seguirdad y los bugs no son menos importantes: cuatro ojos ven más que dos y será más fácil encontrar y corregir errores.  Disponer del código fuente es una gran ventaja: Puedes montar un servidor en casa, instalarte el proyecto y hacer los cambios que necesites, adaptarlos a tus necesidades o si, por ejemplo, tienes una empresa o negocio, adaptarlo a el y usarlo en la Intranet.

El proyecto lo he subido a SourceForge y el repositorio de código es tipo GIT. SorceForge es un gran recurso para desarrolladores de software libre. Es una inmensa forja de proyectos open source que, entre otros, hospeda a PhpMyadmin o OpenOffice.

Espero que alguien se anime a colaborar 🙂

Recursos:

Vavag Open Source

Anuncios

Criteria es el objeto que permite definir los criterios de selección de resultados en sistemas que emplean Propel como ORM. Propel y Doctrine son dos plataformas de mapeo de resultados SQL a clases empleados por Symfony. Este post se centra en el uso de Propel y describo como emplear funciones SQL propias en el objeto Criteria.

Imagina que tenemos una tabla llamada producto con dos campos:

  • id
  • nombre

En el modelo de clases generado por Symfony tendremos una clase llamada ProductoPeer que es la encargada de realizar los accesos a base de datos. Para realizar las consultas hemos de construir un objeto Criteria que contiene las características de los datos que deseamos seleccionar. En algunas ocasiones es útil emplear funciones que hemos escrito en base de datos, como por ejemplo, una función que dado un id de producto nos devuelve el número de veces que se ha consultado en nuestra web. El código lógico sería el siguiente:

$criteria = new Criteria();

$criteria->addAsColumn(‘consultas’, ‘getConsultasProducto(‘.ProductoPeer::ID.’)’);
$criteria->add(ProductoPeer::ID, $productoId);
ProductoPeer::doSelect($criteria);

getConsultasProducto es una función de base de datos que devuelve el número de consultas.

Si lanzamos la aplicación dará un error indicando que ProductoPeer no puede encontrar el campo con la clave primaria. Para evitar esto usamos lo siguiente:

$criteria = new Criteria();
$criteria->clearSelectColumns();
$criteria->addSelectColumn(self::ID);
$criteria->addSelectColumn(self::NOMBRE);
$criteria->addAsColumn('consultas', 'getConsultasProducto('.ProductoPeer::ID.')');
$criteria->add(ProductoPeer::ID, $productoId);
ProductoPeer::doSelect($criteria);

Lo nuevo con respecto al código inicial es que se resetean los campos que estarán en la select y se añaden en el mismo orden en el que están declarados en config/schema.yml del proyecto. Gracias a esto, podemos ordenar los resultados por el número de consultas del producto:

$criteria->addDescendingOrderByColumn($criteria->getColumnForAs('consultas'));

Espero que sea de utilidad. Saludos.

Seguramente has visto en elgún momento un Captcha, esas imagenes que contiene textos, números o formas con una casilla de texto cercana en la que introducir el texto de la imagen, el resultado de alguna operación aritmética simple o el nombre de la forma que representa la imagen.

Ejemplo de Captcha

Un Captcha no es más que un Test de Turing, ese que dice que si una máquina se comporta de forma inteligente en todos los aspectos es que es inteligente. La idea principal de los Captcha no es más que establecer un pequeño desafío que se debe resolver como el reconocimiento de texto o formas, actividades que son fáciles de ejecutar para un ser humano pero que entrañan una gran complejidad emularlas en computación. Por evitar a los spambots se ha extendido su uso y es raro encontrar una página web con tráfico que no los use en sus formularios de alta, envío de sugerencias o cualquier otro formulario. Los spambots son robots de Internet que pueden ralizar altas masivas en sitios web y llenarlos de comentarios spam, subir imagenes o cualquier otra actividad para la que hayan sido programados. Para que quede claro, enumero alguna de las aplicaciones de los Captchas:

  • Prevenir comentarios spam en blogs y foros.
  • Protección del registro en sitios web.
  • Protección de las direcciones de correo electrónico de los Scrapers.
  • Para evitar el voto automático en encuestas.
  • Prevenir ataques de direccionario en formularios de login: tras varios intentos, mostrar un Captcha tras un número de intentos fallidos.
  • Evitar que robot de indexado accedan al HTML de algunas páginas. Los bot como los de Google respetan el robot.txt, pero existen otros que lo ignora. Podría mostrarse un Captcha para estos últimos.

En Vavag.com, he puesto recientemente un Captcha en el formulario de alta de nuevos usuarios para evitar el registro automático masivo. El Captcha que he usado es el del conocido reCaptcha, una aplicación que empezó como un proyecto de Universidad Carnegie Mellon, y que fue adquirido por Google en 2009. Como Vavag está implementado en Symfony framework, he empleado el plugin sfReCaptchaPlugin de Massimiliano Arione que posee licencia MIT.

Otras alternetivas

Existen otras aplicaciones Captcha como AdsCaptcha que genera desafíos de texto basados en eslogan publicitarios, lo que significa que cada vez que se resuelve un Captcha, se deja algo de dinero a la web en la que está incluido. Sin duda una buena idea para monetizar comentarios en blogs y foros.

Espero que os sea de utilidad este pequeño repaso por los mecanismos Captcha. Bye.

Los selectores CSS son cada vez más comunes para evitar la complejidad de lectura de un ficheri HTML. Gracias a ellos, y con un formato que guarda similitud con el de las expresiones regulares, podemos construir cadena que permiten aplicar un estilo a determinados elementos HTML. Este “lenguaje” también se emplea en sistemas de pruebas funcionales –functional test– sobre aplicaciones web, para determinar si existe un elemento como resultado de aplicar la prueba y probar que todo ha marchado bien. Por ejemplo, el método checkElement del sistema Lime, motor de pruebas de Symfony, emplea dichos selectores.

Dejo un elace a modo de resumen sobre la sintaxis de los Selectores CSS que ha creado anieto2K.

A continuación pongo un fragmento de código para aquellos que necesiteis implementar un método en Symfony que devuelva una imagen:

Aquí el MIME TYPE está puesto a jpg, pero puedes poner el que desees.

$this->getResponse()->setHttpHeader(‘Content-Type’, ‘image/jpg’, TRUE);
$this->getResponse()->sendHttpHeaders();
$fileContents = file_get_contents(<path al vuestro archivo>);

$this->getResponse()->setContent($fileContents);
return sfView::NONE;

Sin duda Symfony es uno de los mejores framework para desarrollar aplicaciones en PHP que conozco por las  siguientes razones:

  • Potencia
  • Flexibilidad
  • Abundante documentación en muchos idiomas, incluido el nuestro.
  • Casos de éxito
  • Gran número de plugin

Ya son más de 500 los plugin disponibles en los repositorios, pero como la abundancia no implica calidadad, el equipo de symfony ha introducido un sistema que permite decir a los programadores que plugin emplean. De esta forma, en breve dispondremos de la lista de plugin más empleados.

Dar las gracias a la gente de Symfony.es por los aportes que realizan en materia de documentación y apoyo al framework.

Recursos:

Symfony Framework.

A %d blogueros les gusta esto: