martes, 28 de abril de 2009

Informe SEO evolución diaria

Por fin @ollorente y yo lanzamos el último proyecto en el que he estado metido: seofollow.com

Con este servicio podrás ver un informe gratuito y bastante completo de las variables SEO de tu web:

  • Google Page Rank
  • Google indexed pages
  • Google indexed images
  • Yahoo indexed pages
  • Yahoo inlinks
  • Yahoo inlinks to home
  • Live! indexed pages
  • Alexa Ranking
  • Digg
  • Mister Wong

    ¿Otra web de informes SEO? ¡No! Hemos hecho algo nuevo: la primera vez que generas un informe sobre un dominio, lo almacenamos y cada noche recuperamos las variables SEO de todos los dominios almacenados, de manera que cuando vuelvas a ver el informe, habremos hecho un seguimiento diario de la evolución de tu web.

    informe seofollow.com


    Pruébalo
  • miércoles, 22 de abril de 2009

    Subversion hosting

    Esta semana he tenido que analizar un montón de proveedores de hosting de proyectos
    En esta lista sólo incluyo los que ofrecen control de versiones (SVN) y gestión de proyectos (Trac, excepto XP-DEV que tiene el suyo propio)
    Los precios están en dólares americanos y a veces son aproximaciones, pero sirven para comparar unos planes con otros.
    Parece que los mejores son:
    • De pago: repositoryhosting.com, por cierto, su web es muy chula, aunque parecen muy nuevos en esto y no se los ve estables

    • Gratis: XP-dev.com, una pena que no usen trac, que es estándar, ya que su sistema de gestión de tareas deja mucho que desear

    ¿Me he dejado alguno? ¿Cuáles preferís vosotros?

    NombrePlan$/mesGBcoste / GBReposTracUsers
    svnrepository.comOne$40,5$811
    svnrepository.comTwo$71,0$7
    hosted-projects.comdeveloper$70,1$70
    hosted-projects.comteam$151,0$15
    projectlocker.comfree$00,3$0??2
    projectlocker.comangel$53,0$2??5
    avlux.netEntrepreneur$250,5$50??
    eurosvn.comPersonal$60,2$3011
    eurosvn.comTeam$131,0$1311
    projecthut.comdeveloper$100,2$501010
    projecthut.comteam$201,0$205050
    wush.netprofessional$155,0$311
    prosvn.orgTiny$60,2$30313
    prosvn.orgNormal$80,6$13616
    devguard.comIndividual$70,2$35201
    devguard.comdeveloper$150,4$38501
    devguard.comprofessional$200,8$251001
    repositoryhosting.comone$62,0$3
    xp-dev.comfree$00,5$0∞*
    xp-dev.compro$42,0$2∞*

    viernes, 17 de abril de 2009

    Reemplazar enlaces relativos por absolutos parseando con PHP

    Tenía un problema: parseando el HTML de una página, necesitaba que las url de las imágenes, estilos y javascript fueran absolutos (al ponerlo en otro dominio). Como añadido, vi que algunas sí que tenían "path" absoluto, así que no podía hacer un reemplazar básico.

    Estrujándome el cerebro saqué esta expresión regular que comparto. ¿Alguna mejora?
    $html = 
    preg_replace(
    "#((src|href)=\")(http:\/\/www\.ejemplo\.com\/)?([^\"]+)#",
    '${1}http://www.ejemplo.com/${4}',
    $html);

    domingo, 1 de marzo de 2009

    Desbloquear recursivamente archivos en Mac OSX

    Si copias archivos de un CD o un disco NTFS o cualquier sistema de archivos en el que los archivos estén bloqueados (modo lectura), tendrás que hacer click con el botón derecho > mostrar información y desmarcar la casilla "Bloqueado".

    Si son muchos archivos o subcarpetas no funcionará por herencia, por lo que has de ejecutar:

    chflags -R nouchg *

    cuando estés en el directorio en cuestión.

    sábado, 21 de febrero de 2009

    Creando dominios de desarrollo en local (con Mac OSX)

    Cuando trabajas una web en local conviene mucho poder acceder a ella a través de un dominio "falso". Lo que yo hago es configurar los mismos dominios de verdad, pero acabados en .lan

    Para ello edito /etc/hosts (previo sudo su, porque requiere permisos de root) añadiendo la linea

    172.0.0.1 www.ejemplo.lan


    Luego añado un virtualhost al apache, que responda a ese dominio y apunte al directorio donde esté el código:

    NameVirtualHost *:80

    <VirtualHost *:80>

    ServerName localhost

    DocumentRoot "/Users/user/Sites/"

    </VirtualHost>


    <VirtualHost *:80>

    ServerName www.ejemplo.lan

    DocumentRoot "/Users/user/Sites/www.ejemplo.lan/httpdocs"

    ServerAlias ejemplo.lan

    ErrorLog "logs/ejemplo-error_log"

    CustomLog "logs/ejemplo-access_log" common

    </VirtualHost>



    Puedes hacer esto para cada dominio, pero recuerda que en /etc/hosts no debes añadir una línea para cada uno, sino ponerlos detrás del último dominio, separados por un espacio. Tampoco puedes usar willcards (comodín o *)

    172.0.0.1 www.ejemplo.lan ejemplo.lan otra-web.lan www.otra-web.lan

    lunes, 9 de febrero de 2009

    Desactivando el "diseño de lectura" o "vista previa" de Word

    Para empezar: el problema.

    A veces abres un documento de word y sale en una vista extraña, que no corresponde exactamente a la vista de impresión que estás acostumbrado a usar. Desaparecen los iconos de formato, entre otras cosas.

    Solución temporal: Darle al botón cerrar en medio de la barra de botones (aparece junto con un libro abierto) o ir al menú > ver > diseño de impresión.

    Causa: ¡la culpa es de Outlook! Si te fijas, sólo pasa eso cuando abres un adjunto de outook.

    Solución permanente: En Word, entra en Herramientas > Opciones > General y desactiva la marca en "permitir el inicio en diseño lectura"

    viernes, 6 de febrero de 2009

    MySQL query cache

    Vale: ya tienes tu web subversionada y con un sistema para hacer deploys en producción.
    ¿Qué necesitas ahora? Un DEBUG! Tienes que ver cuánto tiempo tarda en cargarse la página. Menos de medio segundo está bien y menos de un segundo es razonable... si tarda más, mira dónde falla.

    Pon contadores usando microtime() en diversos puntos de la página

    list($usec, $sec) = explode(' ',microtime());
    $cronometro['punto de interés 1'] = ((float)$usec + (float)$sec);


    Reescribe o cachea las partes del código que tarden más

    Y registra el tiempo que tarda cada consulta de MySQL. Si ves que hay consultas lentas usa EXPLAIN para ver por qué son lentas. Si no puedes optimizarlas y se repiten a menudo, asegúrate de que tu servidor de MySQL tiene la query_cache activada (SHOW VARIABLES LIKE 'query_cache_size'; tiene que ser > 0).

    Si no está activa, usa SET GLOBAL query_cache_size = 524288; para activarla. Le he puesto 512 MB de RAM asignada a la query cache: si no tienes un servidor dedicado no sé si podrás hacer esto :-)

    Es INCREÍBLE el efecto que esto tiene sobre el rendimiento.

    OJO! al hacer cualquier ALTER, INSERT o UPDATE de la tabla se pierde la caché. Así que si usabas algún campo "hits" para registrar accesos a páginas de la web o similar, ya estás normalizando eso y poniéndolo en otra tabla por separado.