<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Isomething's (No se lo que es, ni lo quiero)</title>
	<atom:link href="http://isomething.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://isomething.wordpress.com</link>
	<description>Cosas y mas cosas... tecnologicas y no tanto.</description>
	<lastBuildDate>Tue, 04 Jan 2011 13:38:21 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='isomething.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Isomething's (No se lo que es, ni lo quiero)</title>
		<link>http://isomething.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://isomething.wordpress.com/osd.xml" title="Isomething&#039;s (No se lo que es, ni lo quiero)" />
	<atom:link rel='hub' href='http://isomething.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Ejecutar una aplicacion de consola dentro de otra consola</title>
		<link>http://isomething.wordpress.com/2009/07/14/ejecutar-una-aplicacion-de-consola-dentro-de-otra-consola/</link>
		<comments>http://isomething.wordpress.com/2009/07/14/ejecutar-una-aplicacion-de-consola-dentro-de-otra-consola/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 00:40:21 +0000</pubDate>
		<dc:creator>isomething</dc:creator>
				<category><![CDATA[.NET tips]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[consola]]></category>
		<category><![CDATA[createnowindow]]></category>
		<category><![CDATA[misma consola]]></category>
		<category><![CDATA[misma ventana]]></category>
		<category><![CDATA[processstartinfo]]></category>
		<category><![CDATA[same console]]></category>
		<category><![CDATA[same console window]]></category>
		<category><![CDATA[useshellexecute]]></category>

		<guid isPermaLink="false">http://isomething.wordpress.com/?p=154</guid>
		<description><![CDATA[Esto me ocurrió en una oportunidad y no es algo completamente intuitivo, me tomo algunas pruebas (y tiempo) lograrlo, trataba de ejecutar una aplicacion de consola dentro de una consola "padre" sin que se crease otra ventana, la aplicacion era lanzada con una llamada a ProcessStartInfo. La clase process tiene dos propiedades booleanas que tienden a complicar las cosas: ProcessStartInfo.CreateNoWindow y ProcessStartInfo.UseShellExecute y aqui es donde empiezan los problemas...<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=154&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Esto me ocurrio en una oportunidad y no es algo completamente intuitivo, me tomo algunas pruebas (y tiempo) lograrlo, trataba de ejecutar una aplicacion de consola dentro de una consola &#8220;padre&#8221; sin que se crease otra ventana, la aplicacion era lanzada con una llamada a <strong><em>ProcessStartInfo. </em><span style="font-weight:normal;">La clase process tiene dos propiedades booleanas que tienden a complicar las cosas:</span></strong></p>
<ul>
<li><em>ProcessStartInfo.<strong>CreateNoWindow</strong></em></li>
<li><em>ProcessStartInfo.<strong>UseShellExecute</strong></em></li>
</ul>
<p>La primera indica si la nueva aplicacion va a ejecutarse en una ventana o no, si seteamos su valor en <strong><em>true</em><span style="font-weight:normal;"> ninguna ventana deberia crearse (es decir, deberia correr como un proceso en background) pero si seteamos su valor en </span><em>false</em><span style="font-weight:normal;"> lo que ocurra dependera del valor de </span><em>UseShellExecute<span style="font-weight:normal;"><span style="font-style:normal;"> y eso es lo que lo hace poco intuitivo.</span></span></em></strong></p>
<p><strong><em><span style="font-weight:normal;"><span style="font-style:normal;">Veamos las opciones y cuales serian los resultados:</span></span></em></strong></p>
<table border="1" bgcolor="#F5F5FF">
<tbody>
<tr>
<td style="text-align:center;" width="150"><strong><em>UseShellExecute</em></strong></td>
<td style="text-align:center;" width="150"><strong><em>CreateNoWindow</em></strong></td>
<td style="text-align:center;" width="300"><strong><em>Resultado, la aplicacion se ejecuta en:</em></strong></td>
</tr>
<tr>
<td>true</td>
<td>false</td>
<td>Una nueva ventana (ventana hijo)</td>
</tr>
<tr>
<td>false</td>
<td>true</td>
<td>Sin ventana (en background)</td>
</tr>
<tr>
<td>false</td>
<td>false</td>
<td>Una ventana existente (ventana padre)</td>
</tr>
</tbody>
</table>
<p>Para ver con mas detalle las implicaciones de <strong><em>UseShellExecute</em><span style="font-weight:normal;"> pueden leer la entrada de MSDN <a title="UseShellExecute MSDN entry" href="http://msdn.microsoft.com/es-es/library/system.diagnostics.processstartinfo.useshellexecute(VS.80).aspx" target="_blank">aqui</a>, lo mas importante es que su valor predeterminado es <em><strong>True </strong><span style="font-style:normal;">y esto nos permite iniciar cualquier documento o archivo asociado a una aplicacion sin tener que saber cual es la que lo maneja (se inicia con la aplicacion que este asociada en Windows a esa extension de archivo), si se </span></em> setea su valor en <em>false </em>entonces podemos redirigir los streams de entrada, salida y error del proceso. La propiedad <em><strong>WorkingDirectory</strong><span style="font-style:normal;"> tambien cambia segun si UseShellExecute es verdadera o falsa.</span></em></span></strong></p>
<h3>Codigo de ejemplo:</h3>
<p><strong><span style="font-weight:normal;"><em><span style="font-style:normal;">El siguiente codigo es un pequeño ejemplo de como iniciar un proceso y cuales son las propiedades a setear para lograr que este nuevo proceso se muestre como nosotros le indiquemos (en este caso el proceso se mostraria en la misma consola del proceso padre), las propiedades a setear estan en la linea 2 y 3:</span></em></span></strong></p>
<p><strong><span style="font-weight:normal;"><em><span style="font-style:normal;"><br />
</span></em></span></strong></p>
<table border="1" width="600" bgcolor="#F5F5FF">
<tbody>
<tr>
<td>
<pre><span style="color:teal;">  1 </span>ProcessStartInfo pInfo = <span style="color:blue;">new</span> ProcessStartInfo(fileName, arg);
<span style="color:teal;">  2 </span>pInfo.CreateNoWindow = <span style="color:maroon;">false</span>;
<span style="color:teal;">  3 </span>pInfo.UseShellExecute = <span style="color:maroon;">false</span>;
<span style="color:teal;">  4 </span>Process procNew = Process.Start(pInfo);</pre>
</td>
</tr>
</tbody>
</table>
<p>Como ven es bastante sencillo, pero bueno queria dejarlo escrito aqui con el proposito de ahorrarle un poco de tiempo a alguien que se encuentre tratando de hacer esto y no vea inmediatamente las interacciones entre ese par de propiedades.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/isomething.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/isomething.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/isomething.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/isomething.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/isomething.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/isomething.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/isomething.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/isomething.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/isomething.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/isomething.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/isomething.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/isomething.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/isomething.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/isomething.wordpress.com/154/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=154&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://isomething.wordpress.com/2009/07/14/ejecutar-una-aplicacion-de-consola-dentro-de-otra-consola/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7aea0da025de2bfd9dec92c6350fd776?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">isomething</media:title>
		</media:content>
	</item>
		<item>
		<title>Antivirus masivo</title>
		<link>http://isomething.wordpress.com/2009/04/06/antivirus-masivo/</link>
		<comments>http://isomething.wordpress.com/2009/04/06/antivirus-masivo/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 23:50:16 +0000</pubDate>
		<dc:creator>isomething</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[anti]]></category>
		<category><![CDATA[antivirus]]></category>
		<category><![CDATA[masivo]]></category>
		<category><![CDATA[multiples]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[virus]]></category>
		<category><![CDATA[virustotal]]></category>

		<guid isPermaLink="false">http://isomething.wordpress.com/?p=149</guid>
		<description><![CDATA[Virustotal, es un servicio on line gratuito que permite analizar un archivo usando multiples antivirus al mismo tiempo. La idea basica es que subimos un archivo al servidor de Virustotal, ellos lo ponen en una cola de analisis pendientes y una vez que nos toca el turno el archivo se analiza usando 38 antivirus, para luego mostrar un resumen de las amenazas que cada antivirus ha detectado en ese archivo.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=149&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.virustotal.com" target="_blank"></a><a href="http://www.virustotal.com"><img class="alignleft size-full wp-image-150" title="virustotal-logo" src="http://isomething.files.wordpress.com/2009/04/virustotal-logo.png?w=252&#038;h=107" alt="virustotal-logo" width="252" height="107" /></a>Virustotal, es un servicio on line gratuito que permite analizar un archivo usando multiples antivirus al mismo tiempo. La idea basica es que subimos un archivo al servidor de Virustotal, ellos lo ponen en una cola de analisis pendientes y una vez que nos toca el turno el archivo se analiza usando 38 antivirus, para luego mostrar un resumen de las amenazas que cada antivirus ha detectado en ese archivo. El tiempo que demora en ser analizado nuestro archivo depende de la carga que exista en los servidores en ese momento, pero en general no demora mas de una decena de segundos.</p>
<p>Los antivirus que se emplean para analizar la muestra son (al dia de hoy) los siguientes:</p>
<p>AhnLab (V3), Aladdin (eSafe), ALWIL (Avast! Antivirus), Authentium (Command Antivirus), AVG Technologies (AVG), Avira (AntiVir), Cat Computer Services (Quick Heal), ClamAV (ClamAV), Comodo (Comodo), CA Inc. (Vet), Doctor Web, Ltd. (DrWeb), Emsi Software GmbH (a-squared), Eset Software (ESET NOD32), Fortinet (Fortinet), FRISK Software (F-Prot),F-Secure (F-Secure), G DATA Software (GData), Hacksoft (The Hacker), Hauri (ViRobot), Ikarus Software (Ikarus), INCA Internet (nProtect), K7 Computing (K7AntiVirus), Kaspersky Lab (AVP), McAfee (VirusScan), Microsoft (Malware Protection), Norman (Norman Antivirus), Panda Security (Panda Platinum), PC Tools (PCTools), Prevx (Prevx1), Rising Antivirus (Rising), Secure Computing (SecureWeb), BitDefender GmbH (BitDefender), Sophos (SAV), Sunbelt Software (Antivirus), Symantec (Norton Antivirus), VirusBlokAda (VBA32), Trend Micro (TrendMicro), VirusBuster (VirusBuster).</p>
<p>Hmmm unos cuantos&#8230; ¿no?</p>
<p>La pagina tambien posee una seccion de estadisticas que nos muestra cuales son los virus mas activos (o mas detectados) en las ultimas 24 horas, la proporcion de fallos que existe: esto es virus que no son detectados por algun antivirus y por otros si, la cantidad de actualizaciones que se han realizado a las bases de datos de los antivirus, como asi tambien una muestra de la carga promedio del servicio.</p>
<p>Tambien tiene una opcion que nos hara la vida mas facil a quienen tenemos conexiones a internet con bajas velocidades de upload (hay que recordar que el archivo es subido desde nuestra computadora hacia los servidores de VirusTotal), esta opcion permite ingresar el hash de un archivo ya sea en md5, sha1 o sha256 (existen infinidad de aplicaciones freeware que permiten obtener estos resumenes) y ese valor se compara con los que el servidor ya ha analizado con anterioridad, si el valor de hash es encontrado se muestra el resumen del analisis de ese archivo (y con altisima probabilidad se va a tratar de nuestro mismo archivo). Este es un ejemplo de un analisis por hash del archivo regedit.exe (de Win Server 2003) cuyo valor de md5 es &#8220;0f4db85e5ff5e203a94fdc5059e89297&#8243; :</p>
<p> </p>
<div id="attachment_152" class="wp-caption aligncenter" style="width: 544px"><a href="http://www.virustotal.com/analisis/24e345ece029521b31b646286876aae8"><img class="size-full wp-image-152" title="virusanalisis" src="http://isomething.files.wordpress.com/2009/04/virusanalisis.png?w=534&#038;h=1293" alt="Virus Total Analisis Screenshot" width="534" height="1293" /></a><p class="wp-caption-text">Virus Total Analisis Screenshot</p></div>
<p> </p>
<p>Pero las opciones no terminan ahi, tambien existe la posibilidad de enviar por mail el archivo a ser analizado y luego ellos nos responderan con el sumario del analisis, para esto solo es necesario enviar un mail a la direccion analiza@virustotal.com adjuntando el archivo a analizar y usando &#8220;ANALIZA&#8221; como subject del email.</p>
<p>Como si todo esto fuera poco, tambien nos proveen de una mini aplicacion &#8220;VirusTotal Uploader&#8221; que añade la opcion al menu contextual de enviar un archivo a analizar.</p>
<p><a href="http://www.virustotal.com/es/metodos.html"><img class="alignleft size-full wp-image-151" title="es_virustotal-uploader" src="http://isomething.files.wordpress.com/2009/04/es_virustotal-uploader.png?w=365&#038;h=213" alt="es_virustotal-uploader" width="365" height="213" /></a></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>Excelente utilidad, muy rapida, sencilla, no requiere registracion, ¿que mas se puede pedir?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/isomething.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/isomething.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/isomething.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/isomething.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/isomething.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/isomething.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/isomething.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/isomething.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/isomething.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/isomething.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/isomething.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/isomething.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/isomething.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/isomething.wordpress.com/149/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=149&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://isomething.wordpress.com/2009/04/06/antivirus-masivo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7aea0da025de2bfd9dec92c6350fd776?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">isomething</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/04/virustotal-logo.png" medium="image">
			<media:title type="html">virustotal-logo</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/04/virusanalisis.png" medium="image">
			<media:title type="html">virusanalisis</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/04/es_virustotal-uploader.png" medium="image">
			<media:title type="html">es_virustotal-uploader</media:title>
		</media:content>
	</item>
		<item>
		<title>Micro optimizaciones</title>
		<link>http://isomething.wordpress.com/2009/03/29/micro-optimizaciones/</link>
		<comments>http://isomething.wordpress.com/2009/03/29/micro-optimizaciones/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 01:54:07 +0000</pubDate>
		<dc:creator>isomething</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[legibilidad]]></category>
		<category><![CDATA[maintenance]]></category>
		<category><![CDATA[mantenibilidad]]></category>
		<category><![CDATA[mcro]]></category>
		<category><![CDATA[optimizaciones]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[readability]]></category>

		<guid isPermaLink="false">http://isomething.wordpress.com/?p=145</guid>
		<description><![CDATA[... muchas veces, se empieza por el final se añaden optimizaciones, opciones, y cosas que quizas jamas se llegan a usar y complican todo, y eso sucede antes de verificar que nuestro codigo resuelve el problema que se nos ha planteado, se confunde el "buen codigo" con el "codigo complejo"... ...lo importante es evaluar cuan efectiva va a ser una micro optimizacion en el contexto general del sistema y cuan complejo y dificil de manter va a ser nuestro codigo despues de aplicar una micro optimizacion...<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=145&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hace un tiempo escribi una entrada sobre convesion de cantidades de bytes a cadenas que puedan ser entendidas por un humano (p.e. 1073741824 bytes = 1 GB) y compare los dos metodos mas comunes para lograr esta conversion: por funciones exponenciales y por medios iterativos.</p>
<p>Hace un tiempo lei una entrada sobre micro optimizaciones de codigo en el genial <a href="http://www.codinghorror.com/blog/" target="_blank">Coding Horror</a> de Jeff Atwood (este blog es un &#8220;must have&#8221;, agregenlo a su lector de RSS si es que aun no lo tienen), el <a href="http://www.codinghorror.com/blog/archives/001218.html" target="_blank">link del post es este</a> y vale la pena leerlo.</p>
<p>Resumiendo y volviendo al tema de la convesion de cantidades de bytes: &#8220;Cual de los 2 metodos es mejor?&#8221;</p>
<h1>It. Just. Doesn&#8217;t. Matter!</h1>
<p>No importa, en el 99.99% de los casos no importa en lo mas minimo cual de los 2 metodos es mas rapido. El metodo de exponenciales tarda 20 segundos contra los 17 que emplea el metodo de iteraciones para resolver 10.000.000 de valores a strings (si 10 millones), una diferencia de 3 segundos en semejante cantidad de valores de entrada no hace una gran diferencia.</p>
<p>Supongamos que estamos usando algun metodo de esos para convertir tamaños de archivos cuyo descriptor de tamaño esta siendo recuperado desde el disco, ¿cuanto tiempo se tardaria en obtener la informacion del tamaño de 10 millones de archivos? mucho, por cierto, en la mayor parte de los sistemas de archivos, varios minutos.  Cuan notable seria el impacto de esos 3 segundos en el tiempo total de la operacion: muy poco.</p>
<p>La idea general podria resumirse de este modo: antes de enloquecer con micro optimizaciones (que a veces salen mal&#8230; y complican las cosas) vale observar lo siguiente:</p>
<ul>
<li>Facilidad de lectura y compresion del codigo</li>
</ul>
<p>Ese es el punto importante. Quizas despues podria se empezar a hablarse de cual metodo consume menos memoria y 1000 etceteras, pero lo importante es evaluar cuan efectiva va a ser la micro optimizacion en el contexto general del sistema y cuan complejo y dificil de manter va a ser nuestro codigo despues de aplicar una micro optimizacion. Si corremos el codigo de conversion de cantidades sobre valores que salen de una base de datos que tiene 1000 millones de registros quizas si valga la pena usar un metodo veloz, pero si necesitamos convertir unos pocos valores (y con pocos quizas hablo de millones de entradas) el metodo que sea mas facil de entender y mantener es el que lleva las de ganar y el que deberia usarse.</p>
<p>No recuerdo bien quien (creo que un profesor de la universidad) me decia: &#8220;<em>primero has que el codigo funcione, despues mejoralo</em>&#8220;, y eso es lo que ocurre muchas veces, se empieza por el final se añaden optimizaciones, opciones, y cosas que quizas jamas se llegan a usar y complican todo, y eso sucede antes de verificar que nuestro codigo resuelve el problema que se nos ha planteado, se confunde el &#8220;buen codigo&#8221; con el &#8220;codigo complejo&#8221;.</p>
<p>Por favor, a quien le haya interesado este tema: lea el post Coding Horror, esto no es mas que una pobre reseña de ese articulo.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/isomething.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/isomething.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/isomething.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/isomething.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/isomething.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/isomething.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/isomething.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/isomething.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/isomething.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/isomething.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/isomething.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/isomething.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/isomething.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/isomething.wordpress.com/145/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=145&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://isomething.wordpress.com/2009/03/29/micro-optimizaciones/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7aea0da025de2bfd9dec92c6350fd776?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">isomething</media:title>
		</media:content>
	</item>
		<item>
		<title>Como acceder imagenes y la hoja de estilos desde un ASP.NET Login Form</title>
		<link>http://isomething.wordpress.com/2009/02/21/como-acceder-imagenes-y-la-hoja-de-estilos-desde-un-aspnet-login-form/</link>
		<comments>http://isomething.wordpress.com/2009/02/21/como-acceder-imagenes-y-la-hoja-de-estilos-desde-un-aspnet-login-form/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 19:15:00 +0000</pubDate>
		<dc:creator>isomething</dc:creator>
				<category><![CDATA[Visual Studio Tips]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[resources]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[recursos bloqueados]]></category>
		<category><![CDATA[bloqued]]></category>
		<category><![CDATA[authorization]]></category>
		<category><![CDATA[autorizacion]]></category>
		<category><![CDATA[vs2005 web server]]></category>
		<category><![CDATA[estilos]]></category>
		<category><![CDATA[formulario]]></category>
		<category><![CDATA[web.config]]></category>
		<category><![CDATA[allow users]]></category>

		<guid isPermaLink="false">http://isomething.wordpress.com/?p=141</guid>
		<description><![CDATA[El servidor web de desarrollo de VS2005 aplica las reglas de autorizacion a todas las URL de recusos, ya sean estaticos o dinamicos. Esto puede ser un ploblema para las paginas de login. Como hacer para acceder hojas de estilos, imagenes o cualquier otro recursos desde una pagina de Login?<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=141&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Este fue uno de mis primeros dolores de cabeza cuando empece a programar en ASP.NET, habia creado una aplicacion chica que constaba de un formulario de login, una pagina Default.aspx y una hoja de estilos, despues agregue algunas imagenes, el archivo web.config estaba configurado para solo permitir el acceso de usuarios autentificados y estaba testeando la aplicacion usando el servior web de desarrollo de VS2005. </p>
<p>Lo primero que note es que la pagina de login no tomaba los estilos CSS, por mas que intentara todas las posibles formas de centrar algo en una pagina por medio de CSS el formulario de login seguia apareciendo arriba y a la izquierda, mala suerte pense&#8230; despues algo me llamo aun mas la atencion: las imagenes en la pagina de login no se mostraban solo su texto alt&#8230; hmmm&#8230; hasta que por fin di con la solucion, pero primero empecemos con la causa de este problema:</p>
<h3>Porque sucede esto? (porque justo a mi!)</h3>
<p>Cuando se define en web.config la autentificacion solo para usuarios conocidos, del siguiente modo:</p>
<p> </p>
<div id="attachment_142" class="wp-caption alignleft" style="width: 450px"><img class="size-full wp-image-142" title="webconfig01" src="http://isomething.files.wordpress.com/2009/02/webconfig01.png?w=440&#038;h=226" alt="Configuracion para bloquear acceso a usuarios anominos" width="440" height="226" /><p class="wp-caption-text">Configuracion para bloquear acceso a usuarios anominos</p></div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>lo unico que queda disponible publicamente es el archivo <em>aspx</em> de la pagina de login, <strong>todas las referencias a recursos dinamicos o estaticos son bloqueados por el servidor de desarrollo de ASP.NET de VS2005</strong>, esto es: archivos de estilos, imagenes, paginas .aspx y cualquier otro recurso que no sea Login.aspx no podran ser accedidos y el servidor no les dara la menor pista de que esto esta sucediendo, y porque digo:  <strong>servidor de desarrollo ASP.NET de VS2005</strong>, porque si este mismo codigo se corre sobre IIS los recursos estaticos no estaran bloqueados por defecto, o sea sobre IIS todo funcionara con normalidad ya que la configuracion default no aplica las reglas de autorizacion a los recursos estaticos, las unicas cosas que no podran accederse son las paginas dinamicas aspx que no sean Login.aspx (como es de esperar&#8230;).</p>
<p> </p>
<p><strong>Como solucionar esto? (y ahora que hago!)</strong></p>
<p>Para permitir que ciertos recursos esten disponibles a usuarios anonimos hay que agregar una regla de autorizacion al web.config (imagen de abajo, recuadro en rojo), en este caso estamos permitiendo que los usuarios puedan acceder a la hoja de estilos (Estilos.css) y a una imagen (Header.png):</p>
<p> </p>
<div id="attachment_143" class="wp-caption alignleft" style="width: 481px"><img class="size-full wp-image-143 " title="webconfig02" src="http://isomething.files.wordpress.com/2009/02/webconfig02.png?w=471&#038;h=528" alt="Modificacion de web.config para permitir acceso publico a ciertos archivos" width="471" height="528" /><p class="wp-caption-text">Modificacion de web.config para permitir acceso publico a ciertos recursos</p></div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>Una vez que generamos nuevamente el sitio estos dos recursos estaran disponibles para ser usados desde nuestra pagina de login, entonces ya podremos usar esa imagen y la pagina de login se formateara segun los estilos que tengamos definidos para el resto del sitio.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/isomething.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/isomething.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/isomething.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/isomething.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/isomething.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/isomething.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/isomething.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/isomething.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/isomething.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/isomething.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/isomething.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/isomething.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/isomething.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/isomething.wordpress.com/141/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=141&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://isomething.wordpress.com/2009/02/21/como-acceder-imagenes-y-la-hoja-de-estilos-desde-un-aspnet-login-form/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7aea0da025de2bfd9dec92c6350fd776?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">isomething</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/02/webconfig01.png" medium="image">
			<media:title type="html">webconfig01</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/02/webconfig02.png" medium="image">
			<media:title type="html">webconfig02</media:title>
		</media:content>
	</item>
		<item>
		<title>Conversor de iconos (+ algunos sets completos y lindos)</title>
		<link>http://isomething.wordpress.com/2009/02/11/conversor-de-iconos-algunos-sets-completos-y-lindos/</link>
		<comments>http://isomething.wordpress.com/2009/02/11/conversor-de-iconos-algunos-sets-completos-y-lindos/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 02:05:18 +0000</pubDate>
		<dc:creator>isomething</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[coleccion]]></category>
		<category><![CDATA[conversor]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[converter]]></category>
		<category><![CDATA[convertir]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[icon]]></category>
		<category><![CDATA[icono]]></category>
		<category><![CDATA[iconos]]></category>
		<category><![CDATA[icons]]></category>
		<category><![CDATA[png to ico]]></category>
		<category><![CDATA[set]]></category>

		<guid isPermaLink="false">http://isomething.wordpress.com/?p=131</guid>
		<description><![CDATA[El aspecto grafico de una aplicacion es bastante importante (a nadie le gusta usar una aplicacion que se ve fea por mas bien que ande...), si bien los que nos dedicamos a programar no sabemos mucho de diseño grafico y hasta a veces tenemos un gusto pesimo para combinar colores en la aplicacion (mi caso) siempre se puede echar mano a un recurso muy facil de usar y que le da un aspecto un poco mas profesional a la aplicacion "los iconos". Los iconos no solo nos permiten romper la monotonia de paneles, botones y textos en tonalidades de grises sino que ademas permiten que el usuario del programa se guie por ellos, es decir, hacen que la aplicacion sea mas facil y comoda de usar (es bastante mas facil identificar rapidamente en una interfaz un icono que tiene un "+" en color verde que buscar el boton que tiene un texto "add" en una letra minuscula) .
En este post una aplicacion web para convertir imagenes a iconos y algunas lindas colecciones de iconos.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=131&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>El aspecto grafico de una aplicacion es bastante importante (a nadie le gusta usar una aplicacion que se ve fea por mas bien que ande&#8230;), si bien los que nos dedicamos a programar no sabemos mucho de diseño grafico y hasta a veces tenemos un gusto pesimo para combinar colores en la aplicacion (mi caso) siempre se puede echar mano a un recurso muy facil de usar y que le da un aspecto un poco mas profesional a la aplicacion &#8220;los iconos&#8221;. Los iconos no solo nos permiten romper la monotonia de paneles, botones y textos en tonalidades de grises sino que ademas permiten que el usuario del programa se guie por ellos, es decir, hacen que la aplicacion sea mas facil y comoda de usar (es bastante mas facil identificar rapidamente en una interfaz un icono que tiene un &#8220;+&#8221; en color verde que buscar el boton que tiene un texto &#8220;add&#8221; en una letra minuscula) .</p>
<p>Pero el gran problema es que en general los iconos que se ven mas bonitos no estan en formato .ICO que es el formato que  acepta la mayoria de los IDE de programacion, entonces no nos queda otra mas que convertirlos de formato&#8230; existen infinidad de mini aplicaciones de escritorio (y algunas no tan mini) que nos permiten convertir una imagen a formato de icono, pero en este caso voy a reseñar una aplicacion web que sirve para tales fines.</p>
<p><a href="http://www.convertico.com/" target="_blank"><img class="alignright size-full wp-image-133" title="convertico1" src="http://isomething.files.wordpress.com/2009/02/convertico1.gif?w=338&#038;h=86" alt="convertico1" width="338" height="86" />ConvertIco.com</a> es una pagina que nos permite convertir un icono en formato PNG a ICO, es posible cargar la imagen desde nuestra maquina local o bien desde una url y con un simple click ya tendremos nuestro icono listo para ser usado. Cabe destacar que la pagina no tiene ads molestos ni popups ni nada, asi que punto a favor.</p>
<p>Para conventir una imagen simplemente podemos arrastrarla y soltarla en la parte de la pagina que tiene un boton para buscar el archivo (o podemos buscarlo a mano en el dialogo de seleccion de archivos&#8230;) o bien se puede ingresar la url de una imagen, depues de eso simplemente clickeamos en <strong>convertir </strong>y ya esta, nos va a aparecer otra pagina con un link para bajar nuestro archivo o bien podemos hacer click derecho y grabarlo donde nos guste. Sencillo, comodo rapido y util.</p>
<p> </p>
<h2>Sets de Iconos:</h2>
<p>De paso dejo algunos links a sets de iconos, relacionados con el desarrollo de aplicaciones, estan bastante completos y se ven muy bien:</p>
<p> </p>
<p><a href="http://www.famfamfam.com/lab/icons/silk/" target="_blank">Silk Icons</a>: uno de mis favoritos, super completo (mas de 700 iconos), todos en 16&#215;16 pixeles, gratuitos (en <a href="http://www.famfamfam.com/lab/icons/silk/previews/index_abc.png" target="_blank">este link</a> se puede ver el conjunto completo). En la pagina tembien hay algunos otros sets interesantes. </p>
<p> </p>
<div id="attachment_134" class="wp-caption alignleft" style="width: 822px"><img class="size-full wp-image-134 " title="seticonos01" src="http://isomething.files.wordpress.com/2009/02/seticonos01.png?w=812&#038;h=105" alt="FAMFAMFAM Silk Icons" width="812" height="105" /><p class="wp-caption-text">FAMFAMFAM Silk Icons</p></div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><a href="http://www.aspneticons.com/" target="_blank">ASP.NET Icons</a>: tambien bastante lindos, 300+ iconos gratuitos (solo para aplicaciones ASP.NET).</p>
<div id="attachment_135" class="wp-caption alignleft" style="width: 816px"><img class="size-full wp-image-135" title="seticonos02" src="http://isomething.files.wordpress.com/2009/02/seticonos02.png?w=806&#038;h=133" alt="ASP.NET Icons" width="806" height="133" /><p class="wp-caption-text">ASP.NET Icons</p></div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><a href="http://www.pinvoke.com/" target="_blank">Fugue</a>: una coleccion realmente grande 1469 iconos! 16&#215;16 pixeles, formato PNG, Creative Commons 3. <a href="http://www.pinvoke.com/icon/image/fugue_all.png" target="_blank">Vista previa</a>.</p>
<p> </p>
<div id="attachment_138" class="wp-caption alignleft" style="width: 893px"><img class="size-full wp-image-138" title="seticonos05" src="http://isomething.files.wordpress.com/2009/02/seticonos05.png?w=883&#038;h=126" alt="Fugue Icon Set" width="883" height="126" /><p class="wp-caption-text">Fugue Icon Set</p></div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><a href="http://www.pinvoke.com/" target="_blank">Diagona</a>: coleccion de 400 iconos (200+200 en 10&#215;10 y 16&#215;16), formato PNG, Creative Commons 3. <a href="http://www.pinvoke.com/icon/image/diagona.png" target="_blank">Vista Previa</a>.</p>
<p> </p>
<div id="attachment_139" class="wp-caption alignleft" style="width: 468px"><img class="size-full wp-image-139" title="seticonos06" src="http://isomething.files.wordpress.com/2009/02/seticonos06.png?w=458&#038;h=216" alt="Diagona Icon Set" width="458" height="216" /><p class="wp-caption-text">Diagona Icon Set</p></div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><a href="http://pixelresort.com/icon/" target="_blank">Pixelicious</a>: 150 iconos gratuitos para uso personal o no comercial.</p>
<p> </p>
<div id="attachment_136" class="wp-caption alignleft" style="width: 791px"><img class="size-full wp-image-136" title="seticonos03" src="http://isomething.files.wordpress.com/2009/02/seticonos03.png?w=781&#038;h=150" alt="Pixelicious Icon Set" width="781" height="150" /><p class="wp-caption-text">Pixelicious Icon Set</p></div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><a href="http://sweetie.sublink.ca/" target="_blank">Sweetie</a>: dos colecciones &#8220;Sweetie BasePack&#8221; y &#8220;Sweetie WebCommuncation&#8221;, licencia Creative Commons.</p>
<div id="attachment_137" class="wp-caption alignleft" style="width: 834px"><img class="size-full wp-image-137" title="seticonos04" src="http://isomething.files.wordpress.com/2009/02/seticonos04.png?w=824&#038;h=135" alt="Sweetie Icons Sets" width="824" height="135" /><p class="wp-caption-text">Sweetie Icons Sets</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/isomething.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/isomething.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/isomething.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/isomething.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/isomething.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/isomething.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/isomething.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/isomething.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/isomething.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/isomething.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/isomething.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/isomething.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/isomething.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/isomething.wordpress.com/131/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=131&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://isomething.wordpress.com/2009/02/11/conversor-de-iconos-algunos-sets-completos-y-lindos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7aea0da025de2bfd9dec92c6350fd776?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">isomething</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/02/convertico1.gif" medium="image">
			<media:title type="html">convertico1</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/02/seticonos01.png" medium="image">
			<media:title type="html">seticonos01</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/02/seticonos02.png" medium="image">
			<media:title type="html">seticonos02</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/02/seticonos05.png" medium="image">
			<media:title type="html">seticonos05</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/02/seticonos06.png" medium="image">
			<media:title type="html">seticonos06</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/02/seticonos03.png" medium="image">
			<media:title type="html">seticonos03</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/02/seticonos04.png" medium="image">
			<media:title type="html">seticonos04</media:title>
		</media:content>
	</item>
		<item>
		<title>Recursos incrustados en .NET usando Visual Studio 2005</title>
		<link>http://isomething.wordpress.com/2009/02/10/recursos-incrustados-en-net-usando-visual-studio-2005/</link>
		<comments>http://isomething.wordpress.com/2009/02/10/recursos-incrustados-en-net-usando-visual-studio-2005/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 19:13:15 +0000</pubDate>
		<dc:creator>isomething</dc:creator>
				<category><![CDATA[.NET tips]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Visual Studio Tips]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[iconos]]></category>
		<category><![CDATA[icons]]></category>
		<category><![CDATA[imagenes]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[incrustados]]></category>
		<category><![CDATA[Me.resources]]></category>
		<category><![CDATA[recursos]]></category>
		<category><![CDATA[resources]]></category>
		<category><![CDATA[usar]]></category>
		<category><![CDATA[use]]></category>
		<category><![CDATA[vb.net]]></category>

		<guid isPermaLink="false">http://isomething.wordpress.com/?p=126</guid>
		<description><![CDATA[Muchas veces sucede que necesitamos incluir un set de iconos, imagenes o inclusive algunos archivos en nuestra aplicacion para eso tenemos unas cuantas tecnicas no muy "ortodoxas" que son un dolor de cabeza al momento de hacer el deployment de la aplicacion, pero si usamos el gestor de recursos de Visual Studio 2005 la mayor parte de esos problemas estaran solucionados.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=126&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Muchas veces sucede que necesitamos incluir un set de iconos, imagenes o inclusive algunos archivos en nuestra aplicacion para eso tenemos unas cuantas tecnicas no muy &#8220;ortodoxas&#8221; que son un dolor de cabeza al momento de hacer el deployment de la aplicacion, pero si usamos el gestor de recursos de Visual Studio 2005 la mayor parte de esos problemas estaran solucionados.</p>
<p>Para acceder al gestor de recursos de Visual Studio tenemos que abrir las <strong>propiedades </strong>del proyecto:</p>
<p> </p>
<div id="attachment_127" class="wp-caption aligncenter" style="width: 426px"><img class="size-full wp-image-127" title="resources01" src="http://isomething.files.wordpress.com/2009/02/resources01.png?w=416&#038;h=520" alt="Obteniendo las propiedades del proyecto" width="416" height="520" /><p class="wp-caption-text">Obteniendo las propiedades del proyecto</p></div>
<p> </p>
<p> </p>
<p> </p>
<p>Una vez que estamos viendo las propiedades de nuestro proyecto, debemos seleccionar el tab vertical &#8220;<strong>Recursos</strong>&#8220;:</p>
<p> </p>
<div id="attachment_128" class="wp-caption aligncenter" style="width: 442px"><img class="size-full wp-image-128" title="resources02" src="http://isomething.files.wordpress.com/2009/02/resources02.png?w=432&#038;h=354" alt="Vista del gestor de recursos" width="432" height="354" /><p class="wp-caption-text">Vista del gestor de recursos</p></div>
<p> </p>
<p> </p>
<p>Visual Studio nos permite gestionar de un modo muy transparente y sencillo casi cualquier tipo de recurso:</p>
<ul>
<li><strong>Strings</strong>: cada string puede caracterizarse por un conjunto de {<em>Nombre, Valor, Comentario</em>}.</li>
<li><strong>Imagenes</strong>: los formatos de imagen soportados son PNG, JPG, BMP, TIF, GIF.</li>
<li><strong>Iconos</strong>: solo extensiones .ICO</li>
<li><strong>Audio</strong>: solo archivos .WAV</li>
<li><strong>Archivos</strong>: cualquier tipo de archivo, sin embargo en general seran tratados como archivos .TXT, si bien es posible seleccionar que se trata de un archivo binario desde las propiedades del recurso.</li>
<li><strong>Otros</strong>: recursos personalizados caracterizados por <em>Nombre, Tipo, Valor y Comentario</em>.</li>
</ul>
<p> </p>
<p>La gran ventaja de esta tecnica es que nos permite emplear los recusos de un modo muy sencillo, como ejemplo voy a mostrar una aplicacion que muestra  un icono animado en el tray bar (en realidad cambia peridicamente el icono que esta mostrando para dar la sensacion de animacion).</p>
<p>Primero agregamos 2 iconos a los recursos de la aplicacion, para esto simplemente arrastramos el archivo de icono hacia el gestor de recursos de VS2005 o bien vamos al menu y seleccionamos &#8220;Agregar archivo existente&#8230;&#8221; , vale aclarar que VS2005 tambien nos permite crear un icono a travez de un editor integrado que posee.</p>
<p>Una vez que tenemos esos iconos en nuestra aplicacion ya podemos usarlos, supongamos que tenemos un Form que dispone de un objeto <strong>NotifyIcon</strong> y un <strong>Timer</strong> (ajustado para dispare el evento Tick no muy rapidamente, supongamos un intervalo de 500 ms o mas.)</p>
<p>Nuestro objetivo es que el icono del NotifyIcon cambie en cada periodo de Timer, para esto vamos a escribir el codigo directamente en el handler de Tick del Timer, solo necesitaremos de una variable auxiliar que nos indique que icono estamos mostrando, es este caso podemos usar una variable booleana ya que nuestra animacion va a tener solamente 2 estados, en caso de usar mas iconos para representar la animacion habra que usar algun otro tipo de variable (en general: un entero al que asignamos su valor aumentado uno y le calculamos el modulo de la cantidad de estados que tiene la animacion, <strong><em>status = (status + 1) MOD &lt;cantidad_de_estados&gt;</em></strong>)</p>
<p>El codigo que hara que nuestro icono se muestre animado es simplemente el siguiente:</p>
<p> </p>
<table border="1" bgcolor="#F5F5FF">
<tbody>
<tr>
<td>
<pre><span style="color:teal;">  1 </span><span style="color:blue;">Private</span> m_iconSequence <span style="color:blue;">As</span> <span style="color:blue;">Boolean</span> = <span style="color:maroon;">False</span>
<span style="color:teal;">  2 </span>
<span style="color:teal;">  3 </span><span style="color:blue;">Private</span> <span style="color:blue;">Sub</span> TimerRefreshTrayBarIcon_Tick(<span style="color:blue;">ByVal</span> sender <span style="color:blue;">As</span> System.<span style="color:blue;">Object</span>, <span style="color:blue;">ByVal</span> e <span style="color:blue;">As</span> System.EventArgs) <span style="color:blue;">Handles</span> TimerRefreshTrayBarIcon.Tick
<span style="color:teal;">  4 </span>        <span style="color:blue;">If</span> (m_iconSequence) <span style="color:blue;">Then</span>
<span style="color:teal;">  5 </span>            NotifyIcon.Icon = My.Resources.application_get
<span style="color:teal;">  6 </span>        <span style="color:blue;">Else</span>
<span style="color:teal;">  7 </span>            NotifyIcon.Icon = My.Resources.application_put
<span style="color:teal;">  8 </span>        <span style="color:blue;">End</span> <span style="color:blue;">If</span>
<span style="color:teal;">  9 </span>        m_iconSequence = <span style="color:blue;">Not</span> m_iconSequence
<span style="color:teal;"> 10 </span><span style="color:blue;">End</span> <span style="color:blue;">Sub</span></pre>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>La variable m_iconSequence es la que nos indica que icono estamos mostrando (su estado cambia en la linea 9 cada vez que mostramos el icono, cada vez que el timer se vence). Pero vamos a lo importante: para cambiar el icono solo es necesario asignar el valor de <em><strong>Me</strong>.Resources.application_get </em>(<strong>Cuidado: No confundir con &#8220;<em>My</em>&#8220;</strong>) a la propiedad Icon del NotifyIcon, nada mas que eso, podemos olvidarnos por completo de castings, conversiones, cargado del icono desde un archivo, etc. <strong><em>Me.Resources</em><span style="font-weight:normal;"> contiene todos los recursos que hayamos agregado en el proyecto, cada recurso se identifica por el nombre que le hayamos asignado en el gestor de recursos (en este caso los iconos se llaman <em>application_get </em>y <em>application_put </em>como se puede ver en la imagen de arriba).</span></strong></p>
<p><strong><span style="font-weight:normal;">Por ultimo, Visual Studio nos permite crear archivos de recursos &#8220;sueltos&#8221; que luego utilizaremos segun sea necesario, esto es bastante util para aplicaciones multilinguales donde por ejemplo una image contine un texto, de este modo podremos tener un archivo de recursos para cada leguaje con su imagen especifica.</span></strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/isomething.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/isomething.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/isomething.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/isomething.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/isomething.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/isomething.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/isomething.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/isomething.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/isomething.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/isomething.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/isomething.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/isomething.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/isomething.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/isomething.wordpress.com/126/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=126&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://isomething.wordpress.com/2009/02/10/recursos-incrustados-en-net-usando-visual-studio-2005/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7aea0da025de2bfd9dec92c6350fd776?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">isomething</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/02/resources01.png" medium="image">
			<media:title type="html">resources01</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/02/resources02.png" medium="image">
			<media:title type="html">resources02</media:title>
		</media:content>
	</item>
		<item>
		<title>Google Chrome Pre Beta 2.0</title>
		<link>http://isomething.wordpress.com/2009/01/09/google-chrome-pre-beta-20/</link>
		<comments>http://isomething.wordpress.com/2009/01/09/google-chrome-pre-beta-20/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 14:34:36 +0000</pubDate>
		<dc:creator>isomething</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[chrome beta]]></category>
		<category><![CDATA[google chrome]]></category>
		<category><![CDATA[navegador]]></category>
		<category><![CDATA[version 2]]></category>

		<guid isPermaLink="false">http://isomething.wordpress.com/?p=120</guid>
		<description><![CDATA[Hoy me entero que a penas a 4 meses de estar en version 0.2 Google Chrome ya tiene un pre beta de la version 2.0, la lista de nuevas caracteristicas puede verse aqui. Entre algunas de las nuevas caracteristicas puede encontrarse: Version actualizada del motor WebKit para renderizar HTML y CSS (esperemos que ahora no [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=120&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-121" title="logo_chrome" src="http://isomething.files.wordpress.com/2009/01/logo_chrome.jpg?w=150&#038;h=55" alt="logo_chrome" width="150" height="55" />Hoy me entero que a penas a 4 meses de estar en version 0.2 Google Chrome ya tiene un pre beta de la version 2.0, la lista de nuevas caracteristicas puede verse <a href="http://dev.chromium.org/getting-involved/dev-channel/release-notes/releasenotes201561" target="_blank">aqui</a>. Entre algunas de las nuevas caracteristicas puede encontrarse:</p>
<p>Version actualizada del motor WebKit para renderizar HTML y CSS (esperemos que ahora no haga falta recargar las paginas, de  por ejemplo MSDN, para verlas bien).</p>
<p>Form Autocompletes para recordar cosas que antes se habian tipeado en un form web.</p>
<p>Full Zoom, si bien esto ya existia solo se podia escalar el tamaño del texto, ahora todos los objetos de una pagina variaran su tamaño al aplicar zoom (al estilo Opera).</p>
<p>Mejoras al analizador de ortografia.</p>
<p>Autoscroll con el boton medio del mouse.</p>
<p>Algunas caracteristicas de docking con varias posiciones predeterminadas de tabs al arrastrarlos.</p>
<p>Permitira importar bookmarks de Google Bookmarks.</p>
<p>Actualizacion del motor de Javascript &#8220;V8&#8243;.</p>
<p>Implementacion propia del protocolo HTTP (ahora se usa WinHTTP, pero por cuestiones de compatibilidad con Mac y Linux han decidido implementar el protocolo ellos mismos&#8230;)</p>
<p>Se agrega soporte experimental para scripts (algo parecido a GreaseMonkey).</p>
<p>Modo de seguridad HTTPS, se fuerza  solo a navegar en paginas que tengan este tipo de seguridad y cualquier pagina que tenga un error en el certificado SSL no sera cargada.</p>
<p>Y por ultimo: MANEJO DE PERFILES DEL BROWSER, esto es lo mas interesante y original, creo que solucionara uno de los principales problemas que tengo hoy en dia con los navegadores, actualmente uso 3 browsers: Chrome, Firefox y Opera (y hasta IE para aprovechar la integracion con Exchange y Sharepoint, pero en este caso no habra mas alternativa que seguirlo usando), la razon de usar esos 3 navegadores es que en general estoy trabajando con varias cosas al mismo tiempo y tengo paginas abiertas para el trabajo, para proyectos personales, para otro tipo de uso personal no relacionado con esos 2 anteriores, y me he acostumbrado a cerrar el navegador con todas los tabs abiertos y al otro dia lo vuelvo a abrir y todo sigue alli, en general tengo algo asi como 10 paginas abiertas por navegador (o sea, tener todo junto en un solo navegador es un lio), entonces, esta caracteristica de perfiles permite que el navegador maneje diferentes perfiles de configuracion, de este modo podriamos tener un perfil de trabajo (con todas las paginas que estamos usando para trabajar), un perfil de proyectos personales (con todas las paginas que estamos usando en proyectos personales) y asi&#8230; y simplemente cambiando de perfil cambiariamos la configuracion del browser.</p>
<p>Espero que tambien agreguen (no he leido nada al respecto)  la posibilidad de abrir automaticamente un archivo cuando existe un programa asociado a el, es bastante, diria muy incomodo tener que hacer el download del archivo para despues tener que abrirlo manualmente con el programa asociado.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/isomething.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/isomething.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/isomething.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/isomething.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/isomething.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/isomething.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/isomething.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/isomething.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/isomething.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/isomething.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/isomething.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/isomething.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/isomething.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/isomething.wordpress.com/120/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=120&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://isomething.wordpress.com/2009/01/09/google-chrome-pre-beta-20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7aea0da025de2bfd9dec92c6350fd776?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">isomething</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2009/01/logo_chrome.jpg" medium="image">
			<media:title type="html">logo_chrome</media:title>
		</media:content>
	</item>
		<item>
		<title>Ejecutando un programa externo en .NET</title>
		<link>http://isomething.wordpress.com/2008/12/11/ejecutando-un-programa-externo-en-net/</link>
		<comments>http://isomething.wordpress.com/2008/12/11/ejecutando-un-programa-externo-en-net/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 17:32:15 +0000</pubDate>
		<dc:creator>isomething</dc:creator>
				<category><![CDATA[.NET tips]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[abrir]]></category>
		<category><![CDATA[documentos]]></category>
		<category><![CDATA[documents]]></category>
		<category><![CDATA[iniciar]]></category>
		<category><![CDATA[open]]></category>
		<category><![CDATA[procesos]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[processstartinfo]]></category>
		<category><![CDATA[running]]></category>
		<category><![CDATA[vb.net]]></category>

		<guid isPermaLink="false">http://isomething.wordpress.com/?p=94</guid>
		<description><![CDATA[Es bastante usual (sobre todo en procesos de instalacion) que necesitemos ejecutar un archivo .exe externo a nuestra aplicacion, o bien que necesitemos abrir desde nuestra aplicacion algun documento u archivo con una aplicacion externa, para esto el framework .NET nos provee de una clase bastante poderosa "Process".
<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=94&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:left;">Es bastante usual (sobre todo en procesos de instalacion) que necesitemos ejecutar un archivo .exe externo a nuestra aplicacion, o bien que necesitemos abrir desde nuestra aplicacion algun documento u archivo con una aplicacion externa, para esto el framework .NET nos provee de una clase bastante poderosa &#8220;Process&#8221;.</p>
<p style="text-align:left;">Solo voy a mostrar algunos ejemplos muy reducidos, pero las capacidades de esta clase exceden por mucho lo que aqui se va a mostrar, se ha usado .NET 2.0 y el codigo esta en VB.NET (la razon es que creo que en general es bastante mas sencillo traducir un codigo de VB.NET a C# que al reves).</p>
<h3 style="text-align:left;">Uso basico</h3>
<p style="text-align:left;">La clase Process nos provee de un metodo <em>Start, </em>este metodo es shared (VB.Net) o static (C#) y nos permite iniciar cualquier archivo ejecutable o bien abrir algun archivo que este asociado con algun programa, esta ultima caracteristica tiene un detalle bastante comodo y que simplifica muchisimo la programacion, no necesitamos saber con que aplicacion se va a abrir el archivo, esto es, si queremos abir un documento pdf, simplemente llamaremos a Process.Start(&lt;full path del archivo .pdf&gt;) y la clase process buscara el programa asociado a archivos pdf y abrira el documento usando ese programa, esto tiene grandes ventajas cuando se lo compara con los metodos tradicionales de inicio de procesos que en general proveen los lenguajes de programacion, por ejemplo comparado con el comando Shell de Visual Basic, al usar ese comando para abrir un archivo pdf, primero teniamos que saber que aplicacion estaba instalada en el sistema para abrir el archivo, luego buscar el directorio de la aplicacion y llamar al ejecutable con el archivo pdf como parametro, Process nos evita todo ese trabajo.</p>
<table style="text-align:left;" border="1" bgcolor="#F5F5FF">
<tbody>
<tr>
<td>
<pre>        <span style="color:blue;">Try</span>
            Process.Start(<span style="color:maroon;">"c:\make.bat"</span>)                    <span style="color:green;">' esto ejecutara este archivo .bat</span>
            Process.Start(<span style="color:maroon;">"c:\overall_log.txt"</span>)             <span style="color:green;">' esto abrira un notepad con este archivo</span>
            Process.Start(<span style="color:maroon;">"c:\Backups\Debug.rar"</span>)           <span style="color:green;">' esto abrira WinRar con este archivo</span>
            Process.Start(<span style="color:maroon;">"d:\Docs\Book01\Chapter01.pdf"</span>)   <span style="color:green;">' esto abrira el lector pdf que tengamos instalado con este archivo</span>

        <span style="color:blue;">Catch</span> ex <span style="color:blue;">As</span> Exception
            Console.WriteLine(ex.Message)
        <span style="color:blue;">End</span> <span style="color:blue;">Try</span></pre>
</td>
</tr>
</tbody>
</table>
<p style="text-align:left;">Cabe aclarar que la ejecucion es asincronica, o sea nustra aplicacion lanzara los procesos en un thread separado e inmediatamente seguira ejecutando la proxima instruccion. Se lanza una excepcion cuando se produce algun error al iniciar el proceso externo, por lo que la llamada deberia estar en un contexto capaz de administrarla, la excepcion mas comun en este caso es la que se produce cuando no se encuentra el archivo o el path es incorrecto.</p>
<p style="text-align:left;">El metodo Start tiene varias sobrecargas:</p>
<p style="text-align:left;"> </p>
<table style="text-align:left;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="250">Process.Start ()</td>
<td width="400">Este metodo se usa sobre una instancia de Process (no es un metodo shared o estatico) y requiere que se hayan establecido parametros de ProcessStartInfo</td>
</tr>
<tr>
<td width="250">Process.Start (ProcessStartInfo)</td>
<td width="400">Este metodo toma un objeto ProcessStartInfo con la descripcion y parametros del proceso que debe iniciar</td>
</tr>
<tr>
<td width="250">Process.Start (String)</td>
<td width="400">Este metodo toma como parametro el full path del documento o archivo ejecutable</td>
</tr>
<tr>
<td width="250">Process.Start (String, String)</td>
<td width="400">Este metodo toma como parametro el full path del documento o archivo ejecutable, mas un string adicional que contiene los parametros adicionales a pasar al proceso a ejecutar</td>
</tr>
<tr>
<td width="250">Process.Start (String, String, SecureString, String)</td>
<td width="400">Este metodo toma como parametro el full path del documento o archivo ejecutable, mas una serie de parametros que especifican el usuario, password y dominio para determinar las credenciales de seguridad sobre las que se ejecutara el proceso. Es una especie de Run As&#8230; de Win Server</td>
</tr>
<tr>
<td width="350">Process.Start (String, String, String, SecureString, String)</td>
<td width="400">Este metodo toma como parametro el full path del documento o archivo ejecutable, una lista de arguementos de linea de comandos, mas una serie de parametros que especifican el usuario, password y dominio para determinar las credenciales de seguridad sobre las que se ejecutara el proceso.</td>
</tr>
</tbody>
</table>
<p style="text-align:left;"> </p>
<p style="text-align:left;"><strong>Uso avanzado</strong></p>
<p style="text-align:left;">Los ejemplos anteriores son los mas basicos y solo nos serviran en algunos casos, a veces necesitamos un poco mas de control sobre el proceso que estamos iniciando, ahi es donde entra en juego la clase <em>ProcessStartInfo.</em></p>
<p style="text-align:left;"><em><br />
</em></p>
<table border="1" bgcolor="#F5F5FF">
<tbody>
<tr>
<td>
<pre><span style="color:teal;">  1 </span>    <span style="color:blue;">Public</span> <span style="color:blue;">Shared</span> <span style="color:blue;">Sub</span> RunProcess()
<span style="color:teal;">  2 </span>        <span style="color:blue;">Try</span>
<span style="color:teal;">  3 </span>            <span style="color:blue;">Dim</span> pObj <span style="color:blue;">As</span> <span style="color:blue;">New</span> Process()
<span style="color:teal;">  4 </span>            pObj.StartInfo.RedirectStandardOutput = <span style="color:maroon;">True</span>
<span style="color:teal;">  5 </span>            pObj.StartInfo.FileName = <span style="color:maroon;">"C:\make.bat"</span>
<span style="color:teal;">  6 </span>            pObj.StartInfo.Arguments = <span style="color:maroon;">"1 *.vc *.*"</span>
<span style="color:teal;">  7 </span>            pObj.StartInfo.UseShellExecute = <span style="color:maroon;">False</span>
<span style="color:teal;">  8 </span>            pObj.StartInfo.CreateNoWindow = <span style="color:maroon;">True</span>
<span style="color:teal;">  9 </span>            pObj.Start()
<span style="color:teal;"> 10 </span>
<span style="color:teal;"> 11 </span>            <span style="color:blue;">Dim</span> outStr <span style="color:blue;">As</span> <span style="color:blue;">String</span> = pObj.StandardOutput.ReadToEnd()
<span style="color:teal;"> 12 </span>
<span style="color:teal;"> 13 </span>            pObj.WaitForExit()
<span style="color:teal;"> 14 </span>
<span style="color:teal;"> 15 </span>        <span style="color:blue;">Catch</span> ex <span style="color:blue;">As</span> Exception
<span style="color:teal;"> 16 </span>            Console.WriteLine(ex.Message)
<span style="color:teal;"> 17 </span>        <span style="color:blue;">End</span> <span style="color:blue;">Try</span>
<span style="color:teal;"> 18 </span>    <span style="color:blue;">End</span> <span style="color:blue;">Sub</span></pre>
</td>
</tr>
</tbody>
</table>
<p style="text-align:left;"> </p>
<p style="text-align:left;">En el ejemplo anterior estamos ejecutando un archivo .bat, para esto:</p>
<ol>
<li>Creamos una instancia de la clase Process (linea 3)</li>
<li>Redirigimos la salida estandar (linea 4)</li>
<li>Asignamos el nombre del archivo que deseamos ejecutar (linea 5)</li>
<li>Pasamos un string conteniendo la lista de parametros que se van a pasar por linea de comandos (linea 6), esto equivaldria a escribir en la linea de comandos &#8220;C:&gt;make.bat 1 *.cv *.*&#8221;</li>
<li>Decimos a process que no use la ejecucion Shell (linea 7), esto es necesario si queremos redirigir la salida, la entrada o el stdError.</li>
<li>El proceso se ejecutara en background, sin mostrar una ventana (linea <img src='http://s2.wp.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> </li>
<li>Inciamos el proceso (linea 9)</li>
<li>Capturamos en un string todo el stream de salida (linea 11)</li>
<li>Esperamos hasta que el proceso finalize para continuar con nuestro programa (linea 13)</li>
</ol>
<p> </p>
<p>Con esas pocas lineas de codigo hemos logrado ejecutar un archivo .bat, obtener toda la salida estandar del programa (lo que veriamos en la consola de Windows)  y enviarla a un string.</p>
<p>Las posibilidades de la clase Process y ProcessStartInfo no se terminan aqui, esto es un simple ejemplo de las cosas que se pueden hacer, de hecho, la clase process no solo permite iniciar procesos, tambien permite controlar y obtener informacion de procesos que ya estan corriendo en el sistema, pero eso es tema de otro post.</p>
<p>Para mas informacion:</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.process(VS.80).aspx" target="_blank">Process (clase)</a></p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.process_members(VS.80).aspx" target="_blank">Process (miembros)</a></p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.process.start(VS.80).aspx" target="_blank">Process.Start (metodo)</a></p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.process.startinfo(VS.80).aspx" target="_blank">Process.StartInfo (propiedad)</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/isomething.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/isomething.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/isomething.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/isomething.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/isomething.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/isomething.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/isomething.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/isomething.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/isomething.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/isomething.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/isomething.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/isomething.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/isomething.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/isomething.wordpress.com/94/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=94&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://isomething.wordpress.com/2008/12/11/ejecutando-un-programa-externo-en-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7aea0da025de2bfd9dec92c6350fd776?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">isomething</media:title>
		</media:content>
	</item>
		<item>
		<title>Gif&#8217;s animados de carga</title>
		<link>http://isomething.wordpress.com/2008/11/27/gifs-animados-de-carga/</link>
		<comments>http://isomething.wordpress.com/2008/11/27/gifs-animados-de-carga/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 17:36:38 +0000</pubDate>
		<dc:creator>isomething</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[animado]]></category>
		<category><![CDATA[animated]]></category>
		<category><![CDATA[cargador]]></category>
		<category><![CDATA[gif]]></category>
		<category><![CDATA[imagen]]></category>
		<category><![CDATA[loader]]></category>

		<guid isPermaLink="false">http://isomething.wordpress.com/?p=100</guid>
		<description><![CDATA[Esta pagina nos permite crear un gif animado de carga de esos que son muy comunes en las aplicaciones web que usan AJAX.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=100&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ajaxload.info/" target="_blank"><img class="alignright size-full wp-image-101" title="ajaxloader02" src="http://isomething.files.wordpress.com/2008/11/ajaxloader02.png?w=377&#038;h=629" alt="ajaxloader02" width="377" height="629" /></a>Esta <a href="http://www.ajaxload.info/" target="_blank">pagina</a> nos permite crear un gif animado de carga de esos que son muy comunes en las aplicaciones web que usan AJAX, aunque su uso obviamente no esta restringido a eso, se puede usar en cualquier lenguaje de programacion que posea algun componente para visualizar archivos .gif animados (todos los lenguajes relativamente modernos tienen componentes prediseñados para tal tarea) o en cualquier framework de desarrollo web.</p>
<p>Para generar un gif animado solo hace falta seleccionar el estilo de &#8220;ajax loader&#8221; que nos guste, para esto tenemos un combobox que al desplegarse nos va a mostrar todos los estilos disponibles (en una previsualizacion animada del ajax loader), hay muchos y muy muy bien logrados, despues solo tenemos que seleccionar los colores de fondo y frente que tendra el loader, para seleccioar los colores la pagina muestra un color picker muy sencillo y comodo de usar, y por ultimo debemos seleccionar si queremos que el backgroud sea transparente. Una vez que se han configurado nuestras preferencias cliqueamos en el boton generar y vamos a poder ver una previsualizacion de nuestro ajax loader animado, si queremos cambiar algo volvemos a retocar los settings y si creemos que esta como queriamos simplemente clickeamos en el boton &#8220;download it&#8221; para grabarlo en nuestro disco como una imagen .gif animada.</p>
<p>Varios puntos destacables de la pagina: el servicio es completamente gratuito, no requiere ningun tipo de registracion, los gif generados son de uso completamente gratuito, es muy comodo y sencillo de usar y apenas tiene un solo ad. </p>
<p>Algunos pocos ejemplos de lo que podemos hacer:</p>
<p> </p>
<p><a href="http://isomething.files.wordpress.com/2008/11/ajaxloader03.gif"><img class="alignleft size-full wp-image-102" title="ajaxloader03" src="http://isomething.files.wordpress.com/2008/11/ajaxloader03.gif?w=16&#038;h=16" alt="ajaxloader03" width="16" height="16" /></a><span style="text-decoration:underline;"> <a href="http://isomething.files.wordpress.com/2008/11/ajaxloader05.gif"><img class="alignleft size-full wp-image-104" title="ajaxloader05" src="http://isomething.files.wordpress.com/2008/11/ajaxloader05.gif?w=32&#038;h=32" alt="ajaxloader05" width="32" height="32" /></a></span><span style="text-decoration:underline;"><a href="http://isomething.files.wordpress.com/2008/11/ajaxloader06.gif"><img class="alignleft size-full wp-image-105" title="ajaxloader06" src="http://isomething.files.wordpress.com/2008/11/ajaxloader06.gif?w=32&#038;h=32" alt="ajaxloader06" width="32" height="32" /></a></span>  <a href="http://isomething.files.wordpress.com/2008/11/ajaxloader04.gif"><img class="alignleft size-full wp-image-103" title="ajaxloader04" src="http://isomething.files.wordpress.com/2008/11/ajaxloader04.gif?w=16&#038;h=16" alt="ajaxloader04" width="16" height="16" /></a><a href="http://isomething.files.wordpress.com/2008/11/ajaxloader08.gif"><img class="alignleft size-full wp-image-107" title="ajaxloader08" src="http://isomething.files.wordpress.com/2008/11/ajaxloader08.gif?w=128&#038;h=15" alt="ajaxloader08" width="128" height="15" /></a><a href="http://isomething.files.wordpress.com/2008/11/ajaxloader07.gif"><img class="alignleft size-full wp-image-106" title="ajaxloader07" src="http://isomething.files.wordpress.com/2008/11/ajaxloader07.gif?w=50&#038;h=50" alt="ajaxloader07" width="50" height="50" /></a></p>
<p> </p>
<p><a href="http://www.ajaxload.info/" target="_blank">AjaxLoad</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/isomething.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/isomething.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/isomething.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/isomething.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/isomething.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/isomething.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/isomething.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/isomething.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/isomething.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/isomething.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/isomething.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/isomething.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/isomething.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/isomething.wordpress.com/100/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=100&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://isomething.wordpress.com/2008/11/27/gifs-animados-de-carga/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7aea0da025de2bfd9dec92c6350fd776?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">isomething</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2008/11/ajaxloader02.png" medium="image">
			<media:title type="html">ajaxloader02</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2008/11/ajaxloader03.gif" medium="image">
			<media:title type="html">ajaxloader03</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2008/11/ajaxloader05.gif" medium="image">
			<media:title type="html">ajaxloader05</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2008/11/ajaxloader06.gif" medium="image">
			<media:title type="html">ajaxloader06</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2008/11/ajaxloader04.gif" medium="image">
			<media:title type="html">ajaxloader04</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2008/11/ajaxloader08.gif" medium="image">
			<media:title type="html">ajaxloader08</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2008/11/ajaxloader07.gif" medium="image">
			<media:title type="html">ajaxloader07</media:title>
		</media:content>
	</item>
		<item>
		<title>Compresion en .NET</title>
		<link>http://isomething.wordpress.com/2008/11/24/compresion-en-net/</link>
		<comments>http://isomething.wordpress.com/2008/11/24/compresion-en-net/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 18:51:43 +0000</pubDate>
		<dc:creator>isomething</dc:creator>
				<category><![CDATA[.NET tips]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[archivos]]></category>
		<category><![CDATA[compresion]]></category>
		<category><![CDATA[compressing]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[files]]></category>
		<category><![CDATA[zip]]></category>

		<guid isPermaLink="false">http://isomething.wordpress.com/?p=97</guid>
		<description><![CDATA[Muchas veces ocurre que necesitamos comprimir algunos archivos desde nuestra aplicacion .NET y no sabemos muy bien cual de las alternativas existentes usar, tratare de hacer un pequeño resumen detallando las 3 o 4 posibilidades mas viables (que por cierto, no incluye productos comerciales).<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=97&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://isomething.files.wordpress.com/2008/11/zipfiles01.png"><img class="alignright size-full wp-image-98" style="margin-left:50px;margin-right:10px;" title="zipfiles01" src="http://isomething.files.wordpress.com/2008/11/zipfiles01.png?w=227&#038;h=212" alt="zipfiles01" width="227" height="212" /></a>Muchas veces ocurre que necesitamos comprimir algunos archivos desde nuestra aplicacion .NET y no sabemos muy bien cual de las alternativas existentes usar, tratare de hacer un pequeño resumen detallando las 3 o 4 posibilidades mas viables (que por cierto, no incluye productos comerciales).</p>
<p>Asumimos que el formato de salida sera un archivo .zip, puesto que es uno de los formatos de compresion mas difundidos y probablemente cualquier persona que use nuestra aplicacion tendra a mano alguna utilidad para descomprimir archivos zip.</p>
<p>Las 4 alternativas que pueden utilizarce para comprimir archivos son:</p>
<ul>
<li>.NET 2.0 GZipStream</li>
<li>.NET J# Zip Utils </li>
<li>DotNetZip Library</li>
<li>.NET 3.0 System.IO.Packaging ZipPackage</li>
</ul>
<p> </p>
<h4><a href="http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx" target="_blank">.NET 2.0 GZipStream</a></h4>
<p>Esta clase nos permite comprimir un archivo al formato .gz, este formato es bastante conocido en los sistemas tipo UNIX, es bastante simple de usar, pero&#8230; las tasas de compresion no son muy buenas (es compresion de una sola pasada), no maneja para nada bien los formatos comprimidos (otros archivos comprimidos o formatos que tengan compresion builtin, como por ejemplo mp3, gif, jpg, mpg, etc), usando GZipStream con este tipo de archivos podemos ver que el tamaño del archivo se infla en vez de comprimirse  (en promedio, por ejemplo, un .gif crecera de tamaño un 50%, si! el archivo comprimido resulta tener un tamaño del 150% del tamaño original sin comprimir), ademas solo permite comprimir un unico archivo: en el formato .gz no hay entradas multiples como en el formato .zip (por eso en sistemas tipo unix se emplea la utilidad tar que junta varios archivos en uno solo para luego comprimirlo con gzip), por ultimo, solo funciona con archivos de menos de 4GB.</p>
<p>Ejemplo de uso:</p>
<table border="1" bgcolor="#F5F5FF">
<tbody>
<tr>
<td>
<pre><span style="color:blue;">Imports</span> System.IO
<span style="color:blue;">Imports</span> System.IO.Compression 

<span style="color:blue;">Public</span> <span style="color:blue;">Class</span> GZipTest 

    <span style="color:blue;">Public</span> <span style="color:blue;">Shared</span> <span style="color:blue;">Sub</span> GZipCompressTest()

        <span style="color:green;">'creamos un stream de entrada y leemos el contenido en un buffer</span>
        <span style="color:blue;">Dim</span> myInputFile <span style="color:blue;">As</span> FileStream = <span style="color:blue;">New</span> FileStream(<span style="color:maroon;">"C:\FileTest.txt"</span>, FileMode.Open)
        <span style="color:blue;">Dim</span> buffer(myInputFile.Length - <span style="color:maroon;">1</span>) <span style="color:blue;">As</span> <span style="color:blue;">Byte</span>
        myInputFile.Read(buffer, <span style="color:maroon;">0</span>, myInputFile.Length)
        myInputFile.Close() 

        <span style="color:green;">'creamos un file stream de salida y lo wrapeamos en el gzipstream</span>
        <span style="color:blue;">Dim</span> zipOutputFile <span style="color:blue;">As</span> FileStream = <span style="color:blue;">New</span> FileStream(<span style="color:maroon;">"C:\FileTest.gz"</span>, FileMode.Create)
        <span style="color:blue;">Dim</span> compressionStream <span style="color:blue;">As</span> GZipStream = <span style="color:blue;">New</span> GZipStream(zipOutputFile, CompressionMode.Compress)
        compressionStream.Write(buffer, <span style="color:maroon;">0</span>, buffer.Length) 

        <span style="color:green;">'cerramos ambos streams de salida</span>
        compressionStream.Close()
        zipOutputFile.Close() 

    <span style="color:blue;">End</span> <span style="color:blue;">Sub</span> 

<span style="color:blue;">End</span> <span style="color:blue;">Class</span></pre>
</td>
</tr>
</tbody>
</table>
<p> </p>
<h4>.NET J# Zip Utils</h4>
<p>Esta clase es un poco mas sofisticada que la anterior, permite crear archivos .zip compatibles con casi cualquier utilidad de compresion. Para hacer uso de esta clase hay que <strong>agregar en nuestro proyecto una referencia a la biblioteca vsjlib.dll</strong> que es la que contiene las definiciones de J# para las utilidades de compresion. El uso de esta clase no es demasiado complicado y funciona aceptablemente bien, el unico gran problema que tiene es el siguiente: <strong>no es totalmente CLR compliant </strong>o sea&#8230; podemos llegar a tener bastantes problemas, por ejemplo, una gran limitacion de esta clase es la siguiente: <strong>solo es compatible con codigo de 32 bits</strong>, o sea que si queremos que nuestro codigo corra en algun Windows 64 bits mejor busquemos otra alternativa porque esta no va a funcionar.</p>
<p>En el codigo de ejemplo se muestra como agregar un par de archivos (entradas) a nuestro archivo .zip y ademas se muestra como convertir un arreglo de bytes a sbytes (tipo que utiliza J#) en VB.NET.</p>
<p>Codigo de ejemplo:</p>
<table border="1" bgcolor="#F5F5FF">
<tbody>
<tr>
<td>
<pre><span style="color:blue;">Imports</span> System.IO
<span style="color:blue;">Imports</span> java.util 

<span style="color:blue;">Public</span> <span style="color:blue;">Class</span> JSharpZipTest 

    <span style="color:blue;">Public</span> <span style="color:blue;">Shared</span> <span style="color:blue;">Sub</span> JSharpZipTest()

        <span style="color:blue;">Dim</span> fileBuffer() <span style="color:blue;">As</span> SByte 

        <span style="color:blue;">Dim</span> jFileStream <span style="color:blue;">As</span> java.io.FileOutputStream = <span style="color:blue;">New</span> java.io.FileOutputStream(<span style="color:maroon;">"C:\TestFile.zip"</span>)
        <span style="color:blue;">Dim</span> jZipperStream <span style="color:blue;">As</span> zip.ZipOutputStream = <span style="color:blue;">New</span> zip.ZipOutputStream(jFileStream)

        <span style="color:green;">'configuramos el metodo de compresion  ( deflate = 8 )</span>
        jZipperStream.setMethod(<span style="color:maroon;">8</span>) 

        <span style="color:green;">'creamos una entrada en el archivo zip (el nombre puede ser cualquiera, no es necesario que coincida con el nombre del archivo original)</span>
        jZipperStream.putNextEntry(<span style="color:blue;">New</span> zip.ZipEntry(<span style="color:maroon;">"C:\FileTest01.txt"</span>))
        <span style="color:green;">'obtenemos el arreglo de SBYTE</span>
        fileBuffer = GetFileSByteArray(<span style="color:maroon;">"C:\FileTest01.txt"</span>)
        <span style="color:green;">'escribimos el buffer</span>
        jZipperStream.write(fileBuffer, <span style="color:maroon;">0</span>, fileBuffer.Length)
        <span style="color:green;">'cerramos la entrada</span>
        jZipperStream.closeEntry() 

        jZipperStream.putNextEntry(<span style="color:blue;">New</span> zip.ZipEntry(<span style="color:maroon;">"C:\FileTest02.txt"</span>))
        fileBuffer = GetFileSByteArray(<span style="color:maroon;">"C:\FileTest02.txt"</span>)
        jZipperStream.write(fileBuffer, <span style="color:maroon;">0</span>, fileBuffer.Length)
        jZipperStream.closeEntry() 

        jZipperStream.close()
        jFileStream.flush()
        jFileStream.close() 

    <span style="color:blue;">End</span> <span style="color:blue;">Sub</span> 

    <span style="color:blue;">Private</span> <span style="color:blue;">Shared</span> <span style="color:blue;">Function</span> GetFileSByteArray(<span style="color:blue;">ByVal</span> fileName <span style="color:blue;">As</span> <span style="color:blue;">String</span>) <span style="color:blue;">As</span> SByte()

        <span style="color:green;">'creamos un file stream de entrada y los respectivos buffers para almacenar el contenido</span>
        <span style="color:blue;">Dim</span> fileInput <span style="color:blue;">As</span> FileStream = <span style="color:blue;">New</span> FileStream(fileName, FileMode.Open, FileAccess.Read)
        <span style="color:blue;">Dim</span> byte_buffer(fileInput.Length) <span style="color:blue;">As</span> <span style="color:blue;">Byte</span>
        <span style="color:blue;">Dim</span> sbyte_buffer(fileInput.Length) <span style="color:blue;">As</span> SByte

        <span style="color:green;">'leemos el contenido del archivo en el array de BYTES</span>
        fileInput.Read(byte_buffer, <span style="color:maroon;">0</span>, byte_buffer.Length)
        fileInput.Close() 

        <span style="color:green;">'realizamos la conversion de BYTES a SBYTES usando System.Buffer.BlockCopy</span>
        System.Buffer.BlockCopy(byte_buffer, <span style="color:maroon;">0</span>, sbyte_buffer, <span style="color:maroon;">0</span>, sbyte_buffer.Length)

        <span style="color:blue;">Return</span> (sbyte_buffer) 

    <span style="color:blue;">End</span> <span style="color:blue;">Function</span> 

<span style="color:blue;">End</span> <span style="color:blue;">Class</span></pre>
</td>
</tr>
</tbody>
</table>
<p> </p>
<h4><a href="http://msdn.microsoft.com/en-us/library/system.io.packaging.zippackage(VS.85).aspx" target="_blank">.NET 3.0 System.IO.Packaging ZipPackage</a></h4>
<p>Este es un agregado que solo esta disponible en versiones .NET posteriores a la 3.0, no es demasiado sencillo de usar pero es una clase que nos traera menos problemas que su contrapartida de J#. En realidad son clases de empaquetamiento general (donde es posible usar archivos .zip) por eso digo que no es del todo sencilla de usar, tiene otras cosas que no nos van a servir para crear archivos .zip pero que estan alli porque, justamente, esta no es una clase especificamente pensada para crear unicamente archivos zip.</p>
<p> </p>
<p> </p>
<h4><a href="http://www.codeplex.com/DotNetZip" target="_blank">DotNetZip Library</a></h4>
<p>Esta es mi favorita, no solo por su poder sino tambien por la simplicidad de uso y la increible documentacion que provee. Permite crear archivos .zip compatibles con cualquier utilidad de compresion y hacer con ellos lo que querramos de un modo extremadamente sencillo. En la pagina del proyecto puede bajarse el codigo, solo la biblioteca dll, todo el paquete completo, la documentacion, etc. La <strong>documentacion </strong>es un punto aparte, <strong>completisima</strong>, vamos a encontrar ejemplos para cualquier actividad que necesitemos realizar con un archivo comprimido y todos los ejemplos estan disponibles en todos los lenguajes de .NET, una joya, verdaderamente una joya.</p>
<p>Para usarla desde nuestro proyecto solo debemos agregar una referencia al archivo <strong>Ionic.Utils.Zip.dll</strong>, la licencia de distribucion de esta biblioteca es Microsoft Public License (Ms-PL)</p>
<p>Codigo de ejemplo:</p>
<table border="1" bgcolor="#F5F5FF">
<tbody>
<tr>
<td>
<pre><span style="color:blue;">Imports</span> Ionic.Utils.Zip 

<span style="color:blue;">Public</span> <span style="color:blue;">Class</span> DotNetZipTest 

    <span style="color:blue;">Public</span> <span style="color:blue;">Shared</span> <span style="color:blue;">Sub</span> DotNetZipTest()

        Using zip <span style="color:blue;">As</span> ZipFile = <span style="color:blue;">New</span> ZipFile(<span style="color:maroon;">"TestFile.zip"</span>)
            zip.AddFile(<span style="color:maroon;">"C:\FileTest01.txt"</span>, <span style="color:maroon;">""</span>)
            zip.Password = <span style="color:maroon;">"mypassword"</span>
            zip.AddFile(<span style="color:maroon;">"C:\FileTest02.txt"</span>, <span style="color:maroon;">"Folder1"</span>)
            zip.Save()
        <span style="color:blue;">End</span> Using 

    <span style="color:blue;">End</span> <span style="color:blue;">Sub</span> 

<span style="color:blue;">End</span> <span style="color:blue;">Class</span></pre>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>Esas lineas de codigo hacen lo siguiente: crean un archivo .zip llamado &#8220;TestFile.zip&#8221;, agregan un archivo &#8220;FileTest01.txt&#8221; al directorio root del archivo zip, setea un password para las proximas entradas del archivo, agregan un archivo &#8220;FileTest02.txt&#8221; al directorio &#8220;Folder1&#8243; del archivo zip y este archivo esta protegido por la contraseña que ingresamos anteriormente, casi nada por 5 lineas de codigo <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Esta biblioteca es genial, mis felicitaciones al/los creador/es.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/isomething.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/isomething.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/isomething.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/isomething.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/isomething.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/isomething.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/isomething.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/isomething.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/isomething.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/isomething.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/isomething.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/isomething.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/isomething.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/isomething.wordpress.com/97/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=isomething.wordpress.com&amp;blog=4162340&amp;post=97&amp;subd=isomething&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://isomething.wordpress.com/2008/11/24/compresion-en-net/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7aea0da025de2bfd9dec92c6350fd776?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">isomething</media:title>
		</media:content>

		<media:content url="http://isomething.files.wordpress.com/2008/11/zipfiles01.png" medium="image">
			<media:title type="html">zipfiles01</media:title>
		</media:content>
	</item>
	</channel>
</rss>
