Sigurd Snørteland


TinyApps: Logo Kinect

Logo Kinect – use Xbox Kinect to fill your logo with colors.

Logo Kinect is a modified version of Kinect Paint.

Download the source code:

Advertisements

myHome

For noen måneder siden skrev en bekjent fra NNUG-miljøet her i Stavanger, Glenn F.Henriksen, om sine planer om å utvikle en home assistant (les ‘Creating my home assistant‘) for å bedre organiserer hjemmet og familiehverdagen. Etter å ha lest Glenn’s blogpost fikk jeg lyst til å prøve noe lignende og jeg er nå i gang med WPF-applikasjonen dere ser på bilde nedenfor.

myHome3

Løsning min er ikke ferdigstilt enda, men i sin nåværende form tilbyr den værmelding, kalender, oppgaveliste, nyhetsoversikt via rss og verdensklokke (med værmelding) over brukerens valgte byer.

For å slippe å sette opp en egen database vurderer jeg å benytte ulike tjenester fra Google gjennom deres ‘Google Data API’. Dette api’et gjør det mulig å kommunisere med tjenester som blant annet Google Calendar og Google Docs, og nettop disse tjenestene har jeg valgt å benytte meg av. Nedenfor ser dere ett skjermbilde fra Google Calendar i nettleseren som viser de samme 3 avtalene som også vises på myHome-dashbordet på bildet ovenfor.

myHome2

Nedenfor ser dere deler av koden for å hente ut kalender-items og hvordan jeg pakker dem som objekt av klassen ‘Calendar’ og legger dem til i en list:

myHome5

Når det gjelder oppgaver så er planen å benytte tjeneste ‘Google Task’ som finnes inne i GMail, men foreløpig finnes det ikke noen API-grensesnitt for denne tjenesten, og derfor har jeg i stede valgt å benytte meg av Google Docs for å lagre oppgaver. Under oppstart av myHome blir det oppretter (dersom det ikke finnes fra før) ett ‘Spreadsheet’ dokument kalt ‘myHome’ i Google Docs og deretter leser og skriver min løsning oppgaver til dette dokumentet.

myHome1

Nedenfor ser dere deler av koden for å hente ut spreadsheet’et ved hjelp av dokumentnavn i Google Docs. Videre må man loope alle items i spreadsheet’et for å hente ut de enkelte oppgavene.

myHome4

Som sagt så er ikke denne løsningen komplett enda og derfor kommer jeg tilbake med mer informasjon og kildekode etter hvert som jeg får på plass mer funksjonalitet.


Host Silverlight i WPF app

Muligheten til å kjøre Silverlight-applikasjoner på utsiden av nettleseren var en av de store nyhetene i Silverlight 3, og dette er en av funksjonene jeg ønsker i mitt viu² media center prosjekt. Det viser seg midlertidig at viu²-prosjektet ikke kan benytte denne funksjonen, fordi min løsning er avhengig av å hoste en html-frame over silverlight app’en for å vise YouTube-videoer. For å benytte html-frames på toppen av silverlight må man sette følgende parameter i silverlight objekt-taggen i html-siden: <param name=”Windowless” value=”True” />

Når man benytter silverlight ‘out of browser’ kan man ikke benytte denne teknikken og jeg har derfor laget en WPF applikasjon for å  ”hoste” silverlight løsningen. Kort fortalt innebærer dette en minimalistisk WPF app med en tilpasset toolbar og en webbrowser-kontroll. Under OnLoad defineres url’en til silverlight applikasjonen som skal vises i webbrowser-kontrollen.

viu2 - img4

Det som kan være interessant å gå nærmere inn på er hvordan man kan definere sin egen toolbar, i stede for vanlig windows toolbar, ved å blant annet definere windowstyle lik ’None’. Når man samtidig skal host en webbrowser-kontroll og la applikasjonen være mulig å resize, får man problemer med at webbrowser-kontrollen blir usynlig.  For å løse dette må man definere enkelte DDL-importer samt definere enkelt parametre i OnLoad-metoden. Sjekk skjermbildene nedenfor for detaljer eller last ned kildekoden i zip-filen nedenfor.

XAML-filen:
SilverlightDesktop-1

CodeBehind-filen:
SilverlightDesktop-2

download_SilverlightDesktop


CoverFlowTV

WPF app som viser fritt tilgjengelige tv-streamer og benytter en coverflow-control for å bytte mellom ulike tv-kanaler.

CoverFlow-controlleren som er benyttet er en modifisert utgave av en løsning som Gøran Hansen presenterte på MSDN Live 2008.

CoverFlowTV

download_CoverFlowTV


Remote²

Remote² er en Live Mesh/Live Framework applikasjon som jeg deltok i den internasjonale Azure-konkurranse og som gjør det mulig å styre ulike funksjoner på din pc via en webside (som er tilpasset iPhone-skjermer).

Løsningen består av en lokal WPF klient som kommuniserer med Live Framework og som blant annet kan vise tv-streamer. Ved å logge inn i den iPhone-tilpassede websiden kan man styre hvilke tv-stream som skal vises i WPF-app’en. I tillegg kommuniserer denne wpf-app’en med iTunes og synkroniserer informasjon i pc’ens iTunes-biblioteket til Live Mesh. Via iPhone-websiden er det dermed mulig å se iTunes-biblioteket og starte avspillingen av spesifikke sanger på pc’en, samt justere volum og lignende.

Etter å ha lest om TweetMyPC (twitter-løsning for å styre av/pålogging og restart/avslutt windows) laget jeg tilsvarende funkasjonalitet inn i denne løsningen.

I tillegg gjør denne løsning  det mulig å styre powerpoint, og dermed kan man benytte iPhone som fjernkontroll under foredrag.

Screencast:

Remote2 - img3 Remote2 - img4

Remote2 - img5 Remote2 - img6

Remote2 - img7 Remote2 - img8

Nedenfor vises innloggingsbildet til WPF apllikasjonen:
Remote2 - img1

“iPhone”-websiden benytter ‘Live ID Delegated Authentication’ for å autentisere seg mot Live Mesh/Live Framework. Skjermbildet nedenfor viser hvordan dette skjer i praksis:
Remote2 - img2

’ DataEntries_ChangeNotificationReceived’ er den mest sentral Live Framework funksjonen i denne løsningen pga. den gjør det mulig å automatisk kontakte WPF applikasjonen om endringer som har skjedd i Mesh’et. Det betyr at nå iPhone applikasjonen melder ifra til Mesh’et om for eksempel hvilke iTunes sang som skal spilles, så kaller mesh’et videre på WPF for å utføre komandoen/starte avspillingen. Når mesh’et ”kaller” på WPF på denne måten overfører den et mesh-objekt med informasjon om hvilke operasjon som skal utføres.

Nedenfor finnes et eksempel på hvordan et mesh-objekt for musikkavspilling blir behandlet i WPF applikasjonen:
Remote2 - kode1

Nedenfor finnes et eksempel på hvordan et mesh-objekt for systemkommandoer blir behandlet i WPF applikasjonen:
Remote2 - kode2

download_Remote2