<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-19117468</atom:id><lastBuildDate>Sun, 11 Dec 2011 17:35:49 +0000</lastBuildDate><category>JPA</category><category>Charla</category><category>Silverlight 5</category><category>NS</category><category>La Pineda</category><category>Euclides</category><category>catalán</category><category>e-DNI</category><category>OOB</category><category>clausura transitiva</category><category>GUSENET.</category><category>Visual Studio 2008</category><category>Relacional</category><category>física</category><category>castellano</category><category>ING DIRECT</category><category>SSIS</category><category>INGDIRECT</category><category>durex</category><category>Santa Pola</category><category>PINTARTECA</category><category>IBEX 35</category><category>Windows Vista</category><category>Criptografía</category><category>Silverlight 4</category><category>Framework 2.0</category><category>SQL Server 2005</category><category>Sergio Vázquez</category><category>Indice de Fuerza Tecnica</category><category>David Salgado</category><category>truco</category><category>Yield</category><category>Miguel Egea</category><category>Secretaría</category><category>Inteligencia artificial</category><category>google</category><category>dendrograma</category><category>el Guille</category><category>Intro</category><category>Sindicado</category><category>Microsoft</category><category>SUMMIT SQL</category><category>Deserializar</category><category>Unience</category><category>IPad</category><category>MDIList</category><category>keybd_event</category><category>CUENTA NARANJA</category><category>XNA</category><category>Madrid .NET</category><category>scraping</category><category>Framework 4</category><category>Guadalajara</category><category>MAP 2011</category><category>MSDE 2</category><category>SQLU</category><category>España</category><category>Informix</category><category>Sistema Personal de Trading</category><category>Sistemas Distribuidos</category><category>ToString()</category><category>DEVCAMP</category><category>Framework 3.5</category><category>gossip</category><category>SQL Server 2008</category><category>Silverlight.</category><category>Francisco González</category><category>Suspect</category><category>VIAJAR</category><category>Live Distributed Objects</category><category>Ingeniería Informática</category><category>Lector RSS</category><category>Guille Comunity Tour</category><category>factorizar</category><category>SOLID SUMMIT 2009</category><category>MenuItem</category><category>NAMESPACE</category><category>ON ERROR</category><category>condones</category><category>Universad</category><category>ERROR</category><category>Grupos de usuarios</category><category>WPF</category><category>UCI</category><category>Programador</category><category>consultas</category><category>Office 2009</category><category>Tablas</category><category>Gusenet</category><category>SQL Server 2000</category><category>NET</category><category>VISUAL BASIC</category><category>treeview</category><category>XDocument</category><category>Windows Server 2008</category><category>desarrollo</category><category>Combobox</category><category>Office 14</category><category>robo</category><category>Entidad</category><category>IPhone</category><category>Oscar Montesinos</category><category>WF</category><category>WebClient</category><category>RSS</category><category>Matriculación</category><category>UOC</category><category>MdiWindowsListItem</category><category>IOS</category><category>Rubén Garrigós</category><category>.net</category><category>DATAGRIDVIEW</category><category>ALGORITMO</category><category>llenar</category><category>VSTA</category><category>MSDE 2000</category><category>LINQ</category><category>MAP</category><category>ProcessStartInfo</category><category>VB9</category><category>mysql</category><category>SQL Server Information Services.</category><category>XML</category><category>Serializar</category><category>SendInput</category><category>ToolStripMenuItem</category><category>LA CAIXA</category><category>error 3624</category><category>Syndication</category><category>Salvador Ramos</category><category>Traductor</category><category>España es nido de víboras.</category><category>Daniel Seara</category><category>Clase</category><category>eventos.</category><category>encriptación</category><category>Process</category><category>Vila-seca</category><category>Francisco Ruiz</category><category>XElement</category><category>transacciones</category><category>base de datos</category><category>Usuarios.</category><category>factorización</category><category>Tarragona</category><category>encuesta</category><category>attach</category><category>LOG</category><category>TRY CATCH</category><category>Idioma</category><category>Universidad Oberta Catalunya</category><category>SQL Server Denali</category><category>SQL Server</category><category>Visual Studio 2005</category><category>Silverlight 2.0</category><category>SENDKEYS</category><category>Visual Basic.</category><category>matemáticas</category><category>LINQ2XML</category><category>ladroentidad</category><category>Azure</category><category>Visual Studio 2010</category><category>VSTO</category><category>CheckedListBox</category><category>Euclides extendido</category><category>windows</category><category>Office 2007</category><category>ARGENTINA</category><category>PrinterSettings</category><category>Android</category><category>MainMenu</category><category>Windows 7</category><category>Huelga informáticos</category><category>Closing</category><category>VB6</category><category>ASP</category><category>SPT</category><category>WP7</category><category>GO</category><category>IFT</category><category>Eladio Rincón</category><category>Comisiones</category><category>VB</category><category>Pedro Hurtado</category><category>Oferta empleo</category><category>Microsoft Active Professional</category><category>C#</category><category>MAR DEL PLATA</category><category>TAB</category><category>WCF</category><category>scrape</category><category>PDC</category><category>CONCURSO</category><category>IV Aniversario</category><category>MenuStrip</category><category>algoritmos</category><category>elGamal</category><category>corrupta</category><category>CLIENTES</category><title>DosFlores en .NET</title><description>Blog con trucos y utilidades para desarrollo de aplicaciones. Desde SQL Server, C#, LINQ, Visual Basic, WPF, VSTO, Office, Silverlight y todo lo que pasa por mis manos en el día a día.</description><link>http://oscarmontesinos.blogspot.com/</link><managingEditor>noreply@blogger.com (OscarMontesinos)</managingEditor><generator>Blogger</generator><openSearch:totalResults>77</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DosfloresEnnet" /><feedburner:info uri="dosfloresennet" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-6906089925405310675</guid><pubDate>Sun, 11 Dec 2011 17:29:00 +0000</pubDate><atom:updated>2011-12-11T18:35:49.493+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Silverlight 5</category><title>Silverlight 5</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wL77PW_Nf6naGN_EWoZ7k9XRplI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wL77PW_Nf6naGN_EWoZ7k9XRplI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wL77PW_Nf6naGN_EWoZ7k9XRplI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wL77PW_Nf6naGN_EWoZ7k9XRplI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Buena noticia para todos los que usamos Silverlight en nuestros desarrollos, desde hoy tenemos Silverlight 5 disponible para descargar en:&lt;br /&gt;&lt;br /&gt;http://www.silverlight.net/downloads&lt;br /&gt;&lt;br /&gt;para saber más en:&lt;br /&gt;http://www.silverlight.net/learn/overview/what%27s-new-in-silverlight-5&lt;br /&gt;&lt;br /&gt;y para conocer las novedades en:&lt;br /&gt;http://msdn.microsoft.com/en-us/library/gg986857%28v=VS.95%29.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-6906089925405310675?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/eUgGzLwlYzs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/eUgGzLwlYzs/silverlight-5.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2011/12/silverlight-5.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-6725371682042858633</guid><pubDate>Fri, 02 Dec 2011 16:26:00 +0000</pubDate><atom:updated>2011-12-02T17:46:51.061+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Framework 4</category><category domain="http://www.blogger.com/atom/ns#">Criptografía</category><category domain="http://www.blogger.com/atom/ns#">Euclides</category><category domain="http://www.blogger.com/atom/ns#">elGamal</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Euclides extendido</category><title>Algoritmo extendido de Euclides</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0BF49OzUzHKpssrV2udd-2KVr1Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0BF49OzUzHKpssrV2udd-2KVr1Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0BF49OzUzHKpssrV2udd-2KVr1Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0BF49OzUzHKpssrV2udd-2KVr1Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Haciendo algunos ejercicios criptográficos tenía que firmar digitalmente con elGamal los mensajes a enviar y para ello necesitaba calculo el inverso de a módulo n, así que:&lt;br /&gt;&lt;br /&gt;os dejo un algoritmo para encontrar el inverso de a módulo n cuando mcd(a,n)=1.&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt;     /// &amp;lt;summary&amp;gt;  &lt;br /&gt;     /// Algoritmo extendido de Euclides   &lt;br /&gt;     /// &amp;lt;/summary&amp;gt;  &lt;br /&gt;     /// &amp;lt;returns&amp;gt;devuelve x tal que ax mod n=1, donde "0&amp;lt;a&amp;lt;n" &amp;gt;&amp;lt;/returns&amp;gt;  &lt;br /&gt;     static private int algoritmo(int a, int n)  &lt;br /&gt;     {  &lt;br /&gt;       List&amp;lt;int&amp;gt; g=new List&amp;lt;int&amp;gt;();  &lt;br /&gt;       g.Add(n); g.Add(a);  &lt;br /&gt;       List&amp;lt;int&amp;gt; u = new List&amp;lt;int&amp;gt;();  &lt;br /&gt;       List&amp;lt;int&amp;gt; v = new List&amp;lt;int&amp;gt;();  &lt;br /&gt;       u.Add(1); v.Add(0);  &lt;br /&gt;       u.Add(0); v.Add(1);  &lt;br /&gt;       int i = 1;  &lt;br /&gt;       while (g[i] != 0)  &lt;br /&gt;       {  &lt;br /&gt;         //g[i] = u[i] * n + v[i] * a;  &lt;br /&gt;         int y = g[i - 1] / g[i];  &lt;br /&gt;         g.Add(g[i - 1] - y * g[i]);  &lt;br /&gt;         u.Add(u[i - 1] - y * u[i]);  &lt;br /&gt;         v.Add(v[i - 1] - y * v[i]);  &lt;br /&gt;         i++;  &lt;br /&gt;       }  &lt;br /&gt;       int x = v[i - 1];  &lt;br /&gt;       if (x &amp;gt; 0)  &lt;br /&gt;       { return x; }  &lt;br /&gt;       else { return x + n; }  &lt;br /&gt;     }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-6725371682042858633?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/_YkqzShsQSo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/_YkqzShsQSo/algoritmo-extendido-de-euclides.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2011/12/algoritmo-extendido-de-euclides.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-4655728330988621277</guid><pubDate>Fri, 04 Nov 2011 11:52:00 +0000</pubDate><atom:updated>2011-11-04T13:18:59.904+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Closing</category><category domain="http://www.blogger.com/atom/ns#">eventos.</category><category domain="http://www.blogger.com/atom/ns#">Silverlight 4</category><category domain="http://www.blogger.com/atom/ns#">OOB</category><title>Silverlight 4 OOB evento Closing</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/be2xAYfPJr6rAtNChLzHX1OFa7E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/be2xAYfPJr6rAtNChLzHX1OFa7E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/be2xAYfPJr6rAtNChLzHX1OFa7E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/be2xAYfPJr6rAtNChLzHX1OFa7E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Existe un problema con el evento Closing en Silverlight 4. El problema es que el evento Closing a veces se dispara y a veces no,&lt;br /&gt;&lt;br /&gt;Application.Current.MainWindow.Closing -= MainWindow_Closing;&lt;br /&gt;&lt;br /&gt;¿y por qué?, parece ser que antes del evento, el objeto Application.Current.MainWindow&lt;br /&gt;se larga a papelera y es destruido por el Garbage Collector.&lt;br /&gt;&lt;br /&gt;No me he resistido a subir la solución al blog ya que me he pasado un buen rato esta mañana buscando la causa del problema para solucionarlo, al final la he encontrado y comparto una posible solución con ustedes.&lt;br /&gt;&lt;br /&gt;La solución es crear un objeto estático (static object _mainWindow;) que almacene esta ventana y así conseguimos cancelar el cierre de la ventana si por ejemplo, queremos que ésta esté bloqueada al mostrar una ChildWindow, estemos haciendo un upload, un download o reproduciendo una canción:&lt;br /&gt;&lt;br /&gt;               if (Application.Current.IsRunningOutOfBrowser &amp;amp;&amp;amp; Application.Current.HasElevatedPermissions)&lt;br /&gt;               {&lt;br /&gt;                   _mainWindow = Application.Current.MainWindow; // con esto queda solucionado.&lt;br /&gt;                   Application.Current.MainWindow.Closing += MainWindow_Closing;&lt;br /&gt;               }&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-4655728330988621277?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/Co46U-oTZyA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/Co46U-oTZyA/silverlight-4-oob-evento-closing.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2011/11/silverlight-4-oob-evento-closing.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-1684493183679681426</guid><pubDate>Sat, 07 May 2011 08:39:00 +0000</pubDate><atom:updated>2011-05-07T10:54:24.406+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Framework 4</category><category domain="http://www.blogger.com/atom/ns#">castellano</category><category domain="http://www.blogger.com/atom/ns#">scraping</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2010</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">google</category><category domain="http://www.blogger.com/atom/ns#">scrape</category><category domain="http://www.blogger.com/atom/ns#">Traductor</category><category domain="http://www.blogger.com/atom/ns#">catalán</category><title>Traductor catalán-castellano con "scraping"</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Gp0bpONvyFmvxag8WWGCnKQbE1c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Gp0bpONvyFmvxag8WWGCnKQbE1c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Gp0bpONvyFmvxag8WWGCnKQbE1c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Gp0bpONvyFmvxag8WWGCnKQbE1c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;Si tenéis problemas con el catalán por algún motivo y necesitáis un traductor en tiempo real "by the face", aquí os dejo un extracto de un programilla que traduce del catalán al castellano a partir del traductor de google. Si os fijáis bien en la técnica, se puede modificar para traducir cualquier idioma que soporte el traductor de google ("esta técnica la saqué de un lector "by the face" de cotizaciones de bolsa en tiempo real de yahoo").&lt;br /&gt;&lt;br /&gt;Llamada al servicio:&lt;br /&gt;&lt;br /&gt;       private string llamarServicio(string palabra,string sourceLanguage, string targetLanguage)&lt;br /&gt;       {&lt;br /&gt;          //palabra: abat&lt;br /&gt;          //sourceLanguage: ca&lt;br /&gt;          //targetLangauge: es&lt;br /&gt;               ASCIIEncoding encoding = new ASCIIEncoding();&lt;br /&gt;               string postData = "hl=" + targetLanguage;&lt;br /&gt;               postData += ("&amp;amp;sl=" + sourceLanguage);&lt;br /&gt;               postData += ("&amp;amp;tl=" + targetLanguage);&lt;br /&gt;               postData += ("&amp;amp;q=" + palabra);&lt;br /&gt;&lt;br /&gt;               WebRequest request = WebRequest.Create(&lt;br /&gt;                   "http://translate.google.es/?" + postData);&lt;br /&gt;               // If required by the server, set the credentials.&lt;br /&gt;               request.Credentials = CredentialCache.DefaultCredentials;&lt;br /&gt;               // Get the response.&lt;br /&gt;               WebResponse response = request.GetResponse();&lt;br /&gt;               // Get the stream containing content returned by the server.&lt;br /&gt;               Stream dataStream = response.GetResponseStream();&lt;br /&gt;               // Open the stream using a StreamReader for easy access.&lt;br /&gt;               StreamReader reader = new StreamReader(dataStream, Encoding.GetEncoding("Windows-1252"), true);&lt;br /&gt;               // Read the content.&lt;br /&gt;               string responseFromServer = reader.ReadToEnd();&lt;br /&gt;               // Clean up the streams and the response.&lt;br /&gt;               reader.Close();&lt;br /&gt;               response.Close();&lt;br /&gt;               return responseFromServer;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;y ahora la llamada la búsqueda del resultado con la expresión regular:&lt;br /&gt;&lt;br /&gt;       internal string scrapeIdioma(string texto, string cadenaABuscar)&lt;br /&gt;       {&lt;br /&gt;           //texto es el código fuentes de la página web que nos devuelve la&lt;br /&gt;           //función anterior&lt;br /&gt;           //cadenaABuscar es la expresión regular:&lt;br /&gt;           //"(this.style.backgroundColor='#fff'\"&amp;gt;(\\w+))"&lt;br /&gt;           Regex _regex;&lt;br /&gt;           _regex = new Regex(cadenaABuscar, RegexOptions.Compiled | RegexOptions.IgnoreCase);&lt;br /&gt;           Match match = _regex.Match(texto);&lt;br /&gt;           if (match.Success &amp;amp;&amp;amp; match.Groups.Count&amp;gt;1)&lt;br /&gt;           {&lt;br /&gt;               return match.Groups[2].Value.ToString();&lt;br /&gt;           }&lt;br /&gt;           return "";&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;Pues eso, cualquier duda os la resolveré sin problemas.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-1684493183679681426?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/Kd4tS8ZiY4E" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/Kd4tS8ZiY4E/traductor-catalan-castellano-con.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>2</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2011/05/traductor-catalan-castellano-con.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-8481556139190357255</guid><pubDate>Sun, 10 Apr 2011 07:19:00 +0000</pubDate><atom:updated>2011-04-10T09:55:49.284+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">IOS</category><category domain="http://www.blogger.com/atom/ns#">Silverlight.</category><category domain="http://www.blogger.com/atom/ns#">desarrollo</category><category domain="http://www.blogger.com/atom/ns#">IPhone</category><category domain="http://www.blogger.com/atom/ns#">Android</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><category domain="http://www.blogger.com/atom/ns#">WP7</category><category domain="http://www.blogger.com/atom/ns#">IPad</category><title>Windows Phone 7, Android e IOS (I)</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Alqu8Hy74yt6fUu-viyibosQAaQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Alqu8Hy74yt6fUu-viyibosQAaQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Alqu8Hy74yt6fUu-viyibosQAaQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Alqu8Hy74yt6fUu-viyibosQAaQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;Hace poco más de un mes y ante la posibilidad de disponer de algún recurso más en la oficina, me he tirado al ruedo y he puesto en marcha un proyecto para "Mobile", que ofrezca un valor añadido a nuestros clientes de "algo" que ya disponemos. Este proyecto tan sólo se hace por curiosidad y para unirme al tren de las aplicaciones para los llamados "smartphones".&lt;br /&gt;&lt;br /&gt;Análisis&lt;br /&gt;Antes de nada y ante la variedad de los distintos dispositivos con sus distintos SO tuve que tomar una decisión de por donde empujar y como afrontar un proyecto tan variopinto y con tantas diferencias de implementación.&lt;br /&gt;&lt;br /&gt;Lo primero es informarme del "cómo"  y para eso busqué en la red para encontrar estos links que me han parecido los más interesantes para empezar:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Windows Phone 7&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://channel9.msdn.com/Blogs/channel9spain/Windows-Phone-7-herramientas-de-desarrollo-y-vender-en-MarketPlace"&gt;http://channel9.msdn.com/Blogs/channel9spain/Windows-Phone-7-herramientas-de-desarrollo-y-vender-en-MarketPlace&lt;/a&gt;&lt;br /&gt;&lt;a href="http://create.msdn.com/es-ES/"&gt;http://create.msdn.com/es-ES/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/WP7TrainingCourse"&gt;http://msdn.microsoft.com/en-us/WP7TrainingCourse&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;Android&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://jonsegador.com/2010/02/tutorial-android-paso-a-paso-desarrollo-aplicacion-notepad/"&gt;http://jonsegador.com/2010/02/tutorial-android-paso-a-paso-desarrollo-aplicacion-notepad/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://geeks.ms/blogs/jorge/archive/2011/03/01/instalando-monodroid-aplicaciones-android-con-net.aspx"&gt;ttp://geeks.ms/blogs/jorge/archive/2011/03/01/instalando-monodroid-aplicaciones-android-con-net.aspx&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;IOS&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://developer.apple.com/devcenter/ios/index.action"&gt;http://developer.apple.com/devcenter/ios/index.action&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.maclatino.com/tutoriales-iphone-sdk-y-%C2%A1en-espanol/"&gt;http://www.maclatino.com/tutoriales-iphone-sdk-y-%C2%A1en-espanol/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.migueldiazrubio.com/2010/11/08/desarrollo-ios-10-sencillos-pasos-para-desarrollar-un-proyecto-para-iphone/"&gt;http://www.migueldiazrubio.com/2010/11/08/desarrollo-ios-10-sencillos-pasos-para-desarrollar-un-proyecto-para-iphone/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/iPhone/iOSGetStarted00.aspx"&gt;http://www.codeproject.com/KB/iPhone/iOSGetStarted00.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una vez que conozco las distintas tecnologías y terminado el análisis empezamos con el diseño de la aplicación, pero antes de nada hay que investigar con las distintas herramientas y la facilidad de desarrollo que me ofrecen.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;strong&gt;Windows Phone 7&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Personalmente y siendo un SO de Microsoft, me supone la herramienta más fácil para desarrollar ya que conozco como funciona porque la uso en el día a día en mi trabajo. Para desarrollar una aplicación para WP7 necesitaremos Visual Studio 2010 y el SDK de Windows Phone que podemos descargar desde la plataforma de desarrollo MSDN, tenemos un sin fin de recursos para empezar con él. También recomiento el tutorial de &lt;a href="http://geeks.ms/blogs/oalvarez/"&gt;Oskar Alvarez&lt;/a&gt;, que es muy completo y lo va publicando en su blog de geeks.&lt;/div&gt;&lt;div&gt;Mencionar que WP7 nos permite 2 formas de desarrollo para su plataforma: Silverlight para WP7 y XNA para desarrollo de videojuegos. El lenguaje con el que trabajo es C# por lo que Silverlight me viene de perlas porque además conozco algo del framework, pero ojo aquí hay que conocer también algo de XAML que no supondrá muchos problemas porque en el sdk también nos incorpora la aplicación Expression Blend 4 para el diseño grafico.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Por estas facilidades, el diseño de la aplicación y los algoritmos de cálculo (capa lógica) se han realizado con UML den MagicDraw y se han pasado a C# en VS2010 con su correspodiente proyecto de test.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;strong&gt;Android&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Con Android he empezado a tener problemas, trabajo normalmente con tecnologías Microsoft y claro, plataforma nueva, lenguaje nuevo, problemas nuevos... Tengo la suerte (y el dinero que me sangran) de estudiar en la UOC y en la UOC casi el 100% de la práctica se desarrolla con Java y Eclipse, por lo que conozco esta plataforma de antemano.&lt;/div&gt;&lt;div&gt;Para Android hay que bajarse Eclipse y las SDK de desarrollo para Android. Un consejo, la versión 2.2 es la más estable (la 3.0 es una locura y de la 2.3 no he visto mucho smartphone). Empezamos el desarrollo con la 3.0 y nos encontramos con muchos problemas, cuelgues, lentitud, errores raros, etc... Cuando queríamos intentamos buscar un smartphone razonable y estándar para hacer pruebas nos encontramos con que la versión más extendida era la 2.2, por lo que bajamos hasta la 2.2 con muy pocas adaptaciones para seguir con el proyecto.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Android ha sido el seleccionado para la primera implementación.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;strong&gt;IOS&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Poco, muy poco puedo contar de IOS y su desarrollo, la implementación la he dejado para el final, sobre todo cuando he visto que el SDK para Windows está por detrás del de Apple, así que he empezado por lo primordial, conseguir un portátil MAC e informarme un poco sobre la plataforma de desarrollo, que según tengo entendido se llama XCode y pose un framework para IOS llamado Cocoa Touch y que el lenguaje de desarrollo es con Objective-C aunque permite otros lenguajes pero ahora mismo ni idea&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Esta semana es la elegida para empezar con la implementación, así que en los próximas días tendré más información.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-8481556139190357255?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/czL1MnVwmLw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/czL1MnVwmLw/windows-phone-7-android-e-ios-i.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2011/04/windows-phone-7-android-e-ios-i.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-8635635910444183405</guid><pubDate>Wed, 02 Mar 2011 13:30:00 +0000</pubDate><atom:updated>2011-03-02T15:24:03.437+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MAP</category><category domain="http://www.blogger.com/atom/ns#">MAP 2011</category><category domain="http://www.blogger.com/atom/ns#">Microsoft Active Professional</category><title>MAP 2011</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/c2U1TRON9v3blZko6d0o9IEacfc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c2U1TRON9v3blZko6d0o9IEacfc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/c2U1TRON9v3blZko6d0o9IEacfc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c2U1TRON9v3blZko6d0o9IEacfc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Bueno, me ha llegado el mail nombrándome MAP, doy gracias a los que lo han hecho posible. LLevo muchos años con tecnologías Microsoft y apoyando el grupo de usuarios, colaborando con el que me solicita ayuda y divulgando lo que sé mediante este blog, y ahora me ha llegado este renocimiento, así que muchas gracias.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-nlwOSjIfxAo/TW5R64XY-8I/AAAAAAAAANg/sx3kkATXCGw/s1600/ff477606_banner-map%2528es-es%252CMSDN_10%2529.jpg"&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 400px; FLOAT: left; HEIGHT: 189px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5579487060363377602" border="0" alt="" src="http://4.bp.blogspot.com/-nlwOSjIfxAo/TW5R64XY-8I/AAAAAAAAANg/sx3kkATXCGw/s400/ff477606_banner-map%2528es-es%252CMSDN_10%2529.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://image.email.microsoftemail.com/lib/fec4157370600275/m/3/ESP11076_03_Webversion.html"&gt;http://image.email.microsoftemail.com/lib/fec4157370600275/m/3/ESP11076_03_Webversion.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-8635635910444183405?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/-84UT2e5nV4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/-84UT2e5nV4/map-2011.html</link><author>noreply@blogger.com (OscarMontesinos)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-nlwOSjIfxAo/TW5R64XY-8I/AAAAAAAAANg/sx3kkATXCGw/s72-c/ff477606_banner-map%2528es-es%252CMSDN_10%2529.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2011/03/map-2011.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-8966408688870777475</guid><pubDate>Sun, 14 Nov 2010 19:21:00 +0000</pubDate><atom:updated>2010-11-17T15:52:34.642+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL Server Denali</category><category domain="http://www.blogger.com/atom/ns#">SQL Server</category><title>Microsoft SQL Server codename Denali</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yHWOIQefsGNFyHZgOfC_kd0LdpM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yHWOIQefsGNFyHZgOfC_kd0LdpM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yHWOIQefsGNFyHZgOfC_kd0LdpM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yHWOIQefsGNFyHZgOfC_kd0LdpM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Esta entrada es para dar a conocer algunas de las novedades de la futura versión de SQL Server llamada Denali, la cuál ya está disponible desde hace unos días para descarga en la MSDN.&lt;br /&gt;&lt;br /&gt;-Se esperan varias betas a lo largo del 2011, la versión final no tiene fecha definitiva, pero no es muy probable que salga en el 2011.&lt;br /&gt;-Se podrá usar un IDENTITY a lo largo de varias tablas con (NEXT VALUE FOR schema.table)&lt;br /&gt;-Las consultas podrán tener paginación (OFFSET @Offset ROWS FETCH NEXT @PageSize ROWS ONLY)&lt;br /&gt;-Se han añadido 20 nuevas DMV en Denali. (dm_db_objects_disabled_on_compatibility_level_change, dm_exec_describe_first_result_set, etc..)&lt;br /&gt;-Nuevos eventos en el profiler: Database Suspect Date Page, Plan Guide Successful and Plan Guide Unsuccessful, etc...)&lt;br /&gt;&lt;br /&gt;Es pronto para profundizar en el tema, pero no viene mal tener presentes estas "features" del nuevo SQL para próximos proyectos...&lt;br /&gt;&lt;br /&gt;Un saludo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-8966408688870777475?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/A6Jn0WfR7x8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/A6Jn0WfR7x8/microsoft-sql-server-codename-denali.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2010/11/microsoft-sql-server-codename-denali.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-4265364785109532854</guid><pubDate>Sat, 10 Jul 2010 09:36:00 +0000</pubDate><atom:updated>2010-07-10T11:42:58.586+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">dendrograma</category><category domain="http://www.blogger.com/atom/ns#">UOC</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2008</category><category domain="http://www.blogger.com/atom/ns#">UCI</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">ALGORITMO</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><title>Algoritmo C# para dendrograma VI (Datos)</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PnU5ldvG-2om04jxJ3ByLyusBjQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PnU5ldvG-2om04jxJ3ByLyusBjQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PnU5ldvG-2om04jxJ3ByLyusBjQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PnU5ldvG-2om04jxJ3ByLyusBjQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Los datos para hacer pruebas los he sacado de un repositorio público de datos de la UCI: http://archive.ics.uci.edu/ml/ por mediación de la UOC: http://www.uoc.edu para hacer la práctica. &lt;br /&gt;&lt;br /&gt;Descripción de los datos:&lt;br /&gt;Title: Acute Inflammations&lt;br /&gt;&lt;br /&gt;Abstract: The data was created by a medical expert as a data set to test &lt;br /&gt;the expert system, which will perform the presumptive diagnosis of two &lt;br /&gt;diseases of the urinary system.&lt;br /&gt; &lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Data Set Characteristics:  Multivariate&lt;br /&gt;Attribute Characteristics: Categorical, Integer&lt;br /&gt;Associated Tasks: Classification&lt;br /&gt;Number of Instances: 120&lt;br /&gt;Number of Attributes: 6&lt;br /&gt;Missing Values? No&lt;br /&gt;Area: Life&lt;br /&gt;Date Donated: 2009-02-11&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Source:&lt;br /&gt;&lt;br /&gt;Jacek Czerniak, Ph.D., Assistant Professor&lt;br /&gt;Systems Research Institute&lt;br /&gt;Polish Academy of Sciences&lt;br /&gt;Laboratory of Intelligent Systems&lt;br /&gt;ul. Newelska 6, Room 218&lt;br /&gt;01-447 Warszawa, Poland&lt;br /&gt;e-mail: jacek.czerniak 'at' ibspan.waw.pl or jczerniak 'at' ukw.edu.pl &lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Data Set Information:&lt;br /&gt;&lt;br /&gt;The main idea of this data set is to prepare the algorithm of the expert &lt;br /&gt;system, which will perform the presumptive diagnosis of two diseases of &lt;br /&gt;urinary system. It will be the example of diagnosing of the acute &lt;br /&gt;inflammations of urinary bladder and acute nephritises. For better &lt;br /&gt;understanding of the problem let us consider definitions of both &lt;br /&gt;diseases given by medics. Acute inflammation of urinary bladder is&lt;br /&gt;characterised by sudden occurrence of pains in the abdomen region and &lt;br /&gt;the urination in form of constant urine pushing, micturition pains and &lt;br /&gt;sometimes lack of urine keeping. Temperature of the body is rising, &lt;br /&gt;however most often not above 38C. The excreted urine is turbid and &lt;br /&gt;sometimes bloody. At proper treatment, symptoms decay usually within &lt;br /&gt;several days. However, there is inclination to returns. At persons with &lt;br /&gt;acute inflammation of urinary bladder, we should expect that the illness &lt;br /&gt;will turn into protracted form.&lt;br /&gt;&lt;br /&gt;Acute nephritis of renal pelvis origin occurs considerably more often at &lt;br /&gt;women than at men. It begins with sudden fever, which reaches, and &lt;br /&gt;sometimes exceeds 40C. The fever is accompanied by shivers and one- or &lt;br /&gt;both-side lumbar pains, which are sometimes very strong. Symptoms of &lt;br /&gt;acute inflammation of urinary bladder appear very often. Quite not &lt;br /&gt;infrequently there are nausea and vomiting and spread pains of whole &lt;br /&gt;abdomen.&lt;br /&gt;&lt;br /&gt;The data was created by a medical expert as a data set to test the &lt;br /&gt;expert system, which will perform the presumptive diagnosis of two &lt;br /&gt;diseases of urinary system. The basis for rules detection was Rough Sets &lt;br /&gt;Theory. Each instance represents an potential patient.&lt;br /&gt;&lt;br /&gt;The data is in an ASCII file. Attributes are separated by TAB. Each line &lt;br /&gt;of the data file starts with a digit which tells the temperature of patient.&lt;br /&gt;&lt;br /&gt;-- Attribute lines:&lt;br /&gt;For example, '35,9 no no yes yes yes yes no'&lt;br /&gt;Where:&lt;br /&gt;'35,9' Temperature of patient&lt;br /&gt;'no' Occurrence of nausea&lt;br /&gt;'no' Lumbar pain&lt;br /&gt;'yes' Urine pushing (continuous need for urination)&lt;br /&gt;'yes' Micturition pains&lt;br /&gt;'yes' Burning of urethra, itch, swelling of urethra outlet&lt;br /&gt;'yes' decision: Inflammation of urinary bladder&lt;br /&gt;'no' decision: Nephritis of renal pelvis origin &lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Attribute Information:&lt;br /&gt;&lt;br /&gt;a1 Temperature of patient { 35C-42C }&lt;br /&gt;a2 Occurrence of nausea { yes, no }&lt;br /&gt;a3 Lumbar pain { yes, no }&lt;br /&gt;a4 Urine pushing (continuous need for urination) { yes, no }&lt;br /&gt;a5 Micturition pains { yes, no }&lt;br /&gt;a6 Burning of urethra, itch, swelling of urethra outlet { yes, no }&lt;br /&gt;d1 decision: Inflammation of urinary bladder { yes, no }&lt;br /&gt;d2 decision: Nephritis of renal pelvis origin { yes, no } &lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Relevant Papers:&lt;br /&gt;&lt;br /&gt;J.Czerniak, H.Zarzycki, Application of rough sets in the presumptive &lt;br /&gt;diagnosis of urinary system diseases, Artifical Inteligence and Security &lt;br /&gt;in Computing Systems, ACS'2002 9th International Conference Proceedings, &lt;br /&gt;Kluwer Academic Publishers,2003, pp. 41-51&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Citation Request:&lt;br /&gt;&lt;br /&gt;Please cite:&lt;br /&gt;&lt;br /&gt;J.Czerniak, H.Zarzycki, Application of rough sets in the presumptive &lt;br /&gt;diagnosis of urinary system diseases, Artifical Inteligence and Security &lt;br /&gt;in Computing Systems, ACS'2002 9th International Conference Proceedings, &lt;br /&gt;Kluwer Academic Publishers,2003, pp. 41-51&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-4265364785109532854?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/kFsr4RJ06WM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/kFsr4RJ06WM/algoritmo-c-para-dendrograma-vi-datos.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>2</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2010/07/algoritmo-c-para-dendrograma-vi-datos.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-4175059081703789332</guid><pubDate>Sat, 10 Jul 2010 09:32:00 +0000</pubDate><atom:updated>2010-07-10T11:34:52.030+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">dendrograma</category><category domain="http://www.blogger.com/atom/ns#">UOC</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2008</category><category domain="http://www.blogger.com/atom/ns#">Inteligencia artificial</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">ALGORITMO</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><title>Algoritmo C# para dendrograma V</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IgxZoR7D4QsGo529JrTVrabuO84/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IgxZoR7D4QsGo529JrTVrabuO84/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IgxZoR7D4QsGo529JrTVrabuO84/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IgxZoR7D4QsGo529JrTVrabuO84/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;El algoritmo por fin:&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;namespace PR_IA2_2010_Clases&lt;br /&gt;{&lt;br /&gt;    static public class Algoritmos&lt;br /&gt;    {&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Algoritmo para el cálculo de la distancia Euclidea entre los&lt;br /&gt;        /// objetos a partir de los distintos atributos.&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="datos"&gt;Lista de arrays de strings que representan&lt;br /&gt;        /// los atributos de los objetos&lt;/param&gt;&lt;br /&gt;        /// &lt;returns&gt;Una matriz en el intervalo [0,1] de las &lt;br /&gt;        /// distancias euclideas entre los objetos&lt;/returns&gt;&lt;br /&gt;        static public double[,] distanciaEuclidea(List&lt;string[]&gt; datos)&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                double[,] matriz = null;&lt;br /&gt;                //creamos la matriz de distancias en el intervalo [0,1]&lt;br /&gt;                //con la distancia media según el nº de atributos (6):&lt;br /&gt;                if (datos.Count&gt;0)&lt;br /&gt;                {&lt;br /&gt;                    matriz = new double[datos.Count, datos.Count];&lt;br /&gt;                    for (int i = 0; i &lt; datos.Count; i++)&lt;br /&gt;                    {&lt;br /&gt;                        for (int j= 0; j &lt; datos.Count ; j++)&lt;br /&gt;                        {&lt;br /&gt;                            double suma = 0;&lt;br /&gt;                            for (int k = 0; k &lt; datos[i].Count() - 2; k++)&lt;br /&gt;                            {&lt;br /&gt;                                suma+=Math.Pow(double.Parse(datos[i][k])-double.Parse(datos[j][k]),2);&lt;br /&gt;                            }&lt;br /&gt;                            double result = Math.Sqrt(suma);&lt;br /&gt;                            matriz[i, j] = 1-(result/6);&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                return matriz;&lt;br /&gt;            }&lt;br /&gt;            catch (Exception ex)&lt;br /&gt;            {&lt;br /&gt;                new Exception(ex.Message);&lt;br /&gt;            }&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Algoritmo que calcula la matriz de semejanzas transitiva a partir&lt;br /&gt;        /// de una no transitiva.&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="S"&gt;Matriz de semejanzas no transitiva&lt;/param&gt;&lt;br /&gt;        /// &lt;returns&gt;Matriz de semejanzas transitiva&lt;/returns&gt;&lt;br /&gt;        static public double[,] clausuraTransitiva(double[,] S)&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                double[,] R;&lt;br /&gt;                do&lt;br /&gt;                {&lt;br /&gt;                    R = (double[,])S.Clone();&lt;br /&gt;                    S = composicion(R, (double[,])R.Clone());&lt;br /&gt;                }while (!iguales(S,R));&lt;br /&gt;                return S;&lt;br /&gt;            }&lt;br /&gt;            catch (Exception ex)&lt;br /&gt;            {&lt;br /&gt;                new Exception(ex.Message);&lt;br /&gt;            }&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// composición de las semejanzas de una clausura transitiva&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="R1"&gt;matriz de semejanzas&lt;/param&gt;&lt;br /&gt;        /// &lt;param name="R2"&gt;matriz de semejanzas&lt;/param&gt;&lt;br /&gt;        /// &lt;returns&gt;Una matriz de semejanzas&lt;/returns&gt;&lt;br /&gt;        static private double[,] composicion(double[,] R1, double[,] R2)&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                double[,] S=new double[R1.GetLength(0),R1.GetLength(0)];&lt;br /&gt;                for (int x = 0; x &lt; R1.GetLength(0); x++)&lt;br /&gt;                {&lt;br /&gt;                    for (int y = 0; y &lt; R1.GetLength(0); y++)&lt;br /&gt;                    {&lt;br /&gt;                        S[x,y] = 0;&lt;br /&gt;                        for (int z = 0; z &lt; R1.GetLength(0); z++)&lt;br /&gt;                        {&lt;br /&gt;                            S[x, y] = Math.Max(S[x,y], Math.Min(R1[x,z],R2[z,y]));&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                return S;&lt;br /&gt;            }&lt;br /&gt;            catch (Exception ex)&lt;br /&gt;            {&lt;br /&gt;                new Exception(ex.Message);&lt;br /&gt;            }&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Determina si 2 matrices son iguales&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="S"&gt;&lt;/param&gt;&lt;br /&gt;        /// &lt;param name="R"&gt;&lt;/param&gt;&lt;br /&gt;        /// &lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;        static private bool iguales(Double[,] S, Double[,] R)&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                for (int i = 0; i &lt; S.GetLength(0); i++)&lt;br /&gt;                {&lt;br /&gt;                    for (int j = 0; j &lt; S.GetLength(1); j++)&lt;br /&gt;                    {&lt;br /&gt;                        if (S[i, j] != R[i, j])&lt;br /&gt;                            return false;&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            catch (Exception ex)&lt;br /&gt;            {&lt;br /&gt;                return false;&lt;br /&gt;            }&lt;br /&gt;            return true;&lt;br /&gt;        }&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Crea un dendrograma a partir de una matriz de semejanzas&lt;br /&gt;        /// transitiva.&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="matriz"&gt;matriz de datos&lt;/param&gt;&lt;br /&gt;        /// &lt;returns&gt;Una cadena con el dendrograma&lt;/returns&gt;&lt;br /&gt;        static public string dendrograma(double[,] matriz)&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                string result="";&lt;br /&gt;                List&lt;double&gt; alfa = new List&lt;double&gt;();&lt;br /&gt;                List&lt;string&gt; emparejamientos = new List&lt;string&gt;();&lt;br /&gt;                //añade los datos alfa de la matriz (resultados).&lt;br /&gt;                for (int i = 0; i &lt; matriz.GetLength(0); i++)&lt;br /&gt;                {&lt;br /&gt;                    for (int j = i; j &lt; matriz.GetLength(1); j++)&lt;br /&gt;                    {&lt;br /&gt;                        if (!alfa.Contains(matriz[i,j]))&lt;br /&gt;                        {&lt;br /&gt;                            alfa.Add(matriz[i, j]);&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                //ordenamos los datos alfa para ver&lt;br /&gt;                //los objetos relacionados.&lt;br /&gt;                alfa.Sort();&lt;br /&gt;                //recorremos toda la matriz.&lt;br /&gt;                for (int x=alfa.Count-1;x&gt;=0;x--)&lt;br /&gt;                {&lt;br /&gt;                    for (int i = 0; i &lt; matriz.GetLength(0); i++)&lt;br /&gt;                    {&lt;br /&gt;                        for (int j = i+1; j &lt; matriz.GetLength(1); j++)&lt;br /&gt;                        {&lt;br /&gt;                            //Si coincide el valor de la semejanza con&lt;br /&gt;                            //el valor alfa que estamos tratando,&lt;br /&gt;                            //añadimos la relación a la cadena final.&lt;br /&gt;                            if (alfa[x] == matriz[i, j])&lt;br /&gt;                            {&lt;br /&gt;                                string strI = "x"+ (i+1).ToString()+" ";&lt;br /&gt;                                string strJ = "x"+ (j+1).ToString()+" ";&lt;br /&gt;                                bool existeI = result.Contains(strI);&lt;br /&gt;                                bool existeJ = result.Contains(strJ);&lt;br /&gt;                                //sólo añadimos el emparejamiento si&lt;br /&gt;                                //no existe una relación de emparejamiento&lt;br /&gt;                                //anterior directa o derivada de otra relación&lt;br /&gt;                                //de emparejamiento&lt;br /&gt;                                if (!emparejamientos.Contains(strI + "," + strJ) &amp;&amp; &lt;br /&gt;                                     !emparejamientos.Contains(strJ+","+strI))&lt;br /&gt;                                {&lt;br /&gt;                                    //se trabaja con 4 supuestos a continuación&lt;br /&gt;                                    //al tratar la relación entre 2 objetos:                                   &lt;br /&gt;                                    if (!existeI &amp;&amp; existeJ)&lt;br /&gt;                                    {&lt;br /&gt;                                        emparejamientos = anyadirEmparejamientos(emparejamientos, strI, strJ,&lt;br /&gt;                                            result.Substring(buscarLLaveAbrir(emparejamientos, result, strJ)));&lt;br /&gt;                                        if (result.IndexOf("{" + strJ) &gt; -1)&lt;br /&gt;                                        {&lt;br /&gt;                                            result = result.Replace("{" + strJ, "{{" + strJ);&lt;br /&gt;                                            result += "," + strI + "}";&lt;br /&gt;                                        }&lt;br /&gt;                                        if (result.IndexOf(strJ + "}") &gt; -1)&lt;br /&gt;                                        {&lt;br /&gt;                                            result = result.Insert(buscarLLaveAbrir(emparejamientos,result, strI), "{");&lt;br /&gt;                                            result += "," + strI + "}";&lt;br /&gt;                                        }&lt;br /&gt;                                    }&lt;br /&gt;                                    if (existeI &amp;&amp; !existeJ)&lt;br /&gt;                                    {&lt;br /&gt;&lt;br /&gt;                                        emparejamientos = anyadirEmparejamientos(emparejamientos, strJ, strI,&lt;br /&gt;                                            result.Substring(buscarLLaveAbrir(emparejamientos,result, strI)));&lt;br /&gt;                                        result = result.Insert(buscarLLaveAbrir(emparejamientos,result, strI), "{");&lt;br /&gt;                                        result += "," + strJ + "}";&lt;br /&gt;                                    }&lt;br /&gt;                                    if (existeI &amp;&amp; existeJ)&lt;br /&gt;                                    {&lt;br /&gt;                                        if (result.IndexOf(strI) &gt; result.IndexOf(strJ))&lt;br /&gt;                                        {&lt;br /&gt;                                            emparejamientos = anyadirEmparejamientos(emparejamientos, strI, strJ,&lt;br /&gt;                                                result.Substring(buscarLLaveAbrir(emparejamientos, result, strJ)));&lt;br /&gt;                                            result = result.Insert(buscarLLaveAbrir(emparejamientos, result, strJ), "{");&lt;br /&gt;                                            result = result.Insert(buscarLLaveCerrar(emparejamientos, result, strJ), "}");&lt;br /&gt;                                            result = result.Insert(buscarLLaveAbriryCierreParaComa(emparejamientos, result, strJ) + 1, ",");&lt;br /&gt;                                        }&lt;br /&gt;                                        else&lt;br /&gt;                                        {&lt;br /&gt;                                            emparejamientos = anyadirEmparejamientos(emparejamientos, strI, strJ,&lt;br /&gt;                                                result.Substring(buscarLLaveAbrir(emparejamientos,result, strI)));&lt;br /&gt;                                            result = result.Insert(buscarLLaveAbrir(emparejamientos, result, strI), "{");&lt;br /&gt;                                            result = result.Insert(buscarLLaveCerrar(emparejamientos, result, strI), "}");&lt;br /&gt;                                            result = result.Insert(buscarLLaveAbriryCierreParaComa(emparejamientos, result, strI) + 1, ",");&lt;br /&gt;                                        }&lt;br /&gt;                                    }&lt;br /&gt;                                    if (!existeI &amp;&amp; !existeJ)&lt;br /&gt;                                    {&lt;br /&gt;                                        emparejamientos.Add(strI + "," + strJ);&lt;br /&gt;                                        result += ("{" + strI + "," + strJ + "}");&lt;br /&gt;                                    }&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                return result.Replace(" ","");&lt;br /&gt;            }&lt;br /&gt;            catch (Exception ex)&lt;br /&gt;            {&lt;br /&gt;                new Exception(ex.Message);&lt;br /&gt;            }&lt;br /&gt;            return "";&lt;br /&gt;        }&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Crea una lista de emparejamientos para no duplicar&lt;br /&gt;        /// los emparejamientos en el dendrograma final.&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="emparejamientos"&gt;Lista de emparejamientos&lt;/param&gt;&lt;br /&gt;        /// &lt;param name="nuevo"&gt;nuevo objeto&lt;/param&gt;&lt;br /&gt;        /// &lt;param name="J"&gt;objeto existente&lt;/param&gt;&lt;br /&gt;        /// &lt;param name="trozo"&gt;cadena que engloba los objetos que se emparejan&lt;br /&gt;        /// con todos los objetos que se relacionan con ellos&lt;/param&gt;&lt;br /&gt;        /// &lt;returns&gt;Devuelve la lista de emparejamientos&lt;/returns&gt;&lt;br /&gt;        static private List&lt;string&gt; anyadirEmparejamientos(List&lt;string&gt; emparejamientos,string nuevo, string J,&lt;br /&gt;                                            string trozo)&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                char[] caracteresDelimitadores = { '{','}',',' };&lt;br /&gt;                string[] filas;&lt;br /&gt;                filas = trozo.Split(caracteresDelimitadores, StringSplitOptions.RemoveEmptyEntries);&lt;br /&gt;                //mediante una array añado todos los objetos relacionados&lt;br /&gt;                //a lista de emparejamientos.&lt;br /&gt;                for (int i = 0; i &lt; filas.Count(); i++)&lt;br /&gt;                {&lt;br /&gt;                    if (!emparejamientos.Contains(nuevo+','+filas[i])&lt;br /&gt;                        &amp;&amp; nuevo!=filas[i])&lt;br /&gt;                    {&lt;br /&gt;                        emparejamientos.Add(nuevo + ',' + filas[i]);&lt;br /&gt;                    }&lt;br /&gt;                    for (int j = 0; j &lt; filas.Count(); j++)&lt;br /&gt;                    {&lt;br /&gt;                        if (!emparejamientos.Contains(filas[i] + ',' + filas[j])&lt;br /&gt;                            &amp;&amp; !emparejamientos.Contains(filas[j] + ',' + filas[i]) &amp;&amp;&lt;br /&gt;                            filas[i]!=filas[j])&lt;br /&gt;                        {&lt;br /&gt;                            emparejamientos.Add(filas[i] + ',' + filas[j]);&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                return emparejamientos;&lt;br /&gt;            }&lt;br /&gt;            catch (Exception ex)&lt;br /&gt;            {&lt;br /&gt;                new Exception(ex.Message);&lt;br /&gt;            }&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Busca la llave de abrir para hacer un emparejamiento&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="emparejamientos"&gt;Lista de emparejamientos&lt;/param&gt;&lt;br /&gt;        /// &lt;param name="result"&gt;dendrograma final&lt;/param&gt;&lt;br /&gt;        /// &lt;param name="I"&gt;Objeto a buscar&lt;/param&gt;&lt;br /&gt;        /// &lt;returns&gt;La posición de la primera llave para el &lt;br /&gt;        /// emparejamiento&lt;/returns&gt;&lt;br /&gt;        static private int buscarLLaveAbrir(List&lt;string&gt; emparejamientos,string result, string I)&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                int min = result.Length;&lt;br /&gt;                var lista= from e in emparejamientos&lt;br /&gt;                         where e.IndexOf(I)&gt;-1&lt;br /&gt;                         select e;&lt;br /&gt;                //dentro de todos los emparejamientos de un objeto, obten-&lt;br /&gt;                //dremos el que esté en el lado más izquierdo del dendrograma&lt;br /&gt;                foreach (string str in lista)&lt;br /&gt;                {&lt;br /&gt;                    if (result.IndexOf(str.Substring(0, str.IndexOf(","))) &lt; min &amp;&amp;&lt;br /&gt;                        result.IndexOf(str.Substring(0, str.IndexOf(","))) &gt; -1)&lt;br /&gt;                        min = result.IndexOf(str.Substring(0, str.IndexOf(",")));&lt;br /&gt;                    if (result.IndexOf(str.Substring(str.IndexOf(","))) &lt; min &amp;&amp;&lt;br /&gt;                        result.IndexOf(str.Substring(str.IndexOf(","))) &gt; -1)&lt;br /&gt;                        min = result.IndexOf(str.Substring(str.IndexOf(","))) - str.Substring(0, str.IndexOf(",")).Length;&lt;br /&gt;                }&lt;br /&gt;                return min;&lt;br /&gt;            }&lt;br /&gt;            catch (Exception ex)&lt;br /&gt;            {&lt;br /&gt;                new Exception(ex.Message);&lt;br /&gt;            }&lt;br /&gt;            return 0;&lt;br /&gt;        }&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Busca la llave de cerrar para hacer un emparejamiento&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="emparejamientos"&gt;Lista de emparejamientos&lt;/param&gt;&lt;br /&gt;        /// &lt;param name="result"&gt;dendrograma final&lt;/param&gt;&lt;br /&gt;        /// &lt;param name="I"&gt;Objeto a buscar&lt;/param&gt;&lt;br /&gt;        /// &lt;returns&gt;La posición de la última llave para el &lt;br /&gt;        /// emparejamiento&lt;/returns&gt;&lt;br /&gt;        static private int buscarLLaveCerrar(List&lt;string&gt; emparejamientos, string result, string I)&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                int max =0;&lt;br /&gt;                var lista = from e in emparejamientos&lt;br /&gt;                            where e.IndexOf(I) &gt; -1&lt;br /&gt;                            select e;&lt;br /&gt;                //dentro de todos los emparejamientos de un objeto, obten-&lt;br /&gt;                //dremos el que esté en el lado más derecho del dendrograma&lt;br /&gt;                foreach (string str in lista)&lt;br /&gt;                {&lt;br /&gt;                    if (result.IndexOf(str.Substring(0,str.IndexOf(","))) &gt; max)&lt;br /&gt;                        max = result.IndexOf(str.Substring(0, str.IndexOf(","))) + str.Substring(0, str.IndexOf(",")).Length;&lt;br /&gt;                    if (result.IndexOf(str.Substring(str.IndexOf(",")+1)) &gt; max)&lt;br /&gt;                        max = result.IndexOf(str.Substring(str.IndexOf(",") + 1)) + str.Substring(0, str.IndexOf(",")).Length;&lt;br /&gt;                }&lt;br /&gt;                return max;&lt;br /&gt;            }&lt;br /&gt;            catch (Exception ex)&lt;br /&gt;            {&lt;br /&gt;                new Exception(ex.Message);&lt;br /&gt;            }&lt;br /&gt;            return 0;&lt;br /&gt;        }&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Dentro de cada emparejamiento, busca la posición intermedia de la&lt;br /&gt;        /// relación para insertar la coma de separación que deja el dendrograma&lt;br /&gt;        /// más claro de entender.&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="emparejamientos"&gt;Lista de emparejamientos&lt;/param&gt;&lt;br /&gt;        /// &lt;param name="result"&gt;dendrograma final&lt;/param&gt;&lt;br /&gt;        /// &lt;param name="I"&gt;Objeto a buscar&lt;/param&gt;&lt;br /&gt;        /// &lt;returns&gt;La posición intermedia del emparejamiento&lt;/returns&gt;&lt;br /&gt;        static private int buscarLLaveAbriryCierreParaComa(List&lt;string&gt; emparejamientos, string result, string I)&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                int min = buscarLLaveAbrir(emparejamientos,result,I);&lt;br /&gt;                int numLlaveAbrir=1;&lt;br /&gt;                for (int i = min; i &gt;= 0; i--)&lt;br /&gt;                {&lt;br /&gt;                    if (result.Substring(i, 1) == "{")&lt;br /&gt;                        numLlaveAbrir++;&lt;br /&gt;                    else&lt;br /&gt;                        break;&lt;br /&gt;                }&lt;br /&gt;                for (int i = min; i &lt; result.Length; i++)&lt;br /&gt;                {&lt;br /&gt;                    if (result.Substring(i, 1) == "}")&lt;br /&gt;                        numLlaveAbrir--;&lt;br /&gt;                    if (numLlaveAbrir == 0)&lt;br /&gt;                        return i;&lt;br /&gt;                }&lt;br /&gt;                return min;&lt;br /&gt;            }&lt;br /&gt;            catch (Exception ex)&lt;br /&gt;            {&lt;br /&gt;                new Exception(ex.Message);&lt;br /&gt;            }&lt;br /&gt;            return 0;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-4175059081703789332?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/2G3zng4eagU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/2G3zng4eagU/algoritmo-c-para-dendrograma-v.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2010/07/algoritmo-c-para-dendrograma-v.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-6584458371755580289</guid><pubDate>Sat, 10 Jul 2010 09:30:00 +0000</pubDate><atom:updated>2010-07-10T11:32:38.947+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">dendrograma</category><category domain="http://www.blogger.com/atom/ns#">UOC</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2008</category><category domain="http://www.blogger.com/atom/ns#">Inteligencia artificial</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">ALGORITMO</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><title>Algoritmo C# para dendrograma IV</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mr-iwKEDLRdndteulW76yAs2y6Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mr-iwKEDLRdndteulW76yAs2y6Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mr-iwKEDLRdndteulW76yAs2y6Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mr-iwKEDLRdndteulW76yAs2y6Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;La parte Datos.cs&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;namespace PR_IA2_2010_Clases&lt;br /&gt;{&lt;br /&gt;    static public class Datos&lt;br /&gt;    {&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Normalizamos los datos aplicando ranging a la primera&lt;br /&gt;        /// columna y un valor binario a las posteriores.&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="datos"&gt;&lt;/param&gt;&lt;br /&gt;        /// &lt;returns&gt;Una lista normalizada de arrays de strings&lt;/returns&gt;&lt;br /&gt;        static public List&lt;string[]&gt; Normalizar(List&lt;string[]&gt; datos)&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                //normalizamos los datos:           &lt;br /&gt;                if (datos != null &amp;&amp; datos.Count &gt; 0)&lt;br /&gt;                {&lt;br /&gt;                    //sumamos la primera fila para aplicar ranging.&lt;br /&gt;                    float maximo = float.MinValue;&lt;br /&gt;                    float minimo = float.MaxValue;&lt;br /&gt;                    for (int i = 0; i &lt; datos.Count; i++)&lt;br /&gt;                    {&lt;br /&gt;                        float result;&lt;br /&gt;                        if (float.TryParse(datos[i][0].Replace('.', ','), out result))&lt;br /&gt;                        {&lt;br /&gt;                            if (result &lt; minimo)&lt;br /&gt;                                minimo = result;&lt;br /&gt;                            if (result &gt; maximo)&lt;br /&gt;                                maximo = result;&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                    foreach (string[] fila in datos)&lt;br /&gt;                    {&lt;br /&gt;                        //ranging a la primera columna:&lt;br /&gt;                        float result;&lt;br /&gt;                        if (float.TryParse(fila[0].Replace('.', ','), out result))&lt;br /&gt;                        {&lt;br /&gt;                            fila[0] = ((result - minimo) / (maximo - minimo)).ToString();&lt;br /&gt;                        }&lt;br /&gt;                        for (int i = 1; i &lt; fila.Count(); i++)&lt;br /&gt;                        {&lt;br /&gt;                            //comprobamos si hay valores binarios&lt;br /&gt;                            if (fila[i].ToUpper() == "YES" || fila[i].ToUpper() == "SÍ")&lt;br /&gt;                            {&lt;br /&gt;                                fila[i] = "1";&lt;br /&gt;                            }&lt;br /&gt;                            if (fila[i].ToUpper() == "NO")&lt;br /&gt;                            {&lt;br /&gt;                                fila[i] = "0";&lt;br /&gt;                            }&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                return datos;&lt;br /&gt;            }&lt;br /&gt;            catch (Exception ex)&lt;br /&gt;            {&lt;br /&gt;                new Exception(ex.Message);&lt;br /&gt;            }&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-6584458371755580289?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/Ji4p5avxVKc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/Ji4p5avxVKc/algoritmo-c-para-dendrograma-iv.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2010/07/algoritmo-c-para-dendrograma-iv.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-8175664382746820702</guid><pubDate>Sat, 10 Jul 2010 09:28:00 +0000</pubDate><atom:updated>2010-07-10T11:29:58.093+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">dendrograma</category><category domain="http://www.blogger.com/atom/ns#">UOC</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2008</category><category domain="http://www.blogger.com/atom/ns#">Inteligencia artificial</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><title>Algoritmo C# para dendrograma III</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Su4trG2WeHAegusUsPIrj1stDkc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Su4trG2WeHAegusUsPIrj1stDkc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Su4trG2WeHAegusUsPIrj1stDkc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Su4trG2WeHAegusUsPIrj1stDkc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Aquí la parte de código de IO.cs:&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;namespace PR_IA2_2010_Clases&lt;br /&gt;{&lt;br /&gt;    static public class IO&lt;br /&gt;    {&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Lectura de los datos de un fichero dado de tipo CVS que&lt;br /&gt;        /// transforma en una lista de arrays de tipo string.&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="fichero"&gt;fichero&lt;/param&gt;&lt;br /&gt;        /// &lt;returns&gt;Devuelve una lista de arrays de tipo string&lt;/returns&gt;&lt;br /&gt;        static public List&lt;string[]&gt; leerDatos(string fichero) &lt;br /&gt;        {&lt;br /&gt;            string texto;&lt;br /&gt;            string[] filas;&lt;br /&gt;            List&lt;string[]&gt; datos=null;&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                System.IO.StreamReader sr =&lt;br /&gt;                    new System.IO.StreamReader(fichero, System.Text.Encoding.Default, true);&lt;br /&gt;                texto = sr.ReadToEnd();&lt;br /&gt;                string[] caracteresDelimitadores = {"\r\n"};&lt;br /&gt;                //Creamos un lista de arrys de una forma rápida para &lt;br /&gt;                //tener cada dato por separado para su posterior tratamiento.&lt;br /&gt;                filas=texto.Split(caracteresDelimitadores,StringSplitOptions.RemoveEmptyEntries);&lt;br /&gt;                if (filas.Count()&gt;0)&lt;br /&gt;                {&lt;br /&gt;                    datos=new List&lt;string[]&gt;();&lt;br /&gt;                    for (int i = 0;i&lt; filas.Count(); i++)&lt;br /&gt;                    {&lt;br /&gt;                        datos.Add(filas[i].Split(','));&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                sr.Close();&lt;br /&gt;                return datos;&lt;br /&gt;            }&lt;br /&gt;            catch (System.IO.IOException ex)&lt;br /&gt;            {&lt;br /&gt;                throw new Exception(ex.Message);&lt;br /&gt;            }&lt;br /&gt;            catch (System.Exception ex)&lt;br /&gt;            {&lt;br /&gt;                throw new Exception(ex.Message);&lt;br /&gt;            }&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-8175664382746820702?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/6VchK-HDw8I" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/6VchK-HDw8I/algoritmo-c-para-dendrograma-ii.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2010/07/algoritmo-c-para-dendrograma-ii.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-1289532324544794341</guid><pubDate>Thu, 24 Jun 2010 21:11:00 +0000</pubDate><atom:updated>2010-06-24T23:13:30.286+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">dendrograma</category><category domain="http://www.blogger.com/atom/ns#">UOC</category><category domain="http://www.blogger.com/atom/ns#">Framework 3.5</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2008</category><category domain="http://www.blogger.com/atom/ns#">Inteligencia artificial</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">clausura transitiva</category><title>Algoritmo C# para dendrograma II</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/25bg9AdoACt2kc7F2yOBVqKrM00/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/25bg9AdoACt2kc7F2yOBVqKrM00/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/25bg9AdoACt2kc7F2yOBVqKrM00/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/25bg9AdoACt2kc7F2yOBVqKrM00/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;//El código del proceso principal para testear los algoritmos:&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;using PR_IA2_2010_Clases;&lt;br /&gt;&lt;br /&gt;namespace PR_IA2_2010&lt;br /&gt;{&lt;br /&gt;    class Program&lt;br /&gt;    {&lt;br /&gt;        static void Main(string[] args)&lt;br /&gt;        {&lt;br /&gt;            List&lt;string[]&gt; datos;&lt;br /&gt;            if (args.Count() == 0)&lt;br /&gt;            {&lt;br /&gt;                //sin parámetros&lt;br /&gt;                Console.WriteLine("Por defecto se analiza diagnosis3.csv");&lt;br /&gt;                Console.WriteLine("Si quiere otro fichero debe escribir:");&lt;br /&gt;                Console.WriteLine("PR_IA2_2010.EXE nombre_fichero_con_datos");&lt;br /&gt;                datos =&lt;br /&gt;                    IO.leerDatos("diagnosis3.csv");&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                //Si ponemos un parémetro es el nombre del fichero.&lt;br /&gt;                datos =&lt;br /&gt;                    IO.leerDatos(args[0]);&lt;br /&gt;            }&lt;br /&gt;            DateTime tiempoInicio = DateTime.Now;&lt;br /&gt;            //normalizamos:&lt;br /&gt;            datos = Datos.Normalizar(datos);&lt;br /&gt;            //calculamos la media de las distancia euclidea entre&lt;br /&gt;            //los objetos&lt;br /&gt;            double[,] R = Algoritmos.distanciaEuclidea(datos);&lt;br /&gt;            //Calculamos la semejanza entre ellos&lt;br /&gt;            double[,] semejanza = Algoritmos.clausuraTransitiva(R);&lt;br /&gt;            Console.WriteLine("El resultado es: ");&lt;br /&gt;            //creamos el dendrograma con el resultado obtenido.&lt;br /&gt;            Console.WriteLine(Algoritmos.dendrograma(semejanza));&lt;br /&gt;            Console.WriteLine("Tiempo= " + DateTime.Now.Subtract(tiempoInicio));&lt;br /&gt;            Console.ReadKey();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-1289532324544794341?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/wJrOFkcMMGk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/wJrOFkcMMGk/algoritmo-c-para-dendrograma-ii.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2010/06/algoritmo-c-para-dendrograma-ii.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-6366232254460528602</guid><pubDate>Thu, 17 Jun 2010 14:09:00 +0000</pubDate><atom:updated>2010-06-17T20:49:18.530+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">dendrograma</category><category domain="http://www.blogger.com/atom/ns#">UOC</category><category domain="http://www.blogger.com/atom/ns#">Framework 3.5</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2008</category><category domain="http://www.blogger.com/atom/ns#">Inteligencia artificial</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">clausura transitiva</category><title>Algoritmo C# para dendrograma I</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pfiu6ij2al3GIkckrcOrzY2P8eg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pfiu6ij2al3GIkckrcOrzY2P8eg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pfiu6ij2al3GIkckrcOrzY2P8eg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pfiu6ij2al3GIkckrcOrzY2P8eg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;He creado un algoritmo para el cálculo de dendrogramas según el método de clausura transitiva para la asignatura de Inteligencia Artificial II de la carrera de Ingeniería Informática en el Universitat Oberta de Catalunya. Como no me gusta quedármelo para mí solo y supongo que los profes no se mosquearán, aquí os escribo una serie de artículos dónde expongo una breve explicación: artículo I y los fuentes: artículos siguientes.&lt;br /&gt;&lt;br /&gt;Tanto el algoritmo como el programa de prueba lo he realizado con C# y Framework 3.5 con el entorno de desarrollo Visual Studio 2008. &lt;br /&gt;&lt;br /&gt;Para realizar el algoritmo y probarlo he creado 2 proyectos diferentes englobados en una solución que me permite probar , ejecutar y modificar el código.&lt;br /&gt;&lt;br /&gt;Los proyectos son:&lt;br /&gt;• PR_IA2_2010&lt;br /&gt;Proyecto de inicio que usa la librería PR_IA2_2010_Clases para el cálculo del problema propuesto. Este proyecto presenta el resultado final:&lt;br /&gt;o Program.cs: es el módulo principal donde se encuentra Main. Desde este módulo se llaman a los distintos algoritmos para la resolución del problema.&lt;br /&gt;&lt;br /&gt;• y PR_IA2_2010_Clases&lt;br /&gt;Conjunto de clases dónde se encuentran los algoritmos desarrollados para la resolución del problema. He creados 3 partes distintas entre sí para que la lectura del código se más clara.&lt;br /&gt;o IO.cs: Tiene los métodos de lectura de los datos. &lt;br /&gt; static public List&lt;string[]&gt; leerDatos(string fichero)&lt;br /&gt;Lectura de los datos de un fichero dado de tipo CVS que transforma los atributos de los objetos en una lista de arrays de tipo string&lt;br /&gt;o Datos.cs: Tiene los métodos de transformación de los datos (normalización)&lt;br /&gt; static public List&lt;string[]&gt; Normalizar(List&lt;string[]&gt; datos)&lt;br /&gt;Normalización de lso datos aplicando ranging a la primera columna y un valor binario a los posteriores atributos.&lt;br /&gt;o Algoritmos.cs: Algoritmos de la aplicación.&lt;br /&gt; static public double[,] distanciaEuclidea(List&lt;string[]&gt; datos)&lt;br /&gt;Algoritmo para el cálculo de la distancia Euclidea entre los objetos a partir de los distintos atributos.&lt;br /&gt; static public double[,] clausuraTransitiva(double[,] S)&lt;br /&gt;Algoritmo que calcula la matriz de semejanzas transitiva a partir de una matriz no transitiva.&lt;br /&gt; static private double[,] composicion(double[,] R1, double[,] R2)&lt;br /&gt;Composición de las semejanzas de una clausura transitiva.&lt;br /&gt; static private bool iguales(Double[,] S, Double[,] R)&lt;br /&gt;Determina si 2 matrices de semejanzas son iguales.&lt;br /&gt; static public string dendrograma(double[,] matriz)&lt;br /&gt;Crea un dendrograma a partir de una matriz de semejanzas transitiva.&lt;br /&gt; static private List&lt;string&gt; anyadirEmparejamientos(List&lt;string&gt; emparejamientos,string nuevo, string J,                                            string trozo)&lt;br /&gt;Crea una lista de emparejamientos para no duplicar los emparejamientos en el dendrograma final.&lt;br /&gt; static private int buscarLLaveAbrir(List&lt;string&gt; emparejamientos,string result, string I)&lt;br /&gt;Busca la llave de abrir para hacer un emparejamiento.&lt;br /&gt; static private int buscarLLaveCerrar(List&lt;string&gt; emparejamientos, string result, string I)&lt;br /&gt;Busca la llave de cerrar para hacer un emparejamiento&lt;br /&gt; static private int buscarLLaveAbriryCierreParaComa(List&lt;string&gt; emparejamientos, string result, string I)&lt;br /&gt;Dentro de cada emparejamiento, busca la posición intermedia de la relación para insertar la coma de separación que deja el dendrograma más claro de entender.&lt;br /&gt;&lt;br /&gt;En el próximo artículo empezaré a mostrar el código.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-6366232254460528602?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/745mGVbBwU8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/745mGVbBwU8/algoritmo-c-para-dendrogramas-i.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2010/06/algoritmo-c-para-dendrogramas-i.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-6949683504691842743</guid><pubDate>Tue, 23 Mar 2010 21:48:00 +0000</pubDate><atom:updated>2010-03-23T22:52:48.949+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Sistemas Distribuidos</category><category domain="http://www.blogger.com/atom/ns#">GO</category><category domain="http://www.blogger.com/atom/ns#">gossip</category><category domain="http://www.blogger.com/atom/ns#">Live Distributed Objects</category><title>Plataforma GO para aplicaciones GOSSIP</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oXBqUoRiP-lKQcgfQ7aKxGL64Kw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oXBqUoRiP-lKQcgfQ7aKxGL64Kw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oXBqUoRiP-lKQcgfQ7aKxGL64Kw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oXBqUoRiP-lKQcgfQ7aKxGL64Kw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;GO es una plataforma preparada para el soporte de aplicaciones y protocolos gossip, protocolos que son populares en aplicaciones distribuidas a gran escala. Esta plataforma facilita el trabajo para el desarrollo de nuevos protocolos y aplicaciones gossip, también garantiza el ancho de banda y optimiza la entrega de rumores,  desarrollando un algoritmo heurístico que reúne varios rumores en un paquete IP y los distribuye indirectamente de una forma llamada “epidemia”.&lt;br /&gt;&lt;br /&gt;Los rumores son paquetes de información que el sistema envía o intercambia cada cierto periodo de tiempo, con esto se consigue tener la distribución "distribuida" en varios servidores replicando los datos de una forma asíncrona.&lt;br /&gt;Los protocolos gossip tienen las siguientes propiedades:&lt;br /&gt;• Robustez: tolerante a fallos y con normas muy severas en su implementación.&lt;br /&gt;• Constancia, carga balanceada: un mensaje por nodo y tanda de emisión.&lt;br /&gt;• Simplicidad: son fáciles de escribir y depurar, no depende de tecnologías en comunicaciones especiales.&lt;br /&gt;• Escalabilidad: la simplicidad e independencia de los nodos permite escalar el sistema añadiendo nuevos nodos sin modificar las características del sistema.&lt;br /&gt;&lt;br /&gt;Aun así, con estas propiedades, también existen algunos problemas con los protocolos gossips como son la recepción de algunos rumores demasiado tarde o la recepción sin orden en el caso de actualizaciones. También podemos encontrarnos con varios nodos que formen un grupo gossip para soportar una aplicación creada con objetos gossip distribuidos por esos nodos. Este tipo de programación (orientada a objetos) podría desarrollar una gran cantidad de objetos que podría interferir entre ellos o saturar la red con mucha información.&lt;br /&gt;&lt;br /&gt;La plataforma GO nace con la idea de solventar estos problemas creando una extensión al sistema operativo que estandarice las operaciones más comunes, permita a diferentes aplicaciones coexistir y compartir recursos y como se ha dicho al principio, agrupar varios rumores en el mismo paquete IP ya que éstos suelen ser muy pequeños en tamaño., 12-16 bytes. GO se implementa como una capa de comunicación basada en LDO (Live Distributed Object) con las siguientes contribuciones:&lt;br /&gt;• Una extensión de los protocolos gossip para agrupar varios objetos gossip dentro del mismo nodo.&lt;br /&gt;• Un algoritmo heurístico para encontrar similitudes en grupos gossips.&lt;br /&gt;• La simulación en una plataforma real.&lt;br /&gt;&lt;br /&gt;Los algoritmos desarrollados en  la plataforma GO son:&lt;br /&gt;Model: el modelo se enfoca en un estilo publicación-suscripción o suscripción sólo.&lt;br /&gt;Diseminación aleatoria: los rumores son distribuidos aleatoriamente a un recipiente.&lt;br /&gt;Diseminación optimizada: Aquí es donde se desarrolla el algoritmo heurístico para calcular la  probabilidad de “infección” de nodos con rumores que reúnan unas determinadas características como las susceptibilidad de ser infectado, el esperado nº de veces que en una epidemia un nodo es susceptible de ser infectado,  la conectividad entre objetos gossips, etc..&lt;br /&gt;Control y limitación de los ratios de tráfico y uso de memoria: para evitar sobrecargas o gran consumo de ancho de banda.&lt;br /&gt;&lt;br /&gt; La plataforma GO implementa un interfaz estándar para las aplicaciones vía librería de cliente o conexión IPC y corre en todos los nodos del sistema. Esta arquitectura es rica, flexible, y fácil de extender. Podemos dividirlo en estas partes:&lt;br /&gt;• Arranque: los objetos gossip arrancan con un mecanismo que depende de un directorio de servicio similar a una DNS.&lt;br /&gt;• Mecanismo Gossip: se ejecuta periódicamente realizando llamadas a las aplicaciones para añadir rumores a la cola de rumores.&lt;br /&gt;• Componentes cercanos: Se mantienen información de los nodos vecinos&lt;br /&gt;• Cola de rumores.&lt;br /&gt;&lt;br /&gt;Las pruebas de la plataforma se han efectuado usando un simulador discreto basado en tiempo, que compara implementaciones de objetos gossips ejecutándose independientemente sin ayuda de la plataforma y objetos gossips ejecutándose con la ayuda de la plataforma. En el tratamiento con la cola de rumores e in-dirección de los mensajes, mejora con la plataforma GO, pero las pruebas no garantizan que  la plataforma GO funciona en cualquier infraestructura, el intercambio de mensajes mediante GO absorbe una gran cantidad de ancho de banda, o una sobrecarga de buffer de las colas de rumores.&lt;br /&gt;&lt;br /&gt;La optimización de la plataforma GO para el futuro pasaría por investigar la forma de optimizar el espacio de buffer asignado a los rumores por las aplicaciones y una mejor utilización de los mismos. También es deseable que para potenciar el uso de GO que éste pueda soportar un gran variedad de estilos gossip, así como algún que otro protocolo no-gossip. Quedaría en el aire un reforzamiento de la seguridad, ya que una aplicación agresiva podría dominar a aquellas menos agresivas quedándose con la mayoría del espacio de la cola de mensajes o saturar el ancho de banda asignado.&lt;br /&gt;&lt;br /&gt;En mi sencilla opinión creo que a la plataforma le queda un largo camino que recorrer, pensando que si tiene que incorporar más protocolos no-gossip para poder extenderla fácilmente, se van a encontrar con problemas de arquitectura nuevos que tendrán que soportar varios tipos de protocolos.&lt;br /&gt;&lt;br /&gt;Para ampliar información he encontrado los siguientes links, uno de ellos es el mismo artículo pero más ampliado:&lt;br /&gt;&lt;br /&gt;http://en.wikipedia.org/wiki/Gossip_protocol&lt;br /&gt;http://www.cs.cornell.edu/projects/quicksilver/public_pdfs/journal.pdf&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-6949683504691842743?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/t3JvGEOWgV0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/t3JvGEOWgV0/plataforma-go-para-aplicaciones-gossip.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2010/03/plataforma-go-para-aplicaciones-gossip.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-5021065219622272826</guid><pubDate>Thu, 03 Dec 2009 11:59:00 +0000</pubDate><atom:updated>2009-12-03T13:00:52.585+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Oferta empleo</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2008</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">VB6</category><category domain="http://www.blogger.com/atom/ns#">SQL Server</category><category domain="http://www.blogger.com/atom/ns#">VB9</category><category domain="http://www.blogger.com/atom/ns#">Programador</category><title>Oferta empleo Programador Junior</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-JVdEVzs6TWq_PgGiWU6xFcmMZs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-JVdEVzs6TWq_PgGiWU6xFcmMZs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-JVdEVzs6TWq_PgGiWU6xFcmMZs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-JVdEVzs6TWq_PgGiWU6xFcmMZs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Hola a todos, se oferta un puesto de trabajo  “programador junior?” con las siguientes características.&lt;br /&gt;&lt;br /&gt;-Necesitamos una persona dinámica, con ganas de aprender y en continúo reciclaje y que considere que pueda con las siguientes tareas a desarrollar en el dpto. de programación:&lt;br /&gt;                -Asistencia telefónica con el cliente en 2ª línea. (la primera es al que recibe la llamada y si no sabe resolverla la pasa a la 2ª).&lt;br /&gt;                -Mantenimiento de aplicaciones VB6, SQL Server 2000/2005, C#, VB9, Visual Studio 2008, Framework 3.5 (normalmente la llamada es por algún error de programación que hay que detectar, debido a las continuas modificaciones en las aplicaciones, ahora se contabilizan unas 8 llamadas diarias por personas e incluso menos)&lt;br /&gt;                -Posibilidad de viajar al menos una vez al mes (es raro que se viaje, pero existe la posibilidad de testear nuevas aplicaciones, arreglar errores in situ, etc..)&lt;br /&gt;-Cómo requisito imprescindible es coche propio con carnet de conducir, residencia en la provincia de Alicante, que sea organizada y al menos que tenga el título de DAI, esté cursando o similar.&lt;br /&gt;&lt;br /&gt;Si queréis más información podéis mandarme un mail.&lt;br /&gt;&lt;br /&gt;Un saludo a todos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-5021065219622272826?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/et6X9yWHDIk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/et6X9yWHDIk/oferta-empleo-programador-junior.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2009/12/oferta-empleo-programador-junior.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-6559138228427160646</guid><pubDate>Tue, 20 Oct 2009 21:14:00 +0000</pubDate><atom:updated>2009-10-20T23:25:20.448+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Clase</category><category domain="http://www.blogger.com/atom/ns#">Entidad</category><category domain="http://www.blogger.com/atom/ns#">Combobox</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">ToString()</category><title>Combobox  y ToString()</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fY88ckblJSdiNMK5HdA8zfnTlms/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fY88ckblJSdiNMK5HdA8zfnTlms/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fY88ckblJSdiNMK5HdA8zfnTlms/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fY88ckblJSdiNMK5HdA8zfnTlms/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Andaba líado con una clase de poblaciones de España que contenía una descripción y un código llamado INE, que es el código que representa a una población según el INE (Instituto Nacional de Estadística):&lt;br /&gt;&lt;br /&gt;        ...&lt;br /&gt;        private string _CodigoIne;&lt;br /&gt;        private string _Localidad;&lt;br /&gt;        ...&lt;br /&gt;&lt;br /&gt;e intentando a través de otra clase que me devolviera una lista de poblaciones leyéndola de la base de datos a través del método:&lt;br /&gt;&lt;br /&gt;        public List&lt;Entidades.MaestroLocalidad&gt; lista(){....}&lt;br /&gt;&lt;br /&gt;no había forma de que me presentara los nombres de las poblaciones en el combobox aunque se lo marcara en la propiedad DisplayMember del combobox susodicho:&lt;br /&gt;&lt;br /&gt;        cbLocalidad.DataSource = bsLocalidad;&lt;br /&gt;        cbLocalidad.DisplayMember = "Localidad";&lt;br /&gt;        cbLocalidad.ValueMember = "CodigoINE";&lt;br /&gt;&lt;br /&gt;pero como dirían los gallegos, depende, a veces sí a veces no aparecía el nombre y otras el nombre de la clase:&lt;br /&gt;&lt;br /&gt;        Entidades.MaestroLocalidad&lt;br /&gt;        Entidades.MaestroLocalidad&lt;br /&gt;        Entidades.MaestroLocalidad&lt;br /&gt;&lt;br /&gt;en vez de por ejemplo:&lt;br /&gt;&lt;br /&gt;        Alicante&lt;br /&gt;        Elche&lt;br /&gt;        Santa Pola&lt;br /&gt;&lt;br /&gt;así que decidí esta mañana sobreescribir el método ToString() de la clase mencionada en primer lugar:&lt;br /&gt;&lt;br /&gt;        public override string ToString()&lt;br /&gt;        {&lt;br /&gt;            return _Localidad;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;y solucionado el problema.&lt;br /&gt;&lt;br /&gt;Un saludo&lt;br /&gt;Oscar Montesinos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-6559138228427160646?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/RvkuCuyfxVw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/RvkuCuyfxVw/combobox-y-tostring.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>9</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2009/10/combobox-y-tostring.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-4647852113100774577</guid><pubDate>Mon, 19 Oct 2009 13:52:00 +0000</pubDate><atom:updated>2009-10-19T16:00:33.526+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">La Pineda</category><category domain="http://www.blogger.com/atom/ns#">Usuarios.</category><category domain="http://www.blogger.com/atom/ns#">Vila-seca</category><category domain="http://www.blogger.com/atom/ns#">Tarragona</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><title>TTT - Codecamp Tarragona 2009</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NywqaFweu3vLjtwP-whzkqh-Imk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NywqaFweu3vLjtwP-whzkqh-Imk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NywqaFweu3vLjtwP-whzkqh-Imk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NywqaFweu3vLjtwP-whzkqh-Imk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Quería hacer un pequeño resumen de lo que ha gustado del TTT y Codecamp 2009 y para ello quería centrarme en las personas, que ante todo, son los que hacen posible un evento de estas características. Las personas que organizan sin ánimo lucrativo para que todo salga perfecto, los speakers, los patrocinadores, los asistentes, todos, en general todos, con ganas de pasarlo bien, han hecho que estos 3 días haya desconectado completamente de los problemas diarios y me haya sentido muy dichoso de estar allí.&lt;br /&gt;&lt;br /&gt;En resumen de los conceptos planteados puedo resumir los que mayor interés me han suscitado:&lt;br /&gt;&lt;br /&gt;-Programación para iPhone.&lt;br /&gt;-Windows Azure, Services y SQL.&lt;br /&gt;-WPF 4&lt;br /&gt;-ASP.NET MVC2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-4647852113100774577?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/KtVnxh8PiEI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/KtVnxh8PiEI/ttt-codecamp-tarragona-2009.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2009/10/ttt-codecamp-tarragona-2009.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-7348131765418945504</guid><pubDate>Wed, 23 Sep 2009 15:43:00 +0000</pubDate><atom:updated>2009-09-23T19:35:42.732+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2005</category><category domain="http://www.blogger.com/atom/ns#">ToolStripMenuItem</category><category domain="http://www.blogger.com/atom/ns#">Framework 3.5</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2008</category><category domain="http://www.blogger.com/atom/ns#">Framework 2.0</category><category domain="http://www.blogger.com/atom/ns#">MenuStrip</category><category domain="http://www.blogger.com/atom/ns#">MenuItem</category><category domain="http://www.blogger.com/atom/ns#">MdiWindowsListItem</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">MDIList</category><category domain="http://www.blogger.com/atom/ns#">MainMenu</category><title>Menú con lista de ventanas</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nFKjqrQcRndBZAecAyvNHAGGqEU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nFKjqrQcRndBZAecAyvNHAGGqEU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nFKjqrQcRndBZAecAyvNHAGGqEU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nFKjqrQcRndBZAecAyvNHAGGqEU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Algo que parece tan complicado a simple vista como es la de gestionar un menú de formularios hijos abiertos (MDI-MDIChild), se convierte en una tarea fácil con nuestro querido .NET framework, pero ojo, no publico este post porque sea algo tan sencillo, no!!!, lo publico porque he encontrado una notable diferencia entre .NET framework 2.0 y .NET framework 3.5 que puede liar la madeja durante un buen rato &lt;span style="font-style:italic;"&gt;(por cierto que buena está la madeja de cordero). &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ahora al grano, para &lt;span style="font-weight:bold;"&gt;Framework 2.0&lt;/span&gt; tenemos que añadir un menú del cuadro de herramientas llamado &lt;a href="http://msdn.microsoft.com/es-es/library/system.windows.forms.mainmenu%28VS.80%29.aspx"&gt;MainMenu&lt;/a&gt; (obsoleto) y añadir sus correspondientes &lt;a href="http://msdn.microsoft.com/es-es/library/system.windows.forms.menuitem_members%28VS.80%29.aspx"&gt;MenuItems&lt;/a&gt;, en el que uno de ellos sería por ejemplo "Ventanas", y al que tenemos que poner la propiedad &lt;a href="http://msdn.microsoft.com/es-es/library/system.windows.forms.menuitem.mdilist%28VS.80%29.aspx"&gt;MDIList&lt;/a&gt; a true.&lt;br /&gt;&lt;br /&gt;Para &lt;span style="font-weight:bold;"&gt;Framework 3.5&lt;/span&gt; la cosa ha cambiado, ya no tenemos el menú MainMenu, y como habréis podido leer en el link que os he puesto en MainMenu, Microsoft nos aconseja que usemos &lt;a href="http://msdn.microsoft.com/es-es/library/system.windows.forms.menustrip.aspx"&gt;MenuStrip&lt;/a&gt; en vez de MainMenu. Y ahora ya nos podríamos volver locos buscando lo de MDIList porque aquí esa propiedad no existe. En este control lo que nos han puesto es una propiedad llamada &lt;a href="http://msdn.microsoft.com/es-es/library/system.windows.forms.menustrip.mdiwindowlistitem.aspx"&gt;MdiWindowsListItem&lt;/a&gt; que nos permite seleccionar un &lt;a href="http://msdn.microsoft.com/es-es/library/system.windows.forms.toolstripmenuitem.aspx"&gt;ToolStripMenuItem&lt;/a&gt; que hayamos creado en el Menú ToolStrip.&lt;br /&gt;&lt;br /&gt;Y con esto nada más por ahora, y que malo es no saber, porque he perdido un poquillo de tiempo por esta chorrada, casi me creo yo mismo el gestor del menú de ventanas y eso no me sale rentable.&lt;br /&gt;&lt;br /&gt;Un saludo&lt;br /&gt;Oscar Montesinos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-7348131765418945504?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/zwbErkrBk4M" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/zwbErkrBk4M/menu-con-lista-de-ventanas.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>1</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2009/09/menu-con-lista-de-ventanas.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-5227983923082124638</guid><pubDate>Wed, 26 Aug 2009 16:12:00 +0000</pubDate><atom:updated>2009-08-26T18:21:34.691+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows Vista</category><category domain="http://www.blogger.com/atom/ns#">MSDE 2000</category><category domain="http://www.blogger.com/atom/ns#">MSDE 2</category><category domain="http://www.blogger.com/atom/ns#">Windows 7</category><category domain="http://www.blogger.com/atom/ns#">SQL Server</category><category domain="http://www.blogger.com/atom/ns#">Windows Server 2008</category><title>Windows Server 2008 &amp; MSDE</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9Abey6xn2G56ZgXv0JIcQYfSkt8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9Abey6xn2G56ZgXv0JIcQYfSkt8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9Abey6xn2G56ZgXv0JIcQYfSkt8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9Abey6xn2G56ZgXv0JIcQYfSkt8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Searching...&lt;br /&gt;&lt;br /&gt;I'm searching with google for MSDE and Windows Server 2008 bugs. I find a terrible surprise: MSDE doesn't support by Microsoft since 2007, but I tried to install MSDE with Service Pack 4 in 2008 server and, ¡¡¡congratulations!!!, MSDE works fine!!!. I tried to install MSDE SP4 in Vista and 7 and works fine!!!, perfect, no problem, Me and my customers are happies!!!&lt;br /&gt;&lt;br /&gt;links finded:&lt;br /&gt;http://blogs.msdn.com/sqlexpress/archive/2006/08/09/693650.aspx &lt;br /&gt;http://blogs.msdn.com/darrylburling/archive/2006/08/16/701729.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-5227983923082124638?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/GQG7h3PO5v4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/GQG7h3PO5v4/windows-server-2008-msde.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2009/08/windows-server-2008-msde.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-6212210728693475475</guid><pubDate>Mon, 03 Aug 2009 20:53:00 +0000</pubDate><atom:updated>2009-08-04T22:11:17.509+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">WebClient</category><category domain="http://www.blogger.com/atom/ns#">Framework 3.5</category><category domain="http://www.blogger.com/atom/ns#">Syndication</category><category domain="http://www.blogger.com/atom/ns#">LINQ</category><category domain="http://www.blogger.com/atom/ns#">Lector RSS</category><title>Lector RSS con Framework 3.5 sin LINQ</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/l3cgetyEXXTuCCnPR4KMyI1yJCg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l3cgetyEXXTuCCnPR4KMyI1yJCg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/l3cgetyEXXTuCCnPR4KMyI1yJCg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l3cgetyEXXTuCCnPR4KMyI1yJCg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Llevaba tiempo dándole vueltas al nuevo Framework 3.5 y queriendo mejorar el anterior lector RSS que hice con LINQ y que nunca me ha convencido: http://oscarmontesinos.blogspot.com/2009/01/lector-rss-en-c-35-y-linq.html, está claro que la inexperiencia te hace pasar malos ratos y perder tiempo dándole vueltas a temas que ya están solucionados. Pero ¿cuál es el camino a seguir?, como me dijo mi amigo Pedro Hurtado, el camino a seguir empieza con el Framwork 1.0 y reflector....&lt;br /&gt;&lt;br /&gt;Después de leer algunos libros y leer código de otra gente (Marino Posadas por ejemplo), descubrí que existía en Framework 3.5 y en Silverlight también, el espacio de nombres:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_zbjGlYY-sfk/SndPqNi7YMI/AAAAAAAAAJ8/jQjvh6t44bE/s1600-h/Syndication.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5365845067644494018" style="margin: 0pt 10px 10px 0pt; float: left; width: 319px; cursor: pointer; height: 38px;" alt="" src="http://1.bp.blogspot.com/_zbjGlYY-sfk/SndPqNi7YMI/AAAAAAAAAJ8/jQjvh6t44bE/s400/Syndication.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;junto con el de .Net para WebClient que me sirve para lo que creo: mejorar y optimizar el lector RSS de una forma más "Framework" y sin experimentos raros con LINQ. Así que me puse manos a la obra y saqué el siguiente código que me servía para mis propósitos en las aplicaciones que suelo elaborar:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_zbjGlYY-sfk/SndRzmNo4FI/AAAAAAAAAKM/M-81eN6zRnU/s1600-h/LectorRSS.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5365847427908165714" style="margin: 0pt 10px 10px 0pt; float: left; width: 400px; cursor: pointer; height: 237px;" alt="" src="http://4.bp.blogspot.com/_zbjGlYY-sfk/SndRzmNo4FI/AAAAAAAAAKM/M-81eN6zRnU/s400/LectorRSS.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;El ahorro de código con el anterior sistema, es considerable, así como la utilización de clases de framework nos aporta más conocimiento sobre el sitio en el que estamos leyendo las noticias de una forma estructurada, completa y simple de interpretar.&lt;br /&gt;&lt;br /&gt;Un saludo&lt;br /&gt;Oscar Montesinos&lt;br /&gt;&lt;br /&gt;(Todos los ejemplos son optimizables y discutibles, esta solución no es la mejor (de hecho es la 3ª versión que publico sobre el mismo tema), seguro que existe alguien que la puede hacer mejor, tan sólo es mi aportación con lo que voy aprendiendo día a día, si te sirve me alegro, si no te sirve y puedes mejorarlo, te invito a que lo hagas y lo compartas con todos.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-6212210728693475475?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/zIbd1R6f-QE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/zIbd1R6f-QE/lector-rss-con-framework-35-sin-linq.html</link><author>noreply@blogger.com (OscarMontesinos)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_zbjGlYY-sfk/SndPqNi7YMI/AAAAAAAAAJ8/jQjvh6t44bE/s72-c/Syndication.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2009/08/lector-rss-con-framework-35-sin-linq.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-5958569640753991368</guid><pubDate>Sun, 26 Jul 2009 17:07:00 +0000</pubDate><atom:updated>2009-07-26T19:15:25.594+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ProcessStartInfo</category><category domain="http://www.blogger.com/atom/ns#">truco</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Process</category><title>C# ProcessStartInfo y Process</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/o_d8WaHl8f97dEGhX-UgdlOx3CA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o_d8WaHl8f97dEGhX-UgdlOx3CA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/o_d8WaHl8f97dEGhX-UgdlOx3CA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o_d8WaHl8f97dEGhX-UgdlOx3CA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Un truquillo para ejecutar aplicaciones desde un programilla y que se quede en espera hasta que éste termine (pasando parámetros):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_zbjGlYY-sfk/SmyPG8zbpJI/AAAAAAAAAJc/l1hVcz7T5Ow/s1600-h/Process.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 84px;" src="http://1.bp.blogspot.com/_zbjGlYY-sfk/SmyPG8zbpJI/AAAAAAAAAJc/l1hVcz7T5Ow/s400/Process.png" alt="" id="BLOGGER_PHOTO_ID_5362818605855253650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;y aquí si quieres copiar y pegar:&lt;br /&gt;&lt;br /&gt;ProcessStartInfo startInfo = new ProcessStartInfo("c:\\windows\\notepad.exe");&lt;br /&gt;startInfo.Arguments = "c:\\UnFichero.txt";&lt;br /&gt;startInfo.WindowStyle = ProcessWindowStyle.Normal;&lt;br /&gt;Process process=new Process();&lt;br /&gt;process.StartInfo=startInfo;&lt;br /&gt;process.Start();&lt;br /&gt;process.WaitForExit();&lt;br /&gt;process.Close();&lt;br /&gt;&lt;br /&gt;Un saludo&lt;br /&gt;Oscar Montesinos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-5958569640753991368?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/1k9dd8ewFAw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/1k9dd8ewFAw/c-processstartinfo-y-process.html</link><author>noreply@blogger.com (OscarMontesinos)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_zbjGlYY-sfk/SmyPG8zbpJI/AAAAAAAAAJc/l1hVcz7T5Ow/s72-c/Process.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2009/07/c-processstartinfo-y-process.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-3812164856796736749</guid><pubDate>Fri, 24 Jul 2009 18:13:00 +0000</pubDate><atom:updated>2009-07-24T20:27:01.545+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">NAMESPACE</category><category domain="http://www.blogger.com/atom/ns#">NS</category><category domain="http://www.blogger.com/atom/ns#">XML</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">LINQ2XML</category><category domain="http://www.blogger.com/atom/ns#">LINQ</category><title>LINQ a XML con namespace</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VxuQ98yysZP2N75x8D21k9zhlTQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VxuQ98yysZP2N75x8D21k9zhlTQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VxuQ98yysZP2N75x8D21k9zhlTQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VxuQ98yysZP2N75x8D21k9zhlTQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Hoy toca una rápida.&lt;br /&gt;&lt;br /&gt;Al intentar consultar un XML generado por la competencia mediante LINQ por el procedimiento tradicional, me ha pasado que no me encontraba nada cuando en los XML generados por nuestra aplicación si me encuentra los elementos que busco mediante la siguiente instrucción:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_zbjGlYY-sfk/Smn7BHzhlmI/AAAAAAAAAI8/KeydXep29ms/s1600-h/consulta+linq+a+xml.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 391px; height: 55px;" src="http://1.bp.blogspot.com/_zbjGlYY-sfk/Smn7BHzhlmI/AAAAAAAAAI8/KeydXep29ms/s400/consulta+linq+a+xml.png" alt="" id="BLOGGER_PHOTO_ID_5362092828054885986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Revisando el xml que genera la competencia y comparándolo con el nuestro me he dado cuenta que en la cabezar usa el atributo xmlns, es decir, que usa namespace para el nombre de cada elemento:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_zbjGlYY-sfk/Smn7XZcn11I/AAAAAAAAAJE/9qzDoeoN8aA/s1600-h/linq2xml+namespace.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 167px;" src="http://4.bp.blogspot.com/_zbjGlYY-sfk/Smn7XZcn11I/AAAAAAAAAJE/9qzDoeoN8aA/s400/linq2xml+namespace.png" alt="" id="BLOGGER_PHOTO_ID_5362093210747787090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Así que la cosa cambia, porque un elemento que dependa del raiz DOCS_NOT ya no se llama tal cual lo vemos, se llama por ejemplo &lt;doc_not xmlns="....."&gt;, así que la búsqueda mediante linq cambiará a:&lt;br /&gt;&lt;br /&gt;&lt;/doc_not&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_zbjGlYY-sfk/Smn8yGwokhI/AAAAAAAAAJM/W-x3S-hJmJU/s1600-h/linq2xml+con+namespace+antes+del+nombre.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 58px;" src="http://4.bp.blogspot.com/_zbjGlYY-sfk/Smn8yGwokhI/AAAAAAAAAJM/W-x3S-hJmJU/s400/linq2xml+con+namespace+antes+del+nombre.png" alt="" id="BLOGGER_PHOTO_ID_5362094769099543058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;doc_not xmlns="....."&gt;es decir, que de alguna manera hay que indicarle el namespace.&lt;br /&gt;&lt;br /&gt;Pues nada más, saludos a todos y a divertirse...&lt;br /&gt;&lt;br /&gt;Un saludo&lt;br /&gt;Oscar Montesinos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/doc_not&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-3812164856796736749?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/AWS6p2Lf6cE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/AWS6p2Lf6cE/linq-xml-con-namespace.html</link><author>noreply@blogger.com (OscarMontesinos)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_zbjGlYY-sfk/Smn7BHzhlmI/AAAAAAAAAI8/KeydXep29ms/s72-c/consulta+linq+a+xml.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2009/07/linq-xml-con-namespace.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-91915787363499017</guid><pubDate>Tue, 21 Jul 2009 16:49:00 +0000</pubDate><atom:updated>2009-07-21T21:28:14.100+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">e-DNI</category><category domain="http://www.blogger.com/atom/ns#">Framework 3.5</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2008</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">SQL Server 2000</category><category domain="http://www.blogger.com/atom/ns#">JPA</category><title>Proyecto e-Dni</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iOcS5is9NU7dghDLzVYniLezCOw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iOcS5is9NU7dghDLzVYniLezCOw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iOcS5is9NU7dghDLzVYniLezCOw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iOcS5is9NU7dghDLzVYniLezCOw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span id="public_link_uri"&gt;Os dejo el link con los screenshots del proyecto e-DNI que estoy a punto de terminar. Ya está en fase de pruebas:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.facebook.com/photo.php?pid=30324446&amp;amp;l=2fb71f0f08&amp;amp;id=1592291277"&gt;http://www.facebook.com/photo.php?pid=30324446&amp;amp;l=2fb71f0f08&amp;amp;id=1592291277&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;El proyecto está hecho en C#, Framework 3.5 contra una bd en SQL Server compatible con 2000.&lt;br /&gt;&lt;br /&gt;Un saludo&lt;br /&gt;Oscar Montesinos.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-91915787363499017?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/mbADdGdBKN8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/mbADdGdBKN8/proyecto-e-dni.html</link><author>noreply@blogger.com (OscarMontesinos)</author><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2009/07/proyecto-e-dni.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-4153955427816442655</guid><pubDate>Wed, 08 Jul 2009 14:32:00 +0000</pubDate><atom:updated>2009-07-14T22:57:45.130+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SPT</category><category domain="http://www.blogger.com/atom/ns#">Indice de Fuerza Tecnica</category><category domain="http://www.blogger.com/atom/ns#">Unience</category><category domain="http://www.blogger.com/atom/ns#">Sistema Personal de Trading</category><category domain="http://www.blogger.com/atom/ns#">IFT</category><title>SPT con tablas para IFT</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5uwoPeUvq-B2nr1wAn4t7PIh6gw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5uwoPeUvq-B2nr1wAn4t7PIh6gw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5uwoPeUvq-B2nr1wAn4t7PIh6gw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5uwoPeUvq-B2nr1wAn4t7PIh6gw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Como el título no especifica lo que quiero contar para los profanos, os dejo aquí el título completo: &lt;strong&gt;"Sistema Persona&lt;/strong&gt;&lt;strong&gt;l de Trading con tablas para Indices de Fuerza Técnica".&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Y aquí el diagrama:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_zbjGlYY-sfk/SlzxKH018BI/AAAAAAAAAIc/jeA0DM2CB_k/s1600-h/IFT.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 205px;" src="http://4.bp.blogspot.com/_zbjGlYY-sfk/SlzxKH018BI/AAAAAAAAAIc/jeA0DM2CB_k/s400/IFT.png" alt="" id="BLOGGER_PHOTO_ID_5358422812865720338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Para calcular el Indice de Fuerza Técnica por periodos corto/medio/largo plazo necesitaremos una tabla de Indices de FT, una tabla de definición de periodos, la relación de Valores con IFT y la relación de Periodos con ValoresIFT.&lt;br /&gt;&lt;br /&gt;Seguimos trabajando en la importación automática de datos para su análisis. Ahora ya tenemos 2 algoritmos a desarrollar para después de esta importación:&lt;br /&gt;a) Cálculo de ITF&lt;br /&gt;b) Cálculo de Stop Loss.&lt;br /&gt;&lt;br /&gt;Un saludo&lt;br /&gt;Oscar Montesinos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-4153955427816442655?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/lHefs-xjrLo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/lHefs-xjrLo/spt-con-tablas-para-ift.html</link><author>noreply@blogger.com (OscarMontesinos)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_zbjGlYY-sfk/SlzxKH018BI/AAAAAAAAAIc/jeA0DM2CB_k/s72-c/IFT.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2009/07/spt-con-tablas-para-ift.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19117468.post-9143751736957348628</guid><pubDate>Sun, 05 Jul 2009 18:42:00 +0000</pubDate><atom:updated>2009-07-05T20:53:02.815+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL Server 2008</category><category domain="http://www.blogger.com/atom/ns#">Sistema Personal de Trading</category><category domain="http://www.blogger.com/atom/ns#">Tablas</category><title>SPT Primeras tablas</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/g_NjYc8yx-25OimpYweMmZUche0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/g_NjYc8yx-25OimpYweMmZUche0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/g_NjYc8yx-25OimpYweMmZUche0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/g_NjYc8yx-25OimpYweMmZUche0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Empezamos a implementar las ideas, y aquí las primeras tablas para almacenar los datos:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_zbjGlYY-sfk/SlD0sWoTT4I/AAAAAAAAAIM/3SYV8UHIffA/s1600-h/spt_tablas.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5355048999769558914" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 189px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_zbjGlYY-sfk/SlD0sWoTT4I/AAAAAAAAAIM/3SYV8UHIffA/s400/spt_tablas.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;- Indicadores:&lt;/strong&gt;&lt;br /&gt;Tabla de índices, valores, etc. que se van a analizar desde el SPT_Análisis (SPTA) y desde el SPT_Servicio_de_Integración (SPTSI).&lt;br /&gt;Ruta es la dirección de dónde se extraen los datos., Tipo es el tipo de índice: valor, índice general, de materias primas, etc...&lt;br /&gt;&lt;strong&gt;- IndicadoresDiario:&lt;/strong&gt;&lt;br /&gt;Es la tabla donde se almacenan los datos diarios que se irán recogiendo de cualquier fuente y que se tratarán previamente con SPTSI. De esta tabla se alimentará SPTA para llegar a conclusiones según los algoritmos desarrollados.&lt;br /&gt;&lt;br /&gt;Ahora toca desarrollar SPTSI para que automáticamente se lean los datos de las distintas fuentes disponibles.&lt;br /&gt;&lt;br /&gt;Un saludo&lt;br /&gt;Oscar Montesinos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19117468-9143751736957348628?l=oscarmontesinos.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DosfloresEnnet/~4/nq8Kgc_-Rzk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/DosfloresEnnet/~3/nq8Kgc_-Rzk/spt-primeras-tablas.html</link><author>noreply@blogger.com (OscarMontesinos)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_zbjGlYY-sfk/SlD0sWoTT4I/AAAAAAAAAIM/3SYV8UHIffA/s72-c/spt_tablas.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://oscarmontesinos.blogspot.com/2009/07/spt-primeras-tablas.html</feedburner:origLink></item></channel></rss>

