Freelance Programador PHP ofrece sus servicios

juan_belon_PHP

Después del artículo programador Zen, sólo quedaba demostrar que con paciencia ,dedicación y perseverancia se consiguen terminar muchos proyectos, ésta web: Programador PHP, sólo refleja algunos de ellos por cuenta propia, en ella,además ofrezco mis servicios desde ella,…a algun@s ni les cobro! jajaja.

Hay que seguir mejorando, nunca dejar de aprender, esa es la actitud, …finalmente o eres bueno en lo que haces o te retiras…

En mi caso, antes de que acabe el año tengo que preparar dos presentaciones de zenphp en mi Escuela, una en Octubre y otra en Diciembre…me han pedido que lleve más ejemplos técnicos. ¡Deséame buena suerte! 🙂

Continue reading

Sistemas de etiquetas cíclicos para la web: buena idea, difícil implementación

La idea es crear una navegación única para cada usuario con la que vamos “barriendo” la web, usando los tags como cepillo: arrastra el polvo del contenido y nos quedamos con lo que interesa,gracias a un sistema cíclico de etiquetas clasificadoras.

Un sistema de etiquetas cíclico se basa en un sistema de etiquetas simple donde se dispone de una lista de n reglas de etiquetas (tags, cada una de una forma especial) que se aplican en un sistema de orden secuencial y después empiezan de nuevo por la primera regla.
En un sistema de este tipo, cada conjunto de reglas de etiquetas tiene una estructura especial donde es asociado un patrón a un usuario sólo si el primer elemento no es requerido, i.e., es independente del conjunto, entonces es borrado.

El lado oscuro del sistema

Sin embargo no todo es un camino de rosas, como suele pasar en los sistemas, se producen muchos problemas por el mal diseño del software y una pésima implementación puede hacer que un servidor web incluso se colapse…

Por ejemplo technorati usa un sistema de tags con 467 mil tags diferentes,cuando un típico diccionario puede tener alrededor de 75 mil entradas…la diferencia es impresionante, teniendo en cuenta que no todos los usuarios están utilizando realmente tags para clasificar sus artículos.

La parte oscura del sistema viene dado por los “memes”: si uso una cita o etiequeta específica en un artículo de mi blog o web, entonces, se conectará con otros artículos incluso de otros sitios, se crean vínculos…

Pero…sorpresa sorpresa!!, esto no funciona tan bien como se espera porque acabas creando subcomunidades que se estandarizan, pero que están navegando en contra de la dirección de otras subcomunidades.

Soluciones: usuarios y desarrolladores

En esta situación, ¿cuál de los dos grupos van a cambiar sus etiquetas retroactivamente?, o ¿es la persona que está navegando a través del sistema de etiquetas a partir de una serie de artículos la que debería saber acerca de esto y salirse del anillo a voluntad?

Con casi medio millón de etiquetas en una comunidad a la que le encanta progresar, quizás deberíamos replantearnos estas ideas y rediseñar nuestras aplicaciones…

Y ,pronto…¡la implementación!

Aplicaciones de administración

Un gestor de contenidos de una aplicación de administración, a lo largo de la historia de zenphp me he visto obligado a crear diversos tipos de administradores e ingeniármelas para hacerlo de forma tan general que pudiera compartir el código entre proyectos para no reescribir todo el código una y otra vez en función de las necesidades de los usuarios finales.
Para generar dichas aplicaciones, estoy diseñando un modelo general de aplicación web de administración con una serie de plantillas, el conjunto total de la aplicación con administración es el cartucho que carga el generador Gtk y es compilado por el generador POA de forma que obtenemos el esqueleto inicial de una aplicación en pocos segundos ,sobre la que vamos a trabajar, podemos cambiar las plantillas de administración pero realmente no es algo primordial ya que sólo con cambiar el logo para cada proyecto y un par de cosas más estará completado.
Adjunto una captura de una de las aplicaciones web de administración del modelo de “Portal” que estoy preparando como cartucho para incluir en el repositorio SVN del proyecto.

En la imagen se puede ver el visualizador HTML donde el único HTML que hay son pequeños mensajes de resultados, una pregunta, una confirmación, cosas simples, que han de estar mejor en funciones que lean una plantilla por defecto, asi está todo bien organizado. El resultado es una página de administración para mantener el contenido de una aplicación web cliente de forma que cualquier usuario pueda modificar cualquier parte de la misma.

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

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.

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!

Aumentando la eficiencia del framework

Después de muchos estudios y procesos de optimización,la última medición con el profiler PHP sobre zenphp, con el tema por defecto ha conseguido reducir al mínimo las llamadas al sistema, apertura de ficheros y operaciones ineficientes, incluso usando el compactador HTML [ver clase] lo que más se lleva es la función require de zen___carga_clase() que es la función usada para, como su nombre indica, cargar clases en nuestras aplicaciones, de hecho, usando dos aplicaciones y vinculando las bases de datos entre ellas, el resultado es el siguiente:

En zenphp no existe la función “autoload()“, que es una función muy famosa en PHP5: sirve para hacer un “require” de cualquier clase cuando la instanciamos por primera vez y no está en el ámbito actual.

Esto se hace para mantener nuestras aplicaciones sin sobrecarga, así que sólo usamos lo que cada parte de nuestra aplicación necesita en cada momento.

Veamos la gráfica:

  • Nos quiere decir, que mientras más clases usemos,más veces vamos a llamar a la función zen___carga_clase y con ello será más ineficiente, sin embargo no se hacen demasiadas llamadas ya que no solemos utilizar miles de clases en una aplicación pero si hasta cientos de ellas…
  • preg_replace() se usa muy poco, una única vez en la salida de la plantilla y cuando la compactación está activada, asi que si vamos a utilizar mucho procesamiento HTML y mostrar muchas veces la salida de la clase zen_plantilla, entonces es mejor desactivarla…cosa no muy probable…
  • Salta varias veces con la alerta E_STRICT.Hay algunas consideraciones a tener en cuenta con el tipo de error STRICT en PHP, ya que zenphp está escrito en PHP4 y PHP5…tiene características que serán eliminadas a partir de PHP6.x en adelante; …por lo tanto PHP5 intenta mostrar alertas cuando se hacen cosas como crear una variable con una referencia a partir de una función como puede ser un  constructor de una clase…son pequeños detalles pero consumen unos milisegundos de tiempo.
  • La función setlocale(); se toma alrededor de un milisegundo y medio, es la última ineficiente del conjunto inevitable…como sólo es llamada una vez no la considero para mejora, ya que es más ineficiente leer todas las constantes de idiomas (en lugar de usar fichero .mo [poedit]) como se hacía en los primeros prototipos del framework…
  • El resto de peticiones no se pueden considerar ineficientes…

Seguiremos optimizando 🙂

Administrador mySQL en PHP/GTK

He avanzado con el editor PHP/GTK del generador de aplicaciones de zen php, en esta ocasión he puesto a punto el administrador de bases de datos de mySQL.
Para verlo funcionar sólo hay que crear un fichero XML donde se especifique una aplicación y la parte de configuración referente a la base de datos.

Un ejemplo se puede ver en el svn.

<?xml version=”1.0″ encoding=”utf-8″?>
<!DOCTYPE cartucho SYSTEM “./zen_cartucho.dtd”>
<cartucho>
<previsualizacion>portal/previo.jpg</previsualizacion>
<aplicacion nombre=”Portal”>
<configuracion>
<basedatos servidor=”localhost” usuario=”root” contrasena=”” nombre=”” tipo=”mysql”>
Base de datos para el Portal
</basedatos>
</configuracion>
</aplicacion>
</
cartucho>
A continuación una captura del administrador mysql para PHP/GTK embebido en el editor del generador de aplicaciones.

Imagen del generador con el administrador mysql en PHP/GTK

El XML del cartucho define las base de datos, que se cargan en el generador PHP/GTK y se muestra la interfaz de administración mysql, donde se crea una base de datos llamada zenphp y una tabla en ella de usuarios con una tupla, después se hace la selección de todas las tuplas y se muestra la información…

Progreso del generador de aplicaciones PHP/GTK

Hoy he estado avanzando en el trabajo con el generador de aplicaciones PHP/GTK de zenphp, estoy aprendiendo un montón de GTK, bueno como dos imágenes valen más que dos mil palabras, pasamos a las capturas mejor 🙂

Otra imagen del entorno inicial:

No hagais mucho caso a las capturas,son los primeros avances del diseño del configurador de modelos y parámetros del generador a partir de un XML…

La última versión del generador está en el directorio trunk/zenphp/generador/gtk del SVN de la Forja:
svn checkout https://forja.rediris.es/svn/csl2-zenphp/trunk zenphp
y recordar que se carga con una orden del tipo:
php zen_generador_gtk.php
Ahora mismo estoy desarrollando la parte en que se carga el fichero XML con todas las opciones y se interpretan en la interfaz de usuario para ser editadas, de forma que se puede utilizar el entorno gráfico para con varios clicks generar una aplicación web ( sencillamente ) compleja con conexión a la base de datos.
Hay editor para ver las bases de datos mysql, que encontré en la red y lo he adaptado al generador porque me parece muy útil.
Además he incluido un visor de objetos de PHP-GT de kksou

¿Cómo funciona?

Continue reading