Programmeren met Dash en Dot

Het goed kunnen omgaan met en het gebruiken van computers is superbelangrijk. Vandaag heb ik daarom als hulpouder de kinderen uit groep 6 van onze basisschool wat opweg geholpen met het leren programmeren. In dit geval is dat Dash and Dot robotjes. Robotjes met wieltjes en sensoren die je via een tablet kan besturen en programmeren.

Voor mijzelf was dit ook de eerste kennismaking met deze robot, dus heb ik samen met vier jongens uit groep 6 de mogelijkheden van Dash en Dot eens verkend.

Als eerste introductie zijn we even aan de slag gegaan met ‘Go’, een app waarmee je Dash (Dot hebben we voor nu in de doos laten zitten) op afstand kan besturen als ware het een modelautotje. het allerleukste was natuurlijk om Dash zelf opgenomen geluidjes te laten horen. Daarna zijn we snel doorgegaan met ‘Path’, een app waarmee je een parcours kan tekenen die Dash gaat aflopen. Op het parcours kan je allerlei icoontjes slepen voor van alles en nog wat.

Het meeste tijd zijn we bezig geweest met Blockly, de app waarmee echt geprogrammeerd kan worden, vergelijkbaar met Scratch. Hier heb ik iedereen steeds een opdracht gegeven die steeds weer iets moeilijker werd of een nieuw element bevatte. We zijn zo de volgende opdrachten doorlopen:

  • Laat Dash een vierkantje rijden: vooruit; draaien; vooruit; draaien; etc.
  • Laat Dash je eigen voorletter rijden en laat aan het einde of tussen door je favorietje geluidjes horen.

Als laatste oefening (met het filmpje hieronder als resultaat) hebben we een parcours gemaakt waarin Dash tussen blokken doorgeloodst moest worden. In eerste instantie hebben we een vast startpunt gebruikt zodat het nog mogelijk is om Dash vaste afstanden te laten rijden en op het juiste moment bochten te laten maken. Uiteindelijk heb ik het startpunt gewisseld waardoor we de sensoren van Dash ook zijn gaan gebruiken: bij het detecteren van een muur stoppen een bocht maken, en verder gaan.

Filmpje: https://youtu.be/FiWCY0qoc-k

 

 

Slag bij Noordhorn

Tijdens de tachtigjarige oorlog, in het najaar van 1581 heeft een veldslag plaatsgevonden vlakbij Noordhorn: ‘De slag bij Noordhorn’. De Spaanse troepen onder leiding van kolonel Francisco Verdugo streden tegen de Hollandse (en Friese) troepen onder leiding van graaf Willem Lodewijk. Het schijnt nogal een bloedige strijd te zijn geweest, met veel slachtoffers aan beide kanten.

Op 30 augustus 2015 kan deze veldslag opnieuw worden herbeleefd. De slag bij Noordhorn wordt die dag nagespeeld door re-enacters, een unieke gebeurtenis. Meer informatie over het herbeleven van deze veldslag is beschikbaar op de website van de Schansenkrijg:  http://schansenkrijg.nl

Noordhorn
Gravure van de slag bij Noordhorn
Genoeg aanleiding om van het betrokken gebied in beeld te brengen met een serie luchtfoto’s. Op 18 april 2015 heb ik met de vlieger een serie luchtfoto’s gemaakt van het gebied tussen de Friesche straatweg en het dorp Noordhorn. Hoe zit dit gebied er nu uit? Zijn er nog sporen van de slag terug te vinden? Wie weet levert een archeologisch onderzoek nog nieuwe vondsten op.

Photo & Video Sharing by SmugMug
Noordhorn in het voorjaar van 2015

De volledige fotoserie is hier beschikbaar.

 

What is Pebble talking about?

The Pebble smartwatch is one of the most popular smartwatches. Sofar 1 million smartwatches  have been sold, which made the Pebble the second best selling smartwatch of 2014 according to the Smartwatch Group. Probably due to the relative low price point of the Pebble, and their tech oriented user/developer community,  the company seems to stay a bit under the rader in terms of market share. At this moment Pebble has started a new chapter in their story with a new kickstarter campaign for the Pebble Time, a smartwatch with a color display. With their second Kickstarter campaign they recaptured the position as most funded project with more than $18 million dollars in pledges.

Due to the availability of SDK’s, a large developer community, onlin development environments, lots of samples, the Pebble smartwatch is a very developer friendly smartwatch. But it’s always interesting to explore the possibilities and inner workings of the Pebble even further.  For example, the wireless communication between Pebble and your telephone. How does it work?

When a Pebble is coupled to a smartphone, they communicate via an emulated serial port (RFCOMM) where both the watch and phone exchange binary encoded messages with each other. The innner workings of this protocol was disclosed by Hexxeh (Liam McLoughlin) with his release of the LibPebble library, a Pebble communication library written in Python. While most of the data communication between Pebble and Smartphone is known, the communication pattern i.e. ‘when to say what’ is not completely clear.

Messages sent from phone or Pebble have a variable length and make use of the same encoding. All messages start with a four byte header that specify length and endpoint. The first two bytes contain the length (unsigned integer) of the encapsulated message. The total message length is thus, this length specified in the header plus, the four bytes of the header itself. The last two bytes of the header contain the endpoint (unsigned int) of the communication, and specify the communication type of the encapsulated message. Examples of endpoints are: application messages, logs, and time. And each endpoint makes use of its own message structure.

 

Pebble message structure
Pebble message structure

 

While LibPebble is great, it seems that it does not implement the complete Pebble bluetooth protocol. For instance DATA_LOG type messages (endpoint 6778) are not described. And that is where Android developer mode, and Wireshark come to the rescue. With an android phone, all bluetooth traffic can be captured in a logfile. This logfile can be loaded by the Wireshark network sniffer and protocol analyser. And on top of that we can add a custom dissector for the Pebble protocol so that we can closely follow what the Pebble is talking about!

In order to get it all working, you need to have an Android smartphone with developer mode enabled. If you don’t know how to do that, It is probably better to stop reading this post, and find your luck elsewhere.  The Developer options contain an option to enable logging of all bluetooth traffic. When this option is checked, a file (located at: /sdcard/btsnoop_hci.log) is created that traces all bluetooth traffic.

enabling bluetooth logging on Android

When you think you have traced enough, transfer the btsnoop_hci.log file to your PC and open the file in Wireshark.

The only thing we need to do is create a dissector for Pebblish, the protocol spoken by the Pebble, and make this dissector available for Wireshark. For this purpose I wrote a minimalistic dissector in Lua that extracts the length, endpoint of each message, and the start of application messages.  The code for this dissector is available on Github

I’m not going to explain how to add the dissector to Wireshark. There are more than enough good tutorials available on the web that explain how to do this (for example here).

When the  dissector is enabled and the btsnoop_hci.log is loaded in Wireshark, use ‘pebble’ (without quotes) as the filter expression to show only the messages sent/received by the Pebble smartwatch. The result is shown below in the screenshot that displays the conversation between Pebble and smartphone.

Wireshark showing a Pebble conversation

Although the dissector is far from complete, it already gives a lot of insight in the conversation between the Pebble and Smartphone.

Google MyTracks drops support for third party access

Update: The latest version of PebbleMyTracks, that checked the correct MyTracks version, and initiated the installation of the correct version is abandoned from the Play store. In the mean time, PebbleMyTracks is available for download from Dropbox.

https://www.dropbox.com/s/9ifbblpfkjicrmv/PebbleMyTracks.apk

The last update of Google MyTracks dropped support for third party access, and instead of that added support for Google Wear devices. Also Google is planning to remove the source code of MyTracks from the repository. This is, politely speaking, an unpleasant event.

From a commercial perspective, I can understand the decision of Google: stimulate the  acceptance of the Google Wear platform, by blocking all paths to may lead to other alternatives.

It is my opinion that it is much better to take a more positive decision: Put your effort in creating the best platform for wearable apps, instead of this negative choice. This decision only stimulates developers and users to turn their back on the Android platform.

As the developer of PebbleMyTracks. I’ll do my best to get a workaround for this ‘inconvenience’ as soon as possible. Therefore I created a version of the app, that checked for the correct version of MyTracks, and if needed, initiated a downgrade so that all requirements were met.

Unfortunately, this version was abandoned by Google from the Play store because the app uninstalled/installed other apps (which is true). So the app is not available from the Play store for the moment. While I’m working on a new version (without the uninstallation) the latest version can be download from dropbox.

https://www.dropbox.com/s/9ifbblpfkjicrmv/PebbleMyTracks.apk

 

Scratch Extensies

Scratch is een programmeertaal voor kinderen, of anderen die willen kennismaken met het programmeren van een computer. Zoals ik eerder schreef wordt het pas echt leuk op het moment dat je vanuit je Scratch programma iets buiten je computer kan besturen. In deze post heb ik beschreven hoe dit kan met de offline versie van Scratch. Extensies (JavaScript extensie) blijken echter ook prima te werken in de online versie van scratch.

Hoe dat moet? Dat beschrijf ik hier in het onderstaande stapppenplan.

    1. Ga naar de scratch website: http://scratch.mit.edu
    2. Klik op ‘Create’.
    3. Als de ‘Scratch Project Editor’ is gestart druk je op de F12 toets. Nu verschijnt er onderin je webbrowser een nieuw scherm (zie screenshot).
      Screenshot from 2014-10-10 09:31:35
    4. Type het onderstaande commando op de onderste regel van van het scherm (zoals is te zien in de screenshot hieronder), en druk op enter. Op deze manier wordt een JavaScript extensie geladen.
      ScratchExtensions.loadExternalJS("https://raw.githubusercontent.com/LLK/scratch-extension-docs/master/weather_extension.js")

      Screenshot from 2014-10-10 09:35:05

    5. Druk wederom op de F12 toets om de ‘developer tools’ te sluiten. En klik op ‘more blocks’. Er is nu een extra blokje zichtbaar geworden wat zojuist is geladen (zie screenshot).Screenshot from 2014-10-10 09:38:17
    6. Het nieuwe blokje kan worden gebruikt in een Scratch programma. In dit geval wordt het weer (de temperatuur in Fahrenheit) bepaald. Wederom, zie onderstaande screenshot voor een voorbeeld programmaatje (wanneer op het vlaggetje geklikt wordt roept het katje de huidige temperatuur in Boston).Screenshot from 2014-10-10 09:42:06
    7. Een scratch programma waarin extensie worden gebruikt kan normaal worden opgeslagen op de Scratch website. Omdat er gebruik wordt gemaakt van extensies, die nu nog experimenteel zijn, is het niet mogelijk om deze Scratch programma’s via de Scratch website te delen.
    8. Bij het opnieuw laden van het Scratch programma moeten stap 3, 4, 5 opnieuw worden uitgevoerd. Dit kan worden opgelost door gebruik te maken van GreaseMonkey, een plugin voor de firefox webbrowser (er is vast ook wel een vergelijkbare tool voor andere browsers) waarmee extra JavaScript (het laden van een paar extensies bij het openen van Scratch) kan worden uitgevoerd.

Op dit moment zijn de Scratch extensies nog experimenteel. Voor zover ik kan beoordelen is het Scratch team zeer zorgvuldig met het toevoegen van nieuwe functionaliteit, wat bij dit soort extensies helemaal belangrijk is. De laatste berichten zijn dat extensies in 2015 worden toegevoegd aan de officiele versie van Scratch.

 

Scratch

Scratch (link) is een omgeving voor kinderen om kennis te maken met programmeren.Het is een visuele programmeertaal waar je doormiddel van het slepen, en aan elkaar koppelen van allerlei blokjes een programma kan maken. Bijvoorbeeld om een animatie te besturen, of een eenvoudig spelletje te maken. Scratch draait in een webbrowser (geen extra software nodig), maar kan ook als een offline programma draaien.

Scratch is leuk, maar het wordt pas helemaal leuk als je vanuit je scratch programma kan samenwerken met dingen buiten je computer:  een website, een robot, een thermometer, noem maar op. De offline versie van Scratch heeft voor dit doel de HTTP extensie waardoor het mogelijk wordt om speciale blokjes te maken die informatie uitwisselen met websites.

Omdat de HTTP extensie experimenteel is in de huidige versie van Scratch, en deze daarom nogal verborgen zit in de software beschrijf ik hierbij hoe een HTTP extensie kan worden gemaakt.

De HTTP extensie bestaat uit een JSON document waarin de nieuwe blokjes worden gedefinieerd, en de locatie van de webserver wordt opgegeven. Bijvoorbeeld:

{ 
  "extensionName": "Mijn module",
  "useHTTP":true,
  "host": "192.168.1.44",
  "extensionPort": 1880,
  "blockSpecs": [
    [" ", "Sonos %s", "scratchSonos", "Hallo Scratch"]
  ]
}

Een meer gedetailleerde specificatie is ook beschikbaar (link). In het kort is de betekenis dat het gaat om een extensie met de naam ‘Mijn module’. Het is een HTTP extensie (useHTTP is true), die beschikbaar is op ip adres 192.168.1.44, en poort 1880. In blockSpecs staat een lijst van blokjes, met per blokje een lijstje parameters per blokje. Achtereenvolgens zijn dat type, format, functie, gevolgd door 0 of meer default waarden.

Op het moment dat Scratch dit blokje gaat uitvoeren wordt een HTTP GET call gedaan naar adres:

http://192.168.1.44:1880/scratchSonos/Hallo%20Scratch

De JSON extensie kan in de offline versie van Scratch worden geladen door het menu ‘Bestand’ te klikken terwijl de linker shift-toets is ingedrukt. Door het indrukken van de linker shift-toets verschijnt de extra menu optie ‘Import experimental HTTP extension’ die dan ook moet worden gekozen.  Selecteer nu het JSON bestand, en klik op OK. Onder ‘Meer blokken’ is nu het nieuwe blok te vinden. Zie bijgevoegde screenshots.

scratch1
Klikken op Bestand met de linker shift toets ingedrukt geeft de extra optie ‘import external scratch extension’ waarmee het mogelijk wordt om een HTTP extensie te laden.
Na het succesvol laden van de HTTP extensie zijn nieuwe blokjes zichtbaar in de categorie 'Meer blokken'
Na het succesvol laden van de HTTP extensie zijn nieuwe blokjes zichtbaar in de categorie ‘Meer blokken’

Een snelle voorbeeld scratch applicatie is die waar door klikken op de ‘kat’ wordt gevraagd om je naam in te vullen. De ingevulde naam wordt vervolgens via de HTTP extensie naar een text-to-speech engine gestuurd die via Sonos (een draadloos speakersysteem) de tekst weer uitspreekt. Dit laatste is niet beschreven in deze post, dat komt vast een andere keer.

scratch3
Een scratch programma waarin een blokje uit de HTTP extensie wordt gebruikt.

 

 

 

Brug bij Noordhorn

Ongeveer een jaar na het start van de werkzaamheden is het nu zover. Maandag 15 september 2014 wordt de nieuwe brug over het van starkenborgh kanaal, en de tunnel onder Noordhorn in gebruik genomen. Reden genoeg om er met de vlieger op uit te trekken, en een fotoserie te maken van de nieuwe brug en haar omgeving.

Photo & Video Sharing by SmugMug

De volledige serie is hier te bekijken.

De tunnel zelf heb ik niet echt van dichtbij gefotografeerd. Wel geslaagd is de nieuwe skyline van Noordhorn met links van het midden de ingang/uitgang van de tunnel

Photo & Video Sharing by SmugMug
Nieuwe skyline van Noordhorn. Klik op de foto voor groter formaat!

Zeecontainers

Vlak voor een bijeenkomst in het MOBI gebouw, opgetrokken uit gestapelde zeecontainers een paar luchtfoto’s gemaakt vanaf het gebouw. En dankzij het mooie nazomer weer wat is gekomen, is het ideaal weer voor het maken van luchtfotos.

IMG_6283_1_1_2

Over containergebouwen gesproken. In de haven van lauwersoog staan daar inmiddels ook twee interessante gebouwen, gemaakt van zeecontainers. De visserijloods (foto) heeft een leuk gebogen dak dat doorloopt in een soort van veranda. Dit gebouw lijkt aan de binnenkant geisoleerd, en vervolgens afgewerkt met houten panelen. Ben erg benieuwd hoe goed dit geisoleerd is. Het daarnaast gelegen cafe MEER (foto) is een stuk eenvoudiger van opzet. Net als het MOBI gebouw is er geen sprake van isolatie. En in het MOBI gebouw is het in de winter erg, erg koud. Ben benieuwd hoe het in de aankomende winter gaat met de containers van cafe MEER. Een gesprek met de eigenaars leert dat het wafelpatroon van de container te mooi is omdat achter een isolatiewand te verstoppen. Mischien is er dan nog wat inspiratie op te doen bij Beach Ameland. Ook een gebouw gemaakt van een zeecontainer, maar aan de binnenkant geisoleerd met schapenwol…

Saying goodbye Pebble style

The two primary schools in our little village are getting too small, and so both schools are joining forces and start a new school the next school season. The birth of a new school also means end-of-life for the two primary schools. A sad moment, which I wanted to give some attention by honouring the nice art work that was used by one of the schools ‘De Molshoop’  (The Molehill). The drawings, which were used to lighten up the school newspaper, feature a curious little mole, that’s always busy doing something (reading, walking, etc.).

My way to say goodbye was to write a dedicated watchface for the Pebble smartwatch, that randomly displays a mole while counting down to the end. To get an idea of what it looks like, a screenshot of the watchapp

pebble-screenshot_2014-06-01_21-06-41

The source code is available on github (link), and the watchface can be downloaded from the Pebble appstore (link).

 

 

OBS de Molshoop

Het ziet er nu echt naar uit dat OBS de Molshoop, de openbare school in Noordhorn, gaat verdwijnen. Woensdag 28 mei hebben de schoolbesturen van Pentaprimair en Westerwijs het besluit voorgenomen om de twee scholen in Noordhorn (het Kompas en de Molshoop) te laten samengaan in een nieuwe samenwerkingsschool. Als alles gaat zoals het is geplanned, begint de nieuwe samenwerkingschool met ingang van het volgende schooljaar.

Tot zover het zakelijke gedeelte, nu word het tijd voor afscheid nemen van een lange periode openbare school in Noordhorn. Een van de dingen waar ik met veel plezier aan terugdenk zijn de ‘molletjesranden’. Dit zijn tekeningen van een klein molletje voor bovenaan de pagina van de schoolkrant. Deze zijn ooit gemaakt door een artistieke ouder. Het molletje is steeds iets anders aan het doen, meestal passend bij het onderwerp van de betreffende pagina van de schoolkrant.

mollenkop lees L

Mijn relatie met het molletje was best intensief, al is het alweer even geleden. Bij het layout-en van schoolkrant, en lustrumboek heb ik ook heel wat tijd besteed aan het precies plaatsen van deze molletjes.

Maar nu komt ook de tijd om ook van het molletje afscheid te nemen, en dat doe ik op mijn eigen, gepaste wijze, in de vorm van een app voor de Pebble smartwatch. Het is een klokje geworden waarin de resterende tijd tot de laatste schooldag wordt teruggeteld, waarbij steeds een ander molletje is te bewonderen. Dan ziet het er als volgt uit:

 

pebble-screenshot_2014-06-01_21-01-49 pebble-screenshot_2014-06-01_21-06-41

 

Links

  • De broncode voor de watchapp staat op mijn github account (link)
  • De watchface zelf staat in de Pebble appstore, en wel (link)
  • Directe installatie link voor de Pebble (moet je wel een Pebble hebben, uiteraard)  (link)