figure and sup changes

This commit is contained in:
Lorin Werthen 2017-06-14 12:27:28 +02:00
parent cdbf93cfa2
commit 2ccfc8ef24
No known key found for this signature in database
GPG key ID: F11FFC921E0E08E0
2 changed files with 38 additions and 28 deletions

View file

@ -174,27 +174,33 @@ footer.footer {
float: left; float: left;
} }
// Bold definition types in <dl></dl> .content {
dt { // Bold definition types in <dl></dl>
font-weight: bold; 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 {
figure {
position: relative;
display: inline-flex;
figcaption { figcaption {
opacity: 0; position: absolute;
background-color: rgba(0,0,0,.7);
color: white;
bottom: 0;
width: 100%;
padding: 10px;
transition: all .1s;
}
&:hover {
figcaption {
opacity: 0;
}
} }
} }
sup {
font-size: small;
}
} }

View file

@ -1,13 +1,15 @@
--- ---
title: Counting laps using bluetooth dongle detection on the 12 urenloop title: Counting laps using bluetooth dongle detection on the 12 urenloop
created_at: 09-05-2011 created_at: 09-05-2011
toc:
depth: 1
--- ---
_Crossposted from [jaspervdj.be](https://jaspervdj.be/posts/2011-05-09-12-urenloop.html)_ _Crossposted from [jaspervdj.be](https://jaspervdj.be/posts/2011-05-09-12-urenloop.html)_
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. 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.
<figure> <figure class="image">
<img src="https://jaspervdj.be/images/2011-05-09-12-urenloop.jpg" alt="Just after the start"> <img src="https://jaspervdj.be/images/2011-05-09-12-urenloop.jpg" alt="Just after the start">
<figcaption>Just after the start</figcaption> <figcaption>Just after the start</figcaption>
</figure> </figure>
@ -38,7 +40,7 @@ We decided to attach bluetooth dongles to the relay batons. I'm now pretty confi
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. 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.
<figure> <figure class="image">
<img src="https://jaspervdj.be/images/2011-05-09-gyrid-node.jpg" alt="A Gyrid node"> <img src="https://jaspervdj.be/images/2011-05-09-gyrid-node.jpg" alt="A Gyrid node">
<figcaption>A Gyrid node</figcaption> <figcaption>A Gyrid node</figcaption>
</figure> </figure>
@ -50,7 +52,7 @@ The receivers run a custom build of [Voyage Linux](https://linux.voyage.hk/) cre
- receiver: sending all received bluetooth data to a central computing node - receiver: sending all received bluetooth data to a central computing node
Here is another picture of what's inside of a node: Here is another picture of what's inside of a node:
<figure> <figure class="image">
<img src="https://jaspervdj.be/images/2011-05-09-gyrid-node-inside.jpg" alt="A Gyrid node (inside)"> <img src="https://jaspervdj.be/images/2011-05-09-gyrid-node-inside.jpg" alt="A Gyrid node (inside)">
<figcaption>A Gyrid node (inside)</figcaption> <figcaption>A Gyrid node (inside)</figcaption>
</figure> </figure>
@ -58,7 +60,7 @@ Here is another picture of what's inside of a node:
## Relay batons ## 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. 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.
<figure> <figure class="image">
<img src="https://jaspervdj.be/images/2011-05-09-relay-batons.jpg" alt="Just after the start"> <img src="https://jaspervdj.be/images/2011-05-09-relay-batons.jpg" alt="Just after the start">
<figcaption>Left: our sweatshop, right: a relay baton</figcaption> <figcaption>Left: our sweatshop, right: a relay baton</figcaption>
</figure> </figure>
@ -67,11 +69,13 @@ We built the relay batons using a simple design: a battery pack consisting of 4
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)! 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)!
<figure> <figure class="image">
<img src="https://jaspervdj.be/images/2011-05-09-ring.png" alt="Ring-based network with spanning tree indicated"> <img src="https://jaspervdj.be/images/2011-05-09-ring.png" alt="Ring-based network with spanning tree indicated">
<figcaption>Ring-based network with spanning tree indicated</figcaption> <figcaption>Ring-based network with spanning tree indicated</figcaption>
</figure> </figure>
# The software
## count-von-count ## count-von-count
Now, I will elaborate on the software which interpolates the data received from the Gyrid nodes in order to count laps<sup><a href="#fn1" class="footnoteRef" id="fnref1">1</a></sup>. `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 laps<sup><a href="#fn1" class="footnoteRef" id="fnref1">1</a></sup>. `count-von-count` is a robust system written in the [Haskell](https://haskell.org/) programming language.
@ -102,14 +106,14 @@ 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. 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.
<figure> <figure class="image">
<img src="https://jaspervdj.be/images/2011-05-09-plot.png" alt="Linear regression used"> <img src="https://jaspervdj.be/images/2011-05-09-plot.png" alt="Linear regression used">
<figcaption>Linear regression used</figcaption> <figcaption>Linear regression used</figcaption>
</figure> </figure>
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`. 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`.
# dr.beaker ## dr.beaker
`dr.beaker` is the scoreboard application. It's implemented by [Thomas](https://twitter.com/blackskad) as a [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) service that runs on top of [GlassFish](https://glassfish.java.net/). It provides features such as: `dr.beaker` is the scoreboard application. It's implemented by [Thomas](https://twitter.com/blackskad) as a [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) service that runs on top of [GlassFish](https://glassfish.java.net/). It provides features such as:
@ -123,13 +127,13 @@ I've illustrated the plot further with a linear regression, which is also what `
and more. and more.
## Conclusion # Conclusion
It's a hardware problem. 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. 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.
<figure> <figure class="image">
<img src="https://jaspervdj.be/images/2011-05-09-monitoring.jpg" alt="Thomas &amp; me monitoring the batons"> <img src="https://jaspervdj.be/images/2011-05-09-monitoring.jpg" alt="Thomas &amp; me monitoring the batons">
<figcaption>Thomas &amp; me monitoring the batons</figcaption> <figcaption>Thomas &amp; me monitoring the batons</figcaption>
</figure> </figure>