Archivo de la categoría Programación

Tira del día de Garfield



Aprovechando que desde Garfield.com se ofrece cada día una tira cómica diferente, he realizado un pequeño script en Javascript que permite incluirla en nuestro site.

Está probado con Internet Explorer 6, Firefox 1.0.6 y Opera 8.10 bajo Windows, por lo que debería ser compatible con la mayoría de navegadores y plataformas disponibles.

El código no es gran cosa (lo he programado en 10 minutos), pero si quieres añadir esta característica a tus páginas, ahorrándote reinventar la rueda, o mejorarlo tomando algo como base, aquí lo tienes:

<script language="Javascript">
var sUrl='';
var dteHoy=new Date();
var dteAyer=new Date(dteHoy.getFullYear(), dteHoy.getMonth(), dteHoy.getDate()-1);
dteHoy=null;

if (dteAyer.getFullYear()<100)
{
sUrl+='http://images.ucomics.com/comics/ga/' + (dteAyer.getFullYear() + 2000) + '/';
}
else
{
sUrl+='http://images.ucomics.com/comics/ga/' + dteAyer.getFullYear() + '/';
}
if ((dteAyer.getFullYear() – 2000)<10)
{
sUrl+='ga0' + (dteAyer.getFullYear() – 2000);
}
else
{
sUrl+='ga' + (dteAyer.getFullYear() – 2000);
}
if ((dteAyer.getMonth() + 1)<10)
{
sUrl+='0' + (dteAyer.getMonth() + 1);
}
else
{
sUrl+=(dteAyer.getMonth() + 1);
}
if (dteAyer.getDate()<10)
{
sUrl+='0' + dteAyer.getDate();
}
else
{
sUrl+=dteAyer.getDate();
}
sUrl+='.gif';
dteAyer=null;

document.write('<a href="http://www.garfield.com/comics/comics_todays.html" target="_blank"><img src="' + sUrl + '" title="La tira de Garfield de hoy" border=0></a>');
</script>

Por supuesto, también puedes poner directamente un enlace a www.javiergutierrezchamorro.com/comments.php?y=05&m=09&entry=entry050914-004736.…

Continuar leyendo...

PHPEd



NuSphere, acaba de remodelar su ya excelente PHPEd, actualizándolo a la versión 4.

PHPEd es un IDE (Entorno de Desarrollo Integrado) para PHP, que integra no solamente un editor de código, sino también acceso a base de datos, un depurador, un perfilador, control de versiones, y documentación adicional.

El editor es sencillamente excelente. Se ejecuta rápidamente, las funciones de autocompletar son capaces de explorar varios archivos del proyecto, y las instancias de clases, …

El paquete incluye lo necesario para poder desarrollar, sin necesidad de tener que instalar PHP y un servidor web en nuestra máquina, aunque si lo tenemos, podremos utilizarlo.…

Continuar leyendo...

Combo de provincias



Habitualmente necesitamos programar formularios de registro de usuarios, que incluyan un selector de provincia.

Por mi experiencia, este dato simplemente consta dentro de la base de datos, pero no se utiliza en el resto del aplicativo web, por lo que no suele valer la pena crear una tabla en base de datos específicamente para este menester.

Así que nos suele tocar buscar algún formulario que incluya las 51 provincias españolas, y copiarlo en nuestra página. Luego hay que revisarlo, puede que el listado no esté completo, o estén escritos en algún idioma autonómico concreto, o el HTML no sea correcto, … Incluso algunas veces hemos tenido que recurrir al típico atlas en internet, y hemos montado el combo desde cero…

Para ahorraros trabajo, aquí tenéis el código HTML para montar el cuadro de lista desplegable (combo) con las 51 provincias de España.…

Continuar leyendo...

Prefetch Google Ads para Opera



Partiendo del Google ad prefetch original para Firefox, he decidido portarlo como un script de usuario (userscript) de Opera.

Cuando está activado, lo que va haciendo es precargar en segundo plano, y sin que afecte a nuestro trabajo, todos los enlaces Adsense de Google con los que nos vayamos encontrando. Dicho de otro modo, se encarga de ir pinchando sistemáticamente este tipo de banners, de manera que el webmaster de la página se saque un dinerito con nuestro paso.

La tarea de conversión, ha sido sencilla, pues las diferencias entre GreaseMonkey y el soporte ofrecido por Opera 8 son mínimas.

Para que funcione, deberás tener Javascript activado.…

Continuar leyendo...

Flash Player 8 beta



Ya está disponible la primera beta pública del reproductor de Flash versión 8.

Después de muchos rumores sobre las nuevas funcionalidades, y grandes especulaciones sobre un rendimiento muy mejorado, por fin he podido echarle un vistazo.

Para ello he utilizado mi antiguo Flash Benchmark.

– Flash Player 7: 2803+.
– Flash Player 8: 4106+.

Sin duda una buena mejora, al menos en lo que a cálculos se refiere.…

Continuar leyendo...

Turbo C 1.0 el comienzo



Ya sabéis que soy entusiasta de Borland, seguramente por que fue con lo que empecé.

Tras haber trabajado con Turbo Basic 1.0, y con Turbo Pascal 4, vi en un libro de C, del que no recuerdo el título, algunos pantallazos de ésta herramienta.

Era un IDE conocido, pero con características de optimización de nivel profesional, que no estaban disponibles en los otro entornos de programación de la compañía. Además C, sonaba extremadamente potente.

No fue hasta Turbo C 2.0, que añadía capacidades gráficas, mejoraba el entorno en la linea de Turbo Pascal 5, e incluía una ayuda más completa que pude dar mis primeros pasos.…

Continuar leyendo...

Diferentes maneras de crear un Sitemap



El servicio de Google Sitemaps, todavía en beta, pretende acabar con la internet invisible. Es decir todas aquellas páginas que pese a formar parte de la World Wide Web, no son accesibles por los buscadores, y por tanto, tampoco por los usuarios.

El proceso comienza creando un archivo de mapa del sitio, que es procesado por el robot de Google. Al ser el protocolo Creative Commons, es de esperar que el resto de robots acaben soportándolo.

Hay diferentes formas de crear el archivo de mapa:
1) Archivo de texto
Un archivo de texto plano que contiene URL que deben ser indexadas por el robot, separadas por saltos de linea.…

Continuar leyendo...

Corrigiendo al programador



Cuando preparaba mi anterior artículo Bucles invertidos, pude sorprenderme muy agradablemente con el optimizador de Visual C++ 7.1 (2003).

El código:

1 2 3 4 unsigned int i; for (i=0; i<100; i++) { }

Queda compilado a nada. Es evidente que el bucle no realiza ninguna operación, por lo que el optimizador del compilador, lo detecta, y lo elimina.

Más sorprendente es:

1 2 3 4 5 unsigned int i; for (i=0; i<100; i++) { } return(i);

Se transforma a código ensamblador así:

1 2 mov eax, 100 ret

Lo que si lo volviéramos a transcribir en C, sería:

1 return(100);

Como vemos, el propio compilador ha detectado código escrito pobremente, para en la medida de lo posible, mejorarlo.…

Continuar leyendo...

¿Cómo abrir popups accesibles?



Para facilitar la accesibilidad de nuestras páginas, conviene evitar el uso de Javascript en los enlaces.

Esto facilitará la navegación a los robots de los buscadores, a los usuarios con navegadores limitados, y a los usuarios impedidos. Es evidente que las ventajas son múltiples.

¿Pero, si no utilizamos Javascript, como vamos a poder abrir el popup?

El truco es muy sencillo, consiste en hacer que el enlace sea un link normal, que el Javascript (si está disponible) se encarga de abrir.

Algo así:

1 <a href="index.php" onClick="javascript:window.open(this.href, "wndPopup", "width=300,height=300"); return(false);">Abrir popup></a>

Y este sería el resultado: Abrir popup.…

Continuar leyendo...

Bucles invertidos



Estamos acostumbrados a hacer los bucles en forma ascendente, lo cual es conveniente en muchos casos.

En otros en cambio, podemos recorrerlos de mayor a menor. Pero, ¿qué ventaja nos daría hacerlo así?

Muy sencillo, de eficiencia. Los bucles descendentes, suelen ser más eficientes que los ascendentes. En particular lo son en estos dos casos:

1) La expresión de inicio es más sencilla que la de fin.
Es el caso más habitual, reescribiéndolo para que vaya de fin hasta inicio, se evita tener que reevaluar una condición complicada en cada iteración.

Es mejor:
for (i=strlen(a); i>0; i–)

que
for (i=0; i<strlen(a); i++)
Ya que nos ahorramos tener que llamar a strlen(a) 100 veces.…

Continuar leyendo...