<?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>Linux Hispano &#187; programación</title>
	<atom:link href="http://www.linuxhispano.net/etiqueta/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.linuxhispano.net</link>
	<description>Noticias, tira, podcast, juegos, Linux y software libre</description>
	<lastBuildDate>Sat, 31 Jul 2010 15:49:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Oculta la información de errores y &#8220;warnings&#8221; en PHP</title>
		<link>http://www.linuxhispano.net/2010/05/26/oculta-la-informacion-de-errores-y-warnings-en-php/</link>
		<comments>http://www.linuxhispano.net/2010/05/26/oculta-la-informacion-de-errores-y-warnings-en-php/#comments</comments>
		<pubDate>Wed, 26 May 2010 21:48:44 +0000</pubDate>
		<dc:creator>carazo</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[advertencia]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[warning]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=2474</guid>
		<description><![CDATA[En ocasiones por comodidad, y sobre todo para ahorrarnos dar más información de la cuenta de cara a la seguridad y a que aparezcan mensajes de errores en la pantalla del cliente, es preferible ocultar la información de depuración que &#8230; <a href="http://www.linuxhispano.net/2010/05/26/oculta-la-informacion-de-errores-y-warnings-en-php/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.linuxhispano.net/wp-content/uploads/2010/05/php_logo_linuxhispano.png"><img class="aligncenter size-full wp-image-2481" title="php_logo_linuxhispano" src="http://www.linuxhispano.net/wp-content/uploads/2010/05/php_logo_linuxhispano.png" alt="" width="300" height="158" /></a></p>
<p>En ocasiones por comodidad, y sobre todo para ahorrarnos dar más información de la cuenta de cara a la seguridad y a que aparezcan mensajes de errores en la pantalla del cliente, es preferible ocultar la información de depuración que nos devuelve el intérprete PHP mediante las típicas líneas de <em>error </em>y <em>warning</em>.</p>
<p>La forma más cómoda para hacerlo instrucción a instrucción es el uso del prefijo @ delante de la misma. El <em>error </em>o <em>warning</em> seguirá existiendo pero no se generará una salida HTML describiéndola.</p>
<p>Por ejemplo, intentaremos borrar el fichero contenido en la variable <em>$fichero</em></p>
<p><em>unlink($fichero);</em></p>
<p>Si el fichero no existe, aparecería un error por pantalla que si ponemos esto:</p>
<p><em>@unlink($fichero);</em></p>
<p>No aparecerá. Si la operación de borrado del fichero es para asegurarnos y si no existe hemos conseguido lo que queríamos, nos ahorraremos unas cuantas líneas de código que escribir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2010/05/26/oculta-la-informacion-de-errores-y-warnings-en-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Quickly, un entorno TODO EN UNO.</title>
		<link>http://www.linuxhispano.net/2010/05/01/quickly-un-entorno-todo-en-uno/</link>
		<comments>http://www.linuxhispano.net/2010/05/01/quickly-un-entorno-todo-en-uno/#comments</comments>
		<pubDate>Sat, 01 May 2010 17:30:24 +0000</pubDate>
		<dc:creator>ahornero</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[entorno]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[lenguaje programacion]]></category>
		<category><![CDATA[lenguajes]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[quickly]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=2293</guid>
		<description><![CDATA[Quickly es un framework que nos ayuda a crear programas de software (y otras cosas) de forma rápida. Dispone de soporte para un gran conjunto de plantillas y la opción de utilizar algunos comandos simples para crear, editar el código &#8230; <a href="http://www.linuxhispano.net/2010/05/01/quickly-un-entorno-todo-en-uno/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-2294" title="quickly_linux_hispano" src="http://www.linuxhispano.net/wp-content/uploads/2010/05/quickly_linux_hispano.png" alt="" width="507" height="463" /></p>
<p><strong><a href="https://edge.launchpad.net/quickly" target="_blank">Quickly</a></strong> es un framework que nos ayuda a crear programas de software (y otras cosas) de forma rápida. Dispone de soporte para un gran conjunto de plantillas y la opción de utilizar algunos comandos simples para crear, editar el código y la interfaz.</p>
<p>¿Qué hace Quickly para ayudarnos? Pues básicamente ese tipo de tareas pesadas como son gestionar los archivos, llevar el <strong>control de versiones</strong>, <strong>compilar</strong>, <strong>empaquetar</strong> e incluso <strong>publicar</strong> nuestro producto final para que sea accesible al resto de la comunidad open source. Me parece una buena idea de concepto, algo que debería de tener en cuenta todos los IDEs actuales, ya que existe mucha gente que quiere aprender a programar pero se sorprende y descontrola por los tantísimos detalles a controlar.</p>
<p>La plantilla para programar en Ubuntu Linux nos permite crear una aplicación usando el <a href="http://es.wikipedia.org/wiki/Python" target="_blank">lenguaje de programación Python</a>, con la GUI a través de <strong>Glade</strong>, control de versiones en <strong>Bazaar</strong> y <strong>LaunchPad</strong> como plataforma de publicación, preocupándonos únicamente de lo que importa, programar.</p>
<p><a href="https://edge.launchpad.net/quickly" target="_blank">Sitio oficial</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2010/05/01/quickly-un-entorno-todo-en-uno/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Reorganiza tu código en regiones con C# y MonoDevelop</title>
		<link>http://www.linuxhispano.net/2010/04/27/reorganiza-tu-codigo-en-regiones-con-c-y-monodevelop/</link>
		<comments>http://www.linuxhispano.net/2010/04/27/reorganiza-tu-codigo-en-regiones-con-c-y-monodevelop/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 12:51:04 +0000</pubDate>
		<dc:creator>carazo</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[c_sharp]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=2228</guid>
		<description><![CDATA[La posibilidad de poder dividir el código por regiones cuando empieza a adquirir cientos o miles de líneas es algo que los comentarios de toda la vida no llegan a conseguir con especial claridad. Las soluciones varían entre lenguajes pero &#8230; <a href="http://www.linuxhispano.net/2010/04/27/reorganiza-tu-codigo-en-regiones-con-c-y-monodevelop/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>La posibilidad de poder dividir el código por regiones cuando empieza a adquirir cientos o miles de líneas es algo que los comentarios <em>de toda la vida </em>no llegan a conseguir con especial claridad. Las soluciones varían entre lenguajes pero en <a href="http://es.wikipedia.org/wiki/C_Sharp" target="_blank">C#</a> y utilizando el IDE <a href="http://es.wikipedia.org/wiki/MonoDevelop" target="_blank">MonoDevelop</a> una de las mejores opciones es dividir el código en regiones de forma que el propio IDE nos lo muestre contraído o expandido en función a lo que nos interese.</p>
<p>Las palabras clave son: <em>#region</em> y <em>#endregion</em> para indicar el comienzo y el fin de la región, respectivamente. Podéis ver el resultado en las siguientes imágenes, como podéis apreciar MonoDevelop te genera un extracto del contenido de la región:</p>
<p><a href="http://www.linuxhispano.net/wp-content/uploads/2010/04/region_extendida_linuxhispano.jpg"><img class="aligncenter size-full wp-image-2258" title="region_extendida_linuxhispano" src="http://www.linuxhispano.net/wp-content/uploads/2010/04/region_extendida_linuxhispano.jpg" alt="" width="561" height="227" /></a></p>
<p><a href="http://www.linuxhispano.net/wp-content/uploads/2010/04/region_concentrada_linuxhispano1.jpg"><img class="aligncenter size-full wp-image-2261" title="region_concentrada_linuxhispano" src="http://www.linuxhispano.net/wp-content/uploads/2010/04/region_concentrada_linuxhispano1.jpg" alt="" width="560" height="167" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2010/04/27/reorganiza-tu-codigo-en-regiones-con-c-y-monodevelop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instalar y configurar Django manualmente desde el repositorio</title>
		<link>http://www.linuxhispano.net/2010/01/28/instalar-y-configurar-django-manualmente-desde-el-repositorio/</link>
		<comments>http://www.linuxhispano.net/2010/01/28/instalar-y-configurar-django-manualmente-desde-el-repositorio/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 13:46:50 +0000</pubDate>
		<dc:creator>carazo</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[configurar]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[instalar]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[repositorio]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=1467</guid>
		<description><![CDATA[Aunque en la entrada de la presentación de Django se habla de la instalación del framework, a través de dos métodos: script install.py e instalación de paquete desde el repositorio; vamos a explicar otro método más, algo más largo pero &#8230; <a href="http://www.linuxhispano.net/2010/01/28/instalar-y-configurar-django-manualmente-desde-el-repositorio/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.linuxhispano.net/wp-content/uploads/2010/01/python-django.png"><img class="aligncenter size-full wp-image-1504" title="python-django" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/python-django.png" alt="" width="211" height="192" /></a></p>
<p>Aunque en la entrada de la presentación de Django se habla de la instalación del framework, a través de dos métodos: script install.py e instalación de paquete desde el repositorio; <strong>vamos a explicar otro método más, algo más largo pero a la vez más compatible</strong>. Nos quita la limitación del paquete de que la versión no sea la más reciente (limitación que no tiene el método de instalación con <em>install.py</em>).</p>
<p>Doy por supuesto que tenéis instalado Python en vuestro equipo.</p>
<ol>
<li>Nos <strong>dirigimos </strong>a nuestro directorio $HOME</li>
<li><strong>Descargamos la última revisión</strong> del proyecto: <em>svn co http://code.djangoproject.com/svn/django/trunk/ djtrunk</em></li>
<li>Averiguamos cuál es el <strong>directorio en el que Python guarda los paquete</strong>s:  <em>python -c &#8220;from distutils.sysconfig import get_python_lib; print get_python_lib()&#8221;</em></li>
<li>Nos dirigimos al directorio que nos indique y <strong>creamos un fichero de nombre </strong><em><strong>django.pth</strong></em> (el fichero podéis crearlo con nano mismo <em>nano django.pth</em>).</li>
<li>En dicho fichero <strong>indicamos </strong>sólo una línea con <strong>el directorio</strong> en el que hemos <strong>descargado</strong> el código de Django (en nuestro caso será /home/miusuario/djtrunk).</li>
<li><strong>Añadimos </strong>a la variable <strong>PATH </strong>la ruta de los <strong>binarios de Django</strong>:
<ol>
<li>Editamos el fichero con las variables de entorno <em>/etc/environment</em></li>
<li>Añadimos a la variable PATH la ruta:<em> PATH=”lo_que_haya_antes: $HOME/djtrunk/djtrunk/django/bin”</em></li>
</ol>
</li>
</ol>
<p><strong>Ya podemos probar la instalación de Django</strong>. Podéis probar a importar el módulo Django desde Python o podéis probar a crear un sitio y lanzar el servidor de prueba:</p>
<ol>
<li><em>django-admin.py startproject misitio</em></li>
<li><em>python manage.py runserver</em></li>
<li>Lanzamos el navegador para escuchar el puerto 8000 del host local: <em>http://localhost:8000</em></li>
</ol>
<p>Deberías ver algo así:</p>
<p><a href="http://www.linuxhispano.net/wp-content/uploads/2010/01/prueba.jpg"><img class="aligncenter size-full wp-image-1502" title="prueba" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/prueba-e1264684650202.jpg" alt="" width="450" height="119" /></a>Y a partir de aquí seguid <a href="http://www.linuxhispano.net/2010/01/27/django-presentacion-introduccion-y-ejemplo-de-desarrollo-programacion-avanzada/" target="_blank">leyendo el ejemplo que colgamos ayer</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2010/01/28/instalar-y-configurar-django-manualmente-desde-el-repositorio/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Django: presentación, introducción y ejemplo de desarrollo [Programación Avanzada]</title>
		<link>http://www.linuxhispano.net/2010/01/27/django-presentacion-introduccion-y-ejemplo-de-desarrollo-programacion-avanzada/</link>
		<comments>http://www.linuxhispano.net/2010/01/27/django-presentacion-introduccion-y-ejemplo-de-desarrollo-programacion-avanzada/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 12:32:49 +0000</pubDate>
		<dc:creator>carazo</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[configuración]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[instalación]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=1398</guid>
		<description><![CDATA[A lo largo de la presentación que adjuntamos en este enlace y con motivo del trabajo voluntario planteado en las prácticas de Programación Avanzada, José Antonio Sánchez Pallero y yo, hemos tratado de transmitir una idea general acerca de Django, &#8230; <a href="http://www.linuxhispano.net/2010/01/27/django-presentacion-introduccion-y-ejemplo-de-desarrollo-programacion-avanzada/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.djangoproject.com/"><img class="aligncenter size-full wp-image-1399" title="django-logo" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/django-logo.png" alt="" width="504" height="216" /></a></p>
<p>A lo largo de la presentación que adjuntamos en este enlace y con motivo del trabajo voluntario planteado en las prácticas de Programación Avanzada, <strong>José Antonio Sánchez Pallero y </strong><a href="http://www.linuxhispano.net/author/carazo/" target="_blank"><strong>yo</strong></a>, hemos tratado de transmitir una idea general acerca de <a href="http://es.wikipedia.org/wiki/Django" target="_blank"><strong>Django</strong></a>, <strong>el framework libre basado en Python orientado a la creación rápida de aplicaciones web</strong>. Al final del mismo y para completar la explicación, presentamos un pequeño ejemplo de desarrollo haciendo uso de esta herramienta.</p>
<p>Toda persona que haya tenido contacto con el desarrollo web, <strong>sabrá de los inconvenientes</strong> que crean temas como: el control de las entradas del usuario, la interacción con la base de datos, la creación de direcciones amigables para los buscadores (tan necesario para <a href="http://es.wikipedia.org/wiki/Search_engine_optimization" target="_blank">el SEO</a>), la modificación de las estructuras de datos una vez creadas o la definición de distintos roles de permisos para los usuarios del sistema.</p>
<p><strong>Todo este tipo de problemas los soluciona </strong><a href="http://es.wikipedia.org/wiki/Django" target="_blank"><strong>Django</strong></a><strong> de una manera muy intuitiva</strong>, con la potencia añadida de un lenguaje tan amable y completo como <a href="http://es.wikipedia.org/wiki/Python" target="_blank">Python</a>.</p>
<p>A continuación os dejo la presentación y adjunto también capturas de pantalla del ejemplo desarrollado y <a href="http://jcarazo.com/tmp/ejemploDjango.tar.gz" target="_blank">el código fuente del ejemplo para descargar</a>. Los objetivos y la funcionalidad del ejemplo están comentados en la presentación; la implementación en sí explicada está comentado directamente sobre el código.</p>
<p><a style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="Django - Plataforma de sitios web" href="http://www.slideshare.net/jcarazo/django-plataforma-de-sitios-web">Django &#8211; Plataforma de sitios web</a></p>
<p style="text-align: center;"><object style="margin: 0px;" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=djangopa0910-100125054751-phpapp02&amp;stripped_title=django-plataforma-de-sitios-web" /><param name="allowfullscreen" value="true" /><embed style="margin: 0px;" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=djangopa0910-100125054751-phpapp02&amp;stripped_title=django-plataforma-de-sitios-web" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<ul>
<li><strong><a href="http://jcarazo.com/tmp/ejemploDjango.tar.gz">Descargar: ejemploDjango.tar.gz (código fuente del ejemplo)</a></strong></li>
</ul>
<p><em>Los datos personales que aparecen en los ejemplos son inventados. Algunos datos sobre grupos y centros de investigación sí son reales.</em></p>
<p><strong>Vista índice</strong></p>
<p><strong><a href="http://www.linuxhispano.net/wp-content/uploads/2010/01/vista_indice.png"><img class="aligncenter size-full wp-image-1456" title="vista_indice" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/vista_indice-e1264591596180.png" alt="" width="450" height="171" /></a>Vista Instituto</strong></p>
<p><a href="http://www.linuxhispano.net/wp-content/uploads/2010/01/vista_instituto-e1264591776909.png"><img class="aligncenter size-full wp-image-1458" title="vista_instituto" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/vista_instituto-e1264591776909.png" alt="" width="449" height="168" /></a></p>
<p><strong>Vista grupo</strong></p>
<p><em><a style="text-decoration: none;" href="http://www.linuxhispano.net/wp-content/uploads/2010/01/vista_grupo1.png"><img class="aligncenter size-full wp-image-1460" title="vista_grupo" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/vista_grupo1-e1264592489739.png" alt="" width="450" height="170" /></a></em></p>
<p><em>Esta entrada <a href="http://aprendepython.blogspot.com/2010/01/extra-django-presentacion-introduccion.html" target="_blank">también ha sido publicada en un blog sobre Python</a> que ha creado un compañero de la clase. Desde aquí darle la enhorabuena y recomendároslo a todos: <a href="http://aprendepython.blogspot.com/2010/01/extra-django-presentacion-introduccion.html" target="_blank">Aprende Python como si estuvieras en primero</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2010/01/27/django-presentacion-introduccion-y-ejemplo-de-desarrollo-programacion-avanzada/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Apache como servidor de ASP.NET con Mono</title>
		<link>http://www.linuxhispano.net/2010/01/25/apache-como-servidor-de-asp-net-con-mono/</link>
		<comments>http://www.linuxhispano.net/2010/01/25/apache-como-servidor-de-asp-net-con-mono/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 16:22:23 +0000</pubDate>
		<dc:creator>carazo</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[aplicación web]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[xsp]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=1378</guid>
		<description><![CDATA[Si hace unos días hablábamos de la posibilidad de ejecutar aplicaciones ASP.NET en nuestro equipo Linux con XSP, hoy traemos la que podría ser la segunda parte de ese artículo: hacer esto mismo pero con Apache y mod_mono. ¿Por qué &#8230; <a href="http://www.linuxhispano.net/2010/01/25/apache-como-servidor-de-asp-net-con-mono/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Si hace unos días hablábamos de la posibilidad de <a href="http://www.linuxhispano.net/2010/01/07/xsp-un-servidor-para-aplicaciones-asp-net-en-linux/" target="_blank">ejecutar aplicaciones ASP.NET en nuestro equipo Linux con XSP</a>, hoy traemos la que podría ser la segunda parte de ese artículo: hacer esto mismo pero con <a href="http://es.wikipedia.org/wiki/Servidor_HTTP_Apache" target="_blank">Apache</a> y <a href="http://en.wikipedia.org/wiki/Mod_mono" target="_blank">mod_mono</a>.</p>
<p style="text-align: center;"><a style="text-decoration: none;" href="http://www.apache.org/"><img class="aligncenter size-full wp-image-1416" title="logo_apache" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/logo_apache.gif" alt="" width="356" height="107" /></a></p>
<p><strong>¿Por qué escoger este binomio en lugar de XSP? </strong>La respuesta es fácil: XSP es un servidor de pruebas, no de producción y si queremos tener un servicio o aplicación web ejecutando de forma <em>decente </em>en producción, mejor utilizar <a href="http://es.wikipedia.org/wiki/Servidor_HTTP_Apache" target="_blank">Apache</a> y <a href="http://en.wikipedia.org/wiki/Mod_mono" target="_blank">mod_mono</a>. Las razones no son sólo por la escalabilidad y eficiencia que permite <a href="http://es.wikipedia.org/wiki/Servidor_HTTP_Apache" target="_blank">Apache</a>, sino que están relacionadas por la seguridad que provee el servidor más utilizado a nivel mundial y por la gran variedad de opciones que nos ofrece.</p>
<p>De todas maneras sigo pensando que al igual que el servidor de pruebas de <a href="http://es.wikipedia.org/wiki/Django" target="_blank">Django</a> es útil para las pruebas, <a href="http://www.linuxhispano.net/2010/01/07/xsp-un-servidor-para-aplicaciones-asp-net-en-linux/" target="_blank">XSP</a> es un buen servidor de pruebas para practicar con nuestro PC cuando estemos aprendiendo <a href="http://es.wikipedia.org/wiki/ASP.NET" target="_blank">ASP.NET</a>. Cuando la aplicación se hace compleja y sobre todo queramos pasarla a producción, Apache.</p>
<p><strong>Instalación y configuración</strong></p>
<p><strong> </strong></p>
<div id="_mcePaste">
<ol>
<li><strong>Instalamos</strong>:
<ol>
<li><strong>Apache 2</strong> (si utilizáis sistema de paquetería será algo así como <em>apache2</em>).</li>
<li>Módulo para <strong>multiproceso</strong>:<em> apache2-mpm-worker</em>.</li>
<li><strong>Módulo de Mono</strong>: <em>libapache2-mod-mono.</em></li>
<li><em><span style="font-style: normal;"><strong>Interfaz entre Mono y servidor</strong>: <em>mono-apache-server.</em></span></em></li>
</ol>
</li>
<li><strong>Reiniciamos el servicio</strong> de Apache para que recargue la configuración: <em>sudo /etc/init.d/apache2 restart</em></li>
<li><em><span style="font-style: normal;"><strong>Activamos el módulo</strong> (a2enmod significa</span> apache2 enable module<span style="font-style: normal;">): </span>sudo a2enmod mod_mono</em></li>
<li><em><span style="font-style: normal;"><strong>Vemos </strong></span><span style="font-style: normal;"><strong> qué versión de ASP.NET está activada</strong> (lo recomendable es que sea la 2 y no la 1). Para comprobarlo nos dirigimos a: </span>/etc/apache2/mods-available <span style="font-style: normal;">y vemos el fichero</span><span style="font-style: normal;"> </span>mod_mono.conf<span style="font-style: normal;">, debería estar así (comentada con # la primera):</span><span style="font-style: normal;"><br />
<em> #Include /etc/mono-server/mono-server-hosts.conf<br />
Include /etc/mono-server2/mono-server2-hosts.conf</em></span></em></li>
</ol>
<p>En definitiva, una forma simple de tener un servidor ASP.NET corriendo en nuestro equipo Linux, con software libre y en sólo cuatro pasos. Para tenerlo perfectamente preparado para producción, deberéis de tener en cuenta algunos detalles más propios de Apache, pero la parte específica de Mono es ésta.</p>
<p>Ya me contaréis vuestras impresiones con esta tecnología.</p>
<p><em>Parece que la noticia ha gustado y lo han colgado de <a href="http://www.meneame.net/" target="_blank">Menéame</a>. Si queréis ya sabéis: <a href="http://www.meneame.net/story/apache-como-servidor-asp.net-mono" target="_blank">menead</a>.</em></p>
<p><a href="http://www.mono-project.com/Main_Page"><img class="aligncenter" title="Logo Proyecto Mono" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/mono.png" alt="Logo Proyecto Mono" width="277" height="298" /></a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2010/01/25/apache-como-servidor-de-asp-net-con-mono/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introducción a Pygame [Programación Avanzada]</title>
		<link>http://www.linuxhispano.net/2010/01/21/introduccion-a-pygame-programacion-avanzada/</link>
		<comments>http://www.linuxhispano.net/2010/01/21/introduccion-a-pygame-programacion-avanzada/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 15:06:19 +0000</pubDate>
		<dc:creator>ahornero</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[gráficos]]></category>
		<category><![CDATA[introduccion]]></category>
		<category><![CDATA[Juegos]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[pygame]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=1369</guid>
		<description><![CDATA[A través de esta entrada vamos a introducirnos en el mundo del desarrollo de aplicaciones gráficas usando una librería llamada pygame que nos proporciona las herramientas necesarias para crear de forma relativamente sencilla nuestros juegos en el lenguaje de programación &#8230; <a href="http://www.linuxhispano.net/2010/01/21/introduccion-a-pygame-programacion-avanzada/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1387" title="pygame_logo" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/pygame_logo.gif" alt="" width="200" height="60" /></p>
<p>A través de esta entrada vamos a introducirnos en el mundo del desarrollo de aplicaciones gráficas usando una librería llamada <strong><em>pygame </em></strong>que nos proporciona las herramientas necesarias para crear de  forma relativamente sencilla nuestros juegos en el lenguaje de programación <strong>Python</strong>.</p>
<h1><strong>¿Qué es Pygame?</strong></h1>
<p><em>Pygame </em>es un conjunto de módulos que nos ayudan a crear videojuegos o aplicaciones gráficas (no necesariamente videojuegos) en dos dimensiones. <em>Pygame </em>incluye gráficos y bibliotecas de sonido diseñados para ser utilizados directamente bajo <strong>Python</strong>. Está construido bajo Simple DirectMedia Layer (<strong>SDL</strong>), que a su vez son un conjunto de bibliotecas desarrolladas en <strong>lenguaje C</strong>, proporcionando las funciones básicas para realizar operaciones de dibujado 2D, gestión de efectos de sonido y música, y carga y gestión de imágenes. De esta manera, a través de <em>Pygame </em>podemos abstraernos de la lógica del juego (o aplicación) en si mismo, haciendo posible el uso de un lenguaje de alto nivel como Python para estructurar el juego.</p>
<p><em>Pygame </em>fue contruido como sustituto de <a href="http://sourceforge.net/projects/pysdl/" target="_blank">pySDL</a>, después del poco éxito del mismo, ya que la forma de interactuar no llegó a recoger tantas opciones y tan simples como las del entorno de <em>Pygame</em>.</p>
<p>Escrito originalmente por Shinners Pete se distribuye bajo la <em>GNU Lesser General Public License</em>. Desde 2004 se trata de un proyecto de código abierto de la comunidad de software libre.</p>
<h1>Instalando Pygame y el entorno</h1>
<p>Antes de comenzar a ver una serie de ejemplos generales a modo de introducción en el mundo de <em>Pygame </em>vamos a configurar nuestro sistema para poder importar los módulos de <em>Pygame </em>desde Python, como cualquier otra librería.</p>
<p>La instalación es bastante simple. Suponiendo que nuestro sistema corre una distribución basada en <strong>Debian </strong>y que ya corre la versión más reciente de Python, de tal forma bastará con usar un gestor de paquetes e instalar el paquete <em><strong>python-pygame</strong></em> y satisfacer todas sus dependencias. Así, y de la forma más intuitiva usaremos las dos vías principales, usando el adminstrador de paquetes en modo texto APT y su versión gráfica <strong>Synaptic</strong>.</p>
<p>En el primero de los casos la instalación es bastante sencilla, abrimos un terminal y ejecutando como superusuario (<em>root</em>) lanzamos la herramienta apt-get como se indica a continuación y cómo se observa en la <strong>figura 1</strong>.</p>
<blockquote><p><em>$ sudo apt-get install python-pygame</em></p></blockquote>
<p>Y nos preguntará si deseamos instalar todos los paquetes anexos y dependencias, a lo que responderemos afirmativamente.</p>
<div id="attachment_1370" class="wp-caption aligncenter" style="width: 526px"><img class="size-full wp-image-1370" title="pygame_terminal" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/pygame_terminal.png" alt="" width="516" height="197" /><p class="wp-caption-text">Figura 1 Instalación mediante el gestor de paquetes APT</p></div>
<p style="text-align: center;">
<p>Usando el gestor de paquetes <em>Synaptic </em>la operación es similar, nos dirigimos a <em>System → Administration → Synaptic Package Manager</em>, localizamos el paquete <strong><em>python-pygame</em></strong> y lo marcamos para instalar, cómo se muestra en la <strong>figura 2</strong>. Aplicamos los cambios aceptando todas las dependencias y listo, ya tenemos nuestro entorno preparado nuestro entornor para empezar a trabajar con <em>Pygame</em>.</p>
<div id="attachment_1371" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-1371 " title="pygame_synaptic" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/pygame_synaptic.png" alt="" width="500" /><p class="wp-caption-text">Figura 2 Instalación mediante el gestor de paquetes Synaptic</p></div>
<p>Uno de mis entornos de programación preferidos es Geany, un IDE desarrollado en GTK y que se define así mismo como: A fast and lightweight IDE. Aconsejo su uso ya que nos resultará bastante sencillo probar los ejemplos planteados.</p>
<p>Para su instalación, y de forma análoga a <em>Pygame</em>, localizaremos el paquete geany y satisfaceremos sus dependencias si se precisan, así con APT y cómo se muestra en la <strong>figura 3</strong>:</p>
<blockquote><p><em>$ sudo apt-get install geany</em></p></blockquote>
<div id="attachment_1381" class="wp-caption aligncenter" style="width: 502px"><img class="size-full wp-image-1381" title="pygame_geany" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/pygame_geany.png" alt="" width="492" height="231" /><p class="wp-caption-text">Figura 3: Instalación del IDE Geany</p></div>
<h1>Nuestro primer programa&#8230;</h1>
<p>Vamos a proceder con un ejemplo muy básico de uso. Abrimos nuestro <strong>IDE de Python (Geany)</strong> y probamos con el siguiente código, en este se dibujará un fondo sobre una ventana y dos lineas diagonales que cruzarán los extremos de izquierdas a derechas y de arriba a abajo y al contrario. Así, el código comentado:</p>
<blockquote><p><em># -*- coding: utf-8 -*-</em></p>
<p><em># Importamos las librería de Pygame y las del sistema, necesarias para forzar el cierre<br />
import pygame, sys<br />
from pygame.locals import *</em></p>
<p><em># Inicializamos Pygame<br />
pygame.init()</em></p>
<p><em># Definimos el color de fondo y el de la diagonal<br />
COLOR_FONDO = (50, 150, 200)<br />
COLOR_LINEA1 = (255, 0, 0)<br />
COLOR_LINEA2 = (0, 0, 255)</em></p>
<p><em># Definimos el tamaño de la aplicación y la tasa de refresco<br />
pantalla = pygame.display.set_mode((800, 600))<br />
refresco = pygame.time.Clock()</em></p>
<p><em>while True:<br />
time_passed = refresco.tick(30)<br />
# Comprobamos el cierre de la aplicación y en caso afirmativo lanzamos la función salir<br />
for event in pygame.event.get():<br />
if event.type == QUIT:<br />
sys.exit()</em></p>
<p><em># Fijamos el color de fondo y las lineas de diferentes colores, y lo sacamos por display<br />
pantalla.fill(COLOR_FONDO)<br />
pygame.draw.aaline(pantalla, COLOR_LINEA1, (1, 1), (799, 599))<br />
pygame.draw.aaline(pantalla, COLOR_LINEA2, (799, 1), (1, 599))<br />
pygame.display.flip()</em></p></blockquote>
<p><strong><em>NOTA</em></strong><em>: Para lanzar directamente la aplicación desde el <strong>IDE Geany</strong> podemos hacerlo pulsando </em>F5 <em>o desde el icono designado para esta operación.</em></p>
<p>De esta forma, el resultado que obtenemos tras ejecutar nuestra primera aplicación es el mostrado en la <strong>figura 4</strong>.</p>
<div id="attachment_1380" class="wp-caption aligncenter" style="width: 510px"><img class="size-medium wp-image-1380 " title="pygame_primer_programa" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/pygame_primer_programa-300x209.png" alt="" width="500" /><p class="wp-caption-text">Figura 4: Ejecutando nuestro primer programa</p></div>
<p style="text-align: center;">
<h1>Controlando los eventos</h1>
<p>Es posible que al empezar en la programación de aplicaciones gráficas mediante <em>Pygame </em>nos surjan dudas acerca del manejo de eventos a través del programa desarrollado. Es por ello que vamos a dedicar este pequeño apartado a tratar de aclarar las diferentes maneras que tenemos para registrar los eventos que se suceden en nuestra aplicación.</p>
<p>Será importante diferenciar los métodos que pueden ayudarnos a registrarlos a guardarlos de una forma temporal antes de ser analizados. Así:</p>
<ul>
<li><strong>pygame.event.get:</strong> Obtenemos los eventos mediante una cola. Esta función es la usada en el ejemplo anterior, de forma que definimos un tiempo de refresco a partir del cual recorremos los eventos registrados y ejecutamos sus acciones asociadas. Esta es quizás la forma más común de registro de eventos no forzado, y de esta manera no nos obliga a realizar una pulsación o control del flujo del programa en un punto.</li>
<li><strong>pygame.event.poll:</strong> Obtenemos un evento simple de la cola. Simplemente es capaz de guardar el último evento sucedido. Resulta práctica cuando únicamente queremos dejar constancia de un evento registrado en un intervalo de tiempo definido.</li>
<li><strong>pygame.event.wait:</strong> Espera un evento de la cola. Este lo he usado en el ejemplo planteado a continuación, de forma que podamos ir viendo algunos de los eventos que podemos controlar así como estudiar las posibilidades que nos ofrece esta vía de registrar eventos.</li>
</ul>
<p>Podemos ver el resto de eventos accesibles por teclado en el siguiente enlace: <a href="http://www.pygame.org/docs/ref/key.html" target="_blank">Documentación oficial de Python</a>.</p>
<p>El ejemplo que muestra su uso, a continuación:</p>
<blockquote><p><em># -*- coding: utf-8 -*-</em></p>
<p><em>import pygame<br />
from pygame.locals import *</em></p>
<p><em>pygame.init()<br />
pygame.display.set_mode((200, 200))<br />
pygame.display.flip()<br />
event = pygame.event.poll()</em></p>
<p><em>while True:<br />
cursor = pygame.mouse.get_pos()<br />
evento = pygame.event.wait()<br />
if evento.type == QUIT or evento.type == K_ESCAPE:<br />
print &#8221;Has abandonado la aplicación&#8221;<br />
raise SystemExit<br />
if pygame.mouse.get_pressed()[0]:<br />
print &#8221;Has usado el botón izquierdo del ratón&#8221;<br />
if pygame.mouse.get_pressed()[1]:<br />
print &#8221;Has usado el botón central del ratón&#8221;<br />
if pygame.mouse.get_pressed()[2]:<br />
print &#8221;Has usado el botón derecho del ratón&#8221;<br />
if evento.type == KEYDOWN and evento.key == K_SPACE:<br />
print &#8221;Has pulsado espacio&#8221;<br />
if evento.type == KEYDOWN and evento.key == K_BACKSPACE:<br />
print &#8221;Has pulsado backspace&#8221;</em></p></blockquote>
<p><em><span style="font-style: normal;">La <strong>figura 5</strong> muestra su ejecución:</span></em></p>
<p><em><span style="font-style: normal;"> </span></em></p>
<div id="attachment_1383" class="wp-caption aligncenter" style="width: 560px"><img class="size-full wp-image-1383 " title="pygame_eventos" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/pygame_eventos.png" alt="" width="550" /><p class="wp-caption-text">Figura 5: Controlando los eventos de la aplicación</p></div>
<h1><em><span style="font-style: normal;">Más figuras e imágenes</span></em></h1>
<p><em><span style="font-style: normal;">Al estar basado en </span><span style="font-style: normal;"><strong>SDL</strong></span><span style="font-style: normal;">, </span><span style="font-style: normal;">Pygame </span><span style="font-style: normal;">tiene la capacidad de poder mostrar imágenes así como formas básica de una forma casi trivial, las primitivas que se encargan de realizar estas operaciones las comentamos en el siguiente ejemplo y vemos su resultado:</span></em></p>
<blockquote><p><em># -*- coding: utf-8 -*-</em></p>
<p><em># Importamos las librería de Pygame y las del sistema, necesarias para forzar el cierre<br />
import pygame<br />
from pygame.locals import *</em></p>
<p><em># Inicializamos Pygame<br />
pygame.init()</em></p>
<p><em># Definimos el color de fondo y el de las figuras<br />
COLOR_FONDO = (50, 100, 50)<br />
COLOR_CUADRADO = (255, 0, 0)<br />
COLOR_CIRCULO = (0, 0, 255)<br />
# Cargamos la imagen y hacemos transparente el fondo (antes verde)<br />
imagen_nave = pygame.image.load(&#8216;nave.bmp&#8217;)<br />
imagen_nave.set_colorkey((0, 255, 0))</em></p>
<p><em># Definimos el tamaño de la aplicación y la tasa de refresco<br />
pantalla = pygame.display.set_mode((800, 600))</em></p>
<p><em>while True:<br />
time_passed = pygame.time.Clock().tick(30)<br />
# Comprobamos el cierre de la aplicación y en caso afirmativo lanzamos la función salir<br />
for event in pygame.event.get():<br />
if event.type == QUIT:<br />
raise SystemExit</em></p>
<p><em># Fijamos el color de fondo y dibujamos las figuras y la imagen<br />
pantalla.fill(COLOR_FONDO)<br />
pygame.draw.rect(pantalla, COLOR_CUADRADO, (50, 50, 100, 100))<br />
pygame.draw.circle(pantalla, COLOR_CIRCULO, (400, 300), 75 )<br />
pantalla.blit(imagen_nave, (500, 400))<br />
# Actualizamos la pantalla<br />
pygame.display.flip()</em></p></blockquote>
<p><em><strong>NOTA</strong>: Podemos ver cómo al no disponer de transparencia la imagen de la nave se la fijamos mediante el método set_colorkey().</em></p>
<p>Y el resultado lo podemos ver en la <strong>figura 6</strong>.</p>
<div id="attachment_1384" class="wp-caption aligncenter" style="width: 460px"><img class="size-medium wp-image-1384 " title="pygame_figuras" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/pygame_figuras-300x191.png" alt="" width="450" /><p class="wp-caption-text">Figura 6: Ejemplo con figuras e imágenes</p></div>
<h1>Y el sonido</h1>
<p>Para terminar con esta introducción a Pygame vamos a realizar un test de sonido, para lo cual usaremos la el módulo mixer. El ejemplo:</p>
<blockquote><p><em># -*- coding: utf-8 -*-</em></p>
<p><em>import pygame, os<br />
from pygame.locals import*</em></p>
<p><em># Iniciamos el módulo mixer<br />
pygame.mixer.init()<br />
# Cargamos la pista de audio haciendo uso del sistema, mediante el cual podemos indicar rutas relativas sin dependencia del sistema operativo<br />
pygame.mixer.music.load(os.path.join(&#8220;1vs0_JuniorGroove.ogg&#8221;))<br />
# Y reproducimos la pista cargada de forma continua, valor -1.<br />
pygame.mixer.music.play(-1)</em></p></blockquote>
<p>Podéis consultar el resto de opciones desde la <a href="http://www.pygame.org/docs/ref/mixer.html" target="_blank">documentación de Python</a>.</p>
<p><strong><em>NOTA</em></strong><em>: La pista de audio utilizada tiene licencia Creative Commons, <a href="http://01audiovideo.free.fr/ogg/1vs0_JuniorGroove.ogg" target="_blank">1vs0 – Junior Groove</a>.</em></p>
<h1><em><span style="font-style: normal;">Bibliografía</span></em></h1>
<ul>
<li><a href="http://www.koders.com/python/fidAFB2ABFFF98CE27FCF61D63A217756C7BD7B0A2F.aspx?s=pygame#L10" target="_blank">Koders.com</a></li>
<li><a href="http://en.wikipedia.org/wiki/Pygame" target="_blank">Wikipedia.org</a></li>
<li><a href="http://sourceforge.net/projects/pysdl/" target="_blank">SourceForge [pySDL]</a></li>
<li><a href="http://code.activestate.com/recipes/521884/" target="_blank">ActiveState.com</a></li>
<li><a href="http://www.01audio-video.com/download_ogg.htm" target="_blank">01audio-video.com [OGG Files]</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2010/01/21/introduccion-a-pygame-programacion-avanzada/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Ejecutar distintos lenguajes de programación en una web</title>
		<link>http://www.linuxhispano.net/2010/01/09/ejecutar-distintos-de-programacion-en-una-web/</link>
		<comments>http://www.linuxhispano.net/2010/01/09/ejecutar-distintos-de-programacion-en-una-web/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 13:08:23 +0000</pubDate>
		<dc:creator>carazo</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[lenguajes]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=1277</guid>
		<description><![CDATA[Cuando leí ayer la noticia en Kabytes la verdad que me resultó un tanto curiosa, pero era algo escéptico en cuanto a las posibilidades que podía brindar en realidad ideone, que es el nombre del servicio. Por ahora es una &#8230; <a href="http://www.linuxhispano.net/2010/01/09/ejecutar-distintos-de-programacion-en-una-web/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.linuxhispano.net/wp-content/uploads/2010/01/programando.jpg"><img class="aligncenter size-full wp-image-1280" title="programando" src="http://www.linuxhispano.net/wp-content/uploads/2010/01/programando.jpg" alt="" width="400" height="273" /></a></p>
<p>Cuando leí ayer la noticia en <a href="http://www.kabytes.com/programacion/ejecutar-codigos-en-distintos-lenguajes-de-programacion-online/" target="_blank">Kabytes</a> la verdad que me resultó un tanto curiosa, pero era algo escéptico en cuanto a las posibilidades que podía brindar en realidad <a href="http://ideone.com/" target="_blank">ideone</a>, que es el nombre del servicio. Por ahora es una versión beta por lo que todavía puede haber defectos, pero en líneas generales funciona bien.</p>
<p>La web nos presenta un<strong> cuadro donde elegir el lenguaje</strong>: Ada, C, C#, C++, Cobol, Common Lisp, Java, Lua, Prolog, Python, Ruby, Visual Basic.NET&#8230; entre otros muchos, <strong>un cuadro para</strong> elegir si queremos <strong>resaltar la sintaxis</strong> y un <strong>cuadro de texto para introducir nuestro código</strong>. Una vez lo hayamos introducido <strong>lo enviamos y la web nos devuelve el resultado de la ejecución</strong>.</p>
<p>Como podréis imaginar muchas de las librerías que normalmente tenemos disponibles cuando desarrollamos no están disponibles, pero sí las estructuras básicas de todos los lenguajes y podemos usarlo para curiosear simplemente o para compartirlo con un amigo o a través de una blog, gracias a un sistema de generación de enlaces con el que podemos enviar nuestra prueba.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2010/01/09/ejecutar-distintos-de-programacion-en-una-web/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>¿Cuál es la diferencia entre i++ y ++i?</title>
		<link>http://www.linuxhispano.net/2009/12/07/%c2%bfcual-es-la-diferencia-entre-i-y-i/</link>
		<comments>http://www.linuxhispano.net/2009/12/07/%c2%bfcual-es-la-diferencia-entre-i-y-i/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 10:54:04 +0000</pubDate>
		<dc:creator>carazo</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=793</guid>
		<description><![CDATA[Si alguna vez habéis programado en un lenguaje de programación con sintaxis heredada de C: el mismo C, C++, Java, C#&#8230; seguro que habéis utilizado el operador postincremento, sobre todo en iteraciones for, el famoso: i++ (o equivalente). Lo que &#8230; <a href="http://www.linuxhispano.net/2009/12/07/%c2%bfcual-es-la-diferencia-entre-i-y-i/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-968" title="operador" src="http://www.linuxhispano.net/wp-content/uploads/2009/12/operador.png" alt="operador" width="280" height="280" /></p>
<p>Si alguna vez habéis programado en un lenguaje de programación con sintaxis heredada de C: el mismo C, C++, Java, C#&#8230; seguro que habéis utilizado el operador postincremento, sobre todo en iteraciones <em>for</em>, el famoso: <strong>i++ </strong>(o equivalente). Lo que es menos frecuente es haber utilizado el operador <strong>++i</strong>, pero si lo habéis utilizado seguro que lo habéis hecho para algo similar al anterior. La diferencia entre ambos es algo que un día me inquietó y que hoy os voy a comentar.</p>
<p><strong>La diferencia es la precedencia del operador</strong>, es decir, qué operador realiza su acción antes. Esta diferencia no importa cuando la única operación de una sentencia es<em> i++ </em>o <em>++i</em>, es decir:</p>
<pre name="code" class="java">i++;
++i;</pre>
<p>Típica situación del caso de las iteraciones <em>for</em>, es lo mismo. Sin embargo, cuando hay otra operación de por medio, las cosas cambian. Veamos:</p>
<pre name="code"  class="java">i = 0;
v = i++;</pre>
<p>La variable v contendrá 0 e i contendrá 1. Primero se ha asignado el valor de i a v y posteriormente se ha incrementado i. Si utilizamos el otro operador, que tiene más precedencia, se ejecutará antes el incremento de i y posteriormente se asignará su nuevo valor, 1, a la variable v.</p>
<pre name="code"  class="java">i = 0;
v = ++i;</pre>
<p>En este caso ambas variables, v e i, contienen 1.</p>
<p>La diferencia funcional, como podéis ver, existe y es conveniente conocerla, para poder utilizarla, explotarla y de paso, conocer algo más sobre los lenguajes de este tipo.</p>
<p>Aparte existe otra diferencia, ésta de carácter computacional y que es conveniente conocerla de cara a hacer más eficiente nuestro código. <em>++i</em> realiza dos instrucciones, incrementar y retornar; mientras que <em>i++</em>, por lo que acabamos de comentar lleva a cabo tres: guardar el estado actual, incrementar, retornar el estado anterior.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2009/12/07/%c2%bfcual-es-la-diferencia-entre-i-y-i/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Comparar fechas en formato MySQL con PHP</title>
		<link>http://www.linuxhispano.net/2009/12/01/comparar-fechas-en-formato-mysql-con-php/</link>
		<comments>http://www.linuxhispano.net/2009/12/01/comparar-fechas-en-formato-mysql-con-php/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 12:28:35 +0000</pubDate>
		<dc:creator>carazo</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[comparar]]></category>
		<category><![CDATA[fecha]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=886</guid>
		<description><![CDATA[Es un problema con el que cualquier persona que utilice PHP y MySQL se encuentra muy a menudo. Hasta que PHP no trate directamente esos datos y se sobrecarguen internamente los operadores de comparación para que todo sea directo, tendremos &#8230; <a href="http://www.linuxhispano.net/2009/12/01/comparar-fechas-en-formato-mysql-con-php/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Es un problema con el que cualquier persona que utilice PHP y MySQL se encuentra muy a menudo. Hasta que PHP no trate directamente esos datos y se sobrecarguen internamente los operadores de comparación para que todo sea directo, tendremos que valernos de métodos como el que os muestro para poder <strong>comparar dos fechas en formato MySQL con PHP </strong>(formato MySQL, es decir fecha en formato inglés con guiones y el orden invertido respecto al nuestro).</p>
<p>La siguiente función devuelve:</p>
<ul>
<li>1 si la fecha a es mayor que la fecha b</li>
<li>0 si son iguales</li>
<li>-1 si la fecha a es menor que la fecha b</li>
</ul>
<pre name="code" class="php">function comparar_fechas_mysql($a, $b)
	{
		$a_v=explode("-",$a);
		$anyo_a = $a_v[0];
		$mes_a = $a_v[1];
		$dia_a = $a_v[2];

		$b_v=explode("-",$b);
		$anyo_b = $b_v[0];
		$mes_b = $b_v[1];
		$dia_b = $b_v[2];

		if($anyo_a > $anyo_b)
			return 1;
		else
		{
			if($anyo_a < $anyo_b)
				return -1;
			else
			{
				if($mes_a > $mes_b)
					return 1;
				else
				{
					if($mes_a < $mes_b)
						return -1;
					else
					{
						if($dia_a > $dia_b)
							return 1;
						else
						{
							if($dia_a < $dia_b)
								return -1;
							else
								return 0;
						}
					}
				}
			}
		}
	}</pre>
<p>Esperamos vuestras sugerencias, mejoras y rectificaciones de este y todos los <em>tips</em> de programación que vayamos incorporando.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2009/12/01/comparar-fechas-en-formato-mysql-con-php/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Novedades en Java 7</title>
		<link>http://www.linuxhispano.net/2009/11/26/novedades-en-java-7/</link>
		<comments>http://www.linuxhispano.net/2009/11/26/novedades-en-java-7/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 11:15:54 +0000</pubDate>
		<dc:creator>carazo</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[novedades]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=791</guid>
		<description><![CDATA[Aunque todavía queda un poco para el lanzamiento de la versión estable de Java 7 (ahora mismo si no me equivoco están en la actualización 17 de Java 6), aquí os traigo una serie de mejoras que va a incorporar &#8230; <a href="http://www.linuxhispano.net/2009/11/26/novedades-en-java-7/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-807" title="java_logo" src="http://www.linuxhispano.net/wp-content/uploads/2009/11/java_logo.png" alt="java_logo" width="93" height="122" /></p>
<p>Aunque todavía queda un poco para el lanzamiento de la versión estable de <strong>Java 7</strong> (ahora mismo si no me equivoco están en la actualización 17 de Java 6), aquí os traigo <strong>una serie de mejoras</strong> que va a incorporar y que podéis ya probar a través del <em><a href="http://java.sun.com/features/jdk/7/" target="_blank">JDK 7 </a></em><em><a href="http://java.sun.com/features/jdk/7/" target="_blank">Early Access</a></em>.</p>
<p>La recopilación de las mejoras ha salido publicada en <a href="http://code.joejag.com/2009/new-language-features-in-java-7/" target="_blank">el blog tecnológico de JoeJag</a> (en inglés) y aquí os la dejo traducida:</p>
<p><strong>Soporte mejorado para colecciones</strong></p>
<p>A partir de ahora las colecciones podrán declararse al estilo de Ruby o Perl. En lugar de tener que hacer:<br />
<code>List list = new ArrayList();<br />
list.add("item");<br />
String item = list.get(0);</code></p>
<p><code>Set set = new HashSet();<br />
set.add("item");<br />
</code></p>
<p><code>Map map = new HashMap();<br />
map.put("key", 1);<br />
int value = map.get("key");</code></p>
<p>Se podrá hacer directamente:<br />
<code>List list = ["item"];<br />
String item = list[0];</code></p>
<p><code> </code></p>
<p><code>Set set = {"item"};</code></p>
<p><code> </code></p>
<p><code>Map map = {"key" : 1};<br />
int value = map["key"];</code></p>
<p><strong>Manejo automático de recursos</strong></p>
<p>Algunos recursos como InputStream, Writers, Sockets o clases relacionadas con Sql, tienen que ser ser cerrados manualmente en cada utilización, por ejemplo:<br />
<code>BufferedReader br = new BufferedReader(new FileReader(path));<br />
try {<br />
return br.readLine();<br />
} finally {<br />
br.close();<br />
}</code></p>
<p>Sin embargo, a partir de ahora, automáticamente podremos hacer:<br />
<code>try (BufferedReader br = new BufferedReader(new FileReader(path)) {<br />
return br.readLine();<br />
}</code></p>
<p>O si tenemos más de un recurso:<br />
<code>try (<br />
InputStream in = new FileInputStream(src);<br />
OutputStream out = new FileOutputStream(dest))<br />
{<br />
// código<br />
}</code></p>
<p><strong>Inferencia de tipos mejorada para creación genérica de instancias (operador diamante &lt; &gt;)</strong></p>
<p>Si antes estábamos obligados a hacer:<br />
<code>Map&gt; anagrams = new HashMap&gt;();</code></p>
<p>Ahora simplemente:<br />
<code>Map&gt; anagrams = new HashMap&lt;&gt;();</code></p>
<p><strong>Barras bajas en literales numéricos</strong></p>
<p>Porque los números grandes son complejos de leer sin problemas:<br />
<code>int un_millon= 1_000_000;</code></p>
<p><strong>Cadenas para la clausula switch</strong></p>
<p>Posiblemente el más esperado de todos (hasta ahora sólo los tipos enum y números podían ser utilizados en los <em>switch</em>). Ya podremos hacer directamente:<br />
<code>String s = ...<br />
switch(s) {<br />
case "linuxhispano":<br />
llamar(w);</code></p>
<p><code>case "web":<br />
case "internet":<br />
procesar(w);<br />
break;</code></p>
<p><code>case "foo":<br />
procesarfoo(s);<br />
// fall-through</code></p>
<p><code> </code></p>
<p><code> default:<br />
demas(s);<br />
break;<br />
}</code></p>
<p><strong>Binarios literales</strong></p>
<p>Utilizando el prefijo <em>0b (es un cero &#8217;0&#8242; no una o)</em>, podremos representar directamente enteros en formato binario:<br />
<code>int binary = 0b1001_1001;</code></p>
<p><strong>Simplificación de la invocación de métodos con argumentos variables</strong></p>
<p>Si hasta ahora el compilador emitía <em>warning </em>en el lugar de la llamada al método, ahora lo hará en el de la declaración del mismo para facilitar la labor a los desarrolladores.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2009/11/26/novedades-en-java-7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Atajos de teclado en tus aplicaciones web con JavaScript</title>
		<link>http://www.linuxhispano.net/2009/11/23/atajos-de-teclado-en-tus-aplicaciones-web-con-javascript/</link>
		<comments>http://www.linuxhispano.net/2009/11/23/atajos-de-teclado-en-tus-aplicaciones-web-con-javascript/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 23:11:24 +0000</pubDate>
		<dc:creator>carazo</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[aplicación web]]></category>
		<category><![CDATA[atajo]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[teclado]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=737</guid>
		<description><![CDATA[A través de un post publicado por Omeyas Web, el blog de unos amigos (que a su vez está referenciado de otro post aparecido en el blog de Andrés Nieto) me entero de un sencillo método para controlar los atajos &#8230; <a href="http://www.linuxhispano.net/2009/11/23/atajos-de-teclado-en-tus-aplicaciones-web-con-javascript/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-738" title="keyboard-shortcut" src="http://www.linuxhispano.net/wp-content/uploads/2009/11/keyboard-shortcut.jpg" alt="keyboard-shortcut" width="281" height="278" /></p>
<p>A través de un post publicado por <a href="http://www.omeyasweb.com/controla-el-teclado-con-javascript/" target="_blank">Omeyas Web</a>, el blog de unos amigos (que a su vez está referenciado de otro post aparecido en <a href="http://www.anieto2k.com/2009/10/27/controla-el-teclado-con-javascript/" target="_blank">el blog de Andrés Nieto</a>) me entero de un sencillo método para controlar los atajos de teclado en las aplicaciones web.</p>
<p>En aplicaciones en local es muy fácil y útil manejar los atajos de teclado, mientras que en aplicaciones web, los métodos para hacerlo no son nada estándares y tenemos que remitirnos a script como el que os dejo. El futuro facilite todo esto, ya que sistemas operativos como <a href="http://www.linuxhispano.net/2009/11/22/canonical-ubuntu-habla-sobre-chrome-os/" target="_blank">Google Chrome OS</a> y proyectos similares, trasladan la <em>realidad </em>a la web, por lo que es necesario potencia este tipo de herramientas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2009/11/23/atajos-de-teclado-en-tus-aplicaciones-web-con-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>¿qué opinas sobre DIA?</title>
		<link>http://www.linuxhispano.net/2009/11/22/%c2%bfque-opinas-sobre-dia/</link>
		<comments>http://www.linuxhispano.net/2009/11/22/%c2%bfque-opinas-sobre-dia/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 22:01:18 +0000</pubDate>
		<dc:creator>ahornero</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[dia]]></category>
		<category><![CDATA[diagramas]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=734</guid>
		<description><![CDATA[DIA es una aplicación libre para la creación de diagramas bajo GTK+ y multiplataforma, bajo licencia GPL. Personalmente la considero una de las mejores aplicaciones en cuanto a creación de diagrama (de casi cualquier tipo) para nuestro entorno GNU/Linux. ¿Por &#8230; <a href="http://www.linuxhispano.net/2009/11/22/%c2%bfque-opinas-sobre-dia/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-735 alignnone" title="DIA" src="http://www.linuxhispano.net/wp-content/uploads/2009/11/DIA.jpg" alt="DIA" width="300" height="108" /></p>
<p style="text-align: left;"><a href="http://live.gnome.org/Dia" target="_blank">DIA</a> es una aplicación libre para la creación de diagramas bajo GTK+ y multiplataforma, bajo licencia GPL. Personalmente la considero <strong>una de las mejores aplicaciones</strong> en cuanto a creación de diagrama (de casi cualquier tipo) para nuestro entorno GNU/Linux.</p>
<p style="text-align: left;">¿Por qué os cuento todo esto? Ayer sábado, leyendo la lista de correo de mi universidad me sorprendió la opinión que tienen al respecto algunos compañeros sobre DIA y las alternativas propuestas, bajo mi opinión no son comparables. A continuación tenéis el hilo de la conversación, he decidido no proporcionar direcciones de correo ni nombres por preservar el anonimato de esta gente:</p>
<blockquote>
<p style="text-align: left;"><em><strong>Estudiante1  escribió:</strong><br />
Hola a todos</em></p>
<p style="text-align: left;"><em> ¿Qué programas estáis usando para hacer los diagramas EE-R? Hemos probado Visio pero no sabemos como realizar las relaciones. También hemos usado DIA y SmartDraw, pero tenemos problemas a la hora de poner los atributos a las entidades. ¿Los vais a hacer con la notación antigua (la de los circulitos al lado de las entidades)?</em></p>
<p style="text-align: left;"><strong><em>Estudiante2  escribió:</em></strong></p>
<p style="text-align: left;"><em>Hola,<br />
Nosotros estamos utilizando el DIA, aunque es bastante malo, ya que cuesta trabajo poner los atributos, y el programa falla mucho. Pero es el unico que he encontrado que tenga todo lo necesario para un EE-R.</em></p>
<p style="text-align: left;"><strong><em>Estudiante3  escribió:</em></strong></p>
<p style="text-align: left;"><em>Nosotros estamos haciendo los diagramas con el esquema &#8220;Diagramas de flujo&#8221; del DIA. Estamos haciendo los mismos que aprendimos en 2º.</p>
<p>Espero que os sirva.</em></p></blockquote>
<p style="text-align: left;">¿Qué opinas vosotros? A los que por alguna razón u otra habéis usado DIA, ¿qué opináis sobre DIA? Por cierto, parece que <em>Estudiante3 </em>fue el único sensato.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2009/11/22/%c2%bfque-opinas-sobre-dia/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>HTML 5 Cheat Sheet</title>
		<link>http://www.linuxhispano.net/2009/11/16/html-5-cheat-sheet/</link>
		<comments>http://www.linuxhispano.net/2009/11/16/html-5-cheat-sheet/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 08:05:50 +0000</pubDate>
		<dc:creator>ahornero</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=638</guid>
		<description><![CDATA[Breve y al mismo tiempo sencilla chuleta para HTML5, que podéis descargar desde el siguiente enlace (PDF), y su autor aquí. Algunas de las nuevas etiquetas son análogas a &#60;div&#62; y &#60;span&#62;, pero tienen un significado semántico, como es el caso &#8230; <a href="http://www.linuxhispano.net/2009/11/16/html-5-cheat-sheet/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Breve y al mismo tiempo sencilla chuleta para <a href="http://es.wikipedia.org/wiki/HTML_5" target="_blank">HTML5</a>, que podéis descargar desde el siguiente <a href="http://media.smashingmagazine.com/wp-content/uploads/images/html5-cheat-sheet/html5-cheat-sheet.pdf" target="_blank">enlace (PDF)</a>, y su autor <a href="http://www.smashingmagazine.com/2009/07/06/html-5-cheat-sheet-pdf/" target="_blank">aquí</a>.</p>
<p style="text-align: center; "><img class="size-full wp-image-640  aligncenter" title="HTML5_cheat_sheet" src="http://www.linuxhispano.net/wp-content/uploads/2009/11/HTML5_cheat_sheet.jpg" alt="HTML5_cheat_sheet" width="511" height="288" /></p>
<p>Algunas de las nuevas etiquetas son análogas a &lt;div&gt; y &lt;span&gt;, pero tienen un significado semántico, como es el caso de  &lt;nav&gt; (que es el bloque de navegación del sitio web) y &lt;footer&gt; (el pie de página).</p>
<p>Nos podemos encontrar además, con nuevos elementos que proporcionan funcionalidades anteriormente implementadas por otras vías (como por ejemplo Macromedia Flash), estos son &lt;audio&gt; y &lt;video&gt;, y habrá que esperar que codificación utilizará cada navegador en tal caso. También podemos destacar el elemento &lt;canvas&gt; y cómo algunos de los elementos de HTML 4 quedan obsoletos en pros del uso de <a href="http://es.wikipedia.org/wiki/CSS" target="_blank">CSS</a>, como son las etiquetas &lt;font&gt; y &lt;center&gt;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2009/11/16/html-5-cheat-sheet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Mail tester, comprobando direcciones de correo electrónico</title>
		<link>http://www.linuxhispano.net/2009/11/15/php-mail-tester-comprobando-direcciones-de-correo-electronico/</link>
		<comments>http://www.linuxhispano.net/2009/11/15/php-mail-tester-comprobando-direcciones-de-correo-electronico/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 11:48:39 +0000</pubDate>
		<dc:creator>ahornero</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.linuxhispano.net/?p=631</guid>
		<description><![CDATA[Muchas de las aplicaciones Web, incluso algunas de las que hemos podido construir usan un campo de email que hemos de rellenar para poder continuar. Nos encontramos con el caso de que al proporcionar ese correo basta con especificar el &#8230; <a href="http://www.linuxhispano.net/2009/11/15/php-mail-tester-comprobando-direcciones-de-correo-electronico/">Continuar leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Muchas de las aplicaciones Web, incluso algunas de las que hemos podido construir usan un campo de email que hemos de rellenar para poder continuar. Nos encontramos con el caso de que al proporcionar ese correo basta con especificar el usuario y el dominio separado por una arroba para que se verifique como correcto. En muchos casos, y la evidencia lo refleja, esto no es suficiente, ya que podemos proporcionar un usuario o dominio inventado; es aquí donde aparace <em><a href="http://www.codebase.es/test/mailtest.php" target="_blank">PHP Mail Tester</a></em>.</p>
<p>Esta útil y a la vez sencilla utilidad nos permite comprobar si 1) el servidor existe y si 2) el usuario es válido, para ello, realiza los siguientes pasos:</p>
<ul>
<li>Obtiene los registros MX para el dominio dado.</li>
<li>Se conecta a los servidores de correo.</li>
<li>Intercambia datos con el servidor utilizando el protocolo SMTP.</li>
<li>Obtiene el código de respuesta para comprobar si es una dirección de email válida.</li>
</ul>
<p>Os recomiendo que os deis una vuelta y lo probéis, merece la pena, y podemos <a href="http://www.codebase.es/test/mailtest.zip" target="_blank">descargarlo</a> para integrarlo en nuestras aplicaciones.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhispano.net/2009/11/15/php-mail-tester-comprobando-direcciones-de-correo-electronico/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
