<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-27027337</id><updated>2024-09-22T19:15:15.019-04:00</updated><category term=".NET Framework"/><category term="Miscelanea"/><category term="C#"/><category term="Visual Studio"/><category term="WinForms"/><category term="SQL Server"/><category term="wpf"/><category term="snippets"/><category term="NHibernate"/><category term="Recursos"/><category term="Ruby"/><category term="python"/><category term="testing"/><category term="Apache"/><category term="CakePHP"/><category term="CodeJam"/><category term="DCE"/><category term="Linq"/><category term="VB.NET"/><category term="Vista"/><category term="django"/><category term="erlang"/><category term="patrones de diseño"/><category term="php"/><category term="scala"/><title type='text'>C#, .NET, SQL Server y sus parientes cercanos</title><subtitle type='html'>Articulos, ejemplos de código, trucos y noticias útiles para desarrolladores.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>60</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-27027337.post-560063027815537047</id><published>2010-03-05T17:07:00.003-04:00</published><updated>2010-03-05T17:14:50.548-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><title type='text'>Invitación a visitar mi nuevo sitio</title><content type='html'>Amigos.&lt;br /&gt;&lt;br /&gt;Les invito a visitar mi nuevo sitio:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.micodigo.info&quot;&gt;http://www.micodigo.info&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ahí encontrarán:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Artículos&lt;/strong&gt;. Serán tratados diversos temas referidos a algoritmos, bases de datos, lenguajes de programación, gestores de contenido, etc.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Snippets&lt;/strong&gt;. Trozos de código en diversos lenguajes (por mi parte publicaré código en C/C++, C#, Pascal, Java, Python, Ruby y PHP) pero espero abarcar un mayor número de lenguajes mediante la participación de los lectores.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Noticias&lt;/strong&gt;. Cada día publicaré las noticias más destacadas en el mundo de la tecnología. Los lectores también pueden sugerir novedades para que sean publicadas.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Algoritmos&lt;/strong&gt;. En esta sección encontrarás teoría e implementación de diversidad de algoritmos. Los lenguajes en que se mostrará la implementación son los mismos que los citados en la sección Snippets, pero espero hacer una lista más larga con ayuda de los lectores.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Cursos&lt;/strong&gt;. Podrás inscribirte a cursos online sobre programación. Tendrás acceso a los materiales y podrás rendir exámenes en linea para medir tus conocimientos. También podrás interactuar con los programadores que comparten tus mismos intereses.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Desafíos&lt;/strong&gt;. Presentaré desafios al estilo de las competencias de programación.&lt;/p&gt;&lt;p&gt;El sitio está en contrucción, para estar al tanto de las publicaciones, pueden suscribirse al &lt;a href=&quot;http://feeds.feedburner.com/micodigo&quot;&gt;feed&lt;/a&gt;&lt;/p&gt;&lt;p&gt;nos vemos entonces.&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/560063027815537047/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/560063027815537047' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/560063027815537047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/560063027815537047'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2010/03/invitacion-visitar-mi-nuevo-sitio.html' title='Invitación a visitar mi nuevo sitio'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-8202738372033730860</id><published>2009-11-24T18:21:00.001-04:00</published><updated>2009-11-24T18:21:01.006-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apache"/><category scheme="http://www.blogger.com/atom/ns#" term="CakePHP"/><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>[offtopic] CakePHP y mod_rewrite</title><content type='html'>&lt;p&gt;He estado experimentando con CakePHP e inicialmente las cosas no funcionaban correctamente, asi que escribo rápidamente esto como ayuda memoria y por si alguien se encuentra con los mismos problemas&lt;/p&gt;  &lt;p&gt;1. La página de bienvenida de CakePHP aparece sin formatos ni colores:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7j41qWcAAeJI4Ta6-ToXiq_cq5gLtF5DCTqjlbKPSfsz8lnnWl8NYuZ1EJJfTa6iecXWqopCQkI14G1bPVTXr4NUvOEIzYGIFkjLvPiF4GEd48DqF80VMLpWOKXxgTbqO5tFMNA/s1600-h/image%5B4%5D.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-nlWWlF9PEpfO_RYIaPdtWPhik8bwTDKVnzi84xQ4dKTQKoXLgh0tJszxpNYyff_GRu1Xoi5yL7MxyNxq_BcWyhfe2X272KgryXH8xMBOPytpxBmqmOY_aW0B4-aVe34hmX-p5Q//?imgmax=800&quot; width=&quot;644&quot; height=&quot;442&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Esto se debe a que no tenemos habilitado mod_rewrite en nuestro servidor Apache. La solución es editar el archivo de configuración del Apache (httpd.conf), ubicar la linea que habilita el módulo mod_rewrite, quitar la marca de comentario al inicio de la linea, guardar el archivo y reiniciar el Apache.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFNBWX73mWUvP9swXRoDqt0g1k1D61MzAcSDODM5ugM7BaXzzr9BrL8KWnky_xe5lWUmmf9tpXlSaaoshu11P_f5PLWhVqbMnB4o0biE2Vwnqfh_KY-XbxC-rD8SeY3KWu5aNkEQ/s1600-h/image%5B9%5D.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0w_qfSzr52HeD7wwu7JM_62bi9a-wMTJUUgxtOkJ9gaq2KKLbFpx5twjPOzCEhSuddHotvtOp68Q6bHNg008YVNGqgUxRuZm48964RkLneYmlhvfX7V13KzkqudCvpfuszpfoGg//?imgmax=800&quot; width=&quot;644&quot; height=&quot;186&quot; /&gt;&lt;/a&gt; Ahora si la página de bienvenida aparece como debe:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw0738GHXS7tBpSBHohPct8DYcsvnKrHiv5IqQaJ8VXF7SDC9Wf1ffeb7LSl_sP0VwCHiVMhq9lkiUqCsJziklKelbjFDVThaTcUHDjvOdcgcHcuVxFYq9S3GECV_Pa1CU6ykPuw/s1600-h/image%5B14%5D.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFx0QPpb91lvNJuawgp4KdNtmqke4SKaIgcEgEg8zi7boY8L8dcDQoujtmkI9p_HmmGQuBo_7SpsdRn2ot8vYd1zBsmXSu2KlJBKIZ9xKKb59Tn3zA2AmcLxvPIAUioku5LhJK3A//?imgmax=800&quot; width=&quot;644&quot; height=&quot;437&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Espero que les sea de utilidad&lt;/p&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/8202738372033730860/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/8202738372033730860' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/8202738372033730860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/8202738372033730860'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2009/11/offtopic-cakephp-y-modrewrite.html' title='[offtopic] CakePHP y mod_rewrite'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-nlWWlF9PEpfO_RYIaPdtWPhik8bwTDKVnzi84xQ4dKTQKoXLgh0tJszxpNYyff_GRu1Xoi5yL7MxyNxq_BcWyhfe2X272KgryXH8xMBOPytpxBmqmOY_aW0B4-aVe34hmX-p5Q/s72-c/?imgmax=800" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-5956851757284278268</id><published>2009-08-27T19:26:00.005-04:00</published><updated>2009-08-28T08:50:35.009-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server"/><title type='text'>Conexion a SQL Server 2008 mediante JDBC</title><content type='html'>Estuve intentando conectarme a un servidor SQL Server 2008 Express (localmente) utilizando JDBC, el mensaje que recibia repetidamente era: Connection Refused, después de varios intentos innfructuosos, finalmente encontré la solución en este post.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://minddiary.com/2008/03/31/possible-solutions-for-jdbc-sql-server-connection-problem/&quot;&gt;http://minddiary.com/2008/03/31/possible-solutions-for-jdbc-sql-server-connection-problem/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;El punto que me dió la solución fue el número 5 que consiste en deshabilitar los puertos TCP dinámicos. El valor de la propiedad &#39;TCP Dynamic ports&#39; debe quedar en blanco en lugar de cero, para las IPS 1,2, etc, y 1433 para IPAll.&lt;br /&gt;&lt;br /&gt;Y eso es todo. Resta simplemente reiniciar el motor y ya podremos conectarnos sin ningún problema.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/5956851757284278268/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/5956851757284278268' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/5956851757284278268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/5956851757284278268'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2009/08/conexion-asql-server-2008-mediante-jdbc.html' title='Conexion a SQL Server 2008 mediante JDBC'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-6880245022209987395</id><published>2009-03-31T10:24:00.001-04:00</published><updated>2009-03-31T10:24:25.488-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Django: Crear tablas InnoDB en MySQL</title><content type='html'>&lt;p&gt;Cuando estamos trabajando con MySQL y usamos &lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Courier New&quot;&gt;manage.py syncdb&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;para crear nuestras tablas en la Base de Datos, por defecto django nos crea tablas del tipo MyISAM que si bien son muy veloces, tienen algunas desventajas como la falta de integridad referencial.&lt;/p&gt;  &lt;p&gt;Si queremos utilizar las tablas tipo InnoDB en nuestra base de datos solamente tendremos que añadir esta linea:&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Courier New&quot;&gt;DATABASE_OPTIONS = {&amp;quot;init_command&amp;quot;: &amp;quot;SET storage_engine=InnoDB&amp;quot;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;en nuestro archivo settings.py.&lt;/p&gt;  &lt;p&gt;Es todo, espero que les sea de utilidad&lt;/p&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/6880245022209987395/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/6880245022209987395' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/6880245022209987395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/6880245022209987395'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2009/03/django-crear-tablas-innodb-en-mysql.html' title='Django: Crear tablas InnoDB en MySQL'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-7240305897470342296</id><published>2009-02-06T10:33:00.002-04:00</published><updated>2009-02-06T10:49:53.205-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="erlang"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="Ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><title type='text'>Otros parientes [no tan] cercanos a escena</title><content type='html'>&lt;span xmlns=&#39;&#39;&gt;&lt;p&gt;Siete meses sin postear… se me cae la cara de vergüenza…  en fin… nada que decir en mi defensa. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Uno de mis propósitos para este 2009 fue aprender por lo menos un par de nuevos lenguajes de programación. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Tengo la intención de terminar el año con un conocimiento razonable de los siguientes 4 lenguajes:&lt;br /&gt;&lt;/p&gt;&lt;ul style=&#39;margin-left: 54pt&#39;&gt;&lt;li&gt;Python (&lt;a href=&#39;http://www.python.org&#39;&gt;www.python.org&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ruby (&lt;a href=&#39;http://www.ruby-lang.org&#39;&gt;www.ruby-lang.org&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Scala (&lt;a href=&#39;www.scala-lang.org&#39;&gt;www.scala-lang.org&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Erlang (&lt;a href=&#39;www.erlang.org&#39;&gt;www.erlang.org&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Para lograr mis propósitos, empezaré usando un conjunto de ejercicios que encontré en &lt;a href=&#39;http://www.spoj.pl/&#39;&gt;Sphere Online Judge&lt;/a&gt;, un sitio que promueve las competencias de programación al estilo de la &lt;a href=&#39;http://icpcres.ecs.baylor.edu/onlinejudge/&#39;&gt;UVA&lt;/a&gt;, &lt;a href=&#39;http://www.topcoder.com&#39;&gt;TopCoder&lt;/a&gt; y otros&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Actualmente cuenta con una colección de más de 3000 problemas de diversos niveles de dificultad. Los problemas pueden ser visualizados en línea o descargados en pdf o ps. Usaré los problemas que se encuentran en el grupo de los &#39;&lt;a href=&#39;http://www.spoj.pl/problems/classical/&#39;&gt;clásicos&lt;/a&gt;´, que son más de 800. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Aunque es poco probable que en este año logre resolver todos los ejercicios en los cuatro lenguajes, haré mi mejor esfuerzo. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Primero implementaré un mismo algoritmo en los 4 lenguajes (imagino que este algoritmo tendrá un notorio enfoque procedimental considerando mi experiencia en C++, Pascal y C#) y luego intentaré optimizar el algoritmo explotando los patrones y librerías propios de cada lenguaje. Esto me permitirá determinar cuál lenguaje me ofrece mayor facilidad para la implementación, librerías más potentes, mayor velocidad de ejecución, etc. En fin, creo que será una experiencia interesante en la medida que pueda dedicarle el tiempo suficiente.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Quedan invitados a enviar sus comentarios y sus propias implementaciones. (en cualquier lenguaje, aquí no se discrimina a nadie). &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Saludos&lt;/p&gt;&lt;/span&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/7240305897470342296/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/7240305897470342296' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/7240305897470342296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/7240305897470342296'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2009/02/otros-parientes-no-tan-cercanos-escena.html' title='Otros parientes [no tan] cercanos a escena'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-6542911485897462686</id><published>2008-06-25T09:50:00.004-04:00</published><updated>2008-06-25T10:04:31.213-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><category scheme="http://www.blogger.com/atom/ns#" term="Recursos"/><title type='text'>Iconos, Iconos y mas Iconos</title><content type='html'>&lt;a href=&quot;http://www.iconlet.com&quot;&gt;http://www.iconlet.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Contiene una gran variedad de iconos que podemos incluir en nuestras aplicaciones. Los iconos son de muy buena calidad y pueden ser descargados sin costo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ojala les sea de utilidad&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.iconlet.com/&quot;&gt;http://www.iconlet.com&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/6542911485897462686/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/6542911485897462686' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/6542911485897462686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/6542911485897462686'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2008/06/iconos-iconos-y-mas-iconos.html' title='Iconos, Iconos y mas Iconos'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-3065286782984796038</id><published>2008-05-02T10:07:00.004-04:00</published><updated>2008-05-02T10:40:22.691-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ruby"/><title type='text'>Ruby: Un nuevo pariente cercano</title><content type='html'>Aunque este blog está orientado a la plataforma .NET, no podemos ignorar que los lenguajes dinámicos (Python y Ruby en particular) están ganando mucho terreno.&lt;br /&gt;&lt;br /&gt;MS ha anunciado que Ruby estará entre los lenguajes soportados por Silverlight, asi que Ruby ya está entre los &#39;parientes cercanos&#39; de C# (aludiendo al título de este blog), por lo que a partir de ahora los posts incluirán temas referidos a este lenguaje.&lt;br /&gt;&lt;br /&gt;Y quiero aprovechar este primer post para compartir con ustedes un recurso muy interesante. Un curso online gratuito de Ruby, que lleva adelante un profesor indio (de la India) llamado Satish Talim. Este curso está basado en Moodle y la quinta versión empieza mañana sábado 3 de mayo, pero tenemos la opción de inscribirnos hasta el 6 de mayo.&lt;br /&gt;&lt;br /&gt;Los participantes de esta versión ya superan los 400 y mas de 2000 personas ya han tomado este curso en sus versiones anteriores.&lt;br /&gt;&lt;br /&gt;Yo ya me inscribí, y los invito a ustedes a participar también. Pueden registrarse &lt;a href=&quot;http://rubylearning.org/class/&quot;&gt;aqui&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Saludos.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/3065286782984796038/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/3065286782984796038' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/3065286782984796038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/3065286782984796038'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2008/05/ruby-un-nuevo-pariente-cercano.html' title='Ruby: Un nuevo pariente cercano'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-2903119309810729027</id><published>2008-04-23T16:09:00.005-04:00</published><updated>2008-04-23T16:57:34.598-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><title type='text'>Live Mesh: mucho ruido</title><content type='html'>La gente de MS hizo mucho ruido hoy en los blogs con el anuncio del lanzamiento de una versión preliminar de una nueva plataforma de servicios llamada &lt;a href=&quot;https://www.mesh.com/&quot;&gt;Live Mesh&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;El comercial dice:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Aqui, allá, en todo lugar.&lt;br /&gt;&lt;br /&gt;Live Mesh te ubica en el centro de tu mundo digital. conectandote con la gente, los dispositivos, los programas y la información que te interesa. disponible en el lugar que estés.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;Pues eso.. la idea es lograr que los usuarios tengamos acceso a nuestra información independientemente del lugar en que nos encontremos y del dispositivo que utilicemos.&lt;br /&gt;&lt;br /&gt;En channel9 está disponible una entrevista con Ray Ozzie, en que brinda mucha información respecto a este nuevo producto.&lt;br /&gt;&lt;br /&gt;El tiempo dirá si se trata de un producto más o es una innovación tal que marque un punto de inflexión en la forma en que los usuarios interactuamos con nuestra información.&lt;br /&gt;&lt;br /&gt;Por mientras hariamos bien en mantener un ojo puesto en la evolución de esta cosa llamada Live Mesh.&lt;br /&gt;&lt;br /&gt;Saludos&lt;br /&gt;&lt;br /&gt;UPDATE: En este &lt;a href=&quot;http://dev.live.com/blogs/devlive/archive/2008/04/22/279.aspx&quot;&gt;post&lt;/a&gt; del General Manager de Live Mesh hay una explicación muy completa de las características.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/2903119309810729027/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/2903119309810729027' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/2903119309810729027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/2903119309810729027'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2008/04/live-mesh-mucho-ruido.html' title='Live Mesh: mucho ruido'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-3061262050278867899</id><published>2008-04-22T13:50:00.007-04:00</published><updated>2008-04-22T15:24:42.494-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><title type='text'>The Shutdown Day</title><content type='html'>Este 3 de mayo será el Shutdown Day, que se celebra una vez al año.&lt;br /&gt;&lt;br /&gt;Qué hay q hacer??  pues simplemente apagar el computador durante un dia entero y compartir cosas diferentes y divertidas  con la familia y los amigos.&lt;br /&gt;&lt;br /&gt;Estas cosas no deberian hacerse solo una vez al año.. sino minimamente un dia por semana, pero no deja de ser un experimiento interesante que nos ayuda a ver las lindas cosas que nos perdemos por estar sentados frente a nuestro monitor la mayor parte de nuestro tiempo.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Shutdown Day is a &lt;strong&gt;Global Internet Experiment&lt;/strong&gt; whose purpose is to get people to think about how their lives have changed with the increasing use of the home computer, and whether or not any good things are being lost because of this.&lt;br /&gt;&lt;br /&gt;The idea of Shutdown Day project is simple - &lt;strong&gt;just shutdown your computer for one whole day&lt;/strong&gt; of the year and involve yourself in some other activities: outdoors, nature, sports, fun stuff with friends and family - whatever, just to remind yourself that there still exists a world outside your monitor screen.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;El sitio que promueve esto es &lt;a href=&quot;http://shutdownday.org/&quot;&gt;Shutdown Day&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Quien se anima a permanecer UN DIA ENTERO con el PC apagado?? YO SI.. y no solo un dia :)&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/3061262050278867899/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/3061262050278867899' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/3061262050278867899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/3061262050278867899'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2008/04/shutdown-day.html' title='The Shutdown Day'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-527113502577664674</id><published>2008-04-22T10:02:00.008-04:00</published><updated>2008-04-22T10:23:27.990-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><title type='text'>Correo de Confirmación de MS</title><content type='html'>Estaba intentando registrarme para un evento on-line de MS y como parte del proceso debia confirmar mi dirección de correo electrónico, para esto me enviaron el siguiente mensaje:&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFTqknHr-FR1CizA_K2_MkwCrm0oQ3OUQUo-6KfMZqpmUVuF22vCNM8J-U2OZjTLFICqRck5ZP02MJHkBH9S0NHvS6UPhl8QPUadyKFRdQGjLwG3dQCxaJL2XTKWeajaJx60P-Pw/s1600-h/funnymail.gif&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFTqknHr-FR1CizA_K2_MkwCrm0oQ3OUQUo-6KfMZqpmUVuF22vCNM8J-U2OZjTLFICqRck5ZP02MJHkBH9S0NHvS6UPhl8QPUadyKFRdQGjLwG3dQCxaJL2XTKWeajaJx60P-Pw/s400/funnymail.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5192073813518889074&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;y por qué razón primero me piden que haga clic en el vinculo y a continuación me dicen que si lo hago no funcionará??&lt;br /&gt;&lt;br /&gt;Y al final de toda la historia.. ninguna de las dos instrucciones funcionó :@:@:@&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/527113502577664674/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/527113502577664674' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/527113502577664674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/527113502577664674'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2008/04/correo-de-confirmacin-de-ms.html' title='Correo de Confirmación de MS'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFTqknHr-FR1CizA_K2_MkwCrm0oQ3OUQUo-6KfMZqpmUVuF22vCNM8J-U2OZjTLFICqRck5ZP02MJHkBH9S0NHvS6UPhl8QPUadyKFRdQGjLwG3dQCxaJL2XTKWeajaJx60P-Pw/s72-c/funnymail.gif" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-4487062120228935640</id><published>2008-03-28T08:59:00.002-04:00</published><updated>2008-03-28T09:06:25.692-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><category scheme="http://www.blogger.com/atom/ns#" term="Recursos"/><title type='text'>Google Code University</title><content type='html'>Recientemente (bueno, no tanto) salió a la luz un sitio llamado Google Code University, que tiene recursos interesantes sobre lenguajes (actualmente C++, Java y Python), AJAX, Seguridad en la Web, Aplicaciones distribuidas, MySQL y otras cosas.&lt;br /&gt;&lt;br /&gt;Aunque al momento el material no es muy abundante, los temas que se incluyen son realmente interesantes y varios de ellos son bastante especializados. Vale la pena darle una mirada.&lt;br /&gt;&lt;br /&gt;La direccion es   &lt;a href=&quot;http://code.google.com/edu/&quot;&gt;http://code.google.com/edu/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Saludos&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/4487062120228935640/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/4487062120228935640' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/4487062120228935640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/4487062120228935640'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2008/03/google-code-university.html' title='Google Code University'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-4698515095557275179</id><published>2008-03-19T08:47:00.005-04:00</published><updated>2008-03-19T09:55:20.468-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><title type='text'>[OT] Dia del Padre</title><content type='html'>Hoy 19 de marzo se celebra en mi país (Bolivia) el Día del Padre.&lt;br /&gt;&lt;br /&gt;Este dia es muy especial para mí porque es la primera vez que puedo celebrarlo, pues en noviembre del año pasado nació Areli, mi primera hijita, que hoy cumple 3 meses, 3 semanas y 4 dias. Ella es el mejor regalo que Dios me pudo haber dado.&lt;br /&gt;&lt;br /&gt;Quise compartir esta felicidad con ustedes, mis amigos lectores, y aprovecho para desear un &quot;Feliz Dia del Padre&quot; a todos los padres que visitan este blog, aunque hoy no se celebre el Dia del Padre en los diferentes paises :)&lt;br /&gt;&lt;br /&gt;Aqui les dejo una foto donde aparezco con ella en un viaje que hicimos la semana pasada.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUOpd6ISMItTdpmDsWB6FgnEkRqgwd9WvRIgDUaaZsO04-8Bw0o5tIFv-3D5UckmY60Y2RdDhMlj4_9OA9LN8VcWFTCz26UhLov83nq5wHEojX7fJbKY_FbJGEEvDePryw-DWREQ/s1600-h/Sucre_20080304_002.JPG&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUOpd6ISMItTdpmDsWB6FgnEkRqgwd9WvRIgDUaaZsO04-8Bw0o5tIFv-3D5UckmY60Y2RdDhMlj4_9OA9LN8VcWFTCz26UhLov83nq5wHEojX7fJbKY_FbJGEEvDePryw-DWREQ/s320/Sucre_20080304_002.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5179443985002938674&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;saludos&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/4698515095557275179/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/4698515095557275179' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/4698515095557275179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/4698515095557275179'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2008/03/ot-dia-del-padre.html' title='[OT] Dia del Padre'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUOpd6ISMItTdpmDsWB6FgnEkRqgwd9WvRIgDUaaZsO04-8Bw0o5tIFv-3D5UckmY60Y2RdDhMlj4_9OA9LN8VcWFTCz26UhLov83nq5wHEojX7fJbKY_FbJGEEvDePryw-DWREQ/s72-c/Sucre_20080304_002.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-821468387680146906</id><published>2008-03-18T12:22:00.003-04:00</published><updated>2008-03-18T12:41:31.408-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Incluir los métodos privados en las pruebas unitarias</title><content type='html'>Aunque existe un gran debate acerca de si se debe incluir o no los métodos privados en las pruebas unitarias, siempre es bueno disponer de alguna forma de hacerlo.&lt;br /&gt;&lt;br /&gt;En este post les mostraré una sencilla forma de invocar métodos privados usando Reflection.&lt;br /&gt;&lt;br /&gt;Implementaremos la clase PrivateMethodCaller asi:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;class&lt;/span&gt; PrivateMethodCaller&lt;br /&gt;{&lt;br /&gt;       &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;object&lt;/span&gt; Invoke(Type t, &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;string&lt;/span&gt; methodName, &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;object&lt;/span&gt;[] parameters)&lt;br /&gt;      {&lt;br /&gt;               MethodInfo mi = t.GetMethod(methodName, BindingFlags.Static | BindingFlags.NonPublic);&lt;br /&gt;               &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;return&lt;/span&gt; InvokeMethod(mi, &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;null&lt;/span&gt;, parameters);&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;  &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;object&lt;/span&gt; Invoke(&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;object&lt;/span&gt; instance, &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;string&lt;/span&gt; methodName, &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;object&lt;/span&gt;[] parameters)&lt;br /&gt;  {&lt;br /&gt;      MethodInfo mi = instance.GetType().GetMethod(methodName, BindingFlags.NonPublic|BindingFlags.Instance);&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;return&lt;/span&gt; InvokeMethod(mi, instance, parameters);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;object&lt;/span&gt; InvokeMethod(MethodInfo mi, &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;object&lt;/span&gt; instance, &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;object&lt;/span&gt;[] parameters)&lt;br /&gt;  {&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;if&lt;/span&gt; (mi == &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;null&lt;/span&gt;)&lt;br /&gt;      {&lt;br /&gt;          &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;new&lt;/span&gt; InvalidOperationException(&quot;&lt;span style=&quot;color: rgb(139, 0, 0);&quot;&gt;No se pudo encontrar el método&lt;/span&gt;&quot;);&lt;br /&gt;      }&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;return&lt;/span&gt; mi.Invoke(instance, parameters);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Nuestra clase contiene un solo método: Invoke que toma dos formas:&lt;br /&gt;&lt;br /&gt;La primera acepta un parámetro tipo Type. Esta versión del método nos permite invocar métodos estáticos.&lt;br /&gt;&lt;br /&gt;La segunda acepta un parámetro tipo object. Esta versión nos permite invocar métodos no estáticos.&lt;br /&gt;&lt;br /&gt;Veamos ahora como usamos esta clase desde nuestras pruebas unitarias.&lt;br /&gt;&lt;br /&gt;Crearemos una clase muy simple que nos servirá como ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;class&lt;/span&gt; ClassUnderTest&lt;br /&gt;{&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;int&lt;/span&gt; StaticMethod(&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;int&lt;/span&gt; a, &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;int&lt;/span&gt; b)&lt;br /&gt; {&lt;br /&gt;     &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;return&lt;/span&gt; a + b;&lt;br /&gt; }&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;int&lt;/span&gt; InstanceMethod(&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;int&lt;/span&gt; a, &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;int&lt;/span&gt; b)&lt;br /&gt; {&lt;br /&gt;     &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;return&lt;/span&gt; a + b;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Hemos definido dos métodos en nuestra clase de prueba. Uno estático y el otro de instancia.&lt;br /&gt;&lt;br /&gt;Ahora veamos como implementamos nuestras pruebas unitarias usando NUnit:&lt;br /&gt;&lt;br /&gt;[TestFixture]&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;class&lt;/span&gt; PrivateMethodTests&lt;br /&gt;{&lt;br /&gt; [Test]&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;void&lt;/span&gt; StaticMethodTest()&lt;br /&gt; {&lt;br /&gt;     &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;int&lt;/span&gt; res = (&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;int&lt;/span&gt;)PrivateMethodCaller.Invoke(&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;typeof&lt;/span&gt;(ClassUnderTest), &quot;&lt;span style=&quot;color: rgb(139, 0, 0);&quot;&gt;StaticMethod&lt;/span&gt;&quot;, &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;object&lt;/span&gt;[] { 1, 2 });&lt;br /&gt;     Assert.AreEqual(3, res);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; [Test]&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;void&lt;/span&gt; InstanceMethodTest()&lt;br /&gt; {&lt;br /&gt;     &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;int&lt;/span&gt; res = (&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;int&lt;/span&gt;)PrivateMethodCaller.Invoke(&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;new&lt;/span&gt; ClassUnderTest(), &quot;&lt;span style=&quot;color: rgb(139, 0, 0);&quot;&gt;InstanceMethod&lt;/span&gt;&quot;, &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;object&lt;/span&gt;[] { 4,5});&lt;br /&gt;     Assert.AreEqual(9, res);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Como podemos ver ya somos capaces de invocar los métodos privados y testear sus resultados.&lt;br /&gt;&lt;br /&gt;Espero que esta información les sea de utilidad.&lt;br /&gt;&lt;br /&gt;Saludos.&lt;br /&gt;&lt;span style=&quot;font-family:Courier New;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot; src=&quot;&quot; com=&quot;&quot; s=&quot;&quot; i=&quot; + data:post.url&quot;&gt;&lt;/script&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/821468387680146906/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/821468387680146906' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/821468387680146906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/821468387680146906'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2008/03/incluir-los-mtodos-privados-en-las.html' title='Incluir los métodos privados en las pruebas unitarias'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-380744108995987694</id><published>2008-02-25T10:46:00.003-04:00</published><updated>2008-02-26T09:24:58.072-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="NHibernate"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server"/><title type='text'>NHibernate.Timestamp != SQLServer.Timestamp</title><content type='html'>Al intentar utilizar &lt;timestamp&gt; el control de concurrencia, mediante las etiquetas &amp;lt;timestamp&amp;gt; o &amp;lt;version&amp;gt; de NHibernate junto con el tipo Timestamp de SQL Server, nos encontramos con un mensaje como este:&lt;br /&gt;&lt;br /&gt;&quot;Could not cast the value in field ts_times4_ to the Type TimestampType. Please check to make sure that the mapping is correct and that your DataProvider supports this Data Type.&quot;&lt;br /&gt;&lt;br /&gt;debido a que el tipo Timestamp de SQL Server es recibido como un byte[] en el .NET Framework y no es compatible con los tipos que NHibernate usa para el control de las versiones. (Aunque la documentación de NHibernate diga lo contrario)&lt;br /&gt;&lt;br /&gt;Luego de algunas horas intentando resolver este problema encontré un artículo en CodeProject q resuelve el problema.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.codeproject.com/KB/dotnet/OptLocking_PrefixTable.aspx&quot;&gt;http://www.codeproject.com/KB/dotnet/OptLocking_PrefixTable.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ojala les sea de utilidad&lt;/timestamp&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/380744108995987694/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/380744108995987694' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/380744108995987694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/380744108995987694'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2008/02/nhibernatetimestamp-sqlservertimestamp.html' title='NHibernate.Timestamp != SQLServer.Timestamp'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-5724042270116496877</id><published>2008-02-21T09:44:00.002-04:00</published><updated>2008-02-21T09:51:22.052-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><title type='text'>Herramientas para GMail en MSDN CodeGallery</title><content type='html'>Se publicó en MSDN CodeGallery una libreria de clases muy sencillas, pero q nos pueden ahorrar algún tiempo, que nos permiten integrar nuestras aplicaciones .NET con el excelente servicio de GMail.&lt;br /&gt;&lt;br /&gt;Pueden descargar  el código desde &lt;a href=&quot;http://code.msdn.microsoft.com/CSharpGmail&quot;&gt;aqui&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Saludos&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/5724042270116496877/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/5724042270116496877' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/5724042270116496877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/5724042270116496877'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2008/02/herramientas-para-gmail-en-msdn.html' title='Herramientas para GMail en MSDN CodeGallery'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-2496487166095201409</id><published>2008-02-19T11:46:00.003-04:00</published><updated>2008-02-19T12:00:39.420-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><category scheme="http://www.blogger.com/atom/ns#" term="NHibernate"/><title type='text'>NHibernate: Intellisense para archivos de configuracion</title><content type='html'>Un tip para lograr soporte de Intellisense para los archivos de configuración y mapeo (mapping files) de NHibernate&lt;br /&gt;&lt;br /&gt;Simplemente debemos copiar los archivos [NhibernateInstallDir]\src\NHibernate\*.xsd en:&lt;br /&gt;&lt;br /&gt;&lt;tt class=&quot;literal&quot;&gt;&lt;vs&gt;[VSInstallDir]\Xml\Schemas      -- si estamos usando VS2005, o&lt;br /&gt;&lt;br /&gt;&lt;/vs&gt;&lt;/tt&gt;&lt;tt class=&quot;literal&quot;&gt;[VSInstallDir]&lt;/tt&gt;&lt;tt class=&quot;literal&quot;&gt;&lt;vs.net&gt;\Common7\Packages\schemas\xml&lt;/vs.net&gt;&lt;/tt&gt;    -- si aun estamos usando VS2003&lt;br /&gt;&lt;br /&gt;Espero les sea de utilidad a la hora de escribir sus archivos xml a mano :)&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/2496487166095201409/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/2496487166095201409' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/2496487166095201409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/2496487166095201409'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2008/02/nhibernate-intellisense-para-archivos.html' title='NHibernate: Intellisense para archivos de configuracion'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-5851619958035934321</id><published>2008-02-18T08:54:00.002-04:00</published><updated>2008-02-18T09:05:06.636-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="snippets"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server"/><title type='text'>Si existe: actualizar; si no: insertar</title><content type='html'>Comparto con ustedes un tip sobre BD que encontré &lt;a href=&quot;http://blogs.msdn.com/miah/archive/2008/02/17/sql-if-exists-update-else-insert.aspx&quot;&gt;aqui&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A menudo necesitamos actualizar un registro existente en una tabla o insertarlo en caso de no existir. La forma mas simple de hacerlo es:&lt;br /&gt;&lt;br /&gt;IF EXISTS(SELECT * FROM MiTabla WHERE MiLlave = 10) THEN&lt;br /&gt;   UPDATE MiTabla SET MiCampo = 100 WHERE MiLlave = 10&lt;br /&gt;ELSE&lt;br /&gt;   INSERT INTO MiTabla (MiLlave, MiCampo) VALUES (10,100)&lt;br /&gt;&lt;br /&gt;Este script funciona, sin embargo no es la forma más óptima de realizar esta operación, pues el motor de la BD realiza dos búsquedas en la tabla. Una para el SELECT y otra para el Update.&lt;br /&gt;&lt;br /&gt;Una mejor forma de hacer esta operación es:&lt;br /&gt;&lt;br /&gt;UPDATE MiTabla SET MiCampo = 100 WHERE MiLlave = 10&lt;br /&gt;IF @@ROWCOUNT = 0 THEN&lt;br /&gt;   INSERT INTO MiTabla (MiLlave, MiCampo) VALUES (10,100)&lt;br /&gt;&lt;br /&gt;Asi le ahorramos un poco de trabajo a nuestro servidor.&lt;br /&gt;&lt;br /&gt;Saludos&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/5851619958035934321/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/5851619958035934321' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/5851619958035934321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/5851619958035934321'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2008/02/si-existe-actualizar-si-no-insertar.html' title='Si existe: actualizar; si no: insertar'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-7835238392640160629</id><published>2008-01-18T08:53:00.000-04:00</published><updated>2008-01-18T09:21:56.381-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="wpf"/><title type='text'>El codigo fuente del .NET Framework ya está disponible</title><content type='html'>Cumpliendo con su anuncio de octubre pasado, MS acaba de liberar el código fuente del .NET Framework como material de Referencia y Depuración.&lt;br /&gt;&lt;br /&gt;Pueden encontrar el anuncio original &lt;a href=&quot;http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx&quot;&gt;aqui&lt;/a&gt;,&lt;br /&gt;&lt;br /&gt;También se ha posteado una explicacion en profundidad de como configurar VS2008 para depurar el código &lt;a href=&quot;http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx&quot;&gt;aqui&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y finalmente una traducción a nuestro idioma &lt;a href=&quot;http://blogs.msdn.com/masaez/archive/2008/01/17/accediendo-al-c-digo-del-framework-net.aspx&quot;&gt;aqui&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Espero q esta información les sea de utilidad... y un FELIZ Y EXITOSO 2008 a todos &lt;:D&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/7835238392640160629/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/7835238392640160629' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/7835238392640160629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/7835238392640160629'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2008/01/el-codigo-fuente-del-net-framework-ya.html' title='El codigo fuente del .NET Framework ya está disponible'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-8474450045108702470</id><published>2007-11-20T12:13:00.000-04:00</published><updated>2007-11-21T12:19:12.514-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>Recursos adicionales que acompañan a VS2008</title><content type='html'>Junto con el lanzamiento de VS 2008 se liberaron muchos recursos adicionales que nos ayudarán a dar los primeros pasos en esta nueva plataforma.&lt;br /&gt;&lt;br /&gt;Tenemos por ejemplo: Windows Vista P2P Toolkit,  Free Game Developer Toolkit, Coding4Fun Developer Toolkit, Controles gratuitos, Host gratuito...y muchos otros.&lt;br /&gt;&lt;br /&gt;Pueden encontrar una recopilación interesante en este &lt;a href=&quot;http://blogs.msdn.com/ethelcilla/archive/2007/11/20/recursos-nuevos-gratuitos-con-visual-studio-2008-express.aspx&quot;&gt;post.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Espero les sea de utilidad, saludos&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/8474450045108702470/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/8474450045108702470' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/8474450045108702470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/8474450045108702470'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2007/11/recursos-adicionales-que-acompaan.html' title='Recursos adicionales que acompañan a VS2008'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-5411423155192992862</id><published>2007-11-19T15:50:00.000-04:00</published><updated>2007-11-19T16:00:36.055-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>Ya llegaron VS2008 y .NET Framework 3.5</title><content type='html'>Hoy fueron liberadas oficialmente las versiones RTM de estos dos productos. Aún no vienen en las tradicionales cajitas que podemos comprar en una tienda, pero podemos descargarlas desde varios sitios:&lt;br /&gt;&lt;br /&gt;Si son suscriptores de MSDN pueden descargar el producto sin costo desde el sitio de msdn.&lt;br /&gt;&lt;br /&gt;Si no son suscriptores:&lt;br /&gt;&lt;br /&gt;* se puede bajar versiones de prueba de 90 dias de VS Team Suite &lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=D95598D7-AA6E-4F24-82E3-81570C5384CB&amp;amp;displaylang=en&quot;&gt;aqui.&lt;/a&gt;&lt;br /&gt;* Una versión de prueba de 90 días de Team Foundation System está disponible &lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=B0155166-B0A3-436E-AC95-37D7E39A440C&amp;amp;displaylang=en&quot;&gt;aqui.&lt;/a&gt;&lt;br /&gt;* Una versión de prueba de 90 días de VS Professional estará disponible en los próximos dias.&lt;br /&gt;* Las ediciones Express (gratuitas) están disponibles &lt;a href=&quot;http://www.microsoft.com/express/download/&quot;&gt;aqui.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;y finalmente, si solamente quieren descargar el .NET framework 3.5, pueden encontrarlo &lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&amp;amp;displaylang=en&quot;&gt;aqui.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Espero les sirvan esos links, en los próximos les haré un resumen de las principales innovaciones que trae esta nueva versión.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/5411423155192992862/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/5411423155192992862' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/5411423155192992862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/5411423155192992862'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2007/11/ya-llegaron-vs2008-y-net-framework-35.html' title='Ya llegaron VS2008 y .NET Framework 3.5'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-7776034822716056343</id><published>2007-11-19T11:02:00.001-04:00</published><updated>2007-11-19T11:07:31.749-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>El Training kit de Visual Studio 2008 y .NET Framework 3.5 ya está disponible</title><content type='html'>&lt;p&gt;A partir de hoy está disponible el Training Kit de VS 2008 y .NET Framework 3.5. Es un archivo comprimido de poco más de 120 Mb que contiene presentaciones en PowerPoint, Demos y Labs.&lt;/p&gt; &lt;p&gt;Se puede descargar de &lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyID=8bdaa836-0bba-4393-94db-6c3c4a0c98a1&amp;amp;DisplayLang=en&quot; target=&quot;_blank&quot;&gt;aqui&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Saludos&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/7776034822716056343/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/7776034822716056343' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/7776034822716056343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/7776034822716056343'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2007/11/el-training-kit-de-visual-studio-2008-y.html' title='El Training kit de Visual Studio 2008 y .NET Framework 3.5 ya está disponible'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-932541328328236734</id><published>2007-11-16T11:27:00.001-04:00</published><updated>2007-11-16T11:47:30.977-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CodeJam"/><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><title type='text'>Crónicas del Google CodeJam (Beta)</title><content type='html'>&lt;p&gt;Ayer tuve la oportunidad de participar (con muy poco éxito  O0o.:| ) en la primera prueba abierta al público del concurso de programación Google CodeJam, como les comenté &lt;a href=&quot;http://jmarcost.blogspot.com/2007/11/google-codejam-beta.html&quot; target=&quot;_blank&quot;&gt;aqui&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Les comento como funciona, haré una comparación con &lt;a href=&quot;http://www.topcoder.com/&quot; target=&quot;_blank&quot;&gt;TopCoder&lt;/a&gt;, ya que es una plataforma de concursos bastante popular (en la que participo a veces), y era donde se llevaba a cabo el CodeJam los pasados años.&lt;/p&gt; &lt;p&gt;En pocas palabras: La mecánica del nuevo CodeJam es TOTALMENTE diferente a la de TopCoder, las principales diferencias son:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;TopCoder está basado en un Applet de Java que debe ser instalado en nuestro equipo. CodeJam está basado totalmente en el navegador.&lt;/li&gt; &lt;li&gt;TopCoder pone estrictos límites en cuanto a los lenguajes de programación que se pueden usar (Normalmente C++, C#, VB.NET y Java. También se admitía Python únicamente para los CodeJams). El nuevo CodeJam no pone restricción alguna. Los participantes pueden usar el lenguaje que prefieran, desde assembler hasta SQL :) ya les explicaré como esto es posible.&lt;/li&gt; &lt;li&gt; En TopCoder y en otros sitios de concursos como el de la &lt;a href=&quot;http://icpcres.ecs.baylor.edu/onlinejudge/index.php&quot; target=&quot;_blank&quot;&gt;UVA&lt;/a&gt;, se debe enviar el código fuente. En el nuevo CodeJam NO se envia ningún código. De ahi que es posible usar cualquier lenguaje de programación. &lt;/li&gt; &lt;li&gt; En TopCoder el tiempo empieza a correr cuando el participante abre un problema para verlo. En CodeJam el tiempo empieza a correr a partir de la hora fijada para el inicio del concurso.&lt;/li&gt; &lt;li&gt;En TopCoder se tiene la opción de ver el código de otros participantes y eventualmente desafiar aquellos que parezcan incorrectos, ganando (o perdiendo) puntos por ello. En CodeJam esto no es posible, ya que, como ya dije, no se envía ningún código.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Ahora les cuento como funciona este nuevo CodeJam:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgryQ3-QQK1HFZfLTc_kO_enGrZ9CvzaazzakVrbtmRezlc4v7luuGm-iu6yd02RcuGQUDe8FbKP3Z3aJg801SjUczndAtUKHhbbX6mXgt96WoAv04dv76V0g6VsPuEskhxZPjFpQ/s1600-h/codejamscreenshot.gif&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgryQ3-QQK1HFZfLTc_kO_enGrZ9CvzaazzakVrbtmRezlc4v7luuGm-iu6yd02RcuGQUDe8FbKP3Z3aJg801SjUczndAtUKHhbbX6mXgt96WoAv04dv76V0g6VsPuEskhxZPjFpQ/s320/codejamscreenshot.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5133464930328768786&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;Solamente se necesita un navegador web, no applets, addins, ActiveX, ni nada. Solo el navegador. Se ingresa al sitio del concurso a la hora fijada (ayer fue a las 6.00PM PST, 10 de la noche en mi país (-4.00 UTC)) e inmediatamente se pueden ver los problemas. Ayer fueron 4 problemas de algoritmos de diferentes niveles de dificultad, y obviamente de diferentes puntajes. El tiempo de la competencia fue de 2 horas. (Para entonces ya tenia mucho sueño :O)&lt;/p&gt; &lt;p&gt;El tiempo empieza a correr a partir de la hora de inicio del concurso, y pueden visualizarse todos los problemas al mismo tiempo. A mi parecer esto beneficia a quienes participan en grupo, perjudicando a los participantes individuales. Mientas mas grande el grupo, mas ventajas. En TopCoder los participante los individuales tenemos un poco más de oportunidad.&lt;/p&gt; &lt;p&gt;Ahora si, vamos al corazón del asunto: Una vez visto y analizado el problema, tenemos la opción de resolverlo en cualquier lenguaje de programación, usando cualquier herramienta de desarrollo. No existe ninguna restricción. &lt;/p&gt; &lt;p&gt;Básicamente nuestro programa deberá leer un archivo de texto, realizar algun proceso, y generar un archivo de salida. &lt;/p&gt; &lt;p&gt;Les comento un problema del concurso de ayer a manera de ejemplo: Se trataba sobre sistemas de numeración, y básicamente se pedía: Dado un número N expresado en Base-X convertirlo a Base-Y. Las bases podían contener números, letras, símbolos, etc.&lt;/p&gt; &lt;p&gt;Entonces nuestro programa debía leer un archivo parecido a este:&lt;/p&gt; &lt;p&gt;100&lt;br /&gt;9 0123456789 oF8&lt;br /&gt;Foo oF8 0123456789&lt;br /&gt;13 0123456789abcdef 01&lt;br /&gt;CODE O!CDE? A?JM!.&lt;/p&gt; &lt;p&gt;........&lt;/p&gt; &lt;p&gt;La primera línea nos indica el número de entradas que tiene el archivo. 100, en este caso. Las lineas sucesivas son de la forma:&lt;/p&gt; &lt;blockquote&gt; &lt;p align=&quot;left&quot;&gt;[N] [Base-X] [Base-Y]&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Entonces nuestro programa deberá recorrer todas las entradas del archivo, convertir N expresado en BaseX a BaseY, e ir generando un archivo de salida parecido a este: &lt;/p&gt;&lt;p&gt;Case #1: Foo&lt;br /&gt;Case #2: 9&lt;br /&gt;Case #3: 10011&lt;br /&gt;Case #4: JAM!&lt;br /&gt;Case #5: I%`jEEa&lt;br /&gt;Case #6: *LAs969 &lt;/p&gt;&lt;p&gt;........ &lt;/p&gt;&lt;p&gt;Una vez que hemos leído, analizado codificado y probado nuestro programa, deberemos bajar el archivo de entrada. A partir de ese momento tenemos un corto tiempo para enviar el archivo de salida. &lt;/p&gt;&lt;p&gt;Existen dos tipo de archivos de entrada para cada problema:  &lt;/p&gt;&lt;p&gt;1. Archivos de entrada Pequeños &lt;/p&gt;&lt;blockquote&gt; &lt;p&gt;Típicamente 100 entradas. &lt;/p&gt;&lt;p&gt;Tenemos 4 minutos para enviar la solución. &lt;/p&gt;&lt;p&gt;Somos informados inmediatamente si nuestra solución fue considerada correcta o no. &lt;/p&gt;&lt;p&gt;Normalmente tiene un puntaje menor que los archivos de entrada grandes.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;2. Archivos de entrada Grandes &lt;/p&gt;&lt;blockquote&gt; &lt;p&gt;Contienen 1000, 10000 o más entradas &lt;/p&gt;&lt;p&gt;Tenemos 8 minutos para enviar la solución &lt;/p&gt;&lt;p&gt;Solo se evalúa nuestra solución al final del concurso. &lt;/p&gt;&lt;p&gt;Normalmente tienen un puntaje mayor que los archivos de entrada pequeños.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Si nuestra solución no fue correcta, tenemos la opción de bajar otro archivo de entrada y enviar la nueva solución. Si esto ocurre somos penalizados con 240 segundos. El tiempo es importante en caso empate. &lt;/p&gt;&lt;p&gt;Existe un foro dedicado al concurso &lt;a href=&quot;http://groups.google.com/group/google-code&quot; target=&quot;_blank&quot;&gt;aqui&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Así es entonces como funciona el nuevo CodeJam de Google. habrá que esperar las versiones definitivas para seguir participando.&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/932541328328236734/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/932541328328236734' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/932541328328236734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/932541328328236734'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2007/11/crnicas-del-google-codejam-beta.html' title='Crónicas del Google CodeJam (Beta)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgryQ3-QQK1HFZfLTc_kO_enGrZ9CvzaazzakVrbtmRezlc4v7luuGm-iu6yd02RcuGQUDe8FbKP3Z3aJg801SjUczndAtUKHhbbX6mXgt96WoAv04dv76V0g6VsPuEskhxZPjFpQ/s72-c/codejamscreenshot.gif" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-1024570521986468010</id><published>2007-11-14T08:45:00.001-04:00</published><updated>2007-11-14T10:43:36.629-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><title type='text'>Google CodeJam (Beta)</title><content type='html'>&lt;p&gt;Recien me enteré de que Google está cambiando la modalidad de su famoso concurso de programación CodeJam. En los pasados años, CodeJam era desarrollado por TopCoder, pero a partir de este año, será Google mismo quien operativice el concurso.&lt;/p&gt; &lt;p&gt;Mañana Jueves 15 se desarrollará por primera vez una prueba beta abierta al público, valdría la pena inscribirse.&lt;/p&gt; &lt;p&gt;Se ofrecen cupones de Google Store para los 3 primeros lugares y poleras para los primeros 200. &lt;/p&gt; &lt;p&gt;En el formulario de registro, se les pregunta a los participantes el país de residencia, pero solo aparecen Estados Unidos y Canadá, por lo que seguramente, si llego a ganar una polera, no me la podrán hacer llegar hasta Bolivia :-(.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;De todas formas estoy muy entusiasmado con participar en esto.&lt;/p&gt; &lt;p&gt;Pueden inscribirse &lt;a href=&quot;http://www.google.com/codejambeta/&quot; target=&quot;_blank&quot;&gt;aqui&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/1024570521986468010/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/1024570521986468010' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/1024570521986468010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/1024570521986468010'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2007/11/google-codejam-beta.html' title='Google CodeJam (Beta)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-8945079255218407130</id><published>2007-11-13T14:54:00.001-04:00</published><updated>2007-11-13T14:55:55.437-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DCE"/><category scheme="http://www.blogger.com/atom/ns#" term="Miscelanea"/><title type='text'>Por fin llegó la quinta estrella!</title><content type='html'>&lt;p&gt;Luego de muchos meses de espera, finalmente está disponible la quinta estrella del programa&amp;nbsp; &lt;a href=&quot;http://www.dce2005.com&quot; target=&quot;_blank&quot;&gt;Desarrollador Cinco Estrellas&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Para lograr la quinta estrella se requieren aprobar 4 exámenes: el primero es sobre ASP.NET y AJAX, el segundo sobre arquitectura, el tercero sobre WCF y el último sobre WWF. &lt;/p&gt; &lt;p&gt;Los materiales vienen en videos, lo que personalmente no me gusta, hubiera preferido pdfs. No pude ver los videos usando Firefox, pero no tuve problemas con Internet Explorer.&lt;/p&gt; &lt;p&gt;Entre los incentivos, MS ofrece un diploma impreso que será enviado por correo a todos los que logren la quinta estrella. También se ofrece una invitación para el lanzamiento de VS 2008 en cada país.&lt;/p&gt; &lt;p&gt;Y al primero en lograr la quinta estrella se le obsequiará una cámara web de MS. Por lo que pude ver, ya hay dos personas que tienen la quinta estrella, asi que parece ser un poco tarde para optar por ese premio :).&lt;/p&gt; &lt;p&gt;Finalmente, la quinta estrella no es la cima del mundo, sino que una vez alcanzada, podemos optar por tomar 3 cursos adicionales para convertirnos en Desarrolladores Gold, o 6 cursos adicionales para ser Desarrolladores Platinum. Los 15 primeros desarrolladores que alcancen el nivel Platinum serán entrevistados por MSDN.&lt;/p&gt; &lt;p&gt;Esas son las novedades, visiten &lt;a href=&quot;http://www.dce2005.com&quot;&gt;www.dce2005.com&lt;/a&gt;, vean los materiales y empiecen a rendir los exámenes. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Exitos&lt;/p&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/8945079255218407130/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/8945079255218407130' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/8945079255218407130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/8945079255218407130'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2007/11/por-fin-lleg-la-quinta-estrella.html' title='Por fin llegó la quinta estrella!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27027337.post-2882614262955266854</id><published>2007-11-13T07:49:00.001-04:00</published><updated>2007-11-13T07:54:43.154-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><title type='text'>C# 3.0: Variables locales implícitamente tipadas</title><content type='html'>&lt;p&gt;Una innovación interesante de la versión 3 de C#  es la posibilidad de que el programador quede liberado de definir el tipo de dato de cada variable dejando a criterio del compilador el inferir el tipo de la variable, en base al valor a que se inicialice la variable.&lt;/p&gt; &lt;p&gt;Asi por  ejemplo si inicializamos una variable x con el valor 1 (uno), resulta obvio que x es una variable de tipo int. O si inicializamos y con el valor &quot;Hola mundo&quot;, es posible afirmar que y es del tipo string. Entonces es posible que el compilador determine (infiera) el tipo de la variable que estamos declarando, liberándonos de esta tarea.&lt;/p&gt; &lt;p&gt;C# 3 incluye la palabra reservada &lt;em&gt;var &lt;/em&gt;que le indica al compilador que debe inferir el tipo de la variable que estamos declarando. Por ejemplo, a partir de la instrucción:&lt;/p&gt; &lt;p&gt; &lt;/p&gt;&lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:c8fde80a-154e-400b-b643-82378d926dbf&quot; style=&quot;margin: 0px; padding: 0px; display: inline; float: none;&quot;&gt;&lt;pre style=&quot;background-color: White;&quot;&gt;&lt;div&gt;&lt;!--  Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/  --&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;var x &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;;&lt;br /&gt;var y &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Hola mundo&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;el compilador puede inferir que x es de tipo int. y que la variable y es del tipo string.&lt;/p&gt;&lt;p&gt;Es un error pensar que var declare una variable tipo Variant, es decir, una variable que puede cambiar su tipo dinámicamente. var simplemente nos evita tener que especificar el tipo de una variable al momento de declararla. Para el CLR cada variable tiene un y solo un tipo de dato, por tanto, el siguiente código no compila:&lt;/p&gt;&lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:851de5de-bcc3-4d22-b4e7-52795ad869ef&quot; style=&quot;margin: 0px; padding: 0px; display: inline; float: none;&quot;&gt;&lt;pre style=&quot;background-color: White;&quot;&gt;&lt;div&gt;&lt;!--  Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/  --&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;var x &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;;&lt;br /&gt;x &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Hola&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;;  &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt; Esta linea no compila&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;porque el compilador determinó que x es del tipo int, por lo que es ilegal asignarle un valor del tipo string.&lt;/p&gt;&lt;p&gt;El valor de inicialización es obligatorio cuando se declara una variable con var, asi el siguiente código no compila:&lt;/p&gt;&lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:b9195986-c2f0-4e46-8ed0-a4f2d29e470f&quot; style=&quot;margin: 0px; padding: 0px; display: inline; float: none;&quot;&gt;&lt;pre style=&quot;background-color: White;&quot;&gt;&lt;div&gt;&lt;!--  Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/  --&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;var x;  &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt; Esta linea no compila&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;porque el compilador necesita un valor a partir del cual pueda inferir el tipo de dato.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;También es posible inferir el tipo de los arrays usando var, asi:&lt;/p&gt;&lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:fad0bccf-9b78-466f-8c92-c841c012968b&quot; style=&quot;margin: 0px; padding: 0px; display: inline; float: none;&quot;&gt;&lt;pre style=&quot;background-color: White;&quot;&gt;&lt;div&gt;&lt;!--  Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/  --&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;var numeros &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;[] {&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;};&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;a partir de new[], el compilador sabe que estamos declarando un Array, y a partir de la lista de valores puede determinar el tipo de sus elementos.&lt;/p&gt;&lt;p&gt;Finalmente var también puede ser usada para declarar tipos complejos como listas o diccionarios, asi:&lt;/p&gt;&lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:2145905b-398b-42ed-853a-5a0bbe05251d&quot; style=&quot;margin: 0px; padding: 0px; display: inline; float: none;&quot;&gt;&lt;pre style=&quot;background-color: White;&quot;&gt;&lt;div&gt;&lt;!--  Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/  --&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;var lista &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; List&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;();&lt;br /&gt;var diccionario &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; Dictionary&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;();&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;script expr:src=&#39;&quot;http://feeds.feedburner.com/~s/jmarcost?i=&quot; + data:post.url&#39; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmarcost.blogspot.com/feeds/2882614262955266854/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/27027337/2882614262955266854' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/2882614262955266854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27027337/posts/default/2882614262955266854'/><link rel='alternate' type='text/html' href='http://jmarcost.blogspot.com/2007/11/c-30-variables-locales-tipadas.html' title='C# 3.0: Variables locales implícitamente tipadas'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>