Esto es sólo el PRINCIPIO de otra AVENTURA

Hace ya un mes y pico que terminó mi aventura con ideas4all, quería haber escrito antes sobre ello pero lo vas dejando y lo vas dejando… :)

Han sido más de 3 años que me han ayudado a crecer profesionalmente. Recuerdo cuando leí el libro ”97 Things every programmer should know“, todos los errores que se nombraban allí ya los había cometido y algunos varias veces (uno que es duro de mollera), e incluso podría añadir más. También puedo decir que hubo aciertos. Otra cosa que sin duda he aprendido es que no me gusta la gestión en el sentido “tradicional”, ahora ya puedo decir que la he probado y  que no me gusta ;-)

En todo ese tiempo en ideas4all lo que he hecho(y lo he hecho muy bien) son buenos amigos y amigas.

Allí siempre he estado rodeado de personas con superpoderes y habilidades increíbles: algunas eran capaces de hacer arte con objetos peculiares como pelusas o cepillos de dientes, otras cantar con Baco al son de un piano, otras sacar lo mejor de ti en una sola foto, otras podían rezar a una manzanita durante horas, otras capaces de estar en cinco sitios a la vez(siempre saraos ;-) ), otras con la capacidad de comprar billetes de bus a sitios recónditos para librarse de nosotros(del equipo de Haití), otras con avanzados conocimientos de flora y materiales explosivos, otras que con una sola idea te montaban cenas de navidad muy originales, otras capaces de hacer el saludo trekkie a selacimorfos pezqueñines y grandotes, otras amantes platónicos de la música hasta el punto de llevar camisetas con ecualizador,  otras que te daban la vida siempre que salían a media mañana y te ofrecían una pieza de fruta, otras que podían varear aceituna mientras respondían emails y teléfono, y todo ello sin despeinarse, otras capaces de olvidar en santiamén pero nunca olvidaban a su Ath…, otras que con una mirada o “golpecito” en la mesa arreglaban las impresoras a distancia, otras con días XXL y sueños XS, y otras que eran capaces de conseguirte una estrella.

Para la gente de ideas4all, más o menos allí estáis todos, ahí tenéis las palabras que os debía de la comida de “hasta la vista”.

Para el resto ¿entendéis ahora que no fuera fácil abandonar el barco?

 

¿Y en qué AVENTURA estoy ahora metido?

En spines.me , haciendo una herramienta que “te ayude a aprender más” (con esa frase me lo describió Pablo Jimeno en su día y me fascinó la idea).

Para ello Pablo nos ha juntado a Adriano Latorre, Francho, Rodrigo y a un servidor. Cada uno el mejor de su portal en algo, y todos con muchas ganas de hacer y aprender :)

No me voy a extender sobre spines.me en este post y lo dejo para los posts venideros pero si queréis saber un poquito más podéis leer el post de Francho ”3…2…1… Inception” y el de Pablo ”Spines: An Awesome Journey Has Started” prácticamente recién salidos del horno.

Sí que me gustaría invitaros a que os paséis por spines.me y os deis de alta en el newsletter para que respondáis a nuestra encuesta (gracias de antepierna!).

Hasta la próxima

 

 

asterisco y doble asterisco en bash (sobre globbing)

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

Recuperando la contraseña de Transmission

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”.

Continue reading

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

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)

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

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

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!

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

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

Instalando Database Test Suite

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.

Continue reading

Clonar una máquina virtual

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

RiojaParty y charla sobre desarrollo de juegos con Gosu

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! :-)

Continue reading