<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-6151587310732787467</atom:id><lastBuildDate>Wed, 11 Nov 2009 00:25:18 +0000</lastBuildDate><title>InforMateando...</title><description>Ideas y pensamientos informáticos, con la compañía del bendito y nunca bien ponderado MATE!</description><link>http://gsuhit.blogspot.com/</link><managingEditor>gsuhit@gmail.com (Gustavo Suhit)</managingEditor><generator>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Informateando" type="application/rss+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">Informateando</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-4865774150692179843</guid><pubDate>Sun, 18 Oct 2009 15:00:00 +0000</pubDate><atom:updated>2009-10-18T12:00:01.449-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Desarrollo</category><category domain="http://www.blogger.com/atom/ns#">Informática</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Sharepoint</category><title>Download en Sharepoint</title><description>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_HqYM3PA8MJk/StrkzpQJe7I/AAAAAAAAEw8/WBO2qWKfkbo/s1600-h/DownloadMOSS%5B3%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="DownloadMOSS" border="0" alt="DownloadMOSS" align="left" src="http://lh4.ggpht.com/_HqYM3PA8MJk/Strk0c2kaiI/AAAAAAAAExA/x0e6OTWro6U/DownloadMOSS_thumb%5B1%5D.gif?imgmax=800" width="160" height="160" /&gt;&lt;/a&gt; Hace un tiempo escribí un &lt;a href="http://gsuhit.blogspot.com/2009/04/sharepoint-usando-sus-web-services.html"&gt;artículo&lt;/a&gt; introductorio acerca de Sharepoint. Mas específicamente sobre los web services de MOSS.&lt;/p&gt;  &lt;p&gt;Para complementar este artículo, ahora entrego una rutina de descarga de documentos desde Sharepoint, sin usar sus web services, dado que en ciertas ocasiones se producen errores en las descargas, debido a fallas de configuración, diferencias configuración y de permisos (especialmente cuando se hacen entregas en desarrollo, QA y Producción), etc.&lt;/p&gt;  &lt;p&gt;Los tiempos de descarga incluso son algo mejores, y la seguridad de acceso está garantizada debido a las credenciales presentadas.&lt;/p&gt;  &lt;p&gt;Espero les sirva.&lt;/p&gt;&lt;span class="fullpost"&gt;  &lt;h4&gt;Download vía WS de MOSS&lt;/h4&gt;  &lt;p&gt;No desarrollaré este tema, dado que ya lo hice en el &lt;a href="http://gsuhit.blogspot.com/2009/04/sharepoint-usando-sus-web-services.html"&gt;artículo anterior&lt;/a&gt;, y allí pueden encontrar el detalle.&lt;/p&gt;  &lt;p&gt;Solo decir, que en mi caso, algunas veces tuve problemas, pero no con la versión actual del documento sino con la descarga de las versiones anteriores de los mismos. Por ese motivo, utilicé la segunda opción, que detallo ahora.&lt;/p&gt;  &lt;h4&gt;Nueva Forma de Download&lt;/h4&gt;  &lt;p&gt;Una forma fácil y rápida de download, pero no solo de download desde Sharepoint sino desde cualquier sitio web, es utilizando algo por estilo:&lt;/p&gt;  &lt;p&gt;&lt;font color="#800000" size="2" face="Courier New"&gt;public int BajarDocumento(String url, out byte[] arreglo)     &lt;br /&gt;{&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#800000" size="2" face="Courier New"&gt;&amp;#160;&amp;#160; try {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WebClient request = new WebClient();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; request.Credentials = _Credential;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; byte[] newFileData = request.DownloadData(url);&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; arreglo = newFileData;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (newFileData != null &amp;amp;&amp;amp; newFileData.Length &amp;gt; 0)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return RET_SUCCEFUL;&lt;img align="right" src="http://i36.tinypic.com/k35gmf.jpg" /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return RET_ERR_UNKNOWN;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#800000" size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; } catch (Exception ex) {&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#800000" size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; log.error(ex);&amp;#160; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#800000" size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#800000" size="2" face="Courier New"&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;En &lt;font color="#800000" size="2" face="Courier New"&gt;_Credential&lt;/font&gt;, se debe definir las credenciales de autenticación al sitio, de la forma:&lt;/p&gt;  &lt;p&gt;&lt;font color="#800000" size="2" face="Courier New"&gt;_Credential = new NetworkCredential(_User, _Psw, _Domain);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;De esta forma, se consigue descargar un documento, de cualquier tipo, y dar la posibilidad de descarga o visualización.&lt;/p&gt;  &lt;p align="right"&gt;&lt;font color="#008000" size="2"&gt;&lt;strong&gt;&lt;em&gt;So far, So good!&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-4865774150692179843?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/anaW9m5qrpBWLncwkN8KZDNUBCE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/anaW9m5qrpBWLncwkN8KZDNUBCE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/anaW9m5qrpBWLncwkN8KZDNUBCE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/anaW9m5qrpBWLncwkN8KZDNUBCE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2009/10/download-en-sharepoint.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-217141234381483313</guid><pubDate>Mon, 27 Jul 2009 16:00:00 +0000</pubDate><atom:updated>2009-07-27T13:35:39.036-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Reporting Services</category><category domain="http://www.blogger.com/atom/ns#">Desarrollo</category><category domain="http://www.blogger.com/atom/ns#">Informática</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><title>Microsoft Reporting Services (MRS) – Parte I</title><description>&lt;p&gt;&lt;img style="MARGIN: 0px 5px 0px 0px; DISPLAY: inline" align="left" src="http://farm3.static.flickr.com/2431/3641499247_504f6680ae_o.jpg" /&gt; Comenzaré en este artículo, con una serie dedicada a ésta herramienta sumamente potente de Microsoft&lt;/p&gt;&lt;p&gt;MRS es un servidor de reportes, habilitados a través de una URL, y que pueden ser accedidos de diferentes formas.&lt;/p&gt;&lt;p&gt;El producto forma parte de las herramientas adicionales que vienen incluidas con la base de datos de Microsoft, SQL Server. En la versión 2005, se agregaron varias mejoras sustanciales, y en la 2008, varias mas. De todas formas, me centraré en la mayor cantidad de características incluidas en todas las versiones. &lt;/p&gt;&lt;p&gt;Algunas de las características mas importantes que puedo mencionar para comenzar son:&lt;/p&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="85%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="10%" align="middle"&gt;&lt;img style="DISPLAY: inline" src="http://i36.tinypic.com/bdqzqb.jpg" /&gt;&lt;/td&gt;&lt;td valign="top" width="90%"&gt;Fácil de instalar &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="10%" align="middle"&gt;&lt;img style="DISPLAY: inline" src="http://i36.tinypic.com/bdqzqb.jpg" /&gt;&lt;/td&gt;&lt;td valign="top" width="90%"&gt;Fácil de configurar&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="10%" align="middle"&gt;&lt;img style="DISPLAY: inline" src="http://i36.tinypic.com/bdqzqb.jpg" /&gt;&lt;/td&gt;&lt;td valign="top" width="90%"&gt;Potente en la generación de reportes de varios tipos&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="10%" align="middle"&gt;&lt;img style="DISPLAY: inline" src="http://i36.tinypic.com/bdqzqb.jpg" /&gt;&lt;/td&gt;&lt;td valign="top" width="90%"&gt;Seguro en la conexión a la base de datos&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="10%" align="middle"&gt;&lt;img style="DISPLAY: inline" src="http://i36.tinypic.com/bdqzqb.jpg" /&gt;&lt;/td&gt;&lt;td valign="top" width="90%"&gt;Fácil de integrar a las aplicaciones&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;img align="right" src="http://i44.tinypic.com/2sbsfnn.jpg" /&gt;A través de los diversos artículos cubriré diferentes aspectos del tema, algunos que parecen triviales, pero a la hora de hacerlos, es mejor contar con ayuda. &lt;/p&gt;&lt;p&gt;Go Ahead…&lt;/p&gt;&lt;span class="fullpost"&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:100%;color:#008000;"&gt;Requerimientos&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Los requerimientos básicos son:&lt;/p&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="98%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="98%"  &gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Hardware&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="98%"&gt;&lt;ul&gt;&lt;li&gt;Procesador Pentium II o compatible de 500 MHz o superior &lt;img style="DISPLAY: inline; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px" align="right" src="http://i44.tinypic.com/2b1yep.jpg" /&gt; &lt;/li&gt;&lt;li&gt;Memoria 256 MB de RAM o superior &lt;/li&gt;&lt;li&gt;Disco duro 325 MB disponibles para la instalación completa &lt;ul&gt;&lt;li&gt;50 MB disponible para el Report Server &lt;/li&gt;&lt;li&gt;30 MB disponible para el Report Designer &lt;/li&gt;&lt;li&gt;100 MB disponible para el Framework 1.1 o 2.0 &lt;/li&gt;&lt;li&gt;145 MB disponible para los ejemplos y Books Online. &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="98%" &gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Software&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="100%"&gt;&lt;ul&gt;&lt;li&gt;&lt;img style="DISPLAY: inline; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px" align="right" src="http://i42.tinypic.com/fcjmua.jpg" width="120" height="92" /&gt; Sistema Operativo: &lt;ul&gt;&lt;li&gt;Windows Server 2003, Standard, Enterprise, Datacenter Editions. &lt;/li&gt;&lt;li&gt;Windows 2000 Server, Advanced o Datacenter con SP4 o superior. &lt;/li&gt;&lt;li&gt;Windows XP Professional con SP1 o superior &lt;/li&gt;&lt;li&gt;Windows 2000 Professional con SP4 o superior &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Base de Datos: &lt;ul&gt;&lt;li&gt;SQL Server 2000 Standard, Enterprise o Developer Editions con SP3 o superior &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Adicionales: &lt;ul&gt;&lt;li&gt;Se requiere una conexión local o remota a un servidor de base de datos Microsoft SQL Server 2000 con Service Pack 3, para almacenar los componentes del Report Server Manager y las definiciones de los reportes. Se recomienda usar la edición de Reporting Services que corresponda con la edición de SQL Server 2000 instalada. &lt;/li&gt;&lt;li&gt;La base de datos fuente puede ser MSDE, pero el Report Server Database no se puede instalar en esta edición. &lt;/li&gt;&lt;li&gt;La instalación de Microsoft .NET Framework es requerida. &lt;/li&gt;&lt;li&gt;Internet Explorer 6.0 o superior es requerido para el acceso al Report Manager desde los computadores cliente. &lt;/li&gt;&lt;li&gt;Internet Information Services 5.0 o superior. &lt;/li&gt;&lt;li&gt;Microsoft Visual Studio® .NET 2003/2005/2008 no es requerido, pero es la mejor opción para el diseño de reportes, utilizando el Report Designer. Se puede utilizar la Edición Standard de estas herramientas Microsoft .NET: VB, C#, C++ o J#. De todas formas, si se selecciona en el instalador de Reporting Services el Developer Studio, se instala el Visual Studio solo con los elementos de construcción de reportes. Si se tiene instalado el &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:100%;color:#008000;"&gt;Presentación de MRS y algo mas…&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;La instalación se realiza desde el mismo instalador que SQL Server, y se seleccionan ciertos parámetros necesarios. &lt;/p&gt;&lt;p&gt;No me extenderé en este (ni en otros temas) dado que los derivaré al blog de Fran Díaz, donde comienza su seguidilla de artículos acerca de Reporting Services con una &lt;a href="http://geeks.ms/blogs/fdiaz/archive/2006/08/29/Presentando-a-Reporting-Services.aspx"&gt;presentación del producto&lt;/a&gt;. Desde allí, podrán encontrar varios puntos importantes relacionados con MRS que están muy claramente explicados. &lt;/p&gt;&lt;p&gt;Solo agregaré algunos trucos que me toco desarrollar en mis proyectos, y&lt;img align="right" src="http://i41.tinypic.com/307lugh.jpg" width="112" height="167" /&gt; algunos detalles que no están relacionados directamente con el producto, pero que afectan al proyecto en última instancia.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:100%;color:#008000;"&gt;Comenzamos&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Para poder desarrollar un reporte en MRS, se debe instalar como dije antes, las herramientas necesarias. Cuando se instala MRS en nuestra máquina, aparece un ambiente similar al de VS2005, si es que no lo teníamos instalado desde antes. Si lo teníamos, lo que hace el instalador, es agregar los templates necesarios para crear Proyectos de Reportes.&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;u&gt;Nota Importante&lt;/u&gt;&lt;/strong&gt;: Puede pasar que cuando tenemos instalado el VS2005, e instalamos VS2005, se eliminen desde la carpeta correspondiente, los templates de VS2005. Esto ocasiona que cuando abrimos el VS2005, y pedimos crear un nuevo proyecto, solo se muestre el template de reportes. Un forma fácil de corregir el problema, sin tener que reinstalar VS2005, es copiar los templates desde la carpeta global a los de nuestro perfil, de tal forma que vuelvan a aparecer. Eso se logra copiando desde la carpeta &lt;span style="font-family:Courier New;color:#800000;"&gt;&lt;strong&gt;C:\Archivos de programa\Microsoft Visual Studio 8\Common7\IDE&lt;/strong&gt;&lt;/span&gt; a la carpeta &lt;strong&gt;&lt;span style="font-family:Courier New;color:#800000;"&gt;C:\Documents and Settings\&amp;lt;usuario&amp;gt;\Mis documentos\Visual Studio 2005\Templates&lt;/span&gt;&lt;/strong&gt;, las carpetas &lt;strong&gt;&lt;span style="font-family:Courier New;color:#800000;"&gt;ItemTemplates&lt;/span&gt;&lt;/strong&gt; y &lt;strong&gt;&lt;span style="font-family:Courier New;color:#800000;"&gt;ProjectTemplates&lt;/span&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Lo primero es crear un proyecto del tipo de reportes. &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_HqYM3PA8MJk/Sm3AtoIyS3I/AAAAAAAAEo8/7-IL6jvYlJo/s1600-h/Templates%5B3%5D.jpg"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title="Templates" border="0" alt="Templates" src="http://lh6.ggpht.com/_HqYM3PA8MJk/Sm3AubUHD1I/AAAAAAAAEpA/BPq3_GbCC5o/Templates_thumb%5B1%5D.jpg?imgmax=800" width="279" height="132" /&gt;&lt;/a&gt;Luego, se pueden definir DataSources o Reportes. &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;DataSources&lt;/strong&gt;: son conexiones a bases de datos, con sus correspondientes credenciales. Estos DataSources son los utilizados por los reportes para conseguir los datos. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Reportes&lt;/strong&gt;: Archivos .rdl, donde se dibuja el reporte y se definen comportamientos específicos a cada lógica de negocios.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;La gran ventaja de los DataSources, es que se definen una única vez, y estos son mantenidos por un administrados de bases de datos, y los desarrolladores solo hacen referencia a estos DataSources desde sus reportes, olvidándose en tiempos de ejecución de enviar las credenciales de conexión a la base de datos. &lt;/p&gt;&lt;p&gt;Al seleccionar el Asistente, éste nos guía para rápidamente genera reportes con diferentes temas, subreportes, cortes de control, etc. Luego, una vez hecho este primer paso, podemos agregarle mejoras gráficas e incluso condiciones de visualización mas complejas dependiendo del tipo de informe.&lt;/p&gt;&lt;p&gt;Cuando visualizamos el reporte de la forma:&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_HqYM3PA8MJk/Sm3AvFgawLI/AAAAAAAAEpE/7IcbfKArwLU/s1600-h/Reporte%5B4%5D.jpg"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title="Reporte" border="0" alt="Reporte" src="http://lh6.ggpht.com/_HqYM3PA8MJk/Sm3AvmpiXPI/AAAAAAAAEpI/gSVHUY5xDVE/Reporte_thumb%5B2%5D.jpg?imgmax=800" width="438" height="193" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;aparecen en la barra de herramientas, unos controles para utilizar de la forma:&lt;/p&gt;&lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/_HqYM3PA8MJk/Sm3Awdw9FOI/AAAAAAAAEpM/E12xTOUSgw0/s1600-h/image%5B2%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_HqYM3PA8MJk/Sm3Aw0gU9rI/AAAAAAAAEpQ/AF5NblNM4I0/image_thumb.png?imgmax=800" width="161" height="218" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p align="left"&gt;Con estos controles es factible hacer casi cualquier tipo de reporte, haciéndolos no solo útiles sino vistosos. &lt;/p&gt;&lt;p align="left"&gt;Por último, es necesario realizar la consulta SQL para acceder a los datos. Para esto, se accede a la lengüeta Datos, en la misma ventana de reportes. Allí se selecciona uno de los DataSources generados, y desde allí se seleccionan las tablas necesarias para obtener los datos correctos. Luego se puede escribir la consulta SQL directamente o trabajar con un asistente. Se ve de la forma:&lt;/p&gt;&lt;p align="center"&gt;&lt;img alt="Consulta de informe en el diseñador de consultas genérico" src="http://i.msdn.microsoft.com/ms170625.e078613d-63a1-4c50-94ad-986391de0658(es-es,SQL.90).gif" /&gt;&lt;/p&gt;&lt;p align="left"&gt;Para comenzar con un reporte básico, paso a paso, les recomiendo seguir también la &lt;a href="http://msdn.microsoft.com/es-es/library/ms167559(SQL.90).aspx"&gt;ayuda en línea de Microsoft&lt;/a&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;En los próximos artículos d esta serie,expondré algunos trucos prácticos para mejorar la calidad de los reportes, así como temas determinantes en el éxito de los proyectos que utilizan MRS.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;&lt;em&gt;So far, So good!&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="right"&gt;&lt;span style="font-size:78%;color:#800000;"&gt;&lt;strong&gt;&lt;em&gt;Imágenes by &lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;a href="http://es.tinypic.com/"&gt;&lt;span style="font-size:78%;color:#800000;"&gt;&lt;em&gt;Tinypic&lt;/em&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-217141234381483313?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bD8gUQUVZXFalWT3n4o2DFn0g38/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bD8gUQUVZXFalWT3n4o2DFn0g38/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bD8gUQUVZXFalWT3n4o2DFn0g38/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bD8gUQUVZXFalWT3n4o2DFn0g38/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2009/07/microsoft-reporting-services-mrs-parte.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-3279739933134958802</guid><pubDate>Thu, 14 May 2009 04:27:00 +0000</pubDate><atom:updated>2009-05-14T00:30:46.459-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Desarrollo</category><category domain="http://www.blogger.com/atom/ns#">Informática</category><category domain="http://www.blogger.com/atom/ns#">Office Communicator</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><title>Office Communicator 2007 - Alertas</title><description>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_HqYM3PA8MJk/SgudmL2VQmI/AAAAAAAADEc/pLfC3TMr5ls/s1600-h/clip_image002%5B13%5D.jpg"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; MARGIN-LEFT: 0px; BORDER-TOP: 0px; MARGIN-RIGHT: 0px; BORDER-RIGHT: 0px" title="clip_image002" border="0" alt="clip_image002" align="left" src="http://lh6.ggpht.com/_HqYM3PA8MJk/Sgudm5mLEAI/AAAAAAAADEg/tS35Go0GUPU/clip_image002_thumb%5B10%5D.jpg?imgmax=800" width="186" height="210" /&gt;&lt;/a&gt;Debido a un proyecto en el que estoy involucrado, tuve que investigar como integrar a nuestro sistema, el uso del Office Communicator 2007 (OC) para el envío de alertas a los usuarios.&lt;/p&gt;&lt;p&gt;Poco sabía del producto, y bastante me costó encontrar información de utilidad para poder hacerlo.&lt;/p&gt;&lt;p&gt;Aquí expongo algunos tips que creo de utilidad para poder realizar ésta tarea, con ejemplo concretos.&lt;/p&gt;&lt;p&gt;Espero les sirva, para no tener que navegar. tanto por internet :-). &lt;/p&gt;&lt;span class="fullpost"&gt;&lt;p&gt;&lt;span style="font-size:100%;color:#008000;"&gt;&lt;strong&gt;Contexto&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Office Communicator 2007 es un sistema de mensajería desarrollado por Microsoft, que permite establecer comunicaciones entre usuarios de un dominio, ya sea a través de mensajes instantáneos o voz, y compartir información.&lt;/p&gt;&lt;p&gt;Tiene varias características de ayuda al negocio, que pueden revisar en la descripción del producto en el &lt;a href="http://office.microsoft.com/es-es/help/HA102037153082.aspx"&gt;sitio oficial&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:100%;color:#008000;"&gt;El Desafío&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Nuestro sistema es web. Es un manejador documental que permite un flujo manual de documentos, con bandejas de entradas y salidas de documentos.&lt;/p&gt;&lt;p&gt;El pedido concreto era que un usuario al que se le enviara un documento&lt;img style="DISPLAY: inline; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px" align="right" src="http://farm4.static.flickr.com/3103/3236822626_61b25ab8b1_m.jpg" /&gt; en esa bandeja de entrada,  recibiera un alerta en su Communicator corporativo, con un texto del tipo: “Ud. ha recibido un el documento DDD de parte del usuario UUU. Ingrese a URL …”, a través de un IM (Instant Message) &lt;/p&gt;&lt;p&gt;(Esto es posible en esta compañía, porque el usuario en el momento en que se loguea en su máquina, automáticamente abre el OC).&lt;/p&gt;&lt;p&gt;Dado que el IM es una comunicación de máquina a máquina, y se hace a través del OC, que es una aplicación local, no es factible utilizar una especie de repositorio o cola en un servidor. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:100%;color:#008000;"&gt;La Solución&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;En primer lugar, para poder trabajar desde C#, lenguaje utilizado en nuestro caso, debimos descargar la &lt;a href="http://www.microsoft.com/DownLoads/details.aspx?familyid=ED1CCE45-CC22-46E1-BD50-660FE6D2C98C&amp;amp;displaylang=en"&gt;API&lt;/a&gt; del producto para poder instanciarlo desde programa.&lt;/p&gt;&lt;p&gt;Luego, debimos comprender que se trata de una aplicación stand alone, por lo que no es un sistema de mensajería como el mail, donde el encargado de “rutear” el mensaje es el servidor. &lt;/p&gt;&lt;p&gt;Para poder enviar un mensaje se debe instanciar el OC, a través de la instrucción:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;using CommunicatorAPI;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;private Messenger _communicator;                     &lt;br /&gt;private IMessengerAdvanced _communicatorAdvanced;&lt;img style="DISPLAY: inline; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px" align="right" src="http://i36.tinypic.com/k35gmf.jpg" /&gt;    &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;if (_communicator == null)&lt;br /&gt;{&lt;br /&gt;    _communicator = new Messenger();&lt;br /&gt;    _communicatorAdvanced = _communicator as IMessengerAdvanced; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;    _communicator.OnSignin += new DMessengerEvents_OnSigninEventHandler(communicator_OnSignin);&lt;br /&gt;    _communicator.OnSignout += new DMessengerEvents_OnSignoutEventHandler(communicator_OnSignout);&lt;br /&gt;    _communicator.OnIMWindowCreated += new DMessengerEvents_OnIMWindowCreatedEventHandler(communicator_OnIMWindowCreated);&lt;br /&gt;    _communicator.OnIMWindowDestroyed += new DMessengerEvents_OnIMWindowDestroyedEventHandler(communicator_OnIMWindowDestroyed);&lt;br /&gt;    _communicator.OnAppShutdown += new DMessengerEvents_OnAppShutdownEventHandler(communicator_OnAppShutdown);&lt;br /&gt;}&lt;/span&gt; &lt;/p&gt;&lt;p&gt;luego hacer el LogIn:&lt;/p&gt;&lt;p&gt;_communicator.Signin(0, _userIM, _pswIM);&lt;/p&gt;&lt;p&gt;donde el _userIM es un usaurio que se conectará al sistema, y que debe ser un usuario válido, sino fallará el proceso. Esto significa que se debe tener un usuario genérico de conexión por cada servidor redundante de nuestro sistema, desde donde se desea enviar alarmas.&lt;/p&gt;&lt;p&gt;Una vez logueado, para enviar un mensaje IM, nos debemos “colgar” del evento de apertura de una ventana (DMessengerEvents_OnIMWindowCreatedEventHandler) de la forma: &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;void communicator_OnIMWindowCreated(object pIMWindow)&lt;br /&gt;{&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        IMessengerConversationWndAdvanced imWindow = (IMessengerConversationWndAdvanced)pIMWindow; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;        if (((IMessengerConversationWndAdvanced)pIMWindow).HWND == windowHandle)&lt;br /&gt;        {&lt;br /&gt;            // outgoing&lt;br /&gt;            if (!String.IsNullOrEmpty(_messageIM))&lt;br /&gt;                imWindow.SendText(_messageIM); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;            imWindow.Close();&lt;img align="right" src="http://i36.tinypic.com/k35gmf.jpg" /&gt;&lt;br /&gt;            windowHandle = 0;&lt;br /&gt;            _messageIM = null;&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            // incoming&lt;br /&gt;            windowHandle = imWindow.HWND; &lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    catch (COMException comException)&lt;br /&gt;    {&lt;br /&gt;        log.Error(communicator_OnIMWindowCreated [comException].", comException);&lt;br /&gt;    }&lt;br /&gt;    catch (Exception exception)&lt;br /&gt;    {&lt;br /&gt;        log.Error("communicator_OnIMWindowCreated [exception].", exception);&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt; &lt;/p&gt;&lt;p&gt;Donde el envío se hace exactamente en la línea:&lt;/p&gt;&lt;p&gt;    &lt;span style="font-family:Courier;"&gt;        if (!String.IsNullOrEmpty(_messageIM))&lt;br /&gt;                imWindow.SendText(_messageIM);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Siendo &lt;span style="font-family:Courier;"&gt;_messageIM&lt;/span&gt; una variable global antes completada.&lt;/p&gt;&lt;p&gt;Pero para enviar el mensaje se debe abrir la ventana. Para esto podemos usar:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;public void SendIM(string userIM, string msgIM)&lt;br /&gt;{&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        if (msgIM != null) _messageIM = msgIM;&lt;br /&gt;        // Find the Contact using the SipUri&lt;br /&gt;        IMessengerContact contact = null;&lt;br /&gt;        if (userIM != null)&lt;br /&gt;            contact = (IMessengerContact)_communicator.GetContact(userIM, _communicator.MyServiceId); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;        // Use IMessenger.InstantMessage to send an IM&lt;br /&gt;        if (contact != null)&lt;br /&gt;        {&lt;br /&gt;            IMessengerWindow window = (IMessengerWindow)_communicator.InstantMessage(contact);&lt;br /&gt;            windowHandle = window.HWND; // Capture window handle&lt;img style="DISPLAY: inline; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px" align="right" src="http://i36.tinypic.com/k35gmf.jpg" /&gt;&lt;br /&gt;            System.Threading.Thread.Sleep(_timeToSleepBetweebnMsgIM);&lt;br /&gt;            log.Debug("OCSender.SendAllIM - Contacto encontrado " + userIM +&lt;br /&gt;                        ", para enviar mensaje: " + msgIM);&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            log.Debug("OCSender.SendAllIM - No encontro el contacto " + userIM +&lt;br /&gt;                        ", para enviar mensaje: " + msgIM);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    catch (Exception e)&lt;br /&gt;    {&lt;br /&gt;        log.Error("SendIM [exception].", e);&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt; &lt;/p&gt;&lt;p&gt;Donde &lt;span style="font-family:Courier;"&gt;userIM&lt;/span&gt; es un usuario corporativo, definido por su mail o userid, y &lt;span style="font-family:Courier;font-size:85%;"&gt;msgIM&lt;/span&gt; el mensaje propiamente dicho.&lt;/p&gt;&lt;p&gt;Notarán que existe un Sleep, y esto se debe a que se debe dar el tiempo suficiente a la apertura de la ventana y la ejecución del correspondiente código en el evento de apertura, para evitar saltear mensajes.&lt;/p&gt;&lt;p&gt;Ahora bien, si existe la posibilidad de concurrencia en la emisión de alertas, deberíamos manejar una cola de mensajes, y tener una rutina que agregue mensajes a la cola y otra rutina que envíe en algún momento todos los mensajes encolados. Para acceder a dicha cola se podría acceder bloqueándola, para evitar problemas, de la forma:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="font-family:Courier;"&gt;lock (_colaMsg)&lt;br /&gt;{&lt;br /&gt;       _colaMsg.Add(new MensajeIM(toUserIM, messageIM));&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Donde MensajeIM es un clase que tiene dos propiedades para efectuar luego los envíos.&lt;/p&gt;&lt;p&gt;Espero les sirva, y de necesitar algún soporte, no duden en contactarme. Les puedo enviar una clase que hace todo esto.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;So far, So good!&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-3279739933134958802?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/O8L_eZxA2Oy2v9U4L6iS3-SuzWQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O8L_eZxA2Oy2v9U4L6iS3-SuzWQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/O8L_eZxA2Oy2v9U4L6iS3-SuzWQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O8L_eZxA2Oy2v9U4L6iS3-SuzWQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2009/05/office-communicator-2007-alertas.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-6945525743129931898</guid><pubDate>Tue, 21 Apr 2009 22:45:00 +0000</pubDate><atom:updated>2009-05-15T10:06:08.203-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Desarrollo</category><category domain="http://www.blogger.com/atom/ns#">Informática</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Sharepoint</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><title>Sharepoint – Usando sus Web Services</title><description>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_HqYM3PA8MJk/Se5MaTrJi7I/AAAAAAAAC-w/2mKeRKsI6cA/s1600-h/LogoMOSS_50%5B5%5D.gif"&gt;&lt;img title="LogoMOSS_50" border="0" alt="LogoMOSS_50" align="left" src="http://lh4.ggpht.com/_HqYM3PA8MJk/Se5MbAutQJI/AAAAAAAAC-0/WvtMTFjrDAg/LogoMOSS_50_thumb%5B3%5D.gif?imgmax=800" width="212" height="217" /&gt;&lt;/a&gt;Dado un proyecto en el que estoy involucrado directamente, he tenido que meterme fuerte en el uso de &lt;a href="http://www.microsoft.com/latam/sharepoint/prodinfo/what.mspx"&gt;Sharepoint 2007 (MOSS)&lt;/a&gt; para utilizarlo como repositorio de documentos desde un sistema externo. &lt;/p&gt;  &lt;p&gt;Aquí comparto con Uds. algunos detalles importantes que me toco investigar, con los típicos “detalles” que terminan haciéndote pasar momentos difíciles. &lt;/p&gt;  &lt;p&gt;Si bien aquí desarrollo algo muy básico, les aseguro que si necesitan desarrollar algo del estilo, este artículo les servirá, porque en definitiva, recopila información recogida a lo largo de varias horas de navegación en la web, y luego de probarlo en un ambiente real.&lt;/p&gt;  &lt;p&gt;Es factible probar todo esto contra una máquina virtual con Windows 2003 Server Trial y Sharepoint 2007 Trial, que tiene una duración de 60 días, y se pueden descargar desde Microsoft Download Center..&lt;/p&gt;&lt;span class="fullpost"&gt; &lt;h4&gt;&lt;span style="color:#008000;"&gt;El Contexto&lt;/span&gt;&lt;/h4&gt;  &lt;p&gt;Lo primero que hay que aclarar es que Sharepoint es una herramienta mucho mas amplia que un simple repositorio de documentos. Como explica el link al site de MOSS, este producto permite la colaboración entre equipos, compartiendo información fácil y rápidamente, incluso definiendo workflow a los documentos, lo que lo hace muy potente.&lt;/p&gt;  &lt;p&gt;Es factible definir colecciones de sitios web, desde plantillas predefinidas,  permitiendo luego que cada usuario personalice su propio sitio, e incluso configure los permisos de acceso a su espacio de trabajo. Todos los permisos están relacionados directamente al AD de Windows.&lt;/p&gt;  &lt;p&gt;Como todo repositorio, es factible alojar documentos de diversos tipos,&lt;a href="http://lh5.ggpht.com/_HqYM3PA8MJk/Se5Mb_4DV8I/AAAAAAAAC-4/53VaCj0DT5A/s1600-h/DiagramaMOSS%5B3%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="DiagramaMOSS" border="0" alt="DiagramaMOSS" align="right" src="http://lh4.ggpht.com/_HqYM3PA8MJk/Se5MctpjIJI/AAAAAAAAC-8/0amkCzGcK5c/DiagramaMOSS_thumb%5B1%5D.gif?imgmax=800" width="214" height="235" /&gt;&lt;/a&gt; como office, pdf, musicales, videos, imágenes, etc.&lt;/p&gt;  &lt;p&gt;Se pueden definir cotas de espacio por sites, por tipos de documentos, e incluso por base de datos, utilizadas para el almacenamiento. Esto permite, desde el punto de vista administrativo, tener un control en el uso de espacio, dado que los usuarios solemos desestimar ese tema, hasta que nos quedamos sin espacio para trabajar. Cada site puede tener asociada una base de datos, o compartirla con otras. Esto queda a criterio del administrador del sistema, pero normalmente se opta por separar las bases de datos, para acelerar los procesos de recuperación en caso de ser necesario, y para tener mas control por aplicación de negocios o espacios específicos de colaboración. Lo importante, es que TODO se almacena en base de datos SQL Server, y no se usa filesystem para nada. Podría se factible desarrollar un provider para almacenamiento en otro repositorio, pero habría que analizar bien la necesidad para justificar en ese caso, la pérdida de seguridad y eventualmente falta de integridad, características que son nativas de MOSS cuando se utiliza SQL Server.&lt;/p&gt;  &lt;p&gt;Para trabajar con MOSS, es factible hacerlo de 3 formas:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;A través de su interface (Web), accediendo al sitio en que tenemos permisos, y utilizando las opciones habilitadas según nuestro perfil.&lt;/li&gt;    &lt;li&gt;A través de la API MOSS, pero SOLO si estamos en la misma máquina donde está instalado el producto.&lt;/li&gt;    &lt;li&gt;A través de Web Services estándares de MOSS, que se publican en cada uno de los sites que se crean, sea principal o secundario, y que permiten hacer casi la totalidad de las operaciones que se pueden hacer desde la interface web standard. En caso de existir alguna operación que no se pueda hacer con estos web services, se desarrolla uno nuevo con la API MOSS, se la publica en el sitio que se necesita, y se lo consume tal cual los web services estándares.&lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;&lt;span style="color:#008000;"&gt;Nuestro Ejemplo&lt;/span&gt;&lt;/h4&gt;  &lt;p&gt;Mas allá de las pocas características antes enumeradas, lo que utilizamos en nuestro proyecto fue solo la capacidad de almacenamiento y versionamiento de documentos, en lo que MOSS denomina Document Libraries (Biblioteca de Documentos). Básicamente una DL es un espacio físico que almacena documentos de cualquier tipo, dentro de la estructura de directorios que definamos. &lt;/p&gt;  &lt;p&gt;Aquí comienzan a aparecer los problemas típicos de tamaños, espacios, etc. Una limitante que tiene MOSS 2007, cuando utilizamos SQL Server 2005, es que podemos almacenar documentos menores a 2Gb. Esto es porque la limitante se hereda del SQL Server 2005, donde es imposible almacenar una fila mas grande que ese tamaño. No es el caso del SQL Server 2008, que no tiene cota máxima. &lt;/p&gt;  &lt;p&gt;De todas formas, el tamaño de los documentos, no es solo por las cotas, sino por la congestión de la red, en caso que sean demasiado grandes y/o que las conexiones sean algo lentas.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_HqYM3PA8MJk/Se5MdFV0shI/AAAAAAAAC_A/jCEOjN-RlH0/s1600-h/Ok%5B3%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Ok" border="0" alt="Ok" align="left" src="http://lh5.ggpht.com/_HqYM3PA8MJk/Se5Md-KLlQI/AAAAAAAAC_E/mh2POmNr4EA/Ok_thumb%5B1%5D.gif?imgmax=800" width="37" height="50" /&gt;&lt;/a&gt; Según &lt;a href="http://technet.microsoft.com/en-us/library/cc262813.aspx"&gt;recomendaciones&lt;/a&gt; de Microsoft, es mejor no sobrepasar ciertos límites de cantidades de documentos por carpetas, para evitar problemas en el uso de la interface web. Cuando trabajamos como en nuestro caso programáticamente, pero sin usar la interface nativa, ese límite es mas flexible.&lt;/p&gt;  &lt;p&gt;Un tema importante que mencione al pasar antes, es el versionamiento automático que se puede definir en las DL, para que cada vez que subamos un documento, MOSS se encargue de éste tema. Luego es factible recuperar la lista de versiones así como los documentos correspondientes a cada una.&lt;/p&gt;  &lt;p&gt;Acerca de la lista de web services estándares, no haré demasiados comentarios, porque &lt;a href="http://msdn.microsoft.com/en-us/library/ms479390.aspx"&gt;aquí&lt;/a&gt; pueden encontrar mucha información al respecto, así como en web. Luego, es mucho de prueba y error, para ver como se comportan cada uno de ellos. Es importante aclarar que no todos tienen el mismo tipo de salida, es decir, el resultado retornado no es siempre del mismo tipo, lo que hace mas dificultoso la programación, pero luego de un poco de pruebas, se generalizan las operaciones mas importantes.&lt;/p&gt;  &lt;h4&gt;&lt;span style="color:#008000;"&gt;Algunos Tips importantes para la programación&lt;/span&gt;&lt;/h4&gt;  &lt;p&gt;Si deseamos hacer un upload de un documento programáticamente a través de los web services estándares de MOSS, podemos hacer algo del estilo:&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;font-size:78%;color:#800000;"&gt;using (Copy ws = new Copy())   &lt;br /&gt;{    &lt;br /&gt;    try    &lt;br /&gt;    {    &lt;br /&gt;        ws.Timeout = _Timeout;    &lt;br /&gt;        ws.Credentials = _Credential; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;font-size:78%;color:#800000;"&gt;        string[] copyDest = { &amp;lt;URL de MOSS&amp;gt; }; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;font-size:78%;color:#800000;"&gt;        FieldInformation myFieldInfo1 = &lt;/span&gt;&lt;span style="font-family:Courier;font-size:78%;color:#800000;"&gt;new FieldInformation();   &lt;br /&gt;        myFieldInfo1.InternalName = "Title"; //Titulo    &lt;br /&gt;        myFieldInfo1.DisplayName = "Título"; //Titulo    &lt;br /&gt;        myFieldInfo1.Type = FieldType.Text;    &lt;br /&gt;        myFieldInfo1.Value = filename; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;font-size:78%;color:#800000;"&gt;        FieldInformation[] myFieldInfoArray = { myFieldInfo1 }; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;font-size:78%;color:#800000;"&gt;        CopyResult myCopyResult1 = new CopyResult();   &lt;br /&gt;        CopyResult[] myCopyResultArray = { myCopyResult1 }; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;font-size:78%;color:#800000;"&gt;        //Hago el upload propiamente dicho   &lt;br /&gt;        uint myCopyUint = ws.CopyIntoItems("&lt;/span&gt;&lt;a href="http://null%22/"&gt;&lt;span style="font-family:Courier;font-size:78%;color:#800000;"&gt;http://null"&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:Courier;font-size:78%;color:#800000;"&gt;, copyDest,myFieldInfoArray, file, out myCopyResultArray);   &lt;br /&gt;        if (myCopyUint == 0)    &lt;br /&gt;        {    &lt;br /&gt;            if (myCopyResultArray[0].ErrorMessage != null)    &lt;br /&gt;            {    &lt;br /&gt;                log.Error("MOSSHelper.UploadDocument [ErrorCode=" + myCopyResultArray[0].ErrorCode + " -  ErrorMessage=" + myCopyResultArray[0].ErrorMessage + "]");    &lt;br /&gt;             return ParseErrorCopy(myCopyResultArray[0].ErrorCode);    &lt;br /&gt;            }&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;font-size:78%;color:#800000;"&gt;}&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;color:#800000;"&gt;Copy&lt;/span&gt; hace referencia al WS Copy.asmx.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="font-size:85%;color:#008000;"&gt;Nota Importnate&lt;/span&gt;&lt;/strong&gt;: Tengan especial cuidado cuando utilicen FieldInformation, para agregar un metadato asociado al documento, dado &lt;a href="http://lh3.ggpht.com/_HqYM3PA8MJk/Se5MeU8PhtI/AAAAAAAAC_I/xS3Azb0yn_k/s1600-h/Lupa%5B4%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Lupa" border="0" alt="Lupa" align="right" src="http://i36.tinypic.com/k35gmf.jpg" width="125" height="125" /&gt;&lt;/a&gt; que si no se completan tanto el Inernal como el DisplayName, ademas del Type y el Value, se completa el upload pero no se llena ese metadata. Y si despues se necesita ese metadata para efecutar búsquedas, estarás en problemas. Además, dependiendo de la versión (inglés, español, etc) el InternalName cambia, y ocurre lo mismo que si no se llenara.&lt;/p&gt;  &lt;p&gt;Un Download del mismo archivo podría ser:&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;color:#800000;"&gt;using (Copy ws = new Copy())   &lt;br /&gt;{    &lt;br /&gt;    try    &lt;br /&gt;    {    &lt;br /&gt;        ws.Timeout = _Timeout;    &lt;br /&gt;        ws.Credentials = _Credential; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;color:#800000;"&gt;        string urlSource = &amp;lt;URL total del docuemnto en MOSS&amp;gt;; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;color:#800000;"&gt;        FieldInformation[] myFieldInfoArray;   &lt;br /&gt;        CopyResult myCopyResult1 = new CopyResult();    &lt;br /&gt;        //Hago el download propiamente dicho    &lt;br /&gt;        uint myCopyUint = ws.GetItem(urlSource, out myFieldInfoArray, out file);    &lt;br /&gt;        if (myCopyUint != 0)    &lt;br /&gt;        {    &lt;br /&gt;            ret = (int)myCopyUint;    &lt;br /&gt;        }    &lt;br /&gt;        else if (file == null)    &lt;br /&gt;        {    &lt;br /&gt;            ret = RET_ERR_DOCUMENT_NOT_FOUNT_IN_MOSS;    &lt;br /&gt;        }    &lt;br /&gt;    }    &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;color:#800000;"&gt;}&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Crear un DL:&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;color:#800000;"&gt;using (Lists ws = new Lists())   &lt;br /&gt;{    &lt;br /&gt;    try    &lt;br /&gt;    {    &lt;br /&gt;        ws.Timeout = _Timeout;    &lt;br /&gt;        ws.Credentials = _Credential;    &lt;br /&gt;        string strResult = "";    &lt;br /&gt;        System.Xml.XmlNode nodeListItems = ws.AddList(nameDL, descripcionDL, 101);    &lt;br /&gt;        ret = ParseErrorCreateDL(nodeListItems); &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;color:#800000;"&gt;    }    }&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Aquí usamos el WS Lists.asmx.&lt;/p&gt;  &lt;p&gt;Utilizando DWS.asmx, es factible crear carpetas, con CreateFolder. &lt;/p&gt;  &lt;p&gt;Por último, con Versions.asmx, se pueden recuperar las versiones de un documento, y luego, a través de su URL completa, y con ayuda nuevamente de Copy, se pueden recuperar.&lt;/p&gt;  &lt;p&gt;Espero les sirvan estos comentarios, y cualquier duda me avisan, para ver si puedo ayudarlos, y de paso, sigo aprendiendo.&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:85%;color:#008000;"&gt;&lt;strong&gt;&lt;em&gt;So far, So good!&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;color:#008000;"&gt; &lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-6945525743129931898?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mhiqfoyXfFejFJHWajZkeJ0dHA0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mhiqfoyXfFejFJHWajZkeJ0dHA0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mhiqfoyXfFejFJHWajZkeJ0dHA0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mhiqfoyXfFejFJHWajZkeJ0dHA0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2009/04/sharepoint-usando-sus-web-services.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-6889429718238616092</guid><pubDate>Wed, 18 Feb 2009 03:39:00 +0000</pubDate><atom:updated>2009-02-18T00:41:56.831-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Desarrollo</category><category domain="http://www.blogger.com/atom/ns#">Informática</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>NHibernate – Tips Útiles para el Desarrollo Efectivo</title><description>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_HqYM3PA8MJk/SZuC9p0SKZI/AAAAAAAACwY/665Mzd0rGPM/s1600-h/BD%5B11%5D.gif"&gt;&lt;img title="BD" border="0" alt="BD" align="left" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SZuC-KLCRBI/AAAAAAAACwc/i7_wvz-EG5w/BD_thumb%5B9%5D.gif?imgmax=800" width="168" height="100" style="text-align: center;" /&gt;&lt;/a&gt;Desde hace ya tiempo utilizo como framework de base de datos &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt; o &lt;a href="http://www.hibernate.org/343.html"&gt;NHibernate&lt;/a&gt;. Si bien Hibernate ha tenido un desarrollo constante, &lt;a href="http://www.hibernate.org/343.html"&gt;NHibernate&lt;/a&gt;, además de aparecer posteriormente, no ha tenido el empuje de su “hermano mayor”.&lt;/p&gt;  &lt;p&gt;De todas formas, la experiencia que he tenido con NHibernate es mas que buena hasta el momento, y seguiré usándolo, debido a que permite a los desarrolladores de productos como yo, una gran flexibilidad a la hora de vender sus productos.&lt;/p&gt;  &lt;p&gt;Un tema que en Hibernate ya estaba solucionado desde hace buen tiempo, que era la generación automática de las clases y los archivos de mapeo tomando como base las tablas desde la base de datos en cuestión, en NHibernate no estaba tan desarrollado. Hoy, buceando en  internet encontré una herramienta mas que interesante, que no solo genera los mapeos y class para NHibernate, sino para varios templates mas.  &lt;/p&gt;  &lt;p&gt;En este artículo haré algunas referencias rápidas para temas importantes en el uso de NHibernate, y posteriormente desarrollaré una introducción a la herramienta mencionada, debido a que permite una forma rápida y consistente de adelantar trabajo, por demás tedioso si se lo intenta manual.&lt;/p&gt; &lt;span class="fullpost"&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;NHibernate – Que és y qué ventaja tiene?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hibernate.org/343.html"&gt;NHibernate&lt;/a&gt;, es un framework de O/RM (Object/Relational Mapping), un port de Hibernate de Java, que tiene como función principal mapear los objetos desde una aplicación .Net a una base de datos Relacional. &lt;/p&gt;  &lt;p&gt;La ventaja fundamental, es que el programador se abstrae de la base de datos con la que está trabajando, y solo trabaja a nivel de clases &lt;a href="http://msdn.microsoft.com/en-us/vcsharp/default.aspx"&gt;C#.NET&lt;/a&gt; o &lt;a href="http://msdn.microsoft.com/en-us/vbasic/default.aspx"&gt;VB.NET&lt;/a&gt;, y &lt;a href="http://www.hibernate.org/343.html"&gt;NHibernate&lt;/a&gt; se preocupa de hacer los mapeos entre las propiedades y las columnas de la base de datos, generando dinámicamente las sentencias SQL para interactuar con la base de datos, según sea la base definida en el archivo de configuración.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;NHibernate – Algunas Características&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="100%"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="10%" align="center"&gt;&lt;a href="http://lh5.ggpht.com/_HqYM3PA8MJk/SZuC-tzjA_I/AAAAAAAACwg/AvYCKfE5zNU/s1600-h/BD_Bullet%5B2%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="BD_Bullet" border="0" alt="BD_Bullet" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SZuC_J8SzaI/AAAAAAAACwk/RnUWQjoPjvA/BD_Bullet_thumb.gif?imgmax=800" width="20" height="25" /&gt;&lt;/a&gt; &lt;/td&gt;        &lt;td valign="top" width="90%"&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt;Bases de Datos Soportadas          &lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;Están soportadas una &lt;a href="http://www.hibernate.org/361.html"&gt;lista&lt;/a&gt; bastante amplia entre las que se encuentran las bases de datos mas utilizadas a nivel de mercado, tales como Oracle, SQL Server, MySQL, etc.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="10%" align="center"&gt;&lt;a href="http://lh5.ggpht.com/_HqYM3PA8MJk/SZuC-tzjA_I/AAAAAAAACwg/AvYCKfE5zNU/s1600-h/BD_Bullet%5B2%5D.gif"&gt;&lt;img title="BD_Bullet" border="0" alt="BD_Bullet" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SZuC_J8SzaI/AAAAAAAACwk/RnUWQjoPjvA/BD_Bullet_thumb.gif?imgmax=800" width="20" height="25" /&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="90%"&gt;         &lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Relaciones            &lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;Es factible modelar relaciones de 1:1 o 1:N, asociando en las clases propiedades que contienen una lista de objetos (filas) de otro tipo de entidad (tabla) definida. Es importante definir correctamente, como NHibernate debe cargar la entidad cuando tiene relaciones de 1:N, dado que esto puede significar problemas graves de performance. Lo ideal es configurarlo para que solo se carguen las listas cuando realmente se necesitan. Verificar el atributo &lt;a href="http://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/collections.html#collections-lazy"&gt;Lazy&lt;/a&gt;. &lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="10%" align="center"&gt;&lt;a href="http://lh5.ggpht.com/_HqYM3PA8MJk/SZuC-tzjA_I/AAAAAAAACwg/AvYCKfE5zNU/s1600-h/BD_Bullet%5B2%5D.gif"&gt;&lt;img title="BD_Bullet" border="0" alt="BD_Bullet" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SZuC_J8SzaI/AAAAAAAACwk/RnUWQjoPjvA/BD_Bullet_thumb.gif?imgmax=800" width="20" height="25" /&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="90%"&gt;         &lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Performance&lt;/span&gt;           &lt;br /&gt;&lt;/strong&gt;Dependiendo del modelo claro está, pero en general he conseguido muy buena performance en los accesos a base de datos, probando especialmente con Oracle, SQL Server 2000/2005, MySQL, Sybase y Postgress. En caso de necesitar hacer alguna consulta muy complicada a la base de datos, NHibernate permite generarla a través de código SQL directo, evitando tiempos adicionales innecesarios.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;NHibernate – Herramientas de Apoyo&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Una de las tareas mas engorrosas es la generación de los &lt;a href="http://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/mapping.html"&gt;archivos de mapeo&lt;/a&gt;, que relacionan los nombres de las propiedades en una clase, y las columnas de la base de datos. Esto se genera en XML que debe ser compilado como Embebed Resource en un proyecto .NET.&lt;/p&gt;  &lt;p&gt;Una opción es hacerlo manualmente, generando el XML necesario y detallando cada propiedad.  &lt;/p&gt;  &lt;p&gt;Otra opción, por demás mas productiva, es utilizar herramientas como &lt;a href="http://www.mygenerationsoftware.com/portal/Home/tabid/36/Default.aspx"&gt;MyGeneration&lt;/a&gt;, con la cual configurando la conexión a la base de datos que con la que deseamos trabajar, y descargando una plantilla de NHibernate de las varias que existen, es factible generar, al mismo tiempo, una clase por cada tabla de la base de datos seleccionada, junto con el archivo de mapeo XML asociado, incluyendo relaciones, claves y hasta vistas.&lt;/p&gt;  &lt;p style="text-align: center;"&gt;&lt;a href="http://lh4.ggpht.com/_HqYM3PA8MJk/SZuC_t1eDcI/AAAAAAAACwo/5s3eaBKu_cE/s1600-h/MyGeneration%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="MyGeneration" border="0" alt="MyGeneration" src="http://lh4.ggpht.com/_HqYM3PA8MJk/SZuDAXFbxRI/AAAAAAAACws/79CY0LWXqMU/MyGeneration_thumb%5B2%5D.jpg?imgmax=800" width="476" height="254" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Desde la ventana principal de la aplicación, si seleccionamos Template Browser, haciendo click en el icono del mundo, podemos descargar mas plantillas, no solo de NHibernate. &lt;/p&gt;  &lt;p&gt;Luego, seleccionamos el template deseado, presionamos Execute, y la aplicación generará el código definido (C#, VB, o lo que sea según el template seleccionado) y en el caso específico de estar generando para NHibernate, se generará el archivo de mapeo XML de la forma:&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;  &lt;br /&gt;&amp;lt;hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"&amp;gt; &lt;br /&gt;  &amp;lt;class name="MyAsembly.BtrIdentity,MyAsembly" table="btr_identity" lazy="true"&amp;gt;   &lt;br /&gt;    &amp;lt;id name="IdentId" column="ident_id" type="int"&amp;gt;   &lt;br /&gt;      &amp;lt;generator class="native" /&amp;gt;   &lt;br /&gt;    &amp;lt;/id&amp;gt;   &lt;br /&gt;    &amp;lt;property type="string" length="80" &lt;img align="right" src="http://i36.tinypic.com/k35gmf.jpg" width="132" height="132" /&gt;name="IdentNick" column="[ident_nick]" /&amp;gt;   &lt;br /&gt;    &amp;lt;property type="string" not-null="true" length="10" name="IdentTipodocumento" column="[ident_tipodocumento]" /&amp;gt;   &lt;br /&gt;    &amp;lt;property type="string" not-null="true" length="20" name="IdentNrodocumento" column="[ident_nrodocumento]" /&amp;gt;   &lt;br /&gt;    &amp;lt;property type="string" length="50" name="IdentNombre" column="[ident_nombre]" /&amp;gt;   &lt;br /&gt;    &amp;lt;property type="string" length="50" name="IdentApellido" column="[ident_apellido]" /&amp;gt;   &lt;br /&gt;    &amp;lt;property type="string" length="1" name="IdentSexo" column="[ident_sexo]" /&amp;gt;   &lt;br /&gt;    &amp;lt;bag name="FkBtrBirBtrIdentity" inverse="true" lazy="true" cascade="all"&amp;gt;   &lt;br /&gt;      &amp;lt;key column="ident_id" /&amp;gt;   &lt;br /&gt;      &amp;lt;one-to-many class="MyAsembly.BtrBir,MyAsembly" /&amp;gt;   &lt;br /&gt;    &amp;lt;/bag&amp;gt;   &lt;br /&gt;  &amp;lt;/class&amp;gt;   &lt;br /&gt;&amp;lt;/hibernate-mapping&amp;gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Incluso, hay algunos templates de NHibernate, que generan hasta el proyecto VS2005 o VS2003, con el correspondiente &lt;a href="http://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/session-configuration.html"&gt;archivo de configuración&lt;/a&gt; para establecer la conexión a la base de datos en cuestión.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;&lt;em&gt;So far, So good!&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-6889429718238616092?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1vljaQc5vEZJsZyDLqujhJvKWAo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1vljaQc5vEZJsZyDLqujhJvKWAo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1vljaQc5vEZJsZyDLqujhJvKWAo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1vljaQc5vEZJsZyDLqujhJvKWAo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2009/02/nhibernate-tips-utiles-para-el.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-3409153078830658297</guid><pubDate>Wed, 11 Feb 2009 18:13:00 +0000</pubDate><atom:updated>2009-02-11T15:26:17.180-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Nostalgia</category><category domain="http://www.blogger.com/atom/ns#">Biometría</category><category domain="http://www.blogger.com/atom/ns#">Vida</category><category domain="http://www.blogger.com/atom/ns#">General</category><title>Nuevos Horizontes…</title><description>&lt;p&gt;&lt;img style="margin: 0px 5px 0px 0px; display: inline" align="left" src="http://farm1.static.flickr.com/29/45040581_6575bc5c7c_m.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;Desde el 26 de Diciembre del 2008, ya no pertenezco a la empresa Biokey Identity Technologies Ltda., y de hecho desde el 27 de Enero del 2009, tampoco existe mas la empresa. &lt;/p&gt;  &lt;p&gt;A partir de allí, comencé a diagramar mi futuro, y comencé a analizar nuevos horizontes. &lt;/p&gt;  &lt;p&gt;Luego de ésta experiencia, con muchos aprendizajes, algunos lindos, otros no tanto, y comprendiendo finalmente de la peor forma la inflexibilidad y la necedad de algunas personas, dejando escapar enormes oportunidades por ataques de ego, llegue a algunas conclusiones que estoy seguro me ayudarán en el futuro. Aquí las comparto, y siéntanse libres  de opinar si lo desean.&lt;/p&gt;  &lt;p&gt;Por lo pronto, estoy trabajando bien, de forma independiente, y armando proyectos mas que prometedores, en el mismo rubro y en otros. Además, cualquier oportunidad será bien recibida.&lt;/p&gt;&lt;span class="fullpost"&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Conclusiones&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://i38.tinypic.com/2cqmm84.jpg"&gt;&lt;img align="right" src="http://farm4.static.flickr.com/3373/3238351424_6f1c9c586f_m.jpg" /&gt;&lt;/a&gt;&lt;a href="http://i38.tinypic.com/2cqmm84.jpg"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;No poner todos los huevos en la misma canasta&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Me costó mucho tiempo aceptar que puede hacerse, siempre y cuando consigas “aprender” a delegar, y luego seas claro en la comunicación con quien delegas. Quiero decir, no hace falta estar en todo, en cada detalle, solo debes saber rodearte de las personas indicadas y luego ser claro, coherente y “consecuente” en el tiempo. Poner todos los huevos en la misma canasta no hace mas que asegurarnos que si esa canasta se cae, es factible que se rompan todos los huevos. Así pues, entonces, &lt;strong&gt;diversificar para crecer&lt;/strong&gt; ha sido mi primera conclusión. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Animarse a descubrir caminos nuevos derribando prejuicios&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Desde que tengo memoria, siempre me llamó la atención la mente y sus poderes. Siempre estuve de acuerdo con lo que decía Einstein: “&lt;em&gt;la mente te enferma y la mente te cura&lt;/em&gt;”.  Por supuesto encontré por consecuencia apasionante todas las disciplinas que trabajan con la mente, como &lt;a href="http://lh4.ggpht.com/_HqYM3PA8MJk/SZMVQAQIJXI/AAAAAAAACwQ/mam7wOf4QuI/s1600-h/3044919392_4f0a0d5612_m%5B5%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px;margin: 0px 5px 0px 0px;" title="3044919392_4f0a0d5612_m" border="0" alt="3044919392_4f0a0d5612_m" align="left" src="http://lh4.ggpht.com/_HqYM3PA8MJk/SZMVQ6LVt_I/AAAAAAAACwU/A05sXZB-M0M/3044919392_4f0a0d5612_m_thumb%5B3%5D.jpg?imgmax=800" width="209" height="176" /&gt;&lt;/a&gt;control mental, hipnosis, etc. Es por ese motivo que derribando  fantasmas de prejuicios sociales, muy míos, “aprendidos”, me forme como Hipnoterapeuta, y desde ya hace un buen tiempo comencé con un camino paralelo, bastante alejado (o no, quién sabe) de la lógica informática, el que me produce un desafío constante, me apasiona, y me llena de satisfacciones cuando siento que ayudo a alguno de mis pacientes.  &lt;/p&gt;  &lt;p&gt;La conclusión, en todo caso, para mi con este “animarme”, fue que cuanto mas te alejas de las cosas que te movilizan, mas te apagas en el resto de tu vida. Si bien la informática me gusta, no me termina de llenar, por lo que la conjunción de estos (y otros) temas, hacen de mi una mejor persona. O al menos me hacen sentir mejor, que aunque suene egoísta, es el comienzo básico para cualquier otro tema.&lt;/p&gt;  &lt;p&gt;La invitación es entonces, a que visiten mi otro blog, &lt;a href="http://ggshipnosis.blogspot.com/"&gt;Hipnomateando…&lt;/a&gt;, y aporten lo que quieran, que será siempre bienvenido, estén de acuerdo o no.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;No hay pero ciego...que el que no puede ver?&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Solo haré referencia a un &lt;a href="http://ggshipnosis.blogspot.com/2008/12/no-hay-peor-ciego.html"&gt;artículo&lt;/a&gt; que lo explica mejor. A mi me paso en este caso, y me parece bueno compartirlo. &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;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Claridad de rumbo&lt;/span&gt;&lt;/span&gt; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Muchas veces uno tiene vagamente en su cabeza que es lo que quiere, y difícilmente lo instancia en algo concreto. Muchas veces decimos “&lt;em&gt;quiero ser rico&lt;/em&gt;” por ejemplo, pero que es eso en realidad?  Lo que para mi &lt;img align="right" src="http://farm4.static.flickr.com/3176/2968105657_7bafef6b48_m.jpg" width="184" height="271" /&gt;es “rico” para otra persona puede ser tener un buen fin de mes, y  viceversa. Lo que si hacemos, es que nos ponemos firmes en el “como hacernos ricos”, convirtiéndonos a veces, en “adoquines inflexibles” tirando para adelante. &lt;/p&gt;  &lt;p&gt;Relacionado con la “apertura de posibilidades” que hablaba al comienzo, aprendí que debo fijar mis objetivos, lo mas claros y palpables (medibles) posible, y luego confiar que eso llegará, sin ser tan “cabezón”  y pretender que llegará de la forma que yo creo sin dejar la puerta abierta para que llegue por otro lado. Claro, tampoco la pavada, al “confiar” hay que ayudarlo trabajando, pero siempre dentro de los parámetros que nos hagan sentir bien, en la mayor parte del camino (ojala en todo el camino), de otra forma, es una cuestión de tiempo, para que la bomba explote en nuestra cara. Quiero decir, trabajar seriamente no significa ni trabajar excesivo, ni trabajar con cara de c… Se puede ser feliz trabajando y eso se refleja invariablemente en los resultados.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;So far, so good&lt;/span&gt;&lt;/em&gt;&lt;/strong&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;p align="right"&gt;&lt;span style="font-size:78%;color:#800000;"&gt;&lt;strong&gt;&lt;em&gt;Imágenes by &lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;a href="http://www.flickr.com/"&gt;&lt;span style="font-size:78%;color:#800000;"&gt;&lt;em&gt;Flickr&lt;/em&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-3409153078830658297?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HSvjHK_5DObCqFjNCbEo3m-PDy0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HSvjHK_5DObCqFjNCbEo3m-PDy0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HSvjHK_5DObCqFjNCbEo3m-PDy0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HSvjHK_5DObCqFjNCbEo3m-PDy0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2009/02/nuevos-horizontes.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-1734736657949359723</guid><pubDate>Tue, 30 Dec 2008 15:15:00 +0000</pubDate><atom:updated>2009-05-15T10:06:29.682-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Desarrollo</category><category domain="http://www.blogger.com/atom/ns#">Informática</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><title>Visual Studio 2005/2008 – Desarrollo Web</title><description>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_HqYM3PA8MJk/SVo68BC_2eI/AAAAAAAACPA/Yeslj4WsdFc/s1600-h/VS2008%5B5%5D.gif"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; MARGIN-LEFT: 0px; BORDER-TOP: 0px; MARGIN-RIGHT: 0px; BORDER-RIGHT: 0px" title="VS2008" border="0" alt="VS2008" align="left" src="http://lh4.ggpht.com/_HqYM3PA8MJk/SVo69OcBqfI/AAAAAAAACPE/YYcQNZU1Lfo/VS2008_thumb%5B2%5D.gif?imgmax=800" width="228" height="134" /&gt;&lt;/a&gt; Desde que comenzó el desarrollo de soluciones web, hace ya varios años, hubo siempre temas comunes en los sistemas que llevaban tiempo a los desarrolladores, y se repetían una y otra vez. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/spanish/msdn/latam/visualstudio2008/"&gt;Visual Studio&lt;/a&gt;, desde su versión 2005 y heredada en 2008, ofrece una forma sencilla y potente de implementarlos sin necesidad de escribir demasiado código, y con la posibilidad de adaptarlos de acuerdo a cada necesidad. &lt;/p&gt;&lt;p&gt;Desde el punto de vista de los que nos dedicamos a desarrollo de productos, mas que a sistemas a medida, son características mas que importantes, en pos de la flexibilidad y productividad.&lt;/p&gt;&lt;p&gt;Los invito entonces, a esta introducción sobre los temas mas relevantes, basados en esas premisas.&lt;/p&gt;&lt;span class="fullpost"&gt;&lt;h4&gt;Características Nuevas&lt;/h4&gt;&lt;p&gt;Desarrollaré aquí una breve descripción de algunas nuevas características que permiten el desarrollo de soluciones web de forma fácil y rápida, dejando las puertas abiertas a adaptaciones y cambios de &lt;a href="http://en.wikipedia.org/wiki/Look_and_feel"&gt;look and feel&lt;/a&gt;, sin demasiado esfuerzo.&lt;/p&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="center" width="10%" align="middle"&gt; &lt;img src="http://i40.tinypic.com/ibl3ro.gif" /&gt; &lt;/td&gt;&lt;td valign="center" width="90%" align="left"&gt;&lt;strong&gt;&lt;span style="color:#004000;"&gt;Master Pages&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" width="10%" align="middle"&gt; &lt;/td&gt;&lt;td valign="center" width="90%" align="left"&gt;Normalmente, los sitios mantienen una misma imagen en todas sus páginas, variando solamente en contenido y eventualmente las opciones de acceso dependiendo de los permisos por usuario. Esta características, en un principio, había que programarlas individualmente. VS2005 agregó el concepto de &lt;strong&gt;&lt;em&gt;Página Principal&lt;/em&gt;&lt;/strong&gt; o &lt;em&gt;&lt;strong&gt;Master Pages. &lt;/strong&gt;&lt;/em&gt;Las &lt;em&gt;&lt;strong&gt;Master Pages&lt;/strong&gt;&lt;/em&gt; definen una interfaz común para un grupo de páginas. Son en sí una página ASPX más, con extensión .master, y pueden ser referenciadas por las páginas del sitio, heredando de la master las características gráficas.  La referencia se ve de la forma:”&lt;br /&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;&amp;lt;%&lt;span style="color:#0000ff;"&gt;@ Page&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Language&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=C#&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;MasterPageFile&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=~/PaginaMaster.master&lt;/span&gt; ...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;En estas páginas maestras, se definen espacios de información dinámicos, que permiten el cambio de contenido en las páginas finales, llamados &lt;em&gt;&lt;strong&gt;ContentPlaceHolder&lt;/strong&gt;&lt;/em&gt;.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" width="10%" align="middle"&gt; &lt;img src="http://i40.tinypic.com/ibl3ro.gif" /&gt; &lt;/td&gt;&lt;td valign="center" width="90%" align="left"&gt;&lt;strong&gt;&lt;span style="color:#004000;"&gt;Temas y &lt;a href="http://es.wikipedia.org/wiki/Skin_(software)"&gt;Skins&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" width="10%" align="middle"&gt; &lt;/td&gt;&lt;td valign="center" width="90%" align="left"&gt;Con las &lt;strong&gt;&lt;em&gt;Master Pages&lt;/em&gt;&lt;/strong&gt; solucionamos en parte el tema de la imagen uniforme para todas nuestras páginas del sitio, pero, si deseamos cambiar fácilmente esa interfase gráfica, todavía nos falta algo: &lt;strong&gt;&lt;em&gt;Temas y Skins&lt;/em&gt;&lt;/strong&gt;. Esta característica se basa en: &lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;Hojas de estilo en cascada&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Cascading Style-Sheets&lt;/em&gt; o &lt;strong&gt;&lt;em&gt;&lt;a href="http://es.wikipedia.org/wiki/CSS"&gt;CSS&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;), las cuales pueden ser heredadas por las páginas ASPX al igual que un html, y permiten definir los estilos (colores, fuentes, etc.) &lt;/li&gt;&lt;li&gt;Creación de &lt;strong&gt;&lt;em&gt;temas y máscaras (skin)&lt;/em&gt;&lt;/strong&gt;, a través de una carpeta llamada APP_themes, en la cual se pueden agregar uno o mas temas, donde básicamente se definen los estilos asociados a cada uno de los controles incluidos en las páginas, o bien a la página en general. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;Asignación de los temas&lt;/em&gt;&lt;/strong&gt;, ya sea a nivel página de la forma:&lt;br /&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;&amp;lt;%@ &lt;span style="color:#804000;"&gt;Page&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Theme&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;="TemaDefault"&lt;/span&gt; ... %&amp;gt;&lt;/span&gt;&lt;br /&gt;o a nivel sitio desde la configuración general del mismo en el archivo Web.Config, con la directiva:&lt;br /&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;configuration xmlns=&lt;/span&gt;&lt;span style="font-family:Courier;color:#0000ff;"&gt;http://schemas&lt;/span&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;...&amp;gt;&lt;br /&gt;    &amp;lt;&lt;span style="color:#804000;"&gt;system.web&lt;/span&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;span style="color:#804000;"&gt;pages&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;theme&lt;/span&gt;="&lt;span style="color:#0000ff;"&gt;TemaDefault&lt;/span&gt;"/&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;span style="color:#804000;"&gt;system.web&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;span style="color:#804000;"&gt;configuration&lt;/span&gt;&amp;gt;&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" width="10%" align="middle"&gt; &lt;img src="http://i40.tinypic.com/ibl3ro.gif" /&gt; &lt;/td&gt;&lt;td valign="center" width="90%" align="left"&gt;&lt;strong&gt;&lt;span style="color:#004000;"&gt;Manejo de Sesiones&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" width="10%" align="middle"&gt; &lt;/td&gt;&lt;td valign="center" width="90%" align="left"&gt;Si bien esta característica ya estaba desde las versiones anteriores de ASP, en esta versión se cambia algo pero sigue siendo análogo. Siendo HTTP un protocolo sin estado, ASP.NET guarda en la cabecera un ID único que el servidor envía al cliente en su primera petición. Este ID se mantiene dependiendo de que el cliente no cierre browser o del tiempo configurado en el servidor de duración de la misma.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" width="10%" align="middle"&gt; &lt;img src="http://i40.tinypic.com/ibl3ro.gif" /&gt; &lt;/td&gt;&lt;td valign="center" width="90%" align="left"&gt;&lt;strong&gt;&lt;span style="color:#004000;"&gt;Variables de Aplicación y Caché&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" width="10%" align="middle"&gt; &lt;/td&gt;&lt;td valign="center" width="90%" align="left"&gt;En las versiones anteriores solo existían las variables de Aplicación para compartir ciertos datos entre todos los usuarios de una aplicación. Con un mecanismo de bloqueo para evitar errores. En esta versión se agrega el concepto de &lt;strong&gt;&lt;em&gt;Caché&lt;/em&gt;&lt;/strong&gt;, que permite incluir datos que son difíciles y costosos de conseguir (ejemplo: un query complejo en un dataset), incluso refrescándose solos cada cierto tiempo solos, para que cuando algún usuario lo necesite lo tome inmediatamente. Como siempre, dependerá de la lógica de negocios para saber si es factible utilizar esta característica o no.  Para insertar un nuevo valor en el cache se puede hacer de la forma:&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:Courier;"&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Cache("Clave") = Valor&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;o mejor aún:&lt;br /&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt;Cache.Insert("MyData", datos, New CacheDependency(Server.MapPath("MyData.xml")))&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Donde se define una dependencia del objeto en caché con el archivo MyData.xml. Si este cambia, entonces el objeto desaparece del Caché y se recarga la próxima vez que se use.&lt;br /&gt;Existe además el &lt;strong&gt;&lt;em&gt;Caché de Salida&lt;/em&gt;&lt;/strong&gt; que permite definir que páginas se pueden guardar y por cuanto tiempo antes de regenerarse.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" width="10%" align="middle"&gt; &lt;img src="http://i40.tinypic.com/ibl3ro.gif" /&gt; &lt;/td&gt;&lt;td valign="center" width="90%" align="left"&gt;&lt;strong&gt;&lt;span style="color:#004000;"&gt;Autenticación y Autorización&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="center" width="10%" align="middle"&gt; &lt;/td&gt;&lt;td valign="center" width="90%" align="left"&gt;La nueva versión permite definir en el archivo Web.Config, que tipo de autenticación tendrá el sitio y que accesos a páginas o subsitios tendrá cada usuario.&lt;br /&gt;Además, surge el concepto de una nueva &lt;strong&gt;&lt;em&gt;API: Membership y Roles, &lt;/em&gt;&lt;/strong&gt;con la cual es muy fácil implementar (y extender) un sistema de administración de usuarios y roles, combinándolo con los &lt;em&gt;&lt;strong&gt;Controles Web de Seguridad&lt;/strong&gt;&lt;/em&gt;, que dan un look and feel básico para el ingreso de datos.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4&gt;Conclusiones y Referencias Finales&lt;/h4&gt;&lt;p&gt;Cuando se comienza a utilizar este tipo de características, uno no puede dejar de pensar en  lo artesanal que era todo hace nada mas que un par de años. Por suerte las tecnologías avanzan, y permiten dejar las “iluminaciones creativas” para otro tipo de temas.&lt;/p&gt;&lt;p&gt;Existen en el sitio de &lt;a href="http://msdn.microsoft.com/es-es/default.aspx"&gt;MSDN de Microsoft&lt;/a&gt;, muchos tutoriales en español, que explican paso a paso estas y otras características de diversos productos, que son un excelente punto de partida en la utilización de los mismos. La invitación es entonces, a compartir cualquier duda o sugerencia.&lt;/p&gt;&lt;p&gt;&lt;em&gt;So Far, So Good!&lt;/em&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-1734736657949359723?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HpwlpypKWYlvz1JwGjAr4Ju3InI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HpwlpypKWYlvz1JwGjAr4Ju3InI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HpwlpypKWYlvz1JwGjAr4Ju3InI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HpwlpypKWYlvz1JwGjAr4Ju3InI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/12/visual-studio-20052008-desarrollo-web.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-1153053796758743313</guid><pubDate>Tue, 30 Dec 2008 15:15:00 +0000</pubDate><atom:updated>2008-12-30T12:21:42.216-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Nostalgia</category><category domain="http://www.blogger.com/atom/ns#">Vida</category><category domain="http://www.blogger.com/atom/ns#">General</category><title>Feliz Navidad y Muy Próspero Año 2009!!!</title><description>&lt;img align="left" src="http://i33.tinypic.com/2nm2avk.jpg" /&gt; &lt;p&gt;Solo quería terminar este 2008 deseando a través de este espacio los mejores augurios para el año que se viene.&lt;/p&gt;&lt;p&gt;Año 2008 que pasó rápido para mi, con muchos cambios y muchas lecciones aprendidas. &lt;/p&gt;&lt;p&gt;Definitivamente puedo decir que la balanza arroja saldo positivo, con el nacimiento de mi segundo hijo, el título de MBA de mi esposa, los nuevos desarrollos personales en otros ámbitos, etc..&lt;/p&gt;&lt;p&gt;Ojalá podamos seguir encontrándonos en este u otro espacio, y compartiendo ideas, siempre con la buena onda instaurada como base de la comunicación.&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size:6;color:#ff0000;"&gt;&lt;strong&gt;&lt;span style="font-size:180%;"&gt;Feliz Año Nuevo!!&lt;/span&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size:130%;color:#ff0000;"&gt;&lt;strong&gt;Que se cumplan &lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:130%;color:#ff0000;"&gt;&lt;strong&gt;todos nuestros deseos!!!&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#009900;"&gt;&lt;em&gt;So Far, So Good!!&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="right"&gt;&lt;span style="font-size:78%;color:#800000;"&gt;&lt;em&gt;Imágenes by &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt;&lt;/em&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/6151587310732787467-1153053796758743313?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ev_B88WQrS4XOVl540_0LBAKx9Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ev_B88WQrS4XOVl540_0LBAKx9Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ev_B88WQrS4XOVl540_0LBAKx9Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ev_B88WQrS4XOVl540_0LBAKx9Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/12/feliz-navidad-y-muy-prspero-ao-2009.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-5071148650919351173</guid><pubDate>Mon, 15 Dec 2008 15:43:00 +0000</pubDate><atom:updated>2008-12-15T12:50:55.197-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PKI</category><category domain="http://www.blogger.com/atom/ns#">Desarrollo</category><category domain="http://www.blogger.com/atom/ns#">Informática</category><title>Firma Digital en PDF</title><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_HqYM3PA8MJk/SUZ7LWVDn4I/AAAAAAAACAw/jemNP1XWCs4/s1600-h/Firma_PDF10.jpg"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="Firma_PDF" align="left" src="http://lh4.ggpht.com/_HqYM3PA8MJk/SUZ7L8YybnI/AAAAAAAACA0/k4vx8SzITsU/Firma_PDF_thumb8.jpg?imgmax=800" width="85" height="53" /&gt;&lt;/a&gt; Días atrás estuve probando las &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Firma_digital"&gt;firmas digitales&lt;/a&gt; en &lt;a target="_blank" href="http://es.wikipedia.org/wiki/PDF"&gt;PDF&lt;/a&gt;. Hacía buen tiempo que no trabajaba en temas relacionados con &lt;a target="_blank" href="http://es.wikipedia.org/wiki/PKI"&gt;PKI&lt;/a&gt;, y me interesé en el tema debido a un artículo de un diario español, donde decían que un sistema de notificaciones a infractores de tránsito sería implementado con PDF firmado digitalmente.&lt;/p&gt;&lt;p&gt;Lo primero fue descargar las herramientas necesarias y luego, hacer un ejemplo básico con un certificado autogenerado. Aquí detallo la problemática, las herramientas utilizadas y los ejemplos desarrollados, para que sirva de punto de partida, si alguien necesita implementar algo del estilo.&lt;/p&gt;&lt;span class="fullpost"&gt;&lt;h4&gt;&lt;span style="color:#008000;"&gt;Herramientas Utilizadas&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;Las herramientas que utilicé son:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.lowagie.com/iText/download.html"&gt;iText&lt;/a&gt;: Librería gratuita para manipulación y generación de PDF de &lt;img align="right" src="http://i38.tinypic.com/2q9yulk.jpg" width="190" height="105" /&gt;forma programática. Versión 2.1.4.&lt;/li&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.bouncycastle.org/"&gt;Bouncy Castle&lt;/a&gt;: Librerías gratuitas para manejo de certificados y claves. Además de provider. Release 1.41.&lt;/li&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.java.com/en/download/manual.jsp"&gt;JVM 1.6&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.eclipse.org/europa/"&gt;Eclipse Europa v3.3.2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Certificado digital generado con la &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Certificate_Authority"&gt;Certification Authority&lt;/a&gt; que trae &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Windows"&gt;Microsoft Windows 2000 Server&lt;/a&gt;, y exportado como PKCS12 (.pfx)&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;&lt;span style="color:#008000;"&gt;Ejemplo&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;El proceso es el siguiente: &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Se genera con o lee un archivo PDF.&lt;/li&gt;&lt;li&gt;Se carga un certificado digital en un formato &lt;a target="_blank" href="http://es.wikipedia.org/wiki/PKCS"&gt;PKCS12&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Se genera un objeto de firma.&lt;/li&gt;&lt;li&gt;Se lo inserta dentro del documento PDF original.&lt;img align="right" src="http://i36.tinypic.com/k35gmf.jpg" /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;El código sería algo como: &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;&lt;span style="color:#0000ff;"&gt;import&lt;/span&gt; java.io.*;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;import&lt;/span&gt; java.security.*;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;import&lt;/span&gt; java.security.cert.Certificate;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;import&lt;/span&gt; com.lowagie.text.*;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;import&lt;/span&gt; com.lowagie.text.pdf.*;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:Courier;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;boolean&lt;/span&gt; &lt;span style="color:#000000;"&gt;sign(String pathpdf, &lt;/span&gt;&lt;span style="color:#000000;"&gt;String pathPKCS12, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;String passwordPKCS12) {&lt;br /&gt;String fileKey = pathPKCS12 ;&lt;br /&gt;String fileKeyPassword = passwordPKCS12 ;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;try&lt;/span&gt; {&lt;br /&gt;&lt;span style="color:#008000;"&gt;//Crea un KeyStore&lt;/span&gt;&lt;br /&gt;KeyStore ks = KeyStore.getInstance("pkcs12");&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:Courier;"&gt;&lt;span style="color:#008000;"&gt;//Carga Certificado&lt;br /&gt;&lt;/span&gt;ks.load(new FileInputStream(fileKey), fileKeyPassword.toCharArray());&lt;br /&gt;String alias = (String)ks.aliases().nextElement();&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:Courier;"&gt;&lt;span style="color:#008000;"&gt;//Recupera Clave Privada&lt;br /&gt;&lt;/span&gt;PrivateKey key = (PrivateKey)ks.getKey(alias, fileKeyPassword.toCharArray());&lt;br /&gt;&lt;span style="color:#008000;"&gt;//Recupera Cadena de Certificacion si existe&lt;/span&gt;&lt;br /&gt;Certificate[] chain = ks.getCertificateChain(alias);&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:Courier;"&gt;&lt;span style="color:#008000;"&gt;//Lee Documento PDF y crea archivo de salida con otro nombre para no pisar el original&lt;br /&gt;&lt;/span&gt;PdfReader pdfReader = new PdfReader((new File(pathpdf)).getAbsolutePath());&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;File outputFile = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; File(pathpdf + ".signed.pdf");&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:Courier;"&gt;&lt;span style="color:#008000;"&gt;// Crea la firma en el objeto PdfStamper de la librería iText&lt;br /&gt;&lt;/span&gt;PdfStamper pdfStamper;&lt;br /&gt;pdfStamper = PdfStamper.createSignature(pdfReader, null, '\0', outputFile);&lt;br /&gt;PdfSignatureAppearance sap = pdfStamper.getSignatureAppearance();&lt;br /&gt;sap.setCrypto(key, chain, null, PdfSignatureAppearance.SELF_SIGNED);&lt;br /&gt;sap.setReason("Test GGS");&lt;br /&gt;sap.setLocation("");&lt;br /&gt;&lt;span style="color:#008000;"&gt;// Posiciona la Firma&lt;/span&gt;&lt;br /&gt;sap.setVisibleSignature(new Rectangle(10, 10, 50, 30), 1, "sign_ggs");&lt;br /&gt;pdfStamper.setFormFlattening(true);&lt;br /&gt;pdfStamper.close();&lt;br /&gt;}&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (Exception key) {&lt;br /&gt;key.printStackTrace();&lt;br /&gt;return &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;return &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;span style="color:#008000;"&gt;Pendientes&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;Lo que quedaría pendiente, y si alguien lo completa les agradecería incluya un comentario es:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Probar con versiones diferentes de JRE.&lt;/li&gt;&lt;li&gt;Investigar en versiones anteriores de iText si ya estaba esta característica incluida.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;em&gt;So far, so good!&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="font-size:78%;color:#800000;"&gt;Imágenes by &lt;/span&gt;&lt;a target="_blank" href="http://es.tinypic.com/"&gt;&lt;span style="font-size:78%;color:#800000;"&gt;Tinypic&lt;/span&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-5071148650919351173?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A1a_ZtbSNfKaafY8gwKCODvlBdo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A1a_ZtbSNfKaafY8gwKCODvlBdo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A1a_ZtbSNfKaafY8gwKCODvlBdo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A1a_ZtbSNfKaafY8gwKCODvlBdo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/12/firma-digital-en-pdf.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-3668285468259024650</guid><pubDate>Fri, 28 Nov 2008 11:33:00 +0000</pubDate><atom:updated>2009-05-15T10:06:58.421-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Applet</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Desarrollo</category><category domain="http://www.blogger.com/atom/ns#">Informática</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>Applets - Ayudando el Deployment</title><description>&lt;p&gt;&lt;img align="left" src="http://i38.tinypic.com/4m3xx.jpg" width="96" height="127" /&gt; Para complementar el artículo anterior acerca de &lt;a target="_blank" href="http://gsuhit.blogspot.com/2008/11/jtwain-utilizando-el-scanner-desde-java.html"&gt;JTwain&lt;/a&gt;, es que escribo este nuevo, incorporando varios tips importantes en el momento de poner en producción un applet, especialmente si éste debe tener acceso a ciertos recursos locales de la máquina cliente, o ejecutar acciones que requieran de permisos especiales. &lt;/p&gt;&lt;p&gt;También abordo temas como el empaquetado (en archivos &lt;a href="http://es.wikipedia.org/wiki/Jar"&gt;JAR&lt;/a&gt;) con librerías externas, y un método fácil y rápido de testing y debug, utilizando la consola de Java standard.&lt;/p&gt;&lt;span class="fullpost"&gt;&lt;h5&gt;&lt;span style="color:#008000;"&gt;Primero - Packaging (Empaquetado)&lt;/span&gt;&lt;/h5&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_HqYM3PA8MJk/SS_XkLmtCPI/AAAAAAAAB_M/i0aLOEMaGYk/s1600-h/JAR%5B8%5D.jpg"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="JAR" align="left" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SS_Xkot8rKI/AAAAAAAAB_Q/ko2YImkqbEw/JAR_thumb%5B6%5D.jpg?imgmax=800" width="40" height="48" /&gt;&lt;/a&gt; Cuando terminamos de desarrollar un applet, y debemos empezar a probarlo dentro del contexto de la aplicación de negocios, se hace necesario empaquetarlo en un archivo &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Jar"&gt;JAR&lt;/a&gt; (no entraré en detalles de porqué, dado que hay mucha &lt;a target="_blank" href="http://java.sun.com/docs/books/tutorial/deployment/jar/"&gt;información&lt;/a&gt; al respecto). Lo que ocurre normalmente, es que en nuestro ambiente de desarrollo, el applet funciona perfectamente, pero cuando lo empaquetamos y lo colocamos en un sitio, comienzan los problemas. Uno de los errores mas comunes es que en el empaquetado nos olvidemos de hacer referencia a las librerías externas utilizadas en el desarrollo y que se necesitan en tiempo de &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Runtime"&gt;runtime&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&lt;img align="left" src="http://i34.tinypic.com/f3urdd.jpg" /&gt;Para solucionar esto, y evitar que el JAR generado sea muy grande, se pueden colocar las librerías mencionadas (JAR de éstas) en una ubicación específica en el mismo sitio, y hacer referencia a ellas en nuestro applet a través del archivo &lt;a target="_blank" href="http://java.sun.com/docs/books/tutorial/deployment/jar/manifestindex.html"&gt;MANIFEST.MF&lt;/a&gt;, incluyendo la ruta en la propiedad Class-Path. Por ejemplo el archivo quedaría: &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier;"&gt;Manifest-Version: 1.0&lt;/span&gt;&lt;span style="font-family:Courier;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier;"&gt;Main-Class: MiEspacioDeNombres.MiClase.class&lt;br /&gt;Class-Path: lib_externa1.jar lib_externa2.jar lib_externa3.jar&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;img align="left" src="http://i34.tinypic.com/f3urdd.jpg" /&gt;Algunos detalles importantes son que la separación de los JAR debe ser con espacios, la lista NO debe ser en una sola línea si hay varios JAR (el largo de cada fila no debería superar los 80 caracteres, y cuando pasamos a la fila de abajo, debemos dejar un espacio inicial para que sea reconocida. Un ejemplo completo se puede descargar de &lt;a target="_blank" href="http://rapidshare.com/files/167887716/MANIFEST.MF.html"&gt;aquí&lt;/a&gt;. En este ejemplo las librerías se deberían ubicar en el mismo directorio del JAR de nuestro applet. &lt;/p&gt;&lt;h5&gt;&lt;span style="color:#008000;"&gt;Segundo - Permisos de Ejecución&lt;/span&gt;&lt;/h5&gt;&lt;p&gt;Si el applet no accede a ningún recurso local de la máquina cliente donde&lt;img align="right" src="http://i25.tinypic.com/2n6ckr6.jpg" width="103" height="105" /&gt; ejecuta, no habrá problemas con los permisos de ejecución, de otra forma, es necesario agregar esos permisos en el archivo&lt;span style="font-family:Courier;"&gt; &lt;strong&gt;java.policy&lt;/strong&gt;&lt;/span&gt;, ubicado en el directorio &lt;span style="font-family:Courier;"&gt;&lt;strong&gt;C:\Archivos de programa\Java\jre&amp;lt;version&amp;gt;\lib\security&lt;/strong&gt;&lt;/span&gt; (obviamente si la distribución del sistema operativo es en inglés será C:\Programs Files). Allí se deben agregar los permisos necesarios de acuerdo a nuestras necesidades. En &lt;a target="_blank" href="http://java.sun.com/developer/onlineTraining/Programming/JDCBook/appA.html"&gt;ésta página&lt;/a&gt; encontrarán detalles de suma utilidad para este tema. Por supuesto que una salida rápida es agregar permisos para todo de la forma:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier;"&gt;&lt;strong&gt;permission java.security.AllPermission;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img align="left" src="http://i34.tinypic.com/f3urdd.jpg" /&gt;Esto soluciona rápidamente el problema de funcionamiento, pero abre la puerta a potenciales ataques malintencionados. Mi recomendación es que se tomen el trabajo de ir probando (si al menos no tienen claro que permisos necesitan) y habilitando solo lo necesario. Para este trabajo es útil el siguiente punto de &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Testing"&gt;testing&lt;/a&gt; y &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Debug"&gt;debug&lt;/a&gt;.&lt;/p&gt;&lt;h5&gt;&lt;span style="color:#008000;"&gt;Tercero - Testing y Debug&lt;/span&gt;&lt;/h5&gt;&lt;p&gt;&lt;img align="left" src="http://i35.tinypic.com/k35gmf.jpg" width="68" height="68" /&gt; Cuando desarrollamos un applet utilizamos una versión específica de Java. Otro problema común es que no sabemos cual es la versión instalada en la máquina cliente que lo ejecutará. Para evitar malos resultados, es necesario entonces probar el applet con diferentes versiones &lt;a target="_blank" href="http://en.wikipedia.org/wiki/JVM"&gt;JVM&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;Para esto es muy útil:&lt;img align="right" src="http://i34.tinypic.com/f3urdd.jpg" /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Habilitar la consola de Java en tiempos de ejecución &lt;/li&gt;&lt;li&gt;Ir cambiando la versión de java, con la que el navegador utilizado en las pruebas, ejecutará el applet. &lt;/li&gt;&lt;/ol&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="100%"&gt;&lt;p&gt;Para lo primero se debe ingresar a &lt;strong&gt;Panel de Control &amp;gt; Java &amp;gt; Avanzado&lt;/strong&gt; y habilitar la consola de la forma:&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_HqYM3PA8MJk/SS_rhDq-xyI/AAAAAAAAB_s/rH19IWIdlP8/s1600-h/Consola%5B9%5D.jpg"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="Consola" src="http://lh5.ggpht.com/_HqYM3PA8MJk/SS_Xl45q3DI/AAAAAAAAB_w/DVJtbKaNV8c/Consola_thumb%5B7%5D.jpg?imgmax=800" width="381" height="259" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="100%"&gt;Para lo segundo, en &lt;strong&gt;Panel de Control &amp;gt; Java &amp;gt; Java&lt;/strong&gt;, se habilita o deshabilita la versión que deseamos utilizar con el navegador, de la forma:&lt;a href="http://lh4.ggpht.com/_HqYM3PA8MJk/SS_Xmh6iTtI/AAAAAAAAB_0/ZEH5U4kzQnI/s1600-h/Consola_Ver%5B6%5D.jpg"&gt;&lt;br /&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="Consola_Ver" src="http://lh3.ggpht.com/_HqYM3PA8MJk/SS_XnAbTN1I/AAAAAAAAB_4/r53UEo7Gr-o/Consola_Ver_thumb%5B4%5D.jpg?imgmax=800" width="310" height="168" /&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Nota&lt;/strong&gt;: Es necesario cerrar el navegador cada prueba que hagamos para que no use caché.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="100%"&gt;Luego, cuando ejecutamos el applet desde el navegador, llamando a la página donde se encuentra, Java abre automáticamente la Consola y muestra allí cualquier excepción que se produzca, tanto por falta de permisos como por fallas del funcionamiento propio del applet (faltas de librerías externas, etc.).&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_HqYM3PA8MJk/SS_Xn8myj8I/AAAAAAAAB_8/cNyCNg4Bst8/s1600-h/Consola_Debug%5B4%5D.jpg"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="Consola_Debug" src="http://lh3.ggpht.com/_HqYM3PA8MJk/SS_Xosh9RwI/AAAAAAAACAA/atMaxQMTO-8/Consola_Debug_thumb%5B2%5D.jpg?imgmax=800" width="215" height="244" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;So far, so good!&lt;/p&gt;&lt;p align="right"&gt;&lt;span style="font-size:78%;color:#800000;"&gt;&lt;em&gt;Images by &lt;a target="_blank" href="http://es.tinypic.com/"&gt;Tinypic&lt;/a&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-3668285468259024650?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GDjEsw7sdz5Fv3dgL9X20PzSPGQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GDjEsw7sdz5Fv3dgL9X20PzSPGQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GDjEsw7sdz5Fv3dgL9X20PzSPGQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GDjEsw7sdz5Fv3dgL9X20PzSPGQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/11/applets-ayudando-el-deployment.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-7702017904071489259</guid><pubDate>Sat, 08 Nov 2008 02:06:00 +0000</pubDate><atom:updated>2008-11-07T23:13:59.503-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Informática</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>Comparación de Navegadores</title><description>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_HqYM3PA8MJk/SRT0EZ7HCDI/AAAAAAAABlA/nRvpHGS_txA/s1600-h/Logos4.gif"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="Logos" align="left" src="http://lh5.ggpht.com/_HqYM3PA8MJk/SRT0FKaYPnI/AAAAAAAABlE/zU5NmF0P7iI/Logos_thumb2.gif?imgmax=800" width="130" height="40" /&gt;&lt;/a&gt; Desde hace buen tiempo que vengo probando los 3 navegadores mas usados últimamente en &lt;a href="http://www.microsoft.com/"&gt;Windows&lt;/a&gt;, o al menos los 3 mas nombrados: &lt;a target="_blank" href="http://www.microsoft.com/"&gt;Internet Explorer - IE (Microsoft)&lt;/a&gt;, &lt;a target="_blank" href="http://www.mozilla-europe.org/es/firefox/"&gt;Firefox (Mozilla)&lt;/a&gt; y &lt;a target="_blank" href="http://www.google.com/chrome"&gt;Chrome (Google)&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Como siempre ocurre, existen pro y contras en cada uno, y aquí enumeraré algunas de esas características, como ayuda para seleccionar uno de los 3, de acuerdo a cada necesidad.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Tabla comparativa&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Esta tabla comparativa permite tener una idea rápida de los pro y contras de cada navegador:&lt;/p&gt;&lt;span class="fullpost"&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="5%" align="middle"&gt;&lt;/td&gt;&lt;td width="20%" align="middle"&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Característica&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td width="25%" align="middle"&gt;&lt;a href="http://lh4.ggpht.com/_HqYM3PA8MJk/SRT0Fpjhl3I/AAAAAAAABlI/h4c8IsM0EYQ/s1600-h/Chrome9.gif"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="Chrome" src="http://lh5.ggpht.com/_HqYM3PA8MJk/SRT0GK0w2yI/AAAAAAAABlM/-lgZe8zM-Q0/Chrome_thumb5.gif?imgmax=800" width="40" height="40" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;td width="25%" align="middle"&gt;&lt;a href="http://lh5.ggpht.com/_HqYM3PA8MJk/SRT0Gmg-mKI/AAAAAAAABlQ/Hpa4dKoIW-Q/s1600-h/Firefox3.gif"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="Firefox" src="http://lh3.ggpht.com/_HqYM3PA8MJk/SRT0HKk2LOI/AAAAAAAABlU/8k4suNcGwdU/Firefox_thumb1.gif?imgmax=800" width="40" height="40" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;td width="25%" align="middle"&gt;&lt;a href="http://lh6.ggpht.com/_HqYM3PA8MJk/SRT0HmjbT_I/AAAAAAAABlY/I7rENHKts_E/s1600-h/IE6.gif"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="IE" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SRT0IEAtAsI/AAAAAAAABlc/XsmAb4z9Rdo/IE_thumb2.gif?imgmax=800" width="40" height="40" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="43"&gt;&lt;a href="http://lh3.ggpht.com/_HqYM3PA8MJk/SRT0IaS5DII/AAAAAAAABlg/4LuGzbba6yw/s1600-h/ok3.gif"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="ok" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SRT0I3FG5OI/AAAAAAAABlk/1MVZ1NSPYJM/ok_thumb1.gif?imgmax=800" width="24" height="24" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;td valign="top" width="99"&gt;&lt;strong&gt;Gráfica&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="94"&gt;Diseño minimalista. Cambio algunos conceptos arraigados de otros navegadores.&lt;/td&gt;&lt;td valign="top" width="59"&gt;Permite personalizar el diseño gráfico a través de plantillas que se descargan del &lt;a target="_blank" href="https://addons.mozilla.org/es-ES/firefox/browse/type:2"&gt;site&lt;/a&gt;.&lt;/td&gt;&lt;td valign="top" width="59"&gt;No permite cambios además de los colores básicos desde &lt;a target="_blank" href="http://www.microsoft.com/"&gt;Windows&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="43"&gt;&lt;a href="http://lh3.ggpht.com/_HqYM3PA8MJk/SRT0IaS5DII/AAAAAAAABlg/4LuGzbba6yw/s1600-h/ok3.gif"&gt;&lt;img border="0" alt="ok" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SRT0I3FG5OI/AAAAAAAABlk/1MVZ1NSPYJM/ok_thumb1.gif?imgmax=800" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="99"&gt;&lt;strong&gt;Soporte &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Applet"&gt;Applet&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="94"&gt;Si - Pero solo versión de java &lt;a target="_blank" href="https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jre-6u10-oth-JPR@CDS-CDS_Developer"&gt;versión 1.6.0_10-rc-b28&lt;/a&gt; (mas adelante explico por que).&lt;/td&gt;&lt;td valign="top" width="59"&gt;Si - Desde versión 1.3 probé que funciona bien.&lt;/td&gt;&lt;td valign="top" width="59"&gt;Si - Desde versión 1.3 probé que funciona bien.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="43"&gt;&lt;a href="http://lh3.ggpht.com/_HqYM3PA8MJk/SRT0IaS5DII/AAAAAAAABlg/4LuGzbba6yw/s1600-h/ok3.gif"&gt;&lt;img border="0" alt="ok" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SRT0I3FG5OI/AAAAAAAABlk/1MVZ1NSPYJM/ok_thumb1.gif?imgmax=800" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="99"&gt;&lt;strong&gt;Soporte &lt;a href="http://es.wikipedia.org/wiki/ActiveX"&gt;ActiveX&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="94"&gt;No&lt;/td&gt;&lt;td valign="top" width="59"&gt;No&lt;/td&gt;&lt;td valign="top" width="59"&gt;Si&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="43"&gt;&lt;a href="http://lh3.ggpht.com/_HqYM3PA8MJk/SRT0IaS5DII/AAAAAAAABlg/4LuGzbba6yw/s1600-h/ok3.gif"&gt;&lt;img border="0" alt="ok" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SRT0I3FG5OI/AAAAAAAABlk/1MVZ1NSPYJM/ok_thumb1.gif?imgmax=800" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="99"&gt;&lt;strong&gt;Soporte &lt;a target="_blank" href="http://es.wikipedia.org/wiki/PDF"&gt;PDF&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="94"&gt;Si&lt;/td&gt;&lt;td valign="top" width="59"&gt;Si&lt;/td&gt;&lt;td valign="top" width="59"&gt;Si&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="43"&gt;&lt;a href="http://lh3.ggpht.com/_HqYM3PA8MJk/SRT0IaS5DII/AAAAAAAABlg/4LuGzbba6yw/s1600-h/ok3.gif"&gt;&lt;img border="0" alt="ok" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SRT0I3FG5OI/AAAAAAAABlk/1MVZ1NSPYJM/ok_thumb1.gif?imgmax=800" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="99"&gt;&lt;strong&gt;Soporte &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Adobe_Flash"&gt;Flash&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="94"&gt;Si&lt;/td&gt;&lt;td valign="top" width="59"&gt;Si&lt;/td&gt;&lt;td valign="top" width="59"&gt;Si&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="43"&gt;&lt;a href="http://lh3.ggpht.com/_HqYM3PA8MJk/SRT0IaS5DII/AAAAAAAABlg/4LuGzbba6yw/s1600-h/ok3.gif"&gt;&lt;img border="0" alt="ok" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SRT0I3FG5OI/AAAAAAAABlk/1MVZ1NSPYJM/ok_thumb1.gif?imgmax=800" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="99"&gt;&lt;strong&gt;Rapidez (de 1 a 10)&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="94"&gt;9&lt;/td&gt;&lt;td valign="top" width="59"&gt;7&lt;/td&gt;&lt;td valign="top" width="59"&gt;8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="43"&gt;&lt;a href="http://lh3.ggpht.com/_HqYM3PA8MJk/SRT0IaS5DII/AAAAAAAABlg/4LuGzbba6yw/s1600-h/ok3.gif"&gt;&lt;img border="0" alt="ok" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SRT0I3FG5OI/AAAAAAAABlk/1MVZ1NSPYJM/ok_thumb1.gif?imgmax=800" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="99"&gt;&lt;strong&gt;&lt;a target="_blank" href="http://es.wikipedia.org/wiki/Usabilidad#Definiciones_formales"&gt;Usabilidad&lt;/a&gt; (de 1 a 10)&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="94"&gt;7 (Cambió algunas convenciones ya establecidas por los demás navegadores)&lt;/td&gt;&lt;td valign="top" width="59"&gt;9&lt;/td&gt;&lt;td valign="top" width="59"&gt;9&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="43"&gt;&lt;a href="http://lh3.ggpht.com/_HqYM3PA8MJk/SRT0IaS5DII/AAAAAAAABlg/4LuGzbba6yw/s1600-h/ok3.gif"&gt;&lt;img border="0" alt="ok" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SRT0I3FG5OI/AAAAAAAABlk/1MVZ1NSPYJM/ok_thumb1.gif?imgmax=800" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="99"&gt;&lt;strong&gt;Lengüetas&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="94"&gt;Si&lt;/td&gt;&lt;td valign="top" width="59"&gt;Si&lt;/td&gt;&lt;td valign="top" width="59"&gt;Si (pero desde versión 7 en adelante)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="43"&gt;&lt;a href="http://lh3.ggpht.com/_HqYM3PA8MJk/SRT0IaS5DII/AAAAAAAABlg/4LuGzbba6yw/s1600-h/ok3.gif"&gt;&lt;img border="0" alt="ok" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SRT0I3FG5OI/AAAAAAAABlk/1MVZ1NSPYJM/ok_thumb1.gif?imgmax=800" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="99"&gt;&lt;strong&gt;Robustez (de 1 a 10)&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="94"&gt;8&lt;/td&gt;&lt;td valign="top" width="59"&gt;9&lt;/td&gt;&lt;td valign="top" width="59"&gt;9&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="43"&gt;&lt;a href="http://lh3.ggpht.com/_HqYM3PA8MJk/SRT0IaS5DII/AAAAAAAABlg/4LuGzbba6yw/s1600-h/ok3.gif"&gt;&lt;img border="0" alt="ok" src="http://lh6.ggpht.com/_HqYM3PA8MJk/SRT0I3FG5OI/AAAAAAAABlk/1MVZ1NSPYJM/ok_thumb1.gif?imgmax=800" width="24" height="24" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="99"&gt;&lt;strong&gt;Estabilidad (de 1 a 10)&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="94"&gt;9&lt;/td&gt;&lt;td valign="top" width="59"&gt;7&lt;/td&gt;&lt;td valign="top" width="59"&gt;Versión 6 - 9&lt;br /&gt;Versión 7 - 7&lt;br /&gt;Versión 8 - 6&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;El análisis podría seguir, con varios puntos mas, pero con estos desarrollados creo que se pueden sacar algunas conclusiones.&lt;/p&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt;Temas Importantes&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img align="left" src="http://i35.tinypic.com/1hbk7p.jpg" width="71" height="71" /&gt; Un tema importante que agregó Chrome, es que cada lengüeta se ejecuta como un &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Thread"&gt;thread&lt;/a&gt; separado, lo que permite que si alguna de las lengüetas falla, no es necesario cerrar las demás, solo se cierra esa. Ese es el motivo por el cual fue desarrollado y permite ejecución de applets con la última versión de &lt;a target="_blank" href="http://es.wikipedia.org/wiki/JRE"&gt;JRE&lt;/a&gt; (&lt;a href="https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jre-6u10-oth-JPR@CDS-CDS_Developer"&gt;versión 1.6.0_10-rc-b28&lt;/a&gt;). Esta versión hace factible esta característica. De todas formas, "&lt;em&gt;no todo lo que brilla es oro&lt;/em&gt;". Me pasó algunas veces que al fallar una lengüeta, igualmente tuve que cerrar todas las demás. Otro tema destacable es que es &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Open_source"&gt;Open Source&lt;/a&gt;, por lo que puede ser descargado el código fuente para generar una versión de navegador personalizada.&lt;/p&gt;&lt;p&gt;Otro tema relevante de mencionar es el soporte de &lt;a target="_blank" href="http://es.wikipedia.org/wiki/ActiveX"&gt;ActiveX&lt;/a&gt;. No se la&lt;img align="right" src="http://www.freedownloadmanager.org/es/downloads/images/windows.gif" width="52" height="52" /&gt; causa, aunque se me ocurre que es netamente comercial (licenciamiento), por el que &lt;a href="http://www.mozilla-europe.org/es/firefox/"&gt;Firefox (Mozilla)&lt;/a&gt; o &lt;a href="http://www.google.com/chrome"&gt;Chrome (Google)&lt;/a&gt; NO soportan ActiveX. La realidad indica que existen varias soluciones web que se basan en &lt;a href="http://es.wikipedia.org/wiki/ActiveX"&gt;ActiveX&lt;/a&gt;, lo que hace que estos navegadores pierdan mercado con respecto al &lt;a href="http://www.microsoft.com/"&gt;IE (Microsoft)&lt;/a&gt;. Quizá alguien pueda comentarme cual es el motivo real de este tema.&lt;/p&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt;Conclusiones&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img align="left" src="http://i33.tinypic.com/14xld6s.jpg" /&gt; Si el objetivo del navegador es para acceso a &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Webmail"&gt;webmail&lt;/a&gt;, lectura de diarios on line, búsqueda de información en general, Chrome es una buena opción, dado que es un navegador liviano, rápido, y con su diseño minimalista (y opciones reducidas también), hace la vida fácil a los usuario inexpertos. Una vez que se acostumbran a la nueva propuesta de diseño, es fácil de manejar y configurar.&lt;/p&gt;&lt;p&gt;&lt;img align="left" src="http://i33.tinypic.com/14xld6s.jpg" /&gt; Si usa &lt;a href="http://www.microsoft.com/"&gt;Windows&lt;/a&gt; como sistema operativo, &lt;a href="http://www.microsoft.com/"&gt;IE (Microsoft)&lt;/a&gt; viene incluido en él. Por lo que al instalar el sistema operativo, también se configura el navegador. Esto hace que no se necesite descargar ni instalar nada externo. Facilita la instalación y soporta tanto &lt;a href="http://es.wikipedia.org/wiki/Applet"&gt;Applet&lt;/a&gt; como &lt;a href="http://es.wikipedia.org/wiki/ActiveX"&gt;ActiveX&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&lt;img align="left" src="http://i33.tinypic.com/14xld6s.jpg" /&gt;Si es un fanático de la imagen, &lt;a href="http://www.mozilla-europe.org/es/firefox/"&gt;Firefox (Mozilla)&lt;/a&gt; le dará a través de los temas y complementos, gran variedad de opciones para jugar.&lt;/p&gt;&lt;p&gt;Ahora, decida y disfrute.&lt;/p&gt;&lt;p&gt;So far, So good!&lt;/p&gt;&lt;p align="right"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#800000;"&gt;Imágenes&lt;/span&gt; by &lt;/span&gt;&lt;a target="_blank" href="http://es.tinypic.com/"&gt;&lt;span style="font-size:78%;"&gt;Tinypic&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-7702017904071489259?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5HVcJhMZ_p5edK45vlNgP_hpVDg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5HVcJhMZ_p5edK45vlNgP_hpVDg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5HVcJhMZ_p5edK45vlNgP_hpVDg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5HVcJhMZ_p5edK45vlNgP_hpVDg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/11/comparacin-de-navegadores.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-6489128363210220615</guid><pubDate>Wed, 05 Nov 2008 22:29:00 +0000</pubDate><atom:updated>2009-05-15T10:07:37.867-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Informática</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>JTwain - Utilizando el scanner desde Java</title><description>&lt;p&gt;&lt;img align="left" src="http://i22.tinypic.com/6ye4nq.jpg" width="146" height="131" /&gt; Con motivo de una consulta, estuve probando y analizando librerías, algunas gratuitas y otras licenciadas, para el manejo de scanners en Java. Todas ofrecen características similares y permiten manejar un scanner bajo el standard &lt;a target="_blank" href="http://www.twain.org/"&gt;TWAIN&lt;/a&gt;, claro que con algunas diferencias sustanciales, las cuales son relevantes en momento de seleccionar la correcta para nuestro proyecto. &lt;/p&gt;&lt;p&gt;Aquí expongo algunas experiencias de la librería seleccionada en mi caso y comparto información útil y ejemplos, para aquellos que necesiten desarrollar alguna aplicación basada en este tema. Además dejo referencias de otras librerías, y temas relacionados, como el reconocimiento de &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Codigos_de_barras"&gt;códigos de barras&lt;/a&gt; de las imágenes capturadas y &lt;a target="_blank" href="http://es.wikipedia.org/wiki/OCR"&gt;OCR&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Librerías&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;span class="fullpost"&gt;&lt;p&gt;Algunas librerías que puedo mencionar, son:&lt;/p&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="5%"&gt;&lt;/td&gt;&lt;td valign="top" width="15%"&gt;&lt;span style="color:#009900;"&gt;&lt;strong&gt;Librería&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td valign="top" width="80%"&gt;&lt;span style="color:#009900;"&gt;&lt;strong&gt;Descripción&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="5%"&gt;&lt;a href="http://lh6.ggpht.com/_HqYM3PA8MJk/SRIeKlgVVnI/AAAAAAAABk0/YHHeZ4s8474/s1600-h/image%5B3%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border="0" alt="image" src="http://lh4.ggpht.com/_HqYM3PA8MJk/SRIeLNu1dzI/AAAAAAAABk4/C5np9c_i3Uk/image_thumb%5B1%5D.png?imgmax=800" width="29" height="29" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;td valign="top" width="15%"&gt;&lt;a target="_blank" href="http://www.mms-computing.co.uk/"&gt;mmscomputing&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="80%"&gt;Es una librería &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Open_source"&gt;Open Source&lt;/a&gt;, que además del manejo de scanner para Windows, implementa Sane (manejo de scanner para Linux), fax, etc. Está disponible para Java y funciona perfectamente con JRE 1.4.2 o superior. Tiene un foro bastante completo y el coordinador (Michael Meiwald) responde muy rápidamente ante consultas. Sus respuestas son de gran ayuda. Además, existen ejemplos de uso de la librería muy completos y operativos, que ayudan mucho en el momento de armar nuestra solución. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="5%"&gt;&lt;a href="http://lh6.ggpht.com/_HqYM3PA8MJk/SRIeKlgVVnI/AAAAAAAABk0/YHHeZ4s8474/s1600-h/image%5B3%5D.png"&gt;&lt;img border="0" alt="image" src="http://lh4.ggpht.com/_HqYM3PA8MJk/SRIeLNu1dzI/AAAAAAAABk4/C5np9c_i3Uk/image_thumb%5B1%5D.png?imgmax=800" width="29" height="29" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="15%"&gt;&lt;a target="_blank" href="http://asprise.com/product/jtwain/"&gt;JTwain&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="80%"&gt;Es licenciada, y permite el manejo del scanner, además de tratamiento de imágenes TIFF multipágina. El valor depende del modo de licenciamiento, dentro del rango de USD 198 a Euros.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="5%"&gt;&lt;a href="http://lh6.ggpht.com/_HqYM3PA8MJk/SRIeKlgVVnI/AAAAAAAABk0/YHHeZ4s8474/s1600-h/image%5B3%5D.png"&gt;&lt;img border="0" alt="image" src="http://lh4.ggpht.com/_HqYM3PA8MJk/SRIeLNu1dzI/AAAAAAAABk4/C5np9c_i3Uk/image_thumb%5B1%5D.png?imgmax=800" width="29" height="29" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="15%"&gt;&lt;a target="_blank" href="http://www.gnome.sk/"&gt;Morena&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="80%"&gt;Es el sucesor de JavaTwain. También cubre tanto Twain como Sane. Es una librería licenciada&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Existen algunas mas, que no las probé, pero que cubren aproximadamente los mismos temas.&lt;/p&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt;Trabajando con el standard&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Todas las librerías permiten seleccionar el scanner con el que deseamos trabajar, así como el formato de imagen a capturar (JPG, TIFF, etc), calidad y tamaño de la misma.&lt;/p&gt;&lt;p&gt;En el caso de la librería que finalmente recomendé, &lt;a href="http://www.mms-computing.co.uk/"&gt;mmscomputing&lt;/a&gt;, se debe implementar una &lt;span style="font-family:Courier;color:#0000ff;"&gt;&lt;strong&gt;interface&lt;/strong&gt;&lt;/span&gt; en donde existe un método llamado &lt;span style="font-family:Courier;color:#0000ff;"&gt;&lt;strong&gt;negotiate&lt;/strong&gt;&lt;/span&gt;, donde se realizan todos los ajustes de calidad de imagen, tamaño, y algunos otros, de acuerdo al standard TWAIN y las características soportadas de éste en el scanner seleccionado. Por ejemplo:&lt;/p&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="100%"&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:Courier;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; void negotiate(ScannerIOMetadata metadata) {&lt;br /&gt;ScannerDevice sd = metadata.getDevice();&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;try&lt;/span&gt; {&lt;br /&gt;&lt;span style="color:#00ff00;"&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;//Anulo pantalla de configuracion del scanner&lt;br /&gt;&lt;/span&gt;sd.setShowUserInterface(false);&lt;br /&gt;&lt;span style="color:#008000;"&gt;//Seteo que muestre barra progreso del scanner&lt;br /&gt;&lt;/span&gt;sd.setShowProgressBar(true);&lt;br /&gt;&lt;span style="color:#008000;"&gt;//Seteo area de escaneo&lt;/span&gt;&lt;br /&gt;sd.setRegionOfInterest(TopLeft,TopRigth,Width,Heigth);&lt;br /&gt;sd.setResolution(dDPI);&lt;br /&gt;} &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (Exception e) {&lt;br /&gt;addToLog("Error configurando scanner [" + e.getMessage() + "]",true);&lt;br /&gt;metadata.setCancel(true);&lt;br /&gt;} &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (metadata instanceof TwainIOMetadata) {&lt;/span&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;&lt;br /&gt;TwainSource source = null;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;try&lt;/span&gt; {&lt;br /&gt;source = ((TwainIOMetadata) metadata).getSource();&lt;br /&gt;} &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (Exception ex) {&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (source!=&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;) source.setCancel(true);&lt;br /&gt;} &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;&lt;span style="color:#0000ff;"&gt;try&lt;/span&gt; {&lt;br /&gt;&lt;span style="color:#008000;"&gt;/* Habilito esto si deseo saber que está implementado del standard para &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;&lt;span style="color:#008000;"&gt;este scanner&lt;br /&gt;TwainCapability[] cap = source.getCapabilities();&lt;br /&gt;for (int h = 0; h &amp;lt; cap.length; h++) {&lt;br /&gt;System.out.println(cap[h].getName());&lt;br /&gt;}&lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt;source.setShowProgressBar(true);&lt;br /&gt;source.setCapability(TwainConstants.ICAP_UNITS, TwainConstants.TWUN_INCHES); &lt;/span&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;&lt;br /&gt;&lt;span style="color:#008000;"&gt;//Seteo colo de la imágen a capturar&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;br /&gt;if&lt;/span&gt; (isColor) {&lt;br /&gt;source.setCapability(TwainConstants.ICAP_PIXELTYPE, TwainConstants.TWPT_RGB);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier;font-size:78%;"&gt;} &lt;span style="color:#0000ff;"&gt;else if&lt;/span&gt; (isGrayScale) {&lt;br /&gt;source.setCapability(TwainConstants.ICAP_PIXELTYPE, TwainConstants.TWPT_GRAY);&lt;br /&gt;} &lt;span style="color:#0000ff;"&gt;else if&lt;/span&gt; (isBW) {&lt;br /&gt;source.setCapability(TwainConstants.ICAP_PIXELTYPE, TwainConstants.TWPT_BW);&lt;br /&gt;}&lt;br /&gt;} &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (Exception e) {&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (source!=&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;) source.setCancel(true);&lt;br /&gt;addToLog("Error configurando scanner [" + e.getMessage() + "]",true);&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;} &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt;Formatos de Salida&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Si la necesidad es escanear imágenes de una página, lo mejor es utilizar &lt;a target="_blank" href="http://es.wikipedia.org/wiki/JPG"&gt;JPG&lt;/a&gt;, que guarda una buena relación entre tamaño y calidad (es una imagen comprimida con pérdida). &lt;/p&gt;&lt;p&gt;Si la necesidad es escanear imágenes multipágina, es necesario entonces usar &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Tif"&gt;TIFF&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&lt;img align="left" src="http://i29.tinypic.com/xd8sxs.jpg" width="43" height="43" /&gt; Un problema que encontré, es que varias de ellas están generando archivos archivos .&lt;a href="http://es.wikipedia.org/wiki/Tif"&gt;TIFF&lt;/a&gt; pero de la versión mas nueva (6.0) pero el visualizador de &lt;a target="_blank" href="http://www.microsoft.com/"&gt;Windows&lt;/a&gt;, NO lo reconoce, porque por alguna razón nunca se actualizó a ese formato. Conclusión, si se desea visualizar la imagen generada en &lt;a href="http://es.wikipedia.org/wiki/Tif"&gt;TIFF&lt;/a&gt;, ya sea multipágina o no, se debe usar otro software. Por ejemplo yo uso &lt;a target="_blank" href="http://www.irfanview.com/"&gt;IrfanView&lt;/a&gt;, que es gratuito. &lt;/p&gt;&lt;p&gt;Por último, es bueno mencionar, que existen otras opciones de generación que no sean imágenes. Por ejemplo, una opción es &lt;a target="_blank" href="http://es.wikipedia.org/wiki/PDF"&gt;PDF&lt;/a&gt;. Si usamos por ejemplo, una librería gratuita llamada &lt;a target="_blank" href="http://www.lowagie.com/iText/"&gt;iText&lt;/a&gt;, podemos generar documentos &lt;a href="http://es.wikipedia.org/wiki/PDF"&gt;PDF&lt;/a&gt; multipáginas, con el agregado que en este caso podemos incluir imágenes de distintos tamaños, colores y calidades, contrario al caso de &lt;a href="http://es.wikipedia.org/wiki/Tif"&gt;TIFF&lt;/a&gt; donde no es factible. &lt;/p&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt;OCR y Códigos de Barras&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Cuando lo que escaneamos es un formulario por ejemplo, que contiene&lt;img style="WIDTH: 164px; HEIGHT: 65px" align="right" src="http://i15.tinypic.com/6hdguuf.jpg" width="162" height="74" /&gt; uno o más códigos de barra, a veces es útil reconocerlos, y con el valor obtenido, hacer un control para nuestra aplicación. Para ello es necesario otras librerías como por ejemplo &lt;a target="_blank" href="http://www.aspose.com/categories/visual-components/aspose.barcode-for-.net-and-java/default.aspx"&gt;Aspose&lt;/a&gt; (es licenciada con un valor aproximado entre 390 y 1200 Euros, dependiendo del tipo de licenciamiento). Esta librería permite reconocer en una imagen &lt;a href="http://es.wikipedia.org/wiki/JPG"&gt;JPG&lt;/a&gt; o &lt;a href="http://es.wikipedia.org/wiki/Tif"&gt;TIFF&lt;/a&gt; un código de barras de diferentes tipos (&lt;a target="_blank" href="http://es.wikipedia.org/wiki/Code128"&gt;CODE128&lt;/a&gt;, &lt;a target="_blank" href="http://es.wikipedia.org/wiki/C%C3%B3digo_de_barras"&gt;PDF417&lt;/a&gt;, etc). &lt;/p&gt;&lt;p&gt;El funcionamiento es muy sencillo, dado que existen primitivas para generar y reconocer códigos, así como también letras (&lt;a href="http://es.wikipedia.org/wiki/OCR"&gt;OCR&lt;/a&gt;), con una buena calidad final.&lt;/p&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt;Comentario Final&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Son varias las opciones existentes, y se pueden combinar de muchas maneras, de tal forma que el proyecto en curso tenga final feliz.&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;So far, So good!&lt;/span&gt;&lt;/p&gt;&lt;p align="right"&gt;&lt;em&gt;&lt;span style="font-size:85%;color:#990000;"&gt;Imágenes by &lt;/span&gt;&lt;/em&gt;&lt;a href="http://es.tinypic.com/"&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;TinyPic&lt;/span&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-6489128363210220615?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Rda8jNkGfSvN35-NGUovLxJrHQE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Rda8jNkGfSvN35-NGUovLxJrHQE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Rda8jNkGfSvN35-NGUovLxJrHQE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Rda8jNkGfSvN35-NGUovLxJrHQE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/11/jtwain-utilizando-el-scanner-desde-java.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">20</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-2934920036205189560</guid><pubDate>Tue, 09 Sep 2008 23:31:00 +0000</pubDate><atom:updated>2008-09-09T19:35:33.143-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Informática</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>Web Services con Visual Studio 2005</title><description>&lt;p&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt;&lt;a href="http://lh5.ggpht.com/gsuhit/SMcHQ2birDI/AAAAAAAABQM/s1hI11Rp2ak/s1600-h/VS2005_2%5B10%5D.jpg"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="VS2005_2" align="left" src="http://lh4.ggpht.com/gsuhit/SMcHR6flG2I/AAAAAAAABQQ/j0PR0fCU16I/VS2005_2_thumb%5B8%5D.jpg?imgmax=800" width="126" height="155" /&gt;&lt;/a&gt; Errores inesperados&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Días atrás me encontré con un error inesperado cuando estaba consumiendo un &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Servicio_Web"&gt;Web Service&lt;/a&gt; de un tercero, al cual no tenía la posibilidad de acceder como para pedir ningún tipo de revisión. &lt;/p&gt;&lt;p&gt;Como comentario adicional antes de seguir en el desarrollo de éste tema, me gustaría hacer referencia al &lt;a target="_blank" href="http://gsuhit.blogspot.com/2008/09/blog-y-redes-sociales-por-qu.html"&gt;artículo anterior&lt;/a&gt;, donde hablo acerca de las facilidades actuales para los programadores, en la búsqueda de soluciones en línea ante problemas inesperados. En otra época, este inconveniente posiblemente hubiera retrasado el desarrollo quizá varios días, mientras que en la actualidad fueron un par de horas, de búsqueda en foros, blogs, etc., mas pruebas. &lt;/p&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt;El problema&lt;/strong&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;img align="left" src="http://i38.tinypic.com/2d83kmu.jpg" /&gt; Consistía en que utilizando &lt;a target="_blank" href="http://www.microsoft.com/spanish/msdn/vs2005/default.mspx"&gt;Visual Studio 2005&lt;/a&gt;, herramienta de desarrollo de &lt;a target="_blank" href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt;, generaba el proxy de conexión a un &lt;a href="http://es.wikipedia.org/wiki/Servicio_Web"&gt;Web Service&lt;/a&gt; de un tercero sin problemas, automáticamente como lo permite este &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Entorno_de_desarrollo_integrado"&gt;IDE&lt;/a&gt; en particular. Luego programaba la utilización de un método específico, y compilaba la aplicación sin errores. El error surgía cuando instanciaba el objeto del &lt;a href="http://es.wikipedia.org/wiki/Servicio_Web"&gt;Web Service&lt;/a&gt;, de la forma:&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (TipoWS ws = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; TipoWS()) { }&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;La &lt;strong&gt;excepción&lt;/strong&gt; indicada era algo como: &lt;span style="font-family:Courier New;font-size:85%;"&gt;"Message = "No se puede reflejar el método TipoWS.Metodo."&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Y la &lt;strong&gt;InnerException&lt;/strong&gt; indicaba: &lt;span style="font-family:Courier New;font-size:85%;"&gt;InnerException {"El elemento XML 'Datos-Respuesta' del espacio de nombres 'urn:TipoWS' hace referencia a un método y a un tipo. Cambie el nombre del mensaje del método utilizando WebMethodAttribute o cambie el elemento raíz del tipo utilizando XmlRootAttribute."}&lt;/span&gt; &lt;/p&gt;&lt;p&gt;Luego de leer varios casos similares, y con la imposibilidad de acceder a modificar el WSDL del &lt;a href="http://es.wikipedia.org/wiki/Servicio_Web"&gt;Web Service&lt;/a&gt;, encontré algunos indicios de solución, que me llevaron a resolver el tema, así que aquí lo comparto con Uds. por si alguno se encuentra con este inconveniente en el futuro.&lt;/p&gt;&lt;span class="fullpost"&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;&lt;img align="left" src="http://i30.tinypic.com/118qgbc.jpg" width="82" height="82" /&gt;La Solución&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;Consistió simplemente en modificar el nombre en el atributo SoapDocumentMethodAttribute, en uno de los dos métodos en que se referenciaba. Existían dos métodos del &lt;a href="http://es.wikipedia.org/wiki/Servicio_Web"&gt;Web Service&lt;/a&gt; que se generaban en el archivo &lt;strong&gt;Reference.cs&lt;/strong&gt;, de la forma:&lt;/p&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="80%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="100%"&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:78%;"&gt;[&lt;span style="color:#408080;"&gt;System.Web.Services.Protocols&lt;/span&gt;.SoapDocumentMethodAttribute("", RequestNamespace="urn:&lt;span style="color:#ff00ff;"&gt;TipoWS&lt;/span&gt;",&lt;br /&gt;&lt;em&gt;ResponseElementName="&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;Datos-Respuesta&lt;/span&gt;&lt;/strong&gt;",&lt;/em&gt; ResponseNamespace="urn:&lt;span style="color:#ff00ff;"&gt;TipoWS&lt;/span&gt;", Use=&lt;span style="color:#408080;"&gt;System.Web.Services&lt;/span&gt;.&lt;span style="color:#408080;"&gt;Description.SoapBindingUse.Literal&lt;/span&gt;, ParameterStyle=&lt;span style="color:#408080;"&gt;System.Web.Services.Protocols.SoapParameterStyle.Wrapped&lt;/span&gt;)]&lt;br /&gt;[return: &lt;span style="color:#408080;"&gt;System.Xml.Serialization.XmlElementAttribute&lt;/span&gt;("Respuesta", Form=&lt;span style="color:#008080;"&gt;System.Xml.Schema.XmlSchemaForm.Unqualified&lt;/span&gt;)]&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Respuesta &lt;span style="color:#800000;"&gt;&lt;strong&gt;Metodo1&lt;/strong&gt;&lt;/span&gt;([&lt;span style="color:#008080;"&gt;System.Xml.Serialization.XmlElementAttribute&lt;/span&gt;(Form=&lt;span style="color:#408080;"&gt;System.Xml.Schema.XmlSchemaForm.Unqualified&lt;/span&gt;, IsNullable=&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)] Encabezado Encabezado, [System.Xml.Serialization.XmlElementAttribute(Form=&lt;span style="color:#408080;"&gt;System.Xml.Schema.XmlSchemaForm.Unqualified&lt;/span&gt;, IsNullable=&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)] Parametro Parametro, [&lt;span style="color:#408080;"&gt;System.Xml.Serialization.XmlElementAttribute&lt;/span&gt;(Form=&lt;span style="color:#408080;"&gt;System.Xml.Schema.XmlSchemaForm.Unqualified&lt;/span&gt;)] &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; respuesta Respuesta) {&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="100%"&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="100%"&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:78%;"&gt;[&lt;span style="color:#408080;"&gt;System.Web.Services.Protocols&lt;/span&gt;.SoapDocumentMethodAttribute("", RequestNamespace="urn:&lt;span style="color:#ff00ff;"&gt;TipoWS&lt;/span&gt;",&lt;br /&gt;&lt;em&gt;ResponseElementName="&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;Datos-Respuesta&lt;/span&gt;&lt;/strong&gt;",&lt;/em&gt; ResponseNamespace="urn:&lt;span style="color:#ff00ff;"&gt;TipoWS&lt;/span&gt;", Use=&lt;span style="color:#408080;"&gt;System.Web.Services&lt;/span&gt;.&lt;span style="color:#408080;"&gt;Description.SoapBindingUse.Literal&lt;/span&gt;, ParameterStyle=&lt;span style="color:#408080;"&gt;System.Web.Services.Protocols.SoapParameterStyle.Wrapped&lt;/span&gt;)]&lt;br /&gt;[return: &lt;span style="color:#408080;"&gt;System.Xml.Serialization.XmlElementAttribute&lt;/span&gt;("Respuesta", Form=&lt;span style="color:#008080;"&gt;System.Xml.Schema.XmlSchemaForm.Unqualified&lt;/span&gt;)]&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Respuesta &lt;span style="color:#800000;"&gt;&lt;strong&gt;Metodo2&lt;/strong&gt;&lt;/span&gt;([&lt;span style="color:#008080;"&gt;System.Xml.Serialization.XmlElementAttribute&lt;/span&gt;(Form=&lt;span style="color:#408080;"&gt;System.Xml.Schema.XmlSchemaForm.Unqualified&lt;/span&gt;, IsNullable=&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)] Encabezado Encabezado, [System.Xml.Serialization.XmlElementAttribute(Form=&lt;span style="color:#408080;"&gt;System.Xml.Schema.XmlSchemaForm.Unqualified&lt;/span&gt;, IsNullable=&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)] Parametro Parametro, [&lt;span style="color:#408080;"&gt;System.Xml.Serialization.XmlElementAttribute&lt;/span&gt;(Form=&lt;span style="color:#408080;"&gt;System.Xml.Schema.XmlSchemaForm.Unqualified&lt;/span&gt;)] &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; respuesta Respuesta) {&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Los métodos, &lt;strong&gt;&lt;span style="font-family:Courier New;font-size:85%;color:#800000;"&gt;Metodo1&lt;/span&gt;&lt;/strong&gt; y &lt;span style="font-family:Courier New;font-size:85%;color:#800000;"&gt;&lt;strong&gt;Metodo2&lt;/strong&gt;&lt;/span&gt;, en el &lt;span style="color:#008080;"&gt;SoapDocumentMethodAttribute&lt;/span&gt;, hacían referencia a &lt;em&gt;ResponseElementName="&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;Datos-Respuesta&lt;/span&gt;&lt;/strong&gt;".&lt;/em&gt; Esto provocaba el error en tiempo de ejecución antes mencionado. &lt;/p&gt;&lt;p&gt;La solución fue modificar uno de los dos a &lt;em&gt;ResponseElementName="&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;Datos&lt;/span&gt;&lt;/strong&gt;"&lt;/em&gt;, y el restante dejarlo como había sido generado&lt;em&gt;.&lt;/em&gt; &lt;/p&gt;&lt;p&gt;Luego de compilar nuevamente el proyecto, la aplicación funcionó perfectamente. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Conclusiones&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;Puedo mencionar como conclusiones lo siguiente:&lt;/p&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="90%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="5%" align="middle"&gt;&lt;img src="http://i34.tinypic.com/ea4o7b.jpg" /&gt;&lt;/td&gt;&lt;td valign="top" width="95%"&gt;Es una solución factible, y que funciona, teniendo en cuenta la imposibilidad de acceder a modificar el &lt;a href="http://es.wikipedia.org/wiki/Servicio_Web"&gt;Web Service&lt;/a&gt; o mejor dicho la definición &lt;a target="_blank" href="http://es.wikipedia.org/wiki/WSDL"&gt;WSDL&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="5%" align="middle"&gt;&lt;img src="http://i34.tinypic.com/ea4o7b.jpg" /&gt; &lt;/td&gt;&lt;td valign="top" width="95%"&gt;En algún blog leí que el error se producía porque al generarse de esta forma el llamado a los métodos, no se cumplía con cierto estándar, pero no encontré mayor información al respecto como para dar fe de esta afirmación.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="5%" align="middle"&gt;&lt;img src="http://i34.tinypic.com/ea4o7b.jpg" /&gt;&lt;/td&gt;&lt;td valign="top" width="95%"&gt;&lt;p&gt;Aunque leí acerca de los atributos &lt;span style="color:#008080;"&gt;SoapDocumentMethodAttribute&lt;/span&gt;, (aunque en honor a la verdad no demasiado en profundidad) no encontré una razón lógica por la cual se de el error.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="5%" align="middle"&gt;&lt;img src="http://i34.tinypic.com/ea4o7b.jpg" /&gt;&lt;/td&gt;&lt;td valign="top" width="95%"&gt;&lt;p&gt;Tampoco encontré referencias concretas al porqué se genera así el proxy, como para determinar si en el momento de la generación, el programador a través de parámetros de generación, pude exigir chequeos de ésta naturaleza, de tal forma de evitar tener que retocar a mano el archivo generado automáticamente. Especialmente porque cada vez que se refresca la referencia al &lt;a href="http://es.wikipedia.org/wiki/Servicio_Web"&gt;Web Service&lt;/a&gt;, se debe volver a modificar el archivo nuevamente.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Si algún lector tiene una explicación concreta acerca del problema, y una solución potencial, les pido lo publiquen como comentario de tal forma de poder cerrar este tema de la mejor forma posible. Sino, al menos tienen una ayuda para poder cumplir con los tiempos de desarrollo comprometidos :-).&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;color:#800000;"&gt;&lt;em&gt;Imágenes by TinyPic&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;So far, So good.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-2934920036205189560?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Bd4lneWwIkTeMWAU1o6NQ0zP0wg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Bd4lneWwIkTeMWAU1o6NQ0zP0wg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Bd4lneWwIkTeMWAU1o6NQ0zP0wg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Bd4lneWwIkTeMWAU1o6NQ0zP0wg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/09/web-services-con-visual-studio-2005.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-2861858892219195431</guid><pubDate>Tue, 09 Sep 2008 11:17:00 +0000</pubDate><atom:updated>2008-09-09T07:19:51.065-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Informática</category><category domain="http://www.blogger.com/atom/ns#">Vida</category><category domain="http://www.blogger.com/atom/ns#">General</category><title>Blog y Redes Sociales - Por qué?</title><description>&lt;p&gt;&lt;img align="left" src="http://farm3.static.flickr.com/2293/2374826645_1d0e526cb7.jpg?v=0" width="163" height="277" /&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt; Una puerta a nuevas oportunidades&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Hace poco tiempo que comencé a escribir en este blog, y como comenté antes, no se por qué realmente fue que empecé. &lt;/p&gt;&lt;p&gt;La verdad es que luego de empezar, me intrigué en el por qué de un blog. Así fue como encontré varios lugares donde justifican el uso del blog y de las redes sociales para fines más que importantes. Hace unos días atrás leí un &lt;a target="_blank" href="http://feeds.feedburner.com/~r/lndsFeed/~3/380084375/digamosle_a_coca_cola_algo_sobre_como_sa.html"&gt;artículo&lt;/a&gt; de mi amigo Eduardo Díaz, en su &lt;a target="_blank" href="http://www.lnds.net/"&gt;blog&lt;/a&gt;, con un ejemplo práctico de la utilidad de las redes sociales. &lt;/p&gt;&lt;p&gt;Otro ejemplo que me sorprendió, es que empresas informáticas internacionales, analizan los blogs de los candidatos a puestos de trabajo en ellas, como una métrica muy importante a lo hora de la decisión final. El concepto es que una persona que tiene un blog, y mantiene una cierta cantidad importante de subscriptores , se lo puede considerar como "creíble" en el mercado, lo cual asegura que cuando llegue a los potenciales clientes representando a la compañía, se lo reciba de buena forma. Podemos conjeturar mucho acerca de la veracidad de este concepto, pero la realidad es que se aplica. &lt;/p&gt;&lt;p&gt;Algunos Head Hunters, en sus búsquedas de talentos, realizan preselecciones o chequeos de postulantes, en las redes sociales como por ejemplo &lt;a target="_blank" href="http://www.linkedin.com/"&gt;LinkedIn&lt;/a&gt;. Determinan allí si es una persona con buena reputación en el mundo laboral, por ejemplo. &lt;/p&gt;&lt;p&gt;En mi opinión, cualquier persona que sea capaz de compartir algún concepto que le sea útil al menos a un persona, ya justifica el uso de éstas herramientas. Por ejemplo, en un &lt;a href="http://gsuhit.blogspot.com/2008/08/e-mail-bendito-tesoro.html"&gt;artículo anterior&lt;/a&gt;, donde expliqué que tuve un problema con mi mail, encontré la solución en un blog de alguien que compartió su experiencia. Para otro ejemplo, basta con analizar la velocidad de obtención de ayuda para los programadores hoy en día, en comparación con años atrás. Cuando uno se encuentra hoy ante un problema, rápidamente puede encontrar miles de links de ayuda en blogs, foros, etc., que inmediatamente te dan una orientación hacia la solución. En otros tiempos era todo mucho mas lento, y acceder a buenos consejos de ayuda, era en algunas oportunidades, o bien muy caro, o bien, sencillamente imposible. &lt;/p&gt;&lt;p&gt;La pregunta que surge entonces, es como utilizar estas herramientas para mejorar nuestra imagen, o para que sea un medio de acercamiento a nuevas e importantes oportunidades, y como acceder a ellas de una forma sencilla. &lt;/p&gt;&lt;span class="fullpost"&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Redes Sociales&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;Existen diferentes redes sociales, aunque cada una con un enfoque diferente. Ejemplos se pueden mencionar varios, pero a los efectos de éste artículo solo utilizaré los mas conocidos. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="90%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="10%" align="middle"&gt;&lt;a href="http://es-es.facebook.com/"&gt;&lt;img border="0" alt="facebook" src="http://lh4.ggpht.com/gsuhit/SMZbJSGAsjI/AAAAAAAABPw/4rknrW-d8_4/facebook9.gif?imgmax=800" width="93" height="44" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;td valign="top" width="90%"&gt;&lt;p&gt;Una red social en la que luego de registrarse, uno puede conectarse con amigos de todas partes del mundo. Compartir ideas, juegos, foros, crear clubes, compartir fotos, vídeos, etc. Permite de una forma fácil y entretenida, una comunicación en línea con muchas personas simultáneamente, aunque se encuentren en diferentes sitios geográficos. Similar a ésta red, existen otras, en las cuales realmente no he ingresado, debido a que el proceso de mantenimiento a cada red es alto, y prefiero mantener bien actualizadas solo una de cada tipo. Otras redes que puedo mencionar de este tipo son &lt;a target="_blank" href="http://www.hi5.com/"&gt;Hi5&lt;/a&gt;, &lt;a href="http://www.unyk.com/"&gt;Unyx&lt;/a&gt; o &lt;a target="_blank" href="http://www.sonico.com/"&gt;Sonico&lt;/a&gt;. &lt;a target="_blank" href="http://www.sonico.com/"&gt;&lt;/a&gt;La verdad que la decisión de cual usar, dependerá de varios factores. La facilidad de uso puede ser uno, pero a mi criterio, el mas importante, es donde más amigos con las mismas expectativas pueda encontrar, de otra forma, no podría hacer uso de la potencialidad de la misma. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="10%" align="middle"&gt;&lt;a href="http://www.linkedin.com/"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="linkedin" src="http://lh3.ggpht.com/gsuhit/SMZbJqQevgI/AAAAAAAABP0/n2rCSP5vIDU/linkedin4.gif?imgmax=800" width="119" height="32" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;td valign="top" width="90%"&gt;Esta red está orientada a conectar profesionales de diferentes especialidades. Está mas orientada a compartir información laboral, y conseguir contactos que puedan transformase en nuevos negocios. Como comenté antes, este tipo de redes también es utilizado por los buscadores de talentos en la selección de personal. Otra red de este tipo es &lt;a target="_blank" href="http://www.ecademy.com/"&gt;Ecademy&lt;/a&gt;. En éste caso mantengo actualizadas ambas, para mantener mas opciones de nuevas oportunidades laborales abiertas.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Mi consejo es que si alguien ingresa a este tipo de redes, mantenga actualizados sus datos de contacto, porque nunca se sabe el momento en que alguien necesite de nuestros servicios. &lt;/p&gt;&lt;p&gt;Dependiendo de la red seleccionada, el proceso de suscripción es mas o menos costoso, pero en casi todas es bastante intuitivo. Obviamente, de acuerdo al objetivo de su participación en las mismas, deberá completar mas información de un tipo u otra. Si la intención es conectarse para conseguir nuevas oportunidades laborales, cuanto mas claros y explicativos sean los datos referidos a la formación académica y experiencias laborales anteriores, mas posibilidades existen que lo consiga. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Blogs&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/gsuhit/SMZbKDSfYoI/AAAAAAAABP4/BYALDjt1iIg/s1600-h/Logo_Blogger_Solo1.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="Logo_Blogger_Solo" align="left" src="http://lh5.ggpht.com/gsuhit/SMZbKjI8bcI/AAAAAAAABP8/TqXfCg2og0s/Logo_Blogger_Solo_thumb.png?imgmax=800" width="108" height="107" /&gt;&lt;/a&gt;Existen muchas alternativas para desarrollar un blog, cualquiera sea la temática que se desee abordar. Algunas alternativas gratuitas, para la creación y administración de un blog que puedo mencionar son: &lt;a href="http://www.hazblog.com/"&gt;hazblog&lt;/a&gt;, &lt;a href="http://www.blogger.com/"&gt;blogger&lt;/a&gt; de &lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt;, &lt;a href="http://home.services.spaces.live.com/"&gt;spaces lives&lt;/a&gt; de &lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt;, &lt;a href="http://www.soy.es/"&gt;Soy&lt;/a&gt;, entre otros. Particularmente yo utilizo &lt;a href="http://www.blogger.com/"&gt;blogger&lt;/a&gt;, debido a que soy usuario de varios servicios de &lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt;, complementarios al blog, tales como &lt;a href="http://www.picasaweb.com/"&gt;Picasaweb&lt;/a&gt;, &lt;a href="http://www.feedburner.com/"&gt;FeedFurner&lt;/a&gt; o &lt;a href="http://www.gmail.com/"&gt;Gmail&lt;/a&gt;. Con el mismo usuario, puedo acceder a todos estos servicios, para poder agregarle algunas características importantes a mi blog. Además replico el mismo blog en &lt;a href="http://home.services.spaces.live.com/"&gt;spaces lives&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;Para crear un blog, fácil y rápidamente, se pueden usar varios &lt;a href="http://www.ayuda-internet.net/tutoriales/manual-blog-blogger/manual-blog-blogger.html"&gt;tutoriales&lt;/a&gt;, algunos escritos y &lt;a href="http://es.youtube.com/watch?v=DJUgXFfkASk&amp;amp;feature=related"&gt;otros&lt;/a&gt; en &lt;a href="http://es.youtube.com/watch?v=DMTvus69lGA"&gt;vídeo&lt;/a&gt; a través de &lt;a href="http://www.youtube.com/"&gt;Youtube&lt;/a&gt;, que nos enseñan, paso a paso como crear nuestro blog. &lt;/p&gt;&lt;p&gt;Lo primero que se debe hacer es definir el objetivo del blog, y el público potencial. Luego, siguiendo los pasos antes mencionados, definir la imagen (gráfica) mas acorde a nuestro espacio. Para esto se puede utilizar alguna de las plantillas entregadas por los mismos sitios de generación de blog, o buscar plantillas desarrolladas por terceras partes, y que se pueden descargar desde Internet. &lt;/p&gt;&lt;p&gt;Por último, si deseamos completar nuestro blog con algunos atributos importantes, necesitamos utilizar servicios adicionales, como por ejemplo: &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="90%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="10%" align="middle"&gt;&lt;a href="http://www.feedburner.com/"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="feedburner" src="http://lh3.ggpht.com/gsuhit/SMZbLG28OnI/AAAAAAAABQA/lAs-bT_6WRk/feedburner5.gif?imgmax=800" width="65" height="69" /&gt;&lt;/a&gt;&lt;br /&gt;FeedFurner &lt;/td&gt;&lt;td valign="top" width="90%"&gt;&lt;p&gt;Como comenté al comienzo, si nuestro deseo es tener un blog altamente consultado, y que este "valor" sea capitalizado por ejemplo como carta de presentación hacia empresas que busquen "escritores creíbles" y populares, es necesario generar espacios en nuestro blog para que los lectores interesados puedan suscribirse, y de esa forma, sean informadas cada vez que escribimos algo nuevo, de tal forma de facilitar su lectura. Luego, esa "cantidad" o "numero" de personas que se suscriben, es el número mágico que me interesa mostrar al mundo, y eso lo puedo hacer con esta herramienta. Luego de suscribirse a este servicio, uno puede agregar a su blog un contador de subscriptores, configurando el color que mejor que convine con la gráfica seleccionada. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="10%" align="middle"&gt;&lt;a href="http://es.tinypic.com/"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="tinypic" src="http://lh5.ggpht.com/gsuhit/SMZbLkDMwuI/AAAAAAAABQE/NW-9ol6D9-4/tinypic4.gif?imgmax=800" width="103" height="37" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;td valign="top" width="90%"&gt;&lt;p&gt;Es un sitio donde se pueden subir imágenes que luego pueden ser referenciadas desde nuestros artículos, de tal forma de hacer mas atractivos o explicativos los mismos. En el caso de &lt;a href="http://www.blogger.com/"&gt;blogger&lt;/a&gt;, si se utilizan imágenes ubicadas en el computador local, éstas son almacenadas en el servicio web &lt;a href="http://www.picasaweb.com/"&gt;Picasaweb&lt;/a&gt;, en la dirección pública del usuario dueño del blog, generándose una dirección de conexión automática. Además, existen otras opciones de almacenamiento web con el mismo objetivo. Lo que siempre hay que verificar, es si la imagen que usemos tiene licencia de uso libre. Y es práctica común agregar una referencia al final de cada artículo, a la fuente de las imágenes utilizadas. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="10%" align="middle"&gt;&lt;a href="http://www.histats.com/"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="hithats" src="http://lh4.ggpht.com/gsuhit/SMZbLzR-TII/AAAAAAAABQI/DD3WjZOBu5o/hithats5.jpg?imgmax=800" width="121" height="40" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;td valign="top" width="90%"&gt;Este tipo de sitios, nos dan la posibilidad de incrustar contadores de visitas en nuestros sitios, blogs, etc. Permiten, además de seleccionar algún contador que esté de acuerdo a nuestra gráfica, analizar en línea los hits realizados a nuestro espacio, de tal forma de tener claro por ejemplo cual es nuestro público mas frecuente o que tipo de información ha sido mejor recibida por nuestros lectores. Son varios sitios que brindan este tipo de servicios, y la selección estará de acuerdo a la facilidad que cada uno encuentre en el manejo de cada uno. &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;No entraré en detalles de como generar un blog por ejemplo, dado que existen innumerables tutoriales, en incluso vídeos que muestran paso a paso como se crean y actualizan los blogs. Solo deben ingresar por ejemplo a &lt;a href="http://www.youtube.com/"&gt;Youtube&lt;/a&gt;, y escribir en la búsqueda "blogger", para que aparezca una lista importante de vídeos relacionados al tema. &lt;/p&gt;&lt;p&gt;Para encontrar una plantilla mas acorde a sus expectativas, si es que las que están incluidas &lt;a href="http://www.blogger.com/"&gt;blogger&lt;/a&gt; no satisfacen, se pueden &lt;a href="http://btemplates.com/"&gt;descargar&lt;/a&gt; plantillas adicionales de otros espacios. Nuevamente, buscando en Internet encontrarán varias ofertas gratuitas de plantillas. Luego estas plantillas, podrán utilizarlas tal cual están, o podrán modificarlas a gusto, en caso de tener conocimientos avanzados en el tema. Pero, en caso de ser un usuario sin conocimientos en informática, podrá generar un blog elegante, sin ningún tipo de necesidad de aprender detalles complicados. &lt;/p&gt;&lt;p&gt;Por último, para la generación y publicación de artículos en el blog creado, se puede utilizar el editor existente en el mismo espacio (que para los usuarios inexpertos lo recomiendo totalmente) o bien utilizar otro tipo de editores como por ejemplo &lt;a href="http://get.live.com/writer/overview"&gt;Windows Live Writer&lt;/a&gt;, una herramienta de &lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt;. Este tipo de herramientas, tienen la facilidad de administrar mas de un blog a la vez. Esto quiere decir en términos prácticos, que se escribe un artículo una sola vez, y se lo publica en varios blogs, pero en cada uno con su estilo gráfico de acuerdo a lo definido en su creación. Este proceso ahorra mucho tiempo. Como ejemplo les puedo decir que yo utilizo ésta herramienta, y publico los mismos artículos en dos espacios, &lt;a href="http://gsuhit.blogspot.com/"&gt;Informateando...&lt;/a&gt; y &lt;a href="http://gsuhit.spaces.live.com/"&gt;Espacio de Gustavo Suhit&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Consideración Final&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;El proceso de generar subscriptores, y luego mantenerlos no es para nada sencillos. Depende de nuestra tenacidad para mantener el blog actualizado y de nuestra inventiva para publicar temas interesantes de manera medianamente continua. &lt;/p&gt;&lt;p&gt;Y por último tengan en cuenta esta frase de &lt;a href="http://es.wikipedia.org/wiki/Mahatma_Gandhi"&gt;Ghandi&lt;/a&gt;, y que resume para mi de forma genial, lo que una persona puede llegar a sentir, salvando las distancias, cuando comienza este camino: &lt;strong&gt;&lt;em&gt;&lt;span style="color:#008040;"&gt;"Cuando intentas cambiar el mundo, primero la gente te ignora, luego te ridiculiza, después te ataca, después ganas.".&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt; Yo definitivamente estoy en el primer paso :-), y Uds.? &lt;/p&gt;&lt;p align="right"&gt;&lt;em&gt;&lt;span style="font-size:78%;color:#800000;"&gt;Imágenes by &lt;a href="http://es.tinypic.com/"&gt;TinyPic&lt;/a&gt;&lt;/span&gt;&lt;/em&gt; y &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt; &lt;/p&gt;&lt;p&gt;So far, So good.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-2861858892219195431?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RL2ESje2J_cBJb-dgl5-aWuw0TM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RL2ESje2J_cBJb-dgl5-aWuw0TM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RL2ESje2J_cBJb-dgl5-aWuw0TM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RL2ESje2J_cBJb-dgl5-aWuw0TM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/09/blog-y-redes-sociales-por-qu.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-5626649613884951362</guid><pubDate>Sun, 17 Aug 2008 05:52:00 +0000</pubDate><atom:updated>2008-08-18T06:29:12.362-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Informática</category><category domain="http://www.blogger.com/atom/ns#">Vida</category><category domain="http://www.blogger.com/atom/ns#">General</category><title>Contradicción - Empresas Informáticas Lógicas!!</title><description>&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;&lt;img align="left" src="http://i34.tinypic.com/fw3k2u.jpg" width="153" height="145" /&gt; Informática, ciencia lógica o humana?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Desde que tengo uso de razón, he visto y hasta sufrido, que a las empresas informáticas, de cualquier envergadura, las analizan y las tratan como se asume que es la relación del programador con la computadora: puramente lógica y fría. Nada mas lejos de la realidad. Una empresa, cualquiera sea la naturaleza, se basa en &lt;em&gt;&lt;strong&gt;seres humanos&lt;/strong&gt;&lt;/em&gt;. Sin importar el número de personas que la conforman, su éxito, depende en principal medida, de las relaciones humanas. Y aquí llegamos al tema mas complicado: &lt;em&gt;&lt;strong&gt;relaciones humanas (aspectos blandos)&lt;/strong&gt;&lt;/em&gt;. Siempre he dicho, un poco en broma y un poco en serio, y los que me conocen pueden dar fe, que "&lt;em&gt;las cosas son muy simples, los que las complicamos somos los seres humanos&lt;/em&gt;". No se si es muy profunda la reflexión, pero seguro, es bastante cercana a la realidad. &lt;/p&gt;&lt;p&gt;La mezcla de &lt;em&gt;egos, creencias ancestrales erróneas y necedad&lt;/em&gt;, pueden generar un cóctel altamente corrosivo en cualquier organización. Si a esto le sumamos poca claridad en la definición de &lt;em&gt;objetivos&lt;/em&gt; a corto y largo plazo, el tema se complica más. Y finalmente, si la definición de "&lt;em&gt;éxito&lt;/em&gt;" es muy diferente para los miembros de la empresa, es casi un designio de final anticipado.&lt;/p&gt;&lt;p&gt;Nuestra sociedad nos graba a fuego ciertos axiomas de vida, lo que hace que nos mantengamos demasiado rígidos, estructurados, en las relaciones laborales. El problema, es que cuando uno fuerza estas relaciones, inmerso en esta rigidez, muchas veces terminamos "&lt;em&gt;quebrados&lt;/em&gt;", con heridas muy difícil de cerrar. Y lo que es peor, nunca mas será lo mismo, porque la marca de la herida quedará para siempre.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Como enfrentar la rigidez&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Esta termina siendo para mi, la pregunta del millón. &lt;/p&gt;&lt;span class="fullpost"&gt;&lt;p&gt;&lt;img align="left" src="http://i28.tinypic.com/okos2o.jpg" /&gt;Alguna vez, leí en un grafiti algo con lo que me identifiqué: "&lt;strong&gt;&lt;em&gt;no todos los que buscan están perdidos&lt;/em&gt;&lt;/strong&gt;". Y me identifiqué, porque siempre estoy en la búsqueda, pero no por estar disconforme, sino porque quiero mas, ser mas feliz, ser mas completo. &lt;/p&gt;&lt;p&gt;El camino para contrarrestar esta rigidez social, puede tener diferentes nombres: &lt;em&gt;&lt;a href="http://www.biodanza.org/" target="_blank"&gt;biodanza&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/Yoga" target="_blank"&gt;yoga&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/Meditaci%C3%B3n" target="_blank"&gt;meditación&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/Hipnosis" target="_blank"&gt;hipnosis&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/Astrolog%C3%ADa" target="_blank"&gt;astrología&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/Constelaciones_familiares" target="_blank"&gt;constelaciones familiares y/o organizacionales&lt;/a&gt;, deportes, estudio, música&lt;/em&gt;, o el que cada uno elija y lo ayude para abrir la mente a nuevas formas de mejorar la vida. Esto, mas temprano que tarde, hace que se flexibilice nuestra mente, se abra, y se hagan mas fáciles las benditas relaciones humanas...aún en el trabajo. &lt;/p&gt;&lt;p&gt;Algunas personas no creen en "&lt;em&gt;&lt;strong&gt;terapias o actividades alternativas&lt;/strong&gt;&lt;/em&gt;", aunque a mi me gusta llamarlas "&lt;strong&gt;&lt;em&gt;complementarias&lt;/em&gt;&lt;/strong&gt;". Pero luego de haber convivido en diferentes tipos de organizaciones, en distintos países, terminé por convencerme que no son "&lt;em&gt;&lt;strong&gt;opcionales&lt;/strong&gt;&lt;/em&gt;" sino que son "&lt;strong&gt;&lt;em&gt;necesarias&lt;/em&gt;&lt;/strong&gt;". Bajo ningún concepto digo que las formaciones profesionales o las empresas actuales no estén bien desarrolladas, solo digo que necesitan agregar estos &lt;em&gt;&lt;strong&gt;complementos&lt;/strong&gt;&lt;/em&gt; para cubrir las necesidades espirituales de las personas.&lt;/p&gt;&lt;p&gt;Ningún complemento es mejor que otro, solo debemos seleccionar el que más nos ayuda en cada momento. No son conjuntos disjuntos, y a su vez, todas estas actividades también pueden ser complementarias.&lt;/p&gt;&lt;p&gt;Por otra parte, si una persona desea ir por un camino en su vida personal, y manejarse en el "camino de la rigidez social" en los negocios, tarde o temprano sentirá una insatisfacción que terminará contaminando los dos mundos.&lt;/p&gt;&lt;p&gt;&lt;img align="left" src="http://i1.tinypic.com/25iru2x.jpg" width="90" height="103" /&gt;Alguna vez leí una frase de &lt;a href="http://es.wikipedia.org/wiki/Mahatma_Gandhi" target="_blank"&gt;Ghandi&lt;/a&gt; que dice: "&lt;em&gt;&lt;strong&gt;si quieres cambiar al mundo, primero cámbiate a ti mismo&lt;/strong&gt;&lt;/em&gt;". Aquí, analizando mi propuesta, podemos pensar inicialmente que no queremos cambiar el mundo, solo queremos flexibilizarnos ante el medio que nos rodea laboralmente, para sentirnos mejor y plenos. Pero transitivamente llevaremos ese estado conseguido, a nuestra vida cotidiana. Es decir, de alguna manera, estamos aportando un granito de arena, al cambio del mundo. Al menos del nuestro y del de nuestro entorno.&lt;/p&gt;&lt;p&gt;La buena noticia es que hay algunas organizaciones que están comenzando a realizar este tipo de "&lt;em&gt;&lt;strong&gt;terapias complementarias&lt;/strong&gt;&lt;/em&gt;", lo que da esperanza. Claro que, para que el cambio se perciba en el mundo de los negocios, supongo que pasará algún tiempo todavía. Ojalá a mis hijos les toque.&lt;/p&gt;&lt;p&gt;So far, so good!&lt;/p&gt;&lt;p align="right"&gt;&lt;span style="font-size:78%;color:#800000;"&gt;&lt;em&gt;Imágenes by &lt;/em&gt;&lt;/span&gt;&lt;a href="http://es.tinypic.com/" target="_blank"&gt;&lt;span style="font-size:78%;color:#800000;"&gt;&lt;em&gt;tinypic&lt;/em&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-5626649613884951362?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Z2gHAoCzSVTQmnPjQKu9PNm_95I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z2gHAoCzSVTQmnPjQKu9PNm_95I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Z2gHAoCzSVTQmnPjQKu9PNm_95I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z2gHAoCzSVTQmnPjQKu9PNm_95I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/08/contradiccin-empresas-informticas.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-3259047648250569686</guid><pubDate>Thu, 07 Aug 2008 20:08:00 +0000</pubDate><atom:updated>2008-08-07T16:16:51.301-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Biometría</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">BioPKI</category><title>Biometría - Diferencias, Elección y Beneficios</title><description>&lt;p&gt;&lt;strong&gt;&lt;img align="left" src="http://i28.tinypic.com/2s9t0sm.jpg" width="138" height="104" /&gt;&lt;/strong&gt; &lt;strong&gt;&lt;span style="color:#008000;"&gt;Biometría es Huella Digital?&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;Antes de comenzar éste análisis, es importante destacar que cuando hablamos de biometría, no solo hacemos referencia a la verificación de personas a través de su huella digital. Si bien, es uno de los métodos más difundidos a nivel mundial, no es el único. Existen otros muy efectivos, como la geometría de la mano, el iris del ojo, el mapa de venas de la mano, etc. Todos tienen en común que realizan una comparación, a través de algún algoritmo matemático, de una característica biométrica de la persona. Todos usan algún dispositivo específico de captura de una muestra, desde la cual se extraen ciertos valores (llamados &lt;em&gt;puntos característicos o minucias&lt;/em&gt;) a través de alguna función matemática (&lt;em&gt;función de extracción&lt;/em&gt;). Luego, esos datos extraídos desde la muestra, y a través de otra función matemática (&lt;em&gt;función de matching&lt;/em&gt;), son comparados contra otros datos del mismo tipo de minucias, y arrojan un resultado (&lt;em&gt;score&lt;/em&gt;), el cual dependiendo de los límites definidos (&lt;em&gt;umbrales&lt;/em&gt;), dirán si la verificación es positiva (&lt;em&gt;matching positivo&lt;/em&gt;) o negativa (&lt;em&gt;matching negativo&lt;/em&gt;). &lt;/p&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt;Seleccionando la mejor tecnología&lt;/strong&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;img align="left" src="http://i30.tinypic.com/etsig4.jpg" width="41" height="41" /&gt;&lt;/em&gt;&lt;/strong&gt;Existen varias preguntas frecuentes, por parte de los potenciales usuarios, a la hora de implementar una solución con biometría. A continuación desarrollaré algunas. &lt;/p&gt;&lt;p&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="80%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;strong&gt;&lt;img align="right" src="http://i15.tinypic.com/vpg38g.jpg" /&gt;&lt;span style="color:#008000;"&gt;1 - Cual es la mejor tecnología Biométrica?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Puede ser que exista algún estudio que desconozca, con un análisis estadístico acerca del funcionamiento de cada tecnología, pero la pregunta de fondo real sería: &lt;em&gt;&lt;strong&gt;Cual es la menor tecnología Biométrica...en mi caso?&lt;/strong&gt;&lt;/em&gt; Es decir, considerando la solución de negocios que se desea implementar, mas allá de cualquier estudio, una tecnología biométrica puede ser mejor que otra, dependiendo de los factores de entorno. Por ejemplo: cierta vez un cliente, quería utilizar para control de acciones de sus operarios, en su taller metalúrgico, una solución basada en huella digital, utilizando lectores de huella ópticos. Desde el punto de vista de la solución en sí, era una "buena solución" considerando el costo y la robustez de la misma, pero desde el punto de vista operativo era, sencillamente, inoperable. Debido a como funciona el sensor óptico, que ante el dedo sucio no puede leer, los empleados debían constantemente lavarse las manos cada vez que debían poner su dedo en el lector. Esto hacía que la operación sea mas lenta e incluso molestara a los trabajadores, por lo que generaba malestar que se traducía en malos desempeños. La solución final que le recomendamos fue la utilización de geometría de mano, la cual no era afectada por la suciedad, y el proceso se completaba fácil y rápido. La diferencia económica de la solución era muy poca, pero en relación a los resultados obtenidos, se hacía mínima. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;strong&gt;&lt;em&gt;&lt;em&gt;&lt;strong&gt;&lt;img align="right" src="http://i15.tinypic.com/vpg38g.jpg" /&gt;&lt;/strong&gt;&lt;/em&gt;&lt;span style="color:#008000;"&gt;2 - Dentro de la huella digital, que sensor es mejor?&lt;/span&gt;&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;Ésta pregunta está relacionada con la anterior. La primera respuesta es: DEPENDE. En primer lugar cabe aclarar que existen diferentes tecnologías de lectura de huellas, que se pueden ver en el siguiente gráfico:&lt;br /&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="100%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="100%" align="middle"&gt;&lt;a href="http://lh6.ggpht.com/gsuhit/SJtWEe0BMNI/AAAAAAAABFg/-vvD2UOPVGs/s1600-h/Sensores5.jpg"&gt;&lt;img border="0" alt="Sensores" src="http://lh3.ggpht.com/gsuhit/SJtWFI2vUEI/AAAAAAAABFk/_qXOc-qgClM/Sensores_thumb3.jpg?imgmax=800" width="330" height="103" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:78%;color:#800000;"&gt;&lt;em&gt;Imagen tomada del Curso de Biometría de &lt;a href="http://blog.maz.cl/" target="_blank"&gt;Marco Zúñiga&lt;/a&gt;&lt;/em&gt;&lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Como se ve aquí, existen tres opciones de sensores: Opticos, de Semiconductores, o de "Light Emitting". No analizaré aquí los detalles técnicos de cada uno, dado que no soy un gran conocedor del tema. Por dudas pueden dirigirse a &lt;a href="http://blog.maz.cl/" target="_blank"&gt;Marco Zúñiga&lt;/a&gt;, quién dicta clases sobre biometría en carreras de post grado en la Universidad de Chile, y con quién me a tocado trabajar muy a gusto.&lt;br /&gt;Lo único que comentaré aquí es, que dependiendo nuevamente de la solución que deseo construir, se justifica uno u otro. Por ejemplo, el óptico es bastante rápido y tiene buena calidad de imagen normalmente (claro que también depende del fabricante), pero si el dedo está sucio, puede ser casi imposible tomar una muestra. El de polímeros (light emitting) permite incluso detectar huella viva, a un precio de sensor algo mas alto que el óptico, pero absolutamente razonable para ciertos casos. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;strong&gt;&lt;em&gt;&lt;em&gt;&lt;strong&gt;&lt;img align="right" src="http://i15.tinypic.com/vpg38g.jpg" /&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;3 - Los dispositivos biométricos son compatibles entre si?&lt;/span&gt;&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;No. Todos entregan una muestra de alguna característica específica. Por ejemplo, si hablamos nuevamente de lectores de huella, cada uno entrega una imagen de un tamaño y una calidad específicos. Por lo tanto, las funciones de extracción y de matching, deben tener claro que tipo de imagen están procesando para evitar resultados erróneos. La buena noticia es que existen empresas que ofrecen soluciones biométricas donde garantizan la interoperabilidad entre lectores. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;strong&gt;&lt;em&gt;&lt;strong&gt;&lt;em&gt;&lt;em&gt;&lt;strong&gt;&lt;img align="right" src="http://i15.tinypic.com/vpg38g.jpg" /&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;span style="color:#008000;"&gt;4 - Si utilizo una función de extracción de minucias propietaria, luego puedo migrarlas a otro formato?&lt;/span&gt;&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;No. Para poder asegurar la migración a otros algoritmos se debe almacenar de alguna forma una muestra de buena calidad. En el caso de nuestro ejemplo, la huella digital, podemos almacenar una imagen de la misma, con la calidad suficiente para un posterior proceso. Si el tamaño es grande, podemos usar un algoritmo de compresión de imagen sin perdida de información, como es el &lt;a href="http://en.wikipedia.org/wiki/Wavelet_Scalar_Quantization" target="_blank"&gt;WSQ - Wavelet Scalar Quantization&lt;/a&gt;, que una imagen de 256Kb, la llega a reducir a 15kb, o incluso menos. &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Existen muchas mas dudas que surgen al momento de la decisión, pero solo mencionaré éstas a modo de ejemplo. Cualquier duda adicional, con gusto esperaré sus comentarios. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Pero, cuáles son los beneficios reales de usar biometría?&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;Existen varios beneficios por el uso de este tipo de tecnología. Algunos económicos, otros operativos, e incluso de imagen corporativa. Algunos beneficios son: &lt;table border="0" cellspacing="0" cellpadding="2" width="80%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;&lt;em&gt;&lt;a href="http://lh6.ggpht.com/gsuhit/SJtWFp3EFbI/AAAAAAAABFo/-YpANW-WNGY/s1600-h/moneda8.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border="0" alt="moneda" align="left" src="http://lh6.ggpht.com/gsuhit/SJtWGN_mFyI/AAAAAAAABFs/gs8fnNisQd0/moneda_thumb6.jpg?imgmax=800" width="54" height="54" /&gt;&lt;/a&gt; Ahorro de dinero&lt;br /&gt;&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;Cuando se utiliza una tecnología alternativa, como es por ejemplo tarjetas de proximidad, existe un costo recurrente que es el de la generación de tarjetas personalizadas para las personas que se deben verificar, además del dispositivo para la lectura de las mismas. Con biometría, solo se debe considerar la inversión de los dispositivos. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;em&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;&lt;a href="http://lh3.ggpht.com/gsuhit/SJtWHAcTS1I/AAAAAAAABFw/jCBw7iEETV0/s1600-h/monedas3.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border="0" alt="monedas" align="left" src="http://lh3.ggpht.com/gsuhit/SJtWHhatLuI/AAAAAAAABF0/H5xDIR90YnU/monedas_thumb1.jpg?imgmax=800" width="54" height="54" /&gt;&lt;/a&gt; Mas Ahorro de dinero&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/em&gt;Si la aplicación se utiliza para la verificación de personas en procesos sensibles para una compañía, ese proceso es posible que se digitalice totalmente, de tal forma de evitar costos de emisión de papel, junto con su administración y almacenamiento. En este caso, la muestra biométrica utilizada para la verificación de la persona, podría ser utilizada como firma simple de la operación. (Si esto no fuera suficiente podría pensarse en una solución de &lt;a href="http://gsuhit.blogspot.com/2008/07/biopki-primera-parte-pki-biometra-por.html" target="_blank"&gt;BioPKI&lt;/a&gt;, como la planteada en un artículo anterior). &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;&lt;a href="http://lh6.ggpht.com/gsuhit/SJtWH4QnQhI/AAAAAAAABF4/-Ydjx3dlxWI/s1600-h/candado3.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border="0" alt="candado" align="left" src="http://lh4.ggpht.com/gsuhit/SJtWIYVbRnI/AAAAAAAABF8/Z5uQUcIoIno/candado_thumb1.jpg?imgmax=800" width="55" height="54" /&gt;&lt;/a&gt; Aumento de seguridad - Evita suplantación&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Este tipo de tecnología, permite tener la certeza de que quien necesita ser verificado, es quien dice ser, debido a que no puede otra persona suplantarlo, sino la verificación sería negativa. Si volvemos al caso del ejemplo en el primer punto, las tarjetas de proximidad, podrían ser utilizadas por mas de una persona para verificar una identidad, y de esa forma completar una operación, acceder a un lugar no permitido, etc. Por ejemplo, cierto cliente tenía el problema que sus empleados marcaban asistencia con tarjetas de proximidad, y ellos, se prestaban las tarjetas, y uno de ellos, de forma rotativa, se quedaba hasta mas tarde en la oficina y cuando salía marcaba con todas las tarjetas. De esa forma, generaba horas extras para todos los involucrados, trasformándose en una pérdida considerable para la empresa. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="600"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#008000;"&gt;&lt;a href="http://lh6.ggpht.com/gsuhit/SJtWI0MjEiI/AAAAAAAABGA/CqMFviR6fPg/s1600-h/tiempo_moneda3.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border="0" alt="tiempo_moneda" align="left" src="http://lh3.ggpht.com/gsuhit/SJtWJeJSSAI/AAAAAAAABGE/aM3MXefCe90/tiempo_moneda_thumb1.jpg?imgmax=800" width="55" height="54" /&gt;&lt;/a&gt; Agiliza procesos y Asegura continuidad de procesos&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Una vez que la solución está en funcionamiento, y luego de una muy breve curva de aprendizaje de los usuarios, la utilización de la tecnología es muy fácil, aumentando la velocidad de ciertos procesos de verificación para aprobaciones, accesos u otras operaciones, lo que mejora aún mas los costos operativos. Además, como los atributos biométricos son inherentes a la persona, es imposible que se extravíen o se olviden en algún lugar, de tal forma de asegurar que siempre que haya un punto de verificación disponible, es factible completar las operaciones necesarias. &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Por supuesto que existen varias ventajas adicionales, pero que están asociadas a las soluciones específicas. Responderé gustoso cualquier duda asociada a una problemática particular. &lt;/p&gt;&lt;p&gt;So far, so good!&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-3259047648250569686?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/35HWhRn8POsgo5GAywnTngbhfOk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/35HWhRn8POsgo5GAywnTngbhfOk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/35HWhRn8POsgo5GAywnTngbhfOk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/35HWhRn8POsgo5GAywnTngbhfOk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/08/biometra-diferencias-eleccin-y.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-5125094387195916300</guid><pubDate>Sat, 02 Aug 2008 00:13:00 +0000</pubDate><atom:updated>2008-08-01T20:35:41.822-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Software</category><title>e-Mail : Bendito Tesoro!!</title><description>&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;&lt;img align="left" src="http://i27.tinypic.com/bgu05f.jpg" /&gt; Que problema!&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Hoy amanecí temprano para poder trabajar, pero me encontré con un gran problema: &lt;strong&gt;NO PODIA ACCEDER AL MAIL!!&lt;/strong&gt;. Por razones que no vienen al caso, tenía que usar el &lt;a href="http://www.gmail.com/" target="_blank"&gt;Gmail&lt;/a&gt;, pero me decía que no coincidía la clave. Accedí entonces a la zona de recuperación de claves, y me pidió el usuario, una clave de confirmación a través de letras, y...me envió las instrucciones de recuperación de la clave al correo alternativo configurado en el momento de la creación de la cuenta. El problema surgió, porque por un error de tipeo, en el momento de la mencionada creación, escribí mal el mail secundario. Esto lleva a que debas esperar 5 días sin accesos a tu cuenta (donde un intento por ingresar cuenta como acceso y reinicia el conteo) para que empiece el proceso de recuperar tu clave, vía la pregunta secreta. Ahora bien, si esta pregunta no la recuerdas o no la tienes configurada, simplemente comienza a lamentarte porque no hay mas que hacer. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Pero cual es el problema real, si puedo generar una nueva cuenta de &lt;/em&gt;&lt;/strong&gt;&lt;a href="http://www.gmail.com/"&gt;&lt;em&gt;Gmail&lt;/em&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt; también gratuita?&lt;/em&gt;&lt;/strong&gt; Algunos de los problemas, además del problema natural de perder la historia de mails hasta ese momento (si no tienes backup, obviamente), son: &lt;span class="fullpost"&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;En este caso, como la cuenta está asociada a los inicios de los demás servicios de &lt;a href="http://www.google.com/" target="_blank"&gt;Google&lt;/a&gt;, tales como &lt;a href="http://www.blogger.com/" target="_blank"&gt;Blogger&lt;/a&gt; o &lt;a href="http://www.picasaweb.com/" target="_blank"&gt;Picasa&lt;/a&gt;, también hubiera perdido la información almacenada allí (es decir, este artículo no lo estarías leyendo!).&lt;/li&gt;&lt;li&gt;Esta dirección es la que conocen mis clientes como dirección alternativa de mi trabajo, o sea, hubiera perdido esa conexión.&lt;/li&gt;&lt;li&gt;Esta dirección también, figura en varios lugares públicos como contacto, por lo que hubiera perdido quizá, oportunidades de negocios o comunicaciones importantes, hasta haber podido actualizar el mail a mis contactos.&lt;/li&gt;&lt;li&gt;Seguramente algún problema mas existirá que en este momento no se me viene a la mente.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Cuento corto, luego de haberme leído varios post en el &lt;a href="http://groups.google.com/group/AyudaGmail?hl=es" target="_blank"&gt;centro de ayuda (foro)&lt;/a&gt; de &lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt;, pude obtener una dirección a un &lt;a href="https://www.google.com/support/accounts/bin/request.py?contact_type=ara&amp;amp;ctx=accounts" target="_blank"&gt;formulario en línea&lt;/a&gt;, que fue la puerta de entrada a la solución. Luego de completarlo con información referida a mi actividad con la cuenta, recibí un mail en mi cuenta alternativa (ahora bien escrita :-)), con las instrucciones para recuperar (en realidad para definir una nueva) clave a mi cuenta de &lt;a href="http://www.gmail.com/"&gt;Gmail&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Este pequeño gran susto, me dejó algunas enseñanzas, o mejor dicho, me refrescó algunas buenas prácticas informáticas, que la velocidad del día a día a veces hace que se ignoren. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Consejos&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Algunas prácticas útiles:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Guardar en un lugar de fácil acceso pero seguro, toda la información entregada por los proveedores de cuenta de mail en el momento de la creación de la misma (código de verificación, instrucciones o &lt;img align="right" src="http://i6.tinypic.com/8f9rb51.jpg" width="141" height="199" /&gt;claves de recuperación, etc.).&lt;/li&gt;&lt;li&gt;Completar a conciencia toda la información pedida por el proveedor (pregunta secreta, cuentas de mail alternativas de contacto, etc.) Guardar esta información junto con la información anterior, en un lugar seguro y de fácil acceso.&lt;/li&gt;&lt;li&gt;Asociar mas de una cuenta al mismo perfil (en caso que el proveedor del servicio lo permita) de tal forma que si se bloquea una cuenta, pueda accederse a la información desde otra.&lt;/li&gt;&lt;li&gt;Mantener un &lt;a href="http://es.wikipedia.org/wiki/Backup" target="_blank"&gt;backup&lt;/a&gt; actualizado de la información y contactos almacenados bajo esa cuenta, de tal forma de reconstruir nuestra historia en caso de tener que migrar a una nueva cuenta, y de esa forma, minimizar impactos. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/gsuhit/SJOms437BzI/AAAAAAAAA5A/JedV7hHub04/s1600-h/Ok%5B8%5D.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border="0" alt="Ok" align="left" src="http://lh4.ggpht.com/gsuhit/SJOmtt2-sNI/AAAAAAAAA5E/g_cZ79UiNnk/Ok_thumb%5B6%5D.jpg?imgmax=800" width="41" height="54" /&gt;&lt;/a&gt; &lt;em&gt;En caso que algún lector tenga más consejos útiles, los invito a incluirlos en los comentarios, y me comprometo a luego ponerlos todos juntos en un nuevo artículo, así como todos los tips incluidos mas adelante y los que quieran enviarme&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Otro tema importante : Centralización&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Por último, y ya que estamos en el tema correo electrónico, un tema importante es la cantidad de correos que una persona tiene que manejar, sea cual sea el motivo. Que &lt;a href="http://www.gmail.com/" target="_blank"&gt;Gmail&lt;/a&gt;, que &lt;a href="https://login.yahoo.com/" target="_blank"&gt;Yahoo&lt;/a&gt;, que &lt;a href="http://www.hotmail.com/" target="_blank"&gt;Hotmail&lt;/a&gt;, o el mail entregado por el proveedor de turno de tu &lt;a href="http://es.wikipedia.org/wiki/ADSL" target="_blank"&gt;ADSL&lt;/a&gt;, mas el del trabajo. Si se desea tener acceso a todos los mails, eso equivale a tener abiertas muchas aplicaciones, o al menos, muchas ventanas de una misma aplicación al mismo tiempo. La buena noticia es que hay varias formas de centralizar todas nuestras cuentas. Yo solo explicaré la que uso, pero existen otras y acepto sugerencias de mejoras.&lt;/p&gt;&lt;p&gt;A través de &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Outlook" target="_blank"&gt;Outlook&lt;/a&gt;, uno puede acceder a todas sus cuentas &lt;a href="http://es.wikipedia.org/wiki/SMTP" target="_blank"&gt;SMTP&lt;/a&gt; de &lt;a href="http://lh5.ggpht.com/gsuhit/SJOmuJ5JhQI/AAAAAAAAA5I/hn59gM_2s8Q/s1600-h/Outlook%5B4%5D.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border="0" alt="Outlook" align="right" src="http://lh4.ggpht.com/gsuhit/SJOmu2mBavI/AAAAAAAAA5M/Hs8UF20dQD4/Outlook_thumb%5B2%5D.jpg?imgmax=800" width="179" height="206" /&gt;&lt;/a&gt; proveedores privados, y a todas las cuentas gratuitas que dan acceso a éste protocolo, como es el caso de &lt;a href="http://www.gmail.com/"&gt;Gmail&lt;/a&gt;. Para &lt;a href="https://login.yahoo.com/"&gt;Yahoo&lt;/a&gt;, solo podemos acceder por &lt;a href="http://es.wikipedia.org/wiki/SMTP"&gt;SMTP&lt;/a&gt; si tenemos contratado un servicio pago, de otra forma, solo lo podemos hacer vía web, por alguno de los navegadores estándar (&lt;a href="http://es.wikipedia.org/wiki/Internet_Explorer" target="_blank"&gt;Internet Explorer&lt;/a&gt; o &lt;a href="http://es.wikipedia.org/wiki/Firefox" target="_blank"&gt;Firefox&lt;/a&gt; por ejemplo). Para &lt;a href="http://www.hotmail.com/"&gt;Hotmail&lt;/a&gt;, existe una posibilidad de accederlo a través de &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Outlook"&gt;Outlook&lt;/a&gt; 2007 (de forma nativa lo incorpora) o sino, si es &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Outlook"&gt;Outlook&lt;/a&gt; 2003, a través de un conector llamado &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=7aad7e6a-931e-438a-950c-5e9ea66322d4&amp;amp;displaylang=en" target="_blank"&gt;Outlook Connector&lt;/a&gt;, el cual se descarga desde &lt;a href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt;, y se lo configura de acuerdo a las instrucciones que vienen con el producto. &lt;/p&gt;&lt;p&gt;Si además, estamos en el mundo de los &lt;a href="http://es.wikipedia.org/wiki/Blog" target="_blank"&gt;blog&lt;/a&gt;, podemos también usar la misma aplicación para acceder simultáneamente y leer, a través de &lt;a href="http://es.wikipedia.org/wiki/RSS" target="_blank"&gt;RSS&lt;/a&gt;, nuestros blogs favoritos. Nuevamente, si utilizamos &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Outlook"&gt;Outlook&lt;/a&gt; 2007, esta característica es nativa, pero si usas la versión 2003, deberías descargar un &lt;a href="http://es.wikipedia.org/wiki/Plug-in" target="_blank"&gt;plug-in&lt;/a&gt; que te permita agregarla. Particularmente yo uso &lt;a href="http://www.intravnews.com/" target="_blank"&gt;intraVnews&lt;/a&gt; (con licencia personal libre), y hasta ahora me ha dado excelentes resultados.&lt;/p&gt;&lt;p align="right"&gt;&lt;span style="font-size:85%;color:#990000;"&gt;Imágenes by &lt;/span&gt;&lt;a href="http://es.tinypic.com/"&gt;&lt;span style="font-size:85%;color:#990000;"&gt;es.tinypic.com&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;So far, so good!&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-5125094387195916300?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Yw8iv7R9fOOLsHImZMQg1vs5utg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Yw8iv7R9fOOLsHImZMQg1vs5utg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Yw8iv7R9fOOLsHImZMQg1vs5utg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Yw8iv7R9fOOLsHImZMQg1vs5utg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/08/e-mail-bendito-tesoro.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-6822699220800356958</guid><pubDate>Mon, 28 Jul 2008 23:31:00 +0000</pubDate><atom:updated>2008-07-29T11:37:27.947-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Nostalgia</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">General</category><title>Lifting Informático</title><description>&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Lo viejo, no necesariamente es malo!&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/gsuhit/SI5TmtDxFvI/AAAAAAAAA3w/sDHsZtgWg9A/s1600-h/login_big%5B4%5D.gif"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border="0" alt="login_big" align="left" src="http://lh3.ggpht.com/gsuhit/SI5TnHlE-pI/AAAAAAAAA30/WmCm7MPexA8/login_big_thumb%5B2%5D.gif?imgmax=800" width="50" height="50" /&gt;&lt;/a&gt; Hace unos días atrás recibí un mail de un cliente de mis tiempos de Universidad. Luego de probar con varios de mis mails anteriores, consiguió uno válido y finalmente nos comunicamos. Su pregunta era simple: "Recuerdas el sistema que me hiciste hace 11 años atrás?? Pues bien, aún lo sigo usando y funciona perfecto, pero quería saber si lo pasaste a Windows, &lt;em&gt;&lt;strong&gt;para no quedarme en la historia&lt;/strong&gt;&lt;/em&gt;!!" &lt;/p&gt;&lt;p&gt;Para que tengan una idea, el sistema fue desarrollado en DOS 6.22, con Clarion 3.1 para DOS, y sistema de indexación Btrieve.Pero lo peor es que su máquina tiene 128Mb de RAM y Windows 95!!, es decir, igual se quedó en la historia.&lt;/p&gt;&lt;p&gt;De más está decir que no recordaba ni siquiera que hacía el sistema, donde podrían estar los fuentes, y de encontrarlos, como hacer para hacerlos funcionar. Lo que me quedó en claro, es que en estos 11 años funcionó impecablemente, y que de ninguna forma es necesario ningún tipo de actualización, debido a que ese sistema tendrá como máximo un par de años mas de uso. &lt;/p&gt;&lt;p&gt;Además de rechazar su gentil oferta de rehacer el mencionado sistema, (claro que ahora en Windows!!), me detuve a pensar en ésta situación un poco mas a fondo. Llegue rápidamente a la conclusión que los informáticos somos especialistas en "reinventar la rueda", cuando en realidad, muchas veces, no hace falta.&lt;/p&gt;&lt;span class="fullpost"&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;Y, por qué?&lt;img align="right" src="http://i21.tinypic.com/21aycmx.jpg" width="140" height="159" /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Para graficarlo con un ejemplo: si un hombre está casado con una mujer buena, trabajadora, buena madre, amable, mimosa, buena cocinera, alegre, que le gusta el fútbol, el automovilismo y cualquier tipo de deporte y lo acompaña de buena gana a verlos, eso es muy bueno; ahora, si es &lt;strong&gt;linda&lt;/strong&gt;: es perfecto. Pero aún más, si es &lt;strong&gt;hermosa&lt;/strong&gt;: podemos decir que ese hombre está tocando el cielo con las manos. &lt;/p&gt;&lt;p&gt;Luego de pasados algunos años, de todas formas, este hombre quizá le pida a ésta hermosa mujer, que se haga un "&lt;strong&gt;&lt;em&gt;lifting&lt;/em&gt;&lt;/strong&gt;", y eso por qué?? Porque sencillamente "&lt;strong&gt;&lt;em&gt;no quiere quedarse en la historia&lt;/em&gt;&lt;/strong&gt;", y quiere tener una mujer linda, sin importar de sus espectaculares características, incluso mas importantes que ésta!! &lt;/p&gt;&lt;p&gt;Si analizamos el tema enfocándonos en los negocios, basta con estudiar el proceso de cambio de los productos de &lt;a href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt;. Si bien, la base sigue siendo la misma, lo que ha cambiado de generación en generación, es la calidad del producto, tanto en el corazón del sistema (&lt;em&gt;core&lt;/em&gt;) como en la cara visible (&lt;em&gt;look and feel&lt;/em&gt;), es decir, también le hicieron un "&lt;strong&gt;&lt;em&gt;lifting&lt;/em&gt;&lt;/strong&gt;!!" Lejos estoy de minimizar este trabajo, porque está claro que no solo hicieron lifting, crecieron en todo aspecto, y estoy convencido que gracias a Microsoft la informática es un común denominador en todas las actividades del mundo, sino, muy por el contrario, lo pongo como uno de los mejores ejemplos de lo que deberíamos hacer. Si no se hubiera mejorado este &lt;em&gt;look and feel&lt;/em&gt;, hubieran tenido tanto éxito?. (No creo que haya alguien que ponga en duda el modelo de negocios de &lt;a href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt;, aunque hay contras en todo el mundo, pero no voy a centrarme justo en el que me contradice la idea, esta claro?) Si tenemos un cliente satisfecho, porque le hemos entregado un muy buen producto, entonces informáticos amigos, &lt;em&gt;&lt;strong&gt;NO REINVENTEMOS LA RUEDA, HAGAMOS LIFTING!!&lt;/strong&gt;&lt;/em&gt; Pasemos de ser "Informáticos Generalistas" a "Informáticos Plásticos", porque estoy seguro, allí hay muy buenos negocios. &lt;/p&gt;&lt;p&gt;&lt;img align="left" src="http://i30.tinypic.com/2m43o9d.jpg" /&gt; Y de paso, quizá le cumplamos el sueño a alguna madre que quería "Un hijo Doctor!". &lt;/p&gt;&lt;p&gt;Por último, no puedo dejar de reconocer que lo que estoy planteando en este artículo, no es para nada nuevo, solo sentí la necesidad de reivindicar a tantas personas que a lo largo de mi carrera me dijeron esto de mil formas diferentes, y hasta que no me pegué en la cabeza, no lo asumí. Pero como decía el gran "&lt;a href="http://es.wikipedia.org/wiki/Ringo_Bonavena" target="_blank"&gt;Ringo" Bonavena&lt;/a&gt;", aquél gran boxeador argentino: "&lt;strong&gt;&lt;em&gt;La experiencia no es mas que un peine que te regalan cuando te quedas pelado!&lt;/em&gt;&lt;/strong&gt;". &lt;/p&gt;&lt;p align="right"&gt;&lt;span style="font-size:85%;color:#990000;"&gt;&lt;em&gt;Imágenes by &lt;a href="http://es.tinypic.com/"&gt;es.tinypic.com&lt;/a&gt;&lt;/em&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;So far, So good! &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-6822699220800356958?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/m-nk0Fomc3pGCWlxuyiq13aTKRQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m-nk0Fomc3pGCWlxuyiq13aTKRQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/m-nk0Fomc3pGCWlxuyiq13aTKRQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m-nk0Fomc3pGCWlxuyiq13aTKRQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/07/lifting-informtico_28.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-696909686712655994</guid><pubDate>Tue, 22 Jul 2008 17:26:00 +0000</pubDate><atom:updated>2008-07-22T18:22:23.847-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Biometría</category><category domain="http://www.blogger.com/atom/ns#">PKI</category><category domain="http://www.blogger.com/atom/ns#">BioPKI</category><title>BioPKI - Primera Parte</title><description>&lt;p&gt;&lt;strong&gt;&lt;span style="color:#006600;"&gt;PKI "o" Biometría? Por que no "y"?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/gsuhit/SIYYUCWjYEI/AAAAAAAAA3I/pJ3RRDOHEfY/s1600-h/user_guard_big7.gif"&gt;&lt;img border="0" alt="user_guard_big" align="left" src="http://lh4.ggpht.com/gsuhit/SIYYUi2DWZI/AAAAAAAAA3M/bc9qnZu9Ntw/user_guard_big_thumb5.gif?imgmax=800" width="50" height="50" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Desde hace mas de 7 años que estoy involucrado en temas referentes a la seguridad, debido a que tuve la suerte de estar trabajando en compañías que tenían como foco de negocios aplicaciones basadas en PKI o Biometría. Cada uno de estos temas, fueron avanzando a través de los años, hasta convertirse en tecnologías maduras, sólidas, y con precios razonables.&lt;/p&gt;&lt;p&gt;Normalmente, cuando comenzamos a evaluar soluciones de seguridad referidas a la identificación de personas, surgen estas dos tecnologías, además de otras claro está. Y la primer pregunta es si se usa PKI "o" Biometría, aunque mi pregunta ahora es, y por que no PKI "y" Biometría?. En la práctica, son tecnologías que pueden complementarse perfectamente, y dependerá de la necesidad para determinar si se justifica o no. Surge entonces un concepto nuevo, que podemos denominar &lt;strong&gt;&lt;span style="color:#004080;"&gt;BioPKI - Biometric Public Key Infraestructure&lt;/span&gt;&lt;/strong&gt;. &lt;/p&gt;&lt;p&gt;Pero antes de avanzar en este tema, creo conveniente hacer una breve introducción a cada tema, para aquellos que no los conozcan. &lt;span class="fullpost"&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style="color:#006600;"&gt;Que es PKI?&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;Para definir PKI, utilizo literalmente la definición existente en &lt;a href="http://es.wikipedia.org/wiki/PKI" target="_blank"&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;&lt;p&gt;"&lt;em&gt;En &lt;/em&gt;&lt;a href="http://es.wikipedia.org/wiki/Criptograf%C3%ADa"&gt;&lt;em&gt;criptografía&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, una &lt;b&gt;infraestructura de clave pública&lt;/b&gt; (o, en &lt;/em&gt;&lt;a href="http://es.wikipedia.org/wiki/Ingl%C3%A9s"&gt;&lt;em&gt;inglés&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, PKI, &lt;b&gt;P&lt;/b&gt;ublic &lt;b&gt;K&lt;/b&gt;ey &lt;b&gt;I&lt;/b&gt;nfrastructure) es una combinación de &lt;/em&gt;&lt;a href="http://es.wikipedia.org/wiki/Hardware"&gt;&lt;em&gt;hardware&lt;/em&gt;&lt;/a&gt;&lt;em&gt; y &lt;/em&gt;&lt;a href="http://es.wikipedia.org/wiki/Software"&gt;&lt;em&gt;software&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, &lt;/em&gt;&lt;a href="http://es.wikipedia.org/wiki/Pol%C3%ADticas_de_seguridad"&gt;&lt;em&gt;políticas y procedimientos de seguridad&lt;/em&gt;&lt;/a&gt;&lt;em&gt; que permiten la ejecución con garantías de operaciones criptográficas como el cifrado, la firma digital o el no repudio de transacciones electrónicas&lt;/em&gt;"&lt;/p&gt;&lt;p&gt;A veces se utiliza el término PKI solo para hacer referencia a la tecnología, pero en realidad PKI es mas amplio y engloba los procedimientos, los cuales determinan que hacer en caso de ocurrir alguna falla. Por ejemplo, si utilizo PKI para el control de pagos, y por algún inconveniente técnico no está disponible, debe existir un procedimiento de seguridad alternativo para completar la operación, de tal forma de evitar, en este caso, la falta de pago. &lt;/p&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="80%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="599"&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/gsuhit/SIYYVAbzc5I/AAAAAAAAA3Q/JXznvKeOYgk/s1600-h/alarma_mini_small4.gif"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border="0" alt="alarma_mini_small" align="left" src="http://lh6.ggpht.com/gsuhit/SIYYV2ZAQKI/AAAAAAAAA3U/7m3TN2j0e74/alarma_mini_small_thumb2.gif?imgmax=800" width="15" height="15" /&gt;&lt;/a&gt; &lt;em&gt;&lt;strong&gt;&lt;span style="color:#006600;"&gt;Nota&lt;/span&gt;&lt;/strong&gt;: He escuchado varias veces la frase: "Tengo tal o cual tecnología implantada, por lo tanto estoy seguro". La experiencia indica que de no existir las políticas y procedimientos de seguridad adicionales, la "SOLUCIÓN" de seguridad NO es completamente segura, por mas que la tecnología sea realmente buena.&lt;/em&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Esta tecnología se basa en que cada persona tenga un par de claves: una pública y otra privada, enlazados en lo que se conoce como &lt;a href="http://es.wikipedia.org/wiki/Certificado_de_clave_p%C3%BAblica" target="_blank"&gt;certificado digital o certificado de identidad&lt;/a&gt;. Estos certificados son emitidos por Autoridades de Certificación tales como &lt;a href="http://www.verisign.com/" target="_blank"&gt;VeriSign&lt;/a&gt;, &lt;a href="http://www.thawte.com/" target="_blank"&gt;Thawte&lt;/a&gt;, etc. Estos certificados se los puede verificar en una lista de certificados vencidos generados por las mismas compañías emisoras, ya sea por fecha o por razones de seguridad. Existen también soluciones de verificación simultánea de varios tipos de certificados, tales como el producto Validation Authority de la empresa &lt;a href="http://www.tumbleweed.com/" target="_blank"&gt;Tumbleweed&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Se puede utilizar PKI para identificar a la persona que presenta un certificado, ya sea para acceso a aplicaciones o para permitir realizar alguna operación sensible, para cifrado de información de tal forma de evitar que otras personas que no posean la clave privada no puedan ver el contenido plano de la misma, para firmar digitalmente un documento de tal forma de garantizar que no sea modificado o bien para garantizar en No Repudio, es decir, que la persona que realiza una operación NO pueda negar la misma.&lt;/p&gt;&lt;p&gt;El punto débil de la tecnología, es que si alguien logra robar mi clave secreta, tiene la posibilidad de suplantar mi identidad, y de esa forma llevar a cabo un fraude.&lt;/p&gt;&lt;h3&gt;&lt;span style="color:#006600;"&gt;Que es Biometría?&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;Es la tecnología que permite verificar o identificar a una persona a través de un atributo unívoco de la persona, como por ejemplo huella digital, geometría de la mano, iris del ojo, etc.&lt;/p&gt;&lt;p&gt;El proceso característico de la biometría es la &lt;strong&gt;captura de una muestra&lt;/strong&gt; (eje.: imagen de la huella digital) a través del dispositivo biométrico para tal efecto, para luego procesar la misma a través de algún algoritmo de &lt;strong&gt;extracción de puntos característicos (minucias)&lt;/strong&gt;, y por último la comparación contra un banco de datos previamente almacenado del mismo tipo. Esta comparación se realiza con un &lt;strong&gt;algoritmo de matching&lt;/strong&gt;, entregado por la misma empresa vendedora del dispositivo de captura biométrico, o alguna empresa independiente del dispositivo. En ningún caso se hace una comparación por igualdad, dado que cada muestra tomada es diferente, sino que se entrega un &lt;strong&gt;resultado (score)&lt;/strong&gt;, el cual es comparado contra un &lt;strong&gt;umbral&lt;/strong&gt; mínimo requerido para considerar la comparación como satisfactoria. El tamaño y características de las muestras dependerán de cada algoritmo, así como los valores de umbrales utilizados. &lt;/p&gt;&lt;p&gt;Existen en todos los algoritmos, sin importar la tecnología biométrica utilizada, dos conceptos importantes: el &lt;strong&gt;FAR&lt;/strong&gt; (&lt;em&gt;False Acceptance Rate&lt;/em&gt;) y el &lt;strong&gt;FRR&lt;/strong&gt; (&lt;em&gt;False Rejection Rate&lt;/em&gt;). Esto es, la tasa de falsas aceptaciones (cuando el algoritmo dice que una persona es quien dice ser, y realmente no lo es) y los falsos rechazos (cuando el algoritmo dice que la persona no es, cuando si lo es). Estos tasas, pueden ser ajustadas con la definición de los umbrales adecuados, de tal forma de minimizarlas. Cabe señalar, que si subimos mucho el umbral, nos arriesgamos a incrementar el FRR mientras que si lo bajamos puede elevarse el FAR, lo cual para mi punto de vista es peor que el primer caso. &lt;/p&gt;&lt;p&gt;Existen diferentes proveedores de dispositivos biométricos y algoritmos. Dependerá de la solución a construir, la selección adecuada de los mismos. Mencionaré solo algunos: &lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="80%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="203" align="middle"  style="color:#008000;"&gt;&lt;strong&gt;&lt;span style="color:#003300;"&gt;Tecnología&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="405" align="middle"  style="color:#008000;"&gt;&lt;strong&gt;&lt;span style="color:#003300;"&gt;Empresas&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="203"&gt;Huella Digital&lt;/td&gt;&lt;td valign="top" width="405"&gt;&lt;a href="http://www.nec.com/" target="_blank"&gt;NEC&lt;/a&gt;, &lt;a href="http://www.neurotechnology.com/" target="_blank"&gt;Neurotechnology&lt;/a&gt;, &lt;a href="http://www.secugen.com/" target="_blank"&gt;Secugen&lt;/a&gt;, &lt;a href="http://www.digitalpersona.com/" target="_blank"&gt;Digital Persona&lt;/a&gt;, etc.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="203"&gt;Iris del Ojo&lt;/td&gt;&lt;td valign="top" width="405"&gt;Neurotechnology&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="203"&gt;Geometría de la Mano&lt;/td&gt;&lt;td valign="top" width="405"&gt;&lt;a href="http://www.recogsys.com/" target="_blank"&gt;Recognition System&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="203"&gt;Reconocimiento de Caras&lt;/td&gt;&lt;td valign="top" width="405"&gt;Neurotechnology&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Por último, mencionaré que cada compañía proveedora de éste tipo de tecnologías utiliza diferentes tipos de muestras lo que hace imposible la interoperabilidad de dispositivos. (eje.: si hago una captura de una muestra de huella digital con un sensor Digital Persona, no podré compararlo con una muestra tomada por un sensor Secugen). La buena noticia es que existen compañías que se dedican a desarrollar soluciones que permiten standarizar las muestras de tal forma de permitir la mencionada interoperabilidad, lo que ofrece flexibilidad a los consumidores finales, a la hora de decidir que y donde comprar. &lt;/p&gt;&lt;p&gt;La utilización de esta tecnología es claramente la de identificar unívocamente a una persona, debido a que nadie puede suplantar nuestra huella digital por ejemplo, pero no pude ser utilizada para procesos de encripción o firma digital, dado que como hemos dicho anteriormente, cada muestra es diferente de la anterior, lo que hace imposible completar este tipo de acciones.&lt;/p&gt;&lt;h3&gt;&lt;span style="color:#006600;"&gt;Que es&lt;/span&gt; &lt;span style="color:#004080;"&gt;BioPKI - Biometric Public Key Infraestructure&lt;/span&gt;?&lt;/h3&gt;&lt;p&gt;Ahora bien, si consideramos las ventajas de ambas tecnologías, podemos pensar &lt;strong&gt;&lt;span style="color:#004080;"&gt;BioPKI&lt;/span&gt;&lt;/strong&gt; como una solución robusta, y que saca provecho de las fortalezas que hemos considerado, evitando en cada caso las debilidades mencionadas. &lt;/p&gt;&lt;p&gt;Consideramos entonces, una muestra biométrica como identificación de una persona, que luego es firmada y/o encriptada a través de un algoritmo de clave pública, considerando además las políticas y procedimientos de seguridad para almacenamiento, recuperación y verificación del resultado obtenido. Además de la muestra podemos considerar información adicional, para que el resultado obtenido pueda ser considerado como prueba independiente.&lt;/p&gt;&lt;p&gt;Analizaré en posteriores artículos, algunos detalles mas específicos de una solución que cumpla con &lt;strong&gt;&lt;span style="color:#004080;"&gt;BioPKI&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;So far, So good!&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-696909686712655994?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TvLjsBoI1XPwjSu5_T6P6U_hq9o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TvLjsBoI1XPwjSu5_T6P6U_hq9o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TvLjsBoI1XPwjSu5_T6P6U_hq9o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TvLjsBoI1XPwjSu5_T6P6U_hq9o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/07/biopki-primera-parte-pki-biometra-por.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-5206445194337482417</guid><pubDate>Tue, 22 Jul 2008 16:52:00 +0000</pubDate><atom:updated>2008-07-28T19:36:23.795-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Nostalgia</category><category domain="http://www.blogger.com/atom/ns#">General</category><title>Que 10 años no es nada...</title><description>&lt;a href="http://i36.tinypic.com/awfbqq.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 131px; CURSOR: hand" border="0" alt="" src="http://i36.tinypic.com/awfbqq.jpg" height="85" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Ayer 17 de Julio se cumplieron 10 años del "momento glorioso" en que me recibí. Entre brindis y brindis, con mi esposa, con quién presentamos la tesis juntos, comenzamos a recordar el camino recorrido. Llegamos inmediatamente a la conclusión que 10 años, es mucho. Especialmente en el ambiente informático.&lt;br /&gt;Basta pensar en las PC XT que usábamos cuando alguno de nuestros amigos "pudientes" nos las facilitaban, a las máquinas actuales. La diferencia de conceptos que manejábamos. Lo limitados en recursos, etc, etc.&lt;br /&gt;Años maravillosos, que además de conocimientos técnicos, sumaron conocimientos humanos, quizá los primeros lejos de la casa natal. Quizá los que te marquen mas a fuego. En mi caso, y como le he dicho varias veces a mi mujer desde hace 20 años, tuve una enseñanza por parte de ella que fue fundamental: "me enseñó a soñar, y luego a cumplir esos sueños". Pero lejos estábamos todavía de tener una familia maravillosa como la que tenemos actualmente, con dos hijos que son la luz de mi camino.&lt;br /&gt;Sin haber asimilado la graduación, luego de solo 18 días desembarcábamos en Buenos Aires, aquél "monstruo" al que le tenía miedo, pero que las circunstancias de la vida me llevaron a enfrentarlo. Y definitivamente no fue tan grave. Encontramos en Sofrecom, una empresa que en ese momento estaba en pleno crecimiento, un conjunto de profesionales espectaculares, pero mejor personas, que nos recibieron con los brazos abiertos. Koko, Fabito, Fofi, Alex, Jaichen y tantos mas. Hasta hoy amigos y referentes.&lt;br /&gt;Luego Valicert, una empresa de USA con base en Argentina, y el bautismo internacional. Claramente una experiencia agotadora pero absolutamente enriquecedora.&lt;br /&gt;Mas tarde, y de la mano del gran "Chupete" De la Rúa, buscamos nuevos horizontes, cruzando los Andes. Desde hace 5 años instalados en Santiago de Chile, un lugar que nos cobijó desde el principio, y en el que encontramos gente espectacular. Que Petacos, que biodanza, que hipnosis, varios espacios donde encontramos gente dispuesta a ser nuestros amigos. Este país nos permitió desarrollar un aspecto de nuestra vida, que quién sabe por qué, lo teníamos escondido en nuestra bendita Argentina.&lt;br /&gt;No se donde nos encontrará la vida dentro de 10 años, pero espero que sea con experiencias de vida tan ricas como estas que pasaron.&lt;br /&gt;Perdonen por el "viejazo" o el "ataque de nostalgia" pero necesitaba ponerlo en palabras.&lt;br /&gt;So far, So good!!&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-5206445194337482417?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/R-tT8ip-1rzFRFS0uajR8qUAFDs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/R-tT8ip-1rzFRFS0uajR8qUAFDs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/R-tT8ip-1rzFRFS0uajR8qUAFDs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/R-tT8ip-1rzFRFS0uajR8qUAFDs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/07/que-10-aos-no-es-nada.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6151587310732787467.post-5661897511323338666</guid><pubDate>Tue, 22 Jul 2008 14:50:00 +0000</pubDate><atom:updated>2008-07-22T14:31:38.544-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">General</category><title>Mas vale tarde que nunca...</title><description>&lt;a href="http://3.bp.blogspot.com/_HqYM3PA8MJk/SIX0wKCT4EI/AAAAAAAAA20/uiXy_qpcwW0/s1600-h/gsuhit.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5225852050798272578" border="0" alt="" src="http://3.bp.blogspot.com/_HqYM3PA8MJk/SIX0wKCT4EI/AAAAAAAAA20/uiXy_qpcwW0/s320/gsuhit.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size:180%;color:#009900;"&gt;Y por fin comencé!!&lt;/span&gt;&lt;br /&gt;Hace mucho tiempo que tenía ganas de compartir un espacio en la web, y hoy, 22 de julio de 2008, fue el día seleccionado. Por que? No lo sé, quizá sea destino, lamparitas que se prenden, o simplemente porque fue un arrebato de escritor. Comenzaré a usar este espacio, principalmente para temas técnicos en informática, tips que encuentre interesantes, y como conexión hacia otros espacios del mismo estilo. Para temas mas generales usaré otro blog personal, que lo informaré a su debido momento, y que lo compartiré con mi amiga y confidente desde hace 20 años, mi esposa Mónica Nadal.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bienvenidos y ojalá les guste y sea útil!!! &lt;/div&gt;&lt;div&gt;Un abrazo amigo.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;So far, So good!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6151587310732787467-5661897511323338666?l=gsuhit.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/C507QdQeHD7zp_DZNby_q_W3eeY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C507QdQeHD7zp_DZNby_q_W3eeY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/C507QdQeHD7zp_DZNby_q_W3eeY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C507QdQeHD7zp_DZNby_q_W3eeY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://gsuhit.blogspot.com/2008/07/mas-vale-tarde-que-nunca.html</link><author>gsuhit@gmail.com (Gustavo Suhit)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_HqYM3PA8MJk/SIX0wKCT4EI/AAAAAAAAA20/uiXy_qpcwW0/s72-c/gsuhit.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item></channel></rss>
