Cómo vaciar la cache de DNS

Domingo, Febrero 7th, 2010 | administración | Sin comentarios

Al realizar cambios en nuestros servidores de DNS puede que necesitemos forzar el refresco de las entradas almacenadas en la cache local. Esto es una tarea muy sencilla en los tres sistemas operativos principales:

  1. Windows:
    C:\>ipconfig /flushdns
    Windows IP Configuration
    Successfully flushed the DNS Resolver Cache.
  2. Mac OS X:
    bash-2.05a$ dscacheutil -flushcache
  3. Linux:
    /etc/init.d/nscd restart

Tags: , , , ,

Expresión regular para encontrar vídeos de YouTube en un texto

Jueves, Enero 28th, 2010 | código, fragmentos útiles | Sin comentarios

Con la siguiente expresión regular podremos encontrar los identificadores de los vídeos que se encuentren en vídeos de youtube (tanto como links como si están incrustados):

/youtube\.com\/watch\?v=([A-Za-z0-9._%-]*)[&\w;=\+_\-]*/

Esto permite extraer el identificador único del vídeo, que sirve para enlazarlo, incrustarlo u obtener su imagen. Por ejemplo, para obtener la URL de la imagen thumnail del vídeo podremos usar:

preg_match('/youtube\.com\/watch\?v=([A-Za-z0-9._%-]*)[&\w;=\+_\-]*/',$texto);
$img="http://i2.ytimg.com/vi/{$match[1]}/default.jpg";

Vía | d0t101101 en el Foro de Drupal.

Tags: , , , , , , ,

Redirección 301 (permanente) de un subdominio a una nueva dirección

Martes, Enero 26th, 2010 | SEO, administración | Sin comentarios

Por determinadas razones se puede querer cambiar la dirección en la que se aloja una web en un servidor Apache. Para evitar que se pierda el posicionamiento web de las páginas existentes, se debe crear una redirección permanente, de modo que cuando un navegador solicite un fichero con la URL antigua sea redirigido de una manera transparente al nuevo dominio. Esto es aplicable también al tráfico proveniente de buscadores, de modo que el buscador (google, yahoo, bing…) actualizará sus índices para hacer constar la nueva dirección del contenido, preservando el posicionamiento ya ganado.

Esto se realiza mediante una redirección 301, de carácter permanente. Hay diversas maneras de hacerlo, una de las más sencillas es a través del fichero de configuración .htaccess, en el que deberemos añadir lo siguiente:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdominioantiguo\.tuweb\.com
RewriteRule ^(.*)$ http://servidornuevo.com/$1 [R=301,L]

La URL de la nueva dirección puede incluir o no www antes, y puede estar en otro servidor o en el mismo. Además, esta redirección preservará las peticiones que lleguen (si cargabas /contacto en el servidor antiguo, esta redirección te llevará a /contacto en el servidor nuevo).

Tags: , , , , , ,

Creación de un bot de twitter sencillo con PHP

Viernes, Enero 8th, 2010 | código | 1 Comentario

Twitter tiene un API bastante sencillo sobre el cual se pueden desarrollar aplicaciones de un modo bastante fácil. Con unas pocas líneas podemos montar un bot de twitter que cada hora envíe un mensaje, como explico en BloqNum.


$username = 'nombreDeLaCuenta';
$password = 'passwordDeLaCuenta';

date_default_timezone_set('Europe/Madrid');

$hora = date('g');

if ($hora == '1')
$message = "Xa é a unha... ";
else
$message = "Xa son as ".$hora."... ";

for ($i = 0; $i < $hora; $i++){
$message .= 'TOLON! ';
}

$url = 'http://twitter.com/statuses/update.xml';

$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, "$url");
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_POST, 1);
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, "status=$message");
curl_setopt($curl_handle, CURLOPT_USERPWD, "$username:$password");
$buffer = curl_exec($curl_handle);
curl_close($curl_handle);

if (empty($buffer)) {
echo '--error-'.$message;
} else {
echo '--exito-'.$message;
}

Después, con un proceso de cron se automatiza la ejecución del cliente cada hora, para que se publique el mensaje cada 60 minutos. Este archivo enviará el mensaje cada vez que se visite, con lo cual si se quiere proteger habría que añadirle una contraseña o no ponerlo en una ruta accesible públicamente.

Tags: , ,

Mostrar un listado anidado de términos de taxonomía en Drupal

Miércoles, Mayo 20th, 2009 | drupal, fragmentos útiles | Sin comentarios

Buscando cómo mostrar un listado aninado de los términos (terms) de un vocabulario (una categoría de Drupal, o taxonomy), encontré este útil fragmento de código en Drupal.org. Para que funcione esto es necesario usar el módulo Taxonomy.

<?php
            // El ID del vocabulario de la taxonomia del que queremos crear la lista de terminos
            $vid = 10;
 
            $depth = 0;
            $num_at_depth = 0;
            $tree = taxonomy_get_tree($vid);
 
            print "<ul class=\"menu\">\n<li>";
            foreach ($tree as $term) {
            $diffdepth=0;
              if ($term->depth > $depth) {
                print "\n<ul>\n<li>";
                $depth = $term->depth;
                    $num_at_depth = 0;
              }
              if ($term->depth < $depth) {
                $diffdepth= $depth -$term->depth;
                while ($diffdepth > 0){
                    print "</li>\n</ul>\n";
                    $diffdepth -- ; 
                }
                    $depth = $term->depth;
              }
              if (($term->depth == $depth) && ($num_at_depth > 0)) {
                  print "</li>\n<li>";
                }
              print l($term->name, 'taxonomy/term/' . $term->tid);
                $num_at_depth ++;
            }
            print "</li>\n</ul>\n";
?>

El crédito va al autor, billyboylindien

Tags: , , ,

Reemplazo masivo en cadenas de texto con SQL

Miércoles, Mayo 6th, 2009 | fragmentos útiles | Sin comentarios
Actualizar muchas entradas de una base de datos que contengan un determinado texto puede ser tedioso (me refiero a programar algún script para que lo haga, porque hacerlo a mano seria digno del siglo XIX si hay muchos datos…).
Así, para actualizar los registros de una tabla entera aplicando el patrón de reemplazo deseado, sólo habrá que utilizar una consulta SQL:
  1. UPDATE table_name SET column_name = REPLACE(column_name,“original_string”,“replace_string”);
Un ejemplo de aplicación sería actualizar todos los links hacia un determinado host o URL de los posts de una base de datos de wordpress para que apunten a otro:
  1. UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`,“picateclas.com/directorioantiguo/”,“picateclas.com/nuevodirectorio”)

Vía | LiewCF.

Exportar interfaz gráfica de Netbeans a Eclipse

Domingo, Abril 12th, 2009 | IDEs, aplicaciones | Sin comentarios

Ahí estaba yo generando en Eclipse mi aplicación RMI cuando llegó el momento, ese momento en la vida de un hombre en que te dispones a crear una interfaz gráfica…

Entonces recordé que Netbeans (que no me gusta mucho porque su interfaz me pierde, y si, estoy demasiado acostumbrado a Eclipse) tiene un editor bastante cundiente por lo que me decidí a usarlo.

Así que despues de buscar por ahí y no encontrar solución hice lo siguiente, que resultó funcionar:

1º Copiar el archivo (.java) o paquete donde tengas generado la interfaz y copiarlo al directorio del proyecto de Eclipse como un archivo o una carpeta más. Si inicias eclipse verás que dá errores por todas partes porque no encuentra el jar de donde importar las clases.

2º Localizas el jar que carga la interfaz gráfica en NetBeans (se explica acontinuación).

2.1 Abres las opciones del proyecto con un click secundario sobre el proyecto

Paso 1

Paso 1

2.2 En bibliotecas seleccionas “Extensiones de diseño de Swing” (o algo parecido a Swing Design Extensions) y pulsas en “Editar” (Edit).

Paso 2

Paso 2

2.3 La ruta que aparece es la ruta del archivo .jar que eclipse necesitará para poder lanzar la interfaz gráfica. Así que ahora tienes que importar el archivo .jar (en mi caso “swing-layout-1.0.3.jar”) desde tu proyecto de eclipse. (Tip: Una idea interesante es copiarla a la carpeta del proyecto para que cuando lo muevas siga funcionando).

Paso 3

Paso 3

Y ya está. Espero que os haya servido de ayuda.

Saludos picadores!!

Tags: , ,

Sincronizar la fecha y hora de RHEL

Viernes, Febrero 27th, 2009 | administración, breves | Sin comentarios

Los pasos para tener configurada correctamente la fecha y hora en un servidor con Red Hat Enterprise (RHEL) son muy sencillos, y es conveniente realizarlos cuando varios servidores van a compartir datos entre ellos:

1. Instalación de NTP. Lo más sencillo es usar yum:

# yum install ntp

2. Configurar ntp para que arranque con la máquina:

# chkconfig --levels 235 ntpd on

3. Especificar el servidor NTP a usar. Por ejemplo, el de ntp.org:

# ntpdate 0.pool.ntp.org

4. Arrancar el servicio NTP:

# service ntpd start

Vía | The Web Hosting Hero.

Reemplazar saltos de línea (/n) de un textarea con JavaScript

Jueves, Enero 8th, 2009 | fragmentos útiles, javascript | 1 Comentario

Reemplazar los saltos de línea (\n) de un textarea en una página web mediante javascript es muy sencillo usando una expresión regular. Espero que sirva a aquellos que queráis mejorar vuestra formación en java:

 
 <html>
 <head>
 <script>
 function nl2br(str){
   str=str.replace(/\n/gi,"<br />");
   return str;
 }
 function reformat(){
 	document.dummy.area.value=nl2br(document.dummy.area.value);
 }
 </script>
 </head>
 <body>
 <form name="dummy" id="dummy">
 <textarea name="area" id="area" rows="10" cols="50"></textarea><br />
 <input type="button" name="nl2br" id="nl2br" onclick="reformat()" value="Eliminar Saltos de Línea" />
 </form>
 </body>
 </html>

Tags: ,

Rotar una BufferedImage en Java

Jueves, Diciembre 11th, 2008 | fragmentos útiles, java | Sin comentarios

Me he llevado cierto tiempo encontrar una función para conseguir rotar 90 grados una imagen de tipo BufferedImage en Java, así que una vez he hallado cómo hacerlo qué menos que compartirlo por si os es útil:

	 public BufferedImage rotate90DX(BufferedImage bi)
	    	{
	    		int width = bi.getWidth();
	    		int height = bi.getHeight();
 
	    		BufferedImage biFlip = new BufferedImage(height, width, bi.getType());
 
	    		for(int i=0; i<width; i++)
	    			for(int j=0; j<height; j++)
	    				biFlip.setRGB(height-1-j, width-1-i, bi.getRGB(i, j));
 
	   		return biFlip;
	  }

Y en el sentido inverso sería así…

	    	public BufferedImage rotate90SX(BufferedImage bi)
	    	{
	    		int width = bi.getWidth();
	    		int height = bi.getHeight();
 
	    		BufferedImage biFlip = new BufferedImage(height, width, bi.getType());
 
	    		for(int i=0; i<width; i++)
	    			for(int j=0; j<height; j++)
	    				biFlip.setRGB(j, i, bi.getRGB(i, j));
 
	    		return biFlip;
	    	}

Vía | Snippet en Dzone.

Pages: 1 2 3 Next