TextSearch

Project Looking Glass

Clouds

· archived 5/18/2026, 12:41:48 AMscreenshotcached html
Project Looking Glass - Atmosera Contact Request Thank you, We will be in touch soon. CLOSE Skip to content Atmosera Azure Solutions CloseAzure MigrationAzure Managed ServicesAzure OptimizationAzure Virtual DesktopAzure OperationsSAP on AzureAzure Apps & InfrastructureAMP Management Platform CloseSoftware Development CloseApps & InfrastructureApp ModernizationAzure DevOps ServicesAzure Data & AI ServicesMobile Development Services CloseSecurity & Compliance CloseAzure Security ServicesManaged Detection & ResponseAzure Data Protection ServicesHIPAAPCINIST CloseTrainingResources CloseCOVID-19BlogCase StudiesData SheetsEventsOn-Demand Webinars CloseAbout CloseAzure Expert MSPTeamOffersPartnersIndustriesCareers CloseContact CloseContactSupportBilling Close Case Study: Microsoft Project Looking Glass Project Looking Glass Overview Microsoft’s Looking Glass product is a Social Network Analytics and Marketing tool that is the result of a two-year effort by the Developer and Platform Evangelist (DPE) team. The tool was originally planned for an open source Codeplex release and has since morphed into a targeted retail product release for Fortune 500 customers. The original project was a prototype and therefore was not architected to a production-ready level. Microsoft needed to re-work and enhance the UI design of the tool as well as re-migrate the code fully to Silverlight 4, and architect the backend code using the Model-View-ViewModel (MVVM) pattern to support unit testing, modularity, scalability, and robustness within the application. What is project Looking Glass? This was a project made up of two distinct pieces, one half pure design and one half architecture and programming. On the design side, Atmosera was hired to revamp the user interface (UI) and user experience (UX) of the application. Atmosera brought to the table a highly skilled design team to review the overall condition and needs of the system with respect to usability, navigation/flow, design consistency, etc., all with a view to the types of consumers that would be using the system. Design resources included a Creative Director, Information Architect and Design Lead, UX lead, Blend/Xaml developer, and graphics designers. After the review, design choices were made and the chosen enhancements were implemented. Design changes ranged from modifications to the overall navigation flow of the application; specific changes to graphics, colors, and fonts; creation of selected Silverlight animations or other effects to spice up the application and to help highlight the use of Silverlight technology. On the architecture and development side, Atmosera was brought on to redesign the architecture of the Silverlight client to support Silverlight 4 and the MVVM pattern. The code was also migrated fully to Silverlight 4. Considerations for this part of the effort included: Provision of a core framework that addresses the MVVM implementation, modularity, and extensibility using the Managed Extensibility Framework (MEF). Isolated storage for caching where performance benefits were identified. Conversion of the full client application to Silverlight 4.0. Consideration of WCF RIA (Rich Internet Applications) Services and binary transport for the web services. Full unit testing using the Silverlight Unit Testing Framework. Why Atmosera? Microsoft needed a partner that was expert in the three areas of .NET architecture, Silverlight development, and UI/UX design, plus the project management skills to coordinate the effort between both the design and development teams, and the Atmosera and Microsoft teams as well. Atmosera’s ability to bring to the table top expertise in all three areas was the deciding factor. Atmosera is a recognized leader in software architecture and implementation on the Microsoft platform, and complements this with a full digital design capability to meet the full range of customer needs for online software design, development, and branding. Strategy Atmosera began by providing a lightweight MVVM framework that leveraged principles from the popular PRISM framework and was built on top of MEF. This design facilitated a modular application that can auto-discover and register components for extensibility as well as dynamically load portions of the application on-demand to minimize the Silverlight footprint on the client. Conclusion The application relied on dozens of authenticated service calls, so the flexible architecture empowered Atmosera to build a mock service layer that enabled a fully functional runtime application even with the services offline. This helped facilitate faster development cycles and easier testing scenarios. The clear separation of concerns provided by the MVVM architecture also enabled development and design to move forward in parallel – in fact, a majority of the application was built and unit-tested before the first XAML file was generated by the design team. The designer-friendly view models and sample data enabled designers to see exactly what the application would look like in runtime using Expression Blend. A clear separation of concerns also benefitted the development process when RIA services were considered, although it was later determined that the effort on the server side was out of scope for the project effort, so the existing services were used. Atmosera’s decision to abstract the service layer behind a set of interfaces meant this late decision had minimal impact on the overall schedule, as the service layer could be coded completely separate from the rest of the application. Unit tests ensured the integrity of the business logic so screens began to come together rapidly as the designer XAML effort merged with development. With this project Atmosera was able to fully demonstrate the true power of Silverlight, Visual Studio 2010, and Expression Blend by building the application from the ground up in parallel with separate development and design teams and removed bottlenecks that typically occur during the design-to-production process. Unit tests ensured the integrity of the business layer as the design façade was laid with XAML, and a clean separation of concerns allowed almost 100% of the existing web service infrastructure to be used without modification despite the major improvements to the Silverlight client. We deliver solutions that accelerate the value of Azure. Ready to experience the full power of Microsoft Azure? Start Today (833) 691-4727 Contact Support Azure Resource Center Privacy Policy WE'RE HIRING Headquarters 9705 SW Sunshine Court Beaverton, OR 97005 Atlanta 980 Hammond Drive Suite 660 Atlanta, GA 30328 © 2022 ATMOSERA Featured Products Public Azure Hybrid Azure Private Azure View all Solutions 5 Ways E-Commerce Benefits From Cloud Computing The Top 3 Benefits of Xamarin for Mobile Projects How Azure & Salesforce Combined To Boost Productivity View all Events 5 Ways E-Commerce Benefits From Cloud Computing The Top 3 Benefits of Xamarin for Mobile Projects How Azure & Salesforce Combined To Boost Productivity View all Resouce Center Thank You Thank You Thank You View all body{--wp--preset--color--black:#000;--wp--preset--color--cyan-bluish-gray:#abb8c3;--wp--preset--color--white:#fff;--wp--preset--color--pale-pink:#f78da7;--wp--preset--color--vivid-red:#cf2e2e;--wp--preset--color--luminous-vivid-orange:#ff6900;--wp--preset--color--luminous-vivid-amber:#fcb900;--wp--preset--color--light-green-cyan:#7bdcb5;--wp--preset--color--vivid-green-cyan:#00d084;--wp--preset--color--pale-cyan-blue:#8ed1fc;--wp--preset--color--vivid-cyan-blue:#0693e3;--wp--preset--color--vivid-purple:#9b51e0;--wp--preset--color--blue:#0d6efd;--wp--preset--color--indigo:#6610f2;--wp--preset--color--purple:#53f;--wp--preset--color--pink:#d63384;--wp--preset--color--red:#dc3545;--wp--preset--color--orange:#fd7e14;--wp--preset--color--yellow:#ffc107;--wp--preset--color--green:#198754;--wp--preset--color--teal:#20c997;--wp--preset--color--cyan:#0dcaf0;--wp--preset--color--gray:#6c757d;--wp--preset--color--gray-dark:#343a40;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple:linear-gradient(135deg,rgba(6,147,227,1) 0%,#9b51e0 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan:linear-gradient(135deg,#7adcb4 0%,#00d082 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange:linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red:linear-gradient(135deg,rgba(255,105,0,1) 0%,#cf2e2e 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray:linear-gradient(135deg,#eee 0%,#a9b8c3 100%);--wp--preset--gradient--cool-to-warm-spectrum:linear-gradient(135deg,#4aeadc 0%,#9778d1 20%,#cf2aba 40%,#ee2c82 60%,#fb6962 80%,#fef84c 100%);--wp--preset--gradient--blush-light-purple:linear-gradient(135deg,#ffceec 0%,#9896f0 100%);--wp--preset--gradient--blush-bordeaux:linear-gradient(135deg,#fecda5 0%,#fe2d2d 50%,#6b003e 100%);--wp--preset--gradient--luminous-dusk:linear-gradient(135deg,#ffcb70 0%,#c751c0 50%,#4158d0 100%);--wp--preset--gradient--pale-ocean:linear-gradient(135deg,#fff5cb 0%,#b6e3d4 50%,#33a7b5 100%);--wp--preset--gradient--electric-grass:linear-gradient(135deg,#caf880 0%,#71ce7e 100%);--wp--preset--gradient--midnight:linear-gradient(135deg,#020381 0%,#2874fc 100%);--wp--preset--duotone--dark-grayscale:url("#wp-duotone-dark-grayscale");--wp--preset--duotone--grayscale:url("#wp-duotone-grayscale");--wp--preset--duotone--purple-yellow:url("#wp-duotone-purple-yellow");--wp--preset--duotone--blue-red:url("#wp-duotone-blue-red");--wp--preset--duotone--midnight:url("#wp-duotone-midnight");--wp--preset--duotone--magenta-yellow:url("#wp-duotone-magenta-yellow");--wp--preset--duotone--purple-green:url("#wp-duotone-purple-green");--wp--preset--duotone--blue-orange:url("#wp-duotone-blue-orange");--wp--preset--font-size--small:13px;--wp--preset--font-size--medium:20px;--wp--preset--font-size--large:36px;--wp--preset--font-size--x-large:42px;}.has-black-color{color:var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color:var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color:var(--wp--preset--color--white) !important;}.has-pale-pink-color{color:var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color:var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color:var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color:var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color:var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color:var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color:var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color:var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color:var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color:var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color:var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color:var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color:var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color:var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color:var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color:var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color:var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color:var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color:var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color:var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color:var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color:var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color:var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color:var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color:var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color:var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color:var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color:var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color:var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color:var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color:var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color:var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color:var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background:var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background:var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background:var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background:var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background:var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background:var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background:var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background:var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background:var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background:var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background:var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background:var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size:var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size:var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size:var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size:var(--wp--preset--font-size--x-large) !important;}.wp-block-navigation a:where(:not(.wp-element-button)){color:inherit;}:where(.wp-block-columns.is-layout-flex){gap:2em;}.wp-block-pullquote{font-size:1.5em;line-height:1.6;}.fa{font-style:normal;font-variant:normal;font-weight:normal;font-family:FontAwesome;}@media screen and (min-width: 1201px){.ubermenu{display:block !important;}.ubermenu-responsive .ubermenu-item.ubermenu-hide-desktop{display:none !important;}.ubermenu-responsive.ubermenu-retractors-responsive .ubermenu-retractor-mobile{display:none;}.ubermenu.ubermenu-horizontal.ubermenu-items-vstretch .ubermenu-nav{display:flex;align-items:stretch;}.ubermenu.ubermenu-horizontal.ubermenu-items-vstretch .ubermenu-item.ubermenu-item-level-0{display:flex;flex-direction:column;}.ubermenu.ubermenu-horizontal.ubermenu-items-vstretch .ubermenu-item.ubermenu-item-level-0 > .ubermenu-target{flex:1;display:flex;align-items:center;flex-wrap:wrap;}.ubermenu.ubermenu-horizontal.ubermenu-items-vstretch .ubermenu-item.ubermenu-item-level-0 > .ubermenu-target > .ubermenu-target-divider{position:static;flex-basis:100%;}.ubermenu.ubermenu-horizontal.ubermenu-items-vstretch .ubermenu-item.ubermenu-item-level-0 > .ubermenu-target.ubermenu-item-layout-image_left > .ubermenu-target-text{padding-left:1em;}.ubermenu.ubermenu-horizontal.ubermenu-items-vstretch .ubermenu-item.ubermenu-item-level-0 > .ubermenu-target.ubermenu-item-layout-image_right > .ubermenu-target-text{padding-right:1em;}.ubermenu.ubermenu-horizontal.ubermenu-items-vstretch .ubermenu-item.ubermenu-item-level-0 > .ubermenu-target.ubermenu-item-layout-image_above,.ubermenu.ubermenu-horizontal.ubermenu-items-vstretch .ubermenu-item.ubermenu-item-level-0 > .ubermenu-target.ubermenu-item-layout-image_below{flex-direction:column;}.ubermenu.ubermenu-horizontal.ubermenu-items-vstretch .ubermenu-item.ubermenu-item-level-0 > .ubermenu-submenu-drop{top:100%;}.ubermenu.ubermenu-horizontal.ubermenu-items-vstretch .ubermenu-item-level-0:not(.ubermenu-align-right) + .ubermenu-item.ubermenu-align-right{margin-left:auto;}.ubermenu.ubermenu-horizontal.ubermenu-items-vstretch .ubermenu-item.ubermenu-item-level-0 > .ubermenu-target.ubermenu-content-align-left{justify-content:flex-start;}.ubermenu.ubermenu-horizontal.ubermenu-items-vstretch .ubermenu-item.ubermenu-item-level-0 > .ubermenu-target.ubermenu-content-align-center{justify-content:center;}.ubermenu.ubermenu-horizontal.ubermenu-items-vstretch .ubermenu-item.ubermenu-item-level-0 > .ubermenu-target.ubermenu-content-align-right{justify-content:flex-end;}.ubermenu-force-current-submenu .ubermenu-item-level-0.ubermenu-current-menu-item > .ubermenu-submenu-drop,.ubermenu-force-current-submenu .ubermenu-item-level-0.ubermenu-current-menu-ancestor > .ubermenu-submenu-drop{display:block !important;opacity:1 !important;visibility:visible !important;margin:0 !important;top:auto !important;height:auto;z-index:19;}.ubermenu-invert.ubermenu-horizontal .ubermenu-item-level-0 > .ubermenu-submenu-drop,.ubermenu-invert.ubermenu-horizontal.ubermenu-items-vstretch .ubermenu-item.ubermenu-item-level-0>.ubermenu-submenu-drop{top:auto;bottom:100%;}.ubermenu-invert.ubermenu-horizontal.ubermenu-sub-indicators .ubermenu-item-level-0.ubermenu-has-submenu-drop > .ubermenu-target > .ubermenu-sub-indicator{transform:rotate(180deg);}.ubermenu-invert.ubermenu-horizontal .ubermenu-submenu .ubermenu-item.ubermenu-active > .ubermenu-submenu-type-flyout{top:auto;bottom:0;}.ubermenu-invert.ubermenu-horizontal .ubermenu-item-level-0 > .ubermenu-submenu-drop{clip:rect(-5000px,5000px,auto,-5000px);}.ubermenu-invert.ubermenu-vertical .ubermenu-item-level-0 > .ubermenu-submenu-drop{right:100%;left:auto;}.ubermenu-invert.ubermenu-vertical.ubermenu-sub-indicators .ubermenu-item-level-0.ubermenu-item-has-children > .ubermenu-target > .ubermenu-sub-indicator{right:auto;left:10px;transform:rotate(90deg);}.ubermenu-vertical.ubermenu-invert .ubermenu-item > .ubermenu-submenu-drop{clip:rect(-5000px,5000px,5000px,-5000px);}.ubermenu-vertical.ubermenu-invert.ubermenu-sub-indicators .ubermenu-has-submenu-drop > .ubermenu-target{padding-left:25px;}.ubermenu-vertical.ubermenu-invert .ubermenu-item > .ubermenu-target > .ubermenu-sub-indicator{right:auto;left:10px;transform:rotate(90deg);}.ubermenu-vertical.ubermenu-invert .ubermenu-item > .ubermenu-submenu-drop.ubermenu-submenu-type-flyout,.ubermenu-vertical.ubermenu-invert .ubermenu-submenu-type-flyout > .ubermenu-item > .ubermenu-submenu-drop{right:100%;left:auto;}.ubermenu-responsive-toggle{display:none;}}@media screen and (max-width: 1200px){.ubermenu-responsive-toggle,.ubermenu-sticky-toggle-wrapper{display:block;}.ubermenu-responsive{width:100%;max-height:600px;visibility:visible

… truncated (26,214 more characters in archive)