¿Por que no debemos usar String para almacenar datos sensibles en Java?

Últimamente he tenido que lidiar con datos comprometedores en mis desarrollos con los que se necesita tener especial cuidado, y la conclusión a la que he llegado es que no se debe usar String para datos sensibles.

¿Por que no debemos usar String?

El tipo de datos String es “inmutable”, por lo tanto, no podemos cambiar el valor del objeto una vez que lo hemos creado. Esto hace que el valor de un String se almacene en memoria y su limpieza dependa del garbage collector.

Por esta razón, si usamos un String para almacenar un dato sensible, nunca podremos garantizar que su valor se haya borrado de memoria ya que no tenemos un control sobre la ejecución del garbage collector, y por tanto, nuestro dato será sensible a un volcado de memoria.

¿Que podemos hacer entonces?

Java recomienda usar otros tipos de objetos para almacenar este tipo de valores, como por ejemplo el array de caracteres (char[]).

El char[] es una cadena de caracteres y es “mutable” de manera que cuando terminamos de usarlo podemos asignar un ‘\0’ a cada uno de sus elementos y forzar el borrado del contenido. De esta manera no dependemos de que el garbage collector libere la memoria asignada al objeto.

Cómo instalar el emulador de Android en Windows

Antes de ponerse a programar en Android una de las cosas imprescindibles es instalar el emulador para poder probar las aplicaciones que desarrollemos.

1. Descargar e instalar

Para descargar el emulador iremos a la página oficial de android (http://developer.android.com/sdk/index.html) y descargaremos el SDK para Windows, elegiremos la versión “installer” (si la recomiendan hay que hacerles caso).

Una vez descargado el SDK, lo instalaremos como cualquier otro programa, siguiente, siguiente, siguiente…

2. Crear nuestro primer dispositivo virtual

Ahora que ya tenemos instalada la aplicación, la abriremos, como es la primera vez que la ejecutamos nos preguntará si queremos instalar nuevos componentes, aceptaremos y nos iremos a por un café porque le cuesta un rato.

Cuando ya esté la aplicación instalada veremos un menú como el siguiente:

Para crear un nuevo dispositivo sobre el que probar nuestras aplicaciones haremos click en New y se nos abrirá la siguiente ventana:

En esta ventana rellenaremos la información del terminal.

  • Name: Es el nombre de nuestro dispositivo
  • Target: Es la versión de Android que queremos emular
  • SD Card – Size: Es el tamaño de la tarjeta de memoria
  • Hardware – New: Podemos añadir nuevas características (acelerómetro, etc.)

Finalmente haremos click en Create AVD para crear nuestro terminal. Si todo ha ido correctamente nos aparecerá, la ventana anterior con el terminal que acabamos de crear, tal y como podemos ver en la siguiente imágen:

Ahora, para que se ejecute sólo tendremos que seleccionar el terminal y hacer click en Start y posteriormente en Launch en la ventana que se nos mostrará. Si todo ha ido bien se cargarán varias consolas de windows y finalmente podremos ver una ventana con un teclado a la derecha y a la izquierda la pantalla del terminal, con la pantalla de inicio de Android.

Problema PANIC: Could not open…

Uno de los problemas que nos podemos encontrar es el de “PANIC: Could not open …/avd/prueba.ini”

Esto sucede porque el emulador es incapaz de encontrar el archivo .ini en nuestra carpeta de usuarios. Una de las soluciones es la de copiar y pegar el contenido de la carpeta avd de nuestro directorio .android a la dirección en la que dice que no lo encuentra. Pero esto nos obligará a tener por duplicado los datos de cada uno de los dispositivos. Por lo tanto os recomiendo que hagáis lo siguiente para corregir el error y no duplicar información:

  1. Abrir una terminal en modo administrador: Inicio – Ejecutar – CMD – 2º botón – Ejecutar como administrador
  2. Escribir lo siguiente: En mi caso instalé el Android SDK en D:\
  3. mklink /D %HOMEPATH%\.android D:\.android
    

    De esta manera hemos creado un vínculo virtual, algo así como un acceso directo a la carpeta .android. Así ya no tendremos que duplicar la información de nuestros dispositivos virtuales y no nos volverá a mostrar el error.

Estoy escuchando: Russian Red – Everyday Everynight

Leer un archivo Excel desde PHP

Últimamente me ha tocado exportar e importar archivos Excel usando PHP. En este post explicaré cómo lo hice usando XAMPP y los pasos que seguí.

1. Instalando las librerías necesarias

Para poder leer un archivo Excel vamos a necesitar dos librerías:

La librería Spreadsheet_Excel_Writer es una extensión de PHP que tendremos que instalar usando PEAR. Abriremos una consola y escribiremos:

   pear install Spreadsheet_Excel_Writer

Para instalar la librería Spreadsheet_Excel_Reader iremos a su página principal, descargaremos el paquete y lo descomprimiremos.

Dentro del archivo veremos una carpeta llamada Excel y dentro de ella dos archivos: oleread.inc y reader.php. Copiaremos el archivo reader.php y lo pegaremos en la carpeta “directorio_de_php/pear/Spreadsheet/Excel/”. Luego copiaremos el archivo oleread.inc y lo pegaremos en la carpeta “directorio_de_php/pear/Spreadsheet/Excel/Reader”. Una vez hecho esto, cambiaremos el nombre del archivo oleread.inc a oleread.php.

2. Cargando el archivo Excel en nuestro PHP

	//Cargamos la librería
	require_once 'Spreadsheet/Excel/reader.php';

	//Creamos el objeto y cargamos el fichero Excel
	$data = new Spreadsheet_Excel_Reader();
	$data->read(ruta_del_archivo_excel);

3. Códigos de ejemplo

A continuación os muestro algunos ejemplos de las funciones más sencillas que podemos usar para obtener datos del archivo Excel.

//Obtenemos un libro del Excel
$sheet = $data->sheets[numero_de_libro];

//Obtenemos las celdas
$cells = $data->sheets[0]['cells'];

//Obtenemos una fila determinada
$row = $data->sheets[0]['cells'][numero_de_fila];

//Obtenemos una celda concreta
$data->sheets[0]['cells'][fila][columna];

//Obtenemos el número de filas y columnas del Excel
$nrows = $data->sheets[0]['numRows'];
$ncols = $data->sheets[0]['numCols'];

4. Conclusión

Personalmente, si quieres tratar los datos de un Excel frente a una base de datos, mi recomendación es que importes los datos del Excel a una tabla intermedia en una BD y posteriormente aproveches la potencia de SQL para hacer operaciones con esos datos.

Python se abre camino

Hace un par de días se me planteó un problema, quería hacer una aplicación que basicamente hiciera lo siguiente:

  • Lanzar una petición por post
  • Recoger el código HTML
  • Parsearlo para sacar un contenido
  • Mostrar el contenido

Hace más tiempo aún me recomendaron Python para todo este tipo de cosas, nunca había programado con él, y de hecho siempre había pensado que se trataba de un lenguaje de programación viejuno, ERROR!.

Me maravilla, de hecho, he tenido otro proyecto similar en el que trabajar y no he dudado, Python al poder, cada día me gusta más y quiero aprender a manejarlo bien y por supuesto lo recomiendo pues es sencillo y potente.

Algún día igual pongo mis comienzos con Python, que IDE he usado, como he trabajado, donde buscar información y por supuesto colgaré mis proyectos, pero ahora están en fase alfa/beta

Genera XML a partir de un contenido con Dapper

Hace un tiempo se me propuso trabajar en un proyecto que requería recoger información de varios sitios web para luego juntarla en una misma página web.

La primera de las ideas que miré fue la de buscar sitios que tuvieran los contenidos que necesitaba y si estos disponían de algún tipo de XML o derivados como RSS o JSON que me permitieran recoger lo que necesitaba y parsearlo de una manera cómoda. El problema llegó cuando estos sitios web no ofrecían estos servicios, así que como segundo recurso se me ocurrió parsear el código fuente de los sitios web para extraer los contenidos y así poder crearme un rss o xml que pudiera usar, pero después de usar el "ctrl+u" (amo el teclado) varias veces me dí cuenta de que aquel código estaba tan mal formado que parsearlo podía convertirse en un infierno.

Así que pospuse el desarrollo del proyecto hasta tener una idea mejor para afrontarlo. El caso es que hace poco conocí la existencia de una web llamada Dapper, esta web permite generar archivos XML y sucedáneos de una forma cómoda y con solo varios clicks en la web que tiene los contenidos.

Me lancé a probarlo y la verdad es que me pareció muy sencillo y una forma muy cómoda de conseguir aquello que necesitaba, por lo que el proyecto está otra vez entre mis manos y algún día igual lo cuelgo en la red.

Con esta página también se puede "mangar" contenidos de una forma más sencilla, ¿qué se os ocurre hacer? ¿Creeis que es más util que parsear el código de otras formas? Echarle un ojo y me lo decís.

PD: Vuelvo al tragín.