Hack a camera - web interface enhancements (Foscam) en

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

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

USB-sticks slopen je computer!!! (volgens Nova)

Door Johnny op woensdag 24 juni 2009 23:03 - Reacties (21)
Categorie: software, Views: 8.291

Vanavond had het televisieprogramma Nova een item (uitzending van 24 juni 2009 op Uitzending gemist) over de gevaren van USB-sticks. Bij diverse bedrijven, instellingen en publieke locaties werden USB-sticks achtergelaten met daarop een klein "dail home" programma, waaraan de onderzoekers konden zien dat de USB-sticks waren ingeplugd en dat het programma werd uitgevoerd.

Dat laatste werd overginds niet expliciet vermeld. Gedurende het hele item ging men voorbij aan het feit dat een USB-stick niet zelf zomaar code hoort te kunnen uitvoeren, dat doet het besturingssysteem, en dan als het goed is alleen nadat de gebruiker daar de opdracht voor heeft gegeven.

Man met laptop en USB-stickstijdens Nova item in Quicktime player

Zoals het werd gepresenteerd leek het net alsof een USB-stick iedere computer zomaar kan overnemen zodra hij wordt geplaatst ongeacht van je besturingssysteem of configuratie, en dat je daar als gebruiker helemaal niks aan kan doen behalve de USB-stick uit je computer houden. Als je dat niet doet kan zomaar je hele harde schijf worden gewist, al je gegevens naar criminelen wordt verzonden en er software zoals key loggers worden geÔnstalleerd. Dit werd ook nog eens bevestigd door diverse "experts" die oftewel het verhaal dusdanig probeerden te versimpelen dat het nergens meer op sloeg, of dat de redactie dat voor hun gedaan heeft met wat creatief knipwerk.

Uiteraard is het automatisch uitvoeren van code en installeren van software die zichzelf vanzelf opstart onmogelijk op ieder modern besturingssysteem waarbij je als gebruiker niet standaard als Administrator bent ingelogd. Het hele item gaat eigenlijk over de Autorun-functionaliteit zoals Microsoft die in Windows heeft geÔmplemteerd, dit geldt niet alleen voor USB-sticks maar ook voor CD's DVD's en zelfs diskettes en werkt al zo sinds Windows 95. Het was al mogelijk om AutoRun uit te schakelen, daar was wel een tijd omheen te werken maar als we Wikipedia mogen geloven dan is dat in februari 2009 is dat al opgelost, Windows-gebruikers die sindsdien hun computer hebben voorzien van updates lopen dus geen gevaar.

Je kan gebruikers ook niet kwalijk nemen dat ze een USB-stick in een computer steken, het hoort gewoon veilig te zijn, dat er een softwarefabrikant is die een fout heeft gemaakt kan je hun niet aanrekenen. Als er iemand verantwoordelijk moet worden gehouden hier is het Microsoft, maar die wordt in het hele item niet genoemd, terwijl je jezelf als journalist toch wel zou moeten afvragen waarom dit beveiligingslek bestaat.

Hoewel het gebrek aan technische correctheid storend is, maak ik me veel kwader over het feit dat mensen hier onnodig bang worden gemaakt. Computers worden vaak al gezien als complexe magische apparaten die spontaan kapot gaan als je perongeluk de verkeerde knop indrukt, en die reputatie komt voornamelijk door slechte software van jaren geleden. In plaats van mensen te onderwijzen over het beveiligen van hun gegevens wordt er weer het beeld geschept dat computers eng zijn, dat je zelf geen enkele invloed hebt, dat we omringd zijn met incompetente gebruikers en briljante hackers en criminelen, en dat de enige bescherming is om er zo ver mogelijk vandaan te blijven.

Volgende week in Nova: het bezoeken van websites geeft je computer een virus!

Storende Software updates

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

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.