P@$$w0rd: seguridad e imaginación

123456, 12345, 123456789, password, iloveyou. ¿Te suenan de algo? Éstas son las cinco contraseñas más utilizadas en el mundo entero.

Basamos la seguridad de nuestra información en contraseñas sencillas. Hoy en día, tenemos toda la información al alcance de la mano (de cualquiera). Para protegerla, nos inventamos una serie de carácteres que la protejan de manos ajenas. Este mecanismo no siempre es efectivo a causa de ataques informáticos o debido al uso de contraseñas fácilmente adivinables o repetidas.

Adivinos hay de muchos colores, pero pocos adivinan contraseñas. Los que lo hacen, no funcionan siempre. Por eso es tan dificil medir la seguridad de una contraseña: los indicadores de fiabilidad suelen dar resultados contradictorios. Por eso, es útil basarse en tests estadísticos que nos permitan interpretar la frecuencia de una contraseña.

Utilizando datos reales [1], podemos visualizar la probabilidad de adivinar una contraseña a base de probar las más comunes:

Probabilidad_Acceso_Cuenta_Intentos

Este resultado está algo realzado, ya que las contraseñas utilizadas eran de una página corriente, y no un banco o entidad oficial. Además, hoy en día muchas aplicaciones no te permiten poner contraseñas sencillas como «12345». Por otra parte, si conociéramos al propietario de la cuenta, adivinar su contraseña podría ser una tarea mucho más fácil.

Destaca que podamos adivinar el 10% de las contraseñas con tan solo 700 intentos. De hecho, el 94% de esas contraseñas se encontraban en diccionarios de contraseñas (utilizados para atacar sistemas probando todas las combinaciones).

Nube de contraseñas
Nube de contraseñas: a mayor tamaño, más cuentas asociadas con la contraseña.

 

Contraseñas hay de todos los colores, formas y tamaños. Pueden llegar a ser tan complicadas como queramos imaginárnoslas. Ahí está la clave de una contraseña memorable pero segura: la imaginación. Si en vez de utilizar «12345» decides utilizar «1234567», tienes que saber que casi al 0.06% de los usuarios se les ha ocurrido la misma idea (que es un número muy grande porque ¡debería ser única!). Si en vez de usar «password» escribes «password1», estás utilizando la 28ª contraseña más usada.

Existen varios consejos efectivos para escribir contraseñas seguras: el experto en seguridad Bruce Scheneir aconseja utilizar la primera letra de cada palabra de una frase que te resulte fácil de recordar, puedes utilizar un gestor de contraseñas que las genere automáticamente, e incluso hay quién escribe mensajes de autoayuda en contraseñas realmente seguras. Sin embargo, para escribir contraseñas que además sean memorables hazte la siguiente pregunta: ¿Qué es lo que sabes tú y solamente tú?

 

[1] Los datos han sido obtenidos de una filtración de más de 32 millones de contraseñas ocurrida en RockYou.com en 2009. Se han usado contraseñas reales con el objetivo de exponer las implicaciones respecto a la seguridad y mejorar así su uso. En la redacción de este análisis no se ha maltratado a ningún animal.

Bitcoin: crónica de una muerte anunciada

El Bitcoin es una moneda virtual descentralizada que se ha puesto muy de moda en los últimos años. Nació en el 2009, y desde entonces ha ido aumentando y disminuyendo de valor drásticamente.

Valor del bitcoin en dólares, últimos dos años
Valor del bitcoin en dólares, últimos dos años

La tecnología, a grandes rasgos, es la siguiente: una serie de personas tiene ordenadores dedicados a minar bitcoins. Cada 10 minutos, una de esas personas, escogida al azar, crea un «bloque», con lo que recoge todas las transacciones que la gente ha pedido, las escribe en su bloque, publica el bloque y gana 25 bitcoins de recompensa más las comisiones (que varían entre 0.05 y 0.20).

Las ventajas que ofrece este sistema como moneda virtual son:

  • No tiene una autoridad central. Todo el mundo puede controlar un pedacito de bitcoin. Cuantos más ordenadores tengas dedicados, más pedacito controlas. Mientras no haya alguien que controle el 30% de la red, no debería ser posible ningún ataque a la red bitcoin.
  • La tarifa por transacción. Actualmente es menor que en los bancos tradicionales.
  • Y nada más.

Pero no todo es bonito en Villa Bitcoin. Sin entrar en detalles de la gran especulación que ha suscitado (muy positiva para su desarrollo y difusión), hay otros motivos por los que el bitcoin no puede competir en el largo plazo.

Primero, el bitcoin no está respaldado por nada ni nadie más allá del bitcoin mismo. El valor del bitcoin es una convención social: cuando la gente no quiera comprarlos, no valdrán nada. Esto es consecuencia de la falta de autoridad central: el valor del bitcoin está ligado tan solo al individuo que lo usa. Una moneda en circulación (e.g. el euro) tiene el apoyo de una comunidad, lo cual no solo incluye a las personas individuales sino también a las reglas sociales establecidas (leyes, instituciones, etc).

Segundo, las comisiones están falseadas. Hoy en día, la recompensa del minero son los 25 bitcoins extra. No obstante, el bitcoin está diseñado para que esta recompensa vaya disminuyendo gradualmente (se divide entre 2 cada 4 años; es decir, empezó en el 2009 con 50 bitcoins por bloque, y en el 2030 será de 3,125 bitcoins por bloque). En el futuro no será suficiente para mantener los costos equipamientos para minar, con lo que las comisiones aumentarían desproporcionadamente.

Tercero, no imita al sistema bancario actual. Actualmente, la inestabilidad de su precio no es aceptable. Además, las transacciones son mucho más lentas (no son apropiadas para compras en tiendas ya que no se pueden dar por confirmadas hasta pasados 60 minutos) y, sobre todo, no es seguro para el usuario. Tú tienes el control total de tus bitcoins, lo cual quiere decir que los puedes perder por culpa de un simple virus de ordenador o por no recordar la contraseña con la que los encriptaste. Este autocontrol implica una responsabilidad que no todo el mundo es consciente que debe asumir.

Logo Bitcoin

El bitcoin es una mala mezcla de buenas ideas. Evitar que alguien pueda controlar tus compras o tu dinero sin tu responsabilidad es beneficiario en muchos casos, utiliza criptografía moderna genialmente aplicada a un problema real y, además, es un ejemplo de comunidad devota y unida. No obstante, el bitcoin tiene demasiados inconvenientes como moneda virtual. No veo factible que nunca llegue a imponerse al sistema bancario actual, aunque abre una puerta a nuevas maneras de abordar mejoras en la gestión del dinero.

 

Si quieres obtener más información sobre el bitcoin empieza por la página oficial. Si te interesa la información técnica en tiempo real, esta es una buena opción. Para descargarte el software para formar parte de la comunidad bitcoin (llamado Bitcoin-Qt), puedes hacerlo aqui.

Aplicación móvil: Spanglish (I)

Con la idea de convertir el aprendizaje en un juego (algo así como Gamificación), nace la idea de crear una aplicación para el móvil que mezcle aprendizaje con juego.

En un tablero con 60 casillas, entre 2 y 4 jugadores pueden ir avanzando si responden las preguntas correctamente. Las preguntas están creadas específicamente para aprender ingles (de ahí el nombre). El objetivo del juego, por otra parte, es adelantar a los oponentes para eliminarles, dando vueltas al tablero hasta que solo quede un jugador.

Las preguntas pueden ser de tres tipos: preguntas tipo test multirespuesta, preguntas de adivinar una palabra (por ejemplo, una de las palabras de un refrán) o preguntas de ordenar las letras de una palabra determinada.

Actualmente la aplicación se encuentra en desarrollo por falta de tiempo. No obstante, espero que esté disponible próximamente tanto en la AppStore como en Google Play. Utilizando las facilidades de una aplicación híbrida, es fácil crear aplicaciones mediante conocimientos web que se puedan utilizar en una gran variedad de dispositivos.

Aplicaciones híbridas

Al programar una aplicación para móvil o tabletas, se tiene que tener en cuenta si va dirigida a la Apple Store (iPhone, iPad, iPod y Mac), o a Google Play (todos los dispositivos Android, que son básicamente casi todo lo que no es Apple). La programación es diferente en función de la elección (lo cual es una dificultad artificial creada por Apple y Google para potenciar sus propios dispositivos).

Las aplicaciones híbridas son una solución elegante a este problema. Una aplicación híbrida es, a grandes rasgos, una página web guardada dentro del móvil. Cada móvil utilizará su propio navegador para ver el contenido. Gracias a que la navegación web está bien estandarizada, la aplicación será prácticamente idéntica en todos los dispositivos. Además, se escribe en HTML, CSS y Javascript, con lo que es fácil de maquetar y añadir funcionalidades (todas las páginas están hechas así; la página web donde lees esto está hecha así).

La magia la proporciona la librería Apache Cordova. Es una librería que se puede llamar desde Javascript y que proporciona todas las funcionalidades de una aplicación nativa: almacenamiento, acceso a la cámara, geolocalización, notificaciones, etc.

Hay varios entornos de desarrollo que integran Cordova: PhoneGap y Netbeans son dos ejemplos. Sin embargo, me llama la atención la cantidad de IDEs que son aplicaciones web: AppBuilder (antes Icenium), ApplicationCraft, appery.io, e incluso PhoneGap tiene su propia versión web. Hay una lista más exhaustiva aqui.

Por contra, la desventaja de las aplicaciones híbridas es el rendimiento: están escritas en un lenguaje web (Javascript), que es interpretado por el navegador (Java), que a su vez está interpretado (JVM).

 

Desmontar un Disco Duro (HD)

Para un proyecto necesitaba uno de los componentes que tiene un disco duro (HD del inglés, Hard Disk). Aprovechando que tenía uno en casa que ya no funcionaba, me he dedicado a destriparlo.

El disco duro no es más que un disco de óxido en el que se almacena información como en las bandas magnéticas, pero con mucha mayor densidad de información. Por ello, podemos distinguir diversas partes:

  • Un rotor, que hace girar los discos.
  • Uno o más discos recubiertos con material magnetizable, generalmente algún tipo de óxido.
  • Un cabezal para guardar o recuperar la información.
  • Un sistema de para mover el rotor por la superficie del disco. En general este sistema utiliza dos imanes de neodimio muy potentes.
  • Una placa de control electrónico.

Sin más preámbulos, el proceso ha sido el siguiente:

Disco duro montado
Disco duro montado

El disco duro, un modelo externo y portátil de 120 Gb, se ha desmontado con un destornillador de estrella, un destornillador tipo T5 y una «uña» de plástico para sacar las pestañas y hacer palanca con facilidad.

Sin la carcasa, observamos el plato superior (en este caso, tenemos 2 platos, uno encima del otro), el cabezal justo arriba, y el soporte de los imanes de neodimio arriba a la derecha.

Disco duro sin la carcasa
Disco duro sin la carcasa

Los discos de óxido, una de las partes más espectaculares, son láminas perfectamente pulidas. La foto está hecha desde arriba para que se aprecie lo bien que reflejan la luz.

Discos de óxido
Discos de óxido

El soporte para los imanes de neodimio son dos placas de hierro. En la foto se pueden apreciar los imanes: dos finas láminas también de color metalizado, pegadas en el interior de cada una de las placas de hierro. Destacan por la fuerza magnética que tienen: en la foto, las placas de hierro están pegadas únicamente por la fuerza del imán, y cuesta separarlas solo con las manos.

Detalle de los imanes de neodimio
Soporte de los imanes de neodimio

Finalmente, el cabezal lector. Este es el componente que quería reutilizar para otro proyecto. En la foto se muestra en detalle cómo es y que partes tiene. Por una parte, están los cabezales propiamente dichos (en este caso cuatro cabezales, dos por cada plato). Por la otra, hay una bobina que se introduce entre los imanes de neodimio. Mediante la bobina y los imanes se consigue rotar el cabezal para leer o escribir en el sector del disco requerido.

Detalle del cabezal
Detalle del cabezal

Apuntes programación concurrente [CAT]

Ya están colgados en la sección de descargas unos apuntes de programación concurrente con el lenguaje Java (en catalán). Están basados en la asignatura del mismo nombre del plan de estudios de Ingeniería de Telecomunicaciones (plan ’92) de la UPC. Básciamente cubren los aspectos de semáforos, monitores y paso de mensajes (aplicado a la computación distribuida).

¡Que aprovechen!

Universidad online

Desde hace un tiempo están proliferando las plataformas que se dedican a ofrecer cursos de nivel universitario gratuitamente y de forma completamente online. Aprovechando el potencial de internet, un pequeño grupo de profesores es capaz de llegara enseñar a más de 30.000 alumnos simultáneamente. Los cursos suelen estar planificados para entre 4 y 12 semanas, y habitualmente cuentan con vídeos explicativos y cuestiones semanales.

Las plataformas más importantes en este campo son:

  • Coursera.org: fundadada por la universidad de Stanford, actualmente cuenta con más de 2 millones y medio de usuarios. Aquí se pueden encontrar los más de 200 cursos ofrecidos por diferentes universidades a nivel mundial. En inglés.
  • Edx.org: portal fundado por el Massachusetts Institute of Technology y la universidad de Harvard. Se ofrecen 20 cursos de calidad de, actualmente, 6 universidades de prestigio internacional. En inglés.
  • Udacity.com: portal con alrededor de 20 cursos, centrándose sobretodo en temás tecnológicos. También en inglés.
  • UnedComa.es: con alrededor de 15 cursos, la plataforma creada por la UNED es la más extensa en castellano.
  • idesweb.es: se ofrece un curso titulado «Introducción al Desarrollo Web». En castellano.
  • Y muchos más: canvas.net, alison.com, openlearning.com, ck12.org, saylor.org, …

Recursos online para compartir

Cada vez aparecen más herramientas en la red que se pueden utilizar de manera simultánea entre un grupo más o menos grande de gente. Además, todas estas herramientas están, lógicamente, guardadas en la nube, así que son accesibles desde cualquier dispositivo con un navegador. Es curioso pero siempre que piensas que sería genial que exisitiera algo, suele existir.

Aquí hay una recopilación de diferentes recursos que pueden ayudar:

  • Google Drive (antes Google Docs): el precursor por antonomasia. Creación de documentos, presentaciones y hojas de cálculo vía navegador web.
  • Diagrams Online: herramienta online para crear diagramas de bloques con un par de clicks. Se pueden exportar gratuitamente en diversos formatos, entre ellos PNG.
  • ShareLatex: editor online de Latex (editor avanzado de texto WYSIWYM, What You See Is What You Mean). Edición y compilación vía web.
  • Editor de ecuaciones Latex: editor online de ecuaciones de Latex para descargarlas como imágenes, formato PNG.
  • OCR Online: herramienta OCR (Reconocimiento Óptico de Carácteres), utilizada para extraer el texto de una imagen o un documento escaneado. Gratuita y online, pero con resultados no excesivamente buenos.
  • CircuitLab: editor y simulador de circuitos electrónicos.

Y la lista podría continuar con relativa facilidad. ¡Aprovechadlos!

Quadcóptero IX: Magnetómetros y acelerómetros (chips reales)

Después de bastante tiempo, por fin han llegado los acelerómetros y magnetómetros que pedí. Los chips en cuestión han llegado muy muy bien protegidos. Como se puede ver en la foto, son mucho (pero que mucho) más pequeños que un chip normal, con lo que habrá que ir con pies de plomo a la hora de soldarlo. En la segunda foto, los he comparado con una moneda para que se aprecie bien su tamaño:

Chip acelerómetro I

Chip acelerómetro II

Cuando tenga un poco más de tiempo espero ponerme manos a la obra. Ahora si que ya no me quedan excusas.

La información

Sin ninguna duda, uno de los grandes beneficios que ha proporcionado internet ha sido la cantidad de información disponible. Hoy en día se puede acceder a una gran cantidad de fuentes de información, y es por eso por lo que triunfan los buscadores (como google) y los grandes catálogos (como wikipedia).

La capacidad de transmitir información ha promovido los movimientos dedicados a crear documentos libres de derechos de autor: el software libre, las licencias que evitan los derechos de autor (como por ejemplo GPL), los documentos copyleft, etc.

Es por eso que en esta marea de textos y datos se hace necesario (y difícil) ser capaz de encontrar lo que se está buscando. Creo que aún hay que avanzar mucho en este sentido, teniendo en cuenta que la cantidad de información que hace falta procesar crece día a día. A la hora de la verdad, el gran problema es saber buscar, y en general no es un problema fácil.

Me he dedicado a buscar un poco cuáles son las fuentes de información más importantes, y aquí hay una pequeña lista:

  • Wikipedia, Wikilibros (libros gratuitos), Wikisource (artículos de libre acceso), …
  • Proyecto Gutenberg (digitalización de libros que estén en el dominio público estadounidense).
  • Sourceforge.net (servidor de programas de código abierto).
  • Picdrome.com, Pixabay.com, Photos8.org, … (colecciones de imágenes libres de derechos de autor).
  • Taringa.net (foro dedicado al intercambio de información y programas)
  • Y, por supuesto, Google, Twitter, webs de periódicos, etc.

De todas ellas, la que me parece más interesante es Twitter, ya que es en la que es más difícil extraer información (sobretodo de manera automática), pero es la más rápida y flexible con mucha diferencia.

Quadcóptero VIII: Motores brushless

Hoy, por fin, me han llegado los motores que pedí en hobbyking.com. Como ya comenté, son unos hexTronik 24gram Brushless Outrunner 1700kv (las características principales también están explicadas aquí). Los motores en cuestión tienen buena pinta:

Motores y hélices

Los motores son Brushless (es decir, sin escobillas). Los motores, en general, siempre se dividen en dos partes:

  • El rotor: la parte que gira.
  • El estator: la estructura que está fija y contiene al rotor.

Habitualmente, los motores eléctricos tienen imanes en el estator y bobinas en el rotor. Al hacer pasar corriente eléctrica por las bobinas se consigue el movimiento (utilizando el principio de la fuerza de Lorentz: una fuerza que aparece con la interacción de un campo magnético y un campo eléctrico). Esto implica que la corriente tiene que llegar al rotor de alguna manera. Esto se consigue mediante el uso de escobillas (contactos eléctricos entre el rotor y el estator).

Los motores Brushless, como los que voy a usar en el quadcóptero, funcionan al revés: tienen los imanes en el rotor y las bobinas en el estator. Esto elimina las escobillas (y por tanto aumenta la eficiencia y la vida del motor), pero dificulta su control (ya que se necesita un control electrónico preciso). En la siguiente imagen se pueden apreciar la posición de los imanes (cuadraditos grisáceos) y de las bobinas (hilo de cobre):

Detalle del motor

Para el correcto funcionamiento de este tipo de motor es necesario alimentarlo con una corriente trifásica (bien senoidal, bien trapezoidal). Para ver más información, está muy bien un documento colgado en Microchip al que se puede acceder desde aqui. Allí aparece, entre otras cosas, la corriente necesaria para alimentar el motor que venía comentando:

Alimentacion brushless

También me han llegado las hélices, que miden unos 15cm de diámetro. Estas serán las que marcarán definitivamente el tamaño del quadcóptero:

Detalle hélices

Es interesante el hecho de que de las seis hélices que contenía el pack, tres son dextrógiras y tres levógiras (es decir, están diseñadas para girar en sentido contrario). En principio utilizaré dos de cada para evitar que el quadcóptero gire sobre sí mismo.

Sockets en Java

La potencialidad de internet se basa en la facilidad de conexión entre dos lugares geográficos que pueden ser muy distantes. Gracias a eso tenemos Google, servidores de email, redes P2P, videoconferéncias y todo lo demás. En Java, para aprovechar todo ese potencial, tenemos dos clases que nos ayudan para que toda la transferencia de información sea transparente para el programador: las clases Socket y Serversocket.

La primera de las clases, Socket, implementa una «puerta de enlace» con el otro dispositivo, enmascarando así toda la red y las capas inferiores (implementa internamente TCP/IP). El cliente solicita la conexión con una clase de este tipo. Por otra parte, la clase Serversocket reserva un puerto del ordenador y lo deja escuchando a la espera de conexiones entrantes. Cuando encuentra una, crea una clase Socket (igual que la utilizada por el cliente para conectarse) para que sirva también de «puerta de enlace», esta vez de lado del servidor.

La ventaja de estas clases es que nos permiten enviar streams de un socket al otro. Un stream es un flujo de información: una secuencia de bits que se pueden interpretar de una u otra manera. Y esto es una gran ventaja, ya que en Java existen multitud de clases (todas ellas extendiendo InputStream o OutputStream) para personalizar nuestra comunicación:

  • FileInputStream: para leer de ficheros.
  • ObjectInputStream: para enviar objetos enterss serializados (es decir, convertidos a cadenas de bits).
  • CipherInputStream: cifra la cadena de datos que atraviesa el Stream.
  • DigestInputStream: crea un código hash del Stream que le está atravesando.
  • BufferedInputStream: añade un buffer al stream.

Y hay muchas más que se pueden encontrar fácilmente en el JavaDoc (concretamente, aqui). Además se tiene la ventaja de que se pueden encadenar: si queremos implementar un buffer y descifrar el contenido de un archivo que estamos leyendo, no tenemos más que crear una clase como:

InputStream in = new CipherInputStream(new BufferedInputStream(new FileInputStream(«archivo.txt»)));

Evidentemente, para cada clase ***InputStream, existe su equivalente ***OutputStream. Con toda esta lista quiero dar una idea de la cantidad de cosas que se pueden enviar por mediante Sockets.

Como siempre es más fácil ver las cosas con ejemplos, aquí va uno del uso de Sockets:

Código del servidor:

            Socket s;
ServerSocket server = new ServerSocket(4976);  //escuchar por el puerto 4976
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
while(true) {
s = socket.accept();
in = socket.getInputStream();
out = socket.getOutputStream();
procesarPeticionServidor(in, out);
}

Código del cliente:

            Socket s = new Socket();
s.connect(new InetSocketAddress(4976)); //se intenta conectar al puerto 4976 del localhost
in = s.getInputStream();
out = s.getOutputStream();
procesarPeticionCliente(in,out);

Solo me queda comentar algunas cosas:

  • Es importante el orden de llamada de socket.getInputStream() y de socket.getOutputStream(). Así las cosas funcionan, pero si lo hubiésemos hecho al revés no, ya que ambos sockets se quedarían algo así como esperando la confirmación de que el stream de salida se ha configurado correctamente, y ambos se quedarían a la espera.
  • El servidor solo acepta una conexión entrante (ya que en cuanto la acepta deja de escuchar). Para aceptar más peticiones simultáneas debería empezar cada procesador de petición como un Thread independiente (es decir, una línea de ejecución de comandos independiente).
  • El código es necesario ponerlo entre cláusulas try-catch para tratar excepciones.

Proyectos con microcontroladores PIC

Para demostrar la gran capacidad de los microcontroladores PIC no se me ocurre mejor manera que demostrar que es lo que se puede llegar a hacer con ellos.

Por eso me he dedicado a buscar recursos por internet sobre diferentes proyectos que se realizan con la ayuda de un microcontrolador de esta familia:

  • En el foro de ucontrol.com tienen una gran colección de proyectos de aficionados: desde entrenadores (circuitos que sirven para comprobar el funcionamiento de los programas cargados en el PIC) hasta emuladores del mando a distancia (según el protocolo RC-5 de Philips). Todos en castellano y con muy buena pinta.
  • En fanaticodeelectronica.blogspot.com, un blog personal, hay varios proyectos interesantes: control digital de temperatura, comunicación PIC-PC mediante RS232, y (lo que me parece muy interesante) comunicación inalámbrica entre dos PICs mediante modulaciones GFSK (que es la tecnología usada por el estándar GSM de comunicaciones móviles).
  • En microcontroladorespic.com hay información sobre una emisora de FM (utilizando como único componente el PIC), control de un servomotor, control de displays de 7 segmentos…
  • En la página picprojects.org tienen una gran variedad de pequeños proyectos que se resuelven con un PIC, todos en inglés.
  • El programador GTP-USB Lite es un quemador de PICs (circuito utilizado para pasar el programa del PC al PIC), que utiliza un 18f2550 para comunicarse con el PC mediante USB (ya que existen librerías de Microchip que facilitan mucho ese trabajo). Es de los programadores más cómodos que hay.

Y seguro que en una búsqueda con más profundidad se podrían encontrar más aplicaciones interesantes: la programación en PICs es todo un mundo.

Inteligencia artificial V: La notación

Yo entiendo por notación la herramienta para codificar información. Le podría llamar también conjunto de símbolos, alfabeto, diccionario, etc. Pero el sinónimo es lo que menos me interesa.

Para ilustrar la importancia de la notación voy a poner varios ejemplos:

  • En relación a los números y su suma: es mucho mas intuitiva con el sistema decimal (y esto sigue siendo verdad a pesar de que estemos más familiarizados con el sistema decimal que con cualquier otro):
    • 18 + 24 = 42
    • XIIX + XXIV = XLII
  • En relación al lenguaje escrito: es mucho más fácil aprender a escribir idiomas que tienen palabras formadas por letras (castellano) que idiomas en las que cada palabra es un símbolo independiente de los demás (pictogramas o ideogramas, como en el chino mandarín).
  • En relación a las matemáticas: basta con saber que cualquier problema geométrico es mucho más sencillo de resolver con la geometría analítica (utilizando ejes de coordenadas, descubierta por Descartes en el siglo XVII) que con la geometría sintética (la de toda la vida, ya conocida por los griegos). Aunque parezcan métodos distintos, en realidad son el mismo pero desde otro punto de vista.

Y podría seguir con una infinidad de ejemplos. Cada notación tiene sus ventajas e inconvenientes… y todo esto se tiene que tener en cuanto para cada caso concreto. El hecho de encontrar una buena notación a la hora de resolver problemas es my importante para poder encontrar soluciones.

De hecho, en matemáticas se utiliza una estrategia que me parece muy conveniente: se empieza desde los axiomas (sentencias que se dan por buenas desde un principio), y se van demostrando cosas a partir de ellas… pero (y aquí viene lo importante) a medida que se van encontrando objetos con propiedades interesantes (funciones contínuas, conjuntos abiertos, etc), se les va dando nombre y se van asimilando. Así, no hace falta bajar al más bajo nivel (los axiomas) para demostrar cosas, sino que se aprovecha el trabajo ya hecho anteriormente para no tener que volver al principio.

Por ejemplo, siguiendo en el contexto matemático se podrían definir unos ciertos conjuntos (como los grupos matemáticos). Entonces, buscar que condiciones tienen que cumplir los conjuntos para ser grupos y que propiedades tienen todos los grupos. A partir de ahora, cada vez que queramos ver si un conjunto cumple una propiedad determinada, podríamos intentar comprobar si es un grupo y si esa propiedad es de las que cumplen los grupos. Sería algo así como un atajo.

Esta idea, que aplicada a un contexto matemático parece más o menos razonable, es la que creo que es básica para la IA. Una estructura que me parece especialmente útil es aquella que es capaz de adquirir nuevo conocimiento a partir de datos externos (por ejemplo, que con un lenguaje básico ya incorporado sea capaz de asimilar nuevas palabras extrayendo información de la wikipedia). En una estructura así, entiendo que la notación sería el lenguaje ya asimilado (incluyendo los conceptos y las relaciones entre conceptos), y que una buena asmilación de contenido implica un buen método de ampliación de la notación.

Espero seguir hablando pronto de este tema porque no me gustaría dejarlo solo como una idea más, sino intentar aplicarlo en algún momento.