Report inadequate content
Expand

Cómo borrar tags de Github

Si por ejemplo deseo borrar un tag llamado "1.0-stable-php-5.2"

Borro en local:

git tag -d 1.0-stable-php-5.2

Borro en el repositorio:

git push origin :1.0-stable-php-5.2

Atentos a los dos puntos delante del tag al hacer el push.

Actualización: He escrito el artículo dos veces, el original aquí: http://www.harecoded.com/borrar-tag-github-u-remoto-1612712 :P

{
}
Expand

Saltar a página siguiente en direcciones secuenciales

En muchas ocasiones, en un sitio web nos encontramos una url del tipo:

http://url.ltd/path?id=XXXX

Donde XXXX es un identificador. En ocasiones este identificador es la página que estamos viendo y, en otras, el id del propio elemento.

Imagina, por ejemplo, una lista de perfiles de usuarios, donde el id fuera secuencial. Si quisieras verlos todos tendrías que ir cambiando este número o volviendo a la lista de usuarios y haciendo click en el siguiente.

He hecho un pequeño bookmarklet que permite ir saltando al siguiente elemento de forma automática.

Símplemente, arrastra este link a tu barra de bookmarks y ya tendrás la opción:

Siguiente

Por ejemplo, lo puedes probar con esta página web:

http://www.harecoded.com/page/1
http://blog.reformapisos.es/page/1

 

Expand

Autocompletar hosts al escribir ssh en la terminal

Esta mañana mi compañero Borja me ha enseñado un pequeño truquito para olvidarse de los bookmarks en la terminal. Se trata de autocompletar el comando ssh con los hosts conocidos.

De este modo, cuando escribes ssh en la terminal puedes darle al tabulador para que sugiera o escriba el resto de host por ti. Ejemplo:

 -

Existen múltiples maneras de hacer esto, leyendo configs con puertos y otras barbaridades, pero esta es realmente simple y efectiva y sin duda la que más me gusta. Lo que hace es leer el fichero de hosts conocidos (~/.ssh/known_hosts) y sugerirlos en el autocomplete. Por si no recuerdas qué guarda ese fichero son todos aquellos servidores que verificaste a la pregunta tipo:

The authenticity of host 'manolete (172.22.195.142)' can't be established.
RSA key fingerprint is 7d:00:92:5f:c9:2b:c7:f2:37:fc:5e:40:ce:0e:4d:d1.
Are you sure you want to continue connecting (yes/no)?

El comando, que deberías copiar y pegar en tu ~/.bash_profile es este:

complete -W "$(while read line; do echo ${line%%[, ]*}; done \
< ~/.ssh/known_hosts)" ssh

Ojo, esta es la versión de Mac.

A ahorrar tiempo!

Expand

Cómo borrar un tag de GitHub u otro remoto

No resulta muy obvio cómo se pueden eliminar los tags de Github. Incluso hay algunos tutoriales por ahí que no funcionan. Estos son los dos comandos que utilizo yo únicamente para borrar los tags que pongo y quito en el proyecto de SIFO en Github.

El listado de tags del repositorio local se puede sacar fácilmente usando el comando git tag, por ejemplo:

artomb@petekaner:~/htdocs/sifo$ git tag
sifo-1.9
sifo-2.1
sifo-2.2
stable-php-5.2
stable-php-5.2-last-commit

Esto es una lista de todos los tags disponibles en mi repositorio local. Si ahora decidimos que queremos borrar el tag"stable-php-5.2" de local y de remoto entonces haremos:

git tag -d stable-php-5.2
git push origin :stable-php-5.2

Atentos a los dos puntos delante del tag! El primer comando lo borra del repositorio local, y el segundo del remoto. Y listos!

{
}
Expand

Contar veces que se pide una URL (y las que no es esa URL)

Hay veces que queremos saber cuántas veces se ha pedido una URL en nuestro servidor y Google Analytics o otro servicio de monitorización basado en Javascript no está disponible. Entonces siempre podemos recurrir a la fuente original de datos, los logs de acceso (esos gran incomprendidos y frecuentemente abandonados) de Apache, Nginx o donde sea.

Si por ejemplo queremos saber cuántas veces se ha pedido la página /abc.html en el mes de febrero (2012_02) y tenemos los logs segmentados por día, será tan sencillo como lanzar un:

grep -c  "GET /abc.html" /var/log/apache/access_2012_02_*

Similarmente, podemos obtener el número de peticiones que NO contienen esa petición añadiendo el parámetro -v:

grep -vc  "GET /abc.html" /var/log/apache/access_2012_02_*

La ubicación exacta de los blogs está declarada en vuestra configuración de Apache o Virtualhosts bajo la directiva AccessLog.

Expand

Merge Json files

With this small script you could merge some json files in a new one in json validated format.  The script uses each file name like array key.

Look the example:

file1.json:

{"array1":["elem1","elem2","elem3"],"array2":["elem1","elem2","elem3"]}

file2.json

{"array3":["elem1","elem2","elem3"]}

 

Whit our script you could run:

  • php merge_jsons.php file1.json file2.json > merged_jsons.json

 

Now you can open merged_jsons.json and look this:

{"file1":["array1":["elem1","elem2","elem3"],"array2":["elem1","elem2","elem3"]],
"file2":["array3":["elem1","elem2","elem3"]]}

The script:

for ( $i=1; $i{
$file_name = basename($argv[$i]);
$key_name = strstr($file_name,'.',true);
$data = file_get_contents( $argv[$i] );
$result[$key_name]=json_decode( $data );}echo json_encode( $result );
}
Expand

Convert a CSV to JSON with PHP

Imagine a data list dumped in a plain text file (e.g: CSV) and you need to convert it to JSON format. You could use this simple php script to do such task.

It's the simplest version but from here you can customize it to fit your requeriments.

Usage:

php script_name.php file_to_convert.csv > result.json

The script:

$csv = file_get_contents( $argv[1] );
$csv = explode("\n", trim($csv) );

foreach ( $csv as &$line )
{
$line = trim( $line );
}

print json_encode($csv);

This example covers a "single column" CSV file. If you want to add several columns you only need to add an explode with the separator character, be comma, somicolon or tab.

Expand

Activar y cambiar los colores de la terminal + Prompt

Ya uses iTerm, Terminal o cualquier otra herramienta en Mac, para ver y tunear los colores de tu terminal basta con editar el fichero ~/.bash_profile e incluir lo siguiente:

export CLICOLOR='true'
export LSCOLORS="gxfxcxdxbxegedabagacad"

Y conseguirás algo parecido a esto: TAGS:

La primera línea activa los colores, la segunda dice qué colores usar. Cuando guardes el fichero y abras de nuevo la terminal ya verás los colores. Si no te gustan siempre puedes poner los tuyos usando esta referencia:

a  black
b  red
c  green
d  brown
e  blue
f  magenta
g  cyan
h  light grey
A  block black (gris oscuro)
B  bold red
C  bold green
D  bold brown (amarillo oiga)
E  bold blue
F  bold magenta
G  bold cyan
H  bold light grey
x  color por defecto

Además, puedes cambiar la apariencia y modificar tu prompt añadiendo a continuación en tu .bash_profile alguna de estas líneas de ejemplo:

# Referencia de variables Prompt:
# \u Username, \h Host, \w Path, tput color definition

# Ejemplo 1:
# export PS1='\[$(tput setaf 3)\]\u@\h:\[$(tput sgr0)$(tput setaf 5)\]\w\[$(tput sgr0)$(tput setaf 2)\] \[$(tput sgr0)\]$ '

#Ejemplo 2:
# export PS1='\[$(tput setaf 7)\]\u@\[$(tput setaf 2)\]\h:\[$(tput sgr0)$(tput setaf 4)\]\w\[$(tput sgr0)\]$ '

#Ejemplo 3, Minimalista (solo path en color):
# export PS1='\[$(tput sgr0)$(tput setaf 4)\]\w\[$(tput sgr0)\]$ '

Descomenta la línea con el export (quitar la almohadilla #) que quieras probar y comenta el resto para ver los distintos ejemplos de prompt. Recuerda que debes volver a abrir la terminal o abrir una pestaña nueva para ver los cambios aplicados si es que los has puesto en bash_profile. Para más comodidad siempre puedes ejecutar los comandos en la terminal y luego al encontrar el perfecto guardarlo en el fichero.

Expand

Cómo hacer un sparse checkout en Git

Si quieres hacer clone de un proyecto parcialmente y no llevarte todo el árbol es muy sencillo. Si todavía no tienes los ficheros es tan sencillo como:

  • Crear una carpeta e inicializar Git
  • Activar sparse checkout
  • Decirle qué carpetas queremos
  • Añadir el repo remoto
  • Traer los ficheros con pull
Traducido en un ejemplo y sus comandos, pongamos que queremos descargar el fantástico PHP framework SIFO. Pero tan sólo queremos descargar la carpeta scripts de todo el proyecto. Entonces, sería algo tal que (puedes copiar y pegar para probarlo, luego borras la carpeta) :
mkdir mi_sparse && cd mi_sparse
git init
git remote add origin git://github.com/alombarte/SIFO.git
git config core.sparsecheckout true
echo scripts/ >> .git/info/sparse-checkout
git pull origin master
ls

Al hacer el ls verás que tan solo hay dentro la carpeta scripts. Si quieres añadir más carpetas o subcarpetas basta con que añadas más rutas al fichero sparse-checkout (la linea del ejemplo con el echo)

Fácil eh?

Expand

Move a SVN repository to Git with the whole commit history

It is in your mind, like a worm that eats away the apple, "I have to switch to Git". And one day it happens and you realize that it was not that diffcult.

I started using Git as my local repository, but still using SVN as the central repository with git itself thanks to the git svn set of commands. After some time I decided to entirely move the vast majority of projects from SVN to Git but of course not by creating a new fresh and empty repository but importing the whole svn commit history, as if the commits were made using Git itself ten years ago.

This is how you can do it: