tisdagen den 28:e oktober 2008

Silverlight 2 for Mobile devices

Talare: Amit Chopra, Giorgio Sardo

För att sätta stämningen inför dragningen så startar Amit Visual Studio på sin telefon. Ser rätt fett ut :)

2010 beräknas det finnas 4 miljarder mobiltelefoner igång. Detta innebär enorma möjligheter att nå ut med sina produkter, men också en hel del svårigheter. Några av dessa problemen hoppas de lösa med Silverlight 2 på mobilen. CTP kommer att släppas Q1 2009 så det är ju rätt snart.

Mha av SL kommer vi att få den homogena utvecklingsmodellen som det pratades om så mycket inför SL 1.1 även på mobilen. Vi kommer också att få Visual Studio stöd för debugging på device, alltså att vi kan emulera vår device. Något som jag tycker känns rätt självklart.

Så, det är samma Silverlightapplikation som kör på både desktop som på din mobila device. Men på din device så kommer den att köra i compact framework.

I princip går det att köra vilket silverlight app som helst på mobilen, men man måste, som med all mobile development, tänka på begränsningarna i form av skärm och input.

Beroende på vem som anropar applikationenen (device eller desktop), som man kan avgöra genom att helt enkelt titta på HttpContext.Current.Request, kan man ju avgöra hur den ska renderas.  Så, stödet finns där, både för att köra och för att avgöra. Vad som är kvar är egentligen att utnyttja all den input som man kan "beröras" av från en telefon, såsom gestures, touch och softbuttons.

Som session var den lite för democentrerad och lite för fattig i faktisk information. Men, å andra sidan fanns det inte så mycket att berätta förutom att: Silverlight 2 applikationer kommar att gå att köra på mobiler med hjälp av Compact Framework. Fett!

WPF Roadmap

Hamnade i overflowroom. Det var visst en hel del som ville se denna session.

Sessionen började med ett demo, eller med flera demos som kändes lite show-off. Men efter det kom det igång ordentligt.

Den första nyheten är den full-feature Datagrid som släppts på http://windowsclient.net/wpf idag. Demot visade hur man genom att automatgenerera kolumner även får stöd för automatgenererade kolumntyper. Som till exempel att enums blir visualiserade i en DataGridComboBoxColumn och boolean properties visas som checkboxes. Fräckt! I detta läget sätts kolumnernas bredd också automatiskt efter datans storlek. Lite senare under sessionen nämnde Kevin Gjerstad att WPF-teamet ser inte det som sin uppgift att leverera kontroller till WPF utan att vi ska dra nytta av de tredjeparts kontroller som släpps allt eftersom.

Även ribbonkontrollen, som förövrigt visades på dagens första keynote, har nu släppts som CTP på
http://msdn.microsoft.com/officeui.

En annan sak som de har fokuserat på att att få ner storleken på ramverks redisten och ge utvecklaren möjlighet att skapa en snabbare och snyggare installationsupplevelse. Nu har de kommit ner till 3 klick. För att göra detta möjligt har de för utvecklaren att anpassa installationen har de släppt Configurator på www.codeplex.com/wpf. 4.0 kommer att visa ytterligare satsningar på detta. Vidare har det satsats på att utveckla och utnyttja en Visual State Manager. Som kommer att ge möjligheten att koppla ihop ett tillstånd med ett story board. Detta kommer att underlätta övergångar i GUIt mellan applikationens olika tillstånd. Som demo visade de en applikation som växlade melllan "basic state" och "nu försöker jag logga in state".

I övrigt tog de upp 3 huvudområden som det satsas på.

  1. Stronger basics
    Text Clarity Enhancments - Mycket tydligare text,
    App and Framework deployment - som jag nämnde tidigare
    Improved interop - kommer som en följd av clr-teamets satsning på bättre interop. 
    Accessability och localization
    Performance
  2. Immersive UX
    Multi touch
    Controls
    Effects animation
    Media enhancemnts
  3. Tools

På tools biten hann jag inte med detaljerna, men de nämnde sådant som att i Visual Studio 2010 kommer det att finnas stöd för autosizing layouts i designläge. (Det har man ju sett fram emot rätt mycket).

Vad det gäller grafik så försöker man placera mer och mer arbete på GPUn för att få upp renderingskvaliten och samtidigt förbättra interopen. De visade ett rätt fräckt demo där XNA och WPF kombinerades.

Efter gårdagens Framework Design Guidelines var det rätt kul att se att även WPF-teamet har satsat på detta och publicerad sin guide till bättre WPF-kod.

Slutligen berättades det att stöd kommer att släppas för Touch och Multi touch och de andra möjligheter som kommer med Windows 7

Ytterligare två keynotes

Ok, ännu fler keynotes avklarade. Den stora nyheten var såklart Windows 7. Och det kommer väl alla andra att skriva massor om så jag hoppar.

Scott Guthrie (http://www.scottgu.com/) däremot berättade om nya Visual Studio 2010 och att den kommer att vara skriven i WPF. Efter det visade han ett exempel på hur en extenssion skriven i WPF som stylar kommentarer i koden. Skitfräckt och så, men det jag mest hajade till på är att detta verkar vara ett återkommande tema här på PDC. Först på Hejlsbergs sessions så pratades det en del om deklerativ programmering och om införandet av den nya typen dynamic. Syftet med den deklerativa programmerginen är ju att vi ska kunna vara tydligare i vår kod. Vi kan skala bort koden som beskriver hur och bara behålle den som beskriver vad. Vi kan alltså vara tydligare i vår kod. Samma sak med dynamic och det faktum att vi kan slippa castning. Detta gör också koden tydligare.

Med nya studion kommer vi alltså att ha möjlighet att style innehållet i vår IDE. Alltså kan man med vettiga regler visualisera sin kod och verkligen lyfta fram syftet med sin kod. Så känslan jag får är att denna målsättningen, om än kanske inte uttalat, genomsyrar vad som händer här. Jag menar det finns ju ett skäl till varför DSL och Oslo är så hett.

Dagens andra keynote var med Don Box och Chris Anderson. Det är verkligen imponerande att se vad som går att göra med Live Services och Windows Azure och framförallt kul att se hur roligt det kan vara att knacka kod.

Nu blir det WPF Roadmap eller lite Live Services, svårt att välja.

Framework Design Guidelines

Talare: Brad Adams och Krzysztof Cwalina.

Dagens sista session handlade om framework design guidelines. Rätt intressant och matnyttigt, men svårt att referera. Vad de ville få fram var att på 10 år så har ramverkets guidelines gått från ett dokument på några sidor till en bok på över 400 sidor. Och på samma sätt som ramverket utvecklas så utvecklas även guidelines.

Vidare tog de upp några exempel på best practice som egentligen var några smakprov på vad som går att läsa i boken.

måndagen den 27:e oktober 2008

The future is here...

Happy Birthday... i december fyller C# 10 år.

Heljsberg började med att peka på de heta trenderna just nu som han menade var "Declerative", "Dynamic" och "Concurrent" programmering. Och framförallt multiparadigmntrenden. Nämligen att C# är inte längre bara ett Objektorienterat språk utan även ett funktionsorienterat.

Vi får in mer av den deklerativa modellen i vår kodning. Detta skifte är av stor vikt i samband med att moorse lag delvis inte gäller längre. Så vi kan inte stoppa huvudet i sanden längre och förvänta oss snabbare hårdvara utan vad som händer är att vi får fler processorer. Detta tvingar oss in i concurrent programmering. Som skiljer sig från den trådade kodningen som vi sysslar med i huvudsak nu på det sättet att istället för flera trådar på en processor så är det en tråd på flera processorer. Däri har vi en möjlighet med deklerativ programmering som kommer att tillåta ramverket att concurrency-enable vår kod genom att vi säger vad vi vill istället för hur.

Anders pratade vidare om Dynamisk vs. Statisk typning och menade att båda har sina kvaliteér och i enhet med multiparadigmtänket så vill vi försöka plocka russinen ur kakorna. Annars var det dynamiskprogrammering som är det stora i c# 4.0.

Dynamic Language Runtime unifierar dynamisk programmering på .Net plattformen så tillvida att den lägger sig ovan på CLR och ger den ytterligare stöd. DLR består av tre delar,

  1. Expression Trees
  2. Call Site Caching
  3. Dynamic Dispatch

Expression trees är något vi känner igen från LINQ. Call site caching handlar om att snabba upp anrop med samma typ genom att dynamisk injekta metoder. Slutligen dynamic dispatch handlar om att vi kommer att få ett enhetligt sätt att anropa icke .net typer. Så vare sig det är javascript eller COM så kommer koden som anropar att se likadan ut.

Den statiska typen dynamic är det nya nyckelord som gäller och som innebär att vi vid runtime bestämmer vad det är för typ på det objekt vi använder. En nackdel här är dock att vi tappar intellisense. Här visade Hejlsberg ett koolt demo där han genom att override GetMember och SetMember på ett dynamiskt objekt kunde skapa en propertybag som resulterar i ett helt dynamiskt objekt. Häftigt, kolla hans slides för demo.

De stora applåderna kom dock i samband med meddelandet att i c# 4.0 så kommer det att finnas stöd för namned parameters samt för optional parameters. Alltså, vi kommer att slippa överlagra och anropa neråt till våra "primary" metoder.

Sist fick vi en liten preview på vad som komma skall. Han pratade om att kompilatorn ska skrivas om till .Net och vad det innebär. Som exempel kommer det att underlätta vid skapande av DSL men framför allt kommer det att ge möjligheten att köra kompilatorn som service.

Ska man se någon session från PDC så är det denna.

A lap around Cloud Services... er... Windows Azure

Keynote överlåter jag till de andra att rapportera om, men jag kan påpeka att den session jag gick till efteråt bytte namn från Cloud Services till Windows Azure.

Så, vad är då Windows Azure. Manuvir Das, "Director in the Windows Azure Team" förklarade det genom en problem beskrivning. När man på en desktop maskin utvecklar ett program så behöver man (oftast) inte koda egna drivers, ett eget filsystem eller en egen schemaläggare. Detta har operativsystemet abstraherat bort åt oss. Samma sak är tanken med Windows Azure. Ett operativsystem för molnet.

Detta för att kunna uppnå utillity computing. Alltså, att skala upp datorkrämen ska inte vara konstigare än att öppna vattenkranarna lite mer.

Det var framför allt tre delar som beskrevs. Först och främst Automated Service Management. Som innebär att vi som utvecklare sätter upp vår model och våra konfigurationer. Efter vår deploy så kommer ASM att sköta hela servicen och hålla koll på de värden vi har satt upp för att mäta hälsan på vår miljö.

Del två var Storage in the Cloud. Som handlar om möjligheten att dels hålla state, med hjälp av caches och dels om att hålla uppe kommunikation, inom applikationen, med hjälp av queues. Just queues var något som Manuvir återkom till angående best practices för utveckling mot molnet. Nämligen, vikten av löst kopplat arkitektur. Tyngpunkten för storage ligger på skalbarhet och tillgänglighet.

Det sista som togs upp var Rich familiar developer experience. Som ju verkar ha blivit något av en selling point. Var inte det samma sak som sades när Silverlight släpptes? Azure stödjer ju såklart .Net språken, interaktion med Visual Studio och så småningom kommer även stöd för eclipse. Det finns möjlighet att fånga varningar och loggar. Och det kommer att komma en mängd information i form av samples och downloads på MSDN.

Men det mest intressanta var nog det som togs upp på slutet. Nämligen möjligheten att ladda ner en miljö för att simulera cloud-utveckling lokalt. Dels för att komma igång och dels för att kunna debugga eventuella concurrency problem innan applikationen ligger i molnet.

Här visades det en demo av en applikation skriven för den etiopiska skolstyrelsen (uppfattade jag det som). Och det mest intressanta här var inte hur fräsig själva programmet var utan det faktum att en IT-avdelning som tidigare hade tillgång till EN rack med 2 servrar i fick nu med hjälp av Windows Azure tillgång till ett helt datacenter i molnet. Med möjlighet att utifrån enkla xml-konfigurationer ändra hur många instanser av applikationen som körs. Något som gör skalbarheten otrolig.

www.azure.com kommer det att släppas en preview och jämna uppdateringar fram tills det att version 1.0 släpps under 2009.

En häftig detalj i sammanhanget var att då Azure skulle släppas kl 12 så la Manuvir upp sin mobiltelefon på bordet och sa "Lets hope it doesn´t ring".

Welcome Mr. Korkort

Idag började förkonferensen. Jag valde att gå på sessionen Performance by Design.

Den första delen hölls av Rico Mariani som är Performance Architect på Microsoft. Ricos snack var på ett mer övergripande plan och handlade i huvudsak om hur man ska gå tillväga för att få till en performance kultur på sitt företag och hur man ska göra för att komma igång med performance tänket på sitt projekt.

I korthet kan man säga att hans tal handlade om två regler.

  1. Measure
  2. Do Your Homework

Med detta menar han att det absolut viktigaste är att hela tiden mäta prestanda för att över huvudtaget kunna ha en aning om vad som ska optimeras. Samt att man bör skriva små exempel och tester för kod och för de komponenter respektive assemblies som man vill inkludera i sin applikation.

Som exempel ställde han frågan. Hur många här har inkluderat system.xml i sitt projekt. Av er, hur många vet hur stor den assemblyn är?

Vance Morrison som pratade senare var också inne på samma spår. Och just att lägga till en referens till en ny dll var något som de menade ofta  gjordes utan eftertanke. Vance talade en del om minnesoptimering i samband med startup av applikationer handlar mycket om att minimera läsning från disk. Detta innebär framför allt att minimera mängden dll:er som laddas.

Så den återkommande frågan var: Behöver vi verkligen inkludera mera? Eller som Vance uttryckte det, "Pay for Play". Alltså, vi kan utnyttja oerhört mycket som finns i ramverket. Men, det kommer med en kostnad.

Vidare, Rico snackade lite om en trestegs modell för att komma igång med performance.

  1. Budgetering. Bestäm dina mål, vill vi verkligen ha en A+ applikation eller har vi ett "Good enough" mål.
  2. Planera. Hur mycket förtester måste man göra. Dvs, vilken risk är acceptabel.
  3. Mät bara mätbara delar. Ta reda på dina kunders behov och gör om dem till resursbegränsningar som är mätbara.

Rico tog också upp det kända citatet "Premature optimization is the root of all evil" och förtydligade det genom att påpeka att det egentligen ska uttalas som "97% of all optimization is premature". Men, med detta menade han att det trots allt finns 1 av 30 rader som bör optimeras. Hur många rader visar en typisk IDE per sida?

Vance var lite mer hands on än Rico och visade lite exempel på vettigt profiling. Bland annat visade han MesaureIt. En poäng i samanhanget var att man bör mäta tillräckligt stora kodstycken, detta för att få ner andelen brus samt att köra mätningen tillräckligt många gånger för att få ett vettigt medianvärde.

Mr. Korkort? Jo, när jag skulle registreras så tittade tjejen i receptionen på mitt körkort och försökte först regga mig som Mr. Korkort, sen som Mr. Sverige.

Mr. Sverige, det låter inte illa.