<?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>Pensando en Red &#187; php</title> <atom:link href="http://pensandoenred.com/tag/php/feed/" rel="self" type="application/rss+xml" /><link>http://pensandoenred.com</link> <description>nada es tan fácil como parece serlo</description> <lastBuildDate>Fri, 17 Feb 2012 21:28:20 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.2</generator> <item><title>Drupal personalizando un detalle con el resultado de una vista</title><link>http://pensandoenred.com/2010/11/16/drupal-personalizando-un-detalle-con-el-resultado-de-una-vista/</link> <comments>http://pensandoenred.com/2010/11/16/drupal-personalizando-un-detalle-con-el-resultado-de-una-vista/#comments</comments> <pubDate>Tue, 16 Nov 2010 08:07:26 +0000</pubDate> <dc:creator>mariotux</dc:creator> <category><![CDATA[Drupal]]></category> <category><![CDATA[php]]></category> <category><![CDATA[theme]]></category> <category><![CDATA[views]]></category> <guid
isPermaLink="false">http://www.pensandoenred.com/?p=665</guid> <description><![CDATA[Drupal tiene el módulo context, muy util al poder definir reglas para mostrar bloques por contexto. El bloque puede ser el resultado de una view. Las views pueden recibir parámetros, pero cuando es un bloque hay que hacer "ñapa" para recibir el parámetro de la url, por lo que si deseamos mostrar en el detalle [...]]]></description> <content:encoded><![CDATA[<p>Drupal tiene el módulo <a
href="http://drupal.org/project/context" target="_blank">context</a>, muy util al poder definir reglas para mostrar bloques por contexto. El bloque puede ser el resultado de una view. Las views pueden recibir parámetros, pero cuando es un bloque hay que hacer "ñapa" para recibir el parámetro de la url, por lo que si deseamos mostrar en el detalle del contenido un listado de otros contenidos según la regla de negocio tenemos dos opciones.</p><p>Crear una view de tipo bloque y después por context definir la regla para pintar la view o crear una variable en el preprocess del nodo con el resultado de una vista.</p><p>La ventaja de hacerlo con context, es que no tiras una línea de código pero el problema es que el bloque lo tienes que ubicar en una de las regiones definidas en el theme. Por otro lado si la vista necesita parámetros, como el $node-&gt;nid es algo más complejo.</p><p>Pongamos como ejemplo "noticia" (que original), donde va a mostrar el listado de las 5 noticias más recientes que tengan los mismos tag's que la noticia que estamos visualizando.</p><p>1.- Creamos la vista que recibe como parámetro el $node-&gt;nid para obtener los tags y luego consulta al resto de noticias para obtener el resultado de las 5 noticias a mostrar.</p><p>2.- Preprocess de nodo noticia:</p><pre class="brush: php; ">
function _THEMENAME_preprocess_node__noticia(&amp;$vars){
$nid = $vars[&#039;node&#039;]-&gt;nid;
$view_name = &#039;noticias&#039;;
$display = &#039;noticias_relacionadas_por_tags&#039;;
$args = array($nid);
$view = views_get_view($view_name);
$view-&gt;set_arguments($args);
$view-&gt;build($display);
$view-&gt;execute($display);
$block = $view-&gt;render();
$vars[&#039;noticias_relacionadas&#039;] = $block ;
}
</pre><p>Ahora en la plantilla de nodo noticia, tenemos una variable <strong>$noticias_relacionadas</strong> con el resultado de la vista. Esto nos da más control de personalización del detalle, ya que con context estamos "limitados" a las regiones del theme, pero de esta manera la personalización del html en el detalle de la noticia está más controlado.</p> ]]></content:encoded> <wfw:commentRss>http://pensandoenred.com/2010/11/16/drupal-personalizando-un-detalle-con-el-resultado-de-una-vista/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Drupal crear variables en nodos para personalizar el detalle de un contenido</title><link>http://pensandoenred.com/2010/11/16/drupal-crear-variables-en-nodos-para-personalizar-el-detalle-de-un-contenido/</link> <comments>http://pensandoenred.com/2010/11/16/drupal-crear-variables-en-nodos-para-personalizar-el-detalle-de-un-contenido/#comments</comments> <pubDate>Tue, 16 Nov 2010 07:34:06 +0000</pubDate> <dc:creator>mariotux</dc:creator> <category><![CDATA[Drupal]]></category> <category><![CDATA[php]]></category> <category><![CDATA[nodo]]></category> <category><![CDATA[theme]]></category> <guid
isPermaLink="false">http://www.pensandoenred.com/?p=650</guid> <description><![CDATA[Cuando trabajamos en la personalización del detalle de contenido, nos puede surgir la necesidad según requisitos de crear alguna lógica para mostrar los atributos de este contenido. Es muy fácil caer en aplicar esa lógica y creación de variables en la propia plantilla php (phptemplates), pero en la medida de los posible lo correcto sería [...]]]></description> <content:encoded><![CDATA[<p>Cuando trabajamos en la personalización del detalle de contenido, nos puede surgir la necesidad según requisitos de crear alguna lógica para mostrar los atributos de este contenido. Es muy fácil caer en aplicar esa lógica y creación de variables en la propia plantilla php (phptemplates), pero en la medida de los posible lo correcto sería evitar "codificar" en la plantilla.</p><p>Pongamos el ejemplo de que estamos mostrando el detalle de un contenido noticia, en donde tiene dos atributos a los que hay que darle importancia:<br
/> - Imagen<br
/> - Vídeo</p><p><em>Requisitos:<br
/> Si la noticia tiene vídeo, mostrar el vídeo y en caso contrario pintar la imagen.</em></p><p>Sería muy sencillo aplicar la lógica en el phptemplate:</p><pre class="brush: php; ">
if($field_noticia_video_rendered){
print $field_noticia_video_rendered;
}else{
print $field_noticia_imagen_rendered;
}
</pre><p>Como ya sabéis, si el tipo de contenido tiene un definido el campo con nombre <strong>field_noticia_imagen</strong> y el widget del atributo es de tipo imagen, al pintar <strong>$field_noticia_imagen_rendered</strong> te pinta el html necesario para renderizar la imagen, lo mismo ocurre con el vídeo.</p><p>Bien, hasta aquí hemos cumplido la funcionalidad. Pero... ¿es la manera correcta? tal vez no debería mojarme en decir "correcta" ya que ambas  funcionan, pero queda mucho más ordenado si en vez de pintar ese churro lineas en la plantilla simplemente pintamos:</p><pre class="brush: php; ">
print $field_noticia_multimedia_rendered;
</pre><p>Ahora bien, el tipo de contenido noticia no tiene el atributo multimedia y antes de que interprete la plantilla tenemos que crear la variable.</p><p>Es muy improbable que estés haciendo un tema de Drupal de cero, así que en este paso vamos a abrir<strong> template.php.</strong></p><p>Normalmente en este fichero si partes de un tema base, ya tendrás la función:</p><pre class="brush: php; ">
THEMENAME_preprocess_node(&amp;$vars, $hook){
...
$function = &#039;_THEMENAME_preprocess_node&#039;.&#039;__&#039;. $vars[&#039;node&#039;]-&gt;type;
if (function_exists($function)) {
$function(&amp;$vars);
}
}
</pre><p>Antes de procesar un nodo se ejecuta esta función, en donde comprobamos si tenemos declarada una función especifica para preprocesar un nodo de un tipo de contenido determinado, como en este caso el type es "noticia" tendremos la función <em>"_THEMENAME_preprocess_node__noticia"</em>. Al declarar la función con un guión bajo al inicio del nombre, es una manera de indicar que es una función de ámbito privado y que no es un <a
href="http://api.drupal.org/api/drupal/includes--module.inc/group/hooks/6" target="_blank">hook</a> que lo entienda el core.</p><pre class="brush: php; ">
_THEMENAME_preprocess_node__noticia($vars){
...
}
</pre><p>El parámetro que recibe es un array asociativo que contiene toda la información que necesitamos. Si creamos una nueva key en este array asociativo, lo que vamos a conseguir es que en la plantilla de nodo exista una variable con el nombre de la key que hemos creado en el array.</p><pre class="brush: php; ">
_THEMENAME_preprocess_node__noticia($vars){
if($vars[&#039;field_noticia_video][0][&#039;value&#039;]){
$vars[&#039;field_noticia_multimedia_rendered&#039;] = $vars[&#039;field_noticia_video&#039;][0][&#039;view&#039;];
}else{
$vars[&#039;field_noticia_multimedia_rendered&#039;] = $vars[&#039;field_noticia_imagen&#039;][0][&#039;view&#039;];
}
}
</pre><p>Una vez creado el preprocess para el tipo de contenido noticia, en la plantilla del nodo noticia tenemos que pintar la variable<strong> $field_noticia_multimedia_rendered</strong>.</p><pre class="brush: php; ">
print $field_noticia_multimedia_rendered;
</pre><p>Nos olvidamos de la lógica en la plantilla, para cuando pase diseño a modificarla no se encuentre con esos churros que a veces metemos <img
src='http://pensandoenred.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p><p>La idea de llamar a la nueva variable <strong>$field_noticia_multimedia_rendered</strong> es por seguir un poco la nomenclatura de las variables que utiliza <strong>Drupal</strong>, pero puede ser sólo <strong>$multimedia</strong> ya que a <strong>otra persona que vaya a ver la plantilla le puede llevar a confusión entendiendo que es un atributo del contenido</strong>. Esto queda a elección de cada uno.</p> ]]></content:encoded> <wfw:commentRss>http://pensandoenred.com/2010/11/16/drupal-crear-variables-en-nodos-para-personalizar-el-detalle-de-un-contenido/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Drupal el incomprendido y desconocido CMS</title><link>http://pensandoenred.com/2010/08/12/drupal-el-incomprendido-y-desconocido-cms/</link> <comments>http://pensandoenred.com/2010/08/12/drupal-el-incomprendido-y-desconocido-cms/#comments</comments> <pubDate>Thu, 12 Aug 2010 16:50:37 +0000</pubDate> <dc:creator>mariotux</dc:creator> <category><![CDATA[Drupal]]></category> <category><![CDATA[php]]></category> <category><![CDATA[Software Libre]]></category> <category><![CDATA[cms]]></category> <guid
isPermaLink="false">http://www.pensandoenred.com/?p=607</guid> <description><![CDATA[Hace ya bastante tiempo, desde que me muevo en la tecnología LAMP, que conozco Drupal. Nunca le dediqué el tiempo necesario para ser conocedor de esa potencia interna que cuando miramos las tripas nos hace dudar que tenga. Drupal es un CMS agnóstico en contenido y que gracias a su extensa comunidad hay una cantidad [...]]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-medium wp-image-608" style="float: left; padding: 10px;" title="DrupalMan" src="http://www.pensandoenred.com/wp-content/uploads/2010/08/DrupalMan-199x300.jpg" alt="" width="199" height="300" />Hace ya bastante tiempo, desde que me muevo en la tecnología LAMP, que conozco Drupal. Nunca le dediqué el tiempo necesario para ser conocedor de esa potencia interna que cuando miramos las tripas nos hace dudar que tenga. Drupal es un CMS agnóstico en contenido y que gracias a su extensa comunidad hay una cantidad de módulos y documentación (a veces demasiada) sobre como hacer proyectos en Drupal.</p><p>Tal vez, el problema de no haber invertido más tiempo en Drupal es por su sencillez tras la instalación y no conocer lo que realmente podía ofrecer. Una de las razones también muy importantes por las que no me decidía a investigarlo era la parte técnica, donde escasea la POO y hace algo muy raro <img
src='http://pensandoenred.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p><p>Recientemente en el entorno laboral nos ha surgido la oportunidad de invertir tiempo en conocerlo, realmente me ha sorprendido. La primera sensación en la toma de contacto con el CMS es que se puede desarrollar sites dinámicos sin tirar una línea de código. Esta sensación duró hasta que nos enfrentamos a un proyecto real, en donde funcionalmente podíamos atacar muchos requisitos del proyecto pero a la hora de entrar en las tripas para personalizarlo nos dimos cuenta que hay algo más allá. El código es prácticamente funciones, y el core (no se como lo hace) simula la sobrecarga de métodos pero con  funciones en donde parece ser que sólo puede existir una sobre-escritura.</p><p>La verdad es que ahora mismo tengo un poco de fascinación por Drupal, y cuando hace unos 3 años un amigo me intentaba vender la "moto" de Drupal yo siempre le ignoraba <img
src='http://pensandoenred.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> lo siento Diego! ha tenido que ser tres años más tarde.</p><p>Supongo que a partir de ahora, retomaré el blog con algún que otro artículo de Drupal.</p> ]]></content:encoded> <wfw:commentRss>http://pensandoenred.com/2010/08/12/drupal-el-incomprendido-y-desconocido-cms/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Cambiar el path de la carpeta Web de Symfony</title><link>http://pensandoenred.com/2010/04/25/cambiar-el-path-de-la-carpeta-web-de-symfony/</link> <comments>http://pensandoenred.com/2010/04/25/cambiar-el-path-de-la-carpeta-web-de-symfony/#comments</comments> <pubDate>Sun, 25 Apr 2010 13:07:01 +0000</pubDate> <dc:creator>mariotux</dc:creator> <category><![CDATA[Configuraciones]]></category> <category><![CDATA[php]]></category> <category><![CDATA[Symfony]]></category> <category><![CDATA[Web]]></category> <guid
isPermaLink="false">http://www.pensandoenred.com/?p=597</guid> <description><![CDATA[A veces el servidor donde vamos a hospedar el proyecto nos puede condicionar los paths del proyecto. En un hosting compartido normalmente no puedes indicar cual es el path del document_root si no que ya te ofrecen por defecto una estructura de directorios y tienes que adaptar tu desarrollo a ello. Bien, con symfony es [...]]]></description> <content:encoded><![CDATA[<p>A veces el servidor donde vamos a hospedar el proyecto nos puede condicionar los paths del proyecto. En un hosting compartido normalmente no puedes indicar cual es el path del document_root si no que ya te ofrecen por defecto una estructura de directorios y tienes que adaptar tu desarrollo a ello.</p><p>Bien, con symfony es muy sencillo cambiar el path del web dir.</p><p>Tenemos que editar el fichero ProyectConfiguration.class.php y cambiaremos el web dir:</p><blockquote><p>$this-&gt;setWebDir($this-&gt;getRootDir().'/public_html');</p></blockquote><p>Teniendo en cuenta que el proyecto se encuentra en /home/projects el document_root en symfony sería /home/projects/web, pero al agregar esa línea en el fichero de configuración nos intentaría localizar en /home/projects/public_html.</p><p>Por otro lado si queremos meter toda la estructura de symfony en una carpeta, al estilo de:</p><blockquote><p>public_html //El document root<br
/> source //Toda la estructura del proyecto symfony</p></blockquote><p>Tendríamos que configurar el path de public_html así:</p><blockquote><p>$this-&gt;setWebDir($this-&gt;getRootDir().'/../public_html');</p></blockquote><p>Ya que el $this-&gt;getRootDir() ya te ubica donde tienes el código.</p><p>Aquí dejo una chuletilla <img
src='http://pensandoenred.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> para cuando me vuelva a hacer falta, si os es de utilidad pues mejor.</p> ]]></content:encoded> <wfw:commentRss>http://pensandoenred.com/2010/04/25/cambiar-el-path-de-la-carpeta-web-de-symfony/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>$GLOBALS vs Static method en PHP 5.2.1</title><link>http://pensandoenred.com/2009/11/11/globals-vs-static-method-en-php-5-2-1/</link> <comments>http://pensandoenred.com/2009/11/11/globals-vs-static-method-en-php-5-2-1/#comments</comments> <pubDate>Tue, 10 Nov 2009 22:15:04 +0000</pubDate> <dc:creator>mariotux</dc:creator> <category><![CDATA[php]]></category> <category><![CDATA[global]]></category> <category><![CDATA[static]]></category> <guid
isPermaLink="false">http://www.pensandoenred.com/?p=439</guid> <description><![CDATA[Hoy en el trabajo ha surgido la conversación de si es más efectivo el utilizar clases con métodos estáticos para tener una colección de objetos o variables $GLOBAL. No he utilizado en ninguno de mis desarrollos variables globales por lo que en el trayecto a casa vine dándole vueltas a como poder realizar la prueba [...]]]></description> <content:encoded><![CDATA[<p>Hoy en el trabajo ha surgido la conversación de si es más efectivo el utilizar clases con métodos estáticos para tener una colección de objetos o variables $GLOBAL. No he utilizado en ninguno de mis desarrollos variables globales por lo que en el trayecto a casa vine dándole vueltas a como poder realizar la prueba de rendimiento entre variables globales y método estático.</p><p>Lo que se me ocurrió fue crear dos clases idénticas, a diferencia de que una tiene método estático y la otra no. La no estática la instanciaré en una variable global y entonces comprobaré el uso de memoria.</p><p>Ambas clases con una propiedad que almacena el string y con sus métodos de GET y SET. Utilizando el string " Hola Mundo! "</p><p>Resultado:</p><blockquote><h2>Static</h2><p>54.1 Kb<br
/> Hola Mundo!<br
/> Memoria usada: 54.5 KB de 256 KB<br
/> <strong>Memoria consumida:0.4 KB<br
/> </strong>0.000107 sec</p></blockquote><blockquote><h2>Globals</h2><p>54.1 Kb<br
/> Hola Mundo!<br
/> Memoria usada: 54.8 KB de 256 KB<br
/> <strong>Memoria consumida:0.7 KB<br
/> </strong>0.000126 sec</p></blockquote><p>La conclusión es clara, Globals consume 0.3Kb más que un método estático y es algo más lento. Esta prueba se ha realizado con un simple string pero si la hiciéramos en una aplicación los datos de memoria y de tiempo tendrían una diferencia más notable.</p> ]]></content:encoded> <wfw:commentRss>http://pensandoenred.com/2009/11/11/globals-vs-static-method-en-php-5-2-1/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Un buen framework PHP</title><link>http://pensandoenred.com/2009/09/02/un-buen-framework-php/</link> <comments>http://pensandoenred.com/2009/09/02/un-buen-framework-php/#comments</comments> <pubDate>Wed, 02 Sep 2009 06:43:18 +0000</pubDate> <dc:creator>mariotux</dc:creator> <category><![CDATA[php]]></category> <category><![CDATA[Software Libre]]></category> <category><![CDATA[programacion]]></category> <category><![CDATA[Symfony]]></category> <guid
isPermaLink="false">http://www.pensandoenred.com/?p=413</guid> <description><![CDATA[Desde que tomé la decisión de utilizar symfony me sorprendo cada día que voy avanzando. Te encuentras todo aquello que querías tener hecho pero nunca tuviste tiempo de hacer. Si todavía estás dándole vueltas a que framework php utilizar deja de buscar, symfony es el framework perfecto! Por que hago esta afirmación tan rotunda... pues [...]]]></description> <content:encoded><![CDATA[<p>Desde que tomé la decisión de utilizar symfony me sorprendo cada día que voy avanzando. Te encuentras todo aquello que querías tener hecho pero nunca tuviste tiempo de hacer.</p><p>Si todavía estás dándole vueltas a que framework php utilizar deja de buscar, symfony es el framework perfecto! Por que hago esta afirmación tan rotunda... pues porque en el aprendizaje de symfony recalcan las buenas prácticas, el uso de pruebas unitarias y funcionales y la refactorización de código. Tal vez estés pensando en utilizar Zend Framework porque tiene unos componentes que son realmente interesantes, no te preocupes! con symfony puedes hacerlo!</p><p>La filosofía de los creadores del framework es de "no reinventar la rueda" y si algo está bien hecho y funciona lo utilizan. Antes de embarcarse en el desarrollo de algo nuevo comprueban si existe. De hecho, el core de symfony está compuesto por otros proyectos open source como Creole, Prado, Spyc y Pake.</p><p>Tienes todavía dudas de si debes usarlo o no, el libro y la documentación es extensa (es una buena señal), entonces ponte a realizar la práctica de Jobeet! verás lo que se puede hacer y como! la potencia de symfony es importante!</p><p>Yahoo news y del.icio.us son proyectos construidos con symfony por lo que se puede garantizar el desarrollo de aplicaciones con carga extrema.</p> ]]></content:encoded> <wfw:commentRss>http://pensandoenred.com/2009/09/02/un-buen-framework-php/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Optimiza tu desarrollo web en php con KCachegrind &#8211; PHP Profiler con Xdebug</title><link>http://pensandoenred.com/2009/06/24/optimiza-tu-desarrollo-web-en-php-con-kcachegrind-php-profiler-con-xdebug/</link> <comments>http://pensandoenred.com/2009/06/24/optimiza-tu-desarrollo-web-en-php-con-kcachegrind-php-profiler-con-xdebug/#comments</comments> <pubDate>Wed, 24 Jun 2009 19:01:43 +0000</pubDate> <dc:creator>mariotux</dc:creator> <category><![CDATA[Configuraciones]]></category> <category><![CDATA[php]]></category> <category><![CDATA[Software Libre]]></category> <category><![CDATA[gnome]]></category> <category><![CDATA[kcachegrind]]></category> <category><![CDATA[php5-xdebug]]></category> <category><![CDATA[Ubuntu]]></category> <category><![CDATA[xdebug]]></category> <guid
isPermaLink="false">http://www.pensandoenred.com/?p=387</guid> <description><![CDATA[La descripción encontrada en wikipedia de "profiling": Un "profiler" es una herramienta de análisis de performance que mide el comportamiento del programa mientras este está corriendo, particularmente la frecuencia y duración de las llamadas a funciones. La salida es un rastro (stream) de eventos o un sumario estático de los eventos observados (un "profile", perfil [...]]]></description> <content:encoded><![CDATA[<p>La descripción encontrada en <a
href="http://es.wikipedia.org/wiki/Profiling" target="_blank">wikipedia de "profiling"</a>:</p><blockquote><p>Un "profiler" es una herramienta de análisis de performance que mide el comportamiento del programa mientras este está corriendo, particularmente la frecuencia y duración de las llamadas a funciones. La salida es un rastro (stream) de eventos o un sumario estático de los eventos observados (un "profile", perfil o reseña). Los profilers usan una amplia variedad de técnicas para recolectar datos, incluyendo interrupciones por hardware, instrumentos de código, ganchos (hooks) del sistema operativo.</p><p>El uso de profilers es usado en el proceso de ingeniería de performance. Un profile generalmente es realizado relacionado la posición del código fuente donde suceden los eventos y el tamaño de las medidas de los datos que es proporcional al tamaño del código del programa. En contraste, el tamaño de un rastro es proporcional al tiempo de ejecución de un programa, haciéndolo impracticable. Para programas secuenciales, un profile, es generalmente suficiente, pero los problemas de pefrormance en programas paralelos (que esperan mensajes o temas de sincronismo) generalmente depende del tiempo de relación de los eventos, de esta forma requieren la localización total para tener un entendimiento del problema</p></blockquote><p>Para ello tenemos que instalar php5-xdebug:</p><blockquote><p>sudo aptitude install php5-xdebug</p></blockquote><p>Una vez instalado el módulo Xdebug tenemos que editar su fichero de configuración que encontraremos en:</p><blockquote><p>/etc/php5/apache2/conf.d/<strong>xdebug.ini</strong></p></blockquote><p>En ese fichero agregaremos las siguientes lineas:</p><p>xdebug.profiler_enabled = 1<br
/> xdebug.profiler_output_dir = <em>(path de salida) "/home/usuario/tmp/"<br
/> </em>xdebug.profiler_output_name = cachegrind.out. %R</p><p>Tras reiniciar el apache comprobaremos en un fichero php el resultado de <em>phpinfo() </em>para comprobar que el modulo xdebug está operativo.</p><p>Más parámetros de configuración: <a
href="http://www.xdebug.org/docs/profiler" target="_blank">xdebug profiler</a></p><p>Al poner %R en el nombre de salida conseguimos que si estamos analizando el domonio localhost guarde los ficheros como: cachegrind.out.localhost</p><p>Para conocer más opciones de parametrización de xdebug.profiler_output_name en: <a
href="http://www.xdebug.org/docs/all_settings#trace_output_name" target="_blank">http://www.xdebug.org/docs/all_settings#trace_output_name</a></p><p>De esta manera conseguimos que se vayan creando los ficheros que después leeremos con <a
href="http://kcachegrind.sourceforge.net/html/Home.html" target="_blank">KCachegrind</a>.</p><p>Instalamos Kcachegrind:</p><blockquote><p>sudo aptitude kcachegrind kcachegrind-converters</p></blockquote><p>Ahora solo tendremos que lanzar el programa Kcachegrind y abrir el fichero cachegrind.out.localhost. En el mismo directorio encontraremos más ficheros pero tenemos que abrir el fichero principal que es el que no tiene concatenado a su nombre con un punto una secuencia numérica.</p><p
style="text-align: center;"><img
style="float:right" title="kcachegrindkde" src="../media/2009/06/kcachegrindkde-300x214.png" alt="kcachegrindkde" width="300" height="214" /></p><p>El programa analizará los logs de xdebug y nos lo mostrará con una interfaz gráfica intuitiva y no muy complicada de entender:</p><p>De esta manera podremos analizar si nuestra aplicación web pierde mucho tiempo en algún proceso en el que no hayamos reparado con anterioridad, el uso de memoria y las llamadas que se realizan a funciones y/o métodos.</p><blockquote><p>Esta configuración está pensada para probarla en la máquina local de desarrollo, en ese caso en el path de salida que hemos configurado en el xdebug.ini tenemos que asignarle los permisos necesarios para que el usuario de apache www-data pueda escribir los logs.</p></blockquote><p>Una vez finalizado su uso, es recomendable desactivar el profile de xdebug para que no nos sature de logs a los que no vamos a hacer caso.</p><p>Aunque el pantallazo es de un entorno KDE esta configuración y software se ha realizado en: Ubuntu 9.04 Gnome.</p><p>Si tu entorno de desarrollo es Windows, también puedes activar el módulo php_xdebug.dll en tu php.ini y seguir los mismos parámetros de configuración en tu fichero php.ini. Como herramienta para examinar los logs del profile xdebug puedes utilizar <a
href="http://sourceforge.net/projects/wincachegrind/" target="_blank">WinCacheGrind</a>.</p><p>Espero que os sea de utilidad, si conocéis alguna herramienta y/o utilidad que os facilite la tarea de realizar aplicaciones ligeras agradecería el comentario.</p> ]]></content:encoded> <wfw:commentRss>http://pensandoenred.com/2009/06/24/optimiza-tu-desarrollo-web-en-php-con-kcachegrind-php-profiler-con-xdebug/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Framework :: Probando la vista</title><link>http://pensandoenred.com/2009/01/22/framework-probando-la-vista/</link> <comments>http://pensandoenred.com/2009/01/22/framework-probando-la-vista/#comments</comments> <pubDate>Wed, 21 Jan 2009 22:50:06 +0000</pubDate> <dc:creator>mariotux</dc:creator> <category><![CDATA[Framework]]></category> <category><![CDATA[php]]></category> <category><![CDATA[gpl]]></category> <category><![CDATA[Vista]]></category> <guid
isPermaLink="false">http://www.pensandoenred.com/?p=266</guid> <description><![CDATA[Bien, hasta ahora el código que estaba publicado en el repositorio no era de mucha utilidad si no había un caso de ejemplo para probar el funcionamiento de la vista. A tener en cuenta para pruebas: Document root: html Código donde se monta la vista: proyecto/php/portada/portada.php Tipo de contenido de pruebas: demo El resultado de [...]]]></description> <content:encoded><![CDATA[<p>Bien, hasta ahora el código que estaba publicado en el repositorio no era de mucha utilidad si no había un caso de ejemplo para probar el funcionamiento de la vista.</p><p>A tener en cuenta para pruebas:</p><ul><li>Document root: <strong>html</strong></li><li>Código donde se monta la vista: <strong>proyecto/php/portada/portada.php</strong></li><li>Tipo de contenido de pruebas: <strong>demo</strong></li></ul><p>El resultado de la prueba es un listado de 10 elementos de tipo "demo" con una paginación de 2 páginas, ya que cuando preguntamos por el total, el método devuelve directamente 20. Las clases del tipo de contendo Demo son clases de prueba, todavía falta la definición de como construir los tipos de contenido.</p><p>La idea de la vista, es un gestor de plantillas por sustitución de tag omitiendo cualquier tipo de lógica en la propia plantilla. El objetivo es tener un motor de plantillas de fácil uso a la hora de montar pantallas teniendo en cuenta que en la propia plantilla el diseñador no se tendrá que econtrar código alguno que implique lógica. Entendiendo lógica como boucles, condiciones...</p> ]]></content:encoded> <wfw:commentRss>http://pensandoenred.com/2009/01/22/framework-probando-la-vista/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Framework :: descargando el código de SVN</title><link>http://pensandoenred.com/2009/01/22/framework-descargando-el-codigo-de-svn/</link> <comments>http://pensandoenred.com/2009/01/22/framework-descargando-el-codigo-de-svn/#comments</comments> <pubDate>Wed, 21 Jan 2009 22:32:56 +0000</pubDate> <dc:creator>mariotux</dc:creator> <category><![CDATA[Framework]]></category> <category><![CDATA[php]]></category> <category><![CDATA[subversion]]></category> <guid
isPermaLink="false">http://www.pensandoenred.com/?p=263</guid> <description><![CDATA[Para descargar el código del subversion tenemos que utilizar un cliente de subversion "me he lucido". Tirando de la blogosfera podemos obtener manuales de como utiluzar diferentes clientes de subversion. TortoiseSVN en Windows Subclipse para usarlo en eclipse SscriptSVN en Gnome También me ha parecido de interés el exponer una explicación del servicio de Subversion [...]]]></description> <content:encoded><![CDATA[<p>Para descargar el código del subversion tenemos que utilizar un cliente de subversion <img
src='http://pensandoenred.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> "me he lucido". Tirando de la blogosfera podemos obtener manuales de como utiluzar diferentes clientes de subversion.</p><ul><li><a
href="http://tortoisesvn.net/docs/release/TortoiseSVN_es/tsvn-dug-settings.html" target="_blank">TortoiseSVN</a> en Windows</li><li><a
href="http://www.migue.org/diario/2007/08/cmo-usar-subversion-en-eclipse.html" target="_blank">Subclipse</a> para usarlo en eclipse</li><li><a
href="http://glatelier.wordpress.com/2008/04/20/subversion-en-ubuntu-y-gnome-aka-subversion-for-dummies/" target="_blank">SscriptSVN</a> en Gnome</li></ul><p>También me ha parecido de interés el exponer una explicación del servicio de Subversion para aquellos que no lo conozcan. Este servicio sirve para tener un control de versiones y desarrollar en equipo. Para esto podemos acceder al blog de <a
href="http://www.manuelrecena.com" target="_blank">Manuel Recena</a> que en su post de <a
href="http://www.manuelrecena.com/blog/archives/81" target="_blank">Algunas ideas de como usar subversion</a> lo describe con detalle.</p><p>Si tenéis algún problema para la descarga avisarme para poder solucionarlo. El proyecto está en modo lectura para todos y para poder participar hace falta una cuenta de usuario, por lo que no podréis realizar un commit si no os he dado de alta.</p><p>Feliz descarga! <img
src='http://pensandoenred.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://pensandoenred.com/2009/01/22/framework-descargando-el-codigo-de-svn/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Framework :: El comienzo</title><link>http://pensandoenred.com/2009/01/16/framework-el-comienzo/</link> <comments>http://pensandoenred.com/2009/01/16/framework-el-comienzo/#comments</comments> <pubDate>Thu, 15 Jan 2009 22:57:38 +0000</pubDate> <dc:creator>mariotux</dc:creator> <category><![CDATA[Framework]]></category> <category><![CDATA[php]]></category> <category><![CDATA[gpl]]></category> <guid
isPermaLink="false">http://www.pensandoenred.com/?p=258</guid> <description><![CDATA[Hace ya un tiempo que llevo dandole vueltas a la idea de comenzar a desarrollar un framework para desarrollar en PHP. Es cierto que en internet existen para escoger unos cuantos, unos más conocidos que otros y un sin fin de clases para utilizar en los desarrollos de cada uno. Aunque dispongo de algo más [...]]]></description> <content:encoded><![CDATA[<p>Hace ya un tiempo que llevo dandole vueltas a la idea de comenzar a desarrollar un <a
href="http://www.pensandoenred.com/framework/" target="_self">framework</a> para desarrollar en PHP. Es cierto que en internet existen para escoger unos cuantos, unos más conocidos que otros y un sin fin de clases para utilizar en los desarrollos de cada uno.</p><p>Aunque dispongo de algo más de código que el expuesto en el<a
href="http://svn.pensandoenred.com/framework/" target="_blank"> respositorio de subversion</a> que he montado para el proyecto tengo que "limpiarlo" un poco para subirlo al repositorio.</p><p>Ahora tengo un gestor de plantillas, cuya idea principal es el montar la página gestionando formularios, paginaciones y demás elementos que vaya incorporando al desarrollo. Ahora será dificil poder comprobar el funcionamiento de las clases a no ser que le dediques un poco de tiempo a leer el código pero en cuanto pueda tener código suficiente para que se pueda ir evaluando pasará un tiempecito ^_^ esperemos que no mucho.</p><p>Un punto importante en el proyecto es la documentación y en unos dias montaré un wiki para ir documentando las clases publicadas en el repositorio, por lo que se intentará mantener la publicación de documentación con la publicación de código nuevo.</p><p>El proyecto es ambicioso para una sola persona pero sin tener la obligación de alcanzar una fecha de fin no hay presión <img
src='http://pensandoenred.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p>Una de las asignaturas pendientes para este proyecto es licenciarlo bajo GPL, pero aunque ahora el código no haga referencia a esta licencia así estará en el momento que me sea posible.</p> ]]></content:encoded> <wfw:commentRss>http://pensandoenred.com/2009/01/16/framework-el-comienzo/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> </channel> </rss>
