25 diciembre 2007

mi SAI ha muerto (creo)

Hace unos 3 años me compré un SAI para el ordenador de mi casa. Me costó unos 40 euros si no recuerdo mal. Tenía capacidad para aguantar unos 10 minutos el monitor y el PC enchufados, no es mucho pero mi PC no es un servidor 24/7, necesitaba el tiempo justo para apagar el ordenador si se iba la luz y para ir a conectar el automático si saltaba la luz por cualquier cosa.

Pues llevará como 3 años conectado el SAI al ordenador sin problema alguno. Las pocas veces que se ha ido la luz ha funcionado bien. Lo único malo es que cuando se va la luz se pone a pitar como un condenado y alguna vez ha despertado el puto pito por la noche cuando se ha ido la luz a las 4 de la mañana aunque no tuviera el PC encendido...

El caso es que desde el otro día las 3 veces que ha saltado el automático ha empezado a pitar y a los 2 segundos se ha apagado el PC a saco sin que de tiempo a apagar el sistema.

No sé si porque se ha acaba la vida útil de la batería o porqué. Quizá es porque no he hecho ningún tipo de mantenimiento del SAI en los 3 años y he acabado jodiendo la batería dejándolo siempre encendido.

Estoy por comprarme otro, pero me da perrería tirar el que tengo y no sé si se puede arreglar o que. El caso es que el SAI pesa mucho más que la torre del PC para lo pequeño que es y me da bastante perrería tirarlo y tener que cargar otro nuevo desde la tienda.

En fin, mientras no tenga SAI ya no me arriesgo a dejar el PC encendido horas y horas.

Por cierto el SAI es marca Yukai de 600 de potencia y venía con un CD con drivers y software para Windows, Linux ,FreeBSD, Solaris y varios UNIX más. Software que permite (en teoría) apagar el PC automáticamente cuando se va la luz, pero nunca lo he probado en ningún SO.

27 noviembre 2007

Pasar DVD a AVI a mano

- Obtener del DVD los archivos VOB de la película

- Convertir los VOB a AVI (uno a uno)
mencoder -oac mp3lame -ovc lavc -lavcopts acodec=mp3:abitrate=192:vcodec=mpeg4:vbitrate=800 -vf scale=512:384 -o salida.avi VTS_01_1.VOB

- Se puede modificar abitrate, vbitrate y scale para modificar la calidad final

- Juntar varios AVI en uno solo
cat salida1.avi salida2.avi ... > entrada.avi
mencoder -ovc copy -oac copy -o final.avi -forceidx entrada.avi

mencoder viene con el mplayer

25 noviembre 2007

Encuentran código fuente en una ROM del Zelda de GB

Últimamente leo bastante Reddit Programming. Es parecido a Menéame pero de pirulas de programación. Casi siempre hay cosas sobre programación declarativa, haskell y cosas así de rancias, pero de vez en cuando aparecen artículos curiosos.

Hoy he visto éste: Game Development Archeology: Zelda on Game Boy comes with source. En él un pavo que se ve que domina bastante ensamblador cuenta como en algunas ROMs de juegos antiguos es posible encontrar trozos de código fuente en C, en ensamblador o de ficheros que no tienen nada que ver con el juego.

Lo que he entendido después de leer el artículo es que a veces se hacían juegos que ocupaban menos KB que el tamaño de la ROM y en esa época el MS-DOS no tenía protección de memoria a veces podía rellenar por error el espacio sobrando de la ROM con otros datos de la memoria que no tenían relación con el juego.

El autor explica cómo ha encontrado código en C en un juego de Zelda para Game Boy (no es el código fuente del juego) y otros ejemplos de cosas raras encontradas en ROMs de juegos.

22 noviembre 2007

Ejecutables "compactos"

¿Qué ocurre si compilas este código en C con gcc? ¿Cuánto ocupa el ejecutable generado?


#include <stdio.h>
#define TAM 10000

int matriz[TAM][TAM] = {{1, 2, 3, 4}};

int main(int argc, char *argv[]) {
return 0;
}



xim@cagallon:~/Desktop/lalala$ gcc big.c
xim@cagallon:~/Desktop/lalala$ ls -lah a.out
-rwxr-xr-x 1 xim xim 382M 2007-11-22 20:17 a.out


Sólo 382 megas. Esto es debido a que hemos creado una matriz muy grande y la hemos inicializado. Aunque sólo hemos puesto unos pocos valores, el gcc ha creado la matriz entera en el ejecutable.


#include <stdio.h>
#define TAM 10000

int matriz[TAM][TAM];

int main(int argc, char *argv[]) {
matriz[0][0] = 1;
matriz[0][0] = 2;
matriz[0][0] = 3;
matriz[0][0] = 4;
return 0;
}


Inicializando la matriz en el main en vez de en la definición nos ahorramos un poco de espacio en disco.


xim@cagallon:~/Desktoplalala$ gcc big.c
xim@cagallon:~/Desktop/lalala$ ls -lah a.out
-rwxr-xr-x 1 xim xim 6,2K 2007-11-22 20:19 a.out

14 noviembre 2007

Alegría Frontpage

Hoy me he llevado una gran alegría al enterarme de que el MS FrontPage dejó de desarrollarse hace años. La última versión que existe es la que viene con el Office 2003.

Según la WP ha sido sustituido por el programa MS Espression Web que forma parte del Expression Studio. Expression Studio es un "nuevo" paquete de MS especial para diseñadores. Ya que no tenía mucho sentido que el editor de páginas web formara parte de Office.

Cuanto daño ha hecho el Frontpage al mundo...

10 noviembre 2007

Metaprogramación en C++

No te acostarás sin descubrir alguna pirula nueva sobre programación.

Como todo el mundo debería saber, C++ incluye plantillas con las que puedes hacer estructuras de datos genéricas (por ejemplo listas) para luego utilizarlas con el tipo de datos que quieras sin tener que modificarla la plantilla (por ejemplo listas de enteros).

Hace unas semanas aprendí a hacer plantillas básicas para una clase que representa un autómata finito y no me pareció muy intuitivo lo de las plantilla.

Pues bien, el sistema de plantillas es tan potente y complejo (y difícil) que es capaz de simular un lenguaje de programación funcional (como haskell).

Se pueden crear expresiones funcionales con las plantillas, que se basen en el resultado de otras plantillas para crear expresiones más complejas (incluso recursivas). Como muestra un ejemplo que he visto por ahí en el que se define el factorial utilizando programación funcional en C++.


#include <iostream>
using namespace std;

template<int N>
class Factorial {
public: enum { value = N * Factorial<N-1>::value };
};

template<>
class Factorial<1> {
public: enum { value = 1 };
};

int main(int argc, char *argv[]) {
cout << Factorial<5>::value << endl;
return 0;
}


Este programa se compila con g++ y no da ningun problema. Se ejecuta y escribe por pantalla 120. Increíble.

Hay que ver las que cosas que se inventan...
Hay que ver lo pesado que es Ángel cuando cometes una o dos faltas de ortografía...

03 noviembre 2007

Lenguajes de programación

Antes he hablado de J y se me ha ocurrido mirar a ver qué otros lenguajes de programación tienen una triste letra como nombre. Hasta el día de hoy sólo había usado C y R (es un lenguaje interpretado orientado a los cálculos estadísticos) y había oído hablar de D como "mejora" de C++.

Esta es la lista de lenguajes que he encontrado:

APL (Significa A Programming Language, así que se considera válido)

B

C

D

E

F

G (es un "lenguaje" gráfico)

H

¿I?

J

K

L

¿M?

¿N?

¿O?

¿P?

Q

R (es una implementación open source de S)

S

T

¿U?

V

¿W?

¿X?

Y

Z

Si alguien está pensando en crear un nuevo lenguaje de programación, que tenga en cuenta que sólo quedan estas letras disponibles: I M N O P U W X. Habrá que ir mirando en utilizar caracteres UNICODE para poder poner más nombres...

Destaca el hueco de M N O P ¿qué pasa que nadie usa esas 4 letras?

Habría que fundar la LIANA (Language International Assigned Namee Authority) que se encargue de gestionar las concesiones de nombres de lenguajes de programación.

J

Acabo de descubrir el lenguaje de programación J. Me he enterado de que deriva del lenguaje APL. Al parecer son lenguajes que utilizan el paradigma array programming. No sé si soy un ignorante pero no conocía este paradigma, ni lo entiendo ahora que lo conozco.

Jugar al ajedrez con un filtro antiSPAM

Como todo el mundo sabe los filtros antiSPAM utilizando técnicas de Reconocimiento de formas* clasifican el SPAM. Para ello tenemos que marcarle los correos que son SPAM para que vayan "aprendiendo".

Pues bien, a este pavo se le ha que puede jugar al ajedrez con el filtro antiSPAM que ha creado. Para ello le pasa miles de partidas de ajedrez como si fueran emails SPAM para "enseñarle" y luego con unos scripts juega partidas con el filtro.

Un ejemplo más de lo que puede llegar a hacer la gente...

* Reconocimiento de formas es la traducción al castellano de "pattern recognition". En inglés no dice nada de formas porque se usa para reconocer cualquier cosa. En castellano se usa para reconocer cualquier cosa pero se le llamada reconocimiento de formas. Que tontos estamos...

29 octubre 2007

Emails guays

Mirando la página HugeURL que he comentado antes he encontrado a su hermano en versión email.
http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/

En esa página puedes registrar una cuenta de email protolarga.

URLs guays

A veces queremos mandar una dirección de una web a alguien y es muy larga, o el messenger cambia algunos caracteres por caritas o cosas raras. Esto se puede solucionar con http://DecentURL. Un servicio gratuito y sin registro que permite hacer redirecciones.

Por ejemplo:
http://youtube.com/watch?v=pQHX-SjgQvQ
Quedaría convertido en:
http://decenturl.com/youtube/medieval-help-desk

Se puede elegir el título que queramos, en este caso la dirección es más larga que la original, pero más fácil de recordar.

Para hacer justo lo contrario tenemos HugeURL: Le pasas una dirección y te crea una dirección nueva la hostia de larga. ¿Para qué sirve HugeURL? ¡Yo que sé!

Como estoy aburrido he creado una redirección desde HugeURL a DecentURL y de DecentURL a HugeURL que forma un bonito bucle infinito.

http://decenturl.com/hugeurl/juas.

El Firefox detecta que está en un bucle infinito y muestra un error. No he probado que hace el Explorer ¿petará?

27 octubre 2007

Desaparece la ingeniería informática!!!!

He visto esta noticia en Barrapunto: Las licenciaturas y diplomaturas desaparecerán progresivamente a partir del curso 2008-2009.

Creo que desde el primer año que entré en la carrera, ya se estaba comentando cosas sobre los nuevos planes de estudio. Me han enviado varios emails apocalípticos en los que se decía que si nuestros títulos no iban a servir para nada o que si no teníamos atribuciones o lo que sea... casi siempre eran artículos de Ingenieros de Primera.

La Ingeniería Informática (y las técnicas) van a desaparecer ¿y qué? Tu título sigue siendo válido aunque la carrera ya no existe. Y si que existirá, sólo que se llamará de otra manera. El 80% de los profesores que has tenido en la carrera son Licenciados en Informática. ¡Su carrera ha desaparecido pero pueden seguir trabajar!

Los nuevos grados tienen una particularidad: el Ministerio no dice cómo tienen que ser las carreras como hace ahora, cada universidad elige las materias que enseñará y el ministerio las tiene que aprobar. Con esto en principio es más difícil moverte de una universidad a otra porque tendrías problemas de convalidaciones al ser los cursos distintos. Pero eso es en teoría, porque esto es España. La mayoría de universidades cogerán la carrera de informática que ahora tienen, y la presentarán al ministerio para hacer un grado. Los departamentos funcionan como mafias y si un grupito de profesores ya tienen su asignatura no la van a querer dejar. Así que yo pienso que las carreras serán más o menos como ahora en cuanto a temario.

¿A los ingenieros actuales se les dará el título nuevo? Yo que sé. ¿Lo quieres para algo? Hoy en día para opositar aún sirven los títulos de licenciado en informática así que los actuales también deberán serlo cuando salgan los grados. A quien le haga ilusión tener el título de grado que se matricule en su misma universidad, tal y cómo he dicho, la planificación de la carrera será prácticamente la misma así que le convalidarán todo o casi todo, con presentar un proyecto de fin de carrera ya tiene su título de grado.

Hay gente que se cree que va a olvidar todo lo que ha estudiado porque le cambien el nombre a la carrera...

24 octubre 2007

VMPlayer

VMPlayer es una versión reducida de VMware. Está limitada porque no permite crear máquina virtuales, sólo ejecutarlas. Está bien para probar sistemas operativos "raros", porque muchas veces te ponen un archivo con el SO instalado en una máquina virtual para que te lo bajes y los pruebes.

Recuerdo que probé así Plan9 hace un tiempo. Plan9 es un sistema operativo que están desarrollando actualmente los desarrolladores originales de UNIX y C: Ken Thompson, Rob Pike y todos esos.

He encontrado esta página Virtual Machine Creator que te permite crear máquinas virtuales para VMPlayer y así poder usarlo "sin limitaciones".

Por cierto el otro día instale un XP con VirtualBox corriendo sobre Debian y funciona muy bien. Es gratis para uso personal y puede crear máquinas virtuales cosa que la versión gratuita de VMware no puede.

13 octubre 2007

El verdadero valor de PI es 3

Siempre nos han dicho que PI vale 3.14 y que tiene infinitos decimales o algo así. Utilizando documentos bastantes fiables vamos a calcular el verdadero valor de PI desenmascarando esas mentiras que nos han enseñado en el colegio sobre el número PI.

En el Primer Libro de los Reyes, capítulo 7 versículo 23 leemos:

Hizo también la fuente de bronce fundido que tenía 10 codos de borde a borde. Era circular y tenía 5 codos de alto, y una circunferencia de 30 codos.

No sé cuánto es un codo pero para los cálculos siguientes no nos hace falta.

Sabemos que el perímetro de una circumferencia es 2*PI*r.

En la biblia nos dicen que el diámetro es 10 así que el radio será 5. El perímetro es 30.

Por tanto: 2*PI*5 = 30

Y simplificando: PI = 30/10 = 3

PI = 3

¿A que así es más fácil trabajar con PI? ¡Eso de los decimales era un invento del demonio para liarnos!

10 octubre 2007

JavaScript desde cero patatero

He encontrado un interesante artículo en el blog MooTools. Es una guía para aprender JavaScript desde cero. Tiene tutoriales de varios niveles desde totalmente inculto hasta experto.

Por cierto, MooTools es una framework bastante guapo para JavaScript, permite hacer código compatible con todos los navegadores de manera fácil, además es libre. Si necesitas añadir a una página más de 20 líneas de JavaScript es recomendable usarlo. Por ejemplo: el W3C, Ubuntu y GameSpot lo usan en sus sitios web.

KOffice en Windows

Leo en OSNews que KOffice 2.0 rulará en Windows. Esa versión tendrá posiblemente soporte completo para ODF. Si no ocurre un milagro mandaré al cuerno a OpenOffice.Org.

09 octubre 2007

Backup fallido

Tal y como expliqué hace tiempo, me hice un sistema artesanal de backup. Copiando cada 6 horas todo /home a otro disco duro de la máquina. Además añadí un tercer disco duro que fallaba a veces, en el que también se copiaban las cosas (por si acaso). Estos 2 discos duros se montaban en /backup1 y /backup2.

El problema ha aparecido hoy tras unos meses de uso. Parece ser que al iniciarse la máquina ha fallado el disco viejo y no se ha podido montar. Al rato, ha empezado a hacer el backup en /backup2 pero no había ningún disco montado por lo que me ha creado una copia entera de mi directorio de usuario en /backup2. Me ha saturado la particion /.

He reiniciado y al intentar entrar KDE me decía que no tenía suficiente espacio en /tmp. Al final he descubierto cual era el fallo, borrando el contenido de la carpeta de backup todo ha funcionado bien.

07 octubre 2007

Temas para Drupal

Hoy en día no vale la pena programar páginas webs desde cero. Puedes encontrar miles de CMS ya preparados para instalar en cualquier servidor y montar una web muy decente en una tarde. A mí me gusta Drupal que es muy sencillo de instalar y tienes muchas opciones de configuración.

Monté por encargo una web hace un año que básicamente consistió en: instalar drupal, cambiarle un poco el color del tema principal, poner el logo de la página e instalar el paquete de idioma castellano y catalán. Ahora el propietario de la página se la actualiza él, metiendo nuevas noticias y fotos. Yo sólo entro de vez en cuando a ver si ha habido algún acceso "raro".

Le expliqué a una amiga como funcionaba más o menos Drupal y montó la web del Ateneo Musical del Puerto. Ambas páginas utilizan el tema por defecto de Drupal (garland) cambiandole un poco los colores.

Ahora he de crear 2 webs más y como son para familiares/amigos/conocidos me van a pagar entre poco y muy poco, así que yo voy a currar poco. El caso que para que no sean todas las páginas exactamente iguales he pensado en cambiar el tema de Drupal al menos (jaja).

La página de temas de Drupal es una mierda porque muy pocos tienen fotos, pero he encontrado Theme Garden que es un Drupal en el que puedes elegir qué tema quieres y te lo muestra en viva. Están disponibles todos los temas de la web oficial de Drupal.

Llevo un rato mirando y he encontrado algunos temas chulos para futuras páginas que me encarguen WAHAHAHAHAHA.

29 septiembre 2007

4.6

He hecho el test ese para saber si el portátil nuevo puede con Vista y he sacado un 4.6 (sobre 10). Ver para creer...

21 septiembre 2007

Fallos de programación

Instalando y reinstalando el sistema operativo me he acordado de algo que leí sobre los fallos de programación (o bugs).

Se trata de el proceso de creación de un bug.

Primero de todo, un programador humano escribe un código fuente. En un momento dado introduce un defecto en el programa. Este defecto puede ser un error o no. Por ejemplo los programas que hicieron durante los 80 que no tuvieron en cuenta el Efecto 2000 tenían un defecto pero no un error porque no se puede decir que funcionaran mal, símplemente que no tuvieron en cuenta lo que podría ocurrir en el futuro.

20 septiembre 2007

El Iceweasel de los huevos

Me iba a instalar Swiftfox en el nuevo portátil, pero me ha salido un aviso de que no tienen versión optimizada para Dual Core. Así que me he quedado con las ganas.

Me tengo que aguantar y usar el Iceweasel, que tiene un bonito problema. Como han cambiado el user agent algunas páginas te dicen que no usas un navegador compatible y no te muestra la página a pesar de ser símplemente Firefox con otro nombre y otro icono.

Para arreglar esto he instalado la extensión PrefBar que, entre otras cosas, permite modificar el user agent del navegador y así poner Firefox.

Ahora búscaré algún tema para cambiar el de Iceweasel...

Portátil nuevo y Envy

He conseguido un portátil nuevo: Core Duo2 a 2Ghz con una Nvidia 8600 Go.

Me he ido raudo y veloz a instalar Debian 4.0 r1 en él. Pero resulta que cuando ha terminado la instalación no funcionaban las X, decía que no encontraba ninguna pantalla.

He iniciado el Knoppix y me he copiado el xorg.conf que genera y con él ya me iniciaban las X.

Ahora con Automatix he ido a instalar los drivers oficiales de Nvidia haciendo un click. El Automatix ha hecho cosas pero al reiniciar se me ha quedado la pantalla en negro. He restaurado el antiguo xorg.conf para que volviera a funcionar.

Mirando por ahí de casualidad he visto que un chaval decía "usa envy". Buscando en un buscador he llegado a la web de Envy. Envy es un pequeño programa creado por un chaval italiano. El pograma muestra un menú de opciones muy simple: instalar drivers Nvidia, instalar ATI, desinstalar drivers Nvidia, desinstalar drivers ATI. Todo muy sencillo.

Ha tardado más que el Automatix y al reiniciar ha funcionado. Al iniciarse las X se muestra un logo gigante de Nvidia y el KDE va de lujo.

19 septiembre 2007

USB 3.0

He leído en OSnews la siguiente noticia: USB 3.0 brings optical connection in 2008.

Quiere decir que la nueva versión de USB que saldrá en 2008 en vez de cables de electricidad utilizará fibra ópica (cables por los que circula la luz). Un cable de fibra óptica básicamente es un cable de una especie de cristal de forma que cuando iluminas un extremo la luz viaja por el cristal (a la velocidad de la luz) y aparece instantaneamente en el otro extremo del cable.

Pero USB 1.0 y 2.0 permiten dar energía a los dispositivos conectados. Tengo un led que se conecta al USB y da luz, o mi mp3 se recarga mediante USB... Creo que no es posible utilizar luz óptica para recargar disposivitos así que junto a los cables ópticos deberán poner los típicos electrónicos como lo que tiene actualmente el USB 2.0. O eso creo.

Hoy en día los dispositivos USB 2.0 se pueden conectar a un ordenador con USB 1.0 pero van más lentos. Si cambian el tipo de cable no sé si se podrá meter dispositivos 3.0 en USB antiguos.

31 agosto 2007

Extensiones Firefox

Algunas extensiones de Firefox interesantes que uso:

DownThemAll: Mejor gestor de descarga que el que trae Firefox. Permite continuar descargas paradas y todo eso. Además permite bajarse todos los enlaces de una página, o lo que cumplan una expresión regular y mil cosas más. La extensión más útil de todas las que tengo.

Gmail Notifier: Añade un iconito en la barra de estado que te avisa cuando llegan emails a tu cuenta de Gmail. Ahora mismo no lo tengo instalado pero lo solía usar bastante.

Split Browser: Permite cargar varias páginas a la vez en la misma pestaña diviendo la ventana. Útil para pantallas panorámicas. Ahora mismo estoy escribiendo esto y en la otra mitad de la pantalla tengo la página de mozilla add-ons.

SubmitToTab: Mi último descubrimiento. Permite abrir en nueva pestaña las páginas que se cargan al pulsar un botón. En cierta web de prácticas en empresa que pone los enlaces como botones de formulario puedeser útil...

Extensión sin nombre: Permite rellenar con 0 todos los cuadros de texto de una página. La he hecho yo y la utilizo para rellenar con ceros las encuestas de horas de estudio del PACE.

LocationBar²: Mejora la barra de direcciones. Pone el nombre del servidor de un color, el directorio de otro, etc. Es útil para evitar phising y direcciones falsas.Lo he tenido instalados unos días pero lo he quitado porque me da problemas al copiar. Si selecciono el texto y ya no se copia al portapapeles de KDE como hace normalmente.

¿alguna otra extensión útil que utiliceis?

10 agosto 2007

Javascript rancio

Las peores páginas web son las que tienen Javascripts jodedores. Además estas páginas suelen ser sumamente feas.

Las peores mierdas que le meten a las páginas webs son estos en mi opinión:
- Bloquear el botón derecho (o central, o el que sea). En firefox puedes desactivar el javascript momentaneamente, pero puedes dejar inútil la página.
- Evitar que puedas guardarte las imágenes de una página. Se puede solucionar igual que el bloqueo de los botones del teclado, además el Internet Explorer permite guardar imágenes simplemente arrastrando la imagen al escritorio o a una carpeta.
- Que los enlaces sean javascript. No te deja abrir en pestañas las cosas y para esto no hay solución creo.
- Maximizar obligatoriamente las ventanas o quitar la barra del título. Esto se puede evitar con Firefox tranquilamente.

Ejemplos:
- Hace un rato estaba en la página Viaje a Japón, que no conocía y he llegado a través de un enlace. Pues había una noticia que me interesaba y he pulsado con el botón central para abrirlo en otra pestaña. El autor ha tenido la genial idea de que si pulsas cualquier botón del ratón que no sea el izquierdo te muestra un mensaje diciendo "Todos los derechos reservados". Esto lo hacen algunas webs para que no puedas copiar y pegar o guardar las imágenes en tu ordenador.

- Visito a veces eltorrenti.com, esta página además de ser fea, horrorosa y horrible. Al acceder a ella le da por maximizarte totalmente la ventana (y yo tengo un monitor de 1400 pixels de resolución horizontal, con lo que queda más fea aún).

- Muchas páginas de grupos de música o videojuegos cuando accedes simplemente tienen una imagen en el centro y se te abre una ventana nueva pequeñita con un montón de flash y tonterias.

- En la bandeja de entrada de Hotmail los enlaces a los emails no son enlaces, es una función javascript que añade un numerito a la dirección, por eso no es posible abrir emails de hotmail en pestañas.

01 agosto 2007

Contar hasta 60 con las manos

He leído en un blog de elPais.es un método para contar hasta 60 utilizando las manos.

Para conseguir esto utiliza las falanges para contar en vez de los propios dedos. Tenemos 4 dedos con 3 falanges cada uno (más el pulgar que tiene 2). 4 x 3 = 12. Bien

Con los 4 dedos extendidos tenemos las 12 falanges con el dedo pulgar señalamos la falange con el número actual.
1 2 3 4
5 6 7 8
9 10 11 12

En resumen, con una mano podemos contar de 0 a 12. Y con la otra mano como tenemos 5 dedos podemos indicar cuantas veces hemos llegado a 12. 5 dedos en una mano mientras cuentas hasta 12 con la otra: 5x12 = 60.

Contamos en base 12. Pero si en vez de contar del 0 al 5 en la segunda mano contamos igual que en la primera del 0 al 12 podemos llegar al número 144 (12x12).

Pero mejor aún, utilizando los dedos como si fueran dígitos binarios se puede llegar hasta el 1023. Tenemos 10 dedos y por tanto podríamos contar hasta 2^10 -1.

Eso sí, no queda bien contar con los dedos.

24 julio 2007

La impresora funciona

Finalmente he conseguido imprimir en Linux.

Tengo desde hace 2 o 3 años una impresora HP Laserjet 1020. Anteriomente tuve una impresora Lexmark también laser que gané en un concurso de programación y cuando se estropeó decidí comprarme otra laser. La HP que tengo ahora tenían una característica fundamental: era la más barata que había. Me costó unos 105 euros y acabo de ver en la web de PCBox y ahora cuesta 129, a pesar de ser un modelo bastante antiguo.

La HP Laserject 1020, por lo que he podido ver durante estos años, es una impresora laser bastante cutre, tiene una circuitería y lenguaje distinto al de otras impresoras HP por eso era tan barata. En Windows tiene unos drivers muy chulos: puedo imprimir a dos caras fácilmente, poner varias páginas por hoja, rotaciones y todo lo que hacen las impresoras normalmente.

Pero en Linux es otra historia, al tener un lenguaje tan extraño, los drivers típicos de HP no servían con esta impresora y alguien tuvo que hacer unos drivers adrede para este modelo.

Durante este tiempo he intentando varias veces hacer funcionar la impresora en Linux y no lo había conseguido hasta hoy.

Nota friki: Si tienes una impresora por puerto paralelo, puedes imprimir ficheros de texto ASCII enviándolos directamente al dispositivo. Con impresoras USB no lo he probado.
cat fichero.txt > /dev/lpt

Tanto Debian como Kubuntu vienen con un programa de HP llamado HPLIP. Mi error era intentar utilizar este programa para configurar la impresora, supongo que al ser una impresora "rara" no estaba soportada por el programa. Me decía que no tenía ninguna impresoa conectada.

Pero mirando en Automatix para Debian(bendito sea) he visto en el apartado "Drivers" que había algo de HP y aparecía el modelo de mi impresora. Lo he instalado rápidamente y he probado con el HPLIP y nada. Pero en el menú Sistema he encontrado una opción "Printers" y ahí en un programa muy cutre ¡he podido agregar la impresora!

He imprimido una página de prueba. Medio folio que pone arriba en grande Foomatic-GUI Printer Test Page y un pingüino pequeño al lado.

No me permite imprimir a 2 caras automáticamente como en Windows así que he tenido que pensar un algoritmo para ello:

1 - se imprimen las páginas pares en orden inverso
2 - se colocan las páginas recién imprimidas en la bandeja pero girándo el folio 180º
3 - se imprime las páginas impares en orden normal

Menudos rollos que suelto últimamente. ¡Salud!

23 julio 2007

Niveles de programadores

High School/Jr.High
===================

10 PRINT "HELLO WORLD"
20 END

First year in College
=====================
program Hello(input, output)
begin
writeln('Hello World')
end.

Senior year in College
======================
(defun hello
(print
(cons 'Hello (list 'World))))

New professional
================
#include <stdio.h>
void main(void)
{
char *message[] = {"Hello ", "World"};
int i;

for(i = 0; i < 2; ++i)
printf("%s", message[i]);
printf("\n");
}
Experienced Hacker
===================
#include <stdio.h>
#define S "Hello, World\n"
main(){exit(printf(S) == strlen(S) ? 0 : 1);}

rsync

Continuación de la historieta anterior.

He estado trasteando con los discos duros y he escrito un pequeño script que utiliza rsync para hacer copias de seguridad de los datos del home.

Disco duro 1 (40 GB):
- 1 GB de swap
- 39 GB de ext3 para Debian

Disco duro 2 (250 GB):
- 110 GB de ext3 para copias de seguridad
- 60 GB en FAT32 para lo que surja
- 65 GB en FAT32 para lo que surja

Disco duro 3 (80 GB):
- 50 GB de ext3 para copias de seguridad
- 30 GB de FAT32 para lo que surja

Las particiones FAT32 a lo mejor algún día puedan albergar un Windows XP pero de momento no tienen utilidad porque no suelo bajarme nada del P2P.

He creado un script que copia el contenido de /home a los otros 2 discos duros. Con rsync es igual de fácil que usar el comando cp.


#!/bin/sh
export PATH=/usr/local/bin:/usr/bin:/bin
echo `date` Inicio backup
rsync -arv --delete /home /backup1
rsync -arv --delete /home /backup2
echo `date` Fin backup


El parámetro -a de rsync intenta mantener toda la información de los ficheros: propietario, grupo, permisos, enlaces simbólicos, etc. Por eso hago el destino es también una partición ext3.

rsync hace una copia incremental, sólo copia los ficheros modificados o nuevos con lo a partir de la segunda copia de seguridad el proceso es relativamente rápido.

El parámetro --delete indica que se deben borrar en el directorio destino lo ficheros que no estén en el origen. Sin este parámetro los ficheros que renombremos o borremos en el home seguirán estando en el directorio de backup.

Estoy meditando sobre cada cuánto tiempo ejecutar el script. En un principio he programado cron para que lo haga cada hora, pero igual satura mucho el sistema y es peor.


Yo he usado rsync en un sólo ordenador, pero tiene soporte para realizar copias a través de ssh y un montón de opciones. El man es muy largo y tiene muchas cosas.

Discos duros y disqueteras

Tenía en el PC 2 discos duros, uno de 40 con el sistema operativo y otro de 80 con mis ficheros. Me he comprado un disco duro de 250GB porque el que uso para guardar mis cosas a veces no funciona, pero como a veces sí que funciona quiero dejarlo para guardar las cosas en 2 sitios por si acaso. También tengo un lector/grabadora de CD/DVD.

El PC está diseñado para admitir un máximo de 4 dispositivos de tipo IDE, así que puedo conectar los 3 discos duros y el DVD sin problemas. ¿Sin problemas? Pues resulta que la en la caja del ordenador sólo hay espacio para 2 discos duros y para 4 unidades tipo CD/DVD. También hay un hueco para la disquetera.

He decidido quitar la disquetera porque no recuerdo haberla usado jamás y así he obtenido un flamante hueco para el nuevo disco duro.

No tenía ganas de pelearme con el fdisk así que he decidido instalar gparted (me suena que en Kubuntu estaba kparted pero no lo he visto en los repositorios).

Al iniciar el gparted me pone: "Analizando discos". Y se ha quedado ahí indefinidamente. Mirando los mensajes del nucleo con dmesg he encontrado un montón de mensajes como estos:

end_request: i/o error, dev fd0, sector 0


Parece ser que gparted está en un bucle intentando acceder a la disquetera que está aquí, tirada en el suelo. La disquetera es una especie de herencia de los PCs de IBM de los 80 y 90 así que he pensado que a lo mejor no es "plug and play" como los otros dispositivos.

He borrado la entrada para la disquetera en /etc/fstab y mirando en la BIOS he encontrado una opción para indicar que mi disquetera de 1.44 es "none". Con esto he conseguido que Linux ya no busque la disquetera y no dé esos errores.

gparted ya inicia bien. Le he indicado que me cree una tabla de particiones en el disco nuevo con una partición de 150 gigas EXT3 y el resto del espacio en 2 particiones FAT32. También en el disco duro que falla a veces le he dicho que cree una partición EXT3 que ocupe todo el espacio disponible.

Le doy a "Aplicar" y al cabo de un rato la aplicación se cierra sin dar ningún error... mmmm... no me gusta que se cierren las cosas cuando estoy tocando particiones.

He vuelto a abrir el gparted y he hecho las particiones una a una, aplicando cada vez y no ha dado ningún error.

Ahora estoy reiniciando para comprobar que todo ha ido bien y me dispongo a escribir un montón de líneas nuevas en el fstab...

La idea es que cada día o cada hora lo que tengo en el home se copie al otro disco duro, creo que rsync vale para esto, lo voy a mirar y ya lo contaré.

15 julio 2007

Adios Kubuntu

He formateado el disco duro del PC porque hacía tiempo que no lo limpiaba. Tenía Kubuntu 7.04 Feisty Fawn y ahora le he puesto Debian 4.0 Etch.

Tengo un par de discos USB de 100 y 160 GB con particiones FAT32 y me fallaba muchísimo al copiar o mover muchos ficheros juntos. Para hacer copias de seguridad tenía que copiar carpeta por carpeta porque fallaba y se desmontaba sólo el disco externo.

Hoy me ha costado 2 horas copiar todo al disco usb por este fallo, teniendo que montarlo cada vez que fallaba. Tras instalar Debian lo he podido copiar todo de nuevo sin que fallara ni una vez. Así que el fallo debía ser algo de Kubuntu porque ya no ocurre.

Con Kubuntu al apretar el boton de encender el PC en vez de apagarse lo que hacía era mostrarme el menú de Apagar, Reiniciar, Hibernar, Cerrar Sesión. Ahora en Debian se me apaga directamente, lo cual me gusta más.

Creo que Kubuntu ha perdido mucho, hace tiempo me gustaba mucho pero la última versión que me gustó fue la 6.06, las siguientes no han ido todo lo bien que deberían así que abandono Kubuntu de momento.

He instalado la versión de Debian que viene con el escritorio KDE, es muy fácil de instalar (creo que ya lo comenté una vez) pero lo malo es que instala cientos de cosas. Con el sistema recién instalado tienes montones de programas que seguramente jamás utilizarás. Y entre los mil programas que instala no está Amarok...

Otro "fallo" de Debian es que viene con el navegador Iceweasel, que es el Firefox cambiado de nombre por problemas de licencias. Es exactamente igual que Firefox salvo el nombre, lo malo que le han cambiado el useragent, la cadena que envía el navegador cuando accede a una página y por eso muchas páginas te dicen que tienes un navegador compatible.

Además me gustaba mucho más el visor de imágenes que usaba Kubuntu, te cargaba la imagen en el mismo Konqueror pero salían flechitas para ir cambiar a la siguiente imagen o a la anterior. Con Debian te muestra la imagen pero no puedes cambiar a otra y eso es más rancio.

Seguramente todos mis "fallos" tanto de Kubuntu con de Debian se pueden arreglar... pero nunca me he puesto en serio a solucionarlos.

04 julio 2007

010101010101

El otro día alguien preguntaba en barrapunto sobre como programarías un bucle que va cambiando una variable de 0 a 1. Yo lo dejo ahí caer a ver las formas que se me ocurren.

int i = 0;
while (1) {
if (i == 0) i = 1;
else i = 0;
}

while (1)
i = !i;

while (1)
i = 1 - i;

while (1)
i = (i == 0)? 1: 0;

while (1)
i =1^i;

en python (c no tiene potencias)

while True:
i = 0**i

¿se os ocurren más?

24 junio 2007

LaTeX en los blogs

Hace unos días encontré un artículo en un blog sobre como insertar fórmulas matemáticas en páginas web: Fórmulas matemáticas con mimeTeX.

Existe un lenguaje basado en XML llamado MathML, creado por el W3C. MathML es muy bonito y tal y cual, pero practicamente ningún navegador puede visualizarlo.

Konqueror me muestra bien las fórmulas en esta página. Firefox me da un aviso de que me faltan fuentes matemáticas y hace un intento de mostrarlas pero no salen del todo bien.

La wikipedia tiene una característica que está muy bien: puedes escribir fórmulas directamente en LaTeX utilizando la etiqueta math. Al guardar el artículo utiliza LaTeX para generar las imágenes correspondientes al código que has escrito y al visualizar la página se ven las fórmulas como imágenes. Ejemplo: Artículo sobre las integrales.

Pues algo parecido a lo que hace la wikipedia podemos conseguir con mimeTex. Nos proporciona un cgi que podemos colocar en nuestro servidor para generarnos las imágenes sobre la marcha.

Como blogger no permite subir CGIs pues podemos usar el CGI de la página de los creadores de mimeTex.

Ejemplo:

<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?c=\sqrt{a^2+b^2}" >

Como vemos, escribiendo el código LaTeX después del símbolo ? nos genera una imagen con el resultado de ese código.

Resultado:



<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\mathcal{ADIOS}" >

23 junio 2007

Solución: El juego de las 10 y 10 piedras

Solución al problema El juegos de las 10 y 10 piedras.

Antes que nada decir que el título del problema es una puta mierda, pero no se me ocurrió uno mejor. El problema está inspirado en el capítulo de introducción del libro An Introduction to Bioinformatics Algorithms (el único que he leido, por cierto). En el libro lo llaman 10+10 game.

La solución más sencilla para encontrar una estrategia ganadora en este tipo de juegos suele ser la programación dinámica. Empezamos desde el caso más simple y vamos avanzando hacia casos más complicados.

En el juego 10+10 no empezaríamos en 10+10 si no en 0+0. Si te toca a ti jugar y quedan 0+0 piedras es obvia que has perdido. Si quedan 1+1, 1+0 o 0+1 siempre puedes ganar, porque al otro no le quedarán piedras para quitar. Si hay 2+0 piedras (o 0+2) y te toca jugar, sólo puedes hacer un movimiento posible y le lleva al otro jugador a 1+0 (o 0+1) en el que siempre gana.

Por tanto, cada pareja se numero x+y se le puede asociar un valor "puede ganar" o "siempre pierde". Podemos utilizar una matriz de 2 dimensiones. G indica "puede ganar" y P "siempre pierde". Si te toca jugar, puedes ver en que casilla estás para saber si puedes ganar o no la partida.

0 1 2
0 P G P
1 G G X
2 P X X

Estos son los valores que hemos calculado previamente para los casos más básicos. Vamos a calcular la posicion 1+2 utilizando la tabla. Desde la casilla (1,2) podemos ir hacia arriba (1, 1), diagonal arriba-izquierda (0, 1) o hacia la izquierda (0, 2). En los 2 primeros casos dejamos al otro jugador en una posicion "puede ganar" por lo tanto nosotros perderíamos, pero en el tercer caso le dejamos en "siempre pierde", por tanto la casilla en la que estamos es una casilla ganadora si vamos hacia la izquierda. Por tanto marcamos (1,2) con una G. (2,1) es equivalente así que también podemos marcarlo.

0 1 2 3 4 5 6 7 8 9 10
0 P G P
1 G G G
2 P G
3
4
5
6
7
8
9
10

A apartir de aqui podemos rellenar la tabla de izquierda a derecha y de arriba a abajo. En una casilla, si las casilla de arriba, izquierda y la diagonal son G, entonces esa casilla es P. En caso contrario es G.

0 1 2 3 4 5 6 7 8 9 10
0 P G P G P G P G P G P
1 G G G G G G G G G G G
2 P G P G P G P G P G P
3 G G G G G G G G G G G
4 P G P G P G P G P G P
5 G G G G G G G G G G G
6 P G P G P G P G P G P
7 G G G G G G G G G G G
8 P G P G P G P G P G P
9 G G G G G G G G G G G
10 P G P G P G P G P G P

Esta es la tabla completa para 10+10 gracias al copypaste. Como vemos si el primer jugador empieza en la casilla (10, 10) que está marcada como P, el jugador 2 siempre podrá realizar algún movimiento que le lleve a la victoria.

Muchas veces es mejor resolver un problema para casos muy básicos y cuando ya se domine, a partir de estos resolver los de mayor dificultad. Para esto sirve la programación dinámica.

21 junio 2007

Factoriales

El factorial de N es el producto de todos los números enteros desde 1 hasta N. Se escribe con el símbolo !:

N! = 1x2x3x...x(N-1)xN

Esto lo sabe todo el mundo. Ahora un problemilla para pensar un poco:

Tenemos un procesador que puede trabajar con números binarios de X bits. En los ordenadores normales X es potencia de 2: 4, 8, 16, 32, 64... pero en este problema eso no influye.

¿Cuál es el factorial máximo que podemos representar en ese procesador? Recuerdo que con X bits se puede representar desde el 0 a 2^X -1.

Con 4 bits podemos representar hasta el 15, por tanto el máximo factorial representable es 3! (1*2*3 = 6).
Con 5 bits el máximo es 31 así que sólo nos cabe 4! (1*2*3*4 = 24)

¿Cuál es la mejor manera de calcula el factorial máximo que cabe en esos bits?

20 junio 2007

El juego de las 10 y 10 piedras

Hay un juego (bastante aburrido por cierto) que consiste en hacer 2 montones de piedras. Cada uno ha de tener el mismo número de piedras (en este caso 10).

Hay 2 jugadores, por turnos cada uno tiene que quitar una piedra de uno de los montones (el que quiera) o una piedra de cada montón.

Gana el jugador que quita la última piedra.

La pregunta es: si eres el segundo jugador, ¿existe alguna estrategia para ganar siempre?

Ejemplo de juego de con 3 y 3 piedras.

1 - El jugador 1 quita una piedra del montón A (quedan 2 y 3 piedras)
2 - El jugador 2 quita una piedra de cada (quedan 1 y 2)
3 - El jugador 1 quita una piedra de cada (quedan 0 y 1)
4 - El jugador 2 quita una piedra de B y gana

Si queda en un momento 1 y 1 piedras el jugador puedes coger las 2 y ganar.

Solución: El tesoro

Voy a explicar la solución al problema El tesoro que puse el otro día por aquí.

Para saber la distancia mínima entre 2 puntos se utiliza el algoritmo de Dijkstra, este algoritmo obtiene la distancia mínima desde un punto de un grafo a todos los demás puntos. Cuando todos los pasos tiene el mismo coste se le suele llamar símplemente búsqueda en anchura.

Utilizando este conocido algoritmo se puede resolver fácilmente este problema. Lo única que hay que hacer es:

1 - Recorrer todo el mapa buscando los puntos (I)nicio y (F)in y guardarse en un array todos los puntos con (O)ro.
2 - Ejecutar el algoritmo de Dijkstra desde el punto I, a cada casilla del mapa se le asignará un coste CosteI(x,y) que es la distancia en casillas desde I a ese punto.
3 - Ejecutar el algoritmo de Dijkstra desde el punto F, a cada casilla del mapa se le asignará un coste CosteF(x,y) que es la distancia en casillas desde F a ese punto.
4 - Recorrer el array de oros, en cada posición de oros sumamos el valor de CosteI y CosteF para esa posición. La posición que tenga un valor CosteI+CosteF menor es el Oro que debe recoger el pirata en su camino.

Croe que esta es la solución más rápida, ya que sólo ejecuta 2 veces Dijkstra. Si alguien conoce una solución mejor que la comente...

16 junio 2007

El tesoro

Eres un pirata y has de viajar por un mapa desde I (de inicio) hasta F (de fin). El mapa es una cuadrícula y moverse hacia el norte, sur, este y oeste cuesta 1. No se puede ir en diagonal y los símbolos # son paredes por las que no se puede pasar. En el mapa hay varios tesoros marcados con O (de oro).

Ejemplo de mapa:

###############
# #
F # # O #
# #O ###### #
# #### O I
# # ######
# #
###############


¿Cuál es el camino mínimo para ir de I a F recogiendo al menos un tesoro?
No hace falta programarlo, simplemente decir cómo se podría obtener el mejor camino.

Ánimo.

15 junio 2007

Solución: Lista enlazada

Esta es la solución al problema del otro día.

Si la lista tiene punteros al elemento anterior, hay varias soluciones, pero si sólo hay punteros a "siguiente" creo que sólo hay una posible y es esta:

Inicialmente los 2 punteros apuntan al primer y segundo elemento de la lista. Entonces dentro de un bucle infinito vamos moviendo un puntero de uno en uno y el otro de dos en dos mirando si apuntan al mismo elemento.

El puntero que va de 2 en 2 llegará en la mitad de tiempo al final (si existe).

Si hay un bucle se pondrá a dar vueltas dentro de él, en algún momento el puntero lento llegará al bucle y en una o dos vueltas coincidirán.

En código creo es algo así, no lo he probado:

pLento = raiz
pRapido = raiz.siguiente
while (1) {
if (pLento == pRapido) {
printf("Tiene un bucle");
return 0;
}

if (pRapido == NULL) {
printf("Es finita");
return 0;
}

if (pRapido.siguiente != NULL)
pRapido = pRapido.siguiente.siguiente;
else
pRapido = pRapido.siguiente;
pLento = pLento.siguiente;
}

13 junio 2007

La lista enlazada

Este problema lo comentó un profesor un día en clase. Dicen que se lo preguntaron a un aspirante a ser contratado por una gran empresa. Supongo que también será de algún libro de programación.

El enunciado es muy simple:

Tienes una lista enlazada. La lista puede ser:

  • Finita

  • Infinita

  • Tener un bucle




class lista {
public int valor;
public lista siguiente;
}


Utilizando sólo 2 punteros y nada más ¿cómo podríamos saber de qué tipo de lista se trata? Inicialmente los 2 punteros apuntan al inicio de la lista.

A mí cuando me lo propusieron me salió una solución bastante cutre, a ver si alguien encuentra la guay. ¡ánimo!

Solución: Los números binarios

El otro día propuse un problemilla: Los números binarios. No lo inventé yo, lo leí en algún libro que ahora no recuerdo.

Vamos a ver la solución con la siguiente lista de números

1 1 1
0 0 0
1 0 0
1 0 1
0 1 0
0 0 1
0 1 1

¿Que número de 3 dígitos binarios falta?

La solución es:

Tienes un vector con tantos enteros como dígitos tienen los números, inicialmente en todas las posiciones ponemos 0.

Vector: 0 0 0

Ahora vamos leyendo los números uno a uno y sumamos 1 en las posiciones de nuestro vector para las que haya un 1 en el número que hemos leído.

Al leer los primeros números

Número: 1 1 1
Vector: 1 1 1

Número: 0 0 0
Vector: 1 1 1

Número: 1 0 0
Vector: 2 1 1

Cuándo hemos acabado de leer todos los números obtenemos el siguiente vector:

Vector: 3 3 4

Y cómo sabemos que tiene que haber en total igual número 1 en todas las posiciones deducimos que el número que falta es:

Número: 1 1 0




Pablo ha dado con una solución bastante buena que serviría para todo tipo de números, da igual si son o no binarios. Sólo hay que tener cuidado con un detalle: si empezamos a sumar muchísimos números grandes al final no cabrán en un entero y se desbordará.

11 junio 2007

Safari para Windows

Safari para Windows

los números binarios

Me he acordado de este problema a mitad de examen de ingeniería de la programación y aquí lo explico...

Tienes una lista de números binarios desde 0000000000 a 1111111111 (números de 10 digitos).

Algo así:
0000000000
0000000001
0000000010
...
1111111101
1111111110
1111111111

Pero no están todos, falta un sólo número en la lista. ¿cómo calcularías cuál falta?

Los números no están ordenados, así que no vale leer uno tras otro y ver si están seguidos.

Además, sólo puedes recorrer la lista una vez, y sólo tienes unos pocos KB de memoria para el programa, ¿cómo lo harías?

Ejemplo simple con 2 bits:

00
01
11

¿Cuál falta? El 10.

04 junio 2007

La letra del DNI en Python

Función de 2 líneas que devuelve la letra del número de DNI que le pasas.


def letraDNI(dni):
return "TRWAGMYFPDXBNJZSQVHLCKE"[dni%23]


Un ejemplo en la consola de python:


>>> def letraDNI(dni):
... return "TRWAGMYFPDXBNJZSQVHLCKE"[dni%23]
...
>>> letra = letraDNI(12345678)
>>> letra
'Z'

02 junio 2007

Trigrafos en C

Hoy he descubierto de casualidad una característica muy extraña de C (y totalmente inútil hoy en día). Resulta que cuando apareció C, no todos los teclados y los sistemas operativos soportaban los caracteres como #[]{}. Para poder escribir programas en C en estos sistemas se inventaron los trigrafos, que son combinaciones de 3 caracteres que representan esos símbolos.

Esta es una lista de trigrafos extraída de la wikipedia.


Trigraph Equivalent
======== ==========
??= #
??/ \
??' ^
??( [
??) ]
??! |
??< {
??> }
??- ~


A continuación pongo un Hola mundo creado por mí utilizando trigrafos para codificar algunos caracteres:

??=include <stdio.h>
int main(int argc, char argv??(??))
??<
printf("Hola mundo!!??/n");
??>

GCC no compila directamente este programa, hemos de pasarle -trigraphs como argumento para que compile correctamente.

gcc -trigraphs holamundotrigraph.c

Complejidad de Kolmogorov

La complejidad de Kolmogorov de una cadena S es el tamaño de la menor cadena de texto que permite definir S.

Tenemos esta cadena de 64 digitos:

S = 01010101010101010101010101010101
01010101010101010101010101010101

Se puede definir así: "escribe 32 veces 01". Tiene 19 letrás y por tanto el valor de la complejidad es 19.
K(S) = 19

Sin embargo esta cadena ¿cómo podría definirse?

S2 = 11001000011000011101111011101100
11111010010000100101011110010110

La mejor manera de definir esta cadena es símplemente escribir la cadena entera, por tanto:
K(S2) = 64.

Ninguna cadena puede tener un K mayor a su tamaño.

Las cadenas que tienen una K igual a el tamaño de la cadena original se llaman complejas. Porque no se conocen formas eficientes de definirlas.

Por ejemplo, que cuesta menos: ¿escribir los 1000 primeros números enteros o un programa en Python que cuando lo ejecutes te imprima los 1000 primeros números enteros?.

Imagina que quieres mandar todo tu disco duro a un amigo por el messenger, ¿podrías escribir un programa corto en algún lenguaje de programación que al ejecutarlo diera como resultado todo el contenido de tu disco duro? Se podría decir que ese programa sería todo tu disco duro "comprimido".

Bienvenidos al maravilloso mundo de la Algorithmic complexity theory. Dicen que es muy útil para ciertas cosas... yo pienso que...

24 mayo 2007

Montar imágenes de CD como si fueran CDs

Si te has bajado una imagen de DVD o CD, puedes montar en linux como si fuera un disco real y así ver su contenido. Esto es útil si no quieres grabar el disco por algún motivo o para ver antes de grabarlo si tiene lo que realmente esperas.


mount -t iso9660 -o loop archivo.iso /media/imagen


Este comando en principio sólo sirve para montar ficheros .iso, pero en los repositorios hay un montón de programas que convierten otros tipos de imágenes a .iso.

Para ficheros .mdf tenemos el paquete mdf2iso. Para imágenes .nrg existe nrg2iso, para imágenes .ccd el paquete se llama ccd2iso. Originales los nombres ¿no?

Si montas un CD de música o una película en DVD deberás configurar Kaffeine, Mplayer o el reproductor que uses para que busque en el dispositivo adecuado (/dev/loop0).

En caso de querer montar más de una imagen, normalmente hay varios dispositivos loop: loop1, loop2, ... etc. Podemos usar cualquiera de estos.

19 mayo 2007

La consola es tu amiga

Si quieres repetir el último comando que has escrito, puedes escribir !! (es equivalente a pulsar arriba):


$ pwd
/home/pito
$ !!
pwd
/home/pito


Si quieres ejecutar el comando anterior ligeramente modificado utiliza ^:


$ find . ejemplo1 | sort | wc
$ ^1^2
find . ejemplo2 | sort | wc


Si quiere buscar un comando que has ejecutado hace rato tienes 2 opciones:

Ejecuta el último comando que haya en el historial que empieza por la cadena "make"


$ !make


Esto a mí me gusta mucho porque te ahorra tener que estar apretando arriba hasta encontrar el comando que buscar. En el shell tcsh lo hace automáticamente pulsando arriba, si escribirmos "make" y pulsamos arriba no irá al comando anterior si no al último que empiece por "make".

Ejecuta el último comando que haya en el historial que contenga la cadena "make"


$ !?make
$ find . ejemplo1 | sort | wc > aeiouborriquitocomotu


Si has creado un fichero en el anterior comando, puedes acceder al nombre del fichero con !$


find . ejemplo1 | sort | wc > aeiouborriquitocomotu
$ cat !$
cat aeiouborriquitocomotu
...


Otro día más.

16 mayo 2007

Calculadoras

¿Porqué la calculadora de Windows o cualquier otra (cómo xcalc) son una ventana con 30 botones y un cuadro de texto? No entiendo porqué tienen que tratar de copiar a las calculadoras de mano. Me siento incómodo "escribiendo" operaciones haciendo clicks en los botones.

Intenta escribir esta operación en una calculadora normal y verás lo que cuesta:
(1/2 + 1/4 + 1/8 + 1/16)/3
En cambio en algunos programas es tan simple como escribir eso con el teclado y pulsar intro.

xcalc y similares han conseguir "emular" las calculadoras de mano de hace 10 años por lo menos. Porque desde finales de los 90, bastantes calculadoras científicas ya permiten introducir operaciones complejas y evaluarlas al pulsar la tecla EXE.

Para hacer operaciones yo utilizo python. Quizá porque leí el capítulo 3.1 del tutorial: Using Python as a Calculator. Es muy cómodo escribir las operaciones en la consola de python y creo que después de verme utilizarlo, varias personas han comenzado a usarlo también para estos propósitos. Python además no tiene desbordamientos en los números enteros y puede trabajar con número grandes de cualquier número de cifras.

Pero aparte de python, podemos utilizar otros programas más orientados al cálculo.

SpeedCrunch (viene con KDE) es una mejora respecto a xcalc porque además de los típicos botones te permite escribir operaciones complejas, como la de arriba y te muestra el resultado. Lo malo de SpeedCrunch es que es un programa de KDE y si usas el PIE seguramente no lo encontrarás y además creo que no tiene soporte para números grandes y si los números desbordan al tipo entero los convierte a coma flotante.

bc es un programa de consola que creo que está instalado en prácticamente todos los Unix que permite hacer operaciones. Es una alternativa a python, permite realizar operaciones con número gigantes sin convertirlos a coma flotante. Si necesitas utilizar funciones como el seno y coseno, has de utilizar el parámetro -l para que bc cargue la librería math.

% bc -l
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
s(10)
-.54402111088936981340


Por último, alguien sabe usar Octave? Creo que es una especie de clon de Matlab.

10 mayo 2007

Optimizar Ubuntu

He encontrado esta guía para hacer más rápido el sistema (K)Ubuntu. Yo como dejé de usarlo el otro día no lo he podido probar... pero por si a alguien le interesa.

Feisty Performance - “Fly Like A Butterfly”

Actualizo: Otra guía parecida pero en castellano, aunque esta es del 2005:
CÓMO optimizar Ubuntu GNU/Linux para sistemas de escritorio v. 0.3

05 mayo 2007

Intel PRO/Wireless 2200BG en Debian

Tengo una tarjeta Wifi Inter PRO/Wireless 2200BG en el portátil, en Kubuntu funcionaba perfectamente, pero al instalar Debian no aparecía en KNetworkmanager. No sabía que podía ocurrir así que se me ocurrió mirar en los mensajes del kernel (dmesg) y encontré esto:


ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection
ipw2200: ipw2200-bss.fw request_firmware failed: Reason -2
ipw2200: Unable to load firmware: -2
ipw2200: failed to register network device


Daba un error en el firmware... estuve buscando por internet y la gente daba distintas soluciones a mi problema que no funcionaban en mi caso. Después de mucho probar, me di cuenta de que no era ningún error, era un fallo mío.

Los drivers creados por Inter son libres y por tanto están incluidos en el kernel pero para funcionar necesitan un firmware que no es libre. Por eso me detectaba la tarjeta pero no podía cargar el firmware, al no ser libre el firmware no viene en Debian.

Me fui a la página del driver y me descargué la última versión del firmware:

http://ipw2200.sourceforge.net/firmware.php

Esta es la versión yo utilicé:
driver versions v1.1.1 and newer firmware v3.0

El fichero que nos hemos descargado es muy simple de instalar, descomprimimos y copiamos los ficheros en /lib/firmware.

Ahora hay que recargar el módulo del wifi (o reiniciamos para que lo haga sólo)


rmmod ipw2200
rmmod ieee80211
modprobe ipw2200


Tras hacer esto dmesg ya no mostró ningún error:


ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection
ipw2200: Detected geography ZZR (14 802.11bg channels, 0 802.11a channels)


Espero que a alguien le sirva...

Debian GN/Linux 4.0 Etch

Como no he conseguido configurar el VPN en ningún Kubuntu posterior a la versión 6.06 y quería probar algo nuevo me he instalado Debian GNU/Linux 4.0 codename Etch en el portátil.

La instalación es muy sencilla, te pregunta casi las mismas cosas que el instalador de Kubuntu y tienes la opción de utilizar un instalador gráfico.

La distribución incluye en el primer CD el entorno gráfico Gnome, así que yo me bajé el CD1 pero la versión especial que han hecho con KDE.

No sé porqué, pero al instalar este Debian, sin preguntarme nada me instaló automáticamente KDE y miles de aplicaciones. Tengo el menú ese de la K lleno de cosas sin haber instalado yo nada. Supongo que será por haber elegido este CD de KDE.

No me dió ningún problema con el hardware (salvo el wifi que ya comentaré). Además pude configurar el pptp rápidamente sin el estúpido error que da en Kubuntu.

Me ha gustado volver a Debian. Desde la versión siguiente a Potato no había usado Debian.

20 abril 2007

Kubuntu 7.04

He instalado la nueva Kubuntu y no ha sido todo lo fácil que debería.

Al meter el CD y reiniciar el sistema, se ha quedado colgado leyendo el CD de arranque y he tenido que apretar el reset. Después de esto el ordenador ni siquiera arrancaba... mal rollo. Después de 3 o 4 reinicios todo ha vuelto a la normalidad y el liveCD ha funcionado.

La instalación es casi igual que en la 6.06, salvo el menú para las particiones que ahora me gusta más, con el anterior me liaba un poco.

Cuando se ha acabado la instalación, he puesto al Automatix y para instalar los drivers de nvidia. Luego he probado lo de la ventanas transparentes un rato, como no me gustaba lo he puesto todo normal de nuevo.

El konqueror parece que ahora se abre mucho más rápido.

En cambio, Amarok no me funciona. Me dice que no tengo soporte para mp3. Cuando intento escuchar un mp3, me aparece una ventana cuyo título es "No hay soporta para MP3" pero la ventana está en blanco y Amarok se queda colgado en ese momento. No sé cuántas veces lo he matado ya. Nota: Ya lo he arreglado. He tenido que instalar a mano libxine-extracodecs.

Mañana lo probaré más que ahora tengo sueño.

Actualización: Amarok ya viene con las librería libmtp incorporada y ya puedo metes y sacar las canciones de mi mp3 Creative Zen V Plus. Las pocas veces que quería cambiar alguna canción me tocaba irme a Windows, ahora ya necesito una cosas menos del Windows...

Ahora sólo falta que funcione:
- la impresora HP
- el programa para meter roms en la Nintendo DS

En la web de Kubuntu pone que lleva un nuevo panel para las impresoras HP, pero aún no he mirado si la detecta correctamente, rezaré para que así sea.

06 abril 2007

Wii; Canal Opinion

La Wii tiene una tienda online accesible si conectas la consola a internet. La tienda está llena de juegos de consolas antiguas Nintendo y Sega. No me interesa lo más mínimo pagar por juegos viejos así que creo que utilice mucho la "consola virtual". Como curiosidad diré que parece que hay más juegos para Mega Drive y otras consolas de Sega que para la Super Nintendo.

También se puede "comprar" aplicaciones para la Wii, de momento sólo hay 2 y son gratis. El navegador Opera y el Canal Opinión. Estas son las únicas cosas que he "comprado" en la tienda de Nintendo.

El Opera está muy bien, tiene Flash y puedes ver los videos de Youtube perfectamente, pero es muy incómodo escribir las direcciones con el teclado en pantalla. Si estás aburrido lo mejor es irse a Wiicade, una página de juegos flash que dicen que están especialmente diseñados para la Wii.

El Canal Opinión es una cosa rara. Cuando lo vi, pensé que era una forma de hacer estudios de mercado y así obtener información de los usuarios. Que lo utilizarían perversamente.

Nada más lejos de la realidad, ponen "encuestas" de una sola pregunta con 2 posibles respuestas, y tienes que arrastrar a tu Mii hasta la respuesta que quieras.

Ejemplos de "estudios de mercado" realizados con el Canal Opinión:
¿Qué comida te gusta más? La pasta o La pizza
¿Madrugas o eres un animal nocturno?
Lees el periódico cada día
¿Has estado alguna vez en el extranjero?

Preguntas estúpidas para niños de 10 años... al menos no lo usan para hacer el mal (jajaja).

22 marzo 2007

La carrera de informática

Yo creo que la carrera de informática es una cosa rara. Después de estar estudiándola varios años y después de pensar unos segundos voy a disertar sobre los estudios que he cursado.

Existe la Ingeniería Técnica de 3 años y la Ingeniería de 5. Después de estudiar los 3 o 5 o más años, obtienes un diploma firmado por alguien que firma en nombre de otro alguien y ese alguien de otro alguien que firma en nombre del ministro de educación o del mismo rey. Con ese papel bajo el brazo ¿qué sabes de informática? ¿qué es la informática?

Veamos...
- sobre circuitos e ingeniería de computadores seguramente los que estudian ingeniería electrónica sabrán más
- en robótica, automática y todo eso están más preparados los de industriales
- en redes seguramente dominan los telecos
- en diseño gráfico o de webs nos barren en bellas artes o diseño industrial

La informática es tan amplia que como mucho nos pueden dar unas pinceladas de cada cosa, de forma que realmente no somos expertos en nada. Sin ir más lejos, la asignatura de base de datos tenía mucho más temario en el módulo de formación profesional que en la ingeniería técnica. No veo un campo que sea propiamente "informático".

Lo único que queda es la programación, la ingeniería del software. Y esta parte de la informática está plagada de gente que realmente no ha estudiado informática.

Entonces, tenemos una carrera muy amplia que no se centra en nada concreto, salvo el último año, pero con unas pocas asignaturas de especialización poco vas a especializarte. Eso es la ingeniería informática que veo ahora mismo.

Hace bastante años informática no era una ingeniería, era una licenciatura (cómo matemáticas, física...). No sé muy bien porqué se cambió.

El caso que yo he pensado una nueva estructura para la informática. Primero habría que separarla en 2 ramas
- Una licenciatura a la antigua usanza donde se centren en la informática como ciencia: computabilidad, algorítmica, grafos, teoría de lenguajes, teoría de códigos, etc.
- Una nueva carrera que sea Ingeniería del Software, donde se centren en el desarrollo de aplicaciones y bases de datos y en luchar contra "la crisis".
- Administración de sistemas sería un módulo, aunque a lo mejor tendría que ser de 3 años, porque 2 se queda corto creo yo.

El objetivo es eliminar la ingeniería informática que no es más que un pupurrí de asignaturas que poco tienen que ver unas con otras y que se podrían aprender en otras carreras. En algunas universidades se han creado dobles titulaciones como informática+teleco o informática+matemáticas. Que realmente informática+telécono no son 2 carreras sino 1 y media.

Bueno dejo de rallarme ya la cabeza. Si alguien lo ha leido entero y me dice que le parece le pago las llamadas de ONO a ONO.

Salud.

18 marzo 2007

Damn Vulnerable Linux distro

A veces pongo creaciones de gente con bastante tiempo libre y hoy lo voy a volver a hacer.

Resulta que alguien ha pensado que es más fácil hacer un sistema inseguro que uno seguro, así que se ha puesto manos a la obra y ha creado Damn Vulnerable Linux. Incluye versiones viejas de aplicaciones con agujeros de seguridad, configuraciones horrorosas para permitir juanqueas y todo ese tipo de cosas que nos hacen más alegre el día a día.

Además tiene una función didáctica para enseñar a los futuros a hackers...

Texto extraído de su web:
Actually, it is a perverted Linux distribution made to be as insecure as possible. It is collection of IT-Security and IT-Anti-Security tools. Additional it includes a fullscaled lesson based environment for Attack & Defense on/for IT systems for self-study or teaching activities during university lectures. It's a Live Linux Distro, which means it runs from a bootable CD in memory without changing the native operating system of the host computer. As well it can be run within virtual machine environments, such as qemu or vmware. There is no need to install a virtual machine if you use the embedded option. Its sole purpose in life is to put as many security tools at your disposal with as much training options as it can. It contains a huge ammount of lessons including lesson description - and solutions if the level has been solved by a community member at crackmes.de.

Los 7 pecados capitales de los programadores

Los 7 pecados capitales de los programadores. Está en inglés, a quien lo entienda le puede hacer gracia.

Otra parida: La jerarquía de los programadores.

Particiones encriptadas en linux

Filesystem encryption in mixed environments with TrueCrypt

He encontrado este interesante artículo en Linux.com sobre sistemas de ficheros cifrados. Utilizando TrueCrypt podemos cifrar una partición sin que las aplicaciones se vean afectadas. Truecrypt se encarga de dar a las aplicaciones los datos descrifrados para que trabajen y cifra lo que las aplicaciones escriben en disco.

Para descifrar una partición hemos de escribir la contraseña en el momento de montarla. Puede ser útil para tener en un pendrive cosas cifradas que no queremos que nadie pueda ver si perdemos el pendrive. Tendríamos que poner la contraseña cada vez que lo montamos en un ordenador y el sistema operativo debería de soportar TrueCrypt.

También funciona en Windows...

01 marzo 2007

Subversion mola 2ª parte

Primera parte del artículo.

Hoy vamos a crear un "servidor" de Subversion en el que guardaremos nuestras cosas, que podremos descargar desde cualquier ordenador y guardar los cambios otra vez en el servidor cuando queramos. Es decir, lo que hace Subversion desde siempre...

Quería comentar que a mí me gusta que cada proyecto esté en un repositorio independiente. No es necesario pero a mí me gusta más.

Necesitamos:
- Un ordenador en el que estén los repositorios. Ha de tener el servicio de SSH iniciado. Así que debería ser un UNIX para facilitar las cosas.
- Un ordenador desde el que nos conectemos para obtener la última versión del repositorio. Puede ser el mismo ordenador que el servidor. Ha de tener el cliente SSH.

Lo llamo "servidor" (con comillas) porque realmente no habrá un demonio de Subversion esperando conexiones, símplemente es que nuestro cliente de Subversion se conectará por SSH normal a la máquina servidor y hará sus cosas, sin necesidad de abrir ningún puerto más.

Crear un repositorio en el "servidor" es fácil y sencillo. Ya lo expliqué el otro día:
$ svnadmin create ~/tmp/repositorio
Debería crearse con el usuario que después vayamos a usar para conectarnos, para que no haya problemas de permisos. No hace falta permisos de administrador para nada.

Pues ale, ya está el servidor montado...

Ahora los clientes, para obtener la última versión del repositorio hemos de hacer un checkout. Para hacerlo de una máquina remota tendremos que usar algo así
$ svn checkout svn+ssh://localhost/home/x/tmp/repositorio proyecto
Con esta línea le indicamos que ha de coger el contenido del repositorio /home/x/tmp/repositorio que está en la máquina localhost (¡qué lejos!) y guardar los ficheros en el directorio local proyecto.

Al ser una conexión SSH normal nos pedirá la contraseña, nos preguntará si confiamos en la máquina remota y todo eso que sale siempre.

Luego para mandar al servidor nuestro cambios, lo que ya expliqué el otro día:
svn ci
No hace falta indicar el nombre de servidor ni nada porque Subversion ya lo recuerda y conectará al mismo. Eso sí, volverá a pedir la contraseña.

Nada más. Quien tenga dudas que las pregunte o busque en Google.

22 febrero 2007

Subversion mola

Tengo que hacer varios trabajillos de clase, así que me creado un repositorio svn (Subversion) para organizar las cosas. Subversion es un programa que se encarga de llevar un historial de las modificaciones que se han realizado en los ficheros de un proyecto. Es capaz de responder a las preguntas: ¿tengo la última versión del proyecto? ¿cómo era este fichero en día 1 de enero de 2005? ¿cuáles son los cambios desde la última versión? Un lujo si tienes ficheros desperdigados por distintos ordenadores, tenerlos controlados con Subversion.

Hoy voy a explicar básicamente el funcionamiento de svn para usar personal (sin tener servidor ni nada, todo en la máquina local). No sirve para controlar proyectos que están en varios sitios pero te puede servir para trabajar más tranquilo, si modificas muchas cosas de un programa pero luego te das cuenta de que no te gusta como queda simplemente has de volver a la versión del día anterior.

Lo primero que hay que hacer es crear un repositorio. Es la base de datos que usa svn para almacenar las versiones de los ficheros y toda su información. NO hay que tocar este directorio manualmente, como se puede ver tiene ficheros de uso interno de Subversion.
$ svnadmin create ~/tmp/repositorio
$ ls ~/tmp/repositorio
conf dav db format hooks locks README.txt
El comando svnadmin create nos crea un repositorio vacío (en la revisión 0).

Ahora debemos crear un directorio para el proyecto. Para ello hay que solicitar la última versión del repositorio.
$ svn checkout file:///home/x/tmp/repositorio proyecto
Revisión obtenida: 0
$ ls -la proyecto/
total 12
drwxr-xr-x 3 x x 4096 2007-02-22 21:38 .
drwxr-xr-x 4 x x 4096 2007-02-22 21:38 ..
drwxr-xr-x 7 x x 4096 2007-02-22 21:38 .svn

Hemos obtenido la última versión del repositorio, que inicialmente está vacío. Ahora podemos empezar a trabajar. Como muestra el comando ls -la, los directorios que están bajo el control de svn tienen un directorio oculto llamado .svn donde se guarda información interna. NO hay que tocar ese directorio, es necesario.

Creamos un proyecto "complejo":
$echo hola > fichero.txt
$ mkdir directorio
$ svn add *
A directorio
A fichero.txt

El comando svn add añade los ficheros indicados al svn para que sean guardados en el repositorio. En algunos casos no tendremos que usar *, por ejemplo si estamos trabajando con programas en C, si ponemos svn add * se guardarán también los ficheros a.out compilados y eso no tiene ninguna utilidad. Sólo hay que hacer svn add sobre un fichero determinada una vez, a partir de ese momento ya estará bajo el control de svn.

Mandamos la última versión al repositorio. Hay que hacer este paso a menudo para que el servidor siempre tenga la última versión.
$ svn ci -m "primera versión"
Añadiendo directorio
Añadiendo fichero.txt
Transmitiendo contenido de archivos .
Commit de la revisión 1.

Para obtener la última versión del proyecto:
$ svn update
En la revisión 1.

Para que este comando funcione hemos de haber hecho svn checkout anteriomente. Este comando lee la información de .svn para saber donde está el repositorio y a qué versión ha de actualizar.

Esta es una miniguía para utilizar svn a nivel usuario, con un repositorio ya creado online o con un repositorio en la máquina local. Subversion tiene muchísimas más cosas mágicas que nos hacen la vida más sencilla, pero esto es lo básico.

14 febrero 2007

Segundo cuatrimestre

Empieza el segundo cuatrimestre...

Los profesores de las asignaturas nos cuentan lo bonitas que son:
- Haremos un reconocedor de caras en APrendizaje y Percección
- Programaremos compresores de ficheros muy buenos en CODificación de la información
- Analizaremos secuencias de ADN en BIOinformática
- Desarrollaremos software de calidad en Ingeniería De la Programación
- Diseñaremos máquinas mejores gracias a Arquitectura e Ingeniería de Computadores
- Nos volveremos locos en Teoría De Lenguajes
- Aprenderemos Python en Estructuras de Datos y ALgoritmos
- No he ido a clase, así que no sé que haremos en Informática de Sistemas y Automática

Veremos en qué queda todo esto... ¡Ánimo a todos!

¿Qué vais a hacer este cuatrimestre?

10 febrero 2007

Consolas en China

Hace años nos llegaban a España las consolas NASA que eran copias baratas de la Nintendo Entertainment System (la mítica NES). Estas consolas de imitación venían de China o Korea y tenían cientos de juegos incorporados.

Pues bien, a los chinos no les gusta pagar a empresas extranjeras y prefieren hacerselo ellos mismos. Hace tiempo sacaron una imitación de la Dreamcast: la Treamcast.

Nintendo quiso evitar otra imitación como la de la NASA, se asoció con una empresa china y creó una consola barata especial para China: iQue Player. Esta consola está basada en la Nintendo 64 y es símplemente un mando que se conecta a la televisión. Los juegos se ponen en tarjetas de memoria y cuestan unos 5 euros. La mayoría de grandes juegos de la N64 han sido convertidos para esta consola con nuevos extras.

Esta consola en principio sólo se vende en China, y se estaba meditando si sacarla también en otros países pobres. Pero la gente de Europa y Estados Unidos también la quiere y se compran muchas por internet.

SAT

Hace unos días escribí un comentario en el blog de XAngel sobre el problema de P=NP.

Hablé de SAT, el primer problema que se demostró que era NP-Completo. Este problema es muy sencillo: tienes una expresión lógica, por ejemplo

(A and B) or (not C and not B) or (not C and not A)

La pregunta a resolver es: ¿hay alguna combinación de valores True, False para A, B y C que hagan que esa expresión sea cierta? ¿cuál?

Una persona, pensando un poco podría encontrar la combinación pero para una máquina el cálculo tiene coste exponencial. Si en vez de 3 variables hubiera 100, un ser humano seguramente ni se atrevería a buscar la solución y un ordenador tardaría milenios en encontrar la solución.

Este es el problema SAT (Satisfiability).

No se conoce un algoritmo rápido para calcular la solución, sólo hay algoritmos exponenciales. Si se consiguiera encontrar uno, cambiaría radicalmente la informática que conocemos:


Is there an efficient solution to SAT? Is there some ingenious procedure that quickly determines whether any given proposition is satifiable or not? No one knows. And an awful lot hangs on the answer. An efficient solution to SAT would immediately imply efficient solutions to many, many other important problems involving packing, scheduling, routing, and circuit verification. This sounds fantastic, but there would also be worldwide chaos. Decrypting coded messages would also become an easy task (for most codes). Online financial transactions would be insecure and secret communications could be read by everyone. (MIT)



Se cree que no existe semejante algoritmo y que, de momento, la criptografía es hasta ciento punto, segura.

MIT OpenCourseWare

¡¡¡¡Se acabaron los exámenes hasta junio!!!! Para los que sientan un irrefrenable deseo de adquirir conocimientos recomiendo que le echen un vistazo a el MIT OpenCourseWare.

El MIT es una de la Universidades más importantes de Estados Unidos y del mundo. Muchos grandes avances científicos han ocurrido en sus laboratorios. Pues un día se les ocurrió crear este portal y colgar allí todo el contenido de sus cursos (transparencias, resúmenes, ejercicios, exámenes). Vendría a ser como las microwebs de la UPV, pero todo accesible y con licencia Creative Commons. Además cada curso tiene su foro, aunque yo me he metido en un par para probar y no había mensajes, quizá te respondan profesores si preguntas algo ahí...

Sólo he mirado un poco por encima el OpenCourseWare, si alguien se atreve a intentar estudiar algo de ahí que lo comente. Yo veo que los cursos esos tienen mucho nivel. Por ejemplo dos cursos de informática que he mirado:

6.046J Introduction to Algorithms (SMA 5503), Fall 2005. Este tiene también videos con las clases grabadas.

6.045J Automata, Computability, and Complexity, Spring 2005.

Estos dos cursos, que según pone ahí son de un semestre, yo creo que en España sería 2 asignaturas anuales como mínimo... una bestiada. Pero claro es el MIT, supongo que ahí no entra a estudiar cualquiera.

No sólo hay cursos de informática, se pueden encontrar cursos de historia, biología, literatura, y de varias cosas que no sé ni que son.

31 enero 2007

Pixels chungos en los monitores LCD

Hace unos días encontré esta guía sobre como hacer frente a los pixels muertos de los monitores.

Explical a distinción entre "pixels muertos" (los que se han quedado apagados para siempre), los pixels "trabados" (que se han quedado bloqueados en un color determinado) y los "hot pixels" que son pixels erroneos que sólo se manifiestan cuando el monitor lleva un rato encendido y se caliente demasiado.

Además explica diversos métodos para arreglar (o intentar arreglar) estos pixels. Yo tenia 2 píxels chungos y leí en una página que presionando muy fuerte con algo puntiagudo en el pixel se podía solucionar. Utilicé el lapiz de la Nintendo DS para no rallar la pantalla y presioné muy fuerte con él en la zona del pixel. ¡Desapareció instantaneamente! El otro pixel no conseguí arreglarlo con el mismo método, probé todas las extensiones de esta técnica: presionar con el monitor apagado, presiona con el monitor mucho rato encendido, presionar mientras se enciende, mientras se apaga, pedirlo por favor... Así que ahora sólo hay un pixel raro en ese monitor.

Aviso que el método de pinchar el monitor con algo puede joderlo más. Luego que no llore nadie.

Quien quiera humor que se pase por mi blog cachondo.

27 enero 2007

FreeSBIE


Ha salido la versión 2.0 de este LiveCD de FreeBSD desarrollado en italia: FreeSBIE. En NewsForge podemos leer un artículo sobre el sistema FreeSBIE.

Otro LiveCD interesante para quien quiera probar FreeBSD sin calentarse la cabeza es Frenzy.

26 enero 2007

Batería de Litio

He encontrado en la bitácora de MacGyver una explicación sobre el funcionamiento de las baterías de litio que todo el mundo tiene en sus portátiles (y móviles). Todo lo que debes saber sobre las baterías de litio (+ ó -)

Incluye algunos consejos y explicaciones para que nuestras baterías duren más, pero el tal MacGyver no explica como hacer una batería de litio con papel de plata, queso y un clip.

PC-BSD

Instalar FreeBSD es bastante fácil para todo aquel que conozca como funcionan las particiones y sepa un poco los comandos básicos UNIX. Para el que no quiera instalar FreeBSD a saco o tenga miedo, ha aparecido PC-BSD.

PC-BSD pretende ser una especie de Ubuntu para FreeBSD: utilizando el mismo sistema base, crear una distribución fácil de instalar y de configurar, pero teniendo por debajo el sistema FreeBSD para el que quiera hacer cosas avanzadas.

Este sistema BSD incorpora un nuevo sistema de paquetes (además de los ports, que se pueden utilizar). Este sistema es parecido a los instaladores de Windows. Te bajas el paquete, doble click y a instalar.

Este tipo de paquetes (llamadas PBI) pueden ser muy útiles para instalar cosillas que a mucha gente se le resisten. Por ejemplo, algunas personas no han podido hacer funcionar el plugin de flash en su FreeBSD. No existe plugin para FreeBSD y se ha usar el de Linux. Simplemente bajando y instalando el PBI correspondiente podremos tener flash en nuestro sistema.

05 enero 2007

Instalando Windows

Por alguna extraña razón de vez en cuando toca reinstalar Windows. Da igual que uses Firefox, que no abras correos extraños, el mal siempre llega por cualquier lado.

Esta vez mi hermana, infectada en su ordenador con algún virus extraño metió una tarjeta SD en el lector para copiarse unas fotos. Otro día meto la tarjeta SD en mi ordenador y veo que en la raiz de la tarjeta había un ejecutable oculto y un fichero autorun también oculto. Busqué cosas raras en el inicio, procesos extraños en el sistema, y encontré un par de programas espías.

Recuerdo hace años que te decían que los disquets que te dejaban los amigos podían tener virus, ahora son las tarjetas SD de las hermanas...

El caso es que de vez en cuando toca reinstalar Windows, es como un ritual, afortunadamente puedes leer un libro o manga, jugar a la DS o cualquier otra actividad porque es una hora y media en la que no vas a tener que hacer mucho.

Resumen de lo que es una instalación de Windows (para mí)

Los pasos son muy mecánicos para instalar el Windows XP. Metes el CD, reinicias, lees la licencia :), F8, intro, elijes la partición, formato NTFS rápido...

Al rato se reinicia, y ya con un entorno gráfico algo más colorido te pide que configures el teclado y la región y todo eso. Yo en este caso siempre quito las distribuciones extra de teclado que mete Windows porque le da la gana, no sé para qué sirven así que las quito: Variación del español, Española (alfabetización tradicional) y Inglés (Estados Unidos).

Luego te pide otros datos: nombre, organización, nombre del equipo, contraseña de administrador... No sé si a alguien más le pasa pero la contraseña de administrador de windows luego se me olvida y nunca sé cuál es, ni llego a utilizarla jamás.

Luego elijo la configuración de red típica, como no pilla la tarjeta wifi la configuración de red no es típica, es nula.

Por fin se inicia Windows con su maravillosa pradera de los Teletubbies. Fondo que nunca suelo cambiar, así parece que el XP esté recién instalado, aunque en verdad esté lleno de mierda. Lo primero es instalar los drivers de la tarjeta wifi para ir descargandose las (miles) de actualizaciones de seguridad.

También hay que instalar los drivers de TODOS los cacharros porque Windows XP no tiene drivers para ninguno: Chipset de la placa base, tarjeta gráfica, ethernet, lector de tarjetas SD, el audio, los botones guays del teclado, el touchpad, la impresora...

Tras instalar los drivers de todo, disponemos por fin de un sistema totalmente usable que incluye: el Buscaminas, el Paint, el Wordpad y el Internet Explorer. Hay que instalarse algunos programillas para poder hacer cosas con el ordenador.

Instalo los programas básicos que utilizo:
  • Firefox 2 con el plugin Down Them All: para navegar.
  • PowerDVD: jamás miro películas pero bueno ya que lo daban con el portátil...
  • MSN Live Messenger: el AMSN no es tan estable como en Linux y me falla mucho.
  • VLC: Para ver videos y cosas de esas.
  • Thunderbird: Para leer el correo.
  • OpenOffice: Para ver los nefastos documentos .doc y .ppt que me mandan.
  • 7zip: compresor/descompresor, cada versión que sacan mola más.
  • Foxit Reader: visor de PDF, muchísimo más ligero que el Acrobat. Un gran descubrimiento para todo usuario de Windows.
  • WinSCP: para acceder por FTP seguro a otros ordenadores.
  • Nero Burning Rom: para grabar cds, aunque dentro de poco será un sistema operativo independiente. Hace de todo: convierte ficheros de audio, crea menus de DVDs, edita video...
Esta última instalación de Windows tuvo algunas novedades interesantes:
  • Java SDK 6: No sabía que ya estaba el java 6... apenas me ha dado tiempo a ver que trae nuevo el 5.
  • Foobar2000: Para escuchar música, dicen que es muy ligero y simple, nunca lo había usado. Sustituye al Winamp, que he usado durante años.
  • Antivir: Antivirus gratuito para protegerme de lo que pueda llegar.
  • Comodo Personal Firewall: Cortafuegos que dicen que es muy potente para que en caso de "adquirir" programas espía, que lo tengan más difícil para comunicarse con su hogar.
En este punto de la instalación, habré reiniciado unas 5 o 6 veces el ordenador, y se sigue bajando actualizaciones de seguridad a mansalva.

Ahora toca tunear un poco el sistema. En las opciones de rendimiento elijo rendimiento máximo, esto quita la mayoría de pijadas que trae windows, como ventanitas redondeadas, sombras en los iconos y tonterías varias. Look Windows 2000 sin ningún pijerío gráfico.

Con la utilidad msconfig, quito un montón de aplicaciones del inicio del sistema que no sirven para nada pero que los programas se empeñan en instalar. El lanzador del Nero, el del OpenOffice, el programa del modem 56K y tonterías de esas.

Ahora con el administrador de tareas, hay que ver qué procesos hay en marcha en el sistema y anotarse los que haya. Cada varios días o semanas volver a mirar los procesos activos para ver si se ha colado "algo raro".

Otro día contaré más cosas, que este artículo es un poco largo ya. Comentar lo que sentís al instalar Windows!!!!