asterisco y doble asterisco en bash (sobre globbing)

Jueves, 14 de marzo de 2013 Sin comentarios

En mi cabeza tenía que asterisco|wildcard(“*”) significaba en los patrones “cero o más caracteres” y poner dos asteriscos(“**”) era la leche en temas de ficheros, hacía un barrido por los directorios y subdirectorios, pero no me funcionaba (en algún momento de mi vida eso me funcionó).

Buscando por ahí encontré que Bash nos ofrece shopt (shell options) para modificar el comportamiento de nuestras terminales y que tenía que activar “globstar”:

shopt -s globstar

Al dejarlo ir a dejar esa opción fija en mi .bashrc para la posteridad vi en mi ordenador, con Ubuntu, que ya estaba pero comentado:

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
# shopt -s globstar

Saludotes

Categories: sistemas, ubuntu Tags: , , , ,

Recuperando la contraseña de Transmission

Jueves, 7 de febrero de 2013 Sin comentarios

Estos días estoy configurándome una Raspberry Pi[1] como centro multimedia y descargas. Por ahora no he hecho mas que instalar raspbmc[2] y transmission. Raspbmc se instala sin problemas y Transmission también pero hay un pequeño gotcha con los permisos del disco duro montado, escribiré otro día sobre ello.

 

Como decía aquel: “a lo que vamos tuerto”.

Leer más…

Mysqldump a lo loco (o como volcar los inserts y el esquema por separado)

Martes, 6 de noviembre de 2012 Sin comentarios

Estos días me encuentro haciendo una migración de una aplicación antigua a una versión nueva. La estrategia que he decidido emplear ha sido, coger del sistema A (antiguo) los datos y el esquema del sistema B(el nuevo), y mezclarlos. Hay que tener en cuenta que el esquema de las bases de datos entre los sistemas A y B ha cambiado bastante pero se pueden combinar, haciendo algunos cambios previamente.

Para volcar del sistema A los datos he usado el siguiente comando (sólo los INSERTs):

mysqldump -u <user> -p --skip-triggers --no-create-info --no-create-db --extended-insert --complete-insert <database> | gzip -c > production_`date +%y%m%d`.sql.gz

Los parámetros “–no-create-.*” hace que no se cree ni la base de datos, ni el esquema y así sólo nos quedan los INSERTs.

Inicialmente no puse “–complete-insert”, hace que los INSERTs se hagan especificando los atributos que se están insertando, pero al mezclar los datos de A con el esquema de B no me coincidían los campos en algunas tablas y me encontraba con un maravilloso “error 1136 (21s01) column count doesn’t match value count at row 1

Para saber que hace cada uno de los parámetros usados os invito a que os paséis por la documentación de mysqldump[1].

 

Luego necesitaba el esquema de la base de datos de B:

mysqldump -u <user> -p --no-data <database> > production_schema_`date +%y%m%d`.sql

No me molesté ni en comprimir con gzip porque no ocupa mucho el dump.

 

Para restaurar los datos usaremos la receta que está escrita por todo Internet:

zcat production_*.sql.gz | mysql -u <user> bbdd_server_B_new_version

 

Si la base de datos es muy grande os tocará ampliar el tamaño máximo del paquete en MySQL. Modificas el fichero /etc/mysql/my.cnf o añades uno dentro de /etc/mysql/conf.d con lo siguiente:

[mysqld]
max_allowed_packet = 1G

 

Fin

[1] http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

 

El capitán garfio no quiere que hagas commit en master (Git hooks)

Domingo, 7 de octubre de 2012 Sin comentarios

El otro día leí un artículo en are you fucking coding me ?[1] que proponía un hook para no poder commitear en master directamente. Lo veo útil porque te fuerza a trabajar sí o sí en una rama, en mi cabeza, además, rama me implica abrir ticket (si no existe que puede ocurrir). La pega que le veo a este sistema es que no podré hacer commits de “cleanup” alegremente. Aun así probaré el experimento que proponen durante esta semana que viene y ya añadiré cómo ha ido.

 

En el blog te explican como poner el hook por proyecto pero tengo demasiados proyectos y creo que lo suyo es ponerlo global, para coger el hábito. Después de un rato de investigación me temo que actualmente Git no soporta los hooks globales. Puedes hacer un apaño para los proyectos nuevos con definiendo la variable”init.templatedir” (global), copiar en ese directorio todos los hooks que tengas y cada vez que inicialices/clones un repositorio los copiará.

 

Respecto al hook que proponen ellos, en el shebang usan sh como intérprete y a mi no me funcionó(error de sintaxis en el if), al cambiar el shebang a bash sí era interpretado correctamente.

 

Si tenéis curiosidad por ver que hooks podéis poner en Git leed esta sección del libro de Git “7.3. Customizing Git – Git hooks“[2]

 

[1] http://areyoufuckingcoding.me/2012/09/28/paranoid-git-workflow/

[2]http://git-scm.com/book/en/Customizing-Git-Git-Hooks

Categories: Git Tags:

RiojaParty 2012 – quiero ser informático, ¿qué hago?

Lunes, 18 de junio de 2012 Sin comentarios

La aventura comenzó el día en que volvía de vacaciones y en un restaurante al norte de Navarra me encontré con @cmende3, sin saber como, ya tenía un hueco para dar una charla o taller en RiojaParty. El tiempo fue pasando y no tenía tema del que hablar, después de rumiarlo bastante y desechar varias ideas encontré algo que me pareció interesante, el hecho de que mucha gente se mete a la informática porque no sabe que hacer.

No me disgusta que la gente estudie/haga informática, cuantos más seamos más nos reiremos, pero sí me disgusta el que se hagan las cosas sin ganas, sin pasión. El campo de la informática es muy muy muy amplio, y está creciendo, como para que todo el mundo encuentre algo que le fascine y ya que vas a hacerlo que te guste.

En torno a este pensamiento giró la presentación. El formato para exponerla fue el de charla de colegas o grupo de autoayuda :)

El contenido de la presentación son una serie de consejos o ideas que practicar para “hacer informática y no morir, de aburrimiento, en el intento”.

Sobre el cómo fue la charla, empezamos a las 20:15 en punto, estábamos 7 personas (mi persona incluida) y la alargamos hasta las 21:55. Algo que tenía previsto durar unos 45 min. se alargó una hora más! así que ya os podéis imaginar. No creáis que me tiré casi dos horas hablando, los que me conocen saben que soy capaz pero no :) , en realidad se alargó porque estuvimos de charla, literalmente, comentando cada punto, añadiendo, contando experiencias personales,… en fin genial.

Sobre RiojaParty 2012 no puedo hablar demasiado porque no pude disfrutarla (ni siquiera llegué a inscribirme), sin embargo la ternerica, si supiese escribir, os diría que estuvo genial porque se lo debió pasar en grande en el hinchable (este año la organización montó una ludoteca).

Aquí debajo os pongo la presentación que usé:

That’s all folks!
Categories: charla Tags: ,

Conectando a través de proxies (web y SOCKS) desde una consola alegremente

Martes, 11 de octubre de 2011 Sin comentarios

Estoy en un entorno de trabajo “algo” cerrado en el cual solo me dejan conectar a los repositorios de ubuntu(web), rubygems(web) y el repositorio git(ssh). El acceso entre servidores es abierto totalmente.

 .

Para solucionar el tema de la actualización e instalación de paquetes vía aptitude a través del proxy web. Creamos el fichero /etc/apt/apt.conf y ponemos lo siguiente:

Acquire::http:Proxy "http://nuestro.web.proxy:puerto";

 .

La actualización de las gemas pasando por el proxy web hay que jugar con la variable de entorno HTTP_PROXY:

export HTTP_PROXY=http://nuestro.web.proxy:puerto

Nota: Si queremos lo podemos poner en nuestro /etc/profile para que quede configurado globalmente.

 .

El acceso al repositorio Git lo hacemos a través de un proxy SOCKS, las anteriores estrategias no nos sirven de nada. He tenido que usar tsocks, que captura las peticiones y las hace pasar por el proxy SOCKS que le indiques en la configuración.

Lo instalamos con aptitude. El fichero de configuración es autoexplicativo (/etc/tsocks.conf). Y su funcionamiento es sencillo, por ej:

$ tsocks git pull --rebase

 .

 .

¡Capistrano extraball!

En este entorno para que Capistrano funcione usando tsocks (conectar al repositorio través del proxy SOCKS) sólo he tenido que configurar la variable scm_command:

set :scm_command, "tsocks git"

Y así ha ido como la seda :-)

 .

Otra cosa que leí de aquí[1] y que me pareció interesante para un entorno totalmente cerrado(en el que haya que pasar por el proxy SOCKS incluso para conectar entre los servidores locales). Es la de hacer que todas las conexiones pasen por el proxy SOCKS modificando el config/deploy.rb de Capistrano:

require 'net/ssh/proxy/socks5'

sshproxy = Net::SSH::Proxy::SOCKS5.new('proxy.com', 1080)
set :ssh_options, { :proxy => sshproxy }

 .

[1] http://michaelshadle.com/2010/04/30/getting-apistranos-ssh-method-to-work-behind-a-socks-proxy

Categories: Uncategorized Tags:

Instalando Database Test Suite

Viernes, 5 de agosto de 2011 Sin comentarios
El proyecto Database Test Suite[1] nos da unas herramientas para hacer pruebas de carga de nuestros sistemas gestores de bases de datos y poder optimizarlos. Los benchmarks de Database Test Suite  son parecidos a los de TPC[2].Los tipos de benchmark que hay definidos con su explicación y su equivalencia con los definidos en TPC[2],  los puedes encontrar aquí[3]. Pero la realidad es que si quieres probar MySQL sólo puedes usar el benchmark dbt-2 (database test 2)[4], PostgreSQL está soportado en todos los tests y en otros sapdb y SQLite.

La última versión es la 0.40 y es del 2007 pero si miras el repositorio verás que sigue activo.

Leer más…

Categories: sistemas, ubuntu Tags: , , ,

Clonar una máquina virtual

Jueves, 7 de julio de 2011 Sin comentarios

Virtualbox nos permite clonar las imágenes que tenemos en nuestro host. De esta manera podemos aprovechar repetidamente imágenes que tengan todo instalado y configurado, o que estén impolutas.

Para clonar las imágenes dentro del mismo host solo necesitamos ejecutar el siguiente comando:

VBoxManage clonevdi Ubuntu-server-10.04.2/Ubuntu-server-10.04.2.vdi clone-ubuntu-server/clone-ubuntu-server-10.04.2.vdi

Siendo el primer parámetro la imagen original y el segundo el destino de la imagen clon.

 

Si la imagen que clonas es Ubuntu y la red no funciona, ejecuta este comando:

$ sudo rm /etc/udev/rules.d/70-persistent-net.rules

Eliminamos ese fichero porque allí está asociada la tarjeta de red virtual(de la imagen original) a la interfaz de red y al clonar ya no le cuadra :-)

 

Saludos

Categories: sistemas, ubuntu, virtualizacion Tags:

RiojaParty y charla sobre desarrollo de juegos con Gosu

Lunes, 20 de junio de 2011 5 comentarios

Este fin de semana he vuelto a participar como ponente en la RiojaParty. Hice una presentación sobre el desarrollo de juegos 2D con Gosu y la librería de físicas Chipmunk. Me hubiese querido quedar todo el fin de semana para ver como transcurría todo pero no pudo ser, soy una persona muy ocupada :-)  La presentación fue bien, conseguimos pasar un rato entretenido, aunque como vais a ver no comenzó del todo bien.

La cosa comenzó un poco torcida porque me metieron en un aula en la que en el cartel de la puerta no ponía nada de desarrollo de juegos (ponía algo de ISO xxxx , qué miedo!), encima apareció otro ponente que le tocaba(o al menos eso pensaba) ese aula y el colmo fue la ausencia de cable mini display port o hdmi a VGA. Finalmente conseguimos localizar un cable, gracias a uno de los socios de aulir (@ayecora).

Vale habemus cable ¿puede fallar algo mas? sí, el proyector y mi ubuntu se llevan medio bien pero no me deja(mas bien no supe) tener en una pantalla las anotaciones y en la otra la presentación. Ale! a la aventura entonces, sin anotaciones.

El transcurso de la charla fue sin sobresaltos, con varios vídeos de demostración, pequeños “juegos” y demos en vivo, y hasta vimos código fuente! (cosa que odio por lo aburrido que suele ser).

Gracias al feedback de la gente, me fui con la impresión de que no salió mal y que lo pasamos bien, que para eso es una party! :-)

Leer más…

Categories: ruby Tags: , , ,

SCMs en la universidad e institutos

Lunes, 28 de marzo de 2011 1 comentario

Este año he vuelto a dar otra charla[1] en la Universidad de La Rioja para “Loading…” (las sesiones técnicas previas a la Rioja Party). Ha vuelto a ser una gran experiencia pero de nuevo con un sabor agridulce.

En el taller del año pasado salió el tema de los SCM* y el desconocimiento era total por eso este año hice un taller sobre Git. Al iniciar la charla de Git pregunté a los 5 únicos asistentes si los estaban usando y la respuesta era afirmativa para los dos que estaban trabajando. Sorprendentemente uno lo usaba de manera totalmente voluntaria en la universidad, el resto no.

Al terminar recibí un feedback muy positivo pero todos me expresaron lo mismo: ¿por qué nadie se lo había enseñado antes?

Tuve la oportunidad de hablar con el jefe de estudios (por no poner nombres), como la muestra de 5 personas no es algo significativo, me lancé a preguntarle si enseñaban a usar Git(o cualquier otro SCM), la respuesta fue que en desarrollo de software enseñan algoritmos. Volví a insistir ¿por qué además de algoritmos no enseñan a usar Git(o lo que quieran)? al fin y al cabo en dos horas se explica, pero nada, no era su asignatura. Me comentó que algún alumno lo había usado en el proyecto final de carrera. Todo esto me sonó a “¿de dónde vienes? manzanas traigo”.

Eso me hizo recordar la primera vez que trabajé con Subversion, ¿por qué nadie me había explicado como funcionaba esa herramienta? Después de un módulo y una carrera nadie me había hablado de eso. Llegas a tu primer empleo y nadie te ha explicado algo tan básico.

Pensaba que con lo de los grados el temario[2] cambiaría, se fomentaría la investigación (hacking en términos de informática) y se corregirían los fallos del sistema anterior, al menos los del bulto.

Esta situación me ha sorprendido. Este jefe de estudios y varios amigos/profesores de institutos son gente con ganas de enseñar y aprender. Con algunos de estos profesores he estado hablando mas de una vez sobre como mejorar, como hacer que cuando salen los alumnos al mundo hostil laboral estén preparados y nunca habíamos caído en algo tan básico.

Lo que me hace preguntar a los educadores:

¿por qué se sigue sin enseñar algo tan básico y esencial para el desarrollo de software?

 

 

* SCM = Sistema de control de versiones

[1] http://www.slideshare.net/rgo/loadinggit

[2] http://www.unirioja.es/estudios/grados/ing_informatica/index.shtml

Categories: rant Tags: