<?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>Mundo Geek &#187; optimizacion</title>
	<atom:link href="http://mundogeek.net/etiqueta/optimizacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://mundogeek.net</link>
	<description>Mundo geek, bitácora sobre todo lo geek: software, gadgets, tecnología, internet, ...</description>
	<lastBuildDate>Fri, 25 May 2012 14:51:34 +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>Particiones en MySQL</title>
		<link>http://mundogeek.net/archivos/2012/03/09/particiones-en-mysql/</link>
		<comments>http://mundogeek.net/archivos/2012/03/09/particiones-en-mysql/#comments</comments>
		<pubDate>Fri, 09 Mar 2012 19:53:12 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[optimizacion]]></category>
		<category><![CDATA[particiones]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=7714</guid>
		<description><![CDATA[Cuando alguna de las tablas de tu base de datos llega a crecer tanto que el rendimiento empieza a ser un problema, es hora de empezar a leer algo sobre optimización. Índices, el comando EXPLAIN, el registro de consultas lentas, &#8230; estas son herramientas básicas que todo el mundo debería conocer. Una característica algo menos [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando alguna de las tablas de tu base de datos llega a crecer tanto que el rendimiento empieza a ser un problema, es hora de empezar a leer algo sobre optimización. Índices, el comando <code>EXPLAIN</code>, el registro de consultas lentas, &#8230; estas son herramientas básicas que todo el mundo debería conocer. Una característica algo menos conocida, aunque se introdujo en la versión 5.1 de <a href="http://mundogeek.net/archivos/2009/02/16/mysql/" title="Tutorial rápido de MySQL">MySQL</a>, son las particiones.<span id="more-7714"></span></p>
<p>En el hospital en que trabajo la mayor tabla con la que tenemos que lidiar es la que almacena todos y cada uno de los contratos de todos los trabajadores que alguna pasaron por el hospital desde que se fundó en los años 50. Esto supone <em>sólo</em> un par de cientos de miles de tuplas, lo cuál no debería dar muchos dolores de cabeza con una base de datos bien optimizada, consultas razonables, y un hardware decente. Sin embargo, hay personas que tienen que tratar con cantidades de datos realmente obscenas, que multiplican estos números por 10 veces 10.</p>
<p>Una solución que nos puede venir a la cabeza, sobre todo si la mayor parte de la información se almacena a modo de histórico y no se accede a ella frecuentemente, es dividir la tabla en varias porciones. Podríamos mantener una tabla para el año en curso y otra para el resto de años, por ejemplo; o una para cada uno de los años; una por lustro; por década&#8230; dependiendo de cómo se trabaje con los datos.</p>
<p>El particionado es un concepto parecido, aunque automatizado, que puede ahorrarnos muchos quebraderos de cabeza. Consiste en dividir los datos en particiones más pequeñas (hasta 1024) procurando, porque de otra forma sería absurdo, que sólo haya que acceder a una partición a la hora de buscar una tupla.</p>
<p>Se puede particionar una tabla de 5 maneras diferentes:</p>
<ul>
<li>Por rango: para construir nuestras particiones especificamos rangos de valores. Por ejemplo, podríamos segmentar los datos en 12 particiones: una para los contratos de 1950 a 1960, otra para los años 60, los 70, 80, 90, la década del 2000 y la década actual</p>
<pre name="code" class="sql">ALTER TABLE contratos
PARTITION BY RANGE(YEAR(fechaInicio)) (
	PARTITION partDecada50 VALUES LESS THAN (1960),
	PARTITION partDecada60 VALUES LESS THAN (1970),
	PARTITION partDecada70 VALUES LESS THAN (1980),
	PARTITION partDecada80 VALUES LESS THAN (1990),
	PARTITION partDecada90 VALUES LESS THAN (2000),
	PARTITION partDecada00 VALUES LESS THAN (2010),
	PARTITION partDecada10 VALUES LESS THAN MAXVALUE
);</pre>
</li>
<li>Por listas: para construir nuestras particiones especificamos listas de valores concretos.
<pre name="code" class="sql">ALTER TABLE contratos
PARTITION BY LIST(YEAR(fechaInicio)) (
	PARTITION partDecada50 VALUES IN (1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959),
	PARTITION partDecada60 VALUES IN (1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969),
	PARTITION partDecada70 VALUES IN (1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979),
	PARTITION partDecada80 VALUES IN (1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989),
	PARTITION partDecada90 VALUES IN (1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999),
	PARTITION partDecada00 VALUES IN (2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009),
	PARTITION partDecada10 VALUES IN (2010, 2011, 2012, 2013, 2014, 2015, 2016,
2017, 2018, 2019)
);</pre>
</li>
<li>Por hash: MySQL se encarga de distribuir las tuplas automáticamente usando una operación de módulo. Sólo hay que pasarle una columna o expresión que resulte en un entero (el hash) y el número de particiones que queramos crear.
<pre name="code" class="sql">ALTER TABLE contratos
PARTITION BY HASH(YEAR(fechaInicio))
PARTITIONS 7;</pre>
</li>
<li>Por clave: similar a la partición por hash, pero en este caso no necesitamos pasarle un entero; MySQL utilizará su propia función de hash para generarlo. Si no se indica ninguna columna a partir de la que generar el hash, se utiliza la clave primaria por defecto.
<pre name="code" class="sql">ALTER TABLE contratos
PARTITION BY KEY()
PARTITIONS 7;</pre>
</li>
<li>Compuesta: podemos combinar los distintos métodos de particionado y crear particiones de particiones</li>
</ol>
<p>Por último, un pequeño ejemplo de cómo afectaría el particionado a una consulta sencilla como obtener el número total de tuplas que cumplen una condición. Estas son las estadísticas de la consulta sin particionado (ni índices)</p>
<pre name="code" class="sql">EXPLAIN SELECT COUNT(*)
FROM contratos
WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'</pre>
<table border="1" style="border-collapse:collapse">
<tr>
<th>select_type</th>
<th>table</th>
<th>type</th>
<th>key</th>
<th>rows</th>
<th>Extra</th>
</tr>
<tr>
<td>SIMPLE</td>
<td>contratos</td>
<td>ALL</td>
<td>
<td>239796</td>
<td>Using where</td>
</tr>
</table>
<p>Y este el resultado de añadir las particiones (nótese la palabra clave PARTITIONS para que nos muestre también la información relativa a las particiones)</p>
<pre name="code" class="sql">EXPLAIN PARTITIONS SELECT COUNT(*)
FROM contratos
WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'</pre>
<table border="1" style="border-collapse:collapse">
<tr>
<th>select_type</th>
<th>table</th>
<th>partitions</th>
<th>type</th>
<th>key</th>
<th>rows</th>
<th>Extra</th>
</tr>
<tr>
<td>SIMPLE</td>
<td>contratos</td>
<td>partDecada50</td>
<td>ALL</td>
<td></td>
<td>8640</td>
<td>Using where</td>
</tr>
</table>
<p>Como véis, el número de tuplas que MySQL tiene que comprobar se ve disminunido en 2 órdenes de magnitud.</p>
<link type="text/css" rel="stylesheet" href="http://mundogeek.net/sh/css/SyntaxHighlighter.css"></link>
<script language="javascript" src="http://mundogeek.net/sh/js/shCore.js"></script><br />
<script language="javascript" src="http://mundogeek.net/sh/js/shBrushSql.js"></script><br />
<script language="javascript">dp.SyntaxHighlighter.ClipboardSwf = 'http://mundogeek.net/sh/flash/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');</script></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2012/03/09/particiones-en-mysql/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>El tamaño sí importa</title>
		<link>http://mundogeek.net/archivos/2010/02/16/el-tamano-si-importa-2/</link>
		<comments>http://mundogeek.net/archivos/2010/02/16/el-tamano-si-importa-2/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 10:03:54 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[jpg]]></category>
		<category><![CDATA[optimizacion]]></category>
		<category><![CDATA[paginas]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=4979</guid>
		<description><![CDATA[El tamaño es muy importante, al menos a la hora de crear una página web: cuantos menos ocupen los archivos que componen nuestra web, menos tiempo tardará en descargarlos el usuario y menos ancho de banda consumiremos. Veamos algunos métodos para ahorrar algunos kilobytes en nuestras imágenes, hojas de estilo o scripts. Reducir el tamaño [...]]]></description>
			<content:encoded><![CDATA[<p>El tamaño es muy importante, al menos a la hora de crear una página web: cuantos menos ocupen los archivos que componen nuestra web, menos tiempo tardará en descargarlos el usuario y menos ancho de banda consumiremos. Veamos algunos métodos para ahorrar algunos kilobytes en nuestras imágenes, hojas de estilo o scripts.<span id="more-4979"></span></p>
<h2>Reducir el tamaño de los PNG</h2>
<p>Últimamente, y para imágenes muy vistas, como el logo de la página, suelo utilizar este método que descubrí en su día <a href="http://en.wikipedia.org/wiki/Wikipedia:Preparing_images_for_upload#PNG_tips">en las recomendaciones sobre imágenes de la Wikipedia</a>. Necesitarás las herramientas <a href="http://advsys.net/ken/utils.htm">PNGOUT</a>, <a href="http://optipng.sourceforge.net/">OptiPNG</a>, <a href="http://www.walbeehm.com/download/">DeflOpt</a> y <a href="http://advancemame.sourceforge.net/comp-readme.html">AdvDef</a>:</p>
<p class="code">optipng -o7 imagen.png<br />
advdef -z4 imagen.png<br />
pngout /ks imagen.png<br />
deflopt imagen.png</p>
<p>Para imagenes que no van a verse tantas veces, me basta con el plugin <a href="http://registry.gimp.org/node/33">Save for web</a> para GIMP.</p>
<h2>Reducir el tamaño de los JPEG</h2>
<p>Para reducir el tamaño de las imágenes jpg podemos utilizar, por ejemplo, <a href="http://www.ijg.org/">jpegtran</a> (<a href="http://gnuwin32.sourceforge.net/packages/jpeg.htm">binarios para Windows</a>):</p>
<p class="code">jpegtran -optimize -outfile optimizada.jpg imagen.jpg</p>
<p>Este comando no provoca pérdidas respecto de la imagen original.</p>
<h2>Reducir el tamaño de los CSS</h2>
<p>El primer paso debería ser, evidentemente, eliminar las reglas obsoletas que ya no se utilizan, pero que se han mantenido en la hoja de estilo, bien por despiste o bien por dejadez. Para ello puede ser útil, por ejemplo, <a href="https://addons.mozilla.org/es-ES/firefox/addon/5392">Dust-Me Selectors</a>, una extensión para Firefox que nos informará de los selectores no utilizados en la página actual. También puede comprobar una serie de páginas listadas en un sitemap (aún no está actualizado para Firefox 3.6, así que si lo queréis usar en esta versión, podéis actualizarlo usando mi aplicación <a href="http://mundogeek.net/update-xpi/" title="Actualizar extensiones para Firefox">Update XPI</a>, por ejemplo).</p>
<p>Una vez hemos eliminado las reglas obsoletas, podemos pasar a reducir la hoja de estilo, usando propiedades de atajo, como <code>font:bold 12px verdana</code> en lugar de <code>font-weight:bold</code>, <code>font-size:12px</code> y <code>font-family:verdana</code>; eliminando comentarios o eliminando espacios en blanco innecesarios. Podemos hacer esto utilizando, por ejemplo, <a href="http://csstidy.sourceforge.net/">CSSTidy</a>:</p>
<p class="code">csstidy.exe estilo.css &ndash;&ndash;template=highest &ndash;&ndash;remove_last_;=true estilo-comprimido.css</p>
<p>Para volver a tener un css legible, de forma que podamos hacer cambios fácilmente, podemos ejecutar csstidy con las opciones por defecto:</p>
<p class="code">csstidy.exe estilo-comprimido.css estilo.css</p>
<h2>Reducir el tamaño de los JS</h2>
<p><a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a>, de la librería de YUI de Yahoo!, es posiblemente la mejor opción, aunque es necesario tener instalado el JRE o el JDK de Java para poder utilizarlo:</p>
<p class="code">java -jar yuicompressor-2.4.2.jar script.js -o optimizado.js</p>
<h2>Comprimir en el servidor</h2>
<p>Al comprimir el contenido al vuelo en el servidor podemos reducir aún más el tamaño de los archivos, pero, a cambio, consumiremos más CPU y memoria en cada petición, lo que puede provocar que el servidor se colapse, o que se tarde más en servir cada petición. Por lo tanto, en este caso, es necesario sopesar si va a merecer la pena.</p>
<p>Apache cuenta con un par de módulos para comprimir el contenido en el servidor: mod_gzip y mod_deflate. mod_deflate, por defecto, comprime menos que mod_gzip, aunque es más rápido que este. Puedes comprobar si alguno de ellos está activado en tu servidor creando un archivo PHP que llame a la función phpinfo:</p>
<blockquote><p>&lt;?php phpinfo(); ?&gt;</p></blockquote>
<p>Otra opción a tener en cuenta para comprimir el contenido en el servidor es utilizar <a href="http://code.google.com/p/minify/">minify</a>, un script PHP que combina, comprime y cachea las hojas de estilo y los scripts.</p>
<p>Por último, para archivos estáticos, otra opción, sólo recomendada para gente con algún conocimiento básico sobre Apache, sería comprimir nosotros mismos los ficheros. Sólo tenemos que usar gzip para crear los archivos comprimidos</p>
<p class="code">gzip -c estilo.css &gt; estilo.css.gz</p>
<p>y editar el archivo .htaccess para que el servidor sirva las versiones comprimidas cuando el navegador del cliente mande la cabecera Accept-Encoding.</p>
<blockquote><p>AddEncoding x-gzip .gz</p>
<p>&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine On</p>
<p>RewriteCond %{HTTP:Accept-Encoding} gzip<br />
RewriteCond %{REQUEST_FILENAME}.gz -f<br />
RewriteRule ^(.+)$ $1.gz [L]<br />
&lt;/IfModule&gt;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2010/02/16/el-tamano-si-importa-2/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Servicios de Windows 7 que puedes desactivar para mejorar el rendimiento</title>
		<link>http://mundogeek.net/archivos/2009/09/16/servicios-de-windows-7-que-puedes-desactivar-para-mejorar-el-rendimiento/</link>
		<comments>http://mundogeek.net/archivos/2009/09/16/servicios-de-windows-7-que-puedes-desactivar-para-mejorar-el-rendimiento/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 17:41:40 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[optimizacion]]></category>
		<category><![CDATA[rendimiento]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=3913</guid>
		<description><![CDATA[Los servicios son aplicaciones que se ejecutan en segundo plano, de forma transparente al usuario, para proporcionar funcionalidades varias. Sin embargo hay muchos de estos servicios que puedes no necesitar, y que, sin embargo, consumen recursos en tu máquina que podrías utilizar para otros menesteres. Puedes ver una lista de los servicios instalados en tu [...]]]></description>
			<content:encoded><![CDATA[<p>Los servicios son aplicaciones que se ejecutan en segundo plano, de forma transparente al usuario, para proporcionar funcionalidades varias. Sin embargo hay muchos de estos servicios que puedes no necesitar, y que, sin embargo, consumen recursos en tu máquina que podrías utilizar para otros menesteres.</p>
<p>Puedes ver una lista de los servicios instalados en tu equipo, así como pararlos, iniciarlos o desactivarlos, en Inicio -> Panel de control -> Sistema y seguridad -> Herramientas administrativas -> Servicios.</p>
<p>Una fuente bastante buena a la que recurrir para saber qué servicios puedes desactivar de forma segura para mejorar el rendimiento es <a href="http://www.blackviper.com/" title="BlackViper">BlackViper.com</a>, que además de para Windows 7, mantiene una lista de servicios para Windows Vista, Windows XP y Windows 2000.<span id="more-3913"></span></p>
<p>Para Windows 7 los servicios que puedes desactivar sin mayores problemas son los siguientes:</p>
<ul>
<li>Windows Search (WSearch): Indexa archivos, correo electrónico y otro tipo de contenido para agilizar las búsquedas.</li>
<li>Servicio de uso compartido de red del Reproductor de Windows Media (WMPNetworkSvc): Comparte las bibliotecas del Reproductor de Windows Media con otros dispositivos multimedia y reproductores en red.</li>
<li>Captura SNMP (SNMPTRAP): Recibe mensajes del protocolo SNMP (Servicio de Protocolo simple de administración de redes) y los retransmite a los programas de administración de SNMP que se estén ejecutando en el equipo.</li>
<li>Directiva de extracción de tarjetas inteligentes (SCPolicySvc): Permite configurar el sistema para bloquear el escritorio del usuario al quitar la tarjeta inteligente.</li>
<li>Tarjeta inteligente (SCardSvr): Administra el acceso a tarjetas inteligentes leídas por el equipo.</li>
<li>Registro remoto (RemoteRegistry): Permite modificar el registro a usuarios remotos.</li>
<li>Ubicador de llamada a procedimiento remoto (RpcLocator): Utilizado para RPC en versiones anteriores de Windows. Actualmente sólo está presente por motivos de compatibilidad.</li>
<li>Parental Controls (WPCSvc): Utilizado para el control parental en Windows Vista. Se mantiene sólo por motivos de compatibilidad.</li>
<li>Archivos sin conexión (CscService): Realiza actividades de mantenimiento en la caché de archivos sin conexión, responde a eventos de inicio y cierre de sesión del usuario, implementa la información interna de la API pública y procesa eventos interesantes para los interesados en las actividades de archivos sin conexión y los cambios de estado de la caché.</li>
<li>Agente de Protección de acceso a redes (napagent): Administra información de los equipos de una red para garantizar que tengan el software y la configuración dictadas por directivas de mantenimiento. No es necesario para una red de un hogar.</li>
<li>Net Logon (Netlogon): Mantiene un canal seguro entre el equipo y el controlador de dominio para autenticar usuarios y servicios. No es necesario para una red de un hogar.</li>
<li>Servicio del iniciador iSCSI de Microsoft (MSiSCSI): Administra las sesiones SCSI de Internet (iSCSI) de este equipo a los dispositivos iSCSI remotos.</li>
<li>Aplicación auxiliar IP (iphlpsvc): Proporciona conectividad de túnel mediante tecnologías de transición IPv6 (6to4, ISATAP, Proxy de puerto y Teredo) e IP-HTTPS. La mayoría de los ISP no utilizan ninguno de los dos.</li>
<li>Cliente de seguimiento de vínculos distribuidos (TrkWks): Mantiene los vínculos entre archivos NTFS dentro de un equipo o entre equipos de una red. Se puede desactivar si no utilizas enlaces simbólicos en Windows.</li>
<li>Propagación de certificados (CertPropSvc): Copia los certificados de usuario y certificados raíz de tarjetas inteligentes en el almacén de certificados del usuario actual, detecta la inserción de una tarjeta inteligente en un lector de tarjetas inteligentes y, si es necesario, instala el minicontrolador Plug and Play para tarjetas inteligentes.</li>
<li>BranchCache (PeerDistSvc): Este servicio almacena en caché el contenido de la red de los sistemas del mismo nivel de la subred local. Es un servicio pensado para redes corporativas.</li>
<li>Servicio de compatibilidad con Bluetooth (bthserv): Permite la detección y asociación de dispositivos Bluetooth remotos. Se puede desactivar si no vas a utilizar dispositivos Bluetooth.</li>
</ul>
<p>Personalmente, además de estos servicios también tengo deshabilitados:</p>
<ul>
<li>Brillo adaptable (SensrSvc), que permite utilizar los sensores de luz ambiental que tienen algunos monitores para auto ajustar su brillo</li>
<li>Servicio de detección automática de proxy web WinHTTP (WinHttpAutoProxySvc) para descubrir el proxy que utiliza la red</li>
<li>Administración remota de Windows (WinRM)</li>
<li>Servicio Informe de errores de Windows (WerSvc), para enviar los informes de error a Microsoft</li>
<li>Sistema de color de Windows (WcsPlugInService), necesario para el uso de perfiles de color</li>
<li>Servicio de puerta de enlace de nivel de aplicación (ALG), necesario para utilizar la función de Conexión compartida a Internet (ICS)</li>
<li>Servicio Cifrado de unidad BitLocker (BDESVC), para cifrar discos duros</li>
<li>Sistema de cifrado de archivos (EFS), para almacenar archivos cifrados en particiones NTFS</li>
<li>Fax (Fax)</li>
<li>Acceso a dispositivo de interfaz humana (hidserv), para el uso de botones de acceso directo predefinidos en algunos teclados, controles remotos y otros dispositivos multimedia</li>
<li>Configuración de Escritorio remoto (SessionEnv)</li>
<li>Servicios de Escritorio remoto (TermService)</li>
<li>Redirector de puerto en modo usuario de Servicios de Escritorio remoto (UmRdpService)</li>
<li>Servicio de entrada de Tablet PC (TabletInputService)</li>
<li>Servicio biométrico de Windows (WbioSrvc)</li>
</ul>
<p>Por último, os dejo un <a href="http://mundogeek.net/wp-content/desactivar-servicios.zip" title="Desactivar servicios de Windows 7">zip con par de archivos bat</a> que podéis ejecutar para desactivar todos estos servicios con un solo par de clics. Basta con que hagáis clic con el botón derecho sobre el bat que prefiráis, mi configuración o la de BlackViper, y seleccionéis Ejecutar como administrador.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2009/09/16/servicios-de-windows-7-que-puedes-desactivar-para-mejorar-el-rendimiento/feed/</wfw:commentRss>
		<slash:comments>75</slash:comments>
		</item>
		<item>
		<title>apt-build, optimizando los paquetes para nuestra máquina</title>
		<link>http://mundogeek.net/archivos/2007/05/12/apt-build-optimizando-los-paquetes-para-nuestra-maquina/</link>
		<comments>http://mundogeek.net/archivos/2007/05/12/apt-build-optimizando-los-paquetes-para-nuestra-maquina/#comments</comments>
		<pubDate>Sat, 12 May 2007 06:00:19 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[compilador]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[Gentoo]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[optimizacion]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2007/05/12/apt-build-optimizando-los-paquetes-para-nuestra-maquina/</guid>
		<description><![CDATA[Una de las características más interesantes de Gentoo es que permite instalar las aplicaciones compiladas de forma optimizada para tu máquina, consiguiendo un mayor rendimiento. Apt-build nos ofrece algo similar en Debian y derivadas (como Ubuntu). Para instalarlo en el sistema: sudo aptitude install apt-build Se nos preguntará por el nivel de optimización que queramos [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las características más interesantes de Gentoo es que permite instalar las aplicaciones compiladas de forma optimizada para tu máquina, consiguiendo un mayor rendimiento.</p>
<p>Apt-build nos ofrece algo similar en Debian y derivadas (como Ubuntu). Para instalarlo en el sistema:</p>
<p class="code">sudo aptitude install apt-build</p>
<p>Se nos preguntará por el nivel de optimización que queramos conseguir; cuanto más trabajo haga el compilador para optimizar la aplicación que instalemos, mejor rendimiento obtendremos con ella, pero evidentemente, más tardaremos en compilar. Recomendado dejarlo en Medio.</p>
<p>También nos preguntará por la arquitectura de nuestro procesador. Si dudais os puede ser de utilidad la sección de <a href="http://gentoo-wiki.com/Safe_Cflags" title="Flag arquitectura compilador gcc">flags seguros de Gentoo-wiki</a>; fijaros en el flag -march. Yo tengo un Intel Core 2 Duo T7200 pero el flag -march=core2 que sería el correspondiente a las arquitecturas Core 2 Duo no está disponible más que a partir de la versión 4.3 de gcc (la de Ubuntu Feisty Fawn es la 4.1.2), así que utilizo Prescott. <span id="more-1077"></span></p>
<p>Antes de empezar a usarlo hay que comprobar que los repositorios con las fuentes de las aplicaciones no estén comentadas en el archivo de fuentes:</p>
<p class="code">sudo gedit /etc/apt/sources.list</p>
<p>y comprobad que para cada uno de los repositorios que nos interesen haya no sólo una línea que comience con deb, si no otra que comience con deb-src y que no haya un símbolo de almohadilla (#) al comienzo de la línea (si ese es el caso, borrad la almohadilla para descomentarlo).</p>
<p>Vereis que durante la instalación de apt-build se ha añadido una nueva fuente a sources.list que será parecido a esto:</p>
<p class="code">deb file:/var/cache/apt-build/repository apt-build main</p>
<p>Esto es porque apt-build funciona haciendo un apt-get source para descargar el código fuente, compilándolo con dpkg-buildpackage y poniendo el paquete resultante en este nuevo repositorio local para que apt-get lo encuentre.</p>
<p>Primero vamos a modificar el archivo /etc/apt/preferences para que los paquetes de este nuevo repositorio local tengan prioridad sobre los del resto de repositorios:</p>
<p class="code">sudo gedit /etc/apt/preferences</p>
<p>y añadimos las líneas:</p>
<p class="code">Package: *<br />
Pin: release o=apt-build<br />
Pin-Priority: 990</p>
<p>Esto especifica que todos los paquetes (*) del release apt-build tienen una prioridad de 990 (apt-get instalará los paquetes de mayor prioridad).</p>
<p>El uso de apt-build es muy similar a apt-get o aptitude; tenemos todos los comandos típicos: update para actualizar la lista de paquetes, upgrade para actualizar los paquetes a las últimas versiones o install para instalar un paquete (en este caso compila, crea un paquete e instala).</p>
<p>Vamos a actualizar primero la lista de los paquetes disponibles:</p>
<p class="code">sudo apt-build update</p>
<p>y ahora instalemos una aplicación cualquiera para comprobar que todo funciona correctamente, por ejemplo vamos a reinstalar gzip:</p>
<p class="code">sudo apt-build install gzip</p>
<p>apt-build descargará las fuentes, compilará e intentará instalar el nuevo paquete, pero como ya está instalado y es la misma versión nos informará de que la versión instalada ya está en su versión más reciente. Si hacemos</p>
<p class="code">sudo apt-build &#8211;reinstall install gzip</p>
<p>para reinstalar el paquete se quejará de que el tamaño de la versión de los repositorios es distinto de la versión de nuestro repositorio local. Si indicamos a apt-get que instale el paquete sin preocuparse por autentificarlo:</p>
<p class="code">sudo apt-get &#8211;reinstall &#8211;allow-unauthenticated install gzip</p>
<p>ahora si, habremos sustituido la versión de gzip original por una optimizada para nuestra máquina.</p>
<p>Una última opción (bastante peligrosa) es world, que compila y reinstala todos los paquetes del sistema para adaptarlos a la máquina en la que se ejecuta. Si quereis más información sobre su uso (que no aconsejo) podeis echarle un vistazo a <a href="http://www.ubuntu-es.org/index.php?q=node/1265" title="Tutorial apt-build">Primera experiencia con apt-build</a> o <a href="http://cronopios.net/Traducciones/apt-build.es.html" title="Manual apt-build, Optimice los paquetes Debian para su sistema">apt-build &#8211; Optimice los paquetes Debian para su sistema</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2007/05/12/apt-build-optimizando-los-paquetes-para-nuestra-maquina/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

