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:

fatal: CRLF would be replaced by LF in foo!

Miércoles, 23 de marzo de 2011 Sin comentarios

Pensaba que el tema de los retornos de carro entre Linux, Mac y Windows estaban ya pasados de moda, ¡qué confundido estaba!

Estaba trabajando en mi repositorio(git) con unos ficheros y al intentar hacer commit me retornó el error “fatal: CRLF would be replaced by LF in …“.

Resulta que esos ficheros usaban el retorno de carro y el salto de línea (CR-LF) típico de Windows, y no lo normal para el resto de sistemas que es el salto de línea a secas.

La solución ha sido tan simple como instalar el paquete “tofrodos” para disponer del comando “fromdos” que se encarga de dejar las cosas en orden.

Si quieres profundizar un poco sobre el tema sigue leyendo.

Leer más…

Categories: Git Tags:

if (pair programming || code review) == :remote

Martes, 1 de febrero de 2011 Sin comentarios

Hoy en ideas4all hemos hecho code review. El equipo de desarrollo está formado por cuatro personas así que dijimos de ponernos en parejas. La cosa, como su nombre indica, consiste en sentarse con el compañero de turno y revisar el código hecho por otro e intentar mejorarlo (hacerlo mas eficiente, mejorar su legibilidad, encontrar errores,…) y además aprender.

La “complicación” era que un servidor está en La Rioja y el resto del equipo en Madrid. Después de investigar un poco me decanté por usar screen+vim+skype, otra opción que queda pendiente es teamviewer.

La configuración es relativamente simple y la instalación del “tinglao” se hace en un momento.

Después de instalar screen necesitamos cambiar unos permisos para poder compartir la shell del usuario con otro usuario(sin privilegios):

# chmod u+s /usr/bin/screen
# chmod 755 /var/run/screen

Nota: Esto tiene unas implicaciones en temas de seguridad por eso en Debian y derivados no está por defecto[1].

Ahora ya podemos compartir nuestra terminal.

Por un lado con mi usuario local ejecuto lo siguiente para compartir la shell con el usuario “foo”:

$ screen -S codereview

Ctrl-a :multiuser on

Ctrl-a :acladd foo

Nota: Los comandos de screen (multiuser y acladd) se escriben pulsando Ctrl+a, “:” (dos puntos) y el comando[2].

Ahora como usuario “foo” me conecto al screen compartido:

screen -x codereview

Y ya está viendo y mi pantalla, así tan ricamente :)


end


[1] http://www.debian-administration.org/article/Using_GNU_screen’s_multiuser_feature_for_remote_support

[2] http://www.bangmoney.org/presentations/screen.html

Categories: rails, ruby, sistemas, vim Tags:

Acelerando nuestra test suite (exprimiendo nuestros cores)

Lunes, 17 de enero de 2011 Sin comentarios

Estoy trabajando en un proyecto en el que la mayor parte de los tests deben correr con Capybara+selenium lo que hace que cada ejecución de la test suite se haga eterna. En la búsqueda de mi felicidad(a.k.a. acelerar la batería de pruebas) probé diferentes drivers headless (celerity, zombie.js, akephalos y envjs) pero todos me fallaban por una cosa u otra, así que nada mi gozo en un pozo.

Dándole vueltas al tema me acordé de la gema Specjour[1], del colega Sandro(Hashrocket), que ejecutaba los tests de manera distribuida por la red y que podías usar en modo local. Como la aplicación no es precisamente sencilla y specjour funciona distribuyendo la aplicación rápidamente caí en que no era la mejor opción pero me dio el puntero hacia parallel_tests[2].

Esta gema tiene un funcionamiento más sencillo, se dedica a ejecutar cada spec/feature en un environment propio. Siguiendo las instrucciones de la gema y adaptándola a mi aplicación ya tenía la batería de tests corriendo como una exhalación y a los 8 cores de mi cpu echando humo.

Extra-ball:

No se a vosotros pero a mi eso de que me abra varios firefox por la pantalla, tocar alguno sin querer y hacer que el test pete no me mola nada. En Mac puedes decirle donde se debe abrir la aplicación X, los usuarios de Gnome también lo podemos hacer con Devil’s pie[3] fácilmente. Para ello instalamos devilspie y gdevilspie (aplicación y frontend), creamos el fichero ~/.devilspie/firefox.ds con el siguiente contenido:

 

; This rule move Firefox to viewport 4 (the last one in my desktop)
( if
( begin
( is ( application_name ) “Firefox” )
)
( begin
( set_viewport 4 )
)
)


Tenéis más ejemplos de Devil’s pie[4] o podéis hacer vuestras cosillas con gdevilspie fácilmente.


Salud y buenos alimentos!


[1] Specjour: https://github.com/sandro/specjour

[2] Parallel_tests: https://github.com/grosser/parallel_tests

[3] Devil’s pie: http://burtonini.com/blog/computers/devilspie/

[4] Ejemplos de Devil’s pie: http://foosel.org/linux/devilspie

Categories: rails, testing, ubuntu Tags:

Ubuntu Server muy lento en VirtualBox

Jueves, 18 de noviembre de 2010 Sin comentarios

Me ha tocado instalarme en una máquina virtual Ubuntu Server (ver. 10.04) y al empezar a trastear me di cuenta de que la terminal iba muy pero que muy lenta. Una inocente búsqueda por aptitude o un triste listado se hacía interminable. La primera cosa que se me ha ocurrido mirar era el framebuffer y nada buscando un poquito la solución llegó.

Simplemente tenemos que meter en la blacklist el módulo de framebuffer(vga16fb). Creamos el fichero en /etc/modprobe.d/blacklist-vga16fb.conf con el siguiente contenido:

blacklist vga16fb

Otra opción es desactivarlo entero pasándole el parámetro “nofb” al kernel desde grub.

Después de esto la cosa va mejor

Categories: sistemas, virtualizacion Tags:

Comandos de autocompletado de Vim

Sábado, 21 de agosto de 2010 4 comentarios

Estos días estoy leyendo el libro “CSS the missing manual” y el autocompletado de Vim me viene de maravilla,  es capaz de autocompletar las propiedades y los valores. Esto es lo que me ha motivado a escribir el siguiente post.

Vim tiene varios comandos de autocompletado, personalmente suelo usar omni completion y el comando que busca palabras del fichero actual pero hay otros que conviene conocerlos y habituarse a usarlos.

Estos comandos son llamados desde el modo de inserción con la combinación de teclas CTRL-X y luego CTRL-<modo de autocompletado>. Cuando empiezas a escribir una palabra invocas el comando, se abrirá un popup con las coincidencias de la palabra que hay justo delante del cursor y para moverte entre ellas CTRL-N para saltar a la siguiente(Next) y CTRL-P para volver a la previa (Previous).

Ahora que sabemos como manejarlo vamos a ver algunos de los diferentes modos:

Omni completion

Para invocarlo CTRL-X_CTRL-O , este comando es “inteligente”(en cierta medida y según la configuración) porque las coincidencias que te ofrecerá estarán relacionadas con el contexto.

Si abrimos un fichero con un script en Ruby, escribimos  ”5.” (cinco punto) y seguido pulsamos CTRL-X_CTRL-O nos mostrará todos los operadores y métodos de la clase Integer. Por esto digo que tiene algo de inteligente.

Ocurre algo por el estilo si usamos este modo con un fichero CSS:

Ejemplo de omni completion de un fichero css

Simplemente invoqué el comando y me mostró las coincidencias

Autocompletado con palabras del fichero actual:

Para invocarlo CTRL-X_CTRL-N. Este comando no es inteligente, simplemente autocompleta la palabra buscándola entre las palabras claves de fichero actual.

Imaginad que tenemos el siguiente texto y tenemos que desarrollar una tesis sobre ello:

“El músculo esternocleidomastoideo (Sternocleidomastoideus) es un músculo de la cara lateral del cuello, en la región anterolateral; largo, robusto, constituido en su tramo torácico por dos manojoscabezas: la esternal, cilíndrica, y laclavicular, aplanada. Entre ambas dejan el triángulo de Sédillot, que permite un acceso a la vena yugular interna para establecer una vía.” – Texto sacado de la wikipedia.

Escribir la palabra esternocle… es largo y tortuoso, con este comando será menos tortuoso.

Autocompletado con palabras del fichero actual y los incluidos:

Para invocarlo CTRL-X_CTRL-I. Este comando funciona exactamente igual al anterior pero además de buscar en el fichero local busca las palabras clave en los ficheros incluidos.

Este comando según como tengas configurado ‘complete’ funciona prácticamente igual que CTRL-N , personalmente uso este último porque es mas fácil de recordar y configurable.

Autocompletado de una línea entera:

Para invocarlo CTRL-X_CTRL-L. Este comando no acostumbro a usarlo porque intento ser DRY, si lo usas mucho programando eres poco DRY ;-)

Un ejemplo gráfico con un fichero CSS:

Ejemplo de autocompletado de línea en un fichero CSSEmpecé a escribir la propiedad “font” e invoqué el comando.

Autocompletado de tags:

Para invocarlo CTRL-X_CTRL-]. Este comando autocompleta el texto delante del cursor buscando la coincidencia en la lista de tags.

La lista de tags hay que generarla previamente. En proyectos Rails usando  rails.vim tenemos el comando :Rtags o lo puedes hacer a mano con Exuberant Ctags. Este es un autocompletado que no uso así que no me viene a la cabeza un caso de uso concreto pero he pensado que podía ser útil a otras personas.

Autocompletado de ficheros:

Para invocarlo CTRL-X_CTRL-F. Este comando autocompleta paths y ficheros desde el directorio en el que te encuentras actualmente. Funciona muy bien porque reconoce rutas relativas y absolutas.

Un ejemplo gráfico con un fichero HTML:

Ejemplo de autocompletado de ficheros en un fichero HTML

Invoqué autocompletado sin escribir nada

 

Hay otros comandos de autocompletado que no he nombrado(por ej. las sugerencias de ortografía o el autocompletado de definiciones y macros). Si los queréis ver todos o profundizar sobre el tema os recomiendo la ayuda de Vim :help ins-completion

¡Esto es todo por hoy!

Categories: vim Tags: