Archivos mensuales: enero 2013

Descargas de archivos, y codigos CRC en vb.NET

En los últimos días, tuve que implementar (como siempre, al apuro) una aplicación que visualice archivos PDF desde un repositorio central de archivos, utilizando Visual Basic .NET, con el limitante de que los archivos PDF que son visualizados no deben ser guardados directamente por el usuario en su computador.

Para esto, del lado del cliente, se implementó una pequeña aplicación que descarga el archivo PDF mediante una solicitud a una URL, utilizando la siguiente función:

Public Sub descargaArchivo(ByVal _urlOrigen As String, ByVal _archivoDestino As String)
        Try
            Dim _WebClient As New System.Net.WebClient()
            _WebClient.DownloadFile(_urlOrigen, _archivoDestino)
        Catch _Exception As Exception
            MessageBox.Show("Se ha Producido una excepción de descarga: {0}", _Exception.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
End Sub

El uso des esta funcion es sencillo: se ingresa como parámetros la url de descarga del archivo, y la ruta donde se desee guardar el mismo. Para ocultar un poco el acceso directo al archivo descargado, usamos la hora actual del sistema, y hacemos que guarde el archivo descargado en la carpeta temporal de windows, con los siguientes comandos:

Dim timestamp As String = Date.Now.TimeOfDay.ToString
timestamp = timestamp.Replace(":", "")
timestamp = timestamp.Replace(".", "")
Dim archivo As String = System.IO.Path.GetTempPath.ToString + timestamp + ".pdf"

….. facil, sencillo y transparente para el usuario

Otra función que me resultó bastante útil, es la que realizamos para obtener un Código de Checksum SHA256 para comparar la huella de los archivos indexados en una base de datos contra los archivos descargados. La función es bastante sencilla, y es la siguiente:

Private Function calculaChecksum(archivo) As String
        Using Stream As FileStream = File.OpenRead(archivo)
            Dim sha As SHA256Managed = New SHA256Managed
            Dim checksum As Byte() = sha.ComputeHash(Stream)
            Return BitConverter.ToString(checksum).Replace("-", String.Empty)
        End Using
End Function

Esta funcion requiere la ruta real de acceso al archivo del que se desea obtener el checksum, y devuelve el código hash como un string.

Para eta función, es necesario importar las siguiente librerías:

Imports System.IO
Imports System.Security.Cryptography

que proveen soporte para el manejo de archivos, y las funciones de criptografía.

Airplay con el Raspberry Pi

Luego de que la cámara de video ha grabado sin problema muchas imágenes, utilizando Motion, con una webcam conectada al Raspberry Pi, y dado que mi esposa se ha vuelto fan del TuneIn Radio en su iPhone, se me ocurrió la brillante idea de instalar el paquete Shairport, para que el Raspi reproduzca el audio en nuestro minicomponente desde el teléfono, usando WiFi.

La instalación es bastante sencilla. Primero es necesario actualizar todos los paquetes del Raspbian instalado, con los siguientes comandos.

sudo su

aptitude update

aptitude upgrade

Con esto garantizamos que todo se encuentre al día, para poder continuar. Luego de esto, instalamos los prerequisitos para el paquete Shairport, con el siguiente comando:

aptitude install git libao-dev libssl-dev libcrypt-openssl-rsa-perl libio-socket-inet6-perl libwww-perl avahi-utils

Además, es necesario (al menos en mi caso) instalar la librería SDP para Perl. Esto lo hacemos con los siguientes comandos:

aptitude install libmodule-build-perl
git clone https://github.com/njh/perl-net-sdp.git perl-net-sdp
cd perl-net-sdp
perl Build.PL
./Build
./Build test
./Build install

 

Y con todo esto instalado, procedemos a descargar y compilar Shairport, con los siguientes comandos:

cd
git clone https://github.com/hendrikw82/shairport.git shairport
make

Si no tenemos ningún error, en la compilación, podremos probarlo, iniciando la aplicación desde la consola, con el comando

./shairport.pl -a ShairPi

Ahora pueden tomar su equipo favorito de la marca de la manzana (iPhone, iPod, iPad) o cualquier equipo compatible con Airplay, y verificar el funcionamiento. En este caso, deberá mostrar un dispositivo Airport con nombre ShairPi el momento de redireccionar el audio.

Si todo funciona correctamente, procedemos con Ctrl+C a cerrar la aplicación, e instalarla como servicio, para que se inicie automáticamente al arrancar nuestro Pi. Esto lo realizamos con los siguientes comandos:

make install
cp shairport.init.sample /etc/init.d/shairport
cd /etc/init.d
chmod a+x shairport
update-rc.d shairport defaults

Adicionalmente, es necesario editar el archivo DAEMON_ARGS, en la línea DAEMON_ARGS=”-w $PIDFILE para que quede de esta manera:

DAEMON_ARGS=”-w $PIDFILE -a ShairPi

donde ShairPi puede ser reemplazado por el nombre que quieran ponerle a su Airplay. Luego iniciamos el servicio con el comando:

./shairport start

Y tendremos el servicio levantado cada vez que iniciemos nuestro RasPi.

El Airplay funciona bastante bien. Simplemente existen momentos, especialmente cuando se pausa y reinicia muy seguido la reproducción desde el teléfono, que el módulo de WiFi instalado en el Raspberry se desconecta. Quizás con una conexión con cable no tengan ese inconveniente.

Pruebenlo y me cuentan.