Instalar PHP+GTK2 en Linux
29 febrero, 2008
- Descargar todos los paquetes
Primero, descargar todos los siguientes paquetes y ten en cuenta el número de versión.- pkg-config-0.21 – una herramienta para llevar el control de las banderas de compilación necesarias para las librerías usadas por GTK+ [descargar]
- glib-2.12.4 – es el núcleo de librerías de bajo nivel que construyen las bases de GTK+ y GNOME [download]
- libpng-1.2.8 – librería de imagen PNG [download]
Elige la versión: .tar.bz2 que contienconfigure. Es más fácil de compilar. - freetype-2.2.1 – un motor de fuentes que provee de una “API” simple y fácil de usar para acceder al contenido de una fuente con un método uniforme, independientemente del formato del fichero. Soporta fuentes escalables en formatos como TrueType o “Type 1″ nativo. [download]
- fontconfig-2.4.0 – le da a Pango la estandarización para la localización de fuentes para poder encontrarlas por sus nombres [download]
- cairo-1.2.4 – una librería gráfica que soporta vectorización y composición de imágenes. Tanto Pango como GTK+ usan cairo para gran parte de su dibujado. [download]
Atención: Descarga la versión v1.2.4 (o mayor) directamente de cairographics.org. NO USES la que viene en el ftp ftp://ftp.gtk.org/pub/gtk/v2.10/dependencies/. ¡En mi PC ha causado muchísimos bugs! Encontrarás que gtk+ no te compila si usas cairo-1.2.0. Y el mensaje de error dice que hay un problema con pango, aunque realmente el problema viene de esta versión, cairo-1.2.0 que es la que causa el problema. Además, la v1.2.6. parece que también da algunos errores. - pango-1.16.4 – una librería para manejar texto internacionalizado [download]
- atk-1.9.1 – Herramientas de Accesibilidad [download]
- gtk+-2.10.12 – la base para php-gtk2 [download]
- libgnomeprint-2.12.1 – se necesita para gtksourceview [download]
- gtksourceview-1.6.0 – permite que se pueda mostrar código fuente con numeración automática y coloreado de sintaxis (se usa en el generador) [download]
- gtk+extra-2.1.1 – contiene un número de útiles widgets incluyendo: GtkSheet, GtkPlot y GtkDirTree [download]
- php-5.2.3 – php5 [download]
- php-mysql – módulo de MySQL para PHP5 [download]
- mysql – Servidor de base de datos MySQL [download]
- php-gtk-2.0.0beta – php-gtk2 [download]
- Librerías de desarrollo de las X-Window
Haz una rápida comprobación de tu configuración y asegúrate de que tienes las librerías de desarrollo de las X instaladas… - Variables de entorno necesarias
Si estás usando bash, establece las siguientes variables:
CPPFLAGS="-I/usr/local/include"Si usas csh o tcsh, añade lo siguiente a tu $HOME/.cshrc
LDFLAGS="-L/usr/local/lib"
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
LD_LIBRARY_PATH="/usr/local/lib"
PATH="/usr/local/bin:$PATH"
export CPPFLAGS LDFLAGS PKG_CONFIG_PATH LD_LIBRARY_PATH PATH
setenv CPPFLAGS "-I/usr/local/include"
setenv LDFLAGS "-L/usr/local/lib"
setenv PKG_CONFIG_PATH "/usr/local/lib/pkgconfig"
setenv LD_LIBRARY_PATH "/usr/local/lib"
setenv PATH /usr/local/bin:${PATH} - Compilar GTK+ primeroAtención: Para todos los paquetes, usa el ./configure por defecto. Los ficheros compilados irán a /usr/local/lib y /usr/local/include.
Orden de compilación:
- Compilar glib-2.12.4
tar xvzf glib-2.12.4.tar.gz
cd glib-2.12.4
./configure
make
sudomake install - Compilar libpng-1.2.12
bunzip2 libpng-1.2.12.tar.bz2
tar xvf libpng-1.2.12.tar
cd libpng-1.2.12
./configure
make
sudomake install - Compilar freetype-2.2.1
tar xvzf freetype-2.2.1.tar.gz
cd freetype-2.2.1
./configure
make
sudomake install - Compilar fontconfig-2.4.0
tar xvzf fontconfig-2.4.0.tar.gz
cd fontconfig-2.4.0
./configure
make
sudomake install - Compilar cairo-1.2.4
tar xvzf cairo-1.2.4.tar.gz
cd cairo-1.2.4
./configure
make
sudomake install - Compilar pango-1.16.4
tar xvzf pango-1.16.4.tar.gz
cd pango-1.16.4
./configure
make
su(entrar como root)
make install
Atención: Algunos de vosotros encontraréis errores en este punto. No preocuparse. Esto es porque necesitas volver como usuario normal (que no administrador), y las variables de entorno previamente definidas lo están para la cuenta de usuario,y no para root. Sólo tienes que volver a especificarlas como root y volver a lanzar“on more time” :] Todo debe de funcionar ahora.
make install
- Compilar atk-1.9.1
bunzip2 atk-1.9.1.tar.bz2
tar xvf atk-1.9.1.tar
cd atk-1.9.1
./configure
make
sudomake install - Compile gtk+-2.10.12
tar xvzf gtk+-2.10.12.tar.gz
cd gtk+-2.10.12
./configure
make
su(entrar como root)
make install
Atención: Aquí es posible que encontréis otro error, igual que antes,el problema es por las variables de entorno definidas como usuario que también necesitan ser declaradas como root, entonces se puede hacermake installde nuevo, y todo debe de ir bien.
Si gtk+ compila ok, debe de haber unagtk-demoen /usr/local/bin. Ahora puedes probar que gtk+-2.10.6 está funcionando si la ejecutas.
- Compilar glib-2.12.4
- Añadir componentes adicionales útiles — GtkSourceView y GtkExtraGtkSourceView permite visualizar código fuente con coloreado automático así como autonumeración de líneas.
- Primero compila libgnomeprint-2.12.1
bunzip libgnomeprint-2.12.1.tar.bz2
tar xvf libgnomeprint-2.12.1.tar
cd libgnomeprint-2.12.1
./configure
make
sudomake install - Ahora compila gtksourceview-1.6.0
tar xvzf gtksourceview-1.6.0.tar.gz
cd gtksourceview-1.6.0
./configure
make
sudomake install - Compila gtk+extra-2.1.1
tar xvzf gtk+extra-2.1.1.tar.gz
cd gtk+extra-2.1.1
./configure
make
sudomake install
- Primero compila libgnomeprint-2.12.1
- Compila php-5.2.3
- Primero necesitas compilar php5
tar xvzf php-5.2.3.tar.gz
cd php-5.2.3
./configure --prefix=/usr/local/php-5.2.3 --disable-cgi
make
sudomake install - Crear php.ini y añadir la extensión de php_gtk2.so:
echo extension=php_gtk2.so >> /usr/local/php-5.2.3/lib/php.ini
/usr/local/php-5.2.3/bin/php-config --extension-dir | xargs echo 'extension_dir=' >> /usr/local/php-5.2.3/lib/php.ini
- Primero necesitas compilar php5
- Compilar php-gtk-2.0.0
- Construir configure
tar xvzf php-gtk-2.0.0beta.tar.gz
cd php-gtk-2.0.0
./buildconf --with-phpize=/usr/local/php-5.2.3/bin/phpize - Compilar php-gtk2
Atención: No olvides usar “–enable-sourceview –enable-gtkextra” en tu configure para que se incluyan gtksourceview y gtkextra../configure --prefix=/usr/local/php-gtk-2.01 --enable-sourceview --enable-gtkextra --with-php-config=/usr/local/php-5.2.3/bin/php-config
make
sudomake install
- Construir configure
Para llamar más fácilmente a php-gtk, crea un enlace simbólico al binario:
ln -s /usr/local/php-5.2.3/bin/php /usr/bin/php-gtk2
Si tu variable de entorno PATH contiene /usr/bin, puedes ejecutar los scripts PHP usando:
php-gtk2 script.php
Video tutoriales
27 febrero, 2008
Hay una nueva sección de video tutoriales de zenphp en los documentos.
https://forja.rediris.es/docman/?group_id=252
He intentado subir a la Forja el último vídeo de un tutorial de un sitio web 2,0 pero supongo que por que pesa 24MB no me ha salido bien, asi que lo he alojado en mi servidor zenphp.es. En dicho tutorial se explica brevemente cómo crear un componente en AJAX para cargarlo en la web (muy por encima) asi como la parte AJAX de la administración de la web,se edita una sección, se crea una categoría y una obra, se añade una imagen y se coloca en la descripción un vídeo de Youtube.El resultado del tutorial está aquí.
Progreso: zen_andamio (scaffolding) & UML
25 febrero, 2008
Estoy actualizando el diseño de la jerarquía ,diagrama de clases,casos de uso, diagrama de entidad,vistas de componentes, vistas de despliegue y las vistas lógicas de zenphp porque me parece que Umbrella (y no es el tema americano ese del paragüas aguas aguas que tanto éxito tiene por España XD) lo hace estupendamente.
Dejo las capturas y el enlace para descargar el fichero XMI.
| Casos de uso: | Librerías: | Diagrama de clases de zenphp |
![]() |
![]() |
![]() |
Todo free ,por supuesto
La siguiente captura es de como está quedando el Scaffolding de zenphp, llamado zen_andamio. He adoptado la idea de Django de utilizar una lista de las últimas acciones con un iconillo al lado para mostrar lo que vamos haciendo…

La idea es: para llamar al scaffolding, añadimos la variable al modelo de datos “$andamio” y puede ser lanzado desde la ruta sin más que poner el nombre del modelo después de index.php, por ejemplo ,para la captura se llama a index.php/noticias/andamio, las palabras que activan el scaffolding se pueden configurar en /zen.php en la constante ZF_PALABRAS_ANDAMIO, separadas por coma.
Espero que os guste
Comunicando tecnologías : PHP + mySQL + AJAX + PERL + DHTML
23 febrero, 2008
Hoy se suponía que iba a estar recogiendo la aceituna pero ayer salimos para desquitarnos un poco a una fiesta de americanas xD asi que imposible varear nada ,entonces he picado un poco de artículo matinal
por cierto habis visto el Wii Aceitunero?
Cambiando de tema,…esto es un ¡Todo en uno!
Mi reto ha sido hoy sincronizar las tecnologías PHP + mySQL + AJAX + PERL + DHTML en un sólo script.
La idea es:
- Una ventana con 2iframes, en uno se añaden los ficheros , se envían comprobando el estado con un script PERL/CGI su estado que es actualizado en la ventana en su iframe por medio de AJAX y al llegar a completarse dicha transferencia se envia una señal al segundo iframe que inserta una entrada en la BD con el nuevo fichero.
- Todo ésto con comprobaciones de sesiones en PHP gracias a zenphp…y Funciona! pero
benditointernet explorer, con navegadores como este podemos decir que el trabajo de programador web no está bien pagado ni mucho menos…porque me hace reescribir las aplicaciones 2 veces, …para el ie no es lo mismo :
parent.document.getElementById(‘frm_Ficheros’).contentDocument.getElementById(‘frmSubeFicheros’);
que:
window.fileUpload.window.parent.frm_Ficheros.document
lo mejor es que tengo el ie4linux y SI me dice donde está el error, y en windows no…es irónico ¿no?
Primeras pruebas con el compactador de zenphp
21 febrero, 2008
Las primeras pruebas del compactador de HTML,JavaScript y CSS integrado en zenphp ,para su uso en la clase zen_plantilla está siendo todo un éxito, aunque el algoritmo es sencillo,ya que es usado para compactar/comprimir los espacios en blanco y demás caracteres sobrantes, puede reemplazarse dicha llamada por otra función como la de la librería: minify.
Un programa de ejemplo es tan sencillo como lo siguiente:
<?php require_once 'zenphp/clases/clase_zen_compactador.php'; $html = file_get_contents('http://www.elpais.es/'); $tamano_antes = mb_strlen($html, '8bit'); $compactador = new zen_compactador(array( 'mostrar_buffer' => false )); $html = $compactador->destructor($html); $tamano_despues = mb_strlen($html, '8bit'); echo 'Con los espacios en blanco eliminados, el tamaño del fichero HTML se reduce de '. round($tamano_antes/1024, 2). 'KB a '. round($tamano_despues/1024, 2). 'KB,ahorramos '.round((1-($tamano_despues/$tamano_antes))*100, 2). '%<br />-----------------<br /><br />'. $html; ?>
La salida obtenida es:
——————
Con los espacios en blanco eliminados, el tamaño del fichero HTML se reduce de 133.52KB a 111.55KB,ahorramos 16.46%
—————–
podeis comprobarlo ![]()
Si no teneis acceso afuera desde el servidor por problemas de firewall, podeis guardar la web a mano o con PERL en un fichero y luego abrirla con
$html = file_get_contents('p1.html');
No necesitamos nada más que obtener la clase desde el repositorio para hacer la prueba XD
Decisiones importantes
20 febrero, 2008
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!
Perfeccionando los mecanismos de automatización
19 febrero, 2008
La meta del proyecto es generalizar todos los procesos de creación de una web para que sea más fácil empezar un proyecto de un sitio con todo lo que necesitemos gracias al uso de varias herramientas, la más nueva de ellas es el prototipo de generador con PHP/GTK zenphp, que se basa en la creación de proyectos como el de la Asociación Zen de Andalucía o el Proyecto Splatter. He estado realizando algunas modificaciones para tenerlo todo a punto…
Nuevos cambios:
- modelo de datos
- funciones de ficheros
Lo que podemos hacer ahora con los nuevos cambios es, un listado de imágenes como este:
<ul> <li> <a target="_blank" href="/media/galerias/logo2.jpg"> <img width="23" height="23" border="0" src="/media/galerias/logo2.jpg"/> </a> <input type="checkbox" value="logo2.jpg" name="borrar_imgs[]" id="logo2.jpg"/> </li> <li> <a target="_blank" href="/media/galerias/logo3.jpg"> <img width="23" height="23" border="0" src="/media/galerias/logo3.jpg"/> </a> <input type="checkbox" value="logo3.jpg" name="borrar_imgs[]" id="logo3.jpg"/> </li> </ul>
asi se pueden ver/seleccionar para borrar, y ahora un mecanismo para añadirlas:
<div id="imagenes"> <input name="imagenes[]" id="imagen" type="file"><br> </div> <a href="javascript:anadirImagen();"><img src="img/boton_anadir.gif" border="0"></a>
Se añaden dinámicamente con una función JavaScript simple como esta:
<script language="JavaScript" type="text/javascript"> var items = 1; function anadirImagen(){ div=document.getElementById("imagenes"); img=document.getElementById("imagen"); items++; itemnuevo="<b><label for=\"imagen"+items+"\"> Nueva Imagen " + items + "</label>: </b>"; itemnuevo+="<input type=\"file\" id=\"imagen"+items+"\" name=\"imagenes[]"; itemnuevo+="\"><br>"; nodonuevo=document.createElement("span"); nodonuevo.innerHTML=itemnuevo; div.insertBefore(nodonuevo,img); } </script>
y ahora, lo único que queda es la comunicación con PHP (todo el trabajo ha estado en diseñar el formulario y el JS
<?php function guardar_imagenes($actual){ $errores = ""; zen___carga_funciones('zen_ficheros'); if (is_array($_REQUEST['borrar_imgs']))//se marcó alguna imagen para borrar? $actual = array_diff($actual,$_REQUEST['borrar_imgs']); $array = zen_serializar(array_merge($actual,zen_guardarFicheros("imagenes",ZF_DIR_PPAL.'media/galerias/',$errores))); if (!empty($errores)) { echo $errores; return zen_serializar($actual); //dejar los datos como estaban } else { return $array; } } ?>
El parámetro $actual son los datos que tenia, para que no se repitan, entonces podemos obetenerlos de la siguiente forma:
<?php $_REQUEST['listado'] = guardar_imagenes( zen_deserializar($aplicacion->bd->seleccion_unica("listado from galerias where idg=".intval($_REQUEST['idg']))) ); ?>
Eclipse + zenphp : videotutorial sencillo
18 febrero, 2008
Optimización
17 febrero, 2008
En un framework como CakePHP es importante conocer bien los mecanismos de automatización de lenguajes, ésto es más fácil,si,como dicen éste blog, tenemos una buena documentación, sino,el proceso acaba por convertirse en un infierno, al igual que los proyectos muy grandes…
Para comprobar que no está pasando lo que no queremos, y que todo va como se espera ya comenté en pasads posts el uso de profilers, pero claro,además necesitamos saber que las cosas están funcionando en el exterior, y para ello disponemos de varias herramientas:
- Unidades de pruebas (explicación de JUnit para Java de mi profesor de prácticas de Teoría de Algoritmos)
- Analizadores de sintaxis correcta del consorcio W3C
- Tests de velocidad de frameworks JavaScript
- Analizador de velocidad y carga de una web (en Firebug)
- Profiler javascript y otros componentes de análisis de tráfico: ver presentación en GranadaPHP
- Analizador de componentes y cabeceras (Webdeveloper toolbar, YSlow, necesita Firebug)
Sólo quiero añadir un documento que escribí la semana pasada y se encuentra alojado aquí.
Leer más en » Técnicas de optimización de webs
Buen código digo buenas tardes (domingo de resaca? XD)
Primer video-tutorial de zenphp :: Hola mundo!
10 febrero, 2008
En este primer tutorial se empieza buscando zenphp en google y descargando desde la consola el directorio de zenphp desde el servidor SVN de la forja, sólo el directorio trunk.
Después se muestra una aplicación super sencilla tipo “Hola mundo” y se va complicando, usando un tema por defecto, la función index() de la clase zen_html que contiene una aplicación toma la plantilla inicial de media/plantillas/es/base_web.html donde “es” es el idioma por defecto, valga la redundancia.
Si la plantilla no existe,entonces se toma del contenido de zenphp por defecto, se muestra cómo cambiar los parámetros de zen.php fácilmente.
Tiene mucho más, pero para ser el primero me ha parecido bastante.
En youtube no he podido meterlo porque no se ve apenas las letras y la Forja se queda en blanco cuando intento colgar el fichero ,creo que porque pesa 12MB…
Ahí va el enlace del vídeo en formato ogg[7MB]
Dirección de vídeos en la Forja: https://forja.rediris.es/docman/?group_id=252
Actualización: como no se puede reproducir con VLC el vídeo en (R)Windows, lo he codificado con ffmpeg2theora, ya que está grabado con recordMyDesktop y el formato por defecto es ogv, ahora es .ogg





