SlideShare una empresa de Scribd logo
1 de 55
Mail RIA & Silverlight – Defining new
experience on the Web
  Our RIA objectives - Eric Hoffman
  A Silverlight development tale – Eric Hoffman
  A new verse in web User Interface – Marc
  Katchay
  The underlying nuts and bolts – Stefan Gal
  Monetization opportunities – Seth Halvaksz
  An Invitation
The next chapter for web applications
Rich and performant
Personalization taken to another level
Write it once, run it everywhere
Beyond the web cache
Enhanced engagement
New monetization opportunities
Beginning with Silverlight 1.0 / 2.0
   Research and exploration project
   We were hopeful…
     High Definition video and audio playback
     Compact size and the idea of “write it once”
     The “DNA” for some controls
     .NET runtime – really appealing to us developers
     Challenges presented themselves throughout the
     summer of 07
“grid” & “stack” prototype
Silverlight 2.0 provided…
  Basic layout
  Grid & stack panels
  Isolated storage – size was a factor still
  Could we build an application with just this ..
Pivotal moment was reached
  Hybrid approach was contemplated
  Delay project several months
  In the end ..our team decided to write some code ..
namespace Client.Controls.Button
{
[TemplatePart(Name=quot;Part_MouseUp“,Type=typeof(S
toryboard)),
…
public abstract class ButtonBase : Control
     {
          …
     }
}
What we really needed … more advanced
controls..
 Buttons, checkboxes
 Tree control
 ListView,- virtualized ..
 Listboxes – for settings
 Html control for read and write mail
 Grid splitters & custom layout
 Databinding – move data from model to our controls
Morphed into a Collaboration ..
  Contribution to the core Silverlight feature set
  Request functionality as we needed ..
  A validation of the usability of the framework
  Some examples
     Adding encryption for secure isolated storage
     Imagine background worker threads – in a web
     application !
     Cross domain would be nice …
using (Stream xstream = new CryptoStream(stream,
_alghoritm.CreateDecryptor(),
CryptoStreamMode.Read))
 {
      using (Stream zstream = new GZipStream(xstream,
      CompressionMode.Decompress))
       {
       data = LoadObject<T>(zstream);
       }
 }
public void SaveObject<T>(string path, T
data, Action<Exception> cb) where T : class
  { // Main thread here …
   ThreadPool.QueueUserWorkItem(delegate(object state)
   { // Anonymous function – C#
      // Worker thread here …
      Exception exception = null;
         try{
             SaveObject(path, data);
            }
         catch (Exception ex){
               exception = ex;
                }
    }
}
Appealing – Look good
Rich in assets - Vibrant
Feel alive!! – non static look
Dynamic/Resizable
Skinnable
Fast – seem effortless
Designers create UI layout
Developers build controls and components
Controls paint visuals and bind to business
data
UI elements taken from designers layout and
rendered in respective controls
Artists/Designers create application
Think multiple/Differentiating skins
Utilize tools. Create in natural format - xaml
Build application to adopt designer requirements
Identify Key Components
Components are themselves controls
Define Root Layout of Application
First things first!! -- Custom Controls
  DataGrid
  Cells
  List
  Tree
  TreeNodes
  GridSplitter
  Buttons
  …
Custom visual controls derive from control class
Control Class supports Control Templates
All components and visual controls use templates
Critical for skinning model
Templates collected to form a skin
<ControlTemplate/>

<Grid x:Name=quot;Part_Rootquot;>

<Grid.Resources>
    <Storyboard x:Name=quot;Part_MouseEnterquot;>
     <ColorAnimation Duration=quot;00:00:00.2“ To=quot;#50FFFFFFquot;
                  Storyboard.TargetName=quot;Part_HighlightRect”

    Storyboard.TargetProperty=quot;(Shape.Fill).(SolidColorBrush.C
olor)quot; />
 </Grid.Resources>

 <Rectangle x:Name=quot;Part_HighlightRectquot; Fill=quot;#00FFFFFFquot;/>
 <TextBlock x:Name=quot;Part_Caption” FontSize=quot;12quot; Text=quot;Buttonquot;
/>

</ControlTemplate>
namespace Client.Controls
{
    public class ButtonCell : Control
    {

ResourceHelper.GetControlTemplate(typeof(ButtonCell));
        }

          public ButtonCell()
          {
              base.Template = s_CellTemplate;
              base.ApplyTemplate();
      }
}
Browser resizes
Grid Splitters
Some UI elements grow as skin is resized
Manage Multiple UI elements
Built specialized layout panels to encapsulate
and draw multiple elements of a skin
Code behind should never have custom code
dedicated to a skin
ControlTemplate>
<



<Grid x:Name=“Part_Root”>
<Controls:ViewPanel>
 <Path x:Name=“Part_Frame” Data=“….”/>
 <Rectangle x:Name=“Part_Background” />
</Controls:ViewPanel>
</Grid>

<ControlTemplate>
public abstract class ViewPanel : Panel
    {
        protected override Size
MeasureOverride(Size availableSize)
        {

        }
        protected override Size
ArrangeOverride(Size finalSize)
        {
        }
    }
Skin is a project
Comprised of Templates and Images
Skins
  ResourceHelper Class
  Loads Skin Assembly
  Helper functions to locate and load
  templates
   GetControlTemplate()
  Helper functions to load resources
   Application Background
   Background animation
Summary
 We have a skin solution
    Separate assemblies
    Change skins
    Dynamic living skins
    Well defined layer for designers to work with
 UI Infrastructure
    Controls – Templates
    Components – define key sections of app
The quest for a rich, interactive user
experience
Custom controls
Silverlight overlays
High performance
Extreme flexibility
Skinnable
Small download
Template based controls
Extensive data binding
Template binding whenever possible
Shared resources and styles
Virtualized controls for large data sets
public class ItemData
    : INotifyPropertyChanged
{
  public event
    PropertyChangedEventHandler
      PropertyChanged;
}
VirtualizedList _list1;
ObservableCollection<ItemData>
  _dataSource;
…
_list1.ItemsSource = _dataSource;
public class VirtualizedList
    : Control
{
  …
  public IList ItemsSource
  { … }
  public DataTemplate ItemTemplate
  { … }
}
<c:VirtualizedList x:Name=quot;_list1”>
 <c:VirtualizedList.ItemTemplate>
  <DataTemplate>
   <c:ListItem
     Foreground=quot;Blue“
     Text=“{Binding Caption}”/>
  </DataTemplate>
 </c:VirtualizedList.ItemTemplate>
</c:VirtualizedList>
<DataTemplate>
  <TextBlock
    Text=quot;{Binding Caption}quot;
    Foreground=quot;Gold“
    Padding=quot;2quot;/>
</DataTemplate>
Overlay
          HTML
Requirement introduced by the usage of
browser based HTML rendering and
composition
Also used for
  Context menus
  Modal dialogs
  Rich Tooltips
  „Out of banner‟ Silverlight ads
  Legacy ads
Creating Silverlight overlay plugin
Communication between plugins
Sharing code and resources
Plugin lifetime management
Hosted by an absolute positioned DIV
Host element is child of main host
element, sibling of the main plugin
Silverlight.js support to create the additional
plugin
Windowless mode supports transparency
and irregularly shaped windows
ScriptObject arg = (ScriptObject)
HtmlPage.Window.Eval(quot;new Object;quot;);
arg.SetProperty(quot;initParamsquot;, “parentId=quot; +
HtmlPage.Plugin.Id;

ScriptObject slso = (ScriptObject)
HtmlPage.Window.
  GetProperty(quot;Silverlightquot;);
slso.Invoke(quot;createObjectExquot;, arg);
Each plugin runs in its own application
domain
JSON payload passed as parameters and
returned as result.
Input and output passed by value.
Scriptable objects used for callbacks and
interaction
Creation is asynchronous, the child plugin
will find and connect to the parent based on
initialization parameters
Separate .xap archive files are used for
main plugin and overlay plugins
Distributing shared code and resources in
both archives is possible but not desirable
due to increased download size.
We chose to have the overlay load the
required assemblies dynamically from the
main archive
It is fast because the download will find the
main archive cached by the browser
Model.dll


 Main.xap
               Popup.xap

               Popup.dll
Controls.dll
_webClient = new WebClient();
_webClient.OpenReadCompleted +=
  delegate(object sender,… e)
  { Load(new StreamResourceInfo
      (e.Result, null)); };

_webClient.OpenReadAsync(
    new Uri(“shared.xapquot;,
            UriKind.Relative));
StreamResourceInfo ri =

Application.GetResourceStream(xap,
     new Uri(“shared.dll“,
             UriKind.Relative));

AssemblyPart p = new
AssemblyPart();
Assembly a = p.Load(ri.Stream);
Flexible separation of data, control logic and
control visuals
Lightweight and high performance
Extensive binding
Virtualized controls for large data sets
Rich, highly interactive visuals
Skins downloaded on demand
AOL Mail RIA & Monetization
 Objectives
    Engaging
    High-performing
    Standards-based

 Integration between ads
 and application
    Skins
    Panels

 Rich media options
    High impact audio &
    video
    Rich animations
AOL Mail RIA & Silverlight
 A new experience on the web
   Industry-leading performance
   Unique skinning capabilities
   High impact content delivery

 Mail from AOL
   Innovative products
   Get the email identity and experience that
   expresses who you are and what you like
Sign up today to be notified when the
preview is available


http://ria.mail.aol.com
Building AOL's High Performance, Enterprise Wide Mail Application With Silverlight 2

Más contenido relacionado

La actualidad más candente

Summer - The HTML5 Library for Java and Scala
Summer - The HTML5 Library for Java and ScalaSummer - The HTML5 Library for Java and Scala
Summer - The HTML5 Library for Java and Scalarostislav
 
e-suap - client technologies- english version
e-suap - client technologies- english versione-suap - client technologies- english version
e-suap - client technologies- english versionSabino Labarile
 
MongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and Typescript
MongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and TypescriptMongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and Typescript
MongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and TypescriptMongoDB
 
Going Offline with Gears And GWT
Going Offline with Gears And GWTGoing Offline with Gears And GWT
Going Offline with Gears And GWTtom.peck
 
Ajax Overview by Bally Chohan
Ajax Overview by Bally ChohanAjax Overview by Bally Chohan
Ajax Overview by Bally ChohanWebVineet
 
Sharepoint Saturday India Online best practice for developing share point sol...
Sharepoint Saturday India Online best practice for developing share point sol...Sharepoint Saturday India Online best practice for developing share point sol...
Sharepoint Saturday India Online best practice for developing share point sol...Shakir Majeed Khan
 
SharePoint Conference 2018 - APIs, APIs everywhere!
SharePoint Conference 2018 - APIs, APIs everywhere!SharePoint Conference 2018 - APIs, APIs everywhere!
SharePoint Conference 2018 - APIs, APIs everywhere!Sébastien Levert
 
Making connected apps with BaaS (Droidcon Bangalore 2014)
Making connected apps with BaaS (Droidcon Bangalore 2014)Making connected apps with BaaS (Droidcon Bangalore 2014)
Making connected apps with BaaS (Droidcon Bangalore 2014)Varun Torka
 
Creating lightweight JS Apps w/ Web Components and lit-html
Creating lightweight JS Apps w/ Web Components and lit-htmlCreating lightweight JS Apps w/ Web Components and lit-html
Creating lightweight JS Apps w/ Web Components and lit-htmlIlia Idakiev
 
Introduction to JavaScript for APEX Developers - Module 3: Working with the D...
Introduction to JavaScript for APEX Developers - Module 3: Working with the D...Introduction to JavaScript for APEX Developers - Module 3: Working with the D...
Introduction to JavaScript for APEX Developers - Module 3: Working with the D...Daniel McGhan
 
Easing offline web application development with GWT
Easing offline web application development with GWTEasing offline web application development with GWT
Easing offline web application development with GWTArnaud Tournier
 
Integrating React.js Into a PHP Application: Dutch PHP 2019
Integrating React.js Into a PHP Application: Dutch PHP 2019Integrating React.js Into a PHP Application: Dutch PHP 2019
Integrating React.js Into a PHP Application: Dutch PHP 2019Andrew Rota
 
Building Android apps with Parse
Building Android apps with ParseBuilding Android apps with Parse
Building Android apps with ParseDroidConTLV
 
Parse: A Mobile Backend as a Service (MBaaS)
Parse: A Mobile Backend as a Service (MBaaS)Parse: A Mobile Backend as a Service (MBaaS)
Parse: A Mobile Backend as a Service (MBaaS)Ville Seppänen
 

La actualidad más candente (20)

Summer - The HTML5 Library for Java and Scala
Summer - The HTML5 Library for Java and ScalaSummer - The HTML5 Library for Java and Scala
Summer - The HTML5 Library for Java and Scala
 
e-suap - client technologies- english version
e-suap - client technologies- english versione-suap - client technologies- english version
e-suap - client technologies- english version
 
MongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and Typescript
MongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and TypescriptMongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and Typescript
MongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and Typescript
 
JavaScript JQUERY AJAX
JavaScript JQUERY AJAXJavaScript JQUERY AJAX
JavaScript JQUERY AJAX
 
jQuery
jQueryjQuery
jQuery
 
Going Offline with Gears And GWT
Going Offline with Gears And GWTGoing Offline with Gears And GWT
Going Offline with Gears And GWT
 
Ajax Overview by Bally Chohan
Ajax Overview by Bally ChohanAjax Overview by Bally Chohan
Ajax Overview by Bally Chohan
 
Understanding AJAX
Understanding AJAXUnderstanding AJAX
Understanding AJAX
 
Sharepoint Saturday India Online best practice for developing share point sol...
Sharepoint Saturday India Online best practice for developing share point sol...Sharepoint Saturday India Online best practice for developing share point sol...
Sharepoint Saturday India Online best practice for developing share point sol...
 
SharePoint Conference 2018 - APIs, APIs everywhere!
SharePoint Conference 2018 - APIs, APIs everywhere!SharePoint Conference 2018 - APIs, APIs everywhere!
SharePoint Conference 2018 - APIs, APIs everywhere!
 
Angular js
Angular jsAngular js
Angular js
 
Making connected apps with BaaS (Droidcon Bangalore 2014)
Making connected apps with BaaS (Droidcon Bangalore 2014)Making connected apps with BaaS (Droidcon Bangalore 2014)
Making connected apps with BaaS (Droidcon Bangalore 2014)
 
Creating lightweight JS Apps w/ Web Components and lit-html
Creating lightweight JS Apps w/ Web Components and lit-htmlCreating lightweight JS Apps w/ Web Components and lit-html
Creating lightweight JS Apps w/ Web Components and lit-html
 
Handlebars & Require JS
Handlebars  & Require JSHandlebars  & Require JS
Handlebars & Require JS
 
Introduction to JavaScript for APEX Developers - Module 3: Working with the D...
Introduction to JavaScript for APEX Developers - Module 3: Working with the D...Introduction to JavaScript for APEX Developers - Module 3: Working with the D...
Introduction to JavaScript for APEX Developers - Module 3: Working with the D...
 
Easing offline web application development with GWT
Easing offline web application development with GWTEasing offline web application development with GWT
Easing offline web application development with GWT
 
Integrating React.js Into a PHP Application: Dutch PHP 2019
Integrating React.js Into a PHP Application: Dutch PHP 2019Integrating React.js Into a PHP Application: Dutch PHP 2019
Integrating React.js Into a PHP Application: Dutch PHP 2019
 
Building Android apps with Parse
Building Android apps with ParseBuilding Android apps with Parse
Building Android apps with Parse
 
Parse: A Mobile Backend as a Service (MBaaS)
Parse: A Mobile Backend as a Service (MBaaS)Parse: A Mobile Backend as a Service (MBaaS)
Parse: A Mobile Backend as a Service (MBaaS)
 
Atlas Php
Atlas PhpAtlas Php
Atlas Php
 

Destacado

Protecting Online Identities
Protecting Online IdentitiesProtecting Online Identities
Protecting Online Identitiesgoodfriday
 
Building Microsoft Silverlight Controls
Building Microsoft Silverlight ControlsBuilding Microsoft Silverlight Controls
Building Microsoft Silverlight Controlsgoodfriday
 
Building Silverlight Applications Using .NET (Part 2 of 2)
Building Silverlight Applications Using .NET (Part 2 of 2)Building Silverlight Applications Using .NET (Part 2 of 2)
Building Silverlight Applications Using .NET (Part 2 of 2)goodfriday
 
3rd Sunday of Easter :: op-stjoseph.org
3rd Sunday of Easter :: op-stjoseph.org3rd Sunday of Easter :: op-stjoseph.org
3rd Sunday of Easter :: op-stjoseph.orggoodfriday
 
Introducing SQL Server Data Services
Introducing SQL Server Data ServicesIntroducing SQL Server Data Services
Introducing SQL Server Data Servicesgoodfriday
 
Building Rich Internet Applications Using Microsoft Silverlight 2, Part 2
Building Rich Internet Applications Using Microsoft Silverlight 2, Part 2Building Rich Internet Applications Using Microsoft Silverlight 2, Part 2
Building Rich Internet Applications Using Microsoft Silverlight 2, Part 2goodfriday
 
Escaping Flatland in Application Design: Rich User Experiences
Escaping Flatland in Application Design: Rich User ExperiencesEscaping Flatland in Application Design: Rich User Experiences
Escaping Flatland in Application Design: Rich User Experiencesgoodfriday
 
Partying with PHP on Microsoft Internet Information Services 7
Partying with PHP on Microsoft Internet Information Services 7Partying with PHP on Microsoft Internet Information Services 7
Partying with PHP on Microsoft Internet Information Services 7goodfriday
 

Destacado (8)

Protecting Online Identities
Protecting Online IdentitiesProtecting Online Identities
Protecting Online Identities
 
Building Microsoft Silverlight Controls
Building Microsoft Silverlight ControlsBuilding Microsoft Silverlight Controls
Building Microsoft Silverlight Controls
 
Building Silverlight Applications Using .NET (Part 2 of 2)
Building Silverlight Applications Using .NET (Part 2 of 2)Building Silverlight Applications Using .NET (Part 2 of 2)
Building Silverlight Applications Using .NET (Part 2 of 2)
 
3rd Sunday of Easter :: op-stjoseph.org
3rd Sunday of Easter :: op-stjoseph.org3rd Sunday of Easter :: op-stjoseph.org
3rd Sunday of Easter :: op-stjoseph.org
 
Introducing SQL Server Data Services
Introducing SQL Server Data ServicesIntroducing SQL Server Data Services
Introducing SQL Server Data Services
 
Building Rich Internet Applications Using Microsoft Silverlight 2, Part 2
Building Rich Internet Applications Using Microsoft Silverlight 2, Part 2Building Rich Internet Applications Using Microsoft Silverlight 2, Part 2
Building Rich Internet Applications Using Microsoft Silverlight 2, Part 2
 
Escaping Flatland in Application Design: Rich User Experiences
Escaping Flatland in Application Design: Rich User ExperiencesEscaping Flatland in Application Design: Rich User Experiences
Escaping Flatland in Application Design: Rich User Experiences
 
Partying with PHP on Microsoft Internet Information Services 7
Partying with PHP on Microsoft Internet Information Services 7Partying with PHP on Microsoft Internet Information Services 7
Partying with PHP on Microsoft Internet Information Services 7
 

Similar a Building AOL's High Performance, Enterprise Wide Mail Application With Silverlight 2

Real-World AJAX with ASP.NET
Real-World AJAX with ASP.NETReal-World AJAX with ASP.NET
Real-World AJAX with ASP.NETgoodfriday
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Phpfunkatron
 
Silverlight 2 For Developers
Silverlight 2 For DevelopersSilverlight 2 For Developers
Silverlight 2 For DevelopersMithun T. Dhar
 
A mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutesA mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutesJames Pearce
 
Practical catalyst
Practical catalystPractical catalyst
Practical catalystdwm042
 
Itemscript, a specification for RESTful JSON integration
Itemscript, a specification for RESTful JSON integrationItemscript, a specification for RESTful JSON integration
Itemscript, a specification for RESTful JSON integration{item:foo}
 
Optimizing Flex Applications
Optimizing Flex ApplicationsOptimizing Flex Applications
Optimizing Flex Applicationsdcoletta
 
Create a mobile web app with Sencha Touch
Create a mobile web app with Sencha TouchCreate a mobile web app with Sencha Touch
Create a mobile web app with Sencha TouchJames Pearce
 
eXo SEA - JavaScript Introduction Training
eXo SEA - JavaScript Introduction TrainingeXo SEA - JavaScript Introduction Training
eXo SEA - JavaScript Introduction TrainingHoat Le
 
A Complete Tour of JSF 2
A Complete Tour of JSF 2A Complete Tour of JSF 2
A Complete Tour of JSF 2Jim Driscoll
 
Rob Tweed :: Ajax and the Impact on Caché and Similar Technologies
Rob Tweed :: Ajax and the Impact on Caché and Similar TechnologiesRob Tweed :: Ajax and the Impact on Caché and Similar Technologies
Rob Tweed :: Ajax and the Impact on Caché and Similar Technologiesgeorge.james
 
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008Association Paris-Web
 
DODN2009 - Jump Start Silverlight
DODN2009 - Jump Start SilverlightDODN2009 - Jump Start Silverlight
DODN2009 - Jump Start SilverlightClint Edmonson
 
Introduction To Code Igniter
Introduction To Code IgniterIntroduction To Code Igniter
Introduction To Code IgniterAmzad Hossain
 
Flex_rest_optimization
Flex_rest_optimizationFlex_rest_optimization
Flex_rest_optimizationKhou Suylong
 
Developing Next-Gen Enterprise Web Application
Developing Next-Gen Enterprise Web ApplicationDeveloping Next-Gen Enterprise Web Application
Developing Next-Gen Enterprise Web ApplicationMark Gu
 
CiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForceCiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForceCiklum Ukraine
 

Similar a Building AOL's High Performance, Enterprise Wide Mail Application With Silverlight 2 (20)

Real-World AJAX with ASP.NET
Real-World AJAX with ASP.NETReal-World AJAX with ASP.NET
Real-World AJAX with ASP.NET
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Php
 
Silverlight 2 For Developers
Silverlight 2 For DevelopersSilverlight 2 For Developers
Silverlight 2 For Developers
 
Wpf Introduction
Wpf IntroductionWpf Introduction
Wpf Introduction
 
A mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutesA mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutes
 
Practical catalyst
Practical catalystPractical catalyst
Practical catalyst
 
Itemscript, a specification for RESTful JSON integration
Itemscript, a specification for RESTful JSON integrationItemscript, a specification for RESTful JSON integration
Itemscript, a specification for RESTful JSON integration
 
Optimizing Flex Applications
Optimizing Flex ApplicationsOptimizing Flex Applications
Optimizing Flex Applications
 
Create a mobile web app with Sencha Touch
Create a mobile web app with Sencha TouchCreate a mobile web app with Sencha Touch
Create a mobile web app with Sencha Touch
 
eXo SEA - JavaScript Introduction Training
eXo SEA - JavaScript Introduction TrainingeXo SEA - JavaScript Introduction Training
eXo SEA - JavaScript Introduction Training
 
A Complete Tour of JSF 2
A Complete Tour of JSF 2A Complete Tour of JSF 2
A Complete Tour of JSF 2
 
Rob Tweed :: Ajax and the Impact on Caché and Similar Technologies
Rob Tweed :: Ajax and the Impact on Caché and Similar TechnologiesRob Tweed :: Ajax and the Impact on Caché and Similar Technologies
Rob Tweed :: Ajax and the Impact on Caché and Similar Technologies
 
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
 
DODN2009 - Jump Start Silverlight
DODN2009 - Jump Start SilverlightDODN2009 - Jump Start Silverlight
DODN2009 - Jump Start Silverlight
 
JavaScripts & jQuery
JavaScripts & jQueryJavaScripts & jQuery
JavaScripts & jQuery
 
Introduction To Code Igniter
Introduction To Code IgniterIntroduction To Code Igniter
Introduction To Code Igniter
 
Flex_rest_optimization
Flex_rest_optimizationFlex_rest_optimization
Flex_rest_optimization
 
Developing Next-Gen Enterprise Web Application
Developing Next-Gen Enterprise Web ApplicationDeveloping Next-Gen Enterprise Web Application
Developing Next-Gen Enterprise Web Application
 
Ibm
IbmIbm
Ibm
 
CiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForceCiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForce
 

Más de goodfriday

Narine Presentations 20051021 134052
Narine Presentations 20051021 134052Narine Presentations 20051021 134052
Narine Presentations 20051021 134052goodfriday
 
09 03 22 easter
09 03 22 easter09 03 22 easter
09 03 22 eastergoodfriday
 
Holy Week Easter 2009
Holy Week Easter 2009Holy Week Easter 2009
Holy Week Easter 2009goodfriday
 
Holt Park Easter 09 Swim
Holt Park Easter 09 SwimHolt Park Easter 09 Swim
Holt Park Easter 09 Swimgoodfriday
 
Swarthmore Lentbrochure20092
Swarthmore Lentbrochure20092Swarthmore Lentbrochure20092
Swarthmore Lentbrochure20092goodfriday
 
Eastercard2009
Eastercard2009Eastercard2009
Eastercard2009goodfriday
 
Easterservices2009
Easterservices2009Easterservices2009
Easterservices2009goodfriday
 
Bulletin Current
Bulletin CurrentBulletin Current
Bulletin Currentgoodfriday
 
March 2009 Newsletter
March 2009 NewsletterMarch 2009 Newsletter
March 2009 Newslettergoodfriday
 
Lent Easter 2009
Lent Easter 2009Lent Easter 2009
Lent Easter 2009goodfriday
 
Easterpowersports09
Easterpowersports09Easterpowersports09
Easterpowersports09goodfriday
 
Easter Trading 09
Easter Trading 09Easter Trading 09
Easter Trading 09goodfriday
 
Easter Brochure 2009
Easter Brochure 2009Easter Brochure 2009
Easter Brochure 2009goodfriday
 
March April 2009 Calendar
March April 2009 CalendarMarch April 2009 Calendar
March April 2009 Calendargoodfriday
 

Más de goodfriday (20)

Narine Presentations 20051021 134052
Narine Presentations 20051021 134052Narine Presentations 20051021 134052
Narine Presentations 20051021 134052
 
Triunemar05
Triunemar05Triunemar05
Triunemar05
 
09 03 22 easter
09 03 22 easter09 03 22 easter
09 03 22 easter
 
Holy Week Easter 2009
Holy Week Easter 2009Holy Week Easter 2009
Holy Week Easter 2009
 
Holt Park Easter 09 Swim
Holt Park Easter 09 SwimHolt Park Easter 09 Swim
Holt Park Easter 09 Swim
 
Easter Letter
Easter LetterEaster Letter
Easter Letter
 
April2009
April2009April2009
April2009
 
Swarthmore Lentbrochure20092
Swarthmore Lentbrochure20092Swarthmore Lentbrochure20092
Swarthmore Lentbrochure20092
 
Eastercard2009
Eastercard2009Eastercard2009
Eastercard2009
 
Easterservices2009
Easterservices2009Easterservices2009
Easterservices2009
 
Bulletin Current
Bulletin CurrentBulletin Current
Bulletin Current
 
Easter2009
Easter2009Easter2009
Easter2009
 
Bulletin
BulletinBulletin
Bulletin
 
March 2009 Newsletter
March 2009 NewsletterMarch 2009 Newsletter
March 2009 Newsletter
 
Mar 29 2009
Mar 29 2009Mar 29 2009
Mar 29 2009
 
Lent Easter 2009
Lent Easter 2009Lent Easter 2009
Lent Easter 2009
 
Easterpowersports09
Easterpowersports09Easterpowersports09
Easterpowersports09
 
Easter Trading 09
Easter Trading 09Easter Trading 09
Easter Trading 09
 
Easter Brochure 2009
Easter Brochure 2009Easter Brochure 2009
Easter Brochure 2009
 
March April 2009 Calendar
March April 2009 CalendarMarch April 2009 Calendar
March April 2009 Calendar
 

Último

[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 

Último (20)

[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 

Building AOL's High Performance, Enterprise Wide Mail Application With Silverlight 2

  • 1.
  • 2.
  • 3. Mail RIA & Silverlight – Defining new experience on the Web Our RIA objectives - Eric Hoffman A Silverlight development tale – Eric Hoffman A new verse in web User Interface – Marc Katchay The underlying nuts and bolts – Stefan Gal Monetization opportunities – Seth Halvaksz An Invitation
  • 4. The next chapter for web applications Rich and performant Personalization taken to another level Write it once, run it everywhere Beyond the web cache Enhanced engagement New monetization opportunities
  • 5. Beginning with Silverlight 1.0 / 2.0 Research and exploration project We were hopeful… High Definition video and audio playback Compact size and the idea of “write it once” The “DNA” for some controls .NET runtime – really appealing to us developers Challenges presented themselves throughout the summer of 07
  • 7. Silverlight 2.0 provided… Basic layout Grid & stack panels Isolated storage – size was a factor still Could we build an application with just this .. Pivotal moment was reached Hybrid approach was contemplated Delay project several months In the end ..our team decided to write some code ..
  • 9. What we really needed … more advanced controls.. Buttons, checkboxes Tree control ListView,- virtualized .. Listboxes – for settings Html control for read and write mail Grid splitters & custom layout Databinding – move data from model to our controls
  • 10. Morphed into a Collaboration .. Contribution to the core Silverlight feature set Request functionality as we needed .. A validation of the usability of the framework Some examples Adding encryption for secure isolated storage Imagine background worker threads – in a web application ! Cross domain would be nice …
  • 11. using (Stream xstream = new CryptoStream(stream, _alghoritm.CreateDecryptor(), CryptoStreamMode.Read)) { using (Stream zstream = new GZipStream(xstream, CompressionMode.Decompress)) { data = LoadObject<T>(zstream); } }
  • 12. public void SaveObject<T>(string path, T data, Action<Exception> cb) where T : class { // Main thread here … ThreadPool.QueueUserWorkItem(delegate(object state) { // Anonymous function – C# // Worker thread here … Exception exception = null; try{ SaveObject(path, data); } catch (Exception ex){ exception = ex; } } }
  • 13.
  • 14.
  • 15. Appealing – Look good Rich in assets - Vibrant Feel alive!! – non static look Dynamic/Resizable Skinnable Fast – seem effortless
  • 16. Designers create UI layout Developers build controls and components Controls paint visuals and bind to business data UI elements taken from designers layout and rendered in respective controls
  • 17. Artists/Designers create application Think multiple/Differentiating skins Utilize tools. Create in natural format - xaml Build application to adopt designer requirements
  • 18. Identify Key Components Components are themselves controls Define Root Layout of Application
  • 19. First things first!! -- Custom Controls DataGrid Cells List Tree TreeNodes GridSplitter Buttons …
  • 20. Custom visual controls derive from control class Control Class supports Control Templates All components and visual controls use templates Critical for skinning model Templates collected to form a skin
  • 21. <ControlTemplate/> <Grid x:Name=quot;Part_Rootquot;> <Grid.Resources> <Storyboard x:Name=quot;Part_MouseEnterquot;> <ColorAnimation Duration=quot;00:00:00.2“ To=quot;#50FFFFFFquot; Storyboard.TargetName=quot;Part_HighlightRect” Storyboard.TargetProperty=quot;(Shape.Fill).(SolidColorBrush.C olor)quot; /> </Grid.Resources> <Rectangle x:Name=quot;Part_HighlightRectquot; Fill=quot;#00FFFFFFquot;/> <TextBlock x:Name=quot;Part_Caption” FontSize=quot;12quot; Text=quot;Buttonquot; /> </ControlTemplate>
  • 22. namespace Client.Controls { public class ButtonCell : Control { ResourceHelper.GetControlTemplate(typeof(ButtonCell)); } public ButtonCell() { base.Template = s_CellTemplate; base.ApplyTemplate(); } }
  • 23. Browser resizes Grid Splitters Some UI elements grow as skin is resized Manage Multiple UI elements Built specialized layout panels to encapsulate and draw multiple elements of a skin Code behind should never have custom code dedicated to a skin
  • 24. ControlTemplate> < <Grid x:Name=“Part_Root”> <Controls:ViewPanel> <Path x:Name=“Part_Frame” Data=“….”/> <Rectangle x:Name=“Part_Background” /> </Controls:ViewPanel> </Grid> <ControlTemplate>
  • 25. public abstract class ViewPanel : Panel { protected override Size MeasureOverride(Size availableSize) { } protected override Size ArrangeOverride(Size finalSize) { } }
  • 26. Skin is a project Comprised of Templates and Images
  • 27. Skins ResourceHelper Class Loads Skin Assembly Helper functions to locate and load templates GetControlTemplate() Helper functions to load resources Application Background Background animation
  • 28. Summary We have a skin solution Separate assemblies Change skins Dynamic living skins Well defined layer for designers to work with UI Infrastructure Controls – Templates Components – define key sections of app
  • 29.
  • 30. The quest for a rich, interactive user experience Custom controls Silverlight overlays
  • 32. Template based controls Extensive data binding Template binding whenever possible Shared resources and styles Virtualized controls for large data sets
  • 33. public class ItemData : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; }
  • 34. VirtualizedList _list1; ObservableCollection<ItemData> _dataSource; … _list1.ItemsSource = _dataSource;
  • 35. public class VirtualizedList : Control { … public IList ItemsSource { … } public DataTemplate ItemTemplate { … } }
  • 36. <c:VirtualizedList x:Name=quot;_list1”> <c:VirtualizedList.ItemTemplate> <DataTemplate> <c:ListItem Foreground=quot;Blue“ Text=“{Binding Caption}”/> </DataTemplate> </c:VirtualizedList.ItemTemplate> </c:VirtualizedList>
  • 37. <DataTemplate> <TextBlock Text=quot;{Binding Caption}quot; Foreground=quot;Gold“ Padding=quot;2quot;/> </DataTemplate>
  • 38.
  • 39. Overlay HTML
  • 40. Requirement introduced by the usage of browser based HTML rendering and composition Also used for Context menus Modal dialogs Rich Tooltips „Out of banner‟ Silverlight ads Legacy ads
  • 41. Creating Silverlight overlay plugin Communication between plugins Sharing code and resources Plugin lifetime management
  • 42. Hosted by an absolute positioned DIV Host element is child of main host element, sibling of the main plugin Silverlight.js support to create the additional plugin Windowless mode supports transparency and irregularly shaped windows
  • 43. ScriptObject arg = (ScriptObject) HtmlPage.Window.Eval(quot;new Object;quot;); arg.SetProperty(quot;initParamsquot;, “parentId=quot; + HtmlPage.Plugin.Id; ScriptObject slso = (ScriptObject) HtmlPage.Window. GetProperty(quot;Silverlightquot;); slso.Invoke(quot;createObjectExquot;, arg);
  • 44. Each plugin runs in its own application domain JSON payload passed as parameters and returned as result. Input and output passed by value. Scriptable objects used for callbacks and interaction Creation is asynchronous, the child plugin will find and connect to the parent based on initialization parameters
  • 45. Separate .xap archive files are used for main plugin and overlay plugins Distributing shared code and resources in both archives is possible but not desirable due to increased download size. We chose to have the overlay load the required assemblies dynamically from the main archive It is fast because the download will find the main archive cached by the browser
  • 46. Model.dll Main.xap Popup.xap Popup.dll Controls.dll
  • 47. _webClient = new WebClient(); _webClient.OpenReadCompleted += delegate(object sender,… e) { Load(new StreamResourceInfo (e.Result, null)); }; _webClient.OpenReadAsync( new Uri(“shared.xapquot;, UriKind.Relative));
  • 48. StreamResourceInfo ri = Application.GetResourceStream(xap, new Uri(“shared.dll“, UriKind.Relative)); AssemblyPart p = new AssemblyPart(); Assembly a = p.Load(ri.Stream);
  • 49.
  • 50. Flexible separation of data, control logic and control visuals Lightweight and high performance Extensive binding Virtualized controls for large data sets Rich, highly interactive visuals Skins downloaded on demand
  • 51.
  • 52. AOL Mail RIA & Monetization Objectives Engaging High-performing Standards-based Integration between ads and application Skins Panels Rich media options High impact audio & video Rich animations
  • 53. AOL Mail RIA & Silverlight A new experience on the web Industry-leading performance Unique skinning capabilities High impact content delivery Mail from AOL Innovative products Get the email identity and experience that expresses who you are and what you like
  • 54. Sign up today to be notified when the preview is available http://ria.mail.aol.com