tag:blogger.com,1999:blog-69835184911279279372024-03-06T03:47:29.046+01:00Jasper's blogJasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.comBlogger115125tag:blogger.com,1999:blog-6983518491127927937.post-32351097324333689642023-11-29T23:01:00.002+01:002023-11-29T23:01:44.084+01:00Return of the Christmas Tree Project (ch 5): More LEDs!<p>It's been two years since <a href="https://blog.jasperhorn.nl/2021/12/christmas-tree-project-step-1-materials.html">I started my Christmas tree project</a>. Last year, I didn't work on the project at all, but this year, we're back in full force. And I bought more led lights to put in my tree. In fact, we'll be doing five times as many LEDs as before!</p><p>Because it had been so long and because I had moved since I worked on it last, the first thing was to get the project up and running again. And the first thing to work on was my Raspberry Pi. Unfortunately, the sd card in the Pi that I was using before had gotten corrupted.</p><p>I spent quite a bit of time looking for my card reader, but all it did was confirm that the sd card did not work at all. Luckily having found the card reader also made it very easy to get a new sd card ready. The next thing was to find the code. It wasn't on my desktop, so it had to be on my private git server. However, that server failed a while ago, so I had to track down the storage I used in that server. This took some effort, but I found it eventually. And then it turned out that the code wasn't on there either...</p><p>The code had apparently only been on the sd card, so I would have to write it again. The amount and complexity of the code was such that that was feasible enough, but it was still a bummer. I took a look at the code from the project that had been the inspiration for this one to look at what libraries had been used. Looking at that repository made me remember that I had shared my own code with the world as well. And that was where the code was! You see, I only kept my private projects on my private git server. My public projects were all on GitHub. And indeed, the lost code was <a href="https://github.com/JasperHorn/christmaslights" target="_blank">right there on GitHub</a>.</p><p>It seems that I did have some code that was only on the sd card. In particular, I seem to be missing the three dimensional effects that I wrote. One was a rainbow effect and that should be easy enough to recreate, especially because the one effect that I still have does have much of the general structure I'd want to use. The other effect was an effect that never really worked that well, and isn't really that much of a loss.</p><p>With the pi running again and the code being back in my possession, I could get to working on the thing again. I was unsure if I would be able to run all the LEDs from one power source, so that was the first thing to test. I connected all my new LEDs and set them to white light at 25% brightness.</p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpMZyt0TvgsB7eHaZ-T6fPiGqTxB9t8cROBA3rD9pBULNUdFwHV8_JSWTlVtMSihPvU6qnQTfl_IT_Fr9hXrbKFGUnnndICWgtWdAjoc04t0lqKu7hGiw7Te-mvHMH0_d2o-7rTfUkixV2SVoo8di2UJulr_OLNHNWVe585dX5w7F-QCm0RKwsqfPLQwRo/s4624/IMG_20231128_162218.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="2430" data-original-width="4624" height="168" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpMZyt0TvgsB7eHaZ-T6fPiGqTxB9t8cROBA3rD9pBULNUdFwHV8_JSWTlVtMSihPvU6qnQTfl_IT_Fr9hXrbKFGUnnndICWgtWdAjoc04t0lqKu7hGiw7Te-mvHMH0_d2o-7rTfUkixV2SVoo8di2UJulr_OLNHNWVe585dX5w7F-QCm0RKwsqfPLQwRo/s320/IMG_20231128_162218.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Several interpretations of white...<br /></td></tr></tbody></table><p></p><p>To be fair, all lights turned on and all of them being white is the worst case. But, 25% brightness is roughly 75% below the worst case. And the results were pretty bad. However, this looked like the power adapter was handling it just fine. Instead, it looked like voltage drop to me, which is not related to the adapter but to the lights and the wires between them.</p><p>So, I rigged up a quick test and saw that indeed, things looked a lot better if I connected the power source to each string of lights separately, even if it was still the same single adapter. The light strings do have extra wires that help you do this, but the bare wires aren't too easy to use. So, I decided to take some of my Dupont cables, cut them in half and splice the halves onto those wires to make them much easier to use. Using these tools and this skill set was a lot of fun, which surprised me because I had forgotten how much I liked doing this.</p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="display: inline-block; margin-left: auto; margin-right: auto; padding: 0px;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6r3HXzSw2eLsjLRoAQHuuTTGbyS1qsuzdnH6b3xUlIYBjWBSqz7hLYsdIMfPwnCzepY8uvEuQHDdpITdeIR9h85tv7ekTI_-PrzXhBFIDAQHh5OrIq0pxjAKFJydWBiRiLX3aro6U6oT1PvMDVejkmFwQpsm66EPvOk5ouQAPr2tDI_UXW8ITCWWFSqPA/s2975/IMG_20231129_223209.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="2975" data-original-width="1856" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6r3HXzSw2eLsjLRoAQHuuTTGbyS1qsuzdnH6b3xUlIYBjWBSqz7hLYsdIMfPwnCzepY8uvEuQHDdpITdeIR9h85tv7ekTI_-PrzXhBFIDAQHh5OrIq0pxjAKFJydWBiRiLX3aro6U6oT1PvMDVejkmFwQpsm66EPvOk5ouQAPr2tDI_UXW8ITCWWFSqPA/s320/IMG_20231129_223209.jpg" style="padding: 0px;" width="200" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">A bit of solder<br /></td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="display: inline-block; margin-left: auto; margin-right: auto; padding: 0px;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxZ7HQKTLohR-ZnqxKbEQb28-wrq1ekF-_PLLV5zs3j6LCRo79cNecl-rThpLGjpBPx3kcBYaQRjK7MWa2JoBON83svpBwgJMKFFLPI0dSFn62nIxRC5L1FVHc5zxezINDRGFAa-1iQYtoLPZz11SZvNeJjy8Qp9I1Y8tWy4Hxxza1rep8GFNdy7KB7esO/s3184/IMG_20231129_223232.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="3184" data-original-width="2107" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxZ7HQKTLohR-ZnqxKbEQb28-wrq1ekF-_PLLV5zs3j6LCRo79cNecl-rThpLGjpBPx3kcBYaQRjK7MWa2JoBON83svpBwgJMKFFLPI0dSFn62nIxRC5L1FVHc5zxezINDRGFAa-1iQYtoLPZz11SZvNeJjy8Qp9I1Y8tWy4Hxxza1rep8GFNdy7KB7esO/s320/IMG_20231129_223232.jpg" style="padding: 0px;" width="212" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Some tape<br /></td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="display: inline-block; margin-left: auto; margin-right: auto; padding: 0px;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghjpxIbccuxrvCTvB3g5v7LLC3NpnapBKqbsFQwgtUyOCPvJAgKvG2T7AZX3C9xwySS0PBnSIYNO6-Hfwhlq9DP99ZnH3-N159KquYWNZnbBv34SgPpxP5X_-EL7CUY9kWfkmibeljLSnzTEyvC2OxKw3ZtWMNAXk5IIdLWZqkH4U9vu2SfrZaPcz6n0zu/s3116/IMG_20231129_223258.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="3116" data-original-width="2199" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghjpxIbccuxrvCTvB3g5v7LLC3NpnapBKqbsFQwgtUyOCPvJAgKvG2T7AZX3C9xwySS0PBnSIYNO6-Hfwhlq9DP99ZnH3-N159KquYWNZnbBv34SgPpxP5X_-EL7CUY9kWfkmibeljLSnzTEyvC2OxKw3ZtWMNAXk5IIdLWZqkH4U9vu2SfrZaPcz6n0zu/s320/IMG_20231129_223258.jpg" style="padding: 0px;" width="226" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">And some more tape<br /></td></tr></tbody></table><br /><p></p><p>I added a breadboard to map from one input coming from my micro-usb breakout boar to multiple wires going to the different strings. This actually made for a surprisingly good setup.</p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbN8ya9vToeL84f8tdylDChzbh0mc9ezhqy6afJeJcsPKOSrWKqdZW5h-mlBC6Svar21GgJ0sR-z_nrDy7KKHmqBF67p4N917sZ-4TW2FZwAAxq94nLT6awWYhRQLkSIiv8C3kqcIZtTtSACvsu5FphL6vUPwHkDlnmVF88Qqlg1a-H3yJsFGS_kNcOl_p/s4069/IMG_20231128_190257.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="2649" data-original-width="4069" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbN8ya9vToeL84f8tdylDChzbh0mc9ezhqy6afJeJcsPKOSrWKqdZW5h-mlBC6Svar21GgJ0sR-z_nrDy7KKHmqBF67p4N917sZ-4TW2FZwAAxq94nLT6awWYhRQLkSIiv8C3kqcIZtTtSACvsu5FphL6vUPwHkDlnmVF88Qqlg1a-H3yJsFGS_kNcOl_p/s320/IMG_20231128_190257.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Now, that's what I'd call white<br /></td></tr></tbody></table><p>I also worked a bit on my code. I took some of my old one-dimensional code and cleaned it up. I also wrote a simple rainbow effect. It's not as good as an effect that includes a tree and coordinates of the LEDs, of course, but it's still quite nice. And I did use some of the lessons I remembered from making the rainbow effect for in the tree two years ago.</p><p></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dyR7GEQsA1tI5QO1AgReHJRr2JVJEelKNoyJhGQpo5ADVAvZQ3VyBGuhjTT8gNmEWxD7X1xuHSgDkk1G5Mepg' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><p></p><p>The next step will be to try to cram all these LEDs into my small tree. (I'm at half the number of LEDs Matt Parker used, but my tree is also a lot smaller.) And then I can start using the most essential and complex code I wrote last year to map all the LEDs. I'm happy I won't have to rewrite that code!<br /></p>Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-30161795664732356552023-09-30T16:25:00.000+02:002023-09-30T16:25:01.275+02:00Unopiniated variable binding<p>I'm a bit crazy. I like vanilla front-end work. I just like it when you do not need a compile step and what you've written is what is executed. I've always been like that, even when it made a lot less sense than it does right now, like in the times of Internet Explorer and browsers having lots of incompatibilities and some not supporting standards well at all.</p><p>In the light of using vanilla javascript, seeing the technology making progress is really nice. Sometimes, that means that you get shiny new tools built into the browser. Other times it means that you no longer need a library to do what you were already doing. I loved learning about <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector" target="_blank">document.querySelector()</a>, as it covered one of the two things I used jquery for. The other thing I used it for was later covered by the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API" target="_blank">fetch api</a>. Learning about <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties" target="_blank">css variables</a> was far more exciting to me than learning about the css preprocessors of the time.</p><p>When I do use a framework (for personal projects), I like using something that isn't very opinionated. The big front-end frameworks generally tell you how to set up your whole project. I prefer something that I can introduce in that one place if I want. And if the project grows big enough, I will refactor it to have a better structure. I probably end up with something similar to what the frameworks prescribe. Or I might end up with something slightly better or a lot worse. In any case, it'll probably be more tailored to my project.</p><p>In the past few years, my goto front-end framework has been <a href="http://Knockout.js" target="_blank">Knockout.js</a>. When I was first introduced to it at a previous job, I thought it was just another AngularJS with a slightly different syntax, but in the years after that I started appreciating it for how unopinionated it was. There was one major part of its usage that I didn't like, but adding <a href="https://github.com/SteveSanderson/knockout-es5" target="_blank">knockout-es5</a> solved that. The es5 library doesn't work well with knockout's component functionality, though, which is essential once you start refactoring. So I wrote a script that worked around that. The script was a quintessential hack: it does some pretty ugly manipulation and leaves things in a state where it usually works. Together, all of these basically gave me what I wanted: unopinionated variable binding.</p><p>The time to let go of knockout has been steadily approaching for a while, though. There really hasn't been much development of the project for years. The project's website has had trouble several times recently. There is <a href="http://tko.js" target="_blank">tko.js</a> which aims to be the next version of knockout, but development seems stalled in an alpha state and it doesn't actually address most of what I want to see changed. I just don't really see a path towards not needing the knockout-es5 or my own script on top of it, and both of those feel more like temporary fixes than true solutions. For projects that I expect to live for a long time, it just doesn't seem to be sustainable enough to keep using it.</p><p>Recently, I have been working on a very old project. This project is built around the google maps API. Because of that, it doesn't actually do a lot of html manipulation. So, even when redoing most of the project six years ago or so, I just did that little bit of manipulation in vanilla javascript. But now I'm adding features, and some of those do require a lot more manipulation.</p><p>That sent me into a bit of a panic. Not using a framework was starting to weigh down the project. Using knockout doesn't feel like a sustainable option, but other frameworks are much more opinionated than I like. Even the ones that are minimal and/or proclaim not to be opinionated require you to work in components and thus don't just drop right into your project to do that one task you need from them. I felt like I was at a crossroad with none of the paths leading where I wanted to go.<br /></p><p>I think I have a solution, though. I started looking at <a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_components" target="_blank">WebComponents</a> recently. It's a collection of three javascript APIs that are mostly used by frameworks. That's because using them without one is complicated and doesn't really manage to compete with using a framework. I have been using two of those APIs to prototype what is basically my own framework. It provides the unopinionated variable binding that I was looking for and not much more than that.<br /></p><p>It's only some three hundred lines of code, but it's able to bind variables to text, attributes and events, and it's able to repeat parts of your html or remove them. About a third of the code is dedicated to a solution for tables, as the default looping solution clashed with the way those are special in html. And because it is built on top of WebComponents, the system to upgrade to when refactoring is built right in.<br /></p><p>There's definitely more to be done. When you use the prototype incorrectly, it doesn't tell you what you need to change. There will probably also end up being more things that the library needs to do to. But I do believe this pretty small prototype already covers most of what I want.<br /></p><p>I compared total byte size of my prototype to <a href="http://Alpine.js">Alpine.js</a> (just because it came up in a search for small frameworks) and the byte sizes are about the same. That's more impressive than it sounds, because we're comparing a minified and gzipped version of Alpine with the plain sources of my prototype. While size comparisons aren't actually that useful, size does matter. It matters in how sustainable maintaining the code base is. It's also a part of how close it is to vanilla javascript, which is a part of how it stays unopinionated and how it can interoperate with existing codebases and other frameworks. For neither of those it's the whole story, but it is an important part of it.<br /></p><p>I think I'll be using this for the time being. And I'm starting to think that a version of this may end up being my tool of choice for a long time to come...<br /></p>Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-87196868656517898472021-12-18T03:41:00.001+01:002021-12-18T03:41:20.277+01:00Christmas Tree Project Step 4: Improving the Mapping<p><a href="https://blog.jasperhorn.nl/2021/12/christmas-tree-project-step-3-mapping.html">Last time</a>, I got the first 3D mapping of the LED coordinates. I wasn't entirely happy with the results, though, so it was time to improve them. So, I started by working on code that I could use to verify the results of the scan. The idea was to turn a few LEDs on at a time, so you can visually verify that those LEDs are in the right order on one of the axes. However, while the y axis is completely obvious, the x and z axes aren't visible in the real world, so that was the first thing I did: create a gradient from red to blue on one of the axes so you could identify the axis.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhnyl61dE5trY7MKx1TEC8K-DannPM3zAFrZp8QYykD4ZdBEBee0A4DxIRd1FB9bgrK_AYNGiN5plATtmai04mUreT5h_IGYGweJJ_LcUBGdJrWbqeaKU3PYmuexTBB_eTGLBhWpoO-ryJVuTqYNrRsBnyeCxNd7Sj-JAg3cqla52M_dDHzgSivBxq3cA=s3021" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="3021" data-original-width="1553" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEhnyl61dE5trY7MKx1TEC8K-DannPM3zAFrZp8QYykD4ZdBEBee0A4DxIRd1FB9bgrK_AYNGiN5plATtmai04mUreT5h_IGYGweJJ_LcUBGdJrWbqeaKU3PYmuexTBB_eTGLBhWpoO-ryJVuTqYNrRsBnyeCxNd7Sj-JAg3cqla52M_dDHzgSivBxq3cA=s320" width="165" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">The x axis<br /></td></tr></tbody></table><p>From there, I turned the lights green one by one according to their order on that axis. My original idea was to turn just the light after it and the light before it on, or perhaps a few, but I ended up just turning everything on, with the ones that were before the green LED being red, and the ones after it blue. Then, you could press either space if the LED appeared to have the right coordinate when it came to that axis, or x if it didn't. The software would then remember the incorrect coordinates and write them to a file when done.</p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi3VfbR4CivjPst5FFSnA40wo32y6PFVSuPTq_hvQEx4j72rgk8r6X1cGfYhZ-DJb8jhVXfuFnh15aHCdwt3O3AyrmMqa8WsaaNtN4wZgYTjx22WwdgfAnmjPWSeVKXW30HJx53LOkglh2jF9vWHfR62SemXv98UakFnm6YLbcs6GVrdhWuUMO9BHFSRQ=s3112" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="3112" data-original-width="1722" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEi3VfbR4CivjPst5FFSnA40wo32y6PFVSuPTq_hvQEx4j72rgk8r6X1cGfYhZ-DJb8jhVXfuFnh15aHCdwt3O3AyrmMqa8WsaaNtN4wZgYTjx22WwdgfAnmjPWSeVKXW30HJx53LOkglh2jF9vWHfR62SemXv98UakFnm6YLbcs6GVrdhWuUMO9BHFSRQ=s320" width="177" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Verifying the green LED<br /></td></tr></tbody></table><p></p><p>A modified version of the mapper can now also be used to scan only the incorrect coordinates. In that case, it will read which LEDs need to be rescanned from the file. It then scans every such LED from all four directions, but only updates the coordinate components of the axes marked as incorrect. With those changes made, I got back to the physical tree and got working on my new coordinates.</p><p>I decided not to use my previous mapping results, but start over instead. I had marked the position and orientation of the tree and the camera stand hadn't moved, but the camera wasn't in it in the exact same way. The way the webcam was mounted on the stand was a bit improvised and the webcam was borrowed from my work setup, so it hadn't stayed in the stand and the result was that I didn't put it back in the exact same way.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEht5suV8uBCCQz68JonFr8kQoQ1isKPH9ftAYKLHwK4aA3sQ197BOlArqad1ZrhtVpO-uqORoIGQjpAJvThPCLhcTmFhMKgIEucJkE7mRhHGfZTOXweEgzf9vE2YybkiZliHP5me6RoLIvQtqW9dUY0KkqMN0k0LtECBCBq9Ddr_8XjQO2ATu4oy-1Veg=s2729" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="2729" data-original-width="2365" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEht5suV8uBCCQz68JonFr8kQoQ1isKPH9ftAYKLHwK4aA3sQ197BOlArqad1ZrhtVpO-uqORoIGQjpAJvThPCLhcTmFhMKgIEucJkE7mRhHGfZTOXweEgzf9vE2YybkiZliHP5me6RoLIvQtqW9dUY0KkqMN0k0LtECBCBq9Ddr_8XjQO2ATu4oy-1Veg=s320" width="277" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Improvised does not mean bad!<br /></td></tr></tbody></table><p></p><p>So, I took a few pictures with the new setup to get the tree properly in frame again and then started scanning. I alternated between judging the coordinates and rescanning them several times until I ended up with something that I was happy with.</p><p>Deciding what LED was wrong and what wasn't always obvious. When two LEDs are in the incorrect order, this method just isn't great for determining if the first one or the second one was wrong. When there are more LEDs involved, it gets even more complicated. I did develop a bit of a feeling for it, I just chose for rescanning more than necessary in a number of cases and I restarted the verifying process without saving the results a number of times. I could probably improve things by allowing you to go back in the LED order as well, so I will probably do that if I end up mapping another tree.<br /></p><p>I was also important to learn that the result just wasn't going to be perfect. Slight changes in perspective can have big results, and we're already combining several perspectives into one coordinate. Whenever two LEDs were a close call, it was best to just go with whatever result the scan had. The mapping wouldn't be perfect, but it was never going to be perfect and as long as it's close enough, it'll look good, especially considering that the viewer won't have a fixed perspective either.</p><p>Finally, there was one LED left that just didn't get a good scan for its Z coordinate. I checked the photos and saw that it was indeed on, but just wasn't visible from either of the two opposite sides. I decided to just set the coordinate manually, so I lit it up as well as some LEDs around it. I identified which were its closest neighbors and gave it a coordinate between them, which I manually put into the output file.</p><p>With the new mapping, the next thing to do was of course to run the test effect again. I think the actual changes were relatively small, but the whole effect looks a lot more smooth to me...</p><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dwLmIO2fthCVAhG-2eE9qm6p5b-GsxfIR_-oO4bBUI8L7H0Sftbeq1sGx0NpXXvFVut8rcuCdhwTIRv71NkwA' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><p>(Well, I promise it does in person, at least.) <br /></p><p>As before, all the code I wrote for this project can be found <a href="https://github.com/JasperHorn/christmaslights">on GitHub</a>.<br /></p><p>Is the this the end of this project, then? Not just yet. The basic setup is done now, but I do still need to run effects on the thing. I am planning to both write some of my own and run the ones submitted to project that serves as inspiration for this one...<br /></p>Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-62897567148347513442021-12-14T22:47:00.003+01:002021-12-15T03:09:56.562+01:00Christmas Tree Project Step 3: Mapping<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi_9WjMgqcdFQic2dMXyQe33EjBR1r0P2G4JxRNlHaQuBke-_hRUd--nALoLdhf03tlaZBaNmEXe5J3m1fLcVXB9cZUI3NRGn-dWjASUMvXx6pmzh1ByGMmvCIgIpBuNZatFpD8ucm6F4PLUPKi4FZruTH7qUrksAKumHZ9JGPRax60TBrsejeKhWfG9g=s3291" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="3291" data-original-width="1869" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEi_9WjMgqcdFQic2dMXyQe33EjBR1r0P2G4JxRNlHaQuBke-_hRUd--nALoLdhf03tlaZBaNmEXe5J3m1fLcVXB9cZUI3NRGn-dWjASUMvXx6pmzh1ByGMmvCIgIpBuNZatFpD8ucm6F4PLUPKi4FZruTH7qUrksAKumHZ9JGPRax60TBrsejeKhWfG9g=s320" width="182" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Spoilers of what I pulled off<br /></td></tr></tbody></table><p>With the <a href="http://blog.jasperhorn.nl/2021/12/christmas-tree-project-step-1-materials.html">hardware gathered</a> and the <a href="http://blog.jasperhorn.nl/2021/12/christmas-tree-project-step-2-lights.html">lights working</a>, the next step was to put the lights in the tree. I took a bag of zip ties that I think I bought with the intention of using the for cable management in my computer (I bought way too many, though). For the most part, this was pretty uneventful, but there were a few things that I would do different if I'd do this again. The first is that I would plan it more carefully and use more zip ties and attach in more places. The second is that I dislike the colored wires between the lights, so I think I would sleeve them in something green to make them stand out less.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEinWhW6VvB23UKlBDc10KzTogZbe0LeoWcTi6jZLLLzga7YPq5PAPK7ZlXEtBN9Opr-euiScpsBina6To7aKOlbaLfj2aQnczOM9rbpWruJOY2ehW1YvCvDZc3nHM4jLUT_Vk_ku8T7Ni7PelRM-UK_lioGRDQjsuhXwy8w5f6W4Iggpft4VR4DycfLbA=s3626" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="3626" data-original-width="1999" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEinWhW6VvB23UKlBDc10KzTogZbe0LeoWcTi6jZLLLzga7YPq5PAPK7ZlXEtBN9Opr-euiScpsBina6To7aKOlbaLfj2aQnczOM9rbpWruJOY2ehW1YvCvDZc3nHM4jLUT_Vk_ku8T7Ni7PelRM-UK_lioGRDQjsuhXwy8w5f6W4Iggpft4VR4DycfLbA=s320" width="176" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">The colored wires do stand out...<br /></td></tr></tbody></table><p>I also wanted wifi on my raspberry pi, so I wouldn't have to run a network cable to it. As I realized last time, the device itself doesn't have wifi hardware, so I went looking for wifi adapters. I found two. Both are old and were probably cheap, but they were worth a shot. The first adapter didn't get recognized by the Raspberry Pi, but the second one worked well and after some messing with the configuration, I was able to freely move the device anywhere I had power.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiSkAjgL38k1gKiFYRkl2Gn93RTEY8s26pzIKbdG8uqD8tbNvQ-Nls6wlXFfHx58adMHH-FJ1BjhT_O233K8l4qAindKLKoohu75XGbyHGf-vyNl2_ji0iDhvwg2qAhZik_OlB6-X159QIEZfgZEyrZEq49DVeQbLZsAFofwlkGr73i1AXdsF6-dPjGmA=s2824" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="2824" data-original-width="2419" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEiSkAjgL38k1gKiFYRkl2Gn93RTEY8s26pzIKbdG8uqD8tbNvQ-Nls6wlXFfHx58adMHH-FJ1BjhT_O233K8l4qAindKLKoohu75XGbyHGf-vyNl2_ji0iDhvwg2qAhZik_OlB6-X159QIEZfgZEyrZEq49DVeQbLZsAFofwlkGr73i1AXdsF6-dPjGmA=s320" width="274" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Getting wifi running<br /></td></tr></tbody></table><p>The next part was the real challenge: mapping the LEDs to three dimensional coordinates. I did actually send an email to Matt Parker to see if he could share the code he used for this, but unfortunately, he didn't have it in a usable form. Not wanting to wait, I started working on my own.</p><p>Getting the camera to take a picture was both easy and hard at the same time. Basically, copying some code from the internet and saving an image wasn't that hard. However, there were basically three libraries to choose from, and none of them was exactly what I wanted and I definitely didn't like that you have to install non-python dependencies for each of them. In the end, I went with pygame, which uses sdl2 under the hood.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg2aie8bhc0aL7TCA5VK9-MDnUUi96FzbEAySHSP89DokKSJxIp6I5AXGsNZOdpR6tO9v8dC0EZ5KldT4m77D-iSn-agUK_VsDv_-_zLo5mEWuPlt8E1YrFtWMqSXrpu8e7YfPpPZVWHNOpmqDz6OX3gf5pmuBp_V53imMtGA0_Zqqfn9IXbLdlTVN7QQ=s3874" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="3874" data-original-width="1340" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEg2aie8bhc0aL7TCA5VK9-MDnUUi96FzbEAySHSP89DokKSJxIp6I5AXGsNZOdpR6tO9v8dC0EZ5KldT4m77D-iSn-agUK_VsDv_-_zLo5mEWuPlt8E1YrFtWMqSXrpu8e7YfPpPZVWHNOpmqDz6OX3gf5pmuBp_V53imMtGA0_Zqqfn9IXbLdlTVN7QQ=s320" width="111" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">My complete mapping setup<br /></td></tr></tbody></table><p>There were also several issues with the camera that I had to solve once I started using it more extensively. The first was that the first photo would often have different brightness at the top than at the bottom, with a clear dividing line about a fifth from the top. However, this didn't show up at first, as it starts happening when you run the program more than once. I solved this by taking an image from the camera on startup, discarding that and then working only with the images taken later on.</p><p>The next problem was something I started noticing when I was working on the mapping: the photos taken were often from well before I gave the command, sometimes by ten or more seconds. I got around this by re-initializing the camera every time I wanted to take a picture, as then the picture would always end up being current. To prevent the previous brightness issue, though, I had to discard an image each time I did this.</p><p>With the camera working, the next step was to start identifying the LEDs and their location. The idea was simple: turn on a LED, take a picture, identify the brightest pixel in the picture and repeat this for the next LED. I also added a step of drawing some lines on the picture, so I could see the result.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEihTY2mX4K2OPRIHGcUGmTOQ8Tq7HmVsspMCZ6d8o6-yuwOYvjsmdOEW5MBvSTLOipiTLqaKLdNX-Lc1f3vl4HxsvEENR9wxJigTvodp-bdpQJvz7m6IyAWGS6ILWERRKBtyA2r-YXodtXpwNam8NPh8y5gv6_bddRW_KjlLDVzT5fHLMzeUg4apzoInw=s1280" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1280" data-original-width="720" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEihTY2mX4K2OPRIHGcUGmTOQ8Tq7HmVsspMCZ6d8o6-yuwOYvjsmdOEW5MBvSTLOipiTLqaKLdNX-Lc1f3vl4HxsvEENR9wxJigTvodp-bdpQJvz7m6IyAWGS6ILWERRKBtyA2r-YXodtXpwNam8NPh8y5gv6_bddRW_KjlLDVzT5fHLMzeUg4apzoInw=w181-h320" width="181" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Pretty orange lines<br /></td></tr></tbody></table><p>The first result wasn't bad for some of the LEDs, but just going with the brightest pixel didn't quite work for others. So, I changed my code to take the average of several bright pixels. My first implementation was quite bad and allowed a gradual increase in brightness to shift the average towards the top of the image. But even after fixing that, the results weren't to my satisfaction at all. So, I decided to take a different approach. Instead of looking for the brightest pixels, I just look with pixels that are above a hardcoded brightness.</p><p>For the most part, that gave pretty good results. However, when a lot of light was being reflected, the reflection of the LED would sometimes throw off the calculation. The way I solved this was by lowering the brightness of the LEDs. Originally, I had assumed that full brightness was a good idea, but in the end about 20% brightness gave better results because there were far fewer reflections that were bright enough to be taken into account.</p><p>Next, it was time to do multiple scans and combine the results. Doing multiple scans was straight forward: just put the code in a function and all that function four times, with a bit in between where tell the user to rotate the tree. For combining, I gave each mapping result a score, based on the brightness and on how many pixels were involved. Then, I took the y coordinate from the highest score on any of the four scans, the x coordinate from the best among the front and back scans and the z coordinate from the best of among the left and right scans. And those results I printed to a file.</p><div class="separator" style="clear: both; text-align: left;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='202' height='168' src='https://www.blogger.com/video.g?token=AD6v5dwldzC-fOE6sZcauupKYTVm9pIGeZvcR_Opij46mEf7xjxvbdjfRwOCnSUfP_epjVnRf7M7Sj-tA7KJFuJZOw' class='b-hbp-video b-uploaded' frameborder='0'></iframe><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='202' height='168' src='https://www.blogger.com/video.g?token=AD6v5dwErbXIdVtGeWq24r5yx1biE5n24w8rwzWjQ8nNAeK4lf-56mYhjDTCbqJySpsMnp6fl_Ihq-DyhFKHCPMkvQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='202' height='168' src='https://www.blogger.com/video.g?token=AD6v5dxejLPOB29iSUiC5-roLOha2cEySmT-ClD8JVKkJdN0p4BDUDRHivSu-9cAcVOlp40vg5ei-ToaB3HWdA9eIw' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><p>In order to check the results, I quickly threw together some code that read the file (this was basically a copy-paste job from Matt's code) and then changed the color of each LED in order of either the x, y or z portion of the coordinate. And I must say, I'm not at all displeased with the result. It's not perfect, but it's quite good, especially if you consider this was based on the first time I did a full scan of the tree.</p><p>There are still LEDs that pretty clearly have inaccurate coordinates. So, that's what I'll have to do for next time: build the tools to see what LEDs are wrong and correct those...</p><p>Oh, also: my code is now <a href="https://github.com/JasperHorn/christmaslights">on GitHub</a>.<br /></p>Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-69348220318438120342021-12-05T18:02:00.002+01:002021-12-05T18:39:43.700+01:00Christmas Tree Project Step 2: The Lights<p><a href="http://blog.jasperhorn.nl/2021/12/christmas-tree-project-step-1-materials.html">Last time</a>, we left off with all supplies gathered. Now, it was time to wire things up and get the lights lit up in some pretty colors. First, though, I had to solder headers onto one of the breakout boards. Soldering isn't something I'm great at, but this seemed like a manageable task.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOcxwtGINnRXkaquYXlI2zBVbemkJp-5g4C_dSOBkYVflkZOfBzIM61rzpDra0pVbxcg1w9fHOII3MwJooZZTUSUfyJJdZsdwKSPvYfa4CSJARglRGvCMfopUQio-y2Kbj12OD_JgMfpDo/s1029/IMG_20211204_165720.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1029" data-original-width="756" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOcxwtGINnRXkaquYXlI2zBVbemkJp-5g4C_dSOBkYVflkZOfBzIM61rzpDra0pVbxcg1w9fHOII3MwJooZZTUSUfyJJdZsdwKSPvYfa4CSJARglRGvCMfopUQio-y2Kbj12OD_JgMfpDo/w147-h200/IMG_20211204_165720.jpg" width="147" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Headers</td></tr></tbody></table><p>With that behind me, I could start wiring things up. My first try was to just connect the power wires to the lights. But the result was nothing. However, I didn't know if this was because I had made a mistake, or that they just wouldn't light up until there was a data signal telling them to do so. So, I took out a Raspberry Pi that wasn't doing anything at the moment. After spending way too much time on things that should have been simple (like trying to configure wifi on a device that doesn't have wifi), I managed to get things up and running. <br /></p><p>Here, I used a little bit of a trick. In order to make it work. In order to make two power supplies work together nicely, you need to wire up the Grounds. However, the Dupont cables I was using didn't have an easy way to go from the breakout board to the lights and to the Pi. However, the Pi has multiple Ground pins, which are wired up internally, so I connected the Lights to one of them and breakout board to another, basically letting the power flow right through the Pi. Unfortunately, nothing happened yet again.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsXHUMyOKWy3mussB5LFF2pJwL20VX-2jDfpOTuFxVhEhyphenhyphenGaPksM5hRPiufH1J0hR5uYXFYFUsD4ZNrPr4Ah7L0pQFDJNfkZkOmJZlbP4QvUONABmWzmuHtxrOxUvEupEApmLE-DrPysT8/s2048/IMG_20211204_171126.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1092" data-original-width="2048" height="171" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsXHUMyOKWy3mussB5LFF2pJwL20VX-2jDfpOTuFxVhEhyphenhyphenGaPksM5hRPiufH1J0hR5uYXFYFUsD4ZNrPr4Ah7L0pQFDJNfkZkOmJZlbP4QvUONABmWzmuHtxrOxUvEupEApmLE-DrPysT8/s320/IMG_20211204_171126.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Nope</td></tr></tbody></table><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvNHD1Az3ca4R26FyINLcNSdQMD8-N-RC5ERlcmBZz0EjM1X20K3L_JxnpExUAbr1DQFynugbWjRO4rPWhm-rFBo9Wn2-r06evxxd-Rxv5e6crydoDuUnK0wjPyBJsDJjxS7na-dFcTdr8/s2048/IMG_20211205_161630.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1614" data-original-width="2048" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvNHD1Az3ca4R26FyINLcNSdQMD8-N-RC5ERlcmBZz0EjM1X20K3L_JxnpExUAbr1DQFynugbWjRO4rPWhm-rFBo9Wn2-r06evxxd-Rxv5e6crydoDuUnK0wjPyBJsDJjxS7na-dFcTdr8/s320/IMG_20211205_161630.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Still nope<br /></td></tr></tbody></table><p>Now, it was time to do some debugging. I wasn't even sure if I had gotten the right one of the two connectors, so I messed around with that for a bit, but to no avail. Then, I realized that I could just get rid of the power adapter and breakout board for a bit. As long as the power draw wasn't too high, powering the lights from the Pi's 5V rail shouldn't be a problem. And indeed, I got things to light up!</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBaTOeTzRFth4sxiOZhNfkUg7oVqqE76zs3v28rufmNJF645bbPxCb8MWH7JKxdStcZ97Mij6C-5FUocf-0dhgA2SQz12dgHjztH4gtxrbGWbaJdt_cpUiwwvWdDfRBmgU60cGRFJZztsr/s2048/IMG_20211205_162016.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1533" data-original-width="2048" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBaTOeTzRFth4sxiOZhNfkUg7oVqqE76zs3v28rufmNJF645bbPxCb8MWH7JKxdStcZ97Mij6C-5FUocf-0dhgA2SQz12dgHjztH4gtxrbGWbaJdt_cpUiwwvWdDfRBmgU60cGRFJZztsr/s320/IMG_20211205_162016.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">My one LED program works<br /></td></tr></tbody></table><p>This meant that the Pi, the code and the wiring were all good. The problem had to be in the adapter or the breakout board. I should probably have gotten out a multimeter and started measuring. I decided to try something else: powering the Pi from the breakout board. This could definitely potentially damage to Pi, I went with it anyway. And I did see that the Pi's power LED only powered up when I was touching the ground pin on the breakout board. Apparently, I had done poor job soldering and there wasn't a good contact there...</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyQ0jkHSgmS3NgZ7D7X89HrVtypFbHOod7f4s-0C8UVkEB9MzN5pp6i9mqIuHiWnENrGvYHnnahOzd4oFYC8_9ssO_yePNWf3Z36g4uC0bk5hbE2jQ0FC-ra1pasGzGUecxMYcwAdPnUg9/s2048/IMG_20211205_175105.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1485" data-original-width="2048" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyQ0jkHSgmS3NgZ7D7X89HrVtypFbHOod7f4s-0C8UVkEB9MzN5pp6i9mqIuHiWnENrGvYHnnahOzd4oFYC8_9ssO_yePNWf3Z36g4uC0bk5hbE2jQ0FC-ra1pasGzGUecxMYcwAdPnUg9/s320/IMG_20211205_175105.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Green across the board!<br /></td></tr></tbody></table><p>After making sure the soldering job was done properly this time, I hooked things up again. And I got the lights to turn on this time. It seemed that the hardware part of it was done now. And because programming is what I feel comfortable doing, I was quickly writing several effects. These weren't actually getting me closer to my Christmas tree goals, but I liked doing it nonetheless.</p><p>The effect that I liked the most was one that picked a random color for the first LED, and another color for the last LED without changing the last LED just yet. Then, it gradually moved through the lights in the order of the wire to turn them a color that was slightly closer to the color for the other end each time. Once done, it would pick a new color for the first LED, and do the same thing on the way back. I wanted to include a video of that happening, but the effect didn't show too well on video and there were also some interference patterns causing lines of darkness. So, instead, a picture of each LED in a different random color will have to do.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxdL_emXAVvi2InCFL32rbmzPze1j81cg3U3k21K63k153VnRU7RpgLuYU0FocB1OmGwrH-qLN993gmTRwBZlMb2Prwry76xWSf0s24CU00SFcAAK3sfGaIqf08zxP_z7FT91vjHY5vJPO/s2048/IMG_20211205_165004.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1536" data-original-width="2048" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxdL_emXAVvi2InCFL32rbmzPze1j81cg3U3k21K63k153VnRU7RpgLuYU0FocB1OmGwrH-qLN993gmTRwBZlMb2Prwry76xWSf0s24CU00SFcAAK3sfGaIqf08zxP_z7FT91vjHY5vJPO/s320/IMG_20211205_165004.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">A poor substitute, I know...<br /></td></tr></tbody></table><p>Next time, I suppose I'll have to start involving the actual tree.<br /></p>Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-88112096120702348462021-12-03T18:38:00.002+01:002021-12-03T18:38:17.912+01:00Christmas Tree Project Step 1: Materials<p>Early this year, I watched a <a href="https://www.youtube.com/watch?v=TvlpIojusBE" target="_blank">video</a> by Matt Parker on his project to make a Christmas tree with LED lights. The lights were individually addressable and he mapped their 3D coordinates so he could make effects that followed the tree rather than the wire of the Christmas lights. I was instantly inspired to make something similar. However, I didn't actually see the video until after the holiday season (which is when he posted a <a href="https://www.youtube.com/watch?v=v7eHTNm1YtU">follow-up</a> in which he runs people's code on it), so it didn't really make sense to do so at that time.</p><p>I'm not usually one who remembers to follow up on such ideas at the right time, but somehow I ended up at the video again a while ago, which was nicely just before Christmas. This time I was in the perfect position to actually make one myself.</p><p>Now, Matt has an important tip in his video for projects like this (in a much broader sense): start small cheap. That's not something I'm good at. I like to start on something really big and ambitious and work towards a grandiose goal, and not care too much about the money I'm spending on whatever new project I'm working on. It happens a lot that I then do not finish the project, but that's just something that I've made my peace with. However, I was also struggling with the fact that if I ordered the lights from an affordable place, I might not actually receive them until after Christmas. So, that's why I decided to go back to his tip and actually follow him.</p><p>I actually already owned most of the things I needed for the project. About two years ago, I was similarly inspired by a video on YouTube for another project involving Christmas lights, so I had ordered a string similar to the one Matt used, but I never ended up doing anything with them, so I still had them. I also have plenty SBCs and microcontrollers, so that wasn't going to be a problem either. The one thing I still needed was a tree.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7u6KRc9dBXolJmP09fqmGBau9xejOqKrnf5mu2ns0af8aiKRsT9zCT2htPrsOwfqEAsvYDqAmHO54mY01yZB_NqmoTi_P1MJMdNxw-cn5rIfQMYpHy_XluaL255jR_X11AJVm2EIeYdfi/s2048/IMG_20211203_145513.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1585" data-original-width="2048" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7u6KRc9dBXolJmP09fqmGBau9xejOqKrnf5mu2ns0af8aiKRsT9zCT2htPrsOwfqEAsvYDqAmHO54mY01yZB_NqmoTi_P1MJMdNxw-cn5rIfQMYpHy_XluaL255jR_X11AJVm2EIeYdfi/s320/IMG_20211203_145513.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">The lights<br /></td></tr></tbody></table><p>In the video, the simple start was one with a clothes rack standing in for a tree. I didn't want to go quite that simple, I wanted to make a "Minimal Viable Product" this year and then I can see if I want to go bigger and better next year. I did want an artificial tree, though, as I don't want to deal with the mess and I want to make something that I can just retrieve next year (if I don't end up going bigger). I also didn't mind spending a little money on a tree because it was the only part of the project that would cost money. So, I visited a physical store and bought myself a 90cm (2'11") tree.</p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheH0jd8PXcF7dNry8ots2ygjkpCGkdZrsQkSxk4X73xPnqVM0YKiI5H7_CT8DR6f_TYaYwlPW0FcLB_i3kpUcAqG74msRoTzGJr5lT3W4HIl_GoopQQKJn-Nr5xMqbNYcQSvGNWXV8Zltg/s2048/IMG_20211203_152854.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="2048" data-original-width="1088" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheH0jd8PXcF7dNry8ots2ygjkpCGkdZrsQkSxk4X73xPnqVM0YKiI5H7_CT8DR6f_TYaYwlPW0FcLB_i3kpUcAqG74msRoTzGJr5lT3W4HIl_GoopQQKJn-Nr5xMqbNYcQSvGNWXV8Zltg/s320/IMG_20211203_152854.jpg" width="170" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">A 1.5L bottle of Pepsi for scale because I didn't have a banana</td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td></tr></tbody></table><p></p><p>The next challenge was the power adapter. It turned out that that I actually had a lot more of those than I thought I did. However, almost all of them were 12V or above, and the lights needed 5V. One adapter that was 5V only supplied 1.2A. Now, the string is going to need about 3A when all lights are fully lit. I can probably get away with a bit less, but 1.2A seemed like it might be pushing it a bit. One other adapter was rated 5V and 3A which is perfect, but it had the drawback that it was a micro-usb cable that had snuck in with my barrel connector adapters.</p><p></p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglPqUwVCf9DQlTscFZcCF1F4pooEDgLzlEo1lZ1qpF8Xuu1Pjhe-N7DJLiVtoW_4D459vEQxM8jPur4aVCyMFA0u36OWVEMVU7YSja_2DNV8E9TFPV2UWuJH_Jxb-8k6cdlNTVkob85cG2/s2048/IMG_20211203_153243.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1425" data-original-width="2048" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglPqUwVCf9DQlTscFZcCF1F4pooEDgLzlEo1lZ1qpF8Xuu1Pjhe-N7DJLiVtoW_4D459vEQxM8jPur4aVCyMFA0u36OWVEMVU7YSja_2DNV8E9TFPV2UWuJH_Jxb-8k6cdlNTVkob85cG2/s320/IMG_20211203_153243.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">One clutter of adapters<br /></td></tr></tbody></table><p></p><p>Micro-usb cables have two problems. The first is that it's not at all easy to connect to the power lines unless you have a proper connector. That problem disappeared when I realized that I had some micro-usb breakout boards that I can use for this. The second problem is that they are pretty infamous for not reaching the Amperage they are rated for. However, I also had a solution for that: tools to see how the adapter does if you draw up to 2A. That wasn't the full 3A, but it would still give me a good idea if the adapter was likely to work.</p><p></p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGZlXQ_uvol37CndV7Jf3vCvqvEqtUBInr_bhFQlqgc7NpbDHp-Vak2-2pIay0BOlCd5CIa46MFGWQqGGO_RRiMTlFNGDrzIRLiwAshpzGRbq34rpNKEeZ0PE10mXfHirZYmmkOvfXaHx3/s2048/IMG_20211203_145310.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="2048" data-original-width="1067" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGZlXQ_uvol37CndV7Jf3vCvqvEqtUBInr_bhFQlqgc7NpbDHp-Vak2-2pIay0BOlCd5CIa46MFGWQqGGO_RRiMTlFNGDrzIRLiwAshpzGRbq34rpNKEeZ0PE10mXfHirZYmmkOvfXaHx3/s320/IMG_20211203_145310.jpg" width="167" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">1.8 Amps...<br /></td></tr></tbody></table><p></p><p>As it turned out, the adapter fell well short of the 3A with only about 1.8A, but that was at least an amount that is likely to work as I have all my leds go on full white. And if it doesn't work, the advantage of using the micro-usb break-out board is that I can probably find other cables to use, either in my own possession or in a store. <br /></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvwy719Jz0e6dWQIjFPkX66EZUiR07Ttf9dbEqDnVGWRRJc1UAti71jAiIaWZ2qRvrUrrKWFFCR9yR8NE4G4TIm-BwPbS6BekwhMbsX5c8wl_xdDXMxd4KbY-9PDvOd2S6soaYm4prR8RI/s2621/IMG_20211203_183413.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1092" data-original-width="2621" height="133" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvwy719Jz0e6dWQIjFPkX66EZUiR07Ttf9dbEqDnVGWRRJc1UAti71jAiIaWZ2qRvrUrrKWFFCR9yR8NE4G4TIm-BwPbS6BekwhMbsX5c8wl_xdDXMxd4KbY-9PDvOd2S6soaYm4prR8RI/s320/IMG_20211203_183413.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">The micro-usb break-out boards<br /></td></tr></tbody></table><p>With all the components collected, I guess the only thing left for me to do is to say that this story is... to be continued.<br /></p>Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-74297664331684994872019-10-08T22:41:00.000+02:002019-10-08T22:41:03.750+02:00Namespaces and the inevitability of DockerToday I learned something that I thought I'd share. I was doing some research on sandboxing certain processes in linux for a project that I'm working on when I found out about linux namespaces. These are a kernel feature that allow isolating of resources from the rest of the system. Namespaces usually govern resources that are traditionally shared over the entire system, such as users and groups, the network stack and process identifiers.<br />
<br />
The first thing that went through my mind as I read all that was that it all sounded like the things I needed. It will be a definite amount of work to get everything working the way that I want it to, but it sounds like a better than using a sandboxing or containerization tool that isn't made for what I'm trying to do and has other functionality I'll have to work around. Besides, these other tools are usually built on top of the namespaces anyway.<br />
<br />
The second thing that went through my mind was that this makes the appearance of Docker a couple of years nothing less than inevitable. The first namespace was added to the linux kernel all the way back in 2008, but it all becomes clear when you read that a pretty hard and very important namespace (the one governing users and groups) was added in 2013. That's the very same year that Docker was started.<br />
<br />
Isolating processes from other processes has been something that people have been aiming for for a very long time. One can at the very least trace it back to chroot in the late seventies and early nineties. This was a very limited and perhaps even flawed approach, but it shows that the drive has long since been there. So, then seeing that in the same year that the kernel provided one of the most important pieces of technology this software was created, would seem to imply that if it hadn't been Docker, it would have been someone else who started a similar project with similar functionality under a different name.<br />
<br />
Given that the project needed some time to get to a more or less stable state and that it needed good adoption of the kernel that provided the required features, even the sudden popularity explosion of Docker makes a whole lot of sense. After all, this was a technology the world had been looking for decades...Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-30308824406065445862019-10-03T19:48:00.000+02:002019-10-03T19:48:07.268+02:00What DuoLingo taught me about BuffyI am currently learning Danish on Duolingo. Why Danish? Well, that's a weird story.<br />
<br />
My first introduction to the language was when I was watching Angel (you know, the Buffy the Vampire Slayer spinoff). The version I was watching came with subtitles in somewhere near fourteen languages and the only way for me to turn them off was to cycle through all of these. Soon enough, I just gave up on turning them off and stuck with the first one, which was displayed by default. So you could say that Danish's proximity to the beginning of the alphabet is why I am learning language.<br />
<br />
The second time I learned some Danish was due to a band (dance act? pop duo?). They're called Infernal and they usually sing in English. They had one hit (From Paris to Berlin) and that's approximately when I started listening to all their music. At some point, though, I found out that they had some songs in Danish under another name (Paw&Lina) as well. I liked two of these songs rather a lot and also looked up the meaning of what I was listening to. So you could say that Infernal is the reason I am learning this language.<br />
<br />
Ultimately, though, the reason that I started learning the language is just that I liked it a lot. That's why I started watching a tv show in Danish and started doing Duolingo lessons. I stopped watching the tv show after a while and I also didn't continue putting the time into Duolingo. And then a year or so later, I picked up the app again and dropped it not too long after. My current attempt to learn the language is my third one.<br />
<br />
The other day, I was watching some episodes of Buffy with a friend. It also had Danish subtitles, but this was only one of four languages. Moreover, though, my Danish has gotten to the level where I got just enough of it for it too be rather distracting (which also doesn't happen when it truly doesn't take much effort to read what you see, which is not where I'm at at all yet). So, I turned them off. However, yesterday I was actually watching some episodes on my own and I wasn't too bothered by being distracted, so I left them on.<br />
<br />
That gets me to today. Today I was doing a quick lesson in between things. And they taught me the very first Danish word that I had learned. One that I had figured out from just the subtitles that first time because it had kept recurring. And then a bit later, the app taught me another word. This time, it was a word that had stood out last night. That was quite the coincidence. Or was it?<br />
<br />
The two words were "Boy/Girlfriend" and "friend". I had started on a new category: people. And that's just the thing. Buffy and Angel aren't about the monsters. The monsters basically just provide the backdrop. People - and the relationships between them - are what the shows are really about. So, it makes perfect sense that this was the moment that I started learning words that I already knew.<br />
<br />
And at the same time, I realized just how much the show really was about the people...Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-6658470601489380392019-09-11T01:14:00.000+02:002019-09-11T01:15:27.391+02:00The PinebookIn the past, I have written about Single-Board Computers a number of times. Today, I want to do something similar. This time, though, it's a product by a SBC-manufacturer that is still more or less an SBC, but at the same is a lot more than just that. I'm talking about the Pinebook.<br />
<br />
So, this manufacturer joined the SBC market with a strong offering: the Pine A64. It was on Kickstarter and it promised to do 4 cores for less money than the Raspberry Pi. Once you started looking at it more closely, you'd find that you probably wanted at least some of the extras and probably wouldn't end up paying less, but the idea was still there.<br />
<br />
There was something else that made the Pine A64 stand out. That was that this wasn't going to be just another Raspberry Pi-clone. Most of the other SBCs were either quite a bit more expensive than this thing, or tried to be as close to the Raspberry as possible. Without the word "Pi" in the name and a brand-new form-factor, the Pine A64 made it very clear that it wasn't going to be another clone, which was a rarity for devices that weren't in a different price range all together.<br />
<br />
However, it was something else that drew me to the device. It was the HEVC (aka x265) playback support that was promised. This was several years ago and the Raspberry only got HEVC support earlier this year with the RPi 4, so it was something really nice to look forward to. Unfortunately, this turned out to rely on proprietary drivers which basically meant that it only worked on Android, which wasn't really the operating system I wanted to run. I ended up finding this out before the end of the campaign, but decided not to cancel my pledge after all. In the end, though, this is the reason that my Pine A64 has basically been idle ever since I first tried it out just to see if it worked.<br />
<br />
But then came the Pinebook. This was basically a Pine A64 (though they made a different board, the main components were all the same) put into a laptop. The whole thing cost only $99 which is incredibly cheap for a laptop. I read about it on a forum I frequented and decided to just go for it. After shipping and taxes, I was down quite a bit more money, but in the end it was still a good deal.<br />
<br />
My Pinebook has served me well ever since I got it. It's all about expectations, though. The device isn't really going to play back video well* and it's not going to be flashy or let you have a bazillion tabs open. However, it does extremely well as a digital typewriter, which is what I've mostly been using it as. I've also done some simple GIMP (photoshop but open source, basically) work on it and I've even run some old games in DOSBox.<br />
<br />
More importantly, though, I've never been careful with this laptop, which was largely possible because of its price. I've put it in bags I wasn't entirely sure would be handled carefully, I've taken it with me to the strangest places and I've stuffed it in lockers where it barely fit. The result is that the screen is damaged in quite a few places. Of course, the other result is that I've always had a laptop with me when I needed - or even just wanted - it.<br />
<br />
In a way, this post may feel a little outdated. That's because the next big thing is the Pinebook Pro, which is a new version of the device that costs twice as much and is meant to be much more usable as a daily driver. I have ordered it and it's supposed to arrive somewhere next month. I might use it to write a sequel to this post at some time. However, I don't think it will completely replace the Pinebook that I currently have, so this piece still feels somewhat relevant to me. And besides, I felt like writing about this device and ultimately, that's what this blog is all about.<br />
<br />
*: I should probably check if this is still as bad in newer versions of the software.Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-49814123774367597282019-08-24T19:05:00.002+02:002019-08-24T19:05:07.287+02:00Right back at ya!Some two and a half years ago, I <a href="https://www.blogger.com/2017/02/what-is-discrimination-part-1.html">started a three-parter</a> on discrimination on this blog. That was one of the last posts I wrote in a long time. That three-parter was something that had been brewing in my head for a very long time, so I still intend to get back to it eventually and write the remaining two parts. The second part is one that will be more or less the same no matter when I write it, except that I might learn a thing or two and change my opinion a bit. The third part is one that is much more related to the things happening in the world at the moment, so its content will largely be dictated by when I do actually write it.<br />
<br />
Today I want to do something different, though. I want to comment on something that I wrote in the first part, and add to it the understanding that I have gained since I wrote it. Let's start by quoting what I wrote in the past.<br />
<br />
<blockquote class="tr_bq">
However, there is this strange other side to [the word nigger], where it is accepted if a black person says it. I would understand this if it was about intention and sometimes a bit of it is about intention. However, the word is also considered racist if it is used by a white person without intending to insult. If anything, the fact that white people cannot use the word while black people can sounds like racism to me.<br />
<br />
<div style="text-align: right;">
<a href="https://www.blogger.com/2017/02/what-is-discrimination-part-1.html">Jasper Horn right on this blog</a></div>
</blockquote>
I don't really want to get into whether calling someone a nigger is racist. I do think that I can say without evoking any controversy that you generally shouldn't call someone a nigger. Black people generally don't like being called a nigger and that should be more than enough reason not to do so. I think that by extension, we can say that is often okay for one black person to call another black person a nigger. And by putting it like that, I think that we can clearly see that the idea that whites cannot use this term isn't actually racist. After all, it's not that they are actually not allowed to say the word, it's that they shouldn't.<br />
<br />
Today, I want to look at why a white person shouldn't call someone a nigger while a black person can do this if they want to. When I wrote that, I didn't understand it at all, and I think that the quote above very much shows that. I think I understand it a bit better now, so that's why I'm writing this.<br />
<br />
My understanding of this changed completely when I read something on the internet. I don't know where I read it or who wrote it, but what they had written was that when you can respond with "right back at ya", an insult is much more of a playful thing than an insult.<br />
<br />
And that's basically all there is to it. It's basically that any insult doesn't really hit as hard when it could also be used against the one using it. For that, it doesn't matter what the insult itself is. It could be some way in which a person is not neurotypical, it could be related to a hobby that isn't considered normal by the mainstream, it could be almost anything else. The key is that when the one using the insult falls in the same category, they can't really mean it as an insult, so it's playful rather than truly an insult.<br />
<br />
Of course, being a white male was the first thing that made it hard for me to understand the way this worked for a word like nigger. However, while I think that made it hard, I also think that nigger is also a more or less unique situation where we took things to the extreme. Just like how I think that for many people the main reason it's a "bad word" is because they have been taught it's a bad word, I think that for most people a black man using the word is accepted behavior because they have been taught it's accepted behavior. And we've taken things to a rather extreme point to begin with by basically saying a word is not okay regardless of context or intention, and making basically implying that it's always just in friendliness when a black guy says the word is a similar extreme to me.<br />
<br />
At the end of the day, understanding where this difference in judgement of people based on their skin color helped me understand why this isn't actually a problem. I'm not entirely sure if I think this is a good way to tackle problems, but at least now I understand. And if you didn't before, maybe now you can too.Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-28766789914805789332019-08-18T21:51:00.000+02:002019-08-18T21:51:34.692+02:00The Log-in SuperpositionTraditionally, a site has exactly two states. You are either logged in, or you are not. All people get the same site when they are not logged in, and they all get a different website when they aren't. Recently, I have noticed some websites taking another approach and introducing that's the middle ground: not entirely logged in, but also not entirely not logged in.<br />
<br />
When I say I noticed this recently, I actually meant that I noticed it a while back. In fact, I noticed the same thing on two completely separate sites and one of them seems to have stopped using this paradigm. I just never got around to writing about it. I still think it's an interesting approach, so that's why I'm writing about it now.<br />
<br />
As a brief interlude, let me quickly explain the title of this post. Superposition is a term from quantum mechanics and it's all about there being discrete states, but reality actually being a combination of chances it's in each particular state. They are still discrete states and you will never observe anything but any of the states, but you can prove that until you observed it, it's not in any one of the states, but in a superposition of all of these states. It's a very complex thing to wrap your mind around and it doesn't entirely fit here, but I still thought it was a fun thing to make a quick nod at.<br />
<br />
So, what is this third state? It's basically where the site thinks it knows who you are, but does not trust this to be the absolute truth. In this state, everyone has their own version of the site, which may contain things like an unread message count, or the quick menu that shows the most recent items you interact with, but it does not allow you to read your messages, reply to them or see the full history of items you interacted with. When getting to a part of the website where you can do with these things, you'll be prompted for your password (often with your email not editable, but a "this is not me" link, because they do imply they know who you are).<br />
<br />
Basically it's a hacking risk mitigation strategy. It's allowing you some convenience of remembering you, but recognizes there is some risk in doing that. However, hacking that part of the website is of limited value because it would not allow the hacker to see much information about the user, or take actions on their behalf.<br />
<br />
At the end of the day, I'm not entirely sure whether I think this is a good strategy. I think the added convenience is often limited because you'll end up needing to provide your password after all most of the time. Nevertheless, I think it's very interesting. And in a way, it's pretty similar to requiring the current password to set a new one. If I see a good opportunity for doing so, I might implement this myself. Then again, I also might not.Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-32309999085884159612019-08-10T19:31:00.001+02:002019-08-18T21:59:14.548+02:00The Burqa BanI live in a country where it has recently become illegal to wear a Burqa in public. Well, I think the correct term for the garment most commonly worn in these cases is Niqab, but it is commonly referred to as a Burqa over here ("boerka" in Dutch). Moreover, though, the Burqa alliterates nicely with ban, which is why I picked it for the title, and it's also the translation of a common moniker for the ban in Dutch. In order to be more correct in my text than in my title, I will use the term Niqab in the rest of this post. Of course, the ban does actually cover both garments and so does most of what I have to say, so neither is actually wrong.<br />
<br />
I decided to write about this topic after reading an article about a protest against the ban. The whole thing is a difficult matter. It's a complex situation. And I don't really know what to think about it. I see why people are against the ban. I also see why the ban does make some sense. I'm not going to write towards a conclusion because I don't have a conclusion. Still, I felt like writing down my thoughts. And writing on my blog again after it has been far too long is a nice way to do that.<br />
<br />
<h3>
Inequality</h3>
I think it's hard to deny that the Niqab is a clear sign of inequality between men and women. While men aren't entirely free to wear whatever they want, they also do not have the same limitations as women. Not being allowed to show your face is a pretty strong restriction.<br />
<br />
Of course, this is a much stronger point when you are looking at the Hijab. It's much harder to deny that wearing a Hijab is something that girls and women do not get a say in in many cases, they just have to. This can range from fear of violence from community members if they don't wear it to merely the disapproval of parents. This disapproval can include (fear of) getting disowned, but can also be limited to just the way a parent feels about you. Of course, disapproval by a parent over a simple choice like that can be quite harmful all by itself. Alternatively, it might just be the thing you were brought up to do.<br />
<br />
Just the other day, I passed a man with a number of children on my bike. It was a hotter day, so the man was wearing a sleeveless shirt. The boys in the group were dressed less casually, but they were still just wearing shirts. The girls in the group were wearing very long sleeves, clearly not in keeping with the weather, and Hijabs. All of the kids looked like they were in their late single digits or early teen years, so I doubt that they were making independent decisions about this. As I overtook the group, a chill went down my spine because that's not what equality looks like to me.<br />
<br />
The Niqab is a more extreme garment. Not showing your hair because you are female just isn't as extreme as not showing your face because you are female. I think either is a clear sign of inequality, but the Niqab is simply more polarizing because it is more extreme, even though it's harder to say to what degree the women in question feel they have no choice but to wear it.<br />
<br />
It doesn't really matter to me whether women actually make an independent decision to wear a Niqab - or a Hijab, for that matter. All that does is show that they have been raised in a culture where they are taught it's okay to put such limitations on just one of the two genders. It shows that the inequality is systemic, not that there is none.<br />
<br />
<h3>
A Symbol</h3>
At this point, it's clear that the Niqab is a symbol of inequality between men and women. When you consider the limited number of people who wear it and the claim by many that it is their own choice to wear it, it becomes clear that it's not a big part of the inequality itself.<br />
<br />
However, I don't think that banning a symbol is the way to go. It's never very effective because it does not address the underlying issue at all. And even if all the main symbols of a problem are banned, new symbols will crop up to take their place. You simply cannot expect the banning of symbols to actually have much effect on a systemic problem.<br />
<br />
I don't think inequality between men and women should have a place in our society. There is still a lot of it and we have a long way to go before we have actually banished the inequality all together. I also think that the Niqab and Hijab are indicative of a culture that has more inequality than our "Western" currently does. However, I don't think a ban will change anything, even though I do not have any other ideas on how to get rid of this heightened inequality in this subculture of our own.<br />
<br />
<h3>
Real Motivations</h3>
On the other hand, I also think it's clear that this ban is religiously motivated - or perhaps even racially motivated, the two are strongly related here after all. No decent politician will admit that, though. Nevertheless, it is clearly a law introduced to cater to the part of their following that is intimidated by the muslim influence on our culture.<br />
<br />
That's the most wrong thing about this ban. Even if the ban can be defended, the real - as I see it - motivation of the ban just cannot. It's one thing to be ineffective by attacking symbols or to end up attacking a problem that isn't really too big because the number of people involved is quite limited, but it's an entirely different thing to be attacking a group of people based on their culture or religion.<br />
<br />
<h3>
Hiding Faces</h3>
There are other reasons you can give for the ban, and those are the reasons that make a lot more sense to me. It basically comes down to the reason why I avoided using the word "discrimination" in the previous paragraph. While the law is colloquially known as the Burqa ban, that's not literally what it is. Rather, it is a law disallowing covering one's face. This is not really a new thing, as it wasn't really allowed before either. The new thing is that the freedom of religion does not count as a reason to do it nonetheless.<br />
<br />
The balancing of different rights is always something that is required and hard at the same time. One way you have to find this balance is to see where the right of equality cuts into the right to freedom of religion. Another way is to look at how far the right to freedom of religion trumps our laws and cultural norms. To understand that, we have to look at why we do not allow one to cover their face in public places in general.<br />
<br />
Whether it's a police officer, a bus driver or your local baker, when you interact with someone, you are creating a sort of contract with a person. In person, this contract traditionally does not include anonymity. The other person knows who they are dealing with and that's generally a good thing. One can easily look at online anonymity to see how it can bring out the worst in people. It's much easier to be rude to someone if you know they can't really recognize you on your next encounter anyway.<br />
<br />
Of course, we also behave (somewhat) nicely to people we do not expect to see ever again. Maybe that means that covering you face does not mean you will treat others poorly. However, there's also the fact that it's hard for others to build the rapport with you and understand your intentions when they cannot see your face. Facial expressions are an important part of the way we communicate and taking that away takes away a lot of our ability to figure out someone's true intentions.<br />
<br />
The final point is one that perhaps is a little less closely related by the ban because it's not actually related to covering your face. It is related to the rest of the outfit a Niqab often comes with. This is about how when your garb comes with religious protection, it becomes a lot easier to hide things in it. This could mean that you hide the assault rifles you are going to rob a bank with, which you would probably stand out a lot more with when it wasn't just a religious garb you were wearing. It can also refer to petty theft in a grocery store, at which point it becomes a lot harder to check if someone has hidden the item they claim they do not have when there's the protection of a religious garb to hide it with.<br />
<br />
I'm not sure how I feel about the last point I raised. It does assume the worst of people. On the other hand, freedom of religion also means a lot of protection when you simply claim to follow a religion without the need to prove that you do. It also doesn't directly relate to the ban on covering your face. Perhaps that's why we shouldn't really take it into account here.<br />
<br />
<h3>
Conclusion</h3>
As I promised up front, I don't really have a conclusion.<br />
<br />
There are some sensible reasons for the ban, there are some misguided but well-intended reasons for the ban and there are some absolutely horrible reasons for the ban. Unfortunately, I think that the real reasons for politicians that pursued this bad to do so were in the last of the three categories, even if they won't admit it. And that's a very bad thing. Does that reflect on the ban itself? I don't know. It definitely doesn't make it look too good. Yet, the ban itself is separate from the reasoning of the people who supported it. And... well, I just don't know.Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-45544929150375931952017-11-16T23:42:00.002+01:002017-11-16T23:42:40.192+01:00Let's talk DiscoveryI have been watching Star Trek: Discovery since it started airing, so I've also been having my opinions on the show since that moment. My initial opinion was that the show was nice, but it wasn't all that Trek. However, with half a season (well, more like three fifth, but that's where we're getting the mid-season break) behind us, my views have changed somewhat and I feel it's time to speak up about it.<br /><br />The show has been getting flak for a number of things since before the first episode aired. The show's main problem has always been its continuity. When photos leaked of actors in Klingon make-up, people weren't even sure whether these were Klingon because they looked rather different from what we'd come to expect from Klingons. The show's look was also criticized for being closer the Kelvin timeline than to what would make sense for the place in continuity this show said it was situated in.<br /><br />However, when considering all the problems with continuity, you've also got to keep in mind that the franchise already made big changes before. The distinct look of The Original Series wasn't at all preserved for the movies and The Next Generation. Of course, this show takes place much closer to the original, so that's why people want to hold it up to higher standards when it comes to that.<br /><br />Well, I'm feeling that we should actually just cut them some slack. Take the uniforms, they don't quite fit in with the established timeline. However, it should be noted that the uniform changed a lot in the past as well. Does it really matter, though? At the end of the day, it's more important that today's viewers like these uniforms than that you can imagine them being used at this point in time. In fact, that's always been a main factor in uniform designs. You can't really say that Deep Space 9's change was done for the viewer; it was clearly done to keep up to date with the era of filming the show.<br /><br />Star Trek: Enterprise tried much harder to fit in its time. It was designed with the idea that this ship predated NCC-1701 (TOS's Enterprise). It featured uniforms that could have been a predecessor to what we'd seen so far, and as more limited with its technology and featured a number of prototypes of what became staples of the franchise later on.<br /><br />That, I believe, is part of the reason it never really resonated with the public it wanted to have. Or rather, the different kinds of public it wanted to have. It both wanted to cater to new viewers by giving the whole thing a fresh look and a new feel, but at the same time it also worked really hard on making it fit in the timeline. This was most visible when story lines focused on things from other series, but were very restricted in which ways they could do this.<br /><br />That's why I'm not too bothered by the change in technology. We get joysticks and HUDs, which isn't really in line with the view of the future that The Original Series painted. However, that future was in line with a vision of the future from the sixties. This show is simply more consistent with a current view of the future. It would be in line with the established timeline to show data disks, but people would laugh at it, since we've got more wireless technology today than they even imagined for the future when designing the original Star Trek.<br /><br />There's still a couple of things that feel out of place. They tried holographic communications in a previous series set over a hundred years after this one, but they couldn't make it work then, so they abandoned it. It's strange that we see it here then. Ultimately, it's not too consequential really. However, the same can't be said for the holodeck that they have introduced without naming it. That would seem a direct violation of chronology. The fact that we now seem to be routinely using warp-capable shuttles also seems somewhat out of place.<br /><br />The Klingons are something else that seems to have changed more than would seem to be reasonable. To be honest, though, the change is about is as big as the change in them was from The Original Series to the movies and The Next Generation. This also nicely sidesteps the fact that rubber forehead aliens got to be heavily criticized about halfway through The Next Generation-generation of Star Trek shows.<br /><br />Then, the real problem of the way Klingons look comes in the form of something that Enterprise did. For a very long time, the change was simply chalked up to the fact that the times and budget has changed. The old look of the Klingons was also something that wouldn't have held up in that era of film making. However, Deep Space 9 subtly introduced that the difference actually existed in the show itself, and Enterprise went out of its way to cement the story of how the change happened into the canon of the show.<br /><br />However, it definitely looks to me that they are going to address this. The virus that caused the change in looks seems to be something that is going to come into focus soon, if you consider one of the fan theories, which since the latest episode seems rather hard to deny. I wouldn't be surprised if they are going to go with the idea that the Klingons looked different before the virus. That would retcon some things, but not nearly as much as the blatant change seems to suggest at first look. Besides, this way we do get Klingons in line with today's production values. I think we owe it Discovery to let them show us how this plays out before judging them too harshly.<br /><br />That also goes for the cloaking technology that the Klingons possess. Everybody knows they didn't have that technology at this point in time and it's a widely held believe that they acquired the technology from the Romulans. However, in the latest episode, the Klingon cloak seems to get beaten by the federation already, so that might be the reason they abandon it soon after. This might even get them a reason to pursue the technology with the Romulans. We ought to see how this plays out.<br /><br />In a way, the Spore Drive falls in the same category. However, people complain a lot less about it. That's because it's a universe changing technology and nobody expects the writers to miss that. So, it's more or less a given that they will give a reason for the branch of technology being abandoned sooner or later and nobody believes the writers won't explain to us why that's going to happen.<br /><br />In general, I rather liked what I've seen. While it's not always perfect Trek, it's solid science fiction nonetheless. On top of that, it has been trying a lot to bring back the Trek even if that took them a couple of episodes to get to. It's a rocky start, but I would say it's in a way more Trek than The Next Generation was during its first season. I mean, it had a very rocky first season as well and it did redefine for a large part what Star Trek was, for which it simply needed time.<br /><br />That last part is also part of the problem here, I think. I've noticed a number of instances where the new show was made to feel more like The Original Series than anything from The Next Generation era. And well, the latter is far more season and more recent. A lot of people will miss that fact when the series goes further back in Star Trek history.<br /><br />There are still things I don't like. Mudd's second appearance definitely fits that bill. I mean, I don't really see any mortal - especially one in Federation Space - having such a powerful device. However, omnipotent beings were plot devices in Trek since the sixties, so they're definitely trying. And I liked what I've seen so far, and I'm willing to give the benefit of the doubt when it comes to the future. And I definitely needed something to fill the Dark Matter-sized hole left in my life.<br />Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-48798444686238234732017-02-21T09:27:00.000+01:002017-02-21T09:28:24.956+01:00What is discrimination? (part 1)<i>For a long time now I have wanted to write this blog post. I just never got around to doing it the justice it deserves. It was called "What is racism?" in my head, but just as I was finally starting on it, I realized that it was really about discrimination in general. I will be using both terms, though.. At the end of the day, racism is just a form of discrimination. </i><br />
<br />
<blockquote class="tr_bq">
Racism ain’t what it used to be. Time was, if you were racist, you
bloody well knew it. [..] No more. [..] racism has become recast as a
kind of bad etiquette, where merely saying the wrong thing, even
unintentionally, is enough to mark you out as a moral leper.<br />
<br />
<div style="text-align: right;">
<a href="http://www.spiked-online.com/newsite/article/how-egalitarianism-became-a-microaggression/17235#.WJ7_c_I5NA9">Tom Slater at Spiked-online</a></div>
</blockquote>
A couple of years back, I was riding my bike from the train station to my home. As I live in the Netherlands, there were plenty of other people riding their bikes as well. One of them got me in a bit of an annoyed mood because he delayed me by not indicating that he was taking a right turn at a traffic light. Then, I approached the next traffic light. There was someone else who slowed down because he had to wait for the light to go green. However, he did this on the left side of the bike lane, making it impossible for me to pass him and take the right turn for which there was no wait.<br />
<br />
It was at this moment that a comment towards him sprang into my mind. I wanted to say something like "hey, this is the Netherlands and here we ride on the right side of the road". However, I kept my mouth shut and avoided the conflict. It wasn't until a couple of minutes later that I realized how racist that sentence would have sounded if I had actually said it. After all, this guy did look like his parents weren't born in this country.<br />
<br />
To me, the statement wasn't racist at all. I hadn't even registered yet that this person looked a bit foreign and I would have said the exact same thing to someone who looked like he had thorough Dutch roots. It was just a way of me ridiculing that the person for not following the single most basic traffic rule. I didn't really think anything of where that person was from, I just made the ridiculous assumption that this was a misunderstanding of the rules and commented on the fact that there are some countries where they drive on the left side of the road.<br />
<br />
But then was that comment truly racist? Did it matter that I didn't mean to offend him over his race? Did it matter that I would have said the same thing to someone who looked more like a native? Would it still have been racist if I had said it to someone who looked more native? Would it have mattered whether that person was as native as he looked? Would the same sentence have been racist if it had been uttered by someone who did so because of how the person in question looked?<br />
<br />
My personal interpretation of what racism is - and in fact what discrimination is in general - has not lined up with what it popularly is for a long time. Let's take the word "nigger". This is widely recognized as a racist term. This is because of its historic ties of the word to slavery. I am not trying to deny the hurt the use of this word may incur, but I would like to question the fact that just using a word like that is discrimination or racism. To be honest, I think that for many black people there isn't in fact an association to this slavery. They will be offended by the word just because they were taught it is a bad word. Of course, it's also connected to the more recent usage of the same word as a slur and it can hurt in that way. But that use of the word as a slur is also just because people have been taught it's a bad word. Once again, I don't mean to deny the hurt that this word causes, no matter whether it is because of it being a bad word or because it's because there are people that do experience a connection between the word and slavery. I'm not even trying to say it's not a bad word either.<br />
<br />
However, there is this strange other side to this word, where it is accepted if a black person says it. I would understand this if it was about intention and sometimes a bit of it is about intention. However, the word is also considered racist if it is used by a white person without intending to insult. If anything, the fact that white people cannot use the word while black people can sounds like racism to me. Of course, as a privileged white male, I don't have much to complain about. I'm really just trying to get to the issue what discrimination and racism are. To me, it really just seems that the word isn't inherently racist.<br />
<br />
If it's just about intention, though, things get very hairy. Take the example from the traffic light situation above. My intention was to take a verbal stab at this person without it relating to where he - or his parents - were from. However, he wouldn't have been able to tell that. If there was a third traffic light he had to take and he did the same thing there and someone else made the same comment to him there, but this time with the intention to hurt him based on his race it would have sounded exactly the same. Moreover, it would have felt exactly the same to that person.<br />
<br />
What about racist jokes? A racist joke really just evokes a stereotype for the sake of comedy. However, racist jokes are considered a bad thing. They may very well hurt people. However, jokes about dead babies are considered much more acceptable. Not everyone likes these, but they don't carry the same stigma. That's while such a joke can hurt very much to someone who has lost a baby. <br />
<br />
Let's take the combination of racism and comedy a bit further. Let's talk about such things in the context of entertainment. The satire of shows like South Park spring to mind immediately. They had a whole thing about gingers not having souls. Basically, their characters were discriminating other characters. It sounds strange to me to call a piece that has fictional characters discriminating other fictional characters as being discrimination itself. However, when episodes on this theme aired, the number of children with red hair being bullied skyrocketed.<br />
<br />
Maybe we can shine a different light on this. Imagine you are making a period piece. A movie, let's make it a movie. It's set mid-1900s. Women were discriminated against in that period. Should you not show that in your movie? Is being authentic in that respect discrimination all by itself? Of course there is room for a movie showing those troubles, but say you just wanted to make a police drama set somewhere in that time period. Does that mean you can't show a man being a pig towards the typist woman?<br />
<br />
If anything becomes clear to me through all of this, it's that discrimination is not the same as "shouldn't do". Of course you shouldn't discriminate. That's something that's so important that many countries (at least the ones in the West) ingrained this in their constitution. However, there are things that you shouldn't do, but not because they are discrimination. In the extreme, hate-mongering is often not discrimination in itself, but it does move others to discriminate and it should be clear that it's not acceptable behavior.<br />
<br />
In my opinion you shouldn't ask yourself if what you're saying is discrimination. It should be clear when it is discrimination and you should know to stay well away from that. However, I do think it's good to ask yourself whether what you're doing is offensive to people. It doesn't even necessarily have to do with something you can discriminate about. Likewise, it's good to ask yourself if what you're doing may validate people hurting others, through discrimination or something else. I'm not against free speech, but I would like those practicing free speech to take their responsibility.<br />
<i><br /></i>
<i>Today, I really just took a look at what I think isn't discrimination. In the next part, I will take a look at what I think is discrimination. I hope you'll join me for that part as well.</i>Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-920168870884290312017-02-11T12:30:00.000+01:002017-02-11T15:05:12.568+01:00MinGW? MinGW-w64? Msys? MSYS2?I've got a more serious blog post in the pipelines. However, right now, I just want to take a moment and complain about a mess I came across.<br />
<br />
So, it's been a while since I have last programmed in C or C++. In fact, I have never done any real C programming and it's been over half a decade since I was serious about a C++ project. I have recently done some Arduino work, but there you don't really have to worry about the compiler yourself, so it's not relevant here. And because the compiler is what I am talking about here, so C++ and C can be thrown on the same pile, as I use the GNU Compiler Collection (gcc) for both.<br />
<br />
Man, the gcc for windows situation is a mess...<br />
<br />
So, there has always been MinGW and Cygwin. Cygwin is a whole POSIX emulation stack. Programs had to be compiled specifically for running in the Cygwin environment, but it was easy to do this for any linux program. Such programs would always need at least the Cygwin compatibility layer dll to run. Many people also just use Cygwin for a linux-like environment (since the GNU tools provide what many people consider "linux-likeness") on Windows without using the compiler. I've always used some version of msys for this, but I'll get to what that is in a moment.<br />
<br />
The other option was MinGW. Rather than a full compatibility layer, it just aims to provide a compiler that can compile things natively for Windows. You will need to talk to the Windows APIs just like you would when using a different c----ompiler like Visual C++. It's just a way to get gcc to compile for Windows.<br />
<br />
However, MinGW was married to MSYS. MSYS was forked from Cygwin at some point, but it did away with its compatibility layer. Instead, it used MinGW to compile some of the core GNU utils for native windows. This also gives you sort of a linux-like system on Windows. This was necessary to run mingw and meant that msys was a part of the mingw project. However, you could also use mingw to cross-compile from linux to windows, in which case you didn't need msys.<br />
<br />
Unfortunately, mingw only supported 32 bit applications. When I say around the time when this started being an issue, I mean during the days of Windows XP x64 and Windows Vista and 7, which had had 32 bit and 64 bit versions which were both used (yes, a lot has changed since then). So around that time, there was a company that developed a mingw version for 64 bit application in house. At some point, it donated this code to open source and it was tried to merge it with the mingw project. However, this project suspected there were some licensing issues and a rift occurred. A second project started, called mingw-w64. It also had its own msys version (I think) and if I remember correctly it could actually compile for 32 bit and 64 bit applications.<br />
<br />
During this time, mingw had a bit of an installer problem. The person who had been maintaining the installer left the project and basically nobody wanted to work with the same installer building tool. This led to the installer version they provided to be horribly out of date. You had to mess around with packages to get a more recent version. They were rather hostile to help offered by volunteers from outside the project, demanding that such help would be maintained by the same person indefinitely. There was some work on a new system inspired by the apt-get interface, but there was no temporary solution in the mean time. This system got done eventually, but by then the project had suffered greatly already.<br />
<br />
Enter git. Git is not a compiler. However, it relies on GNU tools to do its job, so it needed some of them to be able to run on Windows. So, they created their own version of msys (msysgit) which makes them relevant to this story. At some point I switched from mingw's msys to msysgit for my "proper command line" needs and since then I haven't really kept up with the mingw project.<br />
<br />
That is, until now. I want to make a utility that uses I2C on linux and my best bet seems to be C. So, I went to look for a compiler. What I really need is a cross-compiler from Windows to ARM linux, or perhaps an ARM compiler on the device itself or maybe even a cross-compiler from x64 linux to ARM linux to run from a (virtual or other) linux installation, but I ended up looking at mingw first. I had a very old version installed as part of the haskell project (oh joy!) and a slightly more recent version from my C++ development days. So, I started looking into the mingw situation.<br />
<br />
The mingw project seems to have bled to death. Their site is still online, but nothing seems to have happened for them in over three years. In a way, this is logical. They were already struggling in those days and today you don't really have to bother with 32 bit applications anymore as 64 bit is commonplace enough. mingw-w64 is still alive and kicking and it seams to be the way to go. However, there's also msys2.<br />
<br />
The project page describes them as a rewrite of msys and they mention the reason for their existence is the fact that the original msys wasn't able to keep up with Cygwin. However, what I think is one of their main accomplishments is that they divorced from mingw. Don't get me wrong, they are still seeing each other, just not living together anymore. The tools are still built with a mingw version (I think the w64 version) and it is still an important way to run mingw, providing support for both (the outdated) mingw and mingw-w64 out of the box. However, they are just not the same project anymore, so the coupling is not as tight anymore (i.e. they are not wearing rings and they are allowed to see other people).<br />
<br />
The new msys2 also does away with the apt-get inspired installer in favor of a new port of Arch's package manager, pacman. Oh, and they apparently don't play well with msysgit or the original msys. Things never get simple, do they.<br />
<br />
Confused yet? I definitely am!<br />
<br />
Edit: It seems there still was an important bit I missed. The more recent version of git for windows (incidentally, called Git for Windows rather than msysgit as the older versions were called) don't actually use their own msysgit anymore. Instead, they are already packaging msys2, which means that I have already been using it for quite some time... Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-36706655076140258232017-01-30T01:06:00.002+01:002024-01-09T15:52:54.496+01:00The MITA LicenseI've always like the MIT License. However, there was one thing that always bugged me about it. That's the copyright notice.<br />
<br />
You see, the copyright notice is often not really correct. It often is when the project is in its early phases, but when more contributors start adding things, it may not be correct. However, the license itself stipulates that you cannot change the notice. Surely, you yourself can change the license, but once there are more contributors who should be considered <i>you</i> becomes more and more foggy as well.<br />
<br />
One way this is often mitigated by a copyright notice that refers to some "software group". However, that's often not how the project started off and whether it was actually legal to change it to that is often a bit up in the air. And whether new contributions actually are copyright of said group completely depends on the contributors agreement (if there was one to begin with). Oh, and the jurisdiction the viewer is on may have something to say about it as well.<br />
<br />
At the end of the day, the copyright statement is often just incorrect or it may just be undecidable. Of course the copyright statement doesn't need to be factual for the license to work, but the license does make sure that you cannot change it. I just don't like that.<br />
<br />
That's why I forked the license. I replaced "copyright notice" with "attribution notice". The idea is that you can put anything above it, things like "Project <A> was started by <B>" and "This software was created by <C>" come to mind, but you may very well think of something completely different yourself. It can basically be anything, as long as it's something that you can clearly refer to as an "attribution notice".<br />
<br />
I named my fork "MITA", after MIT-Attribution, but I pronounce it as in (Playstation) Vita. The license can be combined with a copyright notice elsewhere (though it won't be protected by the license, of course). The home of the license is <a href="https://mita.jasperhorn.nl">my website</a> which was launched pretty recently. (Hi there, future visitor! Is the link broken? Do let me know. When I wrote this I was definitely planning to change the url at least once or twice and may well have forgotten to update this link.) The text of the license can also be found below.<br />
<br />
<pre><freeform attibution notice>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above attribution notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.</pre>
Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-59841166474874373792017-01-13T00:17:00.000+01:002017-03-03T10:37:00.968+01:00SBCs: Orange package recevied, overA couple of days ago I received a package. Or actually, I had to pick it up because it didn't fit in mail box and I wasn't home when they tried to deliver it. It was a new piece in my collection of SBC, the Orange Pi Zero:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI-lWLu41uAMs44gubOC3KNqbDth4sD5IP8zwBEK0mRTd_rgs6ptSDWi6Gfy9gcjdswTq5rsYqrFV_sDkd4A3kSmDS0rkBGfPp1RGXyuMq0d_PuQ5LB4a1n0ZYyf8nWOnEaOK8lD05FWPw/s1600/IMG_20170112_181043_edited.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI-lWLu41uAMs44gubOC3KNqbDth4sD5IP8zwBEK0mRTd_rgs6ptSDWi6Gfy9gcjdswTq5rsYqrFV_sDkd4A3kSmDS0rkBGfPp1RGXyuMq0d_PuQ5LB4a1n0ZYyf8nWOnEaOK8lD05FWPw/s320/IMG_20170112_181043_edited.jpg" width="320" /></a></div>
<br />
As the name might betray, it's the competitor to the Raspberry Pi Zero and the CHIP from the Orange Pi line.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZoKYsZ2-0hgX3IBnEAAYC6HfcgP1lsnNak0-xkz9UnBRs_azPuf1PNE-SuYO0k8IsbmFv2Q7OVFIHlmXFBP4-zPXESwhsihq-Ot_XN96KaFt-MgJjhyphenhyphenHWQgL2Pcg9BvbEW_SeKfKFUZ3h/s1600/IMG_20170112_181029_edited.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="265" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZoKYsZ2-0hgX3IBnEAAYC6HfcgP1lsnNak0-xkz9UnBRs_azPuf1PNE-SuYO0k8IsbmFv2Q7OVFIHlmXFBP4-zPXESwhsihq-Ot_XN96KaFt-MgJjhyphenhyphenHWQgL2Pcg9BvbEW_SeKfKFUZ3h/s320/IMG_20170112_181029_edited.jpg" width="320" /></a></div>
<br />
With a full-size network, a USB port and a one presoldered header, it actually gets more in line with the CHIP than the Raspberry Pi Zero.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHYwn35kGfhSHf-xlkGyQPjT5iwAKJO3b8RhnTmfSbbJTHNsdNJsjfrox-KppKQWX41cHFHqNVhgjVBW-kvutkj8K6jP0IyZSxc68HWkdGxE11GkS0Jjgvl3XIUdtCjoD6pAD7F-N4PXlJ/s1600/IMG_20170112_181107_edited.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHYwn35kGfhSHf-xlkGyQPjT5iwAKJO3b8RhnTmfSbbJTHNsdNJsjfrox-KppKQWX41cHFHqNVhgjVBW-kvutkj8K6jP0IyZSxc68HWkdGxE11GkS0Jjgvl3XIUdtCjoD6pAD7F-N4PXlJ/s320/IMG_20170112_181107_edited.jpg" width="313" /></a></div>
<br />
It has wifi and that combined wifi in addition to its network port, so it's also not as poorly connected as the RPi Zero. On the other hand, it's the only in its class not to have any display output, while at $9 (or $7 for the model with less RAM) it is the most expensive of the three similar boards (unlike the CHIP, it still needs a SD card to be added to that cost).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyRFDACmwp5Z3mgxwyF_s_BHQg-UaOJT4uxTBUDcDJD6QgC-iOO52vAXncIelFmy2n6ORSazrmXYWmAKxUZa0kMKnOiUwm8tLTIFyjD4YSj0KQcv_ZaIW-B5b72D8uzGdS4j0UwxTqhsdX/s1600/IMG_20170112_181052_edited.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyRFDACmwp5Z3mgxwyF_s_BHQg-UaOJT4uxTBUDcDJD6QgC-iOO52vAXncIelFmy2n6ORSazrmXYWmAKxUZa0kMKnOiUwm8tLTIFyjD4YSj0KQcv_ZaIW-B5b72D8uzGdS4j0UwxTqhsdX/s320/IMG_20170112_181052_edited.jpg" width="279" /></a></div>
<br />
Of course, that higher price does get you something: a processor that actually competes with the normal Raspberry Pi line rather than the Zero. And of course, little to no software support.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRKK2SLlH0FTh1zsE14w9EKtuT4VrBSDyqu803JO__skPRIOk7FgloBerWV8rZRasYt6VzDkUXv_B_qJMArzzWqeGoAyjV6RwAW8Q20x1MTuI7ONb3kCasw73BZ9gtyki9Hn4wkYpG9iH3/s1600/IMG_20170112_223333_edited.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRKK2SLlH0FTh1zsE14w9EKtuT4VrBSDyqu803JO__skPRIOk7FgloBerWV8rZRasYt6VzDkUXv_B_qJMArzzWqeGoAyjV6RwAW8Q20x1MTuI7ONb3kCasw73BZ9gtyki9Hn4wkYpG9iH3/s320/IMG_20170112_223333_edited.jpg" width="320" /></a></div>
<br />
For size comparison, here's the new board together with an Orange Pi PC, a Raspberry Pi 2, a Raspberry Pi Zero and a CHIP. The OPi Zero actually has quite different dimension than any other the others. Perhaps the Orange Pi is actually starting to take its own direction instead of just copying others.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_3DKJ4UWbrP33kSc5vH3vvE-hKmyYvmjpqIzdG8mi2eCE275J3i49r-ni9ruiWF5Z-bIeXB3dT6Sny_4OA3QwJJdmcUdtip78r7fTuP6nC-Qw80yCgtBbEevIWTYOGsXOSFwAHLLQJL_V/s1600/IMG_20170112_224258_edited.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="295" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_3DKJ4UWbrP33kSc5vH3vvE-hKmyYvmjpqIzdG8mi2eCE275J3i49r-ni9ruiWF5Z-bIeXB3dT6Sny_4OA3QwJJdmcUdtip78r7fTuP6nC-Qw80yCgtBbEevIWTYOGsXOSFwAHLLQJL_V/s320/IMG_20170112_224258_edited.jpg" width="320" /></a></div>
<br />
The same package also included a case for my Orange Pi PC. Now that it has a real function in my infrastructure, I felt it deserved that. If you look closely, you can actually see that the case is artially transparent:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifoNLlYVJnc_w-1fp36rB7jXYbuLbQtt2enNGIrUFv9lwVS6dxuVw_N4nd1Vx644g8OH1DlkSHYVPeP2YbUIKLx_K61c3PuYLGqHEfcPFDzlnHPvwMjVv74MPRZ2bowL99Y1JYM_0vlDx9/s1600/IMG_20170112_224320_edited.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifoNLlYVJnc_w-1fp36rB7jXYbuLbQtt2enNGIrUFv9lwVS6dxuVw_N4nd1Vx644g8OH1DlkSHYVPeP2YbUIKLx_K61c3PuYLGqHEfcPFDzlnHPvwMjVv74MPRZ2bowL99Y1JYM_0vlDx9/s320/IMG_20170112_224320_edited.jpg" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
In fact, that was not the only case in the package. There was also a case for the Orange Pi itself. I have a plan for it too, so this seemed only fitting. I want to use it for NAT (if it's going to work is another story all together, but we'll get to that when we get to it). This may in fact be the first time that I buy a non-Raspberry board with a specific use in mind!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW4WCUsgl5lHZABAdEiqk5pdxydGGAPQoxUB-YSC-wRRhRhgt5U419yeSoOCDu04l3MQ0BvwNzPmwWcRSDASOqaShDllV-MWXFJ0W3mmssEpsZhBm3djIZNAg8qOTL2JfitBUrRE2FObvY/s1600/IMG_20170112_224032_edited.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="304" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW4WCUsgl5lHZABAdEiqk5pdxydGGAPQoxUB-YSC-wRRhRhgt5U419yeSoOCDu04l3MQ0BvwNzPmwWcRSDASOqaShDllV-MWXFJ0W3mmssEpsZhBm3djIZNAg8qOTL2JfitBUrRE2FObvY/s320/IMG_20170112_224032_edited.jpg" width="320" /></a></div>
<br />
<br />
<br />
<br />
Speaking of Raspberry boards, there's actually a board that has joined the family without me writing about it on this blog. High time for some photos, don't you think?<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_nIojvlvfKfX4_a_eny0L3iIzCNlTE18eJTKwBpmoemqtRzKlO-J7_EvP3j04F32oA7oOQ3OPonfDRWxdy6_ru6J32fGZmM7CLpJ02zOjMFQD1YCl_9bbvJ56VKHNGF7jQK2LbqnAoiUt/s1600/IMG_20170112_223610_edited.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_nIojvlvfKfX4_a_eny0L3iIzCNlTE18eJTKwBpmoemqtRzKlO-J7_EvP3j04F32oA7oOQ3OPonfDRWxdy6_ru6J32fGZmM7CLpJ02zOjMFQD1YCl_9bbvJ56VKHNGF7jQK2LbqnAoiUt/s320/IMG_20170112_223610_edited.jpg" width="320" /></a></div>
<br />
<br />
It's the official Raspberry Pi Touch Screen! It's inside a SmartiPi Touch case.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoLdRT_ryFpKEYOValDKLSAsekaTZctmDfIYLqm8pJhKcx9L-dgPviF1agF-l3js3qEIuIGe9F8VLKSZFDYmCagxPukHTVbvupLzC85ss6UCZu51WHyeZh6mii_jP4JknmbAvwqyg3LTZA/s1600/IMG_20170112_223728.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoLdRT_ryFpKEYOValDKLSAsekaTZctmDfIYLqm8pJhKcx9L-dgPviF1agF-l3js3qEIuIGe9F8VLKSZFDYmCagxPukHTVbvupLzC85ss6UCZu51WHyeZh6mii_jP4JknmbAvwqyg3LTZA/s320/IMG_20170112_223728.jpg" width="320" /></a></div>
<br />
And it's being driven by a Raspberry Pi 3.<br />
<br />
Alright, that's what I've got for you for now.<br />
<br />Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com4tag:blogger.com,1999:blog-6983518491127927937.post-6192783555039722572016-12-18T17:51:00.002+01:002016-12-18T18:36:53.981+01:00The one-time pad<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
A <a href="/2015/04/agent-carter-one-time-pad.html?m=1">long, long time ago</a>, on <a href="/">a blog right, right here</a>, <a href="/2015/04/agent-carter-one-time-pad.html?m=1#ref-write-about-one-time-pad">I briefly mentioned</a> that I wanted to write a blog post about the one-time pad. Today is the day that I do so. </div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
<br /></div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
The one-time pad is an elementary part of cryptography and I feel that every computer scientist should know about it. Don't worry, though, I'll keep this understandable for just about everyone. In fact, the one-time pad is very simple and could probably be explained to a seven-year-old.</div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
<br /></div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
Let's say that you have written a love letter that you want to be readable only by the target of your affections. In order to hide its content you take piece of paper with completely random letters, which we will call the key. </div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
<br /></div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
Now you take the first letter of your love letter and remember its position in the alphabet. Then, you take the first letter of the key and also remember its number. You add the two, and if the total is higher than 26, subtract 26. You end up with a number that can once again be translated back to a letter. This will be the first letter of your encrypted message. </div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
<br /></div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
You do this for the second letter as well. And then for the third. In fact, you keep doing this until you have encrypted the entire love letter. You send this encrypted message to your beloved, who must also have a copy of the key; only people with the key can read your message. </div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
<br /></div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
Do note that you do not loop around on the key. This means that the key must be at least as long as the message itself. Moreover, you cannot use this key again (or at least the part of the key you used, if the key is longer than the message, you can use the remainder it next time). This is really an important part of the strength of the one-time pad. </div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
<br /></div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
In fact, the strength of the one-time pad is such that it is unbreakable. Actually, it has been mathematically proven that it cannot be broken without knowledge of the key. The proof goes something like this: there is any number of possible decrypted messages that the encrypted message could represent. Without any knowledge of the key, each of those is exactly equally likely to be the original message. This means that you can't discern between them in any way. Some might make sense while others may not, but there is absolutely no way to tell which of the decryptions that does make sense is the intended one.</div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
<br /></div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
It should be noted that in the way we did this above, we are "leaking" a lot of information because we are not encrypting spaces and punctuation, which compromises the strength of the encryption. There are of course ways to encrypt these as well. In fact, there is no reason we should stick to the traditional alphabetical encryption. Instead of using letters as a basis for the encryption, you could use "bytes of data represented in binary" and instead of asking the key to the message you could use a "bitwise xor". This way you would end up with system that has the same mathematical properties, makes more sense for computers and can represent any type of data. </div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
<br /></div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
Though the one-time pad is very strong, it is not used all that much. This is because it isn't very practical. You need to share a key with the recipient, which needs to be as long as your message. If you can do this securely, why wouldn't you just send the message instead? With that in mind, the only practical use of the one-time pad is that you can share the key at a moment when secure communications are possible and send the message later, when they aren't. </div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
<br /></div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
While the one-time pad may be the ultimate in symmetric encryption, most of the encryption we do today is actually asymmetric. This is when there are different keys for encryption and decryption. One of the two can be public knowledge while the other is kept secret. In order to sign something and prove that you have written it (and nobody has changed anything about it) you use a secret key to encrypt and a public key to decrypt your "signature". In order to make sure there are no eavesdroppers, you use a encryption key that is freely available that has a corresponding decryption that only the intended recipient has.</div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
<br /></div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
Using one-time pads isn't entirely trivial. First of all, your key needs to be truly random. Any kind of pattern in it reduces the strength of the encryption. True randomness actually isn't easy, especially not in the large amounts needed for a one-time pad. Computers actually often simulate randomness, which really doesn't cut it for this purpose. </div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
<br /></div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
The second problem is sharing the key. We already mentioned this, but the problem here becomes that you may not know how much data you will want to send later on. This means that you might need to share a very, very long key just to be sure you can send enough long messages later on. And having a long key lying around is a problem in itself, as a stolen key loses all its value...</div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
<br /></div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
Finally, you really really really can't reuse (parts of) a key. This really can't be stressed enough. During the Second World War, the Germans actually used one-time pads. Except... they reused keys and thus the encryption wasn't unbreakable and was in fact broken. Because of this, the Allies were able to listen in on their communications...</div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
<br /></div>
<div style="font-family: "Helvetica Neue", Arial, sans, sans-serif; font-size: 16px;">
Allright, that is about all that I feel everyone ought to know about the one-time pad. I do intend to write about the ways I would use pads in different situations some other time, but I don't yet know when that will be. The situations I am thinking of would be modern day espionage and and an interstellar empire, but nothing is set in stone yet.</div>
Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-80011015614017317672016-12-13T08:52:00.000+01:002016-12-13T08:56:13.350+01:00Taiga on my Orange Pi PCRecently, one of my hobby projects made it to a very nice first prototype state. It doesn't do much yet, but it is in a state where I can show it to people and personally I think it shows a lot of potential that is in the ideas I had. However, working on the prototype was kept simple because it was so basic; there were only a couple of tasks to work on. In order to keep the further progress of the project structured, I decided I need some form of an issue tracker. I have used Taiga.io for such a project in the past and it worked well. Unfortunately, though, their hosted version only allows a single private project and I already had one.<br />
<br />
Remember all the Single-Board Computers I wrote about a while back? The Pi 2 is still actively running Kodi, the newest Pi 3 is driving an official Pi touch screen and some of the CHIPs are part of the project I mentioned while their versatility means I have ideas for quite a few more of them. However, the Pine and the Orange Pi have been idle since my last post about them. However, for the Orange Pi, this has recently changed.<br />
<br />
I took the Orange Pi and installed Taiga on it. It is quite nice to have my own "dev server" and I'm quite happy about the current situation. I won't describe the exact procedure I followed to get where I am now, as it was basically following <a href="http://taigaio.github.io/taiga-doc/dist/setup-production.html">their guide</a> for installing it. However, I will post a list of notes. Some of them will relate to installing it on the Orange Pi (or on an SBC or on an ARM based device) whereas others will just be my personal gripes with the installation or the guide.<br />
<br />
<ul>
<li>The guide uses the user "taiga" instead of telling you where to use your own username. This makes it easy to miss a spot if you are using a different user.</li>
<li>To make matters worse, they chose the name of their software, so not every instance of the word should in fact be replaced by your user.</li>
<li>I would probably have been better off creating a user and naming it taiga, though. The procedure installs quite a lot in the home directory and now that's under some other user.</li>
<li>The procedure calls for installing postgresql 9.5, but Debian only has 9.4 on stable. By simply replacing the 5 by a 4 it works, as the minimum requirement is version 9.4. (Alternatively, I could have used 9.5 from unstable.)</li>
<li>The guide installs python3 and then just uses Python 3.5. On Debian, you will have installed Python 3.4. This earlier version does simply seem to work for me.</li>
<li>Installation of lxml is known to be problematic on the Raspberry Pi, but can be achieved by increasing the amount of virtual memory. For me, it worked without such hacks, though I do not know if this is due to running Armbian, running a headless image or using an Orange instead of a Raspberry.</li>
<li>Circus isn't available in Debian stable, so I had to add the testing repositories and get it from there.</li>
<li>Pay attention to the output of "service circus status". This is the only way to tell if the backend is actually running.</li>
<li>I skipped everything that was even remotely optional, so I might revisit some of that in the future. The optional parts are sometimes somewhat out of order, which makes it seem you have to pick them up again before the end, but this isn't really the case.</li>
<li>I currently use a .local domain. I think that means I use mdns, but it works on Windows (which mdns shouldn't) so I'm not 100% sure how this is working. It definitely isn't working from android, though, which is a shame. </li>
</ul>
It's a real pity there is no "normal" installation procedure like
running a script or installing a package. Nevertheless, I do now have the whole things running and I am quite happy with having my own development server. Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-61891750252984974022016-07-10T22:53:00.001+02:002016-07-10T22:55:14.186+02:00Space Opera: some observationsWith both Dark Matter and Killjoys having just begun their second season a week ago, I feel it's about time I take some time to write about Space Operas once again. Most of this could have been written during the first season of each of the shows, but I didn't actually do so then, so I'm doing it now.<br />
<h2>
Observations</h2>
With Space Opera having come back after such a long period of almost nothing, you basically say we are in a new generation of the genre. What are the things that stand out in this generation so far?<br />
<br />
<h3>
Tasers are hot</h3>
Whether it's the bad guys using them for torture and stealthy take-overs or the government trying to do things in a non-lethal way (but often still being more brutal than necessary), everyone is using tasers. Both Dark Matter and Killjoys went with more futuristic "Shock sticks", whereas The Expanse went with traditional tasers, giving the feel that the future isn't all that different after all.<br />
<h3>
Aliens are not</h3>
It's just humans everywhere. Aliens are nowhere to be seen. The only exception to this was Otherspace, which had non-corporeal aliens. However, the only times these aliens could be "seen" they were pretending to be human. Unlike Stargate Universe did some time ago, we do often get fully populated galaxies, it's just that all that population is human.<br />
<h3>
Space zombies</h3>
Everyone's doing space zombies in some sort or form. There's different stories behind each show's zombies but somehow space zombies are a craving that is shared by all the writers.<br />
<h3>
Space is gorgeous</h3>
Of course it depends on resolution and black-quality of your screen, but there's a lot more possible in sfx these days and it shows. Even the low-budget shows like Otherspace showed us some gorgeous outer-space shots. Dark Matter was the one coming up the poorest in this regard in my opinion, but even they upped their sfx game for the second season.<br />
<h3>
Interpersonal conflict is important</h3>
One of the ideas that Gene Roddenberry was very keen to build Star Trek on was the fact that the human race had grown beyond interpersonal conflict. Every other show has some form of this conflict, but there's a lot more of this in this generation if you ask me. Dark Matter is all about people who don't know themselves and trust is a big issue there. Killjoys has a closer team, but what happens between the team members is ultimately what drives much of the plot for the first season. The Expanse has people fighting everywhere, but one of the clearest examples might be the "main crew" which does a lot of fighting before they really start considering themselves a crew. Otherspace was just about a single crew, so much of what they do is getting on each other's nerves. It's always been there, but I feel it's even more there now.<br />
<h2>
Star Trek</h2>
I'm very much looking forward to what the new Star Trek will bring to the table early next year. Many of the observations above wouldn't quite fit the Star Trek brand, which is filled with aliens, doesn't really have a suitable place for taser and doesn't feature interpersonal conflict. It will be interesting to see where they take the genre, even if it's uncertain whether it will be suitable for watching by real Trekkies.<br />
<h2>
Other shows</h2>
The interest in the genre seems to have died down a bit. When the entire pie was on the table, everyone wanted a piece of it. Now, there are three solid shows eating that pie, leaving little for any new venture. Both the Blake's 7 remake and Space: 2099 seem to have died a silent death. Of the other things that were in various stages of development, nothing had been heard for some time, so I assume they aren't getting made. I also haven't been able to find anything hinting towards more new things being developed.<br />
<br />
I can understand it. I mean, three shows is a lot and I doubt enough people would be willing to watch yet more Space Opera. That said, I would have loved to hear of more Space Opera, because I definitely would want to watch another series.Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-59949506680615621942016-07-02T17:54:00.002+02:002016-07-03T11:57:05.428+02:00SBCs: All hands on deck!<h2>
The C.H.I.P.</h2>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivcrIDsheCa7c1XUzCEVK6DRVKFh9ICQEbr-q8yNTDDtQrAHL5kJa-eeWxbuGg5c3-_MdQNegD0s-nzgNGVoriw_5zbYwWe4NC8lVCN70_dDj1Ij5BwErol2niX4DoJ4Ik6RSSnYF25UJK/s1600/IMG_20160702_144456_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivcrIDsheCa7c1XUzCEVK6DRVKFh9ICQEbr-q8yNTDDtQrAHL5kJa-eeWxbuGg5c3-_MdQNegD0s-nzgNGVoriw_5zbYwWe4NC8lVCN70_dDj1Ij5BwErol2niX4DoJ4Ik6RSSnYF25UJK/s320/IMG_20160702_144456_edited.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Introducing: the C.H.I.P.</td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
Today I received the last of the Single-board computers I ordered. Despite ordering the devices spread over a year, they all ended up arriving within one week. The C.H.I.P. was the device that I was most excited about, so it's sort of appropriate that it arrived last. This way, it couldn't steal the thunder of any of the other packages.<br />
<br />
There are many reasons why I was so excited about this delivery. I had waited for this device the longest. I had spent the most money on it. The device has the most interesting features in my opinion. The PocketC.H.I.P. is just pure awesomeness. And there's probably more reasons.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizcurvPPG4-rP9fvFikC_7l-kI2otPScjUfjcFHu5iYk5MA9i2gixUWT6Ruv2ewgwgkn9OCWDdpwSlIZaPvkewSuaTpViwT28X9n9a3DdiJ-D68Ueutcc4bf1VTpuslWbKfkL5OgVthrhQ/s1600/IMG_20160702_144518_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizcurvPPG4-rP9fvFikC_7l-kI2otPScjUfjcFHu5iYk5MA9i2gixUWT6Ruv2ewgwgkn9OCWDdpwSlIZaPvkewSuaTpViwT28X9n9a3DdiJ-D68Ueutcc4bf1VTpuslWbKfkL5OgVthrhQ/s320/IMG_20160702_144518_edited.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Top view and bottom view</td></tr>
</tbody></table>
The C.H.I.P actually has some of its most important components moved to its bottom side, including its processor. This happened late in development, as they changed to a larger version of the same processor. To protect the processor, the computer now comes with a case, which only covers its bottom. This is definitely true for all the Kickstarter C.H.I.P.s, but I'm not sure if the "store-bought" C.H.I.P.s will also have this case.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxVjhVDqFiomeAxqfS98fAvN_royNdLpTaBAJQdhaZYng1HKsrJl14tlKCgksmOkj72Xj35vQiJ1sKPCVCWcHMA8kuRLML31eCOeNbm1He8AdPomMsJjNSqTqgyK8TtIIN4_LTZVNhGyBM/s1600/IMG_20160702_144654_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxVjhVDqFiomeAxqfS98fAvN_royNdLpTaBAJQdhaZYng1HKsrJl14tlKCgksmOkj72Xj35vQiJ1sKPCVCWcHMA8kuRLML31eCOeNbm1He8AdPomMsJjNSqTqgyK8TtIIN4_LTZVNhGyBM/s320/IMG_20160702_144654_edited.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Safe and well</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
Additionally, the Kickstarter version of the C.H.I.P. also comes with a Composite cable. This is a cable you can just buy at many stores, but it seems to be a bit undermarketed. It is also the same cable you could use for analog video on your Rapberry Pi 2 or 3.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSVAgDxwDCEyWJ1XwF8sVNTmtGzByXjkbS4H2bj30DdgvO5A7N4dnwCR8JKBceDuHmdmRbUHnRJu35ZUtljznPYVuLSNhWsjvVMi1LmvJjEI7m0Cj3Ad3rHMwY6ybLkUe9B9VRwN8KNDkx/s1600/IMG_20160702_144732_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="294" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSVAgDxwDCEyWJ1XwF8sVNTmtGzByXjkbS4H2bj30DdgvO5A7N4dnwCR8JKBceDuHmdmRbUHnRJu35ZUtljznPYVuLSNhWsjvVMi1LmvJjEI7m0Cj3Ad3rHMwY6ybLkUe9B9VRwN8KNDkx/s320/IMG_20160702_144732_edited.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">In NTC Pink!</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
Unlike many of the other boards, this board is definitely not trying to be another Raspberry. Fro example, it uses female GPIO headers, as opposed to the male headers we've gotten so used to since the original Raspberry. This has the advantage that they could actually mark all the headers on the board.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWttNqeCg8JWb8mfjS4-1QZ-bIVJtwJ-9atEau3ZMYoL-kEE_llHBd5_f_QuWdiQeB67Qo0VqujxjCpiCB8zOh4svtalExqXtjiiTnDOgw_lbMJgXaPD22wXBk7DqW3yc-I48YXhn1ecD7/s1600/IMG_20160702_145048_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWttNqeCg8JWb8mfjS4-1QZ-bIVJtwJ-9atEau3ZMYoL-kEE_llHBd5_f_QuWdiQeB67Qo0VqujxjCpiCB8zOh4svtalExqXtjiiTnDOgw_lbMJgXaPD22wXBk7DqW3yc-I48YXhn1ecD7/s400/IMG_20160702_145048_edited.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">You'll have no reason to use the wrong header</td></tr>
</tbody></table>
<br />
<br />
For comparison's sake, let's just put it side to side with a Raspberry (it's a model 2B).<br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpunimYEGkjGtA94LWRxz2bVwOnPwG8R6YoiZH_TNJ7fWD0SpMFsWcduOX8R5O9Cxtm4x7NuIbZtR06kmbYbB0IqdiulG9QT601nsWQ8O9cBodsFZUPtdpBXs3OPggrOGn7RZkdVxYO5Bb/s1600/IMG_20160702_151534_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="259" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpunimYEGkjGtA94LWRxz2bVwOnPwG8R6YoiZH_TNJ7fWD0SpMFsWcduOX8R5O9Cxtm4x7NuIbZtR06kmbYbB0IqdiulG9QT601nsWQ8O9cBodsFZUPtdpBXs3OPggrOGn7RZkdVxYO5Bb/s320/IMG_20160702_151534_edited.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">They're quite different - at least, to the trained eye</td></tr>
</tbody></table>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
I actually own three C.H.I.P.s now. There was one in my pledge, another in the PocketC.H.I.P. that was in my pledge, and then finally one extra I added after the Kickstarted ended. I also pre-ordered a couple more, so there's several more of these machines on the way. I guess I may have gone a little overboard...<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWZElt-uC7jTgNEwS3y29eDyg07Nh67JBiCzWI3CXd8azX87men4uTvH_wC3S4LUOoXvV21GH0GIUfjdofnela0nX61OGuWggy21Zzc6Nws4yO4MicyZfyHOexbnoCjbmF88epl8RFm__P/s1600/IMG_20160702_145224_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWZElt-uC7jTgNEwS3y29eDyg07Nh67JBiCzWI3CXd8azX87men4uTvH_wC3S4LUOoXvV21GH0GIUfjdofnela0nX61OGuWggy21Zzc6Nws4yO4MicyZfyHOexbnoCjbmF88epl8RFm__P/s320/IMG_20160702_145224_edited.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The power of threes!</td></tr>
</tbody></table>
<h2>
Compared to the Pi Zero</h2>
The Chip lives in the same product space as the Pi Zero. It's the closest product in size and cost, and its specs are in fact rather similar. Let's put the two side by side.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_cBa7pO3ZAoF9KVj_ZigEPTeQONQ6eGXwKjWKSljNwUh4u1r_Kow5QvnbFZwaJwvFzXMdVn8GI8DTZgx4zHUkn4G3Jv1rAdHUuMEUpx0yJXNo-Uw50UV9_ESi7h_N8DO4fPCdduxZa-Bo/s1600/IMG_20160702_144854_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_cBa7pO3ZAoF9KVj_ZigEPTeQONQ6eGXwKjWKSljNwUh4u1r_Kow5QvnbFZwaJwvFzXMdVn8GI8DTZgx4zHUkn4G3Jv1rAdHUuMEUpx0yJXNo-Uw50UV9_ESi7h_N8DO4fPCdduxZa-Bo/s320/IMG_20160702_144854_edited.jpg" width="239" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fighting for <$10 mastery</td></tr>
</tbody></table>
As you can see, they are actually rather comparable in size. The Pi Zero is thinner, but it's also slightly longer. In the end, the C.H.I.P. is a bit bigger, though.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc1xS-LKapod_tJbjOxxq8Z60uESICHbfYOx7nYlZpfIolgfEuxA5FcXt01bc8TiNJVdoQG1ZeW0Oh_crj6QPcEjaUkvz_nA4dB_IL-BRsHAZeKwqLlg5j3efipzhAbLLkXSm9BuTBw3xl/s1600/IMG_20160702_144911_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc1xS-LKapod_tJbjOxxq8Z60uESICHbfYOx7nYlZpfIolgfEuxA5FcXt01bc8TiNJVdoQG1ZeW0Oh_crj6QPcEjaUkvz_nA4dB_IL-BRsHAZeKwqLlg5j3efipzhAbLLkXSm9BuTBw3xl/s320/IMG_20160702_144911_edited.jpg" width="204" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">That's <i>TWO </i>computers!</td></tr>
</tbody></table>
<br />
Putting the Zero on top of the Chip, shows how close in size they are. The Zero actually fits so nicely between the GPIO headers of the Chip that it almost looks like there's only one board there. When talking about height, though, the story is a bit different.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg043y7tjS-AMDHqtq_C2mYK3b9aXqMQFdQROQT1nMGtuoGI-uPHtbbHiyubd_XJRz6rchfNt70P_Fcpp8nVfnZLsQ4X9QdRY76MLpxdquQuzGBCQzoumsSIZOBvJ1LdJ_0-KDWCspQ29Vq/s1600/IMG_20160702_144939.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv4V3XUIiXk_KWu21IqDlYDkPuIZmW3L9Rqz57Di865zsfWMx42t-z4szSHf2J7KrtzdEMMJNDt_9a0vbU1KHYeNckCnW12kzBsZbJ6EsRBZ4a2il6J82G4umxaoRb6yfzpV_mvgR5UK2w/s1600/IMG_20160702_144939_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="149" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv4V3XUIiXk_KWu21IqDlYDkPuIZmW3L9Rqz57Di865zsfWMx42t-z4szSHf2J7KrtzdEMMJNDt_9a0vbU1KHYeNckCnW12kzBsZbJ6EsRBZ4a2il6J82G4umxaoRb6yfzpV_mvgR5UK2w/s320/IMG_20160702_144939_edited.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">No competition there...<span id="goog_456073502"></span><span id="goog_456073503"></span></td></tr>
</tbody></table>
<h2>
The extras</h2>
I backed at the "All the things" level, so there's more things that were in the package. Let's have a look.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVa8SBPvhupMQAHVZBB1NGJnh0hAdpmrMOQTF8jUQHHZpBDuF6MRk764JHrQz94orpK3RwirhLzWafNY4884MmlUyOHT_Nt3sZuDEEh4uIVQqMCTU7SVvSlv54LxWi-C2vnS0GtGwo5RbH/s1600/IMG_20160702_145933_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="234" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVa8SBPvhupMQAHVZBB1NGJnh0hAdpmrMOQTF8jUQHHZpBDuF6MRk764JHrQz94orpK3RwirhLzWafNY4884MmlUyOHT_Nt3sZuDEEh4uIVQqMCTU7SVvSlv54LxWi-C2vnS0GtGwo5RbH/s320/IMG_20160702_145933_edited.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">All the things!</td></tr>
</tbody></table>
<br />
<br />
There's the two C.H.I.P.s, the HDMI extension board, the VGA extension board, the Composite cables (which we already looked at) and the PocketC.H.I.P. Though it's a bit outside of the scope of the single-board computer - and a bit more expensive, I really like the PocketC.H.I.P. so let's have a closer look at it.]<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt6E3w8Ot6qfc3NH9Ni89_eF9eM3W-CwuU2r8sNKINPiUQuHW_qYIbupuuL47dfQe7OwhkoG7imMhKXwkFpQVuv6DPr54w20EiPfAIK3DKa_ayvkSEnQGAvbAOb4LvQc96ArtYrYJ2EIW7/s1600/IMG_20160702_150210_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt6E3w8Ot6qfc3NH9Ni89_eF9eM3W-CwuU2r8sNKINPiUQuHW_qYIbupuuL47dfQe7OwhkoG7imMhKXwkFpQVuv6DPr54w20EiPfAIK3DKa_ayvkSEnQGAvbAOb4LvQc96ArtYrYJ2EIW7/s320/IMG_20160702_150210_edited.jpg" width="213" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Not truly pocket-size, is it?</td></tr>
</tbody></table>
On the front, we see a fully featured keyboard and the screen. The screen has a resolution of 480x272 and has a resistive touch layer (so no multitouch!). Neither is exactly optimal, but they definitely kept the costs down. There's also the possibility of using your GPIO headers, as they seem to be connected to the holes at the top of the device.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8mL7IVl3rtC-P-oxe6-ibj9XynOioYdYJYO4MyOd-iidujX0oEViTmogHB0M8WQVlil9bXTKlEKcUkaUDA9wcIxryvWv3YoL4DV-CUn1v7Yb4U4NmziEQqZj7s9Q4-grCipgtQWsjRB0A/s1600/IMG_20160702_150227_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8mL7IVl3rtC-P-oxe6-ibj9XynOioYdYJYO4MyOd-iidujX0oEViTmogHB0M8WQVlil9bXTKlEKcUkaUDA9wcIxryvWv3YoL4DV-CUn1v7Yb4U4NmziEQqZj7s9Q4-grCipgtQWsjRB0A/s320/IMG_20160702_150227_edited.jpg" width="216" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">On the other side...</td></tr>
</tbody></table>
The backside clearly shows the C.H.I.P. It is held in place by its GPIO headers, so you can get it out with some carefully applied force. You can also see the battery, which gives the device its portability. The battery is charged through the CHIP, which has the required circuitry for this.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO_CHggyujdEO-ZIZrgjcO5KX1xEfTqQ1oQ8LMlcfOc5J1UeKOmCiyRJybchA2t9YvYie7kCtKRdHEw5_YZMC-0pkFyGywwqnt_j-dTsG7_pS8-wpmSg7ChJ0FAB7m36Mq6IFRhwd2BuKF/s1600/IMG_20160702_150540_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO_CHggyujdEO-ZIZrgjcO5KX1xEfTqQ1oQ8LMlcfOc5J1UeKOmCiyRJybchA2t9YvYie7kCtKRdHEw5_YZMC-0pkFyGywwqnt_j-dTsG7_pS8-wpmSg7ChJ0FAB7m36Mq6IFRhwd2BuKF/s320/IMG_20160702_150540_edited.jpg" width="230" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Jumpin' 'n' Dashin'</td></tr>
</tbody></table>
Getting the PocketC.H.I.P. up and running was extremely easy. I just held down the power (and home) button for a couple of seconds and that was it...<br />
<br />
<h2>
The whole family</h2>
Since this was the last of the boards I was expecting, let's all pose together for a photo.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA2D861SEN5sMbZ4nRVlRkJawdVjcjOPPGjhxQihW5MylZH_UyXPTFhnBkSM3lZjzNCvH4kawVifMqzMGnqUcnoL-2jTUcWgWcqCUuICGhfjAx4k3Fkjj32l_vEj6bEnJxnDVuhJAm4l7P/s1600/IMG_20160702_151358_edit.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA2D861SEN5sMbZ4nRVlRkJawdVjcjOPPGjhxQihW5MylZH_UyXPTFhnBkSM3lZjzNCvH4kawVifMqzMGnqUcnoL-2jTUcWgWcqCUuICGhfjAx4k3Fkjj32l_vEj6bEnJxnDVuhJAm4l7P/s320/IMG_20160702_151358_edit.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Clearly, if a board's green, it must be a Raspberry</td></tr>
</tbody></table>
Alright, alright. The raspberry belongs in there as well...<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTEvMy2yME15z3Zd6onJAtHRhvwBagta5z9l3nkk5XPXVz-bE9atmqy7i_bSoVRkUSNM8Wv_fgXC64blQY9TzoYvaJ316Kv5N6sExpYjDqNTJEk31vMKyH_aQDD95nFsWjZYlFBXnI2dUR/s1600/IMG_20160702_151408_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="204" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTEvMy2yME15z3Zd6onJAtHRhvwBagta5z9l3nkk5XPXVz-bE9atmqy7i_bSoVRkUSNM8Wv_fgXC64blQY9TzoYvaJ316Kv5N6sExpYjDqNTJEk31vMKyH_aQDD95nFsWjZYlFBXnI2dUR/s320/IMG_20160702_151408_edited.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">You see?</td></tr>
</tbody></table>
<h2>
And finally</h2>
Before I end this blogpost, there's one more thing I've got to do. You see, I've completely forgotten the shot with the pen for comparison. So here you go:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRIM3sV_8UXHD3hXi7sLbmJgbvo0zo_S4eLiWYy0Rd_EK__5GLUuQelQyivJaq8cOyVRwr3dc2cgrYTTI-Y4Ux3RHX41z9QwQqwVWbb4KzB93gAHwqzbqbv0sbHWT_LJp3mpJ2Cjk_2x2w/s1600/IMG_20160702_150755_edited.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="233" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRIM3sV_8UXHD3hXi7sLbmJgbvo0zo_S4eLiWYy0Rd_EK__5GLUuQelQyivJaq8cOyVRwr3dc2cgrYTTI-Y4Ux3RHX41z9QwQqwVWbb4KzB93gAHwqzbqbv0sbHWT_LJp3mpJ2Cjk_2x2w/s320/IMG_20160702_150755_edited.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Same pen as before.</td></tr>
</tbody></table>
<br />
<br />
<br />Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com2tag:blogger.com,1999:blog-6983518491127927937.post-90342190223544187982016-07-01T21:09:00.000+02:002016-12-13T08:52:58.487+01:00SBCs: The saga continuesToday, the Orange Pi arrived. Of all the boards, this one will probably be the one that is the most challenging to get to work. Its main problem is that the software support and documentation is simply non-existent.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9xS90dBUbtUUwFP44hVqkoXV06y6_JYXd4EjVNyOhFNpMEE8Xs88j94x7_pM_zW4Pvsa_b1M_Q_0vhg25vFtMV-EJfzdqnG90cab1cpcZDNFET1MPnYcPL_IGNE3oFnzxYkQ5fyYmDFST/s1600/IMG_20160701_185211.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9xS90dBUbtUUwFP44hVqkoXV06y6_JYXd4EjVNyOhFNpMEE8Xs88j94x7_pM_zW4Pvsa_b1M_Q_0vhg25vFtMV-EJfzdqnG90cab1cpcZDNFET1MPnYcPL_IGNE3oFnzxYkQ5fyYmDFST/s320/IMG_20160701_185211.jpg" width="320" /></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAxTYgakdXyWF6A51oz3d1m3O7Ix4352Qr_6droB-oPA5RAFH1fLXCSN6LEcka7whTiq7ljjqJWbEXEqGQdhoNUntqGM6Z97FlrFuOA0MQFU14Y2n4dKSCV_LWIMI1YFViLL1NWp_RdCr-/s1600/IMG_20160701_185643.jpg" imageanchor="1"></a><br />
The model that I got is called the Orange Pi PC. I ordered it from China for about 17 euros including shipping, with of course the drawback that it takes a couple of weeks before it arrives. It is clearly modeled closely after the Raspberry Pi. It's specs are very reminiscent of the Raspberry. It trades the DSI connector for a microphone and a power switch, while it has a different type of power supply and has a processor that is significantly faster (at least, on paper). However, the rest of the specs closely match and the two boards are even exactly the same size.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijjnOzAMy9vYjgFnYelHenghoyHn1IaE4BBMprzxUBY1ol1o7_g84CwhUWu8kUDXhR6dlyvjMZA_HsSzWwqiLXVnWzpPhFj3oZLqTm3iY_LDW6hTb3au-uLSf-TSPn6PUELOIVYsQ6_byd/s1600/IMG_20160701_185638.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijjnOzAMy9vYjgFnYelHenghoyHn1IaE4BBMprzxUBY1ol1o7_g84CwhUWu8kUDXhR6dlyvjMZA_HsSzWwqiLXVnWzpPhFj3oZLqTm3iY_LDW6hTb3au-uLSf-TSPn6PUELOIVYsQ6_byd/s320/IMG_20160701_185638.jpg" width="320" /></a></div>
<br />
I'm expecting to receive my pledge rewards for the CHIP tomorrow, so then I should have all the boards (and all within the span of a week). The next thing is to get "making". I've already managed to run Debian on both the Pine and the Zero, but I haven't had the time to get much further than that. Let's see what we can do with all these boards.Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com2tag:blogger.com,1999:blog-6983518491127927937.post-55258323082850726952016-06-28T22:03:00.000+02:002016-06-30T16:57:53.845+02:00SBCs: And so it beginsOver the past year or so, I have invested money in a number of different Single-Board Computers (that's Raspberry Pi-like things or credit-card size computers). I Kickstarted both the C.H.I.P. and the Pine A64. I also ordered an Orange Pi recently and ordered a Raspberry Pi Zero as soon as it became readily available. It seems the delivery dates all magically converged. While the CHIP and the Orange Pi are currently in transit, I received both the Pine and the Zero today.<br />
<br />
Let's start with the Pine A64.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDB69Vwq_FGUVc5tUaHH5cp1rU1oXxHwN8K4UaKILCH0mq5P3Ll6olbD7Xup18I2vML15NBp6wqvNn09Tn4jkkm0IJwQpMIQPnYIlXh_XxTMSASpe_Yu8mM45Hp5Iv6diDe8wiD0weLpUA/s1600/IMG_20160628_182003.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDB69Vwq_FGUVc5tUaHH5cp1rU1oXxHwN8K4UaKILCH0mq5P3Ll6olbD7Xup18I2vML15NBp6wqvNn09Tn4jkkm0IJwQpMIQPnYIlXh_XxTMSASpe_Yu8mM45Hp5Iv6diDe8wiD0weLpUA/s320/IMG_20160628_182003.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Pine A64</td></tr>
</tbody></table>
<br />
I hadn't realized quite how big this board is. I mean, a Raspberry Pi (a normal one, not the zero) fits in it twice!<br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxANuwY-Lp2-1uHeF8R1s81k7nNIfyzRwzzrSbhLBS4FBXdWPjymjMi3-oV-qrRPwdErdt5zuehPeQV9vr2FP6w0Lg7Pv0MAxP21ympT6HnqOFGqYd-SEkiKa3bJwb5FF14TB-EQTdElC/s1600/IMG_20160628_182352.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxANuwY-Lp2-1uHeF8R1s81k7nNIfyzRwzzrSbhLBS4FBXdWPjymjMi3-oV-qrRPwdErdt5zuehPeQV9vr2FP6w0Lg7Pv0MAxP21ympT6HnqOFGqYd-SEkiKa3bJwb5FF14TB-EQTdElC/s320/IMG_20160628_182352.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Raspberry for scale</td></tr>
</tbody></table>
It's a pretty powerful board that was pretty cheap as well (though once you added shipping it was comparable in price to a Raspberry). When I backed the project, I thought that I would perhaps be able to use its hardware supported HEVC decoding to my advantage, but I learned later that it will be a challenge at best to get a grapics driver with hardware support working under linux.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8sgrUXUEUpJSLc3ma6RkWsJdw9WkXkw9AHUoJ29PrqN-pO0dmGnsRCWfpbk5f1wjyXUyVXSUGrxISGo-rfLDcpdxnt8W-fvjIxVzjHP5vU2At0YrhZRRsh-Z4ewiX2kE10U2mNv2P92Tu/s1600/IMG_20160628_183600.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8sgrUXUEUpJSLc3ma6RkWsJdw9WkXkw9AHUoJ29PrqN-pO0dmGnsRCWfpbk5f1wjyXUyVXSUGrxISGo-rfLDcpdxnt8W-fvjIxVzjHP5vU2At0YrhZRRsh-Z4ewiX2kE10U2mNv2P92Tu/s320/IMG_20160628_183600.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The case does look really good, if you ask me</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihu2c4Vt1sbop1yijU67BjoDC0rOPzSLwATwSs3VtFgQESyHYHEgX8UbPgUDqYuKQ9DtKjL-tx13ctadeXWys6kfDr8-y5lPXlS8sAKQHFOgrxRxtZDlePxp29bExn-GrdH7OUmB2i6Nw5/s1600/IMG_20160628_183633_edit.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="255" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihu2c4Vt1sbop1yijU67BjoDC0rOPzSLwATwSs3VtFgQESyHYHEgX8UbPgUDqYuKQ9DtKjL-tx13ctadeXWys6kfDr8-y5lPXlS8sAKQHFOgrxRxtZDlePxp29bExn-GrdH7OUmB2i6Nw5/s320/IMG_20160628_183633_edit.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">And once again, it's big...<br />
That pen easily fits on top of the case</td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
<br />
But of course the better known product is the Raspberry Pi. I didn't quite realize how small this thing was! (Well, not until a coworker showed me his Zero this morning.)<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7ZtY9XweeYaB-J2A4YLtOeDIcQJZMvhamTAKVSP9bB8fICwm3vJWlajNlZD9KEGwCGP0heMoxd79snBX926Q-qSOMnrR_c1TKif92gqmh_K3be-k7j8blO549jvS4HSjACzexHWqikxUm/s1600/IMG_20160628_182910_edit.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7ZtY9XweeYaB-J2A4YLtOeDIcQJZMvhamTAKVSP9bB8fICwm3vJWlajNlZD9KEGwCGP0heMoxd79snBX926Q-qSOMnrR_c1TKif92gqmh_K3be-k7j8blO549jvS4HSjACzexHWqikxUm/s320/IMG_20160628_182910_edit.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Raspberry Pi Zero<br />
That's the same pen, by the way</td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
I don't know what I'll do with the Zero, but I definitely had to have it. And besides, I have to add to the <a href="http://2015/12/chip-vs-raspberry-pi-zero.html">comparison I wrote late last year</a> once my CHIP arrives.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZx_fgh-_Y4JG40LFsZEb4NtlmKl7EFzp0ds9em6FKf4C3LEhyphenhyphenrNA5qUw_kxmj-zkG00zlbEktQvbL910-yHu9gXWp40-INR6ujXzBp67t9MD9wYx4IdSRb4jTXC0UZMW0hCOpRVvp2GXA/s1600/IMG_20160628_214343.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZx_fgh-_Y4JG40LFsZEb4NtlmKl7EFzp0ds9em6FKf4C3LEhyphenhyphenrNA5qUw_kxmj-zkG00zlbEktQvbL910-yHu9gXWp40-INR6ujXzBp67t9MD9wYx4IdSRb4jTXC0UZMW0hCOpRVvp2GXA/s320/IMG_20160628_214343.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Raspberry for scale. I just love being able to say that.</td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
Alright, I guess I'm off to see if I still have two SD cards lying around. And, more importantly, whether I can still find my card reader.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnthCEENh7DOFfAVINiMPGg3AbxdXQTwkl1FcWIimeo5L3FymnugOLd6oOnSJYpkh-kTM8bdpu6-te676N0Y1xNCwdV9bumY-f2yT6j1Wr_4nK8QqQYEfX-IZqlKIkmR7OIjkuz5urmKJy/s1600/IMG_20160628_215006.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnthCEENh7DOFfAVINiMPGg3AbxdXQTwkl1FcWIimeo5L3FymnugOLd6oOnSJYpkh-kTM8bdpu6-te676N0Y1xNCwdV9bumY-f2yT6j1Wr_4nK8QqQYEfX-IZqlKIkmR7OIjkuz5urmKJy/s320/IMG_20160628_215006.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Raspberry Pi Zero and Pine A64 side by side</td></tr>
</tbody></table>
Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com1tag:blogger.com,1999:blog-6983518491127927937.post-89134549745151602412016-06-26T23:51:00.002+02:002016-06-26T23:52:32.939+02:00Has a game aged well?I recently read a bit on Reddit that talked about "video games becoming outdated". It said that it didn't understand the concept, since technology can go out of date, while art cannot. Today, I want to talk about the same general concept. However, I'll call it "aging well" and "not aging well".<br />
<br />
So, the idea is that some games have aged well. What does that mean? It means that though it was made in a different time, it still holds up to the changed standards. It means that it feels like it could have been made more recently. It means that when playing it you aren't bothered by the signs that the game is old. It means that it doesn't feel like it was limited because of restrictions that are no longer there.<br />
<br />
Other games have not aged well. The controls may feel wrong and even with some tweaking you aren't getting to what you're used to today. The story might not hold up to standards that are set these days. It may be that it simply looks really bad to someone used to more newfangled graphics. The pacing might not be what we've come to expect. Perhaps it's simply the learning curve that couldn't pass today.<br />
<br />
It should definitely be said that this is a very personal and opinion-based thing. It's better possible to discuss why you feel that a game has or has not aged well than to debate whether red is more beautiful than green or not, but in the end it is still about an opinion. It's like how we can discuss why we like a game and whether it is a good game, but at the end of the day we're still going to have our own opinions (hopefully).<br />
<br />
Of course, this whole concept is not limited to games only. The same terminology is often used when talking about film. Both tv shows (as well as their individual episodes) can age well or poorly. It''s all about whether or not it holds up today. Whether or not it feels antiquated. Both these media are rather young and still actively evolving. Music is also going through a lot of changes, so it could probably apply there as well, even if I don't see it. I don't know if it can apply to more traditional forms of art, such as sculpting or painting. I don't know so much about them, but at the surface it doesn't seem to be the same there.<br />
<br />
That's my views on aging of games and a couple of other media as well. I'm not sure if I can really put a conclusion on it and if I try to summarize it, I just end up paraphrasing something from the second or third paragraph, so I'll just leave it at this: not all games have aged equally well.Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0tag:blogger.com,1999:blog-6983518491127927937.post-9487114756006550612016-01-03T23:23:00.003+01:002016-01-03T23:34:20.178+01:00Space Opera in 2015 [on tv]For five years, we haven't had a single space opera on tv. The five years before that, there were only one or two series that were able to brave the executives. But finally, 2015 marked the return of the genre to our living rooms. And when it rains, it pours.<br />
<br />
It's clear that the genre was wide open and many people were looking to fill that hole. Last year brought us 4 series: Dark Matter, Killjoys, The Expanse and Other Space. I'll just write about them all in turn.<br />
<h2>
Other Space</h2>
Other Space was the only of the four series that came to our screens in the first quarter of the year. It was released all at once in April on Yahoo Screen, as part of their original content offering. It takes space opera and marries it with comedy. It's more like Hyperdrive than Red Dwarf in the sense that it truly is space opera comedy, not comedy that happens to be set on a spaceship. However, even then it goes a step further than Hyperdrive. Instead of every detail serving comedy, there's a space opera story and space opera comedy, creating a mix that I don't think has ever been done before.<br />
<br />
The show was clearly produced on a very low budget, but I'd say that adds to its charm rather than detracting from it. The show also showed that space scenes can look amazing these days, even when the money is limited. It's also eight episodes of half an hour each, making it a rather short watch. And on top of that Yahoo lost too much on their original content to continue with any of it, meaning that the chance of a second season seems rather remote. If you like the genre, I'd definitely recommend watching. Just fit it between the other things your watching.<br />
<h2>
Dark Matter</h2>
In June, the space opera program really started gaining traction. Dark Matter was the first of the non-comedy space operas. It is also the most traditional space opera that aired in 2015. It put a crew in a fancy ship and let them struggle with space travel and all that entails. It added a twist, though: the crew is suffering from group amnesia. Even though they are able to figure out who they are by the end of the first episode, they aren't too willing to truly assume the same identities and that's one of the things that influences almost every story.<br />
<br />
Not every angle they took was truly interesting and every once in a while there seemed to be a bit of a plot hole as the writers seemed to forget about things in previous episodes (and thus didn't care to mention why this was approached in a similar way). However, the problems got less as the show settled into a good rhythm and by the end it was pretty good. It still didn't quite hit the sweet spot for me, but I was hungry enough for space opera to not care the least bit.<br />
<br />
Dark Matter is due for another thirteen episodes this year, meaning that we'll definitely get to enjoy more space opera. That of course also means that the cliff hanger that ended the first season will not have to go unresolved.<br />
<h2>
Killjoys</h2>
Killjoys. This is the gem of the year, in my books. It premiered less than a week later than Dark Matter, but it takes quite a different approach with a rather small cast. Though it is implied that there's more to known space, the show sticks to a single star system. Like any good Space Western. Because that's what the show is. It may not be as literal in its Western part as the archetypal Firefly, but it but it does forego the exploration of the wide universe for the scavenge for the next paycheck in a smaller, known system. Oh, and much of that system lives on the outskirts of the law, with bounty hunters - or killjoys in local slang - running much of the show.<br />
<br />
The show really took me in with these three characters living on one ship and going on the missions while also uncovering things about their own pasts and and going off on personal quests from time to time. This first season got into its groove quickly and really feels like a story with a beginning, a middle and an end. Though they did leave more than enough questions open for the future of the series, it did also wrap things up nicely.<br />
<br />
Unlike any other space western I know of, Killjoys got its second season greenlit without a hitch. I mean, it has only had ten episodes, so it's not even at the length of Firefly yet, but things are looking well. I'm definitely looking forward to seeing more of this in 2016.<br />
<h2>
The Expanse</h2>
The year was closed off with the first four episodes of The Expanse. It's a little harder to write about a show that has barely begun, but so far it looks enjoyable if a little convoluted. The hopes for this series were high as it was rumored to be the show to fill the shoes that the reimagined Battlestar Gallactica left. However, I don't think it quite lives up to that standard. We'll just have to see where it goes. Visually, though, this show is just stunning.<br />
<br />
The show is set in a relatively close future where humanity is active both on Mars and the meteor belt. The whole system is on edge as hostilities seem to be able to break out at just about any moment and in the mean time air and (more importantly, it would seem) water is a scarce commodity. There seem to be some plot holes in this whole setting in my opinion, but nevertheless this brings us a number of story lines that all have their interesting sides. However, it is still quite hard to pinpoint what it is all about with all these different threads.<br />
<h2>
Ascension</h2>
A special mention goes out to Ascension. It didn't get beyond a mini-series and in the USA it actually aired December 2014 (in Canada it was early 2015, so it still sort of counts), but it was quite worth the watch. I have no idea where the show would have gone if it had continued, but is a quite clever show and puts a nice twist on the space opera genre.<br />
<br />
It revolves around a generation ship sent out into space some fifty years ago, traveling at near-light speeds. Basically, it hasn't encountered anything and it's really just about dealing with some of the problems of space travel, but more even about the challenges of a generation ship. A whole social structure emerged and the internal politics are a joy to watch. And yeah, there's some things I just can't tell because it would spoil part of watching...<br />
<h2>
The future</h2>
With two series being renewed for a second season and a third continuing its first into the new year, it looks unlikely that we'll be starved for space opera again any time soon. But it seems there is even more in the pipelines. Syfy mentioned working on four different space opera pilots nearly three years ago and only one of them has had any known result (Ascension, which was known as Sojourn back then), so I personally still hold some hope that more will be created from that avenue. Three years may be a lot not to hear anything, but for the creation of a tv series, it's really not all that crazy (though my hope may fade if we don't hear something soon now). In the mean time, there's talks of remakes for Blake's 7, Lost in Space and Space: 1999. Additionally, there also seems to be some decent progress on the tv version of Ringworld. And of course, Trek is coming back to the format of tv series in early 2017.Jasperhttp://www.blogger.com/profile/16649733611326930181noreply@blogger.com0