Share via


Svenska exempel på rika klienter - nr 1: RTC Zap

Det här är den första i en serie bloggposter där jag kommer lyfta fram intressanta exempel på svenska lösningar som använder våra senaste tekniker för rika klienter, med gränssnitt byggda i WPF, Silverlight och för Surface.

En anledning till att jag specifikt vill lyfta fram svenska exempel är att det formligen bubblar av smarta ideér och kreativa lösningar runt om i det här landet, något som jag inte minst märker av när jag är ute och träffar kunder och partners.

Jag har talat direkt med de som har utvecklat lösningarna för att kunna förmedla hur de tänkt när de tagit fram arkitekturen och hur de arbetat med designen av lösningarna. Jag tänker försöka vara transparent i artiklarna och kommer inte bara berätta om sådant som varit framgångrikt i projekten, utan tänker också berätta om utmaningar och svårigheter som utvecklarna ställts inför och hur de löst dessa problem.

Först ut i denna serie är RTC Factory och applikationen RTC Zap 4.

RTC Factory är ett Stockholmsbaserat företag som erbjuder IP-baserade telefonitjänster till operatörer och tjänsteleverantörer som kan vara verksamma inom telekomindustrin, online-spelföretag eller företag som driver sociala nätverkstjänster eller uppslagstjänster, för att nämna några exempel på branscher.

En av deras produkter är RTC Zap – en mjukvarutelefon som integrerar sömlöst med företagets backend-tjänster och som används som klient för slutanvändare som vill kunna nyttja fast IP-telefoni. Det innebär att användarna har möjlighet att ringa direkt från sin dator, men också att telefonsamtal kan besvaras från applikationen (den som ringer upp använder ett helt vanligt telefonnummer för att komma fram).

zap_panes_small

De tidigaste versionerna av RTC Zap utvecklades i C++, men portades och vidareutvecklades senare i WinForms. WinForms-versionen har varit mycket framgångsrik och används bland av norska Eniro: https://ring.telefonkatalogen.no/ . Men när RTC Factory skulle ta fram nästa generation Zap-klient så upplevde man WinForms som allför begränsande, framförallt i några avseenden:

  • man ville ha en plattform där det är enkelt att ‘skinna’ om applikationer till ett annat utseende för att snabbt kunna kundanpassa applikationen för olika kunder
  • användarupplevelsen och användbarheten skulle vara i fokus
  • man ville kunna arbeta smidigare i samarbetet mellan utvecklare och designers  

De här kraven gjorde att Windows Presentation Foundation (WPF) och .NET Framework 3.0 blev ett naturligt val av plattform för RTC Zap version 4.

Jag har själv testat applikationen under ett par veckor och tycker den fungerar riktigt bra. RTC Factory har lyckats skapa ett lättanvänt och mycket intuitivt gränssnitt som i standardutförande har ett sobert mörkt blågrönt manér.

zapmessenger RTC Zap innehåller även några riktigt användbara och smidiga funktioner: den integrerar med flera olika sociala nätverk som MSN Messenger, Facebook samt allt som kan kommunicera med XMPP ( Extensible Messaging and Presence Protocol) – t.ex. Google Talk. Den är också helt integrerad med Outlook, vilket inte bara innebär att du kan importera och synkronisera kontakter, utan också att du kan logga samtal till Outlooks Journal eller till din kalender för att få en överblick över samtalen.

zap_systrayEn annan trevlig funktion är att du kan dra och släppa kontakter ner på din desktop, för att direkt kunna ringa till en kontakt genom ett dubbelklick från desktopen. När RTC Zap-fönstret stängs så lägger den sig snällt och prydligt i systray, lätt åtkomlig att öppna med ett klick eller högerklicka för att få alternativ.

I arbetet med att utveckla gränssnittet så gjorde RTC Factory något som vi på Microsoft länge har talat om som ett viktigt steg när det gäller skapandet av rika klienter – nämligen att anamma ett ‘Designer – Developer Workflow’. Det innebär att utvecklare kan implementera den bakomliggande funktionaliteten och designers kan arbeta med gränssnittet helt separat från den bakomliggande logiken.

Nyckeln till ett sådant arbetsföde mellan utvecklare och designers är XAML, eXtensible Application Markup Language. Med hjälp av XAML kunde RTC Factory’s designer arbeta i Expression Blend och funktionaliteten kunde implementeras i Visual Studio utan att något gick förlorat på vägen.

En utmaning som RTC Factory stötte på var hur de skulle hantera exempeldata i designvyn i Blend. Designern måste ju få en blick för hur gränssnittet kommer att se ut när det innehåller exempeldata, utan att ha tillgång till skarpt data. Det här är ett klassiskt problem för alla designytor som visar gränssnitt som binds mot en datakälla vid runtime.

När jag talar med Mikael von Pfaler, som har huvudansvaret för utvecklingen av RTC Zap, berättar han att en av de största utmaningarna var att designa ListBoxItems. För att kunna lägga in exempeldata (annat är en int eller en string) i listorna var de tvungna att ärva CollectionViewSource och sedan använda preprocessor direktiv ( #if DEBUG ) för att sätta dess Source till en test- eller skarp datakälla.

De här utmaningarna är man naturligtvis medveten om inom Blend-teamet och det är något man arbetar med att förbättra stödet för i kommande versioner. Jamie Rodriques på Microsoft har skrivit ett intressant dokument om några olika strategier för att hantera testdata i designvy i befintlig version.

Mikael von Pfaler och Panos Makrostergios (designer på RTC Factory) kommer även att medverka på TechDays i Västerås i en session som handlar om just XAML och designer-developer workflow. Där kommer de demonstrera hur de designat och arbetat med funktionaliteten och gränssnittet för RTC Zap i Visual Studio och Expression Blend.

När det gäller framtiden för RTC Zap så undersöks nu möjligheterna med Multi-touch som kommer i Windows 7. Eftersom de redan använt sig av en interaktionsdesign som påminner om den gestbaserade interaktionen som finns i många tryckkänsliga telefoner idag så är det inte ett jättestort steg att införa Multi-touch. Det ska bli mycket spännande att följa applikationens utveckling framöver.

Här kan du läsa mer om RTC Zap.