<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Otro Blog Más</title>
	
	<link>http://otroblogmas.com</link>
	<description>Blog de informática: programación, internet, php, wordpress, zend framework, mysql, windows, mootools, linux,...</description>
	<lastBuildDate>Tue, 07 Sep 2010 10:10:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/OtroBlogMas" /><feedburner:info uri="otroblogmas" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>20 consejos para ser mejor programador</title>
		<link>http://feedproxy.google.com/~r/OtroBlogMas/~3/0oGjtcqWw0U/</link>
		<comments>http://otroblogmas.com/20-consejos-para-ser-mejor-programador/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 08:00:55 +0000</pubDate>
		<dc:creator>otroblogmas.com</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[consejos]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[programador]]></category>

		<guid isPermaLink="false">http://otroblogmas.com/?p=2266</guid>
		<description><![CDATA[A medida que he ido cogiendo formación y experiencia en el mundo de la programación, siempre he visto que cuanto más aprendes, más hay por aprender. En este sector hay que estar en constante reciclaje, estar informado de las nuevas tecnologías que aparecen, y adquiriendo nuevos conocimientos. De un artículo de Taringa, copio los 20 [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignright size-medium wp-image-2273" title="Programador feliz" src="http://otroblogmas.com/wp-content/uploads/2010/09/programador-feliz-146x150.jpg" alt="Programador feliz" width="146" height="150" />A medida que he ido cogiendo formación y experiencia en el mundo de la programación, siempre he visto que <strong>cuanto más aprendes, más hay por aprender</strong>. En este sector hay que estar en <strong>constante reciclaje</strong>, estar informado de las <strong>nuevas tecnologías</strong> que aparecen, y adquiriendo <strong>nuevos conocimientos</strong>.</p>
<p><span id="more-2266"></span>
<p style="text-align: justify;">De un <a href="http://new.taringa.net/posts/apuntes-y-monografias/6729065/20-Tips-para-ser-un-mejor-programador.html">artículo de Taringa</a>, copio los <strong>20 consejos</strong> para ser mejor programador:</p>
<ol style="text-align: justify;line-height:20px;">
<li><strong> Estudia, estudia y estudia</strong></li>
<li><strong>Busca antes de preguntar</strong></li>
<li><strong></strong><strong>Busca scripts ya desarrollados</strong></li>
<li><strong>Lee el código fuente libre</strong><br />
Descarga algunas aplicaciones para ver como están programadas, de verdad que se aprende mucho, a medida que realicemos esta practica cada vez iremos aprendiendo mas, en especial si estas aplicaciones son de uso popular en donde miles de programadores del mundo “meten” mano para mejorarla. Un buen ejemplo de esto es WordPress.</li>
<li><strong>No copies y pegues</strong></li>
<li><strong> Buscar el momento para programar</strong><br />
Estas sentado delante de tu ordenador, llaman por teléfono, tu compañero de trabajo o familiar te pregunta algo, realmente es lo mas molesto e incomodo que hay, es difícil concentrarse, es preferible hacer algo mas “Light” antes de programar algo mal y después tener que arreglarlo.</li>
<li><strong> Ten tu propia Wiki o blog</strong><br />
Esto lo recomiendo muchísimo, es muy sencillo instalar una Wiki o WordPress en nuestro PC: simplemente podemos descargar el Easyphp y tener en nuestro ordenar un servidor funcional, y mejor aun si quieres hacer la instalación “a mano”</li>
<li><strong> Comenta todo lo que sea necesario</strong></li>
<li><strong> Participa en foros/comunidades</strong></li>
<li><strong> Habla con otros programadores</strong></li>
<li><strong> Tiempo libre para otras cosas</strong></li>
<li><strong> Arma tu bunker</strong><br />
Tener un espacio de trabajo acorde con tus gustos es indispensable para programar, un buen sillón que no dañe nuestra columna, un lindo escritorio que nos permita desparramar CDS, libros, etc. También hay que ser organizado, pero siempre a nuestro gusto, es bueno que sea <strong>TU espacio</strong> y que nadie meta mano, uno a la larga lo termina sintiendo como un refugio.</li>
<li><strong> Tu equipo en condiciones</strong><br />
Otro punto importante, una buena computadora, que no tenga problemas, si es necesario un poco mas de RAM, no hace falta tener una supermáquina para programar con PHP pero si algo que no se este colgando cada 2 seg.</li>
<li><strong> Usa herramientas gratuitas</strong></li>
<li><strong> Organiza tu propia biblioteca de scripts</strong><br />
Relacionado con el punto 7.</li>
<li><strong> Se agradecido con los que te ayudan</strong></li>
<li><strong> Se humilde</strong><br />
Esencial. Siempre hay alguien que sabe más que uno y más en este “rubro” en donde hay verdaderos cráneos.</li>
<li><strong> Siempre busca perfeccionarte</strong></li>
<li><strong> Intenta ser eficiente y luego inténtalo de nuevo</strong><br />
Que funcione no quiere decir que este bien. También una de las cosas más lindas de programar: siempre se puede hacer una función mas eficiente, que consuma menos recursos,&#8230;</li>
<li style="text-align: justify;"><strong> Programa primero lo que menos te gusta</strong><br />
Esto es bastante personal, pero por lo general me da buenos resultados. Cuando me siento a programar algo los primeros minutos son de “ambientación” luego tengo un periodo de concentración digamos máxima, en ese momento las cosas que parecen o son mas complicadas son cuando mas rápido y mejor salen, luego cuando uno esta mas cansado puede dedicarse a las cosas mas sencillas y rutinarias.</li>
</ol>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://otroblogmas.com/20-consejos-para-ser-mejor-programador/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://otroblogmas.com/20-consejos-para-ser-mejor-programador/</feedburner:origLink></item>
		<item>
		<title>Error con Zend Tool y el fichero NetBeansCommandsProvider.php</title>
		<link>http://feedproxy.google.com/~r/OtroBlogMas/~3/eZ8y7oQRruA/</link>
		<comments>http://otroblogmas.com/error-zend-tool-netbeanscommandsprovider-php/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 07:00:08 +0000</pubDate>
		<dc:creator>otroblogmas.com</dc:creator>
				<category><![CDATA[zend framework]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[NetBeansCommandsProvider]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xampp]]></category>
		<category><![CDATA[zend_tool]]></category>

		<guid isPermaLink="false">http://otroblogmas.com/?p=2251</guid>
		<description><![CDATA[En la nueva versión Netbeans 6.9, éste trae una serie de funciones para trabajar con Zend Framework. Permite utilizar directamente Zend Tool, herramienta que crea nuevos componentes de un proyecto Zend Framework como modulos, vistas, controladores, &#8230; El problema surge que cuando se configura Netbeans para trabajar con Zend Tool, automáticamente deja de funcionar Zend [...]


Entradas relacionadas:<ol><li><a href='http://otroblogmas.com/instalar-zend-framework-zend_tool-para-construir-proyectos-ubuntu/' rel='bookmark' title='Permanent Link: Instalar y configurar Zend Framework y Zend_Tool para construir proyectos en Ubuntu'>Instalar y configurar Zend Framework y Zend_Tool para construir proyectos en Ubuntu</a></li>
<li><a href='http://otroblogmas.com/instalar-zend-framework-y-zend_tool-para-construir-proyectos-en-windows/' rel='bookmark' title='Permanent Link: Instalar Zend Framework y Zend_Tool para construir proyectos en Windows'>Instalar Zend Framework y Zend_Tool para construir proyectos en Windows</a></li>
<li><a href='http://otroblogmas.com/configurar-netbeans-para-trabajar-con-phpunit-y-zend-framework/' rel='bookmark' title='Permanent Link: Configurar Netbeans para trabajar con PHPUnit y Zend Framework'>Configurar Netbeans para trabajar con PHPUnit y Zend Framework</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignright size-full wp-image-2255" title="Tools icon" src="http://otroblogmas.com/wp-content/uploads/2010/08/tools_icon.png" alt="Icono de herramientas" width="150" height="150" />En la nueva versión Netbeans 6.9, éste trae una serie de funciones para trabajar con Zend Framework. Permite utilizar directamente<strong><a href="http://otroblogmas.com/instalar-zend-framework-y-zend_tool-para-construir-proyectos-en-windows/"> Zend Tool</a></strong>, herramienta que crea nuevos componentes de un proyecto Zend Framework como modulos, vistas, controladores, &#8230;</p>
<p><span id="more-2251"></span></p>
<p style="text-align: justify;">El <strong>problema</strong> surge que cuando se configura Netbeans para trabajar con Zend Tool, automáticamente <strong>deja de funcionar Zend Tool</strong> desde línea de comandos, dando el siguiente error:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">Warning: include_once<span style="color: #7a0874; font-weight: bold;">&#40;</span>NetBeansCommandsProvider.php<span style="color: #7a0874; font-weight: bold;">&#41;</span>: failed to open stream: No such <span style="color: #c20cb9; font-weight: bold;">file</span> or directory <span style="color: #000000; font-weight: bold;">in</span> C:\xampp\php\PEAR\Zend\Loader.php on line <span style="color: #000000;">146</span>
&nbsp;
Zend_Exception: File <span style="color: #ff0000;">&quot;NetBeansCommandsProvider.php&quot;</span> does not exist or class <span style="color: #ff0000;">&quot;NetBeansCommandsProvider&quot;</span> was not found <span style="color: #000000; font-weight: bold;">in</span> the <span style="color: #c20cb9; font-weight: bold;">file</span> <span style="color: #000000; font-weight: bold;">in</span> C:\xampp\php\PEAR\Zend\Loader.php on line <span style="color: #000000;">99</span></pre></div></div>

<p style="text-align: justify;">Esto es debido a que esta buscando el archivo <strong>NetBeansCommandsProvider.php</strong> y no lo encuentra. Para que no surja el problema, existen dos maneras:</p>
<ol style="text-align: justify;">
<li>Primera opción
<ol>
<li>Buscar el archivo <strong>zf.ini</strong> en el ordenador (seguramente estará en la carpeta de nuestro perfil de usuario).</li>
<li>Renombrar &#8216;<strong>includepath</strong>&#8216; por &#8216;<strong>include_path</strong>&#8216;</li>
<li>Borrar las rutas que hacen referencia al Netbeans 6.9</li>
<li>Borrar la segunda línea que hace referencia a Netbeans.</li>
</ol>
</li>
<li>Segunda opción
<ol>
<li>Buscar el archivo <strong>NetBeansCommandsProvider.php</strong> por el ordenador (seguramente uno estará en <strong>C:\Archivos de programa\NetBeans 6.9\php\zend</strong>).</li>
<li style="text-align: justify;">Copiar el contenido a la librería de Zend (en caso de no querer mezclar la librería de Zend de un proyecto con este archivo, se puede copiar en un<strong> include_path</strong>, en XAMPP por ejemplo se puede copiar en <strong>C:\xampp\php\PEAR\Zend</strong>)</li>
</ol>
</li>
</ol>
<p>Vía <a href="http://forums.netbeans.org/post-75072.html">NetBeans Forums</a> y <a href="http://www.forosdelweb.com/f17/error-con-netbeans-785174/">Foros del Web</a>.</p>


<p>Entradas relacionadas:</p><ol><li><a href='http://otroblogmas.com/instalar-zend-framework-zend_tool-para-construir-proyectos-ubuntu/' rel='bookmark' title='Permanent Link: Instalar y configurar Zend Framework y Zend_Tool para construir proyectos en Ubuntu'>Instalar y configurar Zend Framework y Zend_Tool para construir proyectos en Ubuntu</a></li>
<li><a href='http://otroblogmas.com/instalar-zend-framework-y-zend_tool-para-construir-proyectos-en-windows/' rel='bookmark' title='Permanent Link: Instalar Zend Framework y Zend_Tool para construir proyectos en Windows'>Instalar Zend Framework y Zend_Tool para construir proyectos en Windows</a></li>
<li><a href='http://otroblogmas.com/configurar-netbeans-para-trabajar-con-phpunit-y-zend-framework/' rel='bookmark' title='Permanent Link: Configurar Netbeans para trabajar con PHPUnit y Zend Framework'>Configurar Netbeans para trabajar con PHPUnit y Zend Framework</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://otroblogmas.com/error-zend-tool-netbeanscommandsprovider-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://otroblogmas.com/error-zend-tool-netbeanscommandsprovider-php/</feedburner:origLink></item>
		<item>
		<title>Guía para crear documentación con PHPDocumentor</title>
		<link>http://feedproxy.google.com/~r/OtroBlogMas/~3/Bybm0XCkSTw/</link>
		<comments>http://otroblogmas.com/guia-crear-documentacion-phpdocumentor/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 07:00:59 +0000</pubDate>
		<dc:creator>otroblogmas.com</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[documentación]]></category>
		<category><![CDATA[phpdocumentor]]></category>

		<guid isPermaLink="false">http://otroblogmas.com/?p=2232</guid>
		<description><![CDATA[En una entrada anterior se mostró como configurar un proyecto en Subversion para completar el PHPDocumentor, pero no se entró en muchos detalles del PHPDocumentor. Esta guía pretende adentrarse un poco más en esta herramienta que ayuda a generar documentación de un proyecto hecho en PHP. Existen tres tipos de documentaciones: Interfaz (para los usuarios [...]


Entradas relacionadas:<ol><li><a href='http://otroblogmas.com/configurar-proyecto-en-subversion-para-completar-phpdocumentor/' rel='bookmark' title='Permanent Link: Configurar proyecto en Subversion para completar PHPDocumentor'>Configurar proyecto en Subversion para completar PHPDocumentor</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignright size-medium wp-image-2242" title="Libros" src="http://otroblogmas.com/wp-content/uploads/2010/08/libros-163x150.jpg" alt="Columna de libros" width="163" height="150" />En una entrada anterior se mostró como <a href="http://otroblogmas.com/configurar-proyecto-en-subversion-para-completar-phpdocumentor/">configurar un proyecto en Subversion para completar el PHPDocumentor</a>, pero no se entró en muchos detalles del <a href="http://www.phpdoc.org/">PHPDocumentor</a>. Esta guía pretende adentrarse un poco más en esta <strong>herramienta que ayuda a generar documentación</strong> de un proyecto hecho en PHP.</p>
<p><span id="more-2232"></span></p>
<p style="text-align: justify;">Existen tres tipos de documentaciones:</p>
<ul>
<li style="text-align: justify;"><strong>Interfaz</strong> (para los usuarios del código): qué hace, como se utiliza, que devuelve, &#8230; Pero no cómo lo hace.</li>
<li style="text-align: justify;"><strong>Implementación</strong> (para editores del código): cómo funciona internamente, que algoritmos utiliza, &#8230;</li>
<li style="text-align: justify;"><strong>Toma de decisiones</strong> (para editores y responsables de desarrollo):  por qué se ha implementado de una forma o otra (razones de rendimiento, recursos, &#8230;).</li>
</ul>
<p style="text-align: justify;">La documentación de la implementación reside <strong>dentro del código</strong>, y la de la interfaz ha de ser <strong>un documento</strong>. Pues <strong>PHPDocumentor se encarga de convertir</strong> la documentación que existe en el código, a documentación legible desde un documento como una página web. De esta forma, cada vez que se aplique un cambio en el código, esto repercutirá en la documentación de la interfaz, <strong>manteniendola actualizada constantemente</strong>.</p>
<p style="text-align: center;"><a href="http://otroblogmas.com/wp-content/uploads/2010/08/PHPDocumento-conversion.gif"><img class="aligncenter size-full wp-image-2233" title="PHPDocumento conversión" src="http://otroblogmas.com/wp-content/uploads/2010/08/PHPDocumento-conversion.gif" alt="PHPDocumentor: conversión de archivos PHP a HMTL" width="404" height="125" /></a></p>
<p style="text-align: justify;">Para conseguir esto, la documentación en el código tiene que seguir unos estándares. Se escriben unos bloques de documentación llamados DocBlock, que siguen una estructura y pueden tener una serie de marcas para ayudar a PHPDocumentor a entender mejor la documentación. Un ejemplo de bloque DocBlock de una función seria:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
* Descripción breve (una línea)
*
* Descripción extensa. Todas las líneas que
* sean necesarias
* Todas las líneas comienzan con *
*
* Este DocBlock documenta la función suma()
*/</span>
<span style="color: #000000; font-weight: bold;">function</span> suma<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #339933;">...</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p style="text-align: justify;">Se puede comentar cualquier archivo PHP (.php, .php5,  .phtml), y dentro de ellos se pueden documentar: clases, variables, defines, funciones, variables globales y llamadas a otros ficheros. En los DocBlock, unas de las <a href="http://manual.phpdoc.org/HTMLframesConverter/default/">muchas marcas</a> que se pueden añadir son:</p>
<ul style="text-align: justify;">
<li><strong>@access:</strong> Si @access es &#8216;private&#8217; no se genera documentación para el elemento (a menos que se indique explícitamente). Muy interesante si sólo se desea generar documentación sobre la interfaz (métodos públicos) pero no sobre la implementación (métodos privados).</li>
<li><strong>@author:</strong> Autor del código.</li>
<li><strong>@copyright:</strong> Información sobre derechos.</li>
<li><strong>@deprecated:</strong> Para indicar que el elemento no debería utilizarse, ya que en futuras versiones podría no estar disponible.</li>
<li><strong>@example:</strong> Permite especificar la ruta hasta un fichero con código PHP. phpDocumentor se encarga de mostrar el código resaltado (syntax-highlighted).</li>
<li><strong>@ignore:</strong> Evita que phpDocumentor documente un determinado elemento.</li>
<li><strong>@internal: </strong>Para incluir información que no debería aparecer en la documentación pública, pero sí puede estar disponible como documentación interna para desarrolladores.</li>
<li><strong>@link: </strong>Para incluir un enlace (http://&#8230;) a un determinado recurso.</li>
<li><strong>@see: </strong>Se utiliza para crear enlaces internos (enlaces a la documentación de un elemento).</li>
<li><strong>@since: </strong>Permite indicar que el elemento está disponible desde una determinada versión del paquete o distribución.</li>
<li style="text-align: justify;"><strong>@version: </strong>Versión actual del elemento</li>
</ul>
<p style="text-align: justify;">Marcas para <strong>funciones</strong>:</p>
<ul style="text-align: justify;">
<li style="text-align: justify;"><strong>@global: </strong>Permite especificar el uso de variables globales dentro de la función.</li>
<li style="text-align: justify;"><strong>@param: </strong>Parámetros que recibe la función. Formato: <em>@param tipo $nombre_var comentario</em></li>
<li style="text-align: justify;"><strong>@return: </strong>Valor devuelto por la función. Formato: <em>@return tipo comentario</em></li>
</ul>
<p style="text-align: justify;">Marca para <strong>variables</strong>:</p>
<ul style="text-align: justify;">
<li><strong>@var: </strong>Documenta los atributos de la clase. Formato: <em>@var tipo comentario</em></li>
</ul>
<p style="text-align: justify;">Tipos de datos:</p>
<ul style="text-align: justify;">
<li>array</li>
<li>string</li>
<li>boolean</li>
<li>integer</li>
<li>float</li>
<li>object</li>
<li>mixe</li>
</ul>
<p style="text-align: justify;">Ejemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
* Dirección de correo
* @var string
* @access protected
*/</span>
protected<span style="color: #000088;">$_email</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
* Verifica si una direccion de correo es correcta o no.
*
* @return boolean true si la direccion es correcta
* @param string $email direccion de correo
*/</span>
<span style="color: #000000; font-weight: bold;">function</span> checkEmailAddress <span style="color: #009900;">&#40;</span><span style="color: #000088;">$email</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #339933;">....</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p style="text-align: center;"><a href="http://otroblogmas.com/wp-content/uploads/2010/08/documentacion-comic.jpg"><img class="size-full wp-image-2244 aligncenter" title="Comic de documentacion" src="http://otroblogmas.com/wp-content/uploads/2010/08/documentacion-comic.jpg" alt="Tira cómica de documentación" width="400" height="566" /></a></p>
<p style="text-align: justify;">Vía <a href="http://www.epsilon-eridani.com/cubic/ap/cubic.php/doc/phpDocumentor---documentacion-para-codigo-PHP-246.html">Epsiolon Eridani</a>.</p>


<p>Entradas relacionadas:</p><ol><li><a href='http://otroblogmas.com/configurar-proyecto-en-subversion-para-completar-phpdocumentor/' rel='bookmark' title='Permanent Link: Configurar proyecto en Subversion para completar PHPDocumentor'>Configurar proyecto en Subversion para completar PHPDocumentor</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://otroblogmas.com/guia-crear-documentacion-phpdocumentor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://otroblogmas.com/guia-crear-documentacion-phpdocumentor/</feedburner:origLink></item>
		<item>
		<title>Patrones de diseño: patrón Singleton</title>
		<link>http://feedproxy.google.com/~r/OtroBlogMas/~3/xFrsZA53RSU/</link>
		<comments>http://otroblogmas.com/patrones-de-diseno-patron-singleton/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 07:00:29 +0000</pubDate>
		<dc:creator>otroblogmas.com</dc:creator>
				<category><![CDATA[patrones de diseño]]></category>
		<category><![CDATA[portable]]></category>
		<category><![CDATA[singleton]]></category>

		<guid isPermaLink="false">http://otroblogmas.com/?p=2211</guid>
		<description><![CDATA[El patrón Singleton es quizás el patrón más conocido, y a la vez el más senzillo de diseñar (en mi opinión). Todo y eso, el concepto y la funcionalidad es a veces un poco complicada de entender. Esta clasificado como un patrón creacional, y es patrón que se implementa en otro patrones. Antes de explicarlos, [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://otroblogmas.com/wp-content/uploads/2010/08/corona.jpg"><img src="http://otroblogmas.com/wp-content/uploads/2010/08/corona-194x150.jpg" alt="Corona" title="Corona" width="194" height="150" class="alignright size-medium wp-image-2228" /></a>El <a href="http://es.wikipedia.org/wiki/Singleton">patrón Singleton</a> es quizás el patrón más conocido, y a la vez el más senzillo de diseñar (en mi opinión). Todo y eso, el concepto y la funcionalidad es a veces <strong>un poco complicada de entender</strong>. Esta clasificado como un <em>patrón creacional</em>, y es patrón que se implementa en otro patrones.</p>
<p><span id="more-2211"></span>
<p style="text-align: justify;">Antes de explicarlos, hay que <strong>refrescar un poco los conceptos de programación orientada a objetos</strong>, los necesario para explicar el partón Singleton:</p>
<ul>
<li>Existen <strong>clases </strong>y <strong>objetos</strong>, y no son lo mismo. <strong>Un objeto es la instancia de una clase</strong>.</li>
<li>Los atributos y métodos <strong>NO estáticos</strong> de una clase, son de los objetos.</li>
<li>Los atributos y métodos <strong>estáticos </strong>de una clase, son de la clase.</li>
<li>La llamada al <strong>constructor de la clase</strong>, devuelve un objeto.</li>
</ul>
<p style="text-align: justify;">El <strong>contexto </strong>de este patrón es cuando se diseña una aplicación donde tenemos una clase, de la cual sólo puede existir una instancia.</p>
<p style="text-align: justify;">El <strong>problema</strong> esta en controlar este aspecto, ya que por defecto, la programación orientada objetos da libertad para instanciar tantos objetos de una clase como se desee.</p>
<p style="text-align: justify;">La <strong>solución </strong>que se  aplicaría usando el patrón Singleton, trata de realizar unas modificaciones en la clase para bloquear el método contructor para que no se pueden hacer indefinidos objetos, y también crear un método alternativo para conseguir la instancia única que se desea. Detallando en forma de lista las modificaciones que hay que hacer en una clase para aplicar el patrón Singleton, quería así:</p>
<ul>
<li style="text-align: justify;"><strong>Convertir en privado</strong> el método constructor.</li>
<li style="text-align: justify;"><strong>Crear un atributo</strong>, privado y estático, que almacenará la única instancia.</li>
<li style="text-align: justify;"><strong>Crear un método</strong>, público y estático, que devolverá la única instancia. Su función será:
<ul>
<li>La <strong>primera vez</strong> que se llame a este método, creará una instancia, la almacenará en el atributo estático, y la devolverá.</li>
<li>Las <strong>siguiente veces</strong> que se llame, devolverá la instancia almacenada.</li>
</ul>
</li>
</ul>
<p style="text-align: justify;">El <strong>esquema UML </strong>sería el siguiente (Los elementos subrallados son elementos estáticos):</p>
<p style="text-align: justify;"><a href="http://otroblogmas.com/wp-content/uploads/2010/08/patron-singleton-UML.png"><img class="size-full wp-image-2218 aligncenter" title="Patrón Singleton" src="http://otroblogmas.com/wp-content/uploads/2010/08/patron-singleton-UML.png" alt="Esquema UML del Patrón Singleton" width="500" height="300" /></a></p>
<p style="text-align: justify;">El <strong>código </strong>de una clase singleton en <strong>PHP5</strong>, sería así:</p>
<p style="text-align: justify;">

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> Ejemplo
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// Contenedor Instancia de la Clase</span>
    <span style="color: #000000; font-weight: bold;">private</span> static <span style="color: #000088;">$_instance</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Constructor privado; previene creacion de objetos via new</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Soy el constructor'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// EL metodo singleton</span>
    <span style="color: #000000; font-weight: bold;">public</span> static <span style="color: #000000; font-weight: bold;">function</span> getInstance<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$instance</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$c</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">__CLASS__</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$_instance</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000088;">$c</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$_instance</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Clone no permitido</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __clone<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">trigger_error</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Clone no se permite.'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">E_USER_ERROR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

</p>
<p style="text-align: justify;"><strong>Ejemplos </strong>del uso del Patrón Singleton, o ejemplos de cuando es necesario tener una clase que solamente se puede instanciar una vez: la ventana de una aplicación, la conexión a la base de datos, el sistema de logs, o de caches, &#8230;</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://otroblogmas.com/patrones-de-diseno-patron-singleton/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://otroblogmas.com/patrones-de-diseno-patron-singleton/</feedburner:origLink></item>
		<item>
		<title>UltraMon: control de varios monitores</title>
		<link>http://feedproxy.google.com/~r/OtroBlogMas/~3/NGLwBvhfhpQ/</link>
		<comments>http://otroblogmas.com/ultramon-control-de-varios-monitores/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 07:00:52 +0000</pubDate>
		<dc:creator>otroblogmas.com</dc:creator>
				<category><![CDATA[aplicaciones]]></category>
		<category><![CDATA[monitores]]></category>
		<category><![CDATA[UltraMon]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://otroblogmas.com/?p=2195</guid>
		<description><![CDATA[Uno de los consejos para sacar más rendimiento de las horas de trabajo, es trabajar con dos monitores. Duplicando la zona de trabajo, y pudiendo ver varias ventanas a la vez, permite evitar perder tiempo con el cambio de aplicación activa, y aumenta la concentración al tener una amplia visión de todo. Además, por los [...]


Entradas relacionadas:<ol><li><a href='http://otroblogmas.com/virtuawin-varios-escritorios-virtuales-en-windows/' rel='bookmark' title='Permanent Link: VirtuaWin: varios escritorios virtuales en Windows'>VirtuaWin: varios escritorios virtuales en Windows</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="size-medium wp-image-2197 alignright" title="Dos monitores" src="http://otroblogmas.com/wp-content/uploads/2010/08/dual-monitor-200x150.jpg" alt="Dos monitores" width="200" height="150" />Uno de los consejos para sacar <strong>más rendimiento</strong> de las horas de trabajo, es trabajar con <strong>dos monitores</strong>. Duplicando la zona de trabajo, y pudiendo ver varias ventanas a la vez, permite evitar perder tiempo con el cambio de aplicación activa, y aumenta la concentración al tener una amplia visión de todo. Además, por los precios actuales de los monitores, <strong>no supone un gasto excesivo</strong> comprar un segundo monitor, y sabiendo que son aparatos que tienen una vida larga.</p>
<p><span id="more-2195"></span></p>
<p style="text-align: justify;">Pero <strong>los sistemas operativos no estan pensados para trabajar con dos monitores</strong>, y no dan funcionalidades para trabajar mejor. Para ello existe una aplicación para Windows, <a href="http://www.realtimesoft.com/ultramon/">UltraMon</a>, que permite:</p>
<ul>
<li><strong>Mover eficientement</strong>e ventanas de un monitor a otro.</li>
<li><strong>Extender la barra de tareas</strong> a todos los monitores.</li>
<li><strong>Más opciones de configuración</strong> del fondo de pantalla y del salvapantallas.</li>
<li><strong>Clonar las pantallas</strong>, para hacer que un monitor sea un espejo del otro.</li>
<li><strong>Control de que aplicaciones</strong> estan en cada monitor.</li>
</ul>
<p><strong>La clave</strong> de este programa es lo que se en la siguiente imagen: <strong>dos botones</strong> que se añaden a todas las ventanas, que permiten mover las aplicaciones de una ventana a otra, o maxizimar la ventana y que ocupe los dos monitores.</p>
<p style="text-align: center;"><a href="http://otroblogmas.com/wp-content/uploads/2010/08/ultramon-screenshot.png"><img class="size-full wp-image-2199 aligncenter" title="Screenshot UltraMon" src="http://otroblogmas.com/wp-content/uploads/2010/08/ultramon-screenshot.png" alt="Screenshot de los botones de UltraMon" width="152" height="94" align="middle" /></a></p>
<p>Vía <a href="http://www.taringa.net/posts/downloads/5798076/UltraMon-3_0_10-Version-Final-con-Keygen.html">Taringa</a>.</p>


<p>Entradas relacionadas:</p><ol><li><a href='http://otroblogmas.com/virtuawin-varios-escritorios-virtuales-en-windows/' rel='bookmark' title='Permanent Link: VirtuaWin: varios escritorios virtuales en Windows'>VirtuaWin: varios escritorios virtuales en Windows</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://otroblogmas.com/ultramon-control-de-varios-monitores/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://otroblogmas.com/ultramon-control-de-varios-monitores/</feedburner:origLink></item>
		<item>
		<title>USB Image Tool: crear imágenes de unidades USB</title>
		<link>http://feedproxy.google.com/~r/OtroBlogMas/~3/isVmziIvKeM/</link>
		<comments>http://otroblogmas.com/usb-image-tool-crear-imagenes-unidades-usb/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 07:00:40 +0000</pubDate>
		<dc:creator>otroblogmas.com</dc:creator>
				<category><![CDATA[aplicaciones]]></category>
		<category><![CDATA[backups]]></category>
		<category><![CDATA[image tool]]></category>
		<category><![CDATA[pendrives]]></category>
		<category><![CDATA[usb]]></category>

		<guid isPermaLink="false">http://otroblogmas.com/?p=2184</guid>
		<description><![CDATA[Los pendrives, desde que empezaron a venderse con 64MB solamente, han sido un sistema muy práctico para transportar documentos o archivos. Después vinieron los reproductores MP3, las aplicaciones portables o incluso sistemas operativos que cargan desde las unidades USB. Así, estos pequeños gadgets, tienen importancia por su contenido y facilidad de uso. Si se quiere [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://otroblogmas.com/wp-content/uploads/2010/07/usb_pendrive.png"><img class="alignright size-medium wp-image-2188" title="usb pendrive" src="http://otroblogmas.com/wp-content/uploads/2010/07/usb_pendrive-159x150.png" alt="Imágen de un pendrive USB" width="159" height="150" /></a>Los <strong>pendrives</strong>, desde que empezaron a venderse con 64MB solamente, han sido un <strong>sistema muy práctico</strong> para transportar documentos o archivos. Después vinieron los reproductores MP3, las aplicaciones portables o incluso sistemas operativos que cargan desde las unidades USB. Así, estos <strong>pequeños gadgets</strong>, tienen importancia por su contenido y facilidad de uso.</p>
<p><span id="more-2184"></span></p>
<p style="text-align: justify;">Si se quiere <strong>generar una imagen del contenido</strong>, como sistema de backup o simplemente para poder hacer pruebas y después reestablecerlo todo, existe una <strong>aplicación muy práctica que permite crear y restaurar imágenes</strong> de unidades USB. La aplicación se llama <a href="http://www.alexpage.de/usb-image-tool/">USB Image Tool</a>, es gratuita y senzilla de utilizar.</p>
<p style="text-align: justify;"><a href="http://otroblogmas.com/wp-content/uploads/2010/07/USB-Image-Tool-Screenshot.jpg"><img class="aligncenter size-full wp-image-2186" title="USB Image Tool Screenshot" src="http://otroblogmas.com/wp-content/uploads/2010/07/USB-Image-Tool-Screenshot.jpg" alt="USB Image Tool Screenshot" width="506" height="413" align="middle" /></a></p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://otroblogmas.com/usb-image-tool-crear-imagenes-unidades-usb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://otroblogmas.com/usb-image-tool-crear-imagenes-unidades-usb/</feedburner:origLink></item>
		<item>
		<title>Expresiones regulares con PHP</title>
		<link>http://feedproxy.google.com/~r/OtroBlogMas/~3/NERmaPS4HUU/</link>
		<comments>http://otroblogmas.com/expresiones-regulares-con-php/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 07:00:38 +0000</pubDate>
		<dc:creator>otroblogmas.com</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[expresiones regulares]]></category>
		<category><![CDATA[regular expressions]]></category>

		<guid isPermaLink="false">http://otroblogmas.com/?p=2167</guid>
		<description><![CDATA[El otro d&#237;a, hablando con los compa&#241;eros de trabajo, coment&#225;bamos que cada programador tiene su punto d&#233;vil en la programaci&#243;n: a unos no se les da bi&#233;n las fechas, a otros las codificaciones, &#8230; Pero casi todos ten&#237;amos un punto d&#233;vil en com&#250;n: las expresiones regulares. Cada vez que un programador llega a un punto [...]


Entradas relacionadas:<ol><li><a href='http://otroblogmas.com/plugins-para-hacer-tests-regular-expressions/' rel='bookmark' title='Permanent Link: Plugins para hacer tests de Regular Expressions'>Plugins para hacer tests de Regular Expressions</a></li>
<li><a href='http://otroblogmas.com/comprobar-si-un-email-tiene-registros-mx-con-zend_validate/' rel='bookmark' title='Permanent Link: Comprobar si un email tiene registros MX, con Zend_Validate'>Comprobar si un email tiene registros MX, con Zend_Validate</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img alt="Portada del libro de OReilly sobre Expresiones regulares" class="alignright size-medium wp-image-2180" height="150" src="http://otroblogmas.com/wp-content/uploads/2010/07/regexp-oreilly-145x150.jpg" title="regexp-oreilly" width="145" />El otro d&iacute;a, hablando con los compa&ntilde;eros de trabajo, coment&aacute;bamos que <strong>cada programador tiene su punto d&eacute;vil</strong> en la programaci&oacute;n: a unos no se les da bi&eacute;n las fechas, a otros las codificaciones, &#8230; Pero casi todos ten&iacute;amos un punto d&eacute;vil en com&uacute;n: <strong>las expresiones regulares</strong>. Cada vez que un programador llega a un punto en que se tiene que utilizar las expresiones regulares&#8230; Se empieza buscando por Google, haciendo pruebas, leyendo tutoriales.</p>
<p><span id="more-2167"></span></p>
<p style="text-align: justify;">
	La cuesti&oacute;n es que eso mismo se hace la pr&oacute;xima vez que <em>tocan </em>expresiones regulares, como si nunca se aprendiesen. As&iacute; que quiero hacer un <strong>breve resumen</strong> que sirva para b&uacute;squedas b&aacute;sicas.</p>
<p style="text-align: justify;">&nbsp;</p>
<table border="1" cellpadding="1" cellspacing="1" style="width: 500px; padding: 3px 5px;">
<caption>Varias sintaxis</caption>
<tbody>
<tr>
<td style="padding: 2px 9px; width: 135px;">foo</td>
<td style="padding: 2px 9px;">La cadena &quot;foo&quot;</td>
</tr>
<tr>
<td style="padding: 2px 9px;">^foo</td>
<td style="padding: 2px 9px;">&quot;foo&quot; al principio de la cadena</td>
</tr>
<tr>
<td style="padding: 2px 9px;">foo$</td>
<td style="padding: 2px 9px;">&quot;foo&quot; al final de la cadena</td>
</tr>
<tr>
<td style="padding: 2px 9px;">^foo$</td>
<td style="padding: 2px 9px;">Exactamente &quot;foo&quot;, sin nada m&aacute;s</td>
</tr>
<tr>
<td style="padding: 2px 9px;">[abc]</td>
<td style="padding: 2px 9px;">Cualquier letra entre &#39;a&#39;, &#39;b&#39; y &#39;c&#39;</td>
</tr>
<tr>
<td style="padding: 2px 9px;">[az]</td>
<td style="padding: 2px 9px;">Cualquier letra min&uacute;scula</td>
</tr>
<tr>
<td style="padding: 2px 9px;">[^AZ]</td>
<td style="padding: 2px 9px;">Cualquier letra que no sea una may&uacute;scula</td>
</tr>
<tr>
<td style="padding: 2px 9px;">(gif|jpg)</td>
<td style="padding: 2px 9px;">Reconoce &#39;gif&#39; o &#39;jpg&#39;</td>
</tr>
<tr>
<td style="padding: 2px 9px;">[az]+</td>
<td style="padding: 2px 9px;">Una o m&aacute;s letras min&uacute;sculas</td>
</tr>
<tr>
<td style="padding: 2px 9px;">[0-9.-]</td>
<td style="padding: 2px 9px;">Un n&uacute;mero, un punto o un gui&oacute;n</td>
</tr>
<tr>
<td style="padding: 2px 9px;">^[a-zA-Z0-9_]{1,}$</td>
<td style="padding: 2px 9px;">Cualquier palabra de al menos una letra, n&uacute;mero o _ Subrayado</td>
</tr>
<tr>
<td style="padding: 2px 9px;">([AZ]{3}|[0-9]{4})</td>
<td style="padding: 2px 9px;">Reconocer tres letras o n&uacute;meros de cuatro</td>
</tr>
</tbody>
</table>
<p>Unos <strong>ejemplos </strong>de verificaci&oacute;n:</p>
<ul>
<li><strong>Direcci&oacute;n de email</strong> (si PHP &gt; 5.2.0, entonces filter_var()):

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&amp;</span><span style="color: #666666; font-style: italic;">#39;/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/&amp;#39;</span></pre></div></div>

</li>
<li><strong>Nombre de usuario</strong>:

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&amp;</span><span style="color: #666666; font-style: italic;">#39;/^[az\d_]{5,20}$/i&amp;#39;</span></pre></div></div>

</li>
<li><strong>IP</strong>:

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&amp;</span><span style="color: #666666; font-style: italic;">#39;/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/&amp;#39;</span></pre></div></div>

</li>
<li><strong>Dominio</strong>:

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&amp;</span><span style="color: #666666; font-style: italic;">#39;/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i&amp;#39;</span></pre></div></div>

</li>
</ul>
<p>V&iacute;a <a href="http://bueltge.de/php-regular-expression-schnipsel/917/">bueltge.de</a></p>


<p>Entradas relacionadas:</p><ol><li><a href='http://otroblogmas.com/plugins-para-hacer-tests-regular-expressions/' rel='bookmark' title='Permanent Link: Plugins para hacer tests de Regular Expressions'>Plugins para hacer tests de Regular Expressions</a></li>
<li><a href='http://otroblogmas.com/comprobar-si-un-email-tiene-registros-mx-con-zend_validate/' rel='bookmark' title='Permanent Link: Comprobar si un email tiene registros MX, con Zend_Validate'>Comprobar si un email tiene registros MX, con Zend_Validate</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://otroblogmas.com/expresiones-regulares-con-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://otroblogmas.com/expresiones-regulares-con-php/</feedburner:origLink></item>
		<item>
		<title>Proteger los directorios .svn</title>
		<link>http://feedproxy.google.com/~r/OtroBlogMas/~3/rAOMbzbVhQo/</link>
		<comments>http://otroblogmas.com/proteger-directorios-svn/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 07:00:03 +0000</pubDate>
		<dc:creator>otroblogmas.com</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://otroblogmas.com/?p=2157</guid>
		<description><![CDATA[Cuando se pasa un proyecto que se encuentra en un repositorio de Subversion, hay dos opciones: copiar todo el contenido de la Workcopy (incluyendo las carpetas .svn) o exportar el proyecto para solamente tener el contenido del repositorio. En el caso de hacer la primera opci&#243;n, hay el peligro de que las carpetas .svn, que [...]


Entradas relacionadas:<ol><li><a href='http://otroblogmas.com/configurar-subversion-para-utilizar-los-repositorios-externos-de-zend-framework/' rel='bookmark' title='Permanent Link: Configurar Subversion para utilizar los repositorios externos de Zend Framework'>Configurar Subversion para utilizar los repositorios externos de Zend Framework</a></li>
<li><a href='http://otroblogmas.com/instalar-y-configurar-xampp-y-eclipse-en-windows/' rel='bookmark' title='Permanent Link: Instalar y configurar XAMPP y Eclipse en Windows'>Instalar y configurar XAMPP y Eclipse en Windows</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify; "><img alt="Portada del libro de Subversion de OReilly" class="alignright size-medium wp-image-2160" height="150" src="http://otroblogmas.com/wp-content/uploads/2010/07/svn_book-114x150.jpg" title="Subversion Libro" width="114" />Cuando se pasa un proyecto que se encuentra en un repositorio de Subversion, hay dos opciones: <strong>copiar todo el contenido</strong> de la <em>Workcopy </em>(incluyendo las carpetas .svn) o <strong>exportar el proyecto</strong> para solamente tener el contenido del repositorio. En el caso de hacer la primera opci&oacute;n, hay el peligro de que las carpetas <strong>.svn</strong>, que contienen informaci&oacute;n del repositorio, sean visibles desde el sitio web.</p>
<p style="text-align: justify; ">Pero con <strong>una l&iacute;nea en el .htaccess</strong>, se pueden evitar miradas indeseadas en las carpetas .svn de nuestros proyectos:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;">RewriteRule ^<span style="">&#40;</span>.*/<span style="">&#41;</span>?\.svn/ - <span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>F,L<span style="">&#93;</span></span></pre></div></div>



<p>Entradas relacionadas:</p><ol><li><a href='http://otroblogmas.com/configurar-subversion-para-utilizar-los-repositorios-externos-de-zend-framework/' rel='bookmark' title='Permanent Link: Configurar Subversion para utilizar los repositorios externos de Zend Framework'>Configurar Subversion para utilizar los repositorios externos de Zend Framework</a></li>
<li><a href='http://otroblogmas.com/instalar-y-configurar-xampp-y-eclipse-en-windows/' rel='bookmark' title='Permanent Link: Instalar y configurar XAMPP y Eclipse en Windows'>Instalar y configurar XAMPP y Eclipse en Windows</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://otroblogmas.com/proteger-directorios-svn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://otroblogmas.com/proteger-directorios-svn/</feedburner:origLink></item>
		<item>
		<title>Plugins para hacer tests de Regular Expressions</title>
		<link>http://feedproxy.google.com/~r/OtroBlogMas/~3/n_MOG7671IQ/</link>
		<comments>http://otroblogmas.com/plugins-para-hacer-tests-regular-expressions/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 07:00:42 +0000</pubDate>
		<dc:creator>otroblogmas.com</dc:creator>
				<category><![CDATA[aplicaciones]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[expresiones regulares]]></category>
		<category><![CDATA[google chrome]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[regular expression]]></category>
		<category><![CDATA[regular expressions]]></category>

		<guid isPermaLink="false">http://otroblogmas.com/?p=2142</guid>
		<description><![CDATA[Comentando con los compañeros de trabajo, llegamos a la conclusión que el punto dévil de la mayoría de programadores son las expresiones regulares: una simple cadena de carácteres, normalmente de no más de 30 carácteres, lo que puede llegar a amargar. A parte de tutoriales, guías y compañeros, una herramienta útil son las aplicaciones que [...]


Entradas relacionadas:<ol><li><a href='http://otroblogmas.com/eliminar-la-barra-para-traducir-de-google-chrome/' rel='bookmark' title='Permanent Link: Eliminar la barra para traducir de Google Chrome'>Eliminar la barra para traducir de Google Chrome</a></li>
<li><a href='http://otroblogmas.com/aplicaciones-web-para-hacer-mapas-mentales/' rel='bookmark' title='Permanent Link: Aplicaciones web para hacer mapas mentales'>Aplicaciones web para hacer mapas mentales</a></li>
<li><a href='http://otroblogmas.com/script-simple-php-para-hacer-cache/' rel='bookmark' title='Permanent Link: Script simple de PHP para hacer cache'>Script simple de PHP para hacer cache</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://otroblogmas.com/wp-content/uploads/2010/07/regular-expressions.png"><img class="alignright size-thumbnail wp-image-2149" title="regular expressions" src="http://otroblogmas.com/wp-content/uploads/2010/07/regular-expressions-150x125.png" alt="Regular expressions" width="150" height="125" /></a>Comentando con los compañeros de trabajo, llegamos a la conclusión que <strong>el punto dévil de la mayoría de programadores</strong> son las <strong>expresiones regulares</strong>: una simple cadena de carácteres, normalmente de no más de 30 carácteres, lo que puede llegar a amargar. A parte de tutoriales, guías y compañeros, una <strong>herramienta útil </strong>son las aplicaciones que permiten hacer pruebas de busqueda y de sustitución.</p>
<p><span id="more-2142"></span></p>
<p style="text-align: justify;">Existen <strong>dos plugins</strong>, uno para Firefox y otro para Google Chrome, que nos pertimen <strong>realizar los tests</strong> sin salir del navegador:</p>
<ul>
<li style="text-align: justify;"><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/2077/">Regular Expressions Tester 3.0</a></strong>: plugin de Firefox, que resalta con colores los resultados de las búsquedas.</li>
</ul>
<p style="text-align: center;"><a href="http://otroblogmas.com/wp-content/uploads/2010/07/Regular-Expressions-Tester.png"><img class="aligncenter size-full wp-image-2144" title="Regular Expressions Tester" src="http://otroblogmas.com/wp-content/uploads/2010/07/Regular-Expressions-Tester.png" alt="Screenshot de Regular Expressions Tester" width="448" height="489" /></a></p>
<ul>
<li style="text-align: justify;"><strong><a href="https://chrome.google.com/extensions/detail/pgnkpcgniljiolidjmodgfljeomjjiha">Regular Expression Checker</a></strong>: plugin de Google Chrome, inspirado en el anterior.</li>
</ul>
<p style="text-align: center;"><a href="http://otroblogmas.com/wp-content/uploads/2010/07/regular-expression-checker.png"><img class="aligncenter size-full wp-image-2143" title="regular expression checker" src="http://otroblogmas.com/wp-content/uploads/2010/07/regular-expression-checker.png" alt="regular expression checker Plugins para hacer tests de Regular Expressions" width="544" height="580" /></a></p>
<p>Vía <strong><a href="http://www.devcurry.com/2010/07/test-regular-expressions-in-your.html">Devcurry</a></strong>.</p>


<p>Entradas relacionadas:</p><ol><li><a href='http://otroblogmas.com/eliminar-la-barra-para-traducir-de-google-chrome/' rel='bookmark' title='Permanent Link: Eliminar la barra para traducir de Google Chrome'>Eliminar la barra para traducir de Google Chrome</a></li>
<li><a href='http://otroblogmas.com/aplicaciones-web-para-hacer-mapas-mentales/' rel='bookmark' title='Permanent Link: Aplicaciones web para hacer mapas mentales'>Aplicaciones web para hacer mapas mentales</a></li>
<li><a href='http://otroblogmas.com/script-simple-php-para-hacer-cache/' rel='bookmark' title='Permanent Link: Script simple de PHP para hacer cache'>Script simple de PHP para hacer cache</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://otroblogmas.com/plugins-para-hacer-tests-regular-expressions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://otroblogmas.com/plugins-para-hacer-tests-regular-expressions/</feedburner:origLink></item>
		<item>
		<title>Error cuando Zend_Layout se muestra dos veces</title>
		<link>http://feedproxy.google.com/~r/OtroBlogMas/~3/bBYyHgsx1ug/</link>
		<comments>http://otroblogmas.com/error-cuando-zend_layout-se-muestra-dos-veces/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 07:00:14 +0000</pubDate>
		<dc:creator>otroblogmas.com</dc:creator>
				<category><![CDATA[zend framework]]></category>
		<category><![CDATA[exceptions]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[zend_layout]]></category>

		<guid isPermaLink="false">http://otroblogmas.com/?p=2129</guid>
		<description><![CDATA[Un error que ha surgido trabajando con Zend Framework, es que hay unas excepciones que cuando son tratadas por el controlador de errores, se muestra dos veces el contenido del layout. Esto es debido a que Zend Framework trae por defecto dos plugins (si se utiliza el Zend_Layout), que estan al final de la pila [...]


Entradas relacionadas:<ol><li><a href='http://otroblogmas.com/acceder-a-zend_view-desde-un-plugin-en-zend-framework/' rel='bookmark' title='Permanent Link: Acceder a Zend_View desde un plugin en Zend Framework'>Acceder a Zend_View desde un plugin en Zend Framework</a></li>
<li><a href='http://otroblogmas.com/zfdebug-debug-bar-para-zend-framework/' rel='bookmark' title='Permanent Link: ZFDebug: debug bar para Zend Framework'>ZFDebug: debug bar para Zend Framework</a></li>
<li><a href='http://otroblogmas.com/comprobar-si-un-email-tiene-registros-mx-con-zend_validate/' rel='bookmark' title='Permanent Link: Comprobar si un email tiene registros MX, con Zend_Validate'>Comprobar si un email tiene registros MX, con Zend_Validate</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignright size-medium wp-image-2132" title="mvc" src="http://otroblogmas.com/wp-content/uploads/2010/07/mvc-156x150.png" alt="Diseño del patrón MVC" width="156" height="150" />Un error que ha surgido trabajando con Zend Framework, es que hay unas <strong>excepciones </strong>que cuando son tratadas por el controlador de errores, <strong>se muestra dos veces el contenido del layout</strong>. Esto es debido a que <a href="http://devzone.zend.com/article/3372">Zend Framework trae por defecto dos plugins</a> (si se utiliza el <a href="http://framework.zend.com/manual/en/zend.layout.html">Zend_Layout</a>), que estan al final de la pila de ejecución de plugins:</p>
<p><span id="more-2129"></span></p>
<ul>
<li style="text-align: justify;"><a href="http://framework.zend.com/apidoc/core/Zend_Controller/Plugins/Zend_Layout_Controller_Plugin_Layout.html">Zend_Layout_Controller_Plugin_Layout</a>: este plugin actua en el <em>postDispatch</em>, y aplica el <strong>patrón <a href="http://martinfowler.com/eaaCatalog/twoStepView.html" class="broken_link">Two Step View</a></strong> (captura el contenido en el Zend_Response, y después lo pasa al Zend_Layout para processarlo y se inyectado en el script de la vista del Layout).</li>
<li style="text-align: justify;"><a href="http://framework.zend.com/apidoc/core/Zend_Controller/Plugins/Zend_Controller_Plugin_ErrorHandler.html">Zend_Controller_Plugin_ErrorHandler</a>: también actua en el postDispatch, y se encarga de<strong> comprobar si se ha producido una excepción</strong> y ha sido registrada. En tal caso, ejecuta otra petición al controlador y acción para tratar errores y mostrarlos según sea conveniente.</li>
</ul>
<p style="text-align: justify;">El <strong>plugin de layout</strong> es ejecutado en la posición 99 de la pila, y el <strong>plugin de errores</strong> en la 100. Esto provoca que se ejecute una petición en el controlador de errores, habiendo establecido ya el layout. Para resolver este problema existen dos formas: <strong>cambiar el orden</strong> de ejecución de los plugins, o <strong>vaciando el contenido de la respuesta</strong> cuando se ejecuta la petición de tratamiento de errores.</p>
<p style="text-align: justify;">La última opción es la más simple y conlleva menos problemas; solamente hay que añadir una línea en la acción del controlador de errores. Normalmente se trata del errorAction del ErrorController, y la primera línea de código debería ser:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> errorAction<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getResponse</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">clearBody</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//handle error ........</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p style="text-align: justify;">El siguiente diagrama muestra el <strong>flujo de ejecución de Zend Framework</strong>:</p>
<p style="text-align: center;"><a href="http://otroblogmas.com/wp-content/uploads/2010/07/zend-framework-flow-diagram.png"><img class="aligncenter size-full wp-image-2131" title="zend-framework-flow-diagram" src="http://otroblogmas.com/wp-content/uploads/2010/07/zend-framework-flow-diagram.png" alt="Diagrama de flujo de Zend Framework" width="1044" height="723" /></a></p>
<p style="text-align: justify;">Artículos relacionados:</p>
<ul>
<li><a href="http://stackoverflow.com/questions/1476627/layout-being-rendered-twice">Layout being rendered twice</a></li>
<li><a href="http://framework.zend.com/manual/en/zend.application.available-resources.html#zend.application.available-resources.frontcontroller">Zend_Application_Resource_Frontcontroller</a></li>
<li><a href="http://devzone.zend.com/article/3372">Front Controller Plugins in Zend Framework</a></li>
<li><a href="http://framework.zend.com/issues/browse/ZF-8523">Zend_Controller_Plugins_ErrorHandler uses layout script twice</a></li>
</ul>


<p>Entradas relacionadas:</p><ol><li><a href='http://otroblogmas.com/acceder-a-zend_view-desde-un-plugin-en-zend-framework/' rel='bookmark' title='Permanent Link: Acceder a Zend_View desde un plugin en Zend Framework'>Acceder a Zend_View desde un plugin en Zend Framework</a></li>
<li><a href='http://otroblogmas.com/zfdebug-debug-bar-para-zend-framework/' rel='bookmark' title='Permanent Link: ZFDebug: debug bar para Zend Framework'>ZFDebug: debug bar para Zend Framework</a></li>
<li><a href='http://otroblogmas.com/comprobar-si-un-email-tiene-registros-mx-con-zend_validate/' rel='bookmark' title='Permanent Link: Comprobar si un email tiene registros MX, con Zend_Validate'>Comprobar si un email tiene registros MX, con Zend_Validate</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://otroblogmas.com/error-cuando-zend_layout-se-muestra-dos-veces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://otroblogmas.com/error-cuando-zend_layout-se-muestra-dos-veces/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 3.332 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-09-07 12:10:32 --><!-- Compression = gzip -->
