RavenDB: ¿El MongoDB en .NET?

RavenDB es una base de datos open-source NoSQL del estilo documental escrita en .NET.

Tiene algunas características interesantes que la hacen adecuadas para aplicaciones de alto rendimiento y baja latencia:

· Transaccional: esta característica no la comparte con MongoDB 🙂

· Escalable: soportando sharding, replicación y multitenancy out-of-the-box

· Sin esquemas

· Rápida

· Alto rendimiento

· Caché incorporado

· Búsqueda Full-text incorporada

· APIs en varios lenguajes

· API HTTP

· Soporte geospacial

· UI Web para la gestión de la base de datos

· Extensible

· Embebible

· Backups sencillos

· Multitenancy

· Versionado, Expiración,…

En Manning hay un MEAP RavenDB In Action:

Del que podéis acceder gratuitamente a su capítulo 1.

[Qué es,NoSQL,Base Datos,.Net]

Buscando Memory Leaks en Arduino

Una vez que nos lanzamos a programar nuestro Arduino, y conforme nuestro programa aumente de tamaño, nos encontraremos dos problemas:

· El primero: La poca memoria RAM de la que dispone el dispositivo (varía dependiendo de la versión. Por ejemplo el Arduino Mega dispone de 8KB)

· El segundo: Si venimos del mundo Java, en C/C++ no tenemos el equivalente al Garbage Collector, de modo que la memoria que reservemos, la tendremos que liberar explicitamente una vez no sea necesaria.

De manera, que si no recuperamos mediante las instrucciones “delete” o “free” las posiciones de memora que reservemos (típicamente declarando cadenas de caracteres). Iteración tras iteración de la función loop() nos iremos quedando sin memoria RAM. Factor que unido a la poca memoria de la que disponemos, hará que nuestro programa funcione bien solo unos minutos, momento a partir del cual pueden pasar tres cosas, dependiendo de haciendo que, nos quedemos sin memoria:

1. El programa se reinicia. Cuando se agota la memoria, el sistema se reinicia invocando a setup() y luego continua invocando iterativamente a loop() hasta el siguiente memory leak.

2. El programa comienza a tener un comportamiento extraño y aleatorio.

3. El programa se detiene.

Una vez que identifiquemos que tenemos un memory Leak, lo siguiente es localizarlo. Para ello, buscando en google un poco hemos encontrado el siguiente programa http://www.faludi.com/itp/arduino/Arduino_Available_RAM_Test.pde, que tiene programada precisamente una función que una vez invocada, nos devuelve la memoria disponible por el sistema:

De manera que con esta función, podremos localizar donde perdemos esos valiosos bytes de RAM:

Por ejemplo, en el siguiente programa, declaramos una cadena de caracteres que no liberamos. Como podemos ver en la consola de trazas de Arduino, perdemos memoria iteración tras iteración en la función loop(), haciendo que en poco tiempo la memoria disponible en el sistema sea nula.

Sin embargo, si una vez identificado el memory leak procedemos a liberarla con delete[], vemos que en cada iteración de la función loop() volvemos a disponer de la misma memoria RAM.

Enviando datos cifrados con XXTEA

Continuando con post dedicado al cifrado con XXTEA (https://unpocodejava.wordpress.com/?s=xxtea), el siguiente paso tras el cifrado es la transmisión de la información cifrada.

XXTEA tras cifrar la información, nos devuelve un array de datos binarios que pueden corromperse al ser transformados por los APIs de comunicación o por nosotros mismos si los convertimos directamente a Strings.

Una posible solución a este problema la encontramos codificando la información cifrada a Base64 antes de ser enviada o transformada.

Base64 es un algoritmo de numeración posicional, que nos permite codificar la información utilizando solamente un subconjunto de 64 (2^6) caracteres ASCII imprimibles. De este modo, pasando cualquier información a su representación de Base64, tenemos la seguridad de que no se perderá información durante su transmisión.

Base64 es uno de los algoritmos más utilizados a lo largo de la historia de la informática, por lo que si buscamos, encontraremos implementaciones para cualquier lenguaje de programación.

De este modo el proceso para la transmisión de información cifrada sería el siguiente: