Noticias Weblogs Foros Wiki Código
Sponsors:

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

PlanetaCódigo en inglés

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Archivos

Idea: Juanjo Navarro

Diseño: Albin

Picando Código

WP-Syntax 0.9 - Hack aceptado :D

Julio 24th, 2008

A raíz de los posts:
Cómo mostrar código fuente en los comentarios[0]
{WP-Syntax Hackeado} Cómo mostrar código fuente en los comentarios[1]

Estuve trabajando y metiendo mano en WP-Syntax, un plugin para WordPress que permite mostrar coloreado de sintaxis en los posts.

Me enorgullece contarles que a partir de la recién lanzada versión 0.9, se incluyó mi “parche”, “hack” o como quieran llamarlo. Ahora el plugin también permite a los usuarios anónimos usar el plugin en los comentarios mediante los tags <pre>, y mostrar código coloreado.

Pueden descargarlo del sitio de plugins de WordPress:
http://wordpress.org/extend/plugins/wp-syntax/

Para ver ejemplos, pueden comentar en este blog y colocar su código entre los tags:
<pre lang="L"> código </pre>
Donde L es uno de los siguientes lenguajes:

abap, actionscript, actionscript3, ada, apache, applescript, asm, asp, autoit, bash, blitzbasic, bnf, c, c_mac, caddcl, cadlisp, cfdg, cfm, cpp-qt, cpp, csharp, css, d, delphi, diff, div, dos, dot, eiffel, fortran, freebasic, genero, gettext, glsl, gml, groovy, haskell, html4strict, idl, ini, inno, io, java, java5, javascript, kixtart, latex, lisp, lotusformulas, lotusscript, lua, m68k, matlab, mirc, mpasm, mxml, mysql, nsis, objc, ocaml-brief, caml, oobas, oracle8, pascal, per, perl, php-brief, php, plsql, python, qbasic, rails, reg, robots, ruby, sas, scala, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, vb, vbnet, verilog, vhdl, visualfoxpro, winbatch, xml, xpp, z80

== Release Notes ==

**0.9** : Added support for anonymous subscribers to use pre tags in their comments allowing for their own colored code snippets [Fernando Briano];

Fue todo una experiencia esto de modificar un plugin de WordPress, fue más complicado de lo que parece, aunque al final el código que agregué no fue tanto, pero aprendí mucho en el proceso. Próximos releases del plugin podrían incluir soporte para WP shortcodes.

Pueden seguir el avance, y algunas decisiones y porqué en los posts que menciono más arriba. ¡Úsenlo!

» Leer más, comentarios, etc...

Navegapolis

Tesis sobre Extreme Programming

Julio 24th, 2008

extreme programmingNo sólo es un buen documento para aprender Extreme Programming, sino también para aprender a enseñarlo. Se trata de la tesis de Aguntín Antonio Villena, que describe el enfoque adoptado por el Taller de metodologías ágiles  de desarrollo de software de la Universidad de Chile, para la enseñanza de Extreme programming, basada en la aplicación de dichas metodologías en proyectos reales.

Según dice Agustín: "Se comprobó la eficiencia de este modelo pedagógico que promueve el equilibrio entre teoría y práctica, el ambiente humano de equipo y de colaboración con el cliente y las destrezas entrenadas".

Tesis: Un Modelo Empírico de Enseñanza de las Metodologías Ágiles: El caso del curso CC62V - Taller de Metodologías Ágiles de Desarrollo de Software .

Del mismo autor: la presentación de la charla "Introducción Ágil a eXtreme Programming" en web08emprendedor.

 

» Leer más, comentarios, etc...

Picando Código

[Video] Jonathan Coulton - Code Monkey Unplugged

Julio 24th, 2008

¿Se acuerdan de la canción “Code Monkey” de Jonathan Coulton? Ayer navegando por YouTube me encontré con este video de Jonathan Coulton interpretando Code Monkey en vivo. Un temón:

Hay varios videos más de Code Monkey, tanto interpretaciones de su autor, como videos bizarros y divertidos. Un posible cover para hacer con Los Farzantes

» Leer más, comentarios, etc...

Arragonán

¿Flex, GWT, Rails y Grails los frameworks del futuro?

Julio 24th, 2008

Ayer estuve leyendo los posts de Matt Raible sobre la OSCON 2008, recomiendo darles una ojeada a todos.

También ha publicado su propia charla en el evento, sobre frameworks de futuro:

Web Frameworks of the Future: Flex, GWT, Grail, and Rails
view presentation (tags: grails webframeworks rails flex)

Bajo mi punto de vista, osea en España donde en una inmensa mayoría de empresas aún no se plantea dejar el incombustible Struts 1, pienso que sobre Rails y Flex se puede decir que ya están aquí, ya que tienen cierta cuota de mercado; mientras que de GWT y Grails conozco muy pocos casos donde se esté(estemos) utilizando.

Me gustaría conocer de los que os pasáis por aquí, además de qué framework/s web estáis usando, cuáles son los que llaman vuestra atención. Personalmente me interesa seguir aprendiendo más sobre Grails y Rails, pero además también me llaman la atención GAE, CodeIgniter y Wicket para los que espero sacar tiempo, algún día :P .

» Leer más, comentarios, etc...

Picando Código

{WP-Syntax Hackeado} Cómo mostrar código fuente en los comentarios[1]

Julio 24th, 2008

Bueno, ¡ahora sí! Después de unos cuantos comentarios y horas de workarounds, pude hacer funcionar el plugin WP-Syntax para los comentarios. Ante todo muchas gracias a todos los que comentaron en el post anterior, renombrado y actualizado: Como mostrar código fuente en los comentarios[0]

void main(){
     printf("Gracias por la paciencia que tuvieron, y las pruebas varias
     que hicieron. Si no fuera por los que intentaron dejar código en los
    comentarios, nunca me hubiera dado cuenta que andaba mal. Los 
    invito a volver a comentar con código en este post, mediante los 
    tags <code lang="lenguaje">");
}

Ahora paso a contar más o menos las cosas que fui haciendo, probando, y aprendiendo, hasta que logré una solución “linda” y prolija.

El problema: Solamente el usuario admin del blog tenía permitido usar los tags <pre> en los comentarios. ¿Qué hacer al respecto? Mmmh… En verdad no sé en qué orden fui haciendo las cosas, pero hice de todo.

Como estoy desarrollando mi propio plugin para Wordpress (muy lentamente y sin stress en algún rato libre), ya tenía una idea del tema de los “hooks” con filtros y acciones. Resumidamente, esto son acciones y funciones de Wordpress que podemos reemplazar con las nuestras dentro de un plugin. De esta forma, cambiamos algo del comportamiento de Wordpress sin cambiar el “núcleo”, cosa que el cambio se mantenga en una actualización del CMS (y mantener la modularidad).

Así que se me ocurrió que una idea bastante obvia era sobreescribir la función que filtrara los pre de los comentarios, para que permitiera usarlos. Buscando por ahí, me encontré con el archivo kses.php dentro del directorio wp-includes. Este archivo es uno de los responsables de permitir o no ciertos tags y demás, aparte de devolver el valor de la función “allowed_tags();”  que comenté acá:

Ups!
Mis disculpas, creo que ya se de donde viene el problema. Si se fijan a la derecha de la caja de texto donde se escriben los comentarios, muestra las tags permitidas para comentar. Esto no está escrito a mano, sino que llama a una función en PHP allowed_tags().

Lo que tengo que hacer, es buscar la forma de permitirles a los usuarios usar el tag pre…
¡Perdón por el amague!
¡Ya me pongo a solucionar eso!

Lo que no encaré en el momento, fue que ahí estaba el array con todos los tags permitidos, tanto para postear como para comentar. Esto fue lo que me dí cuenta bien al final, pero cuando ya había probado todo lo que se les ocurra. No documento absolutamente todo acá por varias razones. Primero porque no me acuerdo todo lo que hice, segundo porque quedaría muy largo, y tercero, porque mas vale poner lo que aprendí nomás :P

Siguiendo con el tema, estuve por #wordpress en irc.freenode.net, donde me recomendaron que hackeara el plugin para usar el tag <code> en vez de <pre>, ya que es más indicado para código. Ahora, el tag pre tiene la característica que mantiene los espacios, por lo que respeta la indentación. Para aplicar esto a <code> también, simplemente tuve que agregar el siguiente código al css del plugin:

code {white-space: nowrap;}

Eso y un poco de mano en el plugin, y ya tenía el tag pre reemplazado por el tag code. Agradezco mucho la ayuda de StoneCypher, quien me tiró pistas y recomendaciones para llegar al resultado final.

Sin embargo, seguía igual. Si bien el archivo kses.php permite que los usuarios posteen con <code>, no contemplaba <code lang=”">. Para eso, tuve que agregar lang al array que define los tags y sub tags permitidos en dicho archivo (ver el código). Pero esto no era una solución “linda”, debía incluirlo en el código del plugin. Además, fue una de las últimas cosas en las que me dí cuenta.

Aprovecho para comentar, hablando de soluciones “lindas”, que en algún momento comenté de dicho archivo la línea que filtraba el contenido de los comentarios, y si bien anduvo, dejaba totalmente vulnerable al blog. Esto es un buen ejemplo de LO QUE NO HAY QUE HACER. Sobre todo cuando no conocemos bien las repercusiones…

Bueno, leyendo bien ese bendito kses.php, se me prendió la lamparita al leer: Can be override by using CUSTOM_TAGS constant. Listo, ahí picó la solución, agregar code y lang a ese valor desde el plugin. ¡Así terminó andando!

Ya entré en contacto con Ryan McGeary, el desarrollador de WP-Syntax, y hablando de todo este tema me comentó lo siguiente:

Wordpress tiene muchas restricciones innecesarias e inevitables en su publicación de contenidos. WP intenta hacer lo “correcto” y prevenir a los que comentan de agregar formatos especiales y es complicado el workaround.

Además, tenía pensado actualizar un poco el plugin cuando tuviera tiempo. Ya le envié un mail con los cambios que le hice. El plugin está publicado bajo GPL, pero quiero saber si quiere incluir los cambios en su plugin, o si hago un fork para publicarlos. Así que en unos días estará disponible o bien una nueva version de WP-Syntax, o un nuevo fork :D, obviamente el código disponible también.

Me está pasando lo mismo con WordPress que me pasó en algún momento con GNU/Linux. Por momentos me frustro porque no puedo lograr lo que quiero que haga, pero al final me doy cuenta que la culpa no es de WordPress, sino mía por no conocer la API lo suficiente… ¡WordPress FTW! No es lo mismo una vez que se empieza a meter mano en el código.

» Leer más, comentarios, etc...

Variable not found

FakeNameGenerator, un generador de identidades online

Julio 23rd, 2008

IdentidadY es que va a ser verdad eso de que en internet hay de todo. No sé que estaba buscando cuando me he topado con FakeNameGenerator, una web en la que indicando el sexo, la nacionalidad y el idioma a utilizar nos genera una ficha personal completa, con datos aleatorios, como la siguiente:


Benicio Romero Santacruz
Padre Caro, 61
13592 Mestanza

Email Address: BenicioRomeroSantacruz@fontdrift.com
This is a real email address. Click here to use it!

Website: Demimba.com
It looks like Demimba.com is available! Click here to register it!

Birthday: June 17, 1980

Visa: 4929 7908 0245 3619
Expires: 6/2011

UPS Tracking Number: 1Z F00 647 14 8092 598 8

Como podéis ver, incluye un nombre, la dirección una cuenta de correo (tipo Mailinator) que podéis usar para recibir mensajes simplemente pulsando el enlace mostrado, fecha de nacimiento, datos de una tarjeta VISA (no válidos, claro), y un código de seguimiento de UPS.

Puedes generar tu identidad española siguiendo este enlace.

En fin, que no es algo especialmente útil, pero curioso lo es un rato...

Publicado en: http://www.variablenotfound.com/.

» Leer más, comentarios, etc...

Cerebro en la Sombra

Diario de abordo - Primera parte

Julio 23rd, 2008

Por fin han comenzado las vacaciones y no podían haberlo hecho mejor… o peor.

El viernes a la una del mediodía me despedí de mis compañeros de la oficina para comenzar el viaje. Después de los últimos recados, a las dos y media estaba en la carretera. Un plan perfecto para llegar y cenar sobre las 11 de la noche con algunos colegas con los que había quedado. Un plan perfecto si no fuera porque a eso de las 5 y media pinché una rueda en el acceso a la M50 desde la A3. Os podéis imaginar la aventura de cambiar una rueda a 37º. Por cierto, para incultos como yo, las tuercas de las ruedas tienen un solo sentido, no se ponen de cualquier forma, la parte cóncava, contra todo pronóstico, NO va hacia afuera, va hacia adentro para que hagan mejor presión entre la rueda y el disco. Mala suerte que no me diese cuenta antes. Ya decía yo que era imposible apretar con la llave :P . Otra cosa, revisad periódicamente el equilibrado de la rueda de repuesto o os encontraréis como yo, temblores durante 600km. Eso sí, pasando de 130 disminuía el ruído ;) .

Al final a eso de las 00:30 estaba ya con los amigos (Mora, Ramiro, Antonio y Javi). Un café, unas copas, y a contarnos la vida (y los horóscopos :P ). Por cierto, valencianos, gintonic de Bombay Saphire a 4,10 euros en terraza ;) . Buen comiendo de vacaciones, sin duda. Las fotos no son muy buenas, pero me olvidé la cámara, así que hubo que tirar de móvil.

19072008235.jpgCon Ramiro

De boda en Nigrán (Vigo)

Al día siguiente tocaba boda. Con un poco de retraso llegamos a la iglesia, sudamos al sol y nos fuimos hacia Nigrán (Vigo), a la playa, donde era el convite.

 Boda de MarcosBoda de Marcos

Vaya desde aquí nuestro homenaje a Marcos el día de su boda.

La comida, espectacular: bogavante en 2 salsas (repeticiones infinitas, nosotros 4!!), cigalas, centolla, buey, langostinos, gambas a la plancha, vieiras

Boda de MarcosBoda de MarcosBoda de Marcos

Por la noche, nosotros, los novios y algunas amigas más nos fuimos de copas por Vigo, hacía mucho que no iba. Ha cambiado bastante, sin duda el ambiente se ha vuelto mucho más pijo. Por cierto, valencianos, gintonic de Bombay Saphire 4 euros en un sitio decente, 7 euros en un pub tipo Las Ánimas ;) .

Como soy un poco payaso, no pude negarme a… hacer el payaso. Podéis encontrarme aquí, sección de vídeos, yo os lo pongo para que no tengáis que buscarme. Lo que no se ve en el vídeo es el montaje que llevaban, la limousine, el tío con un monitor en la cabeza, las dos guapas azafatas… Y nosotros pensando que por hacer el payaso ya nos regalaban entradas…

Más tarde, a mover el esqueleto a algún pub de la zona.

20072008242.jpg

Acabamos sobre las cuatro y media de camino a Pontevedra y con control de alcoholemia incluido. En cuanto sus acompañantes traseros decidan ponerse el cinturón de seguridad puede continuar :) .

Día en familia

El domingo tocaba algo más relajado, comida familiar, sobrinas y playa con ellas. Impresionante el abrazo de mi niña bonita Nerea :) . Aún se me cae la baba. Y no digamos ver a la pequeña Aroa andando. Mirad que fotos con el tío.

Con mi sobrina AroaAroa
NereaCon mi sobrina Nerea

Comida en la playa

El lunes, sin perder tiempo, a arreglar la rueda. Mal empezamos. El neumático estaba destrozado, así que tocó cambiar las dos ruedas traseras, como me sobra el dinero… :) . Así que, para relajarme un poco, directo a la playa, comida en el chiringuito, churrasco, calamares, pimientos de padrón… y para finalizar, chupito de licor café ;) . Y toda la tarde en la playa.

CalamaresPimientos de Padrón
Churrasco y criollos
Con el churrasco

De noche unas copas por Pontevedra. Recordad Valencianos, gintonics de Bombay Saphire a 4 euros.

22072008244.jpg

Dos playas en un día

El martes hubo playa por partida doble. Como se hacían las 12 del mediodía y nadie me llamaba, decidí ir a darme un baño mañanero a Aguete, mi playa habitual, en Marín, en el lado sur de la ría de Pontevedra, y de paso tomarme un aperitivo de empanada y tortilla :) .

 Playa de Aguete, MArinPlaya de Aguete, Marin
Playa de Aguete, MarinPlaya de Aguete, Marin

Sin embargo, justo cuando iba a subirme al bar para el aperitivo, me suena el móvil, que te vengas a comer, que te esperamos. ¿Y quien soy yo para decir que no a tamaña proposición? Así que, coche, y a A Pregueira, en el lado norte de la ría. Pulpo, sardinas, pimientos de padrón… y chupito de licor café.

 22072008245.jpgSardiñadaPulpo

Ya por la tarde cuando Marcos y Nines se habían ido, me quedé un ratito yo sólo en el chiringuito tomándome algo y viendo el atardecer. Mejor os dejo unas fotos para que lo disfrutéis vosotros mismos. Atardecer en A Pregueira con A Illa de Ons en primer término. Sin duda nada que envidiar a Ibiza y su Café del Mar (guiño personal a alguienMarcos para pasar un día en Ons recordando mis años mozos. en contreto).

 Playa A PregueiraPlaya A Pregueira
Playa A PregueiraPlaya A Pregueira

A ver sin convenzo a Marcos para que vayamos un día de estos a Ons.

Aperitivo en Combarro

Hoy amaneció nublado así que se nos fastidió la playa, pero no todo está perdido. Ya que mi sobrina no quiso quedarse conmigo pensé en pasar la mañana en Combarro y tomarme un aperitivo. Justo cuando me iba me llamó Marcos así que lo recogí y allí nos fuimos.

Nunca me cansaré de hablar de Combarro, además, contra todo pronóstico, había poca gente y se podía andar y pasear sin aglomeraciones.  La marea estaba bajísima con lo que se pueden contemplar unas postales preciosas. Fijáos en las mariscadoras y el camión que recoge algas.

CombarroCombarro
Combarro
Combarro

 

Esta chalana es digna de Piratas del Caribe.


Combarro

Más imágenes de Combarro. Comentábamos que es un pueblo impresionante pero que al haber crecido allí no lo valoramos como se debiera, si llega a estar en cualquier otro sitio y vas a visitarlo alucinarías con él. Por cierto, cada vez me gustan menos las escaleras de madera de acceso, parece que estén en obras.

CombarroCombarro
Combarro
Combarro

Al final, el aperitivo. Mejor que lo veáis :) .

CombarroCombarro

 

Seguiremos informando…

» Leer más, comentarios, etc...

Picando Código

Cómo mostrar código fuente en los comentarios

Julio 23rd, 2008

void postear(){
     printf("

Lectores, comentadores, visitantes en general: ¡Pueden escribir código en los comentarios!
Los que visitan seguido el blog habrán notado un nuevo recuadro al lado de la caja de comentarios. Esta indica cómo escribir código sin que el querido WordPress transforme sus signos de < y > y su indentación en papas fritas.

En varios posts hemos tenido el problema de querer mostrar código fuente, y no lograr los resultados que esperábamos. Destaco los posts sobre sintaxis, y más recientemente el post de AWK, o el de Wordpress y caption, donde pasó lo mismo (malditos <>).

Como estoy usando el plugin WP-Syntax para mostrar código fuente, pueden hacer uso de él a la hora de comentar. Su código respetará la indentación, y se mostrará coloreado acorde al lenguaje que usen. En el recuadro del cual les hablaba pueden encontrar la forma de uso (no me hagan repetir :P ).

Los lenguajes reconocidos hasta el momento se listan a continuación. A su vez, son los nombres que hay que poner para comentar en el tag “pre”: <pre lang=”L“>código</pre> donde L es uno de los siguientes:

abap, actionscript, actionscript3, ada, apache, applescript, asm, asp, autoit, bash, blitzbasic, bnf, c, c_mac, caddcl, cadlisp, cfdg, cfm, cpp-qt, cpp, csharp, css, d, delphi, diff, div, dos, dot, eiffel, fortran, freebasic, genero, gettext, glsl, gml, groovy, haskell, html4strict, idl, ini, inno, io, java, java5, javascript, kixtart, latex, lisp, lotusformulas, lotusscript, lua, m68k, matlab, mirc, mpasm, mxml, mysql, nsis, objc, ocaml-brief, caml, oobas, oracle8, pascal, per, perl, php-brief, php, plsql, python, qbasic, rails, reg, robots, ruby, sas, scala, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, vb, vbnet, verilog, vhdl, visualfoxpro, winbatch, xml, xpp, z80

Espero que les guste, y cualquier sugerencia, crítica u opinión, me la hacen llegar. Gracias por leer!

");
}

» Leer más, comentarios, etc...

Syntax Error

PHP: Comprimir la salida del servidor para ahorrar ancho de banda

Julio 23rd, 2008

zlibEn un proyecto en el que estoy trabajando actualmente se requiere generar un XML con datos tratados, para que un código Javascript monte un grid a modo de Excel online.

El problema viene cuando la cantidad de registros se vuelve grande… En unas pruebas con registros de producción nos encontramos que el grid se demoraba mucho en mostrarse… Pusimos algunas alertas y llegamos a la conclusión que de 20 segundos que tardaba en montarse el grid, sólo 5 correspondían a la generación del XML y el resto era tráfico de red y proceso javascript.

Pero cuánto pesa el XML? Un mega y medio de XML? Y cómo lo hacemos más pequeño para generar menos tráfico y ganar tiempo? Comprimiendo el XML de salida…

¿De qué se trata?

Los datos que se encargan de montar una página web son básicamente imágenes y diferentes tipos de datos en texto plano. Las imágenes habitualmente ya vienen comprimidas (JPG, PNG, GIF,…), pero el texto plano (HTML, XML, CSS, …) es altamente comprimible… Simplemente es código ASCII que se repite y repite en el mismo archivo. Si enviamos el texto plano comprimido estamos enviando realmente menos datos por la red, consiguiendo que la totalidad de los datos llegue antes al navegador, quien descomprime los datos y obtiene el código HTML, XML, CSS o lo que sea como si se hubiese enviado así directamente.

¿Y los navegadors lo soportan?

Casi la totalidad de navegadores actuales soportan la compressión de datos HTTP. De hecho, desde 1998 los navegadores han ido soportando el protocolo HTTP 1.1, que esencialmente indica que el navegador soporta “content encoding”.

Internet Explorer soporta compresión HTTP desde la versión 4 (teniendo que activar HTTP 1.1 en sus propiedades) aunque las versiones para Mac 4.5/5 no lo soportan. Netscape lo soporta desde la versión 4 aunque da bastantes fallos. Su versión 4.5 empieza a ser más interesante y la 6 funciona ya plenamente. Opera soporta la compresión desde su versión 5. Firefox desde su versión 1.

Para asegurarte que tu navegador soporta compresión puedes usar el test HTTP trace. Si aparece una línea dentro del cuadro “HTTP request received from browser” con un texto similar al siguiente es que sí que lo soporta:

ACCEPT_ENCODING: gzip,deflate

¿Cómo implementarlo?

Se puede hacer de 3 formas:

  1. Activar a nivel TOTAL del ámbito del php del servidor (editar php.ini)
  2. Activar a nivel LOCAL para un sólo site de todo el ámbito del PHP (.htaccess)
  3. Activar a nivel de SCRIPT (un sólo archivo.php)

1.- TOTAL

  1. Editar el php.ini de apache

    $ vim /etc/php5/apache2/php.ini

  2. Cambiar el valor de los parámetros siguientes:

    zlib.output_compression = On
    zlib.output_compression_level = 7

  3. Guardar y salir
  4. Reiniciar apache

    $ /etc/init.d/apache2 restart

2.- LOCAL

  1. Editar o crear el archivo .htaccess en el directorio del sitio a aplicar

    $ vim /var/www/misitio/.htaccess

  2. Insertar las siguientes líneas:

    php_flag zlib.output_compression on
    php_value zlib.output_compression_level 7

  3. Guardar y salir (no es necesario reiniciar)

3.- SCRIPT
Hay dos formas de hacerlo:

  1. Insertar al inicio del script la siguiente línea

    ini_set(’zlib.output_compression’, ‘On’);

    NOTA: Según el comentario en php.net esta forma no funciona.
    Personalmente yo no lo he probado.

  2. Insertar al inicio del script la siguiente línea

    ob_start(”ob_gzhandler”);

    NOTA: Sin haber activado el zlib desde php.ini, al ejecutar ésta línea me causaba un error.

Niveles de compresión:

Van de 0 a 9 indicando de menos a más compresión respectivamente. A menos compresión más rápido es y menos CPU consume, pero menos comprime. A más compresión se tarda más en comprimir y consume más CPU, pero la compresión es mejor. Establecer el valor a -1 hace que se deje a elección del propio PHP el nivel de compresión (generalmente 6).

¿Cómo saber si está funcionando?

Se pueden usar herramientas de testeo como HTTP Analysis Tools. Para este caso, probar la primera herramienta “Compression Check

Experiencia personal

En el proyecto que he descrito, el XML medio pesaba sobre 1,5 MB. Al comprimir la salida se queda en unos 35 KB, una muy buena mejora. La solución que tomé fué aplicar la compresión a todo el site setando los parámetros directamente en el php.ini. La generación del XML sigue tardando lo mismo pero el tiempo total para tener el XML listo en el navegador descendió de 25 segundos a unos 10 segundos… una muy buena mejora ;)

Luego, quise hacer lo mismo en este blog. Como está alojado en un servidor compartido no tengo acceso al php.ini, así que probé de hacer el setado por .htaccess, pero obtuve siempre un error 500. La única forma de hacerlo funcionar fué editar el archivo index.php y colocar en la primera línea el ob_start(”ob_gzhandler”). La compresión funcionó y los registros mejoraron, pero la experiencia del usuario empeora debido a que el el navegador no renderiza hasta que no le han llegado todos los datos… y cómo hay algunos scripts de publicidad que se llaman y demoran todo el conjunto, la web se queda unos segundos (que se hacen eternos) en blanco. Así que lo quité dejándolo sin comprimir. Así, almenos, el usuario ve que se le va renderizando la web sobre la marcha y no tiene la sensación de que el sitio está colgado.

Más información:

» Leer más, comentarios, etc...

Picando Código

[Noticias Debian] ¡Se acerca Debian Lenny!

Julio 23rd, 2008

Debian Lenny 5.0

Debian Powered

De forma bastante original, y con poco tiempo, se anunció en la lista de desarrollo de debian el congelamiento de Debian Lenny para la próxima semana:

                    ______________________
                   < We freeze next week! >
                    ----------------------
                            \   ^__^
                             \  (oo)\_______
                                (__)\       )\/\
                                    ||----w |
                                    ||     ||

A partir de la semana próxima, habrá un congelamiento, en el hecho que no se pasarán más paquetes desde Sid (unstable) a Lenny (testing), para concentrarse en resolver los bugs. Todo esto, ¡esperando a Debian Lenny 5.0 para setiembre de 2008!

Si bien históricamente han habido atrasos, hay que tener confianza en los desarrolladores. Para los usuarios de Debian en general, no implica más que la celebración de una nueva versión, porque la mayoría ya usan Lenny o Sid como repositorios principales.

Algo realmente admirable de los desarrolladores de Debian son sus BSP - Bug Squashing Parties (fiestas de “reventar”[¿?] bugs). Se trata de reuniones donde se dedican exclusivamente a corregir bugs. Al haber 360 bugs de más que afectan a Lenny, se están organizando maratones de BSP’s.

Versionado de lanzamientos

También en la lista de desarrollo, hubo una propuesta para cambiar la forma en que Debian versiona sus lanzamientos. Martin Krafft propone aumentar el primer número con cada lanzamiento “punto” / r release, y el segundo con cada re lanzamiento que incluya paquetes arreglados, mientras que lanzamientos nuevos de la rama estable con nuevas características (se viene Etch y medio), deberían tener un 5 como segundo número para mostrar la “media actualización”.

Lars Wirzenius recordó que Debian introdujo el esquema actual de versionado porque los vendedores de CD temían que las cajas viejas quedaran en los estantes tras un re lanzamiento. (Sus discos X.Y se verían desactualizados si salía la versión X.Y+1, aunque se pudieran actualizar perfectamente por la red).Otros prefirieron un esquema de versionado clásico con dos puntos, donde el primer número fuera aumentando con cada lanzamiento grande, el tercero con lanzamientos de bugs corregidos y el segundo con lanzamientos que agregara nuevas características.

Martin Kraff está llevando a cabo una encuesta en
http://doodle.ch/participation.html?pollId=8zauai3nqges2ur8
Donde por el momento viene ganando “a favor, así que existe una posibilidad de que el versionado cambie a partir de Lenny.

         (__)
         (oo)
   /------\/
  / |    ||
 *  /\---/\
    ~~   ~~
...."Have you mooed today?"...

» Leer más, comentarios, etc...

Pensamientos ágiles

El centro de datos y el baño de las chicas

Julio 23rd, 2008



From: ---- --------
Sent: Monday, May 5, 2008 4:37 PM
To: Everyone
Subject: Server Room Access

Hi all.

As you all are aware, we have new tenants that have moved into
the 2nd floor suites. The access to the server room is now via
the women’s bathroom.

There will be a sign on the woman’s door that can be changed
from OPEN to CLOSED and vice versa.

Should you need to enter the server room, please change the sign
to CLOSED. Once you are done, please change it back to OPEN.

Once you enter the bathroom, you will be able to access the
server room via the handicapped stall. Please close the stall
door prior to entry, just in case someone doesn’t see that the
bathroom is closed.

I know this isn’t ideal, but if we adhere to this protocol, I
don’t think anyone will be disrupted.

Thanks! Let me know if you have any questions.


Via Pingdom y DailyWTF.

» Leer más, comentarios, etc...

PHP Senior

Se viene la segunda edición de PHP&Beers (Argentina)

Julio 23rd, 2008


Nuevamente, segunda edición, organiza el colega argentino Pablo Rigazzi, invitación desde ZonaPHP. También es importante destacar que estará presente "cvander", el famoso creador de Maestros del Web y Foros del Web. También voy a intentar estar presente, pero no voy a firmar autógrafos en esta oportunidad (tal vez lleve alguna remera para la venta).

El lugar del encuentro:

Cervecería Antares
Armenia 1447, Palermo
Jueves 24 de Julio, a las 19:30 horas
.

Una invitación a conocernos y poder tratar en un ambiente descontracturado los temas que nos interesan, por ejemplo: por qué ya no es "cool" programar estructurado, cómo desapareció PHP4 y por qué Zend Framework es el "framework oficial" de PHP.

Estás invitado, no faltes.

» Leer más, comentarios, etc...

Picando Código

El regreso de Los Farzantes

Julio 23rd, 2008

Cadáveres de Cerveza

Cadáveres de Cerveza

En el día de ayer, Lunes 21 de Julio de 2008, se dio un evento histórico… Volvieron a reunirse los Farzantes! ¿Qué es “Los Farzantes”? Un trío de amigos músicos (no, en serio, resalto las comillas) que se juntaban a hacer sonar sus instrumentos intentando seguir una línea en común.

El 31 de diciembre de 2005, me junté con Leo Farzante y Maxi Farzante, y formamos este proyecto que se venía anunciando y gestando desde hacía tiempo. Lo llamamos Farzantes, ya que el adjetivo se ajusta muy bien a nuestras personalidades, y decimos que tocamos “Drunk Rock” (nunca faltaba el alcohol en los ensayos).

Nuestra primer y única presentación en vivo fue en el cumpleaños de Maxi, bajista y vocalista, el 20 de febrero de 2006. Ya entrado el 2006, las ocupaciones y responsabilidades nos llevaron a dejar de lado el proyecto.

Ayer lunes, después de comentarlo un poco y coordinar un día, volvimos a tocar juntos. Nos juntamos en la sala de ensayo/estudio de Maxi Squat, quien además me prestó su guitarra. Repasamos los 5 temas propios que solíamos hacer, mas unos cuantos covers.

Leo Farzante en la batería, estaba bastante oxidado. No tocaba la batería desde nuestro último ensayo (actualmente toca el bajo en No Me Importa). Yo igual, las 3 horas que estuvimos “chiveando” me dejaron ardiendo las yemas de los dedos…  (además que no me acordaba la mitad de los temas). El que andaba mejor era Maxi Farzante, quien además se llevó todos los temas y los plagió con Electroshock :D
Como invitado, tocó con nosotros Chiki Electroshock.

Dejo algunas fotos de lo que fue “el regreso”:

Leo Farzante

Leo Farzante

Yo Farzante

Yo Farzante

Maxi Farzante

Maxi Farzante

Chiki Electroshock

Chiki Electroshock

» Leer más, comentarios, etc...

Picando Código

AWK: Pasar texto a minúsculas/mayúsculas

Julio 22nd, 2008

Lo bueno de aprender AWK es que al tenerlo fresco, se convierte en una herramienta de uso diario en el shell. Últimamente lo uso mucho, por ejemplo hoy, lo usé en el siguiente caso que les voy a plantear. Necesitaba pasar un texto a minúsculas, que era algo que no sabía cómo hacer, hasta que lo necesité. En verdad tenía un archivo de texto (items.txt) lleno de datos con el siguiente formato:

* TITULO DEL ITEM - Descripción del ítem.

Lo que necesitaba era obtener una lista así:
titulo del item 1, titulo del item 2, ... , titulo del item n.
Y obviamente, lo primero que se me ocurrió fue usar AWK.

<conceptosAWK>
AWK es un lenguaje de programación interpretado orientado a datos. Recibe texto como entrada, y trabaja con eso. Ejecuta una acción por cada línea de texto, y a su vez, cada dato “separado” en esa linea de texto es un registro al que se accede con $1, $2, … , $n.
El separador de registros es importante. Por defecto toma el espacio como separador.
</conceptosAWK>

En este archivo en particular, opté empezar por separar el título de su descripción. Primero proceso el archivo para eliminar lo que hay después del guión. Para eso especifico que el separador de campo sea el guión “-”:

awk 'BEGIN{FS="-"}{print $1}' items.txt > resultado.txt

Lo que estoy haciendo acá, es especificando que separe los registros por “-”. Entonces $1 va a ser “* TITULO DEL ITEM” y $2 va a ser “Descripción del ítem.“. Le paso como parámetro items.txt, y voy guardando el resultado en resultado.txt. (Redirijo la salida del awk con “>” a un archivo de texto resultado.txt).

El archivo resultado.txt me queda con el formato: “* TITULO DEL ITEM” para cada ítem. Ahora lo paso a minúsculas, y de paso saco el asterisco que no lo necesito:

awk 'BEGIN{FS="*"}{print tolower($2", ")}' $2

Me quedó algo así:
titulo del item 1 , titulo del item 2 , … , titulo del item n ,
Ahora, lo que tengo que hacer sacar el espacio antes de las comas, para eso puedo usar SED:

sed s/\ ,/,/

Reemplazo los ” ,” con “,” y listo. El archivo quedó:
titulo del item 1 , titulo del item 2 , … , titulo del item n ,

Me hice un script, que recibe como parámetros dos archivos. El primer parámetro $1, es el archivo que hay que editar, y el segundo parámetro $2 va a ser el resultado:

#!/bin/bash
awk 'BEGIN{FS="-"}{print $1}' $1 > $2
echo `awk 'BEGIN{FS="*"}{print tolower($2", ")}' $2` > $2
echo `sed s/\ ,/,/ $2` > $2

Lo novedoso, por lo menos para mí, fue el uso de la función “tolower” en AWK. Así que para pasar un texto a minúsculas o a mayúsculas de forma bien sencilla, simplemente hay que usar esta función. Idem para pasar a mayúsculas: toupper. Los scripts quedarían algo así:

Para pasar todo el texto a minúsculas:

tolower.sh
#!/bin/bash
echo $@ | awk '{print tolower($0)}'
#Este script pasa a minúsculas todos los parámetros que reciba.

Para pasar todo el texto a mayúsculas:

toupper.sh
#!/bin/bash
echo $@ | awk '{print toupper($0)}'
#Este script pasa a mayúsculas todos los parámetros que reciba.

O directamente, si se acuerdan cómo usar AWK, lo más rápido es hacerlo derecho desde consola.

Y tá, eso es lo que estuve haciendo en un rato. Como estuvo divertido, lo documenté por acá :P
En una de esas a alguien le sirve.

» Leer más, comentarios, etc...

Picando Código

Git: Sistema de control de versiones distribuido

Julio 22nd, 2008

Git LogoAyer, por primera vez, tuve que usar Git, el sistema de control de versiones distribuido. Como he mencionado varias veces, el único sistema de control de versiones que he usado hasta ahora ha sido Subversion. Aunque en el blog ya he comentado también sobre Bazaar, todavía no he tenido oportunidad de probarlo. Teniendo una idea (muy vaga por cierto) de qué es Git, y cómo funciona, me resultó bastante fácil comprenderlo. Lo fuí usando/aprendiendo a la carrera, la mejor forma de aprender…

¿Qué es Git?

Git es un sistema de control de versiones diseñado para manejar proyectos muy grandes con velocidad y eficiencia, pero igual de apropiado para repositorios pequeños; es especialmente popular con la comunidad open source, sirviendo como plataforma de desarrollo para proyectos como el Kernel Linux, Ruby on Rails, WINE o X.org.

Git cae en la categoría de herramientas de manejo de código fuente distribuído, similar por ejemplo a Mercurial o Bazaar. Cada directorio de trabajo de Git es un repositorio completo con historial y capacidades totales de tracking de revisiones, independiente de acceso de red o un servidor central. Aún así, Git es extremadamente rápido y eficiente con el espacio.

Git es un proyecto Open Source cubierto por la GNU General Public License v2. Originalmente escrito por Linus Torvalds y mantenido por Junio C Hamano.

Git Cheat Sheet

Git Cheat Sheet

Instalarlo no tiene muchas complicaciones. En mi caso con Debian:
apt-get install git-core
Y ya tengo las herramientas para obtener código fuente y subirlo.

Hay una CheatSheet (hoja de referencia, chuleta, trensito) de Git en su wiki, que me resultó extremadamente útil a la hora de obtener el código fuente de un proyecto.

En su sitio web pueden encontrar los “Crash Courses“, algo así como cursos para comenzar a usar Git rápidamente. Estos son:

En mi caso, aprendí todo lo que sé de control de versiones con Version Control with Subversion por lo que Git for SVN users debe ser un buen lugar para empezar.

Además de empezar a familiarizarme con Git, conocí github, un sitio para hostear código fuente con Git. Inscribirse toma unos segundos, y ya podemos empezar a usarlo, y recorrer otros repos.

» Leer más, comentarios, etc...

programania

Closures en PHP 5.3

Julio 22nd, 2008

Me quedo sorprendido al enterarme de que, probablemente, las “closures” serán implementadas en PHP 5.3.

Las closures son la posibilidad de pasar como argumento un trozo de código. Es una de las principales ventajas de Ruby frente a PHP y amplía enormemente las posibilidades de reutilización de código…

Parece que la publicación de PHP 5.3 va a ser un acontecimiento casi tan importante como la publicación de PHP 5.0…

Actualización:

Venkman me corrije en los comentarios (mejorando tanto la definición chorrifláutica que había puesto de closures, que lo voy a poner en el propio post):

Una “closure” es una construcción que existe en tiempo de ejecución que vincula una función con un entorno (scope) diferente -y ya cerrado- al entorno en el que se ejecuta.

Es decir, es la construcción que abarca una función (que puede ser anónima o no serlo; es decir, puede ser un “trozo de código” o no) y un entorno de resolución (scope) que está accesible para esa función pero no para el resto porque ya está “cerrado”.

» Leer más, comentarios, etc...

Navegapolis

Work for hire o apropiación de talento

Julio 21st, 2008

autorAlgunas leyes amputan la mano del ladrón, ejecutan al asesino... y es que el Derecho es tan relativo como las costrumbres y los valores culturales que lo engendran; por eso lo que para algunos es ley, para otros son barbaridades.

En extremos como estos los contrastes resaltan con estridencia, pero hay diferencias culturales quizá menos llamativas, pero posiblemente más sabrosas, en casos como el que apunta Andy Ramos en su artículo: Barbie, Bratz y el "work for hire", expresión americana, que yo, hijo de la cultura continental, llamaría "apropiación de talento";

Porque eso de que el autor no sea quien hace la obra, sino quien la encarga, aquí no está muy bien visto, de hecho no llamamos autores, sino farsantes a quienes firman las páginas que les escriben "negros" a sueldo.
Por eso que las empresas sean las "autoras" de los trabajos de sus empleados; que lo que nosotros consideramos derechos morales del autor, para el derecho anglosajón, simplemente no existan, refleja diferencias interesantes en la forma de entender los derechos de las personas y de las organizaciones.

» Leer más, comentarios, etc...

Picando Código

Arora Web Browser - navegador basado en WebKit

Julio 21st, 2008

Hace unos meses probé el navegador web Arora, cuando se anunció la salida del proyecto. Probé la versión 0.1, en Windows y Debian. Ahora estoy usando la versión 0.2 en Debian. Lo primero que me llamó la atención fue que estuviera hecho con las bibliotecas Qt y WebKit. Realmente no me gusta mucho la apariencia de GTK, o por lo menos prefiero Qt. En ambos casos, se adaptó perfectamente a la apariencia nativa de cada sistema.

Historia y desarrollo:

La descripción de su sitio web en Google Code dice más o menos así:

Arora Web BrowserArora es un navegador web simple y multi plataforma. Actualmente Arora es un navegador muy básico cuyas características incluyen “Historial” y “Bookmarks”. No tiene soporte para plugins de Netscape, así que no hay soporte para flash hasta Qt 4.5. Pero es pequeño, menos de 10.000 líneas de código, muy rápido, liviano, y divertido de hackear. Arora y QtWebKit están desarrollados para ser multi plataforma usando la biblioteca Qt. Originalmente se creó como demo para Qt para ayudar a testear el componente QtWebKit y encontrar problemas y bugs del API antes del lanzamiento. Se puede encontrar una versión más vieja todavía en el código fuente de Qt en el directorio demo/browser. Arora funciona en Linux, OS X, Windows y Linux embebido usando Qt Embedded.

Su desarrollador es Benjamin C Meyer (a.k.a. “icefox”), desarrollador de Trolltech, quien tras programar el demo, hizo el fork y lo nombró “Arora”. La meta principal del proyecto es enfocarse en crear un navegador open source sobre webkit, capaz de ser usado como navegador diario, con las características típicas: Historial, bookmarks, pestañas, y extensiones.

Hasta el momento, han logrado 3 de las 4 metas iniciales. Tiene pestañas, historial y favoritos. Parte de la idea también es que se mantenga totalmente abierto, rápido y estable, multi-plataforma y mantener un código fácil de entender.

Señalan como “lo que no quieren lograr“: volverse un navegador de KDE o Windows. O sea, pretenden mantener el navegador libre de plataforma, y en caso de integrar características específicas para algún entorno en particular, hacerlo a través de extensiones. Además, esperan “nunca volverse otro Mozilla”, implementando todas las características como extensiones por fuera del navegador.

QtWebKit

WebKit es un framework open source con los cimientos para crear un navegador web. Originalmente se derivó de la biblioteca KHTML de Konqueror por Apple para su navegador Safari, y ahora está siendo desarrollado por Apple, Nokia (quien compró Trolltech, la empresa responsable de Qt), Google y otros. Pasa el Acid2 test y desde Marzo de 2008 pasa con 100/100 el Acid3 test (¡estándard!).

QtWebKit está basado en WebKit, provee un motor para navegador web que facilita embeder contenido de la World Wide Web en aplicaciones Qt. Al mismo tiempo, el contenido de la web puede ser mejorado con controles nativos.

Instalar Arora

Si usan Debian Lenny/Sid o ArchLinux, pueden encontrar Arora en los repositorios. Así que con apt-get o pacman (más info para ArchLinux) pueden instalarlo resolviendo automáticamente las dependencias.

También pueden descargar Arora desde el siguiente enlace:
http://code.google.com/p/arora/downloads/list
Está el código fuente en formato tar.gz, un paquete .deb para Ubuntu 8.04 y un instalador en formato exe para Windows.

Arora - Acerca de

Acerca de... Arora

Usando Arora

Lo primero que tengo que decir, es que para ir en la versión 0.2, el navegador es bastante estable y totalmente usable. A primera vista, encontramos algunas cosas familiares de la familia Mozilla: pestañas, colocación de botones y barras de herramientas, buscador de Google al costado. Está bien, no hay porqué reinventar la rueda en esto, y no apunta a la innovación. Pero lo primero que “agradece” la vista es la integración con la apariencia de KDE.

Es bien liviano, consume muy pocos recursos, aunque todavía no tiene extensiones para sumar al consumo de memoria… :D

Probé abrir varias pestañas con distintos sitios web, y no llegué a enlentecerlo (tampoco probé con una cantidad exagerada). Me impresionó lo rápido que cargó GMail, lo que demuestra que tiene JavaScript bien clarito. Sin embargo, ya logueado en mi cuenta de GMail, se volvió un poco lento.

Navegador Arora

Navegador Web Arora

El logo es bastante simpático, con tantos pingüinos en la vuelta, hacía falta un oso polar… (Penguins & Polarbears, temón!). Como se caracteriza en el Software Libre, se trata de tener opciones, y Arora es una opción más. Si bien todavía está en una etapa temprana de desarrollo, promete mucho. Se puede seguir su desarrollo en el blog Arora Development.

Sin dudas la rapidez y sencillez viene muy agradecida, en una época donde los navegadores acumulan cada vez más bloat, un comienzo de cero y con un motor así, viene de pelos. Le va a encantar a los usuarios de KDE, ya que se siente como parte de KDE, y se perfila como un competidor directo de Firefox, Konqueror, y demás participantes en “la guerra de los navegadores”.

Un usuario incluso lo sugirió como navegador por defecto en Open SuSE. Parece una idea descabellada para ser un navegador en estado tan prematuro, pero no me extrañaría que algo así pase en el futuro. Otro punto a favor que tiene, es la posibilidad de funcionar en equipos con sistemas embebidos, por lo que entra a la competencia de dispositivos móviles desde el principio.

Sin dudas es un navegador muy prometedor, y que tiene mucho futuro. Estén atentos a la salida de nuevas versiones:

http://www.arora-browser.org/

» Leer más, comentarios, etc...

Una sinfonía en C#

[VIDEOS] Introducción a SCRUM

Julio 21st, 2008

De la mano del gran Juán Gabardini les dejo estos dos videos introducción a SCRUM, muy interesantes y simples para que no digan que no tienen idea de lo que es, saludos

Introducción de SCRUM en 15 minutos
Leonardo Micheloni

» Leer más, comentarios, etc...

Picando Código

Ciclo de charlas MontevideoLibre: 802.11

Julio 21st, 2008

Como parte del ciclo de charlas de Introducción a redes de MontevideoLibre, el segundo de cinco módulos, tratará el tema 802.11. Las charlas son abiertas a todo público interesado, y se llevan a cabo en el salón cafetería del Colegio Crandon, cita en la avenida 8 de Octubre 2709, esquina Garibaldi, entre las 19:00 y 22:00 horas.

Segunda Instancia: 802.11

Colegio Crandon - avenida 8 de Octubre 2709, esquina Garibaldi

Colegio Crandon - avenida 8 de Octubre 2709, esquina Garibaldi

» Leer más, comentarios, etc...

MadeInFlex

Flex 4 “Gumbo” preview

Julio 21st, 2008

En los próximos meses se va a acabar de desarrollar la cuarta versión de Flex, nombre en clave "Gumbo". Aunque todavía quedan aspectos por definir ya disponemos de información final y suficiente como para apreciar las mejoras que ésta va a aportar al flujo de trabajo.
En esta entrada se traducen las características más destacables sin entrar en detalle de tal forma que se pueda tener rápidamente una idea generalizada de la nueva arquitectura y las diferencias con respecto al actual modelo.

(more...)

» Leer más, comentarios, etc...

Variable not found

Acciones que retornan imágenes en ASP.NET MVC

Julio 20th, 2008

ASP.NETEl hecho de que las acciones de los controladores de ASP.NET MVC retornen ActionResults abre un gran abanico de posibilidades para los desarrolladores de sistemas web.

Ya comenté en otra ocasión los distintos subtipos de ActionResult incluidos en el framework, y la posibilidad de crear nuevos descendientes. También tratamos en otro post el retorno de JSON desde los controladores como una potente vía de devolución de datos estructurados a la capa cliente, tras una llamada Ajax.

En esta ocasión vamos a profundizar un poco más, creando nuestro propia subclase de ActionResult para crear acciones con resultados personalizados utilizando la Preview 3 de esta tecnología. Concretamente, crearemos la clase ImageResult, que permitirá a las acciones retornar imágenes JPEG como la mostrada en la siguiente captura:

Demo de ImageResult

Como se puede observar, aparece una imagen con la hora actual sobre un fondo degradado, que es generada en tiempo real desde el servidor al producirse una petición desde la vista mediante un tag <img> estándar:


<h3>La hora es:</h3>
<img src='<%= Url.Action("GetImage") %>' />
 
La llamada al método Url.Action("GetImage") retorna una cadena con la dirección URL de la acción indicada en el parámetro, en este caso GetImage(). De esta forma, cuando el navegador necesite cargar la imagen para mostrarla, realizará una llamada a dicha acción, cuyo código aparece en el controlador de la siguiente forma:
  public ImageResult GetImage()
{
return new ImageResult
{
Width = 400,
Height = 100,
Text = DateTime.Now.ToLongTimeString()
};
}
 
Lo único que hace es retornar un objeto ImageResult inicializado con el ancho y alto deseado, y el texto a escribir. Fijaos en el uso del inicializador de objetos.

Veamos por último con la clase ImageResult:
  public class ImageResult: ViewResult
{
public int Width { get; set; }
public int Height { get; set; }
public string Text { get; set; }

public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.ContentType = "image/jpeg";

Rectangle rect = new Rectangle(0, 0, Width, Height);
Bitmap bmp = new Bitmap(rect.Width, rect.Height);
Graphics g = Graphics.FromImage(bmp);
Font font = new Font("Arial", Height / 1.6f);
LinearGradientBrush brush =
new LinearGradientBrush(rect, Color.Blue, Color.Navy, 90f);

g.FillRectangle(brush, rect); // Pinta el degradado...
g.DrawString(Text, font, Brushes.Black, 2, 2); // ... la sombra del texto...
g.DrawString(Text, font, Brushes.White, 0, 0); // ... y el texto.

g.Dispose();
font.Dispose();
brush.Dispose();

bmp.Save(context.HttpContext.Response.OutputStream, ImageFormat.Jpeg);
bmp.Dispose();
}
}
 
Aparte de la definición de las propiedades necesarias para su funcionamiento, el único truco a la hora de devolver contenidos personalizados es sobrescribir el método ExecuteResult de la clase base ViewResult. Ya en su implementación, a través del contexto que nos llega como parámetro podemos modificar el tipo de contenidos de la respuesta (Content-Type) y escribir a través del canal de salida lo que deseemos (en este caso utilizamos el método Save del bitmap para ello).

El resto del código no tiene demasiado interés, es la creación de la imagen dinámica utilizando GDI+. Por cierto, no he realizado validaciones de las propiedades, os los dejo de deberes ;-); Tampoco sé si tantos Dispose() explícitos serán necesarios, supongo que no, pero me da algo de repelús no ponerlos... debe ser algo así como un trauma infantil adquirido años atrás usando el API de Windows...

Proyecto para ASP.NET MVC CTP3 Descargar proyecto (Visual Web Developer 2008 + SP1 + ASP.NET MVC Preview 3).

Publicado en: www.variablenotfound.com.

» Leer más, comentarios, etc...

Mal Código

Panel de Televisiones con PS3 (I)

Julio 20th, 2008

En las próximas entradas voy a explicar un proyecto que me ha tenido ocupado las últimas semanas. Con motivo de la feria ESOF 2008 el Instituto de Física de Cantabria tenia apalabrado un stand donde enseñaría lo que se hace aquí. Como es una feria de divulgación científica, se decide llevar 9 televisores LCD que formaban un panel de 3x3. Este panel ya lo había