simmer.bricks 0.1.0: new add-on for simmer

The new package simmer.bricks has found its way to CRAN. The simmer package provides a rich and flexible API to build discrete-event simulations. However, there are certain recurring patterns that are typed over and over again, higher-level tasks which can be conceptualised in concrete activity sequences. This new package is intended to capture this kind of patterns into usable bricks, i.e., methods that can be used as simmer activities, but return an arrangement of activities implementing higher-level tasks.

For instance, consider an entity visiting a resource:


trajectory("customer") %>%
  seize("clerk") %>%
  timeout(10) %>%
## trajectory: customer, 3 activities
## { Activity: Seize        | resource: clerk, amount: 1 }
## { Activity: Timeout      | delay: 10 }
## { Activity: Release      | resource: clerk, amount: 1 }

The simmer.bricks package wraps this pattern into the visit() brick:


trajectory("customer") %>%
  visit("clerk", 10)
## trajectory: customer, 3 activities
## { Activity: Seize        | resource: clerk, amount: 1 }
## { Activity: Timeout      | delay: 10 }
## { Activity: Release      | resource: clerk, amount: 1 }

This is a very naive example though. As a more compelling use case, consider a resource that becomes inoperative for some time after each release; i.e., the clerk above needs to do some paperwork after each customer leaves. There are several ways of programming this with simmer. The most compact implementation requires a clone() activity to let a clone hold the resource for some more time while the original entity continues its way. This package encapsulates all this logic in a very easy-to-use brick called delayed_release():

env <- simmer()

customer <- trajectory("customer") %>%
  log_("waiting") %>%
  seize("clerk") %>%
  log_("being attended") %>%
  timeout(10) %>%
  # inoperative for 5 units of time
  delayed_release(env, "clerk", 5) %>%

env %>%
  add_resource("clerk") %>%
  add_generator("customer", customer, at(0, 1)) %>%
  run() %>% invisible
## 0: customer0: waiting
## 0: customer0: being attended
## 1: customer1: waiting
## 10: customer0: leaving
## 15: customer1: being attended
## 25: customer1: leaving

The reference index lists all the available bricks included in this inital release. The examples included in the help page for each method show the equivalence in plain activities. This is very important if you want to mix bricks with rollbacks to produce loops, since the rollback() activity works in terms of the number of activities. For instance, this is what a delayed_release() does behind the scenes:

## trajectory: customer, 11 activities
## { Activity: Log          | message }
## { Activity: Seize        | resource: clerk, amount: 1 }
## { Activity: Log          | message }
## { Activity: Timeout      | delay: 10 }
## { Activity: Clone        | n: 2 }
##   Fork 1, continue,  trajectory: anonymous, 2 activities
##   { Activity: SetCapacity  | resource: clerk, value: 0x55a7c5b524c0 }
##   { Activity: Release      | resource: clerk, amount: 1 }
##   Fork 2, continue,  trajectory: anonymous, 2 activities
##   { Activity: Timeout      | delay: 5 }
##   { Activity: SetCapacity  | resource: clerk, value: 0x55a7c59ddc18 }
## { Activity: Synchronize  | wait: 0 }
## { Activity: Log          | message }

As always, we are more than happy to receive feedback and suggestions, either via the mailing list or via GitHub issues and PRs. If you identify any pattern that you frequently use in your simulations and you think it could become a useful simmer brick, please don’t hesitate to share it!

simmer 3.6.5

The fifth update of the 3.6.x release of simmer, the Discrete-Event Simulator for R, is on CRAN. This release extends the attributes API by allowing users to set/get multiple attributes at once (a pretty straightforward change as well as useful; I don’t know why it didn’t occurred to me before…). Vectors as attributes and other data types are not supported yet, but they are on the roadmap.

This version also fixes some minor bugs (many thanks to the users of the simmer-devel mailing list for taking their simulations to edge cases, where these bugs arise), deprecates the onestep() function and provides the new stepn() instead. Since onestep() serves primarily for debugging purposes, the transition to the new one may go unnoticed. Finally, there is a new vignette about the Dining Philosophers Problem.

New features:

  • set_attribute() (and set_global() by extension) can set multiple attributes at once by providing vectors of keys and values (or functions returning such keys and/or values). get_attribute() (and get_global() by extension) can retrieve multiple keys (#122).
  • New stepn() method deprecates onestep() (e452975).

Minor changes and fixes:

  • Restore ostream after formatting (9ff11f8).
  • Fix arrival cloning to copy attributes over to the clone (#118).
  • Fix self-induced preemption through set_capacity() (#125).
  • Update “Queueing Systems” vignette (a0409a0, 8f03f4f).
  • Update “Advanced Trajectory Usage” vignette (4501927).
  • Fix print methods to return the object invisibly (#128).
  • New “Dining Philosophers Problem” vignette (ff6137e).

Visualising SSH attacks with R

If you have any machine with an SSH server open to the world and you take a look at your logs, you may be alarmed to see so many login attempts from so many unknown IP addresses. DenyHosts is a pretty neat service for Unix-based systems which works in the background reviewing such logs and appending the offending addresses into the hosts.deny file, thus avoiding brute-force attacks.

The following R snippet may be useful to quickly visualise a hosts.deny file with logs from DenyHosts. Such file may have comments (lines starting with #), and actual records are stored in the form <service>: <IP>. Therefore, read.table is more than enough to load it into R. The rgeolocate package is used to geolocate the IPs, and the counts per country are represented in a world map using rworldmap:

hosts.deny <- "/etc/hosts.deny"
db <- system.file("extdata", "GeoLite2-Country.mmdb", package="rgeolocate")
read.table(hosts.deny, col.names=c("service", "IP")) %>%
  pull(IP) %>%
  maxmind(db, fields="country_code") %>%
  count(country_code) %>% %>%
  joinCountryData2Map(joinCode="ISO2", nameJoinColumn="country_code") %>%
  mapCountryData(nameColumnToPlot="n", catMethod="pretty", mapTitle="Attacks per country")
## 74 codes from your data successfully matched countries in the map
## 2 codes from your data failed to match with a country code in the map
## 168 codes from the map weren't represented in your data

Then, you may consider more specific access restrictions based on IP prefixes…

simmer 3.6.4

The fourth update of the 3.6.x release of simmer, the Discrete-Event Simulator for R, is on CRAN. This release patches several bugs regarding resource priority and preemption management when seized amounts greater than one were involved. Check the examples available in the corresponding issues on GitHub (#114#115#116) to know if you are affected.

It can be noted that we already broke the intended bi-monthly release cycle, but it is for a good reason, since we are preparing a journal publication. Further details to come.

Minor changes and fixes:

  • Fix preemption in non-saturated multi-server resources when seizing amounts > 1 (#114).
  • Fix queue priority in non-saturated finite-queue resources when seizing amounts > 1 (#115).
  • Fix resource seizing: avoid jumping the queue when there is room in the server but other arrivals are waiting (#116).

Estudiando física a distancia

(Esta anotación se publica simultáneamente en Naukas)

Han sido 5 largos años. Pero por fin, hace 2 semanas, presenté mi Trabajo Fin de Grado. Por fin, después de todo este tiempo, ¡soy graduada en Física por la UNED! Y con la alegría que ya ha sobrescrito la euforia inicial, toca echar una mirada hacia atrás. Toca contaros cómo ha sido esta experiencia y animar a aquellos que, quizás como yo en 2012, tienen dudas. Si ese fuese tu caso, permíteme este breve atajo: 

¿Cómo ha sido estudiar física en la UNED?

Ha sido duro, sobre todo los últimos años, agotador. Pero también ha sido muy bonito, divertido a ratos y un reto enormemente estimulante.

Si estás dudando si matricularte, o si alguna vez le tuviste ganas y no te atreviste, ¡adelante!, lánzate a la piscina. Seguro que lo disfrutarás. Pero deja que te dé también algunos consejos. Deja que te advierta sobre los aspectos positivos y  algunos de los más negativos que tiene estudiar de manera no presencial. Luego no dirás que no te avisaron ;) 

1. La UNED

Lo que todos sabréis es que la UNED es una universidad pública española fundada en los 70 que permite estudiar a distancia. Lo que probablemente no sepáis es que es, de hecho, la primera universidad por número de alumnos en España y que el proyecto nació con la vocación de hacer accesible la educación universitaria a todos los sectores de la población, especialmente aquellos alejados de los centros urbanos. Hoy, la UNED, sigue cumpliendo esta función social fundamental y, en época de exámenes, es común coincidir con algún profesor que coordina la convocatoria también, por ejemplo, en centros penitenciarios.

Por este motivo, para mí al menos, ha sido fácil cogerle cariño a esta institución. No es una universidad corriente y probablemente no sea la mejor, ni la más fácil. Pero, desde luego, ofrece experiencias y oportunidades que ninguna otra puede ofrecer.

Más allá de esto, conviene que sepas que su Sede Central se ubica en Madrid, cerca de Ciudad Universitaria y que tiene una biblioteca preciosa. Pero además, la UNED cuenta con multitud de centros asociados por toda la península (e incluso un edificio en México): algo así como las “sucursales” de la UNED, con sus propias bibliotecas, salas de estudio, aulas, laboratorios, etcétera.

2. Los unedianos

Precisamente, uno de los factores más diferentes es su alumnado. En la UNED no encontrarás chavales de 18 años desorientados por las hormonas, ni carteles de “busco compañero de piso”, ni convocatorias para el siguiente macrofiestón. No tengo nada en contra de todas estas cosas, aclaro, todo tiene su momento y la universidad, si tienes la suerte de vivirla de manera desahogada, también debe ser eso. Pero quienes estudian en la UNED, generalmente, ya no están buscando eso. El propósito principal es otro; sacarse una carrera, aprovechar el tiempo lo máximo posible. Nadie está aquí sin querer estarloEse cambio de chip es uno de los aspectos que más distinguen a esta universidad. 

Personalmente, una de mis escenas preferidas es siempre ver a señores y señoras de edad muy avanzada en la cola de los exámenes. No se me ocurre mayor muestra de curiosidad que esta: el deseo de seguir aprendiendo mucho después de terminar “la carrera”, más allá de las expectativas laborales o cualquier motivación práctica. VIVAN los abuelos de la UNED. Les abrazaría con ardor… si no fuese porque son perfectos desconocidos, claro.

Y esa es, precisamente, la cara negativa de esta historia. Realmente, apenas vas a conocer a tus compañeros. Entiéndase: llevo cinco años en esta facultad y creo que conservo el contacto con… tres de ellos. Precisamente, los tres con los que he coincidido repetidamente en prácticas o en alguna tutoría. Pero es lo que tenemos los simios sociales: que necesitamos caras para leer las emociones, para empatizar y para beber café juntos. A distancia, cualquiera de estas cosas se hace más difícil.

Surge, en cambio, otro tipo de compañerismo mucho más cómplice y basado en el anonimato. Fuera de la facultad, siempre acabarás cruzándote con otro unediano (insisto, es la universidad con más alumnos de toda España), os miraréis sabiéndoos marcados por la misma historia y empezaréis a desbarrar acerca de los exámenes infernales de tan solo dos horas y los foros virtuales desatendidos. Es como pertenecer a una logia secreta, rollo los masones, pero sin capa, rituales ni mierdas.

3. La ausencia de clases

Efectivamente, es una universidad a distancia, así que, en general, no vas a poder asistir a clases presenciales. En general, digo: en algunos casos, en los centros asociados, sí se imparten tutorías de algunas asignaturas (opcionales en todos los casos). Todo depende del número de alumnos matriculados que haya. En Física, cuando a mí me tocó, solo tuve tutorías para las asignaturas de 1º (debe de ser que muchos abandonan después del primer año).

¿Cómo se reemplaza, entonces, este formato profesor-chapa que a todos nos resulta tan familiar? Pues con libros y con lo que en la UNED se conoce como “campus virtual”.

En general, cada asignatura cuenta con un libro básico (necesitas comprarlo) sobre el que se articula el temario y otros libros complementarios que no tendrás tiempo de leer. En algunos casos, el libro será un “clásico” de la materia correspondiente. A veces, en cambio, son libros de la propia UNED adaptados al método de aprendizaje (con más o menos fortuna y más o menos erratas).

Por otra parte, está el campus virtual; el portal donde se reúne toda la información que la UNED pone a tu disposición, desde tu expediente académico hasta el estado de tu matrícula. En el campus, cada asignatura tiene su propio espacio donde, en general, todas ellas publican:

  • Documentos relativos a la organización de la propia asignatura: criterios de evaluación, fechas de los exámenes, temario, calendario, objetivos, etcétera.
  • Materiales didácticos complementarios. Suelen ser apuntes, aclaraciones respecto al libro base y, casi siempre, problemas resueltos que resultan de gran ayuda.
  • En ocasiones más raras, algunos profesores deciden organizar clases virtuales (una al mes, aproximadamente, pero varía un montón). Tras su celebración, quedan grabadas y disponibles en el campus. No obstante, por su naturaleza remota, no son realmente equivalentes a una clase. Desde mi punto de vista, lo más grave es que los alumnos, incluso si asisten “en directo”, sólo pueden interrumpir y plantear dudas a través de un chat. Ahora, intenta escribir una duda sobre alguna ecuación de mecánica de fluidos a través de un chat… pues eso, no es lo mismo.
  • Por último cada asignatura tiene un foro donde se pueden plantear dudas (este ya con editor de LaTeX y posibilidad de adjuntar archivos). Hay profesores que animan a seguirlos de manera sistemática por si algún compañero publica alguna pregunta que, de rebote, te resulte de utilidad también a ti… desde mi punto de vista, la relación señal-ruido no justifica este tipo de seguimiento. Yo, por lo menos, lo he usado solo para plantear mis propias dudas y poder leer la respuesta del profesor. Para esto, efectivamente, resulta de gran utilidad.

Dicho todo esto, yo no creo que el campus virtual llegue realmente a sustituir el apoyo que supone asistir a clases presenciales y, por este motivo, creo que estudiar a distancia es más difícil en general. Durante un cuatrimestre disfruté de una beca y pude asistir a clases en la UNAM (México). Mis resultados mejoraron significativamente y, aún así, tengo la sensación de que todo me resultó mucho más fácil, mucho más intuitivo. Existen demasiadas variables mezcladas en esta comparación, desde el nivel de las universidades al hecho de que en México yo no estaba trabajando, pasado por el aporte energético de las quesadillas y el chile diarios. Pero, más allá de estos factores, creo que las clases jugaron un papel importante.

Ciertamente, se puede aprender a partir de libros: de hecho, cualquier libro contendrá menos errores que tu apresurada colección de apuntes. Cualquier libro repetirá la lección todas las veces que sea necesario. Y, sin embargo, la repetirá todas las veces igual. Es esto, precisamente, lo que se pierde: la redundancia del sistema profesor-chapa que incide más en aquello que es más relevante; la capacidad de pedir otro ejemplo más a la carta; el tratar de expresarlo con tus propias palabras y que el profesor, al momento, te corrija. No obstante, creo que ninguna de estas cosas debería verse impedida por la distancia, más bien, creo que la UNED debería actualizarse para hacerlas más factibles. Por ejemplo: sustituyendo las clases virtuales por verdaderas videoconferencias, donde los alumnos puedan también interrumpir y hablar, en lugar de intervenir únicamente a través de un torpe chat. O, quizás, facilitando vídeo llamadas que permitan contactar más ágilmente con cualquier profesor.

4. Las prácticas

Como no podía ser de otra manera, en una carrera científica, también tienes que realizar prácticas. Técnicas Experimentales es la única asignatura que no se puede realizar completamente “a distancia”. Para que resulte lo más accesible posible, lo que se hace es concentrar el tiempo de laboratorio en una sola semana dedicada a la toma de datos (en Madrid, en 1º, había grupos incluso los fines de semana). Las memorias quedan para más tarde, relegadas al trabajo personal en casa.

En 1º y en 2º los distintos centros asociados cuentan con material para que los alumnos no tengan que desplazarse a Madrid. A partir de 3º de Física, en cambio, las prácticas solo se imparten en la Sede Central, por lo que la UNED ofrece pequeñas ayudas de viaje para aquellos alumnos que vienen desde lejos.

Las prácticas han sido, durante todos estos años y sin dudarlo, mi asignatura preferida de la carrera. Es el lugar donde las ecuaciones se hacen carne, algo así… una verdadera belleza. Pero también han requerido de mí, durante 4 años, una semana entera de mis vacaciones laborales. Que no me quejo, conste, cada cual llama “ocio” a lo que quiere. Pero es cierto que termina agotando, hay que tenerlo en cuenta.

5. El estudio

Superadas las prácticas y familiarizado con el campus virtual, esta es la parte que solo depende de ti mismo, el verdadero reto. Tú y tus horas libres, tú frente a tu libro y tu ordenador. Tú y tus muy resistentes codos.

Estudiar, incluso estudiar algo tan aparentemente complejo como puede ser física, no es tan difícil. Pero requiere constancia. Hay materias que, más que “comprenderlas”, requieren que te acostumbres a ellas., que adquieras agilidad con cierto lenguaje, con algunas convenciones necesarias. Y no es una cuestión solo de inteligencia. La inteligencia puede llevarte a intuir la solución antes; pero hay caminos que tienes que pisar muchas veces para dejar de tropezarte.

Dicho lo cual, en general, yo no estudiaba todos los días. Es cierto que los libros de la UNED, estos años, han ido reemplazando mis lecturas en el metro. Y, dependiendo del día y de la jornada laboral, también podía ponerme a resolver problemas alguna tarde entre semana. Pero mi mayor batalla, sobre todo en los últimos años, se libraba los fines de semana. Intensos. Fines. De semana (¿os he dicho ya que mis vacaciones eran también para esto, no? Pues eso, agotador). Y para hacer un uso eficiente de un tiempo tan limitado, me resultó especialmente útil el calendario con la programación de cada asignatura y seguir la evaluación continua. 

De hecho, creo que esta ha sido toda la clave para mí. Cada asignatura cuenta con un calendario que te orienta sobre el progreso que deberías seguir semana a semana. La verdad es que nunca he conseguido llevarlo al día. Pero el hecho de dividir al monstruo en cachitos, en pequeños progresos de 7 días, lo vuelve mucho más digerible. Cada comienzo de curso para mí ha sido idéntico: abrir mi agenda, apuntar los temas por semana. Ir tachando, poco a poco, hasta el día del examen. 

Y, del mismo modo, las pruebas de evaluación continua (las famosas “PEC”) me ayudaron a mantener mis objetivos. Las PECs de la UNED consisten en ejercicios (simulacros de examen en muchos casos) y tests online, siempre optativos, que cada cual resuelve desde casa en una ventana de tiempo determinada y que se entregan a través del campus. Desde mi punto de vista, son poco relevantes en tanto que “evaluación” (en muchos casos, las PECs no cuentan más de un 10% o un 20% de la calificación final) pero son de gran ayuda de cara al estudio. En primer lugar porque haciéndolas aprendes a hacerlas (suelen ayudar a comprender la materia). Pero, sobre todo, porque suponen una línea de meta que uno mismo se pone a mitad de camino y que previene el abandono y (un poco) la locura previa al examen final. Hablando de lo cual…

6. Los exámenes

Los exámenes en la UNED se celebran al final de cada cuatrimestre durante dos semanas con una semana de descanso entre medias. Puedes presentarte a cada asignatura en la convocatoria de la primera semana o en la segunda y los horarios son fijos e iguales para todas las carreras: 9:00, 11:30, 16:00, 18:30; ventanas de dos horas con media hora para desalojar y realojar entre medias. Eso sí, si la primera semana el examen de una asignatura se celebra por la mañana, durante la segunda semana, ese examen tendrá lugar por la tarde, de modo que todo el mundo pueda presentarse y elegir, al menos, entre dos horarios distintos.

Una vez elegida la convocatoria que más te conviene, solo debes asistir al centro asociado que se te hayan asignado con tu carné de la UNED entre los dientes. El espectáculo que sigue te sorprenderá: cientos de personas haciendo cola ante una impresora. Cuando llega tu turno, pasas tu carné por un detector y se imprime automáticamente tu examen con un asiento asignado mediante un sistema que se asegura de que a tus lados nadie se examine de lo mismo que tú. Y, efectivamente, cuando llegas a tu sitio, el tipo que tienes al lado suele ser estudiante de Derecho, o de Antropología o, más probablemente aún, de Psicología.

No conoces a nadie en la sala. Y aunque, por alguna casualidad cósmica, estuviese algún profesor de física allí, tampoco puedes consultarle nada: ni sobre los enunciados, ni sobre posibles erratas, ni sobre nada. La idea es garantizar que todo el mundo se presenta, exactamente, en las mismas condiciones (y, claro, no puede haber un profesor de cada carrera en cada sala). A las dos horas de haber imprimido tu examen, debes entregarlo o, en caso contrario, alguien anunciará tu nombre: “Almudena Martín Castro, se ha acabado su tiempo, muahahahaha” (dramatización).

Es una situación divertida. Y es un método de evaluación nefasto. No hay manera de demostrar lo que uno sabe sobre asignaturas de cierta complejidad (como Cuántica, o Métodos Matemáticos) en un único examen de apenas dos horas. Tampoco es que exista una alternativa mucho mejor, o a mí no se me ocurre una, dadas las características de la UNED. Supongo que es un mal necesario.

7. Otros consejos y miscelánea

  • Yo he sido un poco bruta cogiendo asignaturas y he acabado la carrera en 5 años (más o menos a curso por año más uno para el TFG). No lo recomiendo: no lo hagáis, en serio, es una paliza. Diría que medio curso por año es razonable si, además de estudiar, trabajas.
  • Hay asignaturas fáciles, difíciles, mortales y luego está Mecánica Teórica. Cuando llegues a ella, no llores. Todos hemos pasado por ahí y es una materia preciosa. El equipo docente, además, está siempre dispuesto a ayudar.
  • Para preparar los exámenes viene muy bien el repositorio de Barbastro. Pero tampoco te cebes. Corres el riesgo de sobreentrenar tu algoritmo.
  • Si ya estás con medio pie dentro, échale un ojo a este blog de Abraham Rubio. Describe de manera mucho más detallada cómo es estudiar física en la UNED.
  • Tómatelo con calma. Permítete suspender. Puede esperar a septiembre. Ten en cuenta que no hay un límite de asignaturas superadas por año, ni un límite de años que puedas estar estudiando. Puedes matricularte de una sola asignatura si quieres por curso. Si vas a hacerlo por pasártelo bien, pásatelo bien y para eso, sobre todo (léase sin melodía): despacito.