<?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>Lapiz Corto</title>
	<atom:link href="http://www.lapizcorto.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lapizcorto.com</link>
	<description>Para esas soluciones que nunca recuerdas</description>
	<lastBuildDate>Mon, 14 Dec 2015 08:34:34 +0000</lastBuildDate>
	<language>es-ES</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.1</generator>
	<item>
		<title>Desinstalar manualmente impresora Windows 7</title>
		<link>http://www.lapizcorto.com/desinstalar-manualmente-impresora-windows-7/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=desinstalar-manualmente-impresora-windows-7</link>
		<comments>http://www.lapizcorto.com/desinstalar-manualmente-impresora-windows-7/#comments</comments>
		<pubDate>Sat, 23 Feb 2013 09:54:31 +0000</pubDate>
		<dc:creator><![CDATA[Jorge]]></dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[impresora]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://www.lapizcorto.com/?p=847</guid>
		<description><![CDATA[En ocasiones una impresora genera conflicto y no se deja ni siquiera desinstalar. En ocasiones hasta tumba el servicio de impresión. En estos casos lo mejor es desinstalarla de forma manual y volver a instalar driver e impresora. Es importante tener la impresora apagada y desconectada. Para desinstalar una impresora de forma manual en Windows [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>En ocasiones una impresora genera conflicto y no se deja ni siquiera desinstalar. En ocasiones hasta tumba el servicio de impresión.</p>
<p>En estos casos lo mejor es desinstalarla de forma manual y volver a instalar driver e impresora.</p>
<p>Es importante tener la impresora apagada y desconectada.</p>
<p>Para desinstalar una impresora de forma manual en Windows 7 ejecuta Regedit y accede a la siguiente rama:</p>
<p>HKLM/SYSTEM/CurrentControlSet/Control/Print/Printers</p>
<p>Ahí encontraremos claves con los parámetros de nuestras impresoras. Elimina la impresora que te da problemas. Con esto es sistema ya no la detectará y la puedes volver a instalar si quieres.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lapizcorto.com/desinstalar-manualmente-impresora-windows-7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Corrección de permisos recursivamente mediante PHP</title>
		<link>http://www.lapizcorto.com/correccion-de-permisos-recursivamente-mediante-php/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=correccion-de-permisos-recursivamente-mediante-php</link>
		<comments>http://www.lapizcorto.com/correccion-de-permisos-recursivamente-mediante-php/#comments</comments>
		<pubDate>Fri, 01 Feb 2013 12:08:33 +0000</pubDate>
		<dc:creator><![CDATA[Vicente]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Servidores]]></category>
		<category><![CDATA[permisos]]></category>
		<category><![CDATA[suPHP]]></category>

		<guid isPermaLink="false">http://www.lapizcorto.com/?p=840</guid>
		<description><![CDATA[A la hora de realizar una mudanza de servidor es posible encontrarse con problemas de permisos que impidan descargar todo el contenido de una web mediante FTP. Por lo general estos problemas son ocasionados cuando hay un administrador de ficheros integrado en la web y el servidor está configurado con PHP estándar, sin el módulo [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>A la hora de realizar una mudanza de servidor es posible encontrarse con problemas de permisos que impidan descargar todo el contenido de una web mediante FTP. Por lo general estos problemas son ocasionados cuando hay un administrador de ficheros integrado en la web y el servidor está configurado con PHP estándar, sin el módulo <a href="http://www.suphp.org" target="_blank" title="suPHP">suPHP</a>. En estos casos, todo fichero generado mediante un script tendrá como dueño <code>apache</code>, y con los permisos <code>600</code>, por lo que no podrá ser descargado mediante FTP.</p>
<p>Para solucionarlo, utilizamos el siguiente fichero PHP:<br />
<span id="more-840"></span></p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

  function fsmodify($obj) {
       $chunks = explode('/', $obj);
       chmod($obj, is_dir($obj) ? 0755 : 0644);
       chown($obj, $chunks[2]);
       chgrp($obj, $chunks[2]);
    }


    function fsmodifyr($dir) 
    {
       if($objs = glob($dir.&quot;/*&quot;)) {        
           foreach($objs as $obj) {
               fsmodify($obj);
               if(is_dir($obj)) fsmodifyr($obj);
           }
       }

       return fsmodify($dir);
    }   

  fsmodifyr('web');

?&gt;
</pre>
<p>Este fichero modificará recursivamente los permisos de todos los ficheros y carpetas dentro de <code>web</code>, de forma que serán descargables por cualquier usuario, incluido el que tenga acceso FTP.</p>
<p>Gracias a <a href="http://stackoverflow.com/users/742249" title="Felipe Alcacibar" target="_blank">Felipe Alcacibar</a> por su <a href="http://stackoverflow.com/a/7261673" title="Stack Overflow" target="_blank">solución en Stack Overflow</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lapizcorto.com/correccion-de-permisos-recursivamente-mediante-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Joomla: Check if component content is empty</title>
		<link>http://www.lapizcorto.com/joomla-check-if-component-content-is-empty/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=joomla-check-if-component-content-is-empty</link>
		<comments>http://www.lapizcorto.com/joomla-check-if-component-content-is-empty/#comments</comments>
		<pubDate>Thu, 10 Jan 2013 12:52:10 +0000</pubDate>
		<dc:creator><![CDATA[Jiden]]></dc:creator>
				<category><![CDATA[Joomla!]]></category>
		<category><![CDATA[component]]></category>
		<category><![CDATA[empty]]></category>
		<category><![CDATA[getbuffer]]></category>

		<guid isPermaLink="false">http://www.lapizcorto.com/?p=748</guid>
		<description><![CDATA[We use and love Blank Component to show pages without component but even with no title Blank Component still shows html code. This article describes the method used to fully remove component output. Blank component at least will output something like: That&#8217;s not an empty page. To achieve this first we did a com_blankpage template [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>We use and love <a title="Joomla Blank Component" href="http://extensions.joomla.org/extensions/style-a-design/personal-layout/17363">Blank Component</a> to show pages without component but even with no title Blank Component still shows html code. This article describes the method used to fully remove component output.<br />
<span id="more-748"></span><br />
Blank component at least will output something like:</p>
<pre class="brush: php; title: ; notranslate">
&lt;div class=&quot;blank&quot;&gt;
&lt;/div&gt;
</pre>
<p>That&#8217;s not an empty page. To achieve this first we did a com_blankpage template override copying the file:</p>
<p><strong>components/com_blankcomponent/views/default/tmpl/default.php</strong></p>
<p>to:</p>
<p><strong>templates/YOURTEMPLATE/html/com_blankcomponent/default/default.php</strong></p>
<p>and comment/remove any output inside the template like:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

// no direct access
defined('_JEXEC') or die;
?&gt;
</pre>
<p>Now in your template index.php add this code:</p>
<pre class="brush: php; title: ; notranslate">
            $document = JFactory::getDocument();
            $compOutput = $document-&gt;getBuffer('component');

            if (!empty($compOutput)) {
                $output = '&lt;jdoc:include type=&quot;component&quot; /&gt;';
            }
</pre>
<p>That will fully disable component output.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lapizcorto.com/joomla-check-if-component-content-is-empty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migración de Plesk para Windows a Plesk para Linux</title>
		<link>http://www.lapizcorto.com/migracion-de-plesk-para-windows-a-plesk-para-linux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=migracion-de-plesk-para-windows-a-plesk-para-linux</link>
		<comments>http://www.lapizcorto.com/migracion-de-plesk-para-windows-a-plesk-para-linux/#comments</comments>
		<pubDate>Mon, 07 Jan 2013 09:00:06 +0000</pubDate>
		<dc:creator><![CDATA[Vicente]]></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Plesk]]></category>
		<category><![CDATA[Servidores]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mailenable]]></category>
		<category><![CDATA[migración]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.lapizcorto.com/?p=218</guid>
		<description><![CDATA[En las últimas versiones de Plesk, Parallels ha incluido una herramienta estupenda que permite realizar migraciones entre servidores Linux, o servidores Windows, e incluso de un servidor Linux a un servidor Windows, utilizando internamente ssh y rsync para realizar el transporte de datos, pero no da la posibilidad de realizar una migración automatizada de Windows [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>En las últimas versiones de Plesk, Parallels ha incluido una herramienta estupenda que permite realizar migraciones entre servidores Linux, o servidores Windows, e incluso de un servidor Linux a un servidor Windows, utilizando internamente ssh y rsync para realizar el transporte de datos, pero no da la posibilidad de realizar una migración automatizada de Windows a Linux, así que para este caso no ha quedado más remedio que recurrir a procedimientos más artesanales.</p>
<p>El plan consiste básicamente en realizar consultas SQL a la base de datos de Plesk para Windows, a partir de las cuáles se pueda obtener una serie de scripts que utilicen los comandos CLI provistos por Plesk. Una vez replicada la estructura de clientes y dominios, ya se comienza a pasar los datos, vía FTP, del código de las webs, y mediante exports de MySQL para las bases de datos. Para el correo se creó una utilidad en Python que analizaba el fichero AUTH.TAB de <a title="MailEnable" href="http://www.mailenable.com/" target="_blank">MailEnable</a>, generando un script que crea los buzones en Plesk, y después invoca a <a href="http://freecode.com/projects/imapsync" target="_blank">imapsync</a> para copiar el contenido de los mismos.<br />
<span id="more-218"></span></p>
<h4>Estructura de dominios en Plesk</h4>
<p>Comenzamos generando la estructura de revendedores, clientes y dominios en el servidor destino, creando una serie de comandos para el CLI de Plesk, ejecutando comandos SQL en el servidor origen:</p>
<p>SQL que genera los revendedores:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT &quot;reseller -c &quot; + cl.login +
&quot; -name &quot;&quot;&quot; + cl.pname + &quot;&quot;&quot;&quot; +
&quot; -passwd &quot; + cl.passwd +
&quot; -company &quot;&quot;&quot; + cl.cname + &quot;&quot;&quot;&quot; +
&quot; -phone &quot;&quot;&quot; + cl.phone + &quot;&quot;&quot;&quot; +
&quot; -email &quot;&quot;&quot; + cl.email + &quot;&quot;&quot;&quot; +
&quot; -address &quot;&quot;&quot; + cl.address + &quot;&quot;&quot;&quot; +
&quot; -city &quot;&quot;&quot; + cl.city + &quot;&quot;&quot;&quot; +
&quot; -zip &quot;&quot;&quot; + cl.pcode + &quot;&quot;&quot;&quot; +
&quot; -country &quot;&quot;&quot; + cl.country + &quot;&quot;&quot;&quot; +
&quot; -creation-date &quot;&quot;&quot; + FORMAT(cl.cr_date,&quot;YYYY-MM-DD&quot;) + &quot;&quot;&quot;&quot;
FROM clients cl
WHERE type = &quot;reseller&quot;
</pre>
<p>SQL que genera un script para la creación de clientes, obviando los suscriptores, que ya tienen su cuenta del paso anterior:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT &quot;customer -c &quot; + cl.login +
&quot; -name &quot;&quot;&quot; + cl.pname + &quot;&quot;&quot;&quot; +
&quot; -passwd &quot; + cl.passwd +
&quot; -company &quot;&quot;&quot; + cl.cname + &quot;&quot;&quot;&quot; +
&quot; -phone &quot;&quot;&quot; + cl.phone + &quot;&quot;&quot;&quot; +
&quot; -email &quot;&quot;&quot; + cl.email + &quot;&quot;&quot;&quot; +
&quot; -address &quot;&quot;&quot; + cl.address + &quot;&quot;&quot;&quot; +
&quot; -city &quot;&quot;&quot; + cl.city + &quot;&quot;&quot;&quot; +
&quot; -zip &quot;&quot;&quot; + cl.pcode + &quot;&quot;&quot;&quot; +
&quot; -country &quot;&quot;&quot; + cl.country + &quot;&quot;&quot;&quot; +
&quot; -creation-date &quot;&quot;&quot; + FORMAT(cl.cr_date,&quot;YYYY-MM-DD&quot;) + &quot;&quot;&quot;&quot; +
&quot; -owner &quot;&quot;&quot; + res.login + &quot;&quot;&quot;&quot;
FROM clients cl
LEFT JOIN clients res ON (res.id = cl.parent_id)
  WHERE type &amp;lt;&amp;gt; &quot;reseller&quot;
</pre>
<p>En este punto, nosotros reemplazamos el owner &#8220;admin&#8221; por nuestra empresa, para que nada dependiese del usuario raíz, ya que según la nueva estructura de Plesk 10, parece más correcto.</p>
<p>Por último, el SQL que genera un script para la creación de suscripciones a partir de los dominios de Plesk 9. Los dominios los crea con el DNS desactivado, dado que seguiremos manejando el servicio DNS con el otro servidor, y a la IP compartida (que está, claramente, modificada). También el login utiliza sólo minúsculas, ya que se ha introducido esta restricción en Plesk 10.</p>
<pre class="brush: sql; title: ; notranslate">
SELECT &quot;domain -c &quot; + dom.name +
&quot; -owner &quot;&quot;&quot; + cl.login + &quot;&quot;&quot;&quot; +
&quot; -dns false&quot; +
&quot; -hosting true &quot; +
&quot; -ip 192.168.0.164 &quot; +
&quot; -login &quot;&quot;&quot; + LCASE(hos.fp_adm) + &quot;&quot;&quot;&quot; +
&quot; -passwd &quot;&quot;&quot; + hos.fp_pass + &quot;&quot;&quot;&quot; +
&quot; -creation-date &quot;&quot;&quot; + FORMAT(dom.cr_date,&quot;YYYY-MM-DD&quot;) + &quot;&quot;&quot;&quot;
FROM (domains dom
LEFT JOIN clients cl ON (cl.id = dom.cl_id))
LEFT JOIN hosting hos ON (hos.dom_id = dom.id)
</pre>
<p>Puntos mejorables:</p>
<ul>
<li>Hay que revisar los DNS a mano. Hemos preferido hacerlo así, para hacer limpieza, pero tampoco sería complejo realizar un script similar a los mostrados, y marcar las suscripciones con el servicio DNS activado por defecto, de forma que sólo quedase pendiente realizar la modificación en el dominio.</li>
<li>Las redirecciones de correo y demás opciones específicas deben ser revisadas, ya que el script únicamente ignora las cuentas que estén desactivadas en MailEnable, pero nada más.</li>
<li>Todas las suscripciones pasan como hosting, así que las que son redirecciones o simplemente sin hosting no pasan mediante el script. Esto es debido a que se hace un JOIN con la tabla hosting de Plesk 9.</li>
<li>Las suscripciones y revendedores pasan con un plan personalizado. En nuestro caso nos da igual, porque vamos a aprovechar para repasar todos los clientes y revisar así usos y precios.</li>
</ul>
<h4>Correo electrónico</h4>
<p>Bien, tras esto ya tenemos los revendedores, clientes, suscripciones y dominios en Plesk 10. A continuación presentamos una pequeña utilidad en Python que genera dos ficheros, uno que permite la creación de los buzones en Plesk, y otro que sincroniza los correos entre los dos servidores mediante IMAP, creando la estructura de carpetas existente en el antiguo.</p>
<pre class="brush: python; title: ; notranslate">
# This Python file uses the following encoding: utf-8
'''
me2plesk: Utilidad para la transformación de AUTH.TAB en scripts Plesk 10 e imapsync
Created on 13/10/2011
@author: Vicente Monroig (Digital Disseny)
'''

import os
import sys

def parse_authtab(fichero):
    '''Abre el fichero AUTH.TAB, lo parsea y devuelve una lista con los buzones y contraseñas.'''
    print &quot;Procesando fichero AUTH.TAB &quot; + fichero + &quot;...&quot;
    f = open(fichero, &quot;r&quot;)
    lista = []
    while True:
        lin = f.readline().strip()
        if not lin: break
        campos = lin.split('\t')
        # Ignoramos los que estén desactivados
        if campos[1] &lt;&gt; 1:
            lista.append([campos[0], campos[2]])
    f.close()
    return lista

# Obtenemos la ruta donde se está ejecutando el archivo
ruta = os.path.dirname(os.path.abspath(__file__)) + '/'
# Recogemos el parámetro donde está el AUTH.TAB o mostramos la ayuda
if (len(sys.argv) &gt; 1):
    # Extraemos los pares correo, contraseña
    lista = parse_authtab(sys.argv[1])
    print(&quot;Generando scripts...&quot;)
    # Creamos los archivos de script
    fplesk = open(ruta + 'me2plesk_plesk.txt', &quot;w&quot;)
    fsync = open(ruta + 'me2plesk_imapsync.txt', &quot;w&quot;)
    for elemento in lista:
        # Creamos una nueva línea en ambos scripts
        fplesk.write(&quot;/opt/psa/bin/mail --create &quot; + elemento[0] + &quot; -passwd &quot; + elemento[1] +
                     &quot; -mailbox true\n&quot;)
        fsync.write(&quot;imapsync --host1 origen.com&quot; +
                    &quot; --user1 &quot; + elemento[0] + &quot; --password1 &quot; + elemento[1] +
                    &quot; --host2 destino.com&quot; +
                    &quot; --user2 &quot; + elemento[0] + &quot; --password2 &quot; + elemento[1] +
                    &quot; --sep1 / --prefix1 &quot;&quot;  --subscribe --fastio1 --fastio2 --fast\n&quot;)
    fplesk.close()
    fsync.close()
    print(&quot;Scripts me2plesk_plesk.txt y me2plesk_imapsync.txt generados en %s.&quot; % ruta)
else:
    print &quot;&quot;&quot;
Información:
    me2plesk es una pequeña utilidad que analiza sintácticamente el fichero AUTH.TAB del
    servidor de correo MailEnable para Windows, generando dos scripts, uno que llama a la
    función mail del CLI de Plesk 10, creando los buzones encontrados, y un segundo que
    invoca a la utilidad imapsync, una vez por cada buzón, permitiendo con la combinación
    de ambos la mudanza de un servidor MailEnable Windows a un Plesk 10.
Uso:
    me2plesk.py &lt;AUTH.TAB&gt;
       &quot;&quot;&quot;
</pre>
<p>Además, como algunos ISPs son algo lentos cambiando los registros DNS, tenemos la ventaja de que no perderemos ningún correo, al poder ejecutar la sincronización varias veces, incluso con los DNS ya cambiados y propagados.</p>
<p>Una pega: Aquellos clientes que mantengan correo en el servidor y utilicen POP3 como protocolo, verán sus correos duplicados en los clientes. Sin embargo, los que utilicen IMAP no tendrán este problema, dado que <a title="imapsync" href="http://freecode.com/projects/imapsync" target="_blank">imapsync</a>, la utilidad llamada por el script para sincronizar los buzones, respeta las <em>flags</em> de cada mensaje.</p>
<h4>Webs (código y bases de datos)</h4>
<p>Para pasar el código de las webs utilizaremos FTP, y más concretamente <a title="LFTP" href="http://lftp.yar.ru/" target="_blank">LFTP</a>, que incorpora un comando mirror que nos va a permitir realizar todo el traspaso en una única línea de comandos ejecutada en el servidor destino:</p>
<pre class="brush: bash; light: true; title: ; notranslate">
lftp -e &quot;mirror httpdocs /var/www/vhosts/&lt;dominio&gt;/httpdocs --parallel=10&quot; -u &lt;usuario&gt;,&lt;contraseña&gt; &lt;servidor_fuente&gt;
</pre>
<p>Quedaría ajustar los permisos y propietario de los distintos archivos. Podemos poner unos estándar para Plesk y después repasar lo que necesite permisos de escritura, como carpetas para ficheros temporales.</p>
<pre class="brush: bash; light: true; title: ; notranslate">
chown -R &lt;usuarioplesk&gt;:psacln /var/www/vhosts/&lt;dominio&gt;/httpdocs/*
find /var/www/vhosts/&lt;dominio&gt;/httpdocs/* -type d -exec chmod 755 {} \;
find /var/www/vhosts/&lt;dominio&gt;/httpdocs/* -type f -exec chmod 644 {} \;
</pre>
<p style="text-align: center;"><a href="http://www.lapizcorto.com/wp-content/uploads/2012/02/export_sql.png"><img class="aligncenter size-full wp-image-474" title="HeidiSQL Export" src="http://www.lapizcorto.com/wp-content/uploads/2012/02/export_sql.png" alt="" width="606" height="328" /></a></p>
<p>Vamos a por las bases de datos. Nos centraremos en MySQL, que son las que nos vamos a encontrar en su mayoría (WordPress, Joomla, Magento, Drupal&#8230;). Aprovechando que todavía tenemos un servidor Windows, podemos utilizar HeidiSQL para realizar una copia de seguridad, y si configuramos debidamente el servidor destino para aceptar conexiones externas, también podremos utilizarlo para restaurar, todo desde el mismo servidor origen.</p>
<h4>DNS</h4>
<p>Ya están la estructura de usuarios recreada, correos pasados, código fuente transferido y bases de datos restauradas. Tan sólo queda modificar los DNS de los dominios para que dirijan al nuevo servidor.</p>
<p>Como último apunte, antes de comenzar con los cambios de IPs en los DNS es muy recomendable modificar los registros SOA, indicando un TTL de 5 minutos, con lo que podremos realizar modificaciones que se propaguen mucho más rápido. Por supuesto, esto conlleva un aumento del tráfico, pero con las máquinas y anchos de banda de hoy en día, no debería ser ningún problema.</p>
<p>Recordad también que el <a title="Archivo hosts" href="http://es.wikipedia.org/wiki/Archivo_hosts" target="_blank">archivo hosts</a> es nuestro amigo, y que es <span style="text-decoration: underline;">muy</span> conveniente realizar pruebas en el nuevo servidor antes de cambiar los DNS. Siempre podemos relanzar la sincronización de correos y volver a pasar la copia de seguridad de la base de datos cuando estemos seguros de que todo está operativo de nuevo.</p>
<h4>Organización</h4>
<p>Lo más crucial, lo más importante y lo único que no puede fallar durante el proceso es la organización. Sobre esto poco voy a decir, pues esto es un blog técnico, pero sí quiero remarcar que antes de empezar hay que planificar y dividir las tareas que van a tener que hacerse fuera de horario de oficina. Hay que comunicar a los clientes previamente lo que se va a hacer, y que les quede claro que puede haber problemas, y cuándo se va a hacer, no sea que les dé por liarse a actualizar su web justo cuando tenemos pensado ponernos a migrar sus servicios.</p>
<p><a href="http://www.lapizcorto.com/wp-content/uploads/2012/12/organizacion1.jpg"><img class="aligncenter size-full wp-image-824" title="Organización" src="http://www.lapizcorto.com/wp-content/uploads/2012/12/organizacion1.jpg" alt="Organización en hoja de cálculo" width="600" height="629" /></a></p>
<p>Prepara una hoja de cálculo, verifica y anota los servicios a trasladar, agrúpalos por similitud y anota los posibles problemas y su resolución. Como mínimo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lapizcorto.com/migracion-de-plesk-para-windows-a-plesk-para-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sincronización NTP de servidores Windows</title>
		<link>http://www.lapizcorto.com/sincronizacion-ntp-de-servidores-windows/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sincronizacion-ntp-de-servidores-windows</link>
		<comments>http://www.lapizcorto.com/sincronizacion-ntp-de-servidores-windows/#comments</comments>
		<pubDate>Mon, 31 Dec 2012 09:03:34 +0000</pubDate>
		<dc:creator><![CDATA[Vicente]]></dc:creator>
				<category><![CDATA[Servidores]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.lapizcorto.com/?p=814</guid>
		<description><![CDATA[Para sincronizar cualquier equipo con sistema operativo Windows de escritorio (XP ó 7, principalmente), es tan simple como hacer doble click en la hora de la barra de tareas, ir a la pestaña Hora de Internet, y allí hacer los cambios que se desee. Sin embargo, esta pestaña no está disponible en los sistemas operativos [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Para sincronizar cualquier equipo con sistema operativo Windows de escritorio (XP ó 7, principalmente), es tan simple como hacer doble click en la hora de la barra de tareas, ir a la pestaña Hora de Internet, y allí hacer los cambios que se desee. Sin embargo, esta pestaña no está disponible en los sistemas operativos para servidores (comprobado en 2003 y 2008 R2), así que tenemos que recurrir al símbolo de sistema para lograrlo:</p>
<p>El servidor elegido se puede cambiar en el parámetro, por supuesto, pero así de paso veis cuál es el NTP que lleva la hora oficial en España, del <a title="Real Instituto y Observatorio de la Armada" href="http://www.armada.mde.es/ArmadaPortal/page/Portal/ArmadaEspannola/ciencia_observatorio" target="_blank">Real Instituto y Observatorio de la Armada</a>.</p>
<p><a href="http://www.lapizcorto.com/wp-content/uploads/2012/12/ntp.png"><img class="aligncenter size-full wp-image-815" title="Configuración NTP Windows" src="http://www.lapizcorto.com/wp-content/uploads/2012/12/ntp.png" alt="Configuración NTP Windows" width="668" height="307" /></a></p>
<p>Para no tener que teclear tanto, esta es la secuencia de comandos:</p>
<pre class="brush: plain; title: ; notranslate">
net stop w32time
net start w32time
w32tm /config /manualpeerlist:hora.roa.es,0x1 /syncfromflags:MANUAL
w32tm /config /update
w32tm /resync
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.lapizcorto.com/sincronizacion-ntp-de-servidores-windows/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Renombrar archivos masivamente</title>
		<link>http://www.lapizcorto.com/renombrar-archivos-masivamente/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=renombrar-archivos-masivamente</link>
		<comments>http://www.lapizcorto.com/renombrar-archivos-masivamente/#comments</comments>
		<pubDate>Thu, 08 Nov 2012 13:01:45 +0000</pubDate>
		<dc:creator><![CDATA[Vicente]]></dc:creator>
				<category><![CDATA[Utilidades]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.lapizcorto.com/?p=807</guid>
		<description><![CDATA[De vez en cuando suele surgir la problemática: en una colección de fotos, con documentos almacenados en la empresa, los trabajos de la carrera&#8230; Necesitamos ir organizándolos, y es posible que los tengamos ya organizados, pero en un momento dado preferimos cambiar algo de la organización. Ahí es donde podemos echar mano de Rename Expert, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>De vez en cuando suele surgir la problemática: en una colección de fotos, con documentos almacenados en la empresa, los trabajos de la carrera&#8230; Necesitamos ir organizándolos, y es posible que los tengamos ya organizados, pero en un momento dado preferimos cambiar algo de la organización. Ahí es donde podemos echar mano de <a title="Rename Expert" href="http://www.rename-expert.com/en/features.html" target="_blank">Rename Expert</a>, la mejor aplicación con que me he cruzado para este fin.</p>
<p>Se puede realizar un filtrado por multitud de conceptos, tanto sobre el nombre y ruta del fichero como sobre el contenido. Por nombrar algunos:</p>
<ul>
<li>Longitud del nombre del fichero.</li>
<li>Ancho de la imagen contenida.</li>
<li>Datos de la cámara con que se realiza la fotografía.</li>
<li>Título de la canción según ID3.</li>
<li>Autor del texto del PDF.</li>
</ul>
<p><a href="http://www.lapizcorto.com/wp-content/uploads/2012/11/renamexpert.png"><img class="aligncenter size-large wp-image-808" title="Rename Expert" src="http://www.lapizcorto.com/wp-content/uploads/2012/11/renamexpert-1024x558.png" alt="" width="600" height="326" /></a></p>
<p>Después, para los ficheros que cumplan el filtro se pueden definir acciones que no se limitan a jugar con el nombre, como pueden ser:</p>
<ul>
<li>Mover el fichero.</li>
<li>Recuperar el nombre de una lista CSV.</li>
<li>Encriptación de los nombres de archivo por contraseña.</li>
</ul>
<p>En definitiva, tras probar unos cuantos, el mejor que he encontrado. Eso sí, sólo Windows.</p>
<p>Espera, ¿que no quieres pagar por el renombrador? Pues nada, hay una alternativa, pero no es tan estética e intuitiva: <a title="Bulk Rename Utility" href="http://www.bulkrenameutility.co.uk" target="_blank">Bulk Rename Utility</a>.</p>
<p><a href="http://www.lapizcorto.com/wp-content/uploads/2012/11/bulkrenameutility.png"><img class="aligncenter size-large wp-image-812" title="Bulk Rename Utility" src="http://www.lapizcorto.com/wp-content/uploads/2012/11/bulkrenameutility-1024x576.png" alt="" width="600" height="337" /></a></p>
<p>No me ha hecho falta, así que no he buscado mucho, pero creo que tampoco puede lidiar con MP3, JPG y PDF. Lo que sí hace perfectamente es trabajar con las longitudes de nombres y tratar la generación de duplicados.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lapizcorto.com/renombrar-archivos-masivamente/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Acceder a particion de Ubuntu roto mediante LiveCD</title>
		<link>http://www.lapizcorto.com/acceder-a-particion-de-ubuntu-roto-mediante-livecd/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=acceder-a-particion-de-ubuntu-roto-mediante-livecd</link>
		<comments>http://www.lapizcorto.com/acceder-a-particion-de-ubuntu-roto-mediante-livecd/#comments</comments>
		<pubDate>Tue, 25 Sep 2012 12:51:45 +0000</pubDate>
		<dc:creator><![CDATA[Jorge]]></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[livecd]]></category>
		<category><![CDATA[recuperar ubuntu]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.lapizcorto.com/?p=801</guid>
		<description><![CDATA[Lo primero es ejecutar el LiveCD Una vez dentro abriremos una consola y ejecutaremos $ sudo fdisk -l Mediante este comando veremos las particiones del disco, en la columna &#8220;System&#8221; buscamos Linux. Luego en &#8220;Device&#8221; concretamos la ruta de la partición en la que se encuentra instalado Linux. Suponiendo que nuestro ubuntu está en /dev/sda1 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Lo primero es ejecutar el LiveCD</p>
<p><strong>Una vez dentro abriremos una consola y ejecutaremos</strong></p>
<p>$ sudo fdisk -l</p>
<p>Mediante este comando veremos las particiones del disco, en la columna &#8220;System&#8221; buscamos Linux. Luego en &#8220;Device&#8221; concretamos la ruta de la partición en la que se encuentra instalado Linux.</p>
<p>Suponiendo que nuestro ubuntu está en /dev/sda1<br />
<strong><br />
Montamos la partición en el directorio /mount</strong></p>
<p>$ sudo mount /dev/sda1 /mnt</p>
<p><strong>Montamos el resto de directorios del sistema</strong></p>
<p>$ sudo mount &#8211;bind /dev /mnt/dev<br />
$ sudo mount &#8211;bind /proc /mnt/proc<br />
$ sudo mount &#8211;bind /sys /mnt/sys<br />
<strong></strong></p>
<p><strong>Ejecutamos el comando chroot.</strong><br />
De esta manera accedermos a administrar el sistema instalado y roto.<br />
$ sudo chroot /mnt</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lapizcorto.com/acceder-a-particion-de-ubuntu-roto-mediante-livecd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como instalar un servidor web en ubuntu 12.04 (Apache, PHP, mySql)</title>
		<link>http://www.lapizcorto.com/como-instalar-un-servidor-web-en-ubuntu-12-04-apache-php-mysql/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-instalar-un-servidor-web-en-ubuntu-12-04-apache-php-mysql</link>
		<comments>http://www.lapizcorto.com/como-instalar-un-servidor-web-en-ubuntu-12-04-apache-php-mysql/#comments</comments>
		<pubDate>Mon, 24 Sep 2012 22:44:04 +0000</pubDate>
		<dc:creator><![CDATA[Jorge]]></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Servidores]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[instalar servidor web. ubuntu]]></category>
		<category><![CDATA[MySql]]></category>

		<guid isPermaLink="false">http://www.lapizcorto.com/?p=788</guid>
		<description><![CDATA[A continuación describiremos unos pasos básicos para obtener una instalación básica de un servidor web en nuestra máquina con Ubuntu 12.04 Instalar Apache Para esto ejecutaremos desde la consola Con esto ya deberíamos tener apache configurado. Solo con poner 127.0.0.1 en nuestro navegador debería mostrarse. Instalar PHP. Para esto nuevamente desde el terminal ejecutaremos Si [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>A continuación describiremos unos pasos básicos para obtener una instalación básica de un servidor web en nuestra máquina con Ubuntu 12.04</p>
<h2><a href="http://www.lapizcorto.com/wp-content/uploads/2012/09/apache_php_mysql_logo.jpg"><img class="aligncenter size-full wp-image-798" title="apache_php_mysql_logo" src="http://www.lapizcorto.com/wp-content/uploads/2012/09/apache_php_mysql_logo.jpg" alt="Servidor wen apache php mysql" width="325" height="287" /></a>Instalar Apache</h2>
<p>Para esto ejecutaremos desde la consola</p>
<pre class="brush: plain; title: ; notranslate">sudo apt-get install apache2 -y</pre>
<p>Con esto ya deberíamos tener apache configurado. Solo con poner 127.0.0.1 en nuestro navegador debería mostrarse.</p>
<h2>Instalar PHP.</h2>
<p>Para esto nuevamente desde el terminal ejecutaremos</p>
<pre class="brush: plain; title: ; notranslate">sudo apt-get install php5 libapache2-mod-php5 -y</pre>
<p>Si queremos que apache se de cuenta tendremos que reiniciarlo ejecutando de la consola</p>
<pre class="brush: plain; title: ; notranslate">sudo /etc/init.d/apache2 restart</pre>
<h2>Instalar servidor MySQL.</h2>
<p>Ejecutaremos desde la consola</p>
<pre class="brush: plain; title: ; notranslate">sudo apt-get install mysql-server mysql-client -y</pre>
<h2>Algo mas&#8230;.</h2>
<pre>
Finalmente instalaremos algunos complementos que siempre viene bien

<pre class="brush: plain; title: ; notranslate">sudo apt-get install php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl -y</pre>
<p>Recuerda volver a reiniciar Apache.</p>
<p>Como apunte breve comentaré unas rutas que tarde o temprano necesitaremos para administrar el servidor</p>
<h3><strong>Apache</strong></h3>
<p>virtual hosts configurados<br />
<strong>/etc/apache2/sites-enabled</strong></p>
<p>el virtual host por defecto<br />
<strong>/etc/apache2/sites-available/default</strong></p>
<h3><strong>PHP</strong></h3>
<p>Archivo de configuración PHP<br />
<strong>/etc/php5/apache2/php.ini</strong></p>
<h3><strong>MySQL</strong></h3>
<p>Archivo global de SQL<br />
<strong>/etc/mysql/my.cnf</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lapizcorto.com/como-instalar-un-servidor-web-en-ubuntu-12-04-apache-php-mysql/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Error entrando al admin despues de intalar wordpress</title>
		<link>http://www.lapizcorto.com/error-entrando-al-admin-despues-de-intalar-wordpress/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=error-entrando-al-admin-despues-de-intalar-wordpress</link>
		<comments>http://www.lapizcorto.com/error-entrando-al-admin-despues-de-intalar-wordpress/#comments</comments>
		<pubDate>Tue, 14 Aug 2012 08:43:05 +0000</pubDate>
		<dc:creator><![CDATA[Jorge]]></dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[error APC wordpress]]></category>
		<category><![CDATA[error on line 32]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[worpress error]]></category>

		<guid isPermaLink="false">http://www.lapizcorto.com/?p=782</guid>
		<description><![CDATA[Es un error muy normal al actualizar a wordpress 3.4.1 incluso al instalarlo de nuevo que se nos muestre el error PHP Fatal error: Call to undefined function get_option() in path/wp-admin/admin.php on line 32 En algunos casos (los menos) el error es producido porque la actualización deja algunos ficheros del raiz de wordpress con 0 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Es un error muy normal al actualizar a wordpress 3.4.1 incluso al instalarlo de nuevo que se nos muestre el error <strong>PHP Fatal error: Call to undefined function get_option() in path/wp-admin/admin.php on line 32</strong></p>
<p>En algunos casos (los menos) el error es producido porque la actualización deja algunos ficheros del raiz de wordpress con 0 KB.<br />
Simplemente habrá que volverlos a subir manualmente y solucionado.</p>
<p>En el caso mas normal, este error viene causado por la configuración de la extensión de PHP <a title="PHP APC Cache" href="http://php.net/manual/es/book.apc.php" target="_blank">APC</a>.<br />
Para solucionarlo simplemente tendremos que modificar el parametro apc.include_once_override = 0.</p>
<p>Para esto buscaremos el fichero apc.ini (en ubuntu suele estar en /etc/php5/conf.d/apc.ini) y lo modifaremos incluyendo <strong>apc.include_once_override = 0</strong><br />
Una vez modificado habrá que reiniciar <a title="Apache" href="http://www.apache.org/" target="_blank">Apache</a> (en ubuntu sudo /etc/init.d/apache2 restart )</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lapizcorto.com/error-entrando-al-admin-despues-de-intalar-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Joomla: Alternate category layouts</title>
		<link>http://www.lapizcorto.com/joomla-alternate-category-layouts/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=joomla-alternate-category-layouts</link>
		<comments>http://www.lapizcorto.com/joomla-alternate-category-layouts/#comments</comments>
		<pubDate>Fri, 11 May 2012 11:21:32 +0000</pubDate>
		<dc:creator><![CDATA[Jiden]]></dc:creator>
				<category><![CDATA[Joomla!]]></category>
		<category><![CDATA[category template]]></category>
		<category><![CDATA[override]]></category>

		<guid isPermaLink="false">http://www.lapizcorto.com/?p=716</guid>
		<description><![CDATA[We were searching in Joomla content category layouts similar to K2 category templates. Since Joomla 1.6 this is possible. In K2 it&#8217;s quite simple, you just set clone and rename the default template and assign it to category. In Joomla content the system is harder to set but it&#8217;s more powerful since you can override [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>We were searching in Joomla content category layouts similar to K2 category templates. Since Joomla 1.6 this is possible.</p>
<p>In K2 it&#8217;s quite simple, you just set clone and rename the default template and assign it to category. In Joomla content the system is harder to set but it&#8217;s more powerful since you can override also category parameters and translation strings.</p>
<p>The information for this article was extrated from <a title="Joomla docs - Layout overrides" href="http://docs.joomla.org/Layout_Overrides_in_Joomla_1.6">Joomla Docs: Layout overrides in Joomla 1.6</a><span id="more-716"></span></p>
<p>There are two ways to override a category template:</p>
<h3>1. Categories not linked in menus.</h3>
<p>This is the basic override and works as the K2 category template. In your template you have to clone and rename the blog category files. In:</p>
<p><strong>templates/YOURTEMPLATE/html/com_content/category</strong></p>
<p>copy and rename the files:</p>
<p><strong>blog.php</strong>, <strong>blog_children.php</strong>, <strong>blog_item.php</strong> and <strong>blog_links.php</strong></p>
<p>for example if you want a category template called &#8220;product&#8221; rename the files to:</p>
<p><strong>product.php</strong>, <strong>product_children.php</strong>, <strong>product_item.php</strong>, <strong>product_links.php</strong></p>
<p>The final folder appearence will look like:</p>
<p><a href="http://www.lapizcorto.com/wp-content/uploads/2012/05/category.png"><img class="alignnone size-full wp-image-725" title="Category override folder" src="http://www.lapizcorto.com/wp-content/uploads/2012/05/category.png" alt="" width="414" height="447" /></a></p>
<p>Now in the category edit form you will see an alternate layout available:</p>
<p><a href="http://www.lapizcorto.com/wp-content/uploads/2012/05/category_assign.png"><img class="alignnone size-full wp-image-722" title="Category layout override assign" src="http://www.lapizcorto.com/wp-content/uploads/2012/05/category_assign.png" alt="" width="497" height="215" /></a></p>
<p>It&#8217;s done. Now you can adjust the templates to your needs.</p>
<h3>2. Category linked in menu</h3>
<p>Category overrides through menu links allow you an advanced override system. The method it&#8217;s the same used in the case 1 plus add a layout XML file. This will give us full control to customize the layout.</p>
<p>Follow the steps of case 1 and also copy the file:</p>
<p><strong>components/com_content/views/category/tmpl/blog.xml</strong></p>
<p>to:</p>
<p><strong>templates/YOURTEMPLATE/html/com_content/category/product.xml</strong></p>
<p>The final folder status:</p>
<p><a href="http://www.lapizcorto.com/wp-content/uploads/2012/05/category_xml.png"><img class="alignnone size-full wp-image-732" title="Category with XML override" src="http://www.lapizcorto.com/wp-content/uploads/2012/05/category_xml.png" alt="" width="247" height="493" /></a></p>
<p>Now you only have to customize the XML layout to give it the name, translations, etc. (read the <a title="Joomla Docs - Layout overrides" href="http://docs.joomla.org/Layout_Overrides_in_Joomla_1.6">Joomla docs</a> for more info)</p>
<p>You will have a new menu type that you can select to make a new menu item:</p>
<p><a href="http://www.lapizcorto.com/wp-content/uploads/2012/05/menu_type.png"><img class="alignnone size-medium wp-image-737" title="New menu type" src="http://www.lapizcorto.com/wp-content/uploads/2012/05/menu_type-300x230.png" alt="" width="300" height="230" /></a></p>
<p>Parametrize it to your needs and you are done!!</p>
<p>Hope this helps <img src="http://www.lapizcorto.com/wp-includes/images/smilies/icon_smile.gif" alt=":-)" class="wp-smiley" /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lapizcorto.com/joomla-alternate-category-layouts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
