<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>Programador In</title><description>El Blog Del Programador</description><managingEditor>noreply@blogger.com (Alexander E.)</managingEditor><pubDate>Sat, 7 Feb 2026 14:22:14 -0300</pubDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">116</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">25</openSearch:itemsPerPage><link>http://console-input-output.blogspot.com/</link><language>en-us</language><item><title>Introduccion a websockets en php, capitulo 1 (HTML5 - WEBSOCKETS)</title><link>http://console-input-output.blogspot.com/2015/09/introduccion-websockets-en-php-capitulo.html</link><category>cliente</category><category>javascript</category><category>js</category><category>listen</category><category>PHP</category><category>servidor</category><category>sockets</category><category>websockets</category><pubDate>Sun, 27 Sep 2015 14:31:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-8383456422077545073</guid><description>En esta entrada hablaremos sobre como manejar websockets desde php utilizando PHPSocketMaster, una librería que permite manejar tanto sockets como websockets. También explicaremos un poco como utilizar sockets comunes.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHWZcMOOdWmUjeVZsRvps6TFpB1QaT1_ybNpeByp2kO_ubsCwJDLdm56j8JoKKrKF49llsQpPrMYyk83UN6yRYR5Ois5ijZUaeTW9KNkON3LKJfD4q6ySGVd_Gs13zsqWCVQ_UmEEZP5E/s1600/68747470733a2f2f74696477616c6c2e6769746875622e636f6d2f5377696674576562536f636b65742f6c6f676f2e706e67.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHWZcMOOdWmUjeVZsRvps6TFpB1QaT1_ybNpeByp2kO_ubsCwJDLdm56j8JoKKrKF49llsQpPrMYyk83UN6yRYR5Ois5ijZUaeTW9KNkON3LKJfD4q6ySGVd_Gs13zsqWCVQ_UmEEZP5E/s200/68747470733a2f2f74696477616c6c2e6769746875622e636f6d2f5377696674576562536f636b65742f6c6f676f2e706e67.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Los sockets son mecanismos de conexión y comunicación entre dos pc, todos los lenguajes de programación que conozco tienen algún tipo de soporte para manejar sockets. Los sockets trabajan con la metodología Cliente-Servidor, es decir uno de los sockets se conecta a otro (el cliente) y el otro socket recibe la conexión (El que sirve o servidor), generalmente el segundo tiene la facultad de aceptar más de una conexión, trabaja aceptando la conexión entrante y derivandola a un segundo socket que mantenga la conexion, reciba los mensajes, y responda, liberando el primero para aceptar nuevas conexiones y deribarlas a otros.&lt;br /&gt;
&lt;br /&gt;
PHPSocketMaster es una librería de autoría propia que permite trabajar con sockets en php, tanto websockets como comunes, es decir mi librería permite conectarse a un programa hecho en otro lenguaje, o aceptar conexiones de otros programas o desde un websocket.&lt;br /&gt;
&lt;br /&gt;
¿Cual es la diferencia entre un socket común y un websocket?, los websockets en realidad son sockets comunes que incluyen un protocolo de encriptación y handshake (es decir que todos los mensajes van encriptados y recorren un protocolo particular llamado websocket).&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://github.com/alexander171294/PHPSocketMaster"&gt;Aquí&lt;/a&gt; está el repositorio de la librería con la última versión estable.&lt;br /&gt;
&lt;br /&gt;
La &lt;a href="https://github.com/alexander171294/PHPSocketMaster/wiki"&gt;documentación&lt;/a&gt;, es muy extensa y explica bien como utilizar cada parte. (50% ingles, español completo).&lt;br /&gt;
&lt;br /&gt;
Un socket puede estar en dos modos, como cliente para conectarse a otra pc, o como servidor a la escucha de conexiones de otra pc (es decir esperando que otra pc se conecte).&lt;br /&gt;
&lt;br /&gt;
Si nosotros queremos crear un cliente es muy sencillo, incluimos la librería, y extendemos el PHPSocketMaster, &lt;a href="https://github.com/alexander171294/PHPSocketMaster/wiki/Socket-en-modo-cliente"&gt;aquí esta la documentacion&lt;/a&gt; y además hay ejemplos en la carpeta examples.&lt;br /&gt;
&lt;br /&gt;
En terminos generales lo que hacemos es extender la clase principal creando una clase nueva que va a ser nuestro sockets, al estar orientado a eventos, nosotros tenemos que escribir las funciones de eventos en nuestra clase, y poner lo que hará nuestro codigo cuando ocurra cada uno de los eventos.&lt;br /&gt;
La lista de eventos se puede &lt;a href="https://github.com/alexander171294/PHPSocketMaster/wiki/onEvent-Funciones"&gt;ver aquí&lt;/a&gt;. Dentro de nuestra clase escribimos lo que hará nuestro cliente al conectarse a algo.&lt;br /&gt;
&lt;br /&gt;
Generalmente podemos conectarlo a servidores de distintas cosas, siempre que tengamos el protocolo correspondiente podemos conectarlo a un chat irc, o hacer una petición HTTP, incluso podemos conectarlo a los servidores de whatsapp (si conseguimos su protocolo).&lt;br /&gt;
Lamentablemente, PHPSocketMaster no soporta crear un cliente websocket (es decir no podemos hacernos pasar por un cliente web). &lt;br /&gt;
&lt;br /&gt;
Luego si nosotros queremos crear un servidor es muy simple, hay que extender dos clases, la primera es la del socket que recibe las conexiones, como expliqué antes, este recibirá las conexiones entrantes y las derivará a socokets secundarios. Luego debemos extender la clase de los sockets que recibirán cada conexion, donde pondremos que pasará con cada uno de ellos.&lt;br /&gt;
&lt;a href="https://github.com/alexander171294/PHPSocketMaster/wiki/Socket-en-modo-Servidor"&gt;Aquí&lt;/a&gt; está la documentación, y también hay ejemplos en la carpeta examples.&lt;br /&gt;
&lt;br /&gt;
Para finalizar si quiciesemos crear un servidor que hacepte websockets, es mucho más sencillo, al servidor normal solo hay que agregarle una constante, y listo.&lt;br /&gt;
&lt;a href="https://github.com/alexander171294/PHPSocketMaster/wiki/PHPSocketMaster-como-WebSocket"&gt;Aquí&lt;/a&gt; está la documentación.&lt;br /&gt;
&lt;br /&gt;
Para simplificar las cosas cuando se trata de servidores, se me ocurrió crear una clase que se encarge de gestionar y controlar los sockets, porque el mayor problema en los servidores es poder organizar y controlar todos los sockets. Puedes ver el repositorio de esta librería &lt;a href="https://github.com/alexander171294/ServerSocket"&gt;aquí&lt;/a&gt;, también tiene ejemplos y requiere que se incluya PHPSocketMaster.&lt;br /&gt;
&lt;br /&gt;
Si quieres saber qué se podría hacer con websockets para tener una idea, se puede crear un cliente de pocker multijugador en tiempo real, como éste, o crear un servidor de chat como aremos en esta serie de entradas, incluso podemos crear un servidor web como apache en php tranquilamente, o un servidor de XMPP, o cualquier otra cosa que utilice sockets, que a fin de cuentas es casi todo.&lt;br /&gt;
&lt;br /&gt;
Saludos para todos! espero les haya gustado y estén atentos a nuevas entradas donde publicaremos como utilizar los sockets desde javascript para conectarnos a un server en php, y luego desarrollaremos un proyecto ejemplo donde crearemos un servidor de chat.&lt;br /&gt;
&lt;span data-fb="alexander171294" data-name="Alexander Eberle" data-twitter="std_io" id="datosperfil" style="display: none;"&gt;Soy amante de la programación, me gusta ver y crear cosas nuevas... Me gusta el metal, rock, y también daftpunk jajaja&lt;/span&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHWZcMOOdWmUjeVZsRvps6TFpB1QaT1_ybNpeByp2kO_ubsCwJDLdm56j8JoKKrKF49llsQpPrMYyk83UN6yRYR5Ois5ijZUaeTW9KNkON3LKJfD4q6ySGVd_Gs13zsqWCVQ_UmEEZP5E/s72-c/68747470733a2f2f74696477616c6c2e6769746875622e636f6d2f5377696674576562536f636b65742f6c6f676f2e706e67.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Introducción a git - Capitulo 1</title><link>http://console-input-output.blogspot.com/2015/09/introduccion-git-capitulo-1.html</link><category>bitbucket</category><category>git</category><category>github</category><category>introducción</category><category>mercurial</category><category>repositorios</category><category>version</category><category>versionado</category><pubDate>Sun, 20 Sep 2015 12:21:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-5405613205315126098</guid><description>Buenos dias lectores del blog del programador, como dije en una entrada previa estoy volviendo a escribir, y el día de hoy voy a comenzar con una serie de entradas que tratan sobr egit, a modo "capacitación" luego de haber presentado todas las entradas voy a publicar los papers correspondientes.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNQKPRnBewPr25Y1l9U4x6pdzXCCOOxVn94TJXSf2VJTfE60Aj178NpanRov8-4a5_-dFbQBtB4IHJLOgsvOKuf5yjRngDzqKDEP9sE5K2OkBonQgQoV7Z0Hbq_z7WUeYucVyna3NMb1o/s1600/social_coding.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNQKPRnBewPr25Y1l9U4x6pdzXCCOOxVn94TJXSf2VJTfE60Aj178NpanRov8-4a5_-dFbQBtB4IHJLOgsvOKuf5yjRngDzqKDEP9sE5K2OkBonQgQoV7Z0Hbq_z7WUeYucVyna3NMb1o/s320/social_coding.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Git es un sistema de control de código para ordenar las distintas versiones de un código en su desarrollo, fué diseñado para desarrollar Linux, y está enfocado al desarrollo organizado por parte de múltiples programadores.&lt;br /&gt;
&lt;br /&gt;
En la introducción de git estaremos explicando cómo manejar un repositorio de forma unipersonal, luego en el paper de profundización de git, estaremos explicando las mecánicas de trabajo por parte de múltiples programadores.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Necesidades de un control de versiones&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
La pregunta que muchos se podrían hacer, y que van a descubrir su respuesta cuando comienzen a trabajar con git, es ¿por qué necesitamos un sistema de control de versiones?, el desarrollo de software como se dijo en varias ocaciones es una actividad intelectual en la que interactúan distintos componentes y faces, uno tiene una idea, la diseña, la programa, y luego la refina sucesivamente mejorando el código hasta crear una versión estable RC (Release Candidate), en cada fase podríamos pensar que el código está en una versión específica y a medida que avanza, también avanza sus versiones. Hay distintas formas de versionar los códigos, en general se usa el versionado separado por puntos (4.3.2) en general [Major].[Minor].[Micro] los numeros aumentan dependiendo de cuan grande sea los cambios desde la versión anterior hasta la actual. Generalmente para pequeños fixes y reparaciones se aumenta un digito de Micro, cuando son cambios relativamente grandes, cambios de funcionalidad, novedades, y atraviesan varias partes del código, se aumenta un digito al Minor, luego si hablamos de grandes cambios, (incluso cambios de estructura general), podemos aumentar un valor al Major, para organizar todas las versiones del código, es decir para poder controlar los cambios en qué archivos, en que version, y no mezclar todo existen los sistemas de control de versiones, tales como Git, Mercurial, etc.&lt;br /&gt;Un sistema de control de versiones nos ayudará a tener el código ordenado y saber exactamente qué cambios hicimos, cuando los hicimos, como los hicimos y a qué archivos o partes del código afectaron.&lt;br /&gt;
Git particulamente es bastante interesantes, un proyecto libre, que tiene interesantes ventajas (que explicaremos más adelante, mientras tanto pueden buscarlas), asique es el que elegiremos para llevar a cabo esta capacitación.&lt;br /&gt;
Por otra parte Github es una página que provee de repositorios gratuitos donde subir tus códigos utilizando Git, sin embargo hay otras páginas como bitbucket que son pagas pero que te permiten tener repositorios privados para proyectos no opensource.&lt;br /&gt;
&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Recomendamos revisar GIT en &lt;a href="https://en.wikipedia.org/wiki/Git_%28software%29"&gt;wikipedia&lt;/a&gt;.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Un saludo para todos los lectores y espero sigan visitando el blog a la espera de nuevas entradas respecto a git, websocket, criterios de calidad, sistemas operativos, diseño, paradigmas, entre otros.&lt;br /&gt;
&lt;span data-fb="alexander171294" data-name="Alexander Eberle" data-twitter="std_io" id="datosperfil" style="display: none;"&gt;Soy amante de la programación, me gusta ver y crear cosas nuevas... Me gusta el metal, rock, y también daftpunk jajaja&lt;/span&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNQKPRnBewPr25Y1l9U4x6pdzXCCOOxVn94TJXSf2VJTfE60Aj178NpanRov8-4a5_-dFbQBtB4IHJLOgsvOKuf5yjRngDzqKDEP9sE5K2OkBonQgQoV7Z0Hbq_z7WUeYucVyna3NMb1o/s72-c/social_coding.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Introduccion a WebSockets en HTML5, una tecnología prometedora</title><link>http://console-input-output.blogspot.com/2015/09/introduccion-websockets-en-html5-una.html</link><category>html5</category><category>libreria</category><category>manual</category><category>PHP</category><category>websockets</category><pubDate>Thu, 17 Sep 2015 09:18:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-2356314316022818201</guid><description>&lt;br /&gt;
Hace ya tiempo que no creaba una entrada, pero decidí volver a darle un poquito de énfasis a mi blog, y de paso explicar un poco de las tecnologías que estoy utilizando hoy en día.&lt;br /&gt;
&lt;br /&gt;
En esta entrada haremos una breve introducción a websockets, para luego crear una serie de entradas a modo "manual" del usuario de websockets.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVTfGXuhXdqFRcqllBw_EpBlzgf5-77dyDBsHzbe07kMPCq50Dfwsl6qiLzvbN2LYn8HIE6K8QPusFNWEiY_CgSKo39bCioCNG3OsBNrZjL7b7TmsO7NQQTn1u4Gt4fYovMJnMNVKCDWM/s1600/68747470733a2f2f74696477616c6c2e6769746875622e636f6d2f5377696674576562536f636b65742f6c6f676f2e706e67.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVTfGXuhXdqFRcqllBw_EpBlzgf5-77dyDBsHzbe07kMPCq50Dfwsl6qiLzvbN2LYn8HIE6K8QPusFNWEiY_CgSKo39bCioCNG3OsBNrZjL7b7TmsO7NQQTn1u4Gt4fYovMJnMNVKCDWM/s200/68747470733a2f2f74696477616c6c2e6769746875622e636f6d2f5377696674576562536f636b65742f6c6f676f2e706e67.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
Internet con el paso del tiempo fué avanzando en lo que es tecnología y fué implementando nuevas herramientas, una de las cosas que se enseñan de entrada cuando uno aprende a desarrollar web, es que el protocolo por el que se rigen los servidores web es HTTP y es un protocolo sin estado, ¿Qué quiere decir?, en términos simples podemos creer que nos está diciendo que http no se mantiene en el tiempo y no tiene un estado que varía en el mismo, HTTP es un protocolo simple donde con una cabecera se exige un recurso, el servidor procesa el recurso y lo entrega dando por finalizada la conexión, es decir, no se mantiene nada en ejecución ni nada por el estilo.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Con el avance de internet y la web 2.0 el protocolo http (o al menos su formato, implementado en https) se mantuvo vigente (aclaro que en este punto me refiero a la forma de trabajar, enviar peticion, recibir recurso, cerrar conexión), sin embargo surgieron tareas nuevas, que fueron servidas por un lenguaje backend como es PHP por ejemplo, o ASP, en medio de cada petición HTTP, antes que el servidor devuelva un resultado, el mismo hace una peticion al interprete encargado de procesar los códigos para poder resolver las tareas necesarias, como gestión de usuarios, productos y distintas cosas que hay en las web 2.0, entonces los lenguajes como PHP se hicieron fuertes.&lt;br /&gt;
&lt;br /&gt;
Pero con las nuevas necesidades de la web, cada dia es más evidente que se comienza a necesitar de un estado, de algo más parecido a una aplicación de escritorio que se mantenga en el tiempo, para resolver ciertos temas, y para trabajar de mejor manera, puesto que hacer peticiones procesar, generar un resultado y finalizar el programa y hacerlo cada vez que el usuario presiona un botón u algo, resulta un poco absurdo.&lt;br /&gt;
&lt;br /&gt;
La respuesta a esto fueron los websockets, una tecnología que da soporte a la metodología de trabajo Cliente-Servidor, donde nosotros en cualquier lenguaje podemos crear un servidor y del lado del navegador un cliente en javascript que por medio de sockets se conecte y mantenga conectado a un servidor.&lt;br /&gt;
&lt;br /&gt;
Desde que salió, poca gente utiliza esta tecnología tan prometedora, uno de ellos es el whatsapp web, que implementa websockets para conectar el chat y enviar los mensajes y recibir respuestas por parte del servidor en "tiempo real".&lt;br /&gt;
&lt;br /&gt;
Los sockets conectan el cliente con el servidor y luego permiten enviar y recibir mensajes.&lt;br /&gt;
&lt;br /&gt;
Hace aproximadamente un año, llevo desarrollando una librería que permita a los programadores de PHP hacer uso de websockets de forma simple y flexible, para lo cual se implementa POO y una orientación a eventos.&lt;br /&gt;
&lt;br /&gt;
Dejo &lt;a href="https://github.com/alexander171294/PHPSocketMaster"&gt;aquí el repo de PHPSocketMaster&lt;/a&gt;&lt;br /&gt;
Dejo &lt;a href="https://github.com/alexander171294/ServerSocket"&gt;aquí el repo de PHPSocketServer&lt;/a&gt; (Es una librería que requiere SocketMaster y sirve para crear de forma rápida un miniservidor para conectar multiples sockets)&lt;br /&gt;
Dejo &lt;a href="https://github.com/alexander171294/phpoker"&gt;aquí el repo de un juego de pocker&lt;/a&gt; estilo pockerstars en el que estraba trabajando con sockets.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Un saludo cordial! y espero les haya gustado mi nueva entrada!&lt;br /&gt;
&lt;span data-fb="alexander171294" data-name="Alexander Eberle" data-twitter="std_io" id="datosperfil" style="display: none;"&gt;Soy amante de la programación, me gusta ver y crear cosas nuevas... Me gusta el metal, rock, y también daftpunk jajaja&lt;/span&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVTfGXuhXdqFRcqllBw_EpBlzgf5-77dyDBsHzbe07kMPCq50Dfwsl6qiLzvbN2LYn8HIE6K8QPusFNWEiY_CgSKo39bCioCNG3OsBNrZjL7b7TmsO7NQQTn1u4Gt4fYovMJnMNVKCDWM/s72-c/68747470733a2f2f74696477616c6c2e6769746875622e636f6d2f5377696674576562536f636b65742f6c6f676f2e706e67.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Limitaciones de AIML, PML</title><link>http://console-input-output.blogspot.com/2015/03/limitaciones-de-aiml-pml.html</link><category>aiml</category><category>bot</category><category>conversacional</category><category>inteligencia artificial</category><category>inteligente</category><pubDate>Sun, 8 Mar 2015 21:24:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-5015410023923186927</guid><description>En la entrada de hoy les traeré un pequeño paper sobre las limitaciones de un bot conversacional que aplique únicamente AIML, para poder solucionarlas traigo un par de propuestas de ideas personales a las que les llamé PML.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3Tx_InZAku_BKJQSMbGTKkArLuB3QqjYJvnaaca2ckCzznKsjeIEqpq6N4EK7DBMO2ayE7Zl2WS0FKzA1czDyUL5Zl6Tx80nG5MVxe1gNBo4_Fjf5kKkI704N1qbz-P8YHfp1Jq2jHvY/s1600/13715924-modelo-abstracto-del-hombre-de-la-molecula-de-adn.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3Tx_InZAku_BKJQSMbGTKkArLuB3QqjYJvnaaca2ckCzznKsjeIEqpq6N4EK7DBMO2ayE7Zl2WS0FKzA1czDyUL5Zl6Tx80nG5MVxe1gNBo4_Fjf5kKkI704N1qbz-P8YHfp1Jq2jHvY/s1600/13715924-modelo-abstracto-del-hombre-de-la-molecula-de-adn.jpg" height="200" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
AIML permite el almacenamiento de información adquirida por el bot, para su posterior uso, no obstante no especifica algunas especificaciones tales como, la forma en la que adquirir el conocimiento, y como formar algunas estructuras de ese conocimiento.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Esto abarcará nuestro documento.&lt;br /&gt;
&lt;br /&gt;
Puedes descargarlo &lt;a href="https://www.dropbox.com/s/p68decfy45d18f7/Limitaciones%20de%20AIML.pdf?dl=0"&gt;aquí&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Saludos!&lt;br /&gt;
&lt;span data-fb="alexander171294" data-name="Alexander Eberle" data-twitter="std_io" id="datosperfil" style="display: none;"&gt;Soy amante de la programación, me gusta ver y crear cosas nuevas... Me gusta el metal, rock, y también daftpunk jajaja&lt;/span&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3Tx_InZAku_BKJQSMbGTKkArLuB3QqjYJvnaaca2ckCzznKsjeIEqpq6N4EK7DBMO2ayE7Zl2WS0FKzA1czDyUL5Zl6Tx80nG5MVxe1gNBo4_Fjf5kKkI704N1qbz-P8YHfp1Jq2jHvY/s72-c/13715924-modelo-abstracto-del-hombre-de-la-molecula-de-adn.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author><enclosure length="-1" type="application/json" url="https://www.dropbox.com/s/p68decfy45d18f7/Limitaciones%20de%20AIML.pdf?dl=0"/></item><item><title>Paper AIML creando una bot con inteligencia artificial</title><link>http://console-input-output.blogspot.com/2015/02/paper-aiml-creando-un-bot-con.html</link><category>aiml</category><category>bot</category><category>inteligencia artificial</category><category>lenguajes</category><category>PHP</category><pubDate>Thu, 5 Feb 2015 21:35:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-7756044207096857774</guid><description>En la entrada de hoy hablaremos sobre aiml, un pequeño
modelo para almacenar conocimientos de inteligencia artificial en nuetros bots.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMGb2ojutz8RWLjMMPx67QvM3oriKo9MMRwnCqwCF8VZTKnHa47XYjYWl2NObZ5Hg3oo7_c40H-EFETFmnGAaPVREOM6OBdAI1nFVo5IAX0fcbgWBnVOZg7KHytg-eWYoNKd6HmH5jQw/s1600/images.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMGb2ojutz8RWLjMMPx67QvM3oriKo9MMRwnCqwCF8VZTKnHa47XYjYWl2NObZ5Hg3oo7_c40H-EFETFmnGAaPVREOM6OBdAI1nFVo5IAX0fcbgWBnVOZg7KHytg-eWYoNKd6HmH5jQw/s1600/images.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
Aiml permite el almacenamiento de conocimientos en grupos de
topics, para ubicarlos mediante patrones.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
En éste documento hablaremos sobre el formato de un documento
aiml (basados en xml) y todas sus características.&lt;/div&gt;
&lt;br /&gt;
&lt;a href="https://www.dropbox.com/s/h03sfs00gvd797z/introducci%C3%B3n%20a%20AIML.docx?dl=0"&gt;Descarga Aquí&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Saludos!&lt;br /&gt;
&lt;span data-fb="alexander171294" data-name="Alexander Eberle" data-twitter="std_io" id="datosperfil" style="display: none;"&gt;Soy amante de la programación, me gusta ver y crear cosas nuevas... Me gusta el metal, rock, y también daftpunk jajaja&lt;/span&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMGb2ojutz8RWLjMMPx67QvM3oriKo9MMRwnCqwCF8VZTKnHa47XYjYWl2NObZ5Hg3oo7_c40H-EFETFmnGAaPVREOM6OBdAI1nFVo5IAX0fcbgWBnVOZg7KHytg-eWYoNKd6HmH5jQw/s72-c/images.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author><enclosure length="-1" type="application/json" url="https://www.dropbox.com/s/h03sfs00gvd797z/introducci%C3%B3n%20a%20AIML.docx?dl=0"/></item><item><title>Patrones Creacionales: Prototype</title><link>http://console-input-output.blogspot.com/2015/02/patrones-creacionales-prototype.html</link><category>creacional</category><category>patron</category><category>patrones</category><category>progamación</category><pubDate>Wed, 4 Feb 2015 16:16:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-8984465093736973325</guid><description>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í.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_RViCZOhg-jz8dr6NJP20xDA6MJ70e3c29WKAWWNiHWr-9wsYe8ow6ZSTTlCRWKI3H8XqAv4y3260bnlxb0MN20Sr8nafeTx9i7M-4xCipM1IZjOzChxcJcnNAatfsq-Utsb-i0tioz0/s1600/patrones-de-diseo-de-software-1-638.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_RViCZOhg-jz8dr6NJP20xDA6MJ70e3c29WKAWWNiHWr-9wsYe8ow6ZSTTlCRWKI3H8XqAv4y3260bnlxb0MN20Sr8nafeTx9i7M-4xCipM1IZjOzChxcJcnNAatfsq-Utsb-i0tioz0/s1600/patrones-de-diseo-de-software-1-638.jpg" height="150" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
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).&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
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.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
La instancia prototipo solo debe ser utilizada para ser clonada, y no debe ser utilizada con otro propósito, por evidentes razones.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
dejo aquí un ejemplo de código de prototype en php:&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;a href="http://pastebin.com/tcQxRB1i"&gt;http://pastebin.com/tcQxRB1i&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
un saludo para todos los lectores!&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_RViCZOhg-jz8dr6NJP20xDA6MJ70e3c29WKAWWNiHWr-9wsYe8ow6ZSTTlCRWKI3H8XqAv4y3260bnlxb0MN20Sr8nafeTx9i7M-4xCipM1IZjOzChxcJcnNAatfsq-Utsb-i0tioz0/s72-c/patrones-de-diseo-de-software-1-638.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Patrón creacional: Singleton</title><link>http://console-input-output.blogspot.com/2015/02/patron-creacional-singleton.html</link><category>creacional</category><category>patron</category><category>patrones</category><category>singleton</category><pubDate>Tue, 3 Feb 2015 15:43:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-1121829400058705585</guid><description>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 &lt;a href="http://blog.std-io.com/2014/10/la-verdad-de-singleton-php.html"&gt;Singleton&lt;/a&gt; pero como una queja al mal uso que le da la mayoría de la gente al menos en php.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_RViCZOhg-jz8dr6NJP20xDA6MJ70e3c29WKAWWNiHWr-9wsYe8ow6ZSTTlCRWKI3H8XqAv4y3260bnlxb0MN20Sr8nafeTx9i7M-4xCipM1IZjOzChxcJcnNAatfsq-Utsb-i0tioz0/s1600/patrones-de-diseo-de-software-1-638.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_RViCZOhg-jz8dr6NJP20xDA6MJ70e3c29WKAWWNiHWr-9wsYe8ow6ZSTTlCRWKI3H8XqAv4y3260bnlxb0MN20Sr8nafeTx9i7M-4xCipM1IZjOzChxcJcnNAatfsq-Utsb-i0tioz0/s1600/patrones-de-diseo-de-software-1-638.jpg" height="150" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
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.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
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.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
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.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
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.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Un ejemplo de singleton en php:&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;a href="http://pastebin.com/bnRkgshK"&gt;http://pastebin.com/bnRkgshK&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
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.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Un saludo lectores y espero que les haya gustado esta entrada.&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_RViCZOhg-jz8dr6NJP20xDA6MJ70e3c29WKAWWNiHWr-9wsYe8ow6ZSTTlCRWKI3H8XqAv4y3260bnlxb0MN20Sr8nafeTx9i7M-4xCipM1IZjOzChxcJcnNAatfsq-Utsb-i0tioz0/s72-c/patrones-de-diseo-de-software-1-638.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>El nuevo blog</title><link>http://console-input-output.blogspot.com/2015/01/el-nuevo-blog.html</link><category>críticas y aclaraciones</category><category>otros</category><category>Sobre el blog</category><pubDate>Sat, 17 Jan 2015 12:53:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-8541850844302281629</guid><description>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.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-cQBu6NtrYYg/U2fDgA23VUI/AAAAAAAAFQ8/humHWTS9Ouk/s940/arreglo+3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-cQBu6NtrYYg/U2fDgA23VUI/AAAAAAAAFQ8/humHWTS9Ouk/s940/arreglo+3.jpg" height="200" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;/div&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Tengo que dar inicialmente una explicación de qué es lo que le ocurrió a mi blog anterior, como todos saben yo no tengo pelos en la lengua, y en lo que se refiere a la persona que me vendió el dominio anterior, tampoco tengo ningún tipo de piedad. El dominio anterior std-io.com lo compré a un tal Mariox Leguizamón (de Buenos aires) cuyo facebook es &lt;a href="https://www.facebook.com/mario0x"&gt;éste&lt;/a&gt;, puesto que me ofreció dominios a mitad de precio, y dado que estaba recién comenzando, como una colaboración para que creciera un colega de la industria de la web, decidí comprarle al menos unos 4 dominios por el precio de 20 dolares. El primer año fué excelente hasta que cuando tuve que renovar el dominio, (faltaba un mes aproximadamente) hablé con esta persona y me dijo que no vendía mas dominios de estos y que no podía ayudarme en nada, que tendríamos que esperar a que se venciera (Al menos tuve la suerte de preguntar puesto que si no preguntaba nunca me hubiese enterado de esto hasta el mismo día de la renovación), de los 4 dominios solo 3 me dio, puesto que el 4º no lo necesitaba y le dije que cuando lo necesitara se lo compraría. Llegó el día en que vencía el dominio, y resultó que no solo Mariox no me registró el dominio, sino que la empresa tercera que registraba los dominios para él, me lo registró y no me lo dió. Después de semanas de quejas y reclamaciones Mariox nunca respondió luego del 1º día en que me quejé, puesto que según él no era su culpa y no tenía ninguna forma de solucionarme el problema. Así pasó el tiempo y perdí el dominio std-io.com por la incompetencia de una persona.&lt;br /&gt;
&lt;br /&gt;
Mi recomendación personal es que nunca contraten para NADA a Mariox Leguizamón, inicialmente es un irresponsable, además es un estafador, me vendió 4 dominios y luego de registrar el 3º dejó de registrar dominios, actualmente vende servidores, pero no quiciera saber que pasa si mi servidor que le compré se cae y él ya no trabaja más con servidores, en esa situación no va a haber nadie que te pueda ayudar.&lt;br /&gt;
&lt;br /&gt;
Luego de dos meses sin dominio, y sin entradas, finalmente me decidí a registrar programador.in, y esta vez lo registré en una empresa que lleva tiempo en el mercado, espero poder volver a levantar la actividad del blog, a decir verdad me dió mucha pena que luego del esfuerzo y trabajo de 1 año entero tratando de tener una actividad constante en la creación de entradas perdiera el dominio.&lt;br /&gt;
&lt;br /&gt;
Aprovecho esta entrada para hablar sobre un tema importante, como lo es el contenido del blog, se sabe que al menos el 50% del contenido de mi blog no es de mi autoría, es sacado de libros, o de trabajos, yo estudié en un colegio Técnico y obtuve el título de técnico, de modo que todo lo que aprendí y todo el material que obtuve de mis estudios, puedo usarlo para lo que yo quiera, (para algo estudié), de la misma forma el material de aquellos profesores, les pagan para enseñar y eso hacen, lo que yo aprenda puedo usarlo para lo que quiera, y en lo personal me gusta compartirlo con programadores compañeros de internet que quieran aprender. Éste blog es sin fines de lucro, no hay publicidad, ni absolutamente nada por el estilo, de modo que yo no gano dinero a costa del material de terceros, simplemente lo pongo a disposición de la web.&lt;br /&gt;
&lt;br /&gt;
El otro tema que quiero hablar es el futuro del blog, en relación a teoría sobre calidad, concidero que las entradas fueron completadas, y al menos en un futuro cercano hasta aquí llegaremos con ellas. Los temas actuales son Bases de Datos, y patrones de programación. Hasta el momento el blog fué dedicado pura y exclusivamente para publicar teoría, pero quiero dar un nuevo enfoque como lo es la práctica. El blog a partir de ahora no será el blog de teoría de programación que solía ser, sino que ahora será un blog para programadores, con cosas interesantes que puedan no conocer, teoría, códigos, y varias cosas más. El objetivo del nuevo año para el blog es precisamente ese, agrandar el área que abarca el contenido del blog.&lt;br /&gt;
&lt;br /&gt;
Y no lo podré hacer sin la ayuda de ustedes, siempre se necesitan escritores, lectores, y gente que aporte ideas. Los espero en el blog diariamente, y me gustaría que pasaran ideas u entradas a alexander171294@gmail.com tanto como quejas que quieran hacer.&lt;br /&gt;
&lt;br /&gt;
Un saludo cordial! desde el Blog del Programador!&lt;br /&gt;
&lt;span data-fb="alexander171294" data-name="Alexander Eberle" data-twitter="std_io" id="datosperfil" style="display: none;"&gt;Soy amante de la programación, me gusta ver y crear cosas nuevas... Me gusta el metal, rock, y también daftpunk jajaja&lt;/span&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="http://2.bp.blogspot.com/-cQBu6NtrYYg/U2fDgA23VUI/AAAAAAAAFQ8/humHWTS9Ouk/s72-c/arreglo+3.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Bases de datos - PDF Normalización</title><link>http://console-input-output.blogspot.com/2014/11/patrones-creacionales-builder-faltan.html</link><category>1FN</category><category>2FN</category><category>3FN</category><category>4FN</category><category>5FN</category><category>FNBC</category><category>forma</category><category>normal</category><category>normalizacion</category><pubDate>Sun, 9 Nov 2014 13:22:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-8162566934665164481</guid><description>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.&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8pyZoYuuu5KMmI7v81GXjBNzr-mgkguS1V-Dep2A2fxG3ovvpiJSJ85tHyxZc19zz2tFoXuORLa3cty-9lhr4Qw8hXp3pEfS4gVUVQdGFQYU9W_jdTFTgPBiUpwhnGDxolFhn4BxbLB8/s1600/Captura+de+pantalla+2014-10-28+18.01.58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8pyZoYuuu5KMmI7v81GXjBNzr-mgkguS1V-Dep2A2fxG3ovvpiJSJ85tHyxZc19zz2tFoXuORLa3cty-9lhr4Qw8hXp3pEfS4gVUVQdGFQYU9W_jdTFTgPBiUpwhnGDxolFhn4BxbLB8/s1600/Captura+de+pantalla+2014-10-28+18.01.58.png" height="200" width="143" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Sin más preambulos les dejo los temas que abarcan y las entradas relacionadas a un click de distancia.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Introducción &lt;a href="http://console-input-output.blogspot.com.ar/2013/09/the-data-base-las-bases-de-datos.html"&gt;(ver entrada relacionada)&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Primera Forma Normal (1FN) &lt;a href="http://blog.std-io.com/2014/10/bases-de-datos-primera-forma-normal.html"&gt;(ver entrada relacionada)&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Segunda Forma Normal (2FN) &lt;a href="http://blog.std-io.com/2014/10/bases-de-datos-segunda-forma-normal.html"&gt;(ver entrada relacionada)&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Tercera Forma Normal (3FN) &lt;a href="http://blog.std-io.com/2014/10/bases-de-datos-tercera-forma-normal.html"&gt;(ver entrada relacionada)&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
FNBC &lt;a href="http://blog.std-io.com/2014/11/bases-de-datos-fnbc.html"&gt;(ver entrada relacionada)&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Cuarta Forma Normal (4FN) &lt;a href="http://blog.std-io.com/2014/11/bases-de-datos-cuarta-forma-normal.html"&gt;(ver entrada relacionada)&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Quinta Forma Normal (5FN) &lt;a href="http://blog.std-io.com/2014/11/bases-de-datos-quinta-forma-normal.html"&gt;(ver entrada relacionada)&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;a href="https://www.dropbox.com/s/gx0wa8d7euagpk8/Bases%20De%20Datos%20-%20Normalizaci%C3%B3n.pdf?dl=0"&gt;DESCARGAR PDF AQUÍ&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Un saludo lectores y espero les haya gustado la entrada del día de hoy.&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8pyZoYuuu5KMmI7v81GXjBNzr-mgkguS1V-Dep2A2fxG3ovvpiJSJ85tHyxZc19zz2tFoXuORLa3cty-9lhr4Qw8hXp3pEfS4gVUVQdGFQYU9W_jdTFTgPBiUpwhnGDxolFhn4BxbLB8/s72-c/Captura+de+pantalla+2014-10-28+18.01.58.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author><enclosure length="-1" type="application/json" url="https://www.dropbox.com/s/gx0wa8d7euagpk8/Bases%20De%20Datos%20-%20Normalizaci%C3%B3n.pdf?dl=0"/></item><item><title>Bases de datos: Quinta forma normal</title><link>http://console-input-output.blogspot.com/2014/11/bases-de-datos-quinta-forma-normal.html</link><category>4FN</category><category>5FN</category><category>bases</category><category>datos</category><category>Diseño de bases de datos</category><category>forma</category><category>normal</category><category>normalización</category><pubDate>Sat, 8 Nov 2014 17:08:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-3503842427071278849</guid><description>En esta entrada hablaremos sobre la quinta forma normal, 5FN. Recomiendo por supuesto la lectura de las publicaciones anteriores &lt;a href="http://blog.std-io.com/2014/11/bases-de-datos-cuarta-forma-normal.html"&gt;4FN&lt;/a&gt; y la publicación inicial del hilo de bases de datos &lt;a href="http://blog.std-io.com/2013/09/the-data-base-las-bases-de-datos.html"&gt;aquí&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9GBQIWjB6iHKNRbE-efxMqKr7GX1SmU-I1jasCCbufN6_WCOFwQU6k5pELmzUDiOGd3EprDagryR53kkFgTJE60uCtOPrALHSbD0bq4f81Al8y4j0Eqe7HD_VEBBpv5qcYXA9aTEjQOw/s1600/200px-FormasNormalesBD.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9GBQIWjB6iHKNRbE-efxMqKr7GX1SmU-I1jasCCbufN6_WCOFwQU6k5pELmzUDiOGd3EprDagryR53kkFgTJE60uCtOPrALHSbD0bq4f81Al8y4j0Eqe7HD_VEBBpv5qcYXA9aTEjQOw/s1600/200px-FormasNormalesBD.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
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.&lt;br /&gt;
&lt;br /&gt;
É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:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;/ul&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;a href="http://es.wikipedia.org/wiki/Normalizaci%C3%B3n_de_bases_de_datos"&gt;wikipedia de normalización&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Saludos! &lt;br /&gt;
&lt;span data-fb="alexander171294" data-name="Alexander Eberle" data-twitter="std_io" id="datosperfil" style="display: none;"&gt;Soy amante de la programación, me gusta ver y crear cosas nuevas... Me gusta el metal, rock, y también daftpunk jajaja&lt;/span&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9GBQIWjB6iHKNRbE-efxMqKr7GX1SmU-I1jasCCbufN6_WCOFwQU6k5pELmzUDiOGd3EprDagryR53kkFgTJE60uCtOPrALHSbD0bq4f81Al8y4j0Eqe7HD_VEBBpv5qcYXA9aTEjQOw/s72-c/200px-FormasNormalesBD.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Patrones Creacionales: Abstract Factory</title><link>http://console-input-output.blogspot.com/2014/11/patrones-creacionales-abstract-factory.html</link><category>abstract</category><category>diseño</category><category>factory</category><category>method</category><category>patron</category><category>patrones</category><category>programacion</category><category>software</category><pubDate>Wed, 5 Nov 2014 14:50:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-8027024588455099006</guid><description>En entradas anteriores vimos Factory Method, y en esta entrada veremos Abstract Factory un patron creacional que amplía el rango de &lt;a href="http://blog.std-io.com/2014/11/patrones-creacionales-factory-method.html"&gt;Factory Method&lt;/a&gt;. También vimos &lt;a href="http://blog.std-io.com/2014/10/patrones-creacionales-object-pool.html"&gt;ObjectPool&lt;/a&gt; y una &lt;a href="http://blog.std-io.com/2014/10/patrones-de-diseno.html"&gt;introducción a los patrones de diseño&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_RViCZOhg-jz8dr6NJP20xDA6MJ70e3c29WKAWWNiHWr-9wsYe8ow6ZSTTlCRWKI3H8XqAv4y3260bnlxb0MN20Sr8nafeTx9i7M-4xCipM1IZjOzChxcJcnNAatfsq-Utsb-i0tioz0/s1600/patrones-de-diseo-de-software-1-638.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_RViCZOhg-jz8dr6NJP20xDA6MJ70e3c29WKAWWNiHWr-9wsYe8ow6ZSTTlCRWKI3H8XqAv4y3260bnlxb0MN20Sr8nafeTx9i7M-4xCipM1IZjOzChxcJcnNAatfsq-Utsb-i0tioz0/s1600/patrones-de-diseo-de-software-1-638.jpg" height="150" width="200" /&gt;&lt;/a&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJfh0p9r69n7p9KnU_YcCCLxq2hJp_B9lBX19GRmXAK-JdAeKUqd8NRTD5qrxbB6KTCX0ZeRwe6gjwrA2xMAeHMj8028VY0iFcufsLSObnSli4_j8EEqFZQXnmVvK8pLdKHJRKyQjaQ8U/s1600/Factory_Method.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Recomiendo leer como minimo el &lt;a href="http://blog.std-io.com/2014/11/patrones-creacionales-factory-method.html"&gt;Factory Method&lt;/a&gt; para que les sea más sencillo el Abstract Factory.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
podemos ver el código aquí:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://pastebin.com/V0HS6fU2"&gt;http://pastebin.com/V0HS6fU2&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
y un diagrama del Abstract Factory extraído de wikipedia:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzWA0oA2UyeMIo0uYoWeB920PcvVFO3iSqkMFBL_wGRTxOcVgZNI28EkzX0NMOC7PEAEaO9jfm6LZZhtsaxHR6YfUmb3JR2lE-VAJuAaY1PoXI0kMm7JpOo2Jg-k9pp6YV52x1KfZlvuM/s1600/Diagrama_Abstract_Factory.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzWA0oA2UyeMIo0uYoWeB920PcvVFO3iSqkMFBL_wGRTxOcVgZNI28EkzX0NMOC7PEAEaO9jfm6LZZhtsaxHR6YfUmb3JR2lE-VAJuAaY1PoXI0kMm7JpOo2Jg-k9pp6YV52x1KfZlvuM/s1600/Diagrama_Abstract_Factory.png" height="192" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Un saludo para todos! espero que les haya gustado la entrada y nos veremos la próxima!&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_RViCZOhg-jz8dr6NJP20xDA6MJ70e3c29WKAWWNiHWr-9wsYe8ow6ZSTTlCRWKI3H8XqAv4y3260bnlxb0MN20Sr8nafeTx9i7M-4xCipM1IZjOzChxcJcnNAatfsq-Utsb-i0tioz0/s72-c/patrones-de-diseo-de-software-1-638.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Bases de datos: Cuarta forma normal</title><link>http://console-input-output.blogspot.com/2014/11/bases-de-datos-cuarta-forma-normal.html</link><category>1FN</category><category>2FN</category><category>3FN</category><category>4FN</category><category>bases</category><category>datos</category><category>Diseño de bases de datos</category><category>forma</category><category>normal</category><category>normalizacion</category><category>Programación</category><pubDate>Mon, 3 Nov 2014 15:07:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-1190940454388261698</guid><description>En ésta entrada trataré de explicar de forma lo más simple posible la cuarta forma normal, 4FN que es bastante dificil de explicar, recomiendo por supuesto la lectura de entradas anteriores del tema &lt;a href="http://blog.std-io.com/2014/11/bases-de-datos-fnbc.html"&gt;FNBC&lt;/a&gt;, &lt;a href="http://blog.std-io.com/2014/10/bases-de-datos-tercera-forma-normal.html"&gt;3FN&lt;/a&gt;, &lt;a href="http://blog.std-io.com/2014/10/bases-de-datos-segunda-forma-normal.html"&gt;2FN&lt;/a&gt;, &lt;a href="http://blog.std-io.com/2014/10/bases-de-datos-primera-forma-normal.html"&gt;1FN&lt;/a&gt; y la publicación introductoria al tema de hace un año.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9GBQIWjB6iHKNRbE-efxMqKr7GX1SmU-I1jasCCbufN6_WCOFwQU6k5pELmzUDiOGd3EprDagryR53kkFgTJE60uCtOPrALHSbD0bq4f81Al8y4j0Eqe7HD_VEBBpv5qcYXA9aTEjQOw/s1600/200px-FormasNormalesBD.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9GBQIWjB6iHKNRbE-efxMqKr7GX1SmU-I1jasCCbufN6_WCOFwQU6k5pELmzUDiOGd3EprDagryR53kkFgTJE60uCtOPrALHSbD0bq4f81Al8y4j0Eqe7HD_VEBBpv5qcYXA9aTEjQOw/s1600/200px-FormasNormalesBD.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
La 4FN está relacionada con la dependencia multivalor, ésta es aquella dependencia que ocurre con los distintos valores que puede tener un campo y que depende de un valor de un campo x.&lt;br /&gt;
&lt;br /&gt;
Esto es, cuando un campo tiene un valor x, otro campo puede tener alguno de muchos valores que dependan de ese valor de ese campo. &lt;br /&gt;
&lt;br /&gt;
Una tabla está en 4FN si y solo si, la misma se encuentra en 3FN, además cumple con el siguiente requisito:&lt;br /&gt;
&lt;br /&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:OfficeDocumentSettings&gt;
  &lt;o:RelyOnVML/&gt;
  &lt;o:AllowPNG/&gt;
 &lt;/o:OfficeDocumentSettings&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;br /&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:HyphenationZone&gt;21&lt;/w:HyphenationZone&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;ES-UY&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:EnableOpenTypeKerning/&gt;
   &lt;w:DontFlipMirrorIndents/&gt;
   &lt;w:OverrideTableStyleHps/&gt;
   &lt;w:UseFELayout/&gt;
  &lt;/w:Compatibility&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"/&gt;
   &lt;m:brkBin m:val="before"/&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;
   &lt;m:smallFrac m:val="off"/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val="0"/&gt;
   &lt;m:rMargin m:val="0"/&gt;
   &lt;m:defJc m:val="centerGroup"/&gt;
   &lt;m:wrapIndent m:val="1440"/&gt;
   &lt;m:intLim m:val="subSup"/&gt;
   &lt;m:naryLim m:val="undOvr"/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:"Tabla normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-parent:"";
 mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
 mso-para-margin-top:0cm;
 mso-para-margin-right:0cm;
 mso-para-margin-bottom:10.0pt;
 mso-para-margin-left:0cm;
 line-height:115%;
 mso-pagination:widow-orphan;
 font-size:11.0pt;
 font-family:"Cambria","serif";
 mso-ascii-font-family:Cambria;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Cambria;
 mso-hansi-theme-font:minor-latin;
 mso-ansi-language:ES-AR;
 mso-fareast-language:ES-AR;}
&lt;/style&gt;
&lt;![endif]--&gt;

&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="mso-ansi-language: ES;"&gt;Para cada una de sus
dependencias múltiples no funcionales, asumiendo X como el campo &lt;span style="color: black; mso-themecolor: text1;"&gt;de único valor -cuyo dependiente campo
es Y (de múltiples valores)-, &lt;/span&gt;éste campo X es clave candidata o grupo de
claves candidatas. &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
En otras palabras tomando la idea de dependencia funcional multivalor, aquel campo con el valor que puede resultar en la dependencia de varios posibles de otro campo, es una clave primaria, o grupo de claves primarias.&lt;br /&gt;
&lt;br /&gt;
Cuando un campo tiene un valor x, otro campo puede tener alguno de muchos valores que dependan de ese valor de ese campo, la tabla estaría en 4FN si el campo del valor x es una clave primaria o conjuntos de claves.&lt;br /&gt;
&lt;br /&gt;
Por supuesto esta forma normal solo será útil cuando existan dependencias funcionales multivalor.&lt;br /&gt;
&lt;br /&gt;
Un saludo, espero que se entienda, me haya explicado bien, y espero les agrade la entrada, para nuevas entradas puedes estar atento al blog, donde seguro la próxima será la 5FN y luego pretendo hablar sobre unas reglas de normalización escritas por Codd.&lt;br /&gt;
&lt;span data-fb="alexander171294" data-name="Alexander Eberle" data-twitter="std_io" id="datosperfil" style="display: none;"&gt;Soy amante de la programación, me gusta ver y crear cosas nuevas... Me gusta el metal, rock, y también daftpunk jajaja&lt;/span&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9GBQIWjB6iHKNRbE-efxMqKr7GX1SmU-I1jasCCbufN6_WCOFwQU6k5pELmzUDiOGd3EprDagryR53kkFgTJE60uCtOPrALHSbD0bq4f81Al8y4j0Eqe7HD_VEBBpv5qcYXA9aTEjQOw/s72-c/200px-FormasNormalesBD.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Patrones Creacionales: Factory Method</title><link>http://console-input-output.blogspot.com/2014/11/patrones-creacionales-factory-method.html</link><category>diseño</category><category>factory</category><category>method</category><category>patron</category><category>patrones</category><category>programacion</category><pubDate>Sun, 2 Nov 2014 16:59:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-8102218195429699996</guid><description>En una de las entradas anteriores hablamos sobre &lt;a href="http://blog.std-io.com/2014/10/patrones-de-diseno.html"&gt;Patrones de diseño&lt;/a&gt;, realizamos una introducción simple y ahora hablaremos sobre el Factory Method, un patrón creacional.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq8fNBgZYEnV59RYJzpUcSDWl6AUtRmDj-gUehfBVyZY8RTw_sEQNYT4nHHJtslklR6rTohakZJtqH46d1sO9Qs32tTq_PqYQmKyPbr3YtWHVb2PRkTyOPv_OdvBCYnx85fMi0JnjTOLw/s1600/patrones-de-diseo-de-software-1-638.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq8fNBgZYEnV59RYJzpUcSDWl6AUtRmDj-gUehfBVyZY8RTw_sEQNYT4nHHJtslklR6rTohakZJtqH46d1sO9Qs32tTq_PqYQmKyPbr3YtWHVb2PRkTyOPv_OdvBCYnx85fMi0JnjTOLw/s1600/patrones-de-diseo-de-software-1-638.jpg" height="150" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Sugiero ver el patrón anterior, el &lt;a href="http://blog.std-io.com/2014/10/patrones-creacionales-object-pool.html"&gt;ObjectPool&lt;/a&gt; que incluye una explicación de los patrones creacionales y su razón de ser.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
El factory method es un patrón de diseño creado para resolver el problema que sucita a la hora de crear instancias de muchos subtipos de clases que tengan particularidades, los detalles que incluyen pueden resultar innecesarios para el cliente que implemente dichas clases, de modo que se engloba el proceso de construir las instancias en una clase constructora.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFYtpFghaYfECpSTd2Fmvz-be7AUU5nofWUJvgalJDB-Bl7usPDB3Jvsmjq_CW0Fn_YIKR0iJ7tM7tzkdbfPNTCLpTcAtsyRzRYjHafrQzxh1hVzczCfNWLO2lIevOHoIozE74FJAJyeE/s1600/Factory_Method.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFYtpFghaYfECpSTd2Fmvz-be7AUU5nofWUJvgalJDB-Bl7usPDB3Jvsmjq_CW0Fn_YIKR0iJ7tM7tzkdbfPNTCLpTcAtsyRzRYjHafrQzxh1hVzczCfNWLO2lIevOHoIozE74FJAJyeE/s1600/Factory_Method.png" height="134" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Pueden ver un ejemplo del factory method en php en el siguiente enlace:&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;a href="http://pastebin.com/jDXNB8de"&gt;http://pastebin.com/jDXNB8de&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Espero que les haya gustado la idea, pd: la imagen fue sacada de wikipedia.&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq8fNBgZYEnV59RYJzpUcSDWl6AUtRmDj-gUehfBVyZY8RTw_sEQNYT4nHHJtslklR6rTohakZJtqH46d1sO9Qs32tTq_PqYQmKyPbr3YtWHVb2PRkTyOPv_OdvBCYnx85fMi0JnjTOLw/s72-c/patrones-de-diseo-de-software-1-638.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Bases de datos: FNBC</title><link>http://console-input-output.blogspot.com/2014/11/bases-de-datos-fnbc.html</link><category>Boyce</category><category>Codd</category><category>Diseño de bases de datos</category><category>FNBC</category><category>forma</category><category>normal</category><category>normalizacion</category><pubDate>Sat, 1 Nov 2014 17:34:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-6519001983053768446</guid><description>Buenas tardes, en esta entrada hablaremos de la FNBC (Forma Normal de Boyce-Codd), recomendamos la lectura de &lt;a href="http://blog.std-io.com/2014/10/bases-de-datos-primera-forma-normal.html"&gt;1FN&lt;/a&gt; &lt;a href="http://blog.std-io.com/2014/10/bases-de-datos-segunda-forma-normal.html"&gt;2FN&lt;/a&gt; &lt;a href="http://blog.std-io.com/2014/10/bases-de-datos-tercera-forma-normal.html"&gt;3FN&lt;/a&gt; y el &lt;a href="http://console-input-output.blogspot.com.ar/2013/09/the-data-base-las-bases-de-datos.html"&gt;artículo inicial&lt;/a&gt;, para tener un panorama de lo que se habla en esta entrada.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9GBQIWjB6iHKNRbE-efxMqKr7GX1SmU-I1jasCCbufN6_WCOFwQU6k5pELmzUDiOGd3EprDagryR53kkFgTJE60uCtOPrALHSbD0bq4f81Al8y4j0Eqe7HD_VEBBpv5qcYXA9aTEjQOw/s1600/200px-FormasNormalesBD.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9GBQIWjB6iHKNRbE-efxMqKr7GX1SmU-I1jasCCbufN6_WCOFwQU6k5pELmzUDiOGd3EprDagryR53kkFgTJE60uCtOPrALHSbD0bq4f81Al8y4j0Eqe7HD_VEBBpv5qcYXA9aTEjQOw/s1600/200px-FormasNormalesBD.png" /&gt;&lt;/a&gt;&lt;/div&gt;
La FNBC es una forma normal que se puede considerar como una extensión de la tercera forma normal, establece un requisito extra.&lt;br /&gt;
&lt;br /&gt;
Una tabla se encuentra en FNBC si y solo si se encuentra en 3FN (por lo que también se encuentra en 2FN y 1FN), y cumple el siguiente requisito:&lt;br /&gt;
&lt;br /&gt;
No deben existir&amp;nbsp;dependencias funcionales no triviales.&lt;br /&gt;
&lt;br /&gt;
Esto quiere decir que todos aquellos campos que tienen campos que dependan de ellos, son claves primarias.&lt;br /&gt;
En otras palabras que la tabla no tenga campos de este tipo sin ser clave primaria, ya que de lo contrario habría una dependencia transitiva, no obstante tenga mucho cuidado al modificar esto ya que puede al hacer claves primarias a campos de este estilo crear un conflicto con la 2FN suponiendo que no todos los campos sean dependientes del mismo o que con ese campo hayan otros campos que no dependan de las demás claves primarias.&lt;br /&gt;
&lt;br /&gt;
Ésta entrada es bastante simple y corta ya que no hay mucho que agregar a la explicación de FNBC, es bastante sencilla y simplemente una extensión de la 3FN. &lt;br /&gt;
&lt;br /&gt;
Un saludo y espero les guste la entrada, en futuras entradas hablaremos de 4FN y 5FN.</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9GBQIWjB6iHKNRbE-efxMqKr7GX1SmU-I1jasCCbufN6_WCOFwQU6k5pELmzUDiOGd3EprDagryR53kkFgTJE60uCtOPrALHSbD0bq4f81Al8y4j0Eqe7HD_VEBBpv5qcYXA9aTEjQOw/s72-c/200px-FormasNormalesBD.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>UML - Comportamiento: Diagrama de actividades o flujo</title><link>http://console-input-output.blogspot.com/2014/10/uml-comportamiento-diagrama-de.html</link><category>actividades</category><category>comportamiento</category><category>diagrama</category><category>diagramas</category><category>Diseñando Software</category><category>flujo</category><category>UML</category><pubDate>Thu, 30 Oct 2014 11:31:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-5858649110833533319</guid><description>Buenas, en la entrada de hoy hablaremos sobre el diagrama de actividades, también conocido como diagrama de flujo, es probable que usted ya lo conozca, es uno de los diagramas preferidos de la gente, aunque en lo personal concidero que para sistemas grandes este diagrama no aporta mucho, complica las cosas salvo que se lo haga muy generalizado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLEA697iKn8eiKunLgWWFCNR0DuQAA67k_OTd4mdqYjb3VyYQNVC9NUyHZvCw3VEbGhcVG2G6w9Ice_4_910jWUUNcAJqb6MFYaLqmpzrxYU5TRBqLnOJSU6tVgxodgrXjqFVjGtXc8VQ/s1600/420px-UML_Diagrams.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLEA697iKn8eiKunLgWWFCNR0DuQAA67k_OTd4mdqYjb3VyYQNVC9NUyHZvCw3VEbGhcVG2G6w9Ice_4_910jWUUNcAJqb6MFYaLqmpzrxYU5TRBqLnOJSU6tVgxodgrXjqFVjGtXc8VQ/s1600/420px-UML_Diagrams.jpg" height="150" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
El diagrama de flujos o actividades es una representación gráfica del proceso que realiza el programa, tiene una cierta cantidad de simbolos que representan situaciones posibles.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Este diagrama representa paso a paso el proceso que lleva a cabo el programa o la tarea en si a realizar. &lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq1qF4RodMeGPBpwZZd-cOdYbGE9vDf2cCh1I3b-zz8kGMvHFeCBn4Jim7zHcRWNBqIuoSEAUASwJNCJF_nRZWUhNaS_W_RYFPAtGrn9hpCxUG1rRqYzexC-tO7aENyWu1BaZ-PLeTuY8/s1600/324px-DiagramaFlujoLampara.svg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq1qF4RodMeGPBpwZZd-cOdYbGE9vDf2cCh1I3b-zz8kGMvHFeCBn4Jim7zHcRWNBqIuoSEAUASwJNCJF_nRZWUhNaS_W_RYFPAtGrn9hpCxUG1rRqYzexC-tO7aENyWu1BaZ-PLeTuY8/s1600/324px-DiagramaFlujoLampara.svg.png" height="200" width="146" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b&gt;Simbología&lt;/b&gt;&lt;br /&gt;
El diagrama comienza y finaliza con un ovalo o elipse que indica el comienzo y el final del diagrama.&lt;b&gt;&lt;br /&gt;&lt;/b&gt;Luego podemos apreciar ractángulos que representan una actividad o procedimiento.&lt;br /&gt;
El rombo representa una desición, una pregunta en particular y la bifurcación hacia dos posibles caminos.&lt;br /&gt;
El círculo representa un enlace de actividades con otras dentro de un procedimiento, el circulo puede conciderarse como un conector.&lt;br /&gt;
Luego se encuentran los triangulos, un triangulo boca arriba representa guardar un documento de forma temporal, mientras que el triangulo boca a bajo se refiere a guardar un documento de forma definitiva. &lt;br /&gt;
&lt;br /&gt;
Hay distintos tipos de diagramas de flujo, podemos apreciar formatos verticales, horizontales o panorámicos, dependiendo de la forma en la que se establezca la disposición y el camino del diagrama.&lt;br /&gt;
&lt;br /&gt;
Podemos apreciar a continuación el diagrama de flujo para un bucle For.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr-QgiWMnFWZAT9_Kb-MzXL9QLmbub_u1T7-2WkvDlDIk-gqfJioS0qXrvC1GkGXT4LwHHZ0et5piBkA0Nu5XgpUYG2_ncaRulNb5KimWbikWXidIJLVreqy2jDcZcRXfW2L_f92oSUUk/s1600/For-loop-diagram.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr-QgiWMnFWZAT9_Kb-MzXL9QLmbub_u1T7-2WkvDlDIk-gqfJioS0qXrvC1GkGXT4LwHHZ0et5piBkA0Nu5XgpUYG2_ncaRulNb5KimWbikWXidIJLVreqy2jDcZcRXfW2L_f92oSUUk/s1600/For-loop-diagram.png" height="320" width="147" /&gt;&lt;/a&gt;&lt;/div&gt;
Un saludo y espero les haya gustado la entrada del día de hoy, pueden ver los diagramas anteriores como el &lt;a href="http://blog.std-io.com/2014/10/uml-estructura-diagrama-de-clases.html"&gt;diagrama de clases&lt;/a&gt; y el de &lt;a href="http://blog.std-io.com/2014/10/uml-comportamiento-diagrama-de-casos-de.html"&gt;casos de uso aquí&lt;/a&gt;.</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLEA697iKn8eiKunLgWWFCNR0DuQAA67k_OTd4mdqYjb3VyYQNVC9NUyHZvCw3VEbGhcVG2G6w9Ice_4_910jWUUNcAJqb6MFYaLqmpzrxYU5TRBqLnOJSU6tVgxodgrXjqFVjGtXc8VQ/s72-c/420px-UML_Diagrams.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Patrones Creacionales: Object Pool</title><link>http://console-input-output.blogspot.com/2014/10/patrones-creacionales-object-pool.html</link><category>desarrollar</category><category>desarrollo</category><category>patron</category><category>patrones</category><category>programacion</category><category>software</category><pubDate>Wed, 29 Oct 2014 15:33:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-215725391050972187</guid><description>En esta entrada hablaremos sobre el patrón creacional Object Pool, recordemos que en la entrada anterior de este hilo vimos una introducción a los patrones en general, pueden apreciarla &lt;a href="http://blog.std-io.com/2014/10/patrones-de-diseno.html"&gt;aquí &lt;/a&gt;(además de ver un índice de patrones)&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_RViCZOhg-jz8dr6NJP20xDA6MJ70e3c29WKAWWNiHWr-9wsYe8ow6ZSTTlCRWKI3H8XqAv4y3260bnlxb0MN20Sr8nafeTx9i7M-4xCipM1IZjOzChxcJcnNAatfsq-Utsb-i0tioz0/s1600/patrones-de-diseo-de-software-1-638.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_RViCZOhg-jz8dr6NJP20xDA6MJ70e3c29WKAWWNiHWr-9wsYe8ow6ZSTTlCRWKI3H8XqAv4y3260bnlxb0MN20Sr8nafeTx9i7M-4xCipM1IZjOzChxcJcnNAatfsq-Utsb-i0tioz0/s1600/patrones-de-diseo-de-software-1-638.jpg" height="150" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
En primera instancia hablaremos sobre los patrones creacionales, son aquellos patrones diseñados para solventar problemas enlazados a la creación o instanciación de objetos.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
El patrón object pool está diseñado para almacenar instancias de los objetos, un cliente del Object Pool, solicita un objeto, el Object Pool lo devuelve, el cliente lo utiliza, y luego se lo devuelve al Object Pool, de modo que éste lo almacena y espera su próxima solicitud, cuando le solicitan el objeto nuevamente, el Object Pool lo devuelve y así continúa el ciclo, la idea de este patrón es reciclar un objeto. Como apreciará la utilización de este patrón implica que un objeto no se construye y destruye varias veces, sino que se recicla.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Pero hay que ser muy conciente de su funcionamiento, ya que es únicamente útil en situaciones donde el costo de crear una instancia sea relativamente alto, a diferencia del costo de mantenerla almacenada, de modo que solo es útil en ocaciones tales como clases de sockets o de recursos gráficos.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Hay situaciones en donde el costo de utilizar este patrón es mayor al costo de no utilizarlo, y hay situaciones en las que es al reves.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Un ejemplo de object pool en php:&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;a href="http://pastebin.com/VEjUpHxN"&gt;http://pastebin.com/VEjUpHxN &lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Saludos, espero les haya gustado la entrada y sigan pendientes de las siguientes entradas.&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_RViCZOhg-jz8dr6NJP20xDA6MJ70e3c29WKAWWNiHWr-9wsYe8ow6ZSTTlCRWKI3H8XqAv4y3260bnlxb0MN20Sr8nafeTx9i7M-4xCipM1IZjOzChxcJcnNAatfsq-Utsb-i0tioz0/s72-c/patrones-de-diseo-de-software-1-638.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Bases de datos: Tercera forma normal</title><link>http://console-input-output.blogspot.com/2014/10/bases-de-datos-tercera-forma-normal.html</link><category>3FN</category><category>bases</category><category>datos</category><category>desarrollo</category><category>Diseño de bases de datos</category><category>Programación</category><pubDate>Tue, 28 Oct 2014 16:57:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-7925639496047538342</guid><description>Buenas tardes lectores, en esta entrada hablaremos sobre la tercer forma normal, del proceso de normalización. Recomiendo completamente la lectura de las entradas anteriores &lt;a href="http://blog.std-io.com/2014/10/bases-de-datos-primera-forma-normal.html"&gt;Primera forma normal&lt;/a&gt;, &lt;a href="http://blog.std-io.com/2014/10/bases-de-datos-segunda-forma-normal.html"&gt;Segunda forma normal&lt;/a&gt; y la entrada de hace casi un año que comenzaba éste hilo de entradas &lt;a href="http://console-input-output.blogspot.com.ar/2013/09/the-data-base-las-bases-de-datos.html"&gt;aquí&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNLbgNhqvw-2ufoKXdteq-vRgxwwo0gxbvfLdX4Pv4F-1vSvou1HjkVoadJaZ6EEtuhq050-aWrGliKNMMZJ6DXpuy3isociRvW-_OJJGMX9yTgAsLtWX2rYBZaHkPJ_tbFNWc1lxmAo4/s1600/200px-FormasNormalesBD.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNLbgNhqvw-2ufoKXdteq-vRgxwwo0gxbvfLdX4Pv4F-1vSvou1HjkVoadJaZ6EEtuhq050-aWrGliKNMMZJ6DXpuy3isociRvW-_OJJGMX9yTgAsLtWX2rYBZaHkPJ_tbFNWc1lxmAo4/s1600/200px-FormasNormalesBD.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;
Recordemos que el proceso de normalización es un proceso sumamente importante que preve problemas futuros con una base de datos cuando la misma adquiera gran cantidad de registros. El proceso consta en verificar y diseñar las distintas tablas para que cumplan los requisitos de cada uno de los niveles (hasta el nivel que queramos llegar), cuando todas las tablas cumplen los requisitos de un nivel, se dice que la base de datos está en ese nivel, de lo contrario hablamos que tales tablas están en ese nivel.&lt;br /&gt;
&lt;br /&gt;
La tercera forma normal es para muchos el final del camino, ya que a no ser que hablemos de una gran base de datos de gran importancia y que pueda darse el caso que se necesiten los demás niveles, la mayoría de las bases de datos que se ven terminan sus tablas en 3FN.&lt;br /&gt;
&lt;br /&gt;
Una tabla está en 3FN si y solo si se encuentra en 2FN, y cumple con las siguientes características: &lt;br /&gt;
&lt;br /&gt;
No existe ninguna dependencia funcional transitiva entre los campos que no son clave.&lt;br /&gt;
&lt;br /&gt;
Primero explicaremos qué es una dependencia funcional transitiva, recordemos que hay campos que dependen de otros, y que en las FN anteriores los campos debían depender de la clave primaria.&lt;br /&gt;
&lt;br /&gt;
La dependencia funcional transitiva ocurre cuando un campo B depende un campo A, y un campo C depende de un campo B, de modo que se asume que el campo C depende transitoriamente del campo A.&lt;br /&gt;
&lt;br /&gt;
A&amp;nbsp; B&amp;nbsp; C, B depende de A, C depende de B, entonces C depende de A.&lt;br /&gt;
&lt;br /&gt;
Veamos la siguiente tabla con los siguientes campos:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;fecha_nacimiento&lt;/b&gt;, edad, conducir &lt;br /&gt;
&lt;br /&gt;
fecha de nacimiento es la clave primaria en nuestra tabla, vemos que con la fecha de nacimiento podemos conocer la edad, y con la edad podemos saber si tiene la suficiente para poder conducir, entonces podemos deducir solo con la fecha de nacimiento si puede conducir o no, esto es una dependencia funcional transitiva.&lt;br /&gt;
&lt;br /&gt;
De modo que una tabla que tenga dependencias de este tipo no está en 3FN, en cambio si la tabla no tiene dependencias transitivas entonces está en 3FN.&lt;br /&gt;
&lt;br /&gt;
Podemos observar claramente si un campo tiene dependencias de este tipo observando que, si un campo que no es clave primaria, depende de otro campo que no es clave primaria, entonces es muy probable que haya una dependencia transitiva (asumiendo que el segundo campo que no es clave primaria si tenga una dependencia sobre una clave primaria.)&lt;br /&gt;
&lt;br /&gt;
Un saludo para todos y espero les haya gustado la entrada. Sigan al tanto para ver nuevas entradas al respecto.&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNLbgNhqvw-2ufoKXdteq-vRgxwwo0gxbvfLdX4Pv4F-1vSvou1HjkVoadJaZ6EEtuhq050-aWrGliKNMMZJ6DXpuy3isociRvW-_OJJGMX9yTgAsLtWX2rYBZaHkPJ_tbFNWc1lxmAo4/s72-c/200px-FormasNormalesBD.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>UML - Comportamiento: Diagrama de casos de uso</title><link>http://console-input-output.blogspot.com/2014/10/uml-comportamiento-diagrama-de-casos-de.html</link><category>casos</category><category>comportamiento</category><category>diagramas</category><category>UML</category><category>uso</category><pubDate>Sun, 26 Oct 2014 11:56:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-3600633668176403731</guid><description>Algunas entradas atras vimos el &lt;a href="http://blog.std-io.com/2014/10/uml-estructura-diagrama-de-clases.html"&gt;diagrama de clases&lt;/a&gt;, y hoy veremos el diagrama de casos de uso de UML, perteneciente a la categoría de diagramas de Comportamiento.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLEA697iKn8eiKunLgWWFCNR0DuQAA67k_OTd4mdqYjb3VyYQNVC9NUyHZvCw3VEbGhcVG2G6w9Ice_4_910jWUUNcAJqb6MFYaLqmpzrxYU5TRBqLnOJSU6tVgxodgrXjqFVjGtXc8VQ/s1600/420px-UML_Diagrams.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLEA697iKn8eiKunLgWWFCNR0DuQAA67k_OTd4mdqYjb3VyYQNVC9NUyHZvCw3VEbGhcVG2G6w9Ice_4_910jWUUNcAJqb6MFYaLqmpzrxYU5TRBqLnOJSU6tVgxodgrXjqFVjGtXc8VQ/s1600/420px-UML_Diagrams.jpg" height="150" width="200" /&gt;&lt;/a&gt; &lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
El diagrama de casos de uso permite establecer de forma gráfica el comportamiento del sistema para con los distintos actores que aparezcan en nuestro sistema.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Un diagrama de casos de uso realizado correctamente permite ver de forma simple y organizada nuestro sistema, de una forma visualmente rápida.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/8/80/UML_diagrama_caso_de_uso.svg/498px-UML_diagrama_caso_de_uso.svg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/80/UML_diagrama_caso_de_uso.svg/498px-UML_diagrama_caso_de_uso.svg.png" height="143" width="200" /&gt;&lt;/a&gt; &lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Este diagrama está compuesto por algunos pocos componentes y resulta de los diagramas más sencillos de realizar, no obstante para gran cantidad de actores puede volverse complejo y dificil de diagramar, bastante extenso.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Lo primero a conciderar en uno de éstos diagramas es la existencia de los actores, los actores son aquellas personas que utilizaran nuestro sistema, no las personas en particular, pero si el tipo de persona, en la imagen anterior vemos como sería un diagrama de un restaurante, los actores en este caso son el chef y el crítico, aunque se podrían agregar muchos más actores tales como el mesero, y los demás clientes regulares, todos los clientes estarían representados por un actor.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Luego tenemos las distintas tareas que se pueden realizar en nuestro sistema, dentro de un circulo, para indicar que tarea realiza cada actor se debe marcar con una linea.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Pueden haber tareas compartidas, pero no pueden existir dos circulos para la misma tarea.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
El objetivo de este diagrama es entonces el de mostrar de forma ordenada las distintas tareas del sistema y quien las realiza, simple y sencillo.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
En lo personal concidero que éste debería ser el primer diagrama que uno realize a la hora de diseñar un sistema, ya que le deja las cosas claras para el resto de los diagramas.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Un saludo lectores! y espero que les haya gustado, &lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLEA697iKn8eiKunLgWWFCNR0DuQAA67k_OTd4mdqYjb3VyYQNVC9NUyHZvCw3VEbGhcVG2G6w9Ice_4_910jWUUNcAJqb6MFYaLqmpzrxYU5TRBqLnOJSU6tVgxodgrXjqFVjGtXc8VQ/s72-c/420px-UML_Diagrams.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Patrones de diseño.</title><link>http://console-input-output.blogspot.com/2014/10/patrones-de-diseno.html</link><category>diseño</category><category>patron</category><category>patrones</category><category>programacion</category><category>software</category><pubDate>Sat, 25 Oct 2014 20:08:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-786531655821396940</guid><description>En esta entrada comenzaremos el hilo de Patrones de Diseño, y comenzaremos hablando sobre una introducción a patrones de diseño, en entradas anteriores hablamos sobre el mal uso que se le da a singleton, y en esta entrada hablaremos sobre los distintos patrones.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq8fNBgZYEnV59RYJzpUcSDWl6AUtRmDj-gUehfBVyZY8RTw_sEQNYT4nHHJtslklR6rTohakZJtqH46d1sO9Qs32tTq_PqYQmKyPbr3YtWHVb2PRkTyOPv_OdvBCYnx85fMi0JnjTOLw/s1600/patrones-de-diseo-de-software-1-638.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq8fNBgZYEnV59RYJzpUcSDWl6AUtRmDj-gUehfBVyZY8RTw_sEQNYT4nHHJtslklR6rTohakZJtqH46d1sO9Qs32tTq_PqYQmKyPbr3YtWHVb2PRkTyOPv_OdvBCYnx85fMi0JnjTOLw/s1600/patrones-de-diseo-de-software-1-638.jpg" height="150" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
El arquitecto &lt;a href="http://es.wikipedia.org/wiki/Christopher_Alexander"&gt;Chritopher Alexander&lt;/a&gt; dijo en su libro:&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;div style="text-align: left;"&gt;
"Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno, además incluye una solución para ese problema, de tal manera que usted pueda usar esa solución un millón de veces y más".&lt;/div&gt;
&lt;/blockquote&gt;
Si bien Christopher hablaba de patrones de edificios, no se aleja mucho de la idea de patrones en la industria del software, cuando un problema aparece una cantidad de veces bastante importante, se define un patrón del problema, y se busca una solución que aplique a todos los casos y casos futuros.&lt;br /&gt;
&lt;br /&gt;
Como anuncia &lt;a href="http://es.wikipedia.org/wiki/Patr%C3%B3n_de_dise%C3%B1o"&gt;wikipedia&lt;/a&gt;, un patrón para serlo debe cumplir ciertas características, una de ellas es que debe comprobar su efectividad resolviendo el mismo problema en situaciones anteriores, y otra es la re-usabilidad, que significa que el patrón debe ser aplicado en futuras ocasiones donde el contexto varíe. &lt;br /&gt;
&lt;br /&gt;
Por lo general un patrón está compuesto por cuatro partes:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;El nombre:&lt;/b&gt; que nos sirve como descripción del problema y la solución que abarca dicho patrón.&lt;br /&gt;
&lt;b&gt;El problema:&lt;/b&gt; el problema que trata de resolver y para el que fue diseñada la solución (por este motivo mi publicación en queja de la utilización del &lt;a href="http://blog.std-io.com/2014/10/la-realidad-de-mvc.html"&gt;patrón mvc en la web&lt;/a&gt;)&lt;br /&gt;
&lt;b&gt;La solución: &lt;/b&gt;además de ser la solución al problema, hay que aclarar que no es específica a una situación en concreto, recordemos que los patrones tratan de resolver problemas que ocurran varias veces en situaciones diferentes, funciona prácticamente como una plantilla.&lt;br /&gt;
&lt;b&gt;La consecuencia:&lt;/b&gt; nos referimos con esto, a los resultados de aplicar el patrón y a los compromisos que conlleva la utilización de dicho patrón.&lt;br /&gt;
&lt;br /&gt;
Los patrones que serán abarcados en las futuras entradas serán los siguientes:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Patrones Creacionales:&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://programador.in/2014/10/patrones-creacionales-object-pool.html"&gt;Object Pool&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://programador.in/2014/11/patrones-creacionales-factory-method.html"&gt;Factory Method&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://programador.in/2014/11/patrones-creacionales-abstract-factory.html"&gt;Abstract Factory&lt;/a&gt;&lt;br /&gt;
Builder&lt;br /&gt;
&lt;a href="http://www.programador.in/2015/02/patrones-creacionales-prototype.html"&gt;Prototype&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.programador.in/2015/02/patron-creacional-singleton.html"&gt;Singleton&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blog.std-io.com/2014/10/la-realidad-de-mvc.html"&gt;Model-View-Controller &lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Patrones Estructurales&lt;/b&gt;&lt;br /&gt;
Adapter&lt;br /&gt;
Bridge&lt;br /&gt;
Composite&lt;br /&gt;
Decorator&lt;br /&gt;
Facade&lt;br /&gt;
Flyweight&lt;br /&gt;
Proxy&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Patrones de comportamiento&lt;/b&gt;&lt;br /&gt;
Chain of Responsibility&lt;br /&gt;
Command&lt;br /&gt;
Interpreter&lt;br /&gt;
Iterator&lt;br /&gt;
Memento&lt;br /&gt;
Observer&lt;br /&gt;
State&lt;br /&gt;
Strategy&lt;br /&gt;
Template Method&lt;br /&gt;
Visitor&lt;br /&gt;
&lt;br /&gt;
Espero que les haya gustado la entrada, y espero verlos leyendo sobre cada patrón a medida que los publique.</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq8fNBgZYEnV59RYJzpUcSDWl6AUtRmDj-gUehfBVyZY8RTw_sEQNYT4nHHJtslklR6rTohakZJtqH46d1sO9Qs32tTq_PqYQmKyPbr3YtWHVb2PRkTyOPv_OdvBCYnx85fMi0JnjTOLw/s72-c/patrones-de-diseo-de-software-1-638.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Un nuevo framework php se avecina (entrevista) @roodaka</title><link>http://console-input-output.blogspot.com/2014/10/un-nuevo-framework-php-se-avecina.html</link><category>codeigniter</category><category>frame</category><category>framework</category><category>PHP</category><category>symphony</category><category>work</category><category>yii</category><pubDate>Fri, 24 Oct 2014 15:56:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-5814634096557119569</guid><description>Buenas tardes lectores, en esta entrada (la nº 100) pensaba hacer algo diferente, por lo que realizaré una entrevista a Cody Roodaka, desarrollador de un framework (PHPmini) orientado a objetos en php, el framework aún no es público pero considero que será un gran framework, que realmente vale la pena ver.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNBQjeqSQPG414fAMaRjg0w2njlc2EZV_rm0a775o6as9duV92NyRM1_IAQetau3XjAfbhQCa98NTemaKmGPPzggUkU1wCBRxpUlMZMUEwln0jmD-cQ4gA8WxQf8dlzdDcKhFE3qaw_xY/s1600/url.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNBQjeqSQPG414fAMaRjg0w2njlc2EZV_rm0a775o6as9duV92NyRM1_IAQetau3XjAfbhQCa98NTemaKmGPPzggUkU1wCBRxpUlMZMUEwln0jmD-cQ4gA8WxQf8dlzdDcKhFE3qaw_xY/s1600/url.png" height="198" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
El framework entre otras prestaciones tiene la capacidad de implementar componentes que den soporte mejorado a las aplicaciones diarias que se desarrollen, y utiliza una versión alterada de MVC.&lt;br /&gt;
&lt;br /&gt;
Sin más pasemos a las preguntas.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;¿Por qué razón se te dio por desarrollar un framework?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
Pues, principalmente por necesidad e inconformidad. Originalmente inicié el Framework habiéndome frustrado en la búsqueda de un núcleo adecuado para tres proyectos personales.&lt;br /&gt;
Requería de algo que me permitiera programar cómodo, pero que no me limite en funcionalidad y flexibilidad, o que represente exceso de consumo de RAM injustificado. No me agradaron completamente los Frameworks más conocidos como CodeIgniter y Kohana, por lo que decidí construir (en primera instancia, de manera privada) el mío propio.&lt;/blockquote&gt;
&lt;br /&gt;
&lt;b&gt;¿Ha sido una tarea dura/larga?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
Pues, si bien no me surgieron problemas serios, el Framework sufrió reescritura tras reescritura, ya sea porque no me convence algo, u olvidé algún concepto, siempre renuevo su código -y la de todos sus componentes- para acercarme más a lo que quiero lograr; algo complejo, ligero y relativamente fácil de usar.&lt;br /&gt;
Algo que he de destacar es que quiero programar sin mirar el código de nadie más. Sí he escuchado, analizado y escrito conceptos complejos de Alexander, Ignacio Rostagno y otros programadores, pero sin mirar su código o preguntarles cómo lo harían. Y no fue hasta que le mostré el progreso a Alexander que mantuve esa ideología. Esto lo hago tanto por mera auto-superación, como por la búsqueda de un funcionar "único".&lt;/blockquote&gt;
&lt;br /&gt;
&lt;b&gt;¿Cuál es la ventaja de tu framework contra los populares frameworks actuales (como yii, codeigniter, etc.)?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
Buena pregunta. Todos son buenas bases para comenzar a programar, Pero muchos dejan atrás extensibilidad, flexibilidad y facilidad de uso por una mayor complejidad. A mi parecer, ese es un error gravísimo ya que la esencia de un framework es reducir el tiempo de desarrollo, y si para comenzar a crear una aplicación tengo que aprender a usar dicho framework como si programara en otro lenguaje, deja de ser redituable.&lt;br /&gt;
Mi punto de vista con respecto a la pregunta en concreto, es que mi framework apunta a ser utilizado con facilidad y comodidad. &lt;/blockquote&gt;
&lt;br /&gt;
&lt;b&gt;¿Cuándo crees que estará publicada al menos la primer versión?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
Mi meta personal es que para Noviembre del corriente año, el Framework ya esté dentro de un repositorio público en Github.&lt;/blockquote&gt;
&lt;br /&gt;
&lt;b&gt;¿Qué nivel de seguridad crees que tenga tu framework para con ataques conocidos como rfi, lfi, sqli, xss, etc.?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
Por suerte, mis conocimientos y amigos en el tema, como Alexander y Ernesto me permiten saber dónde y qué reforzar en materia de Seguridad. He de considerarle, modestias aparte, Seguro.&lt;br /&gt;
De por sí, la estructura del Framework inhibe LFI y RFI, y el funcionamiento de mi librería de bases de datos valida por sí misma todas las entradas.&lt;/blockquote&gt;
&lt;br /&gt;
&lt;b&gt;¿Cuáles crees que sean los puntos débiles de tu framework?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
Siempre hay cosas que mejorar, Alex, lo sabes. Opino que aún está muy verde como para decir "hay una falencia X". Además, no he hecho las pruebas que me permitan saber esa clase de cosas. Por otro lado, supongo que eso saldrá a la luz cuando sea probado por terceros. &lt;/blockquote&gt;
&lt;br /&gt;
&lt;b&gt;¿Cómo maneja las vistas tu framework?, en algunos frameworks como codeigniter no cuentan con gestor de plantillas&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
Las vistas fueron uno de los muchos dolores de cabeza que he tenido. No quería poner a RainTPL y ya, eso no tenía razón de ser. Quería algo más dinámico, algo realmente útil.&lt;br /&gt;
Cuando comencé a plantearme la idea, me enfoqué en la Modularidad, tanto de CSS como de JS para lograr ese anhelado dinamismo. El componente por sí mismo actúa como Gestor de Plantillas, Archivos CSS, JS y de idiomas con una sencilla implementación que, a mi parecer, es muy cómoda.&lt;br /&gt;
Algo a destacar también, es su versatilidad a la hora de trabajar con AJAX.&lt;/blockquote&gt;
&lt;br /&gt;
&lt;b&gt;Para ir cerrando la entrevista, ¿Qué opinas del blog std-io.com? &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
Pues, como siempre dije, el blog reboza de información que supera mis conocimientos. Te has esmerado mucho con su desarrollo y te ha ido estupendamente. Mis más sinceras felicitaciones, amigo.&lt;/blockquote&gt;
&lt;br /&gt;
Agradecemos desde ya tu predisposición a responder nuestras preguntas, y agradecemos la colaboración a nuestro blog.&lt;br /&gt;
&lt;br /&gt;
Muy bien, ahora que respondió nuestras preguntas daré mi franca opinión, tuve la suerte de poder ver el código que está en desarrollo, y en una entrada anterior &lt;a href="http://blog.std-io.com/2014/10/el-gran-problema-de-los-frameworks-en.html"&gt;explicaba por qué los frameworks son horribles&lt;/a&gt;, este framework en particular tiene la flexibilidad necesaria para no contradecir conceptos básicos como lo es la esencia de objetos en poo.&lt;br /&gt;
&lt;br /&gt;
Yo creo que deben probarlo, RainTPL (su gestor de plantillas) cuenta con un sistema de cacheado y además deja una vista clara y limpia, muy ordenada. La forma de manejar los modelos es muy buena, y los controladores no dejan nada que desear. Considero un framework limpio, claro con sus objetivos, minimalista que no consume casi recursos, muy bien estructurado, y recomendable.&lt;br /&gt;
&lt;br /&gt;
Estaré esperando su lanzamiento, y les recomiendo que lo prueben.&lt;br /&gt;
&lt;br /&gt;
Saludos! nos veremos en la próxima entrada :)</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNBQjeqSQPG414fAMaRjg0w2njlc2EZV_rm0a775o6as9duV92NyRM1_IAQetau3XjAfbhQCa98NTemaKmGPPzggUkU1wCBRxpUlMZMUEwln0jmD-cQ4gA8WxQf8dlzdDcKhFE3qaw_xY/s72-c/url.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Bases de datos: Segunda forma normal</title><link>http://console-input-output.blogspot.com/2014/10/bases-de-datos-segunda-forma-normal.html</link><category>2FN</category><category>bases</category><category>datos</category><category>Diseño de bases de datos</category><category>forma</category><category>normal</category><category>normalizacion</category><category>Programación</category><pubDate>Thu, 23 Oct 2014 12:57:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-1831138519960039025</guid><description>En ésta entrada hablaremos sobre la segunda forma normal en el proceso de normalización de bases de datos. Puedes leer la &lt;a href="http://blog.std-io.com/2014/10/bases-de-datos-primera-forma-normal.html"&gt;Primera forma normal&lt;/a&gt;, si no la haz leído te recomiendo hacerlo.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNLbgNhqvw-2ufoKXdteq-vRgxwwo0gxbvfLdX4Pv4F-1vSvou1HjkVoadJaZ6EEtuhq050-aWrGliKNMMZJ6DXpuy3isociRvW-_OJJGMX9yTgAsLtWX2rYBZaHkPJ_tbFNWc1lxmAo4/s1600/200px-FormasNormalesBD.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNLbgNhqvw-2ufoKXdteq-vRgxwwo0gxbvfLdX4Pv4F-1vSvou1HjkVoadJaZ6EEtuhq050-aWrGliKNMMZJ6DXpuy3isociRvW-_OJJGMX9yTgAsLtWX2rYBZaHkPJ_tbFNWc1lxmAo4/s1600/200px-FormasNormalesBD.png" /&gt;&lt;/a&gt;&lt;/div&gt;
Continuamos entonces con el hilo de bases de datos haciendo referencia al proceso de normalización, algo que es casi fundamental a la hora de diseñar una base de datos es tener en cuenta el tema de normalización.&lt;br /&gt;
&lt;br /&gt;
La segunda forma normal hace referencia a la dependencia funcional absoluta, sobre todo cuando haya más de una clave primaria, habíamos visto que para estar en 1FN era necesario que todos los campos sean directamente dependientes de la clave primaria.&lt;br /&gt;
&lt;br /&gt;
Primero, una tabla está en 2FN si y solo si la misma se encuentra en 1FN y cumple con el siguiente requisito:&lt;br /&gt;
&lt;br /&gt;
los atributos que no forman parte de ninguna clave dependen de forma 
completa de la clave principal. Es decir que no existen dependencias 
parciales. (Todos los atributos que no son clave principal deben 
depender únicamente de la clave principal).&lt;br /&gt;
&lt;br /&gt;
Esto quiere decir, que si tienes dos claves primarias, es necesario que cada campo de la tabla que no sea clave primaria dependa de todas las claves primarias, si un campo solo depende de una o algunas (pero no todas) las claves primarias ese campo es erróneo.&lt;br /&gt;
&lt;br /&gt;
Imaginemos una tabla con los siguientes campos:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;id_proyecto dni_empleado&lt;/b&gt; horas_trabajadas nombre_empleado&lt;br /&gt;
&lt;br /&gt;
(donde dni_empleado e id_proyecto son claves primarias)&lt;br /&gt;
como podrán apreciar, las horas trabajadas en el proyecto son dependientes del id del proyecto y del dni del empleado, no podemos saber las horas trabajadas únicamente teniendo el id_proyecto o el dni_empleado, ya que no podremos saber con uno solo de esos cuantas horas trabajó en ese proyecto, por lo que ese campo es correcto, depende de todas las claves primarias de la tabla y no tiene dependencias parciales, pero veamos el campo nombre_empleado, el mismo es erróneo, ya que depende del dni_empleado pero no tiene ninguna dependencia con id_proyecto (no tiene nada que ver el nombre de un empleado con el id de un proyecto) de modo que ese campo no debe estar en esa tabla para que esa tabla esté en 2FN, ya que tiene dependencias parciales.&lt;br /&gt;
&lt;br /&gt;
Un saludo para todos los lectores y espero les haya gustado la explicación breve y simple de 2FN, sigan pendiente del blog para ver las siguientes formas normales.</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNLbgNhqvw-2ufoKXdteq-vRgxwwo0gxbvfLdX4Pv4F-1vSvou1HjkVoadJaZ6EEtuhq050-aWrGliKNMMZJ6DXpuy3isociRvW-_OJJGMX9yTgAsLtWX2rYBZaHkPJ_tbFNWc1lxmAo4/s72-c/200px-FormasNormalesBD.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Calidad en desarrollo de software (Paper)</title><link>http://console-input-output.blogspot.com/2014/10/calidad-en-desarrollo-de-software-paper.html</link><category>arte</category><category>calidad</category><category>criterios</category><category>Diseñando Software</category><category>El arte de programar</category><category>pdf</category><category>Programación</category><category>programar</category><category>software</category><pubDate>Wed, 22 Oct 2014 14:58:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-6236678749769304373</guid><description>Bienvenidos lectores! hoy les traigo un paper en formato pdf relacionado con calidad en desarrollo de software, la idea de este pdf es agrupar algunas de mis entradas (quizá las más importantes) relacionadas con el hilo "El arte de programar".&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0HDPAtF8_sCIJ_OroKXRPzgu3rPskxfHkQ01yVWlAC5Q5BiVzUHjlAlxrKjEIk_h4gxS5x4IkGnzDb3B96ZPkVf7DyVv7cn7noll0cL2q0fctYLf16BzPpqP6G0MzLLX6WPAkwJ0wX2A/s1600/Captura+de+pantalla+2014-10-22+00.15.55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0HDPAtF8_sCIJ_OroKXRPzgu3rPskxfHkQ01yVWlAC5Q5BiVzUHjlAlxrKjEIk_h4gxS5x4IkGnzDb3B96ZPkVf7DyVv7cn7noll0cL2q0fctYLf16BzPpqP6G0MzLLX6WPAkwJ0wX2A/s1600/Captura+de+pantalla+2014-10-22+00.15.55.png" height="200" width="148" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Éste pdf reúne varias cosas, conceptos muy importantes a tener en cuenta, y por supuesto desde el punto de vista del software como actividad económica, agrupando las razones por las que aplicar cada criterio tanto así como una visión industrial de lo que todos conocemos como programación.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Programación como actividad económica, una visión del software como un trabajo.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Criterios de calidad, los criterios generales para medir cuándo un código es de calidad.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Calidad y balance, cuando corresponde aplicar los criterios y por qué.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Dificultades de aplicar calidad, existiendo la calidad por qué no es tan sencillo aplicarla y hay tan poco código de calidad abierto al público.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Por supuesto incluye una descripción detallada de cada criterio de calidad en particular, además una explicación extra para cada uno, y lecturas complementarias.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Recomendamos leer todo el hilo del Arte de programar (&lt;a href="http://blog.std-io.com/p/hilo-de.html"&gt;véase indice&lt;/a&gt;) si te gustó el pdf.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
También comentamos que el próximo pdf estará relacionado con el proceso de normalización y ya se encuentra en el laboratorio de corrección de documentos, esperando los ultimos ajustes para ser publicado.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&amp;nbsp;&lt;a href="https://www.dropbox.com/s/h2w4i0amv2i2epz/Calidad%20en%20desarrollo%20de%20software.pdf?dl=0"&gt;Descargar PDF aquí&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Para cerrar la entrada nos gustaría que opinara sobre ¿qué tema te gustaría que publicaramos nuevas entradas?, envía tu sugerencia a alexander171294@gmail.com, o a nuestro twitter &lt;a href="https://www.twitter.com/std_io"&gt;@std_io&lt;/a&gt;, también puedes comentarlo en ésta entrada.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Un saludo para todos los lectores!&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0HDPAtF8_sCIJ_OroKXRPzgu3rPskxfHkQ01yVWlAC5Q5BiVzUHjlAlxrKjEIk_h4gxS5x4IkGnzDb3B96ZPkVf7DyVv7cn7noll0cL2q0fctYLf16BzPpqP6G0MzLLX6WPAkwJ0wX2A/s72-c/Captura+de+pantalla+2014-10-22+00.15.55.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author><enclosure length="-1" type="application/json" url="https://www.dropbox.com/s/h2w4i0amv2i2epz/Calidad%20en%20desarrollo%20de%20software.pdf?dl=0"/></item><item><title>UML - Estructura: Diagrama de clases</title><link>http://console-input-output.blogspot.com/2014/10/uml-estructura-diagrama-de-clases.html</link><category>desarrollar</category><category>diagramas</category><category>Diseñando Software</category><category>Programación</category><category>UML</category><pubDate>Tue, 21 Oct 2014 14:01:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-1421843509977158143</guid><description>Buenas lectores, hoy hablaremos de UML (&lt;b&gt;Lenguaje Unificado de Modelado&lt;/b&gt;) en particular sobre el diagrama de clases. UML se divide en tres grandes grupos de diagrama (Estructura, Comportamiento, Interacción) y veremos cada diagrama de cada grupo a lo largo de las futuras entradas. En particular recomiendo leer la entrada introductoria al tema &lt;a href="http://blog.std-io.com/2013/09/uml-lo-que-se-debe-conocer-antes-de.html"&gt;aquí&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJaeuZtEBrulA2kS6342p1C19mE6wxFb1dRSi0_cPH57xS9CXwGxo3_vC5QsjpgWdD4kkfi2NslEZwH4ATJ_BycodiGlPRFZRyyvhYegGQhKzFI3j8s4esEAXPxoC0tZ-Qg1h73pM9OH4/s1600/420px-UML_Diagrams.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJaeuZtEBrulA2kS6342p1C19mE6wxFb1dRSi0_cPH57xS9CXwGxo3_vC5QsjpgWdD4kkfi2NslEZwH4ATJ_BycodiGlPRFZRyyvhYegGQhKzFI3j8s4esEAXPxoC0tZ-Qg1h73pM9OH4/s1600/420px-UML_Diagrams.jpg" height="150" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
En primera instancia tengo que aclarar que es uno de los diagramas que más me gustan y uno de los pocos que realmente utilizo, no es precisamente el primero a realizar, pero es bueno que conozcan su existencia desde el principio.&lt;br /&gt;
&lt;br /&gt;
El diagrama de clases representa las clases que tendrá nuestro sistema (siempre y cuando el sistema sea orientado a objetos), creando una visión simple y sencilla de las distintas clases del sistema, podemos apreciar en la siguiente imagen extraída de wikipedia como se ve un diagrama de clases.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/2/24/Diagrama_de_clases.svg/800px-Diagrama_de_clases.svg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/24/Diagrama_de_clases.svg/800px-Diagrama_de_clases.svg.png" height="155" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&amp;nbsp;Cada clase se ve representada por un recuadro el cual en su cabecera debe estar su nombre en un recuadro interno, luego en el siguiente recuadro interno se encuentra la lista de atributos de la clase, (propiedades) los cuales deben su nombre estar precedido por un + o - dependiendo si son públicos o privados, en los anteriores casos la primer letra debe estar en mayusculas, luego sigue la lista de funciones en un recuadro interno nuevo, también deben ser precedidos por un + o - dependiendo si son publicos o privados, el +/-nombre_funcion() debe tener ese formato, se deben agrupar aquellas funciones publicas por un lado y privadas por el otro escribiendo primero los púlbicos y luego los privados, lo mismo ocurre con las propiedades. De esta forma se representan las distintas clases.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Ahora veremos las relaciones que hay entre las clases y como se representan, usaremos la imagen de arriba para especificar de que hablamos.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Las clases pueden tener relaciones simples como lo vemos entre la clase universidad y trabajador, al lado de la tabla trabajador hay un 1 lo que significa que esa clase esta relacionada de forma que solo 1 de esas pueda estar relacionada con una universidad, de modo que un trabajador pueda estar relacionado con una sola universidad y no más de una. En cambio el asterisco al costado de universidad indica que en esa relación la universidad en si puede tener 0, 1 o la cantidad que sea de trabajadores, también se podría escribir 1..* lo que significaría que podría tener 1 o más trabajadores, 0..1 por lo que podría tener ninguno o un solo trabajador, etc. Para relaciones simples la dirección se indica con una flecha sobre la linea de relación.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
La siguiente relación que veremos es la que indica una flecha vacía (sin relleno) como se puede apreciar entre trabajador y persona, y estudiante y persona, ambas indican una flecha hacia persona, esta relacion representa "es un" quiere decir, trabajador es una persona, estudiante es una persona, o entre doctor y trabajador, doctor es un trabajador, en este caso la dirección está indicada por la flecha vacía, también puede significar "es un tipo de".&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Luego tenemos la relación "tiene un" conocida como agregación, está representada por un diamante vacío, en el diagrama podemos ver como trabajador tiene un departamento.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&amp;nbsp;Luego para continuar tenemos composición, es una relación que representa el todo/parte, podemos ver entonces como funciona en la relación departamento/universidad, todos los departamentos pertenecen a una universidad.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
La flecha con la linea punteada, es una relación de dependencia donde una clase depende de la otra, como por ejemplo en la imagen doctor depende de departamento.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Eso es todo para esta entrada y espero les haya gustado, un saludo!&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJaeuZtEBrulA2kS6342p1C19mE6wxFb1dRSi0_cPH57xS9CXwGxo3_vC5QsjpgWdD4kkfi2NslEZwH4ATJ_BycodiGlPRFZRyyvhYegGQhKzFI3j8s4esEAXPxoC0tZ-Qg1h73pM9OH4/s72-c/420px-UML_Diagrams.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Bases de datos: Primera forma normal</title><link>http://console-input-output.blogspot.com/2014/10/bases-de-datos-primera-forma-normal.html</link><category>1FN</category><category>bases</category><category>datos</category><category>Diseño de bases de datos</category><category>normalizacion</category><category>Programación</category><pubDate>Mon, 20 Oct 2014 15:10:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-1656573198829104171</guid><description>En ésta entrada explicaré la primera forma normal para que sus bases de datos queden normalizadas y sean de calidad. Pero antes quiero enlazar la &lt;a href="http://blog.std-io.com/2013/09/the-data-base-las-bases-de-datos.html"&gt;entrada inicial de éste hilo de entradas&lt;/a&gt;, hace ya casi un año estaba publicando la primera entrada de éste hilo y no es hasta hoy que puedo continuarlo, ahora que terminé las entradas referentes al Arte de Programar (al menos hasta el momento) puedo dedicar nuevas entradas a cosas importantes también como lo es crear una base de datos normalizada.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNLbgNhqvw-2ufoKXdteq-vRgxwwo0gxbvfLdX4Pv4F-1vSvou1HjkVoadJaZ6EEtuhq050-aWrGliKNMMZJ6DXpuy3isociRvW-_OJJGMX9yTgAsLtWX2rYBZaHkPJ_tbFNWc1lxmAo4/s1600/200px-FormasNormalesBD.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNLbgNhqvw-2ufoKXdteq-vRgxwwo0gxbvfLdX4Pv4F-1vSvou1HjkVoadJaZ6EEtuhq050-aWrGliKNMMZJ6DXpuy3isociRvW-_OJJGMX9yTgAsLtWX2rYBZaHkPJ_tbFNWc1lxmAo4/s1600/200px-FormasNormalesBD.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
Les recomiendo ver &lt;a href="http://blog.std-io.com/2013/09/the-data-base-las-bases-de-datos.html"&gt;ésta entrada&lt;/a&gt; del año pasado para tener un panorama de lo que hablaremos aquí.&lt;br /&gt;
&lt;br /&gt;
No obstante comenzaré haciendo la introducción, y es que si hablamos de normalización usted debe comprender la importancia de normalizar su base de datos, cuando usted diseña un sistema x, y diagrama la base de datos, es probable que cometa una cierta cantidad de errores estúpidos que lo lleven a tener una base de datos inestable, inconsistente, y con varios problemas.&lt;br /&gt;
&lt;br /&gt;
Normalizar la base de datos es como comprar un seguro a largo plazo, con una base de datos normalizada usted se asegura que en un futuro no tendrá problemas típicos de las bases de datos, cuando usted tenga la base de datos rellena de datos.&lt;br /&gt;
&lt;br /&gt;
Tenga en cuenta la importancia de normalizar la base de datos al comienzo antes de tener datos cargados, y es que si luego tenemos la base de datos rellena de registros, hacer cambios puede conllevar la ardua tarea de alterar una cantidad significativa de registros, por lo que llevará a un costo muy superior al que puede tener normalizar la base de datos de entrada.&lt;br /&gt;
&lt;br /&gt;
Para poder comprenderlo puede ver la imagen del post, notará que hay niveles de normalización, y cuanto más superior sea el nivel de normalización de la base de datos mejor será su base de datos.&lt;br /&gt;
&lt;br /&gt;
El primer nivel es el 1FN. Debe saber que cuando hablamos de normalizar la base de datos, nos referimos a normalizar cada una de las tablas de la base de datos, y todas estas reglas o formas normales son para procesarlas en tablas particulares.&lt;br /&gt;
&lt;br /&gt;
Una tabla está en 1FN si y solo si:&lt;br /&gt;
&lt;br /&gt;
Una tabla está en Primera Forma Normal si:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Todos los atributos son atómicos. Un atributo es atómico si los elementos del dominio son indivisibles, mínimos.&lt;/li&gt;
&lt;li&gt;La tabla contiene una clave primaria única.&lt;/li&gt;
&lt;li&gt;La clave primaria no contiene atributos nulos.&lt;/li&gt;
&lt;li&gt;Los Campos no clave deben identificarse por la clave (Dependencia Funcional)&lt;/li&gt;
&lt;/ul&gt;
Analicemos un poco lo que quiere decir, el primer punto, los atributos son atómicos, significa que un campo no posee varios valores, solo posee uno y solo un valor, y que ese valor no puede ser dividido en dos campos, en otras palabras con un ejemplo sencillo, podemos decir que un campo "Nombre y Apellido" no es atómico ya que cuenta con dos valores tales como el nombre y el apellido, y puede ser dividido en dos campos, uno llamado nombre y el otro llamado apellido.&lt;br /&gt;
&lt;br /&gt;
El segundo punto hace referencia a que la tabla tiene una clave primaria que es clave primaria porque si valor no se puede repetir y es único, lo que quiere decir es que no habrá dos registros con el mismo valor para ese campo llamado clave primaria.&lt;br /&gt;
&lt;br /&gt;
El tercer punto es bastante obvio, la clave primaria no puede contener un valor nulo, como puede pasar en otros campos, en la clave primaria no puede haber un valor nulo, tiene que haber un valor x.&lt;br /&gt;
&lt;br /&gt;
El cuarto punto hace referencia a que cada campo debe estar basado en la clave primaria, en otras palabras, supongamos que tengo una tabla usuarios y yo pongo de clave primaria color de pelo, y el resto de los campos son dni, nombre, apellido, etc. esto sería completamente erróneo, ya que por el color de pelo no puedo deducir el nombre, el apellido y el dni de la persona, en cambio si pusiera de clave primaria DNI, esto sería correcto ya que el nombre, el apellido y el color de pelo se puede obtener basándose en el DNI, entonces todos los demás campos están identificados por esa clave primaria.&lt;br /&gt;
&lt;br /&gt;
Esto es, a grandes rasgos, los requisitos que debe tener una tabla para conciderarse estar en 1FN. &lt;br /&gt;
&lt;br /&gt;
Cada forma normal tiene un objetivo, el objetivo de esta forma normal es eliminar los valores repetidos dentro de una Base de Datos.&lt;br /&gt;
&lt;br /&gt;
Un saludo para todos los lectores y espero les agrade la entrada. </description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNLbgNhqvw-2ufoKXdteq-vRgxwwo0gxbvfLdX4Pv4F-1vSvou1HjkVoadJaZ6EEtuhq050-aWrGliKNMMZJ6DXpuy3isociRvW-_OJJGMX9yTgAsLtWX2rYBZaHkPJ_tbFNWc1lxmAo4/s72-c/200px-FormasNormalesBD.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item><item><title>Java en android, ¿Una decisión difícil?</title><link>http://console-input-output.blogspot.com/2014/10/java-en-android-una-desicion-dificil.html</link><category>críticas y aclaraciones</category><category>desarrollo</category><category>programacion</category><category>Programación</category><category>programar</category><category>software</category><category>verdad</category><pubDate>Sat, 18 Oct 2014 21:56:00 -0300</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5672268322501258694.post-181656914262899624</guid><description>Buenas tardes lectores, hoy les traigo otra entrada relacionada con el tema de los lenguajes de programación, java en android, ¿por qué lo eligieron?, empecé con las razones por las que uso php, luego hablé un poco de visual basic, y ahora hablaré sobre Java.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3Jw5lfIBllzVDRy66QVZUaYNnxVPKR-6EGbnhyADaR-O0cCfufHi_FzwamtQcAJHQhG1jHcYW1dI9-vA5X07nAV0eOK4XG7E97q0BcbOQPjtoB20InFPzgkMZqc_SaG_frmw7rM6gIbc/s1600/ANDROID.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3Jw5lfIBllzVDRy66QVZUaYNnxVPKR-6EGbnhyADaR-O0cCfufHi_FzwamtQcAJHQhG1jHcYW1dI9-vA5X07nAV0eOK4XG7E97q0BcbOQPjtoB20InFPzgkMZqc_SaG_frmw7rM6gIbc/s1600/ANDROID.png" height="199" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
Hacía varios días que esta entrada estaba a la espera de ser redactada, y recién hoy que estaba husmeando un poco el framework de un amigo que realmente se ve muy muy prometedor, tengo que admitir que si su framework ve la luz mi publicación de &lt;a href="http://blog.std-io.com/2014/10/el-gran-problema-de-los-frameworks-en.html"&gt;los frameworks son una basura&lt;/a&gt; tendrá que ser retractada, analizando su código me surgieron algunas preguntas sobre como encararía ciertos aspectos, que para avisarles me dejó realmente satisfecho, al final de la charla surgió el gran dilema del a industria y quizá el soporte en el cual está apoyada esta entrada. ¿Mi código debe ser a prueba de idiotas, o para gente que tenga conciencia de lo que programa?&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;La respuesta más rápida que uno se pudiera figurar es "pues lo hago para programadores que tengan una idea de lo que hacen, si programan horrible no es mi culpa", pero entonces podemos analizar las distintas posturas que se tomaron en la industria del software.&lt;br /&gt;
&lt;br /&gt;
Todos los lectores de mi blog sabrán que todas las entradas aquí son desde el punto de vista de software para desarrollo de carácter industrial, de modo que se trata de que las mismas sigan como mínimo apoyadas en los criterios de calidad que se &lt;a href="http://blog.std-io.com/p/hilo-de.html"&gt;explican aquí&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Ahora bien, todos mis códigos o los que se evalúan en este blog tienen la tendencia a ser vendidos o utilizados por terceros, por lo que esta es una de las preguntas más serias, esos terceros ¿tengo que prever que sean unos estúpidos o programadores de verdad?, veamos entonces el panorama, tenemos lenguajes como C++ que realmente no están diseñados para suponer que el que programa no tiene idea de nada, por lo que los programas en C++, unos cuantos tienden a ser bastante inestables, o con problemas, salvo que su programador hubiese tenido bastante bien claro los conceptos básicos de calidad, entre otras cosas y que no se le escaparan muchas cosas, muchos lenguajes de ese tipo son ásperos y realmente pueden generar aplicaciones inestables, que no solo le afecten al funcionamiento del programa sino de la plataforma sobre la que corren.&lt;br /&gt;
&lt;br /&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:OfficeDocumentSettings&gt;
  &lt;o:AllowPNG/&gt;
 &lt;/o:OfficeDocumentSettings&gt;
&lt;/xml&gt;&lt;![endif]--&gt;

&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"&gt;
&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES;"&gt;En una época
y actualmente el sistema de Microsoft (Windows) fue considerado muy poco
estable y con muchos problemas, esto es debido en parte (y solo en parte) a la
cantidad de programas que existen y que son instalados en éste sistema, y entre
tantos siempre hay alguno programado por un inútil sin vida que pasa su tiempo
escribiendo líneas de código sin pensar. Por eso microsoft cuando lanzó su
propio lenguaje que lo representara implementó ciertas medidas preventivas para
no aumentar aún más el caos en su plataforma, creando un lenguaje simple y
fiable, para que sus aplicaciones no pudieran causar estragos, eso es parte de
lo que es visual basic (como vimos en entradas anteriores hay otras
orientaciones de visual basic pero todas apuntan directamente al caso donde
sean programadores de poco conocimiento) aunque vuelvo a reiterar como en
entradas anteriores no quiero que se me mal interprete asumiendo que yo digo
que los programadores de visual basic no tienen conocimiento, solo quiero
expresar que el público para el que fue diseñado cumple con estas características,
pero no necesariamente todos los programadores del lenguaje cumplen dichas
características. Pero esta lenguaje no es el único y por evidencia no todos los
programadores para windows usan visual basic como main lenguaje.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"&gt;
&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES;"&gt;Pero
entonces aquí surge una pregunta que quizá la explicación de arriba pueda
responderla, por qué google (si bien compró android a una empresa de terceros)
mantuvo como lenguaje único del sistema y principal a Java, veamos el historial
de google, analicemos sus propios servicios, sus programas, la gran mayoría y
cuando se puede los hacen en python, una empresa que considera como su lenguaje
principal a python, ¿por qué razón dejaría que uno de sus grandes productos use
java?, aquí es cuando todos los amantes de java dicen a coro "porque java
es lo mejor", si java fuera lo mejor que existe, ¿por que una empresa como
google tendría todos sus servicios más importantes en python? ¿por qué daría
cursos y promovería python? y sobre todo considerando que tienen su propio
lenguaje. No seamos hipócritas, java no es ni de cerca el mejor lenguaje tiene
miles de defectos y no entraré en detalle porque me iré del hilo principal demasiado.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"&gt;
&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES;"&gt;Java es una
de esas grandes decisiones de la industria, java tiene algo que google
necesitaba en su sistema, google no podía correr con el mismo problema que tuvo
microsoft con windows, no podían quedar como estúpidos sacando un sistema
completamente inestable, tenían que asegurarse que todos los programadores que
crearan aplicaciones para android no metieran la pata y le hicieran inestable,
no podía tener esa fama, entonces tomaron la decisión de usar java, ya que java
tiene la máquina virtual, un entorno controlado para que las aplicaciones
corrieran, un entorno controlado por ellos que les permiten que si una
aplicación hace un consumo un poquito fuera de los limites, esa aplicación sea
finalizada, evitando cosas como el exceso de consumo de recursos.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"&gt;
&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES;"&gt;Es una
simple razón que le permite a la gente de google despreocuparse de que aparezca
un programador idiota que consuma recursos de forma totalmente exagerada y
tirara el sistema por los aires, ellos pueden controlar ese entorno y
asegurarse de que las cosas no se salgan de la raya, dejando al sistema en un
entorno aparte libre de sanguijuelas, monstruos y de mases.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"&gt;
&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES;"&gt;Entonces
podemos concluir que java es una decisión de google que no tiene nada que ver
con la calidad del lenguaje, solo les asegura que aquellos que hagan
aplicaciones para su sistema no les pongan las cosas inestables. La calidad son
dos mangos a parte y realmente dudo mucho que pensaran en poner un lenguaje de
calidad a la hora de elegir este lenguaje.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"&gt;
&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES;"&gt;Recordemos
también que las aplicaciones hechas por terceros son algo sumamente importante
para un sistema, ya sea móvil o de escritorio, porque representa las utilidades
extras y agregados que se le pueden prestar al usuario, y ganar puntos contra
la competencia, por lo que permitir que para tu plataforma no solo programen gurús,
sino también programadores medios, y hasta programadores estúpidos, aumenta la
cantidad de desarrolladores, futuras aplicaciones y aumenta los puntos para con
su competencia, dando así una ventaja estratégica muy importante.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"&gt;
&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES;"&gt;Saludos!&lt;/span&gt;&lt;/div&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:HyphenationZone&gt;21&lt;/w:HyphenationZone&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;ES&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:EnableOpenTypeKerning/&gt;
   &lt;w:DontFlipMirrorIndents/&gt;
   &lt;w:OverrideTableStyleHps/&gt;
  &lt;/w:Compatibility&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"/&gt;
   &lt;m:brkBin m:val="before"/&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;
   &lt;m:smallFrac m:val="off"/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val="0"/&gt;
   &lt;m:rMargin m:val="0"/&gt;
   &lt;m:defJc m:val="centerGroup"/&gt;
   &lt;m:wrapIndent m:val="1440"/&gt;
   &lt;m:intLim m:val="subSup"/&gt;
   &lt;m:naryLim m:val="undOvr"/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:"Tabla normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-parent:"";
 mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
 mso-para-margin-top:0cm;
 mso-para-margin-right:0cm;
 mso-para-margin-bottom:10.0pt;
 mso-para-margin-left:0cm;
 line-height:115%;
 mso-pagination:widow-orphan;
 font-size:11.0pt;
 font-family:"Calibri","sans-serif";
 mso-ascii-font-family:Calibri;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Calibri;
 mso-hansi-theme-font:minor-latin;
 mso-bidi-font-family:"Times New Roman";
 mso-bidi-theme-font:minor-bidi;
 mso-fareast-language:EN-US;}
&lt;/style&gt;
&lt;![endif]--&gt;&lt;span data-fb="alexander171294" data-name="Alexander Eberle" data-twitter="std_io" id="datosperfil" style="display: none;"&gt;Soy amante de la programación, me gusta ver y crear cosas nuevas... Me gusta el metal, rock, y también daftpunk jajaja&lt;/span&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3Jw5lfIBllzVDRy66QVZUaYNnxVPKR-6EGbnhyADaR-O0cCfufHi_FzwamtQcAJHQhG1jHcYW1dI9-vA5X07nAV0eOK4XG7E97q0BcbOQPjtoB20InFPzgkMZqc_SaG_frmw7rM6gIbc/s72-c/ANDROID.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><author>noreply@blogger.com (Alexander Eberle Renzulli)</author></item></channel></rss>