Vamos a echar una carrerita

miércoles, 1 de agosto de 2007

Es la primera vez que hago cositas con GD, así que no seais muy duros conmigo. He escrito un script para generar una imagen similar a la del tipo de la Wii. Es bastante difícil, pero no me importaría llegar a los 86 kilos que tiene como meta.


$kilos = intval($_GET['kilos']);
if ($kilos == 0) $kilos = 111;

$iniciolinea = 10;
$finlinea = 270;
$iniciokilos = 126;
$finkilos = 86;
$fuentegrande = 5;
$fuentepeque = 4;
$fuentemini = 2;
$anchofuentegrande = imagefontwidth($fuentegrande);
$anchofuentepeque = imagefontwidth($fuentepeque);
$anchofuentemini = imagefontwidth($fuentemini);
$yimagen = 25;
$url = 'ecao.blogspot.com';
$diferenciakilos = $iniciokilos - $finkilos;
$diferencialinea = $finlinea - $iniciolinea;
$kilosperdidos = $iniciokilos - $kilos;
$kilosquefaltan = $kilos - $finkilos;
$x = $iniciolinea + intval((($kilosperdidos) * $diferencialinea) / $diferenciakilos) - 18;
$mensaje = "$kilosperdidos kgs perdidos, quedan $kilosquefaltan kgs!";
$anchomensaje = $anchofuentemini * strlen($mensaje);
$xmensaje = intval((280 - $anchomensaje) / 2);
$xkilos = $x - 40;
$anchobocadillo = 40;
$altobocadillo = 25;
$xcentrobocadillo = $xkilos + 13;


// imagenes de las que partimos
$imagen = imagecreate(280, 100);
$imagencaballero = imagecreatefromgif("knight.gif");
$base = imagesy($imagencaballero) + $yimagen;
$ykilos = $base - 50;
$ycentrobocadillo = $ykilos + 8;

// situamos al caballero
imagecopymerge($imagen,$imagencaballero, $x, $yimagen, 0,0, imagesx($imagencaballero), imagesy($imagencaballero), 100);

// colores a utilizar
$colorgris = imagecolorallocate($imagen, 169, 170, 173);
$colorceleste = imagecolorallocate($imagen, 50, 195, 239);


// regla
imageline($imagen, $iniciolinea, $base, $finlinea, $base, $colorgris);
for ($k = $iniciokilos; $k >= $finkilos; $k-=2)
{
 $xlinea = $iniciolinea + intval((($iniciokilos - $k) * $diferencialinea) / $diferenciakilos);
 $alto =  ($k % 10 == 0) ? 10 : 5; 
 imageline($imagen, $xlinea, $base+3, $xlinea, $base+$alto, $colorgris);
} 

// url
imagestring($imagen, $fuentepeque, $finlinea - ($anchofuentepeque * strlen($url)), 3, $url, $colorgris);

// kilos de origen / destino
imagestring($imagen, $fuentegrande, $iniciolinea, $base + 12, $iniciokilos, $colorceleste);
imagestring($imagen, $fuentegrande, $finlinea - ($anchofuentegrande * strlen($finkilos)), $base + 12, $finkilos, $colorceleste);

// bocadillo con kilos actuales
imagestring($imagen, $fuentegrande, $xkilos, $ykilos, $kilos, $colorceleste);
imageellipse($imagen, $xcentrobocadillo, $ycentrobocadillo, $anchobocadillo, $altobocadillo, $colorgris);
imageline($imagen, $xcentrobocadillo + ($anchobocadillo / 2), $ycentrobocadillo + 5, $x + 3, $ycentrobocadillo + 8, $colorgris);

// mensaje con los kilos perdidos y que faltan
imagestring($imagen, $fuentemini, $xmensaje, $base + 13, $mensaje, $colorgris);

// vuelca la imagen
header("Content-type: image/gif");
imagegif($imagen);
imagedestroy($imagen);

Para hacerlo funcionar, solo hay que copiarlo (junto con una imagen knight.gif al servidor Web (con soporte de PHP y GD) y pasarle como parámetro el numero de kilos de peso. Por ejemplo: http://localhost/evolucionpeso.php?kilos=111

Tonteando con UML

Hoy estoy jugando un poco con el UML en el trabajo. Tengo que describir una serie de paquetes de procedimientos en Oracle y relacionarlos con los subsistemas de proceso (cada uno de los cuáles trabaja sobre un esquema (usuario) de Oracle distinto). Se me ha ocurrido describir cada paquete de procedimientos de la base de datos como un "componente"; agruparlos dentro del "paquete" del subsistema y enumerar las funciones de dicho paquete que se aplican al mismo subsistema. Ya sé que es difícil de entender, pero el objetivo de todo esto es precisamente todo lo contrario: facilitar la comprensión de la estructura presentándola de una manera gráfica... Seguramente lo esté haciendo mal, por eso lo pongo aquí, y si alguien me corrije, pues eso que aprendo...

Ayer volví a hacer media hora de bicicleta (11,8 km), no dormí siesta (continué la lectura de E5D), pero comí demasiado pan y cené tarde. Si sumamos la enorme cantidad de líquido que bebí (Aquarius sobre todo) pueden explicar que mantenga los 111.2 otro día más.

DsD#137: 111.2

Retomando El Quinto Dia

martes, 31 de julio de 2007

Ayer, a la hora de la siesta, en lugar de echar el correspondiente sueñecito, abrí el libro de "El Quinto Día" de Frank Schätzing (foto) por donde lo dejé. Ya lo he mencionado varias veces en estas páginas. Es un libro muy largo, imposible de leer del tirón, pero no me cuesta nada volver a él. Empecé a leerlo en Septiembre del año pasado, a ver si, aprovechando la tranquilidad de la sobremesa, puedo terminarlo antes de Septiembre de 2007.

Como viene siendo habitual, sigo sin hacer ejercicio y cenando tarde. Es difícil ponerse en movimiento con más de 40 grados en Sevilla (aunque sea solo una escusa).

DsD#136: 111.2

Actualizar imagen Squeak a traves de proxy

lunes, 30 de julio de 2007

Estoy siguiendo el tutorial de Stephan B. Wessels y me he encontrado pronto con el primer problema: no puedo actualizar Squeak porque aquí todas las comunicaciones se realizan a través de proxy.

La solución pasa por decirle al sistema que utilice un proxy (dicho así parece de perogrullo). Una vez encontrada la solución, todo es facil. Abres un Workplace y escribes lo siguiente:
HTTPSocket useProxyServerNamed: 'nombreproxy' port: 8080.
Luego seleccionas el texto, le das al botón derecho y selecciona 'do it (d)'

Para actualizar la imagen, como dice el tutorial, seleccionas "help" y luego "update code from server".

Una de piratas

Este fin de semana TuX recibió la visita de Bolo, el perro de unos familiares de Cáceres. Aunque al principio se pelearon por el territorio, después de unos cuantos paseos juntos, se pasaron muchisimas horas jugando juntos.

El Viernes por la noche fuimos a Cinequinto, al cine de verano a ver "Los Simpsons" y, aunque la película no estuvo mal (lo que pude ver), los encargados del chiringuito hicieron todo lo posible por arruinar la noche. Después de hacer el pedido, pagar y esperar quince minutos, nos enteramos de que el pedido "se había perdido" y, no solo eso, sino que también se habían acabado casi todos los platos, así que nos devolvieron el dinero sin perdirnos siquiera disculpas. Es increible lo mal que llevan el bar del cine de verano. No me extraña que no se llene...

El Sábado tocó ir a Isla Mágica. Hizo muchísimo calor, así que fuímos a partir de las 8:30. Los pies acabaron destrozados, y bebimos litros de refrescos y agua. Los crios se lo pasaron en grande (y los mayores también)

El Domingo descansamos un poco, aunque los pequeños aún tuvieron fuerzas para dos sesiones de piscina. Como fin de fiesta hicimos un karaoke con la PS2, hombres contra mujeres. Después de un concurso muy disputado, y varias trampas por parte de las féminas, la cosa quedó empatada. El desempate será en otra ocasión.

En las comidas, todo fué un descontrol, y a pesar de estar totalmente agotado, no he hecho nada de ejercicio en todo el fin de semana.

DsD#135: 111.2

Solomillo a la mostaza

viernes, 27 de julio de 2007

Me estoy hinchando. Ayer, nueva siestecita de 2 horas, nada de ejercicio y cena en la terraza del Síbaris (solomillo a la mostaza, ummm). Estoy perdiendo el control, tengo que recuperarlo como sea.

DsD#132: 111.5

USBXtreme funciona y la grua tambien

jueves, 26 de julio de 2007

Ayer, aunque parezca increible, una grúa municipal se llevó un coche del vado de nuestro garage. De las cinco o seis veces que hemos llamado, ésta ha sido la primera vez que ha servido de algo. Es una pena, pero no me dió tiempo de hacer ninguna foto para inmortalizar el suceso.

Finalmente hice funcionar el USBXtreme. Copié los dos juegos que tenía para la Playstation 2 en el disco USB y los arranqué desde el DVD del programa. En las reproducciones de video se notan parones cada 3 o 4 segundos, pero la comodidad de tener todas las "copias de seguridad" accesibles desde un solo disco USB no tiene precio.

No hice ni bicicleta, ni piscina, y me eché una buena siesta, así que podemos decir que fué un día de descanso.

DsD#131: 111.3

Que no decaiga

miércoles, 25 de julio de 2007

Ayer, después del sofocón del peso, hice doble sesion piscina/bici (sin pasarme, 10.8 km en media hora). Eso y tener que subir la compra del Mercadona me dejó agotado y casi me duermo viendo "Leyendas de Pasión" en la tele. Por la mañana, me he pesado dos veces, una 111.3 y otra 110.9, así que me apuntaré 111.1. Por cierto, el interfaz del peso Sanetek es peor que el de una lavadora. Menos mal que he aprendido a utilizarlo como peso corriente y moliente, porque tiene mas funciones que un CASIO de los gordos.

Sobre la elección del lenguaje a aprender, me he decidido por Squeak a pesar de que María opina que ya nadie programa en Smalltalk.

DsD#130: 111.1

111

martes, 24 de julio de 2007

Harto de las variaciones de la báscula Tefal, me he comprado otra (Sanatek). Ha sido una desagradable sorpresa ver que, en lugar de los 105.6, peso realmente 111.3. Casi 6 kilos mas. Para asegurarme he utilizado otra vieja báscula analógica y, efectivamente estoy sobre los 111. Voy a tomármelo como si en lugar de partir de 120 kilos, al principio tuviera casi 126.

Un lenguaje de programacion al año no hace daño

Según The Pragmatic Programmer,

Aprende al menos un nuevo lenguaje [de programación] cada año. Cada lenguaje resuelve el mismo problema de una manera distinta. Aprendiendo diferentes soluciones, consigues abrir tus ideas y te ayuda a desbloquearte

Pero, ¿cúal debería ser el de 2007?

  • Java: es el más popular y el más pijo. En España se programa mucho en Java, o eso parece según las distintas bolsas de trabajo.
  • Javascript/AJAX: es la moda y siempre es necesario utilices el lenguaje que utilices de lado del servidor web.
  • Perl: es el lenguaje de los sysadmins (aunque ahora no trabajo en ello)
  • Python: es el lenguaje más completo, ya que se utiliza en casi todos los ámbitos, aunque flojea un poco en web.
  • Ruby: el Ruby On Rails está empezando a ser muy utilizado, y practicamente nadie habla mal de Ruby.
  • Squeak: el Smalltalk es el lenguaje de los objetos, me ayudaría a tener una base fuerte en esta tecnología (POO) así como en pruebas unitarias. Tiene un potente entorno gráfico y un framework web llamado Seaside
  • Scheme: es elegante, y existe un libro mítico para aprender a programar que lo utiliza.
  • TCL/TK: está siendo sustituido por Python, pero es más sencillo y se dispone del código del Ars Digita Community System de P.Greenspun