Category: PHP

PHP Hypertext Pre-processor, el lenguaje de programación para páginas y servicios web más usado.

  • Zenphoto, la galería de fotos minimalista

    Zenphoto, Minimalist GalleryCuando un programa tiene una amplia comunidad detrás de él, por muy básicas que sean sus características siempre encontrarás modificaciones muy interesantes del mismo, tal es el caso de Zenphoto, un galería de imágenes bastante básica. Hace unos días estuve trabajando un poco con el script, específicamente para modificar la plantilla por defecto. Me gusto mucho el hecho de que las plantillas del mismo funcionen en forma similar a las de WordPress, es decir con llamadas a funciones “amigables” que hacen todo el trabajo sucio, el código de la plantilla por defecto luce algo así:

    <?php printAlbumDesc(true); ?>
     <div id="images">
      <?php while (next_image()): ?>
      <div class="image">
      <div class= "imagethumb"><a href= "<?php echo getImageLinkURL(); ?>"   title= "<?php echo getImageTitle(); ?>"><?php printImageThumb(getImageTitle()); ?> </a></div>
      </div>
      <?php endwhile; ?>
    </div>
    

    La plantilla solo consiste en 3 archivos php, donde se puede hacer cualquier cosa; muy a diferencia de viejos scripts como 4Images donde la plantilla consta de una docena de archivos basadas en remplazo de tags claves. Zenphoto no trae soporte de plugins, pero por ser bastante minimalista agregar nuevas funcionalidades no representa mucho trabajo. Algunos agregados muy interesantes son: Captcha para los comentarios, Subalbums, Soporte para reproducción de videos, usar la Librería Highslide JS, Votación de imágenes, Marcas de agua, últimas imágenes, soporte para RSS, soporte EXIF, entre algunos otros agregados. Claro, con cad nueva versión se corre el riesgo de que las modificaciones dejen de funcionar (sin mencionar que hay que volver a aplicarlas…).

    Quieren ver algunos resultados interesantes basados en Zenphoto:

    Quieres probar Zenphoto? descargalo ya, es Software Libre bajo licencia GPLv2. Yo le veo mucho futuro al script, a primera vista no es muy divertido que sea tan simple, pero luego de de navegar un poco en los foros encuentras casi todo lo que necesitas 😉

    Etiquetas: , ,

  • El valor del CMS de BlogsChapines

    Hace unos dias recibí un correo de Koders.com, confirmándome que BlogsChapines BlogsChapines - Costo del CMS(el CMS) fue agregado a su índice de proyectos. Lo he agregado  a koders no solo para que otra gente pueda encontrar código que les sea útil, sino también para obtener algunas estadísticas interesantes del código: total de archivos en el repositorio, lineas de código (sin contar comentarios, claro), lenguajes de programación utilizados, y la más curiosa, el costo del desarrollo del software.

    Según Koders, BlogsChapines cuesta $27,780!! jaaaa ya la hice 😛 solo tengo que encontrar un comprador jejeje. No, ya enserio el valor es tan alto por la pequeña cifra que asigna al costo por mes, tan solo $5000.  Si fuera con los precios de Guatemala, con suerte llegaríamos a los Q3,000/mes, y caro todavía ;).

    Koders debe utilizar el popular método para calcular hombres-mes y de allí costos del desarrollo de software, COCOMO (COnstructive COst MOdel). Cocomo tiene 3 niveles de exactitud para realizar la estimación en base a una serie de coeficientes ya establecidos y tipos de software. En su nivel básico se basa únicamente en la cantidad de miles de líneas de código y el esfuerzo que se requieren para llegar a tal cantidad de código. Hay quienes dicen que Cocomo no es práctico aplicarlo a proyectos de software libre, dado que estos siempre están en desarrollo y no están sujetos a tiempos de entreda rigurosos. Aun así, Cocomo bien sirve para darnos una idea de cuanto podría llegar a constar nuestro programa si fuera uno comercial.

    Por cierto, la NASA tiene un pequeño script para facilitar los cálculos utilizando Cocomo básico… por si quieren jugar un poco 😛

  • Convivio PHPGT

    Ayer celebramos primer convivio geek de este año, el de el Grupo de PHP Guatemala. Quienes hicieron acto de presencia en el tradicional lugar de reuniones, 4 grados norte, fueron: StR (el ticher) y su novia (ups! no recuerdo el nombre….), Sirgt, Edgarin (si, el que salio en la portada de Siglo21), Stuardo Herrera, y claro no podia faltar un representante oficial de la Arroba de Arroz, en esta ocación Luis Penados y Pablo Méndez.

    La verdad la reunión estuvo a todo dar, hasta mejor que las de bloggers!, Hablamos de todo un poco, pasando por filosofías del software libre; peladeras al Windows; hardware, anuncios, series y canciones de hace uuuuu cuando yo tenía menos de 6 años (bola de viejos condenados! jajaa); comparación de los jedi’s y las mujeres (jaja); cagadales que cada quién hizo alguna vez; musica nacional; entre otras tantas locuras que salieron a luz. Fue un todo gusto poder compartir un rato con la banda de phperos y conocerlos en persona… hasta la próxima!

    PD: Solo que esta vez no hay fotos, nadie llevo una camara… Ups!

  • Gráficas Flash desde PHP

    Hace varios días platicando con Oscar en el chat estaba buscando una buGráficas Flash desde phpena librería para generar gráficas desde php, él me recomendó una que genera gráficas completamente Falsh desde PHP. Al principio no muy me parecía usar flash, pero bueno dije demos le su oportunidad… y la verdad es muy buena!. Se llama PHP/SWF Charts, es bastante personalizable tanto en colores como en estilos, por mencionar cuenta con al menos 20 tipos de gráficas, pasando por los tradicionales de Barras, Líneas, De Pie, De Área, Polares y sus respectivas versiones en 3ra Dimensión (si aplica). En los colores me gusta el soporte Alpha, es decir, Transparencias para todos los elementos de la gráfica, muy útil para ir más allá de los simples colores sólidos.

    Pero quizás su mayor potencial son las animaciones que hace al presentar la gráfica, ya saben son esos detalles que endulzan el ojo. Les recomiendo ver la galería tienen muy buenos ejemplos, como estos que he reproducido.

    La configuración es muy sencilla, aún que por tener tantas opciones es mejor ver los ejemplos y ver como hacen cada cosa viendo la referencia, que intentar hacer una maravilla a la primera. Todo se hace mediante arrays y strings, simplemente super sencillo.

    El único defecto: No es Software Libre, de hecho por usarla gratuitamente deben soportar que al hacer click en la gráfica este se convierta en un link hacia el sitio de la librería. Si quieren quitar ese link, les cuesta $45. Pero si lo vemos como YouTube que todo mundo usa y tiene un link al hacer click en el control, me parece soportable.

    La próxima vez que quieran lucirse haciendo gráficas para su sitio web, les recomiendo considerar esta librería, en verdad lo vale.

    Etiquetas de búsqueda: , , ,

  • Ping via XML-RPC

    Desde hace varios dias andaba buscando como es que funciona lo de los pings via RPC-XML, vaya fue algo dificil encontrarlo pero ya se como esta esa onda.

    Hace ya tiempo atras escuche de servicios como weblogs.com donde listan los ultimos blogs actualizados, solo que el metodo de actualizacion es mucho mas automatico ya que es posible hacerlo via XML-RPC. El ping via XML-RPC consite en una llamada a un procedimiento en un serividor remoto, a través del protocolo HTTP. Decide buscar mas hacerca del tema y encontre en el sitio web de la implementacion, la especificacion de como se realiza el proceso del ping en weblogs.com:

    Lo que se debe hacer es una llamada a un procedimiento como este:

    weblogUpdates.ping (weblogname, weblogurl, changesurl=weblogurl, categoryname=”none”) returns struct

    donde:

    • weblogname, es el nombre del blog
    • weblogurl, es la url del blog.
    • changesurl, es la url donde buscar nuevos cambios
    • categoryname, es el nombre de la categoria del blog

    los primeros 2 parametros son requeridos y todos son de tipo cadena. Esta funcion debe devolver 2 parametros, uno indicando si tuvo exito o no y el otro un mensaje descriptivo del error en inglés.

    Este es un ejemplo de la comunicación entre el cliente (quien solicita el ping) y el servidor (quien buscará cambios en el blog):

    POST /RPC2 HTTP/1.0
    User-Agent: Radio UserLand/7.1b7 (WinNT)
    Host: rpc.weblogs.com
    Content-Type: text/xml
    Content-length: 250

    <?xml version=”1.0″?>
    <methodCall>

      <methodName>weblogUpdates.ping</methodName>
      <params>
      <param>
      <value>Scripting News</value>
      </param>
      <param>
      <value>http://www.scripting.com/</value>
      </param>
      </params>
      </methodCall>

    HTTP/1.1 200 OK
    Connection: close
    Content-Length: 333
    Content-Type: text/xml
    Date: Sun, 30 Sep 2001 20:02:30 GMT
    Server: UserLand Frontier/7.0.1-WinNT

    <?xml version=”1.0″?>
    <methodResponse>

      <params>
      <param>
      <value>
      <struct>
      <member>
      <name>flerror</name>
      <value>
      <boolean>0</boolean>
      </value>
      </member>
      <member>
      <name>message</name>
      <value>Thanks for the ping.</value>
      </member>
      </struct>
      </value>
      </param>
      </params>
      </methodResponse>

    Bueno y como se implementa un servidor XML-RPC en PHP? Me puese a buscar una librería escrita en php, para no tener que lidiar con un extensión para PHP que seria una solución mucho mas robusta, seria un poco más complicada de instalar en los servidores de hosting. Me tope con una implementacion del protocolo y en php: phpxmlrpc. Luego de una exporacion rápida, la libreria parecia muy completa y con unos 5 años de desarrollo… pero tambien bastante complicada para hacer algún servidor ping en un corto tiempo.

    Para comprender mejor como se da esta comunicación en tiempo real, me di a la tarea de buscar en WordPress como se realiza esta función. Se que WordPress tiene la opcion de que cada vez que se realiza un nuevo post, este automáticamente envia el ping a las direcciones que se le han especificado. Despues de urgar mucho en el codigo y buscar en vano en codex.wordpress.com, encontre la función en functions.php:

    function weblog_ping($server = '', $path = '') {
    	global $wp_version;
    	include_once (ABSPATH . WPINC . '/class-IXR.php');
    
    // using a timeout of 3 seconds should be enough to cover slow servers
    	$client = new IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path));
    	$client->timeout = 3;
    	$client->useragent .= ' -- WordPress/'.$wp_version;
    
    // when set to true, this outputs debug messages by itself
    	$client->debug = false;
    	$home = trailingslashit( get_option('home') );
    	if ( !$client->query('weblogUpdates.extendedPing', get_settings('blogname'), $home, get_bloginfo('rss2_url') ) ) // then try a normal ping
    		$client->query('weblogUpdates.ping', get_settings('blogname'), $home);
    }

    Ya viendo esta funcion vi que primero intenan llamando a una funcion extendida del ping que donde le especifican la URL del feed ademas del nombre y la url del blog. Si esta funcion no es posible ejecutarla, entonces se llama a la version normal de ping, que solo toma 2 parametros: el nombre del blog y la URL del mismo. Tambien descubrí que incluyen el archivo class-IXR.php, que para sorpresa mia es una libreria que implementa el protocolo XML-RPC pero lo interesante es que contiene 2 clases: una cliente y otra servidor, esta última es la que me interesa. La libreria se llama IXR – The Inutio XML-RPC Library y su sitio oficial es: http://scripts.incutio.com/xmlrpc/.

    En un vistazo rápido a la pagina de la librería encontré lo que estaba buscando, con un pequeño ejemplo se puede ver todo:

    <?php
    
    include('IXR_Library.inc.php');
    
    function sayHello($args) {
        return 'Hello!';
    }
    function addTwoNumbers($args) {
        $number1 = $args[0];
        $number2 = $args[1];
        return $number1 + $number2;
    }
    $server = new IXR_Server(array(
        'demo.sayHello' => 'sayHello',
        'demo.addTwoNumbers' => 'addTwoNumbers'
    ));

    Super sencillo! Bueno este es solo un ejemplo que dan ellos no se si funciona pero tengo grandes esperanzas de que sea algo de copiar & pegar y ya tenga mi servidor de ping XML-RPC funcionando.

    Si este último código funciona, en unos dias estare poniendo este servicio en blogschapines para que le den una probadita….

  • Un Aporte a la Comunidad

    Aprovechando el descanzito por el dia del trabajo, me he puesto a trabajar un pokito en un proyecto opensource. Se trata de un lector de multiples feeds para combinarlas en una sola… si ya se ke la idea no es nada nueva (bloglines, google reader, feedburner….) pero me surgio la idea por que recientemente estube analizando un poko el sitio blogschapines.com, luego de analizar un poko las paginas del sitio, descubrir que utilizaron sux0r que es… no imaginan? un lector de rss! solo ke ademas incluye un filtro bayesiano para clasificar los elementos de los rss y decidir se es interesanto o aburrido, caracteristica que blogschapines.com no utiliza… por cierto.

    En fin regresando al tema, decide probar un poko sux0r y me tope con una limitante ke limita su utilidad. Como esta basado en lla libreria MargpieRSS que no soporta muchas formatos de feeds, en especial RSS 2.0 que ya estan comun en los blogs ke en visitado (gracias a wordpress). Esta limitante hace ke no sea posible agregar muchos de los blogs chapines y que no han activado o no tienen soporte para Atom y RSS 0.9 (ejemplo de ello es mi blog, ke solo soporta RSS 2.0).

    Pues me puese a buscar un pokito una libraria php ke pudiese interpretar rss 2.0 y asi krear mi propio lector de multiples RSS sin tanto esfuerzo. Luego de unos dias de busqueda me decidi por Seymour, el cual ofrece soporte para: Atom 1.0 & 0.3, RSS 2.0, 1.0, 0.92, 0.92u, y 0.91… fantastico! y ademas es muy facil de utilizar. Tome algunas ideas de sux0r y empeze a trabajar en esto y en pokas horas ya obtuve algunos resultados descentes.

    El primer esquema ya lo puse en linea: http://boxp.sourceforge.net/jav/feedcombiner/ pero por las limitaciones de SourceForge no puedo conectar php con sitios externos, por lo ke la actualizacion tiene ke ser manual hacia la base de datos… puro phpMyAdmin en accion jajaaj. Pero en mi servidor local todo funciona de maravilla. Para fines de pruebas he decido incluir los siguentes blogs:

    • Bitacora de Mauricio Romero
    • Blog de mi Guatemala
    • DesdeGuate.com
    • El Loco mundo del Techno 😛
    • Mi blog… claro no podia faltar!
    • Regilete
    • SiRGt’s Blog

    Todavia hay un resto de trabajo por hacer, pero espero que la demo sea ilustrativa. Me falta pulir un poko el codigo y agregar mas caracteristecas como:

    • Ver entradas de un solo blog
    • Ver entradas mas viejas, paginando las entradas
    • generar un RSS combinado, mostrar solo las ultimas 20 entradas…
    • busquedas?? no muy seguro pero seria util
    • algunas otras cosas ke se me ocurran

    Tambien el CSS que he usado es algo rapido, nada final y estoy abierto a propuestas… En fin todavia me falta bastante para tener algo mas formal pero la idea ya va caminado. Si tiene comentarios que espero que asi sea, pueden escribirme a: j_aroche AT users DOT sourceforge DOT net.

    Javier Aroche