* Aleph - Biblioteca de utilitarios, algoritmos, tipos abstractos. 

  Version 2.9-beta

  ltima actualizacin: 14 de diciembre de 2004

* Nuevas caractersticas de esta entrega

      - Soporte inicial para grafos: representacin con listas
        enlazadas, rboles abarcadores mnimos (Kruskal y Prim),
        camino ms corto segn Dijkstra. Estas estructuras y
        algoritmos son genricos; pueden usarse con cualquier problema
        de grafos cuyos pesos sean comparables

      - Primer porte de la biblioteca estbdar C++ (STL). *Todas*
        nuestras pruebas contra GNU STL han sido ganadoras

      - Utilitarios btreepic y ntreepic para dibujado de rboles


* Versin 2.3-beta

  Ultima actualizacin: 05 de noviembre 2002

  Nuevas caractersticas de esta entrega

	 - Ahora se puede utilizar new y delete. Pero aun es
	 preferible usar los macros New y Delete.

	 - Nuevo manejador de memoria.

	 - Nueva interfaz para nodos binarios de arboles binarios. 

	 - Mejoras a los rboles binarios. 

	 - Heaps binarios dinmicos. 

	 - Tablas hash cerradas

	 - Timer con manejador de eventos

	 - Tablas hash protegidas

	 - Sistema de comunicacin IPC

	 - Biblioteca para construir aplicaciones distribuidas
           cliente/servidor. 


* Instalacin

0-. Requerimientos

    Aleph solo ha sido probado en plataformas Linux i386 bajo GCC 3.2.x
    y versiones superiores. Adicionalmente, para compilar Aleph se
    requiere:

	     - Biblioteca nana. 
	     - Biblioteca dmalloc

    nana puede reportar errores de compilacin para compiladores
    3.0.x. Para evitar esto, edite el archivo nana-config.h y defina el
    macro ALWAYS_INCLUDE_MALLOC en cero. Es decir:

	  #define ALWAYS_INCLUDE_MALLOC/* no arguments */ 0

1- Desempaquete el archivo aleph.tbz:

	    tar -jxvf aleph.tbz

   Este comando crear un directorio con la distribucin llamado
   aleph. Verifique la existencia del directorio y la presencia de
   archivos. 

2-. Vaya al directorio de distribucin y construya el Makefile:

	    cd aleph
	    xmkmf

    Despus de esta secuencia, Ud. ya debe disponer de un Makefile con
    el cual construir la biblioteca y ejecutar los ejemplos. Verifique
    la existencia del Makefile.

    Ahora genere las dependencias del Makefile, de manera tal que
    futuras modificaciones sean actualizadas por el Makefile:

	    make depend

3-. Construya la biblioteca:

	    make

    Este paso compila algunos archivos y construye la biblioteca
    libAleph.a. Por omisin, la biblioteca es construida en modo de
    depuracin. Este modo esta diseado para capturar errores y no
    para el mejor desempeo.

    Para construir una biblioteca optimizada, asegrese de limpiar
    objetos construidos en modo depuracin y cambie las banderas de
    compilacin: 

	    make clean
	    make FLAGS="-DO3"

    Si su Makefile fue generado con opciones de nana, -DDEBUG o
    -DMESSAGES, edite el Imakefile -no el makefile-, elimine o comente
    las opciones y genere de nuevo el Makefile mediante:

		 make Makefile

* Ejemplos

    El Imakefile posee una gama muy amplia de ejemplos. La mayora de
    ellos comienzan con el prefijo test. Para compilar un ejemplo,
    simplemente ejecute:

		make testEjemplo

    y luego ejecute el test:
    
		./testEjemplo

    Edite el Imakefile para aadir nuevos programas o cree uno a partir
    del Imakefile de esta distribucin. 


* IPC

  Esta distribucin contiene el sistema ipc de Aleph. Este sistema
  permite transmitir mensajes fiable y eficientemente a travs de
  redes IP (Internet). Para utilizarla, Ud. debe compilar el demonio y
  la biblioteca de interfaz con el demonio. 

  Para compilar el demonio tipee:

        make FLAGS="-O3 -DDEBUG -D_REENTRANT" MSG="" NANA="-DWITHOUT_NANA" ipcd

  Esto compilara el demonio altamente optimizado, en modo de
  depuracin y con control de memoria. La bandera DEBUG especifica el
  modo de depuracin. En este modo, el demonio perder deliberadamente
  algunos mensajes de red. Aunque esto hace mas lento el protocolo, el
  demonio debe ser capaz de recuperarse de las perdidas sin
  problemas. La utilidad de este modo es simplemente verificar. En
  modo DEBUG se ejecutan muchos asertos. Use el demonio compilado con
  DEBUG durante la etapa de desarrollo. Elimine esta bandera cuando
  desee un demonio de entrega altamente eficiente.

  La bandera MEM_DEBUG mantiene un pool de las ultimas direcciones de
  memoria. En este modo, la seal ctr-c es interceptada para emitir un
  reporte de memoria a fines de depuracin. Si Ud. sospecha de
  problemas con el demonio, envie la salida de este reporte junto con
  su nota.

  El demonio maneja un log, cuyo nombre por omisin es "log". Este
  archivo puede devenir muy grande. Use la opcin --overwrite para
  sobreescribir sobre antiguos logs. Si Ud. encuentra un error, por
  favor, incluya las ultimas 100 lineas del log en su reporte de
  error. 

  La opcin -s redirige el log a stdout. La opcin --daemonize
  demoniza el demonio. El demonio se independiza del terminal y los
  reportes son direccionados a /var/log.

  Tipee ./ipcDaemon --help para ver una lista de las diferentes
  opciones. Instancie el demonio en cada sitio donde Ud. requiera
  comunicacin IPC.

  Para compilar la biblioteca ipc tipee:

       make libipc.a

  Encadene esta biblioteca a cada aplicacin que desea utilizar IPC.

  Hay varios demos que permiten observar las capacidades del IPC:

      - client.C server.C ilustran una tpica aplicacin cliente
        servidor.

      - singleClient.C multiClient.C multiServer.C singleServer.C
        ilustran las capacidades de callback, mensajes asncronos, y
        cliente servidor.


* Reporte de errores

  Esta distribucin es una versin beta. Muchos cambios han sido
  realizados desde la ultima entrega (versin 1.1). Es muy posible que
  algunos tests no funcionen correctamente, pues estos no han sido
  intensivamente verificados. 

  Por omisin, las banderas de compilacin estn configuradas para
  reportar el mximo posible de warnings. La idea de esto es alertar a
  programadores noveles. Si Ud. sabe exactamente lo que hace y los
  warnings le son muy fastidiosos, entonces edite el Imakefile y
  cambie las opcin WARN. Lea cuidadosamente la pagina manual del GCC
  y asegrese de comprender exactamente que es lo que esta eliminando.

  Errores pueden reportarse a:

	  aleph@cemisid.ing.ula.ve         o
	  
	  lrleon@cemisid.ing.ula.ve

  Si Ud. es estudiante de estructuras de datos, recuerde que hay una
  bonificacin especial en nota por cada bug encontrado. Puesto que
  esta es una versin beta, es muy probable que hayan bugs producto de
  modificaciones en interfaces y semnticas de TAD.

  Parte del cdigo de esta versin de Aleph ha sido generado por
  noweb. A grandes rasgos, noweb es un utilitario que permite
  programacin literaria. Esto quiere decir que algunos fuentes de
  Aleph no han sido programados directamente en C++. En su lugar,
  estos fuentes son escritos en una interfaz especial y los fuentes
  C++ son generados por noweb. Por esta razn, algunos de los fuentes
  C++ de esta distribucin contienen referencias al fuente original
  noweb. Por ejemplo, el archivo tpl_lhash.H contiene referencias
  preprocesador del tipo

	#line 327 "tpl_lhash.nw"

  Esto instruye al compilador a reportar errores respecto al archivo
  tpl_lhash.nw y no respecto a tpl_lhash.H. La consecuencia de esto es
  que es fastidioso ubicar mensajes del compilador y depurar. El
  equipo Aleph decidi dejar estas directivas porque se cree que ellas
  facilitan el mantenimiento y el procesamiento de reportes de
  errores. Si Ud. considera que esto es demasiado pesado para su
  trabajo, entonces Ud. puede, fcilmente, suprimir estas lineas
  mediante algn utilitario como sed, perl, etc. 


* Errores actuales

      - Es seguro que los arboles (tpl_splayTree.H) splay descendentes
        contienen un bug.

      - Tambin, medidas de performance sugieren que los arboles
        aleatorizados (tpl_randTree.H) y las las listas skip
        (tpl_skipList.H) contienen un bug.

* Futuras extensiones

  Versin 3.0

      - Manejo de grafos
      - Hashing extendido
      - Arboles B, B+, B*
      - Heaps binomiales y de Fibonacci
      - Interfaz de STL sobre Aleph

  Versin 4.0

      - Soporte OMG CORBA con mapping CORBA IDL-C++, compilador IDL,
        run-time para el ORB y demonio ORB.
  
  Versin 5.0 sera consagrada en acelerar la biblioteca mediante
  generacin dinmica de cdigo durante la ejecucin.
  

* Contribuyentes

  Aleph es el resultado del esfuerzo de varias personas,
  principalmente, tesistas del CEMISID. 

  Aleph ha sido subvencionado y apoyado por el CDCHT, CONICIT,
  CECALCULA y el Departamento de Computacin de la Universidad de Los
  Andes. 

  Contribuyentes principales:

    -. Leandro R. Len 
    -. Vctor Bravo (skip lists, splay trees, red black trees, dynamic
       hashing) 
    -. Juan Carlos Vargas (threaded and ranked trees)
    -. Carlos Nava (event handling, ipc system, timers)
    -. Andrs Arcia (distributed services, daemonization)
    -. Demian Gutierrez (mapping corba)
    -. Juan Luis Chaves (bit array)
    -. Leonardo Zu~iga (treepic)
    -. Bladimir Contreras (treepic)
    -. Carlos Acosta (treepic)

