<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>byteabyte.net - .NET</title>
    <link>http://www.byteabyte.net/</link>
    <description />
    <language>en-us</language>
    <copyright>Alejandro Mezcua</copyright>
    <lastBuildDate>Mon, 31 Dec 2007 09:11:42 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>alejandro.mezcua@byteabyte.net</managingEditor>
    <webMaster>alejandro.mezcua@byteabyte.net</webMaster>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=c905e111-7fbc-4489-bff8-71561d20a0a8</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,c905e111-7fbc-4489-bff8-71561d20a0a8.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,c905e111-7fbc-4489-bff8-71561d20a0a8.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=c905e111-7fbc-4489-bff8-71561d20a0a8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Hasta ahora no había realizado más que pequeñas pruebas de LINQ, pero
recientemente he cambiado de proveedor de hosting (al <a href="http://www.discountasp.com/index.aspx?refcode=ALMBYTE" target="_blank">de
momento magnífico discountASP</a>) que ya proporciona soporte para .NET 3.5 y
me he decidido a usarlo un poco más.
</p>
        <p>
En concreto he creado <a href="http://www.byteabyte.net/CategoryView,category,links.aspx" target="_blank">una
nueva página de links</a>, donde he puesto de momento los links que tengo alojados
en del.icio.us y mis elementos compartidos de Google Reader, que es el lector RSS
que utilizo.
</p>
        <p>
Tanto del.icio.us como Google Reader proporcionan acceso a los elementos públicos
mediante una URL que ofrece un documento RSS en el primer caso (<a title="http://del.icio.us/rss/amezcua" href="http://del.icio.us/rss/amezcua" target="_blank">http://del.icio.us/rss/amezcua</a>)
y un documento ATOM en el segundo (<a title="http://www.google.com/reader/public/atom/user/06770480527490995101/state/com.google/broadcast" href="http://www.google.com/reader/public/atom/user/06770480527490995101/state/com.google/broadcast" target="_blank">http://www.google.com/reader/public/atom/user/06770480527490995101/state/com.google/broadcast</a>).
</p>
        <p>
Teniendo esto en cuenta, el funcionamiento de la página es realmente sencillo.
Sin entrar en detalles los pasos realizados son:
</p>
        <p>
1º Al cargar la página se obtiene un documento XML a partir de la URL para
cada uno de los documentos anteriores. Esto es tan sencillo como:
</p>
        <pre class="csharpcode">XDocument xmlDoc = XDocument.Load(urlServicio);</pre>
        <style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        <p>
2º Una vez se dispone del documento se obtiene, mediante una consulta LINQ, una
colección de elementos extrayendo los datos deseados del XML original. Por ejemplo,
para el caso de del.icio.us se quiere obtener una colección de objetos con dos
campos, 'title' y 'url':
</p>
        <pre class="csharpcode">var itemList = from item <span class="kwrd">in</span> xmlDoc.Descendants(<span class="str">"{http://purl.org/rss/1.0/}item"</span>)
select <span class="kwrd">new</span> { title = (<span class="kwrd">string</span>)item.Element(<span class="str">"{http://purl.org/rss/1.0/}title"</span>),
url = (<span class="kwrd">string</span>)item.Element(<span class="str">"{http://purl.org/rss/1.0/}link"</span>)
};</pre>
        <p>
          <style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        </p>
        <p>
3º Cuando se tiene la colección creada (itemList) se puede utilizar DataBinding
para vincular esta lista de elementos a cualquier control. En mi caso lo he vinculado
a un control DataList. En el control DataList simplemente se especifica que se quieren
mostrar los campos 'title' y 'url' definidos antes:
</p>
        <pre class="csharpcode">dlDelIcioUsItems.DataSource = itemList;
dlDelIcioUsItems.DataBind();</pre>
        <p>
Como se puede ver hay, sin contar el control de errores, 4 líneas de código
para cargar un documento XML remoto y mostrarlo en una página Web, bastante impresionante,
teniendo en cuenta que para hacer algo similar hasta ahora lo que hacía era disponer
de una clase que defina la estructura del documento, cargar el XML remoto en un XmlReader,
deserializar el documento a la clase y finalmente obtener la colección de items
interna de esa clase.
</p>
        <p>
Una de las cosas que hay que destacar es el uso de los namespaces de XML. Como se
ve en la consulta LINQ, para acceder a cada uno de los elementos del documento hay
que especificar el namespace XML en el que se encuentra
</p>
        <pre class="csharpcode">{http://purl.org/rss/1.0/}</pre>
        <style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        <p>
lo que define completamente al elemento XML concreto. Esta sintaxis, tal como está
en el ejemplo, no me acaba de gustar, así que se puede mejorar de la siguiente
forma:
</p>
        <pre class="csharpcode">XNamespace deliciousNS = <span class="str">"http://purl.org/rss/1.0/"</span>;
var itemList = from item <span class="kwrd">in</span> xmlDoc.Descendants(deliciousNS
+ <span class="str">"item"</span>) select <span class="kwrd">new</span> {
title = (<span class="kwrd">string</span>)item.Element(deliciousNS + <span class="str">"title"</span>),
url = (<span class="kwrd">string</span>)item.Element(deliciousNS + <span class="str">"link"</span>)
};</pre>
        <p>
          <style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        </p>
        <p>
En este caso se define un objeto XNamespace con el namespace adecuado y se utiliza
en todos aquellos sitios donde se necesite especificar el nombre completo del elemento.
Como el tipo XNamespace sobrecarga el operador '+' se puede usar simplemente añadiendo
entre comillas el nombre del elemento XML. Esto no se encuentra en la mayoría
de los ejemplos publicados por ahí sobre LINQ to XML, donde se utilizan documentos
XML sin definición de namespaces, cosa que no es muy habitual en el mundo real
¿no?
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=c905e111-7fbc-4489-bff8-71561d20a0a8" />
      </body>
      <title>Me encanta LINQ to XML</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,c905e111-7fbc-4489-bff8-71561d20a0a8.aspx</guid>
      <link>http://www.byteabyte.net/2007/12/31/MeEncantaLINQToXML.aspx</link>
      <pubDate>Mon, 31 Dec 2007 09:11:42 GMT</pubDate>
      <description>&lt;p&gt;
Hasta ahora no hab&amp;#237;a realizado m&amp;#225;s que peque&amp;#241;as pruebas de LINQ, pero
recientemente he cambiado de proveedor de hosting (al &lt;a href="http://www.discountasp.com/index.aspx?refcode=ALMBYTE" target="_blank"&gt;de
momento magn&amp;#237;fico discountASP&lt;/a&gt;) que ya proporciona soporte para .NET 3.5 y
me he decidido a usarlo un poco m&amp;#225;s.
&lt;/p&gt;
&lt;p&gt;
En concreto he creado &lt;a href="http://www.byteabyte.net/CategoryView,category,links.aspx" target="_blank"&gt;una
nueva p&amp;#225;gina de links&lt;/a&gt;, donde he puesto de momento los links que tengo alojados
en del.icio.us y mis elementos compartidos de Google Reader, que es el lector RSS
que utilizo.
&lt;/p&gt;
&lt;p&gt;
Tanto del.icio.us como Google Reader proporcionan acceso a los elementos p&amp;#250;blicos
mediante una URL que ofrece un documento RSS en el primer caso (&lt;a title="http://del.icio.us/rss/amezcua" href="http://del.icio.us/rss/amezcua" target="_blank"&gt;http://del.icio.us/rss/amezcua&lt;/a&gt;)
y un documento ATOM en el segundo (&lt;a title="http://www.google.com/reader/public/atom/user/06770480527490995101/state/com.google/broadcast" href="http://www.google.com/reader/public/atom/user/06770480527490995101/state/com.google/broadcast" target="_blank"&gt;http://www.google.com/reader/public/atom/user/06770480527490995101/state/com.google/broadcast&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
Teniendo esto en cuenta, el funcionamiento de la p&amp;#225;gina es realmente sencillo.
Sin entrar en detalles los pasos realizados son:
&lt;/p&gt;
&lt;p&gt;
1&amp;#186; Al cargar la p&amp;#225;gina se obtiene un documento XML a partir de la URL para
cada uno de los documentos anteriores. Esto es tan sencillo como:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;XDocument xmlDoc = XDocument.Load(urlServicio);&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;p&gt;
2&amp;#186; Una vez se dispone del documento se obtiene, mediante una consulta LINQ, una
colecci&amp;#243;n de elementos extrayendo los datos deseados del XML original. Por ejemplo,
para el caso de del.icio.us se quiere obtener una colecci&amp;#243;n de objetos con dos
campos, 'title' y 'url':
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;var itemList = from item &lt;span class="kwrd"&gt;in&lt;/span&gt; xmlDoc.Descendants(&lt;span class="str"&gt;&amp;quot;{http://purl.org/rss/1.0/}item&amp;quot;&lt;/span&gt;)
select &lt;span class="kwrd"&gt;new&lt;/span&gt; { title = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)item.Element(&lt;span class="str"&gt;&amp;quot;{http://purl.org/rss/1.0/}title&amp;quot;&lt;/span&gt;),
url = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)item.Element(&lt;span class="str"&gt;&amp;quot;{http://purl.org/rss/1.0/}link&amp;quot;&lt;/span&gt;)
};&lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/p&gt;
&lt;p&gt;
3&amp;#186; Cuando se tiene la colecci&amp;#243;n creada (itemList) se puede utilizar DataBinding
para vincular esta lista de elementos a cualquier control. En mi caso lo he vinculado
a un control DataList. En el control DataList simplemente se especifica que se quieren
mostrar los campos 'title' y 'url' definidos antes:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;dlDelIcioUsItems.DataSource = itemList;
dlDelIcioUsItems.DataBind();&lt;/pre&gt;
&lt;p&gt;
Como se puede ver hay, sin contar el control de errores, 4 l&amp;#237;neas de c&amp;#243;digo
para cargar un documento XML remoto y mostrarlo en una p&amp;#225;gina Web, bastante impresionante,
teniendo en cuenta que para hacer algo similar hasta ahora lo que hac&amp;#237;a era disponer
de una clase que defina la estructura del documento, cargar el XML remoto en un XmlReader,
deserializar el documento a la clase y finalmente obtener la colecci&amp;#243;n de items
interna de esa clase.
&lt;/p&gt;
&lt;p&gt;
Una de las cosas que hay que destacar es el uso de los namespaces de XML. Como se
ve en la consulta LINQ, para acceder a cada uno de los elementos del documento hay
que especificar el namespace XML en el que se encuentra
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;{http://purl.org/rss/1.0/}&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;p&gt;
lo que define completamente al elemento XML concreto. Esta sintaxis, tal como est&amp;#225;
en el ejemplo, no me acaba de gustar, as&amp;#237; que se puede mejorar de la siguiente
forma:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;XNamespace deliciousNS = &lt;span class="str"&gt;&amp;quot;http://purl.org/rss/1.0/&amp;quot;&lt;/span&gt;;
var itemList = from item &lt;span class="kwrd"&gt;in&lt;/span&gt; xmlDoc.Descendants(deliciousNS
+ &lt;span class="str"&gt;&amp;quot;item&amp;quot;&lt;/span&gt;) select &lt;span class="kwrd"&gt;new&lt;/span&gt; {
title = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)item.Element(deliciousNS + &lt;span class="str"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;),
url = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)item.Element(deliciousNS + &lt;span class="str"&gt;&amp;quot;link&amp;quot;&lt;/span&gt;)
};&lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/p&gt;
&lt;p&gt;
En este caso se define un objeto XNamespace con el namespace adecuado y se utiliza
en todos aquellos sitios donde se necesite especificar el nombre completo del elemento.
Como el tipo XNamespace sobrecarga el operador '+' se puede usar simplemente a&amp;#241;adiendo
entre comillas el nombre del elemento XML. Esto no se encuentra en la mayor&amp;#237;a
de los ejemplos publicados por ah&amp;#237; sobre LINQ to XML, donde se utilizan documentos
XML sin definici&amp;#243;n de namespaces, cosa que no es muy habitual en el mundo real
&amp;#191;no?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=c905e111-7fbc-4489-bff8-71561d20a0a8" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,c905e111-7fbc-4489-bff8-71561d20a0a8.aspx</comments>
      <category>.NET</category>
      <category>WebSite</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=4fdd6cea-49b0-49c6-b06a-3f1e4415d354</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,4fdd6cea-49b0-49c6-b06a-3f1e4415d354.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,4fdd6cea-49b0-49c6-b06a-3f1e4415d354.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=4fdd6cea-49b0-49c6-b06a-3f1e4415d354</wfw:commentRss>
      <title>Un vistazo de alto nivel a las novedades de .NET 3.5</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,4fdd6cea-49b0-49c6-b06a-3f1e4415d354.aspx</guid>
      <link>http://www.byteabyte.net/2007/08/17/UnVistazoDeAltoNivelALasNovedadesDeNET35.aspx</link>
      <pubDate>Fri, 17 Aug 2007 07:58:47 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a title="P&amp;aacute;gina web de Daniel Moth" href="http://www.danielmoth.com/" target="_blank"&gt;Daniel
Moth&lt;/a&gt; &lt;a title="Video sobre las novedades de .NET 3.5 en Channel 9" href="http://channel9.msdn.com/Showpost.aspx?postid=333940" target="_blank"&gt;ha
publicado un vídeo cortito&lt;/a&gt;, de unos 14 minutos, explicando a muy alto nivel cuáles
son las novedades que se incluyen en .NET 3.5. Aunque no se entra en detalle en ningún
punto, es una muy buena forma de ver, de una sola pasada, los nuevos ensamblados incluidos
en esta versión y cuál es su propósito.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=4fdd6cea-49b0-49c6-b06a-3f1e4415d354" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,4fdd6cea-49b0-49c6-b06a-3f1e4415d354.aspx</comments>
      <category>.NET</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=5eb13a52-70af-442d-850b-c7f1a31d12e2</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,5eb13a52-70af-442d-850b-c7f1a31d12e2.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,5eb13a52-70af-442d-850b-c7f1a31d12e2.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5eb13a52-70af-442d-850b-c7f1a31d12e2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Como <a title="SQL Server Compact Edition (SQL CE) ya disponible" href="http://www.byteabyte.net/2006/12/16/SQLServerCompactEditionSQLCEYaDisponible.aspx">complemento
a la nueva versión de SQL CE</a> (la base de datos compacta pensada para usar
principalmente en dispositivos Windows Mobile), han liberado recientemente una herramienta
que puede resultar muy interesante en ciertos casos.
</p>
        <p>
Como la mayoría que haya usado SQL CE sabrá, SQL CE se puede sincronizar con bases
de datos SQL Server. La base de datos SQL CE se conecta con el servidor SQL Server
vía HTTP y permite sincronizar su contenido con el servidor.
</p>
        <p>
          <a title="Microsoft SQL Server 2005 Compact Edition Access Database Synchronizer (ADS) RTW" href="http://blogs.msdn.com/sqlservercompact/archive/2007/02/19/microsoft-sql-server-2005-compact-edition-access-database-synchronizer-ads-rtw.aspx">Según
se publica en el blog de SQL CE</a>, esta nueva herramienta permite realizar una sincronización
similar <strong>pero con bases de datos Access</strong>. Esto permite que, por ejemplo,
dispongamos de una aplicación móvil con SQL CE y, al conectar el dispositivo móvil
al PC, la base de datos del dispositivo se sincronice con una base de datos Access
en nuestro PC.
</p>
        <p>
Esta sincronización se realiza con las siguientes características:
</p>
        <ul>
          <li>
            <font face="Segoe UI">La conversión de tipos de datos entre SQL CE y Access se realiza
en el momento de hacer la sincronización.</font>
          </li>
          <li>
            <font face="Segoe UI">Es necesaria una conexión de ActiveSync para que la sincronización
se produzca.</font>
          </li>
          <li>
            <font face="Segoe UI">No es necesario instalar nada en el dispositivo. Simplemente
hay que instalar software en el PC.</font>
          </li>
          <li>
            <font face="Segoe UI">La sincronización se basa en RDA (RDA es uno de los métodos
de sincronización disponibles; en SQL Server se cuenta con RDA y Merge).</font>
          </li>
          <li>
            <font face="Segoe UI">Una aplicación existente en una PDA se puede hacer que
sincroniza con SQL Server o Access simplemente cambiando los parámetros de sincronización,
pero no es necesario modificar nada más.</font>
          </li>
          <li>
            <font face="Segoe UI">No existe resolución de conflictos.</font>
          </li>
        </ul>
        <p>
 
</p>
        <p>
Aún no la he usado mucho, pero tengo en mente un par de casos donde me podría
resultar útil, ya veremos...
</p>
        <p>
Si la queréis probar <a title="Microsoft SQL Server 2005 Compact Edition Access Database Synchronizer" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B967347A-5DD0-445C-8A9F-AEA3DB9EC4BC&amp;displaylang=en">está
disponible aquí</a>.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=5eb13a52-70af-442d-850b-c7f1a31d12e2" />
      </body>
      <title>Microsoft SQL Server 2005 Compact Edition Access Database Synchronizer disponible</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,5eb13a52-70af-442d-850b-c7f1a31d12e2.aspx</guid>
      <link>http://www.byteabyte.net/2007/03/20/MicrosoftSQLServer2005CompactEditionAccessDatabaseSynchronizerDisponible.aspx</link>
      <pubDate>Tue, 20 Mar 2007 10:58:53 GMT</pubDate>
      <description>&lt;p&gt;
Como &lt;a title="SQL Server Compact Edition (SQL CE) ya disponible" href="http://www.byteabyte.net/2006/12/16/SQLServerCompactEditionSQLCEYaDisponible.aspx"&gt;complemento
a la nueva versión de SQL CE&lt;/a&gt;&amp;nbsp;(la base de datos compacta pensada para usar
principalmente en dispositivos Windows Mobile), han liberado recientemente una herramienta
que puede resultar muy interesante en ciertos casos.
&lt;/p&gt;
&lt;p&gt;
Como la mayoría que haya usado SQL CE sabrá, SQL CE se puede sincronizar con bases
de datos SQL Server. La base de datos SQL CE se conecta con el servidor SQL Server
vía HTTP y permite sincronizar su contenido con el servidor.
&lt;/p&gt;
&lt;p&gt;
&lt;a title="Microsoft SQL Server 2005 Compact Edition Access Database Synchronizer (ADS) RTW" href="http://blogs.msdn.com/sqlservercompact/archive/2007/02/19/microsoft-sql-server-2005-compact-edition-access-database-synchronizer-ads-rtw.aspx"&gt;Según
se publica en el blog de SQL CE&lt;/a&gt;, esta nueva herramienta permite realizar una sincronización
similar &lt;strong&gt;pero con bases de datos Access&lt;/strong&gt;. Esto permite que, por ejemplo,
dispongamos de una aplicación móvil con SQL CE y, al conectar el dispositivo móvil
al PC, la base de datos del dispositivo se sincronice con una base de datos Access
en nuestro PC.
&lt;/p&gt;
&lt;p&gt;
Esta sincronización se realiza con las siguientes características:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;font face="Segoe UI"&gt;La conversión de tipos de datos entre SQL CE y Access se realiza
en el momento de hacer la sincronización.&lt;/font&gt; 
&lt;li&gt;
&lt;font face="Segoe UI"&gt;Es necesaria una conexión de ActiveSync para que la sincronización
se produzca.&lt;/font&gt; 
&lt;li&gt;
&lt;font face="Segoe UI"&gt;No es necesario instalar nada en el dispositivo. Simplemente
hay que instalar software en el PC.&lt;/font&gt; 
&lt;li&gt;
&lt;font face="Segoe UI"&gt;La sincronización se basa en RDA (RDA es uno de los métodos
de sincronización disponibles; en SQL Server se cuenta con RDA y Merge).&lt;/font&gt; 
&lt;li&gt;
&lt;font face="Segoe UI"&gt;Una aplicación existente en una PDA se puede&amp;nbsp;hacer que
sincroniza con SQL Server o Access simplemente cambiando los parámetros de sincronización,
pero no es necesario modificar nada más.&lt;/font&gt; 
&lt;li&gt;
&lt;font face="Segoe UI"&gt;No existe resolución de conflictos.&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Aún no la he usado mucho, pero tengo en mente un par de casos donde me&amp;nbsp;podría
resultar útil, ya veremos...
&lt;/p&gt;
&lt;p&gt;
Si la queréis probar &lt;a title="Microsoft SQL Server 2005 Compact Edition Access Database Synchronizer" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B967347A-5DD0-445C-8A9F-AEA3DB9EC4BC&amp;amp;displaylang=en"&gt;está
disponible aquí&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=5eb13a52-70af-442d-850b-c7f1a31d12e2" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,5eb13a52-70af-442d-850b-c7f1a31d12e2.aspx</comments>
      <category>.NET</category>
      <category>Microsoft</category>
      <category>Windows Mobile</category>
      <category>SQL CE</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=077eb1f6-9774-4d07-b04d-b29ed0ac1faa</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,077eb1f6-9774-4d07-b04d-b29ed0ac1faa.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,077eb1f6-9774-4d07-b04d-b29ed0ac1faa.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=077eb1f6-9774-4d07-b04d-b29ed0ac1faa</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img src="http://www.byteabyte.net/images/sqlce.png" align="right" /> Coincidiendo
con el lanzamiento de Visual Studio 2005 Service Pack 1, Microsoft <a href="http://www.microsoft.com/sql/editions/compact/default.mspx" target="_blank">ha
liberado SQL Server Compact Edition</a> (antes SQL Server Everywhere) cuya principal
novedad, <a href="http://www.byteabyte.net/2006/04/18/SQLMobilePasar%c3%a1ASerSQLEverywhere.aspx">como
ya comenté anteriormente</a>, es la posibilidad de disponer de bases de datos SQL
CE (archivos con extensión .sdf) tanto en el PC como en dispositivos móviles (Pocket
PCs, SmartPhones, ...) <strong>con una base de código común</strong>. Esto abre un
interesante abanico de posibilidades y nuevos escenarios que hasta ahora no eran
posibles.
</p>
        <p>
Además de SQL CE, se han liberado las herramientas de desarrollo correspondientes
que faciliten el desarrollo de estas soluciones.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=077eb1f6-9774-4d07-b04d-b29ed0ac1faa" />
      </body>
      <title>SQL Server Compact Edition (SQL CE) ya disponible</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,077eb1f6-9774-4d07-b04d-b29ed0ac1faa.aspx</guid>
      <link>http://www.byteabyte.net/2006/12/16/SQLServerCompactEditionSQLCEYaDisponible.aspx</link>
      <pubDate>Sat, 16 Dec 2006 17:45:24 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img src="http://www.byteabyte.net/images/sqlce.png" align="right"&gt; Coincidiendo con
el lanzamiento de Visual Studio 2005 Service Pack 1, Microsoft &lt;a href="http://www.microsoft.com/sql/editions/compact/default.mspx" target="_blank"&gt;ha
liberado SQL Server Compact Edition&lt;/a&gt; (antes SQL Server Everywhere) cuya principal
novedad, &lt;a href="http://www.byteabyte.net/2006/04/18/SQLMobilePasar%c3%a1ASerSQLEverywhere.aspx"&gt;como
ya comenté anteriormente&lt;/a&gt;, es la posibilidad de disponer de bases de datos SQL
CE (archivos con extensión .sdf) tanto en el PC como en dispositivos móviles (Pocket
PCs, SmartPhones, ...) &lt;strong&gt;con una base de código común&lt;/strong&gt;. Esto abre un
interesante abanico de posibilidades&amp;nbsp;y nuevos escenarios que hasta ahora no eran
posibles.
&lt;/p&gt;
&lt;p&gt;
Además de SQL CE, se han liberado las herramientas de desarrollo correspondientes
que faciliten el desarrollo de estas soluciones.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=077eb1f6-9774-4d07-b04d-b29ed0ac1faa" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,077eb1f6-9774-4d07-b04d-b29ed0ac1faa.aspx</comments>
      <category>.NET</category>
      <category>Microsoft</category>
      <category>Windows Mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=05144578-aa81-4958-83f4-f15331f79f45</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,05144578-aa81-4958-83f4-f15331f79f45.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,05144578-aa81-4958-83f4-f15331f79f45.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=05144578-aa81-4958-83f4-f15331f79f45</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Cada vez es más común realizar operaciones asíncronas, gracias en parte a la llegada
de la Web, donde no podemos bloquear una aplicación simplemente porque esté haciendo
una operación de red que no sabemos el tiempo que va a tardar en concluir, como una
llamada a un servicio Web. Cuando realizamos una aplicación de este estilo, hay que
'mantener al usuario entretenido' de alguna forma, para que sepa que la operación
está teniendo lugar y que la aplicación no se ha quedado 'colgada', idealmente dando
la posibilidad de cancelar la tarea.
</p>
        <p>
Una manera de indicar que se está realizando una operación de este estilo que me gustó
hace tiempo fue la que implementa la ventana de inicio de sesión de SQL Server Management
Studio, donde se ve una pequeña barra que muestra un gradiente de colores animado
mientras se está validando al usuario.
</p>
        <p align="center">
          <img src="http://www.byteabyte.net/images/sqllogin.png" />
        </p>
        <p>
Este UI es muy poco intrusivo y muestra claramente la intención. De hecho, en Outlook
2007 se ha copiado y se puede ver encima del panel de lectura de un mensaje cuando
Outlook tarda en abrir el mensaje por cualquier motivo.
</p>
        <p>
Siguiendo esta idea, cree un control hace tiempo para un proyecto, mostrando una barra
animada mientras se está accediendo a un servicio Web. Os dejo aquí la implementación
que realizé. Consiste en un control que expone tres propiedades ForeColor, MiddleColor
y BackColor. El control crea un gradiente entre los tres colores en toda su superficie,
quedando estéticamente bien cuando el tamaño del control es alargado y estrecho. Luego
expone dos métodos, Animate y StopAnimation que lo animan. La animación realizada
hace que el gradiente 'rebote' de lado a lado de la barra horizontal.
</p>
        <p>
          <a href="http://www.byteabyte.net/utilidades/animatedcolorbarcontrol/animatedbarcontrol.zip">Adjunto
al control un proyecto de prueba</a> donde se puede ver enseguida lo que hace. No
lo he portado aún a .NET Compact Framework, pero no creo que sea difícil si alguien
lo quiere hacer.
</p>
        <p>
Espero que resulte interesante.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=05144578-aa81-4958-83f4-f15331f79f45" />
      </body>
      <title>Control .NET para animar el UI al realizar operaciones as&amp;iacute;ncronas</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,05144578-aa81-4958-83f4-f15331f79f45.aspx</guid>
      <link>http://www.byteabyte.net/2006/12/14/ControlNETParaAnimarElUIAlRealizarOperacionesAsiacutencronas.aspx</link>
      <pubDate>Thu, 14 Dec 2006 19:07:01 GMT</pubDate>
      <description>&lt;p&gt;
Cada vez es más común realizar operaciones asíncronas, gracias en parte a la llegada
de la Web, donde no podemos bloquear una aplicación simplemente porque esté haciendo
una operación de red que no sabemos el tiempo que va a tardar en concluir, como una
llamada a un servicio Web. Cuando realizamos una aplicación de este estilo, hay que
'mantener al usuario entretenido' de alguna forma, para que sepa que la operación
está teniendo lugar y que la aplicación no se ha quedado 'colgada', idealmente dando
la posibilidad de cancelar la tarea.
&lt;/p&gt;
&lt;p&gt;
Una manera de indicar que se está realizando una operación de este estilo que me gustó
hace tiempo fue la que implementa la ventana de inicio de sesión de SQL Server Management
Studio, donde se ve una pequeña barra que muestra un gradiente de colores animado
mientras se está validando al usuario.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img src="http://www.byteabyte.net/images/sqllogin.png"&gt; 
&lt;/p&gt;
&lt;p&gt;
Este UI es muy poco intrusivo y muestra claramente la intención. De hecho, en Outlook
2007 se ha copiado y se puede ver encima del panel de lectura de un mensaje cuando
Outlook tarda en abrir el mensaje por cualquier motivo.
&lt;/p&gt;
&lt;p&gt;
Siguiendo esta idea, cree un control hace tiempo para un proyecto, mostrando una barra
animada mientras se está accediendo a un servicio Web. Os dejo aquí la implementación
que realizé. Consiste en un control que expone tres propiedades ForeColor, MiddleColor
y BackColor. El control crea un gradiente entre los tres colores en toda su superficie,
quedando estéticamente bien cuando el tamaño del control es alargado y estrecho. Luego
expone dos métodos, Animate y StopAnimation que lo animan. La animación realizada
hace que el gradiente 'rebote' de lado a lado de la barra horizontal.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.byteabyte.net/utilidades/animatedcolorbarcontrol/animatedbarcontrol.zip"&gt;Adjunto
al control un proyecto de prueba&lt;/a&gt; donde se puede ver enseguida lo que hace. No
lo he portado aún a .NET Compact Framework, pero no creo que sea difícil si alguien
lo quiere hacer.
&lt;/p&gt;
&lt;p&gt;
Espero que resulte interesante.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=05144578-aa81-4958-83f4-f15331f79f45" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,05144578-aa81-4958-83f4-f15331f79f45.aspx</comments>
      <category>.NET</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=fa03b10d-82d0-4da1-a193-12254138d3c4</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,fa03b10d-82d0-4da1-a193-12254138d3c4.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,fa03b10d-82d0-4da1-a193-12254138d3c4.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=fa03b10d-82d0-4da1-a193-12254138d3c4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Hasta el momento hoy se han anunciado varios lanzamientos que pueden resultaros interesantes.
</p>
        <p>
Por un lado, <a href="http://www.microsoft.com/downloads/details.aspx?familyid=10cc340b-f857-4a14-83f5-25634c3bf043&amp;displaylang=en" target="_blank">ya
está disponible el redistribuible de .NET Framework 3.0</a>, incluyendo novedades
como WPF (Windows Presentation Foundation, ó Avalon), WCF (Windows Communication
Foundation, ó Indigo) y WWF (Windows Workflow Foundation).
</p>
        <p>
Por otro lado, <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=85E0C3CE-3FA1-453A-8CE9-AF6CA20946C3&amp;displaylang=en" target="_blank">también
está disponible la RC1</a> de <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=85E0C3CE-3FA1-453A-8CE9-AF6CA20946C3&amp;displaylang=en">SQL
Server Compact Edition</a> (aunque al instalarla aparece aún como SQL Server Everywhere).
</p>
        <p>
Además, <a href="http://www.microsoft.com/presspass/press/2006/nov06/11-062007OfficeRTMPR.mspx" target="_blank">Office
2007 ya es RTM</a> (versión final) y se ha anunciado en las subscripciones MSDN
que todos los subscriptores tendrán disponibles tanto Office 2007 como Windows Vista
para descargar en un plazo de 7 días después del anuncio, así que habrá que estar
al tanto.
</p>
        <p>
Finalmente, hoy empieza el TechEd en Barcelona (donde hay varias presentaciones sobre <a href="http://www.microsoft.com/windows/embedded/ce6launch/default.mspx" target="_blank">Windows
CE 6.0 que se lanzó la semana pasada</a>), con lo que probablemente se producirán
más anuncios interesantes a lo largo de los próximos días; pondremos la antena a ver
qué se cuece.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=fa03b10d-82d0-4da1-a193-12254138d3c4" />
      </body>
      <title>D&amp;iacute;a de lanzamientos de Microsoft</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,fa03b10d-82d0-4da1-a193-12254138d3c4.aspx</guid>
      <link>http://www.byteabyte.net/2006/11/07/DiacuteaDeLanzamientosDeMicrosoft.aspx</link>
      <pubDate>Tue, 07 Nov 2006 07:19:58 GMT</pubDate>
      <description>&lt;p&gt;
Hasta el momento hoy se han anunciado varios lanzamientos que pueden resultaros interesantes.
&lt;/p&gt;
&lt;p&gt;
Por un lado, &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=10cc340b-f857-4a14-83f5-25634c3bf043&amp;amp;displaylang=en" target="_blank"&gt;ya
está disponible el redistribuible de .NET Framework 3.0&lt;/a&gt;, incluyendo novedades
como WPF (Windows Presentation Foundation,&amp;nbsp;ó Avalon), WCF (Windows Communication
Foundation, ó Indigo) y WWF (Windows Workflow Foundation).
&lt;/p&gt;
&lt;p&gt;
Por otro lado, &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=85E0C3CE-3FA1-453A-8CE9-AF6CA20946C3&amp;amp;displaylang=en" target="_blank"&gt;también
está disponible la RC1&lt;/a&gt; de &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=85E0C3CE-3FA1-453A-8CE9-AF6CA20946C3&amp;amp;displaylang=en"&gt;SQL
Server Compact Edition&lt;/a&gt; (aunque al instalarla aparece aún como SQL Server Everywhere).
&lt;/p&gt;
&lt;p&gt;
Además, &lt;a href="http://www.microsoft.com/presspass/press/2006/nov06/11-062007OfficeRTMPR.mspx" target="_blank"&gt;Office
2007 ya es RTM&lt;/a&gt; (versión final)&amp;nbsp;y se ha anunciado en las subscripciones MSDN
que todos los subscriptores tendrán disponibles tanto Office 2007 como Windows Vista
para descargar en un plazo de 7 días después del anuncio, así que habrá que estar
al tanto.
&lt;/p&gt;
&lt;p&gt;
Finalmente, hoy empieza el TechEd en Barcelona (donde hay varias presentaciones sobre &lt;a href="http://www.microsoft.com/windows/embedded/ce6launch/default.mspx" target="_blank"&gt;Windows
CE 6.0 que se lanzó la semana pasada&lt;/a&gt;), con lo que probablemente se producirán
más anuncios interesantes a lo largo de los próximos días; pondremos la antena a ver
qué se cuece.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=fa03b10d-82d0-4da1-a193-12254138d3c4" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,fa03b10d-82d0-4da1-a193-12254138d3c4.aspx</comments>
      <category>.NET</category>
      <category>Microsoft</category>
      <category>Windows Mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=c693bdfc-c785-47af-8bf7-3b48e2ad5e65</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,c693bdfc-c785-47af-8bf7-3b48e2ad5e65.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,c693bdfc-c785-47af-8bf7-3b48e2ad5e65.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=c693bdfc-c785-47af-8bf7-3b48e2ad5e65</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img src="http://www.byteabyte.net/images/sqlce.png" align="right" /> Así es, la versión
compacta de SQL Server vuelve a cambiar de nombre, al parecer para quedarse con <strong>SQL
Compact Edition</strong>. <a href="http://blogs.msdn.com/stevelasker/archive/2006/10/31/sql-server-everywhere-gets-yet-another-name.aspx" target="_blank">Tenéis
todos los detalles en el blog de Steve Lasker</a>.
</p>
        <p>
Al parecer, estará disponible en pocas semanas la versión 3.1, cuya ventaja principal
es la de poder usarse en cualquier entorno, incluido Windows 2000. Ya están planificadas
también las demás versiones con cambios en el motor de sincronización y la posibilidad
de adaptarse a más situaciones.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=c693bdfc-c785-47af-8bf7-3b48e2ad5e65" />
      </body>
      <title>De SQL Server CE a SQL Mobile a SQL Everywhere a SQL Compact Edition (SQL CE)</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,c693bdfc-c785-47af-8bf7-3b48e2ad5e65.aspx</guid>
      <link>http://www.byteabyte.net/2006/11/01/DeSQLServerCEASQLMobileASQLEverywhereASQLCompactEditionSQLCE.aspx</link>
      <pubDate>Wed, 01 Nov 2006 09:23:39 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img src="http://www.byteabyte.net/images/sqlce.png" align="right"&gt; Así es, la versión
compacta de SQL Server vuelve a cambiar de nombre, al parecer para quedarse con &lt;strong&gt;SQL
Compact Edition&lt;/strong&gt;. &lt;a href="http://blogs.msdn.com/stevelasker/archive/2006/10/31/sql-server-everywhere-gets-yet-another-name.aspx" target="_blank"&gt;Tenéis
todos los detalles en el blog de Steve Lasker&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Al parecer, estará disponible en pocas semanas la versión 3.1, cuya ventaja principal
es la de poder usarse en cualquier entorno, incluido Windows 2000. Ya están planificadas
también las demás&amp;nbsp;versiones con cambios en el motor de sincronización y la posibilidad
de adaptarse a más situaciones.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=c693bdfc-c785-47af-8bf7-3b48e2ad5e65" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,c693bdfc-c785-47af-8bf7-3b48e2ad5e65.aspx</comments>
      <category>.NET</category>
      <category>Microsoft</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=690479f8-599a-46fa-b768-6208228cf438</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,690479f8-599a-46fa-b768-6208228cf438.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,690479f8-599a-46fa-b768-6208228cf438.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=690479f8-599a-46fa-b768-6208228cf438</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img height="100" src="http://www.byteabyte.net/images/2.0question.png" width="100" align="right" /> Si
habéis leído mi post anterior probablemente habréis comprobado mi tendencia a usar
en muchas ocasiones el camino más largo para llegar a un sitio dado.
</p>
        <p>
Como era de esperar, esto también funciona en .NET Compact Framework:
</p>
        <p>
 
</p>
        <p>
          <strong>System.Environment.OSVersion.Version</strong>
        </p>
        <p>
(un poco más facil que lo anterior ¿no?)
</p>
        <p>
 
</p>
        <p>
Esta propiedad devuelve un objeto de tipo Version que tiene sobrescrito el método
ToString para obtener el string de versión habitual (x.x.xxxx); aunque también da
acceso a los diferentes componentes de la versión.
</p>
        <p>
Como bonus, podéis examinar un poco más la clase Environment y veréis que podéis obtener
lo siguiente:
</p>
        <ul>
          <li>
Versión del runtime de .NET en ejecución - System.Environment.Version 
</li>
          <li>
Directorios especiales (necesarios para acceder a los directorios en caso de que se
ejecute la aplicación en equipos con diferentes idiomas, ej. "Startup" vs "Inicio")
- Enum System.Environment.SpecialFolder, usado con la función System.Environment.GetFolderPath 
</li>
          <li>
Tiempo que lleva el equipo encendido - System.Environment.TickCount</li>
        </ul>
        <p>
 
</p>
        <p>
Recordatorio final: Antes de hacer nada, mirar si ya está implementado, antes de hacer
nada, mirar si ya está implementado, antes de hacer nada, mirar si ya está implementado,
antes de hacer nada, mirar si ya está implementado, antes de hacer nada, mirar si
ya está implementado, antes de hacer nada, mirar si ya está implementado.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=690479f8-599a-46fa-b768-6208228cf438" />
      </body>
      <title>Otra forma (mejor) de obtener la versi&amp;oacute;n del sistema operativo usando .NET Compact Framework</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,690479f8-599a-46fa-b768-6208228cf438.aspx</guid>
      <link>http://www.byteabyte.net/2006/10/03/OtraFormaMejorDeObtenerLaVersioacutenDelSistemaOperativoUsandoNETCompactFramework.aspx</link>
      <pubDate>Tue, 03 Oct 2006 09:40:01 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img height="100" src="http://www.byteabyte.net/images/2.0question.png" width="100" align="right"&gt; Si
habéis leído mi post anterior probablemente habréis comprobado mi tendencia a usar
en muchas ocasiones el camino más largo para llegar a un sitio dado.
&lt;/p&gt;
&lt;p&gt;
Como era de esperar, esto también funciona en .NET Compact Framework:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;System.Environment.OSVersion.Version&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
(un poco más facil que lo anterior ¿no?)
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Esta propiedad devuelve un objeto de tipo Version que tiene sobrescrito el método
ToString para obtener el string de versión habitual (x.x.xxxx); aunque también da
acceso a los diferentes componentes de la versión.
&lt;/p&gt;
&lt;p&gt;
Como bonus, podéis examinar un poco más la clase Environment y veréis que podéis obtener
lo siguiente:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Versión del runtime de .NET en ejecución - System.Environment.Version 
&lt;li&gt;
Directorios especiales (necesarios para acceder a los directorios en caso de que se
ejecute la aplicación en equipos con diferentes idiomas, ej. "Startup" vs "Inicio")
- Enum System.Environment.SpecialFolder, usado con la función System.Environment.GetFolderPath 
&lt;li&gt;
Tiempo que lleva el equipo encendido - System.Environment.TickCount&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Recordatorio final: Antes de hacer nada, mirar si ya está implementado, antes de hacer
nada, mirar si ya está implementado, antes de hacer nada, mirar si ya está implementado,
antes de hacer nada, mirar si ya está implementado, antes de hacer nada, mirar si
ya está implementado, antes de hacer nada, mirar si ya está implementado.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=690479f8-599a-46fa-b768-6208228cf438" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,690479f8-599a-46fa-b768-6208228cf438.aspx</comments>
      <category>.NET</category>
      <category>Windows Mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=69e86bc9-c9f4-4794-8203-03198ce2c233</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,69e86bc9-c9f4-4794-8203-03198ce2c233.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,69e86bc9-c9f4-4794-8203-03198ce2c233.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=69e86bc9-c9f4-4794-8203-03198ce2c233</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 0px 0px 10px; border-right-width: 0px" height="100" src="http://www.byteabyte.net/images/1.0question.png" width="100" align="right" border="0" /> A
veces es necesario saber la versión del sistema operativo sobre la que está ejecutándose
una aplicación .NET para tomar alguna deción sencilla. El ejemplo más claro que me
he encontrado recientemente es el de usar la función <strong>Bitmap.Save</strong> en <strong>.NET
Compact Framework</strong> para guardar un Bitmap a disco. Si se lee la documentación
de esta función, se indica que se le puede pasar un parámetro de tipo ImageFormat
(un enum) diciéndole el tipo de imagen a guardar. Entre los diferentes valores del
enum se dispone de PNG por ejemplo. Pero si se intenta guardar un bitmap usando el
formato PNG en un dispositivo Windows Mobile 2003 (cuya base de sistema operativo
es Windows CE 4.2) obtendremos una excepción en tiempo de ejecución (NotSupportedException)
ya que en Windows CE 4.2 GDI no dispone de la posibilidad de tratar PNGs. En cambio,
si se ejecuta ese código en un dispositivo Windows Mobile 2005, basado en Windows
CE 5.0, funcionará sin problemas.
</p>
        <p>
Para evitar estos problemas basta con que detectemos la versión del sistema operativo
para escoger un formato de imagen u otro dependiendo del tipo de dispositivo que sea.
</p>
        <p>
Una forma de obtener rápidamente la versión del sistema operativo es mediante la función <strong>GetVersionEx</strong> del
API de Windows. Su declaración sería similar a lo siguiente:
</p>
        <p>
[DllImport("coredll.dll")]<br />
public static extern int GetVersionEx(byte[] lpVersionInfo); 
</p>
        <p>
          <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getversionex.asp" target="_blank">Si
se busca la documentación de esta función</a>, como parámetro se pide una estructura
de tipo <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/osversioninfo_str.asp" target="_blank">OSVERSIONINFO</a>.
En este caso (como en muchos otros en los que el API requiere estructuras) resulta
casi más fácil pasarle a la función como parámetro un array de bytes que luego la
función rellenará. Lo que necesitamos saber, eso si, es el tamaño del array a pasar,
que se puede ver en la documentación (sumando los tamaños de los campos de la estructura).
Luego, cuando la función rellene el array, se podrá leer fácilmente su contenido
usando la clase <strong>BitConverter</strong>, lo que facilita mucho las declaraciones
de p/invoke, ya que no hay que traducir las estructuras a .NET. Esta misma técnica
está usada en el ejemplo de <a href="http://www.byteabyte.net/utilidades/pingcf/default.aspx" target="_blank">Ping
para Compact Framework que podéis encontrar aquí</a>. 
</p>
        <p>
Teniendo en cuenta esto, el código para obtener la versión será entonces algo parecido
a: 
</p>
        <p>
byte[] lpVersionInfo = new byte[138]; 
</p>
        <p>
int resp = GetVersionEx(lpVersionInfo);<br />
if (resp == 1)<br />
{<br />
Int32 dwMajorVersion = BitConverter.ToInt32(lpVersionInfo, 4);<br />
Int32 dwMinorVersion = BitConverter.ToInt32(lpVersionInfo, 8);<br />
Int32 dwBuildNumber = BitConverter.ToInt32(lpVersionInfo, 12);<br />
Int32 dwPlatformId = BitConverter.ToInt32(lpVersionInfo, 16); 
</p>
        <p>
}
</p>
        <p>
Para un equipo con Windows Mobile 2003 el valor de dwMajorVersion será 4 y el de dwMinorVersion
será mayor o igual a 2 (Windows CE 4.2). En el caso de un equipo Windows Mobile 2005
la versión será mayor o igual a 5.0.
</p>
        <p>
Siguiendo el ejemplo anterior, la función Bitmap.Save pasándo como parámetro un formato
de tipo PNG, funcionará sólo para equipos con dwMajorVersion &gt;= 5.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=69e86bc9-c9f4-4794-8203-03198ce2c233" />
      </body>
      <title>Una forma de obtener la versi&amp;oacute;n del sistema operativo usando .NET Compact Framework</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,69e86bc9-c9f4-4794-8203-03198ce2c233.aspx</guid>
      <link>http://www.byteabyte.net/2006/09/25/UnaFormaDeObtenerLaVersioacutenDelSistemaOperativoUsandoNETCompactFramework.aspx</link>
      <pubDate>Mon, 25 Sep 2006 16:36:58 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 0px 0px 10px; border-right-width: 0px" height="100" src="http://www.byteabyte.net/images/1.0question.png" width="100" align="right" border="0"&gt; A
veces es necesario saber la versión del sistema operativo sobre la que está ejecutándose
una aplicación .NET para tomar alguna deción sencilla. El ejemplo más claro que me
he encontrado recientemente es el de usar la función &lt;strong&gt;Bitmap.Save&lt;/strong&gt; en &lt;strong&gt;.NET
Compact Framework&lt;/strong&gt; para guardar un Bitmap a disco. Si se&amp;nbsp;lee la documentación
de esta función, se&amp;nbsp;indica que se le puede pasar un parámetro de tipo ImageFormat
(un enum) diciéndole el tipo de imagen a guardar. Entre los diferentes valores del
enum se dispone de PNG por ejemplo. Pero si se intenta guardar un bitmap usando el
formato PNG en un dispositivo Windows Mobile 2003 (cuya base de sistema operativo
es Windows CE 4.2) obtendremos una excepción en tiempo de ejecución (NotSupportedException)
ya que en Windows CE 4.2 GDI no dispone de la posibilidad de tratar PNGs. En cambio,
si se ejecuta ese código en un dispositivo Windows Mobile 2005, basado en Windows
CE 5.0, funcionará sin problemas.
&lt;/p&gt;
&lt;p&gt;
Para evitar estos problemas basta con que detectemos la versión del sistema operativo
para escoger un formato de imagen u otro dependiendo del tipo de dispositivo que sea.
&lt;/p&gt;
&lt;p&gt;
Una forma de obtener rápidamente la versión del sistema operativo es mediante la función &lt;strong&gt;GetVersionEx&lt;/strong&gt; del
API de Windows. Su declaración sería similar a lo siguiente:
&lt;/p&gt;
&lt;p&gt;
[DllImport("coredll.dll")]&lt;br&gt;
public static extern int GetVersionEx(byte[] lpVersionInfo); 
&lt;p&gt;
&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getversionex.asp" target="_blank"&gt;Si
se busca la documentación de esta función&lt;/a&gt;, como parámetro se pide una estructura
de tipo &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/osversioninfo_str.asp" target="_blank"&gt;OSVERSIONINFO&lt;/a&gt;.
En este caso (como en muchos otros en los que el API requiere estructuras) resulta
casi más fácil pasarle a la función como parámetro un array de bytes que luego la
función rellenará. Lo que necesitamos saber, eso si, es el tamaño del array a pasar,
que se puede ver en la documentación (sumando los tamaños de los campos de la estructura).
Luego, cuando la función rellene el array, se podrá leer fácilmente&amp;nbsp;su contenido
usando&amp;nbsp;la clase &lt;strong&gt;BitConverter&lt;/strong&gt;, lo que facilita mucho las declaraciones
de p/invoke, ya que no hay que traducir las estructuras a .NET. Esta misma técnica
está usada en el ejemplo de &lt;a href="http://www.byteabyte.net/utilidades/pingcf/default.aspx" target="_blank"&gt;Ping
para Compact Framework que podéis encontrar aquí&lt;/a&gt;. 
&lt;p&gt;
Teniendo en cuenta esto, el código para obtener la versión será entonces algo parecido
a: 
&lt;p&gt;
byte[] lpVersionInfo = new byte[138]; 
&lt;p&gt;
int resp = GetVersionEx(lpVersionInfo);&lt;br&gt;
if (resp == 1)&lt;br&gt;
{&lt;br&gt;
Int32 dwMajorVersion = BitConverter.ToInt32(lpVersionInfo, 4);&lt;br&gt;
Int32 dwMinorVersion = BitConverter.ToInt32(lpVersionInfo, 8);&lt;br&gt;
Int32 dwBuildNumber = BitConverter.ToInt32(lpVersionInfo, 12);&lt;br&gt;
Int32 dwPlatformId = BitConverter.ToInt32(lpVersionInfo, 16); 
&lt;/p&gt;
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
Para un equipo con Windows Mobile 2003 el valor de dwMajorVersion será 4 y el de dwMinorVersion
será mayor o igual a 2 (Windows CE 4.2). En el caso de un equipo Windows Mobile 2005
la versión será mayor o igual a 5.0.
&lt;/p&gt;
&lt;p&gt;
Siguiendo el ejemplo anterior, la función Bitmap.Save pasándo como parámetro un formato
de tipo PNG, funcionará sólo para equipos con dwMajorVersion &amp;gt;= 5.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=69e86bc9-c9f4-4794-8203-03198ce2c233" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,69e86bc9-c9f4-4794-8203-03198ce2c233.aspx</comments>
      <category>.NET</category>
      <category>Windows Mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=7c5d225f-7546-4b92-a00a-6ba8f8c7084e</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,7c5d225f-7546-4b92-a00a-6ba8f8c7084e.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,7c5d225f-7546-4b92-a00a-6ba8f8c7084e.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=7c5d225f-7546-4b92-a00a-6ba8f8c7084e</wfw:commentRss>
      <title>Medir el tiempo con precisión en Pocket PC con .NET Compact Framework, QueryPerformanceFrequency y QueryPerformanceCounter</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,7c5d225f-7546-4b92-a00a-6ba8f8c7084e.aspx</guid>
      <link>http://www.byteabyte.net/2006/04/24/MedirElTiempoConPrecisi%c3%b3nEnPocketPCConNETCompactFrameworkQueryPerformanceFrequencyYQueryPerformanceCounter.aspx</link>
      <pubDate>Mon, 24 Apr 2006 17:35:24 GMT</pubDate>
      <description>&lt;img align="right" src="http://www.byteabyte.net/content/binary/stopwatch_100px.jpg" border="0" /&gt; 
&lt;p&gt;
En ocasiones es necesario medir el tiempo que transcurre en completarse alguna operación
en nuestro código, ya sea para optimizar su rendimiento o por cualquier otra razón.
Para ello, en ciertas situaciones se puede utilizar la propiedad 'Now' de la clase
DateTime, que devuelve una instancia de DateTime con la fecha y hora actuales. Se
toma este valor en dos puntos diferentes del código y se restan para obtener el tiempo
transcurrido.
&lt;/p&gt;
&lt;p&gt;
Esta aproximación sólo será válida si la duración de la operación a realizar es relativamente
larga, pero, en muchas ocasiones, la precisión ofrecida por este método no será suficiente
y obtendremos que el tiempo transcurrido es 0, lo que no da mucha información. Para
estos casos se usan habitualmente las funciones &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecoreos5/html/wce50lrfQueryPerformanceFrequency.asp" target="_blank"&gt;QueryPerformanceFrequency&lt;/a&gt; y &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecoreos5/html/wce50lrfQueryPerformanceCounter.asp" target="_blank"&gt;QueryPerformaceCounter&lt;/a&gt; del
API de Windows. Si se realiza una búsqueda sobre estas funciones en cualquier buscador,
se verán cientos de artículos explicando su funcionamiento, con lo que no voy a extenderme
aquí en su uso.
&lt;/p&gt;
&lt;p&gt;
Lo que si puede resultar interesante en este caso es saber que estas funciones también
se pueden utilizar en Windows CE, y, por tanto, están disponibles en Pocket PC y SmartPhone.
Para utilizarlas hay que declararlas mediante P/Invoke de la siguiente forma:
&lt;/p&gt;
&lt;p&gt;
[DllImport("coredll")]&lt;br /&gt;
private static extern bool QueryPerformanceCounter(out long lpPerformanceCount);
&lt;/p&gt;
&lt;p&gt;
[DllImport("coredll")]&lt;br /&gt;
private static extern bool QueryPerformanceFrequency(out long lpFrequency);
&lt;/p&gt;
&lt;p&gt;
Como se ve están definidas en la librería coredll.dll que contiene casi todo el API
nativo de Windows CE.
&lt;/p&gt;
&lt;p&gt;
Para mostrar su uso, se adjunta un ejemplo (PerformanceMeter.zip) que contiene una
solución de Visual Studio 2005 para Windows Mobile 2005 Pocket PC, con lo que es necesario
disponer del &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=83A52AF2-F524-4EC5-9155-717CBE5D25ED&amp;displaylang=en" target="_blank"&gt;SDK
de Pocket PC 2005&lt;/a&gt; para poder probarlo tal cual está (si no se dispone de ese SDK,
se puede crear una solución en Compact Framework 2.0 para Pocket PC 2003 y añadir
las clases a ese proyecto para utilizarlas). Esta solución contiene 2 proyectos. El
primero, llamado PerformanceMeter, contiene tres clases cuyo objetivo es facilitar
la realización de pruebas de rendimiento a lo largo del código de manera cómoda y
reutilizable. El proceso sería el siguiente:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Crear una instancia de la clase PerformanceMeter&lt;/li&gt;
&lt;li&gt;
Crear un nuevo test de rendimiento mediante la llamada a PerformanceMeter.NewTest(),
que devuelve una instancia de la clase PerformanceTest. Esta instancia es almacenada
automáticamente en una colección interna de PerformanceMeter.&lt;/li&gt;
&lt;li&gt;
En el punto en el que se quiera iniciar el test, se hace una llamada a la función
Start() de la instancia de la clase PerformanceTest obtenida en el paso anterior.&lt;/li&gt;
&lt;li&gt;
Cuando se quiera finalizar el test, se hace una llamada a la función Stop() de la
misma instancia anterior.&lt;/li&gt;
&lt;li&gt;
Para ver los resultados de los test realizados hay que consultar la propiedad PerformanceTests
que contiene la colección de pruebas realizadas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
El objetivo de estas clases es el de poder realizar varios tests de rendimiento a
lo largo de las pruebas de una aplicación dada para posteriormente poder crear un
informe de cómo han resultado las pruebas, de la manera menos intrusiva para el código
posible. Cada test contiene la siguiente información:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Nombre y descripción del test, útil si se va a disponer de varios tests y se quiere
sacar un listado de ellos.&lt;/li&gt;
&lt;li&gt;
Número de iteraciones que realiza el test de un código determinado. Este valor sólo
es una propiedad que se usa para calcular una media, de manera que si se entre la
ejecución de la función Start y la función Stop el código realiza 10 iteraciones,
la podemos establecer con ese valor para que devuelva la media por iteración.&lt;/li&gt;
&lt;li&gt;
Fecha y hora de inicio y fin del test, obtenidos con DateTime.Now. Hay que tener en
cuenta que los contadores de precisión no devuelven la hora.&lt;/li&gt;
&lt;li&gt;
Tiempo de ejecución del test en milisegundos obtenidos con la resta de los anteriores.&lt;/li&gt;
&lt;li&gt;
Duración media por iteración en alta precisión (propiedad AverageDurationPerIteration
- tipo double), si se miden varias iteraciones.&lt;/li&gt;
&lt;li&gt;
Tiempo de ejecución del test en alta precisión (propiedad TotalDuration - tipo Double)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Como ejemplo del uso de estas clases está el segundo proyecto incluido en la solución,
PerformanceTests. Este proyecto presenta un formulario para Pocket PC y un menú, Tests,
que hace, a modo de ejemplo, dos tests, uno de concatenación de strings y otro de
búsquedas en un documento XML.
&lt;/p&gt;
&lt;p&gt;
El primer test compara lo que tarda el código en concatenar 2000 cadenas con y sin
usar la clase StringBuilder, y el otro test mide lo que tarda el código en acceder
un nodo de un documento XML con XmlDocument y lo compara con lo que se tarda en acceder
al mismo nodo usando XmlTextReader.
&lt;/p&gt;
&lt;p&gt;
Cuando finalizan los tests, muestra en la ventana los tiempos medidos.
&lt;/p&gt;
&lt;p&gt;
En este ejemplo, para que los resultados sean más reales, conviene ejecutar cada test
dos veces y usar los resultados de la segunda ejecución, ya que la primera vez que
se ejecutan cada uno de ellos hay un tiempo de carga e instanciación de clases que
hacen que el primer test sea mucho más lento que el segundo.
&lt;/p&gt;
&lt;p&gt;
Espero que resulte interesante.
&lt;/p&gt;
&lt;br /&gt;
&lt;a href="http://www.byteabyte.net/content/binary/PerformanceMeter.zip"&gt;PerformanceMeter.zip
(63,17 KB)&lt;/a&gt;&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=7c5d225f-7546-4b92-a00a-6ba8f8c7084e" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,7c5d225f-7546-4b92-a00a-6ba8f8c7084e.aspx</comments>
      <category>.NET</category>
      <category>Windows Mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=0c9dd0f0-85df-4e9d-a441-1b09b3f394c4</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,0c9dd0f0-85df-4e9d-a441-1b09b3f394c4.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,0c9dd0f0-85df-4e9d-a441-1b09b3f394c4.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0c9dd0f0-85df-4e9d-a441-1b09b3f394c4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://www.byteabyte.net/content/binary/number1_2.jpg" align="right" border="0" />
        <p>
Recientemente he estado leyendo varios artículos y blogs que hablan sobre el patrón <b>singleton</b>.
Su objetivo es asegurar que, dada una clase concreta, se dispone de <b>una única instancia</b> de
ella en una aplicación.
</p>
        <p>
La referencia principal sobre patrones es el libro “<a target="_blank" href="http://www.amazon.com/gp/product/0201633612/104-4106559-9208732?v=glance&amp;n=283155">Design
Patterns: Elements of Reusable Object-Oriented Software</a>” donde se explica cómo
funciona de manera genérica.
</p>
        <p>
La gente sigue muchas veces al pie de la letra el libro y eso puede hacer que no se
tengan en cuenta detalles del lenguaje o la plataforma que se esté utilizando y se
llegue a situaciones que puedan complicarse, generándose errores en el código difíciles
de detectar.
</p>
        <p>
En el caso de <b>.NET</b>, hay una discusión bastante a fondo sobre el tema en el
artículo “<a target="_blank" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/singletondespatt.asp">Exploring
the Singleton Design Pattern</a>”, donde se tienen en cuenta las ventajas del entorno
concreto, evitando así muchos de los problemas que pueden darse si se intenta hacer
una implementación directa según se copia el código del libro.
</p>
        <p>
Teniendo esto en mente, en C# el código para un Singleton es bastante sencillo:
</p>
        <p>
public class MiClase<br />
{<br />
 private MiClase() {}
</p>
        <p>
 public static readonly MiClase Instance = new MiClase();
</p>
        <p>
 public void HazAlgo()<br />
 {<br />
  …<br />
 }<br />
}
</p>
        <p>
Como se ve, la implementación básica consta de 2 líneas de código, un constructor
privado y una variable estática (Instance en este caso) que da acceso a la instancia
única. Para entender los detalles de por qué esto funciona así, leer con detalle el
artículo mencionado arriba.<br />
A la instancia (única) de la clase se accederá desde el código cliente de la siguiente
forma:
</p>
        <p>
…<br />
MiClase.Instance.HazAlgo();<br />
…
</p>
        <p>
Bajo mi punto de vista, esto queda muy limpio y sencillo de usar.
</p>
        <p>
Los usos que se le pueden dar al Singleton son múltiples, como por ejemplo clases
que almacenan información de configuración de la aplicación, clases para hacer logs,
etc. Eso sí, ojo con su uso en aplicaciones web ya que podéis encontraros con problemas
de concurrencia si no se tiene cuidado.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=0c9dd0f0-85df-4e9d-a441-1b09b3f394c4" />
      </body>
      <title>Patrón Singleton en .NET</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,0c9dd0f0-85df-4e9d-a441-1b09b3f394c4.aspx</guid>
      <link>http://www.byteabyte.net/2006/04/19/Patr%c3%b3nSingletonEnNET.aspx</link>
      <pubDate>Wed, 19 Apr 2006 09:11:37 GMT</pubDate>
      <description>&lt;img src="http://www.byteabyte.net/content/binary/number1_2.jpg" align="right" border="0" /&gt; 
&lt;p&gt;
Recientemente he estado leyendo varios artículos y blogs que hablan sobre el patrón &lt;b&gt;singleton&lt;/b&gt;.
Su objetivo es asegurar que, dada una clase concreta, se dispone de &lt;b&gt;una única instancia&lt;/b&gt; de
ella en una aplicación.
&lt;/p&gt;
&lt;p&gt;
La referencia principal sobre patrones es el libro “&lt;a target="_blank" href="http://www.amazon.com/gp/product/0201633612/104-4106559-9208732?v=glance&amp;amp;n=283155"&gt;Design
Patterns: Elements of Reusable Object-Oriented Software&lt;/a&gt;” donde se explica cómo
funciona de manera genérica.
&lt;/p&gt;
&lt;p&gt;
La gente sigue muchas veces al pie de la letra el libro y eso puede hacer que no se
tengan en cuenta detalles del lenguaje o la plataforma que se esté utilizando y se
llegue a situaciones que puedan complicarse, generándose errores en el código difíciles
de detectar.
&lt;/p&gt;
&lt;p&gt;
En el caso de &lt;b&gt;.NET&lt;/b&gt;, hay una discusión bastante a fondo sobre el tema en el
artículo “&lt;a target="_blank" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/singletondespatt.asp"&gt;Exploring
the Singleton Design Pattern&lt;/a&gt;”, donde se tienen en cuenta las ventajas del entorno
concreto, evitando así muchos de los problemas que pueden darse si se intenta hacer
una implementación directa según se copia el código del libro.
&lt;/p&gt;
&lt;p&gt;
Teniendo esto en mente, en C# el código para un Singleton es bastante sencillo:
&lt;/p&gt;
&lt;p&gt;
public class MiClase&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;private MiClase() {}
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;public static readonly MiClase Instance = new MiClase();
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;public void HazAlgo()&lt;br&gt;
&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;…&lt;br&gt;
&amp;nbsp;}&lt;br&gt;
}
&lt;/p&gt;
&lt;p&gt;
Como se ve, la implementación básica consta de 2 líneas de código, un constructor
privado y una variable estática (Instance en este caso) que da acceso a la instancia
única. Para entender los detalles de por qué esto funciona así, leer con detalle el
artículo mencionado arriba.&lt;br&gt;
A la instancia (única) de la clase se accederá desde el código cliente de la siguiente
forma:
&lt;/p&gt;
&lt;p&gt;
…&lt;br&gt;
MiClase.Instance.HazAlgo();&lt;br&gt;
…
&lt;/p&gt;
&lt;p&gt;
Bajo mi punto de vista, esto queda muy limpio y sencillo de usar.
&lt;/p&gt;
&lt;p&gt;
Los usos que se le pueden dar al Singleton son múltiples, como por ejemplo clases
que almacenan información de configuración de la aplicación, clases para hacer logs,
etc. Eso sí, ojo con su uso en aplicaciones web ya que podéis encontraros con problemas
de concurrencia si no se tiene cuidado.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=0c9dd0f0-85df-4e9d-a441-1b09b3f394c4" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,0c9dd0f0-85df-4e9d-a441-1b09b3f394c4.aspx</comments>
      <category>.NET</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=3f32bd1a-ad53-4ebf-a69b-49ec58a8da69</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,3f32bd1a-ad53-4ebf-a69b-49ec58a8da69.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,3f32bd1a-ad53-4ebf-a69b-49ec58a8da69.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=3f32bd1a-ad53-4ebf-a69b-49ec58a8da69</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=118771531&amp;Culture=es-ES" target="_blank">Acude
al taller que se celebra el día 27 de abril de 2006 en Barcelona</a>.
</p>
        <p>
Yo participo como ponente en una de las sesiones.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=3f32bd1a-ad53-4ebf-a69b-49ec58a8da69" />
      </body>
      <title>MSDN Taller: Desarrollo para dispositivos Móviles con Windows Mobile 5.0</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,3f32bd1a-ad53-4ebf-a69b-49ec58a8da69.aspx</guid>
      <link>http://www.byteabyte.net/2006/04/17/MSDNTallerDesarrolloParaDispositivosM%c3%b3vilesConWindowsMobile50.aspx</link>
      <pubDate>Mon, 17 Apr 2006 06:50:16 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=118771531&amp;amp;Culture=es-ES" target="_blank"&gt;Acude
al taller que se celebra el día 27 de abril de 2006 en Barcelona&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Yo participo como ponente en una de las sesiones.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=3f32bd1a-ad53-4ebf-a69b-49ec58a8da69" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,3f32bd1a-ad53-4ebf-a69b-49ec58a8da69.aspx</comments>
      <category>.NET</category>
      <category>Eventos</category>
      <category>Microsoft</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=243db698-7b03-4606-abef-9bf67fa59bd7</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,243db698-7b03-4606-abef-9bf67fa59bd7.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,243db698-7b03-4606-abef-9bf67fa59bd7.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=243db698-7b03-4606-abef-9bf67fa59bd7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Aunque se puede usar .NET Compact Framework 2.0 y SQL Mobile 2005 en Pocket PC 2003
(basado en Windows CE 4.2) no hay soporte en otros dispositivos Windows CE 4.2, por
ejemplo en los dispositivos industriales.
</p>
        <p>
Este hecho ha recibido quejas desde distintos frentes (MVPs, clientes, ...) y, con
la llegada de .NET Compact Framework 2.0 SP1 esto se va a solucionar, lo que alegrará
a más de uno.
</p>
        <p>
          <a target="_blank" href="http://blogs.msdn.com/mikehall/archive/2006/03/02/542508.aspx">Hay
más detalles en el blog de Mike Hall</a>.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=243db698-7b03-4606-abef-9bf67fa59bd7" />
      </body>
      <title>Soporte para Compact Framework 2.0 y SQL Mobile 2005 en Windows CE .NET 4.2</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,243db698-7b03-4606-abef-9bf67fa59bd7.aspx</guid>
      <link>http://www.byteabyte.net/2006/03/03/SoporteParaCompactFramework20YSQLMobile2005EnWindowsCENET42.aspx</link>
      <pubDate>Fri, 03 Mar 2006 07:42:35 GMT</pubDate>
      <description>&lt;p&gt;
Aunque se puede usar .NET Compact Framework 2.0 y SQL Mobile 2005 en Pocket PC 2003
(basado en Windows CE 4.2) no hay soporte en otros dispositivos Windows CE 4.2, por
ejemplo en los dispositivos industriales.
&lt;/p&gt;
&lt;p&gt;
Este hecho ha recibido quejas desde distintos frentes (MVPs, clientes, ...) y, con
la llegada de .NET Compact Framework 2.0 SP1 esto se va a solucionar, lo que alegrará
a más de uno.
&lt;/p&gt;
&lt;p&gt;
&lt;a target="_blank" href="http://blogs.msdn.com/mikehall/archive/2006/03/02/542508.aspx"&gt;Hay
más detalles en el blog de Mike Hall&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=243db698-7b03-4606-abef-9bf67fa59bd7" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,243db698-7b03-4606-abef-9bf67fa59bd7.aspx</comments>
      <category>.NET</category>
      <category>Microsoft</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=e89c5aa6-736a-4bbd-926f-e24d324f94ae</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,e89c5aa6-736a-4bbd-926f-e24d324f94ae.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,e89c5aa6-736a-4bbd-926f-e24d324f94ae.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=e89c5aa6-736a-4bbd-926f-e24d324f94ae</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Ya está disponible la <a target="_blank" href="http://msdn.microsoft.com/library/?url=/library/en-us/dnpag2/html/EntLib2.asp">biblioteca
de componentes Microsoft Enterprise Library para .NET Framework 2.0</a>. Para aquellos
que no sepan de qué va porque no hayan trabajado con las versiones anteriores, son
un conjunto de componentes que implementan 'buenas prácticas' de código en tareas
comunes de programación con .NET (acceso a datos, logs, gestión de excepciones, etc).
Desde al punto de vista práctico son un buen paquete de componentes gratuitos que
funcionan bien y que te ahorrarán mucho tiempo de desarrollo con .NET ;-)
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=e89c5aa6-736a-4bbd-926f-e24d324f94ae" />
      </body>
      <title>Microsoft Enterprise Library para .NET Framework 2.0 disponible</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,e89c5aa6-736a-4bbd-926f-e24d324f94ae.aspx</guid>
      <link>http://www.byteabyte.net/2006/01/23/MicrosoftEnterpriseLibraryParaNETFramework20Disponible.aspx</link>
      <pubDate>Mon, 23 Jan 2006 19:05:03 GMT</pubDate>
      <description>&lt;p&gt;
Ya está disponible la &lt;a target="_blank" href="http://msdn.microsoft.com/library/?url=/library/en-us/dnpag2/html/EntLib2.asp"&gt;biblioteca
de componentes Microsoft Enterprise Library para .NET Framework 2.0&lt;/a&gt;. Para aquellos
que no sepan de qué va porque no hayan trabajado con las versiones anteriores, son
un conjunto de componentes que implementan 'buenas prácticas' de código en tareas
comunes de programación con .NET (acceso a datos, logs, gestión de excepciones, etc).
Desde al punto de vista práctico son un buen paquete de componentes gratuitos que
funcionan bien y que te ahorrarán mucho tiempo de desarrollo con .NET ;-)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=e89c5aa6-736a-4bbd-926f-e24d324f94ae" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,e89c5aa6-736a-4bbd-926f-e24d324f94ae.aspx</comments>
      <category>.NET</category>
      <category>Microsoft</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=eacd2546-5f13-4fa8-808c-11067caf345c</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,eacd2546-5f13-4fa8-808c-11067caf345c.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,eacd2546-5f13-4fa8-808c-11067caf345c.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=eacd2546-5f13-4fa8-808c-11067caf345c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://blogs.msdn.com/brada/archive/2005/11/18/494283.aspx" target="_blank">Según
publica Brad Adams, ya está disponible una versión preliminar de WinFX que funciona
con la versión final de Visual Studio 2005</a>.
</p>
        <p>
Sigue siendo una versión pre-beta, pero al menos permite probar Indigo y Avalon en
la versión final del entorno de desarrollo.
</p>
        <p>
Es necesario descargar el <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E5376297-DA10-4FC3-967D-38C96F767FC4&amp;displaylang=en" target="_blank">WinFX
runtime</a>, el <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=0A118D5F-21E7-4A3E-82D9-F30C6CE3F63D&amp;displaylang=en" target="_blank">SDK
de WinFX</a> (OJO, 1Gb) y los componentes de WinFX para Visual Studio 2005 (el link
para este componente que hay ahora en el blog de Brad no funciona, supongo que funcionará
en breve).
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=eacd2546-5f13-4fa8-808c-11067caf345c" />
      </body>
      <title>Por fin está disponible el CTP de Noviembre de 2005 de WinFX que funciona en Visual Studio 2005 RTM</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,eacd2546-5f13-4fa8-808c-11067caf345c.aspx</guid>
      <link>http://www.byteabyte.net/2005/11/18/PorFinEst%c3%a1DisponibleElCTPDeNoviembreDe2005DeWinFXQueFuncionaEnVisualStudio2005RTM.aspx</link>
      <pubDate>Fri, 18 Nov 2005 18:44:39 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://blogs.msdn.com/brada/archive/2005/11/18/494283.aspx" target="_blank"&gt;Según
publica Brad Adams, ya está disponible una versión preliminar de WinFX que funciona
con la versión final de Visual Studio 2005&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Sigue siendo una versión pre-beta, pero al menos permite probar Indigo y Avalon en
la versión final del entorno de desarrollo.
&lt;/p&gt;
&lt;p&gt;
Es necesario descargar el &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E5376297-DA10-4FC3-967D-38C96F767FC4&amp;amp;displaylang=en" target="_blank"&gt;WinFX
runtime&lt;/a&gt;, el &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=0A118D5F-21E7-4A3E-82D9-F30C6CE3F63D&amp;amp;displaylang=en" target="_blank"&gt;SDK
de WinFX&lt;/a&gt; (OJO, 1Gb) y los componentes de WinFX para Visual Studio 2005 (el link
para este componente que hay ahora en el blog de Brad no funciona, supongo que funcionará
en breve).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=eacd2546-5f13-4fa8-808c-11067caf345c" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,eacd2546-5f13-4fa8-808c-11067caf345c.aspx</comments>
      <category>.NET</category>
      <category>Microsoft</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=7a0b74d6-90cb-4a24-86bc-b752ea9c2cdb</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,7a0b74d6-90cb-4a24-86bc-b752ea9c2cdb.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,7a0b74d6-90cb-4a24-86bc-b752ea9c2cdb.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=7a0b74d6-90cb-4a24-86bc-b752ea9c2cdb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Con la llegada de la versión 2.0 de .NET Compact Framework, <a target="_blank" href="http://www.byteabyte.net/blog/PermaLink,guid,793421ca-b355-4a67-bc58-fba16203da8f.aspx">que
se puede instalar en cualquier dispositivo Windows Mobile .NET o Windows Mobile 5.0</a>,
es posible incluir archivos de configuración de manera similar a como se hace
en aplicaciones de escritorio basadas en Windows Forms.
</p>
        <p>
Para el que no lo sepa, si se tiene un ejecutable llamado "app.exe", su archivo de
configuración correspondiente se llamaría "app.exe.config" y, si está
presente, el runtime de .NET lo leerá y procesará.
</p>
        <p>
Una de las cosas que se pueden configurar en este archivo es la versión de .NET
con la que se quiere ejecutar el programa. Esto permite fijar una versión de
.NET a una aplicación dada y permite también que aplicaciones hechas con
la versión 1.0 se ejecuten con la versión 2.0, aprovechando automáticamente
sus ventajas.
</p>
        <p>
          <a target="_blank" href="http://blogs.msdn.com/davidklinems/archive/2005/11/09/491113.aspx">David
Kline explica en su blog</a> cómo hacer este archivo de configuración. Hay
que tener en cuenta que 'en principio' no debería haber ningún problema
en realizar esta modificación, pero, como siempre, la única manera de saberlo
es probando...
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=7a0b74d6-90cb-4a24-86bc-b752ea9c2cdb" />
      </body>
      <title>Ejecutar aplicaciones hechas con .NET Compact Framework 1.0 con el runtime de la versión 2.0</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,7a0b74d6-90cb-4a24-86bc-b752ea9c2cdb.aspx</guid>
      <link>http://www.byteabyte.net/2005/11/14/EjecutarAplicacionesHechasConNETCompactFramework10ConElRuntimeDeLaVersi%c3%b3n20.aspx</link>
      <pubDate>Mon, 14 Nov 2005 17:01:23 GMT</pubDate>
      <description>&lt;p&gt;
Con la llegada de la versi&amp;#243;n 2.0 de .NET Compact Framework, &lt;a target="_blank" href="http://www.byteabyte.net/blog/PermaLink,guid,793421ca-b355-4a67-bc58-fba16203da8f.aspx"&gt;que
se puede instalar en cualquier dispositivo Windows Mobile .NET o Windows Mobile 5.0&lt;/a&gt;,
es posible incluir archivos de configuraci&amp;#243;n de manera similar a como se hace
en aplicaciones de escritorio basadas en Windows Forms.
&lt;/p&gt;
&lt;p&gt;
Para el que no lo sepa, si se tiene un ejecutable llamado "app.exe", su archivo de
configuraci&amp;#243;n correspondiente se llamar&amp;#237;a "app.exe.config" y, si est&amp;#225;
presente, el runtime de .NET lo leer&amp;#225; y procesar&amp;#225;.
&lt;/p&gt;
&lt;p&gt;
Una de las cosas que se pueden configurar en este archivo es la versi&amp;#243;n de .NET
con la que se quiere ejecutar el programa. Esto permite fijar una versi&amp;#243;n de
.NET a una aplicaci&amp;#243;n dada y permite tambi&amp;#233;n que aplicaciones hechas con
la versi&amp;#243;n 1.0 se ejecuten con la versi&amp;#243;n 2.0, aprovechando autom&amp;#225;ticamente
sus ventajas.
&lt;/p&gt;
&lt;p&gt;
&lt;a target="_blank" href="http://blogs.msdn.com/davidklinems/archive/2005/11/09/491113.aspx"&gt;David
Kline explica en su blog&lt;/a&gt; c&amp;#243;mo hacer este archivo de configuraci&amp;#243;n. Hay
que tener en cuenta que 'en principio' no deber&amp;#237;a haber ning&amp;#250;n problema
en realizar esta modificaci&amp;#243;n, pero, como siempre, la &amp;#250;nica manera de saberlo
es probando...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=7a0b74d6-90cb-4a24-86bc-b752ea9c2cdb" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,7a0b74d6-90cb-4a24-86bc-b752ea9c2cdb.aspx</comments>
      <category>.NET</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=5a183527-cba5-4c03-851a-d9f86a9ee124</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,5a183527-cba5-4c03-851a-d9f86a9ee124.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,5a183527-cba5-4c03-851a-d9f86a9ee124.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5a183527-cba5-4c03-851a-d9f86a9ee124</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
He estado probando un poco el desarrollo de aplicaciones Web con <a href="http://www.asp.net/">ASP.NET </a>2.0
y una de las cosas que más me gustan es el poder usar las capacidades de <strong>DataBinding</strong> de
los controles para vincularlas a <em>objetos</em> en lugar de a bases de datos.
</p>
        <p>
Una de las cosas que quería probar era ver si podía vincular un control
de tipo GridView a unos objetos que creé hace tiempo que obtienen leen RSS. Estos
objetos conectan con un documento RSS cualquiera y obtienen sus elementos en una colección,
en el número que se le pida (por ejemplo los 3 últimos elementos).
</p>
        <p>
Teniendo en cuenta esto, mi primera prueba fue intentar usar el asistente que trae
Visual Studio 2005 para vincular controles a datos y seleccionar la plantilla de <strong>ObjectDataSource</strong>.
Este asistente pide que se seleccione la clase que contiene los objetos a vincular,
el nombre del método a llamar en esa clase y sus parámetros para obtener
los datos que se mostrarán en el control deseado.
</p>
        <p>
Esto aparentemente funciona sin más pero al intentar ejecutar la página
apareció la excepción <em>'No parameterless constructor defined for this
object</em>'. En efecto, mi objeto no tiene un constructor por omisión sin parámetros.
Mi objeto en concreto funciona pasándole unos parámetros al constructor
que indican dónde está el documento RSS, el nombre de usuario y contraseña
si son necesarios, etc. Una vez construida la instancia, se puede llamar al método
que carga los datos.
</p>
        <p>
Buscando en las propiedades del control proporcionado por Visual Studio no encontré
ninguna forma de pasarle una instancia. Leyendo posteriormente la documentación,
se indica que cuando se usa este origen de datos, el objeto ObjectDataSource crea
una nueva instancia del componente que conecta a los datos llamando a su constructor
sin parámetros. Después llama al método dado con los parámetros
que se le pasen. Esto no me vale para mi objeto. Por otro lado parece bastante poco
flexible ya que (al menos en mi caso) en la mayoría de los objetos que conectan
a datos, antes de poder conectar establezco valores en propiedades que luego las instancias
de los objetos usan para trabajar. Con el modelo planteado eso tampoco funcionaría.
</p>
        <p>
Pero como no me gusta darme por vencido tan fácilmente, probé a usar el
objeto ObjectDataSource directamente en el código de la página y ¡bingo!,
existe un evento al que nos podemos suscribir para modificar la instancia que ObjectDataSource
utiliza. El proceso es el siguiente:
</p>
        <p>
• Crear una instancia de ObjectDataSource indicándole la clase 
que ha de usar y el nombre del método a llamar que traerá los datos.<br />
• Indicarle el nombre y valores de los parámetros que necesita el
método anterior para traer los datos.<br />
• Crear un handler para el evento ObjectDataSource.ObjectCreating. En este
handler se tiene acceso a la instancia que se va a usar, pudiendo sustituirla.<br />
• Usar la instancia que hayamos creado de ObjectDataSource como origen
de datos del control que se vaya a usar.<br />
• Llamar a DataBind en el control, esto hará que se ejecute el método
que conecta con los datos
</p>
        <p>
En código C# sería algo así:
</p>
        <p>
protected void Page_Load(object sender, EventArgs e)<br />
{<br />
    // Una instancia de mi objeto<br />
    _blogClient = new BlogClient(p1, p2, p3, p4); 
</p>
        <p>
    // Creo el ObjectDataSource indicándole la clase a usar<br />
    ObjectDataSource ods = new ObjectDataSource("Caladan.BlogClient.BlogClient",
"GetRssEntries");<br />
    ods.SelectParameters.Add("ItemCount", "5");
</p>
        <p>
    // Establezco el handler<br />
    ods.ObjectCreating += new ObjectDataSourceObjectEventHandler(ods_ObjectCreating);
</p>
        <p>
    // Vinculo al control Web (un DataList en este caso)<br />
    dlBlog.DataSource = ods;<br />
    dlBlog.DataBind();<br />
}
</p>
        <p>
void ods_ObjectCreating(object sender, ObjectDataSourceEventArgs e)<br />
{<br />
    // Aquí se tiene acceso a la instancia, que modifico por la
mía ya creada<br />
    e.ObjectInstance = _blogClient;<br />
}
</p>
        <p>
Y ya está, con estos simples pasos se pueden usar todas las técnicas de
data binding del control Web pero con un origen de datos que no es una base de datos.
Tengo que hacer notar que el resultado de la llamada a GetRssEntries (el método
de mi objeto que lee el RSS) es una colección de tipo CollectionBase, con lo
que la iteración entre los distintos elementos ya viene dada (por implementar
IEnumerable).
</p>
        <p>
No se a vosotros, pero a mí esto me ayuda bastante…
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=5a183527-cba5-4c03-851a-d9f86a9ee124" />
      </body>
      <title>DataBinding en ASP.NET 2.0 para vincular a colecciones de objetos con ObjectDataSource</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,5a183527-cba5-4c03-851a-d9f86a9ee124.aspx</guid>
      <link>http://www.byteabyte.net/2005/11/09/DataBindingEnASPNET20ParaVincularAColeccionesDeObjetosConObjectDataSource.aspx</link>
      <pubDate>Wed, 09 Nov 2005 18:33:40 GMT</pubDate>
      <description>&lt;p&gt;
He estado probando un poco el desarrollo de aplicaciones Web con &lt;a href="http://www.asp.net/"&gt;ASP.NET &lt;/a&gt;2.0
y una de las cosas que m&amp;#225;s me gustan es el poder usar las capacidades de &lt;strong&gt;DataBinding&lt;/strong&gt; de
los controles para vincularlas a &lt;em&gt;objetos&lt;/em&gt; en lugar de a bases de datos.
&lt;/p&gt;
&lt;p&gt;
Una de las cosas que quer&amp;#237;a probar era ver si pod&amp;#237;a vincular un control
de tipo GridView a unos objetos que cre&amp;#233; hace tiempo que obtienen leen RSS. Estos
objetos conectan con un documento RSS cualquiera y obtienen sus elementos en una colecci&amp;#243;n,
en el n&amp;#250;mero que se le pida (por ejemplo los 3 &amp;#250;ltimos elementos).
&lt;/p&gt;
&lt;p&gt;
Teniendo en cuenta esto, mi primera prueba fue intentar usar el asistente que trae
Visual Studio 2005 para vincular controles a datos y seleccionar la plantilla de &lt;strong&gt;ObjectDataSource&lt;/strong&gt;.
Este asistente pide que se seleccione la clase que contiene los objetos a vincular,
el nombre del m&amp;#233;todo a llamar en esa clase y sus par&amp;#225;metros para obtener
los datos que se mostrar&amp;#225;n en el control deseado.
&lt;/p&gt;
&lt;p&gt;
Esto aparentemente funciona sin m&amp;#225;s pero al intentar ejecutar la p&amp;#225;gina
apareci&amp;#243; la excepci&amp;#243;n &lt;em&gt;'No parameterless constructor defined for this
object&lt;/em&gt;'. En efecto, mi objeto no tiene un constructor por omisi&amp;#243;n sin par&amp;#225;metros.
Mi objeto en concreto funciona pas&amp;#225;ndole unos par&amp;#225;metros al constructor
que indican d&amp;#243;nde est&amp;#225; el documento RSS, el nombre de usuario y contrase&amp;#241;a
si son necesarios, etc. Una vez construida la instancia, se puede llamar al m&amp;#233;todo
que carga los datos.
&lt;/p&gt;
&lt;p&gt;
Buscando en las propiedades del control proporcionado por Visual Studio no encontr&amp;#233;
ninguna forma de pasarle una instancia. Leyendo posteriormente la documentaci&amp;#243;n,
se indica que cuando se usa este origen de datos, el objeto ObjectDataSource crea
una nueva instancia del componente que conecta a los datos llamando a su constructor
sin par&amp;#225;metros. Despu&amp;#233;s llama al m&amp;#233;todo dado con los par&amp;#225;metros
que se le pasen. Esto no me vale para mi objeto. Por otro lado parece bastante poco
flexible ya que (al menos en mi caso) en la mayor&amp;#237;a de los objetos que conectan
a datos, antes de poder conectar establezco valores en propiedades que luego las instancias
de los objetos usan para trabajar. Con el modelo planteado eso tampoco funcionar&amp;#237;a.
&lt;/p&gt;
&lt;p&gt;
Pero como no me gusta darme por vencido tan f&amp;#225;cilmente, prob&amp;#233; a usar el
objeto ObjectDataSource directamente en el c&amp;#243;digo de la p&amp;#225;gina y &amp;#161;bingo!,
existe un evento al que nos podemos suscribir para modificar la instancia que ObjectDataSource
utiliza. El proceso es el siguiente:
&lt;/p&gt;
&lt;p&gt;
&amp;#8226;&amp;nbsp;Crear una instancia de ObjectDataSource indic&amp;#225;ndole la clase&amp;nbsp;
que ha de usar y el nombre del m&amp;#233;todo a llamar que traer&amp;#225; los datos.&lt;br&gt;
&amp;#8226;&amp;nbsp;Indicarle el nombre y valores de los par&amp;#225;metros que necesita el
m&amp;#233;todo anterior para traer los datos.&lt;br&gt;
&amp;#8226;&amp;nbsp;Crear un handler para el evento ObjectDataSource.ObjectCreating. En este
handler se tiene acceso a la instancia que se va a usar, pudiendo sustituirla.&lt;br&gt;
&amp;#8226;&amp;nbsp;Usar la instancia que hayamos creado de ObjectDataSource como origen
de datos del control que se vaya a usar.&lt;br&gt;
&amp;#8226;&amp;nbsp;Llamar a DataBind en el control, esto har&amp;#225; que se ejecute el m&amp;#233;todo
que conecta con los datos
&lt;/p&gt;
&lt;p&gt;
En c&amp;#243;digo C# ser&amp;#237;a algo as&amp;#237;:
&lt;/p&gt;
&lt;p&gt;
protected void Page_Load(object sender, EventArgs e)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Una instancia de mi objeto&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; _blogClient = new BlogClient(p1, p2, p3, p4); 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Creo el ObjectDataSource indic&amp;#225;ndole la clase a usar&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ObjectDataSource ods = new ObjectDataSource("Caladan.BlogClient.BlogClient",
"GetRssEntries");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ods.SelectParameters.Add("ItemCount", "5");
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Establezco el handler&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ods.ObjectCreating += new ObjectDataSourceObjectEventHandler(ods_ObjectCreating);
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Vinculo al control Web (un DataList en este caso)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; dlBlog.DataSource = ods;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; dlBlog.DataBind();&lt;br&gt;
}
&lt;/p&gt;
&lt;p&gt;
void ods_ObjectCreating(object sender, ObjectDataSourceEventArgs e)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Aqu&amp;#237; se tiene acceso a la instancia, que modifico por la
m&amp;#237;a ya creada&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; e.ObjectInstance = _blogClient;&lt;br&gt;
}
&lt;/p&gt;
&lt;p&gt;
Y ya est&amp;#225;, con estos simples pasos se pueden usar todas las t&amp;#233;cnicas de
data binding del control Web pero con un origen de datos que no es una base de datos.
Tengo que hacer notar que el resultado de la llamada a GetRssEntries (el m&amp;#233;todo
de mi objeto que lee el RSS) es una colecci&amp;#243;n de tipo CollectionBase, con lo
que la iteraci&amp;#243;n entre los distintos elementos ya viene dada (por implementar
IEnumerable).
&lt;/p&gt;
&lt;p&gt;
No se a vosotros, pero a m&amp;#237; esto me ayuda bastante&amp;#8230;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=5a183527-cba5-4c03-851a-d9f86a9ee124" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,5a183527-cba5-4c03-851a-d9f86a9ee124.aspx</comments>
      <category>.NET</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=793421ca-b355-4a67-bc58-fba16203da8f</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,793421ca-b355-4a67-bc58-fba16203da8f.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,793421ca-b355-4a67-bc58-fba16203da8f.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=793421ca-b355-4a67-bc58-fba16203da8f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
.NET Compact Framework 2.0 está disponible oficialmente desde ayer con lo que
la mayoría de los dispositivos que hay por ahí no lo incluyen ;-)
</p>
        <p>
Para instalarlo existen dos opciones. Una es obtener los <a href="http://www.microsoft.com/downloads/details.aspx?familyid=9655156b-356b-4a2c-857c-e62f50ae9a55&amp;displaylang=en">'redistribuibles' </a>y
hacer la instalación del archivo .msi desde el PC a través de ActiveSync.
</p>
        <p>
La otra opción es mediante Visual Studio 2005 o el SDK de .NET Framework 2.0.
Si se usa este camino, en algunos dispositivos la instalación se puede hacer
desde dentro del entorno de desarrollo, pero en otros no funciona.
</p>
        <p>
Para los que no funciona hay que copiar el archivo .cab de manera manual al dispositivo
y ejecutarlo para que se instale. El archivo a copiar es <strong>NETCFv2.wm.armv4i.cab</strong> para
dispositivos Windows Mobile 2005 y <strong>NETCFv2.ppc.armv4.cab</strong> para dispositivos
Windows Mobile 2003. Estos archivos se encuentran en el directorio de instalación
del SDK. En el caso de una instalación de Visual Studio 2005 el directorio es
similiar a:
</p>
        <p>
\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\CompactFramework\2.0\v2.0\WindowsCE\wceXXX
</p>
        <p>
donde XXX es la versión del S.O. wce400 para Windows Mobile 2003 y wce500 para
Windows Mobile 2005. Tenéis más información en el <a href="href=&quot;http://blogs.msdn.com/marcpe/archive/2005/10/18/482215.aspx">blog
de Marcus Perryman</a>.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=793421ca-b355-4a67-bc58-fba16203da8f" />
      </body>
      <title>Cómo instalar .NET Compact Framework en un dispositivo Windows Mobile</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,793421ca-b355-4a67-bc58-fba16203da8f.aspx</guid>
      <link>http://www.byteabyte.net/2005/11/08/C%c3%b3moInstalarNETCompactFrameworkEnUnDispositivoWindowsMobile.aspx</link>
      <pubDate>Tue, 08 Nov 2005 10:54:39 GMT</pubDate>
      <description>&lt;p&gt;
.NET Compact Framework 2.0 est&amp;#225; disponible oficialmente desde ayer con lo que
la mayor&amp;#237;a de los dispositivos que hay por ah&amp;#237; no lo incluyen ;-)
&lt;/p&gt;
&lt;p&gt;
Para instalarlo&amp;nbsp;existen dos opciones. Una es obtener los &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=9655156b-356b-4a2c-857c-e62f50ae9a55&amp;amp;displaylang=en"&gt;'redistribuibles' &lt;/a&gt;y
hacer la instalaci&amp;#243;n del archivo .msi desde el PC a trav&amp;#233;s de ActiveSync.
&lt;/p&gt;
&lt;p&gt;
La otra opci&amp;#243;n es mediante Visual Studio 2005 o el SDK de .NET Framework 2.0.
Si se usa este camino, en algunos dispositivos la instalaci&amp;#243;n se puede hacer
desde dentro del entorno de desarrollo, pero en otros no funciona.
&lt;/p&gt;
&lt;p&gt;
Para los que no funciona hay que copiar el archivo .cab de manera manual al dispositivo
y ejecutarlo para que se instale. El archivo a copiar es &lt;strong&gt;NETCFv2.wm.armv4i.cab&lt;/strong&gt; para
dispositivos Windows Mobile 2005 y &lt;strong&gt;NETCFv2.ppc.armv4.cab&lt;/strong&gt; para dispositivos
Windows Mobile 2003. Estos archivos se encuentran en el directorio de instalaci&amp;#243;n
del SDK. En el caso de una instalaci&amp;#243;n de Visual Studio 2005 el directorio es
similiar a:
&lt;/p&gt;
&lt;p&gt;
\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\CompactFramework\2.0\v2.0\WindowsCE\wceXXX
&lt;/p&gt;
&lt;p&gt;
donde XXX es la versi&amp;#243;n del S.O. wce400 para Windows Mobile 2003 y wce500 para
Windows Mobile 2005. Ten&amp;#233;is m&amp;#225;s informaci&amp;#243;n en el &lt;a href='href="http://blogs.msdn.com/marcpe/archive/2005/10/18/482215.aspx'&gt;blog
de Marcus Perryman&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=793421ca-b355-4a67-bc58-fba16203da8f" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,793421ca-b355-4a67-bc58-fba16203da8f.aspx</comments>
      <category>.NET</category>
      <category>Microsoft</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=eceb7438-2eb3-49fe-8424-21d21e5f5492</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,eceb7438-2eb3-49fe-8424-21d21e5f5492.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,eceb7438-2eb3-49fe-8424-21d21e5f5492.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=eceb7438-2eb3-49fe-8424-21d21e5f5492</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.microsoft.com/spanish/msdn/spain/eventos/codecampnug.mspx" target="_blank">Todavía
queda alguna plaza...</a>
        </p>
        <p>
Yo estaré por allí el sábado...
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=eceb7438-2eb3-49fe-8424-21d21e5f5492" />
      </body>
      <title>Apúntate ya al Code Camp del día 19 en El Escorial</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,eceb7438-2eb3-49fe-8424-21d21e5f5492.aspx</guid>
      <link>http://www.byteabyte.net/2005/11/07/Ap%c3%bantateYaAlCodeCampDelD%c3%ada19EnElEscorial.aspx</link>
      <pubDate>Mon, 07 Nov 2005 09:56:34 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.microsoft.com/spanish/msdn/spain/eventos/codecampnug.mspx" target=_blank&gt;Todav&amp;#237;a
queda alguna plaza...&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Yo estar&amp;#233; por all&amp;#237; el s&amp;#225;bado...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=eceb7438-2eb3-49fe-8424-21d21e5f5492" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,eceb7438-2eb3-49fe-8424-21d21e5f5492.aspx</comments>
      <category>.NET</category>
      <category>Eventos</category>
      <category>Microsoft</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=2e04c126-6e0d-47c5-a166-91c307f283f7</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,2e04c126-6e0d-47c5-a166-91c307f283f7.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,2e04c126-6e0d-47c5-a166-91c307f283f7.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=2e04c126-6e0d-47c5-a166-91c307f283f7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Mi amigo <a href="http://www.canaldotnet.com/">Unai</a> acaba de <a href="http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/MTJ_3575.asp">publicar
un artículo</a> interesante en la revista <a href="http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/">Microsoft
Technical Journal</a> de MSDN sobre cómo configurar la replicación RDA y
la replicación Merge entre un servidor SQL Server 2005 y SQL Mobile (la nueva
versión de SQL Server para dispositivos).
</p>
        <p>
Es interesante ver la distinción entre los dos tipos de técnicas para
poder escoger la más adecuada a nuestra situación, ya que el uso de una
u otra depende finalmente de la aplicación a desarrollar.
</p>
        <p>
Seguro que os resultará interesante.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=2e04c126-6e0d-47c5-a166-91c307f283f7" />
      </body>
      <title>Replicación RDA y Merge en SQL Server 2005 y SQL Mobile</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,2e04c126-6e0d-47c5-a166-91c307f283f7.aspx</guid>
      <link>http://www.byteabyte.net/2005/11/04/Replicaci%c3%b3nRDAYMergeEnSQLServer2005YSQLMobile.aspx</link>
      <pubDate>Fri, 04 Nov 2005 10:30:31 GMT</pubDate>
      <description>&lt;p&gt;
Mi amigo &lt;a href="http://www.canaldotnet.com/"&gt;Unai&lt;/a&gt; acaba de &lt;a href="http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/MTJ_3575.asp"&gt;publicar
un art&amp;#237;culo&lt;/a&gt; interesante en la revista &lt;a href="http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/"&gt;Microsoft
Technical Journal&lt;/a&gt; de MSDN sobre c&amp;#243;mo configurar la replicaci&amp;#243;n RDA y
la replicaci&amp;#243;n Merge entre un servidor SQL Server 2005 y SQL Mobile (la nueva
versi&amp;#243;n de SQL Server para dispositivos).
&lt;/p&gt;
&lt;p&gt;
Es interesante ver la distinci&amp;#243;n entre los dos tipos&amp;nbsp;de t&amp;#233;cnicas para
poder escoger la m&amp;#225;s adecuada a nuestra situaci&amp;#243;n, ya que el uso de una
u otra depende finalmente de la aplicaci&amp;#243;n a desarrollar.
&lt;/p&gt;
&lt;p&gt;
Seguro que os resultar&amp;#225; interesante.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=2e04c126-6e0d-47c5-a166-91c307f283f7" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,2e04c126-6e0d-47c5-a166-91c307f283f7.aspx</comments>
      <category>.NET</category>
      <category>Microsoft</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=d993df34-abca-422e-9fd5-8c7d8ee1cc92</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,d993df34-abca-422e-9fd5-8c7d8ee1cc92.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,d993df34-abca-422e-9fd5-8c7d8ee1cc92.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d993df34-abca-422e-9fd5-8c7d8ee1cc92</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Esta mañana se supone que me llega mi nuevo Pocket PC Phone. Es un <a href="http://www.imate.com/DETAILS_JASJAR.htm">i-Mate
JasJar</a> con Windows Mobile 5.0.
</p>
        <p>
En cuanto lo reciba quiero migrar algunas aplicaciones que tengo hechas con .NET Compact
Framework 1.0 a la versión 2.0 y ver cómo funcionan en el nuevo sistema.
</p>
        <p>
Cuando lo tenga resuelto iré contando las experiencias.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=d993df34-abca-422e-9fd5-8c7d8ee1cc92" />
      </body>
      <title>Hoy recibo mi i-Mate JasJar (aka HTC Universal, aka Qtek 9000, ó...)</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,d993df34-abca-422e-9fd5-8c7d8ee1cc92.aspx</guid>
      <link>http://www.byteabyte.net/2005/11/03/HoyReciboMiIMateJasJarAkaHTCUniversalAkaQtek9000%c3%93.aspx</link>
      <pubDate>Thu, 03 Nov 2005 06:41:38 GMT</pubDate>
      <description>&lt;p&gt;
Esta ma&amp;#241;ana se supone que me llega mi nuevo Pocket PC Phone. Es un &lt;a href="http://www.imate.com/DETAILS_JASJAR.htm"&gt;i-Mate
JasJar&lt;/a&gt;&amp;nbsp;con Windows Mobile 5.0.
&lt;/p&gt;
&lt;p&gt;
En cuanto lo reciba quiero migrar algunas aplicaciones que tengo hechas con .NET Compact
Framework 1.0 a la versi&amp;#243;n 2.0 y ver c&amp;#243;mo funcionan en el nuevo sistema.
&lt;/p&gt;
&lt;p&gt;
Cuando lo tenga resuelto ir&amp;#233; contando las experiencias.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=d993df34-abca-422e-9fd5-8c7d8ee1cc92" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,d993df34-abca-422e-9fd5-8c7d8ee1cc92.aspx</comments>
      <category>.NET</category>
      <category>Microsoft</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=987aa7fb-3731-43f4-9c71-b522c2922edc</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,987aa7fb-3731-43f4-9c71-b522c2922edc.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,987aa7fb-3731-43f4-9c71-b522c2922edc.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=987aa7fb-3731-43f4-9c71-b522c2922edc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Ya está disponible la versión final (RTM) de Visual Studio 2005 para los
suscriptores de MSDN.
</p>
        <p>
Ojo si quieres programar con WinFX, porque la versión pública de WinFX no
es compatible con esta versión de Visual Studio, sólo con la Beta 2.
</p>
        <p>
Si tienes instaladas versiones anteriores de Visual Studio 2005 y quieres actualizar,
hay que hacer varias cosas (hasta 23 pasos) aunque hay una herramienta que puede ser
útil. Más información sobre esto en: <a href="http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=1894">http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=1894</a></p>
        <p>
Y si tu interés está en el desarrollo para dispositivos y quieres saber
qué herramientas usar para qué tipo de dispositivos de los que hay disponibles,
aquí tienes un cuadro que cruza las versiones de las herramientas de desarrollo
con las de los equipos:
</p>
        <p>
          <a href="http://blogs.msdn.com/windowsmobile/archive/2005/06/02/424382.aspx">http://blogs.msdn.com/windowsmobile/archive/2005/06/02/424382.aspx</a>
        </p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=987aa7fb-3731-43f4-9c71-b522c2922edc" />
      </body>
      <title>Visual Studio 2005 RTM</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,987aa7fb-3731-43f4-9c71-b522c2922edc.aspx</guid>
      <link>http://www.byteabyte.net/2005/10/28/VisualStudio2005RTM.aspx</link>
      <pubDate>Fri, 28 Oct 2005 07:57:36 GMT</pubDate>
      <description>&lt;p&gt;
Ya est&amp;#225; disponible la versi&amp;#243;n final (RTM) de Visual Studio 2005 para&amp;nbsp;los
suscriptores de MSDN.
&lt;/p&gt;
&lt;p&gt;
Ojo si quieres programar con WinFX, porque la versi&amp;#243;n p&amp;#250;blica de WinFX no
es compatible con esta versi&amp;#243;n de Visual Studio, s&amp;#243;lo con la Beta 2.
&lt;/p&gt;
&lt;p&gt;
Si tienes instaladas versiones anteriores de Visual Studio 2005 y quieres actualizar,
hay que hacer varias cosas (hasta 23 pasos) aunque hay una herramienta que puede ser
&amp;#250;til. M&amp;#225;s informaci&amp;#243;n sobre esto en: &lt;a href="http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=1894"&gt;http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=1894&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Y si tu inter&amp;#233;s est&amp;#225; en el desarrollo para dispositivos y quieres saber
qu&amp;#233; herramientas usar para qu&amp;#233; tipo de dispositivos de los que hay disponibles,
aqu&amp;#237; tienes un cuadro que cruza las versiones de las herramientas de desarrollo
con las de los equipos:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.msdn.com/windowsmobile/archive/2005/06/02/424382.aspx"&gt;http://blogs.msdn.com/windowsmobile/archive/2005/06/02/424382.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=987aa7fb-3731-43f4-9c71-b522c2922edc" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,987aa7fb-3731-43f4-9c71-b522c2922edc.aspx</comments>
      <category>.NET</category>
      <category>Microsoft</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=d1dc01e9-427c-45a2-acaf-2f42eb9a357f</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,d1dc01e9-427c-45a2-acaf-2f42eb9a357f.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,d1dc01e9-427c-45a2-acaf-2f42eb9a357f.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d1dc01e9-427c-45a2-acaf-2f42eb9a357f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Pues eso, que si tenéis una suscripción a MSDN, ya está disponible
para descarga la imágen del DVD de Visual Stucio 2005 RC. Es una versión
más reciente que la Beta 2, aunque no está cubierta por la licencia GoLive
(con lo que no hay soporte para ponerla en producción).
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=d1dc01e9-427c-45a2-acaf-2f42eb9a357f" />
      </body>
      <title>Visual Studio 2005 RC disponible para suscriptores MSDN</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,d1dc01e9-427c-45a2-acaf-2f42eb9a357f.aspx</guid>
      <link>http://www.byteabyte.net/2005/09/13/VisualStudio2005RCDisponibleParaSuscriptoresMSDN.aspx</link>
      <pubDate>Tue, 13 Sep 2005 09:04:15 GMT</pubDate>
      <description>&lt;p&gt;
Pues eso, que si ten&amp;#233;is una suscripci&amp;#243;n a MSDN, ya est&amp;#225; disponible
para descarga la im&amp;#225;gen del DVD de Visual Stucio 2005 RC. Es una versi&amp;#243;n
m&amp;#225;s reciente que la Beta 2, aunque no est&amp;#225; cubierta por la licencia GoLive
(con lo que no hay soporte para ponerla en producci&amp;#243;n).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=d1dc01e9-427c-45a2-acaf-2f42eb9a357f" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,d1dc01e9-427c-45a2-acaf-2f42eb9a357f.aspx</comments>
      <category>.NET</category>
      <category>Microsoft</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=b33e7f01-19bc-4886-b13a-870d618244c9</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,b33e7f01-19bc-4886-b13a-870d618244c9.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,b33e7f01-19bc-4886-b13a-870d618244c9.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=b33e7f01-19bc-4886-b13a-870d618244c9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 1cm">
          <font color="#000000">He añadido una <a href="http://www.byteabyte.net/herramientas/pingcf/default.aspx">nueva
utilidad a la sección de herramientas</a>. Se trata de un componente que permite
enviar ‘pings’ de ICMP a equipos remotos desde aplicaciones Compact Framework
en dispositivos Windows Mobile 2003.</font>
        </p>
        <p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 1cm">
          <font color="#000000">Podéis descargar sólo el ejecutable para Pocket PC,
aunque también disponéis del código para incorporarlo en vuestras aplicaciones.</font>
        </p>
        <p class="MsoNormal" style="MARGIN: 6pt 0cm 0pt 1cm">
          <font color="#000000">Espero que resulte interesante.</font>
        </p>
        <p>
        </p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=b33e7f01-19bc-4886-b13a-870d618244c9" />
      </body>
      <title>Nueva utilidad: Ping para Compact Framework</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,b33e7f01-19bc-4886-b13a-870d618244c9.aspx</guid>
      <link>http://www.byteabyte.net/2005/07/19/NuevaUtilidadPingParaCompactFramework.aspx</link>
      <pubDate>Tue, 19 Jul 2005 09:56:18 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 6pt 0cm 0pt 1cm"&gt;
&lt;font color=#000000&gt;He a&amp;#241;adido una &lt;a href="http://www.byteabyte.net/herramientas/pingcf/default.aspx"&gt;nueva
utilidad a la secci&amp;#243;n de herramientas&lt;/a&gt;. Se trata de un componente que permite
enviar &amp;#8216;pings&amp;#8217; de ICMP a equipos remotos desde aplicaciones Compact Framework
en dispositivos Windows Mobile 2003.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 6pt 0cm 0pt 1cm"&gt;
&lt;font color=#000000&gt;Pod&amp;#233;is descargar s&amp;#243;lo el ejecutable para Pocket PC,
aunque tambi&amp;#233;n dispon&amp;#233;is del c&amp;#243;digo para incorporarlo en vuestras aplicaciones.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 6pt 0cm 0pt 1cm"&gt;
&lt;font color=#000000&gt;Espero que resulte interesante.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=b33e7f01-19bc-4886-b13a-870d618244c9" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,b33e7f01-19bc-4886-b13a-870d618244c9.aspx</comments>
      <category>.NET</category>
      <category>WebSite</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=66f42d06-28d4-42b5-ac59-f6aabed3985d</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,66f42d06-28d4-42b5-ac59-f6aabed3985d.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,66f42d06-28d4-42b5-ac59-f6aabed3985d.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=66f42d06-28d4-42b5-ac59-f6aabed3985d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recientemente me he encontrado con dos proyectos donde el uso de Visual C++ .NET ha
ahorrado mucho tiempo y esfuerzo.
</p>
        <p>
          <br />
En ambos casos el problema estaba en cómo crear ‘wrappers’ en .NET
para acceder a varios APIs nativos (Win32). Uno estaba relacionado con el acceso a
APIs de Windows y el otro es un API propietario de un fabricante de unos equipos de
video digital.
</p>
        <p>
          <br />
Inicialmente en los dos proyectos se intentó primero la creación de un ‘wrapper’
en C#. Esta aproximación siempre suena razonable, pero en cuanto el API a usar
sea un poco elaborado, donde se necesite el uso de estructuras complejas, o necesitemos
el uso de ‘callbacks’, la situación se complica bastante y, lo que
en principio parecía una tarea sencilla, se convierte en horas y horas de intentar
definir cómo escribir correctamente los tipos de datos para que se pasen adecuadamente
al API, probar las modificaciones y obtener errores difíciles de depurar.
</p>
        <p>
          <br />
Mediante el uso de Visual C++ .NET y aproximando el problema de otra manera, es bastante
fácil crear este tipo de ‘wrappers’. La idea usada en los dos casos
anteriores fue la siguiente:
</p>
        <p>
          <br />
• Crear un proyecto de class library en Visual C++ .NET.
</p>
        <p>
          <br />
• En ese proyecto se crea una clase C++ .NET (que incluye las extensiones
‘manejadas’). Esta expone las propiedades y métodos deseados a la
aplicación .NET final, que se desarrollará en el lenguaje .NET seleccionado,
ya sea VB.NET o C#.
</p>
        <p>
          <br />
• En el mismo proyecto se incluye una clase no manejada (Win32) que es
la que hará uso del API nativo requerido.
</p>
        <p>
          <br />
• La clase C++ .NET usará esta otra clase Win32 interna de manera
exclusiva, exponiendo la funcionalidad del API a través de su interface .NET.<br /></p>
        <p>
De esta manera, no hay que hacer traducciones complejas de estructuras ya que se usan
de manera natural dentro de C++. En el caso de funciones de callback, estas se pueden
exponer al exterior como eventos o delegados, convirtiéndose en algo natural
también a la hora de su uso desde la aplicación cliente final.
</p>
        <p>
          <br />
Es cierto que hay que conocer algo de C++ para utilizar esta aproximación, pero
como su uso se centra en algo bastante concreto, merece la pena hacer ese esfuerzo
inicial que se traduce posteriormente en menos dolores de cabeza.
</p>
        <p>
          <br />
Aquí tenéis un link a una serie de artículos que me pasó mi amigo
David García como referencia <a href="http://www.ondotnet.com/pub/a/dotnet/2004/03/29/mcpp_part3.html">http://www.ondotnet.com/pub/a/dotnet/2004/03/29/mcpp_part3.html</a></p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=66f42d06-28d4-42b5-ac59-f6aabed3985d" />
      </body>
      <title>No le tengas miedo a Visual C++ .NET</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,66f42d06-28d4-42b5-ac59-f6aabed3985d.aspx</guid>
      <link>http://www.byteabyte.net/2005/07/19/NoLeTengasMiedoAVisualCNET.aspx</link>
      <pubDate>Tue, 19 Jul 2005 07:30:16 GMT</pubDate>
      <description>&lt;p&gt;
Recientemente me he encontrado con dos proyectos donde el uso de Visual C++ .NET ha
ahorrado mucho tiempo y esfuerzo.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
En ambos casos el problema estaba en c&amp;#243;mo crear &amp;#8216;wrappers&amp;#8217; en .NET
para acceder a varios APIs nativos (Win32). Uno estaba relacionado con el acceso a
APIs de Windows y el otro es un API propietario de un fabricante de unos equipos de
video digital.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
Inicialmente en los dos proyectos se intent&amp;#243; primero la creaci&amp;#243;n de un &amp;#8216;wrapper&amp;#8217;
en C#. Esta aproximaci&amp;#243;n siempre suena razonable, pero en cuanto el API a usar
sea un poco elaborado, donde se necesite el uso de estructuras complejas, o necesitemos
el uso de &amp;#8216;callbacks&amp;#8217;, la situaci&amp;#243;n se complica bastante y, lo que
en principio parec&amp;#237;a una tarea sencilla, se convierte en horas y horas de intentar
definir c&amp;#243;mo escribir correctamente los tipos de datos para que se pasen adecuadamente
al API, probar las modificaciones y obtener errores dif&amp;#237;ciles de depurar.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
Mediante el uso de Visual C++ .NET y aproximando el problema de otra manera, es bastante
f&amp;#225;cil crear este tipo de &amp;#8216;wrappers&amp;#8217;. La idea usada en los dos casos
anteriores fue la siguiente:
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&amp;#8226;&amp;nbsp;Crear un proyecto de class library en Visual C++ .NET.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&amp;#8226;&amp;nbsp;En ese proyecto se crea una clase C++ .NET (que incluye las extensiones
&amp;#8216;manejadas&amp;#8217;). Esta expone las propiedades y m&amp;#233;todos deseados a la
aplicaci&amp;#243;n .NET final, que se desarrollar&amp;#225; en el lenguaje .NET seleccionado,
ya sea VB.NET o C#.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&amp;#8226;&amp;nbsp;En el mismo proyecto se incluye una clase no manejada (Win32) que es
la que har&amp;#225; uso del API nativo requerido.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&amp;#8226;&amp;nbsp;La clase C++ .NET usar&amp;#225; esta otra clase Win32 interna de manera
exclusiva, exponiendo la funcionalidad del API a trav&amp;#233;s de su interface .NET.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
De esta manera, no hay que hacer traducciones complejas de estructuras ya que se usan
de manera natural dentro de C++. En el caso de funciones de callback, estas se pueden
exponer al exterior como eventos o delegados, convirti&amp;#233;ndose en algo natural
tambi&amp;#233;n a la hora de su uso desde la aplicaci&amp;#243;n cliente final.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
Es cierto que hay que conocer algo de C++ para utilizar esta aproximaci&amp;#243;n, pero
como su uso se centra en algo bastante concreto, merece la pena hacer ese esfuerzo
inicial que se traduce posteriormente en menos dolores de cabeza.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
Aqu&amp;#237; ten&amp;#233;is un link a una serie de art&amp;#237;culos que me pas&amp;#243; mi amigo
David Garc&amp;#237;a como referencia &lt;a href="http://www.ondotnet.com/pub/a/dotnet/2004/03/29/mcpp_part3.html"&gt;http://www.ondotnet.com/pub/a/dotnet/2004/03/29/mcpp_part3.html&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=66f42d06-28d4-42b5-ac59-f6aabed3985d" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,66f42d06-28d4-42b5-ac59-f6aabed3985d.aspx</comments>
      <category>.NET</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=85736100-8d50-49f6-92e4-88a22900306d</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,85736100-8d50-49f6-92e4-88a22900306d.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,85736100-8d50-49f6-92e4-88a22900306d.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=85736100-8d50-49f6-92e4-88a22900306d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Ya te puedes <a target="_blank" href="http://www.microsoft.com/spanish/msdn/Spain/eventos/devday/default.asp">registrar
para asistir a Microsoft Developer Days 2005</a>.
</p>
        <p>
Este año, al igual que el año pasado, colaboro con MSDN España en la
sesión dedicada a desarrollo para dispositivos móviles.
</p>
        <p>
Espero verte por allí.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=85736100-8d50-49f6-92e4-88a22900306d" />
      </body>
      <title>Microsoft Developer Days 2005</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,85736100-8d50-49f6-92e4-88a22900306d.aspx</guid>
      <link>http://www.byteabyte.net/2005/04/24/MicrosoftDeveloperDays2005.aspx</link>
      <pubDate>Sun, 24 Apr 2005 09:34:40 GMT</pubDate>
      <description>&lt;p&gt;
Ya te puedes &lt;a target="_blank" href="http://www.microsoft.com/spanish/msdn/Spain/eventos/devday/default.asp"&gt;registrar
para asistir a Microsoft Developer Days 2005&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Este a&amp;#241;o, al igual que el a&amp;#241;o pasado, colaboro con MSDN Espa&amp;#241;a en la
sesi&amp;#243;n dedicada a desarrollo para dispositivos m&amp;#243;viles.
&lt;/p&gt;
&lt;p&gt;
Espero verte por all&amp;#237;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=85736100-8d50-49f6-92e4-88a22900306d" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,85736100-8d50-49f6-92e4-88a22900306d.aspx</comments>
      <category>.NET</category>
      <category>Eventos</category>
      <category>Microsoft</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=6b60158c-6fcb-44a6-b305-85fa55fb2a9b</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,6b60158c-6fcb-44a6-b305-85fa55fb2a9b.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,6b60158c-6fcb-44a6-b305-85fa55fb2a9b.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=6b60158c-6fcb-44a6-b305-85fa55fb2a9b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recientemente he <a target="blank" href="http://www.pinvoke.net/">recomendado este
web</a> a David, un amigo mío, que estaba buscando la manera de controlar
el volumen del sistema desde una aplicación Visual Basic .NET.
</p>
        <p>
Después de buscar bastante encontró la manera de hacerlo, pero el ejemplo
estaba en Visual Basic 6 y me preguntó sobre cómo adaptar algunas partes
del código a .NET, entre ellas las sentencias 'declare' de VB6.
</p>
        <p>
Antes de aventurarnos a definir la declaración, probar, fallar, depurar y redefinir,
no hay nada como aprovechar lo que ofrece Internet para ahorrar tiempo. 2 minutos
en pinvoke.net y ahí estaban las declaraciones en VB.NET y C#.
</p>
        <p>
Y recordad, está en formato WIKI, de manera que si no encontráis la declaración
que os hace falta pero conseguir hacerla por vuestra cuenta, por favor, añadirla
al site, que así nos beneficiamos todos ;-)
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=6b60158c-6fcb-44a6-b305-85fa55fb2a9b" />
      </body>
      <title>pinvoke.net</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,6b60158c-6fcb-44a6-b305-85fa55fb2a9b.aspx</guid>
      <link>http://www.byteabyte.net/2005/04/20/pinvokenet.aspx</link>
      <pubDate>Wed, 20 Apr 2005 20:04:32 GMT</pubDate>
      <description>&lt;p&gt;
Recientemente he &lt;a target="blank" href="http://www.pinvoke.net/"&gt;recomendado este
web&lt;/a&gt; a David, un amigo m&amp;#237;o, que&amp;nbsp;estaba buscando la manera de controlar
el volumen del sistema&amp;nbsp;desde una aplicaci&amp;#243;n Visual Basic .NET.
&lt;/p&gt;
&lt;p&gt;
Despu&amp;#233;s de buscar bastante encontr&amp;#243; la manera de hacerlo, pero el ejemplo
estaba en Visual Basic 6 y me pregunt&amp;#243; sobre c&amp;#243;mo adaptar algunas partes
del c&amp;#243;digo a .NET, entre ellas las sentencias 'declare' de VB6.
&lt;/p&gt;
&lt;p&gt;
Antes de aventurarnos a definir la declaraci&amp;#243;n, probar, fallar, depurar y redefinir,
no hay nada como aprovechar lo que ofrece Internet para ahorrar tiempo. 2 minutos
en pinvoke.net y ah&amp;#237; estaban las declaraciones en VB.NET y C#.
&lt;/p&gt;
&lt;p&gt;
Y recordad, est&amp;#225; en formato WIKI, de manera que si no encontr&amp;#225;is la declaraci&amp;#243;n
que os hace falta pero conseguir hacerla por vuestra cuenta, por favor, a&amp;#241;adirla
al site, que as&amp;#237; nos beneficiamos todos ;-)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=6b60158c-6fcb-44a6-b305-85fa55fb2a9b" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,6b60158c-6fcb-44a6-b305-85fa55fb2a9b.aspx</comments>
      <category>.NET</category>
      <category>Internet</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=805950d1-a34c-4fb0-ad5d-23fec2fe2404</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,805950d1-a34c-4fb0-ad5d-23fec2fe2404.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,805950d1-a34c-4fb0-ad5d-23fec2fe2404.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=805950d1-a34c-4fb0-ad5d-23fec2fe2404</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Si eres suscriptor de MSDN, y quieres empezar a jugar con Indigo y WinFX, ya puedes
hacerlo porque el Community Technical Preview de Marzo ya está disponible para
descargar.
</p>
        <p>
Yo sólo he empezado a probar WinFX, así que no puedo dar todavía ninguna
opinión sobre Indigo, pero en cuanto lo pruebe comentaré algo por aquí
;-)
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=805950d1-a34c-4fb0-ad5d-23fec2fe2404" />
      </body>
      <title>El último CTP de WinFX e Indigo disponible para suscriptores MSDN.</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,805950d1-a34c-4fb0-ad5d-23fec2fe2404.aspx</guid>
      <link>http://www.byteabyte.net/2005/03/17/El%c3%9altimoCTPDeWinFXEIndigoDisponibleParaSuscriptoresMSDN.aspx</link>
      <pubDate>Thu, 17 Mar 2005 06:29:59 GMT</pubDate>
      <description>&lt;p&gt;
Si eres suscriptor de MSDN, y quieres empezar a jugar con Indigo y WinFX, ya puedes
hacerlo porque el Community Technical Preview de Marzo ya est&amp;#225; disponible para
descargar.
&lt;/p&gt;
&lt;p&gt;
Yo s&amp;#243;lo he empezado a probar WinFX, as&amp;#237; que no puedo dar todav&amp;#237;a ninguna
opini&amp;#243;n sobre Indigo, pero en cuanto lo pruebe comentar&amp;#233; algo por aqu&amp;#237;
;-)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=805950d1-a34c-4fb0-ad5d-23fec2fe2404" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,805950d1-a34c-4fb0-ad5d-23fec2fe2404.aspx</comments>
      <category>.NET</category>
      <category>Microsoft</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=b7b3b756-14a8-4973-b6a3-523e288bc6d7</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,b7b3b756-14a8-4973-b6a3-523e288bc6d7.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,b7b3b756-14a8-4973-b6a3-523e288bc6d7.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=b7b3b756-14a8-4973-b6a3-523e288bc6d7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Si queréis una lista de referencias de artículos organizados por temas sobre
programación para SmartPhone, principalmente con .NET Compact Framework, no tenéis
más que acudir <a target="_blank" href="http://weblogs.asp.net/nleghari/articles/smartphone.aspx">aquí</a>.
Están en inglés, eso si.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=b7b3b756-14a8-4973-b6a3-523e288bc6d7" />
      </body>
      <title>Compilación de artículos sobre Windows Mobile SmartPhone</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,b7b3b756-14a8-4973-b6a3-523e288bc6d7.aspx</guid>
      <link>http://www.byteabyte.net/2005/01/05/Compilaci%c3%b3nDeArt%c3%adculosSobreWindowsMobileSmartPhone.aspx</link>
      <pubDate>Wed, 05 Jan 2005 07:20:48 GMT</pubDate>
      <description>&lt;p&gt;
Si quer&amp;#233;is una lista de referencias de art&amp;#237;culos organizados por temas sobre
programaci&amp;#243;n para SmartPhone, principalmente con .NET Compact Framework, no ten&amp;#233;is
m&amp;#225;s que acudir &lt;a target="_blank" href="http://weblogs.asp.net/nleghari/articles/smartphone.aspx"&gt;aqu&amp;#237;&lt;/a&gt;.
Est&amp;#225;n en ingl&amp;#233;s, eso si.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=b7b3b756-14a8-4973-b6a3-523e288bc6d7" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,b7b3b756-14a8-4973-b6a3-523e288bc6d7.aspx</comments>
      <category>.NET</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=5ddf5771-0ec1-4ff7-b05d-5ef5b4086842</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,5ddf5771-0ec1-4ff7-b05d-5ef5b4086842.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,5ddf5771-0ec1-4ff7-b05d-5ef5b4086842.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5ddf5771-0ec1-4ff7-b05d-5ef5b4086842</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
He añadido una nueva <a href="http://www.byteabyte.net/herramientas/copyfolders/default.aspx" target="_blank">herramienta</a> al
Web que puede que os sea útil. Esta herramienta permite copiar una estructura
de directorios de un sitio a otro, ya sea en la máquina local o en la red, sin
copiar los archivos originales.
</p>
        <p>
Permite realizar esta operación de manera recursiva, incluyendo todas las carpetas
(y sus subcarpetas) del directorio de origen.
</p>
        <p>
A mi me ha resultado útil para el mantenimiento de estructuras de carpetas donde
almaceno archivos de log, y en migraciones de servidores.
</p>
        <p>
Espero que os pueda servir también.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=5ddf5771-0ec1-4ff7-b05d-5ef5b4086842" />
      </body>
      <title>Copyfolders, nueva herramienta añadida al Web Site</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,5ddf5771-0ec1-4ff7-b05d-5ef5b4086842.aspx</guid>
      <link>http://www.byteabyte.net/2004/12/16/CopyfoldersNuevaHerramientaA%c3%b1adidaAlWebSite.aspx</link>
      <pubDate>Thu, 16 Dec 2004 11:51:09 GMT</pubDate>
      <description>&lt;p&gt;
He a&amp;#241;adido una nueva &lt;a href="http://www.byteabyte.net/herramientas/copyfolders/default.aspx" target=_blank&gt;herramienta&lt;/a&gt; al
Web que puede que os sea &amp;#250;til. Esta herramienta permite copiar una estructura
de directorios de un sitio a otro, ya sea en la m&amp;#225;quina local o en la red, sin
copiar los archivos originales.
&lt;/p&gt;
&lt;p&gt;
Permite realizar esta operaci&amp;#243;n de manera recursiva, incluyendo todas las carpetas
(y sus subcarpetas) del directorio de origen.
&lt;/p&gt;
&lt;p&gt;
A mi me ha resultado &amp;#250;til para el mantenimiento de estructuras de carpetas donde
almaceno archivos de log, y en migraciones de servidores.
&lt;/p&gt;
&lt;p&gt;
Espero que os pueda servir tambi&amp;#233;n.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=5ddf5771-0ec1-4ff7-b05d-5ef5b4086842" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,5ddf5771-0ec1-4ff7-b05d-5ef5b4086842.aspx</comments>
      <category>.NET</category>
      <category>WebSite</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=b500c342-1249-488c-b2d6-a737ef584b40</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,b500c342-1249-488c-b2d6-a737ef584b40.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,b500c342-1249-488c-b2d6-a737ef584b40.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=b500c342-1249-488c-b2d6-a737ef584b40</wfw:commentRss>
      <title>De vuelta</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,b500c342-1249-488c-b2d6-a737ef584b40.aspx</guid>
      <link>http://www.byteabyte.net/2004/12/15/DeVuelta.aspx</link>
      <pubDate>Wed, 15 Dec 2004 18:25:03 GMT</pubDate>
      <description>Despu&amp;#233;s de unos d&amp;#237;as actualizando servidores (en los que se aloja este blog y que yo mismo mantengo), voy a intentar ponerme al d&amp;#237;a en lo que al blog se refiere (sin ning&amp;#250;n orden especial).
&lt;ul&gt;
&lt;li&gt;
Google sigue con sus experimentos y recientemente ha publicado un nuvo site llamado &lt;a href="http://www.google.com/webhp?complete=1&amp;hl=en" target="_blank"&gt;Google
Suggest&lt;/a&gt; en beta todav&amp;#237;a. En este site, han modificado un poco la p&amp;#225;gina
inicial de Google para que se muestren una serie de sugerencias seg&amp;#250;n se va escribiendo
la cadena de b&amp;#250;squeda. Lo hace mediante llamadas XML a los servicios Web que
publica. A mi me parece una idea interesante, veremos en qu&amp;#233; acaba.&lt;/li&gt;
&lt;li&gt;
En este mismo sentido, MSN ha publicado su &lt;a href="http://toolbar.msn.com/" target="_blank"&gt;barra
de herramientas&lt;/a&gt; que proporciona b&amp;#250;squeda en Internet, resalta las cadenas
de b&amp;#250;squeda en las p&amp;#225;ginas encontradas, bloqueo de popups, integraci&amp;#243;n
con Messenger y Hotmail, etc. De la misma forma, ya tiene disponible la versi&amp;#243;n
beta, en ingles s&amp;#243;lo, de la &lt;a href="http://beta.toolbar.msn.com/" target="_blank"&gt;barra
de herramientas junto con la b&amp;#250;squeda en disco local&lt;/a&gt;, al estilo de la utilidad
presentada recientemente por Google. Desgraciadamente no lo he podido probar porque
no se instala en Windows Server, que es con lo que paso la mayor parte del tiempo.
A&amp;#250;n as&amp;#237;, ha recibido buenas cr&amp;#237;ticas, as&amp;#237; que ya me contar&amp;#233;is.&lt;/li&gt;
&lt;li&gt;
Una nueva &lt;a href="http://www.dotnetcpu.com/" target="_blank"&gt;empresa llamada 'dotnetcpu'&lt;/a&gt; acaba
de presentar un kit compuesto de hardware y software que se orienta a el mercado de
aplicaciones embedded. Consiste en una placa de bajo consumo de energ&amp;#237;a que se
puede programar directamente con .NET, lo que resulta muy interesante. Est&amp;#225; pensada
para el desarrollo de aplicaciones de rob&amp;#243;tica, sensores, captura autom&amp;#225;tica
de datos, etc. Si veo el momento, igual compro uno para continuar con un proyecto
que tengo abandonado de una estaci&amp;#243;n meteorol&amp;#243;gica amateur :-)&lt;/li&gt;
&lt;li&gt;
Seg&amp;#250;n se publica en &lt;a href="http://www.microsoft-watch.com/article2/0,1995,1738399,00.asp" target="_blank"&gt;este
art&amp;#237;culo de Microsoft Watch&lt;/a&gt;, parece que Microsoft va a publicar un SDK para
desarrollar juegos para Tablet PC. Si ya ten&amp;#237;a ganas de tener uno (despu&amp;#233;s
de haber probado durante unos 15 d&amp;#237;as uno prestado) ahora ya no tengo excusa
;-)&lt;/li&gt;
&lt;li&gt;
Por &amp;#250;ltimo, supongo que muchos ya sabr&amp;#233;is que se ha lanzado una versi&amp;#243;n
preliminar de WinFX para Windows XP. WinFX, para los que no lo sep&amp;#225;is, es la
nueva plataforma de presentaci&amp;#243;n (es decir, de creaci&amp;#243;n del Interface de
Usuario) de Windows. Incialmente se present&amp;#243; unicamente como parte de Longhorn,
pero parece que se va a hacer disponible para los usuarios de Windows XP tambi&amp;#233;n.
Est&amp;#225; disponible para su descarga para los suscriptores de MSDN, y necesita la
versi&amp;#243;n 2.0 de .NET Framework (a&amp;#250;n en beta). En cuanto haga pruebas con
ello, os contar&amp;#233; c&amp;#243;mo es.&lt;/li&gt;
&lt;/ul&gt;
Espero que por el momento esto os sirva de entretenimiento...&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=b500c342-1249-488c-b2d6-a737ef584b40" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,b500c342-1249-488c-b2d6-a737ef584b40.aspx</comments>
      <category>.NET</category>
      <category>General</category>
      <category>Internet</category>
      <category>Microsoft</category>
      <category>WebSite</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=de5e6de1-5cdb-4999-9493-649352f0ffab</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,de5e6de1-5cdb-4999-9493-649352f0ffab.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,de5e6de1-5cdb-4999-9493-649352f0ffab.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=de5e6de1-5cdb-4999-9493-649352f0ffab</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Cuando se desarrollan aplicaciones para dispositivos móviles, ya sean aplicaciones
hechas con .NET Compact Framework, con Win32 o aplicaciones WAP, es muy útil
usar el emulador de Windows Mobile para poder probar su funcionamiento sin necesidad
de un dispositivo físico. El emulador se lanza habitualmente desde dentro del
entorno de Visual Studio .NET y se integra completamente con el depurador, de manera
que se puede avanzar el código paso a paso mientras la aplicación se ejecuta
en el emulador.
</p>
        <p>
De hecho, si se instala el <a href="http://msdn.microsoft.com/mobility/downloads/sdks/default.aspx" target="_blank">SDK
de Windows Mobile 2003</a> se instalan las nuevas imágenes de Windows CE .NET
4.2, con emuladores de Pocket PC 2003, Pocket PC 2003 Phone Edition y SmartPhone 2003.
</p>
        <p>
Pero en algunas ocasiones es interesante lanzar el emulador por si sólo, sin
necesidad de pasar por Visual Studio, por ejemplo para realizar alguna demostración
de una aplicación terminada. Pero no existe ningún acceso directo ni icono
que permita realizar esta tarea. Si habéis instalado el SDK mencionado arriba,
podéis arrancar el emulador sin pasar por Visual Studio de la siguiente forma
(suponiendo que lo habéis instalado en C:\ con las rutas por omisión):
</p>
        <p>
Para arrancar el emulador con una imagen de Pocket PC 2003
</p>
        <p>
"C:\Program Files\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\ConnectionManager\Bin\emulator.exe"
/ethernet shared /CEImage "C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Emulation\PPC_2003_WWE_VIRTUAL_RADIO.bin"
/skin "C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Emulation\phone\Pocket_PC_PE_Emulator_Skin.xml"
</p>
        <p>
Para arrancar el emulador con una imagen de SmartPhone 2003
</p>
        <p>
"C:\Program Files\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\ConnectionManager\Bin\emulator.exe"
/ethernet virtualswitch /CEImage "C:\Program Files\Windows CE Tools\wce420\SMARTPHONE
2003\Emulation\SP_2003_WWE_VIRTUAL_RADIO.bin" /skin "C:\Program Files\Windows CE Tools\wce420\SMARTPHONE
2003\Emulation\Smartphone_Emulator_Skin.xml"
</p>
        <p>
Estos comandos los podéis incluir en un archivo .bat para lanzarlos con un sólo
icono.
</p>
        <p>
Además es muy fácil crear 'skins' personalizadas con lo que podéis
modificar el aspecto del dispositivo si queréis dar una imagen distinta.
</p>
        <p>
Por otro lado, si queréis probar la aplicación en distintos idiomas, también
podéis descargar imágenes de Pocket PC y SmartPhone individuales, en idiomeas
distintos, para probarlas por separado.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=de5e6de1-5cdb-4999-9493-649352f0ffab" />
      </body>
      <title>Arrancar el emulador de Windows Mobile sin arrancar Visual Studio</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,de5e6de1-5cdb-4999-9493-649352f0ffab.aspx</guid>
      <link>http://www.byteabyte.net/2004/11/30/ArrancarElEmuladorDeWindowsMobileSinArrancarVisualStudio.aspx</link>
      <pubDate>Tue, 30 Nov 2004 11:53:59 GMT</pubDate>
      <description>&lt;p&gt;
Cuando se desarrollan aplicaciones para dispositivos m&amp;#243;viles, ya sean aplicaciones
hechas con .NET Compact Framework, con Win32 o aplicaciones WAP, es muy &amp;#250;til
usar el emulador de Windows Mobile para poder probar su funcionamiento sin necesidad
de un dispositivo f&amp;#237;sico. El emulador se lanza habitualmente desde dentro del
entorno de Visual Studio .NET y se integra completamente con el depurador, de manera
que se puede avanzar el c&amp;#243;digo paso a paso mientras la aplicaci&amp;#243;n se ejecuta
en el emulador.
&lt;/p&gt;
&lt;p&gt;
De hecho, si se instala el &lt;a href="http://msdn.microsoft.com/mobility/downloads/sdks/default.aspx" target="_blank"&gt;SDK
de Windows Mobile 2003&lt;/a&gt; se instalan las nuevas im&amp;#225;genes de Windows CE .NET
4.2, con emuladores de Pocket PC 2003, Pocket PC 2003 Phone Edition y SmartPhone 2003.
&lt;/p&gt;
&lt;p&gt;
Pero en algunas ocasiones es interesante lanzar el emulador por si s&amp;#243;lo, sin
necesidad de pasar por Visual Studio, por ejemplo para realizar alguna demostraci&amp;#243;n
de una aplicaci&amp;#243;n terminada. Pero no existe ning&amp;#250;n acceso directo ni icono
que permita realizar esta tarea. Si hab&amp;#233;is instalado el SDK mencionado arriba,
pod&amp;#233;is arrancar el emulador sin pasar por Visual Studio de la siguiente forma
(suponiendo que lo hab&amp;#233;is instalado en C:\ con las rutas por omisi&amp;#243;n):
&lt;/p&gt;
&lt;p&gt;
Para arrancar el emulador con una imagen de Pocket PC 2003
&lt;/p&gt;
&lt;p&gt;
"C:\Program Files\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\ConnectionManager\Bin\emulator.exe"
/ethernet shared /CEImage "C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Emulation\PPC_2003_WWE_VIRTUAL_RADIO.bin"
/skin "C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Emulation\phone\Pocket_PC_PE_Emulator_Skin.xml"
&lt;/p&gt;
&lt;p&gt;
Para arrancar el emulador con una imagen de SmartPhone 2003
&lt;/p&gt;
&lt;p&gt;
"C:\Program Files\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\ConnectionManager\Bin\emulator.exe"
/ethernet virtualswitch /CEImage "C:\Program Files\Windows CE Tools\wce420\SMARTPHONE
2003\Emulation\SP_2003_WWE_VIRTUAL_RADIO.bin" /skin "C:\Program Files\Windows CE Tools\wce420\SMARTPHONE
2003\Emulation\Smartphone_Emulator_Skin.xml"
&lt;/p&gt;
&lt;p&gt;
Estos comandos los pod&amp;#233;is incluir en un archivo .bat para lanzarlos con un s&amp;#243;lo
icono.
&lt;/p&gt;
&lt;p&gt;
Adem&amp;#225;s es muy f&amp;#225;cil crear 'skins' personalizadas con lo que pod&amp;#233;is
modificar el aspecto del dispositivo si quer&amp;#233;is dar una imagen distinta.
&lt;/p&gt;
&lt;p&gt;
Por otro lado, si quer&amp;#233;is probar la aplicaci&amp;#243;n en distintos idiomas, tambi&amp;#233;n
pod&amp;#233;is descargar im&amp;#225;genes de Pocket PC y SmartPhone individuales, en idiomeas
distintos, para probarlas por separado.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=de5e6de1-5cdb-4999-9493-649352f0ffab" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,de5e6de1-5cdb-4999-9493-649352f0ffab.aspx</comments>
      <category>.NET</category>
      <category>Microsoft</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=ef631aef-be8e-416d-844a-1a16cda532a6</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,ef631aef-be8e-416d-844a-1a16cda532a6.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,ef631aef-be8e-416d-844a-1a16cda532a6.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=ef631aef-be8e-416d-844a-1a16cda532a6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recientemente se la liberado una nueva versión de FxCop (v 1.312).
</p>
        <p>
Para los que no lo conozcáis, FxCop es una herramienta que permite examinar código
.NET compilado (.dll, .exe) y comprobarlo contra una serie de reglas, obteniendo un
informe final de cumplimiento de las mismas. La herramienta dispone de un gran número
de reglas predefinidas, agrupadas por temas, como Seguridad, Estilo, etc. El informe
final muestra el cumplimiento o no de las reglas seleccionadas, y si no se cumplen
da la razón concreta y por qué debería cumplirla, de manera que se
pueda decidir sobre si se debe modificar el código antes de entregarlo al usuario
final.
</p>
        <p>
Además la herramienta es extensible, es decir, podemos crear nuestras propias
reglas y verificar si se cumplen o no en las aplicaciones que desarrollemos. Esto
es muy útil en el caso de equipos de desarrollo donde se establecen unas determinadas
normas de estilo y codificación que todos los programadores han de seguir. Con
esta herramienta es muy sencillo verificar el cumplimiento de las reglas y decidir
si un determinado componente de código ha de incluirse en la aplicación
final o ha de modificarse.
</p>
        <p>
Pero es mejor probar la herramienta (gratuita) que leer sobre ella. La última
versión la podéis <a target="_blank" href="http://www.gotdotnet.com/team/fxcop/">descargar
aquí</a>.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=ef631aef-be8e-416d-844a-1a16cda532a6" />
      </body>
      <title>Nueva versión de FxCop</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,ef631aef-be8e-416d-844a-1a16cda532a6.aspx</guid>
      <link>http://www.byteabyte.net/2004/11/24/NuevaVersi%c3%b3nDeFxCop.aspx</link>
      <pubDate>Wed, 24 Nov 2004 16:37:46 GMT</pubDate>
      <description>&lt;p&gt;
Recientemente se la liberado una nueva versi&amp;#243;n de FxCop (v 1.312).
&lt;/p&gt;
&lt;p&gt;
Para los que no lo conozc&amp;#225;is, FxCop es una herramienta que permite examinar c&amp;#243;digo
.NET compilado (.dll, .exe) y comprobarlo contra una serie de reglas, obteniendo un
informe final de cumplimiento de las mismas. La herramienta dispone de un gran n&amp;#250;mero
de reglas predefinidas, agrupadas por temas, como Seguridad, Estilo, etc. El informe
final muestra el cumplimiento o no de las reglas seleccionadas, y si no se cumplen
da la raz&amp;#243;n concreta y por qu&amp;#233; deber&amp;#237;a cumplirla, de manera que se
pueda decidir sobre si se debe modificar el c&amp;#243;digo antes de entregarlo al usuario
final.
&lt;/p&gt;
&lt;p&gt;
Adem&amp;#225;s la herramienta es extensible, es decir, podemos crear nuestras propias
reglas y verificar si se cumplen o no en las aplicaciones que desarrollemos. Esto
es muy &amp;#250;til en el caso de equipos de desarrollo donde se establecen unas determinadas
normas de estilo y codificaci&amp;#243;n que todos los programadores han de seguir. Con
esta herramienta es muy sencillo verificar el cumplimiento de las reglas y decidir
si un determinado componente de c&amp;#243;digo ha de incluirse en la aplicaci&amp;#243;n
final o ha de modificarse.
&lt;/p&gt;
&lt;p&gt;
Pero es mejor probar la herramienta (gratuita) que leer sobre ella. La &amp;#250;ltima
versi&amp;#243;n la pod&amp;#233;is &lt;a target="_blank" href="http://www.gotdotnet.com/team/fxcop/"&gt;descargar
aqu&amp;#237;&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=ef631aef-be8e-416d-844a-1a16cda532a6" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,ef631aef-be8e-416d-844a-1a16cda532a6.aspx</comments>
      <category>.NET</category>
    </item>
    <item>
      <trackback:ping>http://www.byteabyte.net/Trackback.aspx?guid=d5a9fdbe-c273-4d50-8731-2e00188d8c56</trackback:ping>
      <pingback:server>http://www.byteabyte.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.byteabyte.net/PermaLink,guid,d5a9fdbe-c273-4d50-8731-2e00188d8c56.aspx</pingback:target>
      <dc:creator>Alejandro Mezcua</dc:creator>
      <wfw:comment>http://www.byteabyte.net/CommentView,guid,d5a9fdbe-c273-4d50-8731-2e00188d8c56.aspx</wfw:comment>
      <wfw:commentRss>http://www.byteabyte.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d5a9fdbe-c273-4d50-8731-2e00188d8c56</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Buscando información para la creación de controles para Windows Forms me
he topado con este sitio que no conocía: GDI+ FAQ (<a href="http://www.bobpowell.net/faqmain.htm" target="_blank">http://www.bobpowell.net/faqmain.htm</a>).
</p>
        <p>
Si desarrolláis aplicaciones gráficas o controles de usuario, este sitio
contiene un buen número de técnicas para haceros la vida más fácil.
</p>
        <img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=d5a9fdbe-c273-4d50-8731-2e00188d8c56" />
      </body>
      <title>GDI+ FAQ</title>
      <guid isPermaLink="false">http://www.byteabyte.net/PermaLink,guid,d5a9fdbe-c273-4d50-8731-2e00188d8c56.aspx</guid>
      <link>http://www.byteabyte.net/2004/09/16/GDIFAQ.aspx</link>
      <pubDate>Thu, 16 Sep 2004 18:45:20 GMT</pubDate>
      <description>&lt;p&gt;
Buscando informaci&amp;#243;n para la creaci&amp;#243;n de controles para Windows Forms me
he topado con este sitio que no conoc&amp;#237;a: GDI+ FAQ (&lt;a href="http://www.bobpowell.net/faqmain.htm" target=_blank&gt;http://www.bobpowell.net/faqmain.htm&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
Si desarroll&amp;#225;is aplicaciones gr&amp;#225;ficas o controles de usuario, este sitio
contiene un buen n&amp;#250;mero de t&amp;#233;cnicas para haceros la vida m&amp;#225;s f&amp;#225;cil.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.byteabyte.net/aggbug.ashx?id=d5a9fdbe-c273-4d50-8731-2e00188d8c56" /&gt;</description>
      <comments>http://www.byteabyte.net/CommentView,guid,d5a9fdbe-c273-4d50-8731-2e00188d8c56.aspx</comments>
      <category>.NET</category>
    </item>
  </channel>
</rss>