Extraer URLs de imágenes de una web

¿Nunca habeis necesitado extraer todas las URLs de las imágenes de una web? Pues con este script mostraremos por pantalla las rutas de todas las imágenes contenidas en la página $url

$url = "http://www.elmejorcoche.com";

$html = file_get_contents($url);

preg_match_all("/<img[\s]+[^>]*?src[\s]?=[\s\"\']+(.*\.([gif|jpg|png|bmp|jpeg|tiff]{3,4}))[\"\']+.*?>/", $html, $images);

$images = $images[1];
$list = array();

foreach($images as $img) {
	echo $img."<br>";
}

Si tu versión de PHP es inferior a 4.3.0 (en primer lugar te recomiendo pasar a PHP5) puedes usar la siguiente función en lugar de file_get_contents:

function getHtml($url) {
    $foo = @fopen($url,"r");
    if($foo){
        while(!feof($foo)){
            $html.=fgets($foo);
        }
    }
    return $html;
}

Problemas con Compiz Fusion y Java (Swing)

Existe una pequeña incompatibilidad entre Compiz Fusion y la librería Swing de Java que provoca que algunas aplicaciones desarrolladas en este lenguaje tengan problemas. Se han detectado, por ejemplo, que aparezca una ventana en blanco al abrir NetBeans o problemas al redimensionar la ventana en jEdit.

Para los que no lo conozcais, Compiz Fusion es un gestor gráfico que añade multitud de efectos al escritorio de Ubuntu, en mi caso GNOME, como el super conozido efecto “Cube” para pasar de un escritorio a otro:

Efecto cube de Compiz Fusion

Efecto cube de Compiz Fusion

Actualmente el bug está en el lado de Java ya que sus aplicaciones basadas en Swing/AWT no funcionan bien con estos gestores de ventanas. El bug para Compiz está corregido en el J2SE 6u2.

¿Cómo podemos solventar esta incompatibilidad?

Añadiendo un export en el archivo environment solventaremos todos los problemas derivados de dicha incompatibilidad.

echo "export AWT_TOOLKIT=MToolkit" | sudo tee -a /etc/environment

Replicación asíncrona unidireccional Maestro – Esclavo en MySQL 5.0

mysql logoSupongamos un escenario real de producción en el que tenemos dos servidores. Una de las máquinas contiene un servidor http y una base de datos MySQL que usamos para abserver el tráfico web; la otra la utilizamos para otras tareas necesarias. Sería magnífico poder utilizar la segunda máquina como backup de nuestro MySQL por si hay algún problema grave en la primera ¿no? En este artículo os explico como hacerlo.

La replicación en MySQL funciona de la siguiente manera, el servidor maestro escribe todas las actualizaciones en un fichero de log binario, y mantiene un índice de los ficheros para rastrear las rotaciones de logs. A su vez, el servidor esclavo, que mantiene una conexión abierta contínua con el maestro, es informado cuando sucede algún cambio en el log binario del maestro, y ejecutan estos cambios en sus tablas. Continue reading

Windows desde Linux con VirtualBox

Logo VirtualBox

¿Utilizas Linux, pero necesitas ejecutar algún programa sólo para Windows? ¿Echas de menos el Photoshop o el Office? Pues VirtualBox es la solución. Con esta aplicación podemos virtualizar un Sistema Operativo desde tu Linux… no sólo Windows, sino cualquier otro sistema operativo de los que VirtualBoxtiene contemplado, por ejemplo, si quieres probar otra distribución de Linux o emular un Mac Os X Leopard.

En comparación con otras aplicaciones privadas de virtualizacion, como VMware Workstation o Microsoft Virtual PC, VirtualBox carece de algunas funcionalidades, pero provee de otras como la ejecución de máquinas virtuales de forma remota, por medio del Remote Desktop Protocol (RDP) o soporte iSCSI.

En una virtualización entran en juego dos conceptos, el de “sistema anfitrión” que es el sistema operativo original de nuestra máquina y “sistema huésped” que es el que será virtualizado. En mi caso concreto, el sistema anfitrión es Ubuntu Hardy Heron, y el huésped Windows XP puesto que es el más extendido actualmente. Continue reading

Como crear y modificar un campo autoincremental en Oracle

Muchas veces nos encontramos con la necesidad de crear un campo autoincremental en una tabla de nuestra base de datos. Típicamente suele usarse para generar una clave primaria para dicha tabla. Pues bien, la primera vez que nos enfrentamos con esta situación trabajando con Oracle, nos encontraremos con un grave problema que nos puede hacer perder mucho tiempo, puesto que, aunque parezca mentira, no existe ningún tipo de campo autoincremental en Oracle.

La solución es bastante sencilla (aunque no por ello deja de ser incómodo no disponer de un campo de este tipo directamente). Oracle dispone de un tipo de objeto denominado secuencia (SEQUENCE). Una secuencia tiene un valor inicial, un valor máximo y un valor de secuencia que incrementará cada vez que hagamos una llamada a la secuencia. Continue reading

Mi primer proyecto con Symfony 1.2.7 (parte II)

Symfony LogoEsta artículo es la segunda parte de mis primeros pasos con Symfony, puedes ver la primer parte de como crear un proyecto con Symfony, donde se describe paso a paso como diseñar y generar el proyecto, crear las aplicaciones y los módulos y conectar nuestro proyecto con la base de datos.

En esta segunda parte, vamos a dar forma a la parte pública y privada,  hacer uso del scaffolding para generar las acciones comunes CRUD (Create, Read, Update, Delete) o como tunear las URLs para conseguir un mejor posicionamiento. Continue reading

Mi primer proyecto con Symfony 1.2.7 (parte I)

Symfony LogoDespués de ver que es Symfony e instalar Symfony en nuestra máquina, voy a poner los pasos que he seguido, y los problemas que me he encontrado (junto con su resolución) para crear mi primer proyecto con Symfony.

Antes de ponernos manos a la obra, es imporatante entender como estructura Symfony el código. Todo proyecto creado por Symfony consta de una serie de carpetas y archivos que contienen el código base del framework. El árbol de carpetas de un proyecto es:

Árbol de directorios Symfony

A su vez, los proyectos están divididos en aplicaciones y módulos, los cuales, suelen coincidir con las tablas de nuestra base de datos. En este primer proyecto, haremos un blog muy simple y le pondremos el nombre blog (para ser original), a su vez, estará formado por dos aplicaciones, el frontend (o la parte visible para los usuarios comunes) y el backend (el panel de administración). Por último, cada una de las aplicaciones tendrá dos modulos: post y comment:

Estructura proyecto Symfony

Estructura proyecto Symfony


Continue reading

Diferencias entre PHP4 y PHP5

PHP4 to PHP5A pesar de que hace varios años que PHP5 vio la luz y de que su uso es ya super común, nunca me había parado a mirar con detenimiento cuales son las principales diferencias entre PHP4 y PHP5.

Después de dar un paseo por la fantástica documentación de PHP, dejan bastante claro que se centraron principalmente en conseguir un soporte decente para la Programación Orientada a Objetos y mejorar significativamente el rendimiento y las capacidades de PHP intentando conseguir la máxima compatibilidad con su versión 4, lo qual ha sido un detalle ya que facilita enormemente la migración. Continue reading

Instalar Symfony

Symfony LogoEl otro día os comentaba que és Symfony. Hoy os voy a explicar como instalarlo paso a paso de cuatro modos distintos, mediante PEAR, de los repositorios oficiales de Ubuntu/Debian, desde los repositorios Subversion y descargandonos el archivo de la web.

Cualquiera de las opciones que aquí os expondré són igualmente válidas para acondicionar nuestra máquina y usar Symfony, sin embargo, recomiendo instalarlo mediante PEAR o de los repositorios de Ubuntu/Debian para facilitar la actualización posterior.

Continue reading

Tiempo de permanencia y SEO

Search Engine OptimizationSegún vengo escuchando últimamente en las grandes esferas el mundo del posicionamiento, parece ser que la tendencia SEO actual se está ligando cada vez más al tiempo de permanencia en una web.

Si lo analizamos detenidamente, este hecho es totalmente lógico, pues imaginemos que yo entro en Google y tecleo en el buscador las palabras “Perros de Agua” y esto me devuelve:

1) Un enlace en primera posición a una web que habla sobre el equipo de fútbol sala de Chiquitistan (de nombre “Perros de agua”) donde al parecer, el webmaster del club es un maestro del posicionamiento.

2) Un enlace en segunda posición a una completa guía canina interactiva con información sobre esta bonita raza.
Continue reading