Últimas Publicaciones

SSH con colores por host

Tras buscar y rebuscar en varios sitios, por fin he encontrado una forma hacer que mi terminal cambie de conjunto de colores al conectarme por ssh a un host determinado. Así, ya puedo hacer que cuando me conecte a los servidores de producción se cambie automáticamente a unos colores chillones, para recordarme que no tengo que tener los dedos demasiado largos.

La respuesta era Roxterm, un terminal que admite la configuración sobre la marcha de algunas opciones, cosa que no permite el gnome-term. Lo explican en este blog: http://michael.mior.ca/2011/03/06/coloured-ssh-terminals/

Lo único que me he encontrado es que la opción de ssh LocalCommand no se lleva muy bien con ControlMaster auto. Lástima, con lo rápido que se conectaba con el ControlMaster

Malas prácticas que NUNCA debes realizar en tu site

Hace algún tiempo empecé a oir de Carritus.com, uno de los sites que están surgiendo últimamente como agregador de precios de supermercados, que te informan de dónde es más barato encontrar los productos de tu lista de la compra, y que incluso te permiten hacer el pedido online desde su web.

El caso es que después de echarle un vistazo a la web y cacharrear un rato, lo dejé de lado porque en realidad yo no soy de comprar comida por internet. Hay cosas que no me gusta comprar online, como la comida o la ropa, porque considero que esas cosas es mejor verlas presencialmente antes de comprarlas. Miré cómo hacer para borrar mi cuenta, pero no encontré ningún formulario ni enlace que me permitiera hacerlo (primer fallo), así que lo dejé por imposible y me olvidé del site. Por suerte, uso LastPass y contraseñas aleatorias para todos los sites, por lo que no me preocupaba demasiado que atacaran el site y recuperaran mis datos de acceso.

El caso es que ayer recibí un correo procedente de GourmertAlert, mail que en principio marcaría como spam porque es un mailing al que nunca me suscribí, pero mirando el pie del mail veo el siguiente texto:

Apreciado/a Cliente,

Desde SUPER COMPARADOR DE CONSUMO, S.L. de ahora en adelante Carritus.com nos es muy grato remitirle la presente comunicación para informarle acerca de nuestra especial sensibilidad en el respeto y cumplimiento de la normativa vigente en materia de protección de datos de carácter personal.

Por este motivo, de conformidad con lo dispuesto en la Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal (LOPD), le informamos de que los datos de carácter personal que usted mismo nos facilitó en su día a través de nuestra página web han sido incorporados en un fichero del cual es titular Carritus.com, con la finalidad de prestarles los servicios solicitados, así como para remitirle por correo electrónico o cualquier otro medio electrónico equivalente con fines de publicidad y prospección comercial, información y muestras gratuitas de nuestros productos y servicios en el ámbito de la alimentación, así como otra información relacionada con los productos, servicios y actividades de otras empresas que operen en tales sectores.

A tal efecto, le informamos que hemos comunicado sus datos personales a una de nuestras empresas del Grupo, GOURMET ALERT, S.L., con el fin de que esta empresa pueda enviarle información sobre alimentación, uno de los sectores sobre los que usted consintió a recibir información en su día. Finalmente, nos complace informarle sobre la posibilidad de ejercitar sus derechos de acceso, rectificación, cancelación y oposición de sus datos.

Si quiere darse de baja, haga clic aqui.

Sin otro particular, aprovechamos la ocasión para saludarle muy atentamente.

Carritus.com

Como es una práctica bastante habitual pasarse datos entre empresas del mismo grupo para torrarte a spam, y es algo que aceptas al registrarte en una web, no le di más importancia y borre el correo. De hecho en las condiciones generales de carritus.com pone algo tal que así:

[...]Asimismo, dichos datos podrán ser cedidos a las empresas antes citadas y a otras empresas cuyas actividades se relacionen con el sector de la alimentación y de estudios de mercado, a fin de que dichas compañías le puedan remitir directamente la información arriba mencionada, realizarle encuestas de opinión, contactarle para realizarle dinámicas de grupo y hacerle llegar, tanto a su dirección postal como electrónica, así como por teléfono, información publicitaria, promocional y muestras gratuitas de sus productos y servicios. Las compañías cesionarias de los referidos datos de carácter personal serán las responsables de tratar los datos de los usuarios conforme a la legislación vigente en materia de protección de datos de carácter personal.[...]

Bueno, por si acaso era interesante el tema, no me di de baja del mailing.

Hoy vuelvo a recibir otro correo de GourmertAlert, pero en este caso el texto al pie de página es distinto:

Has recibido este e-mail enviado por Gourmet Alert, S.L. porque eres un exclusivo miembro registrado y has aceptado las condiciones de uso o porque un amigo te ha invitado a unirte a GourmetAlert.com

“Para asegurarte de recibir correctamente nuestras ofertas, añada la dirección alerta@gourmetalert.com a sus contactos.”

Podrás ejercitar los derechos de acceso, rectificación, cancelación y oposición de los datos de carácter personal en www.gourmetalert.com

Vaya, esto es nuevo. Ahora resulta que soy un exclusivo miembro registrado de GourmetAlert que ha aceptado sus condiciones de uso, y yo sin enterarme. Así que ahora sí, lo primero que he hecho es cancelar la suscripción al mail e ir al site a ver si realmente tenía cuenta, le he dado a recuperar mi contraseña, et voila!, ahí está mi cuenta, con mis datos personales (email, nombre, apellidos y fecha de nacimiento, menos mal que al menos no les han pasado mi dirección postal ni mi teléfono). Efectivamente, me han dado de alta en un site sin mi consentimiento (segundo fallo). Por supuesto, tampoco tienen formulario ni enlace para dar de baja la cuenta (tercer fallo) y por no tener, no tienen ni siquiera un formulario o incluso un triste mail de contacto para ponerme en contacto con ellos salvo unos especiales para cancelar o devolver un pedido (cuarto fallo). He tenido que buscar en las condiciones generales del contrato (recuérdese, aquellas que nunca he leído ni aprobado) para encontrar que sí, que tienen el típico info@gourmertalert.com, al que ahora sí, he escrito para que cancelen mi cuenta y los mailings a los que me hayan suscrito.

El siguiente paso, en cuanto termine de escribir este post, es buscar la forma de cancelar mi cuenta de carritus.com. Evidentemente, con empresas que hacen eso con mis datos personales prefiero no tener el más mínimo contacto.

El misterio de las cursivas monoespaciadas que no eran monoespaciadas

Desde hace algún tiempo, había notado que RubyMine me hacía cosas raras con las fuentes. El programa usa, de toda la vida, un tipo de letra monoespaciado para los ficheros fuente (.rb, .js, .html, etc), y sin embargo los comentarios o determinadas palabras clave que se mostraban en cursiva, dejaban de estar en monoespaciado, con lo incómodo que es eso a la hora de tener un código bien indentado.

En principio pensé que era la última versión de RubyMine, que tenía algún fallo. Pero después de buscar pude comprobar que no era problema de RubyMine, sino de las aplicaciones Java en general, y de los paquetes de fuentes en particular. Mi fuente por defecto es la DejaVu, que está separada en 2 paquetes (ttf-dejavu-core y ttf-dejavu-extra), siendo el extra el que contiene el tipo de letra monoespaciado. Parece que al actualizar a Natty borré algún paquete de fuentes que me proporcionaba el monoespaciado, o no instalé de nuevo el ttf-dejavu-extra, y de ahí el problema.

Al final se soluciona instalando el paquete que agrupa a esos dos paquetes, el ttf-dejavu:

sudo apt-get install ttf-dejavu

Democracia 2.0

De pequeño me enseñaron en el colegio que, a lo largo de la historia, la humanidad ha usado diferentes formas de gobierno (teocracias, repúblicas, monarquías, sistemas feudales, dictaduras…) y que algunas de ellas sólo son factibles por la situación histórico-política del territorio en un momento dado. A pesar de que algunos de estos sistemas políticos están desfasados hace tiempo, y a nadie se le ocurriría que pudiera haber un sistema feudal o una teocracia en nuestros tiempos, Japón se deshizo de su sistema feudal hace menos de 150 años, y no es raro encontrar teocracias modernas, empezando por el Vaticano, o algunos países islámicos. Pero lo que tenía claro en aquella época, es que me había tocado vivir en la mejor forma de gobierno de todas: la democracia.

En la democracia -literalmente, el poder del pueblo, del griego “demos”(pueblo) y “kratos”(poder)- la toma de decisiones recae en los ciudadanos del estado mediante mecanismos de participación variados. Somos nosotros los que decidimos qué y cómo se deben hacer las cosas, y no una única persona como en una dictadura, o una religión como en las teocracias. Y parece que esa forma de gobierno es la más aceptada en la actualidad, sin más que ver la gran cantidad de gobiernos del mundo moderno que transitan hacia una democracia desde sistemas totalitarios.  Sin ir mas lejos, estamos inmersos actualmente en una ola democrática del mundo árabe, similar a la ocurrida en los países del telón de acero en 1989.

Democracia representativa

Sin embargo, la democracia a la que estamos acostumbrados en la actualidad, la representativa, no es la panacea universal. El problema que ha tenido históricamente la democracia directa, donde todo el pueblo delibera y toma las decisiones que le afectan, es que es impracticable para poblaciones medianamente grandes que todo el pueblo esté inmerso en todas y cada una de las decisiones, por lo que se optó por elegir representantes cada cierto tiempo para que les representaran en estos menesteres. En cuanto empecé a saber lo mínimo de política, pude comprobar que esto conlleva varios problemas, entre los que se encuentran la corrupción y la falta de representatividad -es prácticamente imposible que haya un partido político que represente de forma completa a la totalidad de sus electores. Siempre habrá algún tema que el partido político que te representa interprete de forma diferente a como lo harías tú-.

Tradicionalmente, en España, nos hemos acostumbrado a estos problemas y los hemos resuelto con un voto de castigo: cuando un partido político se ha pasado de la raya, nos hartamos y para darle un escarmiento votamos al otro partido mayoritario. Pero con esto sólo estamos consiguiendo que los políticos corruptos se vayan alternando entre uno y otro bando: se lo quitamos a unos para dárselo a los otros. ¿Y qué podemos a hacer, salvo dar el voto de castigo -se pregunta la gente- si nuestro sistema electoral, el sistema D’Hont, favorece al bipartidismo y nos impide que una minoría nos represente como nos gustaría?.

Las revoluciones, sin embargo, no ocurren solamente en los estados totalitarios. Cuando la crisis del 2008 asoló a Islandia y la dejó prácticamente en la bancarrota, retrasando en 10 años al país en calidad de vida, sus ciudadanos no se conformaron con la idea de que sus representantes los hubieran llevado a aquella situación, cambiaron de gobernantes y votaron masivamente en referéndum que no iban a asumir la deuda con los ahorradores extranjeros que los bancos habían contraído.

Democracia 2.0

En Internet se habla de la web 2.0 o dospuntocerismo para indicar el cambio entre las primeras páginas web estáticas -donde el contenido era suministrado por un proveedor y el usuario era un mero espectador-, a las nuevos sistemas sociales donde el contenido lo proporciona el usuario, que se transforma de esta forma en un colaborador activo. Es el internauta el que construye, con sus aportaciones y sus modificaciones, sitios como la Wikipedia, Flickr, Youtube o Facebook.

Y aquí es donde, gracias a las nuevas tecnologías -esas nuevas tecnologías que han ayudado a cristalizar  las revoluciones del mundo árabe-, podemos construir una verdadera democracia directa, una democracia 2.0 donde ciertamente el pueblo es el depositario del poder y no un mero instrumento para que los políticos accedan a él. Estamos en el momento propicio para iniciar otra revolución, un momento en el que disponemos de los medios, estamos lo suficientemente hartos de que los políticos hagan lo que les venga en gana en contra de aquellos ciudadanos que los eligieron, se plieguen a las presiones de lobbys económicos de otros países, se pasen por el forro el poder judicial cuando éste no hace lo que les interesa y se manejen a su antojo con el poder que les hemos concedido.

NOLESVOTES

A raíz de la aprobación de la llamada “Ley Sinde”, recientemente ha surgido la campaña No les votes, que pretende, no ya quitar el voto al partido en el poder y dárselo al otro mayoritario como se hace tradicionalmente, sino castigar a los partidos mayoritarios que aprobaron dicha ley -PP, PSOE, CiU- votando a otro partido distinto, para así hacer notar que la comunidad no está contenta con la gestión actual de muchas de las decisiones que están llevando a cabo el sistema político actual. Esa campaña no especifica a qué partido votar, dejándolo al criterio de cada uno, pero yo sí que voy a dar una opción: el Partido de Internet.

El objetivo del PdI es “dar voz a cada ciudadano en el proceso político”, permitiendo votar a todos los ciudadanos cada iniciativa que se proponga en las cortes generales, eliminado de esta forma la falta de representatividad que plaga la democracia tradicional. ¿Cada iniciativa? -pensarás-, puf, demasiado trabajo. No hay problema, porque el PdI implementa una democracia directa con delegación de voto, es decir, siempre tienes la posibilidad de votar cualquier iniciativa que te interese -como por ejemplo, la Ley Sinde, en caso de que el PdI hubiera estado representado en el congreso en esta legislatura-, pero para el resto puedes delegar tu voto en un partido político, una organización o incluso una persona de tu confianza. De esta forma, puedes hacer que en cuestiones medioambientales tu voto sea como el de Greenpeace, en las sociales como el del PSOE, en las internacionales como el PP y en cuestiones relacionadas con la propiedad intelectual votar lo que vote David Bravo.

Así que, no propongas, haz: en las próximas elecciones castiga a los políticos que abusan de su poder y pasan de ti. Usa tu poder como votante. Hagamos la revolución de la Democracia 2.0.

Como reza el lema de Anonymous:


Somos Anónimos.
Somos Legión.
No perdonamos.
No olvidamos.
¡Esperadnos!

 

 

 

Redireccionar todas las peticiones a un puerto hacia localhost

El proyecto en el trabajo actualmente utiliza subdominios del dominio principal, y limita las capacidades o redirige a otro dominio en función del punto de entrada o del usuario, por lo que cuando desarrollo en local necesito que mi ordenador responda las peticiones a todos esos dominios como si fuera al localhost.

La solución rápida con la que he estado trabajando hasta ahora es modificar el fichero /etc/hosts y añadir tantos nombres a la IP 127.0.0.1 como dominios necesito. Algo como esto:

127.0.0.1 myproject.com www.myproject.com company1.myproject.com

Como digo, es la solución rápida, pero no la más cómoda, ya que para cada dominio nuevo que necesite tengo que modificar el fichero hosts, reiniciar el navegador (supongo que habría que limpiar la cache de DNS en lugar de hacer esto) y volver a probar.

Cansado de tener que hacerlo cada dos por tres (si repito algo más de 3 veces, siempre busco una solución para no tener que hacerlo más), he estado buscando una forma de agilizar el proceso, pero no daba con la solución.

En primer lugar intenté ver si con un proxy local me podía valer, pero no encontré ninguno que me permitiera cambiar la dirección IP destino en función del dominio. Por lo que me fui al tema de servidores de DNS locales, y ahí encontré una solución intermedia con Dnsmasq, mediante el cual podía tener dominios “*.myproject.dev” que se redirigían al servidor local, pero que no acababa de convencerme.

Al fin, Alex me dio la solución: usar iptables. La idea es que todas las URLs que vayan a un puerto determinado, en lugar de ir al destino original, acaben en mi ordenador. Por ejemplo, si escribo http://www.google.com:3000 en la barra de direcciones, en lugar de ir a google, se hará una petición a mi ordenador en el puerto 3000. Mola.

La solución es ejecutar  la siguiente linea:

sudo iptables -t nat -I OUTPUT -p tcp \
      --dport 3000 -j DNAT --to-destination 127.0.0.1

et voila!. Todas las peticiones salientes al puerto 3000 se reencaminarán a mi ordenador.

Si en lugar de redirigir todas las peticiones, sólo quisiéramos redirigir las de un servidor determinado, se le puede indicar mediante la IP. Por ejemplo, con la siguiente línea redirigiría todas las peticiones al puerto 3000 de www.google.es a mi ordenador:

sudo iptables -t nat -I OUTPUT -p tcp -d 216.239.59.104 \
      --dport 3000 -j DNAT --to-destination 127.0.0.1

Actualizando un rails congelado bajo subversion

Últimamente estoy actualizando algunos proyectos que tienen rails congelado bajo el directorio vendor -que es lo habitual cuando tienes varios proyectos en una máquina y no quieres estar pendiente de actualizar la aplicación cada vez que rails se actualiza en la máquina-, y lo primero que estoy haciendo es actualizar la versión de rails.

A primera vista, la actualización parece algo trivial:

rake rails:freeze:gems
rake rails:update

Pero cuando tienes el proyecto bajo subversion, en seguida te das cuenta del error: la tarea de rake lo primero que hace es

rm -rf vendor/rails
mkdir -p vendor/rails

con lo que se ha cargado el directorio .svn con toda la información que subversion almacena allí. En cuanto intentas hacer algo con subversion, te encuentras con problemas:

$ svn st
~       rails
$ svn add rails/
svn: warning: 'rails' is already under version control
$ svn commit rails/
svn: '/home/frsantos/project/vendor/rails' is not a working copy
$ svn del rails/
svn: Directory 'rails/.svn' containing working copy admin area is missing

con lo que te toca volver a la versión anterior y volver a empezar:

rm -rv vendor/rails/
svn up vendor

Lo sencillo en este caso es hacer svn delete, svn commit y hacer el freeze de nuevo, pero con esto estamos introduciendo una versión en el repositorio que no es consistente. Para la gente, como yo, a los que les gusta hacer un commit atómico con todos los ficheros que se han modificado para una funcionalidad, he preparado un script de shell que actualiza el directorio rails con los cambios de la última versión rails.

http://blog.donquicong.com/wp-content/plugins/downloads-manager/img/icons/shell.png download: upgrade_rails_in_svn.sh (1.79KB)
added: 15/03/2010
clicks: 765
description: Actualiza una instalación de rails congelada cuando está controlada por subversion

Además, tiene el extra añadido de que crea un changelist con todos los ficheros modificados en ese directorio, por lo que si usas un entorno gráfico como RubyMine, te saldrá automáticamente en la pestaña de Changes el changelist con el nombre apropiado con todos los ficheros modificados (si usas este entorno, un consejo: crea un changelist y márcalo como el changelist por defecto. Cuando acabe el proceso, todos los ficheros modificados que no se hayan marcado con un changelist en subversion irán automáticamente a ese sitio).

Usando múltiples Rubies con RVM

Lo primero que hice, incluso antes de empezar a trabajar en la empresa, fue instalarme Ruby 1.8.7 en mi Ubuntu, junto con Rails 2.3.5 y algunas gemas como mongrel. Para ello, seguí los howtos que fui encontrando por internet, como este de Hakido. Tras dejarlo todo configurado, al arrancar Eclipse te configura algunas gemas más como linecache, ruby-debug-ide y ruby-debug-base, con lo que ya tenía todo configurado para empezar a trabajar.

Sin embargo, en seguida te das cuenta de que si vas a tener que trabajar en varios proyectos, cada uno iniciado en un momento distinto con distintas versiones de Ruby y/o Rails, entonces cambiar de proyecto se puede hacer algo incómodo. La solución para ello, por supuesto, ya está pensada y es RVM (Ruby Version Manager).

RVM te permite tener distintas versiones de Ruby funcionando al mismo tiempo, con sus gemas particulares, y lo que es mejor, puedes tener todas las combinaciones de ruby/gemas que quieras. De esta forma, podemos tener un Ruby 1.8.6 con Rails 2.3.4, otro 1.8.6-2.3.5, otro 1.8.7-2.3.5 y otro 1.9.2-3.0.0. Simplemente cambias de configuración con un solo comando y a trabajar.

Al final, he desinstalado todo lo que tenía instalado de ruby en el sistema y lo he vuelto a instalar con RVM de la siguiente forma:

En primer lugar, instalamos las dependencias necesarias:

sudo apt-get install git-core curl zlib1g-dev libreadline5-dev

Después instalamos RMV. Como por ahora no hay un paquete .deb para ubuntu, lo bajamos desde Github:

mkdir -p ~/.rvm/src/rvm/
cd ~/.rvm/src
git clone http://github.com/wayneeseguin/rvm.git
cd rvm
./install

Ahora hay que añadir la siguiente línea en los ficheros ~/.bashrc y ~/.bash_profile

if [[ -s ~/.rvm/scripts/rvm ]] ; then source ~/.rvm/scripts/rvm ; fi

Cerramos y volvemos a abrir la shell para que nos pille los cambios, y ya estamos listos para instalar las versiones de ruby que necesitemos. Por ejemplo, si queremos instalar las versiones 1.8.7, 1.9.1 y jruby, haremos lo siguiente:

rvm install 1.8.7,1.9.1,jruby

Lo cual tardará un rato, pues debe descargar y compilar todas las versiones que les hemos dicho. Para seleccionar una versión en concreto:

rvm use 1.8.7

Y para hacer que una versión en concreto esté seleccionada siempre por defecto:

rvm use 1.8.7 --default

Ahora ya podemos instalar las gemas que necesitemos en esta versión de ruby, como rails, mongrel, …

gem install rails mongrel linecache ruby-debug-base ruby-debug-ide

que se instalarán sólo en la versión de ruby que esté actualmente activa.

Eclipse, sin embargo, tiene problemas para pillar el entorno de desarrollo correcto, por lo que tenemos que modificar el script de arranque y poner algo como esto para arrancar eclipse con la versión por defecto de ruby (podemos sustituir default por una versión concreta si queremos):

bash -cl "rvm default; eclipse"

Tiene narices

que habiendo estado casi 6 años trabajando para la SGAE, haya tenido que ver su sede principal en Madrid (alias El Marquesado) al pasar esta mañana camino a mi primera reunión de empresa en ASPGems

Jornadas de formación interna en ASPGems

Aprovechando que tengo un par de semanas de vacaciones entre mi anterior trabajo en Utende y el nuevo en ASPGems, ayer me acerqué a la sede de Madrid On Rails para asistir a una de las charlas de formación interna que hace ASPGems, en este caso,
Lecciones aprendidas desarrollando “webs un poco grandes” con Rails, impartida por Diego. La charla en sí estuvo bastante interesante, y siempre viene bien conocer los problemas de rendimiento que han tenido otros en sus webs para cuando te tengas que pelear con la misma situación. Claro que a algunas de las optimizaciones que afectaban a Rails no les saqué todo el jugo posible, porque mi conocimiento de Rails está todavía un poco verde, así que tendré que revisarme la presentación en unos meses, cuando me haya puesto las pilas.

Aparte de la charla, ese día tocaban varias reuniones de empresa, a las que me sumé para conocer el equipo con el que voy a trabajar en breve. A muchos de ellos ya los conocía de mis tiempos de Qarana e incluso de Utende (Javi y yo fuimos cofundadores, entre otros) por lo que sé cómo piensa Agustín y no me sorprendió demasiado su forma de trabajar o la transparencia de la empresa -de hecho, esas han sido algunas de las razones que hicieron que me cambiara de trabajo-. Pero lo que sí me ha sorprendido, y mucho, es lo online que han llegado a estar.

Acostumbrado a trabajar durante 5 años para la SGAE en sus oficinas, donde todo está alojado en sus servidores, es un soplo de aire fresco comprobar que en mi nueva empresa muchas cosas las hacen online, como por ejemplo el correo y los documentos en Gmail, el tracker en Pivotal Tracker, la participación interna con Yammer…, aparte, por supuesto, de usar Twitter, messengers, blog personales… Si ahora mismo, antes de conocer a fondo a ASPGems me pidieran que la definiera con una palabra, esa sería online

Hello world!

Aunque hacer un “¡Hola Mundo!” en WordPress ha resultado facilito (sudo aptitude install wordpress), el ponerle unos colorines que me gustasen ha echo que mi propósito de año nuevo de tener un blog público se haya quedado en agua de borrajas. Pero como no es serio tener el blog en construcción durante 2 semanas, al final me he forzado a elegir el tema y poner en funcionamiento el blog. Et voila!

Lo dicho, ¡Hola Mundo!