Ene 21

Como llevaba toda la tarde repasando cosillas del matlab, y llevaba muchos meses sin programar, se me ocurrió hacer una pequeña y sencilla función para calcular el disco duro más económico en función de una lista de discos en la que se indica su capacidad y su precio. Es cierto que hay muchos otros factores a tener en cuenta, pero bueno, podemos hacer un pequeño parche que os cuento ahora ;) . Por lo pronto, aquí os dejo la función (muy sencilla y, por supuesto, mejorable [por ejemplo, sustituyendo los for por operaciones elemento a elemento xD]):

Uso de la función:


>> help discosduros
[precio_giga,mas_barato,mas_caro]=calculador_discos(referencias,capacidades,precios);
Esta función calcula el disco duro más barato y el más caro
de la lista especificada.

PARAMETROS DE ENTRADA:
- referencias: vector con los identificadores de los discos
OJO: las referencias deben ser un valor entero
- capacidades: vector con las capacidades de los discos
- precios: vector con los precios de los discos

PARAMETROS DE SALIDA:
- precio_giga: vector con los precios por giga de cada uno de los discos
- mas_barato: referencia del disco mas barato
- mas_caro: referencia del disco mas caro

Función en sí:


function [precio_giga,mas_barato,mas_caro]=calculador_discos(referencias,capacidades,precios);
%[precio_giga,mas_barato,mas_caro]=calculador_discos(referencias,capacidades,precios);
%Esta función calcula el disco duro más barato y el más caro
%de la lista especificada.
%
%PARAMETROS DE ENTRADA:
%- referencias: vector con los identificadores de los discos
%OJO: las referencias deben ser un valor entero
%- capacidades: vector con las capacidades de los discos
%- precios: vector con los precios de los discos
%
%PARAMETROS DE SALIDA:
%- precio_giga: vector con los precios por giga de cada uno de los discos
%- mas_barato: referencia del disco mas barato
%- mas_caro: referencia del disco mas caro

fprintf('Se va a analizar el precio de %i discos.\n',length(capacidades))

if length(precios)~=length(capacidades)
error('El numero de capacidades no corresponde con el numero de precios')
elseif length(precios)~=length(referencias)
error('El numero de referencias no corresponde con el numero de precios')
end

precio_giga=zeros(1,length(capacidades));

for i=1:length(capacidades)
precio_giga(i)=precios(i)/capacidades(i);
end

figure(1)
plot(precio_giga)
xlabel('Situacion del disco en el vector');
ylabel('Precio por giga');

mas_barato=referencias(find(precio_giga==min(precio_giga)));
mas_caro=referencias(find(precio_giga==max(precio_giga)));

fprintf('El disco mas barato es el %i\n',mas_barato);
fprintf('El disco mas caro es el %i\n',mas_caro);

Ahora vamos con los peros. Es cierto que se pueden considerar más cosas aparte de la capacidad, como la velocidad de giro, el tiempo de acceso, la caché, el fabricante… Por ejemplo, probé la función con la lista de discos de PCBox y me salió que el más económico era un Western digital, pero son discos que no me gustan, así que sería interesante acceder al segundo disco más barato. Para eso basta con introducir los siguientes comandos (quien quiera editar la función, ya sabe):


precio_giga_ordenado=sort(precio_giga);
referencias(find(precio_giga==precio_giga_ordenado(i)));

Con el primer comando reordenamos la lista de precios por giga de menor a mayor (más óptimo a menos óptimo en función de la capacidad), y con el segundo, obtenemos la referencia del disco i en esa lista ordenada (i=1 se corresponderá con el más óptimo, i=2 con el segundo más óptimo, i=length(precio_giga_ordenado) será el menos óptimo…). De esta forma, si el más óptimo no nos convence por alguna de sus características, podemos buscar la referencia del siguiente, para ver si nos sirve.

Supongo que es un método un poco chapucero de hacer todo ésto, pero bueno, me aburría y hacer la funcioncilla me sirvió para pasar el rato :P

Jul 29

Lo de siempre. Corregí un par de errores que habían quedado en el tintero (espero que no quede ninguno más) y añadí un par de categorías de juegos. Ahora no tenéis que preocuparos por la compatibilidad con las versiones 2.0 y 2.1 :P . Por cierto, si alguien sabe de algún manual decente de c++ para linux para poder ponerle un GUI al programa, que me avise, que estaré encantado de hacerlo.

EDITADO: incluyo también el ejecutable para MacOS X – intel por cortesía de Manueru. Por cierto, si queréis compilar el programa para MacOS X, no hay que hacer ningún cambio. Se compila con el comando indicado en el txt que incluyo en el paquete.

Jul 21

Con la actualización del GCC me percaté de que había un par de errores de programación en “lista de software”. Los acabo de corregir, así que ya tenéis a vuestra disposición la versión 2.1. Por cierto, lussac, coméntame cómo va el formato SQL que igual le metemos un parche al programa ;) .

Jul 16

No sé si recordaréis que hace un año hice un programa-base de datos para listar software. El asunto es que el programilla en sí era un poco chapucero, así que pensé que podía mejorarlo. Me puse a trabajar en él hace unos días y conseguí reducir el código de 7500 líneas a 2000 y pico, además de simplificar su funcionamiento. Para los que estuvieseis usando la versión antigua (que no creo que haya nadie aparte de mí xD) siento deciros que la base de datos es incompatible con esta nueva versión (de hecho la simplificación se basa en una mejora del formato de la base de datos), así que si tenéis algo guardado, tendríais que volver a introducirlo con el nuevo programa. No hice ningún parche para pasar de una base de datos a la otra porque, a pesar de que no debería ser muy complicado, sí sería muy trabajoso, y muy fácil que se cargase información, así que preferí pasar de todo.

Pues nada, los que queráis usar el programa (o probarlo y comentarme vuestra opinión al menos :P ) no tenéis más que descargarlo y ejecutarlo. El ejecutable que trae está compilado para un Pentium IV, por lo que si no tenéis ese procesador, muy probablemente no os funcione. De todas formas también va el código fuente, así que basta que lo compiléis (gcc -Wall *.c -o nombre-del-ejecutable).

Si a alguien le apetece portar el código a windows, le agradecería que luego me lo pasase para colgarlo también (a mí me da mucha pereza :P ). Ah, y si encontráis errores, no dudéis en avisarme para corregirlos ;) . Por cierto, el programa es GPL :P

May 01

Añadí un par de pequeñas mejoras, pero lo más importante es que ahora está publicado bajo licencia GPL ^^. Los seguidores del software libre sabréis de lo que hablo. Además la testeé bastante, así que pocos bugs deben quedar por el medio. De todas formas, ya sabéis, si encontráis algún fallo, avisadme.

Ah, estoy buscando un colaborador que esté dispuesto a cambiar el código para hacer la versión windows del programa. ¿Algún voluntario?

Lista_de_software-1.2.tar.gz

Abr 24

Hola de nuevo. Acabo de solucionar un par de errores sin importancia en el programilla, y además añadí la opción de exportarla a TXT, para mayor comodidad. Disfrutadla.

Lista_de_software-1.1beta.tar.gz

Abr 20

Buenas, señores. Para alegría de unos pocos e indiferencia de los más, voy a colgar aquí un programa que acabo de hacer. Os cuento el asunto.

Yo desde hace unos años vengo listando todo el software que llega a mis manos (juegos, películas, programas, etc). Antes tenía una lista en HTML y tal, pero era un coñazo añadir entradas, así que me propuse hacer un programa en C que se encargase de todo. El resultado es lo que os cuelgo aquí. El ejecutable es sólo para linuxeros (los que paguen una licencia de Windows, que levanten la mano), aunque de todas formas incluyo el código. Quien se sienta con ánimos sólo tiene que compilarlo para windows (y cambiar las llamadas al sistema, que en windows son diferentes, pero sólo son 4 líneas).

Por el momento, el programa sólo permite añadir información a la base de datos y consultarla posteriormente (ordenada). No puse manual de usuario, porque me pareció lo suficientemente sencillo como para usarlo cualquiera. De todas formas, para dudas, opiniones, recomendaciones y reporte de errores, estaré atento a todas vuestras críticas. A medida que vaya añadiéndole cosas, lo iré colgando.

Lista_de_software-1.0beta

Mar 04

Nosotros, los telequitos de la Universidad de Vigo, tenemos que pasar por una asignatura (más bien una piedra en el riñón) conocida como Ingeniería de Software -I (IS-I, para los amigos). Como digo siempre, podría ser la asignatura estrella de 2º, y sin embargo es una verdadera tocadura de cojones. Es una tocadura de cojones por el plan en el que se pone el profesorado a veces, es una tocadura de cojones por el temario teórico y es una tocadura de cojones por el planteamiento de la asignatura. Vayamos por partes.

La asignatura en cuestión consta de parte práctica y parte teórica. La teórica es un verdadero ladrillo. Trata de métodos de creación de software (lo que es la ingeniería de software, vaya) y detalles por el estilo que te tienes que saber de carrerilla, y que si no plasmas en el examen tal cual, no merecen ni una cuarta parte de la nota. La parte práctica es todavía más acojonante. En principio consta de hacer un proyecto, un programa que cumpla unas determinadas especificaciones. El proyecto se hace en Pascal, y la extensión es de unas 2000-3000 lineas dependiendo del año. Sí, Pascal, habéis leído bien. Ese lenguaje de juguete que además de no servir para nada, es incompatible entre versiones. Si haces un fichero con un programa compilado con una versión del compilador, lo más probable es que ese fichero no funcione bien con un programa compilado con otra versión. Aparte de hacer el proyecto, hay que hacer la documentación del proyecto; es decir, los manuales tanto de usuario como de referencia.

Ahora vamos con mis vivencias. La parte práctica hay que hacerla a webos por parejas. Si te toca alguien que no te gusta te jodes. Si te toca alguien que no trabaja también te jodes. Por último, si te toca alguien que no sabe programar… sí, adivinasteis, también te jodes. A mí me tocó con un chaval que no es que no supiera programar, sino que su forma de programar distaba bastante de la mía (con el consecuente pseudocabreo por parte de ambos). Pues eso, nos curramos nuestro proyecto, nos presentamos en febrero y… ¡SORPRESA! Cargamos los dos.

Como no me apañaba con la parte del proyecto que programó él, opté por rehacerlo por completo para el examen de septiembre (por supuesto, en el código constaba el nombre de ambos). Me presento al examen de septiembre con mi proyecto nuevo flamante. Nueva sorpresa, acababan de cambiar la versión del compilador, por lo que no funcionaban los ficheros de prueba de nadie; pero todavía hay más, porque eso sólo nos pasaba a los que estábamos haciendo el examen en ese laboratorio, y no en los demás, en los que permanecía la versión antigua. Lo mejor de todo es que no era que el programa no reconociese los archivos, sino que parecía que funcionaba correctamente, pero escribía caracteres extraños y en sitios en los que no debería, por lo que lo primero que te venía a la cabeza era que tu programa estaba mal. Tenía una duda con respecto a uno de los problemas, se lo pregunté al profesor y me lo explicó (quedaos con ésto último). Durante el examen, uno de los profesores nos “recordó” (no constaba esa fecha en ningún sitio) que ése era el último día para entregar la documentación. Y claro, como supondréis, yo no la tenía todavía hecha. Le pregunté a ese “buen” hombre qué podía hacer, y me dio un día más de plazo. Por supuesto, esa noche no dormí terminando la dichosa documentación. Al día siguiente se la entregué y tachaaaan, las notas salieron justo una hora después. Tachaaaaaaaaaan, suspenso con un 4,5. Al proyecto le hacían pasar unas 30 pruebas, cada una de las cuales te proporcionaba una fracción de la nota. Por culpa de ese problema que me explicaron (y lo hicieron al revés), me cascaban CINCO pruebas, y tan sólo necesitaba una más para aprobar. En la corrección de esa asignatura permiten hacer pequeñas correcciones en el código del programa (previa penalización, por supuesto), y añadiendo una mísera línea, podía poner bien ese problema y pasar esas cinco pruebas. Pues bien, NO ME DEJARON CORREGIRLO. En cuanto al práctico, lo aprobé sin problemas, con un 7 sobre 8.

Diciembre. Me presenté de nuevo al examen. Me salió bastante mal, pero bueno, al final saqué un 7 (éste sobre 10). Aprobado al fin.

Febrero. Me dispuse a consultar mi expediente y observé con estupor que ¡SORPRESA! No salgo como aprobado porque no consta que me haya presentado en diciembre. Le envié un e-mail al profesor de la asignatura. Esperé un día… dos días… tres días… dos semanas… y no contestaba, así que le envié uno a que lleva la parte de laboratorio. Me contestó diciendo que sí, que tenía razón y que se les había ido la olla con mi expediente. Que ya lo corregirían. Un par de días después ya sale mi nota. Un… ¿¿¿APROBADO??? Volví a enviar un e-mail al hombre ese preguntándole de qué forma ponderaban la nota, porque a mí no me daban las cuentas. Volvió a contestarme diciendo que sí, que volvía a tener razón, y que ellos se habían vuelto a equivocar. Al final, hace un par de días me pusieron la nota correctamente, más de un año después del comienzo del viaje.

Hoy salieron las notas de la nueva tanda de porculizados con esa asignatura y todos comentan asuntos parecidos. En fin, repito lo dicho al comienzo; pudiendo ser la asignatura estrella de 2º, no es más que una verdadera tocadura de cojones.

Dic 12

Hola de nuevo. Aquí estoy yo, a estas intempestuosas horas de la noche, en lugar de irme para cama a cobrar ese merecido descanso que tan duramente me gané a lo largo de toda la tarde.

La rutina de hoy consistió en darle los retoques finales al maravilloso programa de Ingeniería de Software – I, con el que me toca afrontar el examen del miércoles. ¿A qué viene esto?, os preguntaréis. Muy sencillo. Simplemente quería compartir un pensamiento que lleva rondándome toda la tarde. ¿Os disteis cuenta de que hacer un programa es algo parecido a tener críos? Al principio piensas que va a ir todo sobre ruedas, total, la teoría ya te la sabes. Entonces empiezas a programar, pero no es tan sencillo como pensabas, y no sale a la primera (eso pasa porque lo estás buscando. Cuando no es intencionado, sale enseguida xDDD). Tras mucho esfuerzo e intentos consigues tener tu maravilloso programa. El condenado no hace lo que esperas que haga, pero bueno, da lo mismo, te sientes orgulloso de él igual xDDD.

Pues nada, esa era la ralladura que llevo teniendo todo el día en mente. Casi que me voy para la piltra, que el cansancio me puede ;)