XCSS : reinventar la rueda del CSS dinámico

En Febrero del 2008 diseñé una clase llamada XCS que utilizaba PHP para generar CSS dinámicamente, con la posibilidad de utilizar variables dentro del mismo fichero de reglas de estilo para hacer webs con contenido modificable fácilmente.

Hace poco he encontrado el “primer framework CSS orientado a objetos” como lo nombra a sí mismo Anton Pawlik su autor, http://xcss.antpaw.org/ y que hace precisamente eso,…sin embargo ha tenido mucho éxito 🙂

A pesar de su sencillez, (la clase principal no es muy complicada) no se diferencia demasiado de la que escribí basándome en otra al mismo tiempo…aunque no la he llegado a usar como programador php

Comparativa ATK Framework – zenphp framework

atk_vs_zenphp

Acabo de leer un artículo de Ivo Jansch, un profesional de Oracle diciendo que empresas de todos los tamaños tienen la necesidad de portar las aplicaciones de escritorio que usan bases de datos Oracle a aplicaciones web ,según nos dice, por la gran facilidad, usan un framework: ATK Framework.

El tesoro de este framework es la gran facilidad para crear administradores con sólo varias líneas de código, y es algo que me ha gustado bastante, podéis comprobarlo en su web.

Es justo la parte débil de zenphp.

Sin embargo, echando un vistazo al código vemos que realmente sí que son más líneas, porque se van definiendo los menús y sus accesos, se usan nodos de tipo atkNode, y como suele pasar con los frameworks gigantescos, tenemos que empezar a conocer la extensa terminología única de ATK:

—-
/**
* This node is new. It is used to edit profiles. A profile is a set of user
* privileges. In this scenario, each user has one profile (many-to-one
* relation).
*/
useattrib(“atkdummyattribute”);

/**
* The profileattribute can be used to edit the privileges.
*/
useattrib(“atkprofileattribute”);
—-

etc.

Son todas estas distracciones las que he intentado eliminar, por eso zenphp no tiene instalación, al copiarse ya se puede utilizar.

Y hacedme caso, no necesitáis escribir un framework completo para escribir una buena herramienta de administración, sobre todo tan reducida como la de ATK. Si queréis ver algunos ejemplos, mirad en http://programadorphp.org

Expandiendo zenphp a los medios

Para expandir zenphp escribo artículos donde tan sólo explico lo que los programadores necesitan, se hace más fácil de leer si no son muy largos y está escrito de forma que es comprensible independientemente del nivel que tenga el lector,…o al menos se intenta 😀

El último artículo que he escrito va sobre cadenas de texto y expresiones regulares, muchas comunidades suelen tener cientos de preguntas ,donde se repiten muy a menudo los temas, con estos pequeños tutoriales se pretende ahorrar horas de conversaciones y preguntas/respuestas que por bien que estén necesitan un tiempo para ser publicados y completados.

Tener en cuenta todos los casos es fundamental, para hacerlo me ayudo de los libros que voy encontrando, la mayoría están en inglés y a veces me sorprendo a mi mismo leyendo y escuchando cosas en este idioma, como si fuera español, aunque no me vuelvo a plantear si el framework debería estar en inglés, me parece bien como está 🙂

Decisiones importantes

Dicen que nuestras decisiones marcan nuestro destino, por eso debemos ser nosotros mismos quienes decidamos en nuestra vida…

Veamos, las decisiones importantes del proyecto actualmente…

  • Usar gettext para los idiomas en la parte del núcleo de zenphp y el editor Poedit para crear los ficheros de idiomas (.po). ¡Es más eficiente que el uso de cadenas y constantes!…
  • Usar PHP/GTK para el generador de aplicaciones en lugar de generar por línea de comandos (cambio de chip)
  • Basar el generador de aplicaciones en modelos XML, así se puede actualizar el generador muy fácilmente, pudiéndose construir incluso un generador de generadores.
  • Diseñar “cartuchos” de aplicaciones como “Portal.XML” que generan con las opciones pasadas una aplicación completa de un portal web

La última decisión la he tomado porque ayer encontré que existen ya mecanismos que pasan de un modelo XMI construido en un editor UML a un conjunto de ficheros de clases de PHP, por lo tanto sería absurdo volver a repetir lo que otros han construido,asi que por lo tanto ,me centro en construir una aplicación PHP/GTK que utilice mi compilador y generador de aplicaciones basado en el paradigma de la programación orientada a aspectos, que lo tengo un poco olvidado 🙂

Con ello se cumple el objetivo del proyecto de ser un framework de aplicaciones web y ahora estoy con la parte de generador de aplicaciones en PHP/GTK.
Ahí va una captura del editor Poedit en primer plano y Kate al fondo (gracias al uso de un manualillo) 🙂

Buena práctica!

Temas por defecto

Aprovechando que he terminado una práctica de esas gordas para la Universidad he montado un sistema de aplicaciones cliente / administrador utilizando las plantillas XHTML+CSS de licencia para copiar 🙂 con ésto siento que he progresado! y mucho, 😀 y realmente estoy bastante contento con el diseño, la plantilla sirve para hacer las llamadas a las vistas y controladores por defecto de todo el sistema de clases de zenphp.

Aquí, una captura de la plantilla en funcionamiento:

Captura de la aplicación por defecto de zenphp

 

Estoy terminando con la plantilla de administración, la factoría de generación de código depende de la clase zen_andamio (el scaffolding de zenphp) y la administración depende de zen_AJAX. Tras escribir esta mañana la clase zen_JSON está bastante avanzado…

Con esto tengo una buena parte hecha de lo que veía imposible ,sin embargo ha sido más fácil de lo que en un principio parecía y ya incluso veo el final del túnel. 

¿Necesita un usuario leer el núcleo de un framework?

Actualización del Progreso del proyecto:  terminando la clase “andamio” de la base de datos: scaffolding y el generador,para empezar con el núcleo de la interfaz gráfica que implementa la base del gestor de contenidos (CMS) de zenphp.

No suele ser normal que se entre a leer las clases del núcleo de un sdk sin embargo todo depende de lo bien que hayas ideado los métodos en los que se basa tu conjunto de librerías,i.e., si has hecho un buen diseño y tienes un método sencillo y bastante dinámico, con el que se puede construir una aplicación con total libertad, entonces es que has hecho un buen trabajo y seguramente a nadie le hará falta consultar mucho (o nada) la documentación ,será suficiente con ,simplemente leer un ejemplo, el resto lo hará el autocomplementado de código de nuestro IDE, ya sea Eclipse o Zend Studio o cualquier otro.

Continue reading

Diseñado. Implementando : controladores y direcciones…

Considero muy importante que un framework PHP tenga una buena construcción de las “llamadas” o enlaces a las partes de una aplicación, es por eso que ahora estoy dedicándome a la implementación del diseño que tengo en mente y parte en papel 😛 del controlador del modelo de aplicaciones, ésto se basa en el enrutador ( zen_enrutador ), el controlador ( zen_controlador_modelo_datos ) y además tengo muchas partes sueltas para unir, tales como funciones que generan control de validaciones en formularios y envíos de estos, redimensionamiento de imágenes antes de grabar, etc.

Otro punto a considerar es el lugar donde el usuario almacena los datos, dentro de mis proyectos suelo utilizar un directorio llamado media donde coloco aquellos ficheros que desde la administración se van subiendo, si unimos la parte de framework PHP con la del gestor de contenidos (CMS) ,encontramos que estamos necesitados de añadir toda la configuración de los directorios de multimedia ,tal como hace Django.

Vuelta al trabajo

Llegué de Inglaterra la semana pasada y me he vuelto a poner manos a la obra.

Es más desde la biblioteca de un pueblecito llamado Hartlepool al sur de Newcastle estuve escribiendo algo en las tareas  y el foro 🙂

Continúo con la depuración y optimización de clases, el análisis de frameworks,sdks y gestores de contenido, que me está llevando mucho tiempo y trabajo (por suerte me gano la vida gracias a PHP) 😛  y por fin empiezo con el generador de código de aplicaciones multisistema 🙂 siiii!!

saludos!