<?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>TODO UN BLOG &#187; Ayuda</title>
	<atom:link href="http://todounblog.com.ar/category/tutoriales/feed/" rel="self" type="application/rss+xml" />
	<link>http://todounblog.com.ar</link>
	<description></description>
	<lastBuildDate>Sat, 17 Sep 2011 21:17:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Guia de Instalación Dual (Linux y Windows)</title>
		<link>http://todounblog.com.ar/guia-de-instalacion-dual-linux-y-windows/</link>
		<comments>http://todounblog.com.ar/guia-de-instalacion-dual-linux-y-windows/#comments</comments>
		<pubDate>Sat, 17 Sep 2011 21:17:49 +0000</pubDate>
		<dc:creator>Ariel</dc:creator>
				<category><![CDATA[Ayuda]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://todounblog.com.ar/?p=908</guid>
		<description><![CDATA[Una guía muy completa, aunque en Inglés pero simple de leer, donde se aclaran algunas dudas sobre la instalación dual de ambos Sistemas Operativos en una misma PC.
Link
Fuente: webupd8
]]></description>
			<content:encoded><![CDATA[<p>Una guía muy completa, aunque en Inglés pero simple de leer, donde se aclaran algunas dudas sobre la instalación dual de ambos Sistemas Operativos en una misma PC.</p>
<p><a title="Descarga Directa" href="http://www.box.net/shared/p3lf0zzmus4qb2bdo8m2" target="_blank">Link</a></p>
<p>Fuente: <a title="Fuente" href="http://www.webupd8.org/2011/09/dual-booting-guide-pdf-windows-and." target="_blank">webupd8</a></p>
]]></content:encoded>
			<wfw:commentRss>http://todounblog.com.ar/guia-de-instalacion-dual-linux-y-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tips: para MySQL &#8211; Buenos usos</title>
		<link>http://todounblog.com.ar/tips-para-mysql-buenos-usos/</link>
		<comments>http://todounblog.com.ar/tips-para-mysql-buenos-usos/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 18:39:58 +0000</pubDate>
		<dc:creator>Ariel</dc:creator>
				<category><![CDATA[Ayuda]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://todounblog.com.ar/?p=884</guid>
		<description><![CDATA[1. Optimizando las consultas para usar el cache de consulta
La mayoría de los servers MySQL tienen habilitado el chache para consultas. Y esto es uno de los métodos más efectivos para mejorar el rendimiento, y es utilizado por el servidor de manera interna, por lo tanto cuando se utiliza de manera repetida, puede resultar en [...]]]></description>
			<content:encoded><![CDATA[<p>1. Optimizando las consultas para usar el cache de consulta</p>
<div id="">La mayoría de los servers MySQL tienen habilitado el chache para consultas. Y esto es uno de los métodos más efectivos para mejorar el rendimiento, y es utilizado por el servidor de manera interna, por lo tanto cuando se utiliza de manera repetida, puede resultar en una mejora al realizar nuestras consultas.</div>
<div id="">El principal problema es que es invisible al programador, por lo tanto, se suele ignorar, cosa que no debe ser así, ya que podemos mejorar notablemente nuestras consultas a la base de datos.</div>
<div id="">Por ejemplo.</div>
<pre name="code" class="php">
    // el cache de la consulta no funciona
    $r = mysql_query("SELECT username FROM user WHERE signup_date &gt;= CURDATE()");
    // Lo recomendable es:
    $today = date("Y-m-d");
    $r = mysql_query("SELECT username FROM user WHERE signup_date &gt;= '$today'");
</pre>
<div id="">La razón por la que el servidor no utiliza el cache, es porque usamos la función CURDATE(). Esto también es válido para funciones como NOW(), RAND(), etc&#8230;, porque simplemente el resultado de la función puede cambiar, MySQL decide deshabilitar el cache. Agregando solo una línea de PHP, antes de la consulta podemos solucionarlo y de esa manera mejoraremos nuestras consultas.</div>
<div id="">&nbsp;<br/></div>
<div><span id="more-884"></span></div>
<div>2. Usando EXPLAIN para tus consultas SELECT</div>
<div id="">Si usamos la keyword EXPLAIN podemos mejorar la forma en que MySQL puede ejecutar nuestra consulta. Esto puede ayudarnos a detectar los cuellos de botella y otros problemas con las consultas y la estructura de la tabla.</div>
<div id="">El resultado de una consulta EXPLAIN nos mostrará de que forma la indexación se usa, cuando la tabla comienza a escanearse y ordenarse, etc&#8230;</div>
<div id="">Tomar una consulta SELECT (preferiblemente una compleja con algún join), y agregar la palabra reservada(keyword) EXPLAIN delante de él, lo cual puedes usar PHPmyAdmin. Esto le mostrará como resultado una agradable tabla.</div>
<div id="">&nbsp;<br/></div>
<div>3. Usar LIMIT 1 cuando solo obtenemos un solo resultado.</div>
<div id="">Algunas veces cuando consultas tus tablas, ya sabes que vas a buscar un solo resultado. Podrías ser que busques un único registro o verificar la existencia de un cierto número de registros que satisfacen la condición WHERE.</div>
<div id="">En tal caso, agregar “LIMIT 1” a tus consultas puede incrementar la performance. De esta forma, el servidor dejará de escanear tales registros luego de encontrar 1, en vez de recorrer toda la tabla o índices.</div>
<div id="">Por ejemplo:</div>
<pre name="code" class="php">
    // Lo que intuitivamente hacemos
    $r = mysql_query("SELECT * FROM user WHERE state = 'Formosa'");
    if (mysql_num_rows($r) &gt; 0) {
        // ...
    }
    // Lo que recomendable:
    $r = mysql_query("SELECT 1 FROM user WHERE state = ‘Formosa' LIMIT 1");
    if (mysql_num_rows($r) &gt; 0) {
        // ...
    }</pre>
<div id=""><br/>&nbsp;</div>
<div>4. Indexar los campos de búsqueda</div>
<div id="">Indexar no solo la clave primaria o claves únicas. O sea, si existe alguna columna en la tabla que la utilizará para alguna búsqueda también deberías indexarla.</div>
<div id="">Esta regla también es válida para un string parcial donde usamos like por ej. “nombre LIKE ‘a%’”. Cuando buscamos desde el inicio del string, MySQL es capaz de utilizar el índice en la columna.</div>
<div id="">También es importante que tengas presente en que casos no puedes usar la indexación. De hecho, cuando buscas por una palabra (ej. “WHERE contenido LIKE ‘%algo%’”), no verás un beneficio con respecto a una indexación normal. Sin embargo si usas todo el texto mysql buscará o construirá su propia solución de indexación.</div>
<div id=""><br/>&nbsp;</div>
<div>5. Indexar y usar el mismo tipo de columnas cuando hacemos JOINs.</div>
<div id="">Si tu aplicación contiene muchas consultas JOIN, necesitas asegurarte que la columna que vas a unir están indexadas en ambas tablas. Esto afecta como MySQL internamente optimiza la operación JOIN.</div>
<div id="">También, la columna que están unidas, necesitan ser del mismo tipo. De hecho, si unes una columna DECIMAL, a un columna INT desde otra tabla, MySQL habilitará para usar al menos una de los indexados. Aunque la codificación de los caracteres necesitan ser del mismo tipo para columnas tipo string.</div>
<pre name="code" class="php">
    // Buscando Empresas de un pais
    $r = mysql_query("SELECT company_name FROM users LEFT JOIN companies ON (users.state = companies.state) WHERE users.id = $user_id");
    //Ambas columnas de paices deberían indexarse
    //y ambos deberían tener el mismo tipo de codificación
    // o MySQL puede hacer una búsqueda total de la tabla.
</pre>
<div id=""><br/>&nbsp;</div>
<div>6. No usar ORDER BY RAND()</div>
<div id="">Esto es un de esos trucos que suenan lindo, y muchos programadores novatos caen en esta trampa. No sabes el terrible cuello de botella que puedes crear una vez que empiezas a usar esto en tus consultas.</div>
<div id="">Si necesitas filas al azar para tus resultados, hay otros buenas maneras de hacerlo. Por supuesto que se necesita de código adicional, pero hay garantía de que te evitaras un gran cuello de botella, a medida que tus datos crecen. El problema es que MySQL comenzará la operación RAND() (el cual necesita mas poder de procesamiento) por cada fila en la tabla antes de ordenarla y devolver solo 1 fila.</div>
<pre name="code" class="php">
    // Lo que hay que evitar hacer
    $r = mysql_query("SELECT nombre FROM usuario ORDER BY RAND() LIMIT 1");
    // Optimizado:
    $r = mysql_query("SELECT count(*) FROM usuario");
    $d = mysql_fetch_row($r);
    $rand = mt_rand(0,$d[0] - 1);
    $r = mysql_query("SELECT nombre FROM usuario LIMIT $rand, 1");
</pre>
<div id="">Entonces, tomas un número aleatorio menor que el número de resultados y usas lo usas en tu clausula LIMIT.</div>
<div>&nbsp;</div>
<div>7. Evitar usar SELECT *</div>
<div id="">La mayor parte de los datos lo lees desde la tabla, entonces tu consulta se hace lenta e incrementas el tiempo que toma en realizar la operación. Así, cuando el servidor de base de datos está separado del servidor web, tendrás mayor delay en realizar la transferencia entre ambos servidores.</div>
<div id="">Es un buen habito siempre especificar que columnas necesitas cuando haces un SELECT.</div>
<pre name="code" class="php">
    // Lo que hacemos intuitivamente
    $r = mysql_query("SELECT * FROM user WHERE user_id = 1");
    $d = mysql_fetch_assoc($r);
    echo "Welcome {$d['username']}";
    // Lo Recomendable:
    $r = mysql_query("SELECT username FROM user WHERE user_id = 1");
    $d = mysql_fetch_assoc($r);
    echo "Bienvenido {$d['username']}";
    // Las diferencias son mayores con un grupo más grande de resultados.
</pre>
<div>&nbsp;</div>
<div>8. Por lo menos debe haber un campo ID</div>
<div id="">En cada tabla hay una columna ID que es la PRIMARY KEY, AUTO_INCREMENT y generalmente INT. Asimismo preferentemente UNSIGNED, desde luego el valor no puede ser negativo.</div>
<div id="">Aún, si tienes una tabla de usuarios con un único campo de usuario, y esta no debe ser tu clave primaria, ya que los campos como VARCHAR, son muy lentos en las búsquedas y tendrás una mejor estructura en tu código referiendote a todos los usuarios con su id interno.</div>
<div id="">Existen también operaciones internas propias de MySQL, que usa internamente el campo de clave primaria. El cual es mas importante que configurar la base de datos.</div>
<div id="">Una posible excepción a la regla son las “tablas asociadas”, usadas por el tipo de asociación mucho-a-mucho entre 2 tablas. Por ejemplo una tabla “posts_tags” que contiene 2 columnas: post_id, tag_id el cual se usa para la relación entre las 2 tablas llamadas “post” y “tags”. Estas tablas pueden tener una PRIMARY_KEY que contiene ambos campos.</div>
<div>&nbsp;</div>
<div>9. Mejor ENUM que VARCHAR</div>
<div id="">Las columnas del tipo ENUM son más rápidas y compactas. Internamente son almacenados como TINYINT, sin embargo pueden contener y mostrar valores string. Esto es ideal para ciertos campos.</div>
<div id="">Si tienes un campo, que contendrá solo un subconjunto de valores, es conveniente usar ENUM antes que VARCHAR. Por ejemplo, si tienes una columna llamada “estado”, solo contendrá los valores, “activo”, “inactivo”, “pendiente”, etc…</div>
<div id="">Existe una forma de conseguir una “sugerencia” por parte del mismo MySQL en como estructurar tu tabla. Cuando tienes un campo VARCHAR, puede sugerirte cambiar el tipo de la columna a ENUM. Esto lo realizas usando la llamada PROCEDURE ANALYSE().</div>
<div>&nbsp;</div>
<div>10. Conseguir sugerencias con PROCEDURE ANALYSE()</div>
<div id="">PROCEDURE ANALYSE() le dirá a MySQL que analice la estructura de la columna y los datos actuales en tu tabla, lo cual lo hace con ciertas sugerencias para ti. Por supuesto, esto es útil si los datos de la tabla sean los actuales, porque tienen n rol fundamental en la decisión.</div>
<div id="">Por ejemplo, si creas un campo INT como clave primaria, pero sin embargo no tienes muchas filas, podrá sugerirte usar MEDIUMINT, o si estas usando un campo VARCHAR, podría sugerir convertirlo a ENUM, si solo hay valores únicos.</div>
<div id="">También puedes correr clickeando en “Proponer estructura de tabla” de phpMyAdmin, en la vista de tu tabla.</div>
<div id="">Ten presente que estas son solo sugerencias. Y si tu tabla va a crecer enormente, puede ser que no debas seguir estas sugerencias. La decisión es tuya, si es conveniente o no.</div>
<div><b>&nbsp;</b></div>
<div>11. De ser posible utilizar NOT NULL</div>
<div id="">Al menos que tengas una razón específica para usar valores NULL, deberías siempre configurar tus columnas como NOT NULL.</div>
<div id="">Ante todo, debes preguntarte si hay alguna diferencia entre tener un valor string vacío o un valor NULL (para campos INT:0 vs NULL). Si no hay razón para tener ambas, no necesitas tener un campo NULL. Sabías que Oracle considera NULL y un string vacío como lo mismo?</div>
<div id="">Las columnas NULL requieren espacio adicional y pueden agregar complejidad a tus sentencias de comparación. Solo los ayuda cuando tu puedes. Sin embargo, entiendo que algunas personas deberían tener una razón específica, para incluir valores Nulos, el cual no es siempre malo.</div>
<div id="">De la documentación de MySQL:</div>
<div id="">“Las columnas NULL requieren un espacio adicional en la fila del registro si sus valores son NULL. Para tablas MyISAM, cada columna toma un bit extra, que ronda cerca del byte.</div>
<div>&nbsp;</div>
<div>12. Preparando sentencias</div>
<div id="">Hay múltiples beneficios de usar sentencias preparadas, por razones de performance y seguridad.</div>
<div id="">Las Sentencias pre configuradas filtrará las variables que se unen a ellos por defecto, el cual es ideal para proteger tu aplicación contra ataques de inyección SQL. Puedes por supuesto filtrar tus variables manualmente, pero estos métodos son más propensos a errores humanos y olvido por parte del programador. Esto es al menos un problema menor cuando usas alguna clase de framework o ORM.</div>
<div id="">Dado que la atención se centra en el rendimiento, debería mencionar los beneficios en esta área, los cuales son mas significantes cuando la misma consulta comienza a usarse varias veces en la aplicación. Puedes asignar diferentes valores a la misma sentencia pre configurada, sin embargo MySQL solo tendrá que analizar una vez.</div>
<div id="">También en las últimas versiones de MySQL envía sentencias pre configuradas en forma binaria nativa, el cual es más eficiente y puede ayudar a reducir el delay de red.</div>
<div id="">Para usar sentencias pre configuradas en PHP puedes consultar la extensión mysqli o usar una base de datos con la capa de abstracción como la DOP.</div>
<pre name="code" class="php">
    // Crear la sentencia preparada
    if ($stmt = $mysqli-&gt;prepare("SELECT username FROM user WHERE state=?")) {
        // unir parametros
        $stmt-&gt;bind_param("s", $state);
        // ejecutar
        $stmt-&gt;execute();
        // unir a una variable de resultado
        $stmt-&gt;bind_result($username);
        // buscar valores
        $stmt-&gt;fetch();
        printf("%s is from %s\n", $username, $state);
        $stmt-&gt;close();
    }
</pre>
<div>&nbsp;</div>
<div>13. Consultas sin búfer</div>
<div id="">Normalmente cuando realizas una consulta desde un script, espera hasta que la ejecución finalice antes de continuar. Lo puedes cambiar usando consultas sin búfer.</div>
<div id="">Hayn una explicación extensa en la documentación de PHP para la función mysql_unbuffered_query():</div>
<div id="">“mysql_unbuffered_query() envia la consulta SQL a MySQL sin ir a buscar automáticamente y almacenar en búfer las filas resultantes como lo hace mysql_query(). Esto ahora una enorme cantidad de memoria con las consultas SQL que producen un gran número de resultados y puedes empezar a trabajar con los resultados inmediatamente luego de recuperar la primer fila ya que no tienes que esperar hasta que la consulta SQL se haya realizado.”</div>
<div id="">Sin embargo, esto tiene ciertas limitaciones. Tienes que leer todas las filas o llamar a mysql_free_result() antes de poder realizar otra consulta. Tampoco está permitido usar mysql_num_rows() o mysql_data_seek() en el conjunto de resultados.</div>
<div>&nbsp;</div>
<div>14. Almacenar Direcciones IP como UNSIGNED INT</div>
<div id="">Muchos programadores crean un campo VARCHAR(15) sin darse cuenta que pueden almacenar direcciones IP como un valor entero. Con un INT puedes reducir a solo 4 bytes de espacio, y tener un campo de tamaño fijo en su lugar.</div>
<div id="">Tienes que asegurarte que tu columna es un UNSIGNED INT, porque la dirección IP usa todo el rango de un entero sin signo de 32 bit.</div>
<div id="">En tus consultas puedes usar el INET_ATON() para convertir una IP a entero, y INET_NTOA() en sentido contrario. Hay funciones similares en PHP llamadas ip2long() y log2ip().</div>
<pre name="code" class="php">>$r = "UPDATE users SET ip = INET_ATON('{$_SERVER['REMOTE_ADDR']}') WHERE user_id = $user_id";</pre>
<div>&nbsp;</div>
<div>15. Tablas (estáticas) fijar la longitud son más rápidas</div>
<div id="">Cuando todas las columnas en una tabla son de “longitud-fija”, la tabla también es considerada “estática” o “long-fija”. Por ejemplo columnas que no son consideradas de longitud fija son: VARCHAR, TEXT, BLOB. Si incluyes solo 1 de estas columnas, la tabla deja de ser considerada de long-fija y tiene que ser tratada de forma diferente por el motor MySQL.</div>
<div id="">Las tablas de long-fija pueden mejorar su rendimiento porque el motor MySQL es más rápido al buscar a través de los registros. Cuando quiere leer una fila específica en la tabla, puede calcular rápidamente la posición. Si tiene una fila que no es de longitud fija, cada vez que hace una búsqueda, tiene que consultar el índice de la clave primaria.</div>
<div id="">También es más fácil para cachear y más fácil reconstruir luego de un accidente. Pero también pueden tener más espacio. Pero también, si conviertes un campo VARCHAR(20) a CHAR(20), tendrás siempre 20 bytes de espacio independientemente de que es lo que contenga.</div>
<div>&nbsp;</div>
<div>16. Particionado Vertical</div>
<div id="">Particionado vertical es el acto de dividir la estructura de la tabla en forma vertical por razones de optimización.</div>
<div id="">Ejemplo 01: Podrías tener una tabla de usuarios que contiene “dirección”, que no se lee muy a menudo. Puedes elegir dividir la tabla y almacenar la información de la dirección en una tabla separada. De esa forma, la tabla de usuarios principal disminuirá de tamaño. Como es sabido, las tablas pequeñas funcionan más rápidas.</div>
<div id="">Ejemplo 02: si tienes una campo “ultimo_login” en tu tabla. Se actualiza cada vez que un usuario se loguea en tu página web. Pero cada actualización en la tabla causa que la cache de la tabla se actualice. Puedes poner el campo en otra tabla para actualizar la tabla de usuarios a un mínimo.</div>
<div id="">Pero también es necesario para asegurarse de que no necesitas contantemente unir estas 2 tablas luego del particionado o podrías sufrir una reducción de rendimiento.</div>
<div>&nbsp;</div>
<div>17. Dividir grandes consultas DELETE o INSERT</div>
<div id="">Si necesitas realizar una gran consulta DELETE o INSERT en un sitio web, necesitas ser cuidados de no perturbar el tráfico de la web. Cuando una gran consulta como esa es realizada, puede bloquear tus tablas y parar la aplicación web.</div>
<div id="">Apache corre muchos hilos/procesos en paralelo. Por lo tanto trabaja más eficientemente cuando el script finaliza de ejecutarse tan pronto sea posible, para que los servidores no experimenten demasiadas conexiones y procesos abiertas a la vez que consumen recursos, especialmente memoria.</div>
<div id="">Si el bloqueo de tus tablas finaliza luego de un largo período de tiempo largo (como 30segundos o mas), en un sitio web de alto tráfico, puede causar un error, el cual puede tomas un período prolongado de tiempo para aclarar o aún peor, un accidente en tu sitio web.</div>
<div id="">Si tienes algún script de mantenimiento que necesita borrar un número grande de filas, solo use la cláusula LIMIT para hacerlo en lotes y así evitar una congestión.</div>
<pre name="code" class="php">
    while (1) {
        mysql_query("DELETE FROM logs WHERE log_date &lt;= '2009-10-01' LIMIT 10000");
        if (mysql_affected_rows() == 0) {
            // borrado listo
            break;
        }
        // incluso puede pausarlo un poco<
        usleep(50000);
    }
</pre>
<div>&nbsp;</div>
<div>18. Las columnas pequeñas son más rápidas</div>
<div id="">Con el motor de base de datos, el disco es tal vez el mayor cuello de botella. Conservar cosas pequeñas y mas compactas es usualmente una ayuda en términos de rendimiento para reducir la cantidad de transferencia.</div>
<div id="">La documentación de MySQL tiene una lista de requerimientos de almacenamiento para todos los tipos de datos.</div>
<div id="">Si se espera que una tabla tenga pocas filas, no hay razón para hacer una clave primaria como INT, en lugar de MEDIUMINT, SMALLINT o incluso en algunos casos TINYINT. Si no necesitas la variable tiempo, usar DATE en lugar de DATETIME.</div>
<div id="">Solo asegúrese de dejar espacio razonable para crecer o podría terminar como Slashdot.</div>
<div>&nbsp;</div>
<div>19. Elegir el motor correcto de almacenamiento</div>
<div id="">Los dos motores principales en MySQL son MyISAM e InnoDB. Cada uno tiene sus pros y su contra.</div>
<div id="">MyISAM es ideal para aplicaciones grandes lecturas, pero no es escalable cuando hay muchas escrituras. Incluso si acutalizas un campo de una fila, toda la tabla se bloquea, y ningún proceso puede leer de él hasta que la consulta finalice.</div>
<div id="">InnoDB tiende a hacer un motor de almacenamiento más complicado y puede ser más lenta que MyISAM desde la mayoría de las aplicaciones pequeñas. Pero soporta bloqueo de filas, el cual es mejor escalable. Soporta también algunas de las más avanzadas características tales como transacciones.</div>
<div>&nbsp;</div>
<div>20. Usar un Objeto Relacional Mapper</div>
<div id="">Al usar un ORM (Objeto Ralacional Mapper), puedes ganar ciertos beneficios en performance. Todo lo que un ORM puede hacer, puede ser codificado manualmente también. Pero esto puede significar más trabajo extra y un alto nivel de experiencia.</div>
<div id="">Los ORM son ideales para “Lectura lenta”. Esto es que puede recuperar valores solo cuando con necesarios. Pero hay que ser cuidadoso con ellos o puedes terminar creando demasiadas mini-consultas que pueden reducir el rendimiento.</div>
<div id="">Los ORM pueden lotear sus consultas en las transacciones, el cual opera mucho más rápido que enviar consultas individuales a la base de datos.</div>
<div>&nbsp;</div>
<div>21. Hay que ser cuidadoso con conexiones persistentes</div>
<div id="">Conexiones persistentes significa reducir la sobrecarga de recrear conexiones a MySQL. Cuando una conexión persistente es creada, esta permanecerá aún cuando el script termine de correr. Dado que Apache rehúsa sus procesos hijos, la próxima el proceso corre como un nuevo script, y rehusará la misma conexión MySQL.</div>
<div id="">mysql_pconnect() en PHP</div>
<div id="">Suena fantástico en teoría. Pero puedes llegar a tener serios problemas con limitar las conexiones, el uso de la memoria y así sucesivamente.</div>
<div id="">Apache corre en paralelo, y crea muchos procesos hijos. Esta es la principal razón que las conexiones persistentes no trabajan muy bien en este ambiente. Antes de considerar utilizar la función mysq_pconnect(), debes consultar con tu administrador de sistemas.</div>
<div>&nbsp;</div>
<div>Fuente: <a href="http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/" target="_blank">NetTuts</a></div>
]]></content:encoded>
			<wfw:commentRss>http://todounblog.com.ar/tips-para-mysql-buenos-usos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Python: Cronometro (pyqt4 &#8211; python 2.6)</title>
		<link>http://todounblog.com.ar/python-cronometro-pyqt4-python-2-6/</link>
		<comments>http://todounblog.com.ar/python-cronometro-pyqt4-python-2-6/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 12:00:10 +0000</pubDate>
		<dc:creator>Ariel</dc:creator>
				<category><![CDATA[Ayuda]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[pyqt4]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://todounblog.com.ar/?p=753</guid>
		<description><![CDATA[Para hacer un cronometro vamos a recurrir al timer de python.
Empezamos por definir nuestra interfaz con &#8220;Designer&#8221;, en el cual incluimos 3 botones, y 1 etiqueta, donde incluimos el evento de salir desde la misma interfáz, y nos quedaría como muestra la figura.

Una vez que compilamos nuestra interfáz con pyuic4 de la siguiente manera:

pyuic4 -o [...]]]></description>
			<content:encoded><![CDATA[<p>Para hacer un cronometro vamos a recurrir al timer de python.</p>
<p style="text-align: left;">Empezamos por definir nuestra interfaz con &#8220;Designer&#8221;, en el cual incluimos 3 botones, y 1 etiqueta, donde incluimos el evento de salir desde la misma interfáz, y nos quedaría como muestra la figura.</p>
<p style="text-align: center;"><img src="http://todounblog.com.ar/imgblog/cronometro.gif" alt="cronometro Python: Cronometro (pyqt4   python 2.6)"  title="Python: Cronometro (pyqt4   python 2.6)" /></p>
<p style="text-align: left;">Una vez que compilamos nuestra interfáz con pyuic4 de la siguiente manera:</p>
<blockquote>
<p style="text-align: left;"><code>pyuic4 -o ui_clockwatch.py -x cronometro.ui</code></p>
</blockquote>
<p style="text-align: left;">vamos a nuestra interfaz de desarrollo preferida y empezamos a escribir nuestro código.</p>
<p style="text-align: left;"><span id="more-753"></span>Iniciamos con las importaciones, donde está nuestro interfaz que recién habíamos creado y en la segunda linea  incluimos la codificación para la escritura y así no tener problemas con los acentos y las ñ.</p>
<pre name="code" class="py">#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
import sys
from ui_clockwatch import Ui_watch
from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import (QMessageBox, QMainWindow, QWidget, QApplication)
from PyQt4.QtCore import (Qt, SIGNAL, pyqtSignature, QBasicTimer)</pre>
<p>Creamos nuestra clase principal donde inicializamos las variables, creamos nuestro timer:</p>
<pre name="code" class="py">class Clock(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
	self.ui = Ui_watch()
	self.ui.setupUi(self)

        #Inicializo variables
        self._start = 0.0
        self._elapsedtime = 0.0
        self._running = 0
        self._setTime(self._elapsedtime)

        #Creo mi Timer
        self.timer = QtCore.QBasicTimer()</pre>
<p>Defino los eventos de los botones:</p>
<pre name="code" class="py">    @pyqtSignature("")
    def on_btn_start_clicked(self):
        try:
            """ Iniciar cronometro, ignorar si se está ejecutando. """
            if not self._running:
                self._start = time.time() - self._elapsedtime
                self._running = 1
                self.timer.start(100, self)
                self.ui.btn_start.setText("Detener")
            else:
                self.timer.stop()
                self._elapsedtime = time.time() - self._start
                self._setTime(self._elapsedtime)
                self.ui.btn_start.setText("Continuar")
                self._running = 0

        except:
            QMessageBox.warning(self, "Mensaje",
                            unicode("Error: Controlar el botón de inicio"))
    @pyqtSignature("")
    def on_btn_reset_clicked(self):
        """ Reinicio mi cronometro. """
        self._start = time.time()
        self._elapsedtime = 0.0
        self._setTime(self._elapsedtime)</pre>
<p>Defino las funciones del timer y para configurar mi reloj:</p>
<pre name="code" class="py">    def timerEvent(self, event):
        try:
            """ Actualizo la etiqueta con tiempo remanente. """
            elap = time.time() - self._start
            """ Configuro el string con Minutos, segundo y centesimas de seg. """
            minutes = int(elap/60)
            seconds = int(elap - minutes*60.0)
            hseconds = int((elap - minutes*60.0 - seconds)*100)
            self.ui.lb_watch.setText('%02d:%02d:%02d' % (minutes, seconds, hseconds))

            # Paro mi reloj en 5 segundos
            if seconds==5:
              self.timer.stop()
              # Corrijo los milisegundos
              hseconds=00
              self.ui.lb_watch.setText('%02d:%02d:%02d' % (minutes, seconds, hseconds))

        except:
            QMessageBox.warning(self, "Mensaje",
                            unicode("Error: Controlar timer"))

    def _setTime(self, elap):
        """ Configuro el string con Minutos, segundo y centesimas de seg. """
        minutes = int(elap/60)
        seconds = int(elap - minutes*60.0)
        hseconds = int((elap - minutes*60.0 - seconds)*100)
        self.ui.lb_watch.setText('%02d:%02d:%02d' % (minutes, seconds, hseconds))</pre>
<p>y por último creo mi aplicación.</p>
<pre name="code" class="py">if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = Clock()
    myapp.show()
    sys.exit(app.exec_())</pre>
<p><a href="http://todounblog.com.ar/wp-content/plugins/cimy-counter/cc_redirect.php?cc=py_cronometro&#038;fn=http://todounblog.com.ar/download/cronometro.rar">Aquí tienes el código para descargar.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://todounblog.com.ar/python-cronometro-pyqt4-python-2-6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tips: Solución cuando Gmail no funciona</title>
		<link>http://todounblog.com.ar/tips-solucion-cuando-gmail-no-funciona/</link>
		<comments>http://todounblog.com.ar/tips-solucion-cuando-gmail-no-funciona/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 13:48:29 +0000</pubDate>
		<dc:creator>Ariel</dc:creator>
				<category><![CDATA[Ayuda]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://todounblog.com.ar/?p=771</guid>
		<description><![CDATA[

Alguna vez te ha pasado, que gmail tira un error, poco común, pero bueno es algo natural, je!, pero si te urge entrar al correo y no quieres esperar a que se soluciones la gente de la pda de tugsteno ha traducido un tutorial donde nos aconsejan seguir alguno de estos ocho pasos:




Modo a prueba [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://todounblog.com.ar/imgblog/gmailerror.gif" alt="gmailerror Tips: Solución cuando Gmail no funciona"  title="Tips: Solución cuando Gmail no funciona" /></p>
<p style="text-align: left;">
Alguna vez te ha pasado, que gmail tira un error, poco común, pero bueno es algo natural, je!, pero si te urge entrar al correo y no quieres esperar a que se soluciones la gente de l<a href="www.pdatungsteno.com/">a pda de tugsteno </a>ha traducido un tutorial donde nos aconsejan seguir alguno de estos ocho pasos:<em><br />
</em></p>
<p><span id="more-771"></span></p>
<ul>
<blockquote>
<li><strong>Modo a prueba de fallos:</strong> <a onclick="javascript:pageTracker._trackPageview('/outgoing/mail.google.com/mail/?labs=0');" href="http://mail.google.com/mail/?labs=0" target="_blank">http://mail.google.com/mail/?labs=0</a>. Desactiva las funcionalidades experimentales de Google Labs, en caso de que alguna de ellas esté causando el problema. Algunas de estas funcionalidades se pueden desactivar a través de la página de opciones de la cuenta.</li>
<li><strong>Modo seguro:</strong> <a onclick="javascript:pageTracker._trackPageview('/outgoing/mail.google.com/');" href="https://mail.google.com/" target="_blank">https://mail.google.com/</a>. Cifra la comunicación entre nuestro ordenador y los servidores de Google. Útil para usarlo en ordenadores públicos, redes WiFi o cuando se pasa a través de un proxy. Hay una opción que redirige automáticamente la URL normal a la versión segura (”Siempre usar HTTPS”).</li>
<li><strong>Versión antigua:</strong> <a onclick="javascript:pageTracker._trackPageview('/outgoing/mail.google.com/mail/?ui=1');" href="http://mail.google.com/mail/?ui=1" target="_blank">http://mail.google.com/mail/?ui=1</a>. Esta versión fue reemplazada en octubre de 2007 durante un rediseño de Google, pero es un poco más rápida que la actual.</li>
<li><strong>Modo básico:</strong> <a onclick="javascript:pageTracker._trackPageview('/outgoing/mail.google.com/mail/?ui=html');" href="http://mail.google.com/mail/?ui=html" target="_blank">http://mail.google.com/mail/?ui=html</a>. Es la versión que no utiliza JavaScript, así que carga más rápido y funciona mejor con navegadores antiguos. Desafortunadamente se pierden muchas funcionalidades de Gmail (autocompletado de contactos, chat, corrector ortográfico, texto enriquecido) y cada click recarga la página completa. Si prefieres esta versión, haz clic en el enlace “Poner HTML básico como vista por defecto” que sale al cargar Gmail.</li>
<li><strong>Modo móvil:</strong> <a onclick="javascript:pageTracker._trackPageview('/outgoing/mail.google.com/mail/?ui=html');" href="http://mail.google.com/mail/?ui=html" target="_blank">http://mail.google.com/mail/?ui=html</a> o <a onclick="javascript:pageTracker._trackPageview('/outgoing/m.gmail.com');" href="http://m.gmail.com/" target="_blank">http://m.gmail.com</a>. Es la versión simplificada de Gmail para teléfonos móviles, que tiene aún menos funcionalidades que el modo básico. Úsalo si ningún otro modo de Gmail te funciona.</li>
<li><strong>Modo iPhone:</strong> <a onclick="javascript:pageTracker._trackPageview('/outgoing/mail.google.com/mail/x/gdlakb-/gp/');" href="http://mail.google.com/mail/x/gdlakb-/gp/" target="_blank">http://mail.google.com/mail/x/gdlakb-/gp/</a>. Una versión más usable para el iPhone y otros equipos que usen navegadores basados en WebKit.</li>
<li><strong>Gadget de iGoogle:</strong> <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.google.com/ig/gmailmax');" href="http://www.google.com/ig/gmailmax" target="_blank">http://www.google.com/ig/gmailmax</a>. Este es la vista en lienzo del gadget de Gmail que se puede encontrar en el nuevo iGoogle. Algunas personas descubrieron que este interface se salta muchos filtros corporativos que impiden acceder a Gmail desde el trabajo.</li>
<li><strong>Modo “no comprobar el navegador”:</strong> <a onclick="javascript:pageTracker._trackPageview('/outgoing/mail.google.com/mail?nocheckbrowser');" href="http://mail.google.com/mail?nocheckbrowser" target="_blank">http://mail.google.com/mail?nocheckbrowser</a>. Si utilizas un navegador super-novedoso y Gmail te sirve el modo HTML básico, prueba esta URL para saltar la detección del navegador</li>
</blockquote>
</ul>
<p>Es horrible quedarse sin mail, y más si es de gmail.</p>
<p>Gracias | <a href="www.pdatungsteno.com/">La pda de tugsteno</a></p>
]]></content:encoded>
			<wfw:commentRss>http://todounblog.com.ar/tips-solucion-cuando-gmail-no-funciona/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tips: Mision posible &#8211;&gt; Elegir una contraseña segura</title>
		<link>http://todounblog.com.ar/tips-elegir-password-seguro/</link>
		<comments>http://todounblog.com.ar/tips-elegir-password-seguro/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 12:40:06 +0000</pubDate>
		<dc:creator>Ariel</dc:creator>
				<category><![CDATA[Ayuda]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://todounblog.com.ar/?p=733</guid>
		<description><![CDATA[El primer consejo de todo informático es &#8221; tenes que elegir una buena contraseña&#8221; asi nadie se hace pasar por vos,  independientemente de si le das o no, a tu novia la clave de tu correo para que lea y responda tu mail, je!,  la verdad es que un tema importantísimo aunque no pienses igual, porque [...]]]></description>
			<content:encoded><![CDATA[<p>El primer consejo de todo informático es &#8221; tenes que elegir una buena contraseña&#8221; asi nadie se hace pasar por vos,  independientemente de si le das o no, a tu novia la clave de tu correo para que lea y responda tu mail, je!,  la verdad es que un tema importantísimo aunque no pienses igual, porque hoy en día el principal canal de comunicación es el correo electrónico, y si alguien mal intencionado descifra tu clave puede hacerse pasar por vos y te puedo asegurar que vas a tener problemas.</p>
<p>De todas formas,  la forma mas simple y rápida es utilizar un servicio de creación de claves, como el de <a href="http://password.es" target="_blank">password.es</a>, pero lo único que tienes que empezar a ejercitar tu memoria!.</p>
<p>Sin mas preámbulo, vamos a elegir la nuestra:</p>
<ul>
<li>Si eres un navegante asiduo de internet a estas alturas ya estarás registrado en varios sitios y lo mas probable es que hayas elegido la misma contraseña para todos ellos, pues te tengo una mala noticia, no es lo mejor que hayas hecho, je!. Deberías utilizar password distintos para los distintos servicios, o por lo menos decidir darles prioridades a ellos, por ej. elegir password distintas para tus correos, cuenta bancaria, y reutilizar tu password para aquellos sitios que son de menor relevancia.</li>
<li>Debes tratar que tus password estén compuestos por una combinación de letras y números, como por ej. elegir una frase e ir enmascarandola con algunos caracteres (reemplazar letras por números, mayúsculas por minúsculas, etc.)  para que sea una frase sin sentido y asi complicando a quien quiera descifrar nuestra clave.</li>
<li>Evita usar como password datos personales, como nombres, dirección, etc. porque esa información generalmente es pública, porque compartimos con amigos, familiares, compañeros de trabajo, etc. y sería fácilmente descifrable.</li>
<li>NO debes escribir tus password en lugares inseguros (la mesa luz de tu dormitorio, debajo del teclado, en tu maletín, etc.), porque es una práctica también habitual, por lo menos hasta que te lo aprendas. Si lo vas a hacer, debes pensarlo por lo menos 2 veces antes de buscar algún lugar.</li>
<li>Asegúrate de que el sitio donde te registras tenga algún sistema para recuperar tu cuenta, como por ej. pregunta secreta, envío de una nueva contraseña a algún correo (mantén activa tu cuenta receptora), etc.</li>
</ul>
<p>Bueno, espero que le des una utilidad, y nos vemos cuando nos encontramos!.</p>
<p>Mas info | <a href="http://gmailblog.blogspot.com/2009/10/choosing-smart-password.html" target="_blank">Gmail Blog</a></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Utilizar una contraseña diferente para cada servicio: aunque es habitual que dada nuestra memoria empleemos la misma contraseña para diferentes cuentas.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Usar una mezcla de letras, números y símbolos evitando palabras de lo más comunes.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Usar una contraseña que sea difícil de adivinar y no usar nada que haga referencia a datos personales.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">No dejar nada a la vista que pueda servir para recordar tu contraseña como notas de papel colgadas de tu pantalla.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Mantén actualizada la dirección de correo donde recibirás una nueva contraseña en caso de pérdida o roboDespués de las noticias relativas al robo de contraseñas en servicios de correo online como Hotmail, Google o Yahoo, en el blog de Gmail han decidido aportar su granito de arena y ofrecer los pasos necesarios para elegir una buena contraseña. Aunque se ha escrito en muchos sitios sobre este tema no está de más recordarlo para que no nos pillen a calzón quitado. Los cinco puntos clave se resumen de la siguiente forma:</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Utilizar una contraseña diferente para cada servicio: aunque es habitual que dada nuestra memoria empleemos la misma contraseña para diferentes cuentas.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Usar una mezcla de letras, números y símbolos evitando palabras de lo más comunes.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Usar una contraseña que sea difícil de adivinar y no usar nada que haga referencia a datos personales.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">No dejar nada a la vista que pueda servir para recordar tu contraseña como notas de papel colgadas de tu pantalla.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Mantén actualizada la dirección de correo donde recibirás una nueva contraseña en caso de pérdida o robo.</div>
]]></content:encoded>
			<wfw:commentRss>http://todounblog.com.ar/tips-elegir-password-seguro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recuperar el Grub2 luego de instalar Windows 7</title>
		<link>http://todounblog.com.ar/recuperar-el-grub2-luego-de-instalar-windows-7/</link>
		<comments>http://todounblog.com.ar/recuperar-el-grub2-luego-de-instalar-windows-7/#comments</comments>
		<pubDate>Fri, 25 Dec 2009 19:35:27 +0000</pubDate>
		<dc:creator>Ariel</dc:creator>
				<category><![CDATA[Ayuda]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[grub2]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://todounblog.com.ar/?p=689</guid>
		<description><![CDATA[Me toco reinstalar windows y ya que estamos me he decidido a probar Windows 7, ya que la mayoria de mis contactos usan este SO, y para poder orientarlos tenia que probarlo, pero bueno, el punto es que me borró el ¡Grub!
En fin, me puse a buscar y con el tutorial que pude recuperlo fue, [...]]]></description>
			<content:encoded><![CDATA[<p>Me toco reinstalar windows y ya que estamos me he decidido a probar Windows 7, ya que la mayoria de mis contactos usan este SO, y para poder orientarlos tenia que probarlo, pero bueno, el punto es que me borró el ¡Grub!<br />
En fin, me puse a buscar y con el tutorial que pude recuperlo fue, el que voy a detallar a continuación:</p>
<p>Comenzamos por arrancar desde un live-CD nuestro ubuntu:</p>
<p>Luego abres una terminal desde: Aplicaciones –&gt; Accesorios –&gt; Terminal<br />
<span id="more-689"></span>Tipeamos:<br />
<span style="color: #0000ff;"><br />
sudo fdisk -l<br />
(Esto te indicará cual es la partición linux<br />
supongamos que /dev/sda3, cambia por la que corresponda)<br />
sudo mkdir /mnt/ubuntu<br />
sudo chmod -Rf 777 /mnt/ubuntu<br />
sudo mount /dev/sda3 /mnt/ubuntu<br />
sudo mkdir /mnt/ubuntu/dev<br />
sudo chmod -Rf 777 /mnt/ubuntu/dev<br />
sudo mount &#8211;bind /dev/ /mnt/ubuntu/dev<br />
sudo chroot /mnt/ubuntu<br />
sudo grub-install &#8211;root-directory=/mnt/ubuntu /dev/sda<br />
sudo grub-install &#8211;recheck /dev/sda<br />
sudo update-grub<br />
sudo umount /mnt/ubuntu/dev<br />
sudo umount /mnt/ubuntu<br />
sudo reboot</span></p>
<p>Al reiniciar podemos arrancar desde nuestra instalación en el disco<br />
Pero como al reiniciar la opción de booteo de nuestro nuevo windows 7, debemos seguir la recuperación con lo siguiente:</p>
<p>Creamos un archivo <span style="color: #0000ff;">/etc/grub.d/20_windows7</span> que debe contener lo siguiente:</p>
<p>#! /bin/sh -e<br />
cat &lt;&lt; EOF<br />
menuentry “Microsoft Windows XP Professional” {<br />
set root=(hd0,1)<br />
chainloader +1<br />
}<br />
EOF</p>
<p>Ahora debemos darle permisos de ejecución a este archivo y luego actualizar grub:</p>
<p><span style="color: #0000ff;">chmod +x /etc/grub.d/20_windows7<br />
update-grub</span></p>
<p>Hasta aqui, personalmente he solucionado mi problema, pero si tienes problemas con el tiempo que te da para elegir opción, debes intentar lo siguiente:</p>
<p>Cuando reinicio, me encuentro con lo mismo, carga el grub e inmediatamente carga Karmic sin darme chance a nada, hasta que me topo con este tip:</p>
<p><span style="color: #0000ff;">sudo gedit /etc/default/grub</span></p>
<p>Buscamos esta linea</p>
<p><span style="color: #0000ff;">GRUB_HIDDEN_TIMEOUT</span></p>
<p>Y la comentamos con un #, de forma que nos quede:</p>
<p><span style="color: #0000ff;">#GRUB_HIDDEN_TIMEOUT</span></p>
<p>Guardamos y actualizamos el grub con:<br />
<span style="color: #0000ff;"><br />
sudo update-grub</span></p>
<p>Bueno, con esto ya tiene que quedar todo en su lugar y funcionando, asi que espero que te haya servido y nos vemos cuando nos encontramos!!</p>
<p>Gracias | <a href="http://elsoftwarelibre.wordpress.com/2009/11/17/recuperar-grub2-karmic-koala-y-solucionar-error-en-el-grub2/" target="_blank">ElSoftwareLibre</a></p>
<p>Otra opción | <a href="http://go2.wordpress.com/?id=725X1342&amp;site=bioinformatiquillo.wordpress.com&amp;url=http%3A%2F%2Fmundogeek.net%2Farchivos%2F2009%2F12%2F08%2Frecuperar-grub-2" target="_blank">MundoGeek</a></p>
]]></content:encoded>
			<wfw:commentRss>http://todounblog.com.ar/recuperar-el-grub2-luego-de-instalar-windows-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tips: Encuentra a usuarios de tu ciudad en Twitter.com</title>
		<link>http://todounblog.com.ar/tips-encuentra-usuarios-misma-ciudad-twitter/</link>
		<comments>http://todounblog.com.ar/tips-encuentra-usuarios-misma-ciudad-twitter/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 13:06:23 +0000</pubDate>
		<dc:creator>Ariel</dc:creator>
				<category><![CDATA[Ayuda]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://todounblog.com.ar/?p=547</guid>
		<description><![CDATA[

Simplemente si lo que buscas son usuarios de tu ciudad en twitter, solo tienes que escribir en google.com lo siguiente
&#8221; site:twitter.com ciudad pais&#8221;
Saludos!
]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://todounblog.com.ar/imgblog/twitter.gif" alt="twitter Tips: Encuentra a usuarios de tu ciudad en Twitter.com"  title="Tips: Encuentra a usuarios de tu ciudad en Twitter.com" /></p>
<p style="text-align: left;">
Simplemente si lo que buscas son usuarios de tu ciudad en <a href="http://twitter.com" target="_blank">twitter</a>, solo tienes que escribir en google.com lo siguiente</p>
<p>&#8221; site:twitter.com <span style="color: #ff0000;"><em><strong>ciudad</strong></em></span> <span style="color: #0000ff;"><strong><em>pais</em></strong></span>&#8221;</p>
<p>Saludos!</p>
]]></content:encoded>
			<wfw:commentRss>http://todounblog.com.ar/tips-encuentra-usuarios-misma-ciudad-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux: Super Grub disk &#8211; Recupera el arranque</title>
		<link>http://todounblog.com.ar/linux-super-grub-disk-recupera-el-arranque/</link>
		<comments>http://todounblog.com.ar/linux-super-grub-disk-recupera-el-arranque/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 00:30:30 +0000</pubDate>
		<dc:creator>Ariel</dc:creator>
				<category><![CDATA[Ayuda]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[grub]]></category>

		<guid isPermaLink="false">http://todounblog.com.ar/?p=513</guid>
		<description><![CDATA[En un post anterior comentaba como recuperar el sector de arranque si por alguna razón se te ha borrado y ya no puedes acceder a tu querido Linux, pero llevaba un par de pasos que requerian de un conocimiento minimo, por eso ahora te presento esta herramienta que te puede facilitar un poco la tarea, [...]]]></description>
			<content:encoded><![CDATA[<p>En un <a href="http://todounblog.com.ar/grub-como-recuperar-selector-booteo-pc/">post</a> anterior comentaba como recuperar el sector de arranque si por alguna razón se te ha borrado y ya no puedes acceder a tu querido Linux, pero llevaba un par de pasos que requerian de un conocimiento minimo, por eso ahora te presento esta herramienta que te puede facilitar un poco la tarea, aunque tambien necesitas saber un poco de como funciona el sistema.</p>
<p><a href="http://www.supergrubdisk.org/"><strong>Super Grub Disk</strong></a>: recientemente liberó una nueva versión la 0.9799 y como la mayoria de las aplicaciones en linux es libre y en este caso  nos ayudará a restaurar el Grub.</p>
<p>Características:</p>
<ul>
<li> restaurar Grub en MBR automáticamente</li>
<li>arranque de Windows</li>
<li>arranque de otros sistemas operativos (SOs)</li>
<li> arranque de GNU Hurd</li>
<li> arranque de GNU Linux</li>
<li> arrancar tu antiguo SO (un linux u otro)</li>
</ul>
<p><span id="more-513"></span></p>
<p>Esta última versión de Super Grub Disk, según se indica en su <a href="http://www.supergrubdisk.org/">sitio oficial</a>, será la última basada en Grub, ya que a partir de la próxima estará basada en Grub2.</p>
<p>Para hacer uso de esta herramienta, tan sólo tenemos que descargar la versión que más nos convenga: CDRom, USB, disquette.</p>
<p style="text-align: center;"><img class="aligncenter" title="Booteando con Super Grub Disk" src="http://www.puntogeek.com/wp-content/uploads/2009/10/sgd1.jpg" alt="sgd1 Linux: Super Grub disk   Recupera el arranque" width="400" height="222" /></p>
<p>Supongamos que descargamos la imagen ISO para CDRom.</p>
<p>La grabamos, reiniciamos la máquina y boteamos desde el CD.</p>
<p>Hecho esto, Super Grub Disk iniciará automáticamente.<br />
Ahora, solo resta seleccionar la opción que más nos convenga y listo! Ya podremos iniciar nuestro GNU/Linux sin mayores problemas.</p>
<p>Un dato interesante, en el sitio de SGD poseen un <a href="http://www.supergrubdisk.org/forum/index.php">foro</a> en varios idiomas, y entre ellos uno en <a href="http://www.supergrubdisk.org/forum/index.php?board=6.0">castellano</a> que puede ayudar a más de uno a sacarse varias dudas : ).</p>
<p>Gracias | <a href="http://www.puntogeek.com/2009/10/14/recupera-el-arranque-de-tu-linux-con-super-grub-disk/" target="_blank">PuntoGeek</a></p>
]]></content:encoded>
			<wfw:commentRss>http://todounblog.com.ar/linux-super-grub-disk-recupera-el-arranque/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wallpapers animados en nuestro Linux</title>
		<link>http://todounblog.com.ar/hack-wallpapers-animados-en-nuestro-linux/</link>
		<comments>http://todounblog.com.ar/hack-wallpapers-animados-en-nuestro-linux/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 22:31:50 +0000</pubDate>
		<dc:creator>Ariel</dc:creator>
				<category><![CDATA[Ayuda]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[wallpapers]]></category>

		<guid isPermaLink="false">http://todounblog.com.ar/?p=502</guid>
		<description><![CDATA[Ayer publicaba un software para poner como video o una animación como fondo de escritorio, pero como todas las cosas, linux también nos permite poner un fondo animado.
Si tienes KDE, puedes ver las instrucciones en este Link.
En Gnome, vamos a ver como podemos hacerlo:
1. Debemos tener los efectos de escritorio activados &#8220;Sistema &#8211;&#62; Preferencias &#8211;&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Ayer publicaba un software para poner como video o una animación como fondo de escritorio, pero como todas las cosas, linux también nos permite poner un fondo animado.</p>
<p>Si tienes KDE, puedes ver las instrucciones en este <a href="http://ubuntulife.wordpress.com/2009/09/19/animated-video-wallpaper-un-video-como-fondo-de-pantalla-de-tu-escritorio-kde/" target="_blank">Link</a>.</p>
<p>En Gnome, vamos a ver como podemos hacerlo:</p>
<p>1. Debemos tener los efectos de escritorio activados &#8220;Sistema &#8211;&gt; Preferencias &#8211;&gt; Apariencia<br />
2. Instalar los siguientes paquetes:  &#8220;<span style="font-weight: bold;">sudo apt-get install zenity mplayer unrar rar</span>&#8221;<br />
3. <strong><span style="font-weight: bold;">Descarga</span>r</strong> el script A-desk: <a href="http://www.megaupload.com/?d=PC8DKN4Q" target="_blank">http://www.megaupload.com/?d=PC8DKN4Q</a></p>
<blockquote><p><a href="http://www.gnome-look.org/content/show.php/Animated+Desktop+(GUI)(EN&amp;ES)?content=88248" target="_blank">Ver ultima versión de Animated Desktop (A-Desk) en Gnome-look</a><span id="more-502"></span></p></blockquote>
<p>4. Una vez descargado el script <span style="font-weight: bold;">descomprimimos</span> su contenido. Dentro tenemos una serie de ficheros .deb<br />
5. <span style="font-weight: bold;">Doble click </span>sobre <span style="font-weight: bold;">xwinwrapcvs.deb</span> para instalar este paquete.</p>
<blockquote><p>Si tienes la versión de 64bits debes hacer doble click sobre <span style="font-weight: bold;">xwinwrap64.deb</span> para iniciar el gestor de paquetes e instalar.</p>
<p>Si prefieres usar la terminal debes escribir: <strong>sudo dpkg -i xwinwrapcvs.deb</strong></p></blockquote>
<p>6. Luego de esto haremos <span style="font-weight: bold;">doble click</span> sobre <span style="font-weight: bold;">a-desk.installer</span> para iniciar la ejecución del script.</p>
<p>Una vez que hayamos terminado de instalar todo podemos empezar a utilizar nuestro escritorio animado haciendo click con el botón derecho del ratón sobre cualquier parte de nuestro escritorio, veremos que en las opciones existe una que responde al nombre de scripts. Ahí podemos <span style="font-weight: bold;">seleccionar el script<strong> </strong></span><strong> A-</strong><span style="font-weight: bold;">desk</span> y tendremos nuestro escritorio con la animación que seleccionemos.</p>
<p style="text-align: center;">Aqui podemos ver un video en acción de un escritorio animado:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="345" height="264" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/FfQ8Fh5-D-U&amp;hl=es&amp;fs=1&amp;border=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="345" height="264" src="http://www.youtube.com/v/FfQ8Fh5-D-U&amp;hl=es&amp;fs=1&amp;border=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p style="text-align: left;">
<p>Si quieres agregar mas videos debes descargarlos desde la web de <span style="font-weight: bold;"><a href="http://www.gnome-look.org/content/show.php/Animated+Desktop+(GUI)(EN&amp;ES)?content=88248" target="_blank">gnome-look</a> </span> podéis descargar más vídeos.</p>
<p style="text-align: left;">En la web de <a href="http://www.ubuntizandoelplaneta.com/2009/09/fondos-animados-en-tu-escritorio-gnome.html" target="_blank">UbuntizandoElPlaneta</a> nos describe los pasos a seguir para poder instalarlos:</p>
<blockquote><p>Copiar el nuevo video a ~/.v.a-desk</p>
<p>Abrir el archivo a-desk de ~/.gnome2/nautilus-scripts/a-desk</p>
<p>Ir a la linea 14 y añadir una linea, en esa linea, añadir:<br />
export TEXTO_DISPARADOR_DESCRIPCION=&#8217;DESCRIPCION&#8217;<br />
ej:export ATOMICCITYd=&#8217;Ciudad Atomica&#8217;</p>
<p>Luego ir a la linea 22 y buscar:<br />
FALSE &#8220;YOUR VIDEO&#8221; &#8220;$YOUR_VIDEOd&#8221;</p>
<p>Y añadir antes de FALSE:<br />
FALSE &#8220;TEXTO_DISPARADOR&#8221; &#8220;$TEXTO_DISPARADOR_DESCRIPCION&#8221;<br />
ej:FALSE &#8220;Atomic_city&#8221; &#8220;$ATOMICCITYd&#8221;</p>
<p>Luego buscar el texto:<br />
&#8220;Atomic_city&#8221;) $xwinwrap_APP ~/.v.a-desk/atomic_city.wmv -loop 0 &amp;<br />
zenity &#8211;info \<br />
&#8211;text &#8220;Animacion de escritorio Atomic city cargado!&#8221;;;<br />
#######################################<br />
Copiarla y pegarla seguidamente.</p>
<p>En la linea copiada, cambiar lo siguiente:<br />
&#8220;TEXTO_DISPARADOR&#8221;) $xwinwrap_APP ~/.v.a-desk/video_archivo_nuevo -loop 0 &amp;<br />
zenity &#8211;info \<br />
&#8211;text &#8220;Animacion de escritorio DESCRIPCION cargado!&#8221;;;<br />
########################################</p></blockquote>
<p>Fuente: <a href="http://www.ubuntizandoelplaneta.com/2009/09/fondos-animados-en-tu-escritorio-gnome.html" target="_blank">UbuntizandoElPlaneta</a></p>
]]></content:encoded>
			<wfw:commentRss>http://todounblog.com.ar/hack-wallpapers-animados-en-nuestro-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software: Erunt (Crear backup del registro de Windows)</title>
		<link>http://todounblog.com.ar/software-erunt-crear-backup-registro-windows/</link>
		<comments>http://todounblog.com.ar/software-erunt-crear-backup-registro-windows/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 20:57:41 +0000</pubDate>
		<dc:creator>Ariel</dc:creator>
				<category><![CDATA[Ayuda]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[utilitario]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://todounblog.com.ar/?p=454</guid>
		<description><![CDATA[Como todos saben un punto sensible del Sistema Operativo Windows, es el registro, por lo tanto es esencial crear una copia de seguridad, y un software gratuito es Erunt.


Es un programa realmente sencillo de utilizar y con pocas opciones, asi que podemos utilizarlo sin mayores inconvenientes:
Realizar el backup:
1. Abrimos el programa y hacemos click en [...]]]></description>
			<content:encoded><![CDATA[<p>Como todos saben un punto sensible del Sistema Operativo Windows, es el <a title="¿Que es registro?" href="http://es.wikipedia.org/wiki/Registro_del_sistema" target="_blank">registro</a>, por lo tanto es esencial crear una copia de seguridad, y un software gratuito es <a href="http://www.larshederer.homepage.t-online.de/erunt/" target="_blank">Erunt</a>.</p>
<p style="text-align: center;">
<img class="aligncenter" src="http://www.todounblog.com.ar/imgblog/erunt.gif" alt="erunt Software: Erunt (Crear backup del registro de Windows)"  title="Software: Erunt (Crear backup del registro de Windows)" /></p>
<p>Es un programa realmente sencillo de utilizar y con pocas opciones, asi que podemos utilizarlo sin mayores inconvenientes:</p>
<p><span style="color: #0000ff;"><em><strong>Realizar el backup</strong></em></span>:</p>
<p>1. Abrimos el programa y hacemos click en &#8220;Backup to&#8221;, le indicamos la ruta donde vamos a conservar el archivo y debajo encontramos 3 opciones, que deben estar señaladas.<a href="http://todounblog.com.ar/wp-admin/post-new.php">Crear entrada ‹ TODO UN BLOG — WordPress</a></p>
<p>Nota: si le indicamos un directorio que no existe nos preguntará, si optamos por la opción &#8220;Si&#8221;, nos creará sin problemas.</p>
<p>2. Una vez, finalizada la copia, nos indicará mediante una ventana donde se encuentra la copia, y solo nos resta pulsar &#8220;OK&#8221;.</p>
<p><strong><em><span style="color: #0000ff;">Restaurar una copia de Seguridad creada con Erunt</span></em></strong></p>
<p>1. Nos dirigimos a la carpeta donde hemos creado la copia de seguridad, y una vez allí, pulsamos sobre el ícono del programa.</p>
<p>2. Nos muestra una ventana informativa donde nos dice que vamos a proceder a restaurar una copia de seguridad del registro</p>
<p>3. Señalados todas la opciones para no perder detalle, hacemos click en OK y se incia la restauración.</p>
<p>4. Una vez finalizada, nos indicará de tal motivo, y para completar la restauración debemos reiniciar nuestra pc.</p>
<p>Descarga | <a href="http://www.aumha.org/downloads/erunt.zip">Erunt(Zip)</a> <a href="http://www.aumha.org/downloads/erunt-setup.exe">Erunt(Exe)</a></p>
<p>Página oficial | <a href="http://www.larshederer.homepage.t-online.de/erunt/" target="_blank">Erunt WebSite</a></p>
<p>Utilitario para Windows NT/2000/2003/XP/Vista</p>
]]></content:encoded>
			<wfw:commentRss>http://todounblog.com.ar/software-erunt-crear-backup-registro-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

