Robert MacLean<br />Technology Specialist<br />BB&D<br />Windows Server AppFabric Caching: What it is & When you should us...
Who am I?<br />Robert MacLean<br />Microsoft ALM MVP<br />Microsoft ALM Ranger<br />Proud Community Lead <br />Information...
Overture<br />Level 300<br />State of play<br />Briefly what is AppFabric?<br />What do we get from AppFabric Caching and ...
Advert Time<br />AppFabric:<br />Wed, 11:15pm - WCF Made Easy with .NET 4 and Windows Server AppFabric<br />Other:<br />We...
State of play<br />.NET prior to 4<br />ASP.NET Caching<br />Enterprise Library Caching<br />.NET 4 brings us<br />.NET 4 ...
.NET 4 Caching<br />Demo<br />
What is the issue with these?<br />Limited to memory of current machine<br />Limited to current process<br />Imagine if I ...
A rose by any other name…<br />Windows Server AppFabric contains two key components<br />Hosting<br />EndPoint, Windows Ap...
N.B. AppFabric<br />Requires .NET 4 on Server<br />Not all applications need .NET 4, depends on features used<br />Standal...
What is AppFabric Cache?<br />An in-memory distributed cache which you can call from any .NET application<br />Optimised f...
AppFabric Cache Single View<br />Cache Server<br />Single view from code<br />Services<br />Cache Server<br />Data 1<br />...
AppFabric Caching Info<br />Common Configuration Store<br />XML<br />Database<br />Runs as Windows Service<br />Communicat...
AppFabric Server Types<br />Dedicated Cache Server<br />All it does is AppFabric caching – good for lots of memory and gre...
What can I cache?<br />Anything that can be serialised<br />XML<br />POCO<br />Binary Data<br />
Data Cache Planning<br />Reference Data<br />Cities, provinces, product info, etc…<br />Activity Data<br />Session, per us...
Management<br />All Configuration and Administration is done via PowerShell<br />From the MVP’s: http://mdcadmintool.codep...
AppFabric from IT Pro to Developer<br />Demo<br />
Cache Structure Review<br />Server<br />Server<br />Server<br />Named Cache: Default<br />Named Cache: Products<br />Named...
Expiration of cache items<br />Put & Add<br />Timeout<br />Notification<br />Polling <br />Default: 300 secs<br />Expirati...
Eviction<br />@ Low watermark<br />Expired items removed<br />@ High watermark<br />Items, expired or not, can be removed ...
ORM’s<br />Some ORM’s implement second level caching<br />It is possible to change the second level to AppFabric<br />Exam...
A Problem with Caching <br />AppFabric Cache<br />Name : Robert<br />Balance: 1500<br />Write<br />DB<br />Name : Robert<b...
Solution<br />.GetAndLock<br />.PutAndUnlock<br />.Unlock<br />Supports locking timeout<br />Locked items can survive expi...
Data Cache Planning<br />Reference Data<br />Cities, provinces, product info, etc…<br />Activity Data<br />Session, per us...
Cluster Configuration<br />First node initialises cluster<br />Other nodes join<br />During install you must configure pro...
Security<br />Domain:<br />Authentication in AD, Authorisation in AppFabric<br />Only authorised servers join clusters<br ...
Typical Web Architecture<br />Users<br />Web Servers<br />Load Balancer<br />State<br />State<br />State<br />DB<br />
ASP.NET<br />Out of the box caching <br />InProc (Default)<br />StateServer<br />SQLServer<br />All can be enabled by via ...
ASP.NET AppFabricConfig<br /><configSections><br />  <sectionname="dataCacheClient“type="Microsoft.Data.Caching.DataCacheC...
ASP.NET AppFabricConfig<br /><configSections><br />  <sectionname="dataCacheClient“type="Microsoft.Data.Caching.DataCacheC...
ASP.NET AppFabricConfig<br /><configSections><br />  <sectionname="dataCacheClient“type="Microsoft.Data.Caching.DataCacheC...
ASP.NET AppFabricConfig<br /><fabric><br />  <sectionname="logging"path=""><br />    <collectionname="sinks"collectionType...
ASP.NET AppFabricConfig<br /><configSections><br />  <sectionname="dataCacheClient“type="Microsoft.Data.Caching.DataCacheC...
Summary<br />Windows Server AppFabric Cache is a distributed application cache<br />Caching is important to application sc...
Questions<br />robert@sadev.co.za<br />@rmaclean<br />Meet me at the community lounge<br />
Resources<br />Required Slide<br />Learning<br />Sessions On-Demand & Community<br />Microsoft Certification & Training Re...
Complete an evaluation via CommNet and Tag to win amazing prizes!<br />
© 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be...
Upcoming SlideShare
Loading in …5
×

Windows Server AppFabric Caching - What it is & when you should use it?

6,476 views

Published on

This is from my Tech-Ed Africa 2010 talk. For more information see: http://www.sadev.co.za/content/teched-africa-2010-slides-scripts-and-demos-my-talks

This session looks at what AppFabric Caching is from start to deep dive.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,476
On SlideShare
0
From Embeds
0
Number of Embeds
619
Actions
Shares
0
Downloads
85
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Windows Server AppFabric Caching - What it is & when you should use it?

  1. 1.
  2. 2. Robert MacLean<br />Technology Specialist<br />BB&D<br />Windows Server AppFabric Caching: What it is & When you should use it?<br />
  3. 3. Who am I?<br />Robert MacLean<br />Microsoft ALM MVP<br />Microsoft ALM Ranger<br />Proud Community Lead <br />Information Worker<br />S.A. Architect<br />www.sadev.co.za<br />@rmaclean<br />
  4. 4. Overture<br />Level 300<br />State of play<br />Briefly what is AppFabric?<br />What do we get from AppFabric Caching and how to use it!<br />
  5. 5. Advert Time<br />AppFabric:<br />Wed, 11:15pm - WCF Made Easy with .NET 4 and Windows Server AppFabric<br />Other:<br />Wed, 8:30pm - Tales From the field – Best practices and guidance on implementing TFS2010<br />
  6. 6. State of play<br />.NET prior to 4<br />ASP.NET Caching<br />Enterprise Library Caching<br />.NET 4 brings us<br />.NET 4 Caching<br />All are local in-memory caches!<br />
  7. 7. .NET 4 Caching<br />Demo<br />
  8. 8. What is the issue with these?<br />Limited to memory of current machine<br />Limited to current process<br />Imagine if I need 50Gb of cache?<br />What about load balancing?<br />
  9. 9. A rose by any other name…<br />Windows Server AppFabric contains two key components<br />Hosting<br />EndPoint, Windows App Server Extensions, Dublin<br />Caching<br />Velocity<br />Not to be confused with Azure AppFabric<br />
  10. 10. N.B. AppFabric<br />Requires .NET 4 on Server<br />Not all applications need .NET 4, depends on features used<br />Standalone download or Web Platform Installer<br />High Availability is only in Windows Server 2008 Enterprise & Data Centre<br />
  11. 11. What is AppFabric Cache?<br />An in-memory distributed cache which you can call from any .NET application<br />Optimised for the cache-aside pattern<br />Programming against the cache is explicit<br />Changing the cache doesn’t update the original data store<br />
  12. 12. AppFabric Cache Single View<br />Cache Server<br />Single view from code<br />Services<br />Cache Server<br />Data 1<br />Data 2<br />Data 3<br />Data 4<br />Cache Server<br />Cache Server<br />
  13. 13. AppFabric Caching Info<br />Common Configuration Store<br />XML<br />Database<br />Runs as Windows Service<br />Communication Between Nodes<br />WCF net.tcp<br />Self Adjusting<br />
  14. 14. AppFabric Server Types<br />Dedicated Cache Server<br />All it does is AppFabric caching – good for lots of memory and great performation<br />Hybrid Cache Server<br />Runs AppFabric caching & other tools. <br />SQL + AppFabric<br />Web + AppFabric<br />Local Cache Server<br />Runs AppFabric per application locally<br />Used in conjunction with hybrid and/or dedicated<br />
  15. 15. What can I cache?<br />Anything that can be serialised<br />XML<br />POCO<br />Binary Data<br />
  16. 16. Data Cache Planning<br />Reference Data<br />Cities, provinces, product info, etc…<br />Activity Data<br />Session, per user etc..<br />Resource Data<br />Data with contention <br />We will look at this more later…<br />NB: Plan, plan and plan some more<br />
  17. 17. Management<br />All Configuration and Administration is done via PowerShell<br />From the MVP’s: http://mdcadmintool.codeplex.com/<br />
  18. 18. AppFabric from IT Pro to Developer<br />Demo<br />
  19. 19. Cache Structure Review<br />Server<br />Server<br />Server<br />Named Cache: Default<br />Named Cache: Products<br />Named Cache: Users<br />Region: Male<br />Region: Female<br />Items & Tags<br />
  20. 20. Expiration of cache items<br />Put & Add<br />Timeout<br />Notification<br />Polling <br />Default: 300 secs<br />Expiration timeout defaults can be controlled on a cache level<br />
  21. 21. Eviction<br />@ Low watermark<br />Expired items removed<br />@ High watermark<br />Items, expired or not, can be removed or allocated to another server<br />Items picked by using LRU <br />Can disable if needed<br />
  22. 22. ORM’s<br />Some ORM’s implement second level caching<br />It is possible to change the second level to AppFabric<br />Examples: NHibernate & Entity Framework<br />
  23. 23. A Problem with Caching <br />AppFabric Cache<br />Name : Robert<br />Balance: 1500<br />Write<br />DB<br />Name : Robert<br />Balance: 15<br />ATM<br />ATM<br />ORM<br />UI<br />ORM<br />UI<br />Name : Robert<br />Balance: 15<br />
  24. 24. Solution<br />.GetAndLock<br />.PutAndUnlock<br />.Unlock<br />Supports locking timeout<br />Locked items can survive expiration<br />Unlock can prolong expiration<br />
  25. 25. Data Cache Planning<br />Reference Data<br />Cities, provinces, product info, etc…<br />Activity Data<br />Session, per user etc..<br />Resource Data<br />Data with contention <br />NB: Plan, plan and plan some more<br />Great with defaults<br />Region per user<br />Locking per item<br />
  26. 26. Cluster Configuration<br />First node initialises cluster<br />Other nodes join<br />During install you must configure projected size<br />Small: 1 – 5 nodes <br />Medium: 6 – 15 nodes<br />Large: > 15 nodes<br />Performance based on this setting – adding/removing nodes does not effect this<br />
  27. 27. Security<br />Domain:<br />Authentication in AD, Authorisation in AppFabric<br />Only authorised servers join clusters<br />Only authorised clients connect to clusters<br />Workgroup<br />Authentication in network share, Authorisation in AppFabric<br />Transport Level Security<br />Signing and Encryption<br />
  28. 28. Typical Web Architecture<br />Users<br />Web Servers<br />Load Balancer<br />State<br />State<br />State<br />DB<br />
  29. 29. ASP.NET<br />Out of the box caching <br />InProc (Default)<br />StateServer<br />SQLServer<br />All can be enabled by via config change<br />Now AppFabric support also just a config change<br />
  30. 30. ASP.NET AppFabricConfig<br /><configSections><br /> <sectionname="dataCacheClient“type="Microsoft.Data.Caching.DataCacheClientSection, CacheBaseLibrary" allowLocation="true"allowDefinition="Everywhere"/><br /> <sectionname="fabric“type="System.Data.Fabric.Common.ConfigFile, FabricCommon“ allowLocation="true"allowDefinition="Everywhere"/><br /></configSections><br /><dataCacheClientdeployment="routing"><br /> <localCacheisEnabled="false"/><br /> <hosts><br /> <hostname="localhost"cachePort="22233“ cacheHostName="DistributedCacheService"/><br /> </hosts><br /></dataCacheClient><br /><fabric><br /> <sectionname="logging"path=""><br /> <collectionname="sinks"collectionType="list"><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon"sinkName="System.Data.Fabric.Common.ConsoleSink,FabricCommon"sinkParam=""defaultLevel="-1"/><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon"sinkName="System.Data.Fabric.Common.FileEventSink,FabricCommon"sinkParam="DcacheLog/dd-hh-mm"defaultLevel="-1"/><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon“ sinkName="Microsoft.Data.Caching.ETWSink, CacheBaseLibrary“ sinkParam=""defaultLevel="-1"/><br /> </collection><br /> </section><br /></fabric><br /><system.web><br /> <sessionStatemode="Custom"customProvider="Velocity"><br /> <providers><br /> <addname="Velocity"type="Microsoft.Data.Caching.DataCacheSessionStoreProvider, ClientLibrary"cacheName="session"/><br /> </providers><br /> </sessionState><br /></system.web><br />
  31. 31. ASP.NET AppFabricConfig<br /><configSections><br /> <sectionname="dataCacheClient“type="Microsoft.Data.Caching.DataCacheClientSection, CacheBaseLibrary" allowLocation="true"allowDefinition="Everywhere"/><br /> <sectionname="fabric“type="System.Data.Fabric.Common.ConfigFile, FabricCommon“ allowLocation="true"allowDefinition="Everywhere"/><br /></configSections><br /><dataCacheClientdeployment="routing"><br /> <localCacheisEnabled="false"/><br /> <hosts><br /> <hostname="localhost"cachePort="22233“ cacheHostName="DistributedCacheService"/><br /> </hosts><br /></dataCacheClient><br /><fabric><br /> <sectionname="logging"path=""><br /> <collectionname="sinks"collectionType="list"><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon"sinkName="System.Data.Fabric.Common.ConsoleSink,FabricCommon"sinkParam=""defaultLevel="-1"/><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon"sinkName="System.Data.Fabric.Common.FileEventSink,FabricCommon"sinkParam="DcacheLog/dd-hh-mm"defaultLevel="-1"/><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon“ sinkName="Microsoft.Data.Caching.ETWSink, CacheBaseLibrary“ sinkParam=""defaultLevel="-1"/><br /> </collection><br /> </section><br /></fabric><br /><system.web><br /> <sessionStatemode="Custom"customProvider="Velocity"><br /> <providers><br /> <addname="Velocity"type="Microsoft.Data.Caching.DataCacheSessionStoreProvider, ClientLibrary"cacheName="session"/><br /> </providers><br /> </sessionState><br /></system.web><br /><configSections><br /> <sectionname="dataCacheClient“type="Microsoft.Data.Caching.DataCacheClientSection, CacheBaseLibrary" allowLocation="true"allowDefinition="Everywhere"/><br /> <sectionname="fabric“type="System.Data.Fabric.Common.ConfigFile, FabricCommon“ allowLocation="true"allowDefinition="Everywhere"/><br /></configSections><br />
  32. 32. ASP.NET AppFabricConfig<br /><configSections><br /> <sectionname="dataCacheClient“type="Microsoft.Data.Caching.DataCacheClientSection, CacheBaseLibrary" allowLocation="true"allowDefinition="Everywhere"/><br /> <sectionname="fabric“type="System.Data.Fabric.Common.ConfigFile, FabricCommon“ allowLocation="true"allowDefinition="Everywhere"/><br /></configSections><br /><dataCacheClientdeployment="routing"><br /> <localCacheisEnabled="false"/><br /> <hosts><br /> <hostname="localhost"cachePort="22233“ cacheHostName="DistributedCacheService"/><br /> </hosts><br /></dataCacheClient><br /><fabric><br /> <sectionname="logging"path=""><br /> <collectionname="sinks"collectionType="list"><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon"sinkName="System.Data.Fabric.Common.ConsoleSink,FabricCommon"sinkParam=""defaultLevel="-1"/><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon"sinkName="System.Data.Fabric.Common.FileEventSink,FabricCommon"sinkParam="DcacheLog/dd-hh-mm"defaultLevel="-1"/><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon“ sinkName="Microsoft.Data.Caching.ETWSink, CacheBaseLibrary“ sinkParam=""defaultLevel="-1"/><br /> </collection><br /> </section><br /></fabric><br /><system.web><br /> <sessionStatemode="Custom"customProvider="Velocity"><br /> <providers><br /> <addname="Velocity"type="Microsoft.Data.Caching.DataCacheSessionStoreProvider, ClientLibrary"cacheName="session"/><br /> </providers><br /> </sessionState><br /></system.web><br /><dataCacheClientdeployment="routing"><br /> <localCacheisEnabled="false"/><br /> <hosts><br /> <hostname="localhost"cachePort="22233“ cacheHostName="DistributedCacheService"/><br /> </hosts><br /></dataCacheClient><br />
  33. 33. ASP.NET AppFabricConfig<br /><fabric><br /> <sectionname="logging"path=""><br /> <collectionname="sinks"collectionType="list"><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon"sinkName="System.Data.Fabric.Common.ConsoleSink,FabricCommon"sinkParam=""defaultLevel="-1"/><br /> …<br /> </collection><br /> </section><br /></fabric><br /><configSections><br /> <sectionname="dataCacheClient“type="Microsoft.Data.Caching.DataCacheClientSection, CacheBaseLibrary" allowLocation="true"allowDefinition="Everywhere"/><br /> <sectionname="fabric“type="System.Data.Fabric.Common.ConfigFile, FabricCommon“ allowLocation="true"allowDefinition="Everywhere"/><br /></configSections><br /><dataCacheClientdeployment="routing"><br /> <localCacheisEnabled="false"/><br /> <hosts><br /> <hostname="localhost"cachePort="22233“ cacheHostName="DistributedCacheService"/><br /> </hosts><br /></dataCacheClient><br /><fabric><br /> <sectionname="logging"path=""><br /> <collectionname="sinks"collectionType="list"><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon"sinkName="System.Data.Fabric.Common.ConsoleSink,FabricCommon"sinkParam=""defaultLevel="-1"/><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon"sinkName="System.Data.Fabric.Common.FileEventSink,FabricCommon"sinkParam="DcacheLog/dd-hh-mm"defaultLevel="-1"/><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon“ sinkName="Microsoft.Data.Caching.ETWSink, CacheBaseLibrary“ sinkParam=""defaultLevel="-1"/><br /> </collection><br /> </section><br /></fabric><br /><system.web><br /> <sessionStatemode="Custom"customProvider="Velocity"><br /> <providers><br /> <addname="Velocity"type="Microsoft.Data.Caching.DataCacheSessionStoreProvider, ClientLibrary"cacheName="session"/><br /> </providers><br /> </sessionState><br /></system.web><br />
  34. 34. ASP.NET AppFabricConfig<br /><configSections><br /> <sectionname="dataCacheClient“type="Microsoft.Data.Caching.DataCacheClientSection, CacheBaseLibrary" allowLocation="true"allowDefinition="Everywhere"/><br /> <sectionname="fabric“type="System.Data.Fabric.Common.ConfigFile, FabricCommon“ allowLocation="true"allowDefinition="Everywhere"/><br /></configSections><br /><dataCacheClientdeployment="routing"><br /> <localCacheisEnabled="false"/><br /> <hosts><br /> <hostname="localhost"cachePort="22233“ cacheHostName="DistributedCacheService"/><br /> </hosts><br /></dataCacheClient><br /><fabric><br /> <sectionname="logging"path=""><br /> <collectionname="sinks"collectionType="list"><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon"sinkName="System.Data.Fabric.Common.ConsoleSink,FabricCommon"sinkParam=""defaultLevel="-1"/><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon"sinkName="System.Data.Fabric.Common.FileEventSink,FabricCommon"sinkParam="DcacheLog/dd-hh-mm"defaultLevel="-1"/><br /> <customTypeclassName="System.Data.Fabric.Common.EventLogger,FabricCommon“ sinkName="Microsoft.Data.Caching.ETWSink, CacheBaseLibrary“ sinkParam=""defaultLevel="-1"/><br /> </collection><br /> </section><br /></fabric><br /><system.web><br /> <sessionStatemode="Custom"customProvider="Velocity"><br /> <providers><br /> <addname="Velocity"type="Microsoft.Data.Caching.DataCacheSessionStoreProvider, ClientLibrary"cacheName="session"/><br /> </providers><br /> </sessionState><br /></system.web><br /><system.web><br /> <sessionStatemode="Custom"customProvider="Velocity"><br /> <providers><br /> <addname="Velocity"type="Microsoft.Data.Caching.DataCacheSessionStoreProvider, ClientLibrary"cacheName="session"/><br /> </providers><br /> </sessionState><br /></system.web><br />
  35. 35. Summary<br />Windows Server AppFabric Cache is a distributed application cache<br />Caching is important to application scalability<br />Explicit caching API available to .NET 3.5 SP1 and .NET 4.0<br />ASP.NET Session provider an implicit way to take advantage of the Cache’s capabilities<br />Plan, plan and plan some more<br />
  36. 36. Questions<br />robert@sadev.co.za<br />@rmaclean<br />Meet me at the community lounge<br />
  37. 37. Resources<br />Required Slide<br />Learning<br />Sessions On-Demand & Community<br />Microsoft Certification & Training Resources<br />www.microsoft.com/teched<br />www.microsoft.com/learning<br />Resources for IT Professionals<br />Resources for Developers<br />http://microsoft.com/msdn<br />http://microsoft.com/technet<br />Need more Information?<br />SMS [ Your Name ] and the word “AppServer” to 41491<br />
  38. 38. Complete an evaluation via CommNet and Tag to win amazing prizes!<br />
  39. 39. © 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.<br />The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.<br />
  40. 40. Notes – Hide slide<br />
  41. 41. AgendaAgenda Subtitle<br />Agenda item 1<br />Agenda subheading<br />Agenda Item 2<br />Agenda subheading<br />Agenda item 3<br />Agenda subheading<br />Etc…<br />
  42. 42. Name<br />Title<br />Company<br />Title of Presentation<br />SESSION CODE: #####<br />
  43. 43. PowerPoint TemplateSubtitle color<br />Example of a slide with a subhead<br />Set the slide header to “Title Case”<br />Set subheads in “sentence case”<br />Generally set subhead to 36pt or smaller so it will fit on asingle line<br />The subhead color is defined for this template but mustbe selected<br />
  44. 44. Sample Fill<br />Sample Fill<br />PowerPoint Guidelines<br />Font, size, and color for text have been formatted for you in the Slide Master<br />Use the color palette shown below<br />Hyperlink color: www.microsoft.com<br />Sample Fill<br />Sample Fill<br />Sample Fill<br />Sample Fill<br />
  45. 45. Slide for Showing Software Code<br />Use this layout to show software code<br />The font is Consolas, a monospace font<br />The slide doesn’t use bullets but levels can be indented using the “Increase List Level” icon on the Home menu<br />To use straight quotes " instead of smart quotes ”, do this:<br />Click on the Office Button in the upper left corner<br />At the bottom of the menu, choose PowerPoint Options<br />From the left pane, select Proofing<br />Click on the AutoCorrect Options button<br />Select the AutoFormat As You Type tab, and deselect “Straight quotes” with “smart quotes”. Then Click OK.<br />
  46. 46. Table Format<br />
  47. 47. Bar Chart Example<br />
  48. 48. Pie Chart Example<br />
  49. 49. Breakout sessions<br />Breakout sessions<br />Breakout sessions<br />Breakout sessions<br />Related Content<br />

×