- <title>My own self balancing Lego Segway</title>
- <link>http://people.skolelinux.org/pere/blog/My_own_self_balancing_Lego_Segway.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/My_own_self_balancing_Lego_Segway.html</guid>
- <pubDate>Fri, 4 Nov 2016 10:15:00 +0100</pubDate>
- <description><p>A while back I received a Gyro sensor for the NXT
-<a href="mindstorms.lego.com">Mindstorms</a> controller as a birthday
-present. It had been on my wishlist for a while, because I wanted to
-build a Segway like balancing lego robot. I had already built
-<a href="http://www.nxtprograms.com/NXT2/segway/">a simple balancing
-robot</a> with the kids, using the light/color sensor included in the
-NXT kit as the balance sensor, but it was not working very well. It
-could balance for a while, but was very sensitive to the light
-condition in the room and the reflective properties of the surface and
-would fall over after a short while. I wanted something more robust,
-and had
-<a href="https://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NGY1044">the
-gyro sensor from HiTechnic</a> I believed would solve it on my
-wishlist for some years before it suddenly showed up as a gift from my
-loved ones. :)</p>
-
-<p>Unfortunately I have not had time to sit down and play with it
-since then. But that changed some days ago, when I was searching for
-lego segway information and came across a recipe from HiTechnic for
-building
-<a href="http://www.hitechnic.com/blog/gyro-sensor/htway/">the
-HTWay</a>, a segway like balancing robot. Build instructions and
-<a href="https://www.hitechnic.com/upload/786-HTWayC.nxc">source
-code</a> was included, so it was just a question of putting it all
-together. And thanks to the great work of many Debian developers, the
-compiler needed to build the source for the NXT is already included in
-Debian, so I was read to go in less than an hour. The resulting robot
-do not look very impressive in its simplicity:</p>
-
-<p align="center"><img width="70%" src="http://people.skolelinux.org/pere/blog/images/2016-11-04-lego-htway-robot.jpeg"></p>
-
-<p>Because I lack the infrared sensor used to control the robot in the
-design from HiTechnic, I had to comment out the last task
-(taskControl). I simply placed /* and */ around it get the program
-working without that sensor present. Now it balances just fine until
-the battery status run low:</p>
-
-<p align="center"><video width="70%" controls="true">
- <source src="http://people.skolelinux.org/pere/blog/images/2016-11-04-lego-htway-balancing.ogv" type="video/ogg">
-</video></p>
-
-<p>Now we would like to teach it how to follow a line and take remote
-control instructions using the included Bluetooth receiver in the NXT.</p>
-
-<p>If you, like me, love LEGO and want to make sure we find the tools
-they need to work with LEGO in Debian and all our derivative
-distributions like Ubuntu, check out
-<a href="http://wiki.debian.org/LegoDesigners">the LEGO designers
-project page</a> and join the Debian LEGO team. Personally I own a
-RCX and NXT controller (no EV3), and would like to make sure the
-Debian tools needed to program the systems I own work as they
-should.</p>
-</description>
- </item>
-
- <item>
- <title>Aktivitetsbånd som beskytter privatsfæren</title>
- <link>http://people.skolelinux.org/pere/blog/Aktivitetsb_nd_som_beskytter_privatsf_ren.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Aktivitetsb_nd_som_beskytter_privatsf_ren.html</guid>
- <pubDate>Thu, 3 Nov 2016 09:55:00 +0100</pubDate>
- <description><p>Jeg ble så imponert over
-<a href="https://www.nrk.no/norge/forbrukerradet-mener-aktivitetsarmband-strider-mot-norsk-lov-1.13209079">dagens
-gladnyhet på NRK</a>, om at Forbrukerrådet klager inn vilkårene for
-bruk av aktivitetsbånd fra Fitbit, Garmin, Jawbone og Mio til
-Datatilsynet og forbrukerombudet, at jeg sendte følgende brev til
-forbrukerrådet for å uttrykke min støtte:
-
-<blockquote>
-
-<p>Jeg ble veldig glad over å lese at Forbrukerrådet
-<a href="http://www.forbrukerradet.no/siste-nytt/klager-inn-aktivitetsarmband-for-brudd-pa-norsk-lov/">klager
-inn flere aktivitetsbånd til Datatilsynet for dårlige vilkår</a>. Jeg
-har ønsket meg et aktivitetsbånd som kan måle puls, bevegelse og
-gjerne også andre helserelaterte indikatorer en stund nå. De eneste
-jeg har funnet i salg gjør, som dere også har oppdaget, graverende
-inngrep i privatsfæren og sender informasjonen ut av huset til folk og
-organisasjoner jeg ikke ønsker å dele aktivitets- og helseinformasjon
-med. Jeg ønsker et alternativ som <em>ikke</em> sender informasjon til
-skyen, men derimot bruker
-<a href="http://people.skolelinux.org/pere/blog/Fri_og__pen_standard__slik_Digistan_ser_det.html">en
-fritt og åpent standardisert</a> protokoll (eller i det minste en
-dokumentert protokoll uten patent- og opphavsrettslige
-bruksbegrensinger) til å kommunisere med datautstyr jeg kontrollerer.
-Er jo ikke interessert i å betale noen for å tilrøve seg
-personopplysninger fra meg. Desverre har jeg ikke funnet noe
-alternativ så langt.</p>
-
-<p>Det holder ikke å endre på bruksvilkårene for enhetene, slik
-Datatilsynet ofte legger opp til i sin behandling, når de gjør slik
-f.eks. Fitbit (den jeg har sett mest på). Fitbit krypterer
-informasjonen på enheten og sender den kryptert til leverandøren. Det
-gjør det i praksis umulig både å sjekke hva slags informasjon som
-sendes over, og umulig å ta imot informasjonen selv i stedet for
-Fitbit. Uansett hva slags historie som forteller i bruksvilkårene er
-en jo både prisgitt leverandørens godvilje og at de ikke tvinges av
-sitt lands myndigheter til å lyve til sine kunder om hvorvidt
-personopplysninger spres ut over det bruksvilkårene sier. Det er
-veldokumentert hvordan f.eks. USA tvinger selskaper vha. såkalte
-National security letters til å utlevere personopplysninger samtidig
-som de ikke får lov til å fortelle dette til kundene sine.</p>
-
-<p>Stå på, jeg er veldig glade for at dere har sett på saken. Vet
-dere om aktivitetsbånd i salg i dag som ikke tvinger en til å utlevere
-aktivitets- og helseopplysninger med leverandøren?</p>
-
-</blockquote>
-
-<p>Jeg håper en konkurrent som respekterer kundenes privatliv klarer å
-nå opp i markedet, slik at det finnes et reelt alternativ for oss som
-har full tillit til at skyleverandører vil prioritere egen inntjening
-og myndighetspålegg langt foran kundenes rett til privatliv. Jeg har
-ingen tiltro til at Datatilsynet vil kreve noe mer enn at vilkårene
-endres slik at de forklarer eksplisitt i hvor stor grad bruk av
-produktene utraderer privatsfæren til kundene. Det vil nok gjøre de
-innklagede armbåndene «lovlige», men fortsatt tvinge kundene til å
-dele sine personopplysninger med leverandøren.</p>
-</description>
- </item>
-
- <item>
- <title>Experience and updated recipe for using the Signal app without a mobile phone</title>
- <link>http://people.skolelinux.org/pere/blog/Experience_and_updated_recipe_for_using_the_Signal_app_without_a_mobile_phone.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Experience_and_updated_recipe_for_using_the_Signal_app_without_a_mobile_phone.html</guid>
- <pubDate>Mon, 10 Oct 2016 11:30:00 +0200</pubDate>
- <description><p>In July
-<a href="http://people.skolelinux.org/pere/blog/How_to_use_the_Signal_app_if_you_only_have_a_land_line__ie_no_mobile_phone_.html">I
-wrote how to get the Signal Chrome/Chromium app working</a> without
-the ability to receive SMS messages (aka without a cell phone). It is
-time to share some experiences and provide an updated setup.</p>
-
-<p>The Signal app have worked fine for several months now, and I use
-it regularly to chat with my loved ones. I had a major snag at the
-end of my summer vacation, when the the app completely forgot my
-setup, identity and keys. The reason behind this major mess was
-running out of disk space. To avoid that ever happening again I have
-started storing everything in <tt>userdata/</tt> in git, to be able to
-roll back to an earlier version if the files are wiped by mistake. I
-had to use it once after introducing the git backup. When rolling
-back to an earlier version, one need to use the 'reset session' option
-in Signal to get going, and notify the people you talk with about the
-problem. I assume there is some sequence number tracking in the
-protocol to detect rollback attacks. The git repository is rather big
-(674 MiB so far), but I have not tried to figure out if some of the
-content can be added to a .gitignore file due to lack of spare
-time.</p>
-
-<p>I've also hit the 90 days timeout blocking, and noticed that this
-make it impossible to send messages using Signal. I could still
-receive them, but had to patch the code with a new timestamp to send.
-I believe the timeout is added by the developers to force people to
-upgrade to the latest version of the app, even when there is no
-protocol changes, to reduce the version skew among the user base and
-thus try to keep the number of support requests down.</p>
-
-<p>Since my original recipe, the Signal source code changed slightly,
-making the old patch fail to apply cleanly. Below is an updated
-patch, including the shell wrapper I use to start Signal. The
-original version required a new user to locate the JavaScript console
-and call a function from there. I got help from a friend with more
-JavaScript knowledge than me to modify the code to provide a GUI
-button instead. This mean that to get started you just need to run
-the wrapper and click the 'Register without mobile phone' to get going
-now. I've also modified the timeout code to always set it to 90 days
-in the future, to avoid having to patch the code regularly.</p>
-
-<p>So, the updated recipe for Debian Jessie:</p>
-
-<ol>
-
-<li>First, install required packages to get the source code and the
-browser you need. Signal only work with Chrome/Chromium, as far as I
-know, so you need to install it.
-
-<pre>
-apt install git tor chromium
-git clone https://github.com/WhisperSystems/Signal-Desktop.git
-</pre></li>
-
-<li>Modify the source code using command listed in the the patch
-block below.</li>
-
-<li>Start Signal using the run-signal-app wrapper (for example using
-<tt>`pwd`/run-signal-app</tt>).
-
-<li>Click on the 'Register without mobile phone', will in a phone
-number you can receive calls to the next minute, receive the
-verification code and enter it into the form field and press
-'Register'. Note, the phone number you use will be user Signal
-username, ie the way others can find you on Signal.</li>
-
-<li>You can now use Signal to contact others. Note, new contacts do
-not show up in the contact list until you restart Signal, and there is
-no way to assign names to Contacts. There is also no way to create or
-update chat groups. I suspect this is because the web app do not have
-a associated contact database.</li>
-
-</ol>
-
-<p>I am still a bit uneasy about using Signal, because of the way its
-main author moxie0 reject federation and accept dependencies to major
-corporations like Google (part of the code is fetched from Google) and
-Amazon (the central coordination point is owned by Amazon). See for
-example
-<a href="https://github.com/LibreSignal/LibreSignal/issues/37">the
-LibreSignal issue tracker</a> for a thread documenting the authors
-view on these issues. But the network effect is strong in this case,
-and several of the people I want to communicate with already use
-Signal. Perhaps we can all move to <a href="https://ring.cx/">Ring</a>
-once it <a href="https://bugs.debian.org/830265">work on my
-laptop</a>? It already work on Windows and Android, and is included
-in <a href="https://tracker.debian.org/pkg/ring">Debian</a> and
-<a href="https://launchpad.net/ubuntu/+source/ring">Ubuntu</a>, but not
-working on Debian Stable.</p>
-
-<p>Anyway, this is the patch I apply to the Signal code to get it
-working. It switch to the production servers, disable to timeout,
-make registration easier and add the shell wrapper:</p>
-
-<pre>
-cd Signal-Desktop; cat &lt;&lt;EOF | patch -p1
-diff --git a/js/background.js b/js/background.js
-index 24b4c1d..579345f 100644
---- a/js/background.js
-+++ b/js/background.js
-@@ -33,9 +33,9 @@
- });
- });
-
-- var SERVER_URL = 'https://textsecure-service-staging.whispersystems.org';
-+ var SERVER_URL = 'https://textsecure-service-ca.whispersystems.org';
- var SERVER_PORTS = [80, 4433, 8443];
-- var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments-staging.s3.amazonaws.com';
-+ var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments.s3.amazonaws.com';
- var messageReceiver;
- window.getSocketStatus = function() {
- if (messageReceiver) {
-diff --git a/js/expire.js b/js/expire.js
-index 639aeae..beb91c3 100644
---- a/js/expire.js
-+++ b/js/expire.js
-@@ -1,6 +1,6 @@
- ;(function() {
- 'use strict';
-- var BUILD_EXPIRATION = 0;
-+ var BUILD_EXPIRATION = Date.now() + (90 * 24 * 60 * 60 * 1000);
-
- window.extension = window.extension || {};
-
-diff --git a/js/views/install_view.js b/js/views/install_view.js
-index 7816f4f..1d6233b 100644
---- a/js/views/install_view.js
-+++ b/js/views/install_view.js
-@@ -38,7 +38,8 @@
- return {
- 'click .step1': this.selectStep.bind(this, 1),
- 'click .step2': this.selectStep.bind(this, 2),
-- 'click .step3': this.selectStep.bind(this, 3)
-+ 'click .step3': this.selectStep.bind(this, 3),
-+ 'click .callreg': function() { extension.install('standalone') },
- };
- },
- clearQR: function() {
-diff --git a/options.html b/options.html
-index dc0f28e..8d709f6 100644
---- a/options.html
-+++ b/options.html
-@@ -14,7 +14,10 @@
- &lt;div class='nav'>
- &lt;h1>{{ installWelcome }}&lt;/h1>
- &lt;p>{{ installTagline }}&lt;/p>
-- &lt;div> &lt;a class='button step2'>{{ installGetStartedButton }}&lt;/a> &lt;/div>
-+ &lt;div> &lt;a class='button step2'>{{ installGetStartedButton }}&lt;/a>
-+ &lt;br> &lt;a class="button callreg">Register without mobile phone&lt;/a>
-+
-+ &lt;/div>
- &lt;span class='dot step1 selected'>&lt;/span>
- &lt;span class='dot step2'>&lt;/span>
- &lt;span class='dot step3'>&lt;/span>
---- /dev/null 2016-10-07 09:55:13.730181472 +0200
-+++ b/run-signal-app 2016-10-10 08:54:09.434172391 +0200
-@@ -0,0 +1,12 @@
-+#!/bin/sh
-+set -e
-+cd $(dirname $0)
-+mkdir -p userdata
-+userdata="`pwd`/userdata"
-+if [ -d "$userdata" ] && [ ! -d "$userdata/.git" ] ; then
-+ (cd $userdata && git init)
-+fi
-+(cd $userdata && git add . && git commit -m "Current status." || true)
-+exec chromium \
-+ --proxy-server="socks://localhost:9050" \
-+ --user-data-dir=$userdata --load-and-launch-app=`pwd`
-EOF
-chmod a+rx run-signal-app
-</pre>
+ <title>Where did that package go? &mdash; geolocated IP traceroute</title>
+ <link>http://people.skolelinux.org/pere/blog/Where_did_that_package_go___mdash__geolocated_IP_traceroute.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Where_did_that_package_go___mdash__geolocated_IP_traceroute.html</guid>
+ <pubDate>Mon, 9 Jan 2017 12:20:00 +0100</pubDate>
+ <description><p>Did you ever wonder where the web trafic really flow to reach the
+web servers, and who own the network equipment it is flowing through?
+It is possible to get a glimpse of this from using traceroute, but it
+is hard to find all the details. Many years ago, I wrote a system to
+map the Norwegian Internet (trying to figure out if our plans for a
+network game service would get low enough latency, and who we needed
+to talk to about setting up game servers close to the users. Back
+then I used traceroute output from many locations (I asked my friends
+to run a script and send me their traceroute output) to create the
+graph and the map. The output from traceroute typically look like
+this:
+
+<p><pre>
+traceroute to www.stortinget.no (85.88.67.10), 30 hops max, 60 byte packets
+ 1 uio-gw10.uio.no (129.240.202.1) 0.447 ms 0.486 ms 0.621 ms
+ 2 uio-gw8.uio.no (129.240.24.229) 0.467 ms 0.578 ms 0.675 ms
+ 3 oslo-gw1.uninett.no (128.39.65.17) 0.385 ms 0.373 ms 0.358 ms
+ 4 te3-1-2.br1.fn3.as2116.net (193.156.90.3) 1.174 ms 1.172 ms 1.153 ms
+ 5 he16-1-1.cr1.san110.as2116.net (195.0.244.234) 2.627 ms he16-1-1.cr2.oslosda310.as2116.net (195.0.244.48) 3.172 ms he16-1-1.cr1.san110.as2116.net (195.0.244.234) 2.857 ms
+ 6 ae1.ar8.oslosda310.as2116.net (195.0.242.39) 0.662 ms 0.637 ms ae0.ar8.oslosda310.as2116.net (195.0.242.23) 0.622 ms
+ 7 89.191.10.146 (89.191.10.146) 0.931 ms 0.917 ms 0.955 ms
+ 8 * * *
+ 9 * * *
+[...]
+</pre></p>
+
+<p>This show the DNS names and IP addresses of (at least some of the)
+network equipment involved in getting the data traffic from me to the
+www.stortinget.no server, and how long it took in milliseconds for a
+package to reach the equipment and return to me. Three packages are
+sent, and some times the packages do not follow the same path. This
+is shown for hop 5, where three different IP addresses replied to the
+traceroute request.</p>
+
+<p>There are many ways to measure trace routes. Other good traceroute
+implementations I use are traceroute (using ICMP packages) mtr (can do
+both ICMP, UDP and TCP) and scapy (python library with ICMP, UDP, TCP
+traceroute and a lot of other capabilities). All of them are easily
+available in <a href="https://www.debian.org/">Debian</a>.</p>
+
+<p>This time around, I wanted to know the geographic location of
+different route points, to visualize how visiting a web page spread
+information about the visit to a lot of servers around the globe. The
+background is that a web site today often will ask the browser to get
+from many servers the parts (for example HTML, JSON, fonts,
+JavaScript, CSS, video) required to display the content. This will
+leak information about the visit to those controlling these servers
+and anyone able to peek at the data traffic passing by (like your ISP,
+the ISPs backbone provider, FRA, GCHQ, NSA and others).</p>
+
+<p>Lets pick an example, the Norwegian parliament web site
+www.stortinget.no. It is read daily by all members of parliament and
+their staff, as well as political journalists, activits and many other
+citizens of Norway. A visit to the www.stortinget.no web site will
+ask your browser to contact 8 other servers: ajax.googleapis.com,
+insights.hotjar.com, script.hotjar.com, static.hotjar.com,
+stats.g.doubleclick.net, www.google-analytics.com,
+www.googletagmanager.com and www.netigate.se. I extracted this by
+asking <a href="http://phantomjs.org/">PhantomJS</a> to visit the
+Stortinget web page and tell me all the URLs PhantomJS downloaded to
+render the page (in HAR format using
+<a href="https://github.com/ariya/phantomjs/blob/master/examples/netsniff.js">their
+netsniff example</a>. I am very grateful to Gorm for showing me how
+to do this). My goal is to visualize network traces to all IP
+addresses behind these DNS names, do show where visitors personal
+information is spread when visiting the page.</p>
+
+<p align="center"><a href="www.stortinget.no-geoip.kml"><img
+src="http://people.skolelinux.org/pere/blog/images/2017-01-09-www.stortinget.no-geoip-small.png" alt="map of combined traces for URLs used by www.stortinget.no using GeoIP"/></a></p>
+
+<p>When I had a look around for options, I could not find any good
+free software tools to do this, and decided I needed my own traceroute
+wrapper outputting KML based on locations looked up using GeoIP. KML
+is easy to work with and easy to generate, and understood by several
+of the GIS tools I have available. I got good help from by NUUG
+colleague Anders Einar with this, and the result can be seen in
+<a href="https://github.com/petterreinholdtsen/kmltraceroute">my
+kmltraceroute git repository</a>. Unfortunately, the quality of the
+free GeoIP databases I could find (and the for-pay databases my
+friends had access to) is not up to the task. The IP addresses of
+central Internet infrastructure would typically be placed near the
+controlling companies main office, and not where the router is really
+located, as you can see from <a href="www.stortinget.no-geoip.kml">the
+KML file I created</a> using the GeoLite City dataset from MaxMind.
+
+<p align="center"><a href="http://people.skolelinux.org/pere/blog/images/2017-01-09-www.stortinget.no-scapy.svg"><img
+src="http://people.skolelinux.org/pere/blog/images/2017-01-09-www.stortinget.no-scapy-small.png" alt="scapy traceroute graph for URLs used by www.stortinget.no"/></a></p>
+
+<p>I also had a look at the visual traceroute graph created by
+<a href="http://www.secdev.org/projects/scapy/">the scrapy project</a>,
+showing IP network ownership (aka AS owner) for the IP address in
+question.
+<a href="http://people.skolelinux.org/pere/blog/images/2017-01-09-www.stortinget.no-scapy.svg">The
+graph display a lot of useful information about the traceroute in SVG
+format</a>, and give a good indication on who control the network
+equipment involved, but it do not include geolocation. This graph
+make it possible to see the information is made available at least for
+UNINETT, Catchcom, Stortinget, Nordunet, Google, Amazon, Telia, Level
+3 Communications and NetDNA.</p>
+
+<p align="center"><a href="https://geotraceroute.com/index.php?node=4&host=www.stortinget.no"><img
+src="http://people.skolelinux.org/pere/blog/images/2017-01-09-www.stortinget.no-geotraceroute-small.png" alt="example geotraceroute view for www.stortinget.no"/></a></p>
+
+<p>In the process, I came across the
+<a href="https://geotraceroute.com/">web service GeoTraceroute</a> by
+Salim Gasmi. Its methology of combining guesses based on DNS names,
+various location databases and finally use latecy times to rule out
+candidate locations seemed to do a very good job of guessing correct
+geolocation. But it could only do one trace at the time, did not have
+a sensor in Norway and did not make the geolocations easily available
+for postprocessing. So I contacted the developer and asked if he
+would be willing to share the code (he refused until he had time to
+clean it up), but he was interested in providing the geolocations in a
+machine readable format, and willing to set up a sensor in Norway. So
+since yesterday, it is possible to run traces from Norway in this
+service thanks to a sensor node set up by
+<a href="https://www.nuug.no/">the NUUG assosiation</a>, and get the
+trace in KML format for further processing.</p>
+
+<p align="center"><a href="http://people.skolelinux.org/pere/blog/images/2017-01-09-www.stortinget.no-geotraceroute-kml-join.kml"><img
+src="http://people.skolelinux.org/pere/blog/images/2017-01-09-www.stortinget.no-geotraceroute-kml-join.png" alt="map of combined traces for URLs used by www.stortinget.no using geotraceroute"/></a></p>
+
+<p>Here we can see a lot of trafic passes Sweden on its way to
+Denmark, Germany, Holland and Ireland. Plenty of places where the
+Snowden confirmations verified the traffic is read by various actors
+without your best interest as their top priority.</p>
+
+<p>Combining KML files is trivial using a text editor, so I could loop
+over all the hosts behind the urls imported by www.stortinget.no and
+ask for the KML file from GeoTraceroute, and create a combined KML
+file with all the traces (unfortunately only one of the IP addresses
+behind the DNS name is traced this time. To get them all, one would
+have to request traces using IP number instead of DNS names from
+GeoTraceroute). That might be the next step in this project.</p>
+
+<p>Armed with these tools, I find it a lot easier to figure out where
+the IP traffic moves and who control the boxes involved in moving it.
+And every time the link crosses for example the Swedish border, we can
+be sure Swedish Signal Intelligence (FRA) is listening, as GCHQ do in
+Britain and NSA in USA and cables around the globe. (Hm, what should
+we tell them? :) Keep that in mind if you ever send anything
+unencrypted over the Internet.</p>
+
+<p>PS: KML files are drawn using
+<a href="http://ivanrublev.me/kml/">the KML viewer from Ivan
+Rublev<a/>, as it was less cluttered than the local Linux application
+Marble. There are heaps of other options too.</p>