Hack a camera - web interface enhancements (Foscam) en

By Johnny on Sunday 27 November 2011 23:00 - Comments (17)
Categories: software, usability, video, Views: 26.243

Foscam FI8918W
I recently purchased a IP-camera, a webcam in truest sense in that it is a camera that is directly connected to the web. Inside of it runs a web server which allow a stream video and audio to be directly accessed all over the world from any web browser!

But that's not all; the camera can also be configured and controlled over the web. Inside are two motors that enable you to pan and tilt the camera, so that it can look around.

The control interface uses ActiveX, a propriety technology that only works on Internet Explorer on Windows (not on mobile devices) and because it is a big security risk is often disabled.

Alternatively the webcam also provides a more "standard" based interface that works in almost any browser. However, the quality of this interface is somewhat disappointing, and could greatly be improved.

After doing some research I am convinced that it is possible to make an improved version of the web interface, and install it on the webcam as a firmware upgrade.

My camera is a Foscam FI8918W for which the firmware can be updated. There is already some code on SourgeForge that can decompile the firmware and repackage it. However, nobody seems to have released firmware with an improved web interface.

But even without modifying the firmware the web interface can be modified. Any application or web page that can decode a MJEG stream can display the video, and commands are sent to the camera as simple HTTP GET requests.
Some problems with the current web interface
1. No direct visual feedback
When clicking on a control there is no confirmation. You have to wait for the command to be sent, received by the camera, the motors to move, a new image to be captured and sent back to you. This might take a few seconds, especially when uploading the video stream over a home connection. For a video stream the lag is usually not a problem however when there is 2 way communication it is.

My solution: highlight control buttons when activated.

2. Click, reposition, click
The only way to control the camera is to click on the buttons. This requires you to move the mouse cursor between every click. This is cumbersome with a mouse, but outright annoying with a trackpad.

My solution: allow the mouse to move over the controls while being pressed. And also allow the keyboard to be used.

3. Continuous streaming
When accessing the web controls a video stream is shown next to it, taking up bandwidth and even slowing down the browser/computer. This may be undesirable when the stream is viewed through an external application (like VLC).

My solution: added option to disable and enable video stream.
Video
Here is a video which shows some of the changes I have made to the web interface for controlling the movements of the camera. Both by moving the mouse while holding the button down and using the keyboard to move the camera.

Next steps
While controlling the camera is much more fun now I want to see if I can make some some more enhancements. Here is some of the ideas I am thinking about:
  • Create a widget for Mac OS X Dashboard that can control the camera and view the video stream and cuts off the stream when the dashboard is not displayed.
  • Make it possible to save snapshots in the web interface using LocalStorage in the browser.
  • Allow the camera to send images directly to other web services.
  • Package these changes and release it as a Firmware update.
The number of features possible is limited by the camera's control capabilities and that of the web browser, but if anybody has some ideas for other features please let me know!
Online resources

Iets positiefs over de NS

Door Johnny op maandag 17 januari 2011 22:32 - Reacties (18)
Categorie: usability, Views: 11.204

Met al het slechte nieuws rondom de NS de laatste tijd is het wel weer eens tijd voor iets positiefs. Zij kunnen er tenslotte ook niets aan doen dat dat het in de winter sneeuwt, Prorail niet is voorbereid, materiaal kapot gaat in de kou, toiletten in treinen duur zijn. Logistiek is het vast heel erg moeilijk om zoiets kosteneffectief op te lossen.

Vergeleken met dat is het eenmalig maken van een gebruiksvriendelijke website namelijk een eitje, ik kan het weten, ik doe het dagelijks en ik ben niet bijster slim. Ik ben zelfs zo dom dat geen rijbewijs heb en ik mijn eigen gebruikersnaam niet kan onthouden.

Omdat soms toch wel ergens heen wil met de trein heb ik een kortingskaart van de NS waarmee ik 40% korting krijg.

Op deze kaart staat dat deze tot 2014 geldig is. Mij was verteld dat het abonnement jaarlijks zou worden verlengd. Nu liet ik de conducteur voor de grap kijken of het abonnement nog werkt, maar helaas er is geen "reisdata" aanwezig op de kaart. Wel handig dat je dat zelf nergens kan zien! Ik heb ook geen melding gehad dat mijn abonnement zou gaan verlopen.

En dat terwijl ik wel zeker weet dat de NS mijn emailadres heeft. Ze sturen me namelijk regelmatig emails met allerlei aanbiedingen. Deze worden verstuurd met als afzender noreply@ns.nl. Dat is wel mooi, het geeft aan je klanten al aan dat je eigenlijk niet echt met ze wil communiceren, niet geÔnteresseerd bent in feedback en dat ze niet te hoge verwachtingen mogen hebben van de dienstverlening. Verwachtingsmanagement heet dat.

Gelukkig staat er onderaan iedere email dat wanneer ik deze niet op prijs stel ik op "Mijn gegevens" kan klikken om wijzingen te maken.

Vervolgens wordt me een pagina gepresenteerd waarop ik mijn gebruikersnaam en wachtwoord moet invullen. Beide kan ik me niet herinneren, en ook mijn password manager kan me niet helpen.

Gelukkig heeft men hier rekening mee gehouden, en kan ik klikken op "wachtwoord vergeten". Vooral het pijltje dat verschijnt zodra ik er met de muis over de link ga om aan te wijzen dat ik daar moet klikken geeft me het vertrouwen in dat ik hier te maken heb met een solide webapplicatie, gemaakt is door mensen die echt overal rekening mee hebben gehouden.

Maar daar moet ik alsnog mijn gebruikersnaam invullen! Het emailadres waarop ik de emails ontvang levert een foutmelding op. In de emails staat nergens mijn gebruikersnaam. Wat moet ik nu?

Gelukkig heeft de NS rekening gehouden met mensen zoals mij, degenen die zo dom zijn dat ze hulp nodig hebben. Ik klik op de link "Help". Er verschijnt een pop-up venster. "404 - U zoekt iets op NS.nl?" staat er.

404 - U zoekt iets op NS.nl?

Dat is vervelend! Maar ja, dat kan gebeuren, een gebroken link. Je kan natuurlijk niet verwachten dat iedereen af en toe even een Link checker over zijn eigen website haalt om te controleren op dat soort fouten.

Laat ik maar snel contact opnemen met de webmaster om dit probleem te melden! Snel klik ik op "Over deze site" in de hoop daar contactgegevens te vinden: "404 - U zoekt iets op NS.nl?". Gelukkig werkt de link op de foutpagina wel, dus klik ik nog een keer.

Er volgt een mooie lijst van ondersteunde browsers, feed readers en als klap op de vuurpijl ook nog een keurmerk van stichting Drempelvrij. Waarschijnlijk ben ik dusdanig geestelijk gehandicapt dat zelfs dat mij niet meer kan helpen.

NS Drempelsvrij

Maar gelukkig, daar onder staat ook de klantenservice van de NS. Deze aardige mensen kan ik echter alleen telefonisch bereiken, op een betaald nummer, en maar tot 18:00 uur, terwijl het inmiddels al 22:00 uur is geweest. Hopelijk wordt ik morgenochtend niet doof wakker, want dan had ik helemaal een probleem!

Waar waren de dove mensen eigenlijk toen stichting Drempelvrij dat keurmerk uitdeelde. Misschien hebben ze de oproep niet gehoord in de wachtkamer voor de usabilitytest?

Maar omdat ik de hoop al heb opgegeven om de webmaster ooit nog te bereiken kan ik niet veel anders dan mijn frustratie online te uiten in de hoop dat iemand bij de NS het alsnog leest en me mijn gebruikersnaam kan vertellen. Jammer dat het zo moet, maar ja slechte publiciteit is ook publiciteit, om toch maar positief af te sluiten!

Storende Software updates

Door Johnny op maandag 23 maart 2009 18:29 - Reacties (11)
CategorieŽn: software, usability, Views: 4.069

Het is belangrijk om de software op je computer actueel te houden, beveiligingslekken en andere bugs worden er in verholpen en vaak krijg je ook nog eens handige nieuwe features er bij.

Jammergenoeg is het hele proces van software updaten onder zowel Microsoft Windows als Apple Mac OS X nog steeds verre van gebruiksvriendelijk. Beide besturingsystemen hebben een ingebouwde updatefunctie die eens in de zoveel tijd naar boven komt om de gebruiker lastig te vallen.

Oudere versies van Windows die al een tijd niet meer waren bijgewerkt lieten je soms update na update, na update installeren waarna steeds de computer opnieuw moest worden gestart en je soms ook nog eens ook nog eens werd lastig gevallen met dingen zoals "Windows Genuine advantage" om te controleren of je wel netjes had betaald voor jouw Windows.

Onder Mac OS X springt het programma Software Update om de zoveel tijd naar boven met wat updates voor voor het besturingsysteem en Apple applicaties, voor die eerste moet er soms opnieuw worden opgestart, waarna er zich een venster opent met de keuzes tussen "Shut down" en "Restart", of je er nu klaar voor bent of niet. Je kan het afsluiten gelukkig vrij eenvoudig annuleren als je nog ergens werk hebt open staan wat nog moet worden opgeslagen.

In Windows Vista kan je de beslissing blijven uitstellen maar zal het blijven vragen tot je per ongeluk er voor kiest je systeem opnieuw op te starten. Dat is altijd nog beter dan oudere versies waarin Windows meteen begon af te tellen en opnieuw opstartte als je even niet in de buurt was om "nee" te kiezen.

http://tweakers.net/ext/f/8K9YIvSkpGpGyhYcV1j5lBV5/full.jpg

Hoewel onder Mac OS X de applicaties van Apple meteen met het besturingsysteem kunnen worden bijgewerkt moeten andere programma's het zonder deze mogelijkheid doen. het gevolg daarvan is dat vrijwel ieder programma een eigen tabblad heeft bij de voorkeuren voor het regelen van updates.

Een populair framework om programma's te voorzien van een updatefunctionaliteit is Sparkle. Programma's die dit framework gebruiken controleren bij het opstarten of er updates zijn en tonen dan een venster waarin de updates staan vermeld en biedt aan om deze te downloaden en installeren.

Dat het downloaden en installeren met een enkele klik gebeurt is natuurlijk heel erg handig, maar wat er dan gebeurt is vervelend; het programma moet opnieuw worden opgestart! Net nadat je besloten hebt een bepaalde taak te verrichten en een programma te openen en net begonnen bent (tijdens het downloaden van de update) wordt je weer onderbroken om het programma weer opnieuw op te starten. Ook hier krijg je geen keuze, het is of het programma opnieuw opstarten of het venster zo lang open laten staan tot je dat hebt gedaan.

Zelfs als je een programma alleen (preventief) wilt updaten en niet wilt gebruiken moet je na het updaten het weer opnieuw opstarten, wachten tot het geladen is en dan weer afsluiten.

Op de homepage van Sparkle staat het volgende:
True self-updating--no work required from the user.
Met meteen daar onder:
Sparkle doesn't bug the user until second launch for better first impressions.
Eerst wordt beweerd dat er geen gebruikersinteractie nodig is, en vervolgens dat de gebruiker pas bij de tweede keer wordt lastig gevallen. Dat kan toch wel beter?!

Maar hoe zou het dan wel moeten?

Zomaar op "willekeurige" momenten de gebruiker onderbreken met systeemonderhoud, of op het moment dat hij juist iets productiefs wil gaan doen is een heel slecht idee. Computers kunnen zichzelf uitstekend updaten op momenten dat je er toch niks mee doet.

Het eerste wat de makers van besturingsystemen zouden moeten doen is een update-API maken waarbij applicaties zichzelf kunnen aanmelden, en zo updates centraal kunnen worden beheerd. De updates zelf zouden gewoon op dezelfde manier via de servers van de softwaremakers worden binnengehaald, de gebruiker wordt er alleen niet meer op talloze momenten mee lastig gevallen.

Opvallend genoeg lopen moderne Linux-distributies zoals Ubuntu, waarvan vaak wordt gezegd dat ze (nog) niet gebruiksvriendelijk genoeg zijn, hierin voorop met ingebouwde package managers waarmee het hele systeem up to date blijft in dit opzicht voor op commercieŽle besturingsystemen.

De software updater van het besturingsysteem zou ook niet zomaar opeens moeten verschijnen en zomaar de gebruiker moeten onderbreken. Er zijn namelijk veel geschiktere momenten om updates te vragen. Vrijwel iedere gebruiker zet minstens ťťn keer per dag zijn computer uit, of in slaapstand. Dat betekent dat hij op dat moment niks met zijn computer doet, en deze dus lekker updates kan downloaden, installeren en opnieuw opstarten als dat nodig is.

En als we dan toch aan het updaten zijn kan er meteen ook een backup worden gemaakt. Mac OS X heeft standaard al Time Machine ingebouwd waarmee dat kan. Terwijl de updates downloaden kan er een backup worden gemaakt van de huidige configuratie, en na het updaten nog een keer. Op die manier begin je altijd met een up to date systeem waarvan je een actuele backup hebt en altijd nog terug kan naar de vorige situatie mochten bepaalde updates toch niet zo goed werken als je had gehoopt.

Voor Windows zou er een herstelpunt kunnen woren aangemaakt en virusdefinties gedownload kunnen worden gedownload in plaats van bij het opstarten als je computer, en aangezien je computer op dat moment toch niet gebruikt kan er meteen een virusscan, of een defragmentatie van de harde schijf achteraan.

Om de gebruiker zoveel mogelijk te ontlasten zouden de opties niet onnodig moeten verschijnen. Zo zou er alleen een backup moeten worden gemaakt als het medium daarvoor nog is aangesloten en er niet al onlangs een backup is gemaakt. Ook wanneer de computer niet is aangesloten op het netstroom of met een energiezuinig profiel werkt zou hij juist zo snel mogelijk uit moeten schakelen.

Bij het toevoegen van nieuwe funcionaliteit wel zorgen dat de gebruikersinterface niet dusdanig complex wordt dat het gebruikers gaat verwarren en daardoor de functionaliteit niet gaan gebruiken.

Het volgende venster is gebaseerd op het shut down dialoogvenster van Mac OS X, met een enkele checkbox zou al genoeg zijn. Voor uitzonderingsituaties kan deze nog worden uitgeklapt om de specifieke taken aan of uit te vinken, maar ook om de gebruiker een indruk te geven van wat er precies gebeurt als deze optie is aangevinkt.

http://tweakers.net/ext/f/gbWFp0C63tjldIZ4a2HQr5oX/full.png

Na het afsluiten zal de gebruiker worden uitgelogd en zal het systeem beginnen met het downloaden en installeren van de updates. De gebruiker kan dus de computer vertlaten zonder dat iemand nog in zijn bestanden kan gaan neuzen. Mocht het toch nodig zijn om de computer uit te zetten is er nog een knop daarvoor aanwezig waarmee het updaten kan worden onderbroken.

http://tweakers.net/ext/f/2nVENj1f12oDJGfe1eOxlxSM/full.png

De implementatie van een dergelijk systeem met een centrale update manager en updates die het werk van de gebruiker niet steeds onderbreken zou er voor zorgen dat mensen met minder moeite altijd een volledig up to date systeem hebben en de hele gebruikerervaring weer een klein beetje minder ingewikkeld en frustrerend is.