<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://labloguera.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Un informático en construcción</title><link>http://labloguera.net/blogs/csharp/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Llamadas as&#237;ncronas con ADO.NET</title><link>http://labloguera.net/blogs/csharp/archive/2010/02/05/llamadas-as-ncronas-con-ado-net.aspx</link><pubDate>Fri, 05 Feb 2010 00:25:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:107679</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>1</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/107679.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=107679</wfw:commentRss><description>&lt;P align=justify&gt;En ciertas ocasiones, cuando trabajamos con grandes cantidades de datos al mismo tiempo las interfaces de nuestros programas pueden quedar bloqueadas. Esto generalmente hace que el usuario pierda la paciencia y termine cerrando la aplicación con la famosa combinación CTRL+ALT+SUPR.&lt;/P&gt;
&lt;P align=justify&gt;Para evitarlo podemos hacer uso de los hilos de toda la vida o de la API asíncrona que nos ofrece ADO.NET:&lt;/P&gt;
&lt;P align=center&gt;Begin/EndExecuteNonQuery &lt;/P&gt;
&lt;P align=center&gt;Begin/EndExecuteReader &lt;/P&gt;
&lt;P align=center&gt;Begin/EndExecuteXmlReader&lt;/P&gt;
&lt;P align=justify&gt;Es muy sencillo así que voy a mostrarlo con un ejemplo en el que hago múltiples inserciones en una tabla de la base de datos.&lt;/P&gt;
&lt;P align=justify&gt;Lo primero que haremos es crear un objeto SqlConnection y otro SqlCommand:&lt;/P&gt;&lt;PRE style="BORDER-BOTTOM:#cecece 1px solid;BORDER-LEFT:#cecece 1px solid;PADDING-BOTTOM:5px;BACKGROUND-COLOR:#fbfbfb;MIN-HEIGHT:40px;PADDING-LEFT:5px;WIDTH:503px;PADDING-RIGHT:5px;HEIGHT:116px;OVERFLOW:auto;BORDER-TOP:#cecece 1px solid;BORDER-RIGHT:#cecece 1px solid;PADDING-TOP:5px;"&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;SqlConnection conexion = &lt;SPAN style="COLOR:#0000ff;"&gt;new&lt;/SPAN&gt; SqlConnection(@"&lt;SPAN style="COLOR:#8b0000;"&gt;Data Source=.\SQLEXPRESS;AttachDbFilename=C:\nordwind\NORTHWND.MDF;Integrated Security=True; User Instance=True; asynchronous processing=true;&lt;/SPAN&gt;");
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;SqlCommand cmd;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;StringBuilder consulta = &lt;SPAN style="COLOR:#0000ff;"&gt;new&lt;/SPAN&gt; StringBuilder();
&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P align=justify&gt;Ahora abrimos la conexión con la base de datos y en un objeto StringBuilder añado todas las inserciones que tengo que hacer.&lt;/P&gt;&lt;PRE style="BORDER-BOTTOM:#cecece 1px solid;BORDER-LEFT:#cecece 1px solid;PADDING-BOTTOM:5px;BACKGROUND-COLOR:#fbfbfb;MIN-HEIGHT:40px;PADDING-LEFT:5px;WIDTH:503px;PADDING-RIGHT:5px;HEIGHT:195px;OVERFLOW:auto;BORDER-TOP:#cecece 1px solid;BORDER-RIGHT:#cecece 1px solid;PADDING-TOP:5px;"&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;try&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;{
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;  conexion.Open();
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;  &lt;SPAN style="COLOR:#0000ff;"&gt;for&lt;/SPAN&gt;(&lt;SPAN style="COLOR:#0000ff;"&gt;int&lt;/SPAN&gt; i=0;i&amp;lt;palabras.Length;i++)
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;  {
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;      consulta.Append("&lt;SPAN style="COLOR:#8b0000;"&gt;INSERT into palabras (palabra) VALUES ('&lt;/SPAN&gt;" + palabras&lt;img src="http://labloguera.net/emoticons/emotion-55.gif" alt="Idea" /&gt;.ToString()+"&lt;SPAN style="COLOR:#8b0000;"&gt;');&lt;/SPAN&gt;");
&lt;/PRE&gt; }&lt;/PRE&gt;
&lt;P align=justify&gt;Cuando termina de crear todas las inserciones creo una instancia del SqlCommand al que le paso las inserciones y el objeto SqlConnection.&lt;/P&gt;&lt;PRE style="BORDER-BOTTOM:#cecece 1px solid;BORDER-LEFT:#cecece 1px solid;PADDING-BOTTOM:5px;BACKGROUND-COLOR:#fbfbfb;MIN-HEIGHT:40px;PADDING-LEFT:5px;WIDTH:503px;PADDING-RIGHT:5px;HEIGHT:64px;OVERFLOW:auto;BORDER-TOP:#cecece 1px solid;BORDER-RIGHT:#cecece 1px solid;PADDING-TOP:5px;"&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;cmd = &lt;SPAN style="COLOR:#0000ff;"&gt;new&lt;/SPAN&gt; SqlCommand(consulta.ToString(), conexion);&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P align=justify&gt;Para ejecutar el comando en otro hilo diferente al del programa principal preparo un delegado que se activara cuando termine la operación.&lt;/P&gt;&lt;PRE style="BORDER-BOTTOM:#cecece 1px solid;BORDER-LEFT:#cecece 1px solid;PADDING-BOTTOM:5px;BACKGROUND-COLOR:#fbfbfb;MIN-HEIGHT:40px;PADDING-LEFT:5px;WIDTH:502px;PADDING-RIGHT:5px;HEIGHT:52px;OVERFLOW:auto;BORDER-TOP:#cecece 1px solid;BORDER-RIGHT:#cecece 1px solid;PADDING-TOP:5px;"&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;AsyncCallback callback = &lt;SPAN style="COLOR:#0000ff;"&gt;new&lt;/SPAN&gt; AsyncCallback(MetodoCallBack);&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;Luego ejecuto el comando de forma asíncrona:&lt;/P&gt;&lt;PRE style="BORDER-BOTTOM:#cecece 1px solid;BORDER-LEFT:#cecece 1px solid;PADDING-BOTTOM:5px;BACKGROUND-COLOR:#fbfbfb;MIN-HEIGHT:40px;PADDING-LEFT:5px;WIDTH:502px;PADDING-RIGHT:5px;HEIGHT:52px;OVERFLOW:auto;BORDER-TOP:#cecece 1px solid;BORDER-RIGHT:#cecece 1px solid;PADDING-TOP:5px;"&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;cmd.BeginExecuteNonQuery(callback, cmd);&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;Por último en la función que ejecuta el delegado recogemos el resultado de la operación y ejecutamos EndExecuteNonQuery.&lt;/P&gt;&lt;PRE style="BORDER-BOTTOM:#cecece 1px solid;BORDER-LEFT:#cecece 1px solid;PADDING-BOTTOM:5px;BACKGROUND-COLOR:#fbfbfb;MIN-HEIGHT:40px;PADDING-LEFT:5px;WIDTH:503px;PADDING-RIGHT:5px;HEIGHT:68px;OVERFLOW:auto;BORDER-TOP:#cecece 1px solid;BORDER-RIGHT:#cecece 1px solid;PADDING-TOP:5px;"&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;SqlCommand cmd = (SqlCommand)result.AsyncState;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;cmd.EndExecuteNonQuery(result);
&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;El código completo sería el siguiente:&lt;/P&gt;&lt;PRE style="BORDER-BOTTOM:#cecece 1px solid;BORDER-LEFT:#cecece 1px solid;PADDING-BOTTOM:5px;BACKGROUND-COLOR:#fbfbfb;MIN-HEIGHT:40px;PADDING-LEFT:5px;WIDTH:504px;PADDING-RIGHT:5px;HEIGHT:834px;OVERFLOW:auto;BORDER-TOP:#cecece 1px solid;BORDER-RIGHT:#cecece 1px solid;PADDING-TOP:5px;"&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;void&lt;/SPAN&gt; btnGuardar_Click(&lt;SPAN style="COLOR:#0000ff;"&gt;object&lt;/SPAN&gt; sender, EventArgs e)
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;        {
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;            String[] palabras = txtTexto.Text.Split("&lt;SPAN style="COLOR:#8b0000;"&gt; &lt;/SPAN&gt;".ToCharArray());
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;            SqlConnection conexion = &lt;SPAN style="COLOR:#0000ff;"&gt;new&lt;/SPAN&gt; SqlConnection(@"&lt;SPAN style="COLOR:#8b0000;"&gt;Data Source=.\SQLEXPRESS;AttachDbFilename=C:\ORTHWND.MDF;Integrated Security=True; User Instance=True; asynchronous processing=true;&lt;/SPAN&gt;");
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;            SqlCommand cmd;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;            StringBuilder consulta = &lt;SPAN style="COLOR:#0000ff;"&gt;new&lt;/SPAN&gt; StringBuilder();
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;            &lt;SPAN style="COLOR:#0000ff;"&gt;try&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;            {
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;                conexion.Open();
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;                &lt;SPAN style="COLOR:#0000ff;"&gt;for&lt;/SPAN&gt;(&lt;SPAN style="COLOR:#0000ff;"&gt;int&lt;/SPAN&gt; i=0;i&amp;lt;palabras.Length;i++)
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;                {
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;                        consulta.Append("&lt;SPAN style="COLOR:#8b0000;"&gt;INSERT into palabras (palabra) VALUES ('&lt;/SPAN&gt;" + palabras&lt;img src="http://labloguera.net/emoticons/emotion-55.gif" alt="Idea" /&gt;.ToString()+"&lt;SPAN style="COLOR:#8b0000;"&gt;');&lt;/SPAN&gt;");
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;                }
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;                cmd = &lt;SPAN style="COLOR:#0000ff;"&gt;new&lt;/SPAN&gt; SqlCommand(consulta.ToString(), conexion);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;                AsyncCallback callback = &lt;SPAN style="COLOR:#0000ff;"&gt;new&lt;/SPAN&gt; AsyncCallback(MetodoCallBack);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;                txtTexto.Enabled = &lt;SPAN style="COLOR:#0000ff;"&gt;false&lt;/SPAN&gt;;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;                cmd.BeginExecuteNonQuery(callback, cmd);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;            }
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;            &lt;SPAN style="COLOR:#0000ff;"&gt;catch&lt;/SPAN&gt; (Exception ex)
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;            {
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;                MessageBox.Show(ex.Message);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;            }
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;      
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;        }
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;        &lt;SPAN style="COLOR:#0000ff;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;void&lt;/SPAN&gt; MetodoCallBack(IAsyncResult result)
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;        {
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;            SqlCommand cmd = (SqlCommand)result.AsyncState;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;            cmd.EndExecuteNonQuery(result);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;            txtTexto.Enabled = &lt;SPAN style="COLOR:#0000ff;"&gt;true&lt;/SPAN&gt;;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;            cmd.Dispose();
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#fbfbfb;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;        }
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:8px;"&gt;&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;Espero que os sirva.&lt;/P&gt;
&lt;P&gt;Un saludo&lt;/P&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=107679" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/ADO.NET/default.aspx">ADO.NET</category></item><item><title>El rat&#243;n &#191;versi&#243;n 2.0?</title><link>http://labloguera.net/blogs/csharp/archive/2010/02/03/el-rat-n-versi-n-2-0.aspx</link><pubDate>Tue, 02 Feb 2010 23:18:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:107638</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>1</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/107638.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=107638</wfw:commentRss><description>&lt;p&gt;Hola a tod@s,&lt;/p&gt;
  
&lt;p align="justify"&gt;Después de un tiempo de parón por los exámenes vuelvo por fin al blog. Tengo algún artículo pendiente que intentaré subir lo más rápido posible, pero mientras se termina de cocinar he estado pensando sobre algunos temas que me gustaría mostrar aquí ya que hasta ahora la práctica totalidad de los post estaban centrados en desarrollo, fundamentalmente en .NET.&lt;br&gt;&lt;/p&gt;
  
&lt;p align="justify"&gt;Así que a partir de ahora expondré algún otro tema que me interesa sobre nuevas formas de interacción con el ordenador y sobre las interfaces de usuario. No soy ningún experto pero me interesan mucho estos temas, hace unos años todo era ciencia-ficción y lo que nos parecía imposible hoy se hace real (interfaces multitactil, interactuar por medio de gestos, pensamientos, etc). Cada día sigo encontrando estudios e investigaciones que merece la pena conocer.&lt;/p&gt;
  
&lt;p align="justify"&gt;Hoy dejo la primera muestra, una visión de cómo ven en Microsoft sus investigadores la siguiente versión del ratón para el ordenador:&lt;/p&gt;
  
&lt;p align="center"&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/z6krcU6mZW0&amp;amp;hl=es_ES&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/z6krcU6mZW0&amp;amp;hl=es_ES&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/object&gt;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;Saludos &lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=107638" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/UX/default.aspx">UX</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/interacci_26002300_243_3B00_n/default.aspx">interacci&amp;#243;n</category></item><item><title>M&#233;todos an&#243;nimos en .NET ( parte 1)</title><link>http://labloguera.net/blogs/csharp/archive/2009/12/29/m-todos-an-nimos-en-net-parte-1.aspx</link><pubDate>Tue, 29 Dec 2009 00:51:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:105059</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>0</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/105059.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=105059</wfw:commentRss><description>&lt;p align="justify"&gt;Algo que me ha gustado siempre de la plataforma .NET desde que comencé a aprender cosas de ella, es que te propone métodos para hacer las cosas más sencillas y ahorrarte tiempo que puedes ocupar en hacer otras cosas.&lt;/p&gt;  &lt;p align="justify"&gt;En la versión 2.0 de .NET, una de esas cosas que nos hace la vida más fácil a los que programamos son los métodos anónimos, cuya principal ventaja desde mi punto de vista es que nos permite ver inmediatamente lo que hace sin tener que redirigirnos a otras zonas de la clase que estamos desarrollando.&lt;/p&gt;  &lt;p align="justify"&gt;También sería todo mucho más fácil si el que trabaja es el compilador en vez de nosotros o por lo menos, que nos permita centrarnos más en que el programa haga lo que tiene que hacer.&lt;/p&gt;  &lt;p align="justify"&gt;Voy a poner un ejemplo, normalmente nosotros cuando queremos ejecutar una acción en respuesta a un evento, debemos declarar ese evento y “apuntar” al método que queremos ejecutar. Lo podemos ver a continuación con el siguiente código:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;port.DataReceived += &lt;span class="kwrd"&gt;new&lt;/span&gt; System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived);&lt;/pre&gt;

&lt;p align="justify"&gt;En esta línea de código correspondiente al evento que detecta la recepción de datos del puerto serie, estamos creando un manejador del evento “DataReceived”, indicándole donde está el código que debe ejecutar cuando se crea, en este caso el método “port_DataReceived”.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; port_DataReceived(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, System.IO.Ports.SerialDataReceivedEventArgs e)&lt;br&gt;{&lt;br&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.Invoke(&lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(AdjuntarAlTextbox));&lt;br&gt;}&lt;/pre&gt;

&lt;p align="justify"&gt;“port_DataReceived” solo va a ser ejecutado por el objeto “port” cuando lo crea oportuno y por nadie más, ya que ninguna otra parte del programa va a utilizarlo, a todos nos haría la vida mucho más fácil si lo que va a ejecutar el evento estuviera en el mismo sitio donde se indica “DataReceived” y encima el compilador fuera el que creara la declaración de ese evento.&lt;/p&gt;

&lt;p align="justify"&gt;Para ahorrarnos algunas líneas de código y permitir que el compilador nos ayude a programar vamos a usar un “tipo delegado”. Para ello hacemos uso de la palabra reservada “delegate” y entre llaves colocamos el código que queramos ejecutar, en el caso del ejemplo sería:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;port.DataReceived += &lt;span class="kwrd"&gt;delegate&lt;/span&gt; { &lt;span class="kwrd"&gt;this&lt;/span&gt;.Invoke(&lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(AdjuntarAlTextbox)); };&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p align="justify"&gt;De esta manera nosotros no debemos indicar cuál es el manejador del evento que se debe usar, sino que el compilador será quien realice esta tarea. Además al codificar de esta manera sabemos inmediatamente que es lo que va a hacer el programa cuando reciba alguna información por el puerto serie.&lt;/p&gt;

&lt;p align="justify"&gt;No tenemos que indicar la declaración del evento y solo opcionalmente indicaremos los parámetros entre paréntesis a continuación de delegate. Esto es en el caso de necesitar el acceso a la información de algún objeto.&lt;/p&gt;



&lt;p align="justify"&gt;Como veis la palabra “delegate” nos permite hacer unas cuantas cosas muy útiles y sobre todo que nos aportan sencillez en muchos casos. &lt;/p&gt;



&lt;p align="justify"&gt;Otra cosa que podemos hacer es pasar como parámetro un método anónimo, en el caso de necesitar otra instancia del delegado que usamos.&lt;/p&gt;



&lt;p&gt;Aquí dejo otro ejemplo:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Threading;&lt;br&gt;&lt;br&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; metodosAnonimos&lt;br&gt;{&lt;br&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Primero(&lt;span class="kwrd"&gt;string&lt;/span&gt; cadena);&lt;br&gt;&lt;br&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;br&gt;    {&lt;br&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br&gt;        {&lt;br&gt;            Primero a = &lt;span class="kwrd"&gt;delegate&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt; j)&lt;br&gt;            {&lt;br&gt;                Console.WriteLine(j);&lt;br&gt;            };&lt;br&gt;&lt;br&gt;            a(&lt;span class="str"&gt;"fijate bien"&lt;/span&gt;);&lt;br&gt;&lt;br&gt;            a = &lt;span class="kwrd"&gt;new&lt;/span&gt; Primero(Program.loquemepasen);&lt;br&gt;&lt;br&gt;            a(&lt;span class="str"&gt;"ves la diferencia"&lt;/span&gt;);&lt;br&gt;&lt;br&gt;            Thread.Sleep(10000);&lt;br&gt;        }&lt;br&gt;&lt;br&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; loquemepasen(&lt;span class="kwrd"&gt;string&lt;/span&gt; texto_pasado)&lt;br&gt;        {&lt;br&gt;            Console.WriteLine(&lt;span class="str"&gt;"Puedo hacer cualquier cosa y "&lt;/span&gt; + texto_pasado);&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;}&lt;/pre&gt;

&lt;p align="justify"&gt;De todas formas, con los métodos anónimos como con todo, tampoco hay que usarlos a todas horas. Al igual que en muchas ocasiones aclaran el código y hacen que demos menos vueltas buscando lo que hace el programa, también pueden hacer que nos perdamos. Así que hay que usarlos cuando convenga y con moderación.&lt;/p&gt;



&lt;p align="justify"&gt;Para la segunda parte de este post trataremos una característica de C# 3.0 denominada “Expresiones Lambda”, que tienen relación con los método anónimos.&lt;/p&gt;



&lt;p align="justify"&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=105059" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Arduino y .net</title><link>http://labloguera.net/blogs/csharp/archive/2009/12/26/arduino-y-net.aspx</link><pubDate>Sat, 26 Dec 2009 22:37:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:105041</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>1</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/105041.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=105041</wfw:commentRss><description>&lt;p align="justify"&gt;Hoy voy a contar algunas cosas acerca de un cacharro denominado Arduino.&lt;/p&gt;
&lt;p align="justify"&gt;El Arduino es una placa electrónica totalmente programable y de la cual disponemos de toda la información interna gracias a que se trata de hardware libre y toda la documentación se encuentra en disponible a través de internet.&lt;/p&gt;
&lt;p align="justify"&gt;Hace poco comencé a cacharrear con ella para ver todo lo que se podía hacer y la verdad, por lo que he comprobado yo mismo y por lo que otras personas hacen y muestran en internet, se puede hacer casi cualquier cosa.&lt;/p&gt;
&lt;p align="justify"&gt;La placa tiene un coste bajo, alrededor de los 20 euros según modelo y según donde se compre y el valor de los portes, pero es muy barata en comparación con otras placas del mercado y además hay que tener en cuenta la inmensa cantidad de documentación que podemos encontrar en la red.&lt;/p&gt;
&lt;img src="http://labloguera.net/photos/csharp/images/105037/original.aspx" style="width:480px;height:345px;" width="480" height="345"&gt;
&lt;p align="justify"&gt;Podéis ver las especificaciones de la placa en la &lt;a href="http://www.arduino.cc/"&gt;web oficial&lt;/a&gt; de Arduino.&lt;/p&gt;
&lt;p align="justify"&gt;Para desarrollar sobre la placa podemos hacerlo de dos maneras, una es utilizar el IDE que nos proporciona desde la web de Arduino. Este IDE está programado en Java por lo que podemos utilizarlo desde cualquier sistema operativo, el lenguaje es una especie de C muy sencillo de utilizar, por lo que una persona puede hacer cosas interesantes incluso si acaba de aprender a programar.&lt;/p&gt;
&lt;p&gt;Un programa de ejemplo podría ser este:&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; ledPin = 13;                  &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; inPin = 10;                    &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt; = 0;                     &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; setup() { &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;  Serial.begin(9600);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;  pinMode(ledPin, OUTPUT);       &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;  pinMode(inPin, INPUT);            &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;} &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; loop() &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;  &lt;span class="kwrd"&gt;value&lt;/span&gt; = digitalRead(inPin);       &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;  digitalWrite(ledPin, &lt;span class="kwrd"&gt;value&lt;/span&gt;); &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;  delayMicroseconds(1000);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;  &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;value&lt;/span&gt;==1)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;  {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    Serial.println(&lt;span class="str"&gt;"Pulsado"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;  }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;  &lt;span class="kwrd"&gt;else&lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;    Serial.println(&lt;span class="str"&gt;"Sin pulsar"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;  }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;  delayMicroseconds(10000);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;Con este programa simplemente controlamos cuando pulsamos un botón para encender o apagar un diodo led. Según pulsamos enviamos por el puerto serie un string que indica si está pulsado o no.&lt;/p&gt;
&lt;p align="justify"&gt;Otra forma de programarlo es enviando ordenes a través del puerto serie y aquí es donde entra nuestro querido C#. Hacer un programa que utilice el puerto serie para monitorizar lo que hace el Arduino e incluso enviar órdenes a través del usb es tremendamente sencillo.&lt;/p&gt;
&lt;p align="justify"&gt;Si queremos ver los strings que envía el programa anterior por el puerto serie podemos usar el siguiente programa:&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Drawing;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Forms;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO.Ports;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Threading;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Arduino_lee_recibe&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;{&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Form1 : Form&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    {&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        SerialPort port;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; Form1()&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        {&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;            InitializeComponent();&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;            port = &lt;span class="kwrd"&gt;new&lt;/span&gt; SerialPort(&lt;span class="str"&gt;"COM4"&lt;/span&gt;, 9600);&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;            port.DataReceived += &lt;span class="kwrd"&gt;new&lt;/span&gt; System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived);&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        }&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; button1_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        {&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!port.IsOpen)&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            {&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                port.Open();&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                button1.Text = &lt;span class="str"&gt;"Terminar"&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;            }&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;            {&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                port.Close();&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                button1.Text = &lt;span class="str"&gt;"Comenzar"&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;            }&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        }&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; port_DataReceived(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, System.IO.Ports.SerialDataReceivedEventArgs e)&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;        {&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.Invoke(&lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(AdjuntarAlTextbox));&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;        }&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AdjuntarAlTextbox(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;        {&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;            textBox1.AppendText(port.ReadLine()+&lt;span class="str"&gt;'\n'&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;        }&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Form1_FormClosing(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, FormClosingEventArgs e)&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;        {&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (port.IsOpen) port.Close();&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;        }&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;    }&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
&lt;p align="justify"&gt;Necesitamos disponer de un formulario con un textbox esté activada y un botón para poder parar y arrancar el programa.&lt;/p&gt;
&lt;p align="justify"&gt;Para hacer uso del puerto serie utilizamos el namespace &lt;a href="http://msdn.microsoft.com/es-es/library/system.io.ports%28VS.80%29.aspx"&gt;System.IO.Ports&lt;/a&gt;, creamos un objeto de tipo &lt;a href="http://es.wikipedia.org/wiki/Puerto_serie"&gt;SerialPort&lt;/a&gt; y lo inicializamos con el &lt;a href="http://es.wikipedia.org/wiki/Puerto_%28computacion%29"&gt;puerto&lt;/a&gt; por el que tenemos conectado el Arduino y &lt;a href="http://es.wikipedia.org/wiki/Baud_rate"&gt;Baud Rate&lt;/a&gt;.&lt;/p&gt;
&lt;p align="justify"&gt;Utilizaremos el método DataReceived para escribir en el textbox cuando el programa detecte la recepción de datos.&lt;/p&gt;
&lt;p align="justify"&gt;Por último debemos tener en cuenta la situación actual del puerto, es decir, si está abierto o cerrado para poder parar la recepción de información o iniciarla.&lt;/p&gt;
&lt;p align="justify"&gt;Como podéis ver es bastante sencillo hacer un pequeño programa. En los próximos post en los que me refiera al Arduino veremos cómo enviar información a la placa para que actue según nuestras pretensiones y como conectar diferentes sensores, servomotores, de cara a poder montar algunos robots sencillos con la placa.&lt;/p&gt;
&lt;p align="justify"&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=105041" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/.NET/default.aspx">.NET</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/Arduino/default.aspx">Arduino</category></item><item><title>&#191;En d&#243;nde te metes? Pues en Tarragona, Berl&#237;n y &#191;Madrid?</title><link>http://labloguera.net/blogs/csharp/archive/2009/11/28/en-d-nde-te-metes-pues-en-tarragona-berl-n-y-madrid.aspx</link><pubDate>Sat, 28 Nov 2009 15:33:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:100494</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>1</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/100494.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=100494</wfw:commentRss><description>
&lt;p align="justify"&gt;
Anda que no hace tiempo desde la última vez que puse un post en 
el blog, desde entonces no creáis que he tenido tiempo para aburrirme. A parte 
de seguir con la carrera aprendiendo Smalltalk, recordando Java y recogiendo 
requisitos para el proyecto de ingeniería del software (además de otras 
hiervas), me he dedicado a darme una vuelta por Tarragona en el CodeCamp (como 
queda de lejos ya y solo ha pasado poco más de un mes :O) y luego, concretamente 
hace un par de semanas a darme una vueltecilla por el TechEd de Berlín 2009.
&lt;/p&gt;

&lt;p align="justify"&gt;
Tuve la suerte de ser uno de los tres MSPs (Microsoft Student 
Partners) que asistieron de España al evento, junto con el coordinador nacional 
de los DotNetClubs. La experiencia en general ha sigo estupenda, el evento 
(charlas, stands, etc,..) estuvo fenomenal, la organización se preocupaba de que 
todo estuviera perfecto, la charlas empezaban y terminaban a tiempo y había 
puestos de comida y bebida por todos lados y unas cuantas XBOX para tocar un 
poco la guitarra :D
&lt;/p&gt;

&lt;p align="justify"&gt;
 
&lt;/p&gt;
&lt;div align="center"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2fTechEd+%282%29.JPG" alt="" width="245" height="188"&gt;  &lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2fTechEd+%283%29.JPG" alt="" width="257" height="188"&gt;
&lt;/div&gt;
&lt;div&gt;
 
 
&lt;/div&gt;
&lt;p align="justify"&gt;
Una pega que si pondría en cuanto a las charlas es que había 
pocas novedades ya que el PDC era a la semana siguiente, quizás sería mejor 
poner el TechEd una semana más tarde que el PDC. Así en el PDC se verían las 
novedades a presentar y en los sucesivos TechEd que se van celebrando 
podrían explayarse sobre como usar esas nuevas tecnologías presentadas.
&lt;/p&gt;

&lt;p align="justify"&gt;
Pero bueno, aun así había cantidad de charlas en las que 
aprender cosas nuevas.
&lt;/p&gt;
&lt;div align="center"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2fTechEd+%288%29.JPG" alt="" width="250" height="200"&gt;  &lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2fTechEd+%2813%29.JPG" alt="" width="250" height="200"&gt; 
&lt;/div&gt;
&lt;div align="center"&gt;
 
&lt;/div&gt;
&lt;div align="center"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2f4091969223_f5ba0ab3db+_MG_2565_O.jpg" alt="" width="250" height="185"&gt;  &lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2f4098717197_e0a8af3d61+Cluster-Funk+is+performing..._L.jpg" alt="" width="252" height="185"&gt; 
&lt;/div&gt;
&lt;div align="center"&gt;
 
 
&lt;/div&gt;
&lt;div align="center"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2f4094369831_3b1e0870fe_o.jpg" alt="" width="250" height="192"&gt;  &lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2f4098714997_31ff54e0fe+Gaming+Zone+lives+here_L.jpg" alt="" width="249" height="191"&gt;    
&lt;/div&gt;
&lt;div align="center"&gt;
 
&lt;/div&gt;
&lt;div align="center"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2fTechEd+%2832%29.JPG" alt="" width="297" height="200"&gt; &lt;br&gt;
&lt;/div&gt;
&lt;div&gt;
 
&lt;/div&gt;

&lt;p align="justify"&gt;
La ciudad, pues que os voy a contar, mucho que ver y muy poco 
tiempo para hacerlo, algo pudimos hacer aunque solo fuera para echarnos 
unas fotos y poder decir que habíamos estado allí. 
&lt;/p&gt;

&lt;p align="justify"&gt;
 
&lt;/p&gt;
&lt;div align="center"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2fTechEd+%2865%29.JPG" alt="" width="252" height="196"&gt;  &lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2fTechEd+%2872%29.JPG" alt="" width="253" height="194"&gt;
&lt;/div&gt;
&lt;div&gt;
 
&lt;/div&gt;
&lt;div align="center"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2fTechEd+%2895%29.JPG" alt="" width="253" height="181"&gt;  &lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2fTechEd+%2847%29.JPG" alt="" width="253" height="180"&gt; 
&lt;/div&gt;
&lt;div align="center"&gt;
 
&lt;/div&gt;
&lt;p align="justify"&gt;
Aunque no estábamos muchos españoles, algunos como Luis Fraile 
o Isabel Gomez nos los pudimos encontrar por allí &lt;img src="http://labloguera.net/emoticons/emotion-2.gif" alt="Big Smile" /&gt;
&lt;/p&gt;
&lt;div align="center"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2fTechEd+%2821%29.JPG" alt="" width="232" height="205"&gt;  &lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2fIsabel_Elisa.jpg" alt="" width="194" height="205"&gt;
&lt;/div&gt;
&lt;div align="center"&gt;
 
&lt;/div&gt;
&lt;p align="justify"&gt;
Por otro lado con la llegada a España ya empezamos a organizar 
más cosillas y ahora estoy llevando un pequeño evento que organizaremos en 
Valdelaguna, un pueblo de Madrid, donde tendremos a algunos de los 
coordinadores de los clubs de .NET de España y varios de los mejores 
profesionales de tecnologías .NET del país.
&lt;/p&gt;

&lt;p align="justify"&gt;
  
&lt;/p&gt;
&lt;div align="center"&gt;
&lt;a href="http://www.themindcamp.net" target="_blank"&gt;&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f11%2fmindCampFinal.png" alt="" width="266" height="374"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;
 
&lt;/div&gt;
&lt;p align="justify"&gt;
También estoy haciendo algunas utilidades comunes que luego 
colgare a modo de tutorial, son muy sencillas pero seguro que a alguno le 
resultarán útiles sobre todo ver el código.
&lt;/p&gt;

&lt;p align="justify"&gt;
Y bueno, poco más, esto es simplemente un post que yo llamo de 
“ping”.
&lt;/p&gt;

&lt;p&gt;
Saludetes&amp;nbsp;&lt;img src="http://labloguera.net/emoticons/emotion-2.gif" alt="Big Smile" /&gt;
&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=100494" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/codecamp/default.aspx">codecamp</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/eventos/default.aspx">eventos</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/mindcamp/default.aspx">mindcamp</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/teched/default.aspx">teched</category></item><item><title>Comienzo de curso y de actividades en el club de .NET</title><link>http://labloguera.net/blogs/csharp/archive/2009/10/13/comienzo-de-curso-y-de-actividades-en-el-club-de-net.aspx</link><pubDate>Mon, 12 Oct 2009 22:36:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:92586</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>2</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/92586.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=92586</wfw:commentRss><description>&lt;p align="justify"&gt;
Hola a tod@s,
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
Hacía tiempo que no posteaba y os aseguro que no es por falta de ideas ni de ganas, sino de tiempo.
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
Como todos los principios de curso ha habido que organizarse y este año si cabe aun más, pues la mayor parte de las prácticas son en grupo y organizar las agendas es complicado. Además el año que viene cambian los planes de estudios por la entrada del Plan Bolonia, así que tenemos que dejar todas las asignaturas que podamos bien aprobadas y luego ya veremos qué camino seguimos.
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
En el club también hemos tenido cambios, algún coordinador nuevo y como siempre ver qué cosas vamos a intentar aprender durante el curso. Una de las novedades es la &lt;a href="http://albacete.dotnetclubs.com/" target="_blank" title="Albacete DotNetClub"&gt;nueva web del club&lt;/a&gt;, durante unos años hemos utilizado un site que nos dejaron funcionando los "abueletes" del club (&lt;a href="http://labloguera.net/blogs/cristian" target="_blank" title="Cristian Manteiga"&gt;Cristian&lt;/a&gt; y &lt;a href="http://labloguera.net/blogs/thempra" target="_blank" title="José Carlos Temprado"&gt;Thempra&lt;/a&gt;) pero ya había que darle un lavado de cara a la web y mejorar algunas funcionalidades. Así que al final hemos decidido montar un &lt;a href="http://www.mojoportal.com/" target="_blank" title="MojoPortal"&gt;MojoPortal&lt;/a&gt; ("mojete" para los amigos)que no ha quedado nada mal y que es muy fácil de utilizar. Por supuesto está desarrollado en .NET.
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
Por otro lado el jueves pasado tuvimos nuestra primera reunión. No estuvo nada mal, contamos con caras conocidas y algunas nuevas, lo mejor es que fueron bastante participativos.
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
Me tocaba a mí dar la charla, así que vimos una pequeña introducción al .NET y al club. Os dejo las ppts por si alguno quiere empezar con todo esto del framework:
&lt;/p&gt;

&lt;object style="margin:0px;" width="425" height="355"&gt;
&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=netframeworkintroduction-091012144019-phpapp01&amp;amp;stripped_title=net-framework-introduction"&gt;
&lt;param name="allowFullScreen" value="true"&gt;
&lt;param name="allowScriptAccess" value="always"&gt;
&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=netframeworkintroduction-091012144019-phpapp01&amp;amp;stripped_title=net-framework-introduction" type="application/x-shockwave-flash" width="425" height="355"&gt;&lt;/object&gt;

&lt;p align="justify"&gt;
Esta semana vamos a tener mucho movimiento, por un lado el jueves en el club tendremos una &lt;a href="http://www.techweek.es/desarrollo-aplicaciones/noticias/1005842002501/equipo-espanol-seis-primeros-imagine-cup.1.html" target="_blank"&gt;charla con los campeones de la fase española de la Imagine Cup 09&lt;/a&gt; y por otro lado el viernes me trasladaré a La Pineda (cerca de Tarragona) al "Train the trainers" organizado por Microsoft, luego el sábado y domingo asistiré al &lt;a href="http://codecamp.es/" target="_blank"&gt;CodeCamp&lt;/a&gt; organizado por los grupos de usuarios de .NET también en La Pineda. 
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
Y bueno de momento poco más puedo contar, si alguien se pasa por alguno de estos eventos, que salude y nos tomamos una cañita&amp;nbsp;&lt;img src="http://labloguera.net/emoticons/emotion-2.gif" alt="Big Smile" /&gt;
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
Saludetes .
&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=92586" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/DotNetClub/default.aspx">DotNetClub</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/eventos/default.aspx">eventos</category></item><item><title>Trabajar y compartir un proyecto en 5 minutos</title><link>http://labloguera.net/blogs/csharp/archive/2009/08/25/trabajar-y-compartir-un-proyecto-en-5-minutos.aspx</link><pubDate>Tue, 25 Aug 2009 10:42:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:83436</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>3</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/83436.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=83436</wfw:commentRss><description>&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage001.png" alt="" width="488" height="161"&gt;&lt;/div&gt;&lt;div style="text-align:center;"&gt;&amp;nbsp;&lt;/div&gt;
&lt;p align="justify"&gt;
&lt;span style="font-size:11pt;line-height:115%;font-family:'Calibri','sans-serif';"&gt;Bueno hoy voy a contar como montar una pequeña
infraestructura de compartición de proyectos en cinco minutos para unas cuatro
o cinco personas y todo a un precio mínimo, vamos por cero euros.&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;div align="justify"&gt;
&lt;span style="font-size:11pt;line-height:115%;font-family:'Calibri','sans-serif';"&gt;Básicamente lo que vamos a necesitar son dos
programas, el &lt;/span&gt;&lt;span style="font-size:11pt;line-height:115%;font-family:'Calibri','sans-serif';"&gt;&lt;a href="http://www.visualsvn.com/server/download/" target="_blank" title="Visual SVN Server"&gt;&lt;span&gt;VisualSVN Server&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;line-height:115%;font-family:'Calibri','sans-serif';"&gt; y el &lt;/span&gt;&lt;span style="font-size:11pt;line-height:115%;font-family:'Calibri','sans-serif';"&gt;&lt;a href="http://ankhsvn.open.collab.net/" target="_blank" title="Ankhsvn"&gt;&lt;span&gt;Ankhsvn&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:11pt;line-height:115%;font-family:'Calibri','sans-serif';"&gt;
(menudo nombrecito&lt;/span&gt;&lt;img src="http://cesarreneses.net/editors/tiny_mce/plugins/emotions/images/smiley-surprised.gif" alt="Surprised" title="Surprised" border="0"&gt;&lt;span style="font-size:11pt;line-height:115%;font-family:'Calibri','sans-serif';"&gt;).&lt;/span&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
&amp;nbsp;
&lt;/p&gt;

&lt;p align="justify"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage002.png" alt=""&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
&amp;nbsp;
&lt;/p&gt;

&lt;p align="justify"&gt;
&amp;nbsp;

&lt;/p&gt;&lt;p style="margin:0cm 0cm 0.0001pt;text-align:justify;" align="justify"&gt;
&lt;font size="3"&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt;El &lt;/span&gt;&lt;a href="http://www.visualsvn.com/server/download/" target="_blank" title="Visual SVN Server"&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt;VisualSVN Server&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt; es un servidor Subversion para Windows que cuenta con dos
versiones una gratuita o Standard, que es la que voy a utilizar y otra de pago también
llamada Enterprise que incluye un par de características más. Podéis verlas
desde este &lt;/span&gt;&lt;a href="http://www.visualsvn.com/server/licensing/" target="_blank" title="Licencias VisualSVN"&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt;enlace&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt;.&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;

&lt;p style="margin:0cm 0cm 0.0001pt;text-align:justify;" align="justify"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;div align="justify"&gt;
&lt;font size="3"&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt;Lo más
importante de la versión Standard es su rapidez de instalación y que se puede
usar en un entorno comercial (no suele ser muy común esta característica con
aplicaciones gratuitas). &lt;/span&gt;&lt;/font&gt;
&lt;/div&gt;
&lt;p style="margin:0cm 0cm 0.0001pt;text-align:justify;"&gt;
&amp;nbsp;
&lt;/p&gt;

&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage003.png" alt="" width="276" height="49"&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;

&lt;p style="margin:0cm 0cm 0.0001pt;text-align:center;" align="center"&gt;
&lt;font size="3"&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;

&lt;p style="margin:0cm 0cm 0.0001pt;text-align:justify;" align="justify"&gt;
&lt;font size="3"&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt;Por otro lado
el&amp;nbsp;&lt;/span&gt;&lt;a href="http://ankhsvn.open.collab.net/" target="_blank" title="Ankhsvn"&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt;Ankhsvn&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt; es un plugin
libre para Visual Studio que nos va a permitir sincronizar nuestros proyectos
con un servidor Subversion.&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p style="margin:0cm 0cm 0.0001pt;text-align:justify;" align="justify"&gt;
&lt;font size="3"&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p style="margin:0cm 0cm 0.0001pt;text-align:justify;" align="justify"&gt;
&lt;font size="3"&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt;Lo primero
que tenemos que hacer es bajarnos ambos programas de sus respectivas webs,
luego instalaremos el servidor y posteriormente el plugin para el VS2008.&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p style="margin:0cm 0cm 0.0001pt;text-align:justify;" align="justify"&gt;
&lt;font size="3"&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p style="margin:0cm 0cm 0.0001pt;text-align:justify;" align="justify"&gt;
&lt;font size="3"&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt;La
instalación de ambos programas la voy a hacer dentro de la misma máquina, el
sistema operativo en concreto es Windows 7 Ultimate pero la misma instalación
funciona perfectamente en un Windows Server 2003 a través de internet, así que
no debe dar problemas con otros sistemas operativos.&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p style="margin:0cm 0cm 0.0001pt;text-align:justify;" align="justify"&gt;
&lt;font size="3"&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;div align="justify"&gt;
&lt;font size="3"&gt;&lt;span style="font-family:'Calibri','sans-serif';"&gt;Una vez
tenemos descargado el VisualSVN Server abrimos el instalador y aceptamos la
licencia:&lt;/span&gt;&lt;/font&gt;
&lt;/div&gt;
&lt;p style="margin:0cm 0cm 0.0001pt;text-align:justify;"&gt;
&amp;nbsp;
&lt;/p&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage004.png" alt="" width="472" height="378"&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage005.png" alt="" width="465" height="370"&gt;
&lt;/div&gt;
&lt;div style="text-align:center;" align="left"&gt;
&amp;nbsp;
&lt;p style="text-align:justify;" class="MsoNormal" align="justify"&gt;
Definimos el lugar de
instalación, la carpeta donde guardaremos los proyectos y el puerto por el que
vamos a acceder. También podemos seleccionar el tipo de autenticación.
&lt;/p&gt;
&lt;br&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage007.png" alt="" width="466" height="363"&gt; 

&lt;p style="text-align:justify;" class="MsoNormal"&gt;
Una vez pasamos esta pantalla
comienza la instalación del programa. 
&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage008.png" alt="" width="468" height="367"&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage009.png" alt="" width="469" height="371"&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&amp;nbsp;
&lt;p style="text-align:justify;" class="MsoNormal" align="justify"&gt;
Bueno, como podéis ver la
instalación es bien sencilla y en poco tiempo está instalado el servidor. Lo
que vamos a hacer ahora es crear un repositorio para nuestro primer proyecto y
el correspondiente usuario para que pueda acceder al mismo.
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p style="text-align:justify;" class="MsoNormal" align="justify"&gt;
Ejecutáis el VisualSVN Server
Manager y os debe aparecer una pantalla como esta:
&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage010.png" alt="" width="571" height="439"&gt;
&lt;/div&gt;
&lt;div style="text-align:center;" align="justify"&gt;

&lt;p style="text-align:justify;" class="MsoNormal" align="justify"&gt;
Lo primero que vamos a hacer es
crear un usuario, en la parte de la izquierda pulsamos con el botón derecho
sobre &lt;b&gt;Users&lt;/b&gt; y en el menú que aparece
en &lt;b&gt;Create user&lt;/b&gt;.
&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage011.png" alt="" width="574" height="440"&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;

&lt;p style="text-align:justify;" class="MsoNormal"&gt;
Simplemente tenemos que introducir
el nombre del usuario y su contraseña:&amp;nbsp;
&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage012.png" alt=""&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&amp;nbsp;
&lt;p style="text-align:justify;" class="MsoNormal"&gt;
Damos un nombre al repositorio y
opcionalmente podemos añadir las carpetas de &lt;b&gt;trunk&lt;/b&gt;, &lt;b&gt;branches&lt;/b&gt; y &lt;b&gt;tags&lt;/b&gt;. La carpeta de trunk contiene la
rama principal de desarrollo, la de branches contiene copias temporales de la
rama principal y la de tags copias de cada versión del proyecto.
&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage014.png" alt="" width="574" height="440"&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;&lt;span style="font-size:11pt;line-height:115%;font-family:'Calibri','sans-serif';"&gt;El
resultado sería este y la dirección por la que accederíamos sería algo así https://lincestation/cvs/prueba.&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;span style="font-size:11pt;line-height:115%;font-family:'Calibri','sans-serif';"&gt;&lt;/span&gt;
&lt;div align="center"&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage015.png" alt="" width="574" height="436"&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;

&lt;p style="text-align:justify;" class="MsoNormal"&gt;
Vamos a asignar el usuario que
hemos creado al repositorio para tener controlado quien entra y quien no, para
ello pulsamos con el botón derecho sobre el repositorio creado y pulsamos en &lt;b&gt;properties&lt;/b&gt;. Aparece una ventana donde
agregar usuarios, por defecto está permitida la escritura y lectura a todo el
mundo.
&lt;/p&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage016.png" alt="" width="397" height="451"&gt;
&lt;/div&gt;
&lt;div align="center"&gt;

&lt;p style="text-align:justify;" class="MsoNormal"&gt;
Lo primero que vamos a hacer es
pulsar sobre &lt;b&gt;Add&lt;/b&gt;, nos aparece una ventana donde seleccionar el usuario,
aceptamos y se agrega al grupo de usuarios. Marcamos el usuario y en &lt;b&gt;permissions&lt;/b&gt; le damos derechos de
lectura y escritura.
&lt;/p&gt;

&lt;p style="text-align:justify;" class="MsoNormal"&gt;
Con el usuario &lt;b&gt;Everyone&lt;/b&gt; simplemente le restringimos el
acceso con &lt;b&gt;No Access&lt;/b&gt;. Quedaría de la
siguiente forma:
&lt;/p&gt;
&lt;/div&gt;
&lt;div align="center"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage017.png" alt="" width="346" height="415"&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p style="text-align:justify;" class="MsoNormal" align="justify"&gt;
Aceptamos y ahora podemos cerrar
la consola de VisualSVN Server, el servidor continuara ejecutándose como un servicio
de Windows.
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p style="text-align:justify;" class="MsoNormal" align="justify"&gt;
Vamos ahora a instalar el plugin
para acceder a este servidor desde Visual Studio 2008. Simplemente aceptamos la
licencia e iniciamos la instalación.
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p style="text-align:justify;" class="MsoNormal" align="justify"&gt;
Una vez finalizada abrimos
nuestro VS2008 y añadimos nuestro servidor a la lista de repositorios, para
ello pulsamos sobre &lt;b&gt;File&lt;/b&gt;, &lt;b&gt;Subversion&lt;/b&gt; y luego sobre &lt;b&gt;Open from Subversion&lt;/b&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage018.png" alt="" width="561" height="426"&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;

&lt;p style="text-align:justify;" class="MsoNormal"&gt;
En la ventana que aparece hay un
icono desde el que añadir nuevos repositorios justo al lado de la url. Pulsamos
sobre el icono y añadimos la dirección.
&lt;/p&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage019.png" alt="" width="468" height="291"&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage020.png" alt="" width="468" height="291"&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;

&lt;p style="text-align:justify;" class="MsoNormal"&gt;
Pulsamos OK y nos pedirá el
usuario con el que acceder, una vez hecho esto ya tenemos agregada la
dirección. De momento lo que veréis son las carpetas (trunk, branches, tags)
que habíamos creado en el repositorio.
&lt;/p&gt;

&lt;p style="text-align:justify;" class="MsoNormal"&gt;
Voy a abrir una solución web para
subirla al repositorio, una vez abierta la solución pinchamos con el botón
derecho sobre el nombre de la misma y luego en &lt;b&gt;Add Solution to Subversion&lt;/b&gt;.
&lt;/p&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage021.png" alt=""&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p style="text-align:justify;" class="MsoNormal" align="justify"&gt;
Aparece una ventana donde tenemos
que indicar la dirección del repositorio, pulsando sobre el desplegable aparece
la dirección añadida anteriormente, seleccionamos el repositorio como veis en
la figura y pulsamos OK. 
&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage022.png" alt="" width="429" height="455"&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p style="text-align:justify;" class="MsoNormal"&gt;
Volvemos a pulsar con el botón
derecho sobre la solución podéis observar que tenemos algunas opciones más. Si
pulsamos en &lt;b&gt;Commit Solution Changes&lt;/b&gt;,
confirmamos que queremos subir los cambios en nuestro proyecto y a través de la
interfaz web podemos ver algo como esto: 
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f8%2fimage024.png" alt=""&gt;
&lt;/div&gt;
&lt;p style="text-align:justify;" class="MsoNormal"&gt;
Podemos actualizar el proyecto a
la última versión, confirmar los cambios realizados en el proyecto, ver el
historial de la solución, etc. 
&lt;/p&gt;

&lt;p style="text-align:center;" class="MsoNormal" align="center"&gt;
&amp;nbsp;
&lt;/p&gt;

&lt;p style="text-align:justify;" class="MsoNormal"&gt;
Bueno pues de esta sencilla
manera podemos tener a varios usuarios trabajando al mismo tiempo en el
mismo
proyecto. Evidentemente esta solución no es comparable a tener un TFS
(Team Foundation Server) funcionando para el grupo de trabajo, pero
creo que como solución rápida para un momento puntual es más que
valida. &lt;/p&gt;

&lt;p style="text-align:justify;" class="MsoNormal"&gt;
Espero que resulte de utilidad.
&lt;/p&gt;

&lt;p style="text-align:justify;" class="MsoNormal"&gt;
Saludetes&lt;img src="http://cesarreneses.net/editors/tiny_mce/plugins/emotions/images/smiley-cool.gif" alt="Cool" title="Cool" border="0"&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=83436" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/svn/default.aspx">svn</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/visualsvn/default.aspx">visualsvn</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/gesti_26002300_243_3B00_n+de+proyectos/default.aspx">gesti&amp;#243;n de proyectos</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/ankhsvn/default.aspx">ankhsvn</category></item><item><title>[ Windows 7] Cambio de idioma</title><link>http://labloguera.net/blogs/csharp/archive/2009/08/10/windows-7-cambio-de-idioma.aspx</link><pubDate>Mon, 10 Aug 2009 10:27:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:74918</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>1</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/74918.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=74918</wfw:commentRss><description>&lt;p&gt;Por fin saco un ratillo para poner algo en el blog, en esta ocasión vamos a ver un pequeño tip sobre como cambiar fácilmente el idioma de nuestro Windows 7.&lt;/p&gt;  &lt;p&gt;El jueves pasado salió a la luz la versión RTM de Windows 7 para subscriptores de MSDN y de TechNet, bueno la imagen estaba disponible en inglés y había que aplicar posteriormente el pack del idioma correspondiente.&lt;/p&gt;  &lt;p&gt;No es nada difícil cambiar el idioma, pero si nunca lo has hecho o es la primera vez que tienes Windows 7, es normal que le pregunten a uno como se hace. Así que este post va dedicado a todas esas personas que me buscan de servicio técnico en verano &lt;img src="http://labloguera.net/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74906/462x480.aspx" width="388" border="0" height="401"&gt;&lt;/p&gt;&lt;p&gt;Inicialmente tenemos algo así, inglés por todos lados, así que nos vamos a nuestro querido “Panel de Control”.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74907/640x425.aspx" style="width:479px;height:318px;" border="0"&gt;&lt;br&gt;&lt;/p&gt;  &lt;p&gt;En el podemos ver señalada la sección “Clock, Languaje, and Region” (un lugar idóneo para cambiar el idioma ¿no creéis? &lt;img src="http://labloguera.net/emoticons/emotion-2.gif" alt="Big Smile" /&gt;). Si pinchamos sobre ella veremos lo siguiente:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74908/640x429.aspx" style="width:479px;height:321px;" border="0"&gt;&lt;/p&gt;  &lt;p&gt;un menu en el que cambiar la fecha y la hora, y una segunda opción donde cambiar el idioma.&lt;/p&gt;&lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74909/640x431.aspx" style="width:472px;height:318px;" border="0"&gt;&lt;/p&gt;&lt;p&gt;Si ckickamos en la segunda opción nos aparece un asistente para instalar o desinstalar idiomas, pulsamos en “Install display languajes”.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;img src="http://labloguera.net/photos/csharp/images/74910/640x430.aspx" width="473" border="0" height="319"&gt;&lt;/p&gt;    &lt;p&gt;En este paso nos da la opción de bajarlo del sitio de Microsoft e instalarlo, o instalarlo directamente si ya disponemos del mismo, como es mi caso. Pulsamos sobre la segunda opción y buscamos el archivo que contiene el idioma.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74911/640x426.aspx" width="480" border="0" height="319"&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74912/640x433.aspx" width="479" border="0" height="324"&gt; &lt;br&gt;&lt;/p&gt;    &lt;p&gt;Ahora pulsamos en “Next” y aceptamos la licencia para comenzar el proceso de instalación.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74913/640x431.aspx" width="479" border="0" height="322"&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74914/640x430.aspx" width="477" border="0" height="320"&gt;&lt;br&gt;&lt;/p&gt;  &lt;p&gt;Cuando termina de instalarlo nos muestra los idiomas instalados, seleccionamos el “español” y pulsamos la casilla que hay más abajo para que aplique el idioma a todo el sistema.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74915/640x425.aspx" width="479" border="0" height="318"&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Pulsamos sobre “Change display languaje” y nos pide reiniciar el sistema.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74916/640x433.aspx" width="479" border="0" height="324"&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://labloguera.net/photos/csharp/images/74917/465x480.aspx" width="403" border="0" height="416"&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Al cabo de unos segundos nuestro sistema tiene un idioma un poco más familiar &lt;img src="http://labloguera.net/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/p&gt;    &lt;p&gt;Bueno, pues eso es todo, disfrutad de la playa o de los chaparrones que están cayendo estos días.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Saludetes&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=74918" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Semana de eventos y friker&#237;a fina</title><link>http://labloguera.net/blogs/csharp/archive/2009/07/14/semana-de-eventos-y-friker-a-fina.aspx</link><pubDate>Tue, 14 Jul 2009 20:17:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:72158</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>4</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/72158.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=72158</wfw:commentRss><description>Esta semana vuelvo otra vez a estar activo y tengo unos cuantos eventos en los que voy a participar. 
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
El primero de todos fué ayer,&amp;nbsp;se trataba de una charla sobre Lego MindStorm dentro de los&amp;nbsp;&lt;a href="http://www.uclm.es/cursosdeverano/2009/" target="_blank"&gt;cursos de verano de la universidad&lt;/a&gt;, el curso se llama&amp;nbsp;&lt;span class="Apple-style-span" style="font-family:Arial;font-size:13px;font-weight:bold;"&gt;Robótica móvil: una apuesta de futuro&lt;/span&gt;. En la charla estuve&amp;nbsp;junto a Pedro Redondo de&amp;nbsp;&lt;a href="http://www.movirobotics.com/" target="_blank"&gt;Movirobotics&amp;nbsp;&lt;/a&gt;y&amp;nbsp;&lt;a href="http://labloguera.net/blogs/jonas" target="_blank"&gt;Jonás Talavera&lt;/a&gt;, sobre todo me encargue de la parte de desarrollo, enseñando diferentes entornos como Microsoft Robotics Studio, NXT-G&amp;nbsp;y librerias como NxtSharp. 
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
Los siguientes eventos se encuentran dentro de las actividades que se realizan durante la &lt;a href="http://partyquijote.com" target="_blank"&gt;&lt;strong&gt;PartyQuijote09&lt;/strong&gt;&lt;/a&gt; que este año se celebra en Toledo desde el 16 al 19 de Julio.&amp;nbsp; 
&lt;/p&gt;

&lt;img src="http://cesarreneses.net/image.axd?picture=2009%2f7%2fcartelparty.jpg" width="300" align="middle" height="424"&gt;&lt;br&gt;

&lt;p align="justify"&gt;
El jueves 16 daré una charla similar a la de ayer, pero esta vez "solo ante el peligro" &lt;img src="http://labloguera.net/emoticons/emotion-3.gif" alt="Surprise" /&gt;;y por la noche después de la cena veremos que tal funcionan los Legos que hemos preparado para el torneo "OptimusPrime VS Megatron, el Retonno", el año pasado también hicimos este torneo y parece que gusto a los "compis" de la party&lt;img src="http://labloguera.net/emoticons/emotion-2.gif" alt="Big Smile" /&gt;. 
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
El viernes 17 tenemos un tallercico de Silverlight entre &lt;a href="http://labloguera.net/blogs/pedro/" target="_blank"&gt;Pedro González&lt;/a&gt; y un servidor. Luego colgare de agún lado la demo del taller. 
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
Además de todo esto intentare frikear todo lo posible y ayudar en otro evento, "Fotografía 3D con PhotoSynth", impartido por &lt;a href="http://labloguera.net/blogs/onir/" target="_blank"&gt;José Angel Fernandez &lt;/a&gt;y &lt;a href="http://labloguera.net/blogs/jalbert/" target="_blank"&gt;Javier Albert&lt;/a&gt; que vienen desde los DotNetClubs de la UPM y de la Universidad de Alcalá. 
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
Todo esto y algo más es lo que tengo previsto para esta semana, a parte de dormir poco intentaré seguir contando lo que hacemos por allí. 
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;
Por cierto en cuanto tenga todos los materiales os los cuelgo. 
&lt;/p&gt;

&lt;p&gt;
Saludetes
&lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=72158" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/eventos/default.aspx">eventos</category></item><item><title>[ Windows 7 ] Cambiar el aspecto de la pantalla de login</title><link>http://labloguera.net/blogs/csharp/archive/2009/06/18/windows-7-cambiar-el-aspecto-de-la-pantalla-de-login.aspx</link><pubDate>Thu, 18 Jun 2009 12:06:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:71784</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>0</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/71784.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=71784</wfw:commentRss><description>&lt;FONT face=Calibri&gt;&lt;SPAN style="LINE-HEIGHT:115%;mso-bidi-font-size:10.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;FONT size=3&gt;&lt;o:p&gt;
&lt;P style="MARGIN:0cm 0cm 10pt;" class=MsoNormal&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-SIZE:12pt;mso-bidi-font-size:10.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;Hoy vamos a ver como cambiar el fondo de pantalla en el inicio de sesión de Windows 7.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 10pt;" class=MsoNormal&gt;&lt;SPAN style="LINE-HEIGHT:115%;FONT-SIZE:12pt;mso-bidi-font-size:10.0pt;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;DIV style="TEXT-ALIGN:center;"&gt;&lt;IMG border=0 src="http://labloguera.net/photos/csharp/images/71785/original.aspx"&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;FONT face=Calibri&gt;&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN:justify;"&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';mso-bidi-font-size:10.0pt;"&gt;Antes de nada, he visto que existen algunos programas que hacen el proceso que viene a continuación de manera casi automática, pero dado que después de probar varios he comprobado que unos funcionan y otros no, lo mejor creo que es hacerlo a mano (que por lo menos a mi no me falla). &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';mso-bidi-font-size:10.0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN:justify;"&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';mso-bidi-font-size:10.0pt;"&gt;Lo primero de todo es ver si tenemos la carpeta &lt;EM&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';"&gt;backgrounds&lt;/SPAN&gt;&lt;/EM&gt; en la siguiente dirección: &lt;STRONG&gt;&lt;I&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';"&gt;C:\Windows\System32\oobe\info\backgrounds&lt;/SPAN&gt;&lt;/I&gt;&lt;/STRONG&gt; , si no la tenemos debemos ir hasta el directorio oobe&lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';"&gt;,&lt;/SPAN&gt;&lt;/STRONG&gt; crear &lt;EM&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';"&gt;info&lt;/SPAN&gt;&lt;/EM&gt; y dentro de este &lt;EM&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';"&gt;backgrounds&lt;/SPAN&gt;&lt;/EM&gt;&lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';"&gt;.&lt;/SPAN&gt;&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';mso-bidi-font-size:10.0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN:justify;"&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';mso-bidi-font-size:10.0pt;"&gt;A continuación vamos a editar el registro de Windows, ya sabéis Inicio -&amp;gt; Ejecutar y ponéis Regedit, debemos ir hasta: &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';mso-bidi-font-size:10.0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN:center;" align=center&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';FONT-SIZE:9pt;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-US;"&gt;HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\--&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN:center;" align=center&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';FONT-SIZE:9pt;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-US;"&gt;--&amp;gt; Authentication\LogonUI\Background&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';FONT-SIZE:6.5pt;mso-bidi-font-size:7.5pt;mso-ansi-language:EN-US;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:9pt;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN:justify;"&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';mso-bidi-font-size:10.0pt;"&gt;Y fijarnos si tiene la clave &lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';"&gt;OEMBackground&lt;/SPAN&gt;&lt;/STRONG&gt; puesto a 1. Si no es así o no existe lo creamos pulsando con el botón derecho del ratón en la parte derecha del registro y añadiendo un valor DWORD con el nombre que he indicado, lo ponéis a 1 y cerráis el registro. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';mso-bidi-font-size:10.0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN:justify;"&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';mso-bidi-font-size:10.0pt;"&gt;Ahora vamos a preparar la imagen de fondo, escoged la que queráis, a ser posible de la resolución de vuestra pantalla, la guardáis en&amp;nbsp; la carpeta &lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';"&gt;backgrounds&lt;/SPAN&gt;&lt;/STRONG&gt; con el nombre &lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';"&gt;backgroundDefault.jpg&lt;/SPAN&gt;&lt;/STRONG&gt; y con un tamaño que no supere los &lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';"&gt;256kb&lt;/SPAN&gt;&lt;/STRONG&gt;. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';mso-bidi-font-size:10.0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN:justify;"&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';mso-bidi-font-size:10.0pt;"&gt;Solo queda reiniciar vuestra máquina para comprobar el resultado &lt;img src="http://labloguera.net/emoticons/emotion-2.gif" alt="Big Smile" /&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';mso-bidi-font-size:10.0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';mso-bidi-font-size:10.0pt;"&gt;&lt;FONT size=3&gt;Saludetes&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';mso-bidi-font-size:10.0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=71784" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/tips/default.aspx">tips</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Para comenzar con Windows 7</title><link>http://labloguera.net/blogs/csharp/archive/2009/05/15/para-comenzar-con-windows-7.aspx</link><pubDate>Thu, 14 May 2009 22:17:55 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:71422</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>1</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/71422.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=71422</wfw:commentRss><description>&lt;p&gt;Me acabo de encontrar con 3 cursos gratuitos que ha sacado &lt;strong&gt;Microsoft Learning&lt;/strong&gt; sobre &lt;strong&gt;Windows 7&lt;/strong&gt; para ir conociendo este nuevo sistema operativo.&lt;/p&gt;  &lt;p&gt;Los cursos según el tipo de usuario que seas los podéis encontrar en estos enlaces:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Para &lt;a href="http://www.microsoft.com/learning/elearning/course/10125.mspx" target="_blank"&gt;usuarios&lt;/a&gt;&amp;#160;&lt;/li&gt;    &lt;li&gt;Para &lt;a href="http://www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceId=38b7b771-a840-4bc6-a518-c8cf79c9a24c&amp;amp;language=en-US&amp;amp;country=US&amp;amp;locale=en-US&amp;amp;style=Learning" target="_blank"&gt;profesionales&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Para &lt;a href="http://www.microsoftelearning.com/eLearning/gotoResource.aspx?resourceId=0d4cdfd6-b1ad-4a91-899a-7866f498735e&amp;amp;language=en-US&amp;amp;country=US&amp;amp;locale=en-US&amp;amp;style=Learning" target="_blank"&gt;empresarios&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Saludetes ;)&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=71422" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/cursos/default.aspx">cursos</category></item><item><title>Variables globales en un sitio ASP.NET</title><link>http://labloguera.net/blogs/csharp/archive/2009/04/25/variables-globales-en-un-sitio-asp-net.aspx</link><pubDate>Sat, 25 Apr 2009 09:31:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:71053</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>2</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/71053.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=71053</wfw:commentRss><description>&lt;p align="justify"&gt;Me encuentro ahora mismo desarrollando un sitio web en ASP.NET&amp;nbsp; 
para una asignatura de la universidad y esta tarde me he encontrado con que 
necesito tener accesibles algunos datos en cualquiera de las páginas que 
componen el sitio web, así que voy a dejar aquí las dos formas de hacer esto que 
he encontrado. &lt;/p&gt;
&lt;p align="justify"&gt;Para poneros en situación os diré que mi sitio web está 
compuesto por una MasterPage, varias páginas de contenido asociadas a la 
MasterPage y dos páginas más que no están asociadas; la MasterPage tiene un 
control de LoginName del cual quiero obtener el nombre del usuario que está 
logueado en cada momento en cualquier página. &lt;/p&gt;
&lt;p align="justify"&gt;&lt;i&gt;&lt;u&gt;Aclaración&lt;/u&gt;&lt;/i&gt;: podemos obtener el nombre de 
usuario logueado en el site mediante "this.User.Identity.Name", que sería mucho 
más correcto para obtener el nombre del usuario en cualquier momento. Sin 
embargo la idea es ejemplificar como llevar un dato de una parte a otra del site 
en situaciones en las que no dispongamos del tipo de facilidades como la que 
tenemos en el caso concreto que he utilizado de ejemplo en el post.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;En el Web.config&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Para hacer esto he visto varias maneras, la primera de todas se 
trata de guardar los datos en el Web.config en la zona de "appSettings", esto lo 
haría de la siguiente forma: &lt;/p&gt;
&lt;p align="justify"&gt;Primero añadiendo una clave a la zona de appSettings en el 
Web.config &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lt;appSettings&amp;gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key="username" value="valor" /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/appSettings&amp;gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Y luego en el código de la página en la que lo necesitemos podemos obtener o 
modificar el valor de la clave mediante: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;System.Configuration.ConfigurationSettings.AppSettings["username"]&amp;nbsp; 
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;En el Global.asax&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Otra manera que he visto es utilizando el archivo Global.asax. 
Este archivo opcional en los desarrollos de ASP.NET nos permite manejar eventos 
que ocurren a nivel de la aplicación y de sesión, también nos permite declarar 
valores que necesitemos entre las diferentes solicitudes. &lt;/p&gt;
&lt;p align="justify"&gt;El archivo Global.asax para que funcione tiene que permanecer 
en la raíz de la aplicación y solo se admite uno por aplicación ejecutada. Si 
tenemos algún otro archivo de este tipo en algún subdirectorio no se tendrán en 
cuenta por la aplicación. &lt;/p&gt;
&lt;p align="justify"&gt;Cuando declaremos una variable dentro de Global.asax estará 
disponible en todas las páginas de la aplicación. Lo podemos hacer de la 
siguiente manera: &lt;/p&gt;
&lt;p align="justify"&gt;En el fichero Global.asax declaramos una variable string y 
luego en Session_Start otorgamos el valor de la cadena a un objeto de tipo 
Session que en mi caso se llama valorCadena. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;public class Global : System.Web.HttpApplication &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string 
cadena="valor inicial"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Application_Start(object 
sender, EventArgs e) { } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Session_Start(object sender, 
EventArgs e) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session["valorCadena"] = cadena; 
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;... &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...... &lt;/p&gt;
&lt;p&gt;Luego en la página que lo necesitemos podemos escribir valores: &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session["valorCadena"] = "la_cadena_que_quiera_poner"; &lt;/p&gt;
&lt;p&gt;y leer de la variable: &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Label1.Text = (string)Session["valorCadena"]; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Aporte&lt;/b&gt;: &lt;a href="http://jdieguez.wordpress.com" target="_blank"&gt;Jorge Dieguez&lt;/a&gt;&amp;nbsp;nos 
hace un comentario interesante: "&lt;i&gt;..te recomiendo que en lugar de una(o 
varias) varaibles sueltas uses una clase que te centralize el acceso a la 
infromacion de contexto(usuario,su perfil, o lo que sea), esta clase es la 
responable de almacenear el estado en algun lugar(por ejemplo en la sesion) la 
idea es que la aplicacion no sepa como y donde se guarda la informacion de 
contexto..". &lt;/i&gt;Quizás es la solución más elegante de todas las 
planteadas.&lt;/p&gt;
&lt;p&gt;Pues nada, si hay alguna corrección o manera más de hacer esto ponedlo en los 
comentarios y así vamos completando entre todos el post&lt;/p&gt;
&lt;p&gt;P.D.: Si queréis más información sobre Global.asax podéis leer algo más &lt;a href="http://mredison.wordpress.com/2009/04/19/qu-es-el-globalasax/"&gt;aquí 
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Saludetes :)&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=71053" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/.NET/default.aspx">.NET</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Cosas pendientes, crear instaladores de aplicaciones</title><link>http://labloguera.net/blogs/csharp/archive/2009/01/15/cosas-pendientes-crear-instaladores-de-aplicaciones.aspx</link><pubDate>Thu, 15 Jan 2009 18:36:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:66068</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>0</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/66068.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=66068</wfw:commentRss><description>&lt;p align="justify"&gt;Este año la verdad es que voy bastante apretado de tiempo me toca correr en todo y no me da tiempo ha hacer todo lo que me gustaría. Una de esas cosas que me hubiera gustado hacer es postear dos videos que hice sobre los instaladores de programas, el tiempo ha pasado y los videos me los he encontrado guardando polvo en el disco duro.&lt;/p&gt;

&lt;p align="justify"&gt;En una de las primeras charlas que tuvimos en el club a principios de curso tratamos el tema de windows forms y no pudimos ver con detenimiento la forma en la que se pueden crear instaladores de programas con Visual Studio. Como lo hice bastante rápido y alguno me vino preguntando varias veces sobre el proceso a seguir, decidí hacer un par de videos cortos en los que explico como hacer el típico setup de toda la vida de forma rápida y otro en el que se ve como hacer este proceso con clickonce.&lt;/p&gt;

&lt;p align="justify"&gt;Aquí los dejo, no explican nada más que lo básico pero como se que ha un par de personas les ha servido de ayuda imagino que a alguno más también le servirá.&lt;/p&gt;

&lt;p align="justify"&gt;Si los queréis descargar tenéis las direcciones más abajo.&lt;/p&gt;&lt;p&gt;
&lt;a href="http://video.msn.com/video.aspx?vid=0edaa364-dc54-461f-979d-9d46f270d838" target="_new" title="LaBloguera.net - Generación de un instalador de aplicaciones"&gt;&lt;img src="http://img2.catalog.video.msn.com/Image.aspx?uuid=0edaa364-dc54-461f-979d-9d46f270d838&amp;amp;w=112&amp;amp;h=84" alt="LaBloguera.net - Generación de un instalador de aplicaciones" border="0" height="84" width="112"&gt;&lt;br&gt;LaBloguera.net - Generación de un instalador de aplicaciones&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://video.msn.com/video.aspx?vid=e4b3bd3c-045f-4a71-8c04-626673a98e6c" target="_new" title="LaBloguera.net - Instalción de aplicaciones con ClickOne"&gt;&lt;img src="http://img2.catalog.video.msn.com/Image.aspx?uuid=e4b3bd3c-045f-4a71-8c04-626673a98e6c&amp;amp;w=112&amp;amp;h=84" alt="LaBloguera.net - Instalción de aplicaciones con ClickOne" border="0" height="84" width="112"&gt;&lt;br&gt;LaBloguera.net - Instalción de aplicaciones con ClickOne&lt;/a&gt;
&lt;br&gt;
&lt;/p&gt;&lt;a href="http://video.msn.com/video.aspx?vid=e4b3bd3c-045f-4a71-8c04-626673a98e6c" target="_new" title="LaBloguera.net - Instalción de aplicaciones con ClickOne"&gt;&lt;/a&gt;&lt;p&gt;La descarga de los videos, &lt;a href="http://system.albacete.dotnetclubs.com/ftp/Charlas%2008-09/02%20-%20WinForms/b%20-%20Videos/Winforms%20-%20Generaci%C3%B3n%20de%20un%20instalador%20de%20aplicaciones.wmv" target="_blank"&gt;aquí&lt;/a&gt; y &lt;a href="http://system.albacete.dotnetclubs.com/ftp/Charlas%2008-09/02%20-%20WinForms/b%20-%20Videos/Winforms%20-%20Instalci%C3%B3n%20de%20aplicaciones%20con%20ClickOne.wmv" target="_blank"&gt;aquí&lt;/a&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Saludetes &lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=66068" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/tips/default.aspx">tips</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/windows+forms/default.aspx">windows forms</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/.NET/default.aspx">.NET</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>Visual Studio 2008: instalaci&#243;n y primeros pasos</title><link>http://labloguera.net/blogs/csharp/archive/2009/01/05/visual-studio-2008-instalaci-n-y-primeros-pasos.aspx</link><pubDate>Mon, 05 Jan 2009 00:20:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:65383</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>0</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/65383.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=65383</wfw:commentRss><description>&lt;P align=justify&gt;Nivel: &lt;EM&gt;Básico&lt;/EM&gt;&lt;/P&gt;
&lt;P align=justify&gt;Tema: &lt;EM&gt;Visual Studio&lt;/EM&gt;&lt;/P&gt;
&lt;P align=justify&gt;Autor: &lt;EM&gt;César Reneses – Coordinador Albacete DotNetClub&lt;/EM&gt;&lt;/P&gt;
&lt;P align=justify&gt;A pesar de llevar ya bastante tiempo entre nosotros mis compañeros del club e incluso los visitantes de mi blog, me siguen preguntando sobre como instalar y solucionar los problemas que surgen durante la instalación del Visual Studio 2008. &lt;/P&gt;
&lt;P align=justify&gt;Así que me parece interesante de cara a aprender más cosas sobre .NET saber primero como instalar VS2008 ya que principalmente el post va dirigido a gente que no ha tocado nunca Visual Studio y que tiene que instalarlo por primera vez.&lt;/P&gt;
&lt;P align=justify&gt;Si habéis probado otros entornos de desarrollo iréis notando poco a poco la facilidad y rapidez que da Visual Studio a la hora de programar.&lt;/P&gt;
&lt;P align=justify&gt;Hay que tener en cuenta que esta es la versión 9 de VS2008 lo que da una idea de lo trabajado que está el entorno. Es cierto que siempre quedan cosas por limar o implementar, características que a muchos nos gustaría tener, etc., pero después de 8 versiones, de recoger sugerencias y peticiones de usuarios durante varios años, es a día de hoy uno de los entornos de desarrollo más completos.&lt;/P&gt;
&lt;P align=justify&gt;&lt;STRONG&gt;&lt;EM&gt;&lt;FONT size=4&gt;Donde conseguir Visual Studio 2008&lt;/FONT&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P align=justify&gt;Desde la versión de Visual Studio 2005, Microsoft ofrece diferentes versiones gratuitas enfocadas a gente que quiere aprender o experimentar con .NET, este grupo de de herramientas se denominan “express” y están orientadas a cuatro grupos de la tecnología .net, como son el desarrollo web, la programación con C++, C# o Visual Basic.&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG style="DISPLAY:block;FLOAT:none;MARGIN-LEFT:auto;MARGIN-RIGHT:auto;" src="http://labloguera.net/photos/csharp/images/65376/original.aspx"&gt; &lt;/P&gt;
&lt;P align=justify&gt;Estas versiones las podemos descargar desde el sitio web de Microsoft: &lt;A title=http://www.microsoft.com/express/product/default.aspx href="http://www.microsoft.com/express/product/default.aspx"&gt;http://www.microsoft.com/express/product/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P align=justify&gt;Los que sois estudiantes universitarios tenéis acceso gratuito a una de las versiones de Visual Studio de pago a través de la &lt;A href="http://www.e-academy.com/IT_MSDNAA_main.cfm" target=_blank&gt;Academic Alliance&lt;/A&gt; que podéis tener a través de vuestro DotNetClub o de vuestra universidad, y también a través del programa &lt;A href="http://labloguera.net/controlpanel/blogs/www.dreamspark.com" target=_blank&gt;Microsoft DreamSpark&lt;/A&gt; si lo tiene concertado vuestra universidad.&lt;/P&gt;
&lt;P align=justify&gt;La versión que aparece en mi Academic Alliance es la Professional, que se ofrece con fines educativos y sin coste alguno. Además de la versión Professional existen otras versiones como la Standard o la Team System. Podéis bajaros las versiones de prueba desde &lt;A href="http://msdn.microsoft.com/es-es/vstudio/aa700831.aspx" target=_blank&gt;aquí&lt;/A&gt;.&lt;/P&gt;
&lt;P align=justify&gt;&lt;STRONG&gt;&lt;EM&gt;&lt;FONT size=4&gt;Instalando Visual Studio&lt;/FONT&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P align=justify&gt;Lo primero de todo es tener algo más de 2Gb de espacio libre en disco y paciencia (tarda un poco, pero merece la pena), podemos aligerar el tiempo de instalación si marcamos solo las características justas que necesitamos.&lt;/P&gt;
&lt;P align=justify&gt;La elección de idioma va en gusto de cada uno, a mi me gusta tenerlo en inglés, ya que si tienes que buscar información sobre alguna característica del entorno o sobre algún error, encuentras más cantidad de información en la red.&lt;/P&gt;
&lt;P align=justify&gt;Por lo demás metemos el disco y aparece la siguiente ventana para comenzar la configuración de la instalación.&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://labloguera.net/photos/csharp/images/65377/original.aspx"&gt; &lt;/P&gt;
&lt;P align=justify&gt;Pulsamos sobre “Install Visual Studio 2008” y carga los componentes necesarios para iniciar la instalación.&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://labloguera.net/photos/csharp/images/65378/original.aspx"&gt; &lt;/P&gt;
&lt;P&gt;Una vez cargados los componentes pulsamos sobre “Next” y en la siguiente pantalla aceptamos el contrato de licencia.&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://labloguera.net/photos/csharp/images/65379/original.aspx"&gt; &lt;/P&gt;
&lt;P&gt;Ahora podemos indicar que programas vamos a instalar, todos, los más comunes o una selección que nos venga bien.&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://labloguera.net/photos/csharp/images/65382/original.aspx"&gt; &lt;/P&gt;
&lt;P&gt;Indicamos la ruta de la instalación y pulsamos en “Install” para que inicie la copia del programa.&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://labloguera.net/photos/csharp/images/65380/original.aspx"&gt; &lt;/P&gt;
&lt;P&gt;Después de un ratillo aparecerá esta pantalla:&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://labloguera.net/photos/csharp/images/65381/original.aspx"&gt; &lt;/P&gt;
&lt;P align=justify&gt;Hasta aquí lo que ocurre en la mayoría de los casos, es decir que se instala correctamente. Pero también, aunque es en situaciones muy particulares esta instalación no se nos da tan bien.&lt;/P&gt;
&lt;P align=justify&gt;&lt;STRONG&gt;&lt;EM&gt;&lt;FONT size=4&gt;Problemas que pueden surgir en la instalación&lt;/FONT&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P align=justify&gt;Como en toda instalación de software el Visual Studio no se libra de esos “fallicos” que tenemos que solucionar.&lt;/P&gt;
&lt;P align=justify&gt;&lt;STRONG&gt;&lt;EM&gt;Error 1330: &lt;/EM&gt;&lt;/STRONG&gt;este error nos indica que alguno de los archivos de instalación está corrupto. Las solución es bien sencilla, copiar los archivos a una carpeta local de nuestro disco duro y volver a comenzar desde allí la instalación.&lt;/P&gt;
&lt;P align=justify&gt;Aunque parezca increíble la solución es efectiva :D, podéis leer más en el blog de &lt;A href="http://labloguera.net/blogs/elbruno/archive/2008/05/20/vs2008-microsoft-visual-studio-2008-setup-error-1330.aspx" target=_blank&gt;El Bruno&lt;/A&gt; y en el de &lt;A href="http://blogs.msdn.com/heaths" target=_blank&gt;Heath Stewart&lt;/A&gt; por duplicado, &lt;A href="http://blogs.msdn.com/heaths/archive/2007/12/14/how-to-workaround-error-1330-during-visual-studio-2008-installation.aspx" target=_blank&gt;aquí&lt;/A&gt; y &lt;A href="http://blogs.msdn.com/heaths/archive/2008/12/11/another-possible-workaround-for-error-1330.aspx" target=_blank&gt;aquí&lt;/A&gt;.&lt;/P&gt;
&lt;P align=justify&gt;&lt;STRONG&gt;&lt;EM&gt;Web Authoring Component Error: &lt;/EM&gt;&lt;/STRONG&gt;también nos puede aparecer este error en la instalación en el que se produce un conflicto con un archivo perteneciente a office 2007.&lt;/P&gt;
&lt;P align=justify&gt;Lo más fácil en este caso sería desinstalar Office e instalar VS2008. Pero lo recomendable es echarle un ojo al log de instalación; &lt;A href="http://msmvps.com/blogs/paulomorgado/archive/2008/03/23/web-authoring-component-install-fails-when-installing-visual-studio-2008.aspx" target=_blank&gt;aquí&lt;/A&gt; y &lt;A href="http://blogs.msdn.com/astebner/archive/2008/01/13/7104519.aspx" target=_blank&gt;aquí&lt;/A&gt; os dejo dos ejemplos de como se hace y se soluciona el problema.&lt;/P&gt;
&lt;P align=justify&gt;Con estos dos errores me he encontrado alguna vez, pero buscando un poco en la red siempre se encuentra la solución.&lt;/P&gt;
&lt;P align=justify&gt;&lt;STRONG&gt;&lt;EM&gt;&lt;FONT size=4&gt;Donde conseguir más información&lt;/FONT&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P align=justify&gt;Ahora que tenemos el entorno instalado voy a dejar unos enlaces donde conseguir información sobre .NET y preguntar dudas:&lt;/P&gt;
&lt;P align=justify&gt;&lt;A href="http://www.mslatam.com/latam/msdn/comunidad/dce2005/" target=_blank&gt;Programa Desarrollador 5 Estrellas&lt;/A&gt; aquí podrás aprender desde cero las partes más relevantes de la tecnología .NET, con test para que puedas medir tus conocimientos.&lt;/P&gt;
&lt;P align=justify&gt;Foros, tres son mis preferidos el de los &lt;A href="http://www.dotnetclubs.com/forums/" target=_blank&gt;dotnetclubs&lt;/A&gt;, los de &lt;A href="http://forums.microsoft.com/msdn-es/default.aspx?siteid=11" target=_blank&gt;msdn&lt;/A&gt; y los del &lt;A href="http://foros.elguille.org/" target=_blank&gt;guille&lt;/A&gt;.&lt;/P&gt;
&lt;P align=justify&gt;No podían faltar cursos específicos sobre diferentes tecnologías como winforms, asp.net, dispositivos móviles, etc. puedes encontrar bastantes en &lt;A href="http://www.microsoft.com/spanish/msdn/spain/cursosonline.mspx" target=_blank&gt;desarrollaconmsdn.com&lt;/A&gt;.&lt;/P&gt;
&lt;P align=justify&gt;Y para terminar un par de comunidades donde leer noticias y artículos sobre tecnología y .NET, &lt;A href="http://labloguera.net/" target=_blank&gt;labloguera&lt;/A&gt; y &lt;A href="http://geeks.ms/" target=_blank&gt;geeks&lt;/A&gt;. La primera dedicada sobre todo a estudiantes y la segunda dedicada más al mundo profesional.&lt;/P&gt;
&lt;P align=justify&gt;Por ahora esto es todo, ¡nos vemos! :D&lt;/P&gt;
&lt;P align=justify&gt;Saludetes &lt;img src="http://labloguera.net/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/P&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=65383" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/.NET/default.aspx">.NET</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>WPF: Que es y que podemos hacer con WPF</title><link>http://labloguera.net/blogs/csharp/archive/2008/12/09/wpf-que-es-y-que-podemos-hacer-con-wpf.aspx</link><pubDate>Tue, 09 Dec 2008 20:31:00 GMT</pubDate><guid isPermaLink="false">982ae711-7ac7-407a-b99e-5d5a6cc12179:64701</guid><dc:creator>Cesar Reneses</dc:creator><slash:comments>2</slash:comments><comments>http://labloguera.net/blogs/csharp/comments/64701.aspx</comments><wfw:commentRss>http://labloguera.net/blogs/csharp/commentrss.aspx?PostID=64701</wfw:commentRss><description>&lt;p align="justify"&gt;Bueno pues WPF es básicamente &lt;strike&gt;el sustituto de Windows Forms en un futuro&lt;/strike&gt; una nueva herramienta para crear aplicaciones con una experiencia rica de usuario. Una nueva tecnología que nos permite desarrollar aplicaciones de escritorio aprovechando mucho más los recursos gráficos de los últimos sistemas windows.&lt;/p&gt;  &lt;p align="justify"&gt;Sobre todo lo más importante es que se pueden crear aplicaciones más usables (siempre que tengamos un experto en usabilidad) y más vistosas (solo si dejamos que el diseñador haga los gráficos y no nosotros).&lt;/p&gt;  &lt;p align="justify"&gt;Una de las cosas que más se resalta en las charlas de WPF es la separación entre la parte de la interfaz y la del código de la aplicación. Por lo que el desarrollador simplemente tiene que ir añadiendo su código sin tener que tocar nada de la interfaz y el diseñador lo mismo pero en su terreno. Las herramientas que ambos usan son, por el lado del desarrollador &lt;a href="http://msdn.microsoft.com/es-es/vstudio/default.aspx" target="_blank"&gt;Visual Studio&lt;/a&gt; y por el lado del diseñador &lt;a href="http://www.microsoft.com/expression/products/Overview.aspx?key=blend" target="_blank"&gt;Expression Blend&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://labloguera.net/blogs/csharp/WindowsLiveWriter/WPFQueesyquepodemoshacerconWPF_1180E/image_6.png"&gt;&lt;img src="http://labloguera.net/blogs/csharp/WindowsLiveWriter/WPFQueesyquepodemoshacerconWPF_1180E/image_thumb_2.png" style="border-width:0px;" alt="image" width="117" border="0" height="153"&gt;&lt;/a&gt; &lt;a href="http://labloguera.net/blogs/csharp/WindowsLiveWriter/WPFQueesyquepodemoshacerconWPF_1180E/image_8.png"&gt;&lt;img src="http://labloguera.net/blogs/csharp/WindowsLiveWriter/WPFQueesyquepodemoshacerconWPF_1180E/image_thumb_3.png" style="border-width:0px;" alt="image" width="116" border="0" height="156"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p align="justify"&gt;Anteriormente la forma de comunicación entre ellos era una imagen que creaba el diseñador de como debía más o menos aparecer la interfaz del programa y el desarrollador intentaba llevarla a cabo con algún lenguaje. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://labloguera.net/blogs/csharp/WindowsLiveWriter/WPFQueesyquepodemoshacerconWPF_1180E/image_10.png"&gt;&lt;img src="http://labloguera.net/blogs/csharp/WindowsLiveWriter/WPFQueesyquepodemoshacerconWPF_1180E/image_thumb_4.png" style="border-width:0px;" alt="image" width="414" border="0" height="141"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Ahora el diseñador cuando crea una interfaz, es esa la que aparecerá finalmente sin adaptaciones de ningún tipo.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://labloguera.net/blogs/csharp/WindowsLiveWriter/WPFQueesyquepodemoshacerconWPF_1180E/image_12.png"&gt;&lt;img src="http://labloguera.net/blogs/csharp/WindowsLiveWriter/WPFQueesyquepodemoshacerconWPF_1180E/image_thumb_5.png" style="border-width:0px;" alt="image" width="417" border="0" height="138"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Para que desarrollador y diseñador puedan trabajar en un mismo proyecto con estas herramientas tiene que existir un nexo de unión, este es XAML un lenguaje al estilo de XML y que es entendido por Visual Studio y Blend.&lt;/p&gt;  &lt;p align="justify"&gt;Bueno, creo que con esta mini introducción ya vale, necesitaba contar un poco como iba para poder pasar a ver los tipos de aplicaciones y como se crean que será el tema de mi próximo post. De momento os dejo enlaces a aplicaciones reales hechas con WPF.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.turningthepages.com" target="_blank"&gt;http://www.turningthepages.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.roxio.com/enu/promotions/landing/vista/preview/default.html" target="_blank"&gt;RoxioCentral&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.notescraps.com/" target="_blank"&gt;NoteScraps&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.otto.de/vista" target="_blank"&gt;Otto Store&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Saludetes&lt;/p&gt;&lt;img src="http://labloguera.net/aggbug.aspx?PostID=64701" width="1" height="1"&gt;</description><category domain="http://labloguera.net/blogs/csharp/archive/tags/WPF/default.aspx">WPF</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/.NET+3.0/default.aspx">.NET 3.0</category><category domain="http://labloguera.net/blogs/csharp/archive/tags/WPF+desde+el+principio/default.aspx">WPF desde el principio</category></item></channel></rss>