29 mayo 2013

Eliminar el sufijo de país en Blogger

Desde hace ya un tiempo, Blogger añade a todos sus blogs el sufijo correspondiente al dominio TLD del país desde el que se realiza la consulta (.es si se visita desde España, .mx desde Mexico, .fr desde Francia, etc.). De este modo, si se visita este blog (ubicado en barralog.blogspot.com) desde Alemania, Blogger nos intentará redirigir automáticamente hacia barralog.blogspot.com.de.

Hay diversas razones por las que esto puede llegar a ser una molestia, por eso os indico una forma de solventarlo. Basta con insertar el siguiente código dentro del <head> de la plantilla.
<script type="text/javascript"> 
   //<![CDATA[
   // Eliminar el sufijo del TLD de cada país en blogger
   var host = document.location.hostname;
   var ruta = document.location.pathname;
   var positive = host.substr(host.lastIndexOf("."));
   if (positive != ".com") {
      var output = "http://" + host.substr(0, host.indexOf("."));
      output += ".blogspot.com/ncr" + ruta;
      window.location.replace(output);
   }
   //]]>
</script>
Nota: Esta acción no está penalizada en absoluto por Blogger y tampoco afecta a AdSense.

13 mayo 2013

Desconectar sesión remota

En algunas ocasiones se puede dar el caso de establezcamos una conexión por ssh a un servidor remoto y que, por la razón que sea, al cerrar esa conexión, la sesión haya quedado abierta. En este artículo veremos una forma de eliminar esa sesión remota "fantasma".

Habilitar HTTPS en apache

En algunas ocasiones (envío de formularios, páginas de autenticación, etc.) es necesario que nuestro servidor web pueda entregar páginas cifradas bajo el protocolo seguro HTTPS. En este artículo se muestran cuales son los pasos a seguir para i) generar un certificado SSL autofirmado y ii) configurar convenientemente el servidor apache2 para que pueda entregar la página https://www.midominio.com.

02 mayo 2013

Extraer lineas de un archivo

Actualmente estoy manipulando un fichero LDIF que tiene alrededor de 6.800.000 líneas.

El caso es que si utilizo un editor gráfico como por ejemplo gedit, al tener que manejar un archivo de ese tamaño, el sistema se cuelga. Por otro lado, según qué tipo de operación se deba realizar, el uso de editores en modo consola como nano o vim puede llegar a ser incómodo.

Para esos casos, puede servir de ayuda un pequeño script que nos permita la extracción de algunas líneas de código del archivo original. Basta con pasarle la línea de inicio, la línea final y el nombre del archivo sobre el que realizar la extracción.
if [ $# -eq 3 ]; then 
   first=$1 
   last=$2 
   file=$3
   head -n $last $file | tail -n `expr $last - $first + 1` 
else 
   echo "Usage: `basename $0` [firstLine] [lastLine] [file]" 
fi

05 abril 2013

perl: warning: Setting locale failed.

Al instalar cualquier paquete mediante el uso de apt-get en Ububtu Server 12.04 LTS, el sistema genera un error como este:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
 LANGUAGE = "en_US:en",
 LC_ALL = (unset),
 LC_TIME = "es_ES.UTF-8",
 LC_MONETARY = "es_ES.UTF-8",
 LC_ADDRESS = "es_ES.UTF-8",
 LC_TELEPHONE = "es_ES.UTF-8",
 LC_NAME = "es_ES.UTF-8",
 LC_MEASUREMENT = "es_ES.UTF-8",
 LC_IDENTIFICATION = "es_ES.UTF-8",
 LC_NUMERIC = "es_ES.UTF-8",
 LC_PAPER = "es_ES.UTF-8",
 LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory
La forma de solucionarlo (fijando los locales en inglés y español) es la siguiente
$ sudo locale-gen en_US en_US.UTF-8 es_ES es_ES.UTF-8
Generating locales...
en_US.ISO-8859-1... done
en_US.UTF-8... up-to-date
es_ES.ISO-8859-1... done
es_ES.UTF-8... done
Generation complete.

$ sudo dpkg-reconfigure locales
Generating locales...
en_AG.UTF-8... done
en_AU.UTF-8... done
en_BW.UTF-8... done
en_CA.UTF-8... done
en_DK.UTF-8... done
en_GB.UTF-8... up-to-date
en_HK.UTF-8... done
en_IE.UTF-8... done
en_IN.UTF-8... done
en_NG.UTF-8... done
en_NZ.UTF-8... done
en_PH.UTF-8... done
en_SG.UTF-8... done
en_US.ISO-8859-1... up-to-date
en_US.UTF-8... up-to-date
en_ZA.UTF-8... done
en_ZM.UTF-8... done
en_ZW.UTF-8... done
es_ES.ISO-8859-1... up-to-date
es_ES.UTF-8... up-to-date
Generation complete.

15 diciembre 2012

Mi página web no se visualiza bien en IE

Uno de los principales retos a la hora de realizar un diseño web profesional es que la página se visualice correctamente en cualquier navegador. ¿Os imagináis que Facebook o Twitter sólo se vieran bien en Internet Explorer?

Para ello, la primera premisa es realizar una programación basada en estándares web. A pesar de eso, Internet Explorer suele dar algunos problemas ya que se trata de un navegador con una interpretación de los estándares un tanto "peculiar".

Es frecuente que un diseño web se vea bien en la mayoría de navegadores pero que Internet Explorer presente problemas de visualización. Para solventarlo, hay una solución muy simple y que suele funcionar: basta con añadir el siguiente meta tag justo al inicio del <head> de la página.
<head> 
<meta http-equiv="X-UA-Compatible" content="IE=8" />
[...]
</head>

14 diciembre 2012

Ajustar el huso horario en PHP

Cuando invocamos la función string date( string $format [, int $timestamp = time() ] ) en PHP, ésta nos devuelve una cadena con formato del tiempo indicado por el parámetro $timestamp o, en el caso de no indicar ningún timestamp, del momento actual.

Un problema típico con el que nos podemos encontrar al leer la fecha y la hora actual es que el servidor se encuentre en un huso horario distinto al de la prestación del servicio. Por ejemplo, cuando el hosting está en algún punto de EEUU y el servicio se está prestando en alguna parte de Europa.

Este problema se puede solucionar fácilmente de forma sencilla con la función bool date_default_timezone_set ( string $timezone_identifier ) tal y como se muestra en este ejemplo:
<?php
   $now = time();
   date_default_timezone_set( 'Europe/Madrid' );
   $fecha = date( "d/m/Y", $now );
   $hora  = date( "H:i:s", $now );
?>
Sigue un listado con todos los husos horarios clasificados por área

11 diciembre 2012

Sincronizar el reloj con NTP en servidores Debian

Para los administradores de sistemas con multitud de equipos y servidores a su cargo es muy conveniente mantener los relojes de todos los equipos sincronizados. De ese modo, en el caso de producirse algún incidente de seguridad (pero no solo en ese caso), como todos los ficheros de log estarán sincronizados, el rastreo y secuenciación de los hechos es mucho más fácil.

Lo primero que necesitamos es instalar el paquete ntpdate.
# apt-get install ntpdate
El paso siguiente es el de sincronizar el reloj de cada sistema con un servidor de NTP. Para hacer eso basta con ejecutar el comando ntpdate nombre.del.servidor. Si nuestro equipo está detrás de un firewall es conveniente usar el parámetro -u del ntpdate para que use un puerto no privilegiado en la comunicación con el servidor NTP (ntpdate -u nombre.del.servidor).

Un servidor que funciona suficientemente bien para estos menesteres es swisstime.ethz.ch.

Sincronización automática

Vamos a asegurarnos que la sincronización se realice de forma periódica. Para ello, editaremos el fichero /etc/cron.hourly/ntp con el siguiente contenido para que se ejecute cada hora:
# vim /etc/cron.hourly/ntp
#!/bin/bash 
/usr/sbin/ntpdate -u swisstime.ethz.ch
Para asegurarnos que se ejecutará sin problemas debemos de asignar permisos de ejecución al fichero /etc/cron.hourly/ntp
# chmod a+x /etc/cron.hourly/ntp

$ ls -lF /etc/cron.hourly/ntp 
-rwxr-xr-x 1 root root 46 dec 11 13:39 /etc/cron.hourly/ntp*
Esto es todo. A partir de ahora, todos los equipos tendrán la misma (buena) hora.

16 octubre 2012

Cómo volver a crear el icono Mostrar escritorio en la barra de herramientas Inicio rápido en Windows XP

Para volver a crear el icono Mostrar escritorio usted mismo, siga estos pasos

Haga clic en Inicio y, en Ejecutar, escriba notepad en el cuadro Abrir y haga clic en Aceptar.

Copie y pegue el texto siguiente en la ventana del Bloc de notas.
[Shell]
Command=2
IconFile=explorer.exe,3
[Taskbar]
Command=ToggleDesktop
En el menú Archivo, haga clic en Guardar como y, a continuación, guarde el archivo en el escritorio como "Show Desktop.scf". El icono Mostrar escritorio se crea en el escritorio.

Haga clic y arrastre el icono Mostrar escritorio a la barra de herramientas Inicio rápido.

04 agosto 2012

Instalando symfony 1.4 en Mac OS X

Symfony es un completo framework diseñado para optimizar, gracias a sus características, el desarrollo de las aplicaciones web. Para empezar, separa la lógica de negocio, la lógica de servidor y la presentación de la aplicación web.

Proporciona varias herramientas y clases encaminadas a reducir el tiempo de desarrollo de una aplicación web compleja. Además, automatiza las tareas más comunes, permitiendo al desarrollador dedicarse por completo a los aspectos específicos de cada aplicación. El resultado de todas estas ventajas es que no se debe reinventar la rueda cada vez que se crea una nueva aplicación web.

En su momento vimos como realizar la instalación de symfony para Ubuntu. Hoy vamos a ver como realizar la instalación para Mac OS X

01 junio 2012

Cambiar la contraseña root de MySQL

Es posible que tengamos que administrar una base de datos MySQL y, por la razón que sea, no tengamos la contraseña de root. Esta situación, que es más habitual de lo que nos imaginamos, presenta un grave problema porque nos impide crear nuevas base de datos, nuevos usuarios, etc.

En este tutorial vamos a ver cómo se puede cambiar la contraseña de root de MySQL desde la cónsola del sistema y de una forma muy sencilla.

15 mayo 2012

Redirigir a una conexión segura https en Apache

Puede que, como administradores de un sistema, nos interese que todos los accesos a una determinada página web, se realicen siempre bajo protocolo seguro HTTPS.

Veremos dos posibilidades: Redirección permanente o Reescritura

11 mayo 2012

Autenticación mediante clave pública en SSH

El uso de claves públicas para acceder a servicios como SSH, SCP o SFTP, resulta una técnica más segura para autenticar dichos servicios que el esquema clásico de usuario y contraseña, al que estamos tan acostumbrados. Además, nos permite realizar una identificación automática y transparente, sin necesidad de tener que interaccionar, lo cual será de gran utilidad en la automatización de ciertas tareas rutinarias que, preferiblemente, deban realizarse de forma desatendida como por ejemplo la realización de copias de seguridad.

Instalando symfony 1.4 en Ubuntu

Symfony es un completo framework diseñado para optimizar, gracias a sus características, el desarrollo de las aplicaciones web. Para empezar, separa la lógica de negocio, la lógica de servidor y la presentación de la aplicación web.

Proporciona varias herramientas y clases encaminadas a reducir el tiempo de desarrollo de una aplicación web compleja. Además, automatiza las tareas más comunes, permitiendo al desarrollador dedicarse por completo a los aspectos específicos de cada aplicación. El resultado de todas estas ventajas es que no se debe reinventar la rueda cada vez que se crea una nueva aplicación web.

04 mayo 2012

3 formas de ejecutar comandos en segundo plano en linux

En algunas ocasiones puede ser necesario ejecutar un script en segundo plano; ya sea porque tarde mucho en finalizar o porque el programa tiene que ejecutarse de forma indefinida y al mismo tiempo se quieren analizar sus salidas/salidas en tiempo real, o cuando, en el caso de conexiones remotas, por el motivo que sea, se pueda producir una desconexión.

Analizaremos 3 posibilidades:

& y bg
Si añadimos un ampersand (&) al final del comando o del script que queremos ejecutar, éste se ejecutará en segundo plano.
$ ./my-shell-script.sh &
[1] 10233
Si ejecutamos un comando de la forma habitual (en primer plano o foreground) y, después de pasado un cierto tiempo, nos damos cuenta que hubiera sido mejor ejecutarlo en segundo plano o background, lo podemos hacer sin necesidad de tener que matar el proceso y volver a ejecutarlo de nuevo con el ampersand. Esto se hace presioando "CTRL+Z" para suspender la ejecución del comando actual, y después invocando el comando bg.
$ ./my-shell-script.sh
^Z
[2]+  Detenido                my-shell-script.sh

$ bg
[2]+ my-shell-script.sh &
Este proceso que se acaba de pasar al segundo plano, también se puede volver al primer plano con el comando fg.
$ fg 2
my-shell-script.sh
nohup y &
Al finalizar una sesion en un terminal se envía un signal (SIGHUP) a todos los procesos que esté ejecutando nuestro usuario. Como resultado, dichos procesos se mueren (aunque les hayamos puesto & al final)

Para evitar esto utilizamos el comando nohup. Este comando hace que un proceso ignore la señal SIGHUP, y redirige la salida de nuestro script a un archivo nohup.out que es creado en el directorio actual.
$ nohup ./my-shell-script.sh &
Una buena practica sería redireccionar stdin, stdout y stderr. Básicamente, por dos razones: i) rastrear la salida de nuestro script en caso de producirse algún error, y ii) evitar problemas al terminar nuestra sesión ssh, si es que la ejecutamos en un servidor remoto.
$ nohup ./my-shell-script.sh > foo.out 2> foo.err < /dev/null &
Esta opcion es muy útil cuando necesitamos ejecutar un proceso largo y no nos interesa saber nada de él hasta que finalice. Podemos desconectarnos irnos, regresar al día siguiente y analizar el resultado del proceso.

screen
Si invocamos un comando en segundo plano (usando nohup y &), éste se ejecutará incluso después de que cerremos nuestra sesión. Pero, en ninguno de los casos anteriores, podemos conectarnos a la misma sesión otra vez y ver exactamente qué es lo que está pasando en la pantalla, como si no nos hubieramos desconectado. Para lograr esto, usaremos el comando screen.

El primer paso es ejecutar el script que necesitamos como parametro del comando screen.
$ screen ./my-shell-script.sh
Si después de ejecutar la linea anterior tecleamos “CTRL+A d”, el sistema nos separara de la sesión actual (en la que estamos ejecutando my-shell-script.sh) y nos retornará a la terminal a la espera de teclear un nuevo comando.

Llegados a este punto, podemos cerrar la sesión, irnos, regresar, iniciar una nueva sesión y recuperar la pantalla (screen) que esta corriendo nuestro script. Para ello, invocaremos el comando screen con el parámetro -ls para obtener un listado de las sesiones actuales:
$ screen -ls
[detached from 1788.ttys000.milleniumfalcon]
A continuación, mediante el parámetro -r y el identificador de la sesión recuperamos la pantalla que necesitemos:
$ screen -r 1788.ttys000.milleniumfalcon
¿Qué opcion usar?
Bueno, pues eso dependerá de cada caso, habrá veces que con el ampersand será suficiente y otras en las que tenemos que optar por una opción diferente. Para saber más acerca de nohup y screen recomiendo leer las páginas del manual.