viernes, 26 de abril de 2013

La tournée de un caballo por esos tableros de Dios -- en Java -- . (Tour Knight in Java language)



Cómo sobrevivir sin un duro
Algo cuco para no dejar el árbol en los huesos

Comienzos de Diciembre de 2012, me surgió un apañillo.
Un estudiante de ingenería informática en la UNED se vió sorprendido por una de sus asignaturas – en concreto la asignatura más avanzada de programación como tal – “Programación III”, obligada para Ingenierías técnicas informáticas – sistemas y gestión –, como para la Ingeniería superior informática.
 Me pidió, le echara una mano.



Contexto sobre la asignatura “Programación III”


Lo que a continuación detallo es tan real como venenoso. Sufrido en carnes, incluso.
       Al tratarse de algo muy español y muy propio de nuestro sistema y país, no lo voy a traducir   --Dejo a visitantes foranos la opción de traducción por "DIY"--.
       Es más, para no desvirtualizar el contenido de la entrada en sí, voy a empezar a usar botones de expandir.





En el curso academico 2005/2006 también me pasó a mi. Entonces, valía 6 créditos – era el plan anguo del 2000 – . Cada curso tenía dos cuatrimestres. Esta se cursaba en el 2º curso, 1er cuatrimestre.

La consecución exitosa de la asignatura



Desde el año que me intenté enfrentar a ella (por primera y última vez) hasta este año académico – a la vista de lo que la otra parte del acuerdo me demandó –, no ha variado nada.
Consiste en que – si el curso se puede empezar entre el 1 de Octubre y el 1 de Noviembre de un año académico – , a mediados de Febrero, más tardar, te examinaban de “si posees el dominio suficiente para algoritmizar problemas computacionales de la vida real” en concordancia con la teoría de el libro Fundamentos de Algoritmia [G. Brassad y P.Bratley] Ed. Pearson Prentice Hall.
En concreto el examen consistía en resolver, en menos de 120 mínutos, un problema de programación algorítmica por la rama Algoritmos “Voraces”, “Divide y vencerás” o “Exploración de grafos” – que mejor se adecuase – con justificación y análisis de costes computacionales – .

La práctica obligatoria aprobada es requisito previo para examinarse.



Hay un problema añadido y no es, en absoluto, baladí.
Para realizar dicho examen en la asignatura, previamente, tienes que tener aprobada una práctica – supuestamente de similares características al examen pero, además, te piden implementar la solución en Java –.
Práctica cuyo enunciado – varía de año en año – , los profesores títulares de la asignatura dan al alumnado a finales de Noviembre.

¿Cuándo dices Java dices un lenguaje de programación que permita seguir un filosofía de POO (Programación orientada a objetos) como C++ o cualquier otro?
No. Cuando digo Java, digo Java.

Por fortuna, en el enunciado de la práctica, el IDE a utilizar para construir el ejecutable es una recomendación pero, el lenguaje en el que ha de materializarse la implementación, es una Conditio sine qua non

Si no sabes Java, ¿Estás vendido?
Lamentablemente, así es.


¿Y el profesor no te enseña eso?



Normalmente, en los centros asociados, se contrata – a partir de Noviembre – a un profesor para impartir un día a la semana 2 horas de los contenidos del libro referencial de dicha asignatura.
El profesor te dice que, enseñarte Java es imposible. No hay tiempo material.
Teacher
O una cosa o la otra. No hay tiempo para las dos. Me han contratado para los contenidos. Lamentablemente “os tenéis que buscar la vida
Vamos que, a no ser que hayas hecho una FPIII por ejemplo A.S.I. –donde el 2º año y durante 5 meses a hora diaria te formaban en Java – , estás vendido.
No te están pidiendo, en el problema práctico, un pseudocódigo. Lo que te piden entre otras cosas es el jar y probablemente con parámetros de entrada que solucione el problema.


¿Entonces?




Luego, en el caso de una persona sin malicia que, ese cuatimestre curse al menos dos asignaturas de las 12 que consta dicho año, tirará, éste , el dinero de la matrícula y el libro (ninguno de los dos son baratos); habrá jodido su expediente y, probablemente, se habrá dejado algo más de dinero apuntándose a un curso de iniciación de Java de un mes... Eso “a lo legal way”.
Lo sufrí.

¿Y la opción Septiembre?



La opción "Septiembre" pasa porque, en el verano, el tutor del centro asociado al que te matriculaste – Ese que fue contratado hasta la última semana de Enero para impartirte en unas 20 horas el contenido de 320 páginas de teoría pura y dura y además dar el visto bueno inicial a tu práctica –, trabaje sin ser remunerado.
Quiero decir que, en vez de piscinear sus chancletas, se dedique a pasar calor en su cuarto de casa para dar el visto bueno inicial a tus códigos fuentes y contacte con Madrid a decirselo -- Suponiendo que en Madrid también les guste trabajar en veranito -- .
Todos --y todo-- de forma altruista, atendiendo tu “no-capacidad para hacerlo en el plazo en que su trabajo es remunerado”...
Así que, la “opción de Septiembre” la reescribo como “la casualidad de que des con un mercenario altruista de la enseñanaza”.
Recuerdo que en la cultura Española a Quijote lo querían recluir por loco y a Jesucristo nos lo cargamos.
Además, esta – !Y remuneradamente! – , es la España del: “Mariquita el último”, el “A ver si voy a ser yo el único tonto de trabajar, cuando los demás están de cervecitas” o el “primero, hazlo tú; luego ya, si eso, yo”.
Así que de forma gratis no es que sea graciable. Es un milagro.

¿Entonces?



Todo queda reducido pués, para alguien que nunca ha programado en un lenguaje POO como Java y que se presupone sabe lo que es un TDA (Tipo de Dato Abstracto) -- e implementarlo en Modula-2-- y también se le presuponen nociones de formulación matemática de recursividades, a opciones no tan legales.
Éstas pasan por: desde tener un "amigo" que te “ayude” con alguna "indicación" y "corrección", hasta contratar un tutor particular que te haga la práctica -- "OR/AND" explique --.
Estando la opción tabién de buscarla por internet y copiarla – Si no te pillan, te la juegas al examen (que es por lo que en teoría has pagado) –.
Evidentemente, el tutor da el visto bueno inicial a la solución. Por tanto, "copy&paste" -- sin leer detenidamente ,entender y corroborar -- , a la hora de defender el trabajo, revelará la ausencia de esté.
Cualquier opción es práctica cuando el tutor de apoyo contratado por el centro te dice que es your business y que él aún no sabe como componerselas para explicar en 20 horas --o menos--, 320 páginas de chicha tan apretada.
Gracias a ello, me ví requerido a este apañillo -- a cambio de unas t-shirts para correr por las mañanas-- que en esta entrada os relataré.



La práctica 2012/2013:

          .jar para KNIGHT's TOUR o el problema del caballo, básicamente.


  Aquí está la práctica a realizar:

   Como se ve en el pdf , de forma resumida, piden un jar (Archivo java ejecutable) que se pueda invocar basándose en 4 propiedades distintas:
  •  Lado del tablero
  •  Posición inicial de salida del caballo
  •  El programa se ejecuta hasta alcanzar una solución o hasta hallar todas las existentes para la posición de partida 
  •  Dame la traza de cada movimiento



     Queremos pués que, un caballo de ajedrez haga caminos hamiltonianos (pase una y sólo una vez por cada casilla) en un tablero cuadrado y siempre que, su lado sea mayor o igual que 5.

A trotar por el tablero
Noria, carrusel y ahora tablero. No podían elegir al cocodrilo, no.
  El programa admitirá que demos longitud al lado del tablero.
  También permitirá que establezcamos una posicion incial (x,y) para el caballo.    Obligada la casilla inferior izquierda como 0,0.
   Permitirá la opción de detenerse cuando encuentre un camino o de mostrar todos los posibles.
 Permitirá la opción de mostrar la traza a cada  “intento de moviento“ o no.

Por defecto, si no añadimos ningún parámetro el programa entiende que:
-El tablero es 8*8
- La posición inicial de caballo es la casilla situada en el vertice inferior izquierdo (en un tablero visual). La llameremos casilla 1 y la podríamos etiquetar como a un par ordenado (x,y) correspondiente (0,0).
- El programa se detendrá al encontrar un camino y lo mostrará.
- No hay traza.


Observaciones al enunciado de la práctica



Precisemos para evitar disgustos
Google: Odiseo Troya

Efectivamente, observaciones y objeciones.
 Quien haya leído el enunciado y guía exigida del pdf , teniendo algo de sentido común, habrá observado dos condiciónes que, por absurdas, dañan la vista.
Quien sepa construir programas en Java, quizás piense como yo, 3. 
Digo 3 por cómo exigen invocar el jar. "A gusto se quedo, la madre que los parió". (En los comentarios podemos discutir esto).

Así que, antes de que se nos desboque nuestro Rocinante o nos amargue la fiesta Odiseo, con el fin de no extenderme demasiado, voy aprecisar:



Por un lado, no voy a hacer ni puñetero caso a la exigencia "fichero jar que muestre en consola traza", cuando están pidiendo , también y previamente, ficheros de salida.


¿El motivo? En mi opinión, ya han emperifollado demasiado el programa con la forma de invocación de parámetros.
 Crear otro parámetro, más, para decir si se quiere la salida por consola o por fichero – Recuerdo: no te han dado ni una sola hora de implementación en Java – me parece que es tocar mucho los cojones al personal.
 Esa la opción del parámetro.
La otra solución sería, hacer un programa y luego borrar partes...
Para quien no sepa programar, es como si alguien te dice "Anda, cávate una piscina. Al lado, cávate otra igual. Una vez cavada la segunda , la llenas de agua y le sacas un par de fotos; tras ello, la vacías y cubres de nuevo el agujero;  por último,  me enseñas las fotos y me llenas la primera de agua que, me bañaré". (Mola esta españa tan cañí, ¿Qué no?)

El día que, en el Senado, les de por preguntar a la UNED sobre esto, a más de un "teacher" de Madrid me gustaría verlo responder jugándose el sueldo la carrera y el prestigio. Pero vamos, esto es "Es-paña" y tengo mis dudas de si, en algún siglo, ocurrirá.
Así que, el programa que os colgaré --con su código fuente-- procedera, en su invocación, a dar salida por ficheros.



Leevas trazas de peirme traza... Por otro lado, a mi entender y dado que piden: análisis, diseño, fuentes y ejecutable,es absurdo en ejecución dibujar cada ensayo --e incluso es absurdo dibujar el tablero ensayo si este es factible, puesto que cada tablero solución final muestra una colección de pasos válidos--.
Esto de la traza, para cualquier intento –resulte conduzca a solución o no -- , es lo que durante las dos asignaturas anteriores de programación se ha vilipendiado. Insistiendo en que, una programación diseñada formalmente tiene completamente controlado lo que ocurre en cada iteración de los bucles programados y el uso de trazas desprestigia al programador.
Así que, a mi modo de ver, la petición de la traza es una tonteria , máxime cuando , repito , cada tablero solución debe que contener el acceso a sus casillas secuenciado.
No veo justificada la petición. Dibujar, a cada intento de salto, un tablero sí que ralentiza algo el programa.
Un caballo siempre tiene 8 movimiento posibles pero, imaginaros en tablero de 100 casillas de lado (10000 casillas en total), andar dibujando a cada salto que se computa 10000 casillas......
Es mi objeción. En este caso, quien aportó las camisetas le pareció que era contravenir demasiado el enuncaido. No me dejó. Por tanto, el programa, sí que dibujará --en modo traza-- un tablero en el archivo por cada movimiento que compute. Amén que, cada tablero, siempre portará la secuencia de sus pasos en las casillas.



Aprovechando la segunda objeción, quiero hacer una observación: el programa lo empecé a implentar con mi Ubuntu. Algunos días de implementación – coincidiendo con festividades Navideñas – lo continué implementando en Windows, concluí la implementación de nuevo en mi casa con mi Ubuntu.
Todos pinzas de madera pero, cada uno las suyas El par de días que lo fuí probando en Windows observé que los ficheros .txt solución generados en mi Ubuntu no se visualizaban correctamente con el Notepad de windows. La visualización era perfecta usando Wordpad.
Quizás este problema se deba a algo que no sabía: cuando se genera un fichero de texto en Ubuntu existen 3 formas de guardarlo y por defecto emplea una tal que los saltos de linea no son interpetables en Windows.
Así que, si usáis Windows para ver los ficheros solución, recordad: Notepad no, Worpad sí.




La última observación antes de empezar:
No confundir con Crepúsculo.... Joer con la LOGSE    Indican en la guía que, el equipo docente recomienda BlueJ como entorno de desarrollo. 
  Yo no he seguido esta recomendación.
 He utilizado el IDE Eclipse en las versiones Indigo para Ubuntu y Juno  para Windows.
  En comentarios, si hay dudas, aclararé como ejecutar con parámetros. Así como problemas  y soluciones al migrar proyectos entre estas versiones desde “pepinos Quores” hasta equipos más humildes como el mío.





Se acabó tanta chachara. Empezamos la chicha.


 ANÁLISIS: elección de algoritmo y costes.



No se ajusta , no se ajustaNo hay criterio de selección de candidatos dentro de las n2 casillas y una ruta sin solución hará que "algoritmo vóraz" finalice. Ergo, planteamiento bajo la directriz de algoritmos voraces descartado.

no hay tiempo 
En esta primera versión , debido a premuras de tiempo, no tomaremos los estudios matemáticos formales ya realizados sobre este problema desde hace unos siglos. Luego, no iremos por la linea de algoritmos "divide y vencerás". Línea que sí podríamos seguir en otras versiones posteriores.


Hablamos de un caballo que parte de una posicion en el tablero (“estado”) y puede
quien mejor
--en caso mejor – saltar a 8 casillas (“nuevos estados”). Parece pues que se ajusta bastante bien a la idea de grafo y árbol. El grado de ramificación en hijos es de 8.
Hablamos, pues, de un algoritmo de exploración de grafos que vaya generando tableros y que nos permita la vuelta atrás si no agotamos los n2 nodos pero si las casillas posibles para un nuevo tablero desde una posición.


   Estudio de costes:

 

Supongamos que, queremos rellenar las n2 casillas del tablero con números entre 1 y n2 (sin repetir) con independencia de las reglas del movimiento de caballo. Las maneras posibles serían (n2)! . Sí , el factorial del cuadrado de n.


Al saber el número de ramificaciones podemos acotar el tamaño del arbol a una mantisa de 8 y un exponente de n2 . Es más, podemos incluso precisar que, no siempre son 8 las ramificaciones posibles pues en ciertas casillas este número merma -- por su ubicación -- y conforme vamos llenando el tablero disminuyen las alternativas.


Tirando de los conocimientos de fundamentos de Inteligencia Artificial en búsqueda y exploración de grafos usaré un algoritmo de busqueda en profundidad con retroceso cronológico.
Por supuesto que, se podría emplear heurística. Reduciendo todavía más las cotas pero como he dicho para desechar divide y vencerás vamos a “no – documentarnos “ y dejarlo para sucesivas versiones.
Concluyo pues que, con este algoritmo y sin heurística alguna, podemos hablar de una cota superior en complejidad temporal de θ (8 n*n )   y de una cota espacial de     θ (n2).





DISEÑO



              
He diseñado el módulo en 4 clases: 'saltocaballo', 'Tablero', 'Secretario' y 'Exploradora'.
 No sé hasta que punto es conveniente mostrar el esquema de cada clase, puesto que aquí ya hay detalles que pertencen al campo de la implementación. Pero, por si a alguien le sirve para tomar confianza, aquí van.


La clase 'Secretario' se encarga de pasar los tableros a ficheros. Podría, inicialmente, considerarse innecesaria como clase y suplirla por un método dentro de la clase Exploradora. Podría. Sin embargo, me ha parecido más claro establecerla como clase e instanciarla en una 'topisto' (elegante telefonista) por si, para futuras versiones, se le requirieran más cosas.

La clase 'saltocaballo' es la clase que lleva el main y gestiona la parametrización de la invocación y computa el problema pidendo, se guarden los resultados de la prueba en un fichero indentificable de acceso secuencial. 






  La clase 'Tablero' intancia tableros. Cada tablero instanciado contiene una secuencia de pasos por sus casillas siendo estas ordenadas. También, entre sus atributos, tiene el de “en que jugada me hallo” y otro atributo que nos permita la vuelta atrás cronológica. La he dotado de un método que nos devuelve un boleano si una posición (x,y) está o no dentro del tablero y adremás es usable. Tiene un contructor para el tablero inicial.


 

La clase 'Exploradora' es la más compleja.
 Hace instancias de 'Tablero' y genera saltos de caballo.
 A la hora de explorar el método trabajará con tipo de datos dinámico, 3.
 Uno lo uso para almacenar las soluciones que vaya encontrando en la invocación. Otro me sirve de rastro o huella y el tercero lo uso para comprobar si he llegado a la solución y si no generar hijo factible. Al generar hijo factible el padre pasa a la “pila” de rastro de mi exploración. Si no llego a solución cada vez que no hay paso factible el método toma la cima de rastro y busca el siguiente salto en la cronología.




Una clase de exploradora
Tablero por defecto
Si las imagines anteriores han servido para perderos, no preocuparse.
 Pongo un par, por ejemplo, de la clase exploradora y otra de la clase tablero y nos vamos a la implementación que es donde de verdad se destapa toda la chicha  y hay que leer y comentar detenidamente. ;-)











IMPLEMENTACIÓN

Voy con los fuentes de menor a mayor complejidad:


Source secretario class





Source Tablero class




Sí, implemento la clase tablero como "serializable". El motivo es que la hora de "explorar" un tablero dado en busca de la solución  voy creando  clones y modificándolos respecto al tablero que examino.


La clase 'saltocaballo'  la paso a odt y os la pego en dos fotos :



Foto 1 de 2


Foto 2 de 2












El último fuente es la clase "Exploradora" que instancio en salto caballo como 'dora'.
Expongo el archivo .java en él, como veis, bastantes métodos son auxiliares:










Foto Exploradora.java 1 de 7


Foto Exploradora.java 2 de 7


Foto de Exploradora.java 3 de 7


Foto de Exploradora.java 4 de 7


Foto de Exploradora.java 5 de 7


Foto de Exploradora.java 6 de 7

Foto Exploradora.java 7 de 7







PROBAR EN ECLIPSE Y HACER EL .JAR




   Con estos 4 fuentes ya todo se reduce a probarlo una vez en el entorno eclipse y construir el programa ejecutable saltocaballo.jar

Ese que, creo yo y no como dice la guía,  debería de invocarse como:
             $> java jar saltocaballo.jar
Y, si se quiere, darle parámetros de entrada.





Entregar el programa y ...
 !A probar las camisetas! ;-)





 No quiero alagar a entrada mucho más. De por sí es técnica y larga.
 Os subiré un enlace para que os descarguéis el .jar y hagáis vuestras probatinas.

 Recordad el coste temporal. Da igual que tengáis un "pepino" de equipo  con tropecientos "quad cores". Como le pongáis lados de tablero por encima de 20,  lo mismo disminuye el paro en España del 25 %  y aún no tenéis solución... !Nah!
    Sí que os agradecería si me haceis llegar los costes de los ficheros con busqueda exhaustiva que por probatinas genereís. Así me daré cuenta de cuanto de desfasado tengo el hardware de mi equipo. (lo ideal sería me mandeis el nombre del fichero generado , procesador de vuestro equipo , memoria ram, sistema operativo y tiempo que ha tardado en generarse el fichero una vez invocado el .jar ;-)


    Respecto a algunas dudas que ya me han ido llegado por correo,  daré mi opinión o cómo lo hice en comentarios.
 !En cuánto tenga algo de tiempo!
Mientras ya sabéis, salida 3,2,1...


SED BUENOS!

sábado, 23 de febrero de 2013

La saga el Toshiba II Observatorio Estelar (Memento Mori)

 

   Lamento el retraso.
Comenté en la anterior entrada que, en Diciembre, me plantearon un reto informático. Requirió ,este, de mi ingenio y memoria, las cuales tenía más que oxidadas en lo que algoritmía e IDEs se refiere; Tras la consecución, me tome un descanso y me interesé en un tema que veremos como resulta.
 Es la única excusa que puedo dar.

ingrid devatova
Estoy considerando muy seriamente echarme una compañera.



Hoy, vuelvo a retomar la saga del Toshiba con, quizás, la entrada más técnica.
Iré despacio con la historia y las observaciones.
Resumen rápido, antes de ponernos manos a la obra:
    Sabemos que falla el disco duro (hard disk), en el Toshiba con procesador Intell en cuestión.
    También vemos que no podemos examinarlo desde el propio sistema operativo (OS).










Una utilidad como Gparted puede darnos pistas de que hay dentro.

Gparted
Arrancando con el CD- Live de Gparted 0.9. nos muestra un único disco duro (Hard Disk).
 Este, está estructurado en dos particiones primarias (NTFS; de unos 60 GB y 200 GB ) y una oculta (2GB).

La partición oculta está ocupada en su totalidad. La primaria – más pequeña – está ocupada a un 60% y la de 200 GB no llega al 1% de ocupación.
Ante todo confianza
Ahora vas y te acercas


Según usuario, en la tienda le dieron unos Cds y le indicaron que, en caso de avería, con ellos podría recuperar los datos....


El problema es que, operando un poco con Gparted sobre el disco duro, éste, avisa:  tiene sectores dañados y le es imposible hasta leerlo algunas veces.
 Vamos que nos hace "la cobra".
Estamos pues, ante un problema de disco duro a nivel físico.






¿Qué es un disco duro? o ¿Qué nos conviene saber sobre un disco duro para este caso?

 

Partes físicas de un disco duro
Google: Disco duro



Un disco duro es una pieza circular en la que de forma electromagnética se almacenan datos.
 Los datos (binario y por tanto marca o ausencia) se almacenan de una forma estructurada. 






Esquema de un disco duro
Google: Disco Duro

  Un disco sale de fabrica con un formateo a bajo nivel; se incorpora a un equipo y la placa madre o Motherboard lo reconoce (dimensiones y estructuración, comunicación y sincronización con otros elementos);  Un sistema operativo se encarga a través de un controlador o driver de decirle como debe comunicarse y de hacer estructuraciones para trabajo lógico; un administrador de sistema, con ordenes internas, puede operar incluso con él como unidad. 




Esto es, de una forma muy simplista y esencial el concepto básico de un disco duro con el que hoy vamos a trabajar.



Una marca electromagnética, ¿Es para siempre?


No. La crisis española tiene toda la pinta pero, una marca electromagnética no.


Probad a poner en el suelo de la calle una moneda de dos euros.
Veréis como, más temprano que tarde, se produce una variación patrimonial entre quien la recoge y vosotros.
efímero
 Así la dejéis pegada con pegamento rápido y superfuerte que, si hay que ir a casa a por cortafríos y martillo, se irá.
Desde el 2007  en la España de “los brotes verdes” y la “desaceleración” --según partido gobernante y “hooligans , afiliados o simpatizantes” modorros--, esta broma clásica se ha convertido en un arreglo económico semanal para la supesta víctima.



    Pues, las zonas marcables electromagnéticamente de un plato de disco que gira, también pierden está cualidad.
    A veces por mal uso (corte repentino de luz con el disco girando), otras por que la calidad del material no es la deseada y otras símplemente por los ritmos de variación térmica.

    Como ya apunté en una entrada anterior, la esperanza de vida de un componenete informático --  de estos de torre --  suele estar entre 8 a 10 años.
    Con el uso normal, los discos duros van degradándose, van perdiendo zonas de uso.    Es como la perdida de puntos de visión en monitores LCD.

    Una medida preventiva para alargar la vida de un disco es formatearlo entero una vez al año. Hablamos de un darle un formato a alto nivel. Queda siempre desaconsejado dar formateos a bajo nivel a los usuarios.

     Como toda medida preventiva, es inteligente  y no requiere una dedicación excesiva, se trata de no dejar al Disco Duro solico, olvidado y desamparado.
     Vamos, aunque sea una vez al año pero darle un poquico de alegría.




Hablamos de mantenimiento sobre el disco, Ha blamos de comandos del tipo


No me vengas con que los comandos son dificiles
Es más dificil aprender esto y se os da genial.
En Windos la familia de comandos chkdsk
                    chkdsk /?
Nos da una idea de mantenimiento en un disco duro y actuaciones en caso de error.
Por supuesto tirando de hemeroteca o de un floppy preparado con MS-DOS 6.2 encontraremos más documentación respecto a este comando y más ordenes derivadas de este. Pero, los nuevos FileSystems hacen que bastantes de ellas hayan quedado obsoletas.

Consecuencia, esta, que no se ha producido en Linux. Todavía, existe fdisk cuyo uso como root permite el manejo de particiones.




Volviendo a nuestro GParted y a nuestro caso.



El disco tiene tanto sectores defectuosos que no podemos operar con las particiones.
     No podemos redimensionar y hacer particiones nuevas.
     Tampoco podemos reestablecer la imagen almacenada en la partición oculta.
     Luego, el disco está excesivamente dañado.
  
De hecho, si es un disco duro y no lo has desahuciado , ¿Cómo lo catalogamos? 
     Ciertamente, y repito, todo apunta a que vamos a trabajar con miserias. Es decir: mucho trabajo y mucho arte,sin garantías de conseguir -- si quiera-- el 80% de exito. Y consiguiendo lo que consigamos, al usuario final, siempre, le va a saber a poco.



Viene la pregunta mágica ¿Cómo? ¿Cómo podemos hacer, de nuevo, imantable un punto o sector del disco que ha perdido esa propiedad?

No podemos. Simplemente.
Lo que si que es posible, es discriminar la localización del punto y aislarlo.
        Es decir, decirle, por ejemplo, al sistema operativo que la zona que el SO llama 'sector 6' sea ignorado en cualquier direccionamiento.
        Es decir creamos una lista de sectores direccionados “apestados”, con los que el el Sistema operativo no contará para nada (ni lectura ni escritura).
        Esa es la idea.

¿Forma inicial de conseguir esto? A través de un Sistema operativo en modo Live.


Por casa tenía en “tecnología Windows” a XP-Pilitos. La idea es trabajar el disco duro desde él.

Al vecino no le importa que su portátil, en caso peor, acabe teniendo como OS un Windows XP. Es más, según sus palabras: “Lo prefiero. Si funciona, cuanto más conocido sea mejor”.
Bajo esta premisa también podemos emplear un Cd con el Windows XP instalable.
Recuerdo que el último que construí así fue en el 2009 en Soria lo llamé 'XP-2009-SP3' – Le añadí a uno del 2005 como más joven con SP2 el SP3. Cómo hacer esto da para otra entrada. –


Pero, empezaron los problemas y quebraderos de cabeza.
Arranco el equipo con XP-Pilitos; este se carga en memoria;  Pilitos cargado reconoce que, en el equipo, hay un disco duro pero no puede acceder a él.

Ahora vas y lo cascas
Google: Incoherencias
!Coño! ¿Tan dañado está? Por tu ma'é accede un poquito siquiera. – Me sale del alma.
¿Lo ves?, ¿Te gusta? Pues ale, a morder la esquina porque no lo vas a catar. – Me contesta Pilitos todo chulo.

Tras probatinas y desazones varios, repito el proceso. Ahora con 'XP-2009-SP3'.
Lamentablemente, con el inglés más venenoso, se repiten las consecuencias.

 


Extraño , ¿Verdad? !Qué digo extraño! Insólito, misterioso, enigmático, raro... Más raro que un gitanillo con gafas y más estresante que fotografiar una pulga con hipo.


Claro el “quid” del problema no sale... (Recuerdo que mi memoria está oxidada. En pleno “arremangamiento y probatinas”, cómo para acordarte de una frase dicha en una clase que, soltó un profesor 4 años antes).
Luego, el cómo reparar el disco parece que hay que hacerlo desde mundo Linux. 



Pasamos a mundo linux.


Metemos un Ubuntu-Live (11.10 en mi caso) para portátiles y nos vamos al disco..... El análisis nos muestra muchas, muchas, variables en rojo... De esas que dicen que el resultado del análisis para esa propiedad no es malo, sino lo otro peor.
En esta tabla resume claramente lo que se encontró tras emplear la herramienta de discos de Ubuntu:

Sectores dañados
Evaluación
Consecuencia
8
Comprensible
No pasa ná
80
El disco ya está de capa caída
Mantenimiento
800 o más
Antes se hará público de cuantas empresas es gerente, administrador o dueño el crío de 10 años de un diputado en el Congreso que, te funcionará el equipo sin colgarse.
Si no tienes copia externa del dato te toca meterle mano al disco. Pero, si no la precisas: todo lo que no sea tirarlo es un derroche de recursos.




    Pues nada, ya veis cual es el caso peor. Supondréis cual me toco tratar. Pues sí.
    Vamos que, si me lo llega a dar quemado, partido, derretido o chorreando agua, el favor hubierse pasado por hacele la competencia a una de las 5 empresas españolas que viven de recuperar datos den discos. 

Este chamán tuvo que encomendarse con ceremonia y todo al comando badblocks  . No lo había usado en su vida y que espera no volver a tener que hacerlo porque para 80 o 160 sectores dañados debe ser milagroso pero, para un disco con más de 800 le lleva unas 72 horas mínimo y !A Dios , gracias! , si llega a recuperarle un 60% la salud.

Ah sí, por cierto , tema delicado, mucho, esto que estamos haciendo.

   A lo mejor alguien ha pensado que, antes de tirar por bloques, como todo el ordenador usa Windows, el primo del hermano del vecino del cuañado le ha dicho "del" comando fsck y algo de que si e2...

Podemos hablar de ello en los comentarios.
 Ahora estoy contando una historia, en la que me pareció que, el disco entero, tenía más valor como arma arrojadiza que como unidad de almacenamiento. Me pareció ridículo andar resucitando particiones una a una y tiré por badblocks. Por supuesto, con parámetro -w y con el tamaño de bloque por defecto.


   Pasaron algo más de 3 días y el comando, por fin, terminó su trabajo.
     Una revisión con la herramienta de discos de Live Ubuntu decía que todo seguía igual. Pero Gparted 0.9 ya podía jugar con las particiones.
     Así que, borré MBR y “Tabula rasa”.

Creo distintas particiones quedando la cosa ahora más o menos así:
6GB de espacio sin asignar.
Sda1 en NTFS de 70 GB .
6 GB de espacio sin asignar
Extendida de 150 GB Con 2 lógicas dentro y estructurada del siguiente modo:
* 2 GB sin asignar
* Sda3 FAT32 100 GB
* 8 Gb sin asignar
* Sda4 NTFS 10 GB (Esta será para guardar una imagen)
* 4 GB sin asignar
Resto de GB sin asignar.

Guardo.


Siguiente paso: Instalación de WXP con ' XP-2009-SP3' sobre Sda1.

 

       Imposible.
      ¿Os suena? ¿Sí? A mi también. Windows no puede acceder al disco.....
       Es más aparece un “pantallazo” azul con la referencia 0x0000007B .

    Bueno pues, qué disco duro más especial ¿No?


Pues sí. Ni más, ni menos.
 Es que los portátiles Toshiba van con unos discos duros un pelín especiales.
 ¿Qué quiero decir con esto? Quiero decir que fabrican unos discos cuyo funcionamiento óptimo exige que el sistema operativo posea un controlador específico para ese disco.
En este caso que nos ocupa hablamos de un controlador SATA AHCI .(Creo que el 7 o el 8)
Y ¿Cúal es el problema? Pues el problema es que mi WXP instalable no tiene.
    La informatica no entiende de grises, de ratios sexuales en la contratación, ni de "bien quedas" si el instalable no tiene el controlador para  disco AHCI o le dices que no es AHCI o no sabe lo qué  --  y por tanto ni lo toca --.



Luego, ahora, se plantean 2 posibles alternativas para instalar XP:


A
Creamos un nuevo Cd instalable (por ejemplo con nLite) que si tenga el driver necesario y especifico para manejar el modelo de AHCI programado en ese SATA.
B
Cruzamos dedos y nos vamos a BIOS.
Digo cruzar los dedos porque, tanto el año pasado, como hace 5 años nos contaba el profesor, encontré esta opción. Pero, si no estuviera entonces, la única alternativa sería la A.


Si en la BIOS encontramos la opción de manejar el disco en modo IDE y no SATA , es lo que debemos hacer. Como IDE tirará de DMA y no requerirá el controlador AHCI. Obviamente el disco no funcionara en modo optimísimo de la muerte “non plus ultra nihil” pero, eso sólo lo notan uno de cada 10000 usuarios y , de estos especialistas, al 85% ni le importa.



Parece que ha habido suerte (OPCIÓN B) y con disco en modo IDE podemos instalar OS Windows XP.

Siguientes pasos:


 
El resto ya es poner los controladores en equipo (video, sonido, red, etc.)
Dejamos que el equipo actualice en red el sistema operativo.
Configuro el OS con 2 usuarios (“Administrador y usuario pelón”).
Instalo y configuro unas aplicaciones mínimas (Todas de Licencia GNU): Openoffice, Burnaware, Avira free, Acrobat reader, Gimp, 7z , VLC media player, un cliente torrent y un par de navegadores web.

Ahora llega el momento de hacer una imagen de Sda1 y guardarla en Sda4.

Para ello uso un programa gratuito CloneZilla-live
Quemo una “.iso” consiguiendo asi un CD-Live.
Y con ella opero -- Reservo la explicación de como operar con él a comentarios para no alargar más la entrada--.


Listo.

¿Listo?

Todo lo listo que él disco puede y es que el grito clama las palabras de Francisco de Quevedo:
Hoy no hay de dibujos.... Que os quejáis por todo
Menea un poco el látigo Indi, que lo haces con "mucha arte"


"¡Ah de la vida!"... ¿Nadie me responde?
¡Aquí de los antaños que he vivido!
La Fortuna mis tiempos ha mordido;
las Horas mi locura las esconde.

¡Que sin poder saber cómo ni a dónde
la salud y la edad se hayan huido!
Falta la vida, asiste lo vivido,
y no hay calamidad que no me ronde.

Ayer se fue; mañana no ha llegado;
hoy se está yendo sin parar un punto:
soy un fue, y un será, y un es cansado.

En el hoy y mañana y ayer, junto
pañales y mortaja, y he quedado
presentes sucesiones de difunto.



Y no hay más. Pues, el disco estaba tan, tan dañado que, al mes, volvió a dar problemas de cuelgue. Y la mejor opción opción fue comprar otro nuevo.


Y es que en esta vida el tiempo es juez y verdugo. Más tarde que temprano a cada cual emplaza.


1,2,3 Salida...


¡Sed Buenos!





Okay, I try to summarize this entry for foreign visitors.


The Toshiba hard drive had a
huge amount of bad sectors. Distributed so many that Its partitions couldn't be operated by Gparted 0.9..

  The most practical solution in these cases is to throw away the device and buy a new one.



I've just published, therefore, the process I followed to leave the laptop operating as possible - knowing that soon the same thing happen again. Due to the large number of sectors. -


First with Ubuntu 11.10 in Live mode, the command blocks recovery badblocks - well parameterized -. The process is slow but produces better results than expected.

Next, I set partitions with GParted.

After that, I have the problem that the laptop has a disk AHCI, and my WXP installer does not have the appropriate driver. 2 possible ways of solution:

A) I do with, say nLite, a new installable who does have the appropriate driver for AHCI model.

B) The other way, see if I can try in BIOS as IDE hard disk and DMA.
I was a lucking man in this time , option B was a fact.
Bringing the OS installed along with the other drivers, basic programs and finally configure GNU users.


Last, I make an image with Clonezilla and saved on disk and another copy for me, preventing future incidents.
Not.Today, there's not anime teacher. You've two models of breathtaking: D

 



We could say that is already repaired. But it would be an insult to common sense, because we have not found the cause of a laptop has so many bad sectors (now isolated).
And so the computer is repaired but the hard drive must be replaced. ASAP.

 



You know, profile / contact --->email in case of doubts or concerns. (Laborals offers , sharing or good comunication it's well come too). I am for all : D

Be good!