<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-23292882</id><updated>2012-02-04T14:41:08.429-03:00</updated><category term='logging'/><category term='Interoperability'/><category term='SEI'/><category term='integration'/><category term='TDD'/><category term='Code Review'/><category term='WCF'/><category term='mocking'/><category term='Office'/><category term='patterns'/><category term='Eclipse'/><category term='roles'/><category term='best practices'/><category term='Ubuntu'/><category term='Fowler'/><category term='ASP.Net'/><category term='pattern code sample'/><category term='architecture'/><category term='calidad'/><category term='SOA'/><category term='Azure'/><category term='Quality Attributes'/><category term='Cloud computing'/><title type='text'>Sergio Salanitri Blog</title><subtitle type='html'>Arquitectura de Software, programación , tendencias y reflexiones personales.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-23292882.post-1970110202792250117</id><published>2011-03-15T12:58:00.001-03:00</published><updated>2011-03-15T12:58:58.698-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>Tip para el SoapUI</title><content type='html'>Hay casos en que desde el SoapUI no se puede importar wsdls que están hosteados en un sitio con autenticación integrada. Se desconoce el motivo del error. Pero de todas formas se puede importar el wsdl bajándolo como archivo y luego importar el archivo utilizando la opción Browse de Projects-&gt;"New SoapUI Project" o "Proyecto Ya creado"-&gt;Add WSDL&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-1970110202792250117?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/1970110202792250117/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=1970110202792250117' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/1970110202792250117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/1970110202792250117'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2011/03/tip-para-el-soapui.html' title='Tip para el SoapUI'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-6324418061583619027</id><published>2011-03-15T11:26:00.002-03:00</published><updated>2011-03-15T12:51:05.689-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Office'/><title type='text'>Debugging de formularios infopath</title><content type='html'>El presente post tiene como fin indicar los tips a seguir para poder debuguear formularios infopath que requieran prámetros de entrada desde el Visual Studio 2008 SP1.&lt;br /&gt;&lt;br /&gt;• Seleccionar las propiedades del formulario a debuguear.&lt;br /&gt;• Configurar el path del infopath.exe y los parámetros que se les quiera enviar (si aplica).&lt;br /&gt;• El Visual Studio no puede levantar el formulario infopath por eso se debe llamar a una aplicación externa para que se encargue. En este caso la aplicación infopath.exe&lt;br /&gt;&lt;br /&gt;Ejemplo&lt;br /&gt;Dentro de Debug&lt;br /&gt;Start externa programs:&lt;br /&gt;Infoapth 2007: C:\Program Files\Microsoft Office\Office12\INFOPATH.EXE&lt;br /&gt;Infopath 2010: C:\Program Files\Microsoft Office\Office14\INFOPATH.EXE&lt;br /&gt;&lt;br /&gt;Publicación:&lt;br /&gt;Luego de la compilación se deben publicar los formuario, en este ejemplo lo publicamos en la carpeta InfoPath_Publish en la raiz del proyecto.&lt;br /&gt;&lt;br /&gt;Command line arguments:&lt;br /&gt;"..\..\..\..\..\InfoPath_Publish\Formulario.xsn" /InputParameters "modo=parametro1=12345&amp;amp;parametro2=P&amp;amp;parametro3=54321&amp;amp;configpath=D:\MyProject\ProjectName\FormPath"&lt;br /&gt;&lt;br /&gt;• Agregar breakpoints y ejecutar el debugging de la forma habitual con F5.&lt;br /&gt;• Este proceso levantará en forma externa al Infopath y luego el Visual Studio adjunta el proceso del Infopath para poder debugguearlo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-6324418061583619027?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/6324418061583619027/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=6324418061583619027' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/6324418061583619027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/6324418061583619027'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2011/03/debugging-de-formularios-infopath.html' title='Debugging de formularios infopath'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-1588857727281829967</id><published>2010-06-07T12:50:00.002-03:00</published><updated>2010-06-07T12:51:01.767-03:00</updated><title type='text'>Mica en fiesta bicentenario</title><content type='html'>&amp;nbsp;&lt;br&gt;&lt;div id="sns_" style="text-align:center"&gt;&lt;img src="http://docs.google.com/File?id=dhpvgcfx_205n74x7j87_b" style="width:640px"&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-1588857727281829967?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/1588857727281829967/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=1588857727281829967' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/1588857727281829967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/1588857727281829967'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2010/06/fiesta-bicentenario.html' title='Mica en fiesta bicentenario'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-1470930882100181297</id><published>2010-05-31T12:15:00.005-03:00</published><updated>2011-03-15T13:02:19.943-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='roles'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>Arquitectura de software, rol e integracion de aplicaciones</title><content type='html'>En el presente post, comparto un documento académico que hice con respecto al tema de referencia.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bit.ly/bfSKOR"&gt;http://bit.ly/bfSKOR&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;El resumen de este documento fue posteado en&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ssalanitri.blogspot.com/2010/03/my-software-architecture-presentation.html"&gt;My Software Architecture Presentation&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-1470930882100181297?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/1470930882100181297/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=1470930882100181297' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/1470930882100181297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/1470930882100181297'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2010/05/arquitectura-de-software-rol-e.html' title='Arquitectura de software, rol e integracion de aplicaciones'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-6636380859531102614</id><published>2010-05-28T13:13:00.001-03:00</published><updated>2010-05-28T13:14:14.586-03:00</updated><title type='text'>Habilidades de un arquitecto de software</title><content type='html'>&lt;h1 style="margin:6pt 0cm 3pt 39.6pt;text-align:justify"&gt;&lt;a id="_Toc245638337" name="_Toc245638337"&gt;&lt;/a&gt;&amp;nbsp;&lt;/h1&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;La visi&amp;oacute;n general de &amp;nbsp;un arquitecto de software es un experto en tecnolog&amp;iacute;as de desarrollo, ser&amp;iacute;a el encargado de proveer soluciones tecnol&amp;oacute;gicas &amp;oacute;ptimas para los problemas del negocio. Adem&amp;aacute;s se espera que esas soluciones se integren correctamente con los componentes y soluciones existentes y planeadas.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;El arquitecto se tiene que comportar como un arque&amp;oacute;logo, con inventiva, innovaci&amp;oacute;n, capacidad de mediaci&amp;oacute;n, negociaci&amp;oacute;n y liderazgo.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;Por lo tanto se pretende que sea especialista pero a su ver tenga una visi&amp;oacute;n general de todas las etapas del ciclo de vida del desarrollo del software. Esto le permite al arquitecto controlar aspectos de calidad en el desarrollo desde el inicio hasta la implementaci&amp;oacute;n en ambiente productivo y su posterior mantenimiento &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;div style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;Dado que es pr&amp;aacute;cticamente imposible ser especialista en todas las &amp;aacute;reas del ciclo de vida del desarrollo del software y a su vez tener una visi&amp;oacute;n general del proceso existen las clasificaciones de los diferentes tipos de arquitectos de IT.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style="margin:0cm 0cm 0pt;text-align:justify"&gt;&amp;nbsp;&lt;/div&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;Joseph &lt;span class="spelle"&gt;Hofstader agrega una visi&amp;oacute;n del arquitecto desde el punto de vista de las habilidades de dise&amp;ntilde;o. En la etapa inicial del proyecto debe tener una visi&amp;oacute;n conceptual del mismo en base a los requisitos funcionales y las restricciones del negocio, en una etapa posterior se debe dise&amp;ntilde;ar desde el punto de vista del modelo de dominio, puede ser horizontal o vertical, horizontal es aplicable a trav&amp;eacute;s de diferentes industrias y la vista de dominio vertical es aplicable a un industria en particular, se suele subestimar las habilidades para modelar dominios verticales, pero no es lo mismo el modelo de dominio para una empresa de banca, de telecomunicaciones, servicios o metal&amp;uacute;rgica, &amp;nbsp;est&amp;aacute; habilidad tiene que ser estimada por los CIOs y aprovechada para brindar valor agregado a los dise&amp;ntilde;os de los sistemas de la compa&amp;ntilde;&amp;iacute;a.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;div style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;span class="spelle"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;Estos dos aspectos definen la definici&amp;oacute;n del problema, tal como se muestra en la figura existe una segunda etapa que se basa a el desarrollo de la soluci&amp;oacute;n&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin:0cm 0cm 0pt;text-align:justify"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;span class="spelle"&gt;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;span class="spelle"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align:center"&gt;&lt;img src="http://docs.google.com/File?id=dhpvgcfx_198c82gpgvf_b" style="height:auto;width:455px"&gt;&lt;/p&gt;&lt;p align="center" style="margin:0cm 0cm 0pt;text-align:center"&gt;&lt;/p&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;Conocer c&amp;oacute;mo trabaja una tecnolog&amp;iacute;a no es lo &amp;uacute;nico que se debe saber para dise&amp;ntilde;ar aplicaciones robustas, dedicarle esfuerzo a esta etapa no es menos importante que las anteriores, pues un profundo conocimiento de la tecnolog&amp;iacute;a a aplicar permite al arquitecto alinear las especificaciones funcionales al dise&amp;ntilde;o t&amp;eacute;cnico. Es recomendable trabajar con el m&amp;iacute;nimo de tecnolog&amp;iacute;as posibles, esto permite administrar el esfuerzo del desarrollo en forma m&amp;aacute;s eficiente, reduciendo la cantidad de herramientas de administraci&amp;oacute;n, desarrollo, monitoreo etc, teniendo grupos con menos perfiles t&amp;eacute;cnicos etc. [&lt;span class="spelle"&gt;Hofstader &lt;/span&gt;Joseph, 2008].&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style="margin:0cm 0cm 0pt;text-align:justify"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;div id="n9ob" style="text-align:left"&gt;&lt;div id="cy.x" style="text-align:center"&gt;&lt;div id="a4e0" style="text-align:center"&gt;&lt;a href="http://docs.google.com/File?id=dhpvgcfx_2026cxst8fk_b" target="_blank"&gt;&lt;img src="http://docs.google.com/File?id=dhpvgcfx_2026cxst8fk_b" style="width:240px"&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p align="center" style="margin:0cm 0cm 0pt;text-align:center"&gt;&lt;/p&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;Existe otra clasificaci&amp;oacute;n de los roles difundida por el IASA [Akenine Daniel, 2008] que est&amp;aacute; relacionada con ciertas actividades que debe realizar un arquitecto clasificada en 3 niveles y 40 artefactos a generar.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&amp;nbsp;&lt;/p&gt;&lt;ul type="disc"&gt;&lt;li style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;&lt;b&gt;Nivel 1: &lt;/b&gt;Los arquitectos y los responsables del negocio crean estrategias juntos &amp;nbsp;de c&amp;oacute;mo alinear las estrategias del IT con las del negocio. Estos principios y pol&amp;iacute;ticas tienen influencia en toda la organizaci&amp;oacute;n. Ejemplos de entregables en este nivel son planes de desarrollo de software , visiones y estrategias&lt;/font&gt;&lt;/font&gt;&lt;/li&gt;&lt;li style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;&lt;b&gt;Nivel 2:&lt;/b&gt; Los arquitectos crean artefactos que soportan la relaci&amp;oacute;n entre el negocio y la tecnolog&amp;iacute;a. A este nivel, los arquitectos intentan entender el proceso de la organizaci&amp;oacute;n y como pueden mejorarlo usando las capacidades que provee el &amp;aacute;rea de IT. Ejemplos de este tipo de artefactos son diagrama de procesos y de servicios.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt;&lt;li style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;&lt;b&gt;Nivel 3:&lt;/b&gt; Producen artefactos para el modelado t&amp;eacute;cnico de la arquitectura, utilizan las mejores practicas de dise&amp;ntilde;o posibles para crear buenas soluciones, tales como equilibrio entre costo y funcionalidad, escalabilidad, flexibilidad, seguridad y otros atributos de calidad. Dentro de este nivel est&amp;aacute;n los modelos de aplicaci&amp;oacute;n, de datos, de dominio, de componentes, capas, objetos etc.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&amp;nbsp;&lt;/p&gt;&lt;h1 style="margin:6pt 0cm 3pt 39.6pt;text-align:justify"&gt;&lt;a id="_Toc245638338" name="_Toc245638338"&gt;&lt;/a&gt;&lt;font size="3"&gt;&lt;font face="Arial"&gt;Habilidades blandas&lt;/font&gt;&lt;/font&gt;&lt;/h1&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0cm 0cm 0pt 18pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;Un arquitecto tiene que tener la habilidad de manejar relaciones inter personales entre los miembros de su equipo, los l&amp;iacute;deres de los proyectos, los clientes y usuarios manejando una adecuada comunicaci&amp;oacute;n y lenguaje acorde con cada perfil de interlocutor.&amp;nbsp; Es un error com&amp;uacute;n hablar con lenguaje excesivamente t&amp;eacute;cnico con un analista funcional o l&amp;iacute;der de usuario cuando en realidad se deber&amp;iacute;a expresar en t&amp;eacute;rminos de procesos de negocio e interfaces de usuario y que valor agregado otorga el sistema al negocio.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style="margin:0cm 0cm 0pt 18pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;Debe tener la habilidad de bajar a un nivel de atracci&amp;oacute;n adecuado las especificaciones recibidas desde los usuarios que solicitan determinado sistema, para ello se requiere la habilidad de relevar la informaci&amp;oacute;n necesario de esas personas.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/p&gt;&lt;h1 style="margin:6pt 0cm 3pt 39.6pt;text-align:justify"&gt;&lt;a id="w516" name="_Toc245638339"&gt;&lt;/a&gt;&lt;font size="3"&gt;&lt;font face="Arial"&gt;Habilidades t&amp;eacute;cnicas&lt;/font&gt;&lt;/font&gt;&lt;/h1&gt;&lt;p style="margin:0cm 0cm 0pt;text-align:justify"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0cm 0cm 0pt 17.85pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;La visi&amp;oacute;n general que tiene el arquitecto le permite dise&amp;ntilde;ar el sistema con un cierto nivel de abstracci&amp;oacute;n que le permita describir todo el sistema. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style="margin:0cm 0cm 0pt 17.85pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;En sistemas muy grandes estos dise&amp;ntilde;os iniciales se subdividen en sistemas m&amp;aacute;s peque&amp;ntilde;os que para poder simplificar el dise&amp;ntilde;o. Estos subsistemas pueden estar construidos en diferentes tecnolog&amp;iacute;as, implementados en infraestructuras diferentes, pudiendo ser construidos dentro de la empresa, por un tercero o bien ser un producto comercial. El dise&amp;ntilde;o debe permitir integrar todos los sub sistemas mediante la utilizaci&amp;oacute;n de est&amp;aacute;ndares de integraci&amp;oacute;n de aplicaci&amp;oacute;n aplicables en la empresa.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style="margin:0cm 0cm 0pt 17.85pt;text-align:justify"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;Para un correcto dise&amp;ntilde;o se debe tener bien identificados los requisitos funcionales, tener un adecuado conocimiento de las tecnolog&amp;iacute;as, productos y sistemas implementados en la compa&amp;ntilde;&amp;iacute;a, conocer sus ventajas y desventajas y luego decidir si utilizar productos y sistemas ya existentes, adaptarlos a las necesidades, construir nuevos o impulsar la adquisici&amp;oacute;n de productos comerciales que se adapten a todo o parte de la necesidad del negocio. En el capitulo referentes a Dise&amp;ntilde;o de Arquitecturas se analizar&amp;aacute; con m&amp;aacute;s detalle este tema.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;div style="margin:0cm 0cm 0pt 17.85pt;text-align:justify"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin:0cm 0cm 0pt 17.85pt;text-align:justify"&gt;&lt;h1 style="margin:6pt 0cm 3pt 39.6pt;text-align:justify"&gt;&lt;a id="my7c" name="_Toc245638339"&gt;&lt;/a&gt;&lt;font size="3"&gt;Referencias&lt;/font&gt;&lt;/h1&gt;&lt;p style="margin:6pt 0cm 3pt 39.6pt;text-align:justify"&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;ol type="1"&gt;&lt;li style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;font face="Times New Roman" size="3"&gt;[Akenine Daniel, 2008], &amp;ldquo;A Study of Architect Roles by IASA Sweden&amp;rdquo;, Architecture Journal 15, MSDN Architecture Center, &lt;/font&gt;&lt;a href="http://msdn.microsoft.com/en-us/architecture/cc505968.aspx"&gt;&lt;font face="Times New Roman"&gt;&lt;font size="3"&gt;&amp;nbsp;&lt;font color="#0000ff"&gt;http://msdn.microsoft.com/en-us/architecture/cc505968.aspx&lt;/font&gt;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style="margin:0cm 0cm 0pt;text-align:justify"&gt;&lt;font face="Times New Roman" size="3"&gt;[&lt;span class="spelle"&gt;Hofstader &lt;/span&gt;Joseph, 2008], &amp;ldquo;We Don&amp;#39;t Need No Architects&amp;rdquo;, Architecture Journal 15, &lt;/font&gt;&lt;a href="http://msdn.microsoft.com/en-us/architecture/cc505974.aspx"&gt;&lt;font color="#0000ff" face="Times New Roman" size="3"&gt;http://msdn.microsoft.com/en-us/architecture/cc505974.aspx&lt;/font&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="margin:0cm 0cm 0pt 18pt;text-align:justify"&gt;&amp;nbsp;&lt;/div&gt;&lt;p style="margin:0cm 0cm 0pt 18pt;text-align:justify"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-6636380859531102614?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/6636380859531102614/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=6636380859531102614' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/6636380859531102614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/6636380859531102614'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2010/05/habilidades-de-un-arquitecto-de.html' title='Habilidades de un arquitecto de software'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-165842308193170077</id><published>2010-04-20T14:09:00.001-03:00</published><updated>2010-04-20T14:09:37.939-03:00</updated><title type='text'>Tutorial de Linq</title><content type='html'>Comparto este tutorial sobre linq a nivel introductorio muy intresante, principalmente porque empieza con lso conceptos básicos necesario para entender linq.&lt;div style="width:425px" id="__ss_340266"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/blo85/linq-340266" title="Linq"&gt;Linq&lt;/a&gt;&lt;/strong&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=linq-1207579553462901-8&amp;stripped_title=linq-340266" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=linq-1207579553462901-8&amp;stripped_title=linq-340266" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/blo85"&gt;blo85&lt;/a&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/23292882-165842308193170077?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/165842308193170077/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=165842308193170077' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/165842308193170077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/165842308193170077'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2010/04/tutorial-de-linq.html' title='Tutorial de Linq'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-3917212204211426103</id><published>2010-03-15T16:11:00.003-03:00</published><updated>2010-09-28T13:24:06.604-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Config WCF with two host headers (english)</title><content type='html'>&lt;b&gt;Scenario:&lt;/b&gt; WCF with .net framework 3.5 Sp1, Windows 2003 SP2, IIS 6.0 with two host headers.&lt;br /&gt;&lt;br /&gt;In this, my first post in english, I write about the configuration details when we need install a WCF service hosting in IIS 6.0 when the Information Server have two or more host header configurated.&lt;br /&gt;&lt;br /&gt;Suppose a simplified version of classic WCF sample:&lt;br /&gt;&lt;br /&gt;IService1.cs&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="font-size:85%;"&gt; WCFTest&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;[&lt;/span&gt;&lt;span style="font-size:85%;color:#2b91af;"&gt;ServiceContract&lt;/span&gt;&lt;span style="font-size:85%;"&gt;]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="font-size:85%;color:#0000ff;"&gt;interface&lt;/span&gt; &lt;span style="font-size:85%;color:#2b91af;"&gt;IService1&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;[&lt;/span&gt;&lt;span style="font-size:85%;color:#2b91af;"&gt;OperationContract&lt;/span&gt;&lt;span style="font-size:85%;"&gt;]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="font-size:85%;"&gt; GetData(&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="font-size:85%;"&gt; value);&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Service1.cs&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="font-size:85%;color:#000000;"&gt; WCFTest&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:85%;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="font-size:85%;color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="font-size:85%;color:#2b91af;"&gt;Service1&lt;/span&gt;&lt;span style="font-size:85%;"&gt; : &lt;/span&gt;&lt;span style="font-size:85%;color:#2b91af;"&gt;IService1&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="font-size:85%;"&gt; GetData(&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="font-size:85%;"&gt; value)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="font-size:85%;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="font-size:85%;"&gt;.Format(&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;"You entered: {0}"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;, value);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;System.ServiceModel Web.config section:&lt;br /&gt;&lt;br /&gt;In this case we use windows authetication, but this issue is not mandatory.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;.....&lt;/div&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;bindings&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;basicHttpBinding&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;binding&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;BasicHttpBinding_IService1&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;security&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;mode&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;TransportCredentialOnly&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;transport&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;clientCredentialType&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;Windows&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;security&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;binding&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;basicHttpBinding&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;bindings&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;services&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;service&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;WCFTest.ServiceBehavior&lt;/span&gt;&lt;span style="font-size:85%;"&gt;" &lt;/span&gt;&lt;span style="font-size:85%;color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;WCFTest.Service1&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;endpoint&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;address&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;""&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;binding&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;basicHttpBinding&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;contract&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;span style="color:#0000ff;"&gt;WCFTest&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;.IService1&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;identity&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;dns&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;localhost&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;identity&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;endpoint&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;endpoint&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;address&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;mex&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;binding&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;mexHttpBinding&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;contract&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;IMetadataExchange&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;service&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;services&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;behaviors&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;behavior&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;WCFTest.ServiceBehavior&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;serviceMetadata&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;httpGetEnabled&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;true&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;serviceDebug&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;true&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;behavior&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;behaviors&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;.....&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;The error that ocurrs when the IIS 6.0 has configurated two or more host header is the folowing&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#990000;"&gt;&lt;i&gt;Could not find a base address that matches scheme http for the endpoint with binding BasicHttpBinding. Registered base address schemes are [].&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This error ocurrs because the WCF runtime cannot know the host header where the service was implemented. In this case we must be configurate in explicit form what is the the IP of the host header when the service should run.&lt;br /&gt;&lt;br /&gt;First , we add other System.ServiceModel section&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;.....&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;serviceHostingEnvironment&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;baseAddressPrefixFilters&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;add&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;prefix&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;http://&lt;b&gt;&amp;lt;host header IP&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;baseAddressPrefixFilters&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;serviceHostingEnvironment&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;The sevice and behaviors sections change too.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;service&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;WCFTest.ServiceBehavior&lt;/span&gt;&lt;span style="font-size:85%;"&gt;" &lt;/span&gt;&lt;span style="font-size:85%;color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;WCFTest.Service1&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;endpoint&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;address&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&lt;a href="http://10.200.30.122/WCFTest/Service1.svc"&gt;http://&lt;b&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;host header IP&amp;gt;&lt;/span&gt;&lt;/b&gt;/WCFTest/Service1.svc&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#ff0000;"&gt;binding&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;basicHttpBinding&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#ff0000;"&gt;contract&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;WCFTest&lt;span style="font-size:85%;color:#0000ff;"&gt;.IService1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;endpoint&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;span style="font-size:85%;color:#a31515;"&gt;endpoint&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;address&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;color:#000000;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;mex&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size:85%;color:#ff0000;"&gt;binding&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;color:#000000;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;mexHttpBinding&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size:85%;color:#ff0000;"&gt;contract&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;color:#000000;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;IMetadataExchange&lt;/span&gt;&lt;span style="font-size:85%;color:#000000;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;service&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;behaviors&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;behavior&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;WCFTest.ServiceBehavior&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;serviceMetadata&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;httpGetEnabled&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;true&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&lt;span style="color:#ff0000;"&gt;httpGetUrl&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;color:#000000;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;http://&lt;b&gt;&lt;u&gt;&amp;lt;host header IP&amp;gt;&lt;/u&gt;&lt;/b&gt;/CASServices/Services.svc&lt;/span&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;serviceDebug&lt;/span&gt; &lt;span style="font-size:85%;color:#ff0000;"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;true&lt;/span&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;behavior&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;behaviors&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;.....&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;Note: &lt;span style="color:#000000;"&gt;In the production environment is recomended the set in false the &lt;span style="color:#ff0000;"&gt;httpGetEnabled&lt;/span&gt; and &lt;span style="color:#ff0000;"&gt;includeExceptionDetailInFaults&lt;/span&gt; attributes.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-3917212204211426103?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/3917212204211426103/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=3917212204211426103' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/3917212204211426103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/3917212204211426103'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2010/03/config-wcf-with-two-host-headers.html' title='Config WCF with two host headers (english)'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-5099418266052554769</id><published>2010-03-10T16:41:00.008-03:00</published><updated>2010-05-04T12:03:30.278-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><title type='text'>Buenas prácticas de programación en C</title><content type='html'>&lt;h1 style="MARGIN: 12pt 0pt 3pt"&gt;&lt;/h1&gt;&lt;p style="TEXT-ALIGN: justify; MARGIN: 0pt"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;El siguiente documento describe las buenas prácticas de programación a nivel general de lenguajes de programación orientados a procedimientos y en particular para el lenguaje de programación C.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify; MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify; MARGIN: 0pt"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Estas buenas prácticas las clasificaremos en diferentes grupos.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify; MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify; MARGIN: 0pt"&gt;&lt;span style="font-family:arial;"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;Nomenclaturas:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt; Se refiere a las reglas aplicables a la denominación de nombres de variables, constantes, funciones, estructuras etc. Estas reglas tiene como objetivo definir un lenguaje común para facilitar la lectura y mantenimiento de un código. Son reglas generales de muchos lenguajes de programación, que son aplicables perfectamente al lenguaje C.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify; MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify; MARGIN: 0pt"&gt;&lt;span style="font-family:arial;"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;Sintaxis:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; &lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Se refiere a reglas&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt; de la sintaxis en si del lenguaje de programación, &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;y recomendaciones para hacer mas legible el código generado.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify; MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify; MARGIN: 0pt"&gt;&lt;span style="font-family:arial;"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;Patrones:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; &lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Los patrones son diseños y recomendaciones generales que solucionan problemas comunes de determinados contextos. Existen patrones de diseño aplicados a diferentes tipos de lenguajes de programación (orientados a procedimientos, objetos, eventos&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;, web etc), para diferentes contextos de ejecución (multitareas, tiempo real, distribuidos, ejecución batch etc), para diseñor en diferentes nivels de abstracción de un sistema, para integración entre sistemas que corren en la misma o diferente plataforma etc.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify; MARGIN: 0pt"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;En nuestro caso nos dedicaremos a los aplicables a lenguajes de programación &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;orientada&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt; a procedimientos (como el C).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;div style="MARGIN: 0pt"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;Manejo de errores y excepciones:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="MARGIN: 0pt"&gt;&lt;span style="font-family:Arial;"&gt;Este tema se podría incluir dentro del grupo de sintaxis (mejores prácticas para manejar los errores) o patrones (patrones de manejo de errores), pero como se considera un tema muy importante en el desarrollo de software de calidad se lo agrega como item aparte.&lt;/span&gt;&lt;/div&gt;&lt;div style="MARGIN: 0pt"&gt;&lt;span style="font-family:Arial;"&gt;Se define como un error en un programa a un defecto (bug) que provoca que el programa no funcione correctamente en todas las funcionalidades para el cuall fue diseñado. Un error puede provocar que un cálculo devuelva un dato incorrecto o que el sistema se "cuelgue" en ante ciertos parámetros de entrada. Durante la etapa de pruebas se debe detectar la mayor cantidad de errores posibles, para luego ser corregidos antes de publicar el programa para su utilización productiva.&lt;/span&gt;&lt;/div&gt;&lt;div style="MARGIN: 0pt"&gt;&lt;span style="font-family:Arial;"&gt;También existen errores provocados por eventos externos a nuestro programa, como por ejemplo la no existencia de un archivo, permisos inadecuados para ejecutar determinada acción etc. Ante estos errores , que deben ser consdierados en el diseño, el sistema debe responder con un código de error para que el programa que invoque la función pueda actuar en consecuencia.&lt;/span&gt;&lt;/div&gt;&lt;div style="MARGIN: 0pt"&gt;&lt;/div&gt;&lt;div style="MARGIN: 0pt"&gt;&lt;span style="font-family:Arial;"&gt;En cambio una excepción en un problema inesperado que no tiene un manejo como el caso del error. En el entorno Linux se pueden utiizar diferentes técnicas para manejar las excepciones, como pro ejemplo intercepción de mensajes. Lamentablemente el lenguaje C no tiene un buen manejo de excepciones en forma nativa y se debe recurrir a soluciones externas como la mencionada.&lt;/span&gt;&lt;/div&gt;&lt;p style="TEXT-ALIGN: center; MARGIN: 0pt"&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: center; MARGIN: 0pt"&gt;&lt;/p&gt;&lt;br /&gt;&lt;a href="http://docs.google.com/View?id=dhpvgcfx_195gsw83qhf"&gt;Documento completo&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-5099418266052554769?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/5099418266052554769/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=5099418266052554769' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/5099418266052554769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/5099418266052554769'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2010/03/buenas-practicas-de-programacion-en-c_10.html' title='Buenas prácticas de programación en C'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-361951152991422747</id><published>2010-03-10T14:33:00.006-03:00</published><updated>2011-03-15T13:01:03.863-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='roles'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>My Software Architecture Presentation</title><content type='html'>&lt;p style="TEXT-ALIGN: justify; MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;En la actualidad no se concibe empresa grande sin soporte a sus negocios mediante el uso de las tecnologías de sistemas de información implementados dentro de la misma. Estos sistemas ayudan a manejar áreas tales como recursos humanos, ventas, compras, gestiones de procesos específicos del rubro, administración financiera, económica, tableros de comandos para la ayuda a la decisión de la gerencia etc.&lt;/span&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify; MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;Dada la criticidad de esos sistemas para el funcionamiento del negocio es imprescindible que sean construidos, implementados y mantenidos siguiendo estándares de calidad.&lt;/span&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify; MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;En este contexto se necesita un especialista que tenga una visión de negocio, habilidades técnicas y buena comunicación a los diferentes miembros del área de IT.&lt;/span&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify; MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;Estos sistemas muchas veces deben ser interconectados, es facultad del arquitecto garantizar la calidad del software desde el inicio hasta su implementación y mantenimiento.&lt;/span&gt;&lt;/p&gt;&lt;p style="TEXT-ALIGN: justify; MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="font-family:arial;font-size:100%;"&gt;En la siguiente presentación se resume el trabajo que analiza los aspectos relacionados con la arquitectura de software, su clasificación, el rol del arquitecto y metodologías recomendadas en pos de optimizar la integración entre sistemas.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a id="ltgr" title="Software Architecture Presentation" href="http://docs.google.com/fileview?id=0B2u8S8a_cPnkY2VhOTViOWYtZjMxMS00ZmZjLWI5NmYtYjA0OGQyN2U1MDVk&amp;amp;hl=en"&gt;&lt;span style="font-family:arial;"&gt;Software Architecture Presentation&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;La documentación completa de esta presentación esta en el siguiente post.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;a href="http://ssalanitri.blogspot.com/2010/05/arquitectura-de-software-rol-e.html"&gt;Arquitectura de software, rol e integracion de aplicaciones&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-361951152991422747?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/361951152991422747/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=361951152991422747' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/361951152991422747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/361951152991422747'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2010/03/my-software-architecture-presentation.html' title='My Software Architecture Presentation'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-776287129608615525</id><published>2010-03-03T11:29:00.003-03:00</published><updated>2010-03-10T13:25:45.190-03:00</updated><title type='text'>Micaela en su primer día en jardín para 3 años.</title><content type='html'>&lt;p style="TEXT-ALIGN: center; MARGIN: 0pt"&gt;&lt;img style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt="" src="http://docs.google.com/File?id=dhpvgcfx_192d7tzp6jr_b" width="415" height="422" /&gt;&lt;/img&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-776287129608615525?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/776287129608615525/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=776287129608615525' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/776287129608615525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/776287129608615525'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2010/03/micaelasalade3.html' title='Micaela en su primer día en jardín para 3 años.'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-5994930106830089311</id><published>2010-02-03T12:15:00.008-03:00</published><updated>2010-02-14T10:10:01.427-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Develop in C/C++ with Eclipse CDT.</title><content type='html'>&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Les comparto una breve introduccion al desarrollo de aplicaciones C y C++ con eclipse. Este tutorial esta pensado para aquellos que tienen poca experiencia con el Eclipse.&lt;br /&gt;El uso de este entorno de desarrollo forma parte de una iniciativa de usarlo para desarrollo de aplicaciones utilizando la biblioteca OpenCV (Vision Library), que permite procesar imagenes estáticas y dinamica que puede ser programada en C/C++ y Python.&lt;br /&gt;&lt;br /&gt;Eclipse es un entorno de desarrollo IDE de código libre que está basado en un plataforma de desarrollo extensible mediante plugings (Plugin-Development Environment PDE). Está desarrollado en Java pero permite agregar plugines para programar en gran cantidad de lenguajes de programación, herramientas de diseño , de control de ciclo de vida del desarrollo ,de control de fuentes (SVN, CVS) etc.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Entre los proyectos existentes para Eclipse se pueden clasificar en las siguientes grupos más importantes:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;1-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Desarrollo de aplicaciones empresariales.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;2-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Desarrollo de aplicaciones embebidas y móviles.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;3-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Aplicaciones basadas en clientes ricos.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;4-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Aplicaciones web basadas en interfaces ricas (Rich Internet Applications)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;5-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Desarrollo de entornos de trabajo (frameworks) para múltiples usos.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;6-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Administración de ciclo de vida del desarrollo.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;7-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Herramientas para aplicaciones basadas en Arquitecturas Orientadas a Servicios (SOA)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;La documentación de este IDE se puede obtener del sitio oficil de &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Para el caso de queres programar en C o C++ vamos a utilizar el plugin de eclipse para desarrolladores de C++ CDT.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;El Eclipse es multiplataforma, en nuestro caso los vamos a instalar sobre un Kubuntu dentro de una máquina virtual en Virtual Box.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Desde este IDE se puede crear proyectos , incluir código desde otros archivos, depurar paso a paso pudiendo ver es estado de las variables etc.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Al igual que todo paquete de Eclipse al iniciar la aplicación se debe seleccionar un espacio de trabajo (workplace), el Eclipse indica una por defecto que está ubicada en el perfil de usuario, esta carpeta contendrá los proyectos y códigos fuente que desarrollemos. Es posible crear otro workplace y pasar de uno a otro según convenga usando el comando File-&gt;Switch workplace&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;Proceso de instalación&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;La instalación del eclipse se efectúa de la siguiente forma&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt; &lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;i&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt" align="left"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;i&gt;&lt;span style="font-size:100%;"&gt;$sudo apt-get install eclipse&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;i&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Una vez implementado el IDE se debe instalar el plugin del CDT, la forma recomendada a partir del a versión 3.4 del eclipse es usando la opción de instalación de nuevo software&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Para instalar un plugin de Eclipse se de indicar la url de donde se obtendrá los código, el IDE los baja , los compila y configura automáticamente.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Para el caso del CDT esa url se obtiene de su sitio oficial http://www.eclipse.org/cdt/&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;El siguiente diagrama indica como se debe proceder.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;1- Ejecutar el wizard para instalar proyectos nuevos&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;br /&gt;&lt;img style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt="" src="http://docs.google.com/File?id=dhpvgcfx_138ggxdcmch_b" width="2" height="5" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;img style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt="" src="http://docs.google.com/File?id=dhpvgcfx_139g5xbcm64_b" width="409" height="268" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;2- Configurar la url de donde se bajaran los &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;paquetes&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt; del CDT.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;img style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt="" src="http://docs.google.com/File?id=dhpvgcfx_140xxttmbfv_b" width="480" height="412" /&gt; &lt;/div&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;Código de ejemplo&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Para los impacientes vamos construir un proyecto de ejemplo y con él mostraremos las funcionalidades básicas del IDE.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;El Eclipse tiene la posibilidad de crear proyectos donde internamente cargaremos nuestros códigos. Estos proyectos estarán dentro de perspectiva de Eclipse, por defecto se carga la correspondiente a Java.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;En este ejemplo construiremos un ejemplo muy simple que define algunas variables y utilizando un bucle las muestra en pantalla que nos va a servir para mostrar funcionalidades básicas del IDE.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;1-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Crear un proyecto C del tipo consola&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;img style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt="" src="http://docs.google.com/File?id=dhpvgcfx_141fkmjcwds_b" width="480" height="254" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt 0pt 0pt 54pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;1.1&lt;/span&gt;&lt;/span&gt; &lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Creamos un proyecto C tipo consola&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;img style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt="" src="http://docs.google.com/File?id=dhpvgcfx_142f63wtxsq_b" width="480" height="281" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;img style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt="" src="http://docs.google.com/File?id=dhpvgcfx_1438w82grd2_b" width="480" height="440" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt 0pt 0pt 54pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;1.2&lt;/span&gt;&lt;/span&gt; &lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Dejar la opciones por defecto.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt 0pt 0pt 54pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;2-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Código de ejemplo&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;img style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt="" src="http://docs.google.com/File?id=dhpvgcfx_144gx8mmdgs_b" width="387" height="284" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;3-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Compilación y ejecución.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;El CDT al instalarse utiliza por defecto el gcc. Al ejecutar el programa el CDT lo compila y en el &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;caso de no tener ningun error ejecuta el codigo y muestra los resultados.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Para ejecutar el codigo seleccionar el siguiente menú:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;Run → Run (Ctrl + F11) &lt;/strong&gt;y&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;Seleccionar correr proyecto C/C++.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;El resultado para este codigo de ejemplo es la siguiente:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,0);font-family:Monospace;" &gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;0a 1b 2c 3d 4e &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;strong&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;4-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Debugging&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;El CDT utiliza el debugguing del gcc para poder detener, inspeccionar los valores de las &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;variables, modificarlas, correr paso a paso, agregar breakpoints, correr dentro de funciones etc.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;Para ejecutar el debug del codigo seleccionar el siguiente menú:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;Run → Debug (F11)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;La primera vez pide la configuracion del debugguer, seleccionar GDB&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;Luego el CDT indicara que al ejecutar el debug el Eclipe cambiara de perspectiva, este es un &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;proceso habitual para la mayoria de los lenguajes de programacion soportados por el IDE&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;img style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt="" src="http://docs.google.com/File?id=dhpvgcfx_145znpn29gs_b" width="665" height="265" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;El el diagrama se visualizan las diferenes secciones de la perpectiva de debug&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt 0pt 0pt 36pt"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style="font-size:100%;"&gt;-&lt;/span&gt;&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;Debug: Indica el proceso que se esta ejecutan, en nuestro ejemplo la funcion main()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt 0pt 0pt 36pt"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style="font-size:100%;"&gt;-&lt;/span&gt;&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;Variables. En esta secciones se puede ver el estado de las variables correspondiente a la línea del código que estamos analizando.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt 0pt 0pt 36pt"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style="font-size:100%;"&gt;-&lt;/span&gt;&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;Breakpoints: Muestra los breakpoints que tenemos marcado en el código, una forma de crearlo es hacer doble click sobre la barrar vertical de la izquierda del codigo justo en la línea donde queremos que se detenga la ejecucion del programa.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt 0pt 0pt 36pt"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style="font-size:100%;"&gt;-&lt;/span&gt;&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;Register: Permite ver el estado de los registros del procesador, esta opcion es muy util para cuando tener codigo assembler junto con el codigo C.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt 0pt 0pt 36pt"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style="font-size:100%;"&gt;-&lt;/span&gt;&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;DSF Disassembly: Se puede ver el codigo assembler correspondiente al codigo C que estamos analizando.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt 0pt 0pt 36pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;El debugguer permite &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;ademas&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt; ver el estado de las variables con solo apuntaar con el cursor del &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;mouse &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;sobre la variable a inspeccionar.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;Comandos basicos de debugguing:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;F11: &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;Ejecuta el codigo en modo debug, esto hace que el debugguer corra el programa &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;hasta el &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;primer breakpoint, si no se asignaron breakpoints corre hasta el final del &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;programa.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;F5: &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;Ejecuta linea a linea, esta opcion es muy util para ver como evoluciona el estado de la &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;variables.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;F6: &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;Ejecuta linea a linea como &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;F5&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt; pero con la diferencia que si en la linea a ejecutar existe una &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;llamada a funcion el debuguer se introduce en ella para ejecutar linea a linea su codigo interno. &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;Esto no aplica a llamadas a funciones de la biblioteca estandard u otra biblioteca pues se require &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;tener el codigo C disponibles.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;En la seccion de disassembly se muestra el linea a linea pero del codigo &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;assembler &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;correspondiente. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'Nimbus Roman No9 L';"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;F8: &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: normal;font-family:'Nimbus Roman No9 L';" &gt;&lt;span style="font-size:100%;"&gt;Ejecuta el codigo hasta el siguiente breakpoint.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;strong&gt;Conclusión:&lt;/strong&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;El Eclipse CDT es una plugin de eclipse que permite programar en C/C++ para en entorno donde lo tengamos instalado, en nuestro caso se instaló para programar en C/C++ para Linux.Para el caso de Windows se debe instalar el compilador de C/C++ compatible con gcc (MinGW entre otros), ver documentación del CDT para este caso.&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;Si ya trabajaron con Eclipse para Java,PHY, JMe , Python u otros de los tantos lenuajes soportado por sus plugines usar el CDT es muy transparente, esa es una de la grandes ventajas que tiene este IDE. El resto es cuestión de práctica.&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;p style="MARGIN: 0pt"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-5994930106830089311?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/5994930106830089311/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=5994930106830089311' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/5994930106830089311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/5994930106830089311'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2010/02/infoicdt.html' title='Develop in C/C++ with Eclipse CDT.'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-861209471127412903</id><published>2009-12-29T23:30:00.003-03:00</published><updated>2009-12-29T23:32:39.244-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Test Driven Development presentation</title><content type='html'>En este caso comparto una presentación, que si bien tiene varios años no deja de ser interesante para introductir en este tema.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bloggingabout.net/blogs/dennis/archive/2005/12/14/10554.aspx"&gt;http://bloggingabout.net/blogs/dennis/archive/2005/12/14/10554.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-861209471127412903?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/861209471127412903/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=861209471127412903' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/861209471127412903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/861209471127412903'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/12/test-driven-development-presentation.html' title='Test Driven Development presentation'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-7976839620184092610</id><published>2009-12-28T01:22:00.004-03:00</published><updated>2010-01-03T02:50:57.632-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Mocking Frameworks</title><content type='html'>Le comparto una presentación muy interesante sobre el tema de Mocking, pruebas unitarias, de integración , inyección de dependencias etc.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://altnet-hispano.pbworks.com/van-2009-11-28-mocking "&gt;http://altnet-hispano.pbworks.com/van-2009-11-28-mocking&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-7976839620184092610?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/7976839620184092610/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=7976839620184092610' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/7976839620184092610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/7976839620184092610'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/12/mocking-frameworks.html' title='Mocking Frameworks'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-8178384333078485272</id><published>2009-11-06T18:09:00.001-03:00</published><updated>2009-11-06T18:09:55.578-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SEI'/><category scheme='http://www.blogger.com/atom/ns#' term='Quality Attributes'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>Software Architecture and business objetives</title><content type='html'>El miercoles 4 de noviembre tuve la oportunidad de asistir a una conferencia del Phd Andres Diaz Pace (ADP) en donde presentó la metodologia del SEI para la documentación de arquitecturas de software. Al finalizar la presentación de Andrés varios panelistas hicieron sus comentarios y respondieron a preguntas de los asistentes.&lt;br /&gt;&lt;br /&gt;A continuación voy a intentar resumir los aspectos relevantes del la presentación.&lt;br /&gt;&lt;br /&gt;ADP comentó que hay muchas definiciones de Arquitectura de Software, entre ellas comentó la del SEI ("Software Architecture in Practice", Clements, 2008).&lt;br /&gt;Entre los apsectos importantes que rescaté del seminario es que se tome en cuenta o no la arqteuictura de software siempre existe, en forma formal mediante procedimiento o informal o implicita. Es decir si no diseñamos arquitectura alguien en el proceso de desarrollo lo hará y de la mejor forma que pueda, con el peligro que ello acarrea.&lt;br /&gt;&lt;br /&gt;Otro aspecto es el lugar de la arquitectura de software en el proceso de desarrollo, ADP mostró un proceso simplificado en donde se inicia por lso objetivos de negocios, luego los requerimientos funcionales, de allí la arquitectura de software y finalmente el sistema. Este es un proceso iterativo en donde del objetivo de negocio se deriva a especificaciones funcioanales de alli mediante diseño se contruye la arquitectura de software y luego el equipo de desarrollo la implementa.&lt;br /&gt;Al grupo de arquitectura debe participar en todo el proceso de desarrollo de software teniendo mayor porcentaje de participación durante la etapa de elaboración del proceso, pero tambie´n requiere cierto grado de participación durante la etapa de incepción, transisión e implementación.&lt;br /&gt;ADP considera incorrecto que el equipo se desvincule totalmente del proyecto luego de terminado el diseño arquitectónico, por eso es requerido un cierto grado de participación en la demás etapas.&lt;br /&gt;&lt;br /&gt;Otro aspectos importante de mencioar es que el diseño arquitectónico permiti reducir los riesgos en el proyecto, pues se encarga de elicitar los atributos de calidad, validar la infraestructura, validar con áreas auxiliares (seguridad informatica, tecnología, stakholders etc). Cabe destacar que el disertantem comentó que involucrar a muchas áres implica un riesgo a la hora de documentar la arquitectura pues cada área tiene su propia visión del proyecto y puede querer incluir en la documentación aspectos que no son parte del diseño arquitectónico (tal vez si de documentación complementaria).&lt;br /&gt;&lt;br /&gt;Se discutió sobre lo que NO es la arquitectura de software, y ADP dió algunos ejemplos como:&lt;br /&gt;- No es la arquitectura del hardware.&lt;br /&gt;- No es el modelo de datos.&lt;br /&gt;- No es solo un diagrama de "cajitas" interconectadas.&lt;br /&gt;&lt;br /&gt;De este último punto se desprende que por presiones varias los stakholders intentan reducir el tiempo de diseño para pasar rapidamente al momento de la implementación, por lo tanto la arquitectura dieñada tiene una visión muy general, no consdiera atributos de calidad, riesgos por el uso de tecnologías no estandares en la compañía etc.&lt;br /&gt;&lt;br /&gt;Elicitación de atributos de calidad:&lt;br /&gt;Estre los procesos recomendados por el SEI se comentó uno denominado QAW (Quality Atributte Workshop)http://www.sei.cmu.edu/library/abstracts/reports/03tr016.cfm&lt;br /&gt;Este proceso tiene como fin comprometer a los stakholders para definir precisamente los atributos de calidad requeridos en el proyecto. Basicamente la técnica implica litar los atributos de calidad y leugo mediante votación se pondera cada atributos. Luego de eso se puede elimiar algunos meno prioritarios (o dejar su analisis para un posterior release) dejando solo los más importantes.&lt;br /&gt;La técnica es simple, pero lo que no es simple conseguir que los stakholders se involucren en este aspecto, pues la visión de los atributos de calidad de cada uno puede diferir bastante.&lt;br /&gt;&lt;br /&gt;Basicamente lso siguientes son los aspectos más importante de eta técnica:&lt;br /&gt;&lt;br /&gt;- Centrado en el sistema.&lt;br /&gt;- Focalizado en los stakeholders.&lt;br /&gt;- Técnica implementada antes de definier la arquitectura.&lt;br /&gt;&lt;br /&gt;Una sesión de QAW debería seguir los siguientes pasos, la misma está moderada por un facilitador, el manager del proyecto y el arquitecto. Es importante que tiene que tener un time frame definido y en la manera de lo poible obtener un consenco documentado.&lt;br /&gt;&lt;br /&gt;1- Introduction to QAW (Manager)&lt;br /&gt;2- Business Mision Presentation (Arquitecto).&lt;br /&gt;3- Indetification of Architecture Drivers&lt;br /&gt;4- Scenarios Bainstorming.&lt;br /&gt;5- Scenarios priorization&lt;br /&gt;6- Scenario refinemente&lt;br /&gt;7- Return to 1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Esta técnica permite concentrar el esfuerzo en el diseño de aspectos no funcionales para los atributos de calidad más relevantes para los stakholders del proyecto.&lt;br /&gt;la técncia define que en la documentación de atributo de calidad se deben considerar los siguientes aspectos:&lt;br /&gt;&lt;br /&gt;1- Estímulo: Es el evento de entrada.&lt;br /&gt;2- Respuesta al estímulo.&lt;br /&gt;3- Fuente del estimulo.&lt;br /&gt;4- Condición del ambiente.&lt;br /&gt;5- Medida de la respuesta.&lt;br /&gt;&lt;br /&gt;Por ejemplo si el atributo de calidad es la performance una simplificación (hiper simplificada) para estos aspectos serían:&lt;br /&gt;&lt;br /&gt;1- Estimulo: Request a una determinado servicio.&lt;br /&gt;2- Respuesta al estímulo: Mesaje de respuesta en XML (especifica peso en Kb).&lt;br /&gt;3- Fuente de estimulo: proceso X que corre en servidor Z.&lt;br /&gt;4- Condición de ambiente: X% de CPU, Z Mb de memoria consumir por el servidor, I/O, Byterates etc.&lt;br /&gt;5- Medida de la respuesta: Reqeust por segundo, %CPU y %memoria conumida por el proceso en cuestion etc.&lt;br /&gt;&lt;br /&gt;En la documentaciónd el SEI existen tablas donde están tabulados varios atributos de calidad.&lt;br /&gt;&lt;br /&gt;Consderaciones sobre documentación de arquitectura.&lt;br /&gt;&lt;br /&gt;Debe tener un enfoque basado en vista. Cada vita mostrará difentes niveles de detalle de la arquitectura y representaciones para diferentes interlocutores (lógica, capas, implementación etc).&lt;br /&gt;En la documentación se debe tener el trace entre una objetos de una vista y de otra. &lt;br /&gt;Un mayor nivel de detalle reduce el tiempo dedicado al mentoring y el coaching a la hora de implementar la arquitectura. Esto no implica que se reduzca a cero pues el arquitecto participa en todo el proceso de desarrollo.&lt;br /&gt;&lt;br /&gt;Por ejemplo en un vista en donde se quiera detallar aspectos de seguridad deber indicar zonas de seguridad, puntos de entrada, conexiones etc.&lt;br /&gt;Si es por un tema de performance, incluiría vistas de procesos, interacción etc.&lt;br /&gt;&lt;br /&gt;En la documentación del SEI se clasificar las diferentes vistas.&lt;br /&gt;&lt;br /&gt;En resumen las vistas deben consdierar los siguientes aspectos:&lt;br /&gt;&lt;br /&gt;1- Estructura del sistema en térmicos de unidades de código.&lt;br /&gt;2- Interacciones en tiempo de ejecución.&lt;br /&gt;3- Como se relacionan con estrucmturas no software.&lt;br /&gt;4- Interfaces.&lt;br /&gt;5- Comportamiento.&lt;br /&gt;&lt;br /&gt;Tambien se puede ver desde tres perpectivas diferentes:&lt;br /&gt;&lt;br /&gt;1- Módulos: Contrucción, analisis de impacto, pruebas etc&lt;br /&gt;2- Componentes y conectores: performance , disponibilidad etc.&lt;br /&gt;3- Asignación de responsabilidades: Diponiblidad , seguridad, performanceetc&lt;br /&gt;&lt;br /&gt;Para evaluar la completitud de una vista hay que considerar la descripción de sus elementos constitutivos, mapeo entre vistas, deben existir diferentes vistas según perfil de stakholders, asegurarse que contengan información útil.&lt;br /&gt;&lt;br /&gt;Evaluación de arquitecturas:&lt;br /&gt;&lt;br /&gt;Luego de esta introducción el disertante comento sobre el proceso ATAM (Architecture Tradeoff Analysis Method) http://www.sei.cmu.edu/library/abstracts/reports/00tr004.cfm&lt;br /&gt;&lt;br /&gt;ATAM provee tendencias sobre la evaluación de la arquitectura, no aspectos precisos. Esta técnica ayuda a evaluar aspectos de la arquitectura como nivel de enfioque en el producto software, detección temprana de riesgos, prácticas de ingenieria de software, aspectos de calidad etc.&lt;br /&gt;Dado qeu es un proceso complejo se sugiere efectuarlo luego de tener terminada la primera iteración de la documentación de arquitectura y luego de finalizada cada etapa de elaboración de las sucesivas iteraciones.&lt;br /&gt;&lt;br /&gt;Un aspecto que comentó como introducción el disertante fue la técnica de diseño definida por el SEI, es la ténica ADD(Atribute-Driven Desing) http://www.sei.cmu.edu/library/abstracts/reports/06tr023.cfm&lt;br /&gt;&lt;br /&gt;De eta descripción podrai resumir que la técnia ADD permite articular lso objetivos de negocio con la arquitectura, mitigar riesgos y se considera en todo el proceso de desarrollo.&lt;br /&gt;&lt;br /&gt;Como conslusión ADP mencionó que en el futuro próximo es importante considerar istemas que requieran gran escalabilidad (ej Facebook) o gestionados con recursos no cetralizados (ej Eclipse).&lt;br /&gt;&lt;br /&gt;Finalmente el SEI tiene su blog en donde la comunidad puede participar &lt;br /&gt;&lt;br /&gt;Saturn Netwotk Blog&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-8178384333078485272?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/8178384333078485272/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=8178384333078485272' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/8178384333078485272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/8178384333078485272'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/11/software-architecture-and-business.html' title='Software Architecture and business objetives'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-7541582885220211690</id><published>2009-11-03T23:56:00.005-03:00</published><updated>2010-03-12T11:12:50.683-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><title type='text'>SOA anti-patterns</title><content type='html'>Como en diseño de aplicaciones multicapas, web, cliente-servidor u otras existen patrones que describen problemas comunes y sus soluciones estandarizadas, en el caso de SOA no es la excepción. En este post no vamos a describir los patrones más comunes, pues son muchos y son de referencia para arquitectos y desarrolladores que trabajen en el diseño de servicios SOA, en el sitio de “SOA patterns”, http://www.soapatterns.org/ hay publicado muchos patrones y constantemente se agregan nuevos.&lt;br /&gt;La intención es describir algunos de los anti patrones SOA más comunes con el fin de indicar como no se debe diseñar una solución SOA.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Interfaces CRUD&lt;/strong&gt;&lt;br /&gt;CRUD en la sigla en inglés que representa las operaciones de creación, lectura, actualización y borrado. Es muy común utilizar estas operaciones en relación a las bases de datos, pero en el caso de un sistema orientado a servicios especificar las operaciones de los servicios como CRUD es una mala práctica.&lt;br /&gt;Por ejemplo en un servicio de manejo de ordenes diseñar en servicio en base a CRUD implica tener operaciones del este tipo&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;FindOrderByIDResponse FindOrderByID(FindOrderByIDRequest request);&lt;br /&gt;CreateOrderResponse CreateOrder(CreateOrderRequest request);&lt;br /&gt;UpdateOrderResponse UpdateOrderByID(FindOrderByIDRequest request);&lt;br /&gt;DeleteOrderResponse DeleteOrder(DeleteOrderRequest request);&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Si en los casos de uso se necesita crear, actualizar y borrar ordenes esta especificación de servicios es válida, pero si la creación de una orden implica varias operaciones previas (por ej verificar la disponibilidad del producto, verificar el estado de crédito del cliente y crear la orden), la operación CreateOrder debe invocar internamente todas las operaciones necesarias para crearlo pues en caso de exponer solo la creación de la orden el consumidor debe hacer las operaciones previas. Este diseño violaría el TNet 3 pues no estaríamos compartiendo solo contratos.&lt;br /&gt;En resumen lo incorrecto no es el uso de CRUD para la especificación de un servicio sino un mal diseño.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Interfaces Chatty&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Este anti patrón se refiere a cuando se diseña un sistema orientado a servicios con operaciones que implican un alto nivel de granularidad. En este tipo de interfaces el consumidor es el encargado de llamar a las diferentes operaciones siguientes una lógica específica para que juntos hagan una determinada acción de negocio. Lo correcto es que todas las operaciones para hacer una determina acción de negocio se ejecuten internamente en el servicio.&lt;br /&gt;Por ejemplos la siguientes operaciones se basan en un diseño que aplica este anti patrón&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:85%;"&gt;bool ChekGoodAvailability(Ordr order);&lt;br /&gt;bool CheckCreditStatus(Order order);&lt;br /&gt;bool PlaceOrder(Order order);&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Estos dos anti patrones están asociados pues un mal diseño de una interfaz CRUD se convierte en una interfaz chatty.&lt;br /&gt;&lt;br /&gt;En conclusión el formato de los servicios expuestos depende fundamentalmente de la especificación de casos de uso que estos deben implementar. Por lo tanto en ciertos casos se van a requerir operaciones tipo CRUD pero en muchas otras no. Un adecuando análisis de las especificaciones funcionales seguido de un buen diseño es importante para no terminar utilizando anti patrones.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-7541582885220211690?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/7541582885220211690/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=7541582885220211690' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/7541582885220211690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/7541582885220211690'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/11/soa-anti-patterns.html' title='SOA anti-patterns'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-8256933270484360914</id><published>2009-10-25T06:32:00.001-03:00</published><updated>2009-10-25T06:36:01.247-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>What SOA is not?</title><content type='html'>Este post tiene como fin aclarar que no es SOA, con el fin de evitar confusiones y malos entendidos a la hora de emprender un proyecto de implementación SOA.&lt;br /&gt;Dino Esposito [Esposito Dino et at, 2009] indica que hay que tener claro que SOA no es una revolución, un objetivo en sí, una tecnología , ni tampoco una implementación de webservices.&lt;br /&gt;No es una revolución porque hace más de 15 años que existe la infraestructura para integrar aplicaciones (EDI, CORBA, COM, DCOM etc). Lo que generó SOA fue la necesidad de integrar sistemas existente con el fin de implementar procesos de negocios usando software. Por lo tanto invocar objetos remotos, enviar mensajes ya existía antes que SOA, por lo tanto no es una revolución sino una evolución.&lt;br /&gt;Tampoco es una tecnología en sí, pues SOA es totalmente independiente de proveedores y productos. Unos de los mayores beneficios de SOA es que se aplican sus principios a una organización en particular. No se debe pensar una implementación SOA en base a productos del mercado, se debe pensar en SOA tomándose en tiempo necesario para entender sus principios y aprender cómo aplicarlos en toda su infraestructura.&lt;br /&gt;Decir que SOA son webservices es un error común pues a la hora de implementar los webservices son los más utilizados como mecanismo de comunicación entre los sistemas que forman la infraestructura SOA. Por lo tanto no todas las soluciones SOA utilizando webservices y no todos sistema basado en webservices es una implementación de SOA.&lt;br /&gt;Como venimos diciendo ante de pensar como implementar SOA se debe tener bien definidos los procesos de negocio que suponemos que se van a mejorar mediante la implementación de SOA. Por lo tanto el objetivo no es implementar SOA sino mejorar uno o varios procesos de negocio determinados. Luego de analizar los procesos involucrados, la infraestructura, aplicaciones, tiempo y presupuesto disponible recién en ese momento estaremos en condiciones de decir si SOA es aplicable o no.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Referencias&lt;/strong&gt;&lt;br /&gt;[Esposito Dino et at, 2009], “Architecting Microsoft .Net Solution for the Enterprise”, Microsoft Press, pag 229 a 236.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-8256933270484360914?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/8256933270484360914/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=8256933270484360914' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/8256933270484360914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/8256933270484360914'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/10/what-soa-is-not.html' title='What SOA is not?'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-7847583209549850811</id><published>2009-10-16T17:55:00.010-03:00</published><updated>2010-03-11T17:01:44.935-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>Reflections about SOA implementation in the enterprise.</title><content type='html'>El tema de SOA no es nada nuevo, pero a la hora de querer conocer sobre este interesante tema el problema no fue encontrar información, sino todo lo contrario, clasificar y sacar conceptos útiles de las gran cantidad de información al respecto.&lt;br /&gt;A mi criterio el tema de SOA fue un gran boom hace 6 o 7 años y luego fue madurando para ser un paradigma aplicable con exito en empresas donde la madures de sus procesos justifique la gran inversión que requiere implementar SOA. No solo es cuestión de soft y hard, sino también de un cambio cultural muy importante en la compañía. Es común que cada área de negocio tenga su propia genencia que sub procesos independientes y prioridades diferentes. por los general es obvio que todas está alineadas a un objetivo de negocio común, pues sino estraríamos en otros problema que es más un análisis de administradores de empresas y consultores asociados.&lt;br /&gt;Pero de todas formas esta diferentes prioridades hace que a larga cada área sea como silos aislados en donde emprenden la contrucción de aplicaciones para resolver determinadas área de negocio, sin pensar (o poco) en lo que implementa las otas áreas.&lt;br /&gt;Como consecuencia tenemos casos de duplicación de funcionalidad, repostorios con datos con entidades redundantes (por ej varias tablas de clientes o de proveedores).&lt;br /&gt;La estandarización de esto requiere de un área que tenga una visión transversal a todas las áreas para poder alinearlos, definir estándares de integración, desarrollo , deployment etc con el fin de integrar las diferentes áreas de negocio. Esta área deberia estar formado por especialistas en las diferenes ramas del desarrollo y arquitectos empresariales.&lt;br /&gt;Volviendo al tema de SOA, una vez que tenemos los procesos, podemos pensar en la implementación en sistemas software (primero los procesos , despues el software).&lt;br /&gt;Ahora, para los más ansiosos paso a describir un resumen (o recordatorio según en caso) de los que es SOA desde el punto de vista ténico.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Arquitectura orientada a servicios&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Servicios&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Los servicios son sistemas autónomos, que poseen una especificación definida que pueden ser accedidos en forma remota desde otras aplicaciones de la compañía.&lt;br /&gt;Desde el punto de punto de vista del consumidor del servicio no interesa como está implementado sino cual es el mensaje de entrada a recibir y cuál es el formato de la salida, de esta forma se pueden crear sistemas altamente escalables, distribuidos y reutilizables.&lt;br /&gt;&lt;br /&gt;Para que los servicios puedan forma parte de una arquitectura orientada a servicios deben tener al menos las siguientes características&lt;br /&gt;&lt;br /&gt;• Reusables: Proveen servicios de negocio que pueden ser utilizados por varias aplicaciones.&lt;br /&gt;• Proporcionar un contrato formal: Indica que establece una interface formal para los mensajes de entrada y de salida. En la práctica se debe los mensajes tienen formato XML, por lo tanto se deben exponer esquemas XML (XSD) y no clases.&lt;br /&gt;• Deben tener bajo acoplamiento&lt;br /&gt;Significa que un cambio en la implementación de alguno de ellos debe afectar lo mínimo posible a los demás.&lt;br /&gt;• Deben permitir la composición entre ellos.&lt;br /&gt;Esta funcionalidad permite componer el resultado de la ejecución de varios servicios para ofrecer un solo resultado. En la práctica esto se podría implementar con un Enterprise Service Bus.&lt;br /&gt;• Deben ser autónomos.&lt;br /&gt;Indica que su implementación y administración se debe poder hacer independientemente de los demás, eta característica está muy asociada con la de bajo acomplamiento.&lt;br /&gt;• No deben tener estado.&lt;br /&gt;Indica que el servicio recibe el mensaje de entrada, lo procesa y luego responde el resultado sin mantener estado alguna entre ejecuciones.&lt;br /&gt;• Deben poder ser descubiertos.&lt;br /&gt;El descubrimiento de lo servicio es un factor muy importante para poder administrarlos, de esta forma el sistema consumidor puede conocer su especificación en un forma simple. Este proceso se implementa con un registro de servicios y una herramienta de UDDI.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;TNets de SOA&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;En la práctica se definen 4 reglas que debe cumplir un sistema basado en SOA , estas reglas se las denomina TNets de SOA [Esposito Dino et at, 2009]&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;TNet N° 1; Las fronteras deben ser explícitas&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;La interacción con los servicios se debe hacer mediante interfaces públicas. Los métodos en la interface representan los puntos de entrada en el servicio y los datos en la firma de los métodos representan los mensajes de entrada y salida del servicio.&lt;br /&gt;Las interfaces deben ser lo más simples posibles y no deben exponer datos internos a los servicios, la implementación interna de los mismos debe ser transparente para el consumidor.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;TNet N° 2 ; Los servicios deben ser autónomos&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Para el caso de los servicio esta regla indica que cada servicio debe poder ser implementado, administrado y versionado en forma independiente del sistema en el cual es implementado y consumido. Esto no indica que los servicio deben estar totalmente aislados del resto del sistema, lo que indica que debe tener el menor acoplamiento posible. Por lo tanto si necesita comunicarse con otros servicios lo debe hacer mediante contratos y políticas.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;TNet N° 3: Usar contratos , no clases&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Unos de los objetivos de SOA es la interoperabilidad, o sea todo servicio debe tener una inteface pública basadas en estándares de la industria e independiente de la plataforma. En el caso de un sistema basado en componentes las interfaces entre ellos comparten clases, para el caso de SOA esto no es válido porque el sistema sería dependiente de la plataforma.&lt;br /&gt;Estas interfaces públicas se basan en contratos de servicios basado en mensajes.&lt;br /&gt;Los mensajes compartidos son documentos XML y su contrato está especificado mediante esquemas xml (XSD).&lt;br /&gt;Las diferentes implementaciones de SOA convierten esos mensajes XML en clases específica de una determinada plataforma y convierten las clases de respuesta en sus correspondientes mensajes XML como respuesta al consumidor del servicio.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;TNet N° 4: La compatibilidad es basada en políticas&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Que un servicio sea accesible y que lo pueda llamar no es una buena razón para el consumidor lo invoque. Los servicios y contratos son necesarios pero no suficientes, estos indican que es lo que se envía al servicio y que se espera de él.&lt;br /&gt;Este TNet se refiere a la semántica de compatibilidad entre servicios, que un servicios haga exactamente lo que el consumidor espera. Esta semática se expone vía un acceso público y una política estándar. El estándar WS-Policy [W3C WS-Policy, 2007] específica como se debe implementar este TNet&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Gobierno SOA &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;De la definición de SOA se desprende que para poder hacer una correcta implementación y mejorar el ROI es necesario un gobierno SOA, esto implica el proceso para poder administrar los servicios, publicarlos, controlar las versiones etc. Este factor es imprescindible porque en caso contrario no se puede aprovechar las ventajas que provee este estilo de arquitectura.&lt;br /&gt;&lt;br /&gt;Según Bobby Wolf , Consultor WebSphere J2EE de IBM [Woolf Bobby, 2007], un proceso de gobierno SOA debe manejar al menos los siguientes aspectos.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;• Definición del servicio&lt;br /&gt;&lt;/strong&gt;Involucra la técncias y herramientas que permiten identificar, describir la funcionalidad y comportamiento de un determinado servicio&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;• Ciclo de vida del servicio&lt;br /&gt;&lt;/strong&gt;Como todo desarrollo software los servicios deben respetar un ciclo de vida de desarrollo, para el caso particular de los servicios estos pueden tener los siguiente estados.&lt;br /&gt;1. Planeado.&lt;br /&gt;Cuando un nuevo servicio está siendo diseñado, pero aún no implementado&lt;br /&gt;2. En prueba.&lt;br /&gt;El servicio está implementado en un ambiente de prueba para que pueda ser probado por el grupo correspondiente.&lt;br /&gt;3. Activo&lt;br /&gt;En este estado el servicio está disponible para ser consumido y por lo tanto se considera un servicio productivo. Esto implica que debe tener alta disponibilidad no se puede dar de baja o modificar sin un adecuado proceso que mitigue el impacto en los consumidores.&lt;br /&gt;4.Obsoleto:&lt;br /&gt;En este estado el servicio aún está activo, pero su funcionalidad es obsoleta y por lo tanto a partir de pasar a este estado no se deben aceptar nuevos consumidores y se debe comunicar que el servicio será reemplazado.&lt;br /&gt;5.Eliminado:&lt;br /&gt;En este estado el servicio ya no está más disponible, muchas veces es inevitable y no siempre se pasa a este estado en forma planificada. Cosa que se debe evitar para evitar el impacto en los consumidores.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;• Versionado&lt;/strong&gt;&lt;br /&gt;Los servicios tienen cierta funcionalidad que satisfacen una especificación funcional específica, por lo tanto el servicio puede cambiar por cambios funcionales, por errores detectados u otro motivo. Esta situación inevitable en todo software requrie ser adminstrado en forma correcta para evitar perjudicar a los consumidores. Lo que se debe hacer es versionar los servicios manteniendo las versiones antiguas disponibles hasta que por algún motivo se se consideren obsoletas.&lt;br /&gt;Para versionar existen varias técnias y cada una tiene sus pro y contras y algunas de ellas son mandatorias cuando se implementan los servicios en determinada tecnología que solo utiliza determianda técnica. Como técnicas podemos mencionar:&lt;br /&gt;- Cambio de nombre del servicio con un sufijo que indique la versión.&lt;br /&gt;- Agregado de parámetros opcionales en la espcificación de la interface.&lt;br /&gt;- Agregado de información de la versión en la cabecera de los mensajes.&lt;br /&gt;- Enrutamiento dinámico por contenido, en donde el sistema envía el mensaje a la versión correspondientes.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;• Migración&lt;br /&gt;&lt;/strong&gt;En muchas situaciones en que el servicio evoluciona de versión el consumir puede seguir usando alguna versión antigua, pero esto no siempre es así y necesariamente el cosumidor debe migrar de versión porque la nueva provee funcionalidad que justifican el esfuerzo , porque la versión actual se queda obsoleta etc. El proveedor del servicio no puede depender de la migración de los consumidores, a los sumo proporciona la mayor información para que estos migren en sus propios tiempos.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;• Registros de servicios&lt;br /&gt;&lt;/strong&gt;Para que los consumidores puedan acceder a los servicios primero debe saber donde están ubicados y como acceder a ellos. Además permite administrar las versiones de los servicios.&lt;br /&gt;Una vez que el consumidor comienza a invocar el servicios depende de él, por lo tanto no alcanza con publicar el servicios sino que debe existir un mecanismo para regitrar las dependencias entre lo servicios y los consumidores incluyendo notificaciones a los consumidores cuando hay cambios en el servicios publicado o cuando va a ser pasado al estado obsoleto.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;• Modelos de mensajes de los servicios.&lt;br /&gt;&lt;/strong&gt;En una invocación de servicios el consumidor y el proveedore debene estar de acuerdo con el formato de los mensajes a intercambiar. Para evitar el caos que searía ponerse de acuerdo entre grupos de trabajo que separados, decenas de servicios y de consumidores se adopta utilizar un modelo de datos canónico.Un modelo de datos canónico es un grupo de formatos de datos que es independientes de cualquier aplicación y compartida por todas ellas. Dentro de los procesos de gobierno SOA debe haber uno que en forma neutral encargado de definir estos formatos de datos comunes.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;• Monitoreo&lt;br /&gt;&lt;/strong&gt;Es un sistema SOA se debe garantizar un determina Nivel de Servicio Acordado (SLA), pues la caída de cualquier de ellos puede afectar el funcionamiento de los consumidores y de servicios asociados si el que falló por parte de una composición de servicios.&lt;br /&gt;El sistema de monitoreo es el encargado de detectar y prevenir problemas antes que ocurran midiendo los recuros de lso servidores donde están implementados los servicios, si los tiempos de respuesta están dentro de los valores predeterminados etc.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;• Propiedad del servicios&lt;br /&gt;&lt;/strong&gt;Cuando una aplicación usa un servicios, ¿quién es el responsable por el servicios?. La definición es ambigüa y se debe determinar en forma clara para evitar malos entendidos. En grandes empresas puede ser un área provea servicios para acceder a información referente a ella,pro lo tanto en ese caso el área de IT de esa área de negocio es la responsable por la diponibilidad y mantenimiento del servicio. En el caso de sistemas empresariales formado por composición de servicios esta responsabilidad se solapa, por lo tanto debe haber una cooperación entre analisistas de negocios, arquitectos empresariales, arquitectos de software, reponsables de tecnología y de áreas de desarrollo para alinear todo lo referente a los servicios al negocio de la empresa.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;• Pruebas de los servicios&lt;br /&gt;&lt;/strong&gt;Como todo sistema software los servicios pasan por un estado de pruebas antes de implementar en un sistema productivo. Estas pruebas deben ser tanto funcionales como técnicas y las debe hacer el área proveedora de los servicios. Los consumidores lo único que debe probar es su propia funcionalidad y la conexión con los servicios consumidos, pues pueden asumir que los servicios publicados funcionan correctamente.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;• Seguridad en los servicios&lt;br /&gt;&lt;/strong&gt;¿Cualquier usuarios puede acceder al servicios? ¿Todos los datos expuestos son públicos?, ¿La información compartida debe transmitirse por canales seguros? ¿Cómo se maneja el sistema de auditaría para evitar invocaciones no autorizadas?. Estas y muchas preguntas relacionadas con la intergradidad de los datos manejados y la disponibilidad de los servicios la maneja el área de seguridad y por lo tanto estos aspectos se deben considerar en la etapa de diseño de los servicios.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conclusión:&lt;/strong&gt;&lt;br /&gt;SOA es un importante paradigma que si es bien aplicado puede ayudar en mucho a la integración de las áreas de negocio de la empresa, mejorar la reusabilidad de los desarrollos, tener un leguaje común de modelado etc. Los proveedores suelen poner como latigijo el tema de la mejora del ROI, este es un tema en donde no pude profundizar y no se que tan fácil es calcularlo.&lt;br /&gt;Lo más importante para implementar SOA no es la técnología aplicada, productos y habilidades ténicas, sino procesos bien conformados, integración de las áreas y lo más importantes cambios cultural para pensar en "SOA" de los gerentes de negocios, de IT, analisistas y lideres de proyecto.&lt;br /&gt;Luego de salvado este paso (nada fácil por cierto) pasamos las habilidades de la gente ténica de IT, deben pensar en el árbol pero tambien en el bosque para no plantar un eucalipto en un bosque de pinos, usar patrones de la industria para independizar los servicios de la plataformas del consumidor , diseñar pensando en la reutilización (en la medida de los posible) entre otroas cosas.&lt;br /&gt;Por último, como los procesos de negocio cambian constantemente (como dice el famoso refrán "lo único constante es el cambio"), los sistemas que forman la solución SOA deben ser lo más flexibles posible para poder seguir ese cambio, ese también es una gran desafío.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Referencias&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[Esposito Dino et at, 2009], “Architecting Microsoft .Net Solution for the Enterprise”, Microsoft Press, pag 229 a 236.&lt;br /&gt;&lt;br /&gt;[W3C WS-Policy, 2007], Web Services Policy 1.5 – Framework,&lt;br /&gt;&lt;a href="http://www.w3.org/TR/ws-policy"&gt;http://www.w3.org/TR/ws-policy&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;[Woolf Bobby, 2007], “Introduction to SOA governance, Governance: The official IBM definition, and why you need it”,&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/library/ar-servgov/?S_TACT=107AG01W&amp;amp;S_CMP=campaign"&gt;IBM SOA Governance&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-7847583209549850811?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/7847583209549850811/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=7847583209549850811' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/7847583209549850811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/7847583209549850811'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/10/soa-implementation-in-enterprise.html' title='Reflections about SOA implementation in the enterprise.'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-2089843653686479593</id><published>2009-09-09T11:44:00.006-03:00</published><updated>2010-01-03T02:39:51.509-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='Azure'/><title type='text'>Cloud Computing I</title><content type='html'>&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;“The cloud is a virtualization of resources that maintains and&lt;br /&gt;manages itself” Kevin Harting &lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Entre las nuevas tendencias en IT surge un nuevo paradigma para implementar aplicaciones&lt;br /&gt;empresariales y servicios que difiere del conocido datacenter centralizado donde tenemos todas nuestras aplicaciones, bases de datos, servidores de email, de archivos etc.&lt;br /&gt;Aprovechando las ventajas provistas por las mejoras en las redes de datos, virtualización, sistemas de almacenamiento entre otros este nuevo paradigma nos permite implementar aplicaciones dentro de una infraestructura no centralizada y compartida, básicamente está es la filosofía de cloud computing.&lt;br /&gt;En este artículo veremos los conceptos básicos de este paradigma, describiremos aplicaciones y servicios provistos por los mayores proveedores de software y aspectos relacionados con los pros y contras de implementar en la nube aplicaciones empresariales.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;¿Que es cloud computing?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;“..moving computing and data away from the desktop and the portable PC and simple displaying the results of computing that take place in a centralized location and is then transmitted via the Internet on the user’s screen” John Markoff&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;Probablemente el término “cloud” surge de la representación que se hace a Internet en los diagramas de redes.&lt;br /&gt;Conceptualmente cloud computing proporciona un nivel alto de abstracción de la nube en donde los desarrolladores y administrador implementan aplicaciones utilizando frameworks y herramientas que los abstrae de la implementación física como puede ser detalles de routers, servidores, unidades de almacenamiento etc.&lt;br /&gt;Por lo tanto el usuario del servicio no necesita preocuparse de cómo se implementa esas tecnologías y como se mantienen. Solo se preocupa de como acceder a sus aplicaciones desde cualquier lado y su nivel de disponibilidad para satisfacer los requisitos de las aplicaciones.&lt;br /&gt;En realidad con cloud computing se puede acceder a funciones y servicios con necesidades de cambios dinámicos.&lt;br /&gt;Los frameworks que se utilizan en la nube deben proveer los siguientes mecanismos:&lt;br /&gt;&lt;br /&gt;- Automonitoreo&lt;br /&gt;- Registración y descubrimiento de recursos.&lt;br /&gt;- Definición de acuerdos de nivel de servicio SLA.&lt;br /&gt;- Reconfiguración automática.&lt;br /&gt;&lt;br /&gt;Desde el punto de vista del usuario en la nube los recursos están virtualizados y se mantienen y administran por si mismos.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Mitos sobre la nube&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Cloud computing no es grid computing, unit computing ni software-as-services SaaS,&lt;br /&gt;pero estos paradigmas pueden utiliza una red en la nube como forma de implementarlos&lt;br /&gt;El cloud no solamente es un cambio tecnológico sino también de negocio tanto para&lt;br /&gt;los clientes que la utilicen como los proveedores de software e infraestructura tecnológica.&lt;br /&gt;Gartner publicó los 8 mitos más comunes con respecto a cloud computing&lt;br /&gt;&lt;br /&gt;Mito 1: Cloud computing es un infraestructura o una arquitectura.&lt;br /&gt;Mito 2: Cada suministrador tendrá una nube diferente.&lt;br /&gt;Mito 3: SaaS es la nube.&lt;br /&gt;Mito 4: Cloud computing es una nueva revolución.&lt;br /&gt;Mito 5: Toda los sistemas remotos son Cloud computing.&lt;br /&gt;Mito 6: Internet y la Web con la nube.&lt;br /&gt;Mito 7: Todo estará en la nube.&lt;br /&gt;Mito 8: Cloud computing elimina las redes privadas.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Soluciones implementadas&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Existen varios proveedores que ya poseen sistemas implementados en la nube y que están disponibles para ser utilizados en forma gratuita o mediante el pago de un costo según las caracteristicas suministradas.&lt;br /&gt;Ejemplo de ellos son los servicios de Amazon mediante salesforce.com, LiveMesh de Microsoft o Moozy de EMC para compartir recursos, App Engine de Google o Blue Cloud de IBM son algunas de las aternativas disponibles. Para mayor detalle ver referencias.&lt;br /&gt;La NASA tiene disponible "NEBULA Cloud computing platform", que son servicios basados en Cloud Computing que provee componenetes open sources y sistemas self-services.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conclusiones&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Cloud computing es el resultado de la evolución de la tecnología aplicada a la implementación de infraestructura hardware y estándares abiertos para interoperar sistemas.&lt;br /&gt;Sobre la nube se pueden implementar servicios como software-as-service que son productos software expuestos en la nube como servicios como por ejemplo Google Docs o Microsoft Office Online, platform-as-service como por ejemplo los sistemas multi-petabyte de EMC Atmos o SimpleDB de Amazon.&lt;br /&gt;Otro aspecto importante es el cambio en el modelo licenciamiento pasando de un sistema de compra o alquiler de la infraestructura a pago por uso.&lt;br /&gt;Grandes proveedores como Micrososft, Google, Amazon, IBM, HP, Citrix o EMC entre otros ofrecen servicios en la nube, con carácteristicas muy variadas.&lt;br /&gt;Por lo tanto es importante considerar a la hora de utilizar servicios en la nube los aspectos de seguridad, privacidad, disponibilidad, fiabilidad y cumplimiento de estádares aplicables a sistemas implementados en la infraestructura dentro de la compañía.&lt;br /&gt;&lt;br /&gt;Con appistry http://www.appistry.com/ se pueden generar redes Cloud Computing locales.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Referencias&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;IBM Blue Cloud&lt;br /&gt;&lt;a href="http://www.deitel.com/ResourceCenters/Programming/CloudComputing/CloudComputingIBMsBlueCloud/tabid/3063/Default.aspx"&gt;http://www.deitel.com/ResourceCenters/Programming/CloudComputing/CloudComputingIBMsBlueCloud/tabid/3063/Default.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Microsoft Cloud Computing Tools&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/cc972640.aspx"&gt;http://msdn.microsoft.com/en-us/vstudio/cc972640.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Amazon Cloud Services&lt;br /&gt;&lt;a href="http://aws.amazon.com/products/"&gt;http://aws.amazon.com/products/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;EMC Cloud Optimized Storage&lt;br /&gt;&lt;a href="http://www.emc.com/products/category/subcategory/cloud-optimized-storage.htm"&gt;http://www.emc.com/products/category/subcategory/cloud-optimized-storage.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Cloud App Engine&lt;br /&gt;&lt;a href="http://code.google.com/intl/en/appengine/"&gt;http://code.google.com/intl/en/appengine/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;NEBULA Cloud computing platform&lt;br /&gt;&lt;a href="http://nebula.nasa.gov/"&gt;http://nebula.nasa.gov/&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;¿Es socio del MUG?,  &lt;a href="www.mug.org.ar"&gt;www.mug.org.ar&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-2089843653686479593?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/2089843653686479593/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=2089843653686479593' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/2089843653686479593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/2089843653686479593'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/09/cloud-computing-i.html' title='Cloud Computing I'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-6261188108273875703</id><published>2009-09-02T22:17:00.007-03:00</published><updated>2011-03-15T13:01:42.353-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Interoperability'/><title type='text'>Interoperability I</title><content type='html'>&lt;span style="font-family:arial;"&gt;Es cada vez más común que los sistemas empresariales actuales tengan que&lt;br /&gt;interactuar entre ellos, con productos implementados dentro de la compañía o con&lt;br /&gt;sistemas implementado en Internet o dentro de otra compañía u organismos&lt;br /&gt;gubernamentales.&lt;br /&gt;&lt;br /&gt;En ese contexto existieron muchos protocolos de comunicaciones, desde el manejo&lt;br /&gt;de la comunicación directamente utilizando el protocolo TCP/IP hasta modernos&lt;br /&gt;sistemas de integración modernos donde se maneja seguridad, estabilidad,&lt;br /&gt;fiabilidad, direccionamiento, enrutamiento etc.&lt;br /&gt;&lt;br /&gt;Los primero protocolos de comunicaciones estaban diseñados para interconectar&lt;br /&gt;sistemas que corrieran bajo la misma plataforma o lenguaje, de ellos surgió el DCOM&lt;br /&gt;para plataforma Microsoft, CORBA para Java etc. Para el caso de necesitar&lt;br /&gt;interconectar sistemas heterogéneos se debía recurrir e protocolo de bajo nivel como&lt;br /&gt;TCP/IP o RPC, hoy en día se siguen utilizando para comunicarse con versiones&lt;br /&gt;antiguas de algunas plataformas como SAP o Host.&lt;br /&gt;&lt;br /&gt;Debido a esta gran torre de Babel de protocolos varios importantes proveedores de&lt;br /&gt;software y hardware como Microsoft, Sun, IBM, Intel, CA, Entrust, BEA, TIBCO entre&lt;br /&gt;otros coordinaron la creación de un estándar de comunicación para interconectar sus&lt;br /&gt;plataformas.&lt;br /&gt;&lt;br /&gt;Con el advenimiento del XML como lenguajes para especificar datos y metadatos se&lt;br /&gt;dio un gran avance en el tema, luego se crearon las especificaciones de los XML&lt;br /&gt;WebServices, en sus versiones más básicas se pudo efectuar interconexiones básicas&lt;br /&gt;entre varias plataformas, como por ej .Net de Microsoft con Java de Sun.&lt;br /&gt;&lt;br /&gt;Para poder satisfacer requerimientos de interoperabilidad más exigentes se creó el&lt;br /&gt;Organization for the Advancement of Structured Information Standards &lt;/span&gt;&lt;a href="http://www.oasis-open.org/home/index.php"&gt;&lt;span style="font-family:arial;"&gt;OASIS&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;.&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.oasis-open.org/home/index.php"&gt;&lt;span style="font-family:arial;"&gt;OASIS &lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;es un consorcio de organismos con el fin de crear estándares abiertos para la&lt;br /&gt;intercomunicación de sistema de información globales.&lt;br /&gt;&lt;br /&gt;Con respecto a los webservices se generaron la familia de estándares WS*, que&lt;br /&gt;extienden la especificación original para los webservices otorgando especificaciones&lt;br /&gt;para agregar seguridad, manejo de transacciones, de enrutamiento etc.&lt;br /&gt;&lt;br /&gt;En lo que respecta a seguridad se crearon la familia de estándares WS-Security ,&lt;br /&gt;que tiene como objetivos establecer mecanismos de intercambio de mensajes SOAP&lt;br /&gt;en forma segura.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Utilizando protocolo independientes de la plataforma&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Una forma de evitar todos los problemas asociados con el marshaling entre&lt;br /&gt;plataformas es utilizar protocolos que sean independientes de ellas.&lt;br /&gt;Luego de un gran esfuerzo de los mayores vendors de software y hardware (Intel,&lt;br /&gt;HP, Sun, IBM, Microsoft, CA etc) se formalizaron una serie de estándares para&lt;br /&gt;manejar un lenguaje común a la hora de interconectar sistemas heterogéneos.&lt;br /&gt;&lt;br /&gt;De todos estos estándares lo que nos interesan son los referidos al uso de servicios&lt;br /&gt;web como mecanismo de comunicación.&lt;br /&gt;De este trabajo surgió el &lt;/span&gt;&lt;a href="http://www.ws-i.org/profiles/BasicProfile-1.1-2004-08-24.html"&gt;&lt;span style="font-family:arial;"&gt;WS-Basic Profile 1.1&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; que consta de un conjunto de&lt;br /&gt;especificaciones para servicios web no propietarias que agrega clarificaciones,&lt;br /&gt;refinamientos, interpretaciones y ampliaciones de especificaciones que promueven la&lt;br /&gt;interoperabilidad.&lt;br /&gt;Este conjunto está formado por las especificaciones de &lt;/span&gt;&lt;a href="http://www.w3.org/TR/wsdl"&gt;&lt;span style="font-family:arial;"&gt;WSDL v1.1&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, &lt;/span&gt;&lt;a href="http://www.uddi.org/pubs/ProgrammersAPI-V2.04-Published-20020719.htm"&gt;&lt;span style="font-family:arial;"&gt;UDDI v2&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; y &lt;/span&gt;&lt;a href="http://www.w3.org/TR/2000/NOTE-SOAP-20000508/"&gt;&lt;span style="font-family:arial;"&gt;SOAP&lt;br /&gt;v1.1&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; .&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&lt;br /&gt;La correcta integración de plataformas heterogéneas necesita , valga la redundancia&lt;br /&gt;, la correcta integración de los proveedores que las crean, pues son lo que deben&lt;br /&gt;generar herramientas para poder interconectarse con otros sistemas utilizando un&lt;br /&gt;lenguaje común.&lt;br /&gt;Los estándares de OASIS, en especial los WS* son un importante paso en este&lt;br /&gt;sentido&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Referencias&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Especificación WS-Securiy, &lt;/span&gt;&lt;a href="http://docs.oasis-open.org/wss/2004/01/oasis-"&gt;&lt;span style="font-family:arial;"&gt;http://docs.oasis-open.org/wss/2004/01/oasis-&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;-&lt;br /&gt;200401-wss-soap-message-security-1.0.pdf&lt;br /&gt;&lt;br /&gt;World Wide Web Consortium &lt;/span&gt;&lt;a href="http://www.w3.org/"&gt;&lt;span style="font-family:arial;"&gt;http://www.w3.org/&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-6261188108273875703?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/6261188108273875703/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=6261188108273875703' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/6261188108273875703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/6261188108273875703'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/09/interoperability-i.html' title='Interoperability I'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-651446109667690084</id><published>2009-08-22T23:43:00.008-03:00</published><updated>2009-12-29T23:33:41.903-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Introducción TDD III</title><content type='html'>&lt;span style="font-family:arial;font-size:100%;"&gt;Continuando con esta serie de posts, voy a describir el uso de una herramienta que me pareció muy útil para probar servicio Web y Rest, me refiero al &lt;a href="http://www.soapui.org/"&gt;SoapUI&lt;/a&gt;.&lt;br /&gt;En este caso voy a describir la funcionalidad que tiene la herramienta para crear objetos mocks que simulen un servicio Web, en la documentación del SoapUI los denominan MockService.&lt;br /&gt;&lt;br /&gt;Los objetos Mock son objetos que permite simular los servicios externos al código que queremos probar.&lt;br /&gt;Por ejemplos si estamos probando una componente de acceso a datos necesitaríamos tener acceso a la base de datos, que esta contenga datos de prueba válidos etc, por lo tanto dependeríamos del estado de la base de datos, la conectividad a ella y tener los permisos necesarios. Una alternativa sería simular el comportamiento de la base de datos utilizando objetos simulados que tenga el comportamiento esperado para el sistema real antes determinado conjunto de datos de entrada.&lt;br /&gt;&lt;br /&gt;Luego de esta breve introducción vamos a ver como implementar MockServices usando el SoapUI&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C10%5Cclip_filelist.xml"&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Verdana; 	panose-1:2 11 6 4 3 5 4 4 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536871559 0 0 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	line-height:12.0pt; 	mso-pagination:none; 	font-size:10.0pt; 	font-family:Verdana; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Lo primero que debemos hacer es genera&lt;/span&gt;&lt;span lang="ES-AR"&gt;r u&lt;/span&gt;&lt;span lang="ES-AR"&gt;n proyecto SoapUI en base al WSDL del servicio que queremos simular. Le asignamos el nombre &lt;i&gt;Test&lt;/i&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;&lt;i&gt;CreditRiskService&lt;/i&gt; y habilitamos las opciones “Create Test Suite” y “Create Mock Service” dejando l&lt;/span&gt;&lt;span lang="ES-AR"&gt;os otros valores por defecto sin alterar.&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;En la ventana&lt;span style="font-size:+0;"&gt; &lt;/span&gt;“Generate Test Suite” dejar l&lt;/span&gt;&lt;span lang="ES-AR"&gt;as &lt;/span&gt;&lt;span lang="ES-AR"&gt;opciones por defecto.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eoL1ClRee0U/SpC2k_BaR-I/AAAAAAAAAEI/mawQvGpKfDQ/s1600-h/mockservice1.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 184px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5372995101961897954" border="0" alt="" src="http://4.bp.blogspot.com/_eoL1ClRee0U/SpC2k_BaR-I/AAAAAAAAAEI/mawQvGpKfDQ/s320/mockservice1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C12%5Cclip_filelist.xml"&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Verdana; 	panose-1:2 11 6 4 3 5 4 4 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536871559 0 0 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	line-height:12.0pt; 	mso-pagination:none; 	font-size:10.0pt; 	font-family:Verdana; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Para hacer una prueba manual del servicio se utilizan los mensaje xml de entrada creado por la herramienta, por defecto se crea uno, pero se pueden crear todos los necesarios&lt;span style="font-size:+0;"&gt; &lt;/span&gt;con le menú contextual sobre el nombre del servicio.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eoL1ClRee0U/SpC2lJ4VinI/AAAAAAAAAEQ/jDhLy1TY9iE/s1600-h/mockservice2.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 184px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5372995104876628594" border="0" alt="" src="http://4.bp.blogspot.com/_eoL1ClRee0U/SpC2lJ4VinI/AAAAAAAAAEQ/jDhLy1TY9iE/s320/mockservice2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C12%5Cclip_filelist.xml"&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Verdana; 	panose-1:2 11 6 4 3 5 4 4 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536871559 0 0 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	line-height:12.0pt; 	mso-pagination:none; 	font-size:10.0pt; 	font-family:Verdana; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;En este ejemplo el servicio original está corrie&lt;/span&gt;&lt;span lang="ES-AR"&gt;ndo en la máquina local y los datos válidos de prueba son dni=12345678 y dni=23456789, de lo c&lt;/span&gt;&lt;span lang="ES-AR"&gt;uales obtenemos reportes de riesgo crediticio diferentes.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eoL1ClRee0U/SpC2lpsIEGI/AAAAAAAAAEY/JeFVIai9AWA/s1600-h/mockservice3.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 403px; DISPLAY: block; HEIGHT: 90px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5372995113415348322" border="0" alt="" src="http://1.bp.blogspot.com/_eoL1ClRee0U/SpC2lpsIEGI/AAAAAAAAAEY/JeFVIai9AWA/s320/mockservice3.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eoL1ClRee0U/SpC2lzkYZ8I/AAAAAAAAAEg/I0WbgQcBfoY/s1600-h/mockservice4.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 392px; DISPLAY: block; HEIGHT: 90px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5372995116067219394" border="0" alt="" src="http://2.bp.blogspot.com/_eoL1ClRee0U/SpC2lzkYZ8I/AAAAAAAAAEg/I0WbgQcBfoY/s320/mockservice4.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C14%5Cclip_filelist.xml"&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Verdana; 	panose-1:2 11 6 4 3 5 4 4 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536871559 0 0 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	line-height:12.0pt; 	mso-pagination:none; 	font-size:10.0pt; 	font-family:Verdana; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Para agregar un objeto Mock para un servic&lt;/span&gt;&lt;span lang="ES-AR"&gt;io Web (MockServices) se puede utilizar el creado cuando &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;se generó el proyecto o bien con el menú co&lt;/span&gt;&lt;span lang="ES-AR"&gt;ntextual sobre la interfase.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Este MockServices implementa el patrón de&lt;/span&gt;&lt;span lang="ES-AR"&gt; &lt;i&gt;Service Stub&lt;/i&gt; para acceder a la simulación el servicio web original o bien al servicio original, esto se camb&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;ia seleccionando el &lt;i&gt;endpoint&lt;/i&gt; correspondiente.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Para el MockServices creado asignamos un&lt;/span&gt;&lt;span lang="ES-AR"&gt; Response simulado en base al Request2&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Los endpoint asignados a los mockservices se puede ver directamente invocando en el navegador la url asignada al MockService.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eoL1ClRee0U/SpC2mZqMXoI/AAAAAAAAAEo/aL_tFNrali4/s1600-h/mockservice5.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 311px; DISPLAY: block; HEIGHT: 185px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5372995126292143746" border="0" alt="" src="http://4.bp.blogspot.com/_eoL1ClRee0U/SpC2mZqMXoI/AAAAAAAAAEo/aL_tFNrali4/s320/mockservice5.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C14%5Cclip_filelist.xml"&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Verdana; 	panose-1:2 11 6 4 3 5 4 4 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536871559 0 0 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	line-height:12.0pt; 	mso-pagination:none; 	font-size:10.0pt; 	font-family:Verdana; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Por lo tanto si vamos a nuestro request original podríamos ejecutar el mismo pero invocando al MockService creado.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Agregamos el endpoint de la interfase RiskClientServiceSoap para que use como interfase de entrada.&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eoL1ClRee0U/SpC5kpQ-l3I/AAAAAAAAAEw/2vst2VvFfow/s1600-h/mockservice7.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 163px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5372998394656495474" border="0" alt="" src="http://3.bp.blogspot.com/_eoL1ClRee0U/SpC5kpQ-l3I/AAAAAAAAAEw/2vst2VvFfow/s320/mockservice7.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C16%5Cclip_filelist.xml"&gt;&lt;link rel="Edit-Time-Data" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C16%5Cclip_editdata.mso"&gt;&lt;style&gt; v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} &lt;/style&gt;&lt;br /&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Verdana; 	panose-1:2 11 6 4 3 5 4 4 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536871559 0 0 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	line-height:12.0pt; 	mso-pagination:none; 	font-size:10.0pt; 	font-family:Verdana; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;?xml:namespace prefix = v /&gt;&lt;v:shapetype id="_x0000_t75" stroked="f" filled="f" path=" m@4@5 l@4@11@9@11@9@5 xe" preferrelative="t" spt="75" coordsize="21600,21600"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;v:path connecttype="rect" gradientshapeok="t" extrusionok="f"&gt;&lt;o:lock aspectratio="t" ext="edit"&gt;&lt;/v:shapetype&gt;&lt;v:shape id="_x0000_s1026" type="#_x0000_t75"&gt;&lt;v:imagedata title="" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\16\clip_image001.png"&gt;&lt;w:wrap type="square"&gt;&lt;/v:shape&gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;span lang="ES-AR"&gt;&lt;/span&gt; &lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C16%5Cclip_filelist.xml"&gt;&lt;link rel="Edit-Time-Data" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C16%5Cclip_editdata.mso"&gt;&lt;style&gt; v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} &lt;/style&gt;&lt;br /&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Verdana; 	panose-1:2 11 6 4 3 5 4 4 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536871559 0 0 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	line-height:12.0pt; 	mso-pagination:none; 	font-size:10.0pt; 	font-family:Verdana; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;/p&gt;&lt;/w:wrap&gt;&lt;/v:imagedata&gt;&lt;/o:lock&gt;&lt;/v:path&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;/v:stroke&gt;&lt;p class="MsoNormal"&gt;&lt;v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" preferrelative="t" spt="75" coordsize="21600,21600"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;v:path connecttype="rect" gradientshapeok="t" extrusionok="f"&gt;&lt;o:lock aspectratio="t" ext="edit"&gt;&lt;/v:shapetype&gt;&lt;v:shape id="_x0000_s1026" type="#_x0000_t75"&gt;&lt;v:imagedata title="" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\16\clip_image001.png"&gt;&lt;w:wrap type="square"&gt;&lt;/v:shape&gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;span lang="ES-AR"&gt;Una vez configurado podemos iniciar el servicio simulado con las opción &lt;i&gt;Start.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;/w:wrap&gt;&lt;/v:imagedata&gt;&lt;/o:lock&gt;&lt;/v:path&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;/v:stroke&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eoL1ClRee0U/SpC5lGqXb-I/AAAAAAAAAE4/JdYbZfuyiXE/s1600-h/mockservice8.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 115px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5372998402547609570" border="0" alt="" src="http://2.bp.blogspot.com/_eoL1ClRee0U/SpC5lGqXb-I/AAAAAAAAAE4/JdYbZfuyiXE/s320/mockservice8.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C18%5Cclip_filelist.xml"&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Verdana; 	panose-1:2 11 6 4 3 5 4 4 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536871559 0 0 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	line-height:12.0pt; 	mso-pagination:none; 	font-size:10.0pt; 	font-family:Verdana; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;span style="font-size:85%;"&gt;El MockService&lt;/span&gt; ya está corriendo, el último paso de configuración es redireccionar nuestra interfase del servicio original al servicio simulado.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eoL1ClRee0U/SpC5lZSbfuI/AAAAAAAAAFA/N9gEHB5-lkw/s1600-h/mockservice9.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 397px; DISPLAY: block; HEIGHT: 66px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5372998407547485922" border="0" alt="" src="http://3.bp.blogspot.com/_eoL1ClRee0U/SpC5lZSbfuI/AAAAAAAAAFA/N9gEHB5-lkw/s320/mockservice9.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Conclusión:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Utilizando el SoapUI se pueden hacer pruebas unitarias de servicios web en un forma muy simple, además permite hacer pruebas de carga.&lt;br /&gt;Con los MockService podemos además empezar a dsarrollar el código que lo invoca antes de que la implementación real del servicio esté disponible.&lt;br /&gt;Obviamente que está situación es útil cuando el contrado ya está bien definido y la implementación real tenga los menores cambios para que no impacte lo que ya se hizo.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;v:path connecttype="rect" gradientshapeok="t" extrusionok="f"&gt;&lt;o:lock aspectratio="t" ext="edit"&gt;&lt;v:imagedata title="" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\16\clip_image001.png"&gt;&lt;?xml:namespace prefix = w /&gt;&lt;w:wrap type="square"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;v:path connecttype="rect" gradientshapeok="t" extrusionok="f"&gt;&lt;o:lock aspectratio="t" ext="edit"&gt;&lt;v:imagedata title="" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\16\clip_image001.png"&gt;&lt;w:wrap type="square"&gt;&lt;/w:wrap&gt;&lt;/v:imagedata&gt;&lt;/o:lock&gt;&lt;/v:path&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;/v:stroke&gt;&lt;/w:wrap&gt;&lt;/v:imagedata&gt;&lt;/o:lock&gt;&lt;/v:path&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;/v:stroke&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-651446109667690084?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/651446109667690084/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=651446109667690084' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/651446109667690084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/651446109667690084'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/08/introduccion-tdd-iii.html' title='Introducción TDD III'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_eoL1ClRee0U/SpC2k_BaR-I/AAAAAAAAAEI/mawQvGpKfDQ/s72-c/mockservice1.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-4281632293980475111</id><published>2009-08-19T20:54:00.007-03:00</published><updated>2009-12-29T23:34:17.385-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mocking'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Introducción TDD II</title><content type='html'>&lt;span style="FONT-WEIGHT: bold"&gt;Pruebas unitarias con NUnit&lt;/span&gt;&lt;br /&gt;A la hora de confeccionar el test unitario de una aplicación bajo NUnit, lo primero con lo que de debe contar como se mencionara anteriormente, es con los casos de test, luego se debe escribir el código de testeo, este código tiene una estructura especial y cuenta con una serie de atributos que serán interpretados mas adelante por el motor de NUnit. El código especialmente creado para este fin, contará con Assertions, que van a probar el correcto funcionamiento de la aplicación, en el caso de no tenerlos, el test fallara si el método testeado devuelve una excepción.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Asserts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Una aserción, o instrucción Assert, prueba una condición especificada&lt;br /&gt;como argumento para el método Assert. Si la condición se evalúa como&lt;br /&gt;true, no se produce ninguna acción. Si la condición se evalúa como&lt;br /&gt;false, se produce un error en la aserción. Si la ejecución se realiza&lt;br /&gt;bajo el depurador, el programa entra en el modo de interrupción.&lt;br /&gt;Más información sobre Aserciones en el código administrado&lt;br /&gt;Las aserciones son una base importante en los tests unitarios, si la aserción falla, se reporta el error. Si un test contiene mas de una aserción, las subsiguientes a aquella en donde se produce la falla no serán ejecutadas, ya que el test en ese caso ha fallado, es por esto que es más que recomendable, probar una sola aserción por test.&lt;br /&gt;&lt;br /&gt;Las Aserciones deben ser utilizadas en aquellos casos en donde se requiera algún tipo de evaluación sobre un valor devuelto por un método, o por ejemplo en casos donde se evalúan condiciones en función del resultado de la ejecución de un método.&lt;br /&gt;&lt;br /&gt;A modo de ejemplo, si se tiene un método que suma dos números, el test a realizar, será, la comprobación, del valor resultante de la ejecución del método, contra un valor esperado determinado. Existen diferentes tipos de Aserciones, que van a proveer al programador de la aplicación de test unitario, de la facilidad, para crear a partir la combinación de los mismos, test unitarios sólidos.&lt;br /&gt;&lt;br /&gt;A continuación se enumeran los distintos tipos de aserciones provistas por Nunit. Y se recomienda visitar en link que se encuentra mas adelante, para obtener un detalle completo de los distintos métodos y sobrecargas que de la clase NUnit.Framework.Assert ofrece, agrupados por tipo.&lt;br /&gt;Tipos de Aserciones:&lt;br /&gt;• Equality Asserts&lt;br /&gt;• Identity Asserts&lt;br /&gt;• Compararion Asserts&lt;br /&gt;• Type Asserts&lt;br /&gt;• Condition Asserts&lt;br /&gt;• Utility Methdo s&lt;br /&gt;• String Assert&lt;br /&gt;Para mas detalles&lt;br /&gt;Atributos&lt;br /&gt;Son utilizados por NUnit para la identificación de los tests, en versiones anteriores, la identificación se hacia en base a herencia y a partir de naming conventions, es a partir de la versión 2 de NUnit que la identificación de los test unitarios se da, a partir de ciertos atributos.&lt;br /&gt;&lt;br /&gt;Estos atributos, están incluidos en el Namespace NUnit.Framework, cada clase que los use debe incluir el using correspondiente, y el proyecto debe referenciar a el assembly, nunit.framework.dll.&lt;br /&gt;Para mas detalles&lt;br /&gt;La Interface&lt;br /&gt;El UNit se puede ejecutar de dos formas, utilizando los comandos de consola o utilizando la interfase gráfica, la primera opción es ideal para automatizar el proceso, por ejemplo desde un PostBuild en el Visual Studio .Net o desde una tarea de Nant.&lt;br /&gt;Como se puede apreciar el resultado de la ejecución presenta los distintos tests unitarios dispuestos en forma de árbol.&lt;br /&gt;Luego de la ejecución se puede apreciar por medio de un color el resultado del mismo.&lt;br /&gt;&lt;br /&gt;Verde = OK&lt;br /&gt;&lt;br /&gt;Amarillo = No se ejecutó.&lt;br /&gt;&lt;br /&gt;Rojo = Falla&lt;br /&gt;&lt;br /&gt;Hacia la derecha se puede apreciar por medio de una interface de solapas los logs de los tests, que proveen amplia información sobre los test unitarios ejecutados, y errores que se van produciendo.&lt;br /&gt;Esta interface también brinda la opción de seleccionar los tests unitarios a ejecutar, y se recarga automáticamente cuando se recompila el código.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eoL1ClRee0U/SoyR-MESgGI/AAAAAAAAADw/-Z9yfvEPhTM/s1600-h/NUnit1.JPG"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 238px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5371828953123291234" border="0" alt="" src="http://1.bp.blogspot.com/_eoL1ClRee0U/SoyR-MESgGI/AAAAAAAAADw/-Z9yfvEPhTM/s320/NUnit1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link style="COLOR: rgb(0,0,0)" rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C03%5Cclip_filelist.xml"&gt;&lt;link style="COLOR: rgb(0,0,0)" rel="Edit-Time-Data" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C03%5Cclip_editdata.mso"&gt;&lt;style&gt; v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} &lt;/style&gt;&lt;br /&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p 	{mso-margin-top-alt:auto; 	margin-right:0in; 	mso-margin-bottom-alt:auto; 	margin-left:0in; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} pre 	{margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; 	font-size:10.0pt; 	font-family:"Courier New"; 	mso-fareast-font-family:"Times New Roman";} span.kw1 	{mso-style-name:kw1;} span.me1 	{mso-style-name:me1;} span.br0 	{mso-style-name:br0;} span.kw4 	{mso-style-name:kw4;} span.co2 	{mso-style-name:co2;} span.kw5 	{mso-style-name:kw5;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="COLOR: rgb(0,0,0); FONT-WEIGHT: boldfont-size:100%;" lang="ES-AR" &gt;Creando el proyecto de pruebas unitarias en MS &lt;/span&gt;&lt;span style="COLOR: rgb(0,0,0); FONT-WEIGHT: boldfont-size:100%;" lang="ES-AR" &gt;Visual Studio .Net&lt;/span&gt;&lt;span style="COLOR: rgb(0,153,0)" lang="ES-AR"&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 12pt" class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Una vez creado el proyecto de Test en MS VS .Net, que contendrá la o las clases con los métodos que ejecutará el NUnit, lo que sigue es:&lt;br /&gt;&lt;br /&gt;En cada clase importamos el espacio de nombres agregan&lt;/span&gt;&lt;span lang="ES-AR"&gt;do:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="BORDER-BOTTOM: rgb(204,204,204) 1pt solid; BORDER-LEFT: rgb(204,204,204) 1pt solid; PADDING-BOTTOM: 9pt; PADDING-LEFT: 27pt; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); MARGIN-LEFT: 12pt; BORDER-TOP: rgb(204,204,204) 1pt solid; MARGIN-RIGHT: 12pt; BORDER-RIGHT: rgb(204,204,204) 1pt solid; PADDING-TOP: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span lang="ES-AR"&gt;&lt;span style="font-size:+0;"&gt; &lt;/span&gt;&lt;span class="kw1"&gt;using&lt;/span&gt; NUnit.&lt;span class="me1"&gt;Framework&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;br /&gt;Establecemos el atributo que índica la clase que contiene las pruebas, con lo cual, previo al nombre de la clase agregamos "[TestFixture]", por ejemplo: &lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;?xml:namespace prefix = v /&gt;&lt;v:shapetype id="_x0000_t75" stroked="f" filled="f" path=" m@4@5 l@4@11@9@11@9@5 xe" preferrelative="t" spt="75" coordsize="21600,21600"&gt;  &lt;v:stroke joinstyle="miter"&gt;  &lt;v:formulas&gt;   &lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;   &lt;v:f eqn="sum @0 1 0"&gt;   &lt;v:f eqn="sum 0 0 @1"&gt;   &lt;v:f eqn="prod @2 1 2"&gt;   &lt;v:f eqn="prod @3 21600 pixelWidth"&gt;   &lt;v:f eqn="prod @3 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @0 0 1"&gt;   &lt;v:f eqn="prod @6 1 2"&gt;   &lt;v:f eqn="prod @7 21600 pixelWidth"&gt;   &lt;v:f eqn="sum @8 21600 0"&gt;   &lt;v:f eqn="prod @7 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @10 21600 0"&gt;  &lt;/v:f&gt;  &lt;v:path connecttype="rect" gradientshapeok="t" extrusionok="f"&gt;  &lt;o:lock aspectratio="t" ext="edit"&gt; &lt;/v:shapetype&gt;&lt;v:shape id="preimg2" type="#_x0000_t75" alt="" spid="_x0000_i1025"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\03\clip_image001.gif" href="http://labtcswis25.tstsiderca.techint.net/theme/tenaris_formal_white/minus.gif"&gt; &lt;/v:shape&gt;&lt;!--[if !vml]--&gt;&lt;img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/03/clip_image001.gif" width="11" height="11" shapes="preimg2" preid="2" /&gt;&lt;!--[endif]--&gt;&lt;span id="precollapse2" preid="2"&gt;&lt;span style="font-size:+0;"&gt; &lt;/span&gt;Contraer&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;/v:imagedata&gt;&lt;/o:lock&gt;&lt;/v:path&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;/v:stroke&gt;&lt;div style="BORDER-BOTTOM: rgb(204,204,204) 1pt solid; BORDER-LEFT: rgb(204,204,204) 1pt solid; PADDING-BOTTOM: 9pt; PADDING-LEFT: 27pt; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); MARGIN-LEFT: 12pt; BORDER-TOP: rgb(204,204,204) 1pt solid; MARGIN-RIGHT: 12pt; BORDER-RIGHT: rgb(204,204,204) 1pt solid; PADDING-TOP: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" id="pre2"&gt;&lt;span style="font-size:+0;"&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span class="kw1"&gt;namespace&lt;/span&gt; MyCompany.&lt;span class="me1"&gt;Application&lt;/span&gt;.&lt;span class="me1"&gt;Project&lt;/span&gt;.&lt;span class="me1"&gt;TestCases&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span class="br0"&gt;{&lt;/span&gt;&lt;span style="font-size:+0;"&gt;    &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span style="font-size:+0;"&gt;    &lt;/span&gt;&lt;span class="br0"&gt;[&lt;/span&gt;TestFixture&lt;span class="br0"&gt;]&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span style="font-size:+0;"&gt;   &lt;/span&gt;&lt;span style="font-size:+0;"&gt; &lt;/span&gt;&lt;span class="kw1"&gt;public&lt;/span&gt; &lt;span class="kw4"&gt;class&lt;/span&gt; TestCase&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span style="font-size:+0;"&gt;    &lt;/span&gt;&lt;span class="br0"&gt;&lt;span lang="ES-AR"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span lang="ES-AR"&gt;&lt;span style="font-size:+0;"&gt;    &lt;/span&gt;&lt;span style="font-size:+0;"&gt;                 &lt;/span&gt;&lt;span style="font-size:+0;"&gt; &lt;/span&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span lang="ES-AR"&gt;&lt;span style="font-size:+0;"&gt;    &lt;/span&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span lang="ES-AR"&gt;&lt;span style="font-size:+0;"&gt;    &lt;/span&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span class="br0"&gt;&lt;span lang="ES-AR"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span lang="ES-AR"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;span lang="ES-AR"&gt;&lt;span style="font-size:+0;"&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span lang="ES-AR"&gt;Podemos además incorporar un metodo que inicialice variables a utilizar indicándolo previamente con [SetUp]: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;v:shape id="preimg4" type="#_x0000_t75" alt="" spid="_x0000_i1026"&gt; &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\03\clip_image001.gif" href="http://labtcswis25.tstsiderca.techint.net/theme/tenaris_formal_white/minus.gif"&gt;&lt;/v:shape&gt;&lt;span id="precollapse4" preid="4"&gt;Contraer&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;/v:imagedata&gt;&lt;div style="BORDER-BOTTOM: rgb(204,204,204) 1pt solid; BORDER-LEFT: rgb(204,204,204) 1pt solid; PADDING-BOTTOM: 9pt; PADDING-LEFT: 27pt; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); MARGIN-LEFT: 12pt; BORDER-TOP: rgb(204,204,204) 1pt solid; MARGIN-RIGHT: 12pt; BORDER-RIGHT: rgb(204,204,204) 1pt solid; PADDING-TOP: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" id="pre4"&gt;&lt;span style="font-size:+0;"&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span class="br0"&gt;[&lt;/span&gt;SetUp&lt;span class="br0"&gt;]&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span class="kw1"&gt;public&lt;/span&gt; &lt;span class="kw1"&gt;void&lt;/span&gt; Init&lt;span class="br0"&gt;()&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span class="br0"&gt;&lt;span lang="ES-AR"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span lang="ES-AR"&gt;&lt;span style="font-size:+0;"&gt;      &lt;/span&gt;... &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span class="br0"&gt;&lt;span lang="ES-AR"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span lang="ES-AR"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;span lang="ES-AR"&gt;&lt;span style="font-size:+0;"&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span lang="ES-AR"&gt;Especificamos cuales son los métodos sin retorno&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="ES-AR"&gt;de resultados (void) de prueba que el NUnit deberá ejecutar con la cláusla [Test], ejemplo: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;v:shape id="preimg6" type="#_x0000_t75" alt="" spid="_x0000_i1027"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\03\clip_image001.gif" href="http://labtcswis25.tstsiderca.techint.net/theme/tenaris_formal_white/minus.gif"&gt;&lt;/v:shape&gt;&lt;span id="precollapse6" preid="6"&gt;Contraer&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;/v:imagedata&gt;&lt;div style="BORDER-BOTTOM: rgb(204,204,204) 1pt solid; BORDER-LEFT: rgb(204,204,204) 1pt solid; PADDING-BOTTOM: 9pt; PADDING-LEFT: 27pt; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); MARGIN-LEFT: 12pt; BORDER-TOP: rgb(204,204,204) 1pt solid; MARGIN-RIGHT: 12pt; BORDER-RIGHT: rgb(204,204,204) 1pt solid; PADDING-TOP: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" id="pre6"&gt;&lt;span class="co2"&gt;#region Test Method1&lt;/span&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span class="br0"&gt;[&lt;/span&gt;Test&lt;span class="br0"&gt;]&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span class="kw1"&gt;&lt;span lang="ES-AR"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt; &lt;span class="kw1"&gt;void&lt;/span&gt; TestMethod1&lt;span class="br0"&gt;()&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span class="br0"&gt;&lt;span lang="ES-AR"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span lang="ES-AR"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span lang="ES-AR"&gt;&lt;span style="font-size:+0;"&gt;      &lt;/span&gt;...;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span lang="ES-AR"&gt; &lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span class="br0"&gt;&lt;span lang="ES-AR"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span lang="ES-AR"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span class="co2"&gt;&lt;span lang="ES-AR"&gt;#endregion&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span lang="ES-AR"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span lang="ES-AR"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;span lang="ES-AR"&gt;  &lt;!--[if !supportLineBreakNewLine]--&gt;  &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span lang="ES-AR"&gt;&lt;span style="font-size:+0;"&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span lang="ES-AR"&gt;El siguiente es un ejemplo simple:&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;v:shape id="preimg8" type="#_x0000_t75" alt="" spid="_x0000_i1028"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\03\clip_image001.gif" href="http://labtcswis25.tstsiderca.techint.net/theme/tenaris_formal_white/minus.gif"&gt;&lt;/v:shape&gt;&lt;span id="precollapse8" preid="8"&gt;Contraer&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;/v:imagedata&gt;&lt;div style="BORDER-BOTTOM: rgb(204,204,204) 1pt solid; BORDER-LEFT: rgb(204,204,204) 1pt solid; PADDING-BOTTOM: 9pt; PADDING-LEFT: 27pt; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); MARGIN-LEFT: 12pt; BORDER-TOP: rgb(204,204,204) 1pt solid; MARGIN-RIGHT: 12pt; BORDER-RIGHT: rgb(204,204,204) 1pt solid; PADDING-TOP: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" id="pre8"&gt;&lt;span style="font-size:+0;"&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;span class="kw1"&gt;using&lt;/span&gt; &lt;span class="kw5"&gt;System&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/pre&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Para ampliar el concepto de los Asserts se va dar un ejem&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;plo sobre su utilización.&lt;br /&gt;&lt;br /&gt;Como se puede apreciar en el siguiente ejemplo, el método SetUp, quien cuenta con el atributo [SetUp], posee la lógica necesaria para crear los objetos que serán utilizados durante los tests unitarios.&lt;br /&gt;&lt;br /&gt;Mas adelante, es posible distinguir el método BagMultiply, este es un test que cuenta con varios Asserts, como se puede apreciar en el código, por medio de estos 3 Asserts, se testea el buen funcionamiento del mismo.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span lang="ES-AR"&gt;En los dos primeros casos, los asserts son de comparación, como parámetros se pasan, en primer lugar el valor esperado y luego el valor resultante del método que se prueba.&lt;br /&gt;&lt;br /&gt;Por último tenemos un assert que va a evaluar la condición que se pasa por parámetro.&lt;br /&gt;&lt;br /&gt;Para este test, con cualquiera de los asserts que falle, el resultado del test será negativo.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BACKGROUND: rgb(240,240,240); BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eoL1ClRee0U/SoyTbA-_yeI/AAAAAAAAAEA/bbwB8HvsIME/s1600-h/NUnit2.JPG"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 245px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5371830547876137442" border="0" alt="" src="http://2.bp.blogspot.com/_eoL1ClRee0U/SoyTbA-_yeI/AAAAAAAAAEA/bbwB8HvsIME/s320/NUnit2.JPG" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C06%5Cclip_filelist.xml"&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Luego se compila el proyecto quedando preparado para ejecutarlo desde NUnit.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Conclusión:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Con esta herramienta se pueda ejecutar pruebas unitarias en forma automática.&lt;br /&gt;Junto con herramientas de integración continua como el Hudson con un control de fuentes como SVN, de scripting de tareas con el Nant, de generación de mock objets como NMock se puede generar un entorno basico para automatizar las pruebas unitarias.&lt;br /&gt;&lt;br /&gt;Comercialmente está el Team Fundation Server que permite generar los casos de test, hacer el deploy y automatizar las pruebas, el analisis de estas herramientas de este tipo queda para otro artículo.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Referencias:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;NUnit Framework, &lt;a href="http://www.nunit.org/"&gt;http://www.nunit.org&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;v:path connecttype="rect" gradientshapeok="t" extrusionok="f"&gt;&lt;o:lock aspectratio="t" ext="edit"&gt;&lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\03\clip_image001.gif" href="http://labtcswis25.tstsiderca.techint.net/theme/tenaris_formal_white/minus.gif"&gt;&lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\03\clip_image001.gif" href="http://labtcswis25.tstsiderca.techint.net/theme/tenaris_formal_white/minus.gif"&gt;&lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\03\clip_image001.gif" href="http://labtcswis25.tstsiderca.techint.net/theme/tenaris_formal_white/minus.gif"&gt;&lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\03\clip_image001.gif" href="http://labtcswis25.tstsiderca.techint.net/theme/tenaris_formal_white/minus.gif"&gt;&lt;/v:imagedata&gt;&lt;/v:imagedata&gt;&lt;/v:imagedata&gt;&lt;/v:imagedata&gt;&lt;/o:lock&gt;&lt;/v:path&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;/v:stroke&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-4281632293980475111?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/4281632293980475111/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=4281632293980475111' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/4281632293980475111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/4281632293980475111'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/08/introduccion-tdd-ii.html' title='Introducción TDD II'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_eoL1ClRee0U/SoyR-MESgGI/AAAAAAAAADw/-Z9yfvEPhTM/s72-c/NUnit1.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-9143350178901453909</id><published>2009-08-14T17:47:00.014-03:00</published><updated>2009-12-29T23:34:50.544-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Review'/><category scheme='http://www.blogger.com/atom/ns#' term='calidad'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Introducción al TDD I</title><content type='html'>&lt;p style="FONT-WEIGHT: bold"&gt;&lt;span style="COLOR: rgb(0,153,0);font-size:180%;" &gt;&lt;span style="COLOR: rgb(0,0,0)"&gt;Pruebas unitarias&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="FONT-WEIGHT: bold"&gt;&lt;span style="font-size:130%;"&gt;Introducción:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;El diseño de un software es un factor muy importante pues afecta a todo el ciclo de vida del desarrollo y la calidad del software creado. Un buen diseño permite al sistema satisfacer principalmente los requisitos funcionales pero también los no funcionales como mantenibilidad, seguridad, performance, usabilidad etc. Existen varias técnicas de diseño cada una con sus características particulares. En este artículo vamos a describir los aspectos fundamentales del desarrollo de software basado en pruebas (TDD; por sus siglas en inglés).&lt;br /&gt;Por lo tanto TDD no es una metodología de pruebas sino de diseño donde se comienza con el diseño y desarrollo de los casos de pruebas y luego con la implementación del código funcional hasta que las pruebas se puedan ejecutar sin errores.&lt;br /&gt;Los casos de prueba además sirven para especificar los casos de uso en formato ejecutable y esta técnica permite diseñar el software en niveles de abstracción desde una granularidad chica hasta la más grande.&lt;br /&gt;&lt;/p&gt;&lt;p style="FONT-WEIGHT: bold"&gt;Beneficios de realizar las pruebas unitarias:&lt;/p&gt;En cuanto al código&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Es fácil de mantener.&lt;/li&gt;&lt;li&gt;Se torna más comprensible.&lt;/li&gt;&lt;li&gt;Tiende a estar mejor diseñado.&lt;/li&gt;&lt;li&gt;Antes de escribir código, fuerzan a detallar los requisitos de una manera útil.&lt;/li&gt;&lt;li&gt;Mientras escribe el código, evitan un exceso de funcionalidad. Cuando se pasan todos los casos de prueba, la función está completa.&lt;/li&gt;&lt;li&gt;Cuando se hace refactorización de código, aseguran que la nueva versión se comporta de la misma manera que la antigua.&lt;/li&gt;&lt;li&gt;Cuando se mantiene código, ayudan a asegurar que los cambios no alterarán código ajeno.&lt;/li&gt;&lt;li&gt;Cuando se escribe código en equipo, aumenta la confianza en que el código que se está a punto de enviar no va a romper el de otras personas, porque se pueden ejecutar las pruebas unitarias de ellos antes.&lt;/li&gt;&lt;li&gt;Los test unitarios actúan como documentación.&lt;/li&gt;&lt;li&gt;El conjunto de test unitarios proporciona constante retroalimentación de cada uno de los componentes.&lt;/li&gt;&lt;li&gt;La detección de errores se ve facilitada.&lt;/li&gt;&lt;li&gt;El tiempo de depuración se reduce.&lt;/li&gt;&lt;li&gt;El conjunto de tests actúa como una red de seguridad contra regresiones en los bugs.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Características de un buen Test:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Un test debe probar el qué y no el cómo, debe asegurarse que la funcionalidad del código a probar se cumpla en forma correcta y no prestar atención a como lo logra.&lt;/li&gt;&lt;li&gt;Es muy limitado en su alcance.&lt;/li&gt;&lt;li&gt;Se ejecuta y sucede de manera independiente.&lt;/li&gt;&lt;li&gt;Revela claramente su intención.&lt;/li&gt;&lt;li&gt;Debe poder ser ejecutado en forma automática cada vez que se modifique el código probado.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Usa ha menudo stubs y mock objects.&lt;/li&gt;&lt;/ul&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Desventajas de las pruebas unitarias manuales.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Se puede escribir una aplicación de prueba para hacer el testing. Si luego de varias semanas se quiere volver a hacer el testing el código ha sufrido tantas modificaciones que seguramente la aplicaciónd e prueba inicial ya no sirva y tenga que volver a construirse.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;En proyectos grandes podrá haber decenas de clases y muchas librerias.Es muy dificil escribir pruebas separadas por cada una de las clases en el proyecto y mantener todas ellas para futuros pruebas.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Probar apliaciones requiere un tester humano.Se puede probar varias posibilidades al principio, pero es dificil recordar todos los casos para repetir en el futuro, se deberían documentar aparte teniendo que mantener los casos de pruebas y la documentación.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Cuando la prueba es manual, el tester debe verificar el resultado de la misma y por lo tanto deber tener todo el conjunto de resultados posibles para cada prueba&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Es muy poco practico repetir todo el tiempo todos los casos manualmente antes de que salga un release. Esto llevaria muchas horas o días para completar las pruebas unitarias de todas las piezas de código.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;La ejecución de pruebas unitaria en forma manual es muy tedioso y tendiente a errores.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Utilizando Test Driven Development TDD las pruebas son automáticas y autodocumentadas.&lt;/li&gt;&lt;/ul&gt;&lt;span style="FONT-WEIGHT: bold"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Herramientas&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Existen en el mercado muchas herramientas que permiten realizar pruebas unitarias, la mas utilizadas son&lt;br /&gt;&lt;br /&gt;&lt;table border="1" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="FONT-WEIGHT: bold" valign="top" width="33%"&gt;&lt;span style="font-size:85%;"&gt;Herramienta&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="FONT-WEIGHT: bold" valign="top" width="33%"&gt;&lt;span style="font-size:85%;"&gt;Plataforma&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="FONT-WEIGHT: bold" valign="top" width="33%"&gt;&lt;span style="font-size:85%;"&gt;Comentarios&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="33%"&gt;NUnit&lt;br /&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C05%5Cclip_filelist.xml"&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;span style="font-family:'Times New Roman';font-size:12;"&gt;&lt;a href="http://www.nunit.org/"&gt;http://www.nunit.org/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" width="33%"&gt;.Net Framework 1.0,1.1,2.0&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" width="33%"&gt;Free, modo consola o interface gráfica&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;TestDriven&lt;br /&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C07%5Cclip_filelist.xml"&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;a href="http://www.testdriven.net/"&gt;http://www.testdriven.net/&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;.Net Framework1.0,1.1,2.0,3.0&lt;br /&gt;&lt;/td&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;Misma funcionalidad del NUnit como adin del VS.net.Los resultados se visulizan en modo texto en el VS.Net&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;JUnit&lt;br /&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C08%5Cclip_filelist.xml"&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;a href="http://www.junit.org/"&gt;http://www.junit.org/&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;Java&lt;br /&gt;&lt;/td&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;Stand alone o integrado a varios IDEs (Eclipse, java Builder etc)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;vbUnit&lt;br /&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C09%5Cclip_filelist.xml"&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;a href="http://www.vbunit.com/"&gt;http://www.vbunit.com/&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;Visual Basic 6.0&lt;br /&gt;&lt;/td&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;Comercial, integrada con el VS VB 6.0&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;ASPUnit&lt;br /&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C10%5Cclip_filelist.xml"&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;a href="http://aspunit.sourceforge.net/"&gt;http://aspunit.sourceforge.net/&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;ASP.Net&lt;br /&gt;&lt;/td&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;Permite realizar casos de prueba para el front end de ASP.Net (proyecto open source suspendido)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;TFS&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/teamsystem/default.aspx"&gt;http://msdn.microsoft.com/en-us/teamsystem/default.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;.Net framework 2.0,3.0 y 3.5&lt;br /&gt;&lt;/td&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;Integrado con algunas versiones del Visual Studio Team System 2005/2008.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;SoapUI&lt;br /&gt;&lt;a href="http://www.soapui.org/"&gt;http://www.soapui.org&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;Java&lt;br /&gt;&lt;/td&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;Permite ejecutar pruebas unitarias de consultas SOAP y REST.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;&lt;p&gt;SUNit&lt;br /&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C10%5Cclip_filelist.xml"&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;a href="http://sunit.sourceforge.net/"&gt;http:\\sunit.sourceforge.net&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;Smaltak&lt;br /&gt;&lt;/td&gt;&lt;td style="VERTICAL-ALIGN: top"&gt;El padre de todas las herramientas xUnit. &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Conclusión&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Las pruebas unitarias son un tema muy importante para garantizar la calidad del código que estamos creando. Usando una metodología de diseño y herramientas adecuadas este proceso se podría integrar para que en forma automática se ejecuten las pruebas unitarias ante cada subida al repositorio de código centralizado.Para ello se debería integrar con sistemas de control de versiones. Agregando un sistema de revisión de código automática junto se puede garantizar la alineación del código a estándares de codificación que mitigan problemas comunes de la aplicación de malas prácticas. Este tema está fuera del alcance del TDD pero si de las metodologías de desarrollo.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Referencias&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:TimesNewRoman; 	panose-1:0 0 0 0 0 0 0 0 0 0; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-format:other; 	mso-font-pitch:auto; 	mso-font-signature:3 0 0 0 1 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:501162910; 	mso-list-type:hybrid; 	mso-list-template-ids:389319712 67698703 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l0:level1 	{mso-level-tab-stop:.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} ol 	{margin-bottom:0in;} ul 	{margin-bottom:0in;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;ol style="MARGIN-TOP: 0in" type="1"&gt;&lt;li class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Testing object-oriented systems: models, patterns, and tools, Addison-Wesley&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="MARGIN-LEFT: 0.25in" class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;ol style="MARGIN-TOP: 0in" type="1" start="2"&gt;&lt;li class="MsoNormal"&gt;Continuous integration, Martin Fowler, &lt;a href="http://martinfowler.com/articles/continuousIntegration.html"&gt;http://martinfowler.com/articles/continuousIntegration.html&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="MARGIN-LEFT: 0.25in" class="MsoNormal"&gt;&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;ol style="MARGIN-TOP: 0in" type="1" start="3"&gt;&lt;li class="MsoNormal"&gt;&lt;span lang="PT-BR"&gt;Extreme Programming XP , &lt;/span&gt;&lt;a href="http://xprogramming.com/index.php"&gt;&lt;span lang="PT-BR"&gt;http://xprogramming.com/index.php&lt;/span&gt;&lt;/a&gt;&lt;span lang="PT-BR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="PT-BR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol style="MARGIN-TOP: 0in" type="1" start="4"&gt;&lt;li class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Introducción a Scrum, &lt;/span&gt;&lt;span lang="PT-BR"   style="font-family:TimesNewRoman;color:blue;"&gt;&lt;a href="http://www.mountaingoatsoftware.com/scrum"&gt;&lt;span lang="ES-AR"&gt;http://www.mountaingoatsoftware.com/scrum&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol style="MARGIN-TOP: 0in" type="1" start="5"&gt;&lt;li class="MsoNormal"&gt;&lt;span lang="PT-BR"&gt;Agile Manifiesto&lt;/span&gt;&lt;span lang="PT-BR"   style="font-family:TimesNewRoman;color:blue;"&gt;, &lt;/span&gt;&lt;span style="font-family:TimesNewRoman;color:blue;"&gt;&lt;a href="http://agilemanifesto.org/"&gt;http://agilemanifesto.org/&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&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/23292882-9143350178901453909?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/9143350178901453909/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=9143350178901453909' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/9143350178901453909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/9143350178901453909'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/08/introduccion-al-tdd-i.html' title='Introducción al TDD I'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-1638200749602213211</id><published>2009-08-06T12:32:00.003-03:00</published><updated>2009-08-12T15:11:50.258-03:00</updated><title type='text'>Micaela, 2 años y medio</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eoL1ClRee0U/SoMF2TN9i1I/AAAAAAAAADo/LQJB6jvLq6Y/s1600-h/IMG_0001.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_eoL1ClRee0U/SoMF2TN9i1I/AAAAAAAAADo/LQJB6jvLq6Y/s320/IMG_0001.JPG" alt="" id="BLOGGER_PHOTO_ID_5369141611185670994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eoL1ClRee0U/Snr3tfImKII/AAAAAAAAADg/mFVXIZTs51Y/s1600-h/IMG_0001.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-1638200749602213211?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/1638200749602213211/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=1638200749602213211' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/1638200749602213211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/1638200749602213211'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/08/micaela-2-anos-y-medio.html' title='Micaela, 2 años y medio'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_eoL1ClRee0U/SoMF2TN9i1I/AAAAAAAAADo/LQJB6jvLq6Y/s72-c/IMG_0001.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-7300339873049867530</id><published>2009-08-05T16:45:00.004-03:00</published><updated>2009-08-05T17:06:44.891-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='integration'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><title type='text'>Integration Patterns</title><content type='html'>Este es el titulos de unos de los libros de Patterns &amp;amp; Practices que resumen en un proyecto ficticio un diseño aplicando gran variedad de patrones de integración.&lt;br /&gt;El libro se lo puede bajar en formato pdf en el sitio de P&amp;amp;P.&lt;br /&gt;&lt;br /&gt;http://msdn.microsoft.com/en-us/library/ms978729.aspx&lt;br /&gt;&lt;br /&gt;En la siguiente presentación hice un resumen de este libro.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.4shared.com/file/123167441/7dfaea41/Integration_Patterns_-_Resumen.html"&gt;Resumen Integration Patterns&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Otra importante fuente de información sobre el tema es el sitio de &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Patterns and Best Practices for Enterprise Integration&lt;/span&gt;&lt;/span&gt; (http://www.eaipatterns.com/) que tambien tiene su libro.&lt;br /&gt;Este sitio es muy interesante porque tiene los patrones clasificados en varias categorias y stencils de visio con esquema sobre este tipo de patrones.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-7300339873049867530?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/7300339873049867530/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=7300339873049867530' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/7300339873049867530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/7300339873049867530'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/08/resumen-integration-patterns.html' title='Integration Patterns'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-330152960091785336</id><published>2009-07-31T15:34:00.013-03:00</published><updated>2009-08-09T23:30:46.994-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='Fowler'/><category scheme='http://www.blogger.com/atom/ns#' term='pattern code sample'/><title type='text'>Plugin Pattern II</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;En la practica cotidiana existen muchas oportunidades en la que se desea extender la funcionalidad de un sistema, tal sea para implementar de otra forma un funcionalidad existente como agregar una que no exista.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2 style=""&gt;&lt;span style="" lang="ES-AR"&gt;Una alternativa de solución&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Usando herencia se puede implementar de otra forma una funcionalidad existente respecto a una clase original.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Por ejemplo en un sistema simple de validación de datos de entrada en donde tenemos que validar los campos tipo string, valores requeridos y uno alfanumérico con un formato predefinido, se podría implementar de la siguiente forma&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eoL1ClRee0U/SnM8ZlSiWyI/AAAAAAAAAC4/soMXVa85BdY/s1600-h/plugin1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 174px; height: 132px;" src="http://2.bp.blogspot.com/_eoL1ClRee0U/SnM8ZlSiWyI/AAAAAAAAAC4/soMXVa85BdY/s400/plugin1.jpg" alt="" id="BLOGGER_PHOTO_ID_5364697991332649762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shapetype id="_x0000_t75" coordsize="21600,21600" spt="75" preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;  &lt;v:stroke joinstyle="miter"&gt;  &lt;v:formulas&gt;   &lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;   &lt;v:f eqn="sum @0 1 0"&gt;   &lt;v:f eqn="sum 0 0 @1"&gt;   &lt;v:f eqn="prod @2 1 2"&gt;   &lt;v:f eqn="prod @3 21600 pixelWidth"&gt;   &lt;v:f eqn="prod @3 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @0 0 1"&gt;   &lt;v:f eqn="prod @6 1 2"&gt;   &lt;v:f eqn="prod @7 21600 pixelWidth"&gt;   &lt;v:f eqn="sum @8 21600 0"&gt;   &lt;v:f eqn="prod @7 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @10 21600 0"&gt;  &lt;/v:formulas&gt;  &lt;v:path extrusionok="f" gradientshapeok="t" connecttype="rect"&gt;  &lt;o:lock ext="edit" aspectratio="t"&gt; &lt;/v:shapetype&gt;&lt;v:shape id="_x0000_i1025" type="#_x0000_t75" style="'width:112.5pt;"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;La clase &lt;i style=""&gt;ValidateEngine&lt;/i&gt; permite validar todos los datos de entrada, obviamente esta implementación está muy simplificada pues se debería agrega toda la lógica de validación de datos de entrada de un determinado formulario del front end de la aplicación.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Esto trae como problema que se deba implementar lógica para validar tipo de datos, longitud, expresiones regulares (por ej para un ISBN) y valores requeridos, es decir una implementación con una muy baja cohesión.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Una mejora sería que la clase &lt;i style=""&gt;ValidateEngine&lt;/i&gt; sea una clase abstracta del cual se deba heredar para implementar cada tipo de validación.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eoL1ClRee0U/SnM8Z9Cj-yI/AAAAAAAAADA/OFPJDFHdDig/s1600-h/plugin2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 151px;" src="http://4.bp.blogspot.com/_eoL1ClRee0U/SnM8Z9Cj-yI/AAAAAAAAADA/OFPJDFHdDig/s400/plugin2.jpg" alt="" id="BLOGGER_PHOTO_ID_5364697997708098338" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;De esta forma tenemos diferentes validaciones implementadas en clases separadas, lo que permite que cada una de ellas tenga alta cohesión.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Para utilizar este modelo podríamos aplicar el patrón estrategia [3] tal como muestra la figura.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;br /&gt;&lt;span style="" lang="ES-AR"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1027" type="#_x0000_t75" style="'width:342pt;height:129.75pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image005.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eoL1ClRee0U/SnM8aPH0wTI/AAAAAAAAADI/TAvESqtFx6Y/s1600-h/plugin3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 148px;" src="http://2.bp.blogspot.com/_eoL1ClRee0U/SnM8aPH0wTI/AAAAAAAAADI/TAvESqtFx6Y/s400/plugin3.jpg" alt="" id="BLOGGER_PHOTO_ID_5364698002562007346" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Aplicando este patrón tendríamos un sistema más flexible, por ejemplo en C# se podría implementar de la siguiente manera:&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;a href="http://codepaste.net/ocb7gy"&gt;http://codepaste.net/ocb7gy&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Como resultado de la ejecución de este ejemplo obtenemos la siguiente respuesta&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;br /&gt;&lt;span style="" lang="ES-AR"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1028" type="#_x0000_t75" style="'width:354pt;height:56.25pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image007.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eoL1ClRee0U/SnM8aawKTnI/AAAAAAAAADQ/9DI_ad_U6wo/s1600-h/plugin4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 65px;" src="http://1.bp.blogspot.com/_eoL1ClRee0U/SnM8aawKTnI/AAAAAAAAADQ/9DI_ad_U6wo/s400/plugin4.jpg" alt="" id="BLOGGER_PHOTO_ID_5364698005683981938" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Si deseamos agregar una nueva forma de implementar una validación deberíamos heredar otra clase y configurarla en la clase de contexto.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Esta solución es mucho mejor que utilizar una sola clase para todo pero tiene el gran inconveniente que para agregar nuevas funcionalidades se debe crear una clase heredada lo que hace el sistema poco flexible.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2 style=""&gt;&lt;span style="" lang="ES-AR"&gt;¿Cómo mejoramos está solución?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Supongamos que deseamos crear un sistema en donde se pueda expandir su funcionalidad pero en forma dinámica, configurable y en tiempo de ejecución, la solución mencionada ya no satisface ese requerimiento. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;La implementación del &lt;span style=""&gt; &lt;/span&gt;patrón &lt;i style=""&gt;Plugin&lt;/i&gt; permite agregar funcionalidad a nuestro sistema en forma dinámica utilizando configuración o un estándar de implementación predefinidos. Los módulos que agregan funcionalidad al sistema se denominan &lt;i style=""&gt;plugins&lt;/i&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h3 style=""&gt;&lt;b style=""&gt;&lt;span style="" lang="ES-AR"&gt;Ejemplos de la vida real&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Este patrón es muy utilizado en múltiples sistemas como sistemas multimedia que permiten agregar en forma muy simple nuevos módulos para edición de audio, transformación entre formatos, skins, analizadores de espectro etc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;En el mundo del desarrollo este patrón se aplica mucho, el más claro ejemplo es el IDE Eclipse, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;la arquitectura de este entorno de desarrollo está exclusivamente basada en &lt;i style=""&gt;plugins&lt;/i&gt;, pues por si solo no tiene funcionalidad significativa más que proveer un entorno que permite agregarlos &lt;i style=""&gt;[4]&lt;/i&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;En sus orígenes fue creado como un entorno de desarrollo para Java, pero actualmente se puede usar para muchos otros lenguajes (C++, Python, PHP, Perl, Intel C++ para Linux, Cobol, ABAP , Google apis&lt;span style=""&gt;   &lt;/span&gt;etc.), también se puede usar para modelado (UML, Base de datos, Data Warehouse etc.), herramientas de soporte al desarrollo como gran cantidad de editores diferentes, clientes Subversion, para soporte de programación en pares distribuida (Distributed XP) , comerciales como herramientas para el BPM de Tibco, generación de interfases para el broker de Software AG etc , al día de la fecha existen más de 1200 plugins publicados.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Visual Studio .Net tiene una api que permite crear plugins (addons), esta api esta implementada en System.Addin. La versión para desarrolladores del Visual Studio Team System posee plugins para revisión de código (basado en el FXCop) para pruebas unitarias, para análisis de performance, cobertura de código, control de fuentes, implementación etc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Se pueden utilizar &lt;i style=""&gt;plugins&lt;/i&gt; comerciales o bien integrarlos al Visual Studio mediante un desarrollo especial.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h3 style=""&gt;&lt;b style=""&gt;&lt;span style="" lang="ES-AR"&gt;Veamos una aplicación práctica&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;En el siguiente ejemplo vamos a extender el sistema de validación para aplicar el patrón &lt;i style=""&gt;Plugin, &lt;/i&gt;en este caso se va a utilizar configuración xml y reflection para poder agregar en forma dinámica nuevos mecanismos de validación.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Las nuevas validación estarán implementadas en assemblies separados y usarán el patrón Separate Interfase [5] para implementar la interfase IValidate que está en el assembly Context.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span  lang="ES-AR" style="font-size:14;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Cada implementación de una validación diferente se implementa en assemblies separados y mediante configuración se agregan como plugin al sistema original.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1029" type="#_x0000_t75" style="'width:5in;height:3in'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image009.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eoL1ClRee0U/SnM8aoiAxBI/AAAAAAAAADY/hyWjQwDE0FI/s1600-h/plugin5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 241px;" src="http://4.bp.blogspot.com/_eoL1ClRee0U/SnM8aoiAxBI/AAAAAAAAADY/hyWjQwDE0FI/s400/plugin5.jpg" alt="" id="BLOGGER_PHOTO_ID_5364698009382732818" border="0" /&gt;&lt;/a&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;En este ejemplo usamos el siguiente archivo de configuración.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:maroon;"   &gt;ValidatePluginsConfigFile&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:maroon;"   &gt;plugins&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:maroon;"   &gt;plugin&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=""&gt;                  &lt;/span&gt;&lt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:maroon;"   &gt;name&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;ValidateRegularExpresions &lt;/span&gt;&lt;img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/moz-screenshot.jpg" alt="" /&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;!--&lt;/span--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;span style="color:blue;"&gt;&lt;span style="color:maroon;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:maroon;"   &gt;fullName&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;ValidationExample.ValidateRegularExpresions,Version=1.0.0.0,Culture=neutral,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left: 0.5in; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;PublicKeyToken=3d10efd7d0a5d829&lt;span style="color:blue;"&gt;&lt;!--&lt;/span--&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;!--&lt;/span--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;span style="color:blue;"&gt;&lt;span style="color:maroon;"&gt;fullName&lt;/span&gt;&lt;span style="color:blue;"&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:maroon;"   &gt;type&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;ValidationExample.ValidateRegularExpresions.ValidateRegularExpresions&lt;span style="color:blue;"&gt;&lt;!--&lt;/span--&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;!--&lt;/span--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;span style="color:blue;"&gt;&lt;span style="color:maroon;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=""&gt;                  &lt;/span&gt;&lt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:maroon;"   &gt;active&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;true&lt;span style="color:blue;"&gt;&lt;!--&lt;/span--&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;!--&lt;/span--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;span style="color:blue;"&gt;&lt;span style="color:maroon;"&gt;active&lt;/span&gt;&lt;span style="color:blue;"&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;!--&lt;/span--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=";font-family:&amp;quot;;color:maroon;"  &gt;plugin&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;color:blue;"  &gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:maroon;"   &gt;plugin&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:maroon;"   &gt;name&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;ValidateStrings&lt;span style="color:blue;"&gt;&lt;!--&lt;/span--&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;!--&lt;/span--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;span style="color:blue;"&gt;&lt;span style="color:maroon;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=""&gt;       &lt;/span&gt;………………………...&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;!--&lt;/span--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=";font-family:&amp;quot;;color:maroon;"  &gt;plugin&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;color:blue;"  &gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=""&gt;       &lt;/span&gt;………………………...&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;!--&lt;/span--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=";font-family:&amp;quot;;color:maroon;"  &gt;plugins&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;color:blue;"  &gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;!--&lt;/span--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"   &gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"    lang="ES-AR"&gt;&lt;span style=";font-family:&amp;quot;;color:maroon;"   lang="ES-AR"&gt;ValidatePluginsConfigFile&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;color:blue;"   lang="ES-AR"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"    lang="ES-AR"&gt;&lt;span style=";font-family:&amp;quot;;color:blue;"   lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;color:blue;"    lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Por lo tanto podemos agregar nuevos nodos plugin por cada componente de validación y el programa automáticamente los invocará.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h3 style=""&gt;&lt;b style=""&gt;&lt;span style="" lang="ES-AR"&gt;Un poco más de código&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span  lang="ES-AR" style="font-size:14;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;En el siguiente fragmento de código se muestra como se puede ejecutar en forma dinámica un método de un assembly externo usando &lt;i style=""&gt;reflection&lt;/i&gt; y un poco de lógica para leer la configuración&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;a href="http://codepaste.net/k9bih8"&gt;http://codepaste.net/k9bih8&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Considerando que para que funcione correctamente los plugins deben estar en la GAC el resultado de la ejecución de este programa es idéntico al caso anterior.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;br /&gt;&lt;span style="" lang="ES-AR"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1030" type="#_x0000_t75" style="'width:354pt;height:56.25pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image007.png" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eoL1ClRee0U/SnM8aawKTnI/AAAAAAAAADQ/9DI_ad_U6wo/s1600-h/plugin4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 65px;" src="http://1.bp.blogspot.com/_eoL1ClRee0U/SnM8aawKTnI/AAAAAAAAADQ/9DI_ad_U6wo/s400/plugin4.jpg" alt="" id="BLOGGER_PHOTO_ID_5364698005683981938" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;h2 style=""&gt;&lt;span&gt;&lt;span style="" lang="ES-AR"&gt;Código&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;El código de ejemplo mostrado es parcial , de este &lt;a href="http://www.4shared.com/file/123166945/caf3da6e/ValidationEngine2.html"&gt;link&lt;/a&gt; pueden bajar el proyecto completo para probar en sus maquinas, fue creado con el Visual Studio 2005 SP1.&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2 style=""&gt;&lt;span style="" lang="ES-AR"&gt;Conclusión&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;El patrón &lt;i style=""&gt;plugin&lt;/i&gt; es muy útil para extender la funcionalidad de un sistema de forma tal que podemos construir una sistema base que permita agregar &lt;i style=""&gt;plugins &lt;/i&gt;y luego esos plugins pueden ser construidos por terceros, esta filosofía la usa el IDE Eclipse ya mencionado y también es muy utilizada en el navegador Firefox (Firefox extensions) y el Chrome de Google. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;También se usa en sistemas comerciales cuyos plugins requieren el pago de licencias adicionales al sistema principal.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Como desventaja se debe considerar el aumento del complejidad para permitir el agrego de los plugins en forma simple por un usuario que no tiene porque conocer los detalles del sistema principal.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;Como en muchos casos para hacer un sistema que permita utilizar este patrón se debe considerar en el&lt;span style=""&gt;  &lt;/span&gt;diseño original de la arquitectura del mismo.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 style=""&gt;&lt;span&gt;&lt;span style="" lang="ES-AR"&gt;Bibliografía&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C04%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Verdana; 	panose-1:2 11 6 4 3 5 4 4 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536871559 0 0 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	line-height:12.0pt; 	mso-pagination:none; 	font-size:10.0pt; 	font-family:Verdana; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman";} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0in 5.4pt 0in 5.4pt; 	mso-para-margin:0in; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;[1] Pattern to Enterprise Applications Architecture -&lt;/span&gt;&lt;span style=""&gt; &lt;span lang="ES-AR"&gt;Plugin&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; Pattern ,&lt;/span&gt;&lt;span style="" lang="ES-AR"&gt;&lt;a href="http://martinfowler.com/eaaCatalog/plugin.html"&gt;&lt;span style="" lang="EN-US"&gt;http://martinfowler.com/eaaCatalog/plugin.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;[2] Log4Net Framework , &lt;span style="" lang="ES-AR"&gt;&lt;a href="http://logging.apache.org/log4net/index.html"&gt;&lt;span style="" lang="EN-US"&gt;http://logging.apache.org/log4net/index.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="ES-AR"&gt;&lt;a href="http://logging.apache.org/log4net/index.html"&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;[3] Erich Gamma et at, “&lt;span style=""&gt;Design Patterns: Elements of Reusable Object-Oriented Software” (Addison-Wesley Professional Computing Series) , pag&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;[4] Eclipse plugin central web site, &lt;a href="http://www.eclipseplugincentral.com/"&gt;http://www.eclipseplugincentral.com/&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a href="http://www.eclipseplugincentral.com/"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;i style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;[5] Erich Gamma et at, “Design Patterns: Elements of Reusable Object-Oriented Software” (Addison-Wesley Professional Computing Series) , pag&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;[6] Pattern to Enterprise Applications Architecture - Separate Interface pattern, &lt;a href="http://martinfowler.com/eaaCatalog/separatedInterface.html"&gt;http://martinfowler.com/eaaCatalog/separatedInterface.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="" lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-330152960091785336?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/330152960091785336/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=330152960091785336' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/330152960091785336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/330152960091785336'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/07/plugin-pattern-ii.html' title='Plugin Pattern II'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_eoL1ClRee0U/SnM8ZlSiWyI/AAAAAAAAAC4/soMXVa85BdY/s72-c/plugin1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-2699972729112022972</id><published>2009-07-21T13:12:00.009-03:00</published><updated>2010-01-03T02:51:36.608-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='Fowler'/><category scheme='http://www.blogger.com/atom/ns#' term='logging'/><title type='text'>Plugin pattern</title><content type='html'>Como inicio de una seria de articulos sobre patrones empiezo con uno muy relacionado con mi ultimo post,&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Patron Plugin.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;“Links classes during configuration rather than compilation.”  (Fowler, POEAA, p.4990)[1]&lt;br /&gt;&lt;br /&gt;El patrón Plugin permite agregar funcionalidad a nuestro sistema en forma dinámica utilizando configuración, por lo general se usan en frameworks que permitan agregar nuevas formas de implementar funcionalidades ya existente, por ejemplo el log4net [2] permite agregar nuevas implementaciones para los adaptadores a los repositorio donde registrar los mensajes de Log (IAdapter) o formato de los mensajes (IFormater).&lt;br /&gt;Otro sistema que usaba el patrón plugin fue el EDRA de P&amp;amp;P, este framework implementaba el patrón Pipes &amp;amp; filters [3]  en donde se podían agregar handlers que ejecuten determinada funcionalidad antes de ejecutar una acción personalizada, después o en ambos casos, ejemplo de un handler de “antes” sería un handler de autenticación, de “después” un handler de validación del formato de respuesta y para ambos casos un handlers que agregue información adicional al mensaje de entrada y al de salida a la acción, por ejemplo para medir tiempo transcurrido entre le ejecución de la llamada a la acción y la recepción del mensaje de respuesta.&lt;br /&gt;&lt;br /&gt;Otro ejemplo de implementación del patrón plugin es cuando se usa en la implementación del patrón Chain and Responsability [4], básicamente en este patrón participan un conjunto de objetos de comandos y una serie de objetos de procesamiento, mediante configuración se pueden agregar en forma dinámica nuevos objetos de comandos.&lt;br /&gt;Para implementar este patrón el sistema a extender debe disponer de un mecanismo de configuración donde se puedan agregar los nuevos componentes que implementan interfases definidas para determinadas funcionalidades del sistema.&lt;br /&gt;Siguiendo con el ejemplo de log4net el archivo de configuración de la figura se indica el  mecanismo que utiliza este Framework para aplicar el patrón plugin.&lt;br /&gt;&lt;br /&gt;En este ejemplo se tienen 3 appenders, uno que envía los registro de Log a la consola, el segundo a un archivo que puede  llegar a un máximo de 100kb (y luego se genera otro) y un aprender personalizado que envía los logs a otro repositorio no contemplado en la configuración estándar de log4Net (por ej MSMQ o WCF).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eoL1ClRee0U/SmXsu5Fy7xI/AAAAAAAAACw/yynsZIci3Ho/s1600-h/log4net.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 253px;" src="http://1.bp.blogspot.com/_eoL1ClRee0U/SmXsu5Fy7xI/AAAAAAAAACw/yynsZIci3Ho/s400/log4net.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5360951221797711634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mas info&lt;br /&gt;&lt;br /&gt;[1] Pattern to Enterprise Applications Architecture - Pluging Pattern ,http://martinfowler.com/eaaCatalog/plugin.html&lt;br /&gt;&lt;br /&gt;[2] Log4Net Framework , http://logging.apache.org/log4net/index.html&lt;br /&gt;&lt;br /&gt;[3] Enterprise Integration Patterns – Pipes &amp; Filters , http://www.enterpriseintegrationpatterns.com/PipesAndFilters.html&lt;br /&gt;&lt;br /&gt;[4] Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley Professional Computing Series)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-2699972729112022972?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/2699972729112022972/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=2699972729112022972' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/2699972729112022972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/2699972729112022972'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/07/plugin-pattern.html' title='Plugin pattern'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_eoL1ClRee0U/SmXsu5Fy7xI/AAAAAAAAACw/yynsZIci3Ho/s72-c/log4net.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-4222224437087036773</id><published>2009-07-13T11:02:00.008-03:00</published><updated>2009-07-13T17:04:48.086-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='logging'/><title type='text'>Logging and trace.</title><content type='html'>&lt;span style="font-family:times new roman;font-size:85%;"&gt;En este post subo información sobre unos de los servicios cross más importantes a considerar en el diseño de un arquitectura empresaria, que es logging y trace de los eventos y errores que surgan en la aplicación. Se analizan las carácteristicas más importantes, los anti patrones, las buenas prácticas y los patrones de diseño aplicados. Al final se indican algunos frameworks de logging para diferentes plataformas y lenguajes de programación.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta content="Word.Document" name="ProgId"&gt;&lt;meta content="Microsoft Word 11" name="Generator"&gt;&lt;meta content="Microsoft Word 11" name="Originator"&gt;&lt;link style="FONT-FAMILY: times new roman" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C05%5Cclip_filelist.xml" rel="File-List"&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;Objetivo:&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-AR"&gt;Registrar eventos de relevancia para utilizarlos en procesos de auditoria o &lt;i&gt;troubleshuting&lt;/i&gt; post mortem.&lt;br /&gt;Es una herramienta muy útil en ambientes productivos donde es imposible depurar con herramientas de desarrollo.&lt;br /&gt;Los eventos pueden ser información de depuración o errores ocurridos en la aplicación.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Características deseables de un sistema de &lt;i&gt;logging&lt;/i&gt;:&lt;br /&gt;&lt;/b&gt;Configuración de niveles de log&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="ES-AR"&gt;Formateo de eventos&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="ES-AR"&gt;Agregado de información adicional en publicación de eventos&lt;br /&gt;&lt;i&gt;Logging&lt;/i&gt; asincrónico&lt;br /&gt;&lt;i&gt;Logging&lt;/i&gt; confiable&lt;br /&gt;&lt;i&gt;Logging&lt;/i&gt; centralizado&lt;br /&gt;Configuración jerárquica y dinámica&lt;br /&gt;Publicación a múltiples destinos&lt;br /&gt;Aplicación para visualizar y analizar los eventos.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta content="Word.Document" name="ProgId"&gt;&lt;meta content="Microsoft Word 11" name="Generator"&gt;&lt;meta content="Microsoft Word 11" name="Originator"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C05%5Cclip_filelist.xml" rel="File-List"&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;Anti patrones:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span lang="ES-AR"&gt;Todo en un mismo mensaje: Todo junto en un mismo archivo es&lt;span style="font-size:0;"&gt; &lt;/span&gt;muy dificil de analizar.&lt;br /&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;Registro de datos incompletos:Registrar lo que sirva para, ni más ni menos.&lt;/span&gt;&lt;br /&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;Log sin formato o formato no consistente: Si el log no está estructurado, su analisis se hace muy dificil.&lt;br /&gt;&lt;span style="font-size:0;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;Entradas multi línea: Complica el procesamiento de log para pasarlo &lt;/span&gt;&lt;span lang="ES-AR"&gt;a una DB o aplicación que muestre la información en forma amigable.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="FONT-STYLE: italic;font-family:times new roman;" &gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;Registrar mensajes relacionados a un mismo contexto en varias líneas: Muy dificil de analizar lo que pasó en un determinado contextode ejecución.&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span lang="ES-AR"  style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="FONT-WEIGHT: bold; FONT-STYLE: italic; FONT-FAMILY: times new roman"&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta content="Word.Document" name="ProgId"&gt;&lt;meta content="Microsoft Word 11" name="Generator"&gt;&lt;meta content="Microsoft Word 11" name="Originator"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C08%5Cclip_filelist.xml" rel="File-List"&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;Buenas prácticas:&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="ES-AR"&gt;Registrar los logs en repositorio con formato, esto facilita en análisis de los logs registra&lt;/span&gt;&lt;span lang="ES-AR"&gt;dos.&lt;br /&gt;&lt;span style="font-size:0;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;Separar los mensajes en diferentes destinos dependientes de la audiencia que los usa, por un log de auditoria puede tener muchas más información de la necesario para resolver un problema que ocurrió en la aplicación.&lt;br /&gt;&lt;/span&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;Registrar las acciones antes de que ocurran&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;br /&gt;Evitar que los archivos de logs sean muy grandes, se recomienda archivarlos y crear uno nuevo.&lt;br /&gt;&lt;br /&gt;Registrar los eventos en una sola línea, es más fácil de analizar y filtrar. Si la información tiene formato complejo se recomienda usar xml.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Usar formato consistente en un mismo archivo.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="FONT-WEIGHT: bold;font-family:times new roman;" &gt;&lt;span style="font-family:times new roman;font-size:85%;"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Patrones utilizados&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;o:shapelayout ext="edit"&gt;&lt;/o:shapelayout&gt;&lt;o:idmap ext="edit" data="1"&gt;&lt;/o:idmap&gt;&lt;?xml:namespace prefix = p /&gt;&lt;p:colorscheme colors="#666699,#eaeaea,#6b6b99,#ccecff,#00cc66,#54547a,#65b2ff,#9900ff"&gt;&lt;/p:colorscheme&gt;&lt;/span&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta content="PowerPoint.Slide" name="ProgId"&gt;&lt;meta content="Microsoft PowerPoint 11" name="Generator"&gt;&lt;style&gt; v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} &lt;/style&gt;&lt;br /&gt;&lt;meta content="7/13/2009" name="Description"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;Estrategia:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-AR"&gt;Se puede usar para seleccionar la forma en que el sistema de log registra los eventos y errores.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eoL1ClRee0U/SltAlmb3gYI/AAAAAAAAACA/xxMr9X7-24k/s1600-h/Estrategia.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5357947196404105602" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: pointer; HEIGHT: 167px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_eoL1ClRee0U/SltAlmb3gYI/AAAAAAAAACA/xxMr9X7-24k/s320/Estrategia.JPG" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta content="Word.Document" name="ProgId"&gt;&lt;meta content="Microsoft Word 11" name="Generator"&gt;&lt;meta content="Microsoft Word 11" name="Originator"&gt;&lt;link style="FONT-FAMILY: times new roman" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C13%5Cclip_filelist.xml" rel="File-List"&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;Pipes and filters:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-AR"&gt;Se usa para tener un mecanismo extensible y de bajo acoplamiento para agregar información contextual y codificación a los mensajes antes de enviarlo al repositorio de logging.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" face="times new roman"&gt;&lt;span style="font-size:85%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eoL1ClRee0U/SltBB-YfRXI/AAAAAAAAACI/9UbF8-ymbFY/s1600-h/PipesAndFilters.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5357947683868722546" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: pointer; HEIGHT: 69px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_eoL1ClRee0U/SltBB-YfRXI/AAAAAAAAACI/9UbF8-ymbFY/s320/PipesAndFilters.JPG" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="FONT-FAMILY: times new roman"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta content="Word.Document" name="ProgId"&gt;&lt;meta content="Microsoft Word 11" name="Generator"&gt;&lt;meta content="Microsoft Word 11" name="Originator"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C13%5Cclip_filelist.xml" rel="File-List"&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;Consideraciones de implementación:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="ES-AR"&gt;Por lo general son frameworks muy flexibles, que soporta multiples fuentes y destinos, por lo tanto para implementarlo adecuadamente se requiere un buen análisis de que funcionalidades usar y cual es su mejor forma de implementar.&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;Otros frameworks de logging e instrumentación.&lt;br /&gt;&lt;br /&gt;Java: &lt;/span&gt;&lt;a href="http://logging.apache.org/log4j/" target="_parent"&gt;&lt;span lang="ES-AR"&gt;log4J &lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;y de este log4Net, log4PHP, log4JavaScript, log4C, log4VB, log4SQL, log4PLSQL etc&lt;br /&gt;&lt;br /&gt;AJAX: &lt;/span&gt;&lt;a href="http://log4javascript.org/" target="_parent"&gt;&lt;span lang="ES-AR"&gt;log4javascript&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;, &lt;/span&gt;&lt;a href="http://earthcode.com/blog/2005/12/jslog.html" target="_parent"&gt;&lt;span lang="ES-AR"&gt;JSLog&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;, &lt;/span&gt;&lt;a href="http://gleepglop.com/javascripts/logger/" target="_parent"&gt;&lt;span lang="ES-AR"&gt;Lumberjack&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;, &lt;/span&gt;&lt;a href="http://log4js.berlios.de/" target="_parent"&gt;&lt;span lang="ES-AR"&gt;log4Js&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;, &lt;/span&gt;&lt;a href="http://jstracer.sourceforge.net/" target="_parent"&gt;&lt;span lang="ES-AR"&gt;jsTracer&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;br /&gt;Unix like: syslogd (nativo).&lt;br /&gt;&lt;br /&gt;Bibliografía&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span style="font-family:'Times New Roman';font-size:12;"&gt;Carácteristicas&lt;br /&gt;&lt;a href="http://gojko.net/2006/12/09/logging-anti-patterns/" target="_parent"&gt;http://gojko.net/2006/12/09/logging-anti-patterns/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Frameworks&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc309506.aspx" target="_parent"&gt;Pattern &amp;amp; Practices Logging Application Block&lt;/a&gt;&lt;br /&gt;&lt;a href="http://logging.apache.org/log4net/index.html" target="_parent"&gt;Apache Log4Net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Patrones&lt;br /&gt;&lt;a href="http://www.dofactory.com/Patterns/PatternStrategy.aspx" target="_parent"&gt;http://www.dofactory.com/Patterns/PatternStrategy.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms978599.aspx" target="_parent"&gt;http://msdn.microsoft.com/en-us/library/ms978599.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"  style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"  style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-4222224437087036773?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/4222224437087036773/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=4222224437087036773' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/4222224437087036773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/4222224437087036773'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/07/logging-and-trace.html' title='Logging and trace.'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_eoL1ClRee0U/SltAlmb3gYI/AAAAAAAAACA/xxMr9X7-24k/s72-c/Estrategia.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-4939099579550334344</id><published>2009-07-05T19:41:00.002-03:00</published><updated>2009-07-05T19:54:01.888-03:00</updated><title type='text'>Golpe en Honduras</title><content type='html'>Este no e un tema relacionado con Arquiectura de software , pero aprovecho este espacio para repudiar el golpe de estado en el pais hermano de Honduras.&lt;br /&gt;Es importante deterner este golpe, para evitar que otros los quieran imitar.&lt;br /&gt;Me parece muy bien el repudio internacional, y del gobierno argentino.&lt;br /&gt;Nosotros que vivimos casi toda nuestra vida en democracia, y muchos de mis colegas nacieron en democracia deben saber que  no debe existir mas golpes de estados en ningún país que pueda desastibilizar la región.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-4939099579550334344?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/4939099579550334344/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=4939099579550334344' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/4939099579550334344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/4939099579550334344'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/07/golpe-en-honduras.html' title='Golpe en Honduras'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-1885685647398090956</id><published>2009-06-23T16:07:00.007-03:00</published><updated>2009-09-07T17:00:01.220-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><title type='text'>Implementacion ASP.Net</title><content type='html'>El tema del post es para un manual, lo que quiero compartir son algunos tips para implementar aplicaciones ASP.Net en entornos con framework .Net 2.0 instalado.&lt;br /&gt;Supongamos que tenemos un ambiente con aplicaciones ASP.net 1.1 y solo tenemos los framework 1.0 1.1 , si queremos implementar una nueva apliación desarrollada con ASP.Net 2.0, tenemos que hacer los siguiente:&lt;br /&gt;&lt;br /&gt;1- Instalar el runtime del framework .Net 2.0. &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&amp;amp;displaylang=en"&gt;How to&lt;/a&gt;&lt;br /&gt;2- Instalar las extensiones del IIS 6.0 para framework 2.0&lt;br /&gt;&lt;br /&gt;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Aspnet_regiis -i&lt;br /&gt;&lt;br /&gt;y listo , ahora podemos usar nuestras más flamante aplicación en ASP.Net 2.0. pero....&lt;br /&gt;&lt;br /&gt;cuando queremos usar las aplicaciones ASP.net 1.1 vemos que mucha de ellas directamente no funcionan, sobre todo si dependen del machine.config, pues desde ahora el isapi del ASP.Net buscará la configuración en el machine.config del 2.0 y no del 1.1.&lt;br /&gt;&lt;br /&gt;Solucion.&lt;br /&gt;&lt;br /&gt;Se debe asociar los scrips maps del IIS para que la aplicacion siga corriendo con el framework 1.1&lt;br /&gt;&lt;br /&gt;El siguiente comando instala los scrips maps apuntando a las versión asociada a aspnet_regiis.exe (en ejemplo es el 1.1) con la aplicacion SampleApp1 y todos sus subdirectorios.&lt;br /&gt;&lt;br /&gt;C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Aspnet_regiis -s W3SVC/1/ROOT/SampleApp1&lt;br /&gt;&lt;br /&gt;Si quieren ver mas opciones, que mejor que los KB de Microsoft.&lt;br /&gt;http://msdn.microsoft.com/en-us/library/k6h9cz8h(vs.71).aspx&lt;br /&gt;&lt;br /&gt;En el siguiente blog esta detallado como solucionar este problema&lt;br /&gt;http://imasters.uol.com.br/artigo/2839?cn=2839&amp;amp;cc=145&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-1885685647398090956?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/1885685647398090956/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=1885685647398090956' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/1885685647398090956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/1885685647398090956'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/06/implementacion-aspnet.html' title='Implementacion ASP.Net'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-5785835483674913867</id><published>2009-06-19T13:07:00.005-03:00</published><updated>2009-12-29T23:35:15.804-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quality Attributes'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Review'/><title type='text'>Diseño de arquitecturas I</title><content type='html'>Joseph Hofstader en el Architecure Journal N° 15 indica que el diseño de la arquitectura de un software tienen 4 aspectos: Conocimiento del dominio, conceptualización, habilidades técnicas y habiidades para aplicar patrones. Los dos primero sería la etapa de definicion del problema y las dos ultimas formaria la etapa de desarrollo dela solución.&lt;br /&gt;&lt;br /&gt;Indica que el conocimiento de la tecnología no los unico a manejar para diseñar aplcaciones robustas, pero si es una habilidad muy importante que tiene que tener el arquitecto de software. Dentro de la empresa se recomienda trabajar con la menor cantidad de tecnologias posibles, esto permite administrar el esfuerzo del desarrollo en forma más eficiente, reduciendo la cantidad de herramientas de administración, desarrollo monitoreo etc, teniendo grupos con menos perfiles técnicos etc .&lt;br /&gt;Algunos de los los aspectos de calidad a tener en cuanta al momento de diseñar la arquitectura base de un sistema son altamente influenciado por la forma en que se implementa el diseño a nivel código. Por ejemplos aspectos de seguridad, performance y mantenimiento son altamente degradados sin se desarrolla sin seguir buenas practicas y aplicar patrones.&lt;br /&gt;Para ello se debe tener adecuados controles de calidad, testear el codigo en forma periodica, dependiendo de la metodología de desarrollo adoptada, la integración continúa mediante el uso de herramientas permiten controlar al final del día que el código subido al repositorio notiene errores de compilación y además se pueden ejecutar revisione de código y pruebas unitarias automáticas. Si con esto se generar reportes se puede controlar día a día la calidad del código que se está generado.&lt;br /&gt;&lt;br /&gt;Si no hacemos esto, cuando el codigo pasa a testing funcional, nos encotramos con cosas como SQL Harcodeados, store procedures gigantescos que no tienen ningun tipo de control en la cantidad de registros a enviar al cliente, armado de documentos (xml u otros tipo) concatenados strings (System.String) y en el peor de los casos codigo "chorizo" practimente imposible de mantener, datos de conexión harcodeados (aunque no lo crean) etc etc.&lt;br /&gt;&lt;br /&gt;No se imaginan los problema de reworking y troubleshuting que surgen cuando se produce un incidencia con alguna de esas aplicaciones.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-5785835483674913867?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/5785835483674913867/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=5785835483674913867' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/5785835483674913867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/5785835483674913867'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/06/diseno-de-arquitecturas-i.html' title='Diseño de arquitecturas I'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-1321692502413038408</id><published>2009-05-31T16:11:00.000-03:00</published><updated>2009-05-31T16:11:08.811-03:00</updated><title type='text'>Arquitectura de Software: ORM, Object-Relational Mapping - I Parte</title><content type='html'>&lt;a href="http://arquitectura-de-software.blogspot.com/2006/05/orm-object-relational-mapping-i-parte.html"&gt;Arquitectura de Software: ORM, Object-Relational Mapping - I Parte&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-1321692502413038408?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://arquitectura-de-software.blogspot.com/2006/05/orm-object-relational-mapping-i-parte.html' title='Arquitectura de Software: ORM, Object-Relational Mapping - I Parte'/><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/1321692502413038408/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=1321692502413038408' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/1321692502413038408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/1321692502413038408'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/05/arquitectura-de-software-orm-object.html' title='Arquitectura de Software: ORM, Object-Relational Mapping - I Parte'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-4267923569403804057</id><published>2009-05-29T18:15:00.003-03:00</published><updated>2009-10-10T16:45:29.797-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Azure'/><title type='text'>¿(Des) Orientación a Servicios?</title><content type='html'>Un tema analizado en el Microsoft Architecture Day de Buenos Aires es un tema que a mi criterio resulta polémicos, la aplicación de SOA en la práctica.&lt;br /&gt;&lt;br /&gt;SOA y su aplicación práctica en grandes empresas, según el disertante SOA no tuvo el exito esperado debido a multiples factores. La misma conclusión expresó Wilson Chelsa de Microsoft pero desde el punto de vista de retorno de inversión, modelos de beneficios etc.&lt;br /&gt;&lt;br /&gt;- SOA resultó ser muy complejo de implemementar.&lt;br /&gt;- La industria en general no se alineo a la filosofía de SOA en sus procesos de negocio.&lt;br /&gt;- Requiere gran inversión en el cambio cultural de la organización.&lt;br /&gt;- En sus etapas iniciales no existían servicios laterales de importancia cmo registry, governance etc.&lt;br /&gt;- Las implemetaciones muchas veces no tuvieron los resultados esperados porque fue muy dificil adecuar la cultura del negocio a la folosofía SOA.&lt;br /&gt;- Aún continua la discusión acerca de la granularidad de los servicios, pues si es muy granular se corre el riesgo de no exponer servicios de negocio, poco granular surge que es muy poco reutilizable. En mi experiencia los servicios expuestos muy pocas veces son reutilzables.&lt;br /&gt;- El tema del versionado también está es discusión.&lt;br /&gt;- El desempeño de las implementaciones SOA resultaron ser muy costosas por su grano grueso, muchas capas, gran overhead en sistemas laterales.&lt;br /&gt;&lt;br /&gt;El disertante introdujo el concepto de (Des)SOA:&lt;br /&gt;- Reducir la cantidad de capas lógicas y físicas.&lt;br /&gt;- Framework como helpers externos en lugar de contenedores.&lt;br /&gt;&lt;br /&gt;Actualmente la nueva arquitectura de Microsoft sobre sistemas distribuídos en clouds Azure, utilizan un modelo con menos capas en donde expone los servicios en forma independiente. Evidentemente es un tema para discutir en profundidad.&lt;br /&gt;&lt;br /&gt;Este tema da para un interesante discusión.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-4267923569403804057?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/4267923569403804057/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=4267923569403804057' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/4267923569403804057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/4267923569403804057'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/05/des-orientacion-servicios.html' title='¿(Des) Orientación a Servicios?'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-719592026439986575</id><published>2009-05-27T18:37:00.002-03:00</published><updated>2010-05-04T11:48:58.262-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Microsoft Architecture Day</title><content type='html'>En el día de hoy se hizo la reunión de la Comunidad de Arquitectos de Microsoft. Fue una reunión muy interesante en la que gente de Microsoft y otra empreass presentaron sus experiencias en soluciones de sistemas utilizando las últimas tecnologías de Microsoft,también se presentaron nuevos feactures de tecnologias como Windows 7 , WPF , Siverligh etc. Los asistentes pudieron preserciar presentaciones como:&lt;br /&gt;&lt;br /&gt;Andres Vetori y equipo de VMBC Caso de exito de un sistema con .Net 3.5 SP1, &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx"&gt;WCF&lt;/a&gt;, &lt;a href="http://www.codeplex.com/retina"&gt;Retina.Net&lt;/a&gt; ,&lt;a href="https://connect.microsoft.com/content/content.aspx?ContentID=10101&amp;amp;SiteID=642"&gt;Geneva framework&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming"&gt;AOP&lt;/a&gt;, IVR con &lt;a href="http://www.microsoft.com/speech/speech2007/default.mspx"&gt;Speech Server 2007&lt;/a&gt; entre otra tecnologías. Fue un proyecto contruido utilizando la metodología &lt;a href="http://agilemanifesto.org/"&gt;Agile &lt;/a&gt;/ &lt;a href="http://en.wikipedia.org/wiki/Scrum_%28development%29"&gt;Scrum&lt;/a&gt;.&lt;br /&gt;Como herramientas de desarrollo utilizaron Team System con integración continua en base a Team Build y deploy con scripts de MSDeploy.&lt;br /&gt;&lt;br /&gt;Conclusiones generadas del proyecto:&lt;br /&gt;- Es deseable automatizar las implementaciones en producción&lt;br /&gt;- Adaptar la metodología de desarrollo a las particularidades del proyecto.&lt;br /&gt;- El merge continuo no es siempre justificable.&lt;br /&gt;- Se debe tener un adecuado control de los builds y que objetos contiene cada iteración.&lt;br /&gt;&lt;br /&gt;Recomendaciones para un exito de un proyecto de este tipo:&lt;br /&gt;- Virtualización (Hiper-V).&lt;br /&gt;- Equipo con buen señority.&lt;br /&gt;- No reiventar la rueda (patrones, frameworks etc).&lt;br /&gt;- No subestimar el test (automzatizarlo y controlar su correcta ejecución como entregable de la iteración).&lt;br /&gt;- No olvidarse del monitoreo.&lt;br /&gt;- Tener un adecuado procedimiento de control de cambios.&lt;br /&gt;- Mantener una cultura de motivación para hacer las cosas bien hechas.&lt;br /&gt;- Crear una cultura de calidad continua.&lt;br /&gt;&lt;br /&gt;Diego Gonzales de lagash presentó una visió de las tendencias en arquitectura de software&lt;br /&gt;&lt;br /&gt;- Arquitecturas elásticas&lt;br /&gt;- Base de datos no relacionales.&lt;br /&gt;- (des) orientación a servicios.&lt;br /&gt;- Programación dinámica.&lt;br /&gt;&lt;br /&gt;En el tema de arquitectura elástica se vió consideraciones sobre escalabilidad en ambientes Cloud, planificación de arquitectura y modelos de arquitectura.&lt;br /&gt;Diego presentó el concepto de que las arquituras deben ser emergentes y no prescriptivas, es decir se deben diseñar en conjunto con el desarrollo del sistema.&lt;br /&gt;&lt;br /&gt;Dentro del tema de escalabilidad horizontal existe el nuevo paradigma de Microsoft que es &lt;a href="http://www.microsoft.com/azure/default.mspx"&gt;Azure &lt;/a&gt;y el sistema operativo Windows Azure, creado para aplicaciones distribuidas en infraestructura &lt;a href="http://en.wikipedia.org/wiki/Cloud_computing"&gt;Cloud&lt;/a&gt;. La escalabilidad vertical ya está llegando a su límite.&lt;br /&gt;Para scar provecho a este nuevo paradigma es necesario especialización en programación concurrente.&lt;br /&gt;Respecto a la planificación de arquitectura Diego mencionó que en muchas ocaciones conviene que el diseño de la arquitectura sea emergente en vez de prescriptiva, haciendo participar al aquipo de desarrollo ensu definición, esto tiene la ventaja de motivarlos en la creación de la misma y el desarollo del sistema y permite un mejor refinamiento mientra se crea el sistema.&lt;br /&gt;Planteó conceptos de modelado de arquitecturas que pueden ser centralizadas o satelitales.&lt;br /&gt;&lt;br /&gt;Un tema que recordó es que por lo general es una desición por defecto que la base de datos a utilizar sea del tipo relacional, esto no siempre es una correcta elección, hay casos donde se requieren datos temporarios, no es tan exigible que sea transaccional en donde la RDBMS no resultan ser lo más apropiado. Ejemplos de uso de este tipo de base de datos son aplicaciones del tipo redes sociales como Facebook.&lt;br /&gt;Las bases de datos no relacionales tienen entre otras las siguientes características:&lt;br /&gt;&lt;br /&gt;- key-value db y document db.&lt;br /&gt;- Buen soporte para lenguajes dinámicos.&lt;br /&gt;- Facil cambio en la aplicación.&lt;br /&gt;- Datos a-normalizados. etc.&lt;br /&gt;&lt;br /&gt;Productos: &lt;a href="http://www.microsoft.com/azure/sql.mspx"&gt;SQL Services&lt;/a&gt;, &lt;a href="http://drizzle.org/"&gt;Drizzle&lt;/a&gt;,&lt;a href="http://aws.amazon.com/"&gt;Amazon WebServices&lt;/a&gt; etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-719592026439986575?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/719592026439986575/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=719592026439986575' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/719592026439986575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/719592026439986575'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/05/microsoft-architecture-day.html' title='Microsoft Architecture Day'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-7072007335596561690</id><published>2009-05-25T17:01:00.001-03:00</published><updated>2009-08-05T17:08:56.657-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Windows Communication Fundation</title><content type='html'>El WCF fue dado a la luz junto con el framework .Net 3.0 en 2006. En ese momento existían addíns para el Visual Studio 2005 que permitían generar proyectos WCF en forma simple, muchas de esas herramientas eran beta, y se debían usar un poco por linea decomandos y un poco dentro del VS2005,algo muy poco práctico para implementar en una empresa o sector de desarrollo de software.&lt;br /&gt;No voy a describir los problemas que tuve con el desarrollo de proyectos WCF en VS2005 pues el el Visual Studio 2008 incluye todas esas herramientas que se debian agregar a la anterior versión del IDE pudiendo generar proyectos WCF en forma mucho más simple.&lt;br /&gt;&lt;br /&gt;Para aquellos que aún no han trabajado con el WCF o necesitan una capacitación de diferentes aspectos que provee esa tecnología les sugiero los siguientes recursos. Los WebCasts están basado enel Visual Studio 2008, por ese motivo es conveniente usar ese entorno.&lt;br /&gt;&lt;br /&gt;En ingles&lt;br /&gt;WCF Getting Started&lt;br /&gt;http://msdn.microsoft.com/en-us/library/ms734712.aspx&lt;br /&gt;&lt;br /&gt;Microsoft Windows Communication Foundation Step by Step, John Sharp&lt;br /&gt;Disponible para su compra en Microsoft-Press&lt;br /&gt;&lt;br /&gt;http://www.microsoft-press.co.uk/scripts/product.asp?ref=811252&lt;br /&gt;&lt;br /&gt;O bien en librerias online como http://www.books24x7.com&lt;br /&gt;&lt;br /&gt;Pro WCF: Practical Microsoft SOA Implementation&lt;br /&gt;&lt;br /&gt;by Chris Peiris,  Dennis Mulder et al.&lt;br /&gt;Apress © 2007 (505 pages) Citation&lt;br /&gt;ISBN:9781590597026&lt;br /&gt;&lt;br /&gt;Providing coverage of the unified programming model, reliable messaging, security, peer-to-peer programming, and more, this is a complete guide to WCF from the SOA architecture perspective and shows why WCF is important to web service development.&lt;br /&gt;(este aun no lo lei,pero me parece muy interesante)&lt;br /&gt;&lt;br /&gt;En Portugues (Brasil)&lt;br /&gt;&lt;br /&gt;MSDN Webcast: Melhores práticas no uso do WCF&lt;br /&gt;https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=es-ar&amp;amp;eventid=1032409560&amp;amp;flag=3&lt;br /&gt;&lt;br /&gt;Webcast Arquitetura: Arquitetura Orientada a Serviços: WCF Boas práticas (do levantamento, construção e hospedagem&lt;br /&gt;https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=es-ar&amp;amp;eventid=1032415471&amp;amp;flag=3&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-7072007335596561690?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/7072007335596561690/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=7072007335596561690' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/7072007335596561690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/7072007335596561690'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/05/windows-communication-fundation.html' title='Windows Communication Fundation'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-7654729438400892437</id><published>2009-05-19T11:11:00.002-03:00</published><updated>2010-01-03T02:52:23.112-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='roles'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>¿Por qué es necesario un arquitecto de software?</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;“Architecture in an over used term and therefore doen’t mean anything anyway”&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;“Oh we don’t need training, we are Enterprise Architecture”,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;“Help I need to hire architects but cannot define the role”, HR manager&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;“Why should I hire architects?, No one has ever made the case to me ”, CEO&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;“Architects just vision jockeys right?, We need coders no talkers”, developer manager &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Estas frases fueron recolectadas de varias conferencias sobre arquitectura de software, encuestas y otros eventos de IT &lt;a href="http://iasahome.org/web/home/blogs"&gt;[Preiss Paul T, 2006, “Magician apprentice”] &lt;/a&gt;e indican en grado de confusión que existe respecto a la arquitectura de software, entonces como arquitectos es importante tener una buena respuesta a la siguiente pregunta:  &lt;/span&gt;&lt;span lang="ES-AR"&gt;¿Por qué es necesario un arquitecto de software?&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Los sistemas de información soportados por aplicaciones informáticas son cada vez más comunes y en muchos casos imprescindibles para el funcionamiento del negocio de la empresa. En estas últimas dos décadas la evolución de esos sistemas fue exponencial y además los procesos son más complejos y la tecnología permite hacer más cosas en forma más sencilla y más rápida. Este aspecto tiene el riesgo de crear grandes sistemas en forma relativamente simple y rápida sin tener el adecuado control en la calidad, el costo de esto es grande a la hora de mantener el sistema, de solucionar errores y fallas y de evolucionarlo para agregar nuevas funcionalidades.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Standish Group en su “&lt;a href="http://es.wikipedia.org/wiki/Stakeholders"&gt;&lt;i&gt;Chaos Report&lt;/i&gt;&lt;/a&gt;” describe un estudio realizado sobre mas de 175000 proyectos en donde los resultados no fueron nada alentadores. La siguiente tabla indica los valores promedios de sobre costo, exceso en tiempo y baja satisfacción de la funcionalidad del producto con los deseado.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div align="center"&gt;&lt;table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 212.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="284"&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;Parámetro (exceso sobre los estimado)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 75.8pt; BORDER-TOP-STYLE: solid; PADDING-TOP: 0in; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: solid" valign="top" width="101"&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="ES-AR"&gt;% promedio&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 212.75pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0in; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid" valign="top" width="284"&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Costo&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 75.8pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0in; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: solid" valign="top" width="101"&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;189%&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 212.75pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0in; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid" valign="top" width="284"&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Tiempo&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 75.8pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0in; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: solid" valign="top" width="101"&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;222%&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 212.75pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0in; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid" valign="top" width="284"&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Deficiencias en el producto final&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; WIDTH: 75.8pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0in; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: solid" valign="top" width="101"&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;60%&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div align="center"&gt; &lt;/div&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;De los proyectos relevados solo el 12% terminó en tiempo y dentro del presupuesto asignado.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;La investigación mencionada incluye el resultado de un encuesta entre algunos de los CIOs de esas empresas preguntando cuales serían los aspectos que se deberían mejorar para reducir estos indicadores en los proyectos. De esa encuesta surgió que los tres principales factores a mejorar fueron un mejor involucramiento del usuario, mejora en la administración del proyecto y tener requerimientos claros y bien documentados.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;En cambio&lt;span style="font-size:+0;"&gt; &lt;/span&gt;si consideraban que aspectos perjudicaban el éxito del proyecto se consideraron como prioritarios aspectos tales como malas de comunicación con el usuario, requisitos y especificaciones incompletas y cambios constantes en especificaciones y requerimientos.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;De este análisis se describe que es muy importante tener una buena planificación, documentación de requisitos y especificaciones y fluída comunicación con el usuario para tener éxito en el desarrollo del software. Los cambios en las especificaciones y requisitos son imposibles de detener pues muchas veces son causa de cambios en el contexto del negocio que las crearon, por eso una buena planificación y requisitos bien documentados mitigan este riesgo, además si se trabaja con un entorno de trabajo estable, bien documentado que resuelva las tareas rutinarias, de mayor complejidad y administradas por la menor cantidad de roles posibles se mitiga en gran medida los riesgos en todas las etapas del desarrollo del software.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Por este último aspecto es que se necesito un grupo de arquitectura, pues interviene en como un grupo staff en todo el ciclo de vida del desarrollo, definiendo estándares, buenas prácticas, ofreciendo soporte, &lt;a href="http://es.wikipedia.org/wiki/Coaching"&gt;&lt;i&gt;coaching&lt;/i&gt; &lt;/a&gt;al desarrollo y diseño, metodologías, &lt;a href="http://es.wikipedia.org/wiki/Framework"&gt;&lt;i&gt;frameworks&lt;/i&gt; &lt;/a&gt;(conceptúales y ejecutables): Participan también en definiciones o adopción de metodologías de desarrollo de administración de cambios que faciliten la tarea de los de más integrantes del equipo de desarrollo y de los &lt;/span&gt;&lt;a href="http://es.wikipedia.org/wiki/Stakeholders"&gt;&lt;i&gt;stakeholder &lt;/i&gt;&lt;/a&gt;&lt;span lang="ES-AR"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta content="Word.Document" name="ProgId"&gt;&lt;meta content="Microsoft Word 11" name="Generator"&gt;&lt;meta content="Microsoft Word 11" name="Originator"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List"&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p.MsoFootnoteText, li.MsoFootnoteText, div.MsoFootnoteText 	{mso-style-noshow:yes; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} span.MsoFootnoteReference 	{mso-style-noshow:yes; 	vertical-align:super;}  /* Page Definitions */  @page 	{mso-footnote-separator:url("file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_header.htm") fs; 	mso-footnote-continuation-separator:url("file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_header.htm") fcs; 	mso-endnote-separator:url("file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_header.htm") es; 	mso-endnote-continuation-separator:url("file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_header.htm") ecs;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Por lo tanto necesitamos arquitectos para afrontar la complejidad de los sistemas, para ofrecer agilidad en los negocios, para reducir los costos en IT, para mejorar la alineación del área de IT en los negocios etc .&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Como se habia mencionado las soluciones de software distribuidas sueles tener una alta complejidad, esa complejidad puede ser inherente a la tecnología y la especificación funcional del negocio o bien puede ser accidental. Muchos procesos de negocio presentados como complejos luego de una buen análisis se pueden simplificar, es importante recordar que &lt;strong&gt;los sistemas se basan en los procesos y no lo procesos a los sistemas&lt;/strong&gt;, por lo tanto dedicarle tiempo a optimizar los procesos de negocios a ejecutar es fundamental en la etapa de inicio pues la construcción de los sistemas se basarán en esos procesos. El arquitecto debe tener la habilidad necesaria para entender el proceso, el problema y crear un modelo que se ajuste al mismo.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;En cambio, la complejidad accidental está muy relacionado con las tecnologías y estilos de las arquitecturas elegidos. Una tarea muy importante que debe cumplir el arquitecto es la determinación de aspectos no funcionales de la arquitectura, tales como flexibilidad al cambio, mantenimiento, escalabilidad, reusabilidad, usabilidad, monitores, performance , seguridad etc. &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Cuando se tienen definidos estándares de calidad no funcionales y restricciones tecnológicas impuestas por políticas de la compañía muchas veces la arquitectura puede ser más compleja porque se debe alinear a las mismas.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;meta content="text/html; charset=utf-8" equiv="Content-Type"&gt;&lt;meta content="Word.Document" name="ProgId"&gt;&lt;meta content="Microsoft Word 11" name="Generator"&gt;&lt;meta content="Microsoft Word 11" name="Originator"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List"&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="ES-AR"&gt;Además tiene que considerar políticas tales como restricciones debido a estándares externos, como por ejemplo SOX , internos de negocios , regulaciones gubernamentales etc.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;El cumplimiento de estos conceptos permite reducir costos de IT, mejorar la satifacción del cliente interno  proveyendo para el primer caso mejores herramientas que faciliten las tareas del personal de la empresa dedicada a la operatoria diaria del negocio y áreas relacionadas. Estas mejoras también benefician a los clientes externos puer les permite disponer de mayor control en sus pedidos, despachos de los productos adquiridos.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span lang="ES-AR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-7654729438400892437?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/7654729438400892437/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=7654729438400892437' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/7654729438400892437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/7654729438400892437'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/05/por-que-es-necesario-un-arquitecto-de.html' title='¿Por qué es necesario un arquitecto de software?'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-8428204202144701177</id><published>2009-04-20T15:39:00.001-03:00</published><updated>2009-04-20T15:40:00.475-03:00</updated><title type='text'>Arquitectura de Software</title><content type='html'>Continuando con el tema, posteo este sitio de una empres de Argentina con mucha informacion referente&lt;br /&gt;&lt;br /&gt;http://www.epidataconsulting.com/tikiwiki/tiki-index.php?page=Arquitectura%20de%20Software&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-8428204202144701177?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/8428204202144701177/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=8428204202144701177' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/8428204202144701177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/8428204202144701177'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/04/arquitectura-de-software.html' title='Arquitectura de Software'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-2637556479014853677</id><published>2009-01-26T11:41:00.001-02:00</published><updated>2009-01-26T11:48:49.974-02:00</updated><title type='text'>Micaela, en su primeras vacaciones.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eoL1ClRee0U/SX2-wQPxIFI/AAAAAAAAABk/1txV8PupYDg/s1600-h/IMG_1027.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_eoL1ClRee0U/SX2-wQPxIFI/AAAAAAAAABk/1txV8PupYDg/s320/IMG_1027.JPG" alt="" id="BLOGGER_PHOTO_ID_5295598473061670994" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-2637556479014853677?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/2637556479014853677/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=2637556479014853677' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/2637556479014853677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/2637556479014853677'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2009/01/micaela-en-su-primeras-vacaciones.html' title='Micaela, en su primeras vacaciones.'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_eoL1ClRee0U/SX2-wQPxIFI/AAAAAAAAABk/1txV8PupYDg/s72-c/IMG_1027.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-3140874155911557502</id><published>2008-10-09T15:21:00.000-03:00</published><updated>2008-10-09T15:22:59.911-03:00</updated><title type='text'>Arquitectura de Software</title><content type='html'>Ultimamente se habla mucho de un nuevo rol en los profesionales de IT que es el de arquitecto. Uno por lo general asocia esa palabra con la de Arquitecto de contrucciones, pero el mundo IT esmuy diferente.&lt;br /&gt;Planteo algunas dudas&lt;br /&gt;&lt;br /&gt;1- ¿Qué es la Arquitectura de Software? Introducción, clasificación, historia, comparación con la arquitectura en contrucciones.&lt;br /&gt;2- ¿Cuál es el rol de un arquitecto de software clasificados según el tipo de industria, tamaño de la empresa, metodologías de desarrollo utilizadas y grado de madures en aplicación de estándares de desarrollo de software? &lt;br /&gt;3- ¿Cuál es la currícula a seguir para que un profesional de sistemas de información sea considerado un arquitecto de software?&lt;br /&gt;4- ¿Cuáles son los estándares aplicables a la arquitectura de software?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Continuare con post para tratar de responderlas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-3140874155911557502?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/3140874155911557502/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=3140874155911557502' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/3140874155911557502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/3140874155911557502'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2008/10/arquitectura-de-software.html' title='Arquitectura de Software'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-8507302667634019602</id><published>2008-10-09T15:16:00.001-03:00</published><updated>2008-10-09T15:17:40.207-03:00</updated><title type='text'>Micaela</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eoL1ClRee0U/SO5KqcgaKuI/AAAAAAAAAA8/kDwejoBdhRI/s1600-h/AK000014.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_eoL1ClRee0U/SO5KqcgaKuI/AAAAAAAAAA8/kDwejoBdhRI/s320/AK000014.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5255219908255034082" /&gt;&lt;/a&gt;&lt;br /&gt;Ahora con 18 meses, hiperconcentrada con un juego.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-8507302667634019602?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/8507302667634019602/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=8507302667634019602' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/8507302667634019602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/8507302667634019602'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2008/10/micaela.html' title='Micaela'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_eoL1ClRee0U/SO5KqcgaKuI/AAAAAAAAAA8/kDwejoBdhRI/s72-c/AK000014.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-2686859668284609143</id><published>2008-03-13T13:30:00.000-02:00</published><updated>2008-03-13T13:36:23.847-02:00</updated><title type='text'>Primer cumpleaños de Micaela</title><content type='html'>Las fotos lo dicen todo &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eoL1ClRee0U/R9lJYhwc8jI/AAAAAAAAAAk/OhaNsutyORM/s1600-h/IMG_0680.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eoL1ClRee0U/R9lJYhwc8jI/AAAAAAAAAAk/OhaNsutyORM/s320/IMG_0680.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5177249932366377522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eoL1ClRee0U/R9lJLRwc8iI/AAAAAAAAAAc/9Hs5lGOwAmE/s1600-h/IMG_0656.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eoL1ClRee0U/R9lJLRwc8iI/AAAAAAAAAAc/9Hs5lGOwAmE/s320/IMG_0656.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5177249704733110818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eoL1ClRee0U/R9lI9Bwc8hI/AAAAAAAAAAU/z9uFRHcuPuc/s1600-h/IMG_0670.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eoL1ClRee0U/R9lI9Bwc8hI/AAAAAAAAAAU/z9uFRHcuPuc/s320/IMG_0670.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5177249459919974930" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-2686859668284609143?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/2686859668284609143/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=2686859668284609143' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/2686859668284609143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/2686859668284609143'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2008/03/primer-cumpleaos-de-micaela.html' title='Primer cumpleaños de Micaela'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_eoL1ClRee0U/R9lJYhwc8jI/AAAAAAAAAAk/OhaNsutyORM/s72-c/IMG_0680.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-3399555048248563901</id><published>2007-12-08T10:24:00.001-03:00</published><updated>2007-12-08T10:24:44.512-03:00</updated><title type='text'>Ceferino</title><content type='html'>La otra historia o la verdadera historia?"&lt;br /&gt; &lt;br /&gt;  &lt;br /&gt; ¿Cómo llamamos esto? ¿Una cachetada más? ¿Otro atropello? ¿Otra maniobra macabra para justificar lo injustificable? Sí... es todo eso, más todo lo que podemos decir y testimoniar los pueblos originarios ante tanto avasallamiento, persecución y "evangelización". Asumo la total responsabilidad de lo que digo, y con toda la documentación en mano que da testimonio de lo expresado.&lt;br /&gt;&lt;br /&gt;Ceferino Namuncurá "santo". ¡No! Ceferino fue y es un fiel reflejo de la espiritualidad natural de nuestra pasión mapuche. Todo nuestro pueblo fue y es así, a pesar de que nos impongan y sigan marcándonos con la cruz y otros "santos sacramentos" de la Iglesia, que sabemos y sentimos es una vulgar u otra vulgar y nefasta muestra del gran poder que ejerce este organismo. Agreguemos aquí que si bien los pueblos originarios sufrimos esto, también lo sufren los humildes, obreros, campesinos, etcétera, si no, remontémonos sólo a 30 años atrás, cuando este poder bendecía las armas y a los criminales que mataban a nuestros hermanos, no sólo indios, sino a todo aquel que exigía respeto, derechos e igualdad y no se sometía a la injusticia, al saqueo o a la hipocresía de unos pocos poderosos... es decir, no ponía "la otra mejilla".&lt;br /&gt;&lt;br /&gt;Aquí sí rescato a Cristo como el primer revolucionario de la historia. ¡Oh casualidad!, a él también lo mataron, justamente porque luchaba y quería que todos fuéramos iguales y tuviéramos las mismas oportunidades. Pero claro, la Iglesia acomodó esto a su antojo y conveniencia, como siempre. Sí, existieron algunos curas -muy pocos- que se jugaron por sus ideales y su gente. ¡Pobre Cristo! ¡Cuántas veces lo crucifican sus mismos "fieles seguidores"!&lt;br /&gt;&lt;br /&gt;Con Ceferino pasó algo igual; nació y heredó el poder espiritual de los Namun-Cura, su destino dentro de nuestro pueblo era el de machi, por eso esa aparente mansedumbre. Poseía la capacidad de reorganizar nuestro pueblo, podía curarnos de las heridas internas que nos habían dejado los valientes conquistadores, llámense Colón, Roca u otros. Por estas cualidades de seguro lo captó la Iglesia; valiéndose de los eternos "espejitos de colores" logró arrancarlo de su comunidad e incorporarlo a su "grey". Por supuesto; la sangre derramada y la fuerza ancestral que fluía en él no lo abandonaron. Sí, sufrió, padeció el cruel desarraigo, tan lejos de todo lo amado, de su tierra, que para el indio es su cuna y su tumba. Lejos de esto, que era su esencia, se enfermó; su mente se enfermó y, por lo tanto, su cuerpo. Solo, lejos, enfermo, fue confinado a morir abandonado en una habitación. ¡Ah! Eso sí, ¡en la casa de Dios! Sí se cuidó que nadie se acercara a él, no fuera que se contagiaran de tuberculosis algunos de esta "casta privilegiada".&lt;br /&gt;&lt;br /&gt;¡Santo! ¿De qué estamos hablando? ¡De Ceferino Namuncurá, noble señor de las pampas, hijo de un noble e integrante de un pueblo valiente e indómito nunca vencido! Tal vez le cortaron las ramas, le talaron el tronco, pero ¡jamás le arrancaron las raíces! ¡Somos un pueblo-nación libre, con ideales nobles y una espiritualidad que nos hace distintos y respetables!&lt;br /&gt;&lt;br /&gt;Se debe respetar el don maravilloso que poseemos de tener el color de la tierra, la fuerza del viento, el calor del sol. Se debe respetar nuestra rica cultura; respetarla, no robarla o quitarla. ¡No queremos que nos sigan imponiendo una cultura ajena, pobre y materialista! Somos de la orgullosa estirpe mapuche, Ceferino es de esta estirpe, tiene aún un camino que nos marcará llegado el momento, el cual seguiremos. Será cuando haga surgir desde el fondo mismo de la tierra una roja daga que surcará el espacio hasta llegar a los mal paridos protagonistas de esta nefasta historia de imposición y saqueo. Dejará nuestro espíritu sereno y puro de todo interés monopólico que atente contra nuestro pueblo y nuestro espíritu.&lt;br /&gt;&lt;br /&gt;No olviden ni pasen por alto esto: estamos de pie, no nos vencieron. Tenemos intacta nuestra capacidad de organización. Ceferino es el baluarte de la verdadera emancipación americana. Ésta es la voz de mi pueblo-nación mapuche. Quedará seguro en el camino tanta hipocresía, tanta soberbia; quedarán en el camino los mal paridos, reflejos fieles de las imposiciones y nefastas "marcas". No queremos ni creemos en los "espejitos de colores". ¡Tal vez ustedes lleguen a necesitarlos, guárdenlos por si acaso!&lt;br /&gt;&lt;br /&gt;Telésfora Pichilef, DNI 4.270.366 - Maquinchao&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-3399555048248563901?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/3399555048248563901/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=3399555048248563901' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/3399555048248563901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/3399555048248563901'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2007/12/ceferino.html' title='Ceferino'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-9098828603194773480</id><published>2007-12-05T11:17:00.000-03:00</published><updated>2007-12-05T11:19:29.522-03:00</updated><title type='text'>Por suerte no le hizo caso</title><content type='html'>Señor rey Juan Carlos de Borbón:&lt;br /&gt;&lt;br /&gt;Quiero recordarle, señor rey de España, que aquí en estas tierras llamadas las Indias Occidentales por los primeros invasores, hubo hace poco una espantosa, cruel y fierísima guerra contra ustedes y precisamente para desconocer su corona, su voz, su mandato. Fue una guerra reciente y aún estamos pagando sus horribles consecuencias. De modo que no pensábamos más, en estas tierras, tener que darle cuentas a usted de nada de lo que hacemos en estas regiones. No tenemos aquí reyes en América, y nuestro Libertador Simón Bolívar despreció en todo momento ese título, además de desconceptuar y echar al desprecio a quienes quisieron convertirlo en monarca.&lt;br /&gt;&lt;br /&gt;Somos libres, republicanos y socialistas, señor rey, y el único soberano entre nosotros es el pueblo. En verdad que hemos venido luchando desde hace siglos para no tener nunca más entre nosotros una voz despótica y agresiva como la que usted usó en la última Cumbre Iberoamericana, en Chile. Usted, además de no ser verdaderamente miembro de esta comunidad, por no ser elegido por pueblo alguno, debe también recordar que aquí ya no existen vasallos suyos. Yo, señor rey, provengo de aquellos que indios y negros que sufrieron los destrozos de los demonios voraces que aquí enviaban sus ascendientes. Y aún viven en mí, sus ayes, sus dolores, sus temblores de ira y el deseo de vengar tantas atroces matanzas y afrentas. Usted, señor rey debe recordar esto en cada instante, a aquellos demonios a los que se les abrió un apetito de muerte sin límite ni medida, y acabaron con nuestros indígenas y llenaron de pestes, odios, maldades y esclavitud por más de 300 años estas tierras. Señor, ¡qué categoría de fieras aquéllas!, ¡qué joyas de tan elevados pedigrí!, que en pocos años había suficiente crímenes y desastres entre nosotros como para dejar pálidos a cuantos cometieron juntos Atila, Caligula, Nerón, Hitler o Franco.&lt;br /&gt;&lt;br /&gt;No tenía usted por qué estar allí, entre nosotros en esa Cumbre, quienes sufrimos el holocausto de las monstruosas acciones de sus tatarabuelos. Entienda señor rey que nada aportaron ustedes a la causa humanitaria de nuestros pueblos. Nos dejaron durante siglos sin educación, sin justicia, sin instituciones, sin disciplina, sin sentido de hermandad ni valores humanos de ningún tipo. Lo que quedó aquí fue un grito horrible que usted ha revivido en Chile y que nos llega hasta más allá de los tuétanos: “¡A callar, a callar, a callar!”&lt;br /&gt;&lt;br /&gt;¡Ay, rey, que poco sabes del dolor que hay en nosotros! Un dolor que cubre todo el tiempo de la humanidad. Señor rey, usted se ha expresado como lo que es y han sido todos tus parientes. Sólo le voy a poner aquí, digno monarca de sus antepasados, unas palabras de Bolívar para que las enmarques y las lea todos los días, y para que también se las envíe a su querido José María Aznar: “Un continente separado de la España por mares inmensos, más poblado y más rico que ella, sometido tres siglos a una dependencia degradante y tiránica… Tres siglos gimió la América bajo esta tiranía, la más dura que ha afligido a la especie humana… El español feroz, vomitado sobre las costas de Colombia, para convertir la porción más bella de la naturaleza en un vasto y odioso imperio de crueldad y rapiña… Señaló su entrada en este el Nuevo Mundo con la muerte y la desolación: hizo desaparecer de la tierra su casta primitiva; y cuando su saña rabiosa no halló más seres que destruir, se volvió contra los propios hijos que tenía en el suelo que había usurpado.”&lt;br /&gt;&lt;br /&gt;Un hombre, señor rey, que escriba así, es porque lleva sangre india y negra en sus venas.&lt;br /&gt;&lt;br /&gt;El indio Bolívar, en negro Bolívar, el mulato Bolívar, ese es el que cada venezolano lleva hoy en su sangre, en sus nervios, en su corazón.&lt;br /&gt;&lt;br /&gt;Larga paciencia hemos aguardado esperando este momento de hoy en el que somos libres, y gracias a Dios no tenemos que entregarle cuenta a ningún soberano extranjero, y España nos importa menos que un comino. Allá ustedes que siguen sometidos a vírgenes de siete puñales, a los toros, al fútbol, a los cantantes espantosamente sifrinos y a los cotilleos de las revistas del corazón. Que les aproveche, pero aquí nunca nadie jamás callará, señor rey.&lt;br /&gt;&lt;br /&gt;Ya debe saber, pues, señor rey, por qué no me callo ni nadie podrá callarnos, que hemos venido a decir nuestras verdades que son las mismas que Bolívar proclamara hace unos ciento noventa años. Que esa misma imprecación suya fue la que se impuso el día del golpe del 2002, cuando todos los medios poderosos (que también son suyos) que le aman y le veneran con pasión pesetera, pretendieron acallar la voz del pueblo. Ya aquí no hay Cristo que nos pueda hacer callar.&lt;br /&gt;&lt;br /&gt;Aquí, señor rey, a lo único que veneramos es la libertad del pueblo. No obedecemos a aristocracia alguna sino al talento creador, al amor y a la igualdad. Si no se excusa ni pide perdón a la ofensa hecha a la majestad de lo que el pueblo en tres elecciones ha ratificado, habrá usted sencillamente hecho honor a la soberbia que tanto caracteriza a los monarcas que cada cincuenta años sumergen a España en horribles guerras fraticidas. Ya hemos dicho lo en este caso teníamos que decir.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sin otro particular,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hugo Chávez Frías&lt;br /&gt;&lt;br /&gt;Presidente de la República Bolivariana de Venezuela&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-9098828603194773480?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/9098828603194773480/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=9098828603194773480' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/9098828603194773480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/9098828603194773480'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2007/12/por-suerte-no-le-hizo-caso.html' title='Por suerte no le hizo caso'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-5300848029775260020</id><published>2007-11-16T22:04:00.000-03:00</published><updated>2007-11-16T22:06:41.875-03:00</updated><title type='text'>Informatica y la calidad de atencion medica (una breve reflexion)</title><content type='html'>En las últimas décadas hubo un proceso de transformación en varios países de América Latina y España tendientes a la búsqueda de un acercamiento a las necesidades de salud de la población, con la creciente búsqueda de la equidad en la atención en los servicios médicos.&lt;br /&gt;La atención primaria de salud se convirtió para la OMS en un concepto fundamental a raíz de la Declaración de Alma-Ata de 1978, en que se adoptó la meta de la salud para todos, sobre todo a las poblaciones menos favorecidas (OPS, 1978).&lt;br /&gt;En los sistemas de salud tanto públicos como privados existen procesos de manipulación de información necesarios para el funcionamiento de los mismos, estos sistemas incluyen entre otros la administración de turnos, de historias clínicas, de inventario de farmacia, manejo de resultados de laboratorios (Sigulem, 1997). Según estimaciones el procesamiento de la información ocupa aproximadamente un 25% de las actividades de los profesionales de la salud .&lt;br /&gt;Por lo tanto es importante que estos sistemas se manejen con eficiencia y eficacia para garantizar la accesibilidad y equidad en los servicios prestados.&lt;br /&gt;La mejora de los mismos podría ayudar a aumentar la calidad de atención médica y la satisfacción de los usuarios internos y externos.&lt;br /&gt;La informática médica permite manipular datos y de estos datos se puede obtener información, esa información proporciona una ayuda al profesional médico para reducir la incertidumbre frente a los problemas del paciente , y ayuda a la toma de decisiones.&lt;br /&gt;Dado que esta información está vinculada a seres humanos la manipulación de la misma debe seguir ciertas normas de ética  aplicables tanto a los profesionales de la salud como de la informática médica (IMIA).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-5300848029775260020?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/5300848029775260020/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=5300848029775260020' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/5300848029775260020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/5300848029775260020'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2007/11/informatica-y-la-calidad-de-atencion.html' title='Informatica y la calidad de atencion medica (una breve reflexion)'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-8170309776142579203</id><published>2007-11-16T22:00:00.001-03:00</published><updated>2009-06-11T11:31:56.201-03:00</updated><title type='text'>Micaela, ahora con 8 meses de vida</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eoL1ClRee0U/Rz49fpTENbI/AAAAAAAAAAM/2YPkfq38UyU/s1600-h/IMG_0284.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5133608239120004530" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_eoL1ClRee0U/Rz49fpTENbI/AAAAAAAAAAM/2YPkfq38UyU/s320/IMG_0284.JPG" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-8170309776142579203?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/8170309776142579203/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=8170309776142579203' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/8170309776142579203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/8170309776142579203'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2007/11/micaela-ahora-con-8-meses-de-vida.html' title='Micaela, ahora con 8 meses de vida'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_eoL1ClRee0U/Rz49fpTENbI/AAAAAAAAAAM/2YPkfq38UyU/s72-c/IMG_0284.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-117250704364849801</id><published>2007-02-26T13:22:00.000-03:00</published><updated>2007-02-26T13:25:06.220-03:00</updated><title type='text'>Nuestra princecita</title><content type='html'>El martes 20 de febrero nacio Micaela Belen, nuestra primera hija.&lt;br /&gt;Nacio con 3,150 kg y tanto ella como la madre estan bien de salud.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-117250704364849801?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/117250704364849801/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=117250704364849801' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/117250704364849801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/117250704364849801'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2007/02/nuestra-princecita.html' title='Nuestra princecita'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-115522223533730715</id><published>2006-08-10T11:58:00.000-03:00</published><updated>2006-08-10T12:04:46.893-03:00</updated><title type='text'>Atencion primaria de la salud</title><content type='html'>&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="" lang="ES-AR"&gt;En la ultimas decadas hubo un proceso de transformación en varios paises de América Latina y España tendientes a la búsqueda de un acercamiento a la necesidades y de demás de la población, con la creciente búsqueda de la equidad en la atención en los servicios médicos.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;font&gt;La Conferencia Internacional sobre Atención Primaria de Salud, realizada en  1978 en Alma Ata (Kazajstán), en la antigua URSS, supuso un potencial avance  mundial en los derechos sobre la salud.&lt;br /&gt;&lt;br /&gt;La pueden leer en castellano en&lt;br /&gt;&lt;br /&gt;http://www.femeba.org.ar/fundacion/quienessomos/Novedades/declaracionalmaata.pdf&lt;br /&gt;&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/23292882-115522223533730715?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/115522223533730715/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=115522223533730715' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/115522223533730715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/115522223533730715'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2006/08/atencion-primaria-de-la-salud.html' title='Atencion primaria de la salud'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-115522176782279928</id><published>2006-08-10T11:41:00.000-03:00</published><updated>2006-08-10T11:57:27.260-03:00</updated><title type='text'>Informatica medica</title><content type='html'>La informatica medica IM es una rama d ela informatica encargada de la maniupulacion, almacenamiento, comunicacion de informacion referente a la salud , datos biologicos, historias clinicas, señales e imagenes biologicas etc. En el sistema publico de salud tiene como principal finalidad mejorar la accesibilidad de los servicios de salud.&lt;br /&gt;&lt;br /&gt;Existen varias asociaciones que se dedican a difundir, normalizar y promocionar esta rama de la informatica&lt;br /&gt;En Argenitna tenemos ente otras al Grupo de Bioingenieria de Buenos Aires www.gibba.org.ar y la Asociacion Argentina de Informatica Médica www.aaim.org.ar.&lt;br /&gt;&lt;br /&gt;En España existe la Sociedad Española de Informatica en Salud www.seis.es.&lt;br /&gt;&lt;br /&gt;De mis incipientes investigaciones el pais latinoamericano  que mas invierte , desarrolla y promueve la IM es Brasil, instituciones como la Escolha Paulista de Medicina www.epm.br desarrollaron interesantes trabajos al respecto.&lt;br /&gt;Desde lso profesionales y asociaciones apoyada por el  gobierno (por suerte se continuo luego de varios cambios) se trabaja son Sistema  Unicao de Salud SUS que intenta mejorar la calidad de atencion medica en el extenso territorio de Brasil tratando de llegar a sus mas de 180 millones de habitantes, ardua tarea.&lt;br /&gt;&lt;br /&gt;Algo que aun no existe en Argentina, la informacion gubernamental referente a indicadores de salud, demograficos, economicos etc son de libre acceso (el INDEC Argenitno solo publica indicadores globales, los demas hay que pagarlo).&lt;br /&gt;&lt;br /&gt;Solo miren www.datasus.gov.br para verificar lo que digo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-115522176782279928?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/115522176782279928/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=115522176782279928' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/115522176782279928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/115522176782279928'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2006/08/informatica-medica.html' title='Informatica medica'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23292882.post-114131363397477328</id><published>2006-03-02T12:20:00.001-03:00</published><updated>2009-06-11T11:44:59.299-03:00</updated><title type='text'>Viaje por el NOA Argentino</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/7752/2381/1600/Anfiteatro2.1.jpg"&gt;&lt;img style="margin: 0px 10px 10px 0px; float: left;" alt="" src="http://photos1.blogger.com/blogger/7752/2381/200/Anfiteatro2.1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Les comparto algunas fotos de nuestra luna de miel en el NOA Argentino Es muy recomendable para aquellos que les gusta la natuleza y conocer la historia de nuestra argentina.&lt;br /&gt;&lt;br /&gt;Anfiteatro de Cafayate al sur de Salta.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/7752/2381/1600/Quebrada2.jpg"&gt;&lt;img style="margin: 0px 10px 10px 0px; float: left;" alt="" src="http://photos1.blogger.com/blogger/7752/2381/200/Quebrada2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Petroglifos camino a las cascadas en Cafayate.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://photos1.blogger.com/blogger/7752/2381/1600/Cascada.jpg"&gt;&lt;img style="margin: 0px 10px 10px 0px; float: left;" alt="" src="http://photos1.blogger.com/blogger/7752/2381/320/Cascada.jpg" border="0" /&gt;&lt;/a&gt;Saliendo de la ciudad de Cafayate se accede luego de 10 Km de recorrido a la zona de viñedos y bodegas, desde allí con la ayuda de guias locales se sube a pie a través de los cerros hasta llegar a las cascadas. La de la foto es la primera y se llega luego de mas de 2 hs de caminata, los paisajes que se ven durante el trayectos son espectaculares, es una excursión recomendada para todo aquel que visite esta ciudad del sur de Salta.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7752/2381/1600/c2d0.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/7752/2381/320/c2d0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Cuesta de Lipan - Viajando por encima de las nuebes&lt;br /&gt;&lt;/p&gt;   &lt;p&gt;Desde San Antonio de los Cobres (Salta) viajado hacia el Norte se recorre un camino de tierra en una zona muy arrida. A una hora de viaje esta en limite en entre Salta y Jujuy, de alli ya se ven las maravillosas Salinas Grandes, estas forman una&lt;br /&gt;planicie de Sal de varias miles de hectareas.&lt;br /&gt;Por alli cruza una ruta que hacia el Oeste se puede cruzar por el paso de Jama a Chile y por el este se ingresa luego de varios kilometros a la maravillosa Cuesta de Lipan (en honor el pueblo que está el final de la misma).&lt;br /&gt;Esta cuesta es un camino serpenteante que en su punto maximo llega a los 4170m snm. Aqui estamos en el punto mas alto literalemtne sobre las nubes (es paisaje es increíble).&lt;br /&gt;Luego de Lipan se puede llegar a Purmamarca (es un camino muchos mas largo que llendo desde San Salavador e Jujuy, pero para los amantes de los paisajes y los cerros es lo ideal).&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7752/2381/1600/1d3d.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/7752/2381/320/1d3d.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Purmamarca - El pueblo del cerro de los 7 colores.&lt;/p&gt; &lt;p&gt;Desde San Salvador de Jujuy , camino a Humahuaca se accede a este maravillo puble insertado entre los cerros que entre otras cosas tiene este hermosos cerro de 7 colores.&lt;/p&gt;&lt;p&gt;Es ideal para tomarlo como punto de hospedaje y de allí hacer excusiones hacia las Salinas Grandes, Tilcara, Humahuaca (y de alli a Iruya).&lt;/p&gt;&lt;p&gt;Es el paraiso de la gente que le gusta la tranquilidad y la naturaleza, tambien de los hippies y aventureros de todo el mundo.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;a href="http://photos1.blogger.com/blogger/7752/2381/1600/7Colores.jpg"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23292882-114131363397477328?l=ssalanitri.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ssalanitri.blogspot.com/feeds/114131363397477328/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23292882&amp;postID=114131363397477328' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/114131363397477328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23292882/posts/default/114131363397477328'/><link rel='alternate' type='text/html' href='http://ssalanitri.blogspot.com/2006/03/viaje-por-el-noa-argentino.html' title='Viaje por el NOA Argentino'/><author><name>Sergio Salanitri</name><uri>http://www.blogger.com/profile/16466496316645350626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_eoL1ClRee0U/SuREjhuB1nI/AAAAAAAAAFM/lvDjy7mNn9k/S220/Sergio_Salanitri_bigger.jpg'/></author><thr:total>4</thr:total></entry></feed>
