Presentación de simmer en sociedad

En un ratito, a las 19:00 h, empezará la 35 Reunión del Grupo de R de Madrid en Medialab Prado, y me dejarán la tribuna unos minutos para presentar simmer a la comunidad eRReRa de Madrid. Que, por cierto, se está haciendo mayor y ya tiene hasta página web y mailing list.

Dejo por aquí la presentación de mi charla. Sin mi voz rellenando los huecos no tiene mucho sentido, así que si te interesa y no andas lejos, ya sabes dónde estaremos. Si no, se suelen grabar y colgar por aquí.

El agujero de la construcción (2)

He ampliado el dataset de la entrada anterior para identificar personas físicas y jurídicas y recoger códigos de actividad (CNAE) y objeto social de las empresas. El análisis se puede seguir aquí. El principal resultado es el histograma por código CNAE o, dicho de otra forma, cómo se distribuyen las empresas deudoras por actividad económica:

hist

¿Qué representa ese pico entre 4000 y 4500? Bien, no hay sorpresas aquí: resulta que ese rango de códigos está destinado al sectorde la construcción. A partir de ahí, he refinado el primer análisis con 144 empresas más reconocidas gracias a dicho código. Como resultado, ahora el número de empresas de la construcción supera el 50 % y la deuda que acumulan prácticamente llega al 60 %.

bars

boxplot

El agujero de la construcción

He abierto un repositorio de GitHub con un análisis muy tonto con R sobre la lista de grandes morosos recientemente publicada por la Agencia Tributaria. Si alguien quiere colaborar, está más que invitado. El análisis puede leerse aquí de momento, hasta que haga algo más potable con todo esto (¿github.io?, ¿más ideas?, ¿algo que sea embebible aquí?) definitivamente, y si todo va bien, debería poder leerse aquí debajo:

simmer: un simulador de eventos discretos para R

R es un maravilloso lenguaje de programación principalmente enfocado a la estadística y la representación de datos que utilizo en mi día a día, tanto en mis labores de investigación como de docencia, aunque no me prodigo mucho al respecto por aquí. Al mismo tiempo, la simulación por eventos discretos, una de las técnicas por excelencia en mi campo (y otros, y a la cual dedico mis horas de docencia), no tenía hasta ahora representación en el universo R. Y digo hasta ahora porque, gracias al esfuerzo de Bart Smeets y el mío propio, el CRAN (Comprehensive R Archive Network, el repositorio oficial de paquetes de R) ya cuenta con simmer, un simulador de eventos discretos para R.

El paquete simmer es un proyecto creado originalmente por Bart al que yo me he unido como colaborador y ahora también mantenedor del paquete. Si alguien está interesado, lo puede instalar directamente desde CRAN con el instalador de paquetes de R o aquí tiene el repositorio de GitHub con las últimas novedades. Sugerencias y reportes de bugs, también en GitHub.

Aquí un pequeño ejemplo de funcionamiento (una introducción de uso más extensa puede encontrarse aquí):

library(simmer)

coffees <- list(
  espresso =function() runif(1, min=5, max=10),
  macchiato=function() runif(1, min=6, max=12),
  americano=function() runif(1, min=3, max=8)
)
coffee_prep_duration <- function()
  sample(coffees, 1)[[1]]()

coffee_trajectory <- create_trajectory("I want coffee!") %>%
  seize("barista", 1) %>%
  timeout(coffee_prep_duration) %>%
  release("barista", 1)

env <- simmer("coffee shop") %>%
  add_resource("barista", 2) %>%
  add_generator("caffeine addict",
                coffee_trajectory, 
                function() abs(rnorm(1, 5, 2))) %>%
  run(until=480)
  
plot_evolution_arrival_times(env, type = "flow_time")

simmer

Refrigerando un Raspberry Pi

raspberry

El propósito de esta entrada es doble: 1) dejar anotados los pasos que he seguido por si en algún momento yo mismo necesito consultarlos y 2) que cualquier poseedor de un Raspberry Pi que quiera hacer algo así encuentre todo lo necesario reunido en un mismo lugar. El resto puede dejar de leer aquí mismo.

El Raspberry Pi, entre otras muchas cosas, es una excelente solución de bajo consumo y silenciosa para tener en casa un servidor personal más que digno funcionando las 24 horas. Sobre estas líneas veis el mío en su estado actual. Está conectado doblemente al router blanco que se ve detrás: lo alimenta a través de una salida USB y le proporciona conectividad Ethernet. Además, se ven dos unidades USB conectadas:

  • La de debajo, pequeña y blanca, que apenas se ve, contiene el sistema operativo. Antes lo tenía en la tarjeta SD, pero al poco tiempo se acabaron corrompiendo los archivos porque escribía bastante. Mi decisión fue dejar el boot en la SD, que se cambia muy de vez en cuando, y trasladar el resto del sistema a una unidad flash: ese USB. Desde entonces, ningún problema.
  • La unidad de arriba es simplemente de almacenamiento, tal y como se puede deducir de ese “128G”.

Este servidor me proporciona acceso a la red de casa desde el exterior y, además, hace de centro de descargas y servidor de archivos, puesto que lo tengo funcionando ininterrumpidamente. El problema era que abrir un gran número de conexiones en redes P2P es exigente de cara al procesador y esto hacía que se calentara mucho: subía de los 70 ºC. A continuación, explico cómo añadir refrigeración mediante un ventilador con velocidad controlada en función de la temperatura.

En realidad es muy sencillo. Se puede optar por escoger un ventilador y modificar una caja de Raspberry o hacerse una a medida, pero ya hay soluciones precocinadas. Yo opté por este kit que podéis encontrar en eBay (por si en algún momento el enlace deja de estar disponible, algunas palabras clave: acrylic case with fan, heat sink, overclock kit). Contiene una caja de metacrilato a piezas, muy fácil de montar, con el agujero hecho y un microventilador de 0.5 W encajado. Dicha caja es muy compacta porque lleva el ventilador por dentro, muy cerquita de la placa, a diferencia de otras soluciones, y además la tapa es abatible (se puede abrir y cerrar una vez montada). También trae unos pequeños disipadores para pegar en los microcontroladores.

Con este kit sería más que suficiente. Conectando el ventilador al terminal de 3.3 V, la placa se mantiene a 35 ºC. No obstante, ni se requiere una temperatura tan baja ni es deseable que el ventilador esté permanentemente encendido a máxima velocidad, puesto que hace algo de ruido (poco, todo hay que decirlo). La solución es regular la velocidad en función de la temperatura. ¿Cómo? Con un simple transistor BJT como muestra la figura a continuación.

fan

Como se ve, el transistor NPN se coloca a continuación de la carga y su base se conecta al PIN 18 que nos proporciona una salida digital PWM, que no es más que una señal cuadrada cuyo valor máximo es 3.3 V y el mínimo es 0 V. Nótese que, cuando la señal se encuentra en su valor alto, el transistor tiene ambas uniones en polarización directa y trabaja en saturación: es un interruptor cerrado, la corriente fluye impulsando el ventilador. Por el contrario, cuando la señal se encuentra en su valor bajo, el transistor está en corte y no fluye corriente por la rama del ventilador.

Por tanto, basta con modular el porcentaje del tiempo que la señal digital aplicada a la base del transistor está en el valor alto, 3.3 V, para obtener el mismo porcentaje de la velocidad máxima del ventilador a dicha tensión. Y esto puede hacerse en función de la temperatura, con un programa que monitorice esta última y habilite la señal correspondiente a través del PIN 18. Afortunadamente, alguien ya ha escrito el código por nosotros y lo ha compartido amablemente. Lo he recogido aquí y el lugar de publicación original es este foro.