jueves, 5 de febrero de 2015

En la entrada de hoy hablaremos sobre aiml, un pequeño modelo para almacenar conocimientos de inteligencia artificial en nuetros bots.



Aiml permite el almacenamiento de conocimientos en grupos de topics, para ubicarlos mediante patrones.
En éste documento hablaremos sobre el formato de un documento aiml (basados en xml) y todas sus características.

Descarga Aquí

Saludos!

miércoles, 4 de febrero de 2015

En la entrada de hoy hablaremos sobre el patrón creacional de diseño Prototype, en entradas anteriores podemos apreciar diferentes patrones, como Factory, ObjectPool, etc. puedes ver por supuesto la entrada introductoria al tema aquí, y puedes ver el listado de teoría donde hay una sección de patrones aquí.

El patrón prototype tiene como idea fundamental, la de crear objetos basandose en clonar objetos previamente creados, debe incluir en su abstracción la funcion clonadora, para que luego en cada caso particular se establezca las especificaciones de la clonación (esto es la funcion __clone).

Este patrón es de utilidad cuando se quiere separar la lógica de la creación de objetos de su futura implementación creando así una instancia inicial pasando por todo el proceso de la creación, para luego simplemente copiar esa instancia y manejarla sin pensar en como fué construida y no tener que pasar por dicho proceso de nuevo.

La instancia prototipo solo debe ser utilizada para ser clonada, y no debe ser utilizada con otro propósito, por evidentes razones.

dejo aquí un ejemplo de código de prototype en php:


un saludo para todos los lectores!

martes, 3 de febrero de 2015

Buenas tardes lectores, en esta entrada hablaremos sobre el patrón singleton, quizá sea uno de los patrones más conocidos al menos en lo que se refiere a php, en entradas anteriores hablamos sobre ObjectPool, sobre Factory, y hasta sobre Prototype, también pueden ver aquí la entrada inicial al tema. En particular también hay una entrada que referencia a Singleton pero como una queja al mal uso que le da la mayoría de la gente al menos en php.

La utilidad de singleton comienza cuando nosotros requerimos de una clase una única instancia y nada más que una, y que la creación de multiples instancias de una clase pueda traernos problemas ya que no fué diseñada para eso.

De modo que el patrón establece una forma de obtener una sola instancia de la clase en todo momento, y si se trata de obtener una nueva, Singleton devolverá la instancia que ya tenía.

Para tales efectos se construye un metodo constructor del objeto, éste tiene que ser estático, y también se crea una propiedad estática que almacenará la instancia para devolverla en futuras ocaciones, el constructor si se puede, debe ser transformado en privado (dependiendo del lenguaje), ya que no se debe permitir a la persona construir el objeto directamente, luego en el metodo estático de construcción del objeto creamos una instancia de la clase si es que no hay una guardada en la propiedad destinada para tal trabajo, y si la hay simplemente devolvemos la que ya teníamos almacenada.

Quien quiera obtener una instancia de esa clase debe llamar al constructor estático de singleton para que asegure que tendremos siempre la misma instancia.

Un ejemplo de singleton en php:


Ahora que vamos cerrando las entradas relacionadas con patrones creacionales, siempre hay que tener en cuenta si el patrón que aplicamos corresponde con la situación dada, ya que estos patrones si se los usa en cualquier situacion sin importar si aplican al problema o es un problema que no tiene relación, estaremos en algunos casos derrochando recursos, y en otros estaremos limitando la usabilidad de las clases. Siempre que apliques un patrón debes tener una razón.

Un saludo lectores y espero que les haya gustado esta entrada.

sábado, 17 de enero de 2015

Buenas tardes ex-lectores de std-io.com y futuros lectores de programador.in, estamos aquí leyendo (en mi caso escribiendo) para presenciar la unión entre el blog de teoría de programación con un blog para programadores iniciados, medios y expertos.

domingo, 9 de noviembre de 2014

Buenas tardes lectores, hoy les traigo un pdf del proceso de normalización de base de datos, se transformó casi en una costumbre el hecho de pasar todas las entradas finalizadas de un tema a un formato pdf agregando ajustes, correcciones y extras para deleite de nuestros lectores, la idea es que les sea más cómoda la lectura de entradas relevantes de forma ordenada.
Esto no quiere decir que todas las entradas del blog esté en formato pdf ni que las mejores lo estén, simplemente que los hilos de entrada más relevantes (como calidad de software, bases de datos, proximamente patrones de diseño, y programación, si lo están).

Sin más preambulos les dejo los temas que abarcan y las entradas relacionadas a un click de distancia.

Primera Forma Normal (1FN) (ver entrada relacionada)
Segunda Forma Normal (2FN) (ver entrada relacionada)
Tercera Forma Normal (3FN) (ver entrada relacionada)
Cuarta Forma Normal (4FN) (ver entrada relacionada)
Quinta Forma Normal (5FN) (ver entrada relacionada)


Un saludo lectores y espero les haya gustado la entrada del día de hoy.

sábado, 8 de noviembre de 2014

En esta entrada hablaremos sobre la quinta forma normal, 5FN. Recomiendo por supuesto la lectura de las publicaciones anteriores 4FN y la publicación inicial del hilo de bases de datos aquí.


En entradas anteriores hablamos sobre el proceso de normalización, su importancia, hablamos sobre los 5 niveles anteriores (incluyendo el FNBC o BCFN), y hoy hablaremos sobre el último de los niveles, también quiero agregar que como el anterior, solo debe ser utilizado en caso de que la situación lo requiera.

Ésta no es tan complicada como la 4FN de hecho es bastante sencilla de explicar y se establece de la siguiente manera, una tabla se encuentra en 5FN si y solo si, se encuentra en 4FN y cumple el siguiente requisito:

  • No existen relaciones de dependencias no triviales que no siguen los criterios de las claves. Una tabla que se encuentra en la 4FN se dice que está en la 5FN si, y sólo si, cada relación de dependencia se encuentra definida por claves candidatas.
En otras palabras, cualquier relación de dependencia que haya en la tabla debe estar compuesta por un campo o un grupo de campos que sean clave primaria, y el resto de los campos no clave primaria dependan de los campos anteriores.

Por lo que no puede existir una relación de dependencia en la que no haya una clave primaria y sean simples campos, esto también está apoyado por la 3FN donde se prevee el problema de la dependencia transitiva.

Espero que hayan comprendido hasta éste punto las 6 formas normales (incluyendo la de B-C), quiero agregar como sugerencia la lectura del artículo de wikipedia de normalización.

Saludos!

miércoles, 5 de noviembre de 2014

En entradas anteriores vimos Factory Method, y en esta entrada veremos Abstract Factory un patron creacional que amplía el rango de Factory Method. También vimos ObjectPool y una introducción a los patrones de diseño.

Recomiendo leer como minimo el Factory Method para que les sea más sencillo el Abstract Factory.

Si vemos la explicación del Factory Method notaremos que es útil para la creación de objetos de clases subtipos de una en particular, pero si quicieramos tener más de un tipo de clase principal, deberíamos hacer uso de un patrón que lo soporte.

Podemos ver en wikipedia como se explica que si nosotros trabajaramos con botones, dependiendo de la plataforma tendríamos un gran tipo de objeto para botones en linux y uno para botones en windows, si nosotros quicieramos crear objetos de ambos tipos con un factory necesitaríamos utilizar este patrón.

La solución para este problema es simple, si vemos el código de ejemplo de la publicación de Factory Method veremos que la factoría nos permitía crear objetos del tipo de EjemploConcreto, ahora si quicieramos además poder crear de tipode clases OtroEjemploConcreto, bastaría con crear métodos factory para cada clase en particular.

podemos ver el código aquí:

http://pastebin.com/V0HS6fU2

y un diagrama del Abstract Factory extraído de wikipedia:


Un saludo para todos! espero que les haya gustado la entrada y nos veremos la próxima!
Subscribete al RSS Follow me on Twitter!