lunes, 27 de diciembre de 2010

VIM: Cambiar codificación de ficheros con VIM

Una vez que el archivo se encuentra abierto con VIM y suponiendo que el archivo esta codificado con iso-8859-1 (latin1) se debe teclear en el modo comandos la siguiente línea.
  • :set fenc=utf-8
Si el archivo esta codificado con utf-8 y se desea pasar a iso-8859-1 se debe escribir la siguiente línea.
  • :set fenc=iso-8859-1
Nota: No deben existir espacios entre fenc, el igual y el tipo de codificación que se utilizará.
     Este comando solo permitirá cambiar la codificación del archivo que se encuentra abierto, sin embargo puede ser necesario editar la codificación de varios archivos para lo cual se puede ejecutar el siguiente comando en la consola de linux.
    • find -name '*.php' -exec vim {} '+set fenc=utf-8' '+x' \;
    find -name '*.php' permite buscar uno o más archivos dentro del directorio y de los directorios que se encuentran en su interior que coinciden con el parámetro de búsqueda.
    -exec permite ejecutar un comando sobre los archivos que son encontrados.
    vim {} '+set fenc=utf-8' permite cambiar la codificación de los archivos que coinciden con la búsqueda realizada.

    martes, 14 de diciembre de 2010

    VIM: Comandos Utiles en VIM III

    En la publicación anterior pudimos revisar algunos comandos útiles para trabajar con el editor de texto VIM. En la publicación actual se agregarán nuevos comandos para trabajar con VIM.
    • d$ : Permite eliminar el contenido que existe desde la posición actual del cursos hasta el fin de línea.
    • d0 : Permite eliminar el contenido que existe desde el inicio de la línea hasta la posición actual del cursos.
    • D : Permite eliminar la línea completa donde se encuentra el cursos, igual que "dd". Permite permite borrar el contenido desde donde se encuentra el cursor, hasta el final de la línea, incluyendo el carácter donde se encuentra posicionado el cursor. Tiene el mismo comportamiento que d$.
    • yy : Copia el contenido de la línea completa donde se encuentra el cursor, igual que "Y".
    • y$ : Permite copiar el contenido que existe desde la posición actual hasta el fin de línea.
    • y0 : Permite copiar el contenido que existe desde el inicio de la línea hasta la posición actual del cursos.
    • P : Pega lo que se ha copiado con las opciones eliminar o copiar desde la posición actual del cursor en adelante. Pega el contenido en la línea anterior a la ubicación del cursor.
    • O : Permite ingresar texto al inicio de la línea anterior a la línea en la que se encuentra el cursor.
    También se agregan algunos comandos ejecutados con ":" para VIM:
    • :v/string/d : Permite buscar todas las líneas del archivo que no contienen el string (frase buscada) y las elimina.
    • :sort u : Ordena todas las líneas escritas en un archivo y elimina las líneas duplicadas.
    • :set number : Permite agregar los numero de las líneas del archivo editado con VIM.
    • :set nonumber :  Permite eliminar los numero de las líneas del archivo editado con VIM.

    martes, 23 de noviembre de 2010

    VIM: Comandos Utiles en VIM II

    En la entrada anterior ingrese algunos comandos esenciales para la utilización de VIM, hoy ampliaremos la cantidad de comandos que se pueden utilizar en este editor de texto.
    • dd : Borra la linea en la cual esta ubicado el cursor.
    • r : Remplaza el caracter sobre el cual esta posicionado el cursor.
    • ~ : Remplaza el caracter sobre el cual esta posicionado el cursor por una mayúscula si el caracter estaba en minúscula o a minúscula si el caracter estaba en mayúscula.
    • u : Deshace el ultimo cambio realizado en el documento.
    • [ctrl]+r : Rehace el ultimo cambio desecho.
    • Y : Copia el contenido de la línea en la cual se encuentra el cursor.
    • p : Pega el ultimo elemento cortado o copiado, es decir, se puede copiar la ultima linea borrada con "dd" o la ultima línea copiada con "Y". Es importante mencionar que esta copia se realiza en la línea siguiente a la ubicación actual de cursor.
    • G : Permite ir a la primera posición de la ultima línea del documento.
    • 1G : Permite ir a la primera posición de la primera línea del documento.
    • w : Permite avanzar desde una palabra al inicio de la siguiente palabra, es decir, se puede avanzar de una palabra a otra. "W" tiene el mismo efecto.
    • b : Permite retroceder desde una palabra al inicio de la misma palabra, es decir, se puede retroceder de una palabra a otra. "B" tiene el mismo efecto.
    • m : Crea una marca en el documento al inicio de la linea donde se encuentra el cursor. Ej. ma, esa posición queda marcada y el nombre de la marca es a.
    • ' : Permite regresar a la ubicación de una marca creada con anterioridad. Ej. 'a, se accede a la posición que contiene la marca a.
    Este editor también permite realizar búsquedas sobre el documento, para esto se debe utilizar el caracter "/".
    •  /frase_buscada : Permite realizar una búsqueda sobre el documento.
    • n : Permite acceder a la siguiente posición donde se encuentra la palabra o frase buscada.
    • N : Permite acceder a la posición anterior donde se encuentra la palabra o frase buscada.
    Es importante mencionar que VIM también permite realizar búsquedas con expresiones regulares.

    Como se mencionó en la entrada anterior también se puede ejecutar comandos antecedidos por ":", a continuación se agregan nuevos comandos.
    • :%s/frase_buscada/frase_nueva/g : Permite sustituir una frase por otra en todo el documento. El "%" indica que la búsqueda se debe realizar en todo el documento, la "s" indica que la operación que se realizará es de sustitución, entre el primer y segundo "/" se ingresa la frase que se buscará, entre el segundo y el tercer "/" se ingresa la frase nueva y la "g" al final de la línea indica que si la frase se encuentra más de una vez en una línea, se remplaza todas las veces que se encuentre. Este comando también permite dividir la línea en varias partes, entregando la posibilidad de mezclar o acomodar el texto contenido en las líneas que cumplen con el patrón ingresado, como se puede observar en el siguiente ejemplo.
    Ej.

    Contenido Inicial del Archivo en VIM

     INSERT INTO `tabla` (`id`, `campo_1`, `campo_2`, `campo_3`, `campo_4`, `campo_5`, `campo_6`,  `campo_7`, `campo_8`, `campo_9`, `campo_10`, `campo_11`, `campo_12`, `campo_13`, `campo_14`) VALUES
    (3708364, '61654760', '6609
    61654760', 8, '', '0000-00-00 00:00:00', '', 2, '192.168.77.213', '7770', 'pahaoanae', 'dato_11', 'dato_12', NULL, NULL),
    (3708362, '90
    654795', '660990654795', 8, '', '0000-00-00 00:00:00', '', 2, '192.168.77.213', '7770', 'pahaoanae', 'dato_11', 'dato_12', NULL, NULL),

    Expresión Regular para remplazar conservando algunos contenidos

     :%s/\(([0-9]*, '\)\([0-9]\)\([0-9]*\)\('.*'\)pahaoanae\('.*\),/\1\2\3\4\2-\3\5/

    Contenido Final del Archivo en VIM

     INSERT INTO `tabla` (`id`, `campo_1`, `campo_2`, `campo_3`, `campo_4`, `campo_5`, `campo_6`,  `campo_7`, `campo_8`, `campo_9`, `campo_10`, `campo_11`, `campo_12`, `campo_13`, `campo_14`) VALUES
    (3708364, '
    61654760', '660961654760', 8, '', '0000-00-00 00:00:00', '', 2, '192.168.77.213', '7770', '6-1654760', 'dato_11', 'dato_12', NULL, NULL)
    (3708362, '
    90654795', '660990654795', 8, '', '0000-00-00 00:00:00', '', 2, '192.168.77.213', '7770', '9-0654795', 'dato_11', 'dato_12', NULL, NULL)

    Aquí se debe indicar que todo lo que se encuentra entre los paréntesis antecedidos por el carácter de escape "\(...\)", en este caso los tres puntos, serán almacenados en la variable \1, siempre que sea el primer paréntesis utilizado, los siguientes continuarán con \2, \3 hasta un máximo de \9 variables.
    • :'a,'bs/frase_buscada/frase_nueva/g : Permite sustituir una frase por otra en el documento, entre dos marcas. Las "'a,'b" indica que la búsqueda se debe realizar entre las marcas "a" y "b" del documento, la "s" indica que la operación que se realizará es de sustitución, entre el primer y segundo "/" se ingresa la frase que se buscará, entre el segundo y el tercer "/" se ingresa la frase nueva y la "g" al final de la línea indica que si la frase se encuentra más de una vez en una línea, se remplaza todas las veces que se encuentra.
    • :'a,'bd : Se borran todas las líneas ubicadas entre las marcas "a" y "b". Las marcas "'a,'b" indica que las líneas que serán eliminadas deben estar entre las marcas "a" y "b", la letra "d" indica que la operación que se realizará es eliminar las líneas.
    • :set nosmartindent : Elimina la autoindexación en el documento.
    • :set smartindent: Agrega la autoindexación en el documento.

      "Gracias, por compartir tus conocimientos"

      lunes, 22 de noviembre de 2010

      VIM: Comandos Utiles en VIM

      La gran mayoría de los sistemas operativos basados en Linux contienen el editor de texto llamado VIM, para muchos parece muy complicado de utilizar, pero esto también le permite ser muy potente en la edición de texto.

      Antes de escribir algunos comandos que consideró que son muy útiles debo hacer mención que este editor de texto se separa en dos entornos donde se encuentra el cursor, el primero es el modo donde se pueden ingresar los comandos, para llegar a este entorno se debe presionar la tecla "Esc". El otro entorno es donde se puede editar el texto. A continuación se mencionaran algunos comandos que pueden ser útiles para comenzar a trabajar con VIM.

      • i : permite ingresar texto en la posición anterior a la cual se encuentra ubicado el cursor.
      • a : permite ingresar texto en la posición posterior a la cual se encuentra ubicado el cursor.
      • I : permite ingresar texto al inicio de la línea.
      • A : permite ingresar texto al final de la línea.
      • o : permite ingresar texto al inicio de la línea siguiente.
      • x : permite eliminar el caracter del documento sobre el cual se encuentra el cursor (la tecla "Supr" o "Del" tiene el mismo efecto).
      Los comandos descritos anteriormente deben ser ingresados cuando se esta en modo comando, es decir, después de presionar la tecla "Esc". Para ejecutar algunos comandos en VIM después de presionar la tecla "Esc" se debe presionar antes la tecla ":" (dos puntos). A continuación se muestran algunos de estos comandos.
      • :w : permite guardar el contenido del archivo.
      • :q : permite salir del documento.
      • :q! : permite salir del documento, sin guardar los cambios que se han realizado.
      Esos comando permiten realizar ediciones de texto muy básicas, pero son el punto de partida para trabajar con VIM.

      "Gracias, por compartir tus conocimientos"

      martes, 9 de noviembre de 2010

      PostgreSQL: Extraer los campos de una fecha

      Uno de los recursos más almacenados en las bases de datos son las fecha, existiendo ocasiones en las cuales se deben obtener algunos campos de la fecha, para este ejemplo se utilizará la tabla personas creada como se observa a continuación:

      create table personas (
         id                     SERIAL      NOT NULL,
         rut                   varchar(15) NULL,
         nombre           varchar(30) NULL,
         apaterno         varchar(30) NULL,
         amaterno        varchar(30) NULL,
         fecha_nac        date   NULL,
         hora_nac         time NULL,
         sexo                 varchar(1)  NULL,
         direccion         varchar(30) NULL,
         ciudad             varchar(30) NULL,
         telefono           integer     NULL,
         created            timestamp   NOT NULL,
         modified          timestamp   NULL,
         constraint pk_personas primary key (id)
      );

      De esta tabla se rescataran cada uno de los campos de la creación del registro por separados y a demás se obtendrá el día de la semana al que corresponde la fecha de creación del registro.

      SELECT
       rut,
       extract(year from created)::int as anyo,
       extract(month from created)::int as mes,
       extract(day from created)::int as dia,
       extract(hour from created)::int as hour,
       extract(minute from created)::int as minuto,
       extract(second from created)::int as segundo,
       CASE extract(dow from created)
        WHEN 0 THEN 'Domingo'
        WHEN 1 THEN 'Lunes'
        WHEN 2 THEN 'Martes'
        WHEN 3 THEN 'Miercoles'
        WHEN 4 THEN 'Jueves'
        WHEN 5 THEN 'Viernes'
        WHEN 6 THEN 'Sabado'
       END
       as dow
      FROM
       personas
      ;

      Con esta consulta se obtiene toda la fecha de creación desglosada completamente, a demás permite obtener el día de la semana en que fue creado utilizando el CASE que permite seleccionar entre los valores el valor obtenidos y lo convierte en una cadena con el nombre del día.

      extract(campo from fuente)

      Recupera los valores de una fecha/hora, donde la fuente es un campo del tipo de dato fecha/hora, en este caso en particular un timestamp, mientras que el campo es el tipo de valor recuperado de la fecha, los campos existentes en las variables de fecha/hora son los siguientes:
      • century: devuelve el siglo de la fecha, no existe siglo 0, solo existe desde el -1 al 1. Ej. el año 2000 es el siglo 20, mientras que el año 2001 es el siglo 21.
      • day: devuelve el día del mes, va desde el 1 al 31 según el mes que corresponda.
      • decade: divide el campo del año en 10. Ej. el año 2001 sería la decada 200.
      • dow: devuelve el día de la semana que va desde 0 a 6, donde el 0 corresponde al domingo.
      • doy: devuelve el día del año que va desde 1 al 365/366 según corresponda.
      • epoch: devuelve el numero de segundos desde el 1970-01-01. Este valor puede ser negativo.También se puede utilizar para obtener el numero de segundos en un intervalo de tiempo. Ej. SELECT EXTRACT(EPOCH FROM INTERVAL'5 day 3 hours');
      • hour: devuelve la hora de la fecha, este valor esta entre 0 y 23.
      • microseconds: El tiempo en segundos, incluyendo la parte fraccionaria multiplicada por 1.000.000.
      • millennium: devuelve el valor del milenio del año. Ej. el año 1990 es el milenio 2 y el año 2001 es el milenio 3.
      • milliseconds: devuelve los segundos del campo tiempo multiplicado por 1.000.
      • minute: devuelve los minutos del campo, este valor esta definido entre 0 y 59.
      • month: Para valores timestamp, devuelve el numero del mes sin el año, los valores están definidos entre 0 y 12. También permite obtener intervalos de meses. Ej. SELECT EXTRACT (MONTH FROM INTERVAL '2 years 3 months');
      • quarter: Divide el año en cuatro y devuelve valores entre 1 y 4, según el intervalo en que se encuentre el día en el año.
      • second: devuelve la cantidad de segundos incluyendo la parte fraccionaria del campo.
      • timezone: La zona horaria en UTC, medida en segundos, los valores positivos corresponden a la zona horaria este de UTC y los valores negativos a la zona horaria oeste de UTC.
      • timezone_hour: La hora correspondiente de la zona horaria.
      • timezone_minute: Los minutos correspondientes a la zona horaria.
      • week: El número de la semana del año.
      • year: devuelve el año de la fecha, no hay año 0, así que hay años antes de Cristo y después de Cristo.
      "Gracias, por compartir tus conocimientos" 

        jueves, 28 de octubre de 2010

        PostgreSQL: Ingreso a la base de datos sin clave

        El usuario de una base de datos postgres puede desear acceder al motor de base de datos sin tener que ingresar la clave.
        Para lograr esto se debe crear el archivo ".pgpass" en el directorio home del usuario que desea ingresar sin la password.
        El archivo debe contener líneas con el siguiente formato.
        • hostname:port:database:username:password
        En el archivo los campos descritos contienen la siguiente información:
        • hostname -> debe escribir "localhost" si la base de datos se encuentra en el mismo equipo, de encontrarse en otro se debe escribir la ip del equipo o el nombre del equipo en la red.
        • port -> se debe ingresar el numero del puerto de conexión al postgres, por defecto el puerto de conexión de postgres es "5432".
        • database -> se debe escribir el nombre de la base de datos a la cual se desea ingresar.
        • username -> se debe escribir el nombre de usuario con el cual se desea acceder a la base de datos.
        • password -> se debe ingresar la password utilizada por el usuario para ingresar a la base de datos.
        Este archivo debe tener estrictamente los permisos de lectura y escritura solo para el usuario y ningún permiso para el grupo u otros. Para revisar los permisos del archivo se puede ejecutar el siguiente comando.
        • ls -la .pgpass
        Esto entregara la siguiente línea como respuesta.
        • -rw-------     1     nombreusuario     nombregrupo     tamaño     fechamodificacion     .pgpass
        Si los permisos del archivo no están como se observa en la línea anterior, se debe utilizar el siguiente comando para cambiar los permisos del archivo.
        • chmod 600 .pgpass
        "Gracias, por compartir tus conocimientos"

        miércoles, 27 de octubre de 2010

        PostgreSQL: Copiar resultado de un SELECT a un archivo

        Existen ocasiones en las que es deseable pasar los resultados de un SELECt a un archivo, postgres permite que realices esta operación. Para esto debes ejecutar el siguiente comando en la consola del postgres.
        • postgres=#copy (select * from nombre_tabla) to 'directorio_name/file_name';
        Esto permite copiar todos los datos obtenidos en el select al archivo ubicado en el directorio seleccionado. Para que quede más claro se puede observar el siguiente ejemplo que es ejecutado en la consola de postgres en un equipo con linux instalado.
        • postgres=#copy (select * from alumnos) to '/tmp/datos.txt';

        IMPORTANTE:
        Es importante recordar algunos comandos de postgres que permiten obtener ayuda.
        • postgres=#\h => permite obtener ayuda de los comandos de postgres.
        • postgres=#\help comando => permite obtener ayuda de un comando especifico de postgres.
        • postgres=#\? => permite obtener ayuda de los comandos del cliente de postgres.
        Antes de terminar debo aclarar que "postgres=#" indica que el comando es ejecutado en la consola del postgres.

        "Gracias, por compartir tus conocimientos"

        martes, 26 de octubre de 2010

        PostgreSQL: Modos de ingreso, creación de usuarios y base de datos

        Después de instalar PostgreSQL en un equipo con Ubuntu se debe ingresar al sistema con un usuario y a una base de datos existentes en el motor de base de datos, para esto se puede utilizar el siguiente comando.
        • sudo -u usuario psql base_de_datos
        Como usuario se debe utilizar postgres y como base de datos postgres, esto permitirá al usuario ingresar al motor de base de datos sin necesidad de una clave más que la del superusuario.

        Una vez que se ha ingresado se debe crear un usuario para trabajar con las bases de datos, esto se puede realizar con el siguiente comando.
        • CREATE USER "usuario" WITH CREATEDB CREATEUSER PASSWORD 'password'
        Como usuario se debe ingresar el nombre del usuario que se creará y como password la clave de ingreso del usuario, por ejemplo para crear como usuario el mismo de php se debe escribir lo siguiente.
        • CREATE USER "www-data" WITH CREATEDB CREATEUSER PASSWORD 'www-data'
        Para crear una base de datos que sea propiedad del usuario que se ha creado se debe utilizar el comando escrito a continuación.
        • CREATE DATABASE nombre_base_datos WITH OWNER = "usuario"
        Una vez que el usuario y la base de datos del mismo han sido creados se puede ingresar a PostgreSQL con el siguiente comando.
        • psql -h localhost -U usuario nombre_base_datos
        Luego el motor solicita la password ingresada para el usuario en el proceso de creación. Ahora puedes realizar todas las operaciones que desees con la base de datos que acabas de crear.

        "Gracias, por compartir tus conocimientos"

        lunes, 25 de octubre de 2010

        PostgreSQL: Control de Secuencias

        En PostgreSQL se pueden crear tablas con "primary key" autoincrementables, como se pude observar en el siguiente ejemplo.

        create table alumnos (
           id        SERIAL       not null,
           nombre varchar(255) NULL,
           constraint pk_beneficios primary key (id));


        Esto creara una secuencia autoincrementable para la "primary key" como se observa a continuación.

         id      integer        not null valor por omisión nextval('alumnos_id_seq'::regclass)

        En ocaciones es necesario observar o modificar los valores de la secuencia, para realizar estas operaciones, se pueden utilizar las siguientes sentencias.

        • "SELECT last_value FROM nombre_secuencia;": Retorna el último valor de la secuencia.
        • "SELECT nextval('nombre_secuencia');": Retorna el valor del último número de la secuencia y lo incrementa en 1.
        • "SELECT setval ('nombre_secuencia', valor);": Asigna el valor a la secuencia, obligando a nextval a retornar (valor + 1).
        • "SELECT setval('nombre_secuencia',valor,true);": Funciona del mismo modo que la sentencia anterior.
        • "SELECT setval('nombre_secuencia',valor,false);": Asigna el valor a la secuencia, obligando a nextval a retornar (valor).
        • "SELECT currval('nombre_secuencia');": Retorna el valor del último número de la secuencia.
        El nombre_secuencia puede ser remplazado por "alumno_id_seq" del primer ejemplo, mientras que el valor debe ser un entero mayor que 0 (cero).

        "Gracias, por compartir tus conocimientos"