<?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>Salvador G. Mendez &#187; Programacion</title>
	<atom:link href="http://www.sgmendez.com/tag/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sgmendez.com</link>
	<description>Blog de un webmaster</description>
	<lastBuildDate>Mon, 06 Feb 2012 20:45:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Configurar Subversion para controlar las versiones del código</title>
		<link>http://www.sgmendez.com/2010/11/29/configurar-subversion-control-codigo/</link>
		<comments>http://www.sgmendez.com/2010/11/29/configurar-subversion-control-codigo/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 17:10:37 +0000</pubDate>
		<dc:creator>Salvador Mendez</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[configuracion]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[intalacion]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[servidores]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[versiones]]></category>

		<guid isPermaLink="false">http://www.sgmendez.com/?p=72</guid>
		<description><![CDATA[Para los que nos dedicamos al desarrollo de software es de vital importancia poder hacer un seguimiento de todos los cambios que realizamos en una aplicación, sobre todo cuando se trata de trabajar en equipo con distintos programadores realizando distintas tareas, e incluso llevar un control de los cambios que realizan distintos equipos dentro de [...]]]></description>
			<content:encoded><![CDATA[<p>Para los que nos dedicamos al desarrollo de software es de vital importancia poder hacer un seguimiento de todos los cambios que realizamos en una aplicación, sobre todo cuando se trata de trabajar en equipo con distintos programadores realizando distintas tareas, e incluso llevar un control de los cambios que realizan distintos equipos dentro de un mismo software.</p>
<p>Cuando el proyecto está bajo el paraguas del software libre, herramientas como las proporcionadas por www.sourceforge.net son de mucha ayuda. Entre ellas se encuentra el uso de Subversion o CSV para la gestión de versiones. Personalmente prefiero subversion.</p>
<p>Este es un pequeño HOWTO de como configurar subversion corriendo bajo Apache, se presupone que se tiene instalado Apache, Subversion, el módulo DAV para Apache y las herramientas de administración de Subversion.</p>
<p>Lo primero que debemos hacer es crear un directorio para nuestro repositorio. Nuestro directorio principal para guardar nuestro control de versiones sobre subversion será /var/subversion/, dentro crearemos un subdirectorio donde se almacenarán los datos con subversion:</p>
<blockquote><p># mkdir /var/subversion/repositorio</p></blockquote>
<p>Ahora debemos crear la estructura de subversion para almacenar las versiones y asignarle permisos para poder acceder:</p>
<blockquote><p>
# svnadmin create /var/subversion/repositorio/<br />
# chmod 777 -R /var/subversion/repositorio/
</p></blockquote>
<p>Con esto ya tenemos listo el repositorio, ahora debemos generar el acceso a través de URL, para ello usaremos el módulo de Apache WebDav. Editaremos el fichero de módulo DAV de Apache (en Devian lo encontraremos en /etc/apache2/mods-available/dav_svn.conf), al final del fichero incluiremos las siguientes líneas:</p>
<blockquote><p>
# Acceso repositorio SVN<br />
<Location /repositorio><br />
DAV svn<br />
AuthType Basic<br />
AuthName &#8220;Servidor Subversion&#8221;<br />
SVNPATH /var/subversion/repositorio<br />
</Location>
</p></blockquote>
<p>En &#8220;Location&#8221; debemos poner la URL por la que queremos acceder al repositorio y en SVNPATH debemos colocar la ruta absoluta hacia el directorio que contendrá los ficheros de nuestro repositorio. Con esto ya debería estar funcionando nuestro repositorio con Subversion, basta con enlazarlo desde cualquier IDE que soporte control de versiones y comenzar a guardar las versiones de vuestros proyectos.</p>
<p>Como subversion no es sólo lo que he comentado, existe un <a href="http://svnbook.red-bean.com/">estupendo manual</a> donde podéis encontrar todas las funciones que ofrece este gestor de versiones.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sgmendez.com/2010/11/29/configurar-subversion-control-codigo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Procedimientos almacenados en MySQL</title>
		<link>http://www.sgmendez.com/2010/11/20/procedimientos-almacenados-mysql/</link>
		<comments>http://www.sgmendez.com/2010/11/20/procedimientos-almacenados-mysql/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 16:23:38 +0000</pubDate>
		<dc:creator>Salvador Mendez</dc:creator>
				<category><![CDATA[BBDD]]></category>
		<category><![CDATA[base de datos]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[procedimientos]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[variable]]></category>

		<guid isPermaLink="false">http://www.sgmendez.com/?p=447</guid>
		<description><![CDATA[Los procedimientos almacenados son un conjunto de instrucciones SQL que se almacenan en el servidor permitiendo hacer referencia al procedimiento almacenado para ejecutar esas funciones en lugar de tener que llamarlas individualmente.
Para poder ejecutar procedimientos almacenados es necesario tener la tabla proc en la base de datos mysql y contar con los permisos necesarios para [...]]]></description>
			<content:encoded><![CDATA[<p>Los procedimientos almacenados son un conjunto de instrucciones SQL que se almacenan en el servidor permitiendo hacer referencia al procedimiento almacenado para ejecutar esas funciones en lugar de tener que llamarlas individualmente.</p>
<p>Para poder ejecutar procedimientos almacenados es necesario tener la tabla <em>proc</em> en la base de datos mysql y contar con los permisos necesarios para trabajar con ellos. Estos son los permisos relacionados con los procedimientos:</p>
<ul>
<li>CREATE ROUTINE: Permite crear procedimientos almacenados</li>
<li>ALTER ROUTINE: Da acceso a la modificación y borrado, se aplica por defecto al creador de un procedimiento.</li>
<li>EXECUTE: Requerido para poder ejecutar procedimientos almacenados, se otorga automáticamente al creador del procedimiento. Por defecto, quien tiene acceso a la base de datos también lo tiene para ejecutar los prodecimientos almacenados para esa base de datos.</li>
</ul>
<p>Vamos a ver un ejemplo de como trabajar con procedimientos almacenados con un sencillo ejemplo. Para crearlo usaremos:</p>
<p>CREATE PROCEDURE sumar (IN valor INTEGER, OUT resultado INTEGER)<br />
    SELECT valor+valor INTO resultado;</p>
<p>Lo que estamos indicando es que se cree el procedimiento &#8220;sumar&#8221; con dos parámetros &#8220;valor&#8221; y &#8220;resultado&#8221;, ambos del tipo INTEGER. El primero es un parametro de entrada y el segundo la variable donde almacenaremos el valor de salida. Ahora vamos a llamarlo usando:</p>
<p>CALL sumar(4, @resultado);</p>
<p>El procedimiento se encargara de hacer la suma de 4+4 y almacenar la salida en la variable @resultado. Para visualizar lo que contiene la variable:</p>
<p>SELECT @resultado;</p>
<p>Los procedimientos son una buena forma de trabajar con los datos almacenados en una base de datos, dejando a MySQL el trabajo de formatear y filtrar el manejo de los datos, por lo que la cantidad de información que ha de viajar entre la base de datos y nuestro programa se reduce considerablemente. Por otra parte usando dos servidores, uno para el programa y otro para la base de datos, podríamos trasladar parte de la carga de procesamiento a la base de datos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sgmendez.com/2010/11/20/procedimientos-almacenados-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Frameworks PHP: Zend vs Symfony</title>
		<link>http://www.sgmendez.com/2009/05/09/frameworks-php-zend-vs-symfony/</link>
		<comments>http://www.sgmendez.com/2009/05/09/frameworks-php-zend-vs-symfony/#comments</comments>
		<pubDate>Sat, 09 May 2009 05:38:03 +0000</pubDate>
		<dc:creator>Salvador Mendez</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Webmasters]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Zend]]></category>

		<guid isPermaLink="false">http://www.sgmendez.com/?p=185</guid>
		<description><![CDATA[Cuando uno se plantea por primera vez el uso de un framework en PHP comienza a darle vueltas a las posibilidades que ofrecen unos y otros. Aunque la curva de aprendizaje en el uso de un framework es dura, todo el tiempo que le dediquemos a conocer a fondo aquel por el que nos decidamos [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando uno se plantea por primera vez el uso de un framework en PHP comienza a darle vueltas a las posibilidades que ofrecen unos y otros. Aunque la curva de aprendizaje en el uso de un framework es dura, todo el tiempo que le dediquemos a conocer a fondo aquel por el que nos decidamos será el tiempo mejor invertido en formarnos como desarrolladores.</p>
<p>En este caso quiero plantear una comparación entre dos de los frameworks más extendidos <a href="http://framework.zend.com/" target="_blank">Zend</a> y <a href="http://www.symfony-project.org/" target="_blank">Symfony</a>.</p>
<p><strong>Documentación y aprendizaje</strong>. Com he dicho la curva de aprendizaje para poder usar correctamente y con soltura un framework necesita de un esfuerzo, mucho más si llevamos años programando sin usarlo. Symfony dispone de guias y <a href="http://www.librosweb.es/symfony/index.html" target="_blank">manuales</a> en abundancia, y además cuenta con numerosos foros en varios idiomas donde la comundad va resolviendo dudas. En el caso de Zend, a pesar de ser el framework de la empresa que está detrás de PHP, la comunidad es algo escasa, por tanto su documentación también.</p>
<p><strong>Pruebas unitarias</strong>. Symfony dispone de tareas por linea de comandos para realizar testing, y además genera una clase vacia con cada nuevo controdalor desde el que poder realizar las pruebas. Zend no dispone de esta funcionalidad, algo que me parece muy importante a la hora de lanzar una aplicación a un entorno de producción.</p>
<p><strong>Plantillas y plugins</strong>. Al sistema de plantillas de Zend le queda todavía un largo camino que recorer, mientras que en Symfony el sistema está ya muy avanzado, con la posibilidad de agragar módulos. Y otro tanto ocurre con los plugins, en Symfony es posible aumentar sus funcionalidades a base de plugins, mientras que Zend carece de esta característica.</p>
<p><strong>Bases de datos</strong>. El trabajo con base de datos en Zend se limita a usar ActiveRecord (que no digo que esté mal), pero en Symfony tienes la posibilidad de usar el motor de base de datos que quieras, incluyendo el propio Zend_Db, algo que aporta una enorme flexibilidad al desarrollador que puede elegir en cada proyecto cual es la mejor opción.</p>
<p>Como conclusión a lo dicho quiero añadir, para todos aquellos que quieran dar el salto a hacer desarrollos basados en un framework, que a pesar de que al principio pueda resultar un poco engorroso con el tiempo os ayudará a mantener una limpieza de código y un mantenimiento de aplicaciones mucho más sencillo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sgmendez.com/2009/05/09/frameworks-php-zend-vs-symfony/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Utilidad y uso de EXPLAIN en MySQL</title>
		<link>http://www.sgmendez.com/2009/05/07/utilidad-y-uso-de-explain-en-mysql/</link>
		<comments>http://www.sgmendez.com/2009/05/07/utilidad-y-uso-de-explain-en-mysql/#comments</comments>
		<pubDate>Thu, 07 May 2009 16:21:50 +0000</pubDate>
		<dc:creator>Salvador Mendez</dc:creator>
				<category><![CDATA[BBDD]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Webmasters]]></category>
		<category><![CDATA[bases de datos]]></category>
		<category><![CDATA[informatica]]></category>
		<category><![CDATA[manual]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[optimizacion]]></category>

		<guid isPermaLink="false">http://www.sgmendez.com/?p=197</guid>
		<description><![CDATA[
A la hora de realizar una buena optimización de las consultas de MySQL habrá que prestar mucha atención a lo que dice la cláusula EXPLAIN. Su sintaxis es muy sencilla, basta anteponerlo a la consulta que queremos realizar para obtener toda la información.
EXPLAIN SELECT columna1, columna2 FROM tabla1 WHERE columna3 = &#8216;2&#8242;\G
El resultado que obtendremos [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-321" title="logo_mysql" src="http://www.sgmendez.com/wp-content/upload/2009/03/logo_mysql.gif" alt="logo_mysql" width="114" height="68" /></p>
<p>A la hora de realizar una buena optimización de las consultas de MySQL habrá que prestar mucha atención a lo que dice la cláusula EXPLAIN. Su sintaxis es muy sencilla, basta anteponerlo a la consulta que queremos realizar para obtener toda la información.</p>
<p>EXPLAIN SELECT columna1, columna2 FROM tabla1 WHERE columna3 = &#8216;2&#8242;\G</p>
<p>El resultado que obtendremos será el plan de ejecución de la consulta a la base de datos. Una explicación de como accederá MySQL a las diferentes columnas involucradas en la consulta. EXPLAIN devolverá:</p>
<ul>
<li>id: Es el identificador que EXPLAIN asignará a la consulta.</li>
<li>select_type: Tipo de consulta a analizar. Por ejemplo, si se trata de una consulta sencilla su valor será SIMPLE.</li>
<li>table: Nombre de la tabla a la que hacen referencia el resto de datos en la fila. Hay que tener en cuenta que el orden de las filas será el que utilizará MySQL para acceder a los datos.</li>
<li>type: Indica como MySQL combinará los datos de esa tabla.</li>
<li>possible_keys: Lista de los indices que se podrían utilizar, aunque podría no usarse ninguno.</li>
<li>key: Índice que finalmente se usará, si no se usa ninguno el valor del campo será NULL.</li>
<li>key_len: Tamaño del indice utilizado, si no se usó ninguno contendrá NULL.</li>
<li>ref: Muestra con que campo está relacionado el índice seleccionado.</li>
<li>rows: Número de registros que se tendrán que recuperar para ejecutar la consulta.</li>
<li>extra: Información adicional sobre la forma en que se obtendrán los datos.</li>
</ul>
<p>Con esta información es posible encontrar donde se producen los cuellos de botella en las consultas que realizamos a la base de datos, y nos permitirá optimizarlas para evitar que una consulta lenta provoque un retraso injustificado en la devolución de resultados a los usuarios. En el <a title="Optimizar consultas en MySQL" href="http://dev.mysql.com/doc/refman/5.0/en/using-explain.html" target="_blank">manual de MySQL</a> puedes encontrar más información.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sgmendez.com/2009/05/07/utilidad-y-uso-de-explain-en-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Herramientas para Wordpress</title>
		<link>http://www.sgmendez.com/2008/12/30/herramientas-para-wordpress/</link>
		<comments>http://www.sgmendez.com/2008/12/30/herramientas-para-wordpress/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 07:18:31 +0000</pubDate>
		<dc:creator>Salvador Mendez</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Webmasters]]></category>
		<category><![CDATA[Webs]]></category>
		<category><![CDATA[Adsense]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[herramientas]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Wikipedia]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.sgmendez.com/?p=294</guid>
		<description><![CDATA[A través del blog de Andrés Nieto me entero de una recopilación de herramientas que han hecho en SixRevisions. Algunas de ellas ya las conocia, pero otras no y me han parecido de utilidad, así que aquí dejo el listado:

ScribeFire. Convierte a Firefox en un editor enriquecido conectado a tu blog.
Wordpress Helper. La documentación de [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-295 alignright" style="border: 0pt none; margin: 5px;" title="wordpress-logo" src="http://www.sgmendez.com/wp-content/upload/2008/12/wordpress-logo-150x150.png" alt="wordpress-logo" width="150" height="150" />A través del blog de <a href="http://www.anieto2k.com/2008/12/29/15-utiles-herramientas-para-usuarios-de-wordpress/" target="_blank">Andrés Nieto</a> me entero de una recopilación de herramientas que han hecho en <a href="http://sixrevisions.com/wordpress/15-useful-tools-for-wordpress-bloggers/" target="_blank">SixRevisions</a>. Algunas de ellas ya las conocia, pero otras no y me han parecido de utilidad, así que aquí dejo el listado:</p>
<ul>
<li><strong><a href="http://www.scribefire.com/" target="_blank">ScribeFire</a></strong>. Convierte a Firefox en un editor enriquecido conectado a tu blog.</li>
<li><a href="http://www.schloebe.de/firefox-extensions/wordpress-helper/#english" target="_blank"><strong>Wordpress Helper</strong></a>. La documentación de Wordpress disponible en Firefox, muy recomendable para poder echar un vistazo en cuanto lo necesites.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/8204" target="_blank"><strong>Screen Grab to Wordpress</strong></a>. Permite hacer capturas de pantalla y enviarlas directamente a Wordpress.</li>
<li><a href="http://blogsecurity.net/wordpress/tools/wp-scanner/" target="_blank"><strong>Wordpress Scanner</strong></a>. Revisa la seguiridad de tu blog, nunca se sabe cuando puedes recibir un ataque que destroce todo el trabajo realizado.</li>
<li><a href="http://wordpress.org/extend/plugins/broken-link-checker/" target="_blank"><strong>Broken Link Checker</strong></a>. Con este plugin puedes revisar los enlaces que tengas en tu blog y saber cuales ya no están diponibles. Muy útil cuando tienes muchos enlaces.</li>
<li><a href="http://wordpress.org/extend/plugins/google-syntax-highlighter/" target="_blank"><strong>Google Syntactic Hichlighter</strong></a>. Mejora la visiulización de tus artículos.</li>
<li><a href="http://www.prelovac.com/vladimir/wordpress-plugins/insights" target="_blank"><strong>Insights</strong></a>. Abre tu blog a los nuevos servicios disponibles en la red como Flickr, Youtube o la Wikipedia.</li>
<li><a href="http://download.live.com/writer" target="_blank"><strong>Windows Live Writer</strong></a>. Con la aplicación de Microsoft podemos crear nuestros artículos offline. Aunque yo no le veo mucha utilidad, ¿será porque soy usuario de Linux?</li>
<li><a href="http://wordpress.org/extend/plugins/revision-control/" target="_blank"><strong>Revision Control</strong></a>. Este plugin nos permitirá llevar un control de las revisiones que se realizan de cada artículo, muy útil en blogs con varios autores.</li>
<li><strong><a href="http://unfoldingneurons.com/neurotic-plugins/organize-series-wordpress-plugin" target="_blank">Organize Series</a></strong>. Si estabas pensando en crear un tutorial que va a llevar muchos artículos, este es el complento ideal, te permite hacer una serie de artículos relacionados entre si.</li>
<li><a href="http://www.howtogeek.com/howto/the-geek-blog/how-to-geek-software-wordpress-comment-moderation-notifier/" target="_blank"><strong>Wordpress Comment Moderation Notifiers</strong></a>. Herramienta que te ayudará a controlar los comentarios.</li>
<li><a href="http://userscripts.org/scripts/show/12239" target="_blank"><strong>Wordpress Comment Ninja</strong></a>. Si quieres extender las posibilidades de control sobre los comentarios.</li>
<li><a href="http://wordpress.org/extend/plugins/adserve/" target="_blank"><strong>Adserve</strong></a>. Controla la publicidad de tu wordpress.</li>
<li><a href="http://wordpress.org/extend/plugins/simple-tags/" target="_blank"><strong>Simple Tags</strong></a>. Si cuando escribes un artículo no sabes que tags lo describen, esta herramienta de hará algunas sugerencias.</li>
<li><strong><a href="http://wordpress.org/extend/plugins/twitter-tools/" target="_blank">Twitter Tools</a></strong>. Este herramienta te permitirá lanzar a Twitter un micropost cada vez que escribas un artículo.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sgmendez.com/2008/12/30/herramientas-para-wordpress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Todo controlado con xDebug</title>
		<link>http://www.sgmendez.com/2008/12/12/todo-controlado-con-xdebug/</link>
		<comments>http://www.sgmendez.com/2008/12/12/todo-controlado-con-xdebug/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 09:03:28 +0000</pubDate>
		<dc:creator>Salvador Mendez</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[depurar]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[errores]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[xDebug]]></category>

		<guid isPermaLink="false">http://www.sgmendez.com/?p=190</guid>
		<description><![CDATA[Hay algo que considero fundamental para todo programador: un depurador. Si desarrollas con PHP debes conocer xDebug, este depurador te permitirá hacer un control exhaustivo de los errores que se produzcan en nuestra aplicación.
Tienes toda la información relativa a la descarga e instalación en la página oficial de xDebug. Una vez instalado recuerda indicarle a [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-255" style="border: 0pt none; margin-left: 10px; margin-right: 10px;" title="xdebug-logo" src="http://www.sgmendez.com/wp-content/upload/2008/12/xdebug-logo.png" alt="xdebug-logo" width="200" height="116" />Hay algo que considero fundamental para todo programador: un depurador. Si desarrollas con PHP debes conocer <a href="http://xdebug.org/index.php" target="_blank">xDebug</a>, este depurador te permitirá hacer un control exhaustivo de los errores que se produzcan en nuestra aplicación.</p>
<p>Tienes toda la información relativa a la <a href="http://xdebug.org/docs/" target="_blank">descarga e instalación</a> en la página oficial de xDebug. Una vez instalado recuerda indicarle a PHP, en el php.ini, la ruta donde se encuentra el paquete. También debes tener habilitado PHP para mostrar errores mediante la directiva <em><a href="http://es.php.net/manual/es/errorfunc.configuration.php#ini.display-errors" target="_blank">display_errors</a></em>.</p>
<p>Algunas funciones útiles:</p>
<p><strong>xdebug_memory_usage( )</strong>: Devuelve la cantidad de memoria usada por nuestro script. Antes de PHP 5.2.1, esta función sólo funcinará si PHP fue complilado con &#8211;enable-memory-limit.</p>
<p><strong>xdebug_time_index()</strong>: Devuelve el tiempo en segundos que ha tardado en ejecutarse el script.</p>
<p><strong>xdebug_peak_memory_usage()</strong>: Devuelve el pico máximo de memoria usuado por el script.</p>
<p>Otra de las características más salientables de xDebug es la integración con IDE&#8217;s, entre ellos Eclipse y Netbeans, lo que permite la depuración de las aplicaciones sin salir del entorno de trabajo.</p>
<p>La instalación de xDebug debe estar reservada únicamente al servidor de desarrollo, puesto que la cantidad de información que muestra xDebug puede ser utilizada por un atacante para encontrar puntos de ataque.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sgmendez.com/2008/12/12/todo-controlado-con-xdebug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress 2.7 disponible</title>
		<link>http://www.sgmendez.com/2008/12/11/wordpress-27-disponible/</link>
		<comments>http://www.sgmendez.com/2008/12/11/wordpress-27-disponible/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 21:35:40 +0000</pubDate>
		<dc:creator>Salvador Mendez</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Webmasters]]></category>
		<category><![CDATA[Webs]]></category>
		<category><![CDATA[actualizacion]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.sgmendez.com/?p=264</guid>
		<description><![CDATA[Aunque este blog ya venía usando las versiones preliminares de la versión 2.7 de Wordpress, no he querido hablar de ella hasta que fuese lanzada definitivamente, y a pesar de llegar 1 día tarde, ya esta diponible. La nueva versión ha realizado un profundo cambio en la interface del panel de administración, por lo que [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-265" style="border: 0pt none; margin-left: 5px; margin-right: 5px;" title="wordpress" src="http://www.sgmendez.com/wp-content/upload/2008/12/wordpress-300x195.png" alt="wordpress" width="300" height="195" />Aunque este blog ya venía usando las versiones preliminares de la versión 2.7 de Wordpress, no he querido hablar de ella hasta que fuese lanzada definitivamente, y a pesar de <a href="http://www.sgmendez.com/2008/10/06/wordpress-27-lanzamiento-el-10-de-noviembre/">llegar 1 día tarde</a>, ya esta diponible. La nueva versión ha realizado un profundo cambio en la interface del panel de administración, por lo que al principio puede llevar un poco de tiempo descubrir donde estan las cosas. Pero en mi humilde opinión el cambio ha sido magnífico.</p>
<p>Entre las nuevas caracterísiticas de Wordpress 2.7, llamada Coltrane, cabe destacar:</p>
<ul>
<li>mayor uso de javascript</li>
<li>cambio del menu superior por uno lateral a la izquierda</li>
<li>acceso más rapido a todas las secciones</li>
<li>posibilidad de minimizar el área de menu, aumentado el área de trabajo</li>
<li>personalización del area de trabajo, pudiendo arrastrar los modulos para colocarlos</li>
</ul>
<p>Pero esto no es todo lo que podrás encontrar en la versión 2.7 de Wordpress, si no lo has hecho ya, te recomiendo que actualices tu blog, seguro que después no querrás volver a las versiones anteriores.</p>
<p>[<a href="http://wordpress.org/latest.zip" target="_blank">Descargar Wordpress 2.7</a>] [<a href="http://es.wordpress.org/wordpress-2.7-es_ES.zip" target="_blank">Versión en español Worpress 2.7</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sgmendez.com/2008/12/11/wordpress-27-disponible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nueva versión estable PHP 5.2.8</title>
		<link>http://www.sgmendez.com/2008/12/10/nueva-version-estable-php-528/</link>
		<comments>http://www.sgmendez.com/2008/12/10/nueva-version-estable-php-528/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 06:35:02 +0000</pubDate>
		<dc:creator>Salvador Mendez</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[lanzamientos]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://www.sgmendez.com/?p=241</guid>
		<description><![CDATA[El pasado 4 de diciembre veían la luz dos nuevas versiones de PHP, por un lado la versión estable 5.2.7 y por el otro la relase candidate 5.3.0alpha3. Y tres días más tarde se anunciaba el fallo de seguridad en la 5.2.7 que provocaba que aunque magic-quotes-gpc estuviese activado se mantubiese como desactivado.
La recomendación era [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-242" style="border: 0pt none;" title="php_snow" src="http://www.sgmendez.com/wp-content/upload/2008/12/php_snow.gif" alt="php_snow" width="120" height="64" />El pasado 4 de diciembre veían la luz dos nuevas versiones de PHP, por un lado la versión estable <a href="http://www.php.net/archive/2008.php#id2008-12-04-3" target="_blank">5.2.7</a> y por el otro la relase candidate <a href="http://www.php.net/archive/2008.php#id2008-12-04-2" target="_blank">5.3.0alpha3</a>. Y tres días más tarde <a href="http://www.php.net/archive/2008.php#id2008-12-07-1" target="_blank">se anunciaba el fallo</a> de seguridad en la 5.2.7 que provocaba que aunque magic-quotes-gpc estuviese activado se mantubiese como desactivado.</p>
<p>La <a href="http://www.desarrollosphp.com/2008/12/php-527-descartado/" target="_blank">recomendación era regresar a la versión 5.2.6</a>, a la espera de que fuese lanzado PHP 5.2.8, pues bién tan solo un día más tarde <a href="http://www.desarrollosphp.com/2008/12/lanzado-php-528/">ya estaba disponible 5.2.8 </a>con el fallo corregido. A aquellos que instalasen 5.2.7 se recomienda <a href="http://www.php.net/releases/5_2_8.php" target="_blank">actualizar a 5.2.8</a> para evitar cualquier problema de seguridad en ese sentido.</p>
<p>En cuanto a la RC <a href="http://www.php.net/archive/2008.php#id2008-12-04-2" target="_blank">PHP 5.3.0alpha3</a> trae consigo muchas novedades, entre ellas los <a href="http://php.net/language.namespaces" target="_blank">namespaces</a>, el cambio de compilador de gcc a cc, o un <a href="http://wiki.php.net/rfc/rounding" target="_blank">redondeo más preciso</a> al trabajar con decimales.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sgmendez.com/2008/12/10/nueva-version-estable-php-528/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Control de versiones</title>
		<link>http://www.sgmendez.com/2008/12/05/control-de-versiones/</link>
		<comments>http://www.sgmendez.com/2008/12/05/control-de-versiones/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 10:09:27 +0000</pubDate>
		<dc:creator>Salvador Mendez</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[CVS]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[Monotone]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Torvalds]]></category>
		<category><![CDATA[versiones]]></category>

		<guid isPermaLink="false">http://www.sgmendez.com/?p=181</guid>
		<description><![CDATA[Todo aquel que se haya tenido que enfrentar a un desarrollo en el que participan varios programadores se habrá encontrado con el mismo problema: ¿quién tiene la versión buena?
Y esto deriva en varios problemas más: ¿dónde aplico el cambio? ¿hás modificado tal fichero? ¿has terminado esa parte? y, sobre todo, que ocurre cuando alguien comete [...]]]></description>
			<content:encoded><![CDATA[<p>Todo aquel que se haya tenido que enfrentar a un desarrollo en el que participan varios programadores se habrá encontrado con el mismo problema: ¿quién tiene la versión buena?</p>
<p>Y esto deriva en varios problemas más: ¿dónde aplico el cambio? ¿hás modificado tal fichero? ¿has terminado esa parte? y, sobre todo, que ocurre cuando alguien comete un error y tardamos días en darnos cuenta, ¿cómo volvemos atrás?</p>
<p>La solución en estos casos es un contol de versiones, basicamente lo que permite es tener una copia actualizada del trabajo sobre un servidor (repositorio) y una copia guardada de cada cambio subido al repositorio (versiones). Cada vez que alguien quiera continuar el trabajo debe bajarse una copia del repositorio actualizada, trabajar sobre ella y luego subir los cambios al servidor, creando una nueva versión.</p>
<p>Aunque son bastante evidentes, estas son algunas de las ventajas de trabajar con un control de versiones:</p>
<ul>
<li>Tener un control exacto sobre cual es la última versión del código, y quién y cuando la ha cargado.</li>
<li>Poder comparar versiones, viendo cuales han sido los cambios realizados.</li>
<li>Regresar atrás (a una vesión anterior) cuando lo que hemos desarrollado no nos ha dado los resultados esperados.</li>
<li>Crear distintas ramas del proyecto. Si llegado a un punto se hace necesario hacer dos aplicaciones con distintas funcionalidades, pero con cosas en común, se pueden separar en dos ramas.</li>
</ul>
<p>Obviamente hay más ventajas del control de versiones, pero creo que sólo por las cuatro anteriores merece la pena usar cualquier sistema gestor de control de versiones.</p>
<p>Entre los sistemas de control de versiones destacaría los tres siguientes:</p>
<ul>
<li><a href="http://es.wikipedia.org/wiki/CVS" target="_blank">CSV (Concurrent Version System)</a>: Desarrollado por GNU se distribuye bajo licencia GPL. Fue muy popular hasta la aparición de Subversion.</li>
<li><a href="http://es.wikipedia.org/wiki/Subversion" target="_blank">SVN (Subversion)</a>: Hoy es el más popular, fue creado para mejorar CVS, mejorando sobre todo el manejo de archivos binarios.</li>
<li><a href="http://es.wikipedia.org/wiki/Git" target="_blank">Git</a>: Diseñado por Linus Torvalds, es usado por el desarrollo del kernel de Linux, aunque no alcanza la popularidad de los otros dos.</li>
<li><a href="http://es.wikipedia.org/wiki/Mercurial" target="_blank">Mercurial</a>: Un gestor de vesiones para entornos distribuidos sin necesidad de usar un servidor.</li>
<li><a href="http://es.wikipedia.org/wiki/Monotone" target="_blank">Monotone</a>: Al igual que Mercurial no usa servidor, cada cliente hace al mismo tiempo de cliente y servidor.</li>
</ul>
<p>Más información: <a href="http://es.wikipedia.org/wiki/Categor%C3%ADa:Sistemas_de_Control_de_Versiones" target="_blank">Wikipedia [Control de Versiones]</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sgmendez.com/2008/12/05/control-de-versiones/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agrega funcionalidad a tu Wordpress</title>
		<link>http://www.sgmendez.com/2008/11/17/agrega-funcionalidad-a-tu-wordpress/</link>
		<comments>http://www.sgmendez.com/2008/11/17/agrega-funcionalidad-a-tu-wordpress/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 10:47:49 +0000</pubDate>
		<dc:creator>Salvador Mendez</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Webmasters]]></category>
		<category><![CDATA[funciones]]></category>
		<category><![CDATA[personalizacion]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.sgmendez.com/?p=205</guid>
		<description><![CDATA[Dentro de cada theme de Wordpress podemos encontrar un fichero llamado functions.php, su función es poder ampliar la funcionalidad de nuestra copia de Wordpress desde el propio theme, lo que implica que cuando actualicemos a una nueva versión no tengamos que volver a definir nuestas funciones. A través de aNieto2K descubro que Matt Varone muestra [...]]]></description>
			<content:encoded><![CDATA[<p>Dentro de cada theme de Wordpress podemos encontrar un fichero llamado functions.php, su función es poder ampliar la funcionalidad de nuestra copia de Wordpress desde el propio theme, lo que implica que cuando actualicemos a una nueva versión no tengamos que volver a definir nuestas funciones. A través de <a href="http://www.anieto2k.com/2008/11/12/funciones-personalizadas-en-tu-wordpress/" target="_blank">aNieto2K</a> descubro que <a href="http://www.mattvarone.com/" target="_blank">Matt Varone</a> muestra dos recopilaciones de funciones para añadir a nuestro functions.php y ayudarnos a ampliar su funcionalidad.</p>
<p><a href="http://www.mattvarone.com/wordpress/functionsphp-wordpress-themes/" target="_blank">Descargar funciones 1</a> | <a href="http://www.mattvarone.com/wordpress/useful-functions-for-wordpress/" target="_blank">Descargar funciones 2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sgmendez.com/2008/11/17/agrega-funcionalidad-a-tu-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

