Ideas que funcionan: las rutas de una aplicación

El año pasado cuando empecé a escribir el enrutador del framework lo hice de forma muy general, para dar al programador la libertad de escribir el suyo propio y lo pudiera enlazar con cualquier aplicación de modo que se pudiera escribir una clase como zen_enrutador y asignar expresiones regulares únicas para determinadas rutas propias definidas por el usuario.

Un ejemplo de que la idea funciona es que se está usando en muchas páginas web, por ejemplo en el Pais, ¿cómo podemos descubrir que la idea del enrutador se está utilizando?, muy fácilmente, eliminando parte de la URL xD

…Veamos un ejemplo,de un artículo del país…

La dirección original es la siguiente:

http://www.elpais.com/articulo/sociedad/traje/cibernetico/
permite/personas/paralisis/volver/correr/
elpepusoc/20080411elpepusoc_4/Tes

De aquí, podemos ir “quitando trozos” que sabemos que no forman parte de la acción de un controlador de una aplicación web, sólo por el nombre. Lo explicaré con un ejemplo, un nombre de acción puede ser: “articulo”, “sociedad”, etc. sin embargo aquí se puede eliminar “sociedad” quizás, se dejó para categorizarlo en google…veamos como sigue funcionando la URL con las palabras clave de las acciones y los datos que necesita el modelo para recuperar el artículo:

http://www.elpais.com/articulo/usamos/un_enrutador_muy_parecido/al/de/zenphp/
elpepusoc/20080411elpepusoc_4/Tes

Por lo que podemos deducir que la acción es “articulo” y que los datos que necesita son:la fecha en formato AñoMesDia, con el autor y un identificador para el artículo, de forma que se analizará primero la acción y se tomará el final de la URL de derecha a izquierda para recuperar el identificador único de artículo a mostrar, si seguimos eliminando al final observaremos que esta pequeña introducción a la ingeniería web (inversa) nos indica que las ideas simples suelen funcionar, mirad como queda la URL válida al final:
http://www.elpais.com/articulo/20080411elpepusoc_4/Tes
es lo único que necesita, podeis comprobar por qué el 4 es el número de artículo porque (además de ser lo más lógico) podemos ir a
http://www.elpais.com/articulo/20080411elpepusoc_3/Tes ,que es el siguiente 🙂

Saludos!

Compártelo

Generar el esqueleto de una aplicación web en 15 segundos

Hagamos un repaso de los vídeos de la sección de documentos.

Toma 1:Validaciones

Después de ver los vídeos de las validaciones

Toma 2: modelo de datos

De como se construye un modelo de datos con su visualizador usando el MVC modificado

Toma 3: Visualizador avanzado:

Avanzamos con el visualizador:[ver]

Toma 4: El scaffolding

y le añadimos un andamio (scaffolding):[ver]

Todo en uno: el generador

Podemos ver como el generador de aplicaciones lo hace todo en 15 segundos (o menos :))[en acción] realiza nuestro trabajo más rápido que nosotros y nos permite concentrarnos en la parte importante del problema, lo que tenemos que presentar, finalmente.

Ir al vídeo

Compártelo

Construyendo un Sistema Gestor de Contenidos con zenphp

Introducción

Ahora es el momento de introducir el CMS (Content Management System en inglés) de zenphp. Echando un vistazo rápido al sistema gestor de contenidos que usa cualquier software libre que hay ahi afuera como Drupal, Joomla, WordPress,Mambo,etc. es fácil comprobar que se utilizan para almacenar, indexar y buscar texto y contenido multimedia; estos sistemas son extremadamente útiles en sitios web donde el contenido es mantenido por más de un autor aunque muchos de ellos no dispongan de un gran abanico de conocimientos técnicos ya que pertenecen a distintos departamentos.

El Problema

Si en un sitio web hay un equipo de excelentes escritores tanto así como de diseñadores gráficos, que actualizan regularmente contenidos de diversa índole, apareciendo estos indexados en la página principal divididos parcialmente por cada una de sus categorías, debemos permitir que cada profesional se dedique a hacer lo que mejor hace, concentrándose en su área, pero trabajando juntos en el mismo sistema rápido y colaborativo.

Requerimientos de la solución

  • Simplicidad : cada trabajador concentrado en su especialidad
  • Permitir a los escritores editar,revisar las historias y decidir cuáles se van a publicar y cuáles van a ir a primera plana, etc.
  • Uso de un sistema de plantillas consistente
  • Permitir a los escritores acceder sólo a las áreas para las que fueron designados
  • Permitir cambiar la apariencia en cualquier parte del sitio
  • Sistema de seguridad: passwords para artículos y contenido,etc.
  • Comunicación: sistema de mensajería interno (¿ajax?)

Sistemas existentes

Como todo buen programador debe preguntarse antes de ponerse a programar directamente si algo de lo que necesita posiblemente ya esté hecho, en el caso de los SGC (CMS) nos encontramos con que existen muchísimas alternativas, he analizado y participado para la mayor parte de ellos, contribuciones de OsCommerce(http://www.pionono.es), módulos para Joomla ( http://www.intecna.es/ ), adaptaciones de zenphp para PHProjekt [ver], etc

Tras evaluarlos decidí, hace un tiempo, escribir el propio para zenphp para obtener la flexibilidad con un coste añadido: muchísimo trabajo xD, pero la rentabilidad está en que ahora podemos decidir como será la salida del CMS con una interfaz mucho más amigable y cómo se integra éste en el framework dentro de un sitio web, dando la libertad de ser usado o no, aunque depende de si se realiza un correcto manejo del contenido dinámico…

Uno de los principales objetivos de un SGC (CMS) es la flexibilidad a la hora de mostrar la salida, pero suele fallar en cuanto al diseño de un flujo de trabajo particular, recordemos las cadenas de procesamiento del framework Seagull o la preparación de la “pista de raíles” de PHP On Trax, o incluso de las funciones “forward” sobrecargadas de funciones de controladores de frameworks como Symfony.

Escribir un CMS simple no requiere demasiado tiempo, mientras más avanzado y complicado sea el diseño, asi afectará a la adopción del sistema.

Sistema propuesto

En zenphp el CMS es una aplicación, realmente podemos implementar un Sistema Gestor de Contenidos si así lo deseamos, con las herramientas que ya dispone, si queremos…

  • Editar contenido: desde la llegada de los editores WYSIWYG (What You See Is What You Get [auque no siempre xD ]) los SGC se han extendido como la pólvora en tiempos de guerra…Un ejemplo evidente es TinyMCE, usado para escribir este mismo artículo en WordPress…ha mejorado tanto que no osaría compararlo con las primeras versiones de administraciones que empezamos a construir 😀
  • Insertando contenido: administradores de ficheros, librerías de imágenes y vídeos, gestores de subidas de ficheros en Perl y AJAX, qué más podría decir…
  • Bases de datos versus sistema de ficheros: evidentemente gana el segundo, MySQL no es Oracle xD y se hace realmente tedioso trabajar con campos tipo BLOB para almacenar binarios, haciendo al sistema reducir el rendimiento, al menos tampoco tiene la licencia de Oracle 🙂
  • Estructuras de documentos como base: son historias de ejemplo para “enseñar” a utilizar los sistemas gestores de contenidos, una delicia!
  • Usar metadatos: hoy en día es imprescindible para hacer páginas amigables con buscadores…
  • Formateando la salida: usar las plantillas por defecto
  • Diseñando la base de datos y casos de uso: se pueden usar los ejemplos dados con zenphp
  • Buscador: aprovechar clase de búsqueda de zenphp.
  • Generador RSS: existente
  • Bloqueador de spam: presente
  • Exportador de documentos ,artículos a PDF: viable
  • Caché: incluida
  • Compactador: funcionando
  • URL’s amigables con buscadores: enrutada!

Extras:

  • Usar cosas “raras” avanzadas: procesadores de plantillas XCS: PHP+CSS
  • Eliminar cuellos de botella de aplicaciones web 2.0 con frameworks javascript y macros ajax.

El framework proporciona lo necesario para consturir un sistema gestor de contenidos, disfrutadlo 🙂

Compártelo

Lo bueno de hacer las cosas simples

Lo mejor de zenphp es que mucha gente lo va a usar y le va a ayudar porque trae muchos mecanismos automáticos, aunque nadie lo sabe, esto es bueno para la seguridad. Se parece al ejemplo del hombre que nadie conoce que es un “don nadie”, es decir, no es un político ni nadie importante ni famoso y no tiene que quitarse la careta, imaginaos lo difícil que le puede resultar a ese tipo de hombre dejar de actuar como lo que es en su vida laboral,en su casa…salirse del papel…ser común, ser normal, ser feliz. No digo que no pueda serlo disfrutando de lo que hace en sus labores cotidianas, pero mientras más aspiraciones tenemos,más deseos perseguimos, más nos cuesta darnos cuenta de ver qué es lo que no nos hace más felices.

Lo bueno de que este proyecto no tenga instalación y sea configurable en 3 pasos: hoy lo instalé en un departamento de la Facultad de Filología de Granada,el sistema me dió algunos problemas pero nada que no se pueda solucionar fácilmente…

He escrito un pequeño artículo sobre funciones en PHP en la comunidad PHP-Hispano, basado en mis ideas y las de un genial libro listado en la bibliografía del proyecto…hay una copia en GranadaPHP.

Parece que el éxito va llegando para los participantes de este concurso…con esfuerzo,dedicación y disfrutando dia a dia con lo que hacemos, estas cosas suceden.
Buena práctica!

Compártelo

Análisis del código de zenphp por Ohloh

Gracias al proyecto del amigo Juan Pedro Bolívar he descubierto Ohloh, una web donde al introducir la dirección SVN de tu proyecto se analiza y te cuenta cosas interesantes…hasta cuánto cuesta en dólares escrito desde 0 (from scratch) por un número determinado de desarrolladores…
He aquí alguna información interesante sobre zenphp…
[leer más]
Continue reading

Compártelo

Operaciones automáticas del generador de aplicaciones

Para construir una aplicación el generador toma una serie de modelos de ficheros necesarios como base para completar la estructura del sistema.

La estructura del generador se puede ver en el siguiente diagrama:
Diagrama de clases del generador de aplicaciones PHP-GTK2 para zenphp
La macro zen_generador_gtk.php lanza la ventana principal (GtkWindow,PHP-GTK2:GtkWindow) que usa la clase zen_fabrica_gtk para “fabricar” todos los componentes de la ventana principal, asociándole los eventos que se agrupan en la clase zen_eventos_ventana_principal, de forma que tenemos siempre un puntero en todas las clases a ésta ventana principal que sirve para localizar cualquier componente,clase o método que necesitemos desde cualquier lugar, asi, se construyen los modelos de las estructuras de datos como las de los árboles con una clase info_configuracion_arbol asociada a la “fábrica”, que sólo inciarse, en su constructor lee las definiciones del fichero de configuración XML del generador, y genera los menús en el GtkMenuBar llamado zen_menu_gtk existiendo la posibilidad de definir nuestros propios menus de usuario, los eventos se asocian directamente y son “atrapados” por medio de la función “public function evento_menu($nombre) ;” de la clase zen_eventos_ventana_principal, sólo hemos de añadir nuestro “caso” al resto para que se ejecuten las órdenes que necesitemos…

Queda mencionar la última conexión con la fábrica, que estoy desarrollando, el generador GTK se conecta con el generador POA para compilar y aplicar los “aspectos” en los que se basa, esto es, nuestros modelos y ayudantes definidos en el cartucho, los visualizadores asociados, las bases de datos configuradas en la aplicación,etc. Esto se hace con el zen_generador_poa, asociado a la fábrica Gtk de forma que carga el motor de zenphp y conecta las 3 partes del proyecto a través del paradigma orientado a aspectos. Tras compilar, generar y construir todo el sistema de aplicaciones, se muestra el mensaje de confirmación. Ya se puede copiar el directorio de salida al directorio web y si todo estaba bien definido, probar la aplicación…

Quizás algo interesante es zen_ventana_mysql_admin , un administrador de bases de datos MySQL, podemos definir en el XML de nuestro cartucho el acceso a varios servidores y mediante la aplicación al hacer doble click sobre dicha línea de configuración conectarremos al servidor especificado para realizar las tareas que consideremos oportunas fácilmente.

Compártelo

Pruebas con caché y anti-spam para la forja

Hace tiempo que me procuré de encontrar un método eficaz y simple para evitar spam en los foros de la forja pero nunca lo encontré, asi que ideé uno, por si teneis problemas con el spam en vuestros foros aquí teneis el código, son sólo dos ficheros, vuestro servidor necesita tener CURL instalado.

  1. Generador de enlaces de spam en los foros de tu proyecto de la Forja
  2. Iframe que incrusta los formularios para borrar los mensajes de spam

Para que funcione, sólo debéis colocarlo en vuestro servidor, y llamar a miservidor.es/borra_spam.php.
Para configurarlo:

  • $id_proyecto es vuestro número de proyecto, aparece cuando pincháis en los foros de vuestro proyecto ( ?group_id=#___# ) donde #___# es vuestro ID de proyecto
  • $id_foros es un array con todos los identificadores de los foros que tengais: (?forum_id=#___#) donde #___# es vuestro id de foro
  • $palabra es la/s palabra/s que hay en los mensaje de spam…y ¡cuidado! debe ser una sentencia única, porque es peligroso y podeis borrar mensajes que no queríais borrar sin poder recuperarlos…podeis probar qué encuentra con el buscador en el que se basa este generador de anti-spam con el genial buscador avanzado que trae la Forja en:
    https://forja.rediris.es/search/advanced_search.php?group_id=#___#
    donde #___# es vuestro id de proyecto.

El generador de enlaces de spam recorrerá los foros especificados abriendo una conexión con el buscador avanzado, es por eso que debeis tener una sesión abierta como administrador para que aparezcan los formularios de edición y se pueda establecer la conexión correctamente al hacer el envío pinchando en cada uno de los botones “Borrar” de cada iframe, que aparecerán por cada acierto de la/s palabra/s encontradas en los foros del proyecto, en mi caso , el atacante spam me envia cada dia una ristra de posts donde aparece la palabra drug, cosa que no suelo utilizar XD en mis foros, por eso puedo encontrarlo y borrarlo rápidamente.

Aquí una captura:

Cambiando de tema, en este foro hay nuevas pruebas con Akismet para vuestras aplicaciones así como de un ejemplo de caché.

Pasaré a explicar un poco mejor como funciona esto de la caché: esto es lo que hace que vuestras aplicaciones suban muchos puntos en cuanto a rendimiento,tal como hace Drupal, de forma que se guardan en la caché contenidos que no vayan a cambiar mucho,estableciéndose el tiempo límite y asi, cargar el contenido generado (sólo una vez) desde un fichero en lugar de procesarlo todo muchas veces, es un truco que también usa WordPress, sin embargo se puede utilizar para cualquier parte de la aplicación, por ejemplo si lleváis un número de comentarios en un artículo mayor de 50, es tonteria leerlos todos y aplicarles las plantillas, en lugar de eso, se genera hasta un número límite de 50, se guarda una vez y se establece una caché para esos primeros cincuenta.

En cuanto al progreso, se ha avanzado mucho con el gestor de contenidos, el generador está a punto para insertar dicho generador como un administrador con una aplicación zen_aplicacion_administrador…

Salu2!

Compártelo

Resultados de la encuesta sobre el nuevo logotipo

Parece ser que esta vez o estamos todos de acuerdo o no coincidimos porque ha sido la encuesta más equlibrada de todas aunque también es verdad que los logos son muy parecidos entre sí, sólo cambian pequeños detalles pero en líneas generales si que os gustan tanto como a mi y me alegro por ello 🙂

La opinión de alguien en la encuesta acerca de la filosofía del proyecto ha sido la siguiente

“En mi opinión, los tres primeros són demasiado mediocres y comunes. El cuarto es bueno, transmite buenas vibraicones, pero el quinto creo que transmite la pura esencia ZEN del proyecto.”

Gracias por el comment 🙂

Veamos las gráficas:

Encuesta para selección del nuevo logotipo de zenphp

Por ahora ,el logotipo 5 ha pasado a formar parte del contenido del proyecto.
Seguiremos informando!

Compártelo

Crear documentación con LateX

He creado esta pequeña macro:

#!/bin/bash
latex $1.tex
dvips -Ppdf -G0 $1.dvi -o $1.ps
ps2pdf -dPDFSettings=/prepress $1.ps $1.pdf
acroread $1.pdf

para automatizar el proceso de creación de documentos PDF con LateX,con el que sólo tenemos que escribir ./macro presentacion

donde presentacion es un fichero con extensión .tex de forma que se generan los ficheros necesarios para procesar el PDF…para más información podéis ver este vídeo: un ejemplo de creación de documentación,perteneciente al documento “presentacion.tex” que estoy generando

Compártelo

Invitacion a encuesta para seleccionar el nuevo logotipo

Mientras termino con la implementación del diseño de clases GTK del generador de aplicaciones GTK, concretamente la clase que vincula el Paradigma de la Programación Orientada a Aspectos [diagrama] con el lector de cartuchos, además de las pruebas y el código de los ejemplos más el documento de memoria (ahí es ná) he hecho una encuesta con unos logotipos que me ha creado mi amigo Pablox, un genio!! 🙂

Éstas son las opciones para la encuesta

Logotipo 1

Logotipo 2:

Logotipo 3:

Logotipo 4:

Logotipo 5:

Creative Commons

Para participar pinchar aquí.

Gracias.

Compártelo