Windows 3.0

Los últimos días los he pasado en Esmelle dándole reposo a mi tobillo derecho. Allí no hay demasiadas cosas que hacer dentro de casa, pero eso sí, está mi primer PC propio (heredado de mi hermano), un Pentium a 90MHz. Normalmente lo utilizo sólo para jugar al mítico Death Rally, pero estos días me ha dado por investigar qué juegos y programas tenía instalados. Así fue como, tras miles de años, volví a descubrir Windows 3.0, ¡todo un tesoro!

windows-30

Las contraseñas son gayumbos

“Las contraseñas son como la ropa interior. No puedes dejar que nadie la vea, debes cambiarla regularmente y no debes compartirla con extraños”

Chris Pirillo (Vía PSI-UDC)

En casa con el botín

Aunque parezca increíble, nuestra aventura de la Rooted CON ya ha terminado; atrás quedan tres días de diversión y seguridad en la capital de España (por ese orden jeje). Asistimos a la mayor parte de las charlas, aunque es cierto que la vida nocturna madrileña nos obligó a dormir demás el viernes y el sábado.

Exceptuando el fantástico chiste de las palomas, momento cumbre de la Rooted CON 2010, las ponencias que más me gustaron fueron las de Rubén Santamarta y Joxean Koret, a pesar de no haber entendido algunos aspectos técnicos debido a mis escasos conocimientos de ingeniería inversa. También me encantó el Rooted Panel de “Hackers históricos”, que contó con la presencia de Rampa y Savage, dos leyendas vivas del hacking español y miembros del mítico grupo Apòstols.

merchandising-rooted-con-2010

Ahora en casa, sólo me queda admirar los pequeños tesoros que traje de este viaje a Madrid. El botín está compuesto principalmente por merchandising del congreso; bolsa, pegatinas, bolígrafo, bloc de notas, acreditación, camiseta, botellín y póster firmado por David López (su dibujante, que incluso ha trabajado para Marvel). La guinda del pastel, como no podía ser de otra forma, es un nuevo setup, concretamente una tabla Berlinwood Radio Lennie con Blackriver trucks y Winkler Wheels BRR Edition. Lo compré en Caribbean, la primera tienda de skateboard que hubo en España, y al ver su trato con los clientes y la variedad de productos que tienen, no es de extrañar que hayan conseguido estar en la cresta de la ola durante más de 35 años.

berlinwood-radio-lennie-brr-trucks-winkler-wheels

En resumidas cuentas, el viaje ha estado a la altura de las expectativas y pasa directamente a formar parte de las grandes aventuras de FIC.

Nos vamos a la Rooted CON

rootedcon¡Y al fin llegó el día! Hoy por la noche algunos FICeros cogeremos un autobús en la Plaza de Pontevedra con destino a Madrid. El motivo de este viaje a la capital es asistir a la Rooted CON, posiblemente el congreso de seguridad informática más importante de los celebrados en España hasta la fecha. Según las palabras de los organizadores, se trata de “un congreso de seguridad que pretende reunir a expertos, hackers y profesionales de todo el mundo, para aprender con ellos, para desarrollar nuestros conocimientos y, sobretodo, para disfrutar con nuestra pasión que es la seguridad tecnológica”. Tendrá lugar en el Auditorio del Centro de Convenciones Mapfre durante los días 18, 19 y 20 de este mes.

Además de las charlas ofrecidas por los ponentes, el congreso contará con otras actividades como los Rooted Panels, que consistirán en mesas redondas para el debate de temas de actualidad referentes a la seguridad tecnológica. Posiblemente uno de los mayores atractivos que ofrecerá Rooted CON será el CTF (capture the flag), un wargame con 6.000€ en premios en el que 50 participantes intentarán superar el mayor número posible de pruebas. Dichas pruebas fueron diseñadas para la ocasión por un miembro de los grandísimos Sexy Pandas, que para quien no los conozca, son un grupo de hackers españoles que llevan unos cuantos años batiéndose en torneos CTF contra lo mejorcito de cada país, y ya saben lo que es quedar quintos en la final de DefCon.

¡Madrid, allá vamos!

Apunta todo en Evernote

Ya os advierto que éste es el típico post cuyo único objetivo es que la gente pare de decirme “¡Oye, a ver si actualizas el blog!”. Pues bien, aprovecho para hablaros de Evernote, una aplicación que me recomendó mi hermano y que ha entrado directamente en el grupo de mis favoritas.evernote

Se trata de un bloc de notas, un concepto que puede parecer muy simple pero también puede ser extendido y complicado hasta límites inimaginables. En Evernote puedes tener todas las notas que quieras organizadas en diferentes libretas y clasificadas con etiquetas. Cada nota puede contener texto, imágenes, audio, vídeos, URLs, PDFs, archivos adjuntos, etc., y todo ello gestionado por una interfaz agradable e intuitiva, que por si fuera poco está disponible para Windows, Mac OS X, iPhone, Blackberry, Windows Mobile y por supuesto en tu cuenta web.

Tiene miles de posibles usos, muchos de ellos tratados en el blog de ThinkWasabi (gracias Roberto), pero os dejo un ejemplo. Antes de ayer compré por internet un par de entradas para un concierto. Al final del proceso se mostraba el típico HTML con los datos de tu reserva para que los imprimas. Lancé Evernote y utilizando su propia interfaz, hice una captura del trozo de pantalla que me interesaba. Automáticamente se creó una nueva nota con la captura, y como Evernote tiene un reconocedor para textos contenidos en imágenes, al teclear el nombre del artista en el buscador del programa aparece directamente esta nota. Además, como se sincroniza automáticamente con el iPhone, cuando pase por la oficina para recoger las entradas, llevaré conmigo el número de reserva sin tener que apuntarlo ni imprimir nada. Bienvenidos al futuro chavales ;)

Lanzamiento de Windows 7

windows-7-logoMañana, 22 de Octubre, Microsoft lanzará oficialmente el esperado Windows 7, aunque somos muchos los que ya lo estamos disfrutando desde hace días. Además hace tiempo que cualquiera puede probar gratuitamente la versión RC (Release Candidate) de este último sistema operativo, que pretende enderezar de nuevo la imagen de Microsoft tras la mala experiencia de muchos usuarios con el desafortunado Windows Vista. Los inconvenientes principales de este SO, que nació para solucionar problemas de seguridad de Windows XP mediante UAC (Control de Acceso de Usuarios), eran la incompatibilidad de versiones anteriores en muchas aplicaciones, la falta de controladores y soluciones de seguridad, y sobre todo la interfaz y el rendimiento general. Como os podéis imaginar, esto lo digo de “oídas” y por artículos que he leído, ya que por aquel entonces yo utilizaba Mac OS X, “el sistema operativo más avanzado del mundo mundial”. Es decir, mi cambio ha sido directo desde Windows XP hasta Windows 7.

Supongo que serán muchos los actos y promociones de la nueva joya de Microsoft, pero de momento el que más ganas tengo de ver es el capítulo de Padre de Familia del próximo 8 de Noviembre, que será dedicado íntegramente a Windows 7, debido a un acuerdo entre la Fox y Spectra (¿habéis visto? ¡ya hablo como Chema Alonso! :p). Éste es un adelanto.

YouTube Preview Image

Y por último, para celebrar la ocasión, aquí os dejo una colección de 101 wallpapers de Windows 7 no oficiales. Como sé que muchos lo estáis pensando, sobre todo Roberto, os adelanto que también son compatibles con Mac OS X y Ubuntu jejeje.

Jornadas de Seguridad 2009

Mañana y pasado (15 y 16 de Octubre), los alumnos de FIC tendremos por segundo año consecutivo la oportunidad de asistir a las Jornadas de Seguridad organizadas por la Universidad de La Coruña. Todo esto es gracias a nuestro amigo Diego Ferreiro, que a pesar de estar disfrutando como un cerdo estudiando en Bélgica durante este curso, vuelve a traernos lo mejor del panorama nacional a nuestra facultad otro año más.

En la conferencia, al igual que en la mayoría de las organizadas por la UDC, se otorga un crédito de libre elección en caso de asistir a la totalidad del evento. Sin embargo, ésta es una de las pocas (si no la única) en las que la gente asiste por el tema en sí, y no por el crédito. Sin duda, merece la pena, el año pasado todos nos quedamos con un buen sabor de boca. Aquí dejo el programa de ambos días por si alguien quiere echarle un ojo.

ii-jornadas-seguridad-2009-fic-udc

De Mac a PC

hp_pavilion_dv3_2150es__p7350_4gb_500gb_gf_g105m_13_3_Los que me conocen saben que me encanta llevar la contraria e ir contra corriente en casi cualquier asunto. Tal vez sea esto lo que me hizo cambiar mi MacBook Pro por un HP DV3, precisamente ahora, cuando el número de enamorados de la manzanita está creciendo exponencialmente.

Además de este motivo hay algunos otros, y quizá el principal es que, tras más de 2 años usándolos, Apple y MacOSX me han decepcionado en algunos aspectos. Podría enumerar una gran lista de pequeños detalles que fueron llenando el vaso, pero el 90% de ellos se resumen en que, para mi gusto, el diseño y el espíritu tan cool de Apple está primando demasiado sobre la calidad y las cosas prácticas. Esto se puede aplicar tanto al software como al hardware.

Mi nuevo portátil es un HP DV3 2150es con 4Gb de memoria, 500Gb de disco, tarjeta gráfica NVIDIA GeForce G 105M y un procesador Procesador Intel Core 2 Duo P7350 de 2 GHz. Le he instalado Windows 7 Professional para mi uso personal y Ubuntu 9.0.4 para prácticas y asuntos de la facultad. Y lo mejor de todo, mi licencia de Windows 7 es totalmente legal, gracias al FIC.NET Club.

Tipos abstractos de datos (TAD)

Estaba en mi habitación peleándome con la fiebre e intentando dormir, cuando recordé que otra noche de gripe hace un par de años hice un trabajo sobre los tipos abstractos de datos. Como recibí una buena calificación en él, lo dejo aquí por si le puede resultar útil a alguien. Además, recuerdo que también colgué este mismo trabajo en una antigua versión de este blog, allá por 2007.

1. La abstracción

A pesar de que estamos acostumbrados a utilizar el término abstracción dentro del contexto de la programación, la verdad es que esta palabra tiene un origen mucho más lejano. Desde siempre, el hombre se ha tenido que enfrentar a problemas muy complejos, sin embargo con el paso del tiempo hemos descubierto un buen método para enfrentarnos a ellos: la abstracción. Abstraer consiste en centrarse sólo en la parte principal y esencial de los problemas, dejando así a un lado todos los detalles insignificantes o menos importantes.

Un buen ejemplo de la capacidad humana para la abstracción es la elaboración y lectura y un mapa. Cuando dibujamos un mapa de carreteras, reflejamos en él los elementos principales, los que tienen utilidad para su interpretación, como por ejemplo las autopistas, autovías, carreteras nacionales, áreas de servicio, gasolineras, etc. Otros datos como podrían ser museos, parques o monumentos no aparecen ya que se consideran innecesarios en este tipo de mapas. La abstracción es una de las herramientas fundamentales de la mente humana, ya que nos permite dividir los problemas en partes independientes y solucionar cada una por separado.

2. La evolución de la abstracción en la programación

En los primeros tiempos de la informática, los programadores se comunicaban con las máquinas en binario, lo cual resultaba ser una tarea extremadamente larga y complicada. Al cabo de un tiempo apareció el código ensamblador, cuyos nemotécnicos facilitaron notablemente el trabajo de los programadores al evitar que tuviesen que recordar las secuencias de unos y ceros que formaban cada instrucción. Estos nemotécnicos constituyeron la primera escala de abstracción de la era informática.

Unos años más tarde llegaron los lenguajes de alto nivel y con ellos las macroinstrucciones. Gracias a estos lenguajes, los programadores pudieron comenzar a escribir software genérico, es decir, podían programar sin preocuparse de la máquina sobre la que iba a correr el programa. Esto se debía a que las instrucciones de los lenguajes de alto nivel producían varias acciones en la máquina, independientemente de las arquitecturas concretas de cada una de ellas. Con este tipo de lenguajes llegaron también las sentencias de control más habituales como los bucles o sentencias if-then.

En definitiva, la complejidad iba creciendo a medida que lo hacía la abstracción. Así fueron surgiendo los procedimientos y funciones, los módulos y posteriormente los tipos abstractos de datos.

3. Abstracción funcional y abstracción de datos

En la programación, la abstracción puede aplicarse de dos modos distintos dando lugar a la abstracción funcional y la abstracción de datos.

La abstracción funcional aparece al pensar de manera abstracta las operaciones que necesitamos para resolver un problema. Este tipo de abstracción nos permite definir operaciones nuevas en una aplicación que anteriormente carecía de ellas. La abstracción funcional fue la primera en aparecer ya que es fácil de llevar a la práctica debido a que su implementación es posible en la gran mayoría de los lenguajes de programación. Suele corresponderse con el uso de procedimientos o funciones.

La abstracción de datos surge cuando se abstrae el significado de los diferentes tipos de datos que aparecen en nuestro problema. Este tipo de abstracción nos permite crear nuevos tipos de datos pensando en los posibles valores que pueden tomar y en las operaciones que los manipulan. Como cabe esperar, estas operaciones serán a su vez abstracciones funcionales.

La abstracción de datos es más reciente que la funcional, ya que los primeros lenguajes de programación no ofrecían demasiadas facilidades para su uso. Uno de los primeros mecanismos que permitió esta abstracción fueron las clases de Simula.

4. Datos, tipos de datos y TAD

Para hablar de la abstracción es necesario tener clara la diferencia que existe entre los datos, los tipos de datos y los tipos abstractos de datos.

Los datos son los valores que manejamos en la resolución de un problema, tanto los valores de entrada, como los de proceso y los de salida. Es decir, los datos son información y por lo tanto distinguimos varios tipos de datos.

Un tipo de dato se puede definir como un conjunto de valores y un conjunto de operaciones definidas por esos valores. Clasificar los datos en distintos tipos aporta muchas ventajas, como por ejemplo indicarle al compilador la cantidad de memoria que debe reservar para cada instancia dependiendo del tipo de dato al que pertenezca.

Los tipos de datos abstractos van todavía más lejos; extienden la función de un tipo de dato ocultando la implementación de las operaciones definidas por el usuario. Esta capacidad de ocultamiento nos permite desarrollar software reutilizable y extensible, lo cual veremos más adelante cuando hablemos de modularidad.

5. Tipos abstractos de datos

Un tipo de datos definido por el programador se denomina tipo abstracto de datos (TAD) para distinguirlo de los tipos predefinidos de datos. Los tipos abstractos de datos están formados por los datos (estructuras de datos) y las operaciones (procedimientos o funciones) que se realizan sobre esos datos. El conjunto de operaciones definidas sobre el TAD debe ser cerrado, es decir, sólo se debe acceder a los datos mediante las operaciones abstractas definidas sobre ellos. La abstracción de datos sólo permite acceder a ellos de manera controlada.

Las estructuras de los TAD se componen de dos partes: la interfaz y la implementación. Esto se debe a que las estructuras de datos reales que utilizamos para almacenar la representación de un tipo abstracto de datos son invisibles para los usuarios o clientes. Mientras que en la interfaz se declaran las operaciones y los datos, la implementación contiene el código fuente de las operaciones y lo mantiene oculto al usuario.

Las principales ventajas que nos aportan los TAD son las siguientes:
1.    Mejoran la conceptualización y hacen más claro y comprensible el código.
2.    Hacen que el sistema sea más robusto.
3.    Reducen el tiempo de compilación.
4.    Permiten modificar la implementación sin que afecte al interfaz público.
5.    Facilitan la extensibilidad.

6. Construcción de un TAD

La construcción de un TAD consta de dos fases bien diferenciadas entre ellas: la especificación (formal e informal) y la implementación.

Las características de un TAD no deben depender de su realización concreta, sino solamente de cómo queremos que sea su comportamiento, lo cual llamamos especificación. Para la especificación de un tipo abstracto de datos en lenguaje natural (especificación informal) hemos de seguir el siguiente esquema:

TIPO DE DATOS    Nombre del tipo  (Lista de operaciones)
VALORES:              Descripción de los posibles valores
OPERACIONES:     Descripción de cada operación

Primero indicaremos el nombre del TAD y citaremos todas las operaciones definidas. En el apartado valores describiremos los posibles valores de los datos de este tipo, pero lo haremos desde un punto de vista abstracto, sin pensar en la posible realización concreta. Finalmente en el apartado operaciones haremos una descripción de cada una de las operaciones definidas sobre el TAD. En la especificación informal, habitualmente hacemos referencia a conceptos con los cuales el lector está familiarizado (como por ejemplo conceptos matemáticos). El problema surge cuando estos datos auxiliares no están definidos tan precisamente.

La especificación formal nos permite definir conceptos de manera mucho más precisa. Para ello utilizaremos este esquema:

Tipo: Nombre del tipo de datos
Sintaxis: Forma de las operaciones
Semántica: Significado de las operaciones

En el apartado sintaxis proporcionamos el tipo de datos de entrada y de salida de cada una de las funciones definidas sobre el TAD, mientras que en semántica describiremos sus comportamientos. Sin embargo, ésta vez lo haremos siguiendo unas normas algebraicas básicas.

En la implementación del TAD lo que hacemos es elegir la forma en que se van a representar los distintos valores que tomarán los datos. También seleccionaremos la manera en que se realizarán las operaciones. Para esta elección debemos tener en cuenta que todas las operaciones se realicen de la forma más eficiente posible, aunque con la práctica veremos que la mayoría de las veces una implementación facilita mucho algunas operaciones mientras que complica otras.

7. Modularidad

La programación modular descompone un programa en un pequeño número de abstracciones independientes unas de otras pero fáciles de conectar entre sí. Como hemos visto anteriormente, un módulo se caracteriza principalmente por su interfaz y su implementación. La programación modular sigue el criterio de ocultación de información: si no se necesita algún tipo de información, no se debe tener acceso a ella.

La modularidad es un aspecto muy importante en los TAD, ya que es el reflejo de la independencia de la especificación y la implementación. Es la demostración de que un TAD puede funcionar con diferentes implementaciones.

Además de esto, la programación modular ofrece otras ventajas, como por ejemplo un mejor reparto del trabajo y una detección de fallos mucho mejor.

8. TAD más comunes

Los tipos abstractos de datos básicos se clasifican habitualmente, atendiendo a su estructura, en lineales y no lineales.

8.1 TAD lineales

8.1.1 Listas

Esta forma de almacenar elementos consiste en colocarlos en una lista lineal que tiene un enlace por cada elemente para determinar cual es el elemento siguiente. Las listas se utilizan habitualmente para guardar elementos del mismo tipo y se caracterizan porque pueden contener un número indeterminado de elementos y porque siguen un orden explícito. La lista de cero elementos se denomina lista vacía.

8.1.2 Colas

En el contexto de la programación, una cola es una lista en la que los elementos se insertan por un extremo (llamado fondo) y se suprimen por el otro (llamado frente). En esta estructura de datos el primer elemento que entra es el primero en salir. Es un tipo de dato muy común tanto dentro de la informática como en la vida real.

8.1.3 Pilas

Una pila es una estructura de datos en la cual todas las inserciones y las eliminaciones se realizan por el mismo extremo, denominado cima de la pila. En una pila, el último elemento en entrar es el primero en salir, al contrario de lo que pasa en las colas.

8.2 TAD no lineales

8.2.1 Árboles

El árbol es un TAD que organiza sus elementos (nodos) de forma jerárquica. Si una rama va del nodo a al nodo b, entonces a es el padre de b. Todos los nodos tienen un padre, excepto el nodo principal, denominado raíz del árbol.

8.2.2 Árboles binarios de búsqueda

El árbol binario de búsqueda es una variación del TAD árbol. Se trata de aquellos árboles binarios (cada nodo tiene dos hijos como máximo) en los cuales todos los datos del subárbol izquierdo son menores que los datos del nodo, y los datos del subárbol derecho son mayores que los datos del nodo.

8.2.3 Grafos

Hemos visto que los árboles binarios representan datos entre los cuales existe una jerarquía. Los grafos sin embargo se utilizan para representar relaciones arbitrarias entre datos. En su representación, cada elemento de problema forma un nodo. La relación entre nodos forma una arista que puede ser dirigida o bidireccional (no dirigida).

Bibliografía

[Cairó, 2006]
[Joyanes, 1998]
[Collado, 1987]
Apuntes de EDI, David Paredes, 2007

Informática existe

Está claro que los informáticos siempre han sido los últimos monos y que es uno de los trabajos menos agradecidos, en el que sólo se acuerdan de ti cuando las cosas no funcionan. Pero lo que nos han hecho esta vez es demasiado.

Se ha excluído a las titulaciones de Ingeniería en Informática e Ingeniería Técnica en Informática de las propuestas de la orden ministerial y acuerdo de Consejo de Ministros referidas a títulos que habilitan para el ejercicio de las diferentes profesiones de ingenieros. Muchas de las competencias de los ingenieros informáticos (áreas como Internet, microprocesadores, arquitecturas de computadores, interfaces, usabilidad, seguridad, bases de datos, sistemas de información, programación y ’software’, etc.) pasarían a manos de los ingenieros en telecomunicaciones, algo inaceptable y peligroso.

El Grupo Parlamentario del Partido Popular (PP), presentó una Proposición no de Ley sobre contenidos y competencias de la Ingeniería Informática en la que se solicitaba una nueva reflexión que permitiese reincorporar las titulaciones del ámbito de la Ingeniería Informática (grado y máster) en la discusión del conjunto de ingenierías. Esta iniciativa fue vetada por 19 votos (PSOE) en contra, 17 a favor (PP y BNG), y las dos abstenciones de CiU.

Es decir, si esto continúa así y sale adelante, los títulos de los actuales Ingenieros Informáticos (y los que intentamos serlo algún día) serán un simple adorno y no tendrán validez a nivel Europeo. Por este motivo se ha llamado a la huelga a todos los informáticos el día 19 de noviembre; no es una cuestión de política, simplemente se pide que el Estado nos dé el título por el que hemos pagado y nos otorgue las atribuciones profesionales que constaban en el plan de estudios.

Como un gran porcentaje de informáticos tenemos blogs/webs, creo que debemos aprovecharlos como medios de comunicación para expresar nuestro desacuerdo. Se me ha ocurrido aportar mi granito de arena haciendo una imagen para que todos los que quieran la copien en sus sitios web y escriban algo acerca de nuestra injusta y absurda situación (además de acudir a la huelga y hacer todo lo que esté en nuestras manos). Espero que estemos a tiempo de salvar nuestros títulos.

Taxi de BarcelonaWrite the futurePrisaVuelta al pasadoPetancaHalfpipe Movistar Barcelona ExtremeHalfpipe Movistar Barcelona ExtremeHalfpipe Movistar Barcelona ExtremeHalfpipe Movistar Barcelona Extreme

Este blog funciona con WordPress y un theme basado en GimpStyle. Feeds de entradas y comentarios. Versión móvil.

Creative Commons License