viernes, 22 de febrero de 2008

Subir imágenes al Servidor y Guardarlas en tu Base de Datos

Llega el momento de cualquier desarrollador Web... en la que tiene la necesidad de dar la oportunidad al cliente de subir imagenes al Servidor, tal vez su foto, avatar, etc. Así mismo, aquel que trabaje con Bases de Datos tambien buscará la oportunidad de guardar archivos de imágen en una tabla, para no tener problemas al momento de respaldar y no cargar con todos los archivos.

En el siguiente Post se presenta la forma básica de hacer estas dos cosas, utilizando .NET y C# aunque facilmente puede ser aplicado en cualquier lenguaje o BD.

En primer lugar, necesitamos agregar a nuestro código las siguientes referencias:

using System.IO;
using System.Text;
using System.Drawing;

Posteriormente, necesitamos el control FileUpload, el clásico cuadro de texto y botón para seleccionar la ruta del archivo que se desea.

El procedimiento se divide en dos partes, subir la imagen al servidor y codificarla para su almacenamiento en la Base de Datos. Esta codificación se realizará en Base64, lista para almacenarse en un campo tipo texto.

Iniciemos con el evento de un botón para subir la imagen:

protected void bt_agregar_Click(object sender, EventArgs e)
{
//Variable que almacenará el nombre de la imagen
string imagen = "";

//Determinamos si se tiene un archivo que subir, una vez ya seleccionado.
if (this.FileUpload1.HasFile)
{

//Se separa la extensión del nombre del archivo para validarla
string[] nomExt = this.FileUpload1.FileName.Split('.');
string tipoFile = nomExt[nomExt.Length - 1];

//Revisamos si el archivo cuenta con una extension valida, pudiendo agregar o quitar.
if ((tipoFile == "jpg") || (tipoFile == "png"))
{

/*Si se cuenta con la extensión válida, procedemos a guardarla en el Servidor. FileUpload1.SaveAs solicita una cadena de texto con la ruta y el nombre del archivo. Server.MapPath("~/") determina la ruta de nuestra aplicación en el servidor. Si deseamos, le concatenamos otra carpeta, previamente creada*/

this.FileUpload1.SaveAs(Server.MapPath("~/") + "//moo//" + this.FileUpload1.FileName);

//Guardamos el nombre de la imagen
imagen = this.FileUpload1.FileName;

//Obtenemos su tamaño en bytes una vez que esta ya en el servidor
System.IO.FileInfo info_img = new System.IO.FileInfo(Server.MapPath("~/") + "//moo//" + this.FileUpload1.FileName);

//Lo convertimos a double y calculamos su peso en KB.
double b_img = Convert.ToDouble(info_img.Length);

//Limitamos el peso del archivo
if (b_img <= (512*1024))
{

/*Si el tamaño es válido, codificamos la imagen en Base64, un previo antes de guardarla en la base de datos. Esto se hace mediante la funcion CodificarFoto. Le enviaremos a la funcion la ruta completa de la imagen en el Servidor. Nos retornara una variable con la imagen ya codificada en Base64*/

string img_bin = CodificarFoto(Server.MapPath("~/") + "//moo//" + this.FileUpload1.FileName);

/*Guardamos la informacion en la Base de Datos. La variable img_bin contiene la imagen, pero codificada en texto, lista para almacenarse en un campo de tipos Texto o String de la Base de Datos. En esta parte puedes utilizar el método que desees para guardarla*/

//Si lo deseamos, borramos del servidor la imagen, una vez que ya esta en la BD
File.Delete(Server.MapPath("~/") + "//moo//" + this.FileUpload1.FileName);
}
}
}
}
}//Fin del evento del boton

Ahora veamos la función para Codificar la Foto

public string CodificarFoto(string sNombreArchivo)
{
//Variable para almacenar la imagen codificada
string sBase64 = "";

//Utilizamos un FileStream para acceder a la imagen en el Servidor
FileStream fs = new FileStream(sNombreArchivo, FileMode.OpenOrCreate, FileAccess.Read);

//Utilizamos un BinaryReader para pasar los datos de la imagen a un arreglo de bytes
BinaryReader br = new BinaryReader(fs);
byte[] bytes = new byte[(int)fs.Length];
br.Read(bytes, 0, bytes.Length);

//Guardamos el arreglo de bytes
sBase64 = Convert.ToBase64String(bytes);

//Retornamos la variable
return
sBase64;

//Se libera memoria
fs.Close();
fs = null;
br = null;
bytes = null;

}

Por ultimo les dejo el código para descodificar la imagen. Se entiende que ya se habrá leido la Base de Datos y recuperado la cadena (imagen codificada)

private void DecodificarFoto(string sBase64, string nombre_file)
{
/*Guardamos en una cadena la ruta de la imagen donde se descodificará. Es decir, despues de este proceso, estara guardada en el disco duro del servidor*/
string sImagenTemporal = Server.MapPath("~/") + "moo//" + nombre_file;

//Utilizamos un FileStream para crear un nuevo archivo temporal
FileStream fs = new FileStream(sImagenTemporal, FileMode.CreateNew, FileAccess.Write);

//Un BinaryWriter para escribir la imagen descodificada
BinaryWriter
bw = new BinaryWriter(fs);

//Un arreglo de Bytes para descodificar la imagen
byte
[] bytes;
bytes = Convert.FromBase64String(sBase64);

//Escribimos la imagen
bw.Write(bytes);

//Liberamos memoria
fs.Close();
bytes = null;
bw = null;
sBase64 = null;

}

jueves, 21 de febrero de 2008

Resolviendo los Misterios de Cloverfield



A estas alturas, todo aquel que haya visto la película de Cloverfield tendrá su propia crítica. Algunos les parecio buena, otros mala, y otros regular.... pero al final todos estamos de acuerdo en considerarla la película mas "mareadora" de todas. Por que no es su trama, la del problema, si no la propuesta de J. J. Abrams de contar esta historia de una forma (debemos de reconocerlo) original, aunque anteriormente habiamos visto eso en "El Proyecto de la Bruja Blair", el efecto que le dio es diferente. Esto ultimo es tal vez lo que causo la molestia de muchas personas, ya que el movimiento constante de la cámara y ruido extremo habrán causado el deseo de contar con una bolsa de vomito como la de los aviones o en su defecto, la de las palomitas o el vaso de refresco (obviamente vacias).

J. J. Abrams es el creador de otra historia de misterio de mucho exito a nivel mundial, Lost. Esta persona es gustosa de manejar las historias, sin un principio y sin un fin, solo la duda y el misterio de lo que ocurre. Es ese otro detalle de la película de Cloverfield que da pie a las criticas de la gente.

Es que hay que entender, que el objetivo no era una historia con un principio llamativo, ni tampoco un final feliz. Es simplemente la aparición de un mounstro en la ya tan golpeada ciudad de Nueva York, que decide hacer de las suyas destruyendo edificios y aplastando cuanto se atraviese a su paso. Todo esto lo vemos a través de la lente de una videocamara llevada por un grupo de personas tratando de salir de la ciudad.



Los efectos son muy buenos, la historia no tan original, pero al final se consigue crear en el espectador, por lo menos, el efecto del mareo. Sin embargo, al mismo tiempo deja en muchas personas una sensación de algo incluso y sin sentido. Pero es de lo que se trata, no existe un final, solo la expectativa de una segunda parte, o el misterio de lo que habra pasado después.

Así mismo durante la película, hay algunos detalles de los cuales los que la vimos nos quedamos con muchas dudas. Intentemos aclararlas un poco:

¿De donde rayos vino ese mounstro?.

Durante la película se menciona mucho acerca del origen, y oficialmente no hay nada seguro. Incluso J. J. Abrams no sabe de donde provino, pero deja ver unas pistas que podrian resolver el miterio. En primer lugar, la bestia viene del mar, de aguas muy profundas del oceano Atlántico, pero no se sabe su origen. Simplemente salio y ataco la ciudad. Se puede entender que es una bestia que vivio durante miles años, en el fondo del mar y algo hizo que saliera. Al final de la pelicula, se alcanza a ver a lo lejos, como algo cae y levanta una gran cantidad de agua. Eso hace suponer que viene del espacio exterior, o algo cayo en el mar y lo obligo a salir. Video Así mismo, existe un promocional donde se deja ver la relacion entre los seres humanos y la bestia, y hace suponer que pudo haber sido un experimento, o que ya sabian de su existencia. Videos
Sea lo que haya sido, el origen no esta del todo claro.



¿Qué fue lo que exploto al principio del desastre en la ciudad?.

El moustro entro por la bahía donde hay una gran cantidad de barcos y almacenes. Seguramente piso uno de estos, anunciando su salida a la superficie.

¿Por qué la cabeza de la estatua de la libertad?.

La bestia, lo primero que encontro al llegar fue ese enorme monumento. Para inyectar dramatismo a la película le arranco la cabeza y la arrojo. (Desde 9-11 si quieres hacer una película dramática, destruye uno de los símbolos de los EUA). Igual la pudo haber dejado intacta.

¿Qué buscaba la bestia en la ciudad?.

Se entiende que alimento, pero es posible que haya salido del mar para defenderse violentamente de algo que la haya provocado.



¿Qué eran esas cosas tipo arañas mordían a la gente?

Es lo único que a mi parecer no tenia sentido en la película, pero se entiende como sus pequeñas crías u otra clase de seres que se alimentan de los restos de lo que deja el moustro. Hay especies de tiburones que son acompañados siempre por un pequeño pescado que se alimenta de los restos que caen del hocico del animal. Sin embargo, las mordidas de estos animales, además de ser letales, inyectan una especie de veneno que aumenta la presión interna del cuerpo, provocando serias hemorragias. Estas mini bestias pueden echar abajo la idea de que provenía del mar, por que eran capaces de seguir a animales de sangre caliente como ratas y humanos, aparte de que sabían como andar en la superficie, paredes o techos. Lo que no quedo claro es que si eran capaces de ver, puesto que podían seguir a sus presas, pero tal vez guiadas por el olor, sonido o sensación.



¿Por que las bombas y proyectiles no le hacian nada?.

Intentar matar un elefante con un revolver calibre .32 (muy pequeño) arroja el mismo resultado. La piel de la bestia era extremadamente dura, sin embargo, no indestructible. Hay muchas partes de la película donde se notan pedazos del mounstro caer, asi como quejidos y dolor ocasionado por las bombas. Pero todo esto, lejos de matarlo, al parecer lo enfurecía mas. La esperanza radicaba en una devastación total.



¿Qué paso al final?.

No se sabe. Después de la devastación y de revelar un poco su origen, durante los créditos de la película se escucha claramente una transmisión de radio de alguien diciendo: "Help me.... its still alive". Existen rumores de una segunda parte de la película. Lo que esperamos es que pueda ser contada de diferente manera... no tan mareadora.

¿Por que Cloverfield?. ¿Qué significa?.

Eso solo lo sabe J. J. Abrams. Era el nombre clave de su proyecto, que al final se lo dejo como oficial. En la cinta, el ejercito la presenta como una prueba de los incidentes de nombre clave Cloverfield.

Al final, entretiene un rato la película, pero las opiniones difieren. Solo nos queda esperar una segunda parte, o enfrentarnos a un nuevo misterio: ALADYGMA. ¿Qué rayos es esto?. Solo sabemo lo que su página web muestra. Una serie de numeros que reta a descubrir la fecha de estreno y de lo que trataría.



Les dejo algunos otros links dedicados a Cloverfield:

http://www.1-18-08.com/ Muestra fotografias del evento en Nueva York. Recomiendo que le subas el volumen y esperes alrededor de 6 minutos. Mientras puedes entretenerte resolviendo el acertijo. Consta de mirar la fotos y voltearlas para leer su contenido. Obviamente si ya viste la película sabras la respuesta, pero en ella se determina parte del origen de la bestia. Y no... la foto de la carne en la playa no son los restos de moustros, si no ballenas mutiladas cuyos cadaveres fueron arrastrados a la playa (Ya debes de tener la idea).

http://www.youtube.com/watch?v=X0_cCM2y38Q&feature=related Imagen escondida del mounstro... buena pista de J. J. Abrams.

http://www.youtube.com/watch?v=K_zkpgGXb0Y&feature=related Este video, muestra los dos primeros trailers (con muy mala calidad) de la película, así como pistas acerca de lo que iba a ser Cloverfield.

http://www.cloverfieldmovie.com/ Página Oficial de la Película para bajar Wallpapers y RingTones ($$)

http://www.theasylum.cc/product.php?id=139 Copia barata de Cloverfield, pero contada en Japon. Un terremoto ocurre en Tokyo, pero la verdad es mostrada por una cámara. Recomiendo ver el trailer.

Nota: Cabe mencionar que aqui en México, Cloverfield no tuvo tanta promoción como en países como EUA, España o Japon.

martes, 19 de febrero de 2008

Laptop para Estudiantes con Linux.... y a 100 Euros!!!


Elonex ha publicado que a partir del 28 de Febrero de este año comenzara la venta de su Laptop ONE con Linux preinstalado al precio de 100 euros, dirigidas principalmente a estudiantes.

Tendrs principalmente a Linux como sistema operativo, aunque no revelan que distribucion.... lo mas seguro es que sea una propia. Contara con wireless para la conexion a internet, y diversos paquetes escolares como Procesador de Textos, Hoja de Cálculo, Diseño de Imágenes, etc. Asi mismo contara con su reproductor multimedia a través de su aplicación y la tarjeta de sonido. Además contará con soporte a través de la ONEunion.

Pesando aproximadamente un kilo, y de un tamaño pequeño, se vuelve ideal para ser llevada en una mochila. Ademas, por cada 100 laptops vendidad, Elonex donara una a algun niño de escasos recursos.

Ojala esta oportunidad no solo se quede alla en Europa, sino que pueda llegar pronto a paises como el nuestro.

Esta laptop sera presentada en el The Education Show. Para mas detalles, consulta aqui: http://www.elonex.co.uk/laptop/edushow.html

Para mas detalles: http://www.elonex.com/laptop/