diff --git a/content/about/historiek.md b/content/about/historiek.md index d0051cc..b933e64 100644 --- a/content/about/historiek.md +++ b/content/about/historiek.md @@ -72,7 +72,12 @@ Het nieuwe academiejaar wordt gestart met een volledig nieuwe website. Lessen wo De voorbije jaren zwaaiden veel van de oudere zeus-leden af, en moesten ze ons met pijn in het hart achter laten. Maar niet getreurd - er staat een groep nieuwe enthousiastelingen klaar om alles voor zeus te geven. We bruisen van ideeën en we zijn klaar om er keihard tegenaan te gaan! -Een sfeerbeeld van de kelder in 2007: ![2007-sfeerbeeld](https://zeus.ugent.be/wp-content/uploads/2014/01/20070920-140006-1-300x225.jpg){:.alignright} +
+ 2007-sfeerbeeld +
+ Een sfeerbeeld van de kelder in 2007 +
+
# De jaren 2007-2010 diff --git a/content/assets/stylesheets/includes/general.scss b/content/assets/stylesheets/includes/general.scss index 3c31128..16cf189 100644 --- a/content/assets/stylesheets/includes/general.scss +++ b/content/assets/stylesheets/includes/general.scss @@ -159,7 +159,7 @@ footer.footer { %align { background-color: $body-background; - padding: 15px; + margin: 15px; } .alignright { @@ -178,3 +178,23 @@ footer.footer { dt { font-weight: bold; } + +figure { + position: relative; + display: inline-flex; + figcaption { + position: absolute; + background-color: rgba(0,0,0,.7); + color: white; + bottom: 0; + width: 100%; + padding: 10px; + + transition: all .1s; + } + &:hover { + figcaption { + opacity: 0; + } + } +} diff --git a/content/blog/10-11/counting-laps-using-bluetooth-dongle-detection-on-the-12-urenloop.md b/content/blog/10-11/counting-laps-using-bluetooth-dongle-detection-on-the-12-urenloop.md index 17f8bb6..7d6f8f3 100644 --- a/content/blog/10-11/counting-laps-using-bluetooth-dongle-detection-on-the-12-urenloop.md +++ b/content/blog/10-11/counting-laps-using-bluetooth-dongle-detection-on-the-12-urenloop.md @@ -7,7 +7,10 @@ _Crossposted from [jaspervdj.be](https://jaspervdj.be/posts/2011-05-09-12-urenlo The [12 urenloop](https://www.12urenloop.be/) is a yearly contest held at [Ghent University](https://www.ugent.be/). The student clubs compete in a 12-hour-long relay race to run as much laps as possible. Each of the 14 teams this year had a baton assigned, so they can only have one runner at any time. -![](https://jaspervdj.be/images/2011-05-09-12-urenloop.jpg "Just after the start") +
+Just after the start +
Just after the start
+
@@ -33,31 +36,45 @@ We decided to attach bluetooth dongles to the relay batons. I'm now pretty confi ## Gyrid -These bluetooth receivers were borrowed from the [CartoGIS](https://geoweb.ugent.be/cartogis/), a research group which (among other things) studies technology to track people on events (e.g. festivals) using bluetooth receivers. ![](https://jaspervdj.be/images/2011-05-09-gyrid-node.jpg "A Gyrid node") The receivers run a custom build of [Voyage Linux](https://linux.voyage.hk/) created to run the [Gyrid](https://github.com/Rulus/Gyrid) service. What does this mean for us? We get simple, robust nodes we can use as: +These bluetooth receivers were borrowed from the [CartoGIS](https://geoweb.ugent.be/cartogis/), a research group which (among other things) studies technology to track people on events (e.g. festivals) using bluetooth receivers. + +
+A Gyrid node +
A Gyrid node
+
+ +The receivers run a custom build of [Voyage Linux](https://linux.voyage.hk/) created to run the [Gyrid](https://github.com/Rulus/Gyrid) service. What does this mean for us? We get simple, robust nodes we can use as: - linux node: we can simply SSH to them and set them up - switch: to create a more complicated network setup (see later) - receiver: sending all received bluetooth data to a central computing node - Here is another picture of what's inside of a node: ![](https://jaspervdj.be/images/2011-05-09-gyrid-node-inside.jpg "A Gyrid node (inside)") +Here is another picture of what's inside of a node: +
+A Gyrid node (inside) +
A Gyrid node (inside)
+
## Relay batons -We built the relay batons using a simple design: a battery pack consisting of 4 standard AA batteries and connecting them to a bluetooth chip, put in a simple insulation pipe. Some extensive tests on battery duration were also done, and it turns out even the cheapest batteries are good enough to keep a bluetooth chip in an idle state for more than 50 hours. We never actually set up a bluetooth connection between the receivers and the relay batons -- we just detect them and use that as an approximate position. ![](https://jaspervdj.be/images/2011-05-09-relay-batons.jpg "Left: our sweatshop, right: a relay baton") +We built the relay batons using a simple design: a battery pack consisting of 4 standard AA batteries and connecting them to a bluetooth chip, put in a simple insulation pipe. Some extensive tests on battery duration were also done, and it turns out even the cheapest batteries are good enough to keep a bluetooth chip in an idle state for more than 50 hours. We never actually set up a bluetooth connection between the receivers and the relay batons -- we just detect them and use that as an approximate position. +
+Just after the start +
Left: our sweatshop, right: a relay baton
+
## Network setup -The problem here was that we only could put cables _around_ the circuit, we couldn't cut right through to the other side of the circuit. This means the commonly used [Star network](https://en.wikipedia.org/wiki/Star_network) was impossible (well, theoretically it was possible, but we would need _a lot_ of cables). Instead, [Jens](https://twitter.com/jenstimmerman), [Pieter](https://thinkjavache.be/) and [Toon](https://twitter.com/nudded) created an awesome ring-based network, in which each node also acts as a switch (using [bridging-utils](https://www.linuxfoundation.org/collaborate/workgroups/networking/bridge)). Then, the [Spanning Tree Protocol](https://en.wikipedia.org/wiki/Spanning_Tree_Protocol) is used to determine an optimal network layout, closing one link in the circle to create a tree. This means we didn't have to use _too much_ cables, and still had the property that one link could go down (physically) without bringing down any nodes: in this case, another tree would be chosen. And if two contiguous links went down, we would only lose one node (obviously, the one in between those two links)! ![](https://jaspervdj.be/images/2011-05-09-ring.png "Ring-based network with spanning tree indicated") +The problem here was that we only could put cables _around_ the circuit, we couldn't cut right through to the other side of the circuit. This means the commonly used [Star network](https://en.wikipedia.org/wiki/Star_network) was impossible (well, theoretically it was possible, but we would need _a lot_ of cables). Instead, [Jens](https://twitter.com/jenstimmerman), [Pieter](https://thinkjavache.be/) and [Toon](https://twitter.com/nudded) created an awesome ring-based network, in which each node also acts as a switch (using [bridging-utils](https://www.linuxfoundation.org/collaborate/workgroups/networking/bridge)). Then, the [Spanning Tree Protocol](https://en.wikipedia.org/wiki/Spanning_Tree_Protocol) is used to determine an optimal network layout, closing one link in the circle to create a tree. This means we didn't have to use _too much_ cables, and still had the property that one link could go down (physically) without bringing down any nodes: in this case, another tree would be chosen. And if two contiguous links went down, we would only lose one node (obviously, the one in between those two links)! + +
+Ring-based network with spanning tree indicated +
Ring-based network with spanning tree indicated
+
## count-von-count -Now, I will elaborate on the software which interpolates the data received from the Gyrid nodes in order to count laps - - - 1 - - -. `count-von-count` is a robust system written in the [Haskell](https://haskell.org/) programming language. +Now, I will elaborate on the software which interpolates the data received from the Gyrid nodes in order to count laps1. `count-von-count` is a robust system written in the [Haskell](https://haskell.org/) programming language. At this point, we have a central node which receives 4-tuples from the Gyrid nodes: @@ -85,7 +102,10 @@ We also ([hopefully](https://bash.org/?5273)) know the location of our Gyrid nod This is something we can easily plot. Note that there are only a few possible positions, since we discarded the RSSI values because of reliability issues. -![](https://jaspervdj.be/images/2011-05-09-plot.png "Linear regression used") +
+Linear regression used +
Linear regression used
+
I've illustrated the plot further with a linear regression, which is also what `count-von-count` does. Based on this line, it can figure out the average speed and other values which are then used to "judge" laps. When `count-von-count` decides a relay baton has made a lap, it will make a REST request to `dr.beaker`. @@ -101,7 +121,7 @@ I've illustrated the plot further with a linear regression, which is also what ` - a history of the entire competition - and more. +and more. ## Conclusion @@ -109,7 +129,10 @@ It's a hardware problem. When the contest started, both Gyrid, `count-von-count` and `dr.beaker` turned out to be quite reliable. However, our relay batons were breaking fast. This simply due to the simple, obvious fact that runners don't treat your precious hardware with love -- they need to be able to quickly pass them. Inevitably, batons will be thrown and dropped. -![](https://jaspervdj.be/images/2011-05-09-monitoring.jpg "Thomas & me monitoring the batons") +
+Thomas & me monitoring the batons +
Thomas & me monitoring the batons
+
Initially, we were able to swap the broken relay batons for the few spare ones we had, and then quickfix the broken ones using some duct tape. After about five hours, however, they really started breaking -- at a rate that was hard to keep up with using quickfixing.