Welcome, connect your terminal

La linea del día

May-8-2012 By dodger

Hoy toca party hard por que el servidor que hace repositorio local se está quedando sin espacio asi que a riesgo de que romper algo y volver a tener que replicar Dag me he puesto a borrar todos los paquetes que tienen varias versiones dentro del repositorio…
El resultado como one-liner es interesante:

1
ls -1 | awk 'BEGIN{FS="-[0-9]"}{print $1}' | uniq -c | egrep -v "^[[:space:]]{1,}1 " | awk '{print $2}' | while read LINE ; do let x=0 ; for i in $(find . -name "${LINE}-[0-9]*") ; do ARRAY[$x]=$i ; let x++ ; done ; for ((j=0; j<$((${#ARRAY[@]}-1)); j++)) ; do rm -f "${ARRAY[$j]}" ; done ;  unset ARRAY ; done

Aunque es un poco heavy para ser una one-line pura xD al verla después hay que soltar poco menos que un WTF.

Carne a la brasa

May-4-2012 By dodger

Si no es suficientemente denigrante ver como nos venden como carne para brasa, el colmo llega cuando se ven ofertas como la de la imagen.
Todos sabemos que las empresas de carne se dedican a copiar y pegar la información que les dan sin siquiera mirar, pero esta vez se han superado al ni siquiera leerlo por que más abajo sí que está bien escrito el sistema operativo famoso junto a jerga típica nuestra (rpm, dpkg, yast, vmotion…)
Mi sinceras felicidades a esta gente, ojalá algún día les llegue su San Martín (a los que lucran a nuestra costa, no a todos los que trabajamos en ello).

Ahora mismo la oferta está vigente en el conocido portal infojobs ;-)

Mysql Database creation script

Apr-18-2012 By dodger

Two days ago one of my client dev’s requested me to be able to create db’s on their MySQL instance.
Of course, I won’t give him the “GRANT GRANT WITH GRANT OPTION” :-P, in that case I will simply give him root password :-P
As i didn’t find anything that solves my problem over Internet, I just did mine, as allways..
Here’s he result.

Prereqs:

  • Create a Mysql user with the following grants:
    1
    2
    GRANT CREATE, RELOAD, SHOW DATABASES, CREATE USER ON *.* TO 'database_creator'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD' ;
    GRANT INSERT ON `mysql`.`db` TO 'database_creator'@'localhost' ;
  • That will allow us to create databases, users, make some checks and reload privs, while we don’t create a new “root”…

You can download the script code from the wiki, also you’ll find additional information there.

Regexp mortal

Feb-15-2012 By dodger

Hoy realizando una tarea que va a ser repetitiva (MODO CRON ON), he tenido que currar una regexp, la verdad no es muy compleja en sí pero sí larga:

1
'/(project|production)/production/(hs|ga)[0-9]{2}/Runs/[0-9]{6}_SN[0-9]{3}_[0-9]{4}_[0-9A-Z]{8}XX/(Data/Intensities/(L00[0-9]/C*|BaseCalls/L00[0-9]/C*)|Thumbnail_Images/L00[0-9])'

Cuanto tardará find en procesar algo como esto con una jerarquía de unos 36000K ficheros xD
Respuesta en breve :-)

El típico día a día

Feb-8-2012 By dodger

Hoy un amigo me planteaba un problema.
Resulta que tiene 2 ficheros con datos del tipo:

  • fichero1: [SERIAL]|[ID], por ejemplo:
    1
    8944110064809868270|1221174
  • fichero2: [ID], por ejemplo:
    1
    1185648

El problema es sencillo, necesita mostrar del fichero1 [SERIAL]|[ID] si [ID] está en fichero2 y de los que no estén en fichero2 mostrar únicamente la ocurrencia con [ID] más alto.
La cuestión es que todos los [ID] de fichero2 están en fichero1.

Después de un buen rato, opté por ignorar fichero2, total, todos los datos están en fichero1, no nos da ningún dato significativo.
Y lo que obtuve fue lo siguiente:

1
2
3
4
5
sort -k 2 -n -t "|" fichero1.txt  | awk -F\| '{
file1array[$1] = $2
} END{
for (SSN in file1array)
print SSN"|"file1array[SSN] }' > test.file

El razonamiento es sencillo teniendo, la clave la da la ordenación del principio, ya que el array que creo dentro de awk irá machacando [ID] menores.

No es ningún tema de fubol por supuesto :P
moc es un reproductor basado en ncurses (para variar), como cualquier otro reproductor X de los simples, con reproducción por listas, exploración de directorios y poquito más (pa qué).
Ocupa poco, funciona realmente bien y no hay mucho que configurar :)

En mi caso lo único a sido asignar las teclas multimedia del teclado, en $HOME/.fluxbox/keys por supuesto:

1
2
3
4
5
None XF86Tools :ExecCommand roxterm -e mocp
None XF86AudioPlay :ExecCommand mocp -G
None XF86AudioLowerVolume :ExecCommand amixer -q set PCM 5%- unmute
None XF86AudioMute :ExecCommand amixer -q set Master toggle
None XF86AudioRaiseVolume :ExecCommand amixer -q set PCM 5%+ unmute

También tenemos la aplicación moc-tray para los tray-lovers ;-) aunque entonces yo optaría por xnoise que tiene todo ya integrado.