Introducción a “entornos” en R (aka diccionarios)

R ofrece multitud de estructuras de datos para trabajar, como pueden ser vectores, matrices n-dimensionales o dataframes. Según vamos creando programas más complejos es posible que nos veamos en la necesidad de guardar un conjunto de variables en algún sitio, lo cual resolveríamos con un diccionario en otro lenguaje (un HashMap en Java o un dict en python). En R disponemos de una clase que nos ofrece esa funcionalidad, y es lo que se conoce como “environment” o entorno. Dicho de forma sencilla, un environment en R sería el equivalente a un vector en el cual accedemos a sus elementos a través de una serie de etiquetas que les asignamos, lo cual nos suele dar una pista de lo que contiene si no somos excesivamente crípticos eligiendo las claves.

Nada más arrancar R existe un entorno por defecto que es el entorno global en el que se guardan todas las variables con las que trabajamos. Es por ello que las funciones para listar las variables, borrarlas o comprobar si existen son las mismas que las que vamos a ver para los entornos. Además, cuando creamos un nuevo entorno, este se va a guardar en el entorno global, de forma anidada. Si Por algún casual necesitamos acceder a ese entorno global podemos utilizar environment(), e incluso anidarlo en otro entorno de forma.

A continuación tenéis una breve introducción al manejo de entornos en R.

(más…)

Configurar Python como 32bit en Snow Leopard

Magna sorpresa el encontrarme que MySQL no funcionaba con Python tras actualizar a MacOSX 10.6 (en adelante SnowLeopard, que queda más kul), y mayor sorpresa aún descubrir que era debido a que se está ejecutando como aplicación de 64bit. Para hacer que Python se ejecute por defecto como una aplicación de 32bit simplemente cambiamos la configuración con el siguiente comando:

$ defaults write com.apple.versioner.python Prefer-32-Bit -bool yes
(esto lo cambia sólo para el usuario en cuestión; para hacerlo en todo el sistema usaremos la clave '/Library/Preferences/com.apple.versioner.python')

Et voilá. También podemos hacerlo a través de una variable de entorno (cuyo valor toma preferencia sobre la clave anterior):

$ export VERSIONER_PYTHON_PREFER_32_BIT=yes

Production/Development settings switching with django-apache

When we work in a web project it’s usual to have a devlopment version and a production version that only differ in some configuration parameters (database, user authentication, file paths…). Usually, the development version is deployed from the version control repository, and you have to tune some settings before restarting the service. With RoR you got that for free but it’s a feature I find lacking in django. Until today. (más…)

Compilar aplicaciones 32bit en amd64

Bienvenidos al fast-tip del día. Si por ejemplo teneís una aplicación que requiere ser compilada en 32bit (porque el target es 32bit o porque las librerías binarias que os facilitado son de 32bit) y vuestro sistema sigue una aruitectura amd64 os podéis encontrar con el siguiente mensaje de error al compilar:

/usr/bin/ld: saltando el [path a la librería encontrada] incompatible mientras se buscaba -l[librería]

La solución es bien sencilla:

  1. Nos aseguramos de tener instalado el paquete libc6_dev_i386 (y sus dependencias)
  2. Compilamos con la opción “-m32” en gcc
    • cc-m32 -o calculo calculo.c -ltpv

Have a nice day!

Usar la cuenta de Gmail con ActionMailer

Hay que reconocer que esta gente de Google se lo curra, y ofrecer acceso SMTP a nuestra cuenta de Gmail es todo un puntazo, sobre todo cuando estamos desarrollando prototipos, lejos de un postfix por ejemplo. El acceso es a través de SSL, con lo que, en principio, nuestra contraseña no corre peligro (más allá del estar escrita en un archivo de configuración local).

En mi caso, quería iniciarme en el ActionMailer de rails, el cual me ha parecido sencillísimo y potentísimo, y mi problema era la carencia de un servidor SMTP. Decidí utilizar el servicio de Google, pero mi sorpresa fue que el soporte de rails/ruby para SMTP no incluye “starttls”. La solución, crear un plugin de rails a mano con un par de ficheros:

  • vendor/plugins/action_mailer_tls/init.rb
  • vendor/plugins/action_mailer_tls/lib/smtp_tls.rb

El contenido de estos ficheros lo encontramos en esta página (o en la original japonesa). Una vez creado el plugin, sólo nos falta incluir la información de configuración. Ahora estoy con Rails 2.0.2, y he tenido que añadir las siguientes líneas dentro del fichero “configuration/enviroment.rb”:

config.action_mailer.delivery_method = :smtp

config.action_mailer.smtp_settings = {

:address => ‘smtp.gmail.com’,

:port => 587,

:user_name => ‘your_account@gmail.com’,

:password => ‘your_secret_word’,

:authentication => :plain

}

Si os da algún problema, no dudéis en preguntarlo en los comentarios.

Así deberían ser los TODOS los libros técnicos

¿Cuántas veces os habéis quedado dormidos leyendo un tocho de libro técnico de 500 páginas? ¿Son innumerables las páginas que os habéis saltado por repetitivas o ya sabidas? Esto es el pan nuestro de cada día, y aunque hay libros que intentan hacernos la vida más amena con chistes intercalados, al final el libro acaba siendo un plomo que te arrastra al sopor. Justamente estaba buscando uno de Ruby, que me ha parecido un lenguaje la mar de elegante, sin los formalismos de Java pero sin tanta anarquía como PHP o la indefinición que el encuentro a Python (mi otra alternativa), y voy y me topo con ESTO:

Why’s (Poignant) Guide to Ruby

Os aseguro que va a ser el mejor libro de programación que váis a leer en mucho tipo (incluso en lo que dura una vida) y se coloca al nivel de leyendas como “The C Programming Language” (K&R). Dios, si incluso tiene una banda sonora para cada capítulo del libro, ¿que más se puede pedir? Este libro me ha hecho recordar por qué me gusta programar.