29 mayo 2006

Las 20 respuestas

.... Las 20 respuestas que más utilizan los programadores cuando sus programas no funcionan:

Pues es raro?

Nunca había pasado antes.

Pues ayer funcionaba?

¿Cómo es posible?

Tiene que ser un problema de tu hardware.

¿Qué hiciste mal para lograr que fallara?

Algo debe de estar mal en tus datos.

¡Si no he tocado ese módulo en meses!

Debes de estar usando una versión anterior.

Es sólo una desafortunada coincidencia.

¡Es que no lo puedo probar todo!

ESTO, no puede ser la causa de ESO.

Funciona, pero no lo he probado.

¡Alguien debe de haber cambiado mi código!

¿Has comprobado que no haya algún virus en tu sistema?

Ya se que no funciona, ¿pero te gusta?

No puedes utilizar esa versión en tu sistema

¿Por qué quieres hacer eso?

¿Y tú dónde estabas cuando se colgó el programa?

¡EN MI MÁQUINA SI FUNCIONA!

28 mayo 2006

El intérprete de comandos Tcsh


Tcsh es un intérprete de comandos para Unix compatible con el intérprete csh. Está disponible gratuitamente en aquí, se distribuye bajo licencia BSD y tiene una sintaxis similar a la de C. Es el intérprete por defecto en FreeBSD y de otros sistemas Unix, también está disponible en muchas distribuciones de Linux.

Voy a comentar algunos aspectos menos conocidos de Tcsh. El intérprete tiene muchas más posibilidades que no comento en el texto (historial, pila de directorios...), sólo voy a hablar de las características que más utilizo. Posiblemente muchas estas características están disponibles en otros intérpretes como GNU Bash o Zsh. Para conocer más a fondo todo lo referente a Tcsh, lo mejor es su página de man.

Autocompletar

Tcsh autocompleta los nombres de fichero y directorios con la tecla TAB. Por defecto no muestra la lista de posibles nombres de fichero como hace GNU Bash, para que se muestre la lista hay que definir la variable autolist.

% set autolist

% cd EDA/[TAB]
libJava/ progJava/
% cd EDA/li[TAB]
% cd EDA/libJava

Tcsh también completa nombres de variables del shell.

% echo $h[TAB]
history home
% echo $ho[TAB]
% echo $home

Y logins de usuarios del sistema:

% echo ~n[TAB]
news nfsnobody nobody nscd ntp
% echo ~ne[TAB]
% echo ~news

Las variables listmax y listmaxrows se pueden definir y limitan el nmero de posibilidades que autolist muestra.

% set listmax=10
% cd ~[TAB]
Existen 1024 ítems, listarlas de todos modos? [n/s]

Qué más se podría autocompletar? Tcsh también permite autocompletar parámetros en la líea de comandos.

Esta característica requiere que configuremos previamente cómo queremos que se autocomplete cada comando. Para ello utilizamos el comando complete.

En este ejemplo indicamos que complete el comando ssh con alguna linea del fichero .hosts.

% complete ssh 'p/1/`cat ~/.hosts`/'
% ssh [TAB]
192.168.1.100 alien3.dsic.upv.es localhost
% ssh

Ejemplo con el comando kill. Se definen 2 posibilidades de autocompletar: si se ha escrito un guión se autocompleta con nombres de señales y si no se autocompleta con PIDs.

% complete kill 'c/-/S/' 'p/*/`ps
| awk \{print\ \$1\}`/'
% kill [TAB]
15800 16005 16251 16252 PID

% kill -T[TAB]
TRAP TERM TSTP TTIN TTOU
% kill -T

Autocorrección

Tcsh puede detectar cuando hemos escrito mal un comando y sugerir el comando correcto. Para ctivar esta opción hay que definir la variable correct. Si le damos el valor cmd sólo corregirá el nombre del ejecutable, si ponemos all corregirá también nombres de archivo y de directorio.
% set correct=cmd
% lls
CORRECT>ls (y|n|e|a)? sí
Desktop EDA
% set correct=all
% ls /dv
CORRECT>ls /dev (y|n|e|a)?

Comodines en los nombres de archivo

El más conocido es el '*' que representa cualquier cadena de cualquier extensión.
% ls
1.c 1.h 2.c 2.h 3.c 3.h 4.c 4.h 5.c 6.c 7.c 78.c
% ls *.h
1.h 2.h 3.h 4.h

El símbolo '?' puede representar cualquier carácter, pero sólo uno por cada '?' que escribamos.

% ls ??.c
78.c
% ls ?.h

1.h 2.h 3.h 4.h

'?' se sustituye por cualquier carácter, si queremos que se sustituya por algunos caracteres en concreto hay q usar los corchetes '[]'. Le indicamos los caracteres que queramos entre '[' y ']'.

% ls [89].c
8.c 9.c

Se pueden indicar rangos de caracteres usando el símbolo '-'.

% ls [1-5].c
1.c 2.c 3.c 4.c 5.c
% echo 1.[a-z]
1.c 1.h

Se pueden invertir la sustitución de nombres con '^'. Si escribimos un nombre de ficheros con '^' se sustituiría por todos los ficheros que no cumplen esa condición.

% ls ^??.c
1.c 1.h 2.c 2.h 3.c 3.h 4.c 4.h 5.c 6.c 7.c 8.c
% ls ^*.c
1.h 2.h 3.h 4.h

Con los anteriores comodines podemos crear sustituciones para nombres de ficheros que existieran. Las llaves '{}' pueden usarse para crear sustituciones de ficheros inexistentes. Eso no sirve para nada en comandos como ls o rm, pero puede ser til en otros como touch o mail.

% touch prg.{c,h,txt}
% ls
prg.c prg.h prg.txt
% mail {root,webmaster}@lalala.com
Subject:
......
(envia un mail a root@lalala.com
y webmaster@lalala.com)
No es posible utilizar a la vez '^' y '{}'. Tcsh ignorará el carácter '^' en caso de encontrarlos juntos. Salvo esta excepción el resto de comodines se pueden utilizar juntos e incluso anidarse unos dentro de otros.

Scripting

Tcsh ejecuta scripts con la sintaxis de csh, que es parecida de la C (de ahí su nombre). Algunos textos que hay por ahí (por ejemplo este) recomiendan NO usar Tcsh y csh para ejecutar scripts precisamente por su sintaxis: no son capaces de ejecutar scrips estandar POSIX. Los sistemas que incluyen Tcsh por defecto también incluye un intérprete Sh que es el que debería ser usado para ejecutar scripts. Quien quiera aprender tcsh-scripting que lea la página del man.

Fin

Si quieres probar Tcsh sólo tienes que ejercutar tcsh en tu sistema operativo si lo tienes instalado. Si quieres que sea tu intérprete por defecto tendrá que usar chsh.

27 mayo 2006

Programas gratuitos para Windows

Todo el mundo tiene instalado en su ordenador programas como el MS Office, el WinRar, la mayoría sin haberlos pagado. ¿Porqué no utilizar otros programas similares pero gratuitos? Por ejemplo el Office cuesta en las tiendas más de 300 euros (la versión básica sólo con Word y Excel). ¿Quién pagaría ese dinero para escribir un trabajo del clase de vez en cuando o para ver los PowerPoints que te mandan por correo con chistes?

Aparte de los programas de pago, Windows XP viene con una serie de programas instalados que todo el mundo utiliza. Pero existen programas gratuitos que son mucho mejores que estos y que son los que deberían utilizarse. El Internet Explorer, el Outlook Express y el Windows Media Player en general son un peligro para la integridad de los ordenadores y hay que evitar su uso para no tener que estar reinstalando el Windows cada poco tiempo.

Pongo aquí una lista de programas gratuitos para Windows XP que están muy bien. Son los que yo gasto normalmente, si alguien conoce algún otro que lo diga y lo añadiré.

7zip: Programa que comprime y descomprime en muchos formatos (zip, rar, tar.gz...). Es parecido al WinRar y WinZip pero gratis. Bajatelo de aquí.

VLC media player: Un reproductor de videos y música muy bueno. No suele tener problemas para reproducir ningún video. Descargalo de aquí.

Mozilla Thunderbird: Si utilizas Outlook Express para leer el correo, te recomiendo instalar Mozilla Thunderbird, es mucho mejor y además Outlook tiene graves problemas de diseño y es un peligro para tu ordenador. Bajatelo de aquí.

Mozilla Firefox: Actualmente el mejor navegador que existe. Si lo utilizas estarás un poco más protegido de los virus, troyanos, spyware y demás. El Internet Explorer también tiene una larga de lista de problemas y utilizándolo se te llenará de basura el ordenador más rapidamente. Descárgatelo de esta página en el botón de Firefox que hay en el lateral.

OpenOffice.org: Conjunto de aplicaciones para sustituir al Microsoft Office. No es tan vistoso como el MS Office pero sirve perfectamente para abrir y crear documentos ofimáticas. Cualquiera que haya utilizado MS Office puede usar OpenOffice sin problemas. Bajar.

23 mayo 2006

Desarrollador Cinco estrellas (.NET)

Microsoft tiene una página para aprender a crear aplicaciones con Visual Studio .NET llamada Desarrollador Cinco Estrellas. Explico de que va por si a algún informático le interesa.

Esta página se divide en 5 niveles de dificultad (Estrellas), para pasar al siguiente nivel tienes que realizar algunos trabajos o examenes. Hay tutoriales y apuntes para poder realizar las tareas y conseguir las estrellas.

Esta página es similar a las certificaciones oficiales de Microsoft pero gratis. Creo que el contenido que se estudia es muy parecido porque, por ejemplo, si tienes cierta certificación te convalidan la Estrella 4. La Estrella 5 aún no tiene examen y (de momento) sólo puede obtenerse con un examen de certificación oficial (que vale bastante dinero).

Además, de vez en cuando dan algún premio a los que tengan cierto nivel como licencias de Visual Studio .NET y cosas así.

21 mayo 2006

La Creación

Al principio Dios creó el bit y el byte, y de ellos creó el registro. Y hubo dos bytes en un registro, y nada más existía.

Y Dios separó el uno del cero, y vio que esto era bueno.

Y Dios dijo: Hágase el dato. Y así sucedió.

Y Dios dijo: Que los datos vayan a su correspondiente lugar. Y creó los disquetes, discos duros y los CDs.

Y dijo Dios: Háganse los ordenadores, así habrá lugar para poner los disquetes, discos duros y CDs. Así Dios creó los ordenadores y los llamó hardware.

Y no había software aún. Pero Dios creó programas, pequeños y grandes... Y les dijo: Vayan y multiplíquense por sí mismos y llenen toda la memoria.

Y dijo Dios: Crearé al programador. Y el programador hará nuevos programas y gobernará sobre los ordenadores, programas y datos.

Y Dios creó al programador y lo puso en el centro de datos.

Y Dios le mostró al programador el árbol de directorios y le dijo: Puedes usarlo todo, pero NO USES Windows.

Y Dios dijo: No es bueno para el programador estar solo. Tomó un hueso del cuerpo del programador y creó una criatura que buscaría al programador, lo admiraría y amaría las cosas que hiciera. Y Dios llamó a la criatura el usuario.

Y el programador y el usuario fueron dejados bajo el DOS desnudo. Y fue bueno.

Pero Bill fue más listo que todas las otras criaturas de Dios. Y Bill le dijo al usuario: ¿Realmente Dios te dijo que no ejecutaras ningún programa?

Y respondió el usuario: Dios nos dijo que podíamos usar cualquier programa y cualquier dato, pero nos dijo que no ejecutáramos Windows o moriríamos.

Y Bill dijo al usuario: ¿Cómo puedes hablar sobre algo que no has probado? En el momento en que ejecutes Windows serás como Dios. Podrás crear cualquier cosa que desees con un simple clic del ratón.

Y el usuario vio que los frutos del Windows eran buenos y fáciles de usar.

Así que el usuario instaló Windows en su ordenador y le dijo al programador que era bueno.

Y el programador empezó a buscar nuevos drivers. Y Dios le preguntó: ¿Qué buscas?

Y el Programador respondió: Busco nuevos drivers porque no puedo hallarlos en el DOS.

Y Dios dijo: ¿Quién te dijo que necesitabas drivers? ¿Ejecutaste Windows?

Y el programador dijo: ¡Fue Bill quien nos lo dijo!

Y Dios dijo a Bill: Por lo que hiciste serás odiado por todas las criaturas, y el usuario estará siempre descontento contigo.

Y Dios dijo al usuario: Por lo que hiciste Windows te decepcionará y se comerá todos tus recursos y siempre confiarás en la ayuda del programador.

Y Dios dijo al programador: Porque oíste al usuario nunca serás feliz. Todos tus programas tendrán errores y tendrás que arreglarlos hasta el fin de los tiempos.

Y Dios los echó del centro de datos y cerró la puerta y la aseguró con una clave.

Moraleja: haz caso a tus padres
Because Micro$oft is for Capitalists running DOS

19 mayo 2006

Las Torres de Hanoi

Esta es una forma rápida y fácil de resolver el juego de las Torres de Hanoi. Simplemente hay que sustituir num_discos por la cantidad de discos que queramos que tenga el juego, por ejemplo 10.

max = 1 << num_discos;

for (x = 1; x < max; x++)
printf("mover disco de %d a %d\n", (x&x-1)%3, ((x|x-1)+1)%3);

El código está escrito en C, se puede utilizar en Java simplemente cambiando el printf por un System.out.println.

He probado el código con 20 discos y ha tardado casi 2 horas y media en ejecutar ese programa de 3 lineas.

18 mayo 2006

Lorem ipsum

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.