22 abril, 2013

Linux - Recuperar USB utilizada como disco de arranque

Como de costumbre, todas las complejas cuestiones técnicas tienen una solución relativamente directa en Linux. El problema es saber todos los trucos y encontrarlos rápidamente para poder sacarles provecho. Un ejemplo de esta situación es poder recuperar una USB que había sido utilizada como boot drive para hacer una instalación alguna distribución de Linux. Pensando que ya no tenía caso y que iba a ser complicado encontrar la solución para volver a utilizar toda la memoria del disco, encontré la página con las respuestas que solamente alguien muy técnico (geek guys :D) puede encontrar tan solo con la ayuda de los comandos (verhttp://www.pendrivelinux.com/restoring-your-usb-key-partition). A continuación reescribo los mismos pasos que acabo de probar y que me dieron un resultado positivo:

A. Primero se deben borrar las particiones que quedan en la USB

1. Abrir terminal y entrar como superusuario (escribir su)
2. Revisar los nombres de los discos y sus particiones: fdisk -l
3. Entrar a la revisión del disco: fdisk /dev/sdX (reemplazando X por el nombre del disco. en caso USB, normalmente sdb)
4- Escribir d y proceder a borrar las particiones (en mi caso habían 3: sdb1, sdb2, sdb3)
5- Escribir 1 para borrar la primera partición. Borrar las otras dos.

B. Crear nueva partición

1- Escribir n para crear la partición
2- Escribir p para hacer una partición primaria
3- Escribir 1 para indicar que es la primera partición y aceptar el tamaño por default.
4- Luego pregunta el espacio de la segunda partición, asignarlo por default (el resto de espacio del disco)
5- Escribir w para escribir la info de la nueva partición a la USB
6- Desmontar el disco con: umount /dev/sdX1 (reemplazando X por el nombre del disco. en caso USB, normalmente sdb)

C. Asignar la partición a formato FAT

1- Escribir mkfs.vfat -F32 /dev/sdX1 (reemplazando X por el nombre del disco. en caso USB, normalmente sdb)

Al extraer la memoria y volverla a utilizar en el sistema, todo la memoria (aparentemente) estará disponible. Memoria recuperada !

12 abril, 2013

Construir un string cross-platform C++

Buscando la forma genérica para concatenar adecuadamente números en un string o cadenas de strings entre si, recordé el uso de stringstream para no olvidarlo. Anoto que usé primero std::to_string pero luego noté que en Linux pone problemas de compilación. Voici l’exemple:

std::stringstream ss; 
ss<<"Ou yeah! "<< 3 ; 
std::string s = ss.str();
std::cout << s << '\n';

28 marzo, 2013

Una vieja conexión BBTK - ITK ...

Luego de sufrir un día en un problema mínimo, la solución se encuentra en los recuerdos y algunos amigos/colegas/asesores que tienen más memoria.

Lo importante a tener en cuenta esta vez es que si se crea una caja BBTK que haga algo con filtros de ITK, hay que agregar un atributo de estilo itk::DataObject::Pointer _att a la clase, y asignarle el output luego de hacerle SetOutput a la caja. De esta forma, se retransmite el objeto hacia las otras clases y el recolector de basura no se ve tentado a eliminar el SmartPointer dando la impresión que el código funciona y son los maravillosos pipelines que no quieren pasar los datos de caja en caja!

Importante dato a tener en cuenta.

27 marzo, 2013

Mallas a Imágenes + Operaciones lógicas

Como luego no me voy a acordar de la secuencia de pasos que acabo de hacer, prefiero escribirlo para próximas oportunidades.

Problema:

- Recibo dos mallas en formato STL: la superficie de una esfera que se superpone con otra. Se quiere generar la diferencia entre la más grande respecto a la más pequeña.

Solución:

- Rasterizar las superficies. Utilizo VTK, vtkPolyDataToImageStencil (ver código de ejemplo). Defino el spacing de la imagen resultante. El tamaño es definido automaticamente por los bounds del polydata. Se generan dos imágenes MHD de suficiente resolución para generar nuevamente las mallas.

- Aplicar aritmética binaria entre las dos imágenes para generar la diferencia. Para esto uso MeVisLab. Tan solo con el filtro MergeRegions, opción AbsoluteDifference, obtengo el resultado. En Use Region: Union of all regions. El resultado genera unos bordes indeseables, por lo que se aplica un Opening de kernel 2x2x2. Guardo las nuevas imágenes.

- Generar malla de la diferencia. Abriendo la malla en ParaView, genero la superficie (MarchingCubes) y la guardo como archivo PLY. Esta malla es escalonada (por el MarchingCubes) y puede tener huecos. Abro el archivo en MeshLab y aplico una operación de llenado de huecos. Guardo nuevamente en PLY, abro este resultado en ParaView y guardo esa superficie completa como polydata en formato VTK.

- Reducir el tamaño de la malla/mejorar la distibución de triángulos y suavizar. Utilizo desde un pipeline en bbtk (CreaTools) el algoritmo de S.Valette; en paticular la caja MeshCleaning. Esta caja genera un Polydata que puede ser guardado en formato VTK o STL. (ParaView también funciona para hacer conversiones a STL)

Et voilà mon petit tout sur les différents outils de traitement d’images et des maillages !!! El resultado es más bien interesante y cool! Indeed, no son propiamente esferas ;-)


En azul la parte que quería guardar en un STL independiente. La roja era una de las mallas de entrada y la suma de los dos era la otra.

14 marzo, 2013

Java + VTK - 1er Test

Primera prueba de Java + VTK!

Seguí en detalle la guía disponible en este sitio Web: http://www.particleincell.com/2011/vtk-java-visualization/ . A pesar que todo funcionó prefiero hacer anotaciones aun más precisas de mi prueba para que pueda reproducirse sin problema:

1- Descargué el VTK 5.10.1 . Generé el proyecto con CMake 2.8.9 y el CMakeCache.txt está disponible en los archivos adjuntos. Aquí se puede ver que forcé la dependencia a una de las versiones instaladas en mi máquina, específicamente la de Java 7 32bits. (C:/Program Files (x86)/Java/jdk1.7.0_15)

2- La compilación la realicé con VC++ Express 2008. No hubo problemas de compilación y luego de instalar se agregaron las rutas indicadas al PATH: C:\Program Files (x86)\VTK\bin;C:\Program Files (x86)\Java\jdk1.7.0_15\lib; C:\Program Files (x86)\Java\jre7\bin; C:\Program Files (x86)\Java\jre7\bin\client; C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT;

3- Al crear el proyecto Eclipse asigné el mismo JDK como JVM que utiliza el proyecto. Añadí también el vtk.jar. Aparecieron los problemas de “vtkCommonJava not loaded”, pero se resolvieron finalmente añadiendo como Native Libraries de vtk.jar la ruta: C:\Program Files (x86)\VTK\bin donde están todos los DLL’s.

4- El ejemplo de los IsoSurfaces y los planos funciona :D. Haré una prueba con imágenes para ver cómo se comporta en dichos casos Java con VTK.


Voila mi primer Test!


RaC