<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">

<channel>
	<title>Tecnico Programador</title>
	
	<link>http://tectonilogia.com</link>
	<description>Informatica, desarrollo, diseño y todo lo que pueda envolver a la tecnologia</description>
	<lastBuildDate>Thu, 24 May 2012 00:50:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/TecnicoMerlos" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="tecnicomerlos" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">TecnicoMerlos</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Explicación UTF-8 Encoding y porque el XmlDocument da problemas</title>
		<link>http://tectonilogia.com/explicacion-utf-8-encoding-y-porque-el-xmldocument-da-problemas/</link>
		<comments>http://tectonilogia.com/explicacion-utf-8-encoding-y-porque-el-xmldocument-da-problemas/#comments</comments>
		<pubDate>Thu, 24 May 2012 00:50:44 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[.Net C#]]></category>
		<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Programas]]></category>
		<category><![CDATA[Encoding]]></category>
		<category><![CDATA[UTF8]]></category>
		<category><![CDATA[Xml]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=567</guid>
		<description><![CDATA[<p><img width="208" height="128" src="http://tectonilogia.com/wp-content/uploads/2012/05/utf8-bom-byte-order-mark.jpg" class="attachment-post-thumbnail wp-post-image" alt="utf8 bom byte order mark" title="utf8 bom byte order mark" /></p>La <a href="http://es.wikipedia.org/wiki/UTF-8" target="_blank" title="UTF 8 wikipedia">codificación UTF-8</a> es una de las más utilizadas para representar cualquier carácter Unicode. La codificación usa símbolos de longitud variable (de 1 a 4 bytes por carácter unicode). Es decir, que 1 carcater unicode puede ocupar hasta 4 bytes, cuando en ascii 1 caracter es 1 byte.  

Una forma de identificar que el texto esta <strong>codificado en UTF-8</strong> es con el <strong>BOM Byte Order Mark</strong>, que son una serie de 3 bytes concretos. Útil por ejemplo en el envio de texto por stream. 
<pre><code>un carácter 0xFEFF, codificado en UTF-8 como 0xEF,0xBB,0xBF o 239 187 191</code></pre> 
<span id="more-567"></span>
Resumiendo, si al principio del texto vienen estos bytes significa que la codificación es UTF-8, de esta forma el receptor puede identificarlo y tratar el texto con el "Encoding" correcto. El problema es que el BOM es opcional en la definición UTF-8 y no siempre es soportado por el software que debe leer texto UTF8. Por ejemplo en PHP puede causar problemas, algunos programas de Microsoft lo incorporan automáticamente y otros no lo soportan, en conclusión hay que tener cuidado con su uso y asegurarse que el receptor sabe interpretarlo correctamente.

Más información en <a href="http://en.wikipedia.org/wiki/Byte_order_mark" target="_blank" title="BOM UTF-8 Encoding Wikipedia">BOM Byte Order Mark</a>.

<h3>XmlDocument desde .Net</h3>
La clase <strong>XmlDocument</strong> no soporta cargar un Xml con el BOM incorporado, dará error. Si os fijais, veremos en un String con un Xml en UTF8 y el BOM que los 3 primeros bytes son 239 187 191.
La forma de poder cargar un XML con BOM utilizando la clase XmlDocument es utilizar la clase <a href="http://msdn.microsoft.com/en-us/library/s064f8w2.aspx" target="_blank" title="UTF8Encoding">UTF8Encoding</a>

De alguna forma crear una clase UTF8 sin BOM y convertirlo, 
<pre><code>String utf8WithoutBom = new System.Text.UTF8Encoding(False);</code></pre>
O Crear una clase con BOM y utilizar el método "GetPreamble" para saber si el texto lo contiene y en tal caso eliminarlo.
<pre><code>UTF8Encoding utf8WithBom = new System.Text.UTF8Encoding(true);
string byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
if (xml.StartsWith(byteOrderMarkUtf8))
{
	xml = xml.Remove(0, byteOrderMarkUtf8.Length);
}</pre></code>

Las claves están aquí, sólo hay que encontrar como utilizarlas correctamente.
]]></description>
			<content:encoded><![CDATA[<p><img width="208" height="128" src="http://tectonilogia.com/wp-content/uploads/2012/05/utf8-bom-byte-order-mark.jpg" class="attachment-post-thumbnail wp-post-image" alt="utf8 bom byte order mark" title="utf8 bom byte order mark" /></p>La <a href="http://es.wikipedia.org/wiki/UTF-8" target="_blank" title="UTF 8 wikipedia">codificación UTF-8</a> es una de las más utilizadas para representar cualquier carácter Unicode. La codificación usa símbolos de longitud variable (de 1 a 4 bytes por carácter unicode). Es decir, que 1 carcater unicode puede ocupar hasta 4 bytes, cuando en ascii 1 caracter es 1 byte.  

Una forma de identificar que el texto esta <strong>codificado en UTF-8</strong> es con el <strong>BOM Byte Order Mark</strong>, que son una serie de 3 bytes concretos. Útil por ejemplo en el envio de texto por stream. 
<pre><code>un carácter 0xFEFF, codificado en UTF-8 como 0xEF,0xBB,0xBF o 239 187 191</code></pre> 
<span id="more-567"></span>
Resumiendo, si al principio del texto vienen estos bytes significa que la codificación es UTF-8, de esta forma el receptor puede identificarlo y tratar el texto con el "Encoding" correcto. El problema es que el BOM es opcional en la definición UTF-8 y no siempre es soportado por el software que debe leer texto UTF8. Por ejemplo en PHP puede causar problemas, algunos programas de Microsoft lo incorporan automáticamente y otros no lo soportan, en conclusión hay que tener cuidado con su uso y asegurarse que el receptor sabe interpretarlo correctamente.

Más información en <a href="http://en.wikipedia.org/wiki/Byte_order_mark" target="_blank" title="BOM UTF-8 Encoding Wikipedia">BOM Byte Order Mark</a>.

<h3>XmlDocument desde .Net</h3>
La clase <strong>XmlDocument</strong> no soporta cargar un Xml con el BOM incorporado, dará error. Si os fijais, veremos en un String con un Xml en UTF8 y el BOM que los 3 primeros bytes son 239 187 191.
La forma de poder cargar un XML con BOM utilizando la clase XmlDocument es utilizar la clase <a href="http://msdn.microsoft.com/en-us/library/s064f8w2.aspx" target="_blank" title="UTF8Encoding">UTF8Encoding</a>

De alguna forma crear una clase UTF8 sin BOM y convertirlo, 
<pre><code>String utf8WithoutBom = new System.Text.UTF8Encoding(False);</code></pre>
O Crear una clase con BOM y utilizar el método "GetPreamble" para saber si el texto lo contiene y en tal caso eliminarlo.
<pre><code>UTF8Encoding utf8WithBom = new System.Text.UTF8Encoding(true);
string byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
if (xml.StartsWith(byteOrderMarkUtf8))
{
	xml = xml.Remove(0, byteOrderMarkUtf8.Length);
}</pre></code>

Las claves están aquí, sólo hay que encontrar como utilizarlas correctamente.
]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/explicacion-utf-8-encoding-y-porque-el-xmldocument-da-problemas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tip: Remove Install ePo Agent McAfee</title>
		<link>http://tectonilogia.com/tip-remove-install-epo-agent-mcafee/</link>
		<comments>http://tectonilogia.com/tip-remove-install-epo-agent-mcafee/#comments</comments>
		<pubDate>Tue, 22 May 2012 13:40:08 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[Antivirus]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[Apuntes]]></category>
		<category><![CDATA[ePo agent]]></category>
		<category><![CDATA[McAfee]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=565</guid>
		<description><![CDATA[<p><img width="419" height="419" src="http://tectonilogia.com/wp-content/uploads/2012/05/epo-agent-mcafee.gif" class="attachment-post-thumbnail wp-post-image" alt="epo agent mcafee" title="epo agent mcafee" /></p>El proceso <strong>ePo Agent de McAfee</strong> es el encargado de revisar las políticas de seguridad del antivirus instalado en diferentes máquinas (McAfee). Esta herramienta permite administrar la seguridad y las políticas de diferentes equipos, haciendo que se cumplan las reglas configuradas. En otras palabras, si un usuario desconfigura el McAfee, esta herramienta restaura la configuración que ha diseñado el responsable de seguridad.

Lo malo es, que en ocasiones la configuración que pueda ser correcta para unos usuarios, puede ser un gran "dolor de cabeza" para otros. Porque un antivirus mal configurado es peor que un virus. Por este motivo, como medida temporal, curiosidad, o por algún motivo concreto, se puede <strong>eliminar el proceso ePo agent de Mcfee</strong> para que no restaure la configuración. Esto no siempre funciona, porque normalmente una de las tareas del servidor es revisar que el "agent" este en ejecución y sino es así lo levanta.

<h3>Como eliminar el Agent (si se puede)</h3>
<span id="more-565"></span>
Ejecutando el comando "frminst /remove=agent" de la siguiente forma, situamos en la carpeta ponemos:
<pre><code>C:\Archivos de programa\McAfee\Common Framework&gt;frminst /remove=agent
C:\Archivos de programa\McAfee\Common Framework&gt;</code></pre>

Más información en la <a href="https://community.mcafee.com/thread/8350" target="_blank" title="community mcafee">comunidad mcafee</a>
]]></description>
			<content:encoded><![CDATA[<p><img width="419" height="419" src="http://tectonilogia.com/wp-content/uploads/2012/05/epo-agent-mcafee.gif" class="attachment-post-thumbnail wp-post-image" alt="epo agent mcafee" title="epo agent mcafee" /></p>El proceso <strong>ePo Agent de McAfee</strong> es el encargado de revisar las políticas de seguridad del antivirus instalado en diferentes máquinas (McAfee). Esta herramienta permite administrar la seguridad y las políticas de diferentes equipos, haciendo que se cumplan las reglas configuradas. En otras palabras, si un usuario desconfigura el McAfee, esta herramienta restaura la configuración que ha diseñado el responsable de seguridad.

Lo malo es, que en ocasiones la configuración que pueda ser correcta para unos usuarios, puede ser un gran "dolor de cabeza" para otros. Porque un antivirus mal configurado es peor que un virus. Por este motivo, como medida temporal, curiosidad, o por algún motivo concreto, se puede <strong>eliminar el proceso ePo agent de Mcfee</strong> para que no restaure la configuración. Esto no siempre funciona, porque normalmente una de las tareas del servidor es revisar que el "agent" este en ejecución y sino es así lo levanta.

<h3>Como eliminar el Agent (si se puede)</h3>
<span id="more-565"></span>
Ejecutando el comando "frminst /remove=agent" de la siguiente forma, situamos en la carpeta ponemos:
<pre><code>C:\Archivos de programa\McAfee\Common Framework&gt;frminst /remove=agent
C:\Archivos de programa\McAfee\Common Framework&gt;</code></pre>

Más información en la <a href="https://community.mcafee.com/thread/8350" target="_blank" title="community mcafee">comunidad mcafee</a>
]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/tip-remove-install-epo-agent-mcafee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tip: Como Ampliar/Extender Disco en Windows XP SP3</title>
		<link>http://tectonilogia.com/tip-como-ampliarextender-disco-en-windows-xp-sp3/</link>
		<comments>http://tectonilogia.com/tip-como-ampliarextender-disco-en-windows-xp-sp3/#comments</comments>
		<pubDate>Thu, 10 May 2012 07:23:51 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[Diskpart]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=563</guid>
		<description><![CDATA[<p><img width="300" height="289" src="http://tectonilogia.com/wp-content/uploads/2012/05/harddisktools.jpg" class="attachment-post-thumbnail wp-post-image" alt="harddisktools" title="harddisktools" /></p><strong>Como ampliar o extender el disco o partición en un Windows XP</strong>. En ocasiones necesitamos ampliar el disco de una <strong>máquina virtual (virtual machine)</strong> o ampliar el espacio de una partición del disco. Para poder hacerlo necesitamos "espacio no utilizado". Esto se consigue si existe espacio no asignado a ninguna partición y no esta formateado. <em>(creo, no soy de sistemas)</em>.

Desde una máquina virtual con VMWare es sencillo ampliar el espacio del disco: "VMWare: Settings - seleccionar Hard Disc - Utilities - Extend." El problema con windows xp, es que no autodectecta que el disco ha crecido. El nuevo espacio asignado no lo reconoce, por lo que hay que indicarle al sistema que el disco a crecido y que lo extienda.

<h3>Posible Solución</h3>
<span id="more-563"></span>
A través del comando <strong>diskpart</strong> tal como nos dice la <a href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/dm_extend_basic_volume.mspx?mfr=true" title="diskpart extender disco" target="_blank">MSDN</a>
Los pasos a seguir tipo resumen es:
<ul>
<li>Abrir una consola en línea de comandos (Ejecutar: cmd)</li>
<li>Escribir <em>diskpart</em>. Para entendernos, entra en "modo" DISKPART</li>
<li>Escribir <em>list volume</em>. Mostrará un listado de los discos, y tenemos que apuntar el que nos interesa.</li>
<li>Escribir <em>select volume n</em>. Donde n es el número del disco</li>
<li>Escribir <em>extend</em>. Como opción podemos poner extend n (n=Mb)</li>
</ul>

La prueba que realicé me funcionó correctamente. Menos mal que tenemos a la MSDN.
]]></description>
			<content:encoded><![CDATA[<p><img width="300" height="289" src="http://tectonilogia.com/wp-content/uploads/2012/05/harddisktools.jpg" class="attachment-post-thumbnail wp-post-image" alt="harddisktools" title="harddisktools" /></p><strong>Como ampliar o extender el disco o partición en un Windows XP</strong>. En ocasiones necesitamos ampliar el disco de una <strong>máquina virtual (virtual machine)</strong> o ampliar el espacio de una partición del disco. Para poder hacerlo necesitamos "espacio no utilizado". Esto se consigue si existe espacio no asignado a ninguna partición y no esta formateado. <em>(creo, no soy de sistemas)</em>.

Desde una máquina virtual con VMWare es sencillo ampliar el espacio del disco: "VMWare: Settings - seleccionar Hard Disc - Utilities - Extend." El problema con windows xp, es que no autodectecta que el disco ha crecido. El nuevo espacio asignado no lo reconoce, por lo que hay que indicarle al sistema que el disco a crecido y que lo extienda.

<h3>Posible Solución</h3>
<span id="more-563"></span>
A través del comando <strong>diskpart</strong> tal como nos dice la <a href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/dm_extend_basic_volume.mspx?mfr=true" title="diskpart extender disco" target="_blank">MSDN</a>
Los pasos a seguir tipo resumen es:
<ul>
<li>Abrir una consola en línea de comandos (Ejecutar: cmd)</li>
<li>Escribir <em>diskpart</em>. Para entendernos, entra en "modo" DISKPART</li>
<li>Escribir <em>list volume</em>. Mostrará un listado de los discos, y tenemos que apuntar el que nos interesa.</li>
<li>Escribir <em>select volume n</em>. Donde n es el número del disco</li>
<li>Escribir <em>extend</em>. Como opción podemos poner extend n (n=Mb)</li>
</ul>

La prueba que realicé me funcionó correctamente. Menos mal que tenemos a la MSDN.
]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/tip-como-ampliarextender-disco-en-windows-xp-sp3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La importancia de la Comunicación</title>
		<link>http://tectonilogia.com/la-importancia-de-la-comunicacion/</link>
		<comments>http://tectonilogia.com/la-importancia-de-la-comunicacion/#comments</comments>
		<pubDate>Wed, 09 May 2012 10:43:24 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[OffTopic]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=561</guid>
		<description><![CDATA[Si tengo claro el concepto o requerimiento, la intención del desarrollo será el correcto. De esta forma el resultado será el esperado. Si no lo entiendo correctamente, la intención del desarrollo será incorrecto, y los resultados no serán los esperados.]]></description>
			<content:encoded><![CDATA[<p>Si tengo claro el concepto o requerimiento, la intención del desarrollo será el correcto. De esta forma el resultado será el esperado. Si no lo entiendo correctamente, la intención del desarrollo será incorrecto, y los resultados no serán los esperados. </p>
]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/la-importancia-de-la-comunicacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cuando se es Programador</title>
		<link>http://tectonilogia.com/cuando-se-es-programador/</link>
		<comments>http://tectonilogia.com/cuando-se-es-programador/#comments</comments>
		<pubDate>Sat, 31 Mar 2012 08:23:07 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[OffTopic]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=560</guid>
		<description><![CDATA[Cuando te pasas horas delante del Ordenador alimentandote de Código.]]></description>
			<content:encoded><![CDATA[<p>Cuando te pasas horas delante del Ordenador alimentandote de Código.</p>
]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/cuando-se-es-programador/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Actualizar JDKHome de NetBeans (Or java Platform)</title>
		<link>http://tectonilogia.com/actualizar-jdkhome-de-netbeans-or-java-platform/</link>
		<comments>http://tectonilogia.com/actualizar-jdkhome-de-netbeans-or-java-platform/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 21:41:45 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Programas]]></category>
		<category><![CDATA[NetBeans]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=559</guid>
		<description><![CDATA[Para actualizar la versión del JDK que utiliza NetBeans para ejecutarse, tenemos que modificar el fichero netbeans.conf. Por defecto se encuentra en &#8220;C:\Programs Files\[NetBeans Folder]\etc&#8221; y modificar la clave netbeans_jdkhome. netbeans_jdkhome=&#34;C:\Program Files\Java\jdk1.7.0_03&#34;]]></description>
			<content:encoded><![CDATA[<p>Para <strong>actualizar la versión del JDK que utiliza NetBeans para ejecutarse</strong>, tenemos que modificar el fichero netbeans.conf. Por defecto se encuentra en &#8220;C:\Programs Files\[NetBeans Folder]\etc&#8221; y modificar la clave netbeans_jdkhome.</p>
<pre><code>netbeans_jdkhome=&quot;C:\Program Files\Java\jdk1.7.0_03&quot;</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/actualizar-jdkhome-de-netbeans-or-java-platform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compatibilidad en aplicaciones .Net con diferentes versiones del Framework .Net</title>
		<link>http://tectonilogia.com/compatibilidad-en-aplicaciones-net-con-diferentes-versiones-del-framework-net/</link>
		<comments>http://tectonilogia.com/compatibilidad-en-aplicaciones-net-con-diferentes-versiones-del-framework-net/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 11:20:27 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[.Net C#]]></category>
		<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Apuntes]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=556</guid>
		<description><![CDATA[<p><img width="400" height="300" src="http://tectonilogia.com/wp-content/uploads/2012/03/Compatibilidad.jpg" class="attachment-post-thumbnail wp-post-image" alt="Compatibilidad" title="Compatibilidad" /></p><strong>Cuando desarrollas utilizando un Framework .Net y la máquina destino tiene otra versión</strong>. Es decir, por ejemplo desarrollas utilizando VS2008 y Framework 3.5 y el Ordenador destino tiene instalado el Framework 4.0. Esto no quiere decir que tenga por obligación el Framework 3.5 instalado, y al arrancar la aplicación dará un error. <a href="http://msdn.microsoft.com/es-es/library/ff602939.aspx" target="_blank" title="Compatibilidad de versiones .Net Framework">Compatibilidad Versiones .Net Framework MSDN</a>

<blockquote>
De manera predeterminada, una aplicación se ejecuta en la versión de .NET Framework para la que se creó. Si esa versión no está presente y en el archivo de configuración de la aplicación no se han definido las versiones compatibles, puede producirse un error de inicialización de .NET Framework. En este caso, el intento de ejecutar la aplicación no tendrá éxito.
</blockquote>
<span id="more-556"></span>
Esto se puede solucionar, utilizando un fichero de configuración de aplicación <em>(app.config)</em> y los tags <strong>supportedRuntime</strong> <a href="http://msdn.microsoft.com/es-es/library/w4atty68.aspx" target="_blank" title="Elemento supportedRuntime">supportedRuntime MSDN</a>

<pre><code>&lt;configuration&gt;
   &lt;startup&gt;
	  &lt;supportedRuntime version=&quot;v2.0.50727&quot; /&gt;
	  &lt;supportedRuntime version=&quot;v4.0.30319&quot; /&gt;	  
   &lt;/startup&gt;
&lt;/configuration&gt;
</code></pre>

<strong>Atributo version</strong>
Un valor de cadena que especifica la versión de Common Language Runtime (CLR) que es compatible con esta aplicación. Las tres primeras versiones de CLR se especifican mediante "v1.0.3705", "v1.1.4322" y "v2.0.50727". Desde .NET Framework versión 4, solo los números de versión principal y secundaria son necesarios "(es decir, "v4.0" en lugar de "v4.0.30319"). Se recomienda la cadena más corta.
<em>.NET Framework versión 3.0 y 3.5 utilizan la versión 2.0.50727 de CLR.</em>

Una pequeña ayuda que puede sacar de un apuro en alguna que otra ocasión.]]></description>
			<content:encoded><![CDATA[<p><img width="400" height="300" src="http://tectonilogia.com/wp-content/uploads/2012/03/Compatibilidad.jpg" class="attachment-post-thumbnail wp-post-image" alt="Compatibilidad" title="Compatibilidad" /></p><strong>Cuando desarrollas utilizando un Framework .Net y la máquina destino tiene otra versión</strong>. Es decir, por ejemplo desarrollas utilizando VS2008 y Framework 3.5 y el Ordenador destino tiene instalado el Framework 4.0. Esto no quiere decir que tenga por obligación el Framework 3.5 instalado, y al arrancar la aplicación dará un error. <a href="http://msdn.microsoft.com/es-es/library/ff602939.aspx" target="_blank" title="Compatibilidad de versiones .Net Framework">Compatibilidad Versiones .Net Framework MSDN</a>

<blockquote>
De manera predeterminada, una aplicación se ejecuta en la versión de .NET Framework para la que se creó. Si esa versión no está presente y en el archivo de configuración de la aplicación no se han definido las versiones compatibles, puede producirse un error de inicialización de .NET Framework. En este caso, el intento de ejecutar la aplicación no tendrá éxito.
</blockquote>
<span id="more-556"></span>
Esto se puede solucionar, utilizando un fichero de configuración de aplicación <em>(app.config)</em> y los tags <strong>supportedRuntime</strong> <a href="http://msdn.microsoft.com/es-es/library/w4atty68.aspx" target="_blank" title="Elemento supportedRuntime">supportedRuntime MSDN</a>

<pre><code>&lt;configuration&gt;
   &lt;startup&gt;
	  &lt;supportedRuntime version=&quot;v2.0.50727&quot; /&gt;
	  &lt;supportedRuntime version=&quot;v4.0.30319&quot; /&gt;	  
   &lt;/startup&gt;
&lt;/configuration&gt;
</code></pre>

<strong>Atributo version</strong>
Un valor de cadena que especifica la versión de Common Language Runtime (CLR) que es compatible con esta aplicación. Las tres primeras versiones de CLR se especifican mediante "v1.0.3705", "v1.1.4322" y "v2.0.50727". Desde .NET Framework versión 4, solo los números de versión principal y secundaria son necesarios "(es decir, "v4.0" en lugar de "v4.0.30319"). Se recomienda la cadena más corta.
<em>.NET Framework versión 3.0 y 3.5 utilizan la versión 2.0.50727 de CLR.</em>

Una pequeña ayuda que puede sacar de un apuro en alguna que otra ocasión.]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/compatibilidad-en-aplicaciones-net-con-diferentes-versiones-del-framework-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Diferencias entre Clases y Estructuras (Structs) C#</title>
		<link>http://tectonilogia.com/diferencias-entre-clases-y-estructuras-structs-c/</link>
		<comments>http://tectonilogia.com/diferencias-entre-clases-y-estructuras-structs-c/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 09:22:40 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[.Net C#]]></category>
		<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Apuntes]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=555</guid>
		<description><![CDATA[La principal Diferencia entre Classes y Structs es que una es por referencia y la otra por valor. Leyendo el artículo de Koalite comencé a sentir curiosidad sobre el tema, es por ese mismo motivo por el que me dirigí directamente al artículo de la MSDN que mencionaba. Una clase es un tipo de referencia. Cuando se crea un objeto de la clase, la variable a la que se asigna el objeto solo incluye una referencia a dicha memoria. Cuando la referencia a objeto se asigna a una nueva variable, la nueva variable hace referencia al objeto original. Los cambios realizados en una variable se reflejan en la otra variable porque ambas hacen referencia a los mismos datos. Un struct [...]]]></description>
			<content:encoded><![CDATA[<p><strong>La principal Diferencia entre Classes y Structs es que una es por referencia y la otra por valor</strong>. Leyendo el artículo de <a href="http://blog.koalite.com/2012/02/curiosidades-con-structs-en-c/" target="_blank" title="Curiosidades de los Structs">Koalite</a> comencé a sentir curiosidad sobre el tema, es por ese mismo motivo por el que me dirigí directamente al artículo de la <a href="http://msdn.microsoft.com/es-es/library/ms173109.aspx" target="_blank" title="Clases y Estructuras MSDN" rel="nofollow">MSDN</a> que mencionaba.</p>
<blockquote><p><strong>Una clase es un tipo de referencia</strong>. Cuando se crea un objeto de la clase, la variable a la que se asigna el objeto solo incluye una referencia a dicha memoria. Cuando la referencia a objeto se asigna a una nueva variable, la nueva variable hace referencia al objeto original. <u>Los cambios realizados en una variable se reflejan en la otra variable porque ambas hacen referencia a los mismos datos</u>.
</p></blockquote>
<p><span id="more-555"></span></p>
<blockquote><p><strong>Un struct es un tipo de valor</strong>. Cuando se crea un struct, la variable a la que se asigna incluye los datos reales del struct. Cuando el struct se asigna a una nueva variable, se copia. La nueva variable y la variable original contienen por tanto dos copias independientes de los mismos datos. <u>Los cambios realizados en una copia no afectan a la otra copia</u>.
</p></blockquote>
<blockquote><p>En general, las clases se utilizan para modelar comportamiento más complejo o datos que se piensan modificar una vez creado un objeto de clase. Los structs son más adecuadas para pequeñas estructuras de datos que contienen principalmente datos que no se piensan modificar una vez creado el struct.
</p></blockquote>
<p>Todo esto es lo que nos comenta la MSDN. Sabia que se almacenaba una referencia al objeto de la clase, pero no lo había leído directamente de la MSDN. Es este el motivo el porque, en métodos donde pasamos objetos de clases como parámetros, estos pueden sufrir cambios cuando por defecto los parámetros son por valor. Es decir, el parámetro del método recibe directamente la referencia a memoria, y los cambios se verán reflejados. En cambio, para entenderlo, un struct funcionan como un tipo Int, String, &#8230;, es decir, por defecto será por valor y los datos serán una copia.</p>
<p>Supongo que la definición de las clases como referencia es debido al rendimiento. Imaginad que si el compilador tuviera que ir clonando los objetos, aunque tardara un poquito más, que multiplicado por las veces que podemos realizar esta operación en un proceso, ¿lo notaríamos?.</p>
<p><strong>En definitiva, Clases por Referencia y Structs por Valor</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/diferencias-entre-clases-y-estructuras-structs-c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP:Obtener la Pagina Actual Function PageURL</title>
		<link>http://tectonilogia.com/phpobtener-la-pagina-actual-function-pageurl/</link>
		<comments>http://tectonilogia.com/phpobtener-la-pagina-actual-function-pageurl/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 16:54:06 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[RePost]]></category>
		<category><![CDATA[Apuntes]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=554</guid>
		<description><![CDATA[Método en PHP para Obtener la página actual. Teniendo en cuenta si conexión segura o si utiliza un puerto específico. En alguna ocasión puede ser interesante saber en que páginas estamos, por esta razón y por ser un método lo bastánte genérico como poderlo utilizar desde cualquier sitio, nos los guardamos y nos lo apuntamos para futuras referencias. function PageURL() { $pageURL = &#039;http&#039;; if ($_SERVER[&#34;HTTPS&#34;] == &#34;on&#34;) {$pageURL .= &#34;s&#34;;} $pageURL .= &#34;://&#34;; if ($_SERVER[&#34;SERVER_PORT&#34;] != &#34;80&#34;) { $pageURL .= $_SERVER[&#34;SERVER_NAME&#34;].&#34;:&#34;.$_SERVER[&#34;SERVER_PORT&#34;].$_SERVER[&#34;REQUEST_URI&#34;]; } else { $pageURL .= $_SERVER[&#34;SERVER_NAME&#34;].$_SERVER[&#34;REQUEST_URI&#34;]; } return $pageURL; } vía BlogDesarrollo]]></description>
			<content:encoded><![CDATA[<p><strong>Método en PHP para Obtener la página actual</strong>. Teniendo en cuenta si conexión segura o si utiliza un puerto específico. En alguna ocasión puede ser interesante saber en que páginas estamos, por esta razón y por ser un método lo bastánte genérico como poderlo utilizar desde cualquier sitio, nos los guardamos y nos lo apuntamos para futuras referencias.</p>
<p><span id="more-554"></span></p>
<pre><code>function PageURL() {
    $pageURL = &#039;http&#039;;
    if ($_SERVER[&quot;HTTPS&quot;] == &quot;on&quot;) {$pageURL .= &quot;s&quot;;}
    $pageURL .= &quot;://&quot;;
    if ($_SERVER[&quot;SERVER_PORT&quot;] != &quot;80&quot;) {
       $pageURL .= $_SERVER[&quot;SERVER_NAME&quot;].&quot;:&quot;.$_SERVER[&quot;SERVER_PORT&quot;].$_SERVER[&quot;REQUEST_URI&quot;];
    } else {
       $pageURL .= $_SERVER[&quot;SERVER_NAME&quot;].$_SERVER[&quot;REQUEST_URI&quot;];
    }
    return $pageURL;
}</code></pre>
<p>vía <a href="http://blogdesarrollo.com/codigo/2012/02/17/obtener-la-url-actual-con-php/" target="_blank" title="obtener pagina actual php">BlogDesarrollo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/phpobtener-la-pagina-actual-function-pageurl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tip: Convert java project to web project in eclipse</title>
		<link>http://tectonilogia.com/tip-convert-java-project-to-web-project-in-eclipse/</link>
		<comments>http://tectonilogia.com/tip-convert-java-project-to-web-project-in-eclipse/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 11:49:11 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Eclipse]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=552</guid>
		<description><![CDATA[<p><img width="204" height="204" src="http://tectonilogia.com/wp-content/uploads/2012/02/java-project-to-web-project.jpg" class="attachment-post-thumbnail wp-post-image" alt="java project to web project" title="java project to web project" /></p><strong>Como convertir un proyecto java en un proyecto web en eclipse</strong>. Sin tener en cuenta el motivo, cuando Eclipse reconoce una aplicación como "Java project", y queremos asociarla a nuestro servidor web <em>(p.ej. Tomcat)</em> puede darnos el siguiente error: 
<blockquote>the selection did not contain any resource that can run on a server</blockquote>
Es normal, un proyecto java no es considerado un proyecto web, por lo tanto no puede ejecutarlo en un servidor web. Por ese mismo motivo tenemos que convertir el proyecto, para que esta asociación la tenga en cuenta. Otro tema es la forma de como trabajemos, como si queremos desplegar el war manualmente.
<span id="more-552"></span>
Basándonos en el siguiente tutorial "<a href="http://www.mkyong.com/java/how-to-convert-java-project-to-web-project-in-eclipse/" targeT="_blank" title="convert java project to web project">convert java project to web project</a>", podemos conseguirlo. En resumen, es modificar el fichero <em>.project</em> para que incorpore la sección "facets" <em>(facetas)</em>. De esta forma podemos configurar el proyecto como "Dynamic Web Module".

<h3>Las Claves</h3>
En la sección de "BuildSpecs" incluir la sección
<pre><code>&lt;buildCommand&gt;
	&lt;name&gt;org.eclipse.wst.common.project.<strong>facet</strong>.core.builder&lt;/name&gt;
	&lt;arguments&gt;
	&lt;/arguments&gt;
&lt;/buildCommand&gt;</code></pre>

En la sección de "natures" incluir la sección
<pre><code>&lt;nature&gt;org.eclipse.wst.common.project.facet.core.nature&lt;/nature&gt;</code></pre>

<em>Testeado con Eclipse 3.2 y Ganymede</em>

Posteriormente, <strong>en las propedidades del proyecto a través el submenu "Project facets", podemos configurar la versión del "Dynamic Web Module" y de "Java".</strong>
]]></description>
			<content:encoded><![CDATA[<p><img width="204" height="204" src="http://tectonilogia.com/wp-content/uploads/2012/02/java-project-to-web-project.jpg" class="attachment-post-thumbnail wp-post-image" alt="java project to web project" title="java project to web project" /></p><strong>Como convertir un proyecto java en un proyecto web en eclipse</strong>. Sin tener en cuenta el motivo, cuando Eclipse reconoce una aplicación como "Java project", y queremos asociarla a nuestro servidor web <em>(p.ej. Tomcat)</em> puede darnos el siguiente error: 
<blockquote>the selection did not contain any resource that can run on a server</blockquote>
Es normal, un proyecto java no es considerado un proyecto web, por lo tanto no puede ejecutarlo en un servidor web. Por ese mismo motivo tenemos que convertir el proyecto, para que esta asociación la tenga en cuenta. Otro tema es la forma de como trabajemos, como si queremos desplegar el war manualmente.
<span id="more-552"></span>
Basándonos en el siguiente tutorial "<a href="http://www.mkyong.com/java/how-to-convert-java-project-to-web-project-in-eclipse/" targeT="_blank" title="convert java project to web project">convert java project to web project</a>", podemos conseguirlo. En resumen, es modificar el fichero <em>.project</em> para que incorpore la sección "facets" <em>(facetas)</em>. De esta forma podemos configurar el proyecto como "Dynamic Web Module".

<h3>Las Claves</h3>
En la sección de "BuildSpecs" incluir la sección
<pre><code>&lt;buildCommand&gt;
	&lt;name&gt;org.eclipse.wst.common.project.<strong>facet</strong>.core.builder&lt;/name&gt;
	&lt;arguments&gt;
	&lt;/arguments&gt;
&lt;/buildCommand&gt;</code></pre>

En la sección de "natures" incluir la sección
<pre><code>&lt;nature&gt;org.eclipse.wst.common.project.facet.core.nature&lt;/nature&gt;</code></pre>

<em>Testeado con Eclipse 3.2 y Ganymede</em>

Posteriormente, <strong>en las propedidades del proyecto a través el submenu "Project facets", podemos configurar la versión del "Dynamic Web Module" y de "Java".</strong>
]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/tip-convert-java-project-to-web-project-in-eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	<media:rating>nonadult</media:rating></channel>
</rss><!-- Dynamic page generated in 0.158 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-05-26 17:23:32 --><!-- Compression = gzip -->

