RocketTheme Joomla Templates
     
Inicio Noticias SW Dev
swdev
Comprimir/Descomprimir en Java PDF Imprimir Correo electrónico
swdev
Escrito por Jorge Riquelme Santana   
Martes 13 de Noviembre de 2007 14:27

El otro día me vi en la necesidad de enviar un string xml (generado al vuelo) desde un servidor a un cliente, usando el HttpInvoker de spring. Como el xml es altamente compresible (y potencialmente grande en mi caso), una buena idea sería comprimirlo antes de enviarlo por la red.

Java ofrece facilidades para hacer archivos jar/zip, y un par de clases de más bajo nivel que son las que interesan: Deflater e Inflater. Estas dos clases comprimen y descomprimen arreglos de bytes, respectivamente. Entonces, lo único necesario para enviar mi xml por la red fue tranformarlo en un arreglo de bytes(ninguna ciencia) y hacer un método para comprimirlo usando Deflater. Luego, en el cliente, al recibir el arreglo de bytes, descomprimirlo y transformarlo en un String nuevamente.

metodo compresion
  1.  
  2. private byte[] compress(byte[] data) throws IOException
  3. {
  4.     // buffer para resultado
  5.     ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  6.     // buffer para comprimir
  7.     byte[] buffer = new byte[BUFFER_SIZE];
  8.  
  9.     // maxima compresion
  10.     Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION);
  11.     deflater.setInput(data);
  12.     deflater.finish();
  13.  
  14.     // vuelvo los bytes comprimidos a un stream
  15.     int bytes = 0;
  16.     while((bytes = deflater.deflate(buffer)) > 0)
  17.         outputStream.write(buffer, 0, bytes);
  18.  
  19.     // retorno arreglo comprimido
  20.     return outputStream.toByteArray();
  21. }
 

Tags Comprimir - Descomprimir - Deflater - Inflater - Java - j2se
 
Sistema Referidos en postgre con trigger en C PDF Imprimir Correo electrónico
swdev
Escrito por Jorge Riquelme Santana   
Domingo 22 de Julio de 2007 22:51

Hace tiempo ya, un amigo me pidió solucionar un problema “dbístico”. El objetivo es representar un árbol de usuarios en una base de datos y propagar los pagos realizado por alguno de estos hacia sus ancestros; o sea, un sistema de referidos. Cada usuario puede tener “referidos”(hijos en el árbol), los cuales le traspasan un porcentaje por cada operación monetaria que realicen (que puede ser cualquier cosa: un pago, una compra, etc); a su vez, el recibir dicho pago desde un hijo provoca que un porcentaje pase al propio usuario padre. De esta manera, un “pago” provoca una serie de pagos en cascada, desde una hoja (o nodo intermedio) hacia la raíz. Por ejemplo, en el siguiente árbol de super estrellas worship, Super Taldo tiene como referido a Homero, este a su vez tiene como referidos a Tux y a Guu.

arbol
arbol

 

Los 100 que aparecen en rojo al lado de Guu corresponden a un pago que realizó; de aquello Homero recibe el 10% (+10) y Super Taldo el 10% de lo que gana Homero (+1). Los 200 que paga Tux se propagan de la misma forma hacia la raíz del árbol (Taldo). Los 500 que paga Homero sólo repercuten en los bolsillos de Super Taldo.

El DBMS a usar es postgre, y como el objetivo es aislar lo más posible al programador php de los detalles de los pagos, se va a meter todo esto es un trigger hecho en C. No es que sea masoquista... la idea fue siempre que un trigger hiciera el trabajo, y si ya sabemos C para que andar asimilando otros seudolenguajes como pgsql geek.

La estructura de la base de datos:

 

base datos
base datos

 

Tags postgre - trigger - C - dbms
 
Como compilar ejemplos de OGRE en Gentoo PDF Imprimir Correo electrónico
swdev
Escrito por Jorge Riquelme Santana   
Jueves 31 de Mayo de 2007 20:31

Hace tiempo atrás supe de ogre, pero nunca llegué a experimentar con él. Ahora estoy en un ramo (taller de computación gráfica) y tengo que hacer un proyecto, así que le estoy echando un ojo. El asunto es que como soy un newbie en ogre quise emergerlo en mi querido gentoo con los ejemplos. Todo bien; sin embargo, luego no supe que carajo hacer para compilar y ejecutar los benditos  programas zigzag... si estás en las mismas te ahorro un poco de tiempo cool.

cegui es una biblioteca para hacer interfaces gráficas (se complementa muy bien con ogre), vienen ejemplos que la necesitan, así que igual se emerge. Agrega cegui, ogre y freeimage a package.keywords, ya que interesa la última versión disponible de cegui y ogre (freeimage porque está maskeada y es necesaria para manejar diferentes formatos de imágenes):

# echo media-libs/freeimage >> /etc/portage/package.keywords
# echo dev-games/ogre >> /etc/portage/package.keywords
# echo dev-games/cegui >> /etc/portage/package.keywords

Luego activa las variables cegui, examples, devil y freeimage para ogre:

# echo "dev-games/ogre cegui examples devil freeimage" \
>> /etc/portage/package.use

y go!

# emerge ogre

Ahora, debes instalar OIS, una biblioteca para capturar eventos de dispositivos de entrada que es usada por algunos ejemplos (por qué no SDL?!). Baja ois-1.0RC1.tar.gz desde http://sourceforge.net/projects/wgois/, compila e instala:

# tar -xvvzf ois-1.0RC1
# cd ois-1.0RC1
ois-1.0RC1 # ./bootstrap
ois-1.0RC1 # ./configure
ois-1.0RC1 # make && make install

Los ejemplos quedan en /usr/share/doc/ogre-1.4.1/Samples/. Hay un directorio Common que tiene una clase base utilizada por los programas, que además, necesitan los recursos (fuentes, texturas, etc.) ubicados en el directorio Media.
Por lo tanto, para compilar un ejemplo debes asegurarte de dejar su directorio headers en la lista de directorios donde g++ buscara los .h. Además, debes incluir los headers de Common, de las bibliotecas (ogre, cegui y ois) y las librerías necesarias para el linkeado.

Tags OGRE3D - CEGUI - Gentoo - FreeImage - Devil - g++
 
Lista enlazada simple en C PDF Imprimir Correo electrónico
swdev
Escrito por Jorge Riquelme Santana   
Martes 08 de Mayo de 2007 17:06

Con este artículo quiero comenzar una serie de aportes filantrópicos (sin ánimo de lucro) a otros compañeros samurais de la informática, que en algún momento de su esforzada vida académica deben enfrentar cierto tipo de problemas típicos.

En C, una lista enlazada simple es una estructura de datos compuesta por una serie de nodos, unidos a través de punteros. La lista se denomina “simple” porque cada nodo apunta al siguiente, pero no al que lo precede, por lo que sólo se puede recorrer la estructura de datos de manera unidireccional. Es evidente que el mayor bemol de este tipo de listas es que hay que pasar por los K primeros nodos para llegar al K-ésimo. Una buena opción es hacerle una “cabecera” a la lista, donde guardar cosas como el número de elementos y un puntero al último nodo; así se evitan recorridos innecesarios al agregar nuevos nodos y al averiguar el largo de la lista. Un esquema clarifica la situación:

 

Lista enlazada simple
Lista enlazada simple

 

Archivos adjuntos:
Descargar este archivo (linked_list.tar.gz)linked_list.tar.gz[implementación lista enlazada simple en C]1 Kb