<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog de corrideat</title>
	<atom:link href="http://blog.msl37.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.msl37.org</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 11 Jan 2010 19:32:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Biografía del Doctor Andrés Rafael Isola</title>
		<link>http://blog.msl37.org/2009/09/29/107/</link>
		<comments>http://blog.msl37.org/2009/09/29/107/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 18:08:13 +0000</pubDate>
		<dc:creator>corrideat</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.msl37.org/?p=107</guid>
		<description><![CDATA[Nació el día ocho de diciembre de 1906 en Intendente Alvear (Provincia de La Pampa.) A los pocos meses, debido al deceso de su madre, su familia (su padre, sus tres hermanos mayores y él) fijó residencia en la Capital Federal.
Ingresó a la Facultad de Medicina de la Universidad de Buenos Aires, donde se recibió [...]]]></description>
			<content:encoded><![CDATA[<p>Nació el día ocho de diciembre de 1906 en Intendente Alvear (Provincia de La Pampa.) A los pocos meses, debido al deceso de su madre, su familia (su padre, sus tres hermanos mayores y él) fijó residencia en la Capital Federal.</p>
<p>Ingresó a la Facultad de Medicina de la Universidad de Buenos Aires, donde se recibió de Doctor en Medicina, especializado en cirugía, en el año 1935.</p>
<p>Tiempo más tarde, se trasladó a la localidad de Neuquén, donde residió hasta hacer una suplencia en la ciudad de Puerto Madryn, reemplazando al Dr. Buzzi, quien se hallaba en un viaje por un año (1936) en Europa.</p>
<p>En 1940 asumió la Dirección del Hospital de Ushuaia, en el entonces Territorio Nacional de Tierra del Fuego, siendo el segundo director médico de esa ciudad.</p>
<p>En 1945, es trasladado al Hospital Subzonal de Puerto Madryn, Territorio Nacional del Chubut), para cubrir la vacante surgida a raíz de la jubilación del Dr. Roberto Buzzi, a quien reemplazara algunos años atrás.</p>
<p><span id="more-107"></span></p>
<p>Fue médico de policía (Ad honorem), hasta que Chubut, adquiriera la calidad de Provincia, cuando lo nombraron para esa Repartición Provincial.</p>
<p>En el año 1976 se jubiló de estos cargos, y comenzó a dedicarse en forma exclusiva a su profesión en su consultorio, primero ubicado en la calle Julio Argentino Roca, número 39 y después en la calle San Martín, número 596, hasta su retiro definitivo.</p>
<p>Cumplió también con tareas cívicas:</p>
<ul>
<li>Fue fundador (entre otros) de la Escuela Nacional de Comercio.</li>
<li>Ejerció como profesor de materias afines a su profesión, al igual que otros profesionales que pusieron a disposición su tiempo ad honorem, hasta que fue conformado el grupo de profesores para la enseñanza.</li>
<li>Fue socio fundador y consejero de la Cooperativa Eléctrica.</li>
<li>Fue Comisionado Municipal desde el dos de mayo de mil novecientos cincuenta y dos hasta el año mil novecientos cincuenta y cuatro.</li>
</ul>
<p>Su familia se compuso de su esposa (hoy fallecida) y tres hijos.</p>
<p>Falleció el día catorce de enero de mil novecientos ochenta y seis.</p>
<p>Por Decreto Provincial número 880/1988, su nombre fue impuesto al nuevo hospital de nivel VI de Puerto Madryn, en reconocimiento a su larga trayectoria médica, y por sobre todas las cosas, a su calidad humana.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.msl37.org/2009/09/29/107/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>La AFIP y los módulos de S.I.Ap.</title>
		<link>http://blog.msl37.org/2009/09/14/101/</link>
		<comments>http://blog.msl37.org/2009/09/14/101/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 23:16:34 +0000</pubDate>
		<dc:creator>corrideat</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.msl37.org/?p=101</guid>
		<description><![CDATA[Leyendo un artículo publicado en enSIAPados me encontré con que la agencia gubernamental AFIP estaba, aparentemente violando la licencia GNU GPL.
Como toda la cuestión me pareció improbable, porque confío en que la citada agencia hace las cosas adecuadamente y no infringe copyrights de terceros, fue que hoy me tomé el trabajo de descargarme el SIAp, [...]]]></description>
			<content:encoded><![CDATA[<p>Leyendo un artículo <a href="http://www.trucholand.com.ar/blog/?p=105" >publicado en enSIAPados</a> me encontré con que la agencia gubernamental <a href="http://www.afip.gob.ar/" title="Administración Federal de Ingresos Públicos" >AFIP</a> estaba, <em>aparentemente</em> violando la licencia <a href="http://www.msl37.com.ar/misc/gpl.php" >GNU GPL</a>.</p>
<p>Como toda la cuestión me pareció improbable, porque confío en que la citada agencia hace las cosas adecuadamente y no infringe <em>copyrights</em> de terceros, fue que hoy me tomé el trabajo de descargarme el SIAp, así como algunos módulos e instalarlos, buscando corroborar si existían los archivos que en ese artículo se mencionan, filewin.dll y filewin2.dll, y más importante aún, si los mismos tenían el encabezado que <em>se decía</em> que tenían, es decir, una referencia a la licencia GPL.</p>
<p>El resultado de la investigación fue que <strong>efectivamente</strong> esos archivos están siendo diseminados por la AFIP en los siguientes módulos (es posible que la lista se pueda extender, mas no es la idea realizar una enumeración exhaustiva):</p>
<ul>
<li>Ganancia Mínima Presunta, versión <a href="http://www.afip.gov.ar/aplicativos/archivos/gananciaminimapresunta/dependiente/GMP_v700r2_Master.zip" >7.0 Release 2</a></li>
<li>Ganancias Sociedades, versión <a href="http://www.afip.gov.ar/aplicativos/archivos/gananciassociedades/dependiente/gsv60r1.exe" >6.0 Release 1</a></li>
<li>Seguridad Social, versión <a href="http://www.afip.gov.ar/aplicativos/archivos/seguridadsocial/SIJP-32-R1-MASTER.zip" >32.0 Release 1</a></li>
<li>Compensaciones y Volantes de Pago, versión <a href="http://www.afip.gov.ar/aplicativos/archivos/opi/dependiente/InstCyVPv1.06%20MASTER.zip" >1.0 Release 6</a></li>
</ul>
<p>Es de recordar que la licencia GPL explícitamente prohíbe enlazar a bibliotecas (o <em>librerías</em>) cubiertas por otra licencia no compatible (en un binario que se distribuye), o enlazar a una biblioteca cubierta por la GPL desde una aplicación con una licencia no compatible, porque requiere que la <em>integridad</em> del trabajo esté licenciado por la GPL.</p>
<p>En el fichero filewin.dll, desde la posición 0&#215;0000FEF4 hasta la 0&#215;00010128, y en filewin2.dll, desde la posición 0&#215;000102A0 hasta 0&#215;000104D4 está el aviso que incluye el nombre del autor (Jean-loup Gailly) y enuncia que las mismas se licencian bajo los términos de la GPL. Notar que ésto <em>no necesariamente</em> implica que la AFIP violó la licencia GPL, porque, por ejemplo, <del datetime="2009-11-01T14:36:43+00:00" title="Si la respuesta por email que recibí es precisa (y el autor es Jean-loup Gailly), entonces, este no sería el caso (que los haya autorizado)"><strong>ésta podría haber obtenido autorización</strong> del titular del <em>copyright</em> (aparentemente Jean-loup Gailly) para el uso que le está dando</del>. Claro que si no fue así, esta persona podría exigir un resarcimiento económico y que se cumpla con la licencia, y se liberen esos módulos.</p>
<p><strong>ACTUALIZACIÓN 20091030:</strong> Al momento de publicar esta entrada, me había puesto en contacto con Jean-loup Gailly, el presunto autor de la biblioteca a la cual la AFIP, en apariencia, enlazaría sin la debida autorización. La respuesta que recibí a este mensaje fue:</p>
<blockquote><p>Thanks for your message. The FSF is looking into this issue.</p>
<p>Jean-loup
</p></blockquote>
<p>Que se podría traducir como &#8220;Gracias por tu mensaje. La FSF está investigando sobre este asunto.&#8221; Esto me lleva a la conclusión de que <strong>la AFIP no habría obtenido la autorización del autor</strong>, y en resumidas cuentas, estaría infringiendo el <em>copyright</em> de un tercero (Jean-loup Gailly). Francamente, me desilusiona la cuestión, y espero que la misma se resuelva lo más prontamente posible.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.msl37.org/2009/09/14/101/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Libertad de expresión</title>
		<link>http://blog.msl37.org/2009/08/28/97/</link>
		<comments>http://blog.msl37.org/2009/08/28/97/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 01:47:41 +0000</pubDate>
		<dc:creator>corrideat</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.msl37.org/?p=97</guid>
		<description><![CDATA[La libertad de expresión es uno de los derechos humanos más fundamentales, puesto que ésta es la que permite el planteamiento de lo diferente, lo no conocido, el cambio, el progreso. También es el instrumento del que los oprimidos pueden valerse, y quizás el único medio de defensa posible, contra los artilugios de los poderosos. [...]]]></description>
			<content:encoded><![CDATA[<p>La libertad de expresión es uno de los derechos humanos más fundamentales, puesto que ésta es la que permite el planteamiento de lo diferente, lo no conocido, el cambio, el progreso. También es el instrumento del que los oprimidos pueden valerse, y quizás el único medio de defensa posible, contra los artilugios de los poderosos. En síntesis, es una forma de libertad que precisamente crea más libertad, o cuanto menos, mayor diversidad.</p>
<p>Hablar de libertad de expresión es, en consecuencia, el motor del progreso. Tampoco sería preciso incurrir en el error de que con la libertad de expresión per se hay un Estado de derecho porque los instrumentos de los que se vale el poder (llámese político, social, cultural, etcétera) impiden en ocasiones tomar elementos útiles de esta idea que se expresa. Éste sería el caso de una sociedad ultra-conservadora. Lo que se debe rescatar igualmente, pese a estas limitaciones, es que la libertad de expresión es el único elemento que tiene el potencial para producir este cambio, porque sin ella los únicos cambios posibles son aquellos que el Poder acepte (y aquí entiéndase Poder como el órgano capaz de censurar las publicaciones de cualquier tipo.)</p>
<p><span id="more-97"></span>
<p>La censura es en consecuencia el elemento más vital de un régimen ultraconservador y egocéntrico, porque implica el rechazo a toda idea adversa al Sistema. Tener el Poder (en el mismo sentido que antes) es por ende controlar casi absolutamente una sociedad dada, porque ninguna idea de cambio podría (idealmente) ser transmitida, y no es probable, por la misma razón, que se llegue a formar ningún grupo de oposición a este Poder. Lo que es más, la capacidad de seleccionar la información permite dejar apreciar una visión sesgada de la realidad que, nuevamente, se traduce en un control casi absoluto del pensamiento.</p>
<p>De aquí se traduce, si se sigue una línea lógica, que la libertad de expresión, o mejor dicho, el recibir información que podría no ser completa, correcta ni precisa (como lo es la mayor parte, si no toda) implica un pensamiento crítico, que incluya, entre otras cosas, el análisis desde tantas perspectivas como sea posible, llegando a una apreciación lo más neutral que se permita. Aquí, como era de esperar, la libertad de expresión abre nuevas posibilidades de interpretación, mediante la visión de una colección más amplia de posturas.</p>
<p>En conclusión, se tiene que la libertad de expresión, entendida como la libertad de publicar ideas sin censura previa, es uno de los pilares más básicos en la construcción de una sociedad justa, igualitaria y multicultural.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.msl37.org/2009/08/28/97/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vulnerabilidad de seguridad en el sitio web del Ministerio de Ciencia, Tecnología e Innovación Productiva</title>
		<link>http://blog.msl37.org/2009/07/30/74/</link>
		<comments>http://blog.msl37.org/2009/07/30/74/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 20:24:39 +0000</pubDate>
		<dc:creator>corrideat</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.msl37.org/?p=74</guid>
		<description><![CDATA[El día 18 de julio visité el sitio web del Ministerio de Ciencia, Tecnología e Innovación Productiva, y descubrí que el sitio web no realiza ningún tipo de manejo seguro de la información entrante, al menos para este caso en específico.
Cuando se utiliza el sitio, existe una variable que contiene información acerca del archivo que [...]]]></description>
			<content:encoded><![CDATA[<p>El día 18 de julio visité el sitio web del <a href="http://www.mincyt.gov.ar/" >Ministerio de Ciencia, Tecnología e Innovación Productiva</a>, y descubrí que el sitio web no realiza ningún tipo de <a rel="nofollow" href="http://en.wikipedia.org/wiki/Secure_input_and_output_handling" >manejo seguro de la información entrante</a>, al menos para este caso en específico.</p>
<p>Cuando se utiliza el sitio, existe una variable que contiene información acerca del archivo que se debe incluir para mostrar un contenido particular <span style="color:#666;">(actualización del 20090811: la variable <em>contenido</em>)</span>, una técnica que muchos sistemas de gestión de contenidos (CMS) utilizan (como por ejemplo www.msl37.org y youruseragent.info, aunque de una manera algo más transparente.) Ésto no es necesariamente malo y de hecho es una práctica muy difundida. Sin embargo, este caso que describo es quizás uno de los mejores ejemplos (por el prestigio y la importancia de la institución) de lo importante que puede ser tomar prácticas mínimas de seguridad.</p>
<p><span id="more-74"></span>Volviendo al asunto, decía que hay una variable que dice qué fichero debe abrirse para mostrar el contenido, y que éste se genera dinámicamente según el valor de esa variable. La cuestión de seguridad comienza en que a esa variable, siendo un sistema de acceso público, cualquier usuario puede asignarle un valor arbitrario, resultando en determinado comportamiento por parte del servidor, el cual puede ser potencialmente inseguro.</p>
<p>Puntualmente, esa variable puede contener una ruta relativa de acceso a un fichero del servidor (que es lo que contiene.) Al no filtrarse caracteres como la barra, el punto y el carácter que marca el fin de la cadena en C (<abbr title="código">cód.</abbr> ASCII 0, también conocido como carácter nulo, o simplemente null), este usuario podría acceder a un archivo que arbitrariamente eligiera, pudiendo incluso descubrir la estructura del árbol de directorios del servidor. Hasta aquí van tres vulnerabilidades: <em lang="en"><acronym title="Local file inclusion">LFI</acronym></em>, <em lang="en">Full path Disclosure</em> y <em lang="en">Directory traversal</em>. Esto nada más es un riesgo bastante amplio. La solución que yo propongo como la más sencilla, siendo eficaz al mismo tiempo, es validar esa variable para que contenga sólo caracteres alfanuméricos (letras y números) y la barra (por el simple motivo de que se usa en ciertas ocasiones) y eliminando todo lo demás. <strong>Usando expresiones regulares simplemente basta con evaluar si se cumple el patrón <em>[a-zA-Z0-9/]+</em></strong>.</p>
<p>Una cuarta vulnerabilidad que viene dada por las mismas circunstancias (entrada sin filtrar) sumado quizás, dependiendo de las necesidades reales, a una deficiente configuración de los cortafuegos y/o del sistema mismo. Se la conoce como <em lang="en"><acronym title="Remote File Inclusion">RFI</acronym></em> y permite el acceso a un recurso remoto arbitrario (por ejemplo, un sitio web.) <strong>Esta vulnerabilidad puede ser explotada para cargar contenido <em>aparentemente</em> legítimo en el sitio web del Ministerio y ejecutar comandos arbitrarios, <a rel="nofollow" href="http://es.wikipedia.org/wiki/Remote_File_Inclusion" >entre otras tantas cosas</a></strong>. La misma se habría resuelto además con la solución que propongo más arriba.</p>
<p>Teniendo en cuenta lo potencialmente nocivas que son estas cuatro vulnerabilidades (y así el peligro que conlleva su combinación) ese mismo día opté por ponerme en contacto a la dirección de correo electrónico que se ve al pie del sitio (<a title="contacto@mincyt.gov.ar" href="mailto:contacto@mincyt.gov.ar">contacto@mincyt.gov.ar</a>.) Como no obtuve respuesta, el día 22 lo reenvié, <del datetime="2009-08-13T00:58:35+00:00" title="Ver actualización del 12 de agosto">y aún tampoco he recibido respuesta, ni se ha corregido la vulnerabilidad</del>. Me apena profundamente que no se dé importancia a estas cuestiones, en especial en instituciones tan reconocidas como lo es este Ministerio. Sin embargo, sigo a la espera de que se resuelva y por eso no doy más detalles de cómo explotar la vulnerabilidad (teniendo en cuenta que siempre busco mostrar su peligrosidad, y no incentivar a que se exploten.) Es posible que en el futuro (por ejemplo, después de que sea corregida) añada tales detalles.</p>
<p>Finalmente, quiero compartir <a href="http://www.diovo.com/2008/09/sanitizing-user-data-how-and-where-to-do-it/" >este pequeño artículo</a> con comentarios útiles sobre cómo pueden evitarse estos errores en el momento de programar.</p>
<p>Como muestra de que realmente existe adjunto algunos <em>screenshots</em> (tomas de pantalla):</p>

<a href='http://blog.msl37.org/2009/07/30/74/mincyt_ip_addr/' title='IP del servidor'><img width="150" height="150" src="http://blog.msl37.org/wp-content/uploads/2009/07/MINCyT_IP_addr-150x150.png" class="attachment-thumbnail" alt="" title="IP del servidor" /></a>
<a href='http://blog.msl37.org/2009/07/30/74/mincyt_path/' title='Directory Traversal'><img width="150" height="150" src="http://blog.msl37.org/wp-content/uploads/2009/07/MINCyT_path-150x150.png" class="attachment-thumbnail" alt="" title="Directory Traversal" /></a>
<a href='http://blog.msl37.org/2009/07/30/74/mincyt_path2/' title='LFI'><img width="150" height="150" src="http://blog.msl37.org/wp-content/uploads/2009/07/MINCyT_path2-150x150.png" class="attachment-thumbnail" alt="" title="LFI" /></a>
<a href='http://blog.msl37.org/2009/07/30/74/mincyt_proxy3/' title='RFI'><img width="150" height="150" src="http://blog.msl37.org/wp-content/uploads/2009/07/MINCyT_proxy3-150x150.png" class="attachment-thumbnail" alt="" title="RFI" /></a>
<a href='http://blog.msl37.org/2009/07/30/74/mincyt_y_stats/' title='RFI'><img width="150" height="150" src="http://blog.msl37.org/wp-content/uploads/2009/07/MINCyT_y_stats-150x150.png" class="attachment-thumbnail" alt="" title="RFI" /></a>
<a href='http://blog.msl37.org/2009/07/30/74/mincyt-rfi-exec/' title='Usando RFI para interpretar PHP'><img width="150" height="150" src="http://blog.msl37.org/wp-content/uploads/2009/07/mincyt-rfi-exec-150x150.png" class="attachment-thumbnail" alt="" title="Usando RFI para interpretar PHP" /></a>
<a href='http://blog.msl37.org/2009/07/30/74/mincyt-rfi-exec2/' title='Intento de ejecutar código ASP.NET'><img width="150" height="150" src="http://blog.msl37.org/wp-content/uploads/2009/07/mincyt-rfi-exec2-150x150.png" class="attachment-thumbnail" alt="" title="Intento de ejecutar código ASP.NET" /></a>

<p><strong>ACTUALIZACIÓN (8 de agosto):</strong> habiendo transcurrido un tiempo más que prudencial para que la vulnerabilidad sea corregida, he adjuntado dos imágenes que demuestran cómo se podría usar la vulnerabilidad RFI para ejecutar código arbitrario. Una muestra un intento (exitoso) de interpretar código PHP y la otra, uno (fallido por falta de soporte) de interpretar ASP.NET.</p>
<p><strong>ACTUALIZACIÓN (12 de agosto):</strong> hoy finalmente obtuve una respuesta desde el MINCyT, que adjunto a continuación:</p>
<blockquote><p>Antes que nada agradecemos la atencion de habernos informado y le comentamos que:</p>
<p>Toda la informacion del sitio del MINCYT es publica y no hay inconveniente en que sea accedida a traves del path, en cuanto a la visibilidad de la ruta en la barra del navegador estamos implementando la forma para que esta informacion no se vea.</p>
<p>Nuevamente muchas gracias y quedamos a su disposicion&#8221;</p>
<p>Gracias a uds. tambien</p>
<p>Saludos cordiales</p>
<p><em><strong>Contacto MinCyT</strong></em>
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.msl37.org/2009/07/30/74/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Copyright, una mirada crítica</title>
		<link>http://blog.msl37.org/2009/07/24/68/</link>
		<comments>http://blog.msl37.org/2009/07/24/68/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 22:34:22 +0000</pubDate>
		<dc:creator>corrideat</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.msl37.org/?p=68</guid>
		<description><![CDATA[Hoy estuve leyendo la propuesta del Partido Pirata sueco de limitar el copyright a 5 años. Luego (en realidad, antes) me topé con el artículo de Richard Stallman criticando esta posición. A partir de ésto, pude sacar conclusiones que son las que publico aquí.
En primera instancia, tenemos que el copyright es una medida que se [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy estuve leyendo la <a href="http://www.piratpartiet.se/international/english" >propuesta del Partido Pirata sueco</a> de limitar el <em>copyright</em> a 5 años. Luego (en realidad, antes) me topé con el <a href="http://www.gnu.org/philosophy/pirate-party.html" >artículo de Richard Stallman criticando esta posición</a>. A partir de ésto, pude sacar conclusiones que son las que publico aquí.</p>
<p>En primera instancia, tenemos que el copyright es una medida que se toma fundamentalmente para incentivar la creatividad. Consiste en otorgar un monopolio limitado sobre la edición, reproducción, uso, copia, etcétera de una obra. Fundamentalmente, abarca obras del tipo científicas, literarias y artísticas. Notar que el copyright no cubre las implementaciones de lo que describen; de eso se encargan las patentes.</p>
<p>Uno de los problemas del copyright, al menos tal y como hoy se nos presenta, es que una protección tan amplia (en cuanto a restricciones) y duradera (la vida del autor más 70 años) impide la verdadera misión que se mencionó en el párrafo precedente. Es decir, si se considera que se quiere incentivar la creación porque reporta un beneficio a la sociedad en su conjunto, entonces el argumento se cae por su propio peso, ya que la sociedad verá esos beneficios dentro de un plazo bastante amplio. Aún sólo queriendo incentivar la creación, sin otra motivación implícita, las actuales leyes, brindando las condiciones descriptas con anterioridad sólo incentivan a crear <em>una sola vez</em> para luego vivir de rentas. Si los autores insisten en crear no es porque los incentive la ley, así como tampoco lo hizo con todos los autores de la era <em>pre-copyright</em>. Y afirmar que lo anterior es cierto implica decir que el argumento más aceptado en defensa de los derechos de autor queda invalidado.</p>
<p>Pese a lo anterior, a mí me parece justo que el copyright exista para permitir que quienes crean obras científicas, literarias o artísticas puedan tener una dedicación exclusiva a esta actividad, rescatando la percepción de que son beneficiosas para la sociedad en su conjunto, y por lo tanto legitimando un derecho a la retribución hacia los creadores de las obras.</p>
<p><span id="more-68"></span></p>
<p>Vamos al primer punto: la duración. El copyright no debería durar un tiempo mayor al que sea apropiado para incentivar la creación. Es decir que debería durar menos que la vida, para que ese individuo siga estando motivado a crear y a innovar sobre sus creaciones. Además, durando toda la vida del autor, tampoco es justo que sus herederos gocen del mismo monopolio después de la muerte: primero, porque no los incentivaría a crear, en segundo término porque sencillamente todas las ganancias obtenidas a raíz de las obras ya son heredadas de por sí, y por último, porque ellos no han creado nada. Mi propuesta es de 20 años desde la fecha de publicación (que bien podría ser menos, como 15 ó 10), que estimo que es más que suficiente para que un autor se haga rico con esa obra, y a su vez un plazo razonable para aguardar para poder todos beneficiarnos de esa obra.</p>
<p>Otra cuestión son las obras que se publican y pasado un tiempo (aún en el dominio privado) dejan de publicarse por la razón que fuere. Cuando se hace evidente que los titulares de los derechos no tienen interés en explotar comercialmente una obra, y aprovechando que ya fue publicada, el monopolio debería perderse (o suspenderse.)</p>
<p>También, siempre desde la premisa del beneficio común, debe quedar reconocido el derecho de cita, y la suspensión del monopolio para fines educativos, didácticos, de interés público y de investigación científica. Desde este mismo punto de vista, resulta inadmisible que las obras que fueron financiadas con dinero público sean pertenecientes al &#8220;dominio privado&#8221;.</p>
<p>Si se tienen en cuenta los derechos del que recibe una obra (respetando sus libertades, sin cohartarlas), no se deben tolerar las medidas de protección (no me refiero específicamente a prohibirlas, sino a no reforzarlas por ley), considerando que las licencias deben ser neutrales a las intenciones que tenga el que la recibe.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.msl37.org/2009/07/24/68/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dominio msl37.org &#8211; Mi experiencia con Dattatec.com</title>
		<link>http://blog.msl37.org/2009/07/23/62/</link>
		<comments>http://blog.msl37.org/2009/07/23/62/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 03:21:00 +0000</pubDate>
		<dc:creator>corrideat</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.msl37.org/?p=62</guid>
		<description><![CDATA[Voy a comentar una experiencia personal que tuve con la empresa que opera en el sitio web Dattatec.com y el registro del dominio MSL37.ORG (año 2009.)
El día 27 de enero hice un pago usando el medio de pago PayPal de 27 ARS, y requerí que los mismos sean imputados a la renovación del dominio MSL37.ORG. [...]]]></description>
			<content:encoded><![CDATA[<p>Voy a comentar una experiencia personal que tuve con la empresa que opera en el sitio web Dattatec.com y el registro del dominio MSL37.ORG (año 2009.)</p>
<p>El día 27 de enero hice un pago usando el medio de pago PayPal de 27 <acronym title="pesos argentinos">ARS</acronym>, y requerí que los mismos sean imputados a la renovación del dominio MSL37.ORG. Sin embargo, se me informó (lo cual era correcto) que el saldo en mi cuenta corriente era insuficiente para proceder con la renovación, puesto que se requerían 30 ARS. Entonces fui a al &#8220;área de cliente&#8221; (un panel de control de la cuenta) e intenté hacer, por el mismo medio de pago, otro pago por el importe de 3 ARS. Sin embargo, ésto no me fue posible porque el pago mínimo usando PayPal es de 10 ARS. Al ponerme en contacto con el servicio técnico, se me sugirió que usara otro medio de pago.</p>
<p>El día 26 de febrero hice un pago por los 3 ARS faltantes por transferencia bancaria. Sin embargo no lograban &#8220;confirmar el pago.&#8221; Por este motivo me puse en contacto telefónicamente en reiteradas ocasiones, sin que se logre resolver la situación. Como me lo sugirieron telefónicamente, además, abrí un <em>ticket</em> en la &#8220;mesa de consultas&#8221; preguntando &#8220;Deseaba saber cuándo estará confirmado el pago que he realizado (transferencia bancaria).&#8221;</p>
<p><span id="more-62"></span></p>
<p>Hasta aquí no hay ningún problema, salvo el pago sin confirmar. La fecha de expiración del dominio se acercaba (12 de marzo) y yo comenzaba a impacientarme. Lo cierto es que el día 13 de de marzo la situación no se había aún resuelto, y por no haber &#8220;confirmado&#8221; el pago (que estaba realizado), el dominio ingresó en el <em>AUTORENEWPERIOD</em> y decidieron que yo no lo debía disponer (incluso alterando los servidores de nombres.) Me requirieron que les adjunte el comprobante y les envié un PDF con la imagen. A ese PDF no le encontré ningún defecto (es decir, se veía bien con todos los visores que probé.) Sin embargo ellos sólo veían un simple archivo en blanco. Eso me llevó a que les escriba el siguiente mensaje (el día 16 de marzo):</p>
<blockquote><p>Como les comunicara hoy telefónicamente, esta situación de idas y venidas se me está tornando perjudicial.</p>
<p>Considerando que yo he cumplimentado con los requisitos necesarios con debida antelación a la fecha de expiración y pese a ello vuestras acciones me han llevado injustamente a padecer las consecuencias de la suspensión del servicio ocasionándome perjuicios, vengo a demandar:<br />
- Se me devuelva la INTEGRIDAD del dinero abonado (un total de pesos 30, distibuídos como sigue: pesos 27 por el medio PayPal y pesos 3 por transferencia bancaria), dentro de los 7 días hábiles en mi cuenta de PayPal (REMOVIDO POR SEGURIDAD).<br />
- Se me proporcione, en el plazo de 24 horas, el código de transferencia activo y funcional correspondiente al nombre de dominio msl37.org.<br />
- Se deje sin valor toda obligación de pago que pudiera tener su origen como consecuencia de vuestra administración del citado nombre de dominio.</p></blockquote>
<p>Un extracto de la respuesta que recibí el día siguiente fue:</p>
<blockquote><p>Si no recibimos ayuda de su parte para solucionar este inconveniente, se nos hace imposible verificar la operación de pago efectuada el dia 26/02/09<br />
El dominio ya se encuentra vencido y no es posible transferirlo ahora a otra entidad.</p></blockquote>
<p>Debo recalcar que yo <em>había</em> enviado ese correo electrónico con el comprobante y previamente <em>había </em>también realizado el pago. Pese a eso, se me llama a colaborar. Por supuesto, el código de transferencia <strong>no se me facilitó</strong>, aún <a href="http://www.icann.org/en/transfers/policy-12jul04.htm" >estando esta práctica prohibida</a> (actualización <a href="http://www.icann.org/en/announcements/advisory-03apr08.htm" >aquí</a>.)</p>
<p>A eso contesté lo siguiente:</p>
<blockquote><p>En referencia a lo que dice en su respuesta le paso a decir:<br />
1. Los datos proporcionados en el informe de pago 530499 son correctos y veraces.<br />
2. Se adjuntó en repetidas ocasiones el solicitado comprobante (incluso se le envió a Eliana Pompoño por correo electrónico el día 14 del corriente.)<br />
3. He puesto cuántos medios tuve a mi disposición para que se resuelva el inconveniente, realizando incluso reiterados llamados telefónicos al área de ventas.<br />
4. En cuanto a que &amp;quot;el dominio ya se encuentra vencido y no es posible transferirlo ahora a otra entidad&amp;quot;: el dominio se encontraba pago ANTES del vencimiento, y aún así se venció, y más aún, no puedo disponerlo.<br />
5. Las indicaciones dadas sobre la obtención del código de referencia no son funcionales: recibo en cambio un campo en blanco.</p>
<p>Vista la situación actual, voy a verme obligado a recurrir a la oficina de Defensa al Consumidor, dado que Ustedes me están provocando claramente perjuicios, por los cuales me deberán resarcir.</p></blockquote>
<p>Además, envié por correo electrónico el citado comprobante en diversos formatos de imagen, y luego, <strong>recién después de haber confirmado el pago</strong> se me dio el código de transferencia y se me rehabilitó el dominio (18 de marzo.)</p>
<p>Por otra parte, quiero recalcar el hecho de que con los servicios de hosting, por otra parte, nunca tuve tales problemas.</p>
<p>Estas acciones por parte de esta empresa les llevaron a perder de venderme seis nuevos dominios que compré este año.</p>
<p>AVISO: Si Usted está decidiendo una compra, le ruego que no se base sólo en este mensaje, ya que mi experiencia podría ser un caso esporádico, y por eso no una situación generalizada.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.msl37.org/2009/07/23/62/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FMChart &#8211; Gráficos de torta</title>
		<link>http://blog.msl37.org/2009/07/18/60/</link>
		<comments>http://blog.msl37.org/2009/07/18/60/#comments</comments>
		<pubDate>Sat, 18 Jul 2009 19:13:55 +0000</pubDate>
		<dc:creator>corrideat</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.msl37.org/?p=60</guid>
		<description><![CDATA[Hace unos días, anunciaba FMChart como un sistema para generar dinámicamente gráficos web accesibles usando ECMAScript.
Continuando con su desarrollo, he logrado incorporar la funcionalidad de gráficos de torta, usando SVG o VML (en el caso de los productos basados en MSHTML.)
Lamentablemente, esta nueva funcionalidad, al no estar basada íntegramente en HTML y CSS no tiene [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unos días, <a href="http://blog.msl37.org/2009/07/12/52/" >anunciaba FMChart</a> como un sistema para generar dinámicamente gráficos web accesibles usando ECMAScript.</p>
<p>Continuando con su desarrollo, he logrado incorporar la funcionalidad de gráficos de torta, usando <a href="http://www.w3.org/TR/SVG11/"  title="Scalable Vector Graphics">SVG</a> o <a href="http://www.w3.org/TR/NOTE-VML"  title="Vector Markup Language">VML</a> (en el caso de los productos basados en MSHTML.)</p>
<p>Lamentablemente, esta nueva funcionalidad, al no estar basada íntegramente en HTML y CSS no tiene un soporte tan amplio como los gráficos de barra (especialmente en navegadores antiguos.) La excepción por el momento es MSIE, en el que se ve bien en las versiones 5.5, 6 y 7, y sin embargo en la versión 8 no tan bien.</p>
<p>Sin embargo, esa no es la única novedad. Otra característica de esta actualización es que en vez de usar el atributo CSS <em>background-color</em> para el color de las barras, se utiliza el atributo <em>border</em>, lo que trae varias ventajas implícitas, como mayor facilidad para la impresión.</p>
<p>Para concluir, voy a agregar una dirección donde se pueden ver <a href="http://youruseragent.info/download/chart.html" >demostraciones en funcionamiento</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.msl37.org/2009/07/18/60/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FMChart &#8211; Gráficos web dinámicos y accesibles</title>
		<link>http://blog.msl37.org/2009/07/12/52/</link>
		<comments>http://blog.msl37.org/2009/07/12/52/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 16:31:57 +0000</pubDate>
		<dc:creator>corrideat</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.msl37.org/?p=52</guid>
		<description><![CDATA[Durante este tiempo, he estado desarrollando un script que muestra gráficos de barra. Si bien es cierto que ya existen sistemas similares, éste está orientado hacia la accesibilidad.  Me inspiré en la entrada CSS For Bar Graphs. Sin embargo, una importante mejora es el añadido en flexibilidad que viene de implementarlo en ECMAScript. Aún [...]]]></description>
			<content:encoded><![CDATA[<p>Durante este tiempo, he estado desarrollando un <em>script</em> que muestra gráficos de barra. Si bien es cierto que ya existen sistemas similares, éste está orientado hacia la accesibilidad.  Me inspiré en la entrada <a href="http://apples-to-oranges.com/blog/post/css-for-bar-graphs/?id=55" >CSS For Bar Graphs</a>. Sin embargo, una importante mejora es el añadido en flexibilidad que viene de implementarlo en ECMAScript. Aún con estos cambios, prevalece la intención primera: que el gráfico sea legible en HTML plano, y por este motivo resulta apropiado para un diseño accesible.  Funciona creando primero el árbol DOM del gráfico, y luego aplicando los estilos pertinentes. El resultado son gráficos de barra como los de abajo:</p>
<div><img class="alignnone size-full wp-image-51" title="Chart snapshot" src="http://blog.msl37.org/wp-content/uploads/2009/07/statsSnap.png" alt="Chart snapshot" width="433" height="236" /></div>
<p><span id="more-52"></span></p>
<p>El script está disponible en la dirección <a href="http://0xj.info/js/graphs.js" >http://0xj.info/js/graphs.js</a>. Utilizarlo es bastante sencillo.</p>
<p>Lo primero está en crear una instancia del objeto.</p>
<p><code>var x=_FMchart();</code></p>
<p>Luego hay que especificar una capa. Puede ser una cadena, o un nodo directamennte.</p>
<p><code>x.setLayer("IDCapa");<br />
x.setLayer(document.getElementById("stats2"));</code></p>
<p>Ya se está en condiciones de dar los datos del gráfico.</p>
<p><code><br />
x.draw(<br />
{title:"Cases of Wereza vs. cases of Routment",<br />
categories: ["Wereza", ["Routment","cc0"]],<br />
proportional:true,<br />
multidimentional:true,<br />
data:{"1999":[10,30],"2000":[15,32],"2001":[30,40],"2002":[50,50],"2003":[150,50]}<br />
});<br />
</code></p>
<dl>
<dt>title</dt>
<dd>título (descipción)</dd>
<dt>categories</dt>
<dd>arreglo con las categorías a las que pertenecen los datos. En el ejemplo, para Wareza estamos usando los colores por defecto y para Routment, el color en hexadecimal #cc0.</dd>
<dt>proportional</dt>
<dd>si se define a <em>true</em>, reemplaza los valores absolutos por valores relativos (por ejemplo, 4 en una muestra de 10 se representa como 40%.)</dd>
<dt>multidimentional</dt>
<dd>si se define a <em>true</em> establece que la longitud de las barras debe ser propocional entre sí. Si se observa la imagen adjunta, se observa que la última barra del último gráfico es más larga que las demás, porque la muestra era mayor en ese caso; si no se hubiese definido, o su valor hubiera sido <em>false</em>, todas las barras tendrían exactamente la misma longitud.</dd>
<dt>data</dt>
<dd>los datos propiamente dichos. Las etiquetas (&#8220;1999&#8243;, &#8220;2000&#8243;, etcétera) son necesarias para contrastar datos de distintas muestras.</dd>
</dl>
<p>Para que quede más claro, mostraré el ejemplo del código usado en el primer gráfico.</p>
<p><code>x.draw(<br />
{title:"Windows RAM requirements across its different versions",<br />
categories: ["Windows 95","Windows 98","Windows ME","Windows 2000","Windows XP","Windows Vista"],<br />
dimensions:{w:"600px"},<br />
data:[8,16,32,32,64,512]<br />
});<br />
</code></p>
<p>Como aquí hay un dato por categoría y se están comparando las categorías entre sí, no es necesario indicar las etiquetas para <em>data</em>.</p>
<p>Otra particularidad que se introduce es el objeto <em>dimensions</em>. En realidad, indica el tamaño del gráfico. Tiene dos miembros: <em>w</em> (para el ancho) y <em>h</em> (para la altura.)</p>
<p>Me parece importante destacar que ha sido probado en los siguientes navegadores:</p>
<ul>
<li><acronym title="Microsoft Internet Explorer, ahora también Windows Internet Explorer">MSIE</acronym> 5.5, 6, 7 y 8 (para Windows)</li>
<li>Netscape 7 y 9</li>
<li>Arora 0.7.1</li>
<li>Mozilla Firefox 0.8, 1.0.8, 1.5.0.12, 2.0.0.20, 3.0 y 3.5</li>
<li>Konqueror 3.5 y 4.2</li>
<li>Galeon 2.0.6</li>
<li>Opera 9.26, 9.63, 9.64 y 10</li>
<li>Kazehakase 0.5.4</li>
<li>Epiphany 2.22 y 2.26.3</li>
<li>K-Meleon 1.1.4</li>
<li>Flock 2.0.3</li>
<li>Safari 3.2.1 y 4.0</li>
<li>Avant 11.7</li>
</ul>
<p>La ausencia de un navegador de la lista no implica que no funcione correctamente el <em>script</em>. No obstante, según las pruebas que se realizaron se puede afirmar que no lo hace en los navegadores (de nuevo, la lista no es exclusiva):</p>
<ul>
<li>MSIE para Windows 5 y versiones anteriores</li>
<li>Chrome 2 (los gráficos con más de un dato por barra de la prueba se vieron desordenados (las etiquetas no aparecen en el orden en que se proporcionaron))</li>
<li>Netscape 6 (los gráficos con más de un dato por barra no se ven bien (se ve sólo el primer valor, y además los marcadores aparecen mal posicionados))</li>
<li>Netscape 4 y versiones anteriores</li>
</ul>
<p>Continúe leyendo sobre los <a href="http://blog.msl37.org/2009/07/18/60/" >gráficos de torta</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.msl37.org/2009/07/12/52/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Your User Agent</title>
		<link>http://blog.msl37.org/2009/07/07/48/</link>
		<comments>http://blog.msl37.org/2009/07/07/48/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 02:17:02 +0000</pubDate>
		<dc:creator>corrideat</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.msl37.org/?p=48</guid>
		<description><![CDATA[Quería anunciar que he lanzado un sitio enfocado a saber cuál es el agente de usuario que se está empleando (en inglés &#8220;what is my user agent&#8220;.)
El nombre es &#8220;Your User Agent&#8221; y, como es posible deducir, proporciona información sobre el agente de usuario, es decir, cómo se identifica, encabezados HTTP que envía. En la [...]]]></description>
			<content:encoded><![CDATA[<p>Quería anunciar que he lanzado un sitio enfocado a saber <a href="http://youruseragent.info/cual-es-mi-user-agent" >cuál es el agente de usuario</a> que se está empleando (en inglés &#8220;<a href="http://youruseragent.info/what-is-my-user-agent" >what is my user agent</a>&#8220;.)</p>
<p>El nombre es &#8220;<a href="http://youruseragent.info/" >Your User Agent</a>&#8221; y, como es posible deducir, proporciona información sobre el <a href="http://youruseragent.info/help.es.htm" >agente de usuario</a>, es decir, cómo se identifica, encabezados HTTP que envía. En la sección de <a href="http://youruseragent.info/extended.es.htm" >información extendida</a> (actualmente sólo en inglés) ofrece datos valiosos obtenidos usando <abbr title="también conocido como JavaScript">ECMAScript</abbr>, tales como versión del <em>plugin</em> de <a rel="nofollow" href="http://www.adobe.com/flashplayer" >Flash</a> o de <a href="http://www.silverlight.net/" >Silverlight</a>.</p>
<p>En cuanto a los datos del usuario, en la portada ofrece, además, su dirección IP de salida (la que se empleó para conectarse con el sitio), así como su IP &#8220;real&#8221; (en el caso de que se haya empleado un proxy, obviamente según sea lo que éste reporte.) Sobre estas direcciones indica el país al que están asignadas.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.msl37.org/2009/07/07/48/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sustituto a .innerHTML</title>
		<link>http://blog.msl37.org/2009/06/13/37/</link>
		<comments>http://blog.msl37.org/2009/06/13/37/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 17:49:47 +0000</pubDate>
		<dc:creator>corrideat</dc:creator>
				<category><![CDATA[dom]]></category>

		<guid isPermaLink="false">http://blog.msl37.org/?p=37</guid>
		<description><![CDATA[Cada día son más comunes en la web las aplicaciones AJAX, es decir, que descargan contenidos dinámicamente desde el servidor.
Sucede que para ecribir esos contenidos en la página actual el método más usado, si se descargó HTML desde el servidor, es empleando la propiedad .innerHTML desde ECMAScript. Esta solución, aunque satisfactoria porque funciona en probablemente [...]]]></description>
			<content:encoded><![CDATA[<p>Cada día son más comunes en la web las aplicaciones <a rel="nofollow" href="http://es.wikipedia.org/wiki/AJAX" >AJAX</a>, es decir, que descargan contenidos dinámicamente desde el servidor.</p>
<p>Sucede que para ecribir esos contenidos en la página actual el método más usado, si se descargó HTML desde el servidor, es empleando la propiedad <a rel="nofollow" href="http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx" >.innerHTML</a> desde ECMAScript. Esta solución, aunque satisfactoria porque funciona en probablemente todos los navegadores mayoritarios, no se ajusta a los estándares web, todavía.</p>
<p>Lo primero es entender cómo funciona el atributo innerHTML. Lo que hace es pasarle al navegador una cadena de texto conteniendo el código HTML a insertar dentro de un elemento. Aquí radica, precisamente, la versatilidad del atributo.</p>
<p>Me tomó un tiempo lograr algo similar hasta que me topé con la interfaz <a href="http://www.w3.org/TR/2003/WD-DOM-Level-3-LS-20030619/load-save.html#LS-DOMParser" >DOMParser</a>.</p>
<p>Cada día son más comunes en la web las aplicaciones <a rel="nofollow" href="http://es.wikipedia.org/wiki/AJAX" >AJAX</a>, es decir, que descargan contenidos dinámicamente desde el servidor.</p>
<p>Sucede que para ecribir esos contenidos en la página actual el método más usado, si se descargó HTML desde el servidor, es empleando la propiedad <a rel="nofollow" href="http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx" >.innerHTML</a> desde ECMAScript. Esta solución, aunque satisfactoria porque funciona en probablemente todos los navegadores mayoritarios, no se ajusta a los estándares web, todavía.</p>
<p>Por ésto, vengo a proponer una alternativa que puede resolver el problema.</p>
<p>Lo primero es entender cómo funciona el atributo innerHTML. Lo que hace es pasarle al navegador una cadena de texto conteniendo el código HTML a insertar dentro de un elemento. Aquí radica, precisamente, la versatilidad del atributo.</p>
<p>Me tomó un tiempo lograr algo similar hasta que me topé con el objeto <a href="http://www.w3.org/TR/2003/WD-DOM-Level-3-LS-20030619/load-save.html#LS-DOMParser" >DOMParser</a>, que no es soportado por <abbr title="Microsoft Internet Explorer">MSIE</abbr>, pero que se dispone de un ActiveX alternativo, <a href="https://developer.mozilla.org/En/DOMParser" >DOMDocument</a>.</p>
<p>Entonces, lo primero es tener una interfaz transparente para usar el método estándar DOMParser o el ActiveX DOMDocument.</p>
<p><span id="more-37"></span></p>
<p><code>function XMLParser() {<br />
var xmlDOM=null;<br />
<br />
if (window.DOMParser) {<br />
xmlDOM = new window.DOMParser();<br />
} else if (window.ActiveXObject) {<br />
var progIDs = [ 'Msxml2.DOMDocument.6.0', 'Msxml2.DOMDocument.3.0',<br />
'Msxml.DOMDocument', 'Microsoft.XMLDom' ];<br />
<br />
xmlDOM=new Object();<br />
var xmlAX;<br />
<br />
for (var i = 0; i &lt; progIDs.length; i++) {<br />
try {<br />
xmlAX = new ActiveXObject(progIDs[i]);<br />
} catch (err) {};<br />
}<br />
<br />
xmlDOM.AX=function() {<br />
return xmlAX;<br />
};<br />
<br />
xmlDOM.parseFromString=function(s,t) {<br />
xmlAX.loadXML(s);<br />
return xmlAX;<br />
};<br />
}<br />
return xmlDOM;<br />
</code></p>
<p>Luego, donde antes teníamos <em>elemento.innerHTML=texto;</em> se debe poner lo siguiente:<br />
<code>if (typeof texto=="object")<br />
xmlDoc=text;<br />
else {<br />
var DOMParser=XMLParser();<br />
var xmlDoc=DOMParser.parseFromString("&lt;div xmlns='http:\/\/<a href="http://www.w3.org/1999/xhtml" class="linkification-ext" title="Linkification: http://www.w3.org/1999/xhtml" >www.w3.org/1999/xhtml</a>'&gt;"+texto+"&lt;/div&gt;","application/xml");<br />
}<br />
<br />
while (xmlDoc &amp;&amp; xmlDoc.hasChildNodes()) {<br />
lay.appendChild(document.importNode(xmlDoc.firstChild, true));<br />
xmlDoc.removeChild(xmlDoc.firstChild);<br />
}<br />
</code><br />
Para que funcione bien en MSIE, además, se debe agregar lo siguiente:<br />
<code>if (!document.ELEMENT_NODE) {<br />
document.ELEMENT_NODE = 1;<br />
document.ATTRIBUTE_NODE = 2;<br />
document.TEXT_NODE = 3;<br />
document.CDATA_SECTION_NODE = 4;<br />
document.ENTITY_REFERENCE_NODE = 5;<br />
document.ENTITY_NODE = 6;<br />
document.PROCESSING_INSTRUCTION_NODE = 7;<br />
document.COMMENT_NODE = 8;<br />
document.DOCUMENT_NODE = 9;<br />
document.DOCUMENT_TYPE_NODE = 10;<br />
document.DOCUMENT_FRAGMENT_NODE = 11;<br />
document.NOTATION_NODE = 12;<br />
}<br />
<br />
if (!document._importNode) document._importNode = function(node, allChildren) {<br />
try {   /* find the node type to import */<br />
if (node.nodeName.toLowerCase()=="noscript") return -1;<br />
var attrN,attrVal;<br />
switch (node.nodeType) {<br />
case document.ELEMENT_NODE:<br />
/* create a new element */<br />
var newNode = document.createElement(node.nodeName);<br />
/* does the node have any attributes to add? */<br />
if (node.attributes &amp;&amp; node.attributes.length &gt; 0)<br />
/* add all of the attributes */<br />
for (var i = 0, il = node.attributes.length; i &lt; il;i++) {<br />
attrN=node.attributes[i].nodeName||node.attributes[i].name;<br />
attrVal=node.attributes[i].value||(node.getAttribute?node.getAttribute(attrN):0);<br />
if (attrVal &amp;&amp; attrVal.length) {<br />
if (attrN.toLowerCase().substr(0,2)!="on") {<br />
switch(attrN.toLowerCase?attrN.toLowerCase():attrN) {<br />
case "class":<br />
newNode.className=attrVal;<br />
break;<br />
case "for":<br />
newNode.htmlFor=attrVal;<br />
break;<br />
default:<br />
if (newNode.setAttribute)<br />
newNode.setAttribute(attrN,attrVal);<br />
break;<br />
}<br />
} else {<br />
addEvent(newNode,attrN.substr(2),new Function(attrVal));<br />
}<br />
}<br />
}<br />
/* are we going after children too, and does the node have any? */<br />
var impRes;<br />
if (allChildren &amp;&amp; node.childNodes &amp;&amp; node.childNodes.length &gt; 0)<br />
<br />
/* recursively get all of the child nodes */<br />
for (var i = 0, il = node.childNodes.length; i &lt; il;) {<br />
impRes=document._importNode(node.childNodes[i++], allChildren);<br />
if (impRes!=-1) newNode.appendChild(impRes);<br />
}<br />
return newNode;<br />
break;<br />
case document.TEXT_NODE:<br />
case document.CDATA_SECTION_NODE:<br />
case document.COMMENT_NODE:<br />
return document.createTextNode(node.nodeValue);<br />
break;<br />
}<br />
} catch(e) {alert("err here");throw e;};<br />
};<br />
<br />
if (!document.importNode &amp;&amp; document._importNode) document.importNode = document._importNode;<br />
</code><br />
Crédito por buena parte del último fragmento de código a <a href="http://www.alistapart.com/articles/crossbrowserscripting/" >A List Apart</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.msl37.org/2009/06/13/37/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
