Cambiando el tema del blog

He creado una encuesta con todos los temas que me gustan para el blog, porque como me gustan mucho varios de ellos no acabo por decidirme, echadme una mano a elegir el que más “zen” 🙂

Actualizado: he añadido un selector de temas 😀 dado las opiniones y gustos tan dispares, y como dice un amigo, así se le da versatilidad al tema 🙂 no?

Bueno, los que quereis camiseta no me estáis poniendo el correo… jaja

Éstas son las opciones:

Continue reading

En el medio del caos

Acabo de actualizar la lista de tareas, posponiendo muchas de ellas a causa de los exámenes,…se que es duro mantenerlo todo al dia, y es que cuando estamos en el medio del caos, y que, por lo que he visto más de uno de vosotros lo está: el trabajo, los exámenes, el proyecto de la forja, etc. creo que lo mejor es relajarse y me anima saber que no soy el único que está asi de liado… 😀 i.e., no hay que tomárselo todo demasiado en serio…

También he actualizado los porcentajes de progreso del diseño/análisis/implementación del framework español zenphp…
Dentro de poco pondré una pequeña encuesta con sorteo incluido con unos pandas :] a ver si me echais una mano para elegir el que mejor represente el espíritu de este proyecto =)
Desde aquí aprovecho ahora y os mando un saludo y deciros que no os desaniméis.Nosotros podemo!! 🙂
Imagen como idea para zenphp…Sed como el panda…

Comprobando la regla 90/10 en PHP

¿90/10?

Este post es para iniciar el estudio de comprobación de si, realmente se cumple el que una aplicación escrita en PHP siga la regla 90/10 del software, la cual nos dice que un programa pasa el 90% de su tiempo de ejecución en tan sólo un 10% de su código.

Tomando los resultados de un “profiler” PHP y analizadolos podemos ver dónde “vive” el código de nuestra aplicación y de este modo realizar las optimizaciones necesarias…Basándonos en el pasado reciente de un script, podemos predecir con una predicción razonable qué instrucciones y datos utilizará en un futuro próximo, para ello podemos usar la caché de la clase zen_cache ,el sistema de memoria de System V con las llamadas de PHP, guardar datos de consultas en una sesión, etc.

Recordemos que existen dos tipos de localidad
LOCALIDAD ESPACIAL
d(t) + k = d(t+n) con n y k pequeños
“Si se referencia un elemento, los elementos cercanos a él tenderán a ser referenciados pronto”.
Es decir, si estamos accediendo a un array, seguramente volvamos a acceder pronto a él, no tiene sentido hacer un array muy grande, deberíamos optimizar el código para no usar arrays más grandes que uno bidimensional…

“Las direcciones de memoria que se están utilizando suelen ser contiguas”.
Por eso, es mejor utilizar
JUSTIFICACIÓN: Los datos relacionados se almacenan juntos.
Las instrucciones se ejecutan secuencialmente. k = n = 1
LOCALIDAD TEMPORAL
d(t) = d(τ+n) con n pequeño
“Si se referencia un elemento, tenderá a ser referenciados pronto”.
“La información que se usará en un futuro próximo es aproximadamente la misma que se está usando actualmente”.

Para diseñar un sistema óptimo se realizan todas las posibles configuraciones en ficheros .XML que definan el comportamiento para cada parte independientemente, por ejemplo, si quiero disponer de un modelo de datos de noticias con una caché que se actualice sólo, creando un fichero .XML y a la hora de usar el zen_generador, para obtener nuestra aplicación de noticias, añadiré una propiedad para que se inserte una clase zen_cache y su configuración es:

  • que se actualice siempre que se añada/modifique/borre una noticia (o se fuerce a ello)
  • que genere los listados de noticias automáticamente y los guarde en un fichero .HTML que es mucho más rápido que generar todos los listados cada vez que se cargue el script de noticias…
  • que disponga de un administrador con soporte AJAX y un cliente básico
  • que use el tema por defecto de zenphp para mostrar la información de los modelos…

Bueno,resumidamente, es lo que estoy haciendo en estos momentos…

Framework español de PHP

Después de un interesantísimo debate que algunos de los lectores de esta entrada del blog han participado, damos las razones de por qué programar en un idioma u otro con nuestro código, siendo lo más común escribir en inglés, he decidido publicarlo por aquí ,en la lista de correo de la Forja del proyecto zenphp.

Quizás sea por éstos motivos por los que a la hora de buscar framework español en google sólo encontremos a kumbia.org…

Realmente no podemos hablar de conclusiones definitivas ya que estaríamos obligando a la gente a hacer lo que unos pocos pensamos, pero sí que podemos aconsejar.

Incrustar Efectos Prototype en los atributos de un enlace

En zenphp gracias a la macro zen_ajax.js podemos añadir efectos simplemente con un atributo, el resto es automático.
Para ello ponemos nuestro enlace como es normal con
<a href=”/direccion_al_script_ajax.php/” ajax=”1″ animacion_carga=”slideDown” animacion_descarga=”slideUp” division=”contenido”>Enlace AJAX</a>

Y lo que hará el motor será , convertir el enlace en un enlace ajax que se cargará por el método POST en segundo plano mientras se aplica el efecto de “correr hacia arriba” la división “contenido” ,al recuperar el contenido del fichero php del enlace se coloca dentro de la misma división y se aplica el efecto de “correr hacia abajo” mostrándose 😉

Efectos disponibles: highlight, fade, grow, shrink, fold, blindUp, blindDown, slideUp, slideDown, pulsate, shake, puff, squish, switchOff.

Aplicando filtros pre y post procesamiento en zenphp

Algo complejo se puede hacer más fácil, de hecho es lo que se suele hacer con el proyecto zenphp.

Para, digamos, obtener una serie de datos de la base de datos en una tupla y de esa tupla, procesar un campo filtrándolo con una función y guardándola en otra variable distinta para meterla en la plantilla HTML se hace con dos instrucciones.
<?php
//añadir el campo a la consulta
$this->padre->campos.=", title as titulo_formateado";
//aplicar el filtro
$this->padre->filtros_postprocesamiento = array("titulo_formateado" => "zen_limpiar");
//yatá, 3 líneas con el contenido ya hecho
$contenido['contenido'] = $this->listado(
"resumenes_noticias.html",
"noticias_portada.html","divisiones_noticias");
?>
XDDD
Bueno, lo explico: desde la vista (visualizador zen_html_modelo_datos) HTML le digo al padre, el modelo, q quiero añadir un campo y que quiero que despuées de leer los datos me formatee el título y me lo guarde como la variable titulo_formateado para pasarla a la plantilla del listado…por cada tupla.

No se si más simple se podrá hacer…si tienes alguna duda o quieres mejorarlo, no dudes en lanzar tu comment 😉

Compactador para la clase plantilla HTML y JavaScript

Se ha añadido la clase zen_compactador_html que comprime tanto HTML como JavaScript de forma que podemos procesar todo el contenido que queremos añadirle, por ejemplo, cargar un fichero HTML, substituir un par de etiquetas enmarcadas por # , por los datos de una base de datos y por último enviarla del servidor al cliente compactándola…

Pros:

  • Tamaño del código DHTML mucho menor, la tasa de transferencia aumenta por el ahorro de ancho de banda
  • Disminución del tamaño de los ficheros javascript

Contras:

  • Se requiere un tiempo de procesamiento para expresiones regulares que es unas 10 veces más lento que el motor de la clase plantilla porque esta usa reemplazos simples y el compactador procesadores de expresiones
  • Necesitamos pasar todos los ficheros a incluir en la plantilla HTML por el compactado, esto genera más peticiones a Apache

Conclusiones: es necesario realizar los tests de eficiencia para comprobar cuál de las dos opciones es mejor, si usar o no el compactador, es decir, separar por un lado el compactador sólo para comprimir el texto fuente que sea muy pesado así como compactar sólo los scripts grandes y guardarlos ya procesados para que pesen menos….o bien, activar el compactador y procesar todo el contenido de las aplicaciones y scripts PHP mediante el búfer de salida…

La importancia del profiler en PHP

Sin duda, las herramientas “IDE” o entornos visuales para la edición de código fuente aumentan muchísimo la producción.
Hoy en día es muy necesario que dicha aplicación disponga de una interfaz amigable y de herramientas super importantes a la hora de la verdad, creando un proyecto si no sabemos qué está pasando con nuestro código,no sabremos si hace lo que se espera de él cuando lo escribimos y previamente diseñamos…

Así pues, es imprescindible disponer de un profiler que nos informe por qué y qué es lo que hace que nuestra aplicación vaya demasiado lenta o se cuelgue; e incluso nos ayuda a depurar todo el proyecto de una forma a simple vista sencilla.

En el ejemplo podemos ver que el compilador lleva mucho tiempo en ejecutar la línea 29 de la clase que añade el contenido especificado en nuestro XML de aspectos a un fichero .PHP. Si leemos la línea veremos que lo que se hace es una llamada a implode : construir una cadena a partir de un array de contenidos. Es bien sabido que éste lenguaje es muy ineficiente cuando se trata de operar con cadenas, sobre todo en las concatenaciones…
El resto de llamadas ineficientes son básicamente la lectura de ficheros,por lo que ya sabemos que debemos intentar realizar el menor número de accesos a disco, éstos son, llamadas a require(), require_once(), include_once(), readfile(), virtual()include_path, fopen, etc…Ahora deben ser precedidas por funciones de comprobación de existencia de funciones,clases y ficheros… 😉

Por lo tanto ya sabemos donde tenemos que centrar nuestra atención a la hora de optimizar el código. 🙂

Resultados [iniciales] de la encuesta sobre AJAX

Éstos son los resultados de la encuesta AJAX realizada a programadores…

Parece que todo el mundo conoce AJAX! y que no les gustan mucho los métodos que hay en los frameworks (ni tan siquiera lo que han hecho otras personas: aplicaciones AJAX), ésto plantea un problema que se reduce a las siguientes cuestiones:

  1. ¿Quién necesita un mecanismo AJAX
  2. ¿Cómo realizar una correcta interpretación de lo que el usuario necesita dentro de un conjunto de librerías?
  3. ¿Realmente necesitamos aprender AJAX o simplemente con una serie de llamadas tenemos el trabajo hecho?

Y la respuesta se resume en que: lo más simple es la mejor decisión. Por ello utilizaré una única librería AJAX comprimida (con Prototype incluído) y una serie de objetos extensibles para que el usuario pueda añadir todas las funcionalidades con un par de líneas y…claro, el usuario más avanzado pueda ir a modificar lo que necesite…

Vamos ya a los Resultados!…(entrar para ver las gráficas) Continue reading