Marzo 11th, 2015

Como saber quien edito una linea de fichero con GIT

En algunas ocasiones, sentimos la necesidad de saber quien editó determinada línea de un fichero que han tocado varias personas. La mejor forma de saber este dato es con el comando blame de git.

[root@bash]$ git blame /ruta-al-fichero/fichero

Este comando nos devuelve línea por línea quien edito un determinado fichero así como información del momento y commit en el que fue editado.

5a5b7ffd (Juan   2014-04-05 11:23:23 +0100 230)         }
5a5b7ffd (Juan   2014-04-05 11:23:23 +0100 231)     }
b7f005bf (Jaime  2014-05-05 10:15:23 +0100 232)     else
b7f005bf (Jaime  2014-05-05 10:15:23 +0100 233)     {
b7f005bf (Jaime  2014-05-05 10:15:23 +0100 234)

Enero 12th, 2015

Actualizar Fedora 20 a Fedora 21

Si quieres actualizar a fedora 21 sin morir en el intento con un yum upgrade sigue estos pasos.
Antes que nada, realiza una copia de seguridad de todos los elementos importantes de tu equipo.

Actualiza los repositorios de yum:

[root@bash]$ yum update

Reinicia tu equipo:

[root@bash]$ reboot

Instala FedUp, el hará todo el trabajo por nosotros:

[root@bash]$ yum install fedup

Empieza el proceso de actualización a Fedora 21:

[root@bash]fedup-cli --network 21 --debuglog /root/fedup-20to21.log

Revisa errores en /root/fedup-20to21.log, existe una opción por si actualizas desde una distro con un entorno como mate o alternativo. Funciona también sin problemas.

Puedes habilitar diferentes repos con la siguiente opción:

--enablerepo REPO

Reinicia de nuevo tu equipo:

[root@bash]$ reboot

En el grub del menú, entra con FedUp:
Grup FedUp

Esto tardará bastante y realizará toda la actualización de nuestro equipo a Fedora 21, después podremos iniciar sesión en Fedora 21 y continuar como siempre.

Noviembre 11th, 2014

Redireccionar una url

Cuando vamos a cambiar el contenido de nuestro dominio a otra dirección, es importante indicar este cambio. De esta forma, tanto los motores de búsqueda como los propios usuarios podrán seguir encontrando la información que desean.
Hay varios métodos para hacer una redirección:
Método 1, HTML:

<meta http-equiv="acción" content="segundos";
                       url="http://www.neleste.com/nuevaruta" />

Método 2. PHP (para este método, es imprescindible no haber escrito html antes, esto cambiaría las cabeceras del documento):

<?php header ("Location: http://www.neleste.com/nuevaruta"); ?>

Método 3. JavaScript:

<script type="text/javascript">
window.locationf="http://www.neleste.com/nuevaruta";
</script>

Método 4. editar .htaccess (gracias por recordarlo Emilio):
Este método también se puede hacer en los archivos de configuración de apache si tenemos acceso

Redirect /viejaruta/ http://neleste.com/nuevaruta/

Octubre 13th, 2014

Comandos de Vi o Vim

Cuando estamos por consola en un servidor y no podemos usar nuestra interfaz gráfica favorita, Vi o Vim (Vi Mejorado) se convierten en una herramienta indispensable.
Vim, hace un consumo de memoría excelente, y si conocemos todos los comandos para navegar con él, pronto nos resultará bastante atractivo.

Lo que más nos choca cuando nos iniciamos en vim, es que tengas que cambiar entre diferentes modos. El hecho de que exista un modo para escibir, es lo que hace que puedan existir confusiones al usarlo.

Sin embargo, cuando los dominas, son una de las grandes bondades del programa.
Aunque una vez los dominamos, nos encontramos con que es uno de los mejores beneficios del programa.

Modo comandos: aparece por defecto. En este modo podremos efectuar acciones como copiar/pegar y formatear el texto. Desde cualquier modo se puede acceder a él pulsando dos veces la tecla ESC.
Modo inserción: todo lo que teclee aparecerá en pantalla y se convertirá en parte integrante de su buffer de archivo.
Modo ex: para grabar un archivo o abrir otro y operaciones relacionadas.
Modo visual: permite cortar, copiar y pegar expeditivamente grandes porciones de texto mediante teclado o ratón.
Como la interfaz se basa en consola, la interacción con el teclado es vital. Veamos para qué sirve cada tecla, dividiendo su funcionalidad en grupos.

Movimiento del cursor

h: mover izquierda
j: mover abajo
k: mover arriba
l: mover derecha
w: salta de palabra en palabra al comienzo de las mismas
    (la puntuación es considerada palabra)
W: salta de palabra en palabra (al espacio entre ellas)
e: salta de palabra en palabra al final de las mismas
    (la puntuación es considerada palabra)
E: salta al final de las palabra (sin considerar puntuación)
b: salta hacia atrás entre palabras (considerando la puntuación)
B: salta hacia atrás entre palabras (sin considerar puntuación)
0: al comienzo de la línea
^: primer carácter no blanco de la línea
$: final de la línea
G: comando ir a

Modo inserción (insertando/añadiendo texto)

i: empieza modo inserción donde está el cursor
I: empieza modo inserción al comienzo de la línea
a: añade donde está el cursor
A: añade al final de línea
o: añade nueva línea en blanco, bajo la línea actual
O: añade nueva línea en blanco, sobre la línea actual
ea: añade al final de la palabra
Esc: sale del modo

Edición

r: reemplaza un único carácter
J: une la línea de abajo con la actual
cc: reemplaza una línea entera
cw: reemplaza hasta el final de la palabra
c$: reemplaza hasta el final de la línea
s: borra el carácter que indica el cursor y substituye el texto
S: borra la línea y substituye el texto (lo mismo que cc)
xp: transpone dos letras (primero corta, luego pega)
u: deshace (undo)
.: repite el último comando

Marcando texto (modo visual)

v: comenzar modo visual
V: comenzar modo visual lineal
o: moverse a otra área marcada
Control+v: comenzar bloque de modo visual
O: moverse a la esquina de otro bloque marcado
aw: marcar una palabra
ab: marca un bloque delimitado por paréntesis (del inglés braces)
aB: marca un bloque delimitado por llaves (del inglés brackets)
ib: marca dentro de un bloque delimitado por paréntesis
iB: marca dentro de un bloque delimitado por llaves
Esc: salir del modo visual

Comandos visuales

>: corre el texto hacia la derecha
<: corre el texto hacia la izquierda
y: copia el texto marcado
d: borra el texto marcado

Cortar y pegar

yy: copia una línea
2yy: copia dos líneas
yw: copia una palabra
y$: copia hasta el final de la línea
p: copia el contenido del portapapeles, tras el cursor
P: ídem pero antes del cursor
dd: borra una línea
dw: borra una palabra
x: corta el carácter actual

Salir
Todas llevan dos puntos al comienzo, los del final son de separación pero no del comando en sí. Esto mismo pasará en los siguientes apartados.

:w: guarda el fichero pero no sale
:wq: guarda el fichero y sale
:q: intenta salir. Si hay cambios da error, en caso contrario, sale
:q!: sale sin guardas y aunque haya habido cambios

Buscar y reemplazar

/pattern: busca un patrón
?pattern: busca un patrón hacia atrás
n: repite la búsqueda en la misma dirección
N: repite la búsqueda en la dirección opuesta
:%s/viejo/nuevo/g: reemplaza todo lo que encuentra definido
    por “viejo” por “nuevo”
:%s/viejo/nuevo/gc: lo mismo, pero con confirmaciones

Trabajar con múltiples ficheros

:e nombreFichero: edita un fichero en un nuevo buffer
:bnext (o :bn): se dirige al siguiente buffer
:bprev (o :bp): se dirige al bufer anterior
:bd: borra un buffer
:sp nombreFichero: abre un fichero en un nuevo buffer y lo divide
Control+ws: divide la ventana
Control+ww: intercambia la ventana
Control+wq: cierra una ventana
Control+wv: divide la ventana horizontalmente

Junio 4th, 2014

Primeros pasos en GIT (control de versiones)

Hacer checkout a un repositorio

Crea una copia local del repositorio ejecutando

git clone /ruta_a/repositorio

Si utilizas un servidor remoto, ejecuta:

git clone usuario@host:/ruta_a/repositorio

Puedes registrar cambios (añadirlos al Index) usando

git add "ruta_fichero"

Para añadir todos los cambios de ficheros modificados:

git add .

Para dejar nuestros cambios marcados en nuestro repositorio local, hacemos un commit:

git commit -m "Texto relacionado con nuestro trabajo"

Ahora el archivo esta incluído en el HEAD, pero aún no en tu repositorio remoto.

envío de cambios

Primero nos traemos los cambios que pueda haber enviado otro usuario a la rama master de nuestro repositorio local

git pull origin master

Por último subimos los cambios

git push origin master

Septiembre 17th, 2013

Importar/Exportar tablas de bbdd PostgreSQL

Para realizar esto, hay dos métodos, crear un dump, o crear un archivo sql ejecutable. Es preferible esta segunda opción, puesto que la primera puede dar problemas por la versión de PostgreSQL que tengamos instalada. Veamos a continuación los dos métodos:

Mediante un dump:

#Creamos el archivo dump
pg_dump -Fc -t nombre_tabla nombre_bbdd_origen -f /direccion_destino.dump
#Restauramos el archivo dump
pg_restore -t nombre_tabla -d nombre_bbdd_destino /direccion_destino.dump

Mediante un .sql:

#Creamos el archivo .sql
pg_dump nombre_bbdd_origen -t nombre_tabla > /direccion_destino.sql
#Ahora dentro del cliente pgsql (yo uso este, pero puedes usar otro método)
\i /direccion_destino.sql



Si suprimimos el parámetros -t nombre_tabla, podremos volcar la bbdd completa.

Agosto 23rd, 2013

Simplificar expresiones regulares

Tanto si usamos POSIX (está obsoleto, si usas sus métodos, ereg, eregi, etc aconsejamos cambiarlos) como si usas PCRE, quizá ya sepas que tienes a tu alcance mecanismos de conversión para alfabéticos [a-zAZ09_], numéricos [0-9] o alfanuméricos [a-zAZ09_0-9].
Por ejemplo, si queremos representar caracteres alfabéticos nos basta con poner \D (palabra), para numéricos \d (dígito) y o alfanuméricos \w
Por cierto, si quieres probar el resultado de tus expresiones regulares, está web te será de utilidad.

Otras conversiones:
\t — Representa un tabulador.
\r — Representa el “retorno de carro” o “regreso al inicio” o sea el lugar en que la línea vuelve a iniciar.
\n — Representa la “nueva línea” el carácter por medio del cual una línea da inicio. Es necesario recordar que en Windows es necesaria una combinación de \r\n para comenzar una nueva línea, mientras que en Unix solamente se usa \n y en Mac_OS clásico se usa solamente \r.
\a — Representa una “campana” o “beep” que se produce al imprimir este carácter.
\e — Representa la tecla “Esc” o “Escape”
\f — Representa un salto de página
\v — Representa un tabulador vertical
\x — Se utiliza para representar caracteres ASCII o ANSI si conoce su código. De esta forma, si se busca el símbolo de derechos de autor y la fuente en la que se busca utiliza el conjunto de caracteres Latin-1 es posible encontrarlo utilizando “\xA9″.
\u — Se utiliza para representar caracteres Unicode si se conoce su código. “\u00A2″ representa el símbolo de centavos. No todos los motores de Expresiones Regulares soportan Unicode. El .Net Framework lo hace, pero el EditPad Pro no, por ejemplo.
\d — Representa un dígito del 0 al 9.
\w — Representa cualquier carácter alfanumérico.
\s — Representa un espacio en blanco.
\D — Representa cualquier carácter que no sea un dígito del 0 al 9.
\W — Representa cualquier carácter no alfanumérico.
\S — Representa cualquier carácter que no sea un espacio en blanco.
\A — Representa el inicio de la cadena. No un carácter sino una posición.
\Z — Representa el final de la cadena. No un carácter sino una posición.
\b — Marca el inicio y el final de una palabra.
\B — Marca la posición entre dos caracteres alfanuméricos o dos no-alfanuméricos.

Link | Regexpert

Marzo 4th, 2013

Operaciones matemáticas con css

Es es sueño de un programador cuando trabaja haciendo maquetación css. Poder hacer calculos en nuestro archivo css como si de php se tratara.
Y lo mejor, es que se puede hacer y nos permite trabajar en distintas medidas (px, em, %) y funciona incluso con IE 9.

Se usa de forma sencilla, con cualquier propiedad css que admita medida, del tipo que sean (tamaño, tiempo..) y aunque actualmente es mejor usarla con el prefijo del navegador -webkit, -moz, etc está bastante bien adoptado por los navegadores de escritorio, aunque siempre hay navegadors moviles que dificultan.

Se utiliza de la siguiente forma:

/* De forma estándar */
width: calc(#valores#);
/* con prefijo para navegadores */
width: -webkit-calc(#valores#);
width: -moz-calc(#valores#);

Podremos aplicar cálculos como el siguiente:

width: calc(100% - 30px);

Y realizar las cuatro operaciones matemáticas básicas:

width: calc(50px * 2);
width: calc(50px / 2);
width: calc(50px + 2px);
width: calc(50px - 2px);

Con esta nueva función, evitamos utilizar javascript en muchos casos donde sólo tratamos de maquetar nuestra web.

Más información | W3C Calc

Marzo 4th, 2013

13 puntos para optimizar nuestro código javascript

Estas pautas son para optimizar javascript en el motor de V8 de chrome, actualmente el más rápido de los interpretes javascript.

  • Inicializar todos los miembros de un objeto en la función constructor
  • Inicializar siempre los miembros de un objeto en el mismo orden
  • Utilizar preferiblemente valores numéricos que puedan ser representados por enteros con signo
  • En los arrays utilizar keys contiguas y empezando por 0
  • No reservar todo el espacio de golpe para los arrays muy grandes (+ de 64.000 elementos)
  • No eliminar elementos de un array, especialmente si se trata de un array numérico
  • No cargar elementos no inicializados o eliminados
  • Inicializar los arrays pequeños de tamaño prefijado con literales
  • Prereservar arrays pequeños para corregir su tamaño antes de usarlos
  • No almacenar valores no numéricos en arrays numéricos
  • Monomorfismo antes que polimorfismo siempre que se pueda
  • No usar try y catch
  • Evitar cambios en funciones después de que estén optimizadas

Visto | Jonefox.com

Marzo 4th, 2013

Django 1.5


No, no hablo de la nueva versión de la oscarizada pelicula de Quentin Tarantino. Django 1.5 es el último lanzamiento del mejor framework para Python que podemos encontrar en la Red.

Viene con muchas novedades, entra las que destacaría las siguientes:

  • Modelo de usuario configurable
  • Soporte para salvar un subconjunto de los campos de un modelo (una gozada!)
  • Cacheo de instancias relacionadas de un modelo
  • Soporte para streaming
  • Una nueva etiqueta de bloque llamada verbatim
  • Soporte para Python 3 (El soporte para Python 3 todavía se considera experimental, pero hay disponible una guía para portar nuestro código a Python 3 circulando)

Además corrección de errores y bugs conocidos, y un puñado de mejoras más.

Enlaces | Django 1.5