mei 302020
 

Usually I write my blogposts in Dutch. Because there are still a lot of people in the Netherlands that have more difficulty reading English than Dutch. Sometimes I make an exception if the topic is more technical than otherwise. Because then, the chances of anyone other than myself reading the post increases a lot. This is one of those posts.

Last week, I wrote (in Dutch) about the computational thinking challenge of figuring out where we had not yet walked during this COVID-19 era. I also explained that that solutions, based on the tutorials by Fran Polignano had some room for improvement. The Strava client_id, client_secret and refresh_token were visible in the source code and the script did not use caching of the data it retrieves from Strava while Strava limits the number of calls you can make in a specific period of time (and it also is not good practice to not cache such data that changes no more than once a day).

After doing some searching around about possible solutions, I concluded that there is no real feasible “Javascript/client-side script only” option that hides that info. And caching of the data locally is possible, but would still be only half of a solution because every visitor would have to cache it locally and that could still result in more API call than allowed.

Lees verder….

mei 152020
 

De sportschool is dicht, buiten fietsen is nog geen optie zolang mijn pols nog niet 100% hersteld is, binnen fietsen doe ik regelmatig maar dat leidt tot dagen dat ik helemaal niet buiten geweest ben. En dat is ook niet prettig. Dus gaan we ’s avonds regelmatig wandelen, met z’n tweeën soms ook met de kinderen erbij. Ik neem dan altijd mijn Garmin Forerunner 35 mee. Die heeft ingebouwde GPS en een “wandelen” modus. Die zet ik aan en dan hoef ik er het hele uur of iets meer dat we lopen niet meer aan te denken. Als we thuis komen zet ik hem op stop en binnen een minuut is de wandeling, via mijn telefoon, beschikbaar via Strava. Nou gaat het me niet echt om mijn hartslag of hoe hard we lopen (al vinden ook daar soms discussies over plaats), het gaat me ook niet om het kunnen opscheppen over het aantal wandelingen (op Strava volg ik allemaal mensen die verder, vaker fietsen, zwemmen, lopen, wandelen). We vinden het gewoon leuk om wat variatie aan te brengen in de routes die we wandelen, dus kwam ook wel de vraag op: “welke delen van het dorp hebben we nog niet gehad?”

Iemand vroeg me onlangs naar voorbeelden van computational thinking. Nou dit is er eentje, hoewel het inderdaad eentje is waarbij een stukje programmeren gedaan is (deel twee van de vraag was namelijk of dat betekende dat er altijd programmeren bij kwam kijken). Het is een probleem/vraag die ik met ict opgelost heb.

De vraag herformuleren
De vraag “welke delen van het dorp hebben we nog niet gehad?” is niet zomaar te beantwoorden. Omdat ik “alle” wandelingen die ik gemaakt heb (ik denk dat ik er een of twee gemist heb) opgenomen heb, zijn die beschikbaar op Strava. Dus ik kan wel de vraag beantwoorden “welke routes in het dorp hebben we wél gehad?”.
Strava kan die kaarten laten zien. Maar alleen pér wandeling. Niet als totaaloverzicht.

Onderzoeken van mogelijke oplossingen
Gelukkig heeft Strava wel een API, een interface waarmee je data uit je eigen account kunt opvragen. En dan kun je zelf de routes op een kaart tekenen (zoals ik hierboven gedaan heb). Zoals bij bijna alles: als ik het kan verzinnen, heeft iemand anders het vast ook al eens verzonnen. Op Youtube staat een serie video’s van Fran Polignano die eerst een introductie geeft op het gebruik van de API (heel handig om eerst te bekijken!), daarna uitlegt hoe je de API in Python gebruikt en daarna met JavaScript. Bij die laatste gaat hij dan nog even door en legt uit hoe je je activiteiten automatisch op kunt laten halen én allemaal tegelijkertijd op een kaart kunt laten zien. Daarbij is hij dan ook nog eens zo vriendelijk om zijn code te delen via Github.

Lees verder….

apr 092017
 

I still wasn’t out of “what if…” scenario’s for the devices I had been playing with in relation to The Things Network / LoRaWAN. Because, although I had used the WiFi (and of course LoRA) capabilities of the LoPy a lot, I had not yet played with its BLE (Bluetooth Low Energy) capabilities. For that I needed something else that could use BLE to connect to it. My iPad Mini, the micro:bit, my desktop machine (thanks to the BLE USB adapter), they all could do that. But I wanted to use the Puck-js buttons that I had for that.

The use-case:  If I press the button on the Puck.js (I have two of them, I can press either of them), then the Puck.js connects over bluetooth to the LoPy. After the connection has been made, the Puck.js sends 1) its device-id 2) the measurement of the light sensor of the Puck.js 3) the measurement of the temperature sensor of the Puck.js and 4) the battery voltage of the Puck-js. Once the LoPy has received those 4 values (encoded as a single HEX-string), it sends it to The Things Network (TTN) via LoRaWAN.

Like with the Adafruit Circuit Playground, one of the challenges was that both devices (the LoPy and the Puck.js) use different programming languages and there were no existing examples that handles the cross platform connection.

I uploaded all code to github.com

Programming the Puck.js

To program the Puck.js, you need the Espruino IDE. I have had my fair share of problems connecting to the Puck.js from within that IDE. It is probably one of the challenges of using BLE as a connection to program. But in the end it got the job done. I wasted most time trying to understand how I can send data from the Puck.js to the LoPy after connecting to it. There was an example using 2 Puck.js to send data, but I could not figure out what the UUID of the PrimaryService and the UUID of the Characteristic for the LoPy that allowed me to write data to it where.

I tried to figure that out using code on the Puck.js, but that didn’t work. In the LoPy code that I found, the service and characteristic were defined like this:

srv1 = bluetooth.service(uuid=b'1234567890123456', isprimary=True)

chr1 = srv1.characteristic(uuid=b'ab34567890123456', value=5)

I finally discovered how these needed to be added in the Puck.js code by using nRF Connect, a free tool for iOS. After setting up the LoPy so that it broadcasts using BLE (see the code below), I connected to the LoPy using the nRF Connect app. It then shows you the correct UUID’s that are in the Send_BT_to_LoPy.js script:

return d.getPrimaryService("36353433-3231-3039-3837-363534333231");

return s.getCharacteristic("36353433-3231-3039-3837-363534336261");

Easy, once you know it.

Note #1:  The Puck.js connects to a device named “LoPy01” so if you change the name of the device in main.py for the LoPy, you also have to change it in the code for the Puck.js
Note #2:  I added the id for the Puck.js in the code, first line. You need to change that to the code for your Puck.js if you have more than 1 Puck.js and want to be able to keep the transmitted values apart afterwards.

Let’s continue with the LoPy.

Lees verder….

mrt 262017
 

De Puck.js is een nogal eigenaardig apparaat. Het is een soort knop (je kunt hem ook echt indrukken) met ingebouwd een programmeerbare chip met ondersteuning voor Bluetooth Low Energy (BLE), GPIO poorten, een infraroodzender, een thermometer, ingebouwde lichtsensor, een sensor voor magnetisme, een rode/groene/blauwe LED.

Je programmeert hem met behulp van Javascript via BLE. En in dat laatste zit hem eigenlijk wel de uitdaging. De maker gaat er namelijk vanuit dat je daarvoor Web Bluetooth gebruikt. Handig, gewoon ingebakken in de browser. Alleen….op iOS / de iPad is dat nog niet standaard aanwezig en op Windows 7 of 10 ook nog niet. Op een Chromebook overigens wel weer. Idem voor Android, maar het 5,5 inch scherm van mijn telefoon is daar toch net wat klein voor.

Er is nu een soort van alternatieve manier beschikbaar op iOS en dat is via de applicatie WebBLE. Die is niet gratis, je betaald er €1,99 voor, maar dan kun je vanaf je iPad ook programmeren. Gaat net wat beter vanwege de optie om daar een toetsenbord bij te gebruiken.
De schermindeling is echter nog niet helemaal optimaal voor gebruik op een iPad Mini in liggende weergave.

Er zou een optie moeten zijn via https://www.espruino.com/ide/relay om de verbinding van de iPad te delen met mijn Windows laptop zónder Web Bluetooth ondersteuning. Maar ondanks de stap voor stap instructie in deze video is me dat nog niet gelukt.

Zoals gezegd, het is een intrigerend apparaatje. Ik heb 2 van de pucks aangeschaft maar voorlopig leveren ze vooral nog veel frustratie ehm leermomenten op en heb ik ze nog niet echt voor iets nuttigs in kunnen zetten.
De vraag over de relay functie heb ik op het forum uitgezet, dus wie weet wordt dat nog opgelost.

p.s. Gordon heeft in het verleden heel snel op andere vragen gereageerd en heeft dus wel wat credit opgebouwd, sowieso omdat ik de puck.js niet écht voor productiedoeleinden nodig heb. Ik kan wachten terwijl het product zich verder ontwikkeld.

 

Codecademy – Week #1

 Gepubliceerd door om 07:56  Onderwijs, Programmeren
jan 102012
 

CodeAcademy Het was drie minuten voor middernacht gisteren toen de mail van Codecademy binnen kwam met de opdrachten voor de eerste week van wat de bedoeling is een jaar lang leren programmeren. Ik ben niet de enige die die opdrachten binnen kreeg, er hebben zich meer dan 250.000 mensen aangemeld voor deze gratis training. Het is jammer dat het weblog van Codecademy niet echt de ontwikkelingen lijkt te volgen, de vorige post is van 18 dagen geleden, ik zou het interessant vinden als ze ergens zichtbaar maakten wat de actieve participatie is en met name wat het verloop er van is. Het Twitter-account is actiever maar loopt op het moment vol met bedankjes aan mensen die blijkbaar gezegd hebben dat het een fantastisch initiatief is. Dus dat volgen lijkt me ook niet zo zinvol.

Maar goed, de training zelf dan.
Lees verder….

Feed2JS heeft *NU* hulp nodig!

 Gepubliceerd door om 08:44  Internet, Tools
sep 282011
 

Vandaag wil ik je aandacht vragen voor een dienst die een privé initiatief is van één persoon, waarvan ik lang geleden zelf ook gebruik van maakte, maar die nu dreigt te verdwijnen: Feed2JS. Met Feed2JS kun je eenvoudig een RSS-feed omzetten in een stukje Javascript waarmee je de berichten kunt tonen als onderdeel van een website, leeromgeving, weblog. Alan Levine stond aan de basis van het script dat je kunt downloaden en zelf kunt hosten, maar ook kunt runnen vanaf “zijn” server. In dat laatste geval hoef je dus zelf helemaal niets te doen. Probleem is echter dat die dienst veel bandbreedte kost. Alan had tot voor kort een plek waar hij dat script kon hosten, je hebt er blijkbaar een dedicated server voor nodig gezien het aantal gebruikers, maar moest in september uitwijken naar betaalde ruimte. En dat kan hij niet blijven doen. De hostingkosten voor de maand september lijken op zo’n $200 uit te komen.

Hij heeft dus hulp nodig. Een optie is om geld te doneren via de ‘donate’ knop op deze pagina. Dat helpt even, maar eigenlijk is Alan gewoon op zoek naar iemand die de faciliteiten heeft om hem een dedicated serverlocatie aan te bieden zonder dat het geld kost. Ben jij zo iemand of ken jij zo iemand? Laat het Alan dan weten!
Zoals gezegd, ik ben zelf geen gebruiker meer, maar ik zou het jammer vinden als zo’n toch nog veel gebruikte dienst moet verdwijnen door gebrek aan geld.

 Reacties uitgeschakeld voor Feed2JS heeft *NU* hulp nodig!  Tags: , ,
aug 122011
 

 [Update 9-5-2015] Zoals zoveel pogingen om content eenvoudig aan Google+ toe te voegen, blijkt ook dit inmiddels niet meer te werken. Tip: als je dit bericht of een ander bericht op dit weblog via Google+ wilt delen, gebruik dan de knoppen onder het bericht. Op dit moment werkt dat.

Een van de dingen die nog ontbreken bij Google+ is een API voor het toevoegen van updates/berichten. Je wilt namelijk vaak een bericht, webpagina, nieuwsbericht delen via Google+. Op Marketingfacts stond afgelopen woensdag al een verwijzing naar een hack die door Alex Moss gemaakt is waardoor je op je WordPress weblog een knop kunt toevoegen waarmee anderen jouw content op die manier kunnen delen.

Maar dat werkt dus alleen voor anderen en alleen op je eigen blog. Wat nou als je content van anderen ook wilt delen? Dat kan ook. Daar is maar een kleine aanpassing aan de betreffende code voor nodig. Het voordeel is dat je dit gewoon aan je browser toe kunt voegen. Dus ook als je zelf geen weblog hebt.
De hack is nog steeds niet erg “mooi”. De popup die je krijgt ziet er niet heel mooi uit, het invoervakje is wat klein. In Internet Explorer kon ik die niet groter trekken zoals o.a. in Chrome en Safari wel kan. Maar het werkt.

Op dit moment kun je een stuk tekst op een pagina selecteren en dan worden de titel van de pagina, het geselecteerde stuk tekst en de URL naar de pagina in de update ingevoegd. De Titel wordt vetgedrukt, de geselecteerde tekst cursief en de URL wordt na het posten actief.
Lees verder….

Bouw een rondleiding voor je website

 Gepubliceerd door om 06:33  Internet
dec 232010
 

Het is er eentje waarvan ik eerst dacht “cool” en daarna “maar wanneer zou ik dat nou willen gebruiken?”, dit jQuery script waarmee je eenvoudig een rondleiding kunt bouwen voor je website.

Zou het niet zo moeten zijn dat je website zich zonder zo’n rondleiding moet laten bedienen? Is het toevoegen van zo’n rondleiding niet een signaal van je onderbewustzijn dat je het allemaal eigenlijk net iets té complex of té onoverzichtelijk hebt gemaakt voor gewone gebruikers en bezoekers?

Dat Facebook het gebruikt heeft om de functionaliteit van de nieuwe profielpagina uit te leggen vind ik dan ook niet echt een overtuigend voorbeeld.

Ik parkeer hem maar eens gewoon even hier. Wie weet kom ik er nog wel op terug. En als jullie in de tussentijd ideeën hebben voor zinvolle toepassingen, dan hoor ik het graag.

p.s. Op zich zou je het natuurlijk kunnen gebruiken als een soort aanvullende instructie bij online e-learning materiaal. Maar of dan zo’n lineair pad voldoende is?