31 diciembre 2007

Feliz ASCII nuevo



.. ..........
.OMMMMMMMMMM$=
MMMMMMMMMMMMMMMMM$=.. .$MMMM
.~MMMMMMMMMMMMMMMMMMMMMMMMM8$I+?==~~~~~. NMMMMMM.
=MMM=:,::=======7MMMMMMMMMMMMMMMMMMMMM: MMMMMMM.
=MMM,. ..,?ONMMMMMMMMMNNO?=:~,,,,,,,. IMMMMMM.
DMMMMMMMMMMMMM$+......... ..,=:...
..=ODDDO?=....
.....
......
.,DMMMMMMM8?..
NMMMMMMMMMMMMMMMN7~... .7MMMN..
.=MMMMMMMMMMMMMMMMMMMMMMMMNZ?=::,,...... NMMMMMM.
=MMMMNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMM: MMMMMMM.
.=MMM.. ...?ONMMMMMMMMMNNO?=::,,,,,,,. ?MMMMMM.
NMMMMMMMMMMMMMMM$?.... .,NMM$..
..=ONNNO?~....

......
..DMMMMMMM8?.... .....
OMMMMMMMMMMMMMM8~..... ..DMN=..
.=MMMMMMMMMMMMMMMMMMMMMMMMNZ?=::,,...... NMMMMMM.
=MMMMNDNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMM: MMMMMMM.
.=MMM........:+I8MMMMMMMMNMDOZ$$7777777, OMMMMMM.
MMMMMMMMMMMMMMMM$?.... ,DMN$..
.?NMMMMMMM7~.


















7$$ $$=
MMM MMI
MMM MMI
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMI
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMI
MMM..........................................MMI
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMI
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMI
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMI
MMM,,,,,,,,,,,,,,,MMO,,,,,,,,,,,,,,,,,,,,,,,,MMI
MMM MMO MMI
$$$ MMO MMI
.MMM. MMI
......MMMM?...... MMI
MMMMMMMMMMMMMMMM .,MMI
????????????????.. .ZMMMI
.........:MMMMMI .
.MMMMMMMMMMMMMMM..
.MMMMMMMMMMMMMMM..

...
....,:,,....
.,MMMMMMMMMM,..
.MMMM$...+NMMMM..
.MMM,:?ODO?=.$MMM.
.MMMMMMMMMMMMMMMMMM
.MMMMMMMO$MMMMMMMMM$.
MMMMO. ...MM..,ZMMMM
MMM,. MM ...MMM
MMM MM. .MMM
MM. MMM8ONMMM,.
OMM MM$NMMMMM
.MMZ. MMMMMMMM.
..MMD. MMMMMM?..
..MM. MMMMZ...
. ....

OZ. OO.
MM MM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMZ$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$MM.
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMI
MM$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$=
MM
ZZ.


... ...
MM MM
MM...............MM
MMMMMMMMMMMMMMMMMMM.......:~.
MMNDDDDDDDDDDDDDDMMIDMMMMMMM
MMMMMMMMMMMMMMMMMMMM~$DMMMMM.
MMMMMMMMMMMMMMMMMMMM..... ..
MM==================.
MM...................
$$.



MMM?.
MMMMM7.. .MMMMMMMMM.
MM.8MMMMN, ....,NMMM..
MM?..$MMMMM:. .MMM
MMMMN~..IMMMMD=. .MM
MMMMMMMN,.:MMMMMZ.MM
MM=NMMMMMM~..?NMMMMM
MM ..?MMMMMMN+..$MMM
MMM ...8MMMMMMO..MM
MMMN. ..:8MMMMMMMM
.NMMMMMNNN ..:MMMMMM
.MMMMMMMMM ..DMMM.
......... .....
















. ....... .. ..................
MMMMMMMMMMNO?~.. . .MMMMMMMMMMMMMMM..
MMMMMMMMMMMMMMMN. MMMMMMMMMMMMMMM
....MMMMM?...OMMMM. ..........:MMMM...
.MMMMMM ...OMMM:. ..MMM.
.MMM.MM. ..~MMMZ. .MM?
..MMMM.MM ..MMMM MMI
.MMMM$MMM. ..MMMM,. MMI
.$MMMM.MM= .NMMMM, .8MMI
.MMMM.MMM. .MMMMMN~.. ...:MMMMMI
MMMMM.MM~. ?MMMMMMMMM8O$$O8MMMMMMMMMM.
MMMMM,NMM. .:MMMM,$NMMMMMMMMMN?:NMMMM.
MMMMM..MMD. .~MMMMM?..........OMMMMM..
,MMMMM.?MMZ.. ..MMMMMMMNNNNNMMMMMMMM.
.,:MMMMMM=MMMM:::::. ..DMMMMMMMMMMMMMMMMM..
$MMMMMMMMMMMMMMMMM. ..~NMMMMMMMMMMMMM7..
.................... ..INMMMMM$=...

......
....?ONMMMMMMMMMMN$+...
.,+DMMMMMMMMMNNNNMMMMMMMMMZ~.
..NMMMMMM?...............,7MMMMMMZ..
..MMMMMD.,=8MMMMMMMMMMMMMMM8?:..OMMMMM...
.$MMMMMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM7.
..MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.
..MMMMMMMZ=.. ..,+OMMMMMMMM..
.MMMM?.. ..ZMMMM.
.MMM. .MMM.
MMM.. MMI
MMM MMI
MMM. .MMI
MMMN.. ...DMMI
.MMMZ... ...MMMM.
.MMMMM?.. ........ .. ...... ...,?MMMMM.
..MMMMMMMMMN$?~::,,.........,,:=?$DNMMMMMMMMMM..
..MMMMMDDMMMMMMMMMMMMMMMMMMMMMMMMMMMNDMMMMMM.
.,MMMMMM$......................:$MMMMMMM..
..OMMMMMMMMMO?=:,.....,:?$DMMMMMMMMMMO...
..=DMMMMMMMMMMMMMMMMMMMMMMMMMMMMD=..
...?NMMMMMMMMMMMMMMMMMMMMN?...
...,?ZDMMMMMMMMD$?....
.............

..~?$8DDNNNDD8O$+:..
..=DMMMMMMMMMMMMMMMMMMMMMM$:.
.,DMMMMMM$=...........,=8MMMMMMD,.
.NMMMMM,,~ZNNMNMMMMMMMMNNNZ+:.:OMMMMN.
.+MMMMMDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM~.
..NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.
.MMMMMMM$=........................,=ZMMMMMMMM
.MMMMM=. ...:NMMMM.
.MMM,. ..MMM.
MMM.. ..MMI
MMM MMI
MMM MMI
MMM.. .,MMI
.MMM+. ..IMMM.
.MMMMM?... ....?MMMMM.
.MMMMMMMM$7=~:,,.............,,~=?IOMMMMMMMMM
.MMMMMNDMMMMMMMMMMMMMMMMMMMMMMMMMMMMDMMMMMM.
.OMMMMM+....,:=?IZ$$$$$$??=:,....?MMMMMM$.
,8MMMMMMMND7=:,.......,=?ZDMMMMMMMMMD.
..?MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM?..
.ZMMMMMMMMMMMMMMMMMMMMMMMM7.
,?ZDMMMMMMMMD$?.
... ....
........ .
. .,7ONNZ?..... .. .
.$MMMMMMMMMMMM+.. ..,::::.....
.NMMMMMMMMMMMMMMMMO .~MMMMMMMMMMMM+.
..MMMMMMN=:.,:7NMMMMMM. .:MMMMZ=..,MMMMMMMM,
.MMMM7... ...=NMMM.+MMD~.+NMMMMMMMMMMMM8
.MMMO.. ..:MMMMN..NMMMMMMMMOONMMMMMM.
.MMM. ..MMN.,MMMMMMN?......?MMMM.
MMM.. $MM$.DMMMMMZ.. ..MMMI
MMM ~MMD..MMMMM=.. ..MMI
MMM ~MM$.:MMMMM.. MMI
.MM=. .DMM:.=MMMMM. .MMI
.MMM. ,MMMZ.OMMMMMMO. .MMM.
..MMM7.. .,MMMM.:MMMMMM.MMM8.. ..NMMMM.
..MMMMM?:=$DMMMM~.DMMMMMM:..MMMMM$~:.:$MMMMMM..
.$MMMMMMMMM?~NMMMMMMMM,. .:MMMMMMMMMMMMMZ.
..:MMMMMMMMMMMMMMMMM?.. ..?MMMMMMMMMZ..
.:MMMMMMMMMMMMM?.. ...... .
...,=???=....

















... ........
,?NMMMMMMMM:
.NMMMM. .:7DMMMMMMMMMN$==OMMMM.
MMMMMMM. .??????$$ZDNMMMMMMMMMMM$=:.........MMM.
MMMMMMM. MMMMMMMMMMMMMMMMMMMMMMNNN8888888NMMMM
?MMMMMM. ...........,~?OMMMMMMMMMMMMMMMMMMMMMMM
.:MMMO.. . ....~$NMMMMMMMMMMMMMM=.
..... .....=78NMMMN8?.
... .

...:$NMMMM$~.
..,?=, ....+DMMMMMMMMMMMMM,.
=MMMMMM. ..........,:=IONNMMMMMMMMN7=......~MMM.
MMMMMMM. .MMMMMMMMMMMMMMMMMMMMMN:,,.......,?MMM
MMMMMMM. .MMMMMMMMNNMMMMMMMMMMMMMMMMMMMMMMMMMMM
.NMMMM:. ........,=$NMMMMMMMMMMMMMMMMM.
. ... ...=DMMMMMMMMMMZ
..........

....,:,....
...... .....,?DMMMMMMMMMMD.
.NMMMM,. ........:7DMMMMMMMMMN$==ZMMMM.
MMMMMMM. .ZZZZZZ88DNMMMMMMMMMMMD+:,.........MMM
MMMMMMM. MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
?MMMMMM. ...,=?ONMMMMMMMMMMMMMMMMMMMMMM.
..~$$. ..~OMMMMMMMMMMMMM..
.~$DMMMN$,






Nota: hay montones de generadores ASCII a partir de imágenes; yo he usado:

http://www.glassgiant.com/ascii/

23 diciembre 2007

Jugando con Notepad++

Para cualquier usuario que manipule fuentes en distintos lenguajes de programación, es interesante tener un editor de texto avanzado.

Yo he probado varios, y por ahora el que más me ha convencido es Notepad++. Voy a indicar algunas de las características que mas me gustan, junto con algunas de las pulsaciones de teclas más cómodas para mi uso diario:

- Como primer punto a su favor, se instala en el idioma del sistema (entre ellos, español).

- Además es Open Source (de código abierto), lo que supone que aunque el autor "oficial" abandonara el proyecto, se podrían seguir corrigiendo errores.

- Por supuesto, es multidocumento, pero además también es "multivista" (se pueden ver dos vistas distintas de un mismo documento a la vez).

- En cuanto al uso normal, detecta automáticamente el lenguaje de programación que se está empleando (entre más de 40), y adapta el coloreado de la sintaxis.

- Marca los paréntesis cerrados correspondientes a otros paréntesis abiertos y viceversa, para permitirnos localizar errores de sintaxis si estamos tecleando fuentes en algún lenguaje de programación (ocurre lo mismo con los corchetes y con las llaves).

- Tiene "autocompletado": cuando empezamos a teclear el nombre de una orden en un lenguaje de programación, pulsamos Ctrl+Espacio para que la complete, o nos muestre sugerencias. También permite usar "abreviaturas", que se reemplazan por todo un texto al pulsar Ctrl+Intro.

- Permite trabajar con distintas codificaciones, como ANSI y UTF-8.

- Incluye un editor hexadecimal.

- La búsqueda en el documento permite emplear expresiones regulares, y se puede hacer en todos los documentos abiertos a la vez. Se puede incluso buscar y reemplazar en todos los abiertos o buscar los ficheros que contengan un cierto texto dentro de un directorio.

- Incluye teclas rápidas para buscar la palabra del cursor en Google (Alt+F3), en la Wikipedia (Alt+F3) y en el manual online de PHP (Alt+F1).

- Puede unir varias líneas en una (Ctrl+Mays+L) o dividir un párrafo en varias líneas (Ctrl+L)

- La mayoría de los atajos de teclado se pueden redefinir.

- Un añadido llamado "TextFX" tiene muchísimas posibilidades de manipulación de texto, como: convertir tabuladores a espacios y viceversa, eliminar espacios redundantes al final de las líneas, convertir a mayúsculas, minúsculas o formato de frase, eliminar etiquetas HTML, etc.

- Tiene un "Light Explorer", que permite tener al lado del editor los iconos de MiPc, y así poder abrir ficheros con más comodidad que a través del típico Archivo/Abrir.

- Uno de los Plugins habituales es "Explorer", una ampliación del "Light Explorer", que además permite tener favoritos, para acceder más rápidamente a las carpetas que usamos con frecuencia.

- Otro Plugin interesante es el "HTML Tag", que permite comprobar dónde abren y cierran las "etiquetas" como <p> y </p> (pulsando Ctrl+T), además de convertir de símbolos internacionales a "entidades", como "á" a "&aacute;" (pulsando Crl+E).

- Para los que trabajamos con retroproyector, es útil poder cambiar con rapidez el tamaño de la letra en pantalla. Se puede conseguir manteniendo pulsado Ctrl mientras se gira la rueda del ratón (también hay dos botones en la barra de herramientas).


Carencias o limitaciones (alguna hay, claro):

- No permite (todavía) indicar UTF-8 como codificación por defecto. Se puede hacer para documentos nuevos, pero no para documentos ya creados, en los que lo detecta el editor o (si él no consigue acertar) hay que indicárselo manualmente (algo que suele ocurrir en los ficheros sin caracteres internacionales, que él siempre considera como ANSI).

- No permite exportar a HTML con la sintaxis coloreada, algo que resulta muy cómodo para los que publicamos fuentes como parte de páginas Web. Para esto utilizo PsPad, que también es un buen editor gratuito pero con alguna limitación (es gratuito pero no OpenSource, es un poco inestable y se "vuelve loco" en algunas ocasiones...). Scite, que es mucho más sobrio que Notepad++ y PsPad, también es útil para esto.

- El menú de Plugins y de TextFx contiene muchas opciones... tantas que a veces es difícil encontrar lo que uno busca.

21 diciembre 2007

Redescubriendo el Amstrad CPC

Yo me introduje en el mundo de la programación a mediados de los 80, hace ya unos 23 años, con un Amstrad CPC 664. Existen varios foros en español en los que usuarios o aficionados a estos sistemas comentan, todavía hoy en día, formas de crear y optimizar programas para estos equipos, de ampliar su hardware, de conectarlos a un PC...

En parte por nostalgia y en parte por desenterrar conocimientos ya casi olvidados, voy escribiendo a ratos libres una introducción a la programación de Basic para estos ordenadores.

Si te pica la curiosidad...

www.nachocabanes.com/amstrad/curso

19 diciembre 2007

Windows la ha vuelto a fastidiar

Ha vuelto a ocurrir.

Estaba grabando una interesante película que emitían en televisión. Cine independiente, actores de prestigio... una película con buena pinta, que nunca había visto, y que además me temo que es difícil que vuelvan a repetir...

Pongo el ordenador de sobremesa en marcha, espero a que comience la película para que no quede ningún anuncio al principio de la grabación. Todo correcto. La dejo grabando y salgo al salón, a trabajar con el portátil.

Cuando termina la película, me acerco al ordenador de sobremesa a parar la grabación... ¡¡¡pero ya no había grabación!!!

Mi querido Windows ha descargado una actualización, se ha reiniciado y me ha fastidiado la grabación. Supongo que habrá aparecido uno de esos preciosos avisos de "el sistema se reiniciará en 5 minutos"... pero... ¿y si el ordenador está realizando cualquier proceso (como en este caso) sin una persona delante? Proceso perdido.

¿No habrá nadie en una macroempresa como Microsoft que sea capaz de ponerse en el lugar del usuario? ¿A nadie se le ha ocurrido que la opción por defecto debería ser NO reiniciar el equipo? Y no es la única cagada (sí, así, con todas las letras) relacionada con reiniciar el ordenador en Windows: también es totalmente absurdo que una opción tan crítica aparezca de repente en una ventana de diálogo, de forma que es muy posible que el usuario esté tecleando y confirme el reinicio sin darse cuenta... ¿tan difícil será para Microsoft hacer que el diálogo no esté activo durante 3 segundos, como hace Firefox?

Pero la situación es como es. La serie Windows es software cerrado, privativo, y con creadores que son reacios a escuchar a los usuarios. Y si la aplicación que necesitas sólo existe para Windows, o tu hardware sólo tiene drivers para Windows... estás vendido. Es fácil que los señores de Microsoft hagan que te enfades más de una vez, pero en muchas ocasiones no hay alternativa. O tragas o no trabajas.

Esperemos que la situación cambie. Y no me refiero a que la gente de Microsoft escuche, porque no lo van a hacer hasta que la presión del mercado sea insoportable. Me refiero a que Linux (o cualquier otro sistema operativo libre) tenga cada vez más drivers, porque los desarrolladores de la mayoría de versiones de Linux SÍ escuchan a los usuarios, y si aun así encuentras una carencia, siempre está la opción de corregirla. Y esto no quiere decir necesariamente que la corrijas tú mismo, porque quizá no tengas los conocimientos necesarios, sino que puedas conseguir que se haga, bien sea porque alguien se encargue de forma altruista, o bien incluso porque pagues para que te lo haga alguien ajeno al sistema. Porque para modificaciones importantes, es preferible poder contratar a alguien que las haga, antes que depender de un sistema cerrado que ni tú ni nadie podría modificar (salvo Microsoft, que claramente NO lo va a hacer "sólo" porque un particular lo pida).

Y volviendo al problema de los reinicios del sistema sin el consentimiento del usuario... quizá algún gurú de Windows sepa como evitar este tipo de fallos de Windows modificando alguna oculta opción del registro de Windows. Quizá. Por cierto... mientras que en Linux todo está documentado, en Windows muy poca gente es capaz de exprimir medianamente el registro... ¿quien dijo que Linux era difícil...?


(A efectos estadísticos, y a quien pueda interesar: el delicioso sistema operativo que me ha hecho esta pifia es Windows XP Profesional, segunda edición. Por supuesto con licencia y al día. Quizá Vista, a cambio de ser menos productivo y mucho más caro, al menos corrija esta cagada... quizá...)

06 diciembre 2007

Dos tipos de programadores

Me apetecía opinar (y en parte traducir) un nuevo artículo de Jeff Atwood en su blog Coding Horror, que se apoya a su vez en un post de Ben Collins-Sussman sobre "los dos tipos de programadores".

Habla de que existen 2 tipos de programadores en el mundo, los que llama el 20% y el 80%:
  • La gente "del 20%" son lo que algunos llaman "programadores alfa", el tipo de gente que sitios como Google se obsesionan por contratar. Gente que fueron los primeros en instalarse Linux en casa en los 90, gente que escribe compiladores de Lisp y aprende Haskell los fines de semana "sólo por diversión", que participan en algún proyecto de software libre y que están a la última en cuanto a programación y herramientas.
  • El "otro 80%" es la masa de la industria del software: gente que fue a un centro de estudios, aprendió C++, C# o Java, y encontró trabajo en un banco, gobierno , agencia de viajes... Habitualmente el mundo no llega a conocer sus programas. Usan las herramientas que Microsoft les imponga, nunca han usado Linux ni están interesados en él, nunca han usado herramientas de control de versiones... Saben exactamente qué hacer para terminar su trabajo, y cuando llega el fina de semana se van a casa y se olvidan de los ordenadores.

Además añade un par de "hechos impactantes":
  • Que la mayoría de la industria del software está formada por "programadores del 80%": pequeños desarrollos para Windows o pequeñas compañías que contratan a sus propios programadores.
  • Que la mayoría de los "geeks" olvidan el primer hecho, no se paran a pensar que exista "el otro 80%" y se sorprenden de que en su empresa no sean capaces de usar la última distribución de Linux que ellos acaban probar.

Pero, como suele ocurrir en los artículos en los que lee (y opina) gente con una cierta cultura, puede resultar todavía más interesante leer las opiniones de la gente que el propio artículo en sí. Se pueden encontrar cosas como:
  • Gente que dice que después de leerlo... tienen claro en qué lado se encuentran.
  • Hay quien piensa que la proporción es más cercana al 10/90, incluso quien dice que apenas son un 1% los que son capaces de marcar la diferencia.
  • Otros que dicen que muchos de los del 80% consideran que están dentro del 20%.
  • Hay quien dice que no es cierto eso de que el 80% sepa exactamente cómo hacer su trabajo.
  • También hay quien dice que al 80% no le preocupa lo más mínimo la industria del software, sino sólo su trabajo.
  • Hay quien dice formar parte de ese 80% y estar orgulloso de ello, porque así tiene tiempo libre para él y para su familia durante el fin de semana.
  • Mucha gente dice que las generalizaciones son demasiado simplistas, que no se puede clasificar todo en blanco o negro.
  • Por supuesto, también hay quien tacha a Jeff de clasista y/o arrogante... ;-)

¿A qué lado te acercas más? Si has leído esto y/o el artículo original, posiblemente es porque tienes inquietudes y quizá entonces no estés claramente entre ese 80% de gente que programa por trabajo, sino que te aproximes a los que lo toman como una pasión.

Aun así, yo creo que los extremos nunca son buenos. Procuro estar más cerca del 20%, pero no me obsesiona. Me gusta la programación e investigar cosas que no conozco, pero también está bien eso de tener tiempo libre de vez en cuando... ;-)

(Si hablas inglés, quizá te interese leer el artículo original).