<?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>Racó tècnic</title>
	<atom:link href="http://www.racotecnic.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.racotecnic.com</link>
	<description>Punt de trobada de coneixements</description>
	<lastBuildDate>Sat, 09 Mar 2013 22:23:41 +0000</lastBuildDate>
	<language>ca</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Configurar apache en modo mpm worker con php5 y fastcgi en ubuntu server</title>
		<link>http://www.racotecnic.com/2012/05/configurar-apache-en-modo-worker-con-php5-y-fastcgi-en-ubuntu-server/</link>
		<comments>http://www.racotecnic.com/2012/05/configurar-apache-en-modo-worker-con-php5-y-fastcgi-en-ubuntu-server/#comments</comments>
		<pubDate>Wed, 16 May 2012 06:00:00 +0000</pubDate>
		<dc:creator>Booletaire</dc:creator>
				<category><![CDATA[Administració]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[apache-mpm-worker]]></category>
		<category><![CDATA[Apache2]]></category>
		<category><![CDATA[fastCGI]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Ubuntu 11.10]]></category>
		<category><![CDATA[Ubuntu 12.04]]></category>
		<category><![CDATA[Ubuntu Oneiric]]></category>
		<category><![CDATA[Ubuntu Quantal]]></category>

		<guid isPermaLink="false">http://www.racotecnic.com/?p=2053</guid>
		<description><![CDATA[Quizás hayáis escuchado hablar del módulo mpm worker para apache. Si no, yo os hago un breve resumen (corregidme si me equivoco). Al compilar apache podemos escoger el modo en que éste maneja los procesos del servidor. Según el modo que utilicemos se nos ofrecen ciertos pros y contras. Los pros del modo worker de [...]]]></description>
			<content:encoded><![CDATA[<p>Quizás hayáis escuchado hablar del módulo <a title="Apache MPM worker" href="http://httpd.apache.org/docs/2.2/mod/worker.html" rel="nofollow external">mpm worker para apache</a>. Si no, yo os hago un breve resumen (corregidme si me equivoco).</p>
<p><a title="Multi-Processing Modules (MPMs)" href="http://httpd.apache.org/docs/2.2/mpm.html" rel="external nofollow">Al compilar apache</a> podemos escoger el modo en que éste maneja los procesos del servidor. Según el modo que utilicemos se nos ofrecen ciertos pros y contras. Los pros del modo worker de apache es que es bastante más rápido que el modo prefork (que es el que viene habilitado por defecto). Los &#8220;contras&#8221; del modo worker es que el módulo de php para apache no es compatible con él y en lugar de ello deberemos utilizar el módulo de cgi.</p>
<p>A pesar de que he dicho lo de &#8220;al compilar&#8221;, no os preocupéis; podemos cambiar el modo en que funciona apache de manera rápida con aptitude.</p>
<p>Podéis encontrar más información y diferencias entre MPMs en: <a href="http://httpd.apache.org/docs/2.2/mpm.html" rel="nofollow external">http://httpd.apache.org/docs/2.2/mpm.html</a>.</p>
<p>Paquetes que necesitamos:</p>
<ul>
<li>apache2</li>
<li>apache2-mpm-worker</li>
<li>libapache2-mod-fcgid</li>
<li>php5-cli</li>
<li>php5-cgi</li>
</ul>
<pre class="brush: bash; title: ; notranslate">sudo apt-get install apache2 apache2-mpm-worker libapache2-mod-fcgid php5-cli php5-cgi</pre>
<p>Una vez instalados, vamos a configurar apache para que ejecute ficheros php utilizando el módulo fastCGI:<br />
<span id="more-2053"></span></p>
<pre class="brush: bash; title: ; notranslate">sudo nano /etc/apache/conf.d/php.conf</pre>
<p>Pegad esto:</p>
<pre class="brush: plain; title: ; notranslate">&lt;Directory /usr/share&gt;
	AddHandler fcgid-script .php
	FCGIWrapper /usr/lib/cgi-bin/php5 .php
	Options ExecCGI FollowSymlinks Indexes
&lt;/Directory&gt;

&lt;Files ~ (\.php)&gt;
	AddHandler fcgid-script .php
	FCGIWrapper /usr/lib/cgi-bin/php5 .php
	Options +ExecCGI
	allow from all
&lt;/Files&gt;</pre>
<blockquote><p><strong>Nota:</strong> Al actualizar a php 5.4 he necesitado descomentar el último trozo del fichero de configuración <code>/etc/apache2/mods-enabled/php5_cgi.conf</code> ya que sinó me descargaba los ficheros php en lugar de ejecutarlos. El trozo al que me refiero es este:</p>
<pre class="brush: plain; title: ; notranslate">ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
&lt;Directory &quot;/usr/lib/cgi-bin&quot;&gt;
	AllowOverride None
	Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
	Order allow,deny
	Allow from all
&lt;/Directory&gt;
Action application/x-httpd-php /cgi-bin/php5</pre>
</blockquote>
<p>Reiniciad apache:</p>
<pre class="brush: bash; title: ; notranslate">sudo service apache2 restart</pre>
<p>Y para acabar de finiquitar, provad un fichero php en vuestro servidor:</p>
<pre class="brush: bash; title: ; notranslate">sudo echo '&lt;?php phpinfo()' &gt; /var/www/index.php</pre>
<p>Si el parámetro no funciona simplemente cread un fichero index.php en vuestro webroot con el contenido</p>
<pre class="brush: php; title: ; notranslate">&lt;?php phpinfo();</pre>
<p>Accedéis a <a href="http://localhost" rel="nofollow external">http://localhost</a> <em>et voilà</em>; Apache2 con módulo MPM-worker y PHP5 con FastCGI funcionando.</p>
<p>Si queréis verificar que realmente apache está funcionando en modo worker, podéis ejecutar el comando</p>
<pre class="brush: bash; title: ; notranslate">:~$ apache2 -l
Compiled in modules:
  core.c
  mod_log_config.c
  mod_logio.c
  worker.c
  http_core.c
  mod_so.c
</pre>
<p>Fijaros que está cargado el módulo <strong>worker.c</strong>. Os recuerdo que por defecto apache viene con <strong>prefork.c</strong> por defecto.</p>
<p>Ahora vendría &#8220;lo wapo&#8221;: el <em>fine tuning</em>. Una de las mejores fuentes que encontraréis para saber como &#8220;tunear&#8221; vuestro apache es la propia documentación de apache:</p>
<p><a href="httpd.apache.org/docs/2.2/mod/mpm_common.html" rel="nofollow external">httpd.apache.org/docs/2.2/mod/mpm_common.html</a></p>
<p>E ir revisando con herramientas como <code>top</code> o <code>ps</code> los recursos que consume. Éste otro enlace puede que os dé alguna ayuda, a pesar de que está enfocado a funcionar con glassfish:</p>
<p><a href="http://alexandru-ersenie.com/2011/09/19/performance-tuning-for-apache-worker-model-with-glassfish-application-server/" rel="nofollow external">http://alexandru-ersenie.com/2011/09/19/performance-tuning-for-apache-worker-model-with-glassfish-application-server/</a></p>
<p>Además tendríais que hacerle algún tipo de test de estrés, claro.. pero ese es un tema como para hacer un artículo entero, así que yo lo dejo para otro día, pero os animo a que busquéis por google, que seguro que encontráis unas cuantas vías para &#8220;estresar&#8221; vuestro servidor.</p>
<blockquote><p><strong>Más información y fuentes:</strong></p>
<ul>
<li>Multi-Processing Modules (MPMs): <a href="http://httpd.apache.org/docs/2.2/mpm.html" rel="nofollow">http://httpd.apache.org/docs/2.2/mpm.html</a></li>
<li>Apache MPM worker: <a href="http://httpd.apache.org/docs/2.2/mod/worker.html" rel="nofollow">http://httpd.apache.org/docs/2.2/mod/worker.html</a></li>
<li>Error 403 en ficheros PHP utilizando apache-mpm-worker: <a href="http://stackoverflow.com/a/10557461/407456" rel="nofollow">http://stackoverflow.com/a/10557461/407456</a></li>
<li>Test de velocidad comparativo entre prefork y worker: <a href="http://getasysadmin.com/2011/11/apache2-worker-prefork-ispconfig-benchmark/" rel="nofollow">http://getasysadmin.com/2011/11/apache2-worker-prefork-ispconfig-benchmark/</a></li>
<li>Improving PHP performance with apache2-mpm-worker mod_fcgid: <a href="http://phphints.wordpress.com/2009/01/10/improving-php-performance-with-apache2-mpm-worker-mod_fcgid-2/" rel="nofollow">http://phphints.wordpress.com/2009/01/10/improving-php-performance-with-apache2-mpm-worker-mod_fcgid-2/</a></li>
</ul>
</blockquote>
<p>PS. A todo esto.. todo el tutorial lo he hecho utilizando Ubuntu Server 12.04 x64 <img class="dtse-img dtse-post-2053" src='http://www.racotecnic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
 <img class="dtse-img dtse-post-2053" src="http://www.racotecnic.com/?feed-stats-post-id=2053" width="1" height="1" style="display: none;" />


		<!-- Added by WP-DragToShare-eXtended Plugin -->
		<script type="text/javascript">
			dtsv.dtse_post_2053_permalink = 'http://www.racotecnic.com/2012/05/configurar-apache-en-modo-worker-con-php5-y-fastcgi-en-ubuntu-server/';
			dtsv.dtse_post_2053_title = 'Configurar apache en modo mpm worker con php5 y fastcgi en ubuntu server';
		</script>
		<!-- End of WP-DragToShare-eXtended Plugin --><div class='yarpp-related-rss'>
<p style="font-weight:bold">Entrades relacionades:<ol>
<li><a href='http://www.racotecnic.com/2012/05/instalar-php-5-4-x-en-ubuntu/' rel='bookmark' title='Instalar PHP 5.4.X en Ubuntu'>Instalar PHP 5.4.X en Ubuntu</a></li>
<li><a href='http://www.racotecnic.com/2008/12/instal%c2%b7lar-ubuntu-server/' rel='bookmark' title='Instal·lar ubuntu server'>Instal·lar ubuntu server</a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.racotecnic.com/2012/05/configurar-apache-en-modo-worker-con-php5-y-fastcgi-en-ubuntu-server/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Instalar PHP 5.4.X en Ubuntu</title>
		<link>http://www.racotecnic.com/2012/05/instalar-php-5-4-x-en-ubuntu/</link>
		<comments>http://www.racotecnic.com/2012/05/instalar-php-5-4-x-en-ubuntu/#comments</comments>
		<pubDate>Mon, 14 May 2012 11:00:46 +0000</pubDate>
		<dc:creator>Booletaire</dc:creator>
				<category><![CDATA[Administració]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programació]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Ubuntu 11.10]]></category>
		<category><![CDATA[Ubuntu 12.04]]></category>
		<category><![CDATA[Ubuntu Oneiric]]></category>
		<category><![CDATA[Ubuntu Quantal]]></category>

		<guid isPermaLink="false">http://www.racotecnic.com/?p=2071</guid>
		<description><![CDATA[Podéis instalar la versión más reciente estable de PHP 5.4 en vuestro Ubuntu muy fácilmente gracias a este repositorio: https://launchpad.net/~ondrej/+archive/php5 Añadid el repositorio siguiendo estos pasos y debería funcionar (provado en Ubuntu 12.04): Si no tenéis el comando add-apt-repository es porque no tenéis el paquete python-software-properties instalado. Instaladlo con aptitude si es así y podréis [...]]]></description>
			<content:encoded><![CDATA[<p>Podéis instalar la versión más reciente estable de PHP 5.4 en vuestro Ubuntu muy fácilmente gracias a este repositorio:</p>
<p><a href="https://launchpad.net/~ondrej/+archive/php5" rel="nofollow external">https://launchpad.net/~ondrej/+archive/php5</a></p>
<p>Añadid el repositorio siguiendo estos pasos y debería funcionar (provado en Ubuntu 12.04):</p>
<pre class="brush: bash; title: ; notranslate">sudo add-apt-repository ppa:ondrej/php5</pre>
<p>Si no tenéis el comando <code>add-apt-repository</code> es porque no tenéis el paquete <code>python-software-properties</code> instalado. Instaladlo con aptitude si es así y podréis ejecutar el comando sin problemas.</p>
<p>Una vez añadido el repositorio actualizáis la lista de paquetes:</p>
<pre class="brush: bash; title: ; notranslate">sudo apt-get update</pre>
<p>E instaláis php5:</p>
<pre class="brush: bash; title: ; notranslate">sudo apt-get install php5 php5-cli php5-whatever</pre>
<p>Probado en Ubuntu 11.10 y 12.04 x64 tanto con el módulo de apache mod_php5 como con fastFCGI (con apache en modo worker).</p>
 <img class="dtse-img dtse-post-2071" src="http://www.racotecnic.com/?feed-stats-post-id=2071" width="1" height="1" style="display: none;" />


		<!-- Added by WP-DragToShare-eXtended Plugin -->
		<script type="text/javascript">
			dtsv.dtse_post_2071_permalink = 'http://www.racotecnic.com/2012/05/instalar-php-5-4-x-en-ubuntu/';
			dtsv.dtse_post_2071_title = 'Instalar PHP 5.4.X en Ubuntu';
		</script>
		<!-- End of WP-DragToShare-eXtended Plugin --><div class='yarpp-related-rss'>
<p style="font-weight:bold">Entrades relacionades:<ol>
<li><a href='http://www.racotecnic.com/2012/05/configurar-apache-en-modo-worker-con-php5-y-fastcgi-en-ubuntu-server/' rel='bookmark' title='Configurar apache en modo mpm worker con php5 y fastcgi en ubuntu server'>Configurar apache en modo mpm worker con php5 y fastcgi en ubuntu server</a></li>
<li><a href='http://www.racotecnic.com/2009/11/instalar-google-chromium-en-ubuntu/' rel='bookmark' title='Instalar Google Chromium en Ubuntu'>Instalar Google Chromium en Ubuntu</a></li>
<li><a href='http://www.racotecnic.com/2009/01/instalar-nokia-trolltech-qt-4-en-mac-os-x/' rel='bookmark' title='Instalar Nokia Trolltech Qt 4 en Mac OS X'>Instalar Nokia Trolltech Qt 4 en Mac OS X</a></li>
<li><a href='http://www.racotecnic.com/2009/04/instalar-android-sdk-en-mac-os-x-y-configurar-netbeans/' rel='bookmark' title='Instalar Android SDK en Mac OS X y configurar Netbeans'>Instalar Android SDK en Mac OS X y configurar Netbeans</a></li>
<li><a href='http://www.racotecnic.com/2011/03/acceso-root-a-estructura-de-ficheros-so-android-2-2-en-toshiba-folio-100/' rel='bookmark' title='Acceso root a estructura de ficheros SO Android 2.2 en Toshiba Folio 100'>Acceso root a estructura de ficheros SO Android 2.2 en Toshiba Folio 100</a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.racotecnic.com/2012/05/instalar-php-5-4-x-en-ubuntu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pantalla completa con HTML5</title>
		<link>http://www.racotecnic.com/2012/05/pantalla-completa-con-html5/</link>
		<comments>http://www.racotecnic.com/2012/05/pantalla-completa-con-html5/#comments</comments>
		<pubDate>Sat, 12 May 2012 17:48:00 +0000</pubDate>
		<dc:creator>Booletaire</dc:creator>
				<category><![CDATA[Programació]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[fullscreen]]></category>
		<category><![CDATA[Gecko]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[Webkit]]></category>

		<guid isPermaLink="false">http://www.racotecnic.com/?p=2031</guid>
		<description><![CDATA[El modo pantalla completa es un modo bastante molón que quizás ya hayáis visto en algunas páginas (como fb por ejemplo; el botón de pantalla completa de las fotos). Por ahora sólo es compatible con navegadores basados en Gecko (como Firefox) y Webkit (como Chrome). Sabiendo esto, simplemente tendremos que poner algún IF Podéis probarlo [...]]]></description>
			<content:encoded><![CDATA[<p>El modo pantalla completa es un modo bastante molón que quizás ya hayáis visto en algunas páginas (como fb por ejemplo; el botón de pantalla completa de las fotos).</p>
<p>Por ahora sólo es compatible con navegadores basados en Gecko (como Firefox) y Webkit (como Chrome).</p>
<p>Sabiendo esto, simplemente tendremos que poner algún IF <img class="dtse-img dtse-post-2031" src='http://www.racotecnic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: jscript; title: ; notranslate">
    fullscreen = function(e){
          if (e.webkitRequestFullScreen) {
            e.webkitRequestFullScreen();
          } else if(e.mozRequestFullScreen) {
            e.mozRequestFullScreen();
          }
      }
    document.getElementById('ejemplo-fullscreen').onclick = function(){
        fullscreen(document.getElementById('content'));
    }
</pre>
<p>Podéis probarlo haciendo click <a href="#fullscreen" id="ejemplo-fullscreen">aquí</a><br />
<script>
    fullscreen = function(e){
          if (e.webkitRequestFullScreen) {
            e.webkitRequestFullScreen();
          } else if(e.mozRequestFullScreen) {
            e.mozRequestFullScreen();
          }
      }
    document.getElementById('ejemplo-fullscreen').onclick = function(){
        fullscreen(document.getElementById('content'));
        return false;
    }
</script></p>
 <img class="dtse-img dtse-post-2031" src="http://www.racotecnic.com/?feed-stats-post-id=2031" width="1" height="1" style="display: none;" />


		<!-- Added by WP-DragToShare-eXtended Plugin -->
		<script type="text/javascript">
			dtsv.dtse_post_2031_permalink = 'http://www.racotecnic.com/2012/05/pantalla-completa-con-html5/';
			dtsv.dtse_post_2031_title = 'Pantalla completa con HTML5';
		</script>
		<!-- End of WP-DragToShare-eXtended Plugin --><div class='yarpp-related-rss'>
<p style="font-weight:bold">Entrades relacionades:<ol>
<li><a href='http://www.racotecnic.com/2011/09/tomar-screenshots-capturas-de-pantalla-de-paginas-web-desde-la-consola-de-linux/' rel='bookmark' title='Tomar screenshots / capturas de pantalla de páginas web desde la consola de Linux'>Tomar screenshots / capturas de pantalla de páginas web desde la consola de Linux</a></li>
<li><a href='http://www.racotecnic.com/2011/02/introduccion-a-html5-principios-basicos/' rel='bookmark' title='Introducción a HTML5 &#8211; principios básicos'>Introducción a HTML5 &#8211; principios básicos</a></li>
<li><a href='http://www.racotecnic.com/2010/02/css-hacks-para-firefox-internet-explorer-chrome-opera-safari/' rel='bookmark' title='CSS hacks para Firefox, Internet Explorer, Chrome, Opera, Safari&#8230;'>CSS hacks para Firefox, Internet Explorer, Chrome, Opera, Safari&#8230;</a></li>
<li><a href='http://www.racotecnic.com/2009/10/subida-de-ficheros-con-uploadify-y-validacion-ajax-en-cakephp/' rel='bookmark' title='Subida de ficheros con Uploadify y validación Ajax en CakePHP'>Subida de ficheros con Uploadify y validación Ajax en CakePHP</a></li>
<li><a href='http://www.racotecnic.com/2009/04/crear-transicion-de-imagenes-para-gallery2-con-jquery/' rel='bookmark' title='Crear transición de imágenes para Gallery2 con jQuery'>Crear transición de imágenes para Gallery2 con jQuery</a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.racotecnic.com/2012/05/pantalla-completa-con-html5/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Mapping Hotel Barcelona by priosanchez.com</title>
		<link>http://www.racotecnic.com/2012/05/mapping-hotel-barcelona-by-priosanchez-com/</link>
		<comments>http://www.racotecnic.com/2012/05/mapping-hotel-barcelona-by-priosanchez-com/#comments</comments>
		<pubDate>Mon, 07 May 2012 11:49:06 +0000</pubDate>
		<dc:creator>Booletaire</dc:creator>
				<category><![CDATA[Vídeo]]></category>
		<category><![CDATA[Visuals]]></category>
		<category><![CDATA[arena]]></category>
		<category><![CDATA[mapping]]></category>

		<guid isPermaLink="false">http://www.racotecnic.com/?p=2039</guid>
		<description><![CDATA[Seguramente no os acordéis, pero Raúl de priosanchez.com publicó hace tiempo cómo llevar a cabo una instalación visual para mapear sobre superficies delimitadas. Os pongo un vídeo de uno de sus últimos trabajos: un mapping realizado en el hotel Renaissance que bien seguro os va a gustar A pesar de que el vídeo habla bastante [...]]]></description>
			<content:encoded><![CDATA[<p>Seguramente no os acordéis, pero Raúl de <a title="Ver la web" href="http://priosanchez.com" rel="external">priosanchez.com</a> publicó hace tiempo <a href="http://www.racotecnic.com/2009/04/instalacion-visual/" title="leer entrada" target="_blank">cómo llevar a cabo una instalación visual para mapear sobre superficies delimitadas.</a></p>
<p>Os pongo un vídeo de uno de sus últimos trabajos: un mapping realizado en el hotel Renaissance que bien seguro os va a gustar <img class="dtse-img dtse-post-2039" src='http://www.racotecnic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><iframe src="http://player.vimeo.com/video/41313549" width="600" height="340" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>A pesar de que el vídeo habla bastante por sí solo, lamentamos no poder dar más detalles sobre el montaje.. no nos sobra el tiempo precisamente últimamente :\</p>
 <img class="dtse-img dtse-post-2039" src="http://www.racotecnic.com/?feed-stats-post-id=2039" width="1" height="1" style="display: none;" />


		<!-- Added by WP-DragToShare-eXtended Plugin -->
		<script type="text/javascript">
			dtsv.dtse_post_2039_permalink = 'http://www.racotecnic.com/2012/05/mapping-hotel-barcelona-by-priosanchez-com/';
			dtsv.dtse_post_2039_title = 'Mapping Hotel Barcelona by priosanchez.com';
		</script>
		<!-- End of WP-DragToShare-eXtended Plugin --><div class='yarpp-related-rss yarpp-related-none'>
<p style="font-weight:bold">No hi ha cap entrada relacionada</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.racotecnic.com/2012/05/mapping-hotel-barcelona-by-priosanchez-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox ha muerto y el próximo será Internet Explorer</title>
		<link>http://www.racotecnic.com/2012/02/firefox-ha-muerto-y-el-proximo-sera-internet-explorer/</link>
		<comments>http://www.racotecnic.com/2012/02/firefox-ha-muerto-y-el-proximo-sera-internet-explorer/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 12:47:42 +0000</pubDate>
		<dc:creator>Booletaire</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[StatCounter]]></category>

		<guid isPermaLink="false">http://www.racotecnic.com/?p=2010</guid>
		<description><![CDATA[Hace ya un tiempo que Chrome superó las el número de usuarios de Firefox, y seguro que ya lo habéis visto de varias fuentes.. http://www.extremetech.com/computing/116885-the-death-of-firefox http://www.genbetadev.com/desarrollo-web/la-muerte-anunciada-de-firefox Lo que no se menciona, y que se puede observar fácilmente viendo las estadísticas de statscounter, es que Internet Explorer sigue éste mismo camino. Si miramos la gráfica podemos [...]]]></description>
			<content:encoded><![CDATA[<p>Hace ya un tiempo que Chrome superó las el número de usuarios de Firefox, y seguro que ya lo habéis visto de varias fuentes..</p>
<p>http://www.extremetech.com/computing/116885-the-death-of-firefox</p>
<p>http://www.genbetadev.com/desarrollo-web/la-muerte-anunciada-de-firefox</p>
<p><a href="http://www.extremetech.com/wp-content/uploads/2012/02/firefox-market-share-trend-640x374.jpg"><img class="aligncenter dtse-img dtse-post-2010" title="firefox-market-share-trend-640x374" src="http://www.extremetech.com/wp-content/uploads/2012/02/firefox-market-share-trend-640x374.jpg" alt="firefox-market-share-trend-640x374" width="640" height="374" /></a></p>
<p>Lo que no se menciona, y que se puede observar fácilmente viendo las estadísticas de statscounter, es que Internet Explorer sigue éste mismo camino. Si miramos la gráfica podemos preveer fácilmente que en menos de medio año Chrome superaría Internet Explorer del mismo modo que lo hizo con Firefox.</p>
<p><a href="http://www.racotecnic.com/wp-content/uploads/2012/02/StatCounter-browser-ww-monthly-201101-201201.jpg"><img class="size-full wp-image-2026 aligncenter dtse-img dtse-post-2010 dtse-img dtse-post-2010" title="" src="http://www.racotecnic.com/wp-content/uploads/2012/02/StatCounter-browser-ww-monthly-201101-201201.jpg" alt="StatCounter-browser-ww-monthly-201101-201201" width="676" height="395" /></a></p>
<p>Ésto, claro, sin tener en cuenta que pronto sacarán Internet Explorer 10 con su <em>nuevo y flagrante</em> Windows 8, cosa que podría ampliar el tiempo hasta finales de año.</p>
<p>Sea como sea&#8230; el caso es que Internet Explorer también tiene los días contados.. y no sabéis qué ganas tengo de que llegue ese día xDD</p>
 <img src="http://www.racotecnic.com/?feed-stats-post-id=2010" width="1" height="1" style="display: none;" />


		<!-- Added by WP-DragToShare-eXtended Plugin -->
		<script type="text/javascript">
			dtsv.dtse_post_2010_permalink = 'http://www.racotecnic.com/2012/02/firefox-ha-muerto-y-el-proximo-sera-internet-explorer/';
			dtsv.dtse_post_2010_title = 'Firefox ha muerto y el próximo será Internet Explorer';
		</script>
		<!-- End of WP-DragToShare-eXtended Plugin --><div class='yarpp-related-rss'>
<p style="font-weight:bold">Entrades relacionades:<ol>
<li><a href='http://www.racotecnic.com/2010/02/css-hacks-para-firefox-internet-explorer-chrome-opera-safari/' rel='bookmark' title='CSS hacks para Firefox, Internet Explorer, Chrome, Opera, Safari&#8230;'>CSS hacks para Firefox, Internet Explorer, Chrome, Opera, Safari&#8230;</a></li>
<li><a href='http://www.racotecnic.com/2009/05/color-explorer/' rel='bookmark' title='Color Explorer'>Color Explorer</a></li>
<li><a href='http://www.racotecnic.com/2009/10/spoon-app-studio-cuelga-tus-aplicaciones-en-internet-para-usarlas-con-el-navegador/' rel='bookmark' title='Spoon App Studio: Cuelga tus aplicaciones en internet para usarlas con el navegador'>Spoon App Studio: Cuelga tus aplicaciones en internet para usarlas con el navegador</a></li>
<li><a href='http://www.racotecnic.com/2009/03/cracking-cuenta-premium-de-megaupload-via-firefox/' rel='bookmark' title='Cracking cuenta premium de Megaupload vía Firefox'>Cracking cuenta premium de Megaupload vía Firefox</a></li>
<li><a href='http://www.racotecnic.com/2010/02/smashing-magazine-diferencias-entre-ie6-ie7-e-ie8/' rel='bookmark' title='Smashing magazine: Diferencias entre IE6, IE7 e IE8'>Smashing magazine: Diferencias entre IE6, IE7 e IE8</a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.racotecnic.com/2012/02/firefox-ha-muerto-y-el-proximo-sera-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tomar screenshots / capturas de pantalla de páginas web desde la consola de Linux</title>
		<link>http://www.racotecnic.com/2011/09/tomar-screenshots-capturas-de-pantalla-de-paginas-web-desde-la-consola-de-linux/</link>
		<comments>http://www.racotecnic.com/2011/09/tomar-screenshots-capturas-de-pantalla-de-paginas-web-desde-la-consola-de-linux/#comments</comments>
		<pubDate>Sun, 11 Sep 2011 12:18:28 +0000</pubDate>
		<dc:creator>Booletaire</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programació]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[ImageMagick]]></category>
		<category><![CDATA[VNC]]></category>

		<guid isPermaLink="false">http://www.racotecnic.com/?p=2011</guid>
		<description><![CDATA[Puede que os interese hacer capturas de pantalla de páginas web para poder mostrar una previsualización de una web en el apartado de links de vuestro site. Para ello podéis utilizar alguno de los muchos servicios que corren por ahí —como Websnapr, WebShotsPro, thumbalizr&#8230; O bien, si disponéis de un servidor dedicado (véase el que [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.racotecnic.com/wp-content/uploads/2011/09/prova2.jpg"><img class="alignright size-thumbnail wp-image-2016 dtse-img dtse-post-2011" title="prova2" src="http://www.racotecnic.com/wp-content/uploads/2011/09/prova2-150x150.jpg" alt="" width="150" height="150" /></a>Puede que os interese <strong>hacer capturas de pantalla de páginas web</strong> para poder <strong>mostrar una previsualización de una</strong><strong> web</strong> en el apartado de links de vuestro site.</p>
<p>Para ello podéis utilizar alguno de los muchos servicios que corren por ahí —como <a href="http://www.websnapr.com/" rel="external nofollow">Websnapr</a>, <a href="http://www.webshotspro.com/" rel="external nofollow">WebShotsPro</a>, <a href="http://www.thumbalizr.com/" rel="external nofollow">thumbalizr</a>&#8230; O bien, si disponéis de un servidor dedicado (véase el que todos tenemos en la cocina o el baño) podéis crear vuestro propio script para tomar capturas de pantalla. Y ésto es a lo que vamos <img src='http://www.racotecnic.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Antes de empezar.. os advierto que he hecho las pruebas desde ubuntu server maverick, pero esto en teoría debería de ser más o menos igual para el resto de versiones (tanto desktop como server).</p>
<p>Si lo que queréis es hacer capturas de pantalla desde Windows, quizás os interese <a href="http://iecapt.sourceforge.net/" target="_blank">IECapt</a>.</p>
<p>Primero de todo, necesitamos unos cuantos paquetes esenciales&#8230;</p>
<ul>
<li>Vnc4server</li>
<li>Firefox</li>
<li>ImageMagick</li>
</ul>
<p>Con VNCServer crearemos una instancia virtual en la que ejecutaremos Firefox para, posteriormente, tomar la captura de la pantalla con el método import de imagemagick.</p>
<p>Instalad los paquetes como haríais habitualmente&#8230;</p>
<pre class="brush: bash; title: ; notranslate">sudo apt-get install vnc4server firefox imagemagick</pre>
<p><span id="more-2011"></span></p>
<p>Si trabajáis con ubuntu server os va a doler porque firefox baja un huevo de paquetes.. pero es lo que hay U_U</p>
<p>Una vez instalados todos los paquetes, vamos a crear nuestro script para generar screenshots:</p>
<pre class="brush: bash; title: ; notranslate">#!/bin/bash

display=&quot;:23&quot;
export DISPLAY=&quot;:23&quot;

vncserver -geometry 1280x1024 -depth 24 -name &quot;screenshoots&quot; $display &amp;
# esperamos a que cargue vnc sin problemas...
sleep 5
# cargamos firefox con una página en blanco
firefox -display $display -width 1280 -height 1024 -url &quot;about:blank&quot; &amp;

while read -a line ; do
	echo &quot;Carregant... ${line[1]}&quot;
	firefox -remote &quot;openURL(${line[1]})&quot;
	# o bien... firefox -display $display &quot;${line[1]}&quot;
	sleep 5
	echo &quot;Desant... ${line[0]}.jpg&quot;
	import -window root &quot;${line[0]}&quot;.jpg
done &lt; listado.txt

vncserver -kill $display</pre>
<p>¿Qué hace este script?</p>
<ol>
<li>Crea una instancia de vncserver a 1280x1024px</li>
<li>Carga firefox en esa instancia a la misma resolución</li>
<li>Carga el fichero &#8220;listado.txt&#8221; (que ahora veremos) que contiene una línea con una palabra única seguida de un tabulador y una URL.</li>
<li>Abre la página web que pertoque, esperando 5 segundos para dar tiempo a cargar</li>
<li>Toma la captura de pantalla y la guarda con la palabra única y extensión .jpg</li>
</ol>
<p>El fichero &#8220;listado.txt&#8221; deberá estar en el mismo directorio que el script y ser en este formato:</p>
<pre class="brush: plain; title: ; notranslate">underave	http://www.underave.net
musicavermella	http://www.musicavermella.com
thefuture	http://www.thefutureimperfect.com
snooppets	http://www.snooppets.com
</pre>
<p><strong>Es importante que este fichero tenga un salto de línea al final</strong>, sino la última url dará error.</p>
<p>Hecho esto ya debería de funcionar, simplemente ejecutad el script y veréis que en pantalla van saliendo los mensajes &#8220;Carregant&#8221; (Cargando) y &#8220;Desant&#8221; (Guardando) a medida que va avanzando en el listado.</p>
<p>Cuando tengáis los screenshots probablemente os daréis cuenta de que la imagen no es sólo de la página web, sino que también sale el navegador.</p>
<p>Para evitar esto he estado probando con parámetro <code>-screen</code> en lugar de <code>-window</code> pero supongo que no hace lo que pensaba que hacía xD. Así que la única solución que se me ocurre es que ejecutéis una instancia de VNCServer con firefox para poder ocultarle todas las barras posibles (la de navegación y la de favoritos).</p>
<pre class="brush: bash; title: ; notranslate">export DISPLAY=&quot;:23&quot;
vncserver -geometry 1280x1024 -depth 24 -name &quot;screenshoots&quot; :23 &amp;
firefox -display :23 -width 1280 -height 1024 -url &quot;about:blank&quot; &amp;</pre>
<p>Una vez esté corriendo utilizad vuestro cliente de vnc habitual (yo utilizo <a href="http://www.tightvnc.com/" rel="nofollow external">TightVNC</a>) y conectaros para poder configurar firefox. En el caso de TightVNC, para indicar el display que estamos utilizando simplemente hay que concatenarlo al final de la ip o nombre de host ([IP|HOST]:DISPLAY), por ejemplo <code>192.168.1.2:23</code></p>
<p>Si además queréis que no se muestren las pestañas, abrid las opciones de firefox, buscad la opción que dice &#8220;Mostrar pestañas siempre&#8221; y desmarcadla. Ahora, para que esto funcione, tenemos que decirle a firefox que nos abra las nuevas ventanas en la ventana que esté abierta, ya que si nos abre una pestaña más nos mostrará de nuevo la barra de pestañas.</p>
<p>Si queréis evitar esto, en la barra de navegación (utilizad Control+L si os la habéis cargado ya) introducid la URL <code>about:config</code>, buscad el registro <code>browser.link.open_newwindow</code> y cambiad su valor de <strong>3</strong> a <strong>2</strong>.</p>
<p>Cerrad vuestro firefox con normalidad y volved a ejecutar el script para ver el resultado.</p>
<p>Pues ahí lo tenéis, utilizando un poco la imaginación, con algún cron y alguna clase en PHP podríais tener las miniaturas guardadas en vuestra web.</p>
<p>Si queréis recortar las imágenes para que no se vean el resto de bordes de firefox podéis tratar de utilizar el método <a href="http://www.imagemagick.org/script/mogrify.php?ImageMagick=th1vkjq027vromjp62lk806r03" rel="nofollow external">mogrify</a> de ImageMagick para hacer un crop.</p>
<p>O podéis hacerlo mediante PHP con alguna clase como <a title="Clase PHP para tratar imágenes (rotar, redimensionar, añadir marcas de agua..)" href="http://www.racotecnic.com/2011/04/clase-php-para-tratar-imagenes-rotar-redimensionar-anadir-marcas-de-agua/">Watimage</a> <img src='http://www.racotecnic.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<blockquote><p><strong>Fuentes&#8230;</strong></p>
<ul>
<li><a href="http://www.debian-administration.org/article/413/website_screenshot_server_on_debian_stable" rel="external nofollow">Website screenshot server on debian stable</a></li>
<li><a href="http://stackoverflow.com/questions/2781000/processing-a-tab-delimited-file-with-shell-script-processing/2787573#2787573" rel="external nofollow">Processing a tab delimited file with shell script processing</a></li>
<li><a href="https://developer.mozilla.org/en/Command_Line_Options#-ProfileManager" rel="external nofollow">Mozilla Firefox Command Line Options</a></li>
<li><a href="http://www-archive.mozilla.org/unix/remote.html" rel="external nofollow">Remote control of unix mozilla</a></li>
<li><a href="http://www.imagemagick.org/www/import.html" rel="external nofollow">ImageMagick import</a></li>
<li><a href="http://forums.mozillazine.org/viewtopic.php?f=38&amp;t=1648545" rel="external nofollow">Firefox -remote using the *same* tab</a></li>
</ul>
</blockquote>
 <img src="http://www.racotecnic.com/?feed-stats-post-id=2011" width="1" height="1" style="display: none;" />


		<!-- Added by WP-DragToShare-eXtended Plugin -->
		<script type="text/javascript">
			dtsv.dtse_post_2011_permalink = 'http://www.racotecnic.com/2011/09/tomar-screenshots-capturas-de-pantalla-de-paginas-web-desde-la-consola-de-linux/';
			dtsv.dtse_post_2011_title = 'Tomar screenshots / capturas de pantalla de páginas web desde la consola de Linux';
		</script>
		<!-- End of WP-DragToShare-eXtended Plugin --><div class='yarpp-related-rss'>
<p style="font-weight:bold">Entrades relacionades:<ol>
<li><a href='http://www.racotecnic.com/2010/04/web-site-inspiration-inspiracion-para-creacion-de-paginas-web/' rel='bookmark' title='Web site inspiration &#8211; Inspiración para creación de paginas web'>Web site inspiration &#8211; Inspiración para creación de paginas web</a></li>
<li><a href='http://www.racotecnic.com/2012/05/pantalla-completa-con-html5/' rel='bookmark' title='Pantalla completa con HTML5'>Pantalla completa con HTML5</a></li>
<li><a href='http://www.racotecnic.com/2009/03/crackear-redes-wifi-con-clave-wep-desde-ubuntu-linux/' rel='bookmark' title='Crackear redes wifi con clave WEP desde Ubuntu linux'>Crackear redes wifi con clave WEP desde Ubuntu linux</a></li>
<li><a href='http://www.racotecnic.com/2009/10/estadisticas-web-con-woopra/' rel='bookmark' title='Estadísticas web con Woopra'>Estadísticas web con Woopra</a></li>
<li><a href='http://www.racotecnic.com/2011/02/backups-incrementales-via-ftp-en-linux/' rel='bookmark' title='Backups incrementales vía FTP en Linux'>Backups incrementales vía FTP en Linux</a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.racotecnic.com/2011/09/tomar-screenshots-capturas-de-pantalla-de-paginas-web-desde-la-consola-de-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seguimos aquí</title>
		<link>http://www.racotecnic.com/2011/08/seguimos-aqui/</link>
		<comments>http://www.racotecnic.com/2011/08/seguimos-aqui/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 13:05:55 +0000</pubDate>
		<dc:creator>Booletaire</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.racotecnic.com/?p=2004</guid>
		<description><![CDATA[Aunque la cosa parezca estar un poco muerta, seguimos por aquí! Como todos sabemos el tiempo es oro y el oro escasea últimamente así que por A o por B no hemos podido estar muy por actualizar el blog. Yo mismo hace ya tiempo que tengo ganas de hacer algunas entradas de CakePHP, que desde [...]]]></description>
			<content:encoded><![CDATA[<p>Aunque la cosa parezca estar un poco muerta, seguimos por aquí!</p>
<p>Como todos sabemos el tiempo es oro y el oro escasea últimamente así que por A o por B no hemos podido estar muy por actualizar el blog.</p>
<p>Yo mismo hace ya tiempo que tengo ganas de hacer algunas entradas de CakePHP, que desde las últimas que hice creo que he avanzado notablemente. Entre ellas me gustaría eliminar las que corren por aquí de subidas de ficheros, que me dan auténtico repelús cada vez que las veo.. y hacer una con un sencillo sistema de permisos para CakePHP pero con las ventajas de cualquier sistema de permisos avanzados (grupos de usuarios, permisos y demás).</p>
<p>Pues eso, pasad un buen verano y cuando volváis de vacaciones no olvidéis echar un vistazo al racó! <img class="dtse-img dtse-post-2004" src='http://www.racotecnic.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
 <img class="dtse-img dtse-post-2004" src="http://www.racotecnic.com/?feed-stats-post-id=2004" width="1" height="1" style="display: none;" />


		<!-- Added by WP-DragToShare-eXtended Plugin -->
		<script type="text/javascript">
			dtsv.dtse_post_2004_permalink = 'http://www.racotecnic.com/2011/08/seguimos-aqui/';
			dtsv.dtse_post_2004_title = 'Seguimos aquí';
		</script>
		<!-- End of WP-DragToShare-eXtended Plugin --><div class='yarpp-related-rss yarpp-related-none'>
<p style="font-weight:bold">No hi ha cap entrada relacionada</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.racotecnic.com/2011/08/seguimos-aqui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Larga vida al audioblog</title>
		<link>http://www.racotecnic.com/2011/07/larga-vida-al-audioblog/</link>
		<comments>http://www.racotecnic.com/2011/07/larga-vida-al-audioblog/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 18:41:35 +0000</pubDate>
		<dc:creator>Booletaire</dc:creator>
				<category><![CDATA[Audio]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.racotecnic.com/?p=1994</guid>
		<description><![CDATA[El Audioblog* de underave ha sido, hasta el día de hoy, un punto de encuentro donde algunos Djs y Productores se habrán dejado caer alguna que otra vez, ya fuera para leer novedades sobre música, o para inspirarse con alguna de las entradas reflexivas que contenía. La inspiración por parte de los redactores colaboradores duró [...]]]></description>
			<content:encoded><![CDATA[<p>El <a title="Maybe it's broken... :\&quot; data-mce-href=" href="http://audioblog.underave.net" target="_blank">Audioblog*</a> de underave ha sido, hasta el día de hoy, un punto de encuentro donde algunos Djs y Productores se habrán dejado caer alguna que otra vez, ya fuera para leer novedades sobre música, o para inspirarse con alguna de las entradas reflexivas que contenía.</p>
<p>La inspiración por parte de los redactores colaboradores duró un año y desde entonces no se le ha dado más uso que el de consulta de sus antiguos contenidos.</p>
<p>Desde <a title="Underave" href="http://www.underave.net" target="_blank">underave</a> decidimos ya hace tiempo clausurar el blog por tal de poder destinar los recursos que ocupaba para otros fines.</p>
<p>Es por eso que hoy escribo esta entrada, para notificaros que todos los contenidos rescatables de dicho blog han sido traspasados a aquí, al Racó Tècnic, donde podréis consultarlos bajo la categoría &#8220;General&#8221;.</p>
<p>A continuación os dejo un listado con los artículos rescatados:</p>
<ul>
<li><a href="../2010/01/sintesis-fm-el-patito-feo-de-la-sintetizacion-parte-1/" rel="bookmark">Síntesis FM: El patito feo de la sintetización. (Parte 1)</a></li>
<li><a class="title" href="../2009/12/arnold-steiner-a-k-a-as1/" rel="bookmark">Arnold Steiner a.k.a AS1</a></li>
<li><a class="title" href="../2009/12/bandcamp-vende-tu-musica-a-tu-precio-justo/" rel="bookmark">Bandcamp: Vende tu música, a tu precio justo. <img class="dtse-img dtse-post-1994" src='http://www.racotecnic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </a></li>
<li><a class="title" href="../2009/07/overdub-el-primer-comic-didactico-para-productores/" rel="bookmark">OVERDUB: El primer cómic didáctico para productores</a></li>
<li><a class="title" href="../2009/04/la-musica-electronica-un-estat-emocional/" rel="bookmark">La música electrònica, un estat emocional</a></li>
<li><a class="title" href="../2009/04/hardcore-de-ayer-y-hoy/" rel="bookmark">Hardcore de ayer y hoy</a></li>
<li><a class="title" href="../2009/04/north-korean-speedcore/" rel="bookmark">North-Korean SPEEDCORE</a></li>
<li><a class="title" href="../2009/03/derechos-de-autor/" rel="bookmark">Derechos de Autor</a></li>
</ul>
<p>* El enlace está puesto simbólicamente ya que voy a eliminar el blog ahora mismo xD</p>
 <img class="dtse-img dtse-post-1994" src="http://www.racotecnic.com/?feed-stats-post-id=1994" width="1" height="1" style="display: none;" />


		<!-- Added by WP-DragToShare-eXtended Plugin -->
		<script type="text/javascript">
			dtsv.dtse_post_1994_permalink = 'http://www.racotecnic.com/2011/07/larga-vida-al-audioblog/';
			dtsv.dtse_post_1994_title = 'Larga vida al audioblog';
		</script>
		<!-- End of WP-DragToShare-eXtended Plugin --><div class='yarpp-related-rss yarpp-related-none'>
<p style="font-weight:bold">No hi ha cap entrada relacionada</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.racotecnic.com/2011/07/larga-vida-al-audioblog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clase PHP para tratar imágenes (rotar, redimensionar, añadir marcas de agua..)</title>
		<link>http://www.racotecnic.com/2011/04/clase-php-para-tratar-imagenes-rotar-redimensionar-anadir-marcas-de-agua/</link>
		<comments>http://www.racotecnic.com/2011/04/clase-php-para-tratar-imagenes-rotar-redimensionar-anadir-marcas-de-agua/#comments</comments>
		<pubDate>Sat, 16 Apr 2011 20:03:12 +0000</pubDate>
		<dc:creator>Booletaire</dc:creator>
				<category><![CDATA[Programació]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[CakePHP 1.1]]></category>
		<category><![CDATA[CakePHP 1.2]]></category>
		<category><![CDATA[CakePHP 1.3]]></category>
		<category><![CDATA[Codi]]></category>
		<category><![CDATA[Component]]></category>
		<category><![CDATA[marca d'aigua]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Watermark]]></category>

		<guid isPermaLink="false">http://www.racotecnic.com/?p=1892</guid>
		<description><![CDATA[Actualizado: Tanto la clase como este post han sido actualizados a fecha 14 de enero de 2012. Hace ya un tiempo publiqué (en inglés) un Componente para el tratamiento de imágenes en CakePHP. Hoy me he pasado un rato actualizándolo y aprovechando he decidido publicar una entrada con los cambios. Aunque la he modificado considerablemente, [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>Actualizado:</strong> Tanto la clase como este post han sido actualizados a fecha 14 de enero de 2012.</p></blockquote>
<p><img class="alignright size-full wp-image-1473 dtse-img dtse-post-1892" title="all_together" src="http://www.racotecnic.com/wp-content/uploads/2010/04/all_together.jpeg" alt="" width="259" height="258" />Hace ya un tiempo publiqué (en inglés) un <a title="Watermark &amp; Image Component for CakePHP" href="http://www.racotecnic.com/2010/04/watermark-image-component-for-cakephp/"><strong>Componente para el tratamiento de imágenes en CakePHP</strong></a>. Hoy me he pasado un rato actualizándolo y aprovechando he decidido publicar una entrada con los cambios.</p>
<p>Aunque la he modificado considerablemente, he procurado no modificar el funcionamiento de ésta. Aquí vienen los cambios:</p>
<ul>
<li>He eliminado el uso del método obsoleto mime_content_type.</li>
<li>Ahora utilizo la clase Exception para tratar los errores.</li>
<li>He añadido el método &#8220;flip&#8221; para hacer espejo de la imagen.</li>
<li>He limpiado el código y he arreglado algún que otro fallo.</li>
<li>Ahora las transparencias funcionan correctamente.</li>
</ul>
<p>Podéis descargar el proyecto desde GibHub:</p>
<p><a title="Descargar Watimage" href="https://github.com/elboletaire/Watimage/archives/master">https://github.com/elboletaire/Watimage/archives/master</a></p>
<p>Si queréis utilizar la clase desde CakePHP simplemente tenéis que descomentar la primera línea de la clase, donde dice <code>//Component extends Object</code>, y utilizarlo como un componente cualquiera.<span id="more-1892"></span></p>
<h4>Aplicando marcas de agua</h4>
<p><a href="http://www.racotecnic.com/wp-content/uploads/2011/04/test1.png"><img class="size-full wp-image-1899 aligncenter dtse-img dtse-post-1892" title="test1" src="http://www.racotecnic.com/wp-content/uploads/2011/04/test1.png" alt="" width="322" height="546" /></a></p>
<pre class="brush: php; title: ; notranslate">$wm = new Watermark();
$wm-&gt;setImage('test.png');
$wm-&gt;setWatermark(array('file' =&gt; 'watermark.png', 'position' =&gt; 'top right'));
$wm-&gt;applyWatermark();
if ( !$wm-&gt;generate('test1.png') ) {
	// handle error...
	print_r($wm-&gt;errors);
}</pre>
<h4>Redimensionando</h4>
<p><a href="http://www.racotecnic.com/wp-content/uploads/2011/04/test2.png"><img class="size-full wp-image-1900 aligncenter dtse-img dtse-post-1892" title="test2" src="http://www.racotecnic.com/wp-content/uploads/2011/04/test2.png" alt="" width="400" height="200" /></a></p>
<pre class="brush: php; title: ; notranslate">$wm = new Watermark('test.png');
$wm-&gt;resize(array('type' =&gt; 'resizecrop', 'size' =&gt; array(400, 200)));
if ( !$wm-&gt;generate('test2.png') ) {
	// handle error...
	print_r($wm-&gt;errors);
}</pre>
<h4>Rotando</h4>
<p><a href="http://www.racotecnic.com/wp-content/uploads/2011/04/test3.png"><img class="size-full wp-image-1901 aligncenter dtse-img dtse-post-1892" title="test3" src="http://www.racotecnic.com/wp-content/uploads/2011/04/test3.png" alt="" width="400" height="234" /></a></p>
<pre class="brush: php; title: ; notranslate">$wm = new Watermark('test.png');
$wm-&gt;rotate(90);
if ( !$wm-&gt;generate('test3.png') ) {
	// handle error...
	print_r($wm-&gt;errors);
}
</pre>
<h4>Guardando en otros formatos</h4>
<pre class="brush: php; title: ; notranslate">$wm = new Watermark('test.png');
if ( !$wm-&gt;generate('test4.jpg') ) {
	// handle error...
	print_r($wm-&gt;errors);
}</pre>
<h4>Espejo</h4>
<p><a href="http://www.racotecnic.com/wp-content/uploads/2011/04/test5.png"><img class="size-medium wp-image-1903 aligncenter dtse-img dtse-post-1892" title="test5" src="http://www.racotecnic.com/wp-content/uploads/2011/04/test5-176x300.png" alt="" width="176" height="300" /></a></p>
<pre class="brush: php; title: ; notranslate">$wm = new Watermark('test.png');
$wm-&gt;flip('vertical');
if ( !$wm-&gt;generate('test5.png') ) {
	// handle error...
	print_r($wm-&gt;errors);
}</pre>
<h4>Todo junto</h4>
<p><img class="aligncenter size-full wp-image-1904 dtse-img dtse-post-1892" title="test6" src="http://www.racotecnic.com/wp-content/uploads/2011/04/test6.png" alt="" width="341" height="341" /></p>
<pre class="brush: php; title: ; notranslate">$wm = new Watermark('test.png', 'watermark.png');
$wm-&gt;resize(array('type' =&gt; 'resizecrop', 'size' =&gt; 400));
$wm-&gt;flip('horizontal');
$wm-&gt;rotate(90);
$wm-&gt;applyWatermark();
if ( !$wm-&gt;generate('test6.png') ) {
	// handle error...
	print_r($wm-&gt;errors);
}</pre>
<p>Gracias a <a href="#comment-36188" >los comentarios de Francisco</a> he podido arreglar la clase para que trate correctamente las transparencias.</p>
<p>Si véis cualquier fallo hacédmelo saber o haced <a href="https://github.com/elboletaire/Watimage/fork" target="_blank">un fork en github directamente</a>!</p>
 <img src="http://www.racotecnic.com/?feed-stats-post-id=1892" width="1" height="1" style="display: none;" />


		<!-- Added by WP-DragToShare-eXtended Plugin -->
		<script type="text/javascript">
			dtsv.dtse_post_1892_permalink = 'http://www.racotecnic.com/2011/04/clase-php-para-tratar-imagenes-rotar-redimensionar-anadir-marcas-de-agua/';
			dtsv.dtse_post_1892_title = 'Clase PHP para tratar imágenes (rotar, redimensionar, añadir marcas de agua..)';
		</script>
		<!-- End of WP-DragToShare-eXtended Plugin --><div class='yarpp-related-rss'>
<p style="font-weight:bold">Entrades relacionades:<ol>
<li><a href='http://www.racotecnic.com/2010/04/watermark-image-component-for-cakephp/' rel='bookmark' title='Watermark &amp; Image Component for CakePHP'>Watermark &#038; Image Component for CakePHP</a></li>
<li><a href='http://www.racotecnic.com/2009/04/crear-transicion-de-imagenes-para-gallery2-con-jquery/' rel='bookmark' title='Crear transición de imágenes para Gallery2 con jQuery'>Crear transición de imágenes para Gallery2 con jQuery</a></li>
<li><a href='http://www.racotecnic.com/2011/01/unir-ficheros-mp3-en-un-unico-fichero-mp3-con-cakephp/' rel='bookmark' title='Unir ficheros mp3 en un único fichero mp3 con CakePHP'>Unir ficheros mp3 en un único fichero mp3 con CakePHP</a></li>
<li><a href='http://www.racotecnic.com/2009/10/cool-iris/' rel='bookmark' title='Cooliris: la herramienta definitiva para búsqueda de imágenes'>Cooliris: la herramienta definitiva para búsqueda de imágenes</a></li>
<li><a href='http://www.racotecnic.com/2010/07/errores-404-con-ajax-y-jquery-en-cakephp/' rel='bookmark' title='Errores 404 con Ajax (y jQuery) en CakePHP'>Errores 404 con Ajax (y jQuery) en CakePHP</a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.racotecnic.com/2011/04/clase-php-para-tratar-imagenes-rotar-redimensionar-anadir-marcas-de-agua/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
		<item>
		<title>ucfirst y lcfirst compatibles con acentos (Multi Byte)</title>
		<link>http://www.racotecnic.com/2011/04/ucfirst-y-lcfirst-compatibles-con-acentos-multi-byte/</link>
		<comments>http://www.racotecnic.com/2011/04/ucfirst-y-lcfirst-compatibles-con-acentos-multi-byte/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 14:44:46 +0000</pubDate>
		<dc:creator>Booletaire</dc:creator>
				<category><![CDATA[Programació]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Codi]]></category>
		<category><![CDATA[Codificació]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[MultiByte]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Snippet]]></category>

		<guid isPermaLink="false">http://www.racotecnic.com/?p=1873</guid>
		<description><![CDATA[Llevo un rato peleándome con esto y finalmente he encontrado solución. El caso es que los de PHP al hacer los métodos MultiByte (un apaño que harían al ver que se olvidaron del resto de juegos de caracteres&#8230;) no hicieron ni el de primera letra mayúscula ni minúscula. Ambos métodos me son muy útiles para [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.racotecnic.com/wp-content/uploads/2011/04/mb1.png"><img class="alignleft size-full wp-image-1884 dtse-img dtse-post-1873" title="mb" src="http://www.racotecnic.com/wp-content/uploads/2011/04/mb1.png" alt="" width="205" height="195" /></a>Llevo un rato peleándome con esto y finalmente he encontrado solución.</p>
<p>El caso es que los de PHP al hacer los métodos <a title="PHP: MultiByte String Functions" href="http://php.net/manual/en/ref.mbstring.php">MultiByte</a> (un apaño que harían al ver que se olvidaron del resto de juegos de caracteres&#8230;) no hicieron ni el de primera letra mayúscula ni minúscula.</p>
<p>Ambos métodos me son muy útiles para activar / desactivar usuarios de una wiki (ya que un usuario no puede acceder al sistema mediawiki si tiene la primera letra en minúscula), así que en realidad no he tenido más remedio que hacerlo (nooo, yo no queríaaa..!! xD)<span id="more-1873"></span></p>
<pre class="brush: php; title: ; notranslate">// First letter uppercase
if ( !function_exists('mb_ucfirst') ) {
	function mb_ucfirst($str, $to_lower = false, $charset = 'utf-8')
	{
		$first = mb_strtoupper(mb_substr($str, 0, 1, $charset), $charset);
		$end = mb_substr($str, 1, mb_strlen($str, $charset), $charset);
		// Convert them all to lowercase (if specified)
		if ( $to_lower ) {
			$end = mb_strtolower($end, $charset);
		}
		return $first . $end;
	}
}
// First letter lowercase
if ( !function_exists('mb_lcfirst') ) {
	function mb_lcfirst($str, $charset = 'utf-8'){
		$first = mb_strtolower(mb_substr($str, 0, 1, $charset), $charset);
		return $first . mb_substr($str, 1, mb_strlen($str, $charset), $charset);
	}
}</pre>
<p>Como podréis ver al método <code>mb_ucfirst</code> le he añadido un parámetro <code>$to_lower</code> que sirve para convertir el resto de la frase a minúscula (muy útil contra hoygans).</p>
<p>El parámetro <code>$charset</code> es el que más me ha dado por culo (al principio no lo tenía en cuenta); tened en cuenta vuestra codificación de caracteres y cambiadlo directamente en la función si es preciso.</p>
<p>Buen fin de semana!</p>
<blockquote><p><strong>Referencias</strong></p>
<ul>
<li><a title="php.net" href="http://php.net/manual/en/ref.mbstring.php">PHP: Multibyte String Functions</a></li>
<p><a title="php.net" href="http://php.net/manual/en/ref.mbstring.php"> </a></ul>
<p><a title="php.net" href="http://php.net/manual/en/ref.mbstring.php"> </a></p></blockquote>
 <img src="http://www.racotecnic.com/?feed-stats-post-id=1873" width="1" height="1" style="display: none;" />


		<!-- Added by WP-DragToShare-eXtended Plugin -->
		<script type="text/javascript">
			dtsv.dtse_post_1873_permalink = 'http://www.racotecnic.com/2011/04/ucfirst-y-lcfirst-compatibles-con-acentos-multi-byte/';
			dtsv.dtse_post_1873_title = 'ucfirst y lcfirst compatibles con acentos (Multi Byte)';
		</script>
		<!-- End of WP-DragToShare-eXtended Plugin --><div class='yarpp-related-rss'>
<p style="font-weight:bold">Entrades relacionades:<ol>
<li><a href='http://www.racotecnic.com/2009/11/detectar-solicitud-ajax-con-php/' rel='bookmark' title='Detectar solicitud AJAX con PHP'>Detectar solicitud AJAX con PHP</a></li>
<li><a href='http://www.racotecnic.com/2009/06/subida-de-ficheros-en-cakephp-con-uploadify-y-jquery/' rel='bookmark' title='Subida de ficheros en CakePHP 1.2 con uploadify y jQuery'>Subida de ficheros en CakePHP 1.2 con uploadify y jQuery</a></li>
<li><a href='http://www.racotecnic.com/2009/04/crear-transicion-de-imagenes-para-gallery2-con-jquery/' rel='bookmark' title='Crear transición de imágenes para Gallery2 con jQuery'>Crear transición de imágenes para Gallery2 con jQuery</a></li>
<li><a href='http://www.racotecnic.com/2010/02/validar-datos-duplicados-en-cakephp/' rel='bookmark' title='Validar datos duplicados en CakePHP'>Validar datos duplicados en CakePHP</a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.racotecnic.com/2011/04/ucfirst-y-lcfirst-compatibles-con-acentos-multi-byte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
