viernes, 21 de agosto de 2009

Legislacion anti-spam en Guatermala

A propósito de haber recibido 4 correos electrónicos con la misma información, en mis dos direcciones personales, sin haberla solicitado y por medios incorrectos.
Como muchos, yo creía que no había ninguna ley en el país que regulara el spam o correo electrónico no deseado, pero SI existe.
En el artículo 51 del decreto 47-2008 del congreso de la república de Guatemala dice literalmente:
"Las empresas deben desarrollar e implementar procedimientos efectivos y fáciles de usar, que permitan a los consumidores manifestar su decisión de recibir o rehusar mensajes comerciales no solicitados por medio del correo electrónico. Cuando los consumidores manifiesten que no desean recibir mensajes comerciales por correos electrónicos, tal decisión debe ser respetada"

Esta sencillo lo que dice, pero si se interpreta bien y se cumple todo lo que implica, es suficiente.
Por ejemplo, no sería correcto utilizar una lista de distribución con un objetivo bien definido, para distribuir información fuera de ese objetivo, porque entonces aunque exista el mecanismo para excluirnos de la lista (como claramente lo exige la ley) estaríamos obligados a quedarnos dentro, debido a que nos interesa la información relacionada con el objetivo verdadero y correcto de tal lista de distribución.

domingo, 5 de julio de 2009

Robocode

Robocode es juego de programación a través del cual se puede aprender a programar en Java y aprender conceptos y algoritmos de inteligencia artificial en una forma muy divertida. El proyecto fue iniciado por Matthew A. Nelson y es de código abierto. Los requerimientos para instalar Robocode, se reducen únicamente a un JDK. Cada robot consta de tres partes, el cuerpo, el arma y el radar, el cuerpo es la estructura mas grande del robot y la cual le da movilidad, el arma es un pequeño cañón giratorio que le sirve para atacar a sus contrincantes y el radar para detectar donde están los otros robots.
Describo con mas detalle el funcionamiento y las reglas de Robocode en el siguiente video:


Para poder armar una buena estrategia, primero tuve que entender muy bien el funcionamiento de Robocode como simulador, sus características y limitaciones, así como el funcionamiento de los robots y las funciones que podemos utilizar para controlarlo y la forma en que responden, todo esto esta detalladamente en el mi primer articulo:

Como Robocode es una plataforma de simulación bastante realista, debemos tomar en cuenta que el cañón del arma se calienta con cada disparo, impidiéndonos disparar muy seguido, las balas viajan a una velocidad constante, por lo que debemos tener en cuenta el tiempo que tardan en llegar a su objetivo, perdemos cierta energía con cada disparo por lo que deberíamos acertarle al enemigo, etc.
Mi estrategia básicamente consiste en un movimiento randomico para esquivar las balas, reacción inmediata ante ataques, apuntamiento en base a patrones y un giro infinito del radar. Una descripcion mas completa de mi estrategia puede verse en el siguiente video

O leerse en el siguiente articulo

jueves, 25 de junio de 2009

Lanzamiento de la firma digital en Guatemala

El día de hoy se realizo una conferencia en el hotel Camino Real como parte del lanzamiento oficial de la firma electrónica en Guatemala. Fue una conferencia muy buena que impartió un representante de e-certchile que es la empresa certificadora mas grande de Chile con la cual esta trabajando la Cámara de Comercio de Guatemala, para extender las firmas en el país.
Agradezco al ingeniero Rodrigo Ortiz por invitarme a este evento.

Estos son los requisitos para adquirir una firma digital
Para personas jurídicas
  • Copia de cédula de vecindad completa del representante legal.
  • Copia de patente de comercio de empresa y patente de comercio de sociedad en el caso de la sociedad anónima.
  • Constancia de inscripción en el registro tributario unificado.
  • Copia de escritura de constitución.
  • Copia de nombramiento de representante legal debidamente inscrito.
Para propietarios de empresas mercantiles
  • Patente de comercio de empresa.
  • Copia de cédula de vecindad completa.
  • Constancia de inscripción en el registro tributario unificado.
Para personas individuales
  • Copia de cédula de vecindad completa.
  • Constancia de inscripción en el registro tributario unificado.
Todo esto debe presentarse autenticado por notario.

viernes, 12 de junio de 2009

Implementacion de un DataWarehouse

Para la implementación de un Data Warehouse debemos analizar las opciones que tenemos en metodologías de arquitectura (Kimball o Inmon), metodologías de desarrollo (Iterativa o Cascada) y la forma de administrar el proyecto.
Para empezar debemos tener claro que lo que nos van a exigir los stakeholders (CEO y CFO) es que se vea el valor que está generando al negocio (ROI) la implementación de la solución de BI. Entonces a mayor tiempo de implementación, mayor riesgo de fracaso.
Para reducir los riesgos la metodología de desarrollo de un data warehouse debe incluir por lo menos lo siguiente:
Flexibilidad: La metodología debería asumir desde un principio que los requerimientos cambiaran y minimizar el costo de estos cambios.
Demostrar valor: Para tener el apoyo de los ejecutivos y líderes, la metodología debe considerar demostrar resultados de valor desde el principio.
Saber cuando ocurren los cambios: Es necesario estar en contacto constante con los stakeholders para darnos cuenta de los cambios que se van dando.
Si se adopta una metodología de desarrollo iterativa, un data warehouse puede demostrar su valor muy temprano mientras que en una metodología en cascada no porque se tendrá que terminar el ciclo de desarrollo de software para poder entregar la solución al cliente. También una metodología iterativa será más flexible porque se puede ir cambiando entre iteraciones y no se entrega la solución al cliente hasta que se haya terminado el desarrollo.
La metodología Kimball es la más aceptada en todo el mundo como la metodología más efectiva para desarrollar una solución de BI. En la metodología Kimball es en la que utilizamos dimensiones y tablas de hechos y las relacionamos con surrogate keys y las dimensiones pueden estar relacionadas con otras dimensiones. La metodología Kimball apunta a una solución completa que se puede implementar en poco tiempo. Esto cumple con lo que necesitamos en una metodología de BI de dar resultados rápidos para demostrar el valor de la solución al negocio y no perder la confianza de los stakeholders.
La metodología Inmon por el contrario puede tener una implementación mucho más tardada, y es recomendada cuando se hace demasiado difícil representar el modelo a través de dimensiones y la complejidad de la solución se hace demasiado grande. Según SQLBI ambas metodologías pueden implementarse en un mismo Data Warehouse entonces la recomendación es que si es necesario utilizar esta metodología hacerlo en iteraciones ya avanzadas y siempre empezar con Kimball.

miércoles, 10 de junio de 2009

Algunos indices en Oracle

B-Tree Index
Este es el tipo de índices normal de Oracle, estos índices son los que más se utilizan, están organizados en una estructura de árbol B y por lo general se utilizan para las llaves primarias de manera que se pueda hacer una búsqueda por llave más rápido.

Index Organized Tables
Este es un tipo de índice que nació con la versión 8 de Oracle y se utiliza por lo general para aplicaciones Web debido a que por lo general estas aplicaciones hacen búsquedas de un solo campo por medio de la llave primaria.
Una IOT se define desde su creación, agregando ORGANIZATION INDEX al final de la sentencia CREATE TABLE, y lo que hace es que los datos de la tabla se van guardando dentro del índice, entonces cuando uno hace un SELECT los datos salen ordenados.

Bitmap Index
Los índices de bitmap son muy recomendables en columnas en las cuales los valores ser repiten y representan una división en categorías, por ejemplo columnas como género, estado civil, etc. También son muy recomendables cuando no cambian mucho, aunque sean muy variantes.

Bitmap Join Index
Este tipo de índice, es muy útil en tablas que están relacionadas y hay muchas consultas que hacen Join de estas tablas, al igual que el bitmap index normal, solo se recomienda cuando la cardinalidad de los valores de la columna no es muy grande.
Aparte este tipo de índice, solamente se recomienda en Data Warehose porque son muy rápidos haciendo joins y devuelven los resultados en muy poco tiempo, por el contrario al hacer inserts y updates, tienen consecuencias en el rendimiento.

Domain Index
Estos índices se utilizan para un dominio especializado, se utiliza mucho con dominios de texto o imágenes, ya que en estos índices se utilizan los indextype donde se puede especificar la implementación.

Cluster Index
Este índice consiste en unas tablas que comparten los mismos bloques de datos, utilizan un valor llamado clúster key value que es el valor de las columnas involucradas para una fila en específico.
E clúster key sirve para guardar juntas las filas que tengan el mismo valor y solo guarda una vez cada valor distinto.

Hash Cluster Index
Este índice es muy parecido al anterior, pero se aplica una función de hash al cluster key para poder encontrar las demás filas con el mismo cluster key.

Partitioned tables
Cuando las tablas crecen mucho, acceder a ellas puede significar un bajo rendimiento, por eso surge el concepto de tablas particionadas que es dividir las tablas en partes independientes, se le puede sacar backup independientemente, el rendimiento de las consultas puede aumentar significativamente, y se pueden hacer transacciones paralelas en particiones diferentes.
Es común que las diferentes particiones, se coloquen en un tablespace diferente para optimizar aun más el rendimiento.

Function Based Index
Este tipo de índice es muy sencillo pero muy útil y puede llegar a mejorar los tiempos de respuesta increíblemente. Este índice no es más que un índice B-Tree pero sobre una función, por ejemplo para las consultas dadas para este proyecto se utiliza mucho la función upper entonces cree un índice B-Tree sobre la función upper del campo nombre, entonces en índice están los datos ya con la función upper aplicada.

Patitioned Index
Este es un índice para el cual se definen particiones, exactamente igual que cuando se particiona una tabla, esto se hace con el objetivo de mejorar el tiempo de acceso a los datos cuando el índice es demasiado grande.