Noticias Weblogs Foros Wiki Código

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

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.

Idea: Juanjo Navarro

Diseño: Albin

Picando Código

Último post de 2008

Diciembre 31st, 2008 - [Enlace local]

Muy probablemente este sea el último post del año en el blog. El 2008 fue un año bastante interesante, con mucha cosa hecha, aprendida, etc.

En una de esas escribo un resumen del año en algún momento.

¡Feliz 2009 para todos!

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

Picando Código

En el top 1000 de autores de Plugins de WordPress

Diciembre 31st, 2008 - [Enlace local]

En el sitio W-Shadow se publicó la lista Top 10 WordPress Plugin Developers, el top 10 de desarrolladores de plugins para WordPress:

Las brillantes personas que crean herramientas sobresalientes y las comparten con la comunidad WordPress.

Basado en la cantidad de descargas de wordpress.org, también tiene una lista mas extensiva del top 1000. La actualización del 27 de diciembre de 2008 me deja en el puesto 573:

Top 1000 WordPress Plugin Authors - ¡Yo!

Top 1000 WordPress Plugin Authors - ¡Yo!

¡Qué orgullo! Esperemos superar las cifras (2834 descargas en 2 plugins) para el 2009.

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

Blog de Julio César Pérez Arques

Cierre y resumen del 2008

Diciembre 31st, 2008 - [Enlace local]

Llegó el momento de despedirse de este largo año 2008, mirar atrás y hacer balance de lo bueno y lo malo. Así que aprovecharé para hacer un pequeño resumen de lo que ha sido el 2008 para este blog.



La criatura nació allá por febrero, como evolución de mi anterior blog en búsqueda de un mejor hosting y soporte en cuanto a widgets, templates y ficheros se refiere.



En total el año ha dado para 35 posts contando con éste, donde he tratado de compartir algunas experiencias y pensamientos, principalmente sobre gestión de equipos, Eclipse, Axis2 y Spring.



Sólo por comentar algunos números sacados de Feedburner y Google Analytics, en la actualidad el número de suscriptores se ha estabilizado en más de 40 y las visitas mensuales superan la cifra de 1700.



El top de los posts más visitados es el siguiente:

  1. Cuando usar / no usar Hibernate. Este post lo escribí motivado por varios debates que observé sobre si usar Hibernate (como implementación referencia de JPA) o JBDC a pelo. Para mi sorpresa ha sido con diferencia el post de más éxito en lecturas aunque no en comentarios.
  2. Cómo generar un cliente webservice con Axis2 y Ant. Aunque inicialmente no tuvo mucho tirón, las visitas de Google lo han colocado en segundo lugar y como el post más visitado de todos los que he publicado sobre Axis2.
  3. Revisiones de código automatizadas con Eclipse (II) - Cómo crear tu propia configuración en Checkstyle. Un post dedicado exclusivamente al analizador de código Checkstyle y cómo personalizar un juego de reglas para sacarle el máximo partido.

Tras estos 3 le sigue todo el resto sin muchas diferencias en cuanto a visitas, hasta llegar al último lugar ocupado por Elementos negativos, supongo que por culpa de ser precisamente el primer post del blog.



Aprovecho para agradeceros a todos vuestros comentarios y vuestros mails de agradecimiento. Y no querría despedirme sin desearos suerte para este Nuevo Año 2009 y dedicaros un brindis por el talento!

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

Nuevos Programadores

LINQ To SQL: Ordenar resultados por criterios múltiples

Diciembre 31st, 2008 - [Enlace local]

Ayer me encontré con una situación en el trabajo, en la cual tenía que hacer una consulta con LINQ y devolver los resultados ordenados por 3 criterios, algo que en SQL haríamos de la siguiente manera:

SELECT *
FROM tblSocios
ORDER BY Numero, Apellido, Nombre

Y realmente no sabía como implementar eso mismo con LINQ, primero intenté hacer varios OrderBy en una misma sentencia, intentar hacer un predicate que devolviera más de una propiedad por la cual ordenar, pero nada resultó, hasta que apareció la solución: OrderBy y ThenBy.

Entonces el equivalente a la sentencia SQL anterior en LINQ sería:

Dim socios = From s in DataContext.tblSocios
socios = socios.OrderBy(Function(x As tblSocios) x.Numero).ThenBy(Function(x As tblSocios) x.Apellido).ThenBy(Function(x As tblSocios) x.Nombre)


También te puede interesar:

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

Cerebro en la Sombra » Técnico

Otras utilidades para un servidor de correo

Diciembre 31st, 2008 - [Enlace local]

A veces un servidor de correo puede sernos de muchísima utilidad si sabemos cómo manejarlo correctamente. En el artículo de hoy veremos como utilizar nuestro MTA para ejecutar automáticamente acciones cuando se recibe un determinado email o con los parámetros que definamos. Una vez conozcamos la teoría plantearemos dos casos prácticos como ejemplo.

Para comenzar necesitaremos un servidor Linux con Qmail como MTA. Supongo que cualquier otro servidor de correo servirá (Sendmail, Postfix), yo lo personalizo en Qmail porque es el que conozco y utilizo, pero estoy seguro de que con los demás se puede hacer lo mismo.

La teoría

Para entender cómo funciona la idea debemos entender primero cómo Qmail realiza la entrega de mensajes en los buzones locales. Es un tema sobre el que hay bastante literatura buscando en Google pero que puede no quedar muy claro en una lectura rápida. Es el famoso lío de los archivos .qmail.

Cada vez que se crea un usuario del sistema se debe crear, si va a recibir emails, un archivo .qmail-default en su directorio de usuario.

  1. [jiglesias@lerez ~]# cat /home/jiglesias/.qmail-default
  2. ./Maildir/

Normalmente este archivo se crea automáticamente ya que al instalar qmail se habrá creado una copia de este archivo en el esqueleto de creación de usuarios /etc/skel:

  1. [jiglesias@lerez ~]# ls -la /etc/skel
  2. total 56
  3. drwxr-xr-x  4 root root  4096 Jul 29 18:29 .
  4. drwxr-xr-x 97 root root 12288 Dec 30 04:08 ..
  5. -rw-r–r–  1 root root    33 Feb  1  2008 .bash_logout
  6. -rw-r–r–  1 root root   176 Feb  1  2008 .bash_profile
  7. -rw-r–r–  1 root root   124 Feb  1  2008 .bashrc
  8. drwx——  5 root root  4096 Aug 29  2007 Maildir
  9. -rw-r–r–  1 root root    12 Jan  2  2008 .qmail-default
  10. -rw-r–r–  1 root root   658 Sep 12  2006 .zshrc

Para el que no lo sepa, el esqueleto son los archivos que se copiarán al directorio de usuario (con los permisos de éste) cada vez que se crea uno nuevo. Si quieres que todos tus usuarios tengan algún archivo automáticamente, éste es tu sitio. En nuestro caso vemos que además del .qmail-default está el directorio Maildir, el de entrega por defecto del correo en qmail. Teniendo un usuario este archivo y este directorio, podrá recibir correo.

Vale vale, vas muy deprisa. Todavía no has explicado para que sirve el .qmail-default ese.  Cierto. Los archivos .qmail indican las reglas de entrega de los mensajes en base a dos parámetros:

Supongamos un usuario (jiglesias)  que recibe el correo de dos cuentas distintas (jiglesias@… y osus@…).

Por defecto todo su correo irá a su buzón ya que es lo que indica el archivo .qmail-default. Queremos ahora que el comportamiento sea distinto dependiendo de la cuenta a la que vaya dirigido, creamos entonces los archivos .qmail para las direcciones:

Podemos incluso ir un poco más lejos con un archivo .qmail-jiglesias-default, y controlaríamos el correo que vaya a cualquier dirección del tipo jiglesias-XXXX@…, es decir, cualquier dirección que comience por jiglesias- será controlada por este archivo .qmail.

En el caso básico, que es el que veíamos, la entrega se realiza al buzón de correo del usuario (el directorio Maildir) pero podríamos hacer otras cosas en función del contenido del archivo .qmail encargado de procesar la entrega del correo:

Reenvío a otra cuenta:

  1. [jiglesias@lerez ~]# cat /home/jiglesias/.qmail-jiglesias
  2. reenvio@osusnet.com

Reenvío a un programa/script:

  1. [jiglesias@lerez ~]# cat /home/jiglesias/.qmail-osus
  2. |preline /usr/bin/programa

Combinación de los anteriores

  1. [jiglesias@lerez ~]# cat /home/jiglesias/.qmail-jiglesias
  2. ./Maildir/
  3. reenvio@osusnet.com
  4. |preline /usr/bin/programa

El caso que nos interesa es el segundo, es decir, pasar la entrega del email a un script que se encargará de analizar el email y tomar decisiones.

Te habrá llamado la atención el |preline del archivo .qmail. Es el sistema que prepara un email para ser procesado y entregado a otro script añadiendo algunas cabeceras. La salida del script que reciba el email es importante ya que de ella depende el resultado de la entrega final de email, en concreto es importante saber que si queremos rechazar un email habrá que terminar el script con un exit (100), esto indicará a qmail que debe rechazar ese mensaje. Veremos más adelante la utilidad de esta salida.

La práctica

Una vez sabemos cómo pasar el control de un email recibido a un script, veamos como tratarlo. Lo haremos con un script PHP. En nuestro archivo .qmail haremos algo como:

  1. [jiglesias@lerez ~]# more .qmail-jiglesias
  2. |preline /usr/bin/php /home/jiglesias/prueba.php

Con esto hemos terminado el trabajo en el servidor de correo. Veamos ahora como parsear el email desde PHP.

Lo primero que debemos hacer es recoger el contenido del email desde el script a través de la entrada estándar,  después ya podemos procesar el email como una cadena de texto.

  1. <?php
  2. $email=file("php://stdin");
  3. $email=implode("", $email);
  4. ?>

Con estas sencillas dos líneas de código tendremos en nuestro script el contenido del email. Ahora sólamente debemos procesarlo. Podemos hacerlo línea por línea por nuestra cuenta o apoyarnos en alguna librería. Yo utilizo Mail_mimeDecode de Pear. La ventaja de esta librería es que podemos obtener, además del texto del email, los archivos adjuntos.

  1. <?php
  2. $email=file("php://stdin");
  3. $email=implode("", $email);
  4. $params[‘include_bodies’] = true;
  5. $params[‘decode_bodies’] = true;
  6. $params[‘decode_headers’] = true;
  7. $params[‘input’] = $email;
  8. $structure = Mail_mimeDecode::decode($params);
  9. $subject = trim($structure->headers[’subject’]);
  10. $ddate = trim($structure->headers[‘date’]);
  11. $from = addslashes(trim($structure->headers[‘from’]));
  12. if(ereg("<(.*)>", $from, $p)) $from=$p[1];
  13. if(ereg("\"(.*)\"", trim($structure->headers[‘from’]), $pp))
  14.     $nombre=$pp[1];
  15. ?>

Así podemos ya procesar el email y tomar las decisiones que consideremos oportunas. Podremos insertarlo en una base de datos, lanzar otros procesos automatizados, enviar avisos por SMS… lo que se nos ocurra.

Casos prácticos

La pregunta clave, después de ver la teoría, sería ¿para qué me sirve esto?.  Os propongo dos aplicaciones que yo he hecho.

Sistema de soporte

El típico sistema de tickets de soporte. En el asunto del email se arrastra el identificador del ticket, por ejemplo [#123445]. Tendremos que analizar el asunto y comprobar si aparece el patrón predefinido. Si no existe estamos ante un nuevo ticket e insertamos los datos en nuestra base de datos, en caso contrario es una respuesta a una incidencia anterior y ahí tendremos el identificador. Sencillo ¿no?. Podemos incluso adjuntar a nuestras indicendias archivos que puedan llegar en el email.

Envío de archivos desde el movil

El segundo ejemplo sería semejante al anterior técnicamente pero distinto conceptualmente. La mayoría de los móviles (salvo los de gama alta) no pueden enviar archivos desde los formularios wap (<input type=”file”>). La alternativa es que el usuario envie un email o un MMS (la mayoría de operadoras permiten el envío a direcciones de email) con sus archivos. Nuestro script procesará el contenido del mail recibido, decodificará los archivos y los tratará como sea oportuno.

Son dos sencillos ejemplos de cómo utilizar el email para automatizar tareas, pero, como he comentado, podríamos hacer todo lo que se nos ocurra, desde enviar un SMS de aviso hasta incluso reiniciar nuestro servidor o lanzar cualquier otra tarea.

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

PROGRAMANDO EN .NET

Propósitos para 2009

Diciembre 31st, 2008 - [Enlace local]

Como siempre que se acaba algo es bueno echar la vista atrás y hacer un poco de reflexión de cómo ha sido el año, personalmente el 2008 ha sido decepcionante en algunos aspectos, vamos que no será un año que recuerde con nostalgia, pero no quiero ser pesimista (mi carácter me lo impide) y tengo que reconocer que este año he sacado unas cuantas buenas experiencias que merecieron la pena ser

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

Picando Código

Mi Nueva Computadora: Atari 65 XE

Diciembre 31st, 2008 - [Enlace local]

Atari 65XE - Hola mundo

Atari 65XE - Hola mundo

Esta navidad me regalé a mí mismo una “nueva” computadora. En un sitio de subastas online me encontré con una Atari 65XE. ¡Esta computadora tiene la misma edad que yo!

Atari 65XE

Es parte de la familia de computadoras para el hogar 8-bits de Atari. Una serie de computadoras lanzadas entre 1979 y 1992, tras el éxito de la consola de videojuegos Atari 2600 en 1977.

Atari rediseñó, hizo algunas correcciones y mejoró la Atari 2600 para competir con la Apple II en ese momento. En 1978 se anunciaron la Atari 400 y 800, refiriéndose a la cantidad de memoria, 4 Kb y 8Kb de RAM respectivamente (aunque ambas fueron lanzadas con 8 Kb por la caída del precio de la RAM, e incluso lanzadas con hasta 48 KB más adelante).

Luego vinieron las XL, y finalmente la serie XE: 65XE y 130XE (XE significaba XL-Expandida). Atari dejó de dar soporte a la línea de 8 bits el 1ero de enero de 1992.

Atari 65XE

Atari 65XE

La maquinita trae Atari BASIC, un intérprete de BASIC en la memoria ROM, al que bootea si no tiene ningún cartucho. Además me trajo el manual, bastante difícil de conseguir hoy en día, de donde se puede estudiar el funcionamiento y programación con BASIC. Cuenta con unos increíbles 64 kb de memoria RAM y 24 de ROM.

Hoy llegó y fui a retirar la caja a la agencia. Cuando llegué a casa lo primero que hice fue conectarla a la televisión probando BASIC. No tengo ningún cartucho de juegos todavía, si alguien tiene alguno tirado por ahí…

También en la compra vinieron incluidas las caseteras:

Caseteras Atari XC12

Caseteras Atari XC12

Ya conseguí el manual online. No las he probado todavía, pero creo que funcionan.

Además de todo esto, la compra incluyó también una impresora Atari 1027:

Impresora Atari 1027

Impresora Atari 1027

Tampoco he probado la impresora. Ni siquiera tengo los cables, pero en una de esas la puedo hacer andar. Además de todo esto, el vendedor me mandó de regalo una Atari 130XE, prácticamente el mismo modelo, pero con más memoria. Lo incluyó de regalo porque no funciona. No tengo idea qué puede tener roto, pero voy a intentar arreglarla:

Atari 130XE

Atari 130XE

En total me salió todo mucho más barato de lo que se imaginan.

Sumaré Atari BASIC a la lista de lenguajes que he usado. Por ahora solamente he hecho algunos ruidos locos a coro:

SOUND 1,100,10,8

Y alguna pavada más. Me voy a leer el manualsito y ver qué cosas locas se pueden hacer. ¿Sugerencias?

Me falta conseguir una Commodore 64, y una Sinclair ZX Spectrum, ¡y me armo terrible colección!

Atari

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

The New Cult of Dead Cow » desarrollo

Priorizando las respuestas en la red

Diciembre 30th, 2008 - [Enlace local]

El protocolo TCP funciona enviando paquetes y esperando la confirmacion de dichos paquetes ( ACK ). Si la confirmacion no llegara o demorara mas de los esperado el servidor TCP volveria a enviar los mismos paquetes bajo el supuesto que el cliente no lo haya recibido correctamente.

Entonces, si en algun momento yo estoy descargando algun archivo ( ISO, video, mp3, youtube o visitando paginas web ) el servidor espera que le lleguen los paquetes ACK de confirmacion, si este no llegara a tiempo el ancho de banda de bajada de nuestra red se desperdiciaria en la retransmision de paquetes que ya tenemos, haciendo que la velocidad de descarga disminuya.

Para evitar esto, se puede aplicar una mayor prioridad a los paquetes de confirmacion ACK.

iptables -A PREROUTING -t mangle -p tcp –tcp-flags SYN,ACK  SYN,ACK -j TOS –set-tos 16
iptables -A OUTPUT -t mangle -p tcp –tcp-flags SYN,ACK SYN,ACK -j TOS –set-tos 16

descarga inestable

Observen, como en el primer grafico la velocidad de decarga ( azul ) baja cuando empezamos a subir algun archivo ( naranja ). Esto es debido a que cuando tratamos de subir archivos los paquetes ACK empiezan a encolarse.

descarga estable

En cambio cuando le damos maxima prioridad a los paquetes ACK, la velocidad de descarga se mantiene constante.

Noticia original en BSD: Priorizando ACK

Share/Save/Bookmark

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

Picando Código

PHP 4: Parse error: syntax error, unexpected T_OBJECT_OPERATOR

Diciembre 30th, 2008 - [Enlace local]

Tras la nueva versión de List Category Posts, muchos usuarios me escribieron por comentarios y mail, informándome de un error en el plugin. El error era el siguiente:

Parse error: syntax error, unexpected T_OBJECT_OPERATOR
in /home/wp-content/plugins/list-category-osts/list_cat_posts.php on line 62

Analizando el servidor del primer usuario que lo reportó me encuentro con una versión vieja de PHP:
PHP/4.4.9
PHP 4 está descontinuado, recuerdo el año pasado hubo terrible movimiento para que los servidores de hosting migraran a PHP 5. Incluso PHP 6 está en desarrollo desde hace un tiempo (no sé hasta qué punto se encuentra estable/usable).

En la línea 62 del archivo del plugin se encontraba lo siguiente:

$output.=" - ".get_userdata($single->post_author)->user_nicename;

PHP 4 no permite encadenar métodos, es algo de PHP 5. Para tener compatibilidad con PHP 4, tuve que guardar el retorno de get_userdata() en una variable, y hacer lo mismo en dos pasos.

¡Exigan a sus servidores de hosting que migren a PHP 5!

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

Blog de Federico Varela

La Profecía Autocumplida

Diciembre 30th, 2008 - [Enlace local]

Hace poco escuché en una entrevista a un empresario argentino que asociaba los posibles efectos de la crisis económica en nuestra región a un concepto denominado “profecía autocumplida”, que según la Wikipedia se define como: Una profecía autocumplida o autorrealizada es una predicción que, una vez hecha, es en sí misma la causa de que se haga realidad. La profecía que se autorrealiza es, al

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

PROGRAMANDO EN .NET

Problema (y solución) al instalar .NET Framework 3.5 (V)

Diciembre 30th, 2008 - [Enlace local]

Seguimos con errores al instalar el .NET Framework 3.5 SP1, esta vez se trata de un Windows XP SP2 que, aparentemente, no tienen ningún .NET Framework instalado:[XX/XX/08,16:24:15] RGB Rast: [2] Error: Installation failed for component RGB Rast. MSI returned error code 1625[XX/XX/08,16:24:30] WapUI: [2] DepCheck indicates RGB Rast is not installed.Intentamos instalar manualmente el componente RGB

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

Bloggingg

Las oficinas de Fog Creek

Diciembre 30th, 2008 - [Enlace local]

a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PpcwwLXOpoI/SVoa0WLRqaI/AAAAAAAAAFU/fEw9Tl6IaKc/s1600-h/DSC_1512.NEF.jpg"img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 214px;" src="http://3.bp.blogspot.com/_PpcwwLXOpoI/SVoa0WLRqaI/AAAAAAAAAFU/fEw9Tl6IaKc/s320/DSC_1512.NEF.jpg" alt="" id="BLOGGER_PHOTO_ID_5285566599281093026" border="0" //abr /¿Cuándo podremos ver en España unas oficinas como las de Joel Spolsky? Si las comparo con la mía me daría vergüenza. Todos los puestos en esta oficina tienen las siguientes características:br /br /ulliTodas las oficinas son privadas, para que te concentres en el código y no interrumpan todo el tiempo. Aquí en España lo más normal es que haya gente hasta en los pasillos con mesas supletorias. Además, todas tienen ventanas para que te relajes con las buenas vistas de Nueva York.br //liliMesa motorizada ajustable en altura, para trabajar de pie si me da la gana. Aquí te tienes que conformar con lo justo para el portátil.br //liliMonitores de 30", incluso algunos puestos tienen hasta 2 monitores. Y yo pasándome 8 horas con un portátil de 15,4"./liliComedor gratuito, bonito y espacioso para comer todo el mundo a la vez. Se acabó eso de llevar tuppers.br //liliCoffee bar gratuíto. Fruta en todos los puestos, snacks, una nevera llena de bebidas. Mirar las fotos y comparad./liliBiblioteca/liliVarias salas de reuniones de diferentes tamaños. Allí no se pelean por resevar la sala./li/ulBueno, sólo quería demostrar que son diferentes las cosas allí y aquí, y espero que poco a poco aquí vayamos cogiendo todo lo bueno de allá y no al revés.br /br /Para más información: a href="http://www.joelonsoftware.com/items/2008/12/29.html"el blog de Joel Spolsky/a y a href="http://picasaweb.google.com/spolsky/FogCreekSNewOffice#"el álbum de Picasa con las fotos de las oficinas/a.

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

programania

¿Métodos encadenados? ¡No! Fluent Interfaces.

Diciembre 30th, 2008 - [Enlace local]

Lo ví el otro día en la blogosfera americana, y hoy lo leo en la hispana. Como sabemos, Zend Framework adopta un estilo de programación que fomenta que se escriba código como:

$objeto = new Clase();
 
$objeto->metodo1()->metodo2();

A eso ahora le llaman “Method Chaining” o “Métodos encadenados”. Pero, para la gente que siga un poco la evolución de la orientación a objetos, lleva mucho tiempo siendo Fluent Interfaces (o Interfaces fluidas), y forman parte de la técnica para construir DSL´s - Domain Specific Languages, y son una evolución de las API´s u otra forma de escribirlas. Las Fluent Interfaces forman parte de las buenas costumbres para escribir código orientado a objetos moderno.

No me importaría tanto que se les llamara “Métodos encadenados” si no fuera porque llevamos mucho tiempo intentando introducir los términos DSL  y Fluent Interfaces…

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

Arragonán

2008 de todo un poco

Diciembre 30th, 2008 - [Enlace local]

Acabándose el año, toca mirar un poco atrás para ver como ha ido el año, que para mi ha sido muy movido :)

Algunos éxitos, o cosas con las que me siento satisfecho, han sido:

Pero como no todo puede ser bueno, hay cosas que no han salido como esperaba y de lo que no me siento especialmente orgullloso:

Ha sido un año interesante, aunque como freelance haya pecado de novato en varias ocasiones, me haya metido en más jaleos de los que podía manejar, la crisis:P , he disfrutado de este trabajo más que nunca. Sólo espero que en 2009 se empiece a ver el trabajo realizado durante este año, además de seguir aprendiendo y disfrutando en esta profesión ;)

PD: Feliz año nuevo!! :D

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

Picando Código

[Plugin WordPress] List Category Posts 0.4

Diciembre 30th, 2008 - [Enlace local]

WordPressTerminé una nueva “release” de List Category Posts, uno de mis plugins para WordPress. En la versión 0.4, incluí algunas características a pedido del público, y este es el changelog respecto a versiones anteriores:

* Agregado parámetro ‘date’. Ahora se puede mostrar la fecha del post cuando es listado.
* Agregado parámetro ‘author’. También se puede mostrar el autor del post.
* El Widget del sidebar permite agregarle un título entre etiquetas h2.
* Cambiados los nombres de algunas variables (eran muy genéricos), para mantener mejor compatiblidad con variables de otros plugins/wordpress.
* Probado con WordPress 2.7.

Los que lo tengan instalado ya verán el aviso de WordPress para actualizarlo, y los que no, los invito a probarlo.

Mañana voy a intentar actualizar User-Agent Spy, que tiene unos errores de validación xhtml, y no es compatible con las nuevas características de comentarios por hilos de WordPress 2.7. Veremos qué pasa.

Es muy interesante ver cómo van creciendo estos proyectitos, ¡List Category Posts lleva más de 2.000 descargas!

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

PHP Senior

Ejemplo de excepciones desde Zend Framework

Diciembre 30th, 2008 - [Enlace local]

Siguiendo con a href="http://phpsenior.blogspot.com/2008/12/ejemplo-de-excepciones-enviar-un-sms.html"el post anterior sobre el tema/a, quería mostrarles otro ejemplo de cómo se manejan a href="http://ar2.php.net/manual/es/language.exceptions.php"las excepciones/a desde Zend Framework, donde la diferencia principal radica en que obtenemos una lista enorme de a href="http://framework.zend.com/manual/en/zend.exception.html"clases preestablecidas para el manejo de excepciones/a (como sucede en lenguajes como Java), lo que nos permite usarlas de forma directa sin tener que implementar nada más que el try/catch.br /br /pre name="code" class="Php"br /try{br /br / $this-view-clientes = Models_Clientes::getAll();br /br /}catch(Zend_Db_Statement_Exception $e){br /br / $this-view-mensajeError =br / 'Se ha producido un error interno al intentar recuperar datos.'br / .' Por favor envíe un email a sistemas@surforce.com' ;br /br /}catch(Zend_Db_Adapter_Exception $e){br /br / $this-view-mensajeError =br / 'Se ha producido un error al conectar a la base de datos.'br / .' Por favor reintente en unos minutos';br /br /}catch(Zend_Exception $e){br /br / $this-view-mensajeError =br / 'Se ha producido un error inesperado.'br / .' Por favor reintente en unos minutos';br /}br /br /$this-render ();br //prebr /br /span style="font-weight:bold;"Repasando:/span las excepciones deben ordenarse como si fueran reglas de un a href="http://es.wikipedia.org/wiki/Cortafuegos_(informática)"firewall/a, la regla más específica debe ir al principio y la más general al final (ya que si lo hacemos al revés siempre entrarán por la primer coincidencia en la regla).br /br /Con span style="font-weight:bold;"Zend_Db_Statement_Exception/span entrarán todas las fallas que ocurran por errores de sintaxis en el ejecución de sentencias SQL (error bastante grave), en el segundo caso con span style="font-weight:bold;"Zend_Db_Adapter_Exception/span cualquier falla en la conexión al motor de base de datos y en el último, ya una excepción genérica como span style="font-weight:bold;"Zend_Exception/span, capturamos cualquier otro error que no pudimos especificar con detalle (algo así como la a href="http://es.wikipedia.org/wiki/Blue_screen_of_death""pantalla azul de la muerte"/a de Windows ;-)).br /br /Si no agregamos este try / catch en el momento de la falla enviará directamente en pantalla todo el "volcado" de la Excepción y concluirá la ejecución de la aplicación de forma abrupta.br /br /Pero, si además de esto agregamos en la vista un código como el siguiente, podremos enviar un mensaje al usuario sin distorsionar la interfaz de nuestra aplicación.br /br /En este ejemplo, el código para desplegar el mensaje de error se encuentra en a href="http://framework.zend.com/manual/en/zend.layout.html"el layout de la aplicación/a:br /pre name="code" class="Php"br / ?php if(!is_null($this-mensajeError)): ? br / ?php echo $this-mensajeError ?br / ?php endif ?br //prebr /Y con un poco más de trabajo, puede quedar a href="http://www.jankoatwarpspeed.com/post/2008/05/22/CSS-Message-Boxes-for-different-message-types.aspx"más estético/a y a href="http://www.jankoatwarpspeed.com/post/2008/12/13/Animate-your-message-boxes-with-jQuery.aspx"hasta con una animación/a (moviendo lateralmente el cuadro un par de veces, como para alertar al usuario) y se vería de esta forma:br /br /a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_G8kpjzIeQ4o/SVlon6uWtiI/AAAAAAAAERA/Kk8FF7CRLps/s1600-h/mensaje_error_captura.gif"img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 312px; height: 108px;" src="http://1.bp.blogspot.com/_G8kpjzIeQ4o/SVlon6uWtiI/AAAAAAAAERA/Kk8FF7CRLps/s400/mensaje_error_captura.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5285370672683857442" //abr /Las excepciones son la única forma de tener un manejo uniforme de errores (algo que tienen todos los lenguajes POO modernos) y poder controlar mejor cómo responder a situaciones no esperadas y que nuestra interfaz no quede "desarmada" delante del usuario, lo cual podríamos hasta definir en la configuración que cada vez que ocurra un "error general" envíe un email al departamento de sistemas con todos los datos para poder analizar el fallo ni bien sucede.br /br /¿Y ustedes, usan excepciones? ¿qué otras ideas han aprovechado para implementar y mejorar la funcionalidad de nuestros sistemas? pa href="http://feeds.feedburner.com/~a/phpsenior?a=zcdE1u"img src="http://feeds.feedburner.com/~a/phpsenior?i=zcdE1u" border="0"/img/a/pimg src="http://feeds.feedburner.com/~r/phpsenior/~4/498169926" height="1" width="1"/

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

Najaraba.com: Software libre, negocios y más.

Cuatro años y feliz año nuevo

Diciembre 29th, 2008 - [Enlace local]

No todos estos últimos años he celebrado el cumple de este blog. Pero este año es (debe de ser) diferente. Hace cuatro años ya que empecé a escribir: 200 posts, aunque no es mucho, este es un blog modesto :) . Empecé hablando de software libre, para dar a conocer mi tesina sobre ello. Después pasé a temas más de programación y que leía por otros blogs, pasando por temporadas de muy pocas

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

Bloggingg

Si eres legal, comparte

Diciembre 29th, 2008 - [Enlace local]

a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PpcwwLXOpoI/SVj_e8xoh2I/AAAAAAAAAFM/N3bli6s-pv8/s1600-h/eslegal.png"img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 145px; height: 215px;" src="http://2.bp.blogspot.com/_PpcwwLXOpoI/SVj_e8xoh2I/AAAAAAAAAFM/N3bli6s-pv8/s320/eslegal.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5285255069894739810" //abr /¿Cómo te sentirías si un día al salir de tu casa vieses un enorme cartel publicitario insultándote, llamándote delincuente? Supongo que no muy bien. ¿Como te sentirías si además te enterases de que ese enorme cartel encima lo vas a tener que pagar tú?.divPues esta misma situación sucede con la a href="http://es.youtube.com/watch?v=Jne7HZP72O8"última campaña contra la piratería/a. Parece que todavía no se han enterado que compartir no es ilegal, y arremeten contra los ciudadanos para favorecer a unos pocos con su modelo de negocio ya anticuado./divdivbr //divdivSolo en la campaña "Si eres legal, eres legal" se ha gastado más de span class="Apple-style-span" style="font-weight: bold;"un millón y medio de euros/span de fondos públicos. La web oficial de la campaña está plagada de mentiras, y ya ha sido criticada por varias asociaciones ciudadanas.br //divdivbr //divdivBasta ya, a href="http://siereslegalcomparte.com/portada.php"si eres legal, comparte/a./div

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

proyectos Ágiles

Técnicas ágiles y CMMi nivel 2 en un proyecto de Banca

Diciembre 29th, 2008 - [Enlace local]

h2a name=_Toc201981090 rel=nofollowIntroduccioacute;n/a/h2 p class=BikoNormalnbsp;/p p class=BikoNormalRecientemente en a href=http://www.biko2.com/ rel=nofollowBiko/a obtuvimos la certificacioacute;n CMMI nivel 2. Tras un periodo de estudio de los procesos convenientes para el funcionamiento de la organizacioacute;n, estos fueron validados y aprobados mediante el SCAMPI./p pa href=http://www.proyectosagiles.org/tecnicas-agiles-cmmi-2-proyecto-banca target=_blankread more/a/p

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

Ingenieria de Software / Software Engineering

Felices Fiestas Decembrinas

Diciembre 29th, 2008 - [Enlace local]

p align="justify"El presente es solo para desearles lo mejor en estas fiestas decembrinas, espero que este a#241;o 2009 que se avecina este lleno de publicaciones para enriquecer el intelecto, por mi parte seguir#233; escribiendo de los temas que me apasionan Administraci#243;n de Proyectos e Ingenier#237;a de Software./p

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

PHP Senior

Último post del blog

Diciembre 29th, 2008 - [Enlace local]

div style="text-align: center;"a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/717/822/1600/mudanza.jpg"img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 143px; height: 200px;" src="http://photos1.blogger.com/blogger/717/822/1600/mudanza.jpg" alt="" border="0" //aspan style="color: rgb(0, 0, 0);font-size:130%;" span style="font-weight: bold;"(Suspendido Brasil, feliz Día de los Inocentes ;-)/span)/spanbr //divspan style="color: rgb(0, 0, 0);font-size:130%;" br //span... por razones de índole laboral voy a cambiar de país de residencia (nuevamente, no hace un año que nos vinimos de Uruguay a Argentina) y voy a cambiar de tecnología: span style="font-weight: bold;"me paso completamente a Java, más concretamente JEE/span.br /br /Saludos, sepan disculpar, voy a estar bastante ocupado con la mudanza (vender todo nuevamente para a href="http://enriqueplace.blogspot.com/2008/12/ltimo-post-hasta-dentro-de-unos-cuantos.html"irnos a Brasil/a), así que hasta la vista! (alguien más llenará este vacío, seguro). pa href="http://feeds.feedburner.com/~a/phpsenior?a=7Txe0A"img src="http://feeds.feedburner.com/~a/phpsenior?i=7Txe0A" border="0"/img/a/pimg src="http://feeds.feedburner.com/~r/phpsenior/~4/497347776" height="1" width="1"/

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

SobreRaíles

Novedades en Edge Rails #8

Diciembre 28th, 2008 - [Enlace local]

Nota: Este artículo es traducción del publicado el 26 de Diciembre de 2008 por Mike Gunderloy en el blog de Ruby on Rails.

El mayor cambio que se ha producido en Rails aún no está reflejado en el propio código. Hablamos, claro está, de la fusión con Merb en Rails 3. Hay una rama 3-0-unstable en el repositorio pero aún no se ha separado de la rama principal de desarrollo. De momento nos seguiremos centrando en la rama master que verá la luz como Rails 2.3.

Y Rails 2.3 continúa cociéndose. El equipo hizo 39 entregas esta semana, a pesar de que mucha gente se ha ido de vacaciones. Muchas fueron correcciones menores de fallos, pero hay algunas cosas que podrían resultar de interés

Unificación del rendering

ActionController::Base#render ahora es mucho más astuto a la hora de decidir qué mostrar. Basta con echarle cosas y esperar que saque los resultados correctos. Si estamos usando Rails 2.2, por lo general debemos dar información explícita sobre qué es lo que hay que mostrar:

render :file => '/tmp/random_file.erb'
render :template => 'other_controller/action'
render :action => 'show'

Ahora en Rails .3, basta con proporcionar lo que queremos mostrar:

render '/tmp/random_file.erb'
render 'other_controller/action'
render 'show'
render :show

Ahora Rails escogerá entre archivo, plantilla o acción dependiendo de si hay un ‘/’ al principio, un ‘/’ en medio, o ningún ‘/’. También se puede enviar un símbolo cuando queramos mostrar una acción. Otros estilos de invocación (:inline, :text, :update, :nothing, :json, :xml, :js) aun necesitan la opción explícita.

commit commit
commit
commit

Correcciones en ActiveRecord

Un par de correcciones en ActiveRecord para eliminar algunos casos en los que fallaban las asociaciones. Uno se encarga de poner comillas en los nombres de tablas en algunas asociaciones has_many :through si el nombre de la table contenía una palabra clave SQL. commit

La otra corrección permite utilizar un hash en las condiciones de una relación has_many:

has_many :orders, :conditions => {:status => 'confirmed'}

Esto funcionaba en Rails 2.1 pero falla en Rails 2.2 y funcionará otra vez en Rails 2.3 (en Rails 2.2 se puede usar una cadena en lugar de un hash para especificar las condiciones). commit

Se han eliminado algunos efectos colaterales de invocar Model#last (cambiaban el orden de otros finders dentro del mismo ámbito). commit

Prompts for Date Select Helpers

Con este parche, podemos proporcionar rótulos personalizados en los diversos helpers que tratan con fechas (date_select, time_select, y datetime_select) de la misma forma en que se hace con los helpers de selección de colecciones. Se puede pasar una cadena o un hash de cadenas individuales para cada componente. También se puede utilizar un rótulo genérico poniendo :prompt a true:

select_datetime(DateTime.now, :prompt => true)

select_datetime(DateTime.now, :prompt => "Choose date and time")

select_datetime(DateTime.now, :prompt =>
  {:day => 'Choose day', :month => 'Choose month',
   :year => 'Choose year', :hour => 'Choose hour',
   :minute => 'Choose minute'})

commit

Esto y lo otro

El script dbconsole ahora permite usar un password compuesto exclusivamente de números sin fallar. commit

Se pueden usar símbolos en la opción :type de send_file y send_data, por ejemplo: send_file("fabulous.png", :type => :png). commit

Si usamos los delegates de ActiveSupport, hay una nueva opción :allow_nil que permite devolver nil en lugar de levantar una excepción cuando el objeto destino es nil. commit

Se puede especificar una fecha y hora específica para los campos updated_at: cust = Customer.create(:name => "ABC Industries", :updated_at => 1.day.ago) commit

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

Netwiz blog

Empezando a desarrollar con el SDK de Windows Azure

Diciembre 28th, 2008 - [Enlace local]

Recientemente, me he introducido dentro del desarrollo en la plataforma de Windows Azure CTP con la liberación del SDK de Azure. Y ahora quisiera compartirles mi experiencia en el inicio de esta plataforma, como empezar a usarla ya como desarrolladores. Antes que nada, tenemos que ver los requisitos que necesitamos tener para utilizar a Azure CTP: Windows [...]

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

Variable not found

Plataforma pro-salvación de Visual Basic .NET (SVB.Net)

Diciembre 27th, 2008 - [Enlace local]

img style="float:right; margin:0 0 10px 10px;" src="http://1.bp.blogspot.com/_O9D62hXq-ng/SU49b_uRYsI/AAAAAAAAA-E/XYURY6wwzb0/s400/the-end-of-vbnet-.jpg" border="0" alt="Charla de Matt Gretz sobre el futuro de VB.NET" id="BLOGGER_PHOTO_ID_5282226964123443906" /Tras algunos días de intenso debate, ayer quedó constituida SVBNet, la plataforma pro-salvación de Visual Basic, como movimiento independiente de la comunidad de desarrolladores de habla hispana a href="http://aupa.net" title="Aupa.net, la comunidad de desarrolladores de habla hispana" onclick="return false;"aupa.net/a, cuyo objetivo es apoyar la continuidad del lenguaje y hacer presión para forzar un replanteamiento de su estrategia comercial. br /br /Para el que todavía no esté al tanto de la historia, durante la segunda semana de diciembre ha tenido lugar en Dallas el encuentro de desarrolladores a href="http://www.microsoft.com/events" title="Microsoft Events"DevConn4/a, en el que a href="http://blogs.msdn.com/vbteam/archive/tags/Matt+Gertz/default.aspx" title="Posts de Matt Gretz en el blog del VBTeam" hreflang="en"Matt Gretz/a, destacado miembro del equipo de VB.NET, hacía público el Roadmap que Microsoft tiene previsto para este producto, que no trae buenas noticias para la gran comunidad de desarrolladores en Visual Basic, y que provocó un a href="http://www.google.es/search?q=death%20of%20vb" title="Death of VB, más de 3 millones de referencias en Google"revuelo impresionante/a tanto en la sala del evento como en la blogosfera y medios especializados.br /br /Resumidamente, el Roadmap prevé la strongprogresiva desaparición de Visual Basic/strong, mediante un plan de migración que facilitará los desarrolladores pasar a C# en un plazo de tres años. A partir de 2012 no se publicarán nuevas versiones de VB, por lo que, dado que el lenguaje no evolucionará para reflejar los cambios que sean introducidos a nivel de framework, lo llevará irremediablemente a su desaparición en no más de cinco años.br /br /En líneas generales, el contexto actual y el panorama que nos espera, si nadie lo impide, es el siguiente:ulliPrimero, durante años se han ido introduciendo mejoras en Visual Basic .NET hasta cubrir la mayoría de características del framework e igualarlo en potencia a C#, con objeto de hacer más suave el salto de un lenguaje a otro. Por ejemplo, la inclusión en el actual VB.NET 9 de tal cantidad de novedades y cambios respecto a versiones anteriores, responden claramente a estas necesidades.br /br /Hasta aquí, todo es correcto y aporta exclusivamente ventajas. El problema viene ahora.br /nbsp;/libr /liLa segunda gran acción podremos verla con el próximo Visual Studio 2010 y .Net 4.0, de los cuales ya a href="http://www.microsoft.com/downloads/details.aspx?familyid=922b4655-93d0-4476-bda4-94cf5f8d4814displaylang=en" title="Descargar VS2010 CTP"es posible descargar previews/a. Para entonces, strongVisual Basic aparecerá con el nombre comercial VB#/strong (emVB Sharp/em), dando a entender que se trata de una versión de transición a C#, y en el que podremos encontrar el giro hacia una sintaxis más cercana a este lenguaje, como el uso de llaves en bloques (codeif/code, blucles codewhile/code y codefor/code, etc.), estructuras compactas (como la sintaxis lambda o declaraciones menos verbosas), comentarios tipo C "/*", y otras lindezas que seguro que dejarán nuestro código VB bastante diferente al actual. Eso sí, para facilitarnos la vida, será el propio IDE el que nos ayude a acostumbrarnos a las particularidades sintácticas, sustituyendo sobre la marcha el código VB.NET tradicional por VB#.br /br /En esta fase también encontraremos los cambios que se van a producir en C# para dotarlo de algunas de las ventajas de Visual Basic, como los a href="http://geeks.ms/blogs/elbruno/archive/2008/12/14/vsts2010-par-225-metros-opcionales-en-c-4-0.aspx" title="ElBruno: Parámetros opcionales en C# 4.0"parámetros opcionales/a, con objeto de lograr una mayor confluencia y hacer más fácil la adopción del lenguaje por esta comunidad de desarrolladores.br /nbsp;/libr /liLa última parte del plan se llevará a cabo en 2012 con Visual Studio (codename emMoonwalker/em), que se distribuirá con .NET framework 5.0 (aka emGreengarden/em) y strongno vendrá acompañado de una nueva versión de Visual Basic, sino de un asistente de migración a C#/strong. Para esas fechas, además, se prevé que la mayoría de desarrolladores de Visual Basic haya adoptado VB#, por lo que el salto será, en palabras de Matt, cite"no traumático"/cite./li/ulbr /a href="http://3.bp.blogspot.com/_O9D62hXq-ng/SU45DUKlcBI/AAAAAAAAA98/caxU8uifZZU/s1600-h/vbnet-roadmap.jpg"img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 389px; height: 310px;" src="http://3.bp.blogspot.com/_O9D62hXq-ng/SU45DUKlcBI/AAAAAAAAA98/caxU8uifZZU/s400/vbnet-roadmap.jpg" border="0" alt="Roadmap de VB.NET presentado en DevConn4" id="BLOGGER_PHOTO_ID_5282222142067666962" //abr /br /Finalmente, comentar que también hemos acordado el emblema de la plataforma pro-salvación de Visual Basic que podemos ir utilizando en nuestras páginas para dar difusión al movimiento hasta que tengamos lista la a href="http://www.svb,net"web oficial/a, que se prevé finalizada para primeros de año.br /br /img style="float:right; margin:0 0 10px 10px;" src="http://1.bp.blogspot.com/_O9D62hXq-ng/SU0lv-Xe1nI/AAAAAAAAA9s/POyEGzvckNo/s400/plataforma-pro-vb.jpg" border="0" alt="Logo Plataforma pro-salvación de Visual Basic" id="BLOGGER_PHOTO_ID_5281919444101027442" /Si eres simpatizante de la causa, programas o has programado en alguna versión de Visual Basic, y tienes blog o una página relacionada con el desarrollo, descárgate esta imagen (¡por favor, no hagas a href="http://www.emezeta.com/articulos/hotlinking-enlazando-con-estilo" title="Qué es el hotlinking"hotlinking/a!) y colócala en un lugar visible apuntando al futuro sitio web de la plataforma. Si el diseño no encaja en tu web, no te preocupes: en breve tendremos a nuestra disposición nuevos botones en tamaños menores (125 y 250 píxeles de ancho) y con ciertas variaciones estéticas y nuevos colores, e incluso versiones en Flash y Silverlight, según a href="http://www.raulmondolirondo.net" title="Blog de Raúl Mondo"Raúl Mondo/a, el diseñador que está realizando este excelente trabajo.br /br /Y no olvides que cuanto más difundamos esta iniciativa, más fuerza tendremos ante la multinacional para hacer que se replantee su estrategia.br /br /¡Larga vida a VB.NET!br /br /div style="background-color: yellow; padding: 3px; border: 1px solid black; color: black;"strong[Actualizado 29/12]/strongbr /Obviamente la noticia no es real, se trata simplemente de una broma del Día de los Inocentes, pero en cualquier caso... ¡Larga vida a VB! :-D/divbr /br /Publicado en: a href="http://www.variablenotfound.com"www.variablenotfound.com/a. pa href="http://feeds.feedburner.com/~a/vnf?a=jOxI48"img src="http://feeds.feedburner.com/~a/vnf?i=jOxI48" border="0"/img/a/pdiv class="feedflare" a href="http://feeds.feedburner.com/~f/vnf?a=fa3gO"img src="http://feeds.feedburner.com/~f/vnf?i=fa3gO" border="0"/img/a a href="http://feeds.feedburner.com/~f/vnf?a=VdxsO"img src="http://feeds.feedburner.com/~f/vnf?i=VdxsO" border="0"/img/a a href="http://feeds.feedburner.com/~f/vnf?a=6hKuO"img src="http://feeds.feedburner.com/~f/vnf?i=6hKuO" border="0"/img/a a href="http://feeds.feedburner.com/~f/vnf?a=MZfxo"img src="http://feeds.feedburner.com/~f/vnf?i=MZfxo" border="0"/img/a a href="http://feeds.feedburner.com/~f/vnf?a=DScMo"img src="http://feeds.feedburner.com/~f/vnf?i=DScMo" border="0"/img/a a href="http://feeds.feedburner.com/~f/vnf?a=FWJUo"img src="http://feeds.feedburner.com/~f/vnf?i=FWJUo" border="0"/img/a /divimg src="http://feeds.feedburner.com/~r/vnf/~4/496619057" height="1" width="1"/

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

The New Cult of Dead Cow » desarrollo

Aviso de error en la carga de imagenes

Diciembre 27th, 2008 - [Enlace local]

Algunas veces hacemos cambios o publicamos modificaciones sobre nuestros contenidos … incluso otras veces publicamos de manera descuidada, en fin sea el motivo que sea en algunos casos nuestra informacion no se presenta de manera completa ya que no cargan algunas imagenes.

Este script desarrollado en Jquery por anieto2k, nos permite obtener informacion acerca de posibles problemas con las imagenes.

$(document).ready(function(){
    $("img").bind("error", function(){
        $.post("ajax-image-error.php", {
            'image': $(this).attr("src"),
            'page': window.location.href
        });
    });
});

En este codigo, se buscan todas las imagenes y se espera que en alguna se encuentre algun error de carga. Cuando eso sucede se envia la informacion de la imagen y de la pagina que genero el error a nuestra aplicacion web a traves del archivo ajax-image-error.php.

Este archivo ya puede, luego enviar esa informacion por email, por twitter, por MSN o dejarla en la base de datos o simplemente generar un log de incidencias.

Share/Save/Bookmark

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

Información legal y técnica