Acceso A Datos
Acceso A Datos
Cerebros Almacenados
Parte 1: La importancia de los SERKEYS
Por ello es necesario afianzar las técnicas básicas de acceso a ficheros. Junto a este
enunciado se tienen los archivos BBDD_Leibniz.bin y BBDD_Euler.bin necesarios para el
desarrollo de la tarea.
En esta tarea se deberán construir 4 proyectos Java distintos, con NetBeans 8.2, que
deberán llamarse EXACTAMENTE Leibniz, Euler, Gauss y Turing. La explicación a esos
nombres se expondrá más adelante.
0.0.
C.I.F.P. Carlos III. Desarrollo Aplicaciones Multiplataforma. Tarea UT2
Acceso a Datos. Tarea UT2 La importancia de los SERKEYS 4/17
En el año 4000 la tecnología ha alcanzado un desarrollo que 20 siglos antes habría parecido
una historia de ciencia ficción. Entre otros muchos, se consiguieron los 3 siguientes logros
científicos:
1. Desarrollo del Transporte Espacial por Compresión (TEC), con el que se podía viajar a
cualquier lugar de la galaxia en un período de tiempo muy reducido. Bastaban unas pocas
horas para alcanzar lugares situados a decenas de miles de años-luz de distancia. Con
ayuda del TEC, antes de llegar el año 3000, la humanidad ya se había extendido por toda
la galaxia. No se había encontrado ninguna otra forma de vida avanzada.
Estos 2 últimos apartados merecen una explicación más detallada, pues afectará a
todas las tareas de este curso:
Desde el año 3863, cuando todo ser humano nace, la normativa en toda la galaxia establece
la implantación obligatoria, bajo su cerebro, de un dispositivo carísimo que tiene un tamaño de
1.5 x 3.0 x 0.2 centímetros y un peso de 20 gramos. A ese dispositivo se le conoce como la
tarjeta y en él se deposita de forma automática, cada 4 horas, una copia exacta del contenido
de la información del cerebro. Esa información es completa: Recuerdos, inteligencia,
experiencias, cultura, forma de ser… etc. Al humano que alberga la tarjeta se le llama el
anfitrión. Por el hecho de nacer, todo ser humano tiene derecho a su tarjeta.
En uno u otro caso, en ese nuevo organismo se implantará la tarjeta que se ha extraído del
anfitrión anterior. Cuando se “resucite” a ese nuevo anfitrión, sus recuerdos llegarán hasta el
momento de la última copia de su cerebro almacenada en la tarjeta. Es decir, como máximo se
habrá perdido las últimas 4 horas de su vida. Será la misma persona de antes.
Sin embargo, en casos extremos, la tarjeta sí puede resultar dañada de forma irreparable:
Explosiones nucleares o accidentes con el TEC. En tales casos, por lo general, no es posible
una resurrección y se produce la llamada muerte real (MR).
Antes de que una tarjeta quede destruida, y en previsión de los casos de muerte real, el
contenido de la tarjeta puede ser transferido a un tercer dispositivo externo, de modo que se
pueden tener copias de seguridad de las tarjetas y, con ello, de los cerebros. Esta es una
operación extremadamente cara y sólo está al alcance de los seres humanos más ricos. Así, estos
pueden realizar copias de seguridad de su tarjeta (Con un enorme coste asociado) cada cierto
tiempo. Si se produjese la destrucción de su tarjeta, se podría crear una nueva tarjeta a partir de
la última copia realizada y ser implantada en un nuevo organismo anfitrión.
Esto crea un serio problema: Un ser humano extremadamente rico (Hay algunos) podría
hacer copias de sí mismo, con idéntico contenido en la tarjeta. La Administración Galáctica de
Identidades Localizadas (AGIL) es la entidad encargada de tratar de impedir los delitos
relacionados con las tarjetas:
• Robo de las tarjetas físicas del BTI (Recordemos que son muy caras)
Así, la carga de pago de una tarjeta estándar puede contener entre 23000 y 39000
yottabytes de información. Recordemos que 1 yottabyte son 1024 bytes de información, es decir,
1 billón de billones de bytes.
Sin embargo, la información más importante de una tarjeta no es su carga de pago sino
su serkey. El serkey permite identificar la tarjeta de forma unívoca, es decir, no existen 2 tarjetas
en toda la galaxia con el mismo serkey. El serkey contiene la siguiente información:
El SN está formado por 8 valores numéricos comprendidos entre 1 y 8192. Con ello,
pueden existir más de 1031 tarjetas diferentes.
El FIT describe el segundo exacto en que se implantó la tarjeta por vez primera. Puede
ser un valor numérico comprendido entre 1 y 320.000.000.000.
El LIT describe el segundo exacto en que se ha sido implantada la tarjeta por última vez.
Puede ser un valor numérico comprendido entre 1 y 320.000.000.000.
El BD1 describe el segundo exacto en que nació el anfitrión que lleva la tarjeta. Puede
ser un valor numérico comprendido entre 1 y 320.000.000.000.
El BD2 describe el planeta en que nació el anfitrión que lleva la tarjeta. Puede ser un
valor numérico comprendido entre 1 y 1.024.000.
Los servidores Leibniz y Euler realizan la misma misión, cada uno con su parte de la
BBDD que contiene todos los serkeys. Recordemos que Leibniz guarda la mitad de la BBDD y
Gauss guarda la otra mitad.
Por tanto, cada serkey tiene un registro de 60 bytes (9*4 + 3*8). Si el archivo
BBDD_Leibniz.bin tuviese n serkeys, su tamaño sería de n*60 bytes.
• 38, 67, 144, 21, 14, 24, 32, 14 (Hemos cambiado el orden de los SN_)
• 1548777755 (Permanece igual que en R1)
• 65322258 (Permanece igual que en R1)
• 56488859 (Permanece igual que en R1)
• 33 (Permanece igual que en R1)
Puesto que se introduce 1 registro cada segundo, el tiempo de ejecución de Leibniz debería
ser aproximadamente de tantos segundos como registros tenga el archivo BBDD_Leibniz.bin.
El proyecto Java Euler realiza la misma función que Leibniz pero sobre los archivos
BBDD_Euler.bin (Proporcionado junto a este enunciado) y De_Euler_a_Gauss.bin.
Los proyectos Leibniz y Euler deben leer información de los archivos BBDD_Leibniz.bin
y BBDD_Euler.bin e introducir información en los archivos De_Leibniz_a_Gauss.bin y
De_Euler_a_Gauss.bin mediante la clase Java:
RandomAccessFile
La misión del servidor Gauss es recibir la información de los servidores Leibniz y Euler,
procesarla y enviarla al servidor Turing.
RandomAccessFile
La misión del servidor Turing es recibir la información del servidor Gauss y mostrar parte
de ella por la consola de NetBeans. Asi, la función del proyecto Java Turing es leer del archivo
De_Gauss_a_Turing.bin todos los registros de tipo R2 y, para cada uno de ellos, visualizar la
siguiente información:
• El valor FIT
• El valor LIT
• El valor BD1
Debe tenerse en cuenta aquello en lo que se ha insistido varias veces: El proyecto Turing
no debe tener permanentemente abierto el archivo De_Gauss_a_Turing.bin, pues si lo hiciera
sería imposible para Gauss ir añadiendo la información al mismo.
Como en los 2 casos anteriores, Turing debe leer información del archivo
De_Gauss_a_Turing.bin mediante la clase Java:
RandomAccessFile
C.I.F.P. Carlos III. Desarrollo Aplicaciones Multiplataforma. Tarea UT2
Acceso a Datos. Tarea UT2 La importancia de los SERKEYS 13/17
OJO 1: Puesto que la clase Java RandomAccessFile no tiene un método que permita
leer ni escribir objetos de la clase SERKEY en un fichero, de alguna manera el alumno deberá
convertir esos objetos en datos que sí puedan ser introducidos/leídos de los ficheros mediante
los métodos de esa clase RandomAccessFile: writeInt (), writeLong (), readInt (), readLong
(),…etc.
Pero la pregunta es: ¿En qué carpeta deben dejarse esos archivos? Puesto que se van a
desarrollar 4 proyectos diferentes (Leibniz, Euler, Gauss y Turing), cada uno de ellos tendrá su
propia carpeta de trabajo. Si dejáramos que cada proyecto trabajase con el fichero en su propia
carpeta, sucedería que los otros proyectos no tendrían acceso a esos ficheros.
La solución es que los 4 proyectos utilicen una carpeta común en la que crear, escribir y
leer los ficheros. Para ver cómo se hace eso puede consultarse el archivo Guia rápida NetBeans
y manejo básico de ficheros.pdf y estudiar el código fuente de UT02_002.java y
UT02_003.java. Esa carpeta debe llamarse obligatoriamente AaD y encontrarse en la raíz del
disco.
0.0
Tal y como se ha expuesto el problema, todo parece muy fácil para el alumno:
Una vez construidos los programas Leibniz, Euler, Gauss y Turing, se ejecutarían en
primer lugar Leibniz y Euler, cuando estos hubiesen terminado y hubiesen creado los ficheros
De_Leibniz_a_Gauss.bin y De_Euler_a_Gauss.bin, se ejecutaría el programa Gauss que leería
esos ficheros y cuando Gauss hubiese terminado de crear el archivo De_Gauss_a_Turing.bin,
se ejecutaría Turing mostrando los resultados.
Puesto que la ejecución de los 4 programas se realiza en paralelo a partir del instante en
que comienzan Leibniz y Euler su ejecución, debería suceder que el tiempo de ejecución total
de los 4 programas en paralelo será de poco más de 1.5*n segundos, siendo n el número de
registros que Leibniz y Euler deben leer de sus archivos.
0.0
Se evaluarán (y calificarán) los siguientes items con la puntuación especificada:
6. Comentarios muy descriptivos en todo el código fuente que ayuden a entender lo que los
programas están haciendo (1.0 puntos).
Una vez realizada la tarea se entregarán los 4 proyectos Java que se han
desarrollado. En esos proyectos han de estar las carpetas:
Cada uno de ellos se comprimirá en un único fichero ZIP ó RAR (No se admitirá ningún
otro formato de compresión como 7z, ARJ, UC…etc.). Los nombres de esos ficheros han de
ser:
El envío del mismo se realizará a través de la plataforma en la forma establecida para ello
y el archivo se nombrará siguiendo las siguientes pautas:
apellido1_apellido2_nombre_TareaUT2.ZIP (ó RAR)
0.0
Fecha y hora límite de entrega: