<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AmarellOcio &#187; Bases de Datos</title>
	<atom:link href="http://blog.amarello.com.mx/category/bases-de-datos/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.amarello.com.mx</link>
	<description>Tecnologías de información, seguridad, ciencia y entretenimiento</description>
	<lastBuildDate>Mon, 23 Apr 2012 16:00:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Modelo Entidad Relación con el menor número de cruces</title>
		<link>http://blog.amarello.com.mx/2009/01/01/modelo-entidad-relacion-menor-numero-cruces/</link>
		<comments>http://blog.amarello.com.mx/2009/01/01/modelo-entidad-relacion-menor-numero-cruces/#comments</comments>
		<pubDate>Fri, 02 Jan 2009 02:40:23 +0000</pubDate>
		<dc:creator>Eduardo</dc:creator>
				<category><![CDATA[Algoritmia y programación]]></category>
		<category><![CDATA[Aplicaciones Web]]></category>
		<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[diagrama entidad relacion]]></category>
		<category><![CDATA[diagrama er]]></category>
		<category><![CDATA[dibujado ortogonal]]></category>
		<category><![CDATA[gml]]></category>
		<category><![CDATA[ogdf]]></category>
		<category><![CDATA[software libre]]></category>

		<guid isPermaLink="false">http://blog.amarelloartis.com/?p=588</guid>
		<description><![CDATA[Problema Hace ya varios meses al estar desarrollando un software bastante complejo, que requería una base de datos muy grande, nos enfrentamos al problema de cómo poder visualizar un diagrama entidad-relacion de la forma más legible posible. Intentamos con MySQL Workbench, el cual nos dibujó las tablas con sus relaciones pero desgraciadamente todas juntas y [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Problema</strong></p>
<p>Hace ya varios meses al estar desarrollando un software bastante complejo, que requería una base de datos muy grande, nos enfrentamos al problema de cómo poder visualizar un diagrama entidad-relacion de la forma más legible posible. Intentamos con MySQL Workbench, el cual nos dibujó las tablas con sus relaciones pero desgraciadamente todas juntas y teníamos que acomodarlas a mano; lo cual además de llevar tiempo, es difícil, pues llegar a un modelo que tenga el menor número de cruces y sea fácil de entender es una tarea casi imposible. Así que buscamos en Google un programa que pudiera dibujar de una forma estética nuestra base de datos, y aunque algunos lo prometían ninguno lo hacía.</p>
<p><strong>Historia</strong></p>
<p>Buscamos un algoritmo que se encargara de distribuir gráficas con el menor número de cruces, lo que se conoce como <em>aplanamiento de gráficas</em> y encontramos uno llamado <strong>dibujado ortogonal</strong>, que nos pareció el más estético para dibujar un digrama EER. Encontramos gran cantidad de documentos de investigación que hacían alusión a un algoritmo publicado por Kandinsky, pero en ninguna parte pudimos encontrar el pseudo código o algún documento más detallado de ese algoritmo. Seguimos buscando y encontramos otros programas que servían para acomodar diagramas UML y algunos con el menor número de cruces. Notamos que muchos usaban un formato de archivo llamado <a href="http://www.infosun.fim.uni-passau.de/Graphlet/GML/">GML y encontramos su especificación</a>. GML significa <strong>Graphics Modeling Language</strong> y fue un poco difícil de encontrar porque hay otro formato de archivo con el mismo nombre que siginifica Geographic Modeling Language.</p>
<p>Después de un día de búsqueda encontramos un framework para diferentes tipos de dibujado de gráficas llamado <a href="http://www.ogdf.net/ogdf.php">OGDF</a>, librería escrita en C++ y de código abierto. Para nuestra sorpresa esa librería recibe un archivo GML para procesarlo y devuelve otro de igual formato procesado.</p>
<p><strong>Idea</strong></p>
<p>Al ver que no había un programa que te hiciera todo el proceso completo, desde conectarse a la base de datos, obtener su estructura, procesarla, graficarla con el menor número de cruces y presentarla tuvimos una idea:</p>
<p>¿Por qué no hacer un programa que obtenga la estructura de la base de datos junto con sus relaciones, genere un archivo .GML y lo pase a un programa que use la librería OGDF, luego lea el archivo procesado y dibuje las tablas en la posición adecuada?</p>
<p><strong>Nuestra solución</strong></p>
<p><strong>- Java</strong><br />
Inicialmente lo solucionamos haciendo un programa escrito en Java, que se conectara a la base de datos MySQL, obtuviera su estructura mediante <code>SHOW TABLES</code>, <code>DESCRIBE tabla</code>, y con el código de creación de la tabla obtuviera las llaves foráneas y se encargara de relacionar las tablas y generar un archivo GML válido con la estructura y las relaciones.</p>
<p><strong>- C++</strong><br />
Ahora mirando en OGDF notamos que había un <a href="http://www.ogdf.net/ogdf.php/tech:howto:plzl">How To</a>, lo copiamos, modificamos un poco y compilamos, generando un binario que lee dos parámetros, el archivo fuente y la ruta del archivo GML a donde queremos guardar el procesamiento.</p>
<p><strong>- Conectar Java y C++</strong><br />
Nos dispusimos a conectar los dos programas, llamando al binario de OGDF desde nuestro programa en Java y luego nuevamente leer el GML, <em>parsearlo</em> y relacionar con las tablas que estaban en memoria.</p>
<p>Hasta este punto ya teníamos solucionado todo, ahora solo faltaba dibujarlo.</p>
<p><strong>Dibujarlo</strong><br />
Pensamos en un momento dibujarlo en Java, el problema iba a ser que Java no es exactamente lo más amigable para dibujar, y había otro problema, a lo largo del desarrollo del programa pensamos que sería una buena idea liberarlo bajo la GPL y poner el código a disposición de todos y fue cuando se nos ocurrió una idea: ¿porqué no volver todo este programa una aplicación web y abrirla al público?, pero ¿cómo podríamos solucionarlo?</p>
<p><strong>- PHP y Flash</strong><br />
Pensamos que era fácil simplemente crear un formulario que pidiera el acceso a la base de datos, llamara del lado del servidor a nuestro programa en Java y así podríamos generar un XML que leyera una aplicación en Flash, además por medio de Actionscript lo dibujara y agregara comportamientos como arrastrar que hiciera más facil la interacción del usuario.</p>
<p><img src="http://blog.amarelloartis.com/wp-content/uploads/2008/12/screenshot.jpg" alt="Diagrama Entidad Relación Procesado"  width="400" height="253" align="right" /><strong>- Conectar Java, C++, PHP, Flash</strong><br />
Lo hicimos, y nuestro programa en Java después de haber leido y parseado el GML generó un XML con la estructura y coordenadas, que luego Flash leería mediante Actionscript y dibujaría obteniendo una representación interactiva de la base de datos como se muestra en la imagen.</p>
<p><strong>Código Abierto</strong><br />
Después de algunos ajustes <a href="http://www.amarello.com.mx/downloads/dibujado-ortogonal-mysql/">liberamos el código de Java, C++, Flash, PHP y Actionscript bajo la GPL</a> y siendo nuestro primer programa que liberamos bajo esa licencia nos sentimos muy felices. Para mi fue como un logro que desde hace tiempo quería hacer, pues siempre nos ha ayudado enormemente el código abierto y nunca habíamos regresado el favor.</p>
<p>Ahora tenemos pensado liberar otros algoritmos y scripts que tenemos guardados bajo GPL, y creamos una sección para todo ese Software en <a href="http://www.amarello.com.mx/downloads/">nuestra página</a>, que según tenemos pleaneado irá creciendo poco a poco.</p>
<p>Nos sentimos muy bien de poder colaborar con la Open Software Foundation, e <strong>invitamos a otras compañías que tienen mucho software detenido que lo liberen y aporten algo a la comunidad</strong>.</p>
<p>La versión en línea de nuestro programa se <a href="http://www.amarello.com.mx/downloads/dibujado-ortogonal-mysql/version-online/">encuentra disponible al público</a> y esperemos que lo aprovechen.</p>
<p>Con este software nuevo esperamos que este año que apenas comienza aportemos mucho más a la comunidad del software libre.</p>
<p>¡ Feliz año 2009 !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.amarello.com.mx/2009/01/01/modelo-entidad-relacion-menor-numero-cruces/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>RSS y XML</title>
		<link>http://blog.amarello.com.mx/2006/12/30/rss-y-xml/</link>
		<comments>http://blog.amarello.com.mx/2006/12/30/rss-y-xml/#comments</comments>
		<pubDate>Sat, 30 Dec 2006 08:53:23 +0000</pubDate>
		<dc:creator>Eduardo</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>

		<guid isPermaLink="false">http://blog.amarelloartis.com/2006/12/30/rss-y-xml/</guid>
		<description><![CDATA[Seguramente casi todos habrán escuchado sobre RSS, simplemente le dan click a un boton y les muestra información relacionada con alguna página, pero ¿qué es realmente RSS? RSS ha revolucionado completamente el internet, de eso no hay duda, es un nuevo concepto que de ahora en adelante tendrán que saber todos, pues es muy pero [...]]]></description>
			<content:encoded><![CDATA[<p><img id="image169" src="http://blog.amarelloartis.com/wp-content/uploads/2006/12/128px-Feed-icon.jpg" alt="Feed" align="left" />Seguramente casi todos habrán escuchado sobre RSS, simplemente le dan click a un boton y les muestra información relacionada con alguna página, pero ¿qué es realmente RSS?</p>
<p>RSS ha revolucionado completamente el internet, de eso no hay duda, es un nuevo concepto que de ahora en adelante tendrán que saber todos, pues es muy pero muy usado.</p>
<p>Es un XML e<strong>X</strong>tensible <strong>M</strong>arkup <strong>L</strong>anguage, que es un formato muy parecido al html pero sólamente de vista, para que puedan entender de XML les explico estas reglas:<br />
<span id="more-168"></span><br />
Ésto es un XML:<br />
<img id="image170" src="http://blog.amarelloartis.com/wp-content/uploads/2006/12/xmlExample.jpg" alt="Ejemplo de un XML" align="left" />1. El nodo raíz o sea uno del cual derivan los demás en éste caso de la agenda derivan contactos.<br />
2. El nodo hijo de agenda o sea contacto el cual esta dentro de la agenda, y además tiene atributos.<br />
3. El atributo de contacto el cual es nombre, en cada caso cambia el nombre y se encierra entre comillas el atributo que vayamos a usar.<br />
4. El nodo hijo teléfonos del nodo padre contacto el cual tiene información dentro del nodo,<br />
5. la cuál es el teléfono que corresponde a ese contacto.</p>
<p>Y es muy importante que la etiqueta que abramos la cerremos siempre y no dejemos ninguna abierta, y además respetemos el orden de las etiquetas o sea si abrimos <code><contacto><telefono></code> tenemos que cerrar primero telefono asi <code></telefono></code> y luego contacto <code></contacto></code>, o sea <strong>ésto estaría mal</strong>: <code><contacto><telefono>  </contacto></telefono></code> y también piensen que no importa los espacios que dejen entre las etiquetas o sea es lo mismo decir <code><contacto><telefono></telefono></contacto></code> que:<br />
<code><contacto>       <telefono>5565865</telefono><br />
</contacto></code></p>
<p>El XML nos ayuda a tener los datos bien acomodados y poder ir viendo uno por uno hasta que encontremos el que queremos, y a su vez podemos descomponer en variables del programa los atributos o el contenido de los nodos del XML.</p>
<p>Es por esto que RSS usa XML para poder difundir noticias, sólamente que RSS es un estándar que debe ser un XML acomodado de cierta manera para que los lectores puedan leerlo y descomponerlo y hacer lo que se necesite.</p>
<p>Un navegador leerá simplemente un XML que tiene vínculos pueden ser permanentes o no, (de ahi el concepto de PermaLink) y lo veremos de una manera en especial según el navegador o lector de RSS que usemos y podremos enlazarnos a la página cuando queramos.</p>
<p>Un RSS debe tener un título (<strong>title</strong>) una descripción (<strong>description</strong>) y un vínculo ya sea permanente o no (<strong>link</strong>) y estarán separados por items algo asi:<br />
<code><item></p>
<p><description>Aqui va la descripción</description></p>
<link>http://www.vinculoalanoticia.com</link>
</item></code></p>
<p>Y como obviamente habrá más de un item pues tendrémos que hacer otro nodo encima de él:<br />
<code><channel></p>
<p><description>La explicación de cómo los items estan relacionados va aqui/description></p>
<link>http://www.vinculoalcanal</link>
<item></p>
<p><description>Aqui va la descripción</description></p>
<link>http://www.vinculoalanoticia.com</link>
</item><br />
<item></p>
<p><description>Aqui va la descripción</description></p>
<link>http://www.vinculoalanoticia.com</link>
</item><br />
<item></p>
<p><description>Aqui va la descripción</description></p>
<link>http://www.vinculoalanoticia.com</link>
</item><br />
</channel></code></p>
<p>Entonces de esta forma ya sería un XML válido pero por reglas del RSS debe de agregarse otra etiqueta más:</p>
<p><code><?xml version="1.0" encoding="UTF-8"?><br />
<rss version="2.0"><br />
<channel></p>
<p><description>La explicación de cómo los items estan relacionados va aqui</description></p>
<link>http://www.vinculoalcanal</link>
<item></p>
<p><description>Aqui va la descripción</description></p>
<link>http://www.vinculoalanoticia.com</link>
</item><br />
<item></p>
<p><description>Aqui va la descripción</description></p>
<link>http://www.vinculoalanoticia.com</link>
</item><br />
<item></p>
<p><description>Aqui va la descripción</description></p>
<link>http://www.vinculoalanoticia.com</link>
</item><br />
</channel><br />
</rss><br />
</code></p>
<p>Éstas dos líneas simplemente le dicen al navegador que lo que vendrá es un XML y la codificación es <a href="http://es.wikipedia.org/wiki/UTF-8">UTF-8</a> o sea una codificación que al final convertirá las letras y símbolos en números binarios; y la segunda línea le dice que además de ser un XML es un RSS y la versión del estándar en que se basa éste feed es el 2.0 pues el estándar 1.0 es diferente al 2.0 obviamente. Gracias a ésto puede leer correctamente un feed cualquier navegador.<br />
<code><?xml version="1.0" encoding="UTF-8"?><br />
<rss version="2.0"></code></p>
<p>Para poder saber si nuestro RSS es válido podemos consultar a <a href="http://feedvalidator.org/">Feed Validator</a> y para crear nuestro propio RSS podemos ver <a href="http://www.make-rss-feeds.com/making-an-rss-feed.htm">Making RSS Feeds</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.amarello.com.mx/2006/12/30/rss-y-xml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

