<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.falafel.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Falafel Blog Feed</title>
    <description>The Falafel Software Blogs Feed</description>
    <link>http://blog.falafel.com/Blogs.aspx</link>
    <docs>http://backend.userland.com/rss</docs>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.falafel.com/FalafelBlogs" /><feedburner:info uri="falafelblogs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>37.213624</geo:lat><geo:long>-121.856713</geo:long><item>
      <title>Unveiling the Module Builder Importer / Exporter</title>
      <description>&lt;p&gt;Whoever attended the latest Sitefinity Webinar regarding the Module Builder is already intimate with the list of enhancements that will come for the Module Builder with the new Sitefinity 5 release scheduled for end of February.&lt;/p&gt; &lt;p&gt;As a part of these enhancements, the new Module Builder will include a module Import and Export functionality to ease the process of sharing modules between developers and moving them between different environments.&lt;/p&gt; &lt;p&gt;While digging into the Module Builder's API, I was able to find traces of the Module Builder's Importer and Exporter. The reality is, they do exist today in Sitefinity 4.4. We would have played around with them had they not been set as "Internal".&amp;nbsp;&lt;/p&gt; &lt;p&gt;I hope the team will change the scope of some classes in the next release so we could have access to the Module Builder's API and be able to create modules by code. That sounds pretty commoving to me.&lt;/p&gt; &lt;p&gt;Here are the traces that I found:&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;internal&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;static&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;class&lt;/code&gt; &lt;code style="color: #000000;"&gt;ModuleExporter&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;public&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;static&lt;/code&gt; &lt;code style="color: #000000;"&gt;ZipFile ExportModule(DynamicModule dynamicModule, Stream outputStream)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;if&lt;/code&gt; &lt;code style="color: #000000;"&gt;(dynamicModule == &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;null&lt;/code&gt;&lt;code style="color: #000000;"&gt;)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;throw&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;new&lt;/code&gt; &lt;code style="color: #000000;"&gt;ArgumentNullException(&lt;/code&gt;&lt;code style="color: blue;"&gt;"Dynamic module argument is null!"&lt;/code&gt;&lt;code style="color: #000000;"&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;return&lt;/code&gt; &lt;code style="color: #000000;"&gt;Serializer.SerializeDynamicModule(dynamicModule, outputStream);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;internal&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;static&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;class&lt;/code&gt; &lt;code style="color: #000000;"&gt;ModuleImporter&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;public&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;static&lt;/code&gt; &lt;code style="color: #000000;"&gt;DynamicModule ImportModule(ZipFile dynamicModuleZip);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;Expand All Members&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;Let's wait and see how the Module Builder develops in the next month.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=0oQvbFCQi18:pHjygy0EtSA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=0oQvbFCQi18:pHjygy0EtSA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=0oQvbFCQi18:pHjygy0EtSA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=0oQvbFCQi18:pHjygy0EtSA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=0oQvbFCQi18:pHjygy0EtSA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/0oQvbFCQi18" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/0oQvbFCQi18/Unveiling_the_Module_Builder_Importer_Exporter.aspx</link>
      <author>George Saadeh</author>
      <comments>http://blog.falafel.com/Blogs/12-01-31/Unveiling_the_Module_Builder_Importer_Exporter.aspx</comments>
      <guid isPermaLink="false">0842c2f4-1c5d-4afd-a2f5-38f66eec3585</guid>
      <pubDate>Wed, 01 Feb 2012 07:19:25 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/12-01-31/Unveiling_the_Module_Builder_Importer_Exporter.aspx</feedburner:origLink></item>
    <item>
      <title>Free Webinar: Windows Phone "Mango" Taste Test</title>
      <description>The Windows Phone platform has been making headlines lately. &amp;nbsp;A Customer Think &lt;a href="http://www.customerthink.com/blog/2011_customers_view_of_smart_phones" title="Link to Customer Think Survey"&gt;survey&lt;/a&gt;&amp;nbsp;recently revealed that among smartphone users, Windows Phone users&amp;nbsp;experience&amp;nbsp;the highest customer satisfaction. Nokia's new Lumia 900 Windows Phone debuted at the Consumer Electronics Show and took home &lt;a href="http://www.cesweb.org/awards/bestOfCES.asp" title="Link to CES Awards"&gt;CNET's best cell phone award&lt;/a&gt;. Market research firms iSuppli, Gartner and IDC all expect Windows Phone to claim the &lt;a href="http://www.isuppli.com/Mobile-and-Wireless-Communications/News/Pages/Lumia-900-Introduction-to-Trigger-Smartphone-Renaissance-for-Nokia-and-Microsoft.aspx" title="Link to iSuppli report"&gt;number two spot in smartphone market share by 2015&lt;/a&gt;.
&lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;So what's the big deal?&lt;/p&gt; &lt;br /&gt; &lt;p&gt;
We are giving you a chance to see for yourself. On Feb 10th at 12PM EST, join us in our free Windows Phone webinar, "The Windows Phone 'Mango' Taste Test".&amp;nbsp;&lt;/p&gt; &lt;p&gt;In this webinar, we will explore the Windows Phone 7.5 technologies that make "Mango" unique. We'll demonstrate how easy it is to get started building Metro apps featuring the Panorama control with its sliding foreground and distinctive "parallax" background. Learn how to push key information to the users Start page for immediate attention with Live Tiles and notifications. Watch over our shoulder while we demonstrate mapping, sensing device location, geocoding and more.&amp;nbsp;&lt;/p&gt;
At Falafel Software, our Windows Phone trainers have participated in the design and development of real world Windows Phone applications and have shared their experience by authoring the &lt;a href="https://www.falafel.com/store/courseware/wp7nutsandbolts.aspx" title="Link to Windows Phone &amp;quot;Mango&amp;quot; Nuts and Bolts courseware"&gt;“Windows Phone 7.5 ‘Mango’ Nut and Bolts”&lt;/a&gt; training guide. Just 75 minutes with these experts is an educational experience of a lifetime, so don’t miss this golden opportunity!&lt;br /&gt; &lt;br /&gt; &lt;a href="https://www2.gotomeeting.com/register/212755466" title="Link to registration for WP7 webinar"&gt;Sign up today!&lt;/a&gt;&lt;br /&gt; &lt;div&gt;&lt;br /&gt; &lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=89UyGEVjLyY:XYR6soLPvis:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=89UyGEVjLyY:XYR6soLPvis:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=89UyGEVjLyY:XYR6soLPvis:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=89UyGEVjLyY:XYR6soLPvis:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=89UyGEVjLyY:XYR6soLPvis:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/89UyGEVjLyY" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/89UyGEVjLyY/Free_Webinar_Windows_Phone_Mango_Taste_Test.aspx</link>
      <author>Mike Dugan</author>
      <comments>http://blog.falafel.com/Blogs/12-01-24/Free_Webinar_Windows_Phone_Mango_Taste_Test.aspx</comments>
      <guid isPermaLink="false">bceee4ad-a77a-4db1-a437-d1db4768c169</guid>
      <pubDate>Tue, 24 Jan 2012 18:25:47 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/12-01-24/Free_Webinar_Windows_Phone_Mango_Taste_Test.aspx</feedburner:origLink></item>
    <item>
      <title>Free Webinar: Testing Silverlight Applications </title>
      <description>&lt;p&gt;Falafel Software is at it again. Offering you a chance to join one of the industry’s most recognized testing experts in a free webinar. Join our CEO, Lino Tadros, as he teams up with SmartBear Software to bring you, “Tips and Tricks for Performance, Load &amp;amp; Functional Testing Silverlight Apps“ on January 31st, at 1 PM EST.&lt;/p&gt; &lt;p&gt;Silverlight applications present their own unique testing challenges, but in this webinar you will learn how to properly use an array of tools from SmartBear Software, including TestComplete, LoadComplete, and AQTime, to verify your Microsoft Silverlight application is rock solid and ready for prime time.&amp;nbsp;&lt;/p&gt; &lt;p&gt;Have a particular Silverlight testing question? No problem. When you register, you can submit your own topics and questions to be addressed during the webinar.&lt;/p&gt;
So what are you waiting for? &amp;nbsp;&lt;a href="http://www2.smartbear.com/Falafel_Silverlight_webinar_reg.html" title="Link to registration page"&gt;Register today&lt;/a&gt;!&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=UXSHUd2_NKE:r4mB8EOR1so:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=UXSHUd2_NKE:r4mB8EOR1so:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=UXSHUd2_NKE:r4mB8EOR1so:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=UXSHUd2_NKE:r4mB8EOR1so:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=UXSHUd2_NKE:r4mB8EOR1so:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/UXSHUd2_NKE" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/UXSHUd2_NKE/Free_Webinar_Testing_Silverlight_Applications.aspx</link>
      <author>Mike Dugan</author>
      <comments>http://blog.falafel.com/Blogs/12-01-18/Free_Webinar_Testing_Silverlight_Applications.aspx</comments>
      <guid isPermaLink="false">f4fd91d7-b68f-4899-9c9a-3507cde9a741</guid>
      <pubDate>Wed, 18 Jan 2012 21:00:00 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/12-01-18/Free_Webinar_Testing_Silverlight_Applications.aspx</feedburner:origLink></item>
    <item>
      <title>Falafel Promotes Lance Bullock to V.P. of Mobile Solutions</title>
      <description>&lt;p&gt;Falafel Software is pleased to announce that renowned software architect and industry speaker Lance Bullock has been promoted to V.P. of Mobile Solutions at Falafel Software. Bullock has been essential to the growth of Falafel’s mobile business over the past two years, delivering mobile solutions to Falafel’s customers on time and on budget, drawing large crowds as a speaker at industry events such as Silicon Valley Code Camp and the Sprint Open Solutions Conference, and producing several mobile applications for iPhone and Android, including Falafel’s flagship mobile product, EventBoard.&lt;/p&gt; &lt;br /&gt; &lt;p&gt;
“I am truly honored to have Lance Bullock lead our mobile vision into the future,” said Lino Tadros CEO of Falafel Software. “His technical abilities and leadership qualities were main factors in the success of Falafel’s Mobile endeavor” &lt;/p&gt; &lt;br /&gt; &lt;p&gt;
Bullock’s unique skill set makes him the ideal candidate to take control of the entire mobile department at Falafel Software. In his new role, he will guide the Falafel mobile team in both principal and practice, manage all internal and external mobile projects, and deal directly with mobile customers. Employees and customers alike will be good hands with Mr. Bullock at the helm.&lt;/p&gt; &lt;br /&gt; &lt;p&gt;
“I am honored and fortunate to have the support of a great team which has enabled Falafel Software to become a player in the mobile space”, said Bullock. “In today's environment, it is absolutely critical for a software development house to offer their enterprise customers a portfolio that includes mobile development. I look forward to my new role and continuing to bring cutting-edge mobile solutions to Falafel's clients while expanding our mobile product line.”&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=FE-oCg9R-DM:jBh3C9SGc1w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=FE-oCg9R-DM:jBh3C9SGc1w:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=FE-oCg9R-DM:jBh3C9SGc1w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=FE-oCg9R-DM:jBh3C9SGc1w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=FE-oCg9R-DM:jBh3C9SGc1w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/FE-oCg9R-DM" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/FE-oCg9R-DM/Falafel_Promotes_Lance_Bullock_to_V_P_of_Mobile_Solutions.aspx</link>
      <author>Mike Dugan</author>
      <comments>http://blog.falafel.com/Blogs/12-01-18/Falafel_Promotes_Lance_Bullock_to_V_P_of_Mobile_Solutions.aspx</comments>
      <guid isPermaLink="false">242ec1e5-a57c-4a61-ae76-ffd5a17d5dc8</guid>
      <pubDate>Wed, 18 Jan 2012 17:28:40 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/12-01-18/Falafel_Promotes_Lance_Bullock_to_V_P_of_Mobile_Solutions.aspx</feedburner:origLink></item>
    <item>
      <title>Silverlight Click to Edit TextBlock</title>
      <description>&lt;p&gt;There are some powerful data editing controls in Silverlight such as the DataForm which let you define templates for ReadOnly and Edit modes, but sometimes you just need a simple way to view and update text. &amp;nbsp;I came across a scenario in a custom application that required a simple way to view and edit text. &amp;nbsp;The solution I came up with was a "Click to Edit" TextBlock. &amp;nbsp;In the default state, the text is displayed as a read-only TextBlock, but you can simply click on the TextBlock for it to become an editable TextBox.&lt;/p&gt; &lt;p&gt;Here is a working example (Silverlight 5 plugin required):&lt;/p&gt; &lt;p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="300" height="140"&gt; &lt;param name="source" value="http://blog.falafel.com/Files/josheastburn/ClickToEditTextBlock.xap"&gt; &lt;param name="background" value="white"&gt; &lt;param name="minRuntimeVersion" value="5.0.61118.0"&gt; &lt;param name="autoUpgrade" value="true"&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;amp;v=5.0.61118.0" style="text-decoration:none"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"&gt; &lt;/a&gt; &lt;/object&gt; &lt;/p&gt; &lt;p&gt;To accomplish this, I built a UserControl that has both a TextBlock and a TextBox which are both bound to the same DependencyProperty for the Text value.  Then I bind the visibility of each to an IsEditing DependencyProperty that gets toggled based on the focus state of the control.
&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;TextBlock&lt;/code&gt; &lt;code style="color: #808080;"&gt;Name&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"TextBlock"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Width&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"150"&lt;/code&gt; &lt;code style="color: #808080;"&gt;HorizontalAlignment&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Left"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Text&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{Binding Text, Mode=OneWay}"&lt;/code&gt; &lt;code style="color: #808080;"&gt;VerticalAlignment&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Center"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Visibility&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{Binding IsEditing, Converter={StaticResource invisibilityConverter}}"&lt;/code&gt;&lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;TextBox&lt;/code&gt; &lt;code style="color: #808080;"&gt;Name&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"TextBox"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Width&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"150"&lt;/code&gt; &lt;code style="color: #808080;"&gt;HorizontalAlignment&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Left"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Text&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{Binding Text, Mode=TwoWay}"&lt;/code&gt; &lt;code style="color: #808080;"&gt;VerticalAlignment&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Center"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Visibility&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{Binding IsEditing, Converter={StaticResource visibilityConverter}}"&lt;/code&gt; &lt;code style="color: #808080;"&gt;LostFocus&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"TextBox_LostFocus"&lt;/code&gt;&lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;Once this control is in place, using it is quite simple and you can bind the Text property as needed.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;StackPanel&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Controls:ClickToEditTextBlock&lt;/code&gt; &lt;code style="color: #808080;"&gt;Text&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{Binding Text1, Mode=TwoWay}"&lt;/code&gt;&lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Controls:ClickToEditTextBlock&lt;/code&gt; &lt;code style="color: #808080;"&gt;Text&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{Binding Text2, Mode=TwoWay}"&lt;/code&gt;&lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Controls:ClickToEditTextBlock&lt;/code&gt; &lt;code style="color: #808080;"&gt;Text&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{Binding Text3, Mode=TwoWay}"&lt;/code&gt;&lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;StackPanel&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Files/josheastburn/ClickToEditTextBlock.zip"&gt;Download the Source Code&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=zO619_HEtxw:4CZ62IH6BU4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=zO619_HEtxw:4CZ62IH6BU4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=zO619_HEtxw:4CZ62IH6BU4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=zO619_HEtxw:4CZ62IH6BU4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=zO619_HEtxw:4CZ62IH6BU4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/zO619_HEtxw" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/zO619_HEtxw/Silverlight_Click_to_Edit_TextBlock.aspx</link>
      <author>Josh Eastburn</author>
      <comments>http://blog.falafel.com/Blogs/12-01-05/Silverlight_Click_to_Edit_TextBlock.aspx</comments>
      <guid isPermaLink="false">93409f4b-ba12-4ef2-a221-0675e8958ddc</guid>
      <pubDate>Thu, 05 Jan 2012 14:55:22 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/12-01-05/Silverlight_Click_to_Edit_TextBlock.aspx</feedburner:origLink></item>
    <item>
      <title>Extending Sitefinity Pager Control</title>
      <description>&lt;p&gt;While working with all the content modules in Sitefinity, we have got several templates to choose from to display list items on our pages. When we have a long list to expose, the pager control that is shipped with Sitefinity allows us to specify how many items to display per page, which is great. However, we have all experienced the beauty and&amp;nbsp;flexibility of the RadDataPager control and to this day I am still wondering why the Sitefinity team did not use this control instead of the custom pager that they built specifically for Sitefinity.&amp;nbsp;&lt;/p&gt; &lt;p&gt;After I stumbled upon&lt;a href="http://www.sitefinity.com/devnet/forums/sitefinity-4-x/general-discussions/sitefinity-pager.aspx"&gt; this post in the Sitefinity forum&lt;/a&gt;, I decided to do the attempt and extend the custom pager to make it look as close as possible to the RadDataPager control. In this post, I am going to show you how I managed to do just that. Before we start, let us preview the original and the outcome of our task:&lt;/p&gt; &lt;p&gt;Original pager:&lt;/p&gt; &lt;p&gt;&lt;img src="/Images/before.png" alt="Original pager control" /&gt;&lt;/p&gt; &lt;p&gt;The Extended pager control:&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="/Images/after.png" /&gt;&lt;/p&gt; &lt;p&gt;The first thing that we have to do is to create a class and inherit from the Pager control:&lt;/p&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;public&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;class&lt;/code&gt; &lt;code style="color: #000000;"&gt;ExtendedPager : Pager&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;br /&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;We then create the custom template for our ExtendedPager control:&lt;/p&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;%@ Control Language="C#" %&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI" TagPrefix="sf" %&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Web.UI" TagPrefix="sf" %&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;sf:ResourceLinks&lt;/code&gt; &lt;code style="color: #808080;"&gt;ID&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"resourcesLinks"&lt;/code&gt; &lt;code style="color: #808080;"&gt;runat&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"server"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;sf:ResourceFile&lt;/code&gt; &lt;code style="color: #808080;"&gt;AssemblyInfo&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"SitefinityWebApp.Widgets.AdvancedPager.ExtendedPager, SitefinityWebApp"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Name&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"SitefinityWebApp.Widgets.AdvancedPager.Resources.Stylesheets.default.css"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Static&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"true"&lt;/code&gt; &lt;code style="color: #808080;"&gt;IsFromTheme&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"False"&lt;/code&gt;&lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;sf:ResourceLinks&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;div&lt;/code&gt; &lt;code style="color: #808080;"&gt;class&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"sfpagerWrapper"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;sf:SitefinityHyperLink&lt;/code&gt; &lt;code style="color: #808080;"&gt;ID&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"cmdFirst"&lt;/code&gt; &lt;code style="color: #808080;"&gt;runat&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"server"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Text&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"First"&lt;/code&gt; &lt;code style="color: #808080;"&gt;CssClass&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"sf_pagerFirst"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;sf:SitefinityHyperLink&lt;/code&gt; &lt;code style="color: #808080;"&gt;ID&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"cmdPrev"&lt;/code&gt; &lt;code style="color: #808080;"&gt;runat&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"server"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Text&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Previous"&lt;/code&gt; &lt;code style="color: #808080;"&gt;CssClass&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"sf_pagerPrevious"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;div&lt;/code&gt; &lt;code style="color: #808080;"&gt;runat&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"server"&lt;/code&gt; &lt;code style="color: #808080;"&gt;id&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"numeric"&lt;/code&gt; &lt;code style="color: #808080;"&gt;class&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"sf_pagerNumeric"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;div&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;sf:SitefinityHyperLink&lt;/code&gt; &lt;code style="color: #808080;"&gt;ID&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"cmdNext"&lt;/code&gt; &lt;code style="color: #808080;"&gt;runat&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"server"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Text&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Next"&lt;/code&gt; &lt;code style="color: #808080;"&gt;CssClass&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"sf_pagerNext"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;sf:SitefinityHyperLink&lt;/code&gt; &lt;code style="color: #808080;"&gt;ID&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"cmdLast"&lt;/code&gt; &lt;code style="color: #808080;"&gt;runat&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"server"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Text&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Last"&lt;/code&gt; &lt;code style="color: #808080;"&gt;CssClass&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"sf_pagerLast"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;div&lt;/code&gt; &lt;code style="color: #808080;"&gt;id&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"gotopage"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;asp:Label&lt;/code&gt; &lt;code style="color: #808080;"&gt;ID&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"lblGoToPage"&lt;/code&gt; &lt;code style="color: #808080;"&gt;runat&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"server"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Text&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Go to Page: "&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;asp:Label&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;sf:RadComboBox&lt;/code&gt; &lt;code style="color: #808080;"&gt;runat&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"server"&lt;/code&gt; &lt;code style="color: #808080;"&gt;ID&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"ddlPage"&lt;/code&gt; &lt;code style="color: #808080;"&gt;AllowCustomText&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"false"&lt;/code&gt; &lt;code style="color: #808080;"&gt;EnableTextSelection&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"false"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Width&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"50px"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;sf:RadComboBox&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;div&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;div&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;br /&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;We configure the RadCombobox that will hold the list of pages:&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;private&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;void&lt;/code&gt; &lt;code style="color: #000000;"&gt;ConfigurePageList()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;if&lt;/code&gt; &lt;code style="color: #000000;"&gt;(PageCount &amp;lt;= 0) &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;return&lt;/code&gt;&lt;code style="color: #000000;"&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;PagesControl.AutoPostBack = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;true&lt;/code&gt;&lt;code style="color: #000000;"&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;PagesControl.SelectedIndexChanged += PagesControl_SelectedIndexChanged;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;PagesControl.Items.Clear();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;var defaultItem = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;new&lt;/code&gt; &lt;code style="color: #000000;"&gt;RadComboBoxItem(&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;string&lt;/code&gt;&lt;code style="color: #000000;"&gt;.Empty, &lt;/code&gt;&lt;code style="color: blue;"&gt;"0"&lt;/code&gt;&lt;code style="color: #000000;"&gt;) {Selected = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;true&lt;/code&gt;&lt;code style="color: #000000;"&gt;};&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;PagesControl.Items.Add(defaultItem);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;PagesControl.Items.AddRange(Enumerable.Range(1, PageCount).Select(s =&amp;gt; &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;new&lt;/code&gt; &lt;code style="color: #000000;"&gt;RadComboBoxItem(s.ToString(), s.ToString())));&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;void&lt;/code&gt; &lt;code style="color: #000000;"&gt;PagesControl_SelectedIndexChanged(&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;object&lt;/code&gt; &lt;code style="color: #000000;"&gt;sender, RadComboBoxSelectedIndexChangedEventArgs e)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;var pageIndex = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;int&lt;/code&gt;&lt;code style="color: #000000;"&gt;.Parse(e.Value);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;if&lt;/code&gt; &lt;code style="color: #000000;"&gt;(pageIndex &amp;gt; 0)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;var pageUrl = BuildNavigateUrl(pageIndex);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;HttpContext.Current.Response.Redirect(pageUrl, &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;false&lt;/code&gt;&lt;code style="color: #000000;"&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;Then in the control's client component we handle the SelectedIndexChanged event:&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;_selectedPageChanged: &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;function&lt;/code&gt; &lt;code style="color: #000000;"&gt;(sender, args) {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;var&lt;/code&gt; &lt;code style="color: #000000;"&gt;selectedItem = args.get_item();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;if&lt;/code&gt; &lt;code style="color: #000000;"&gt;(selectedItem != &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;null&lt;/code&gt;&lt;code style="color: #000000;"&gt;) {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;var&lt;/code&gt; &lt;code style="color: #000000;"&gt;pageIndex = selectedItem.get_value();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;if&lt;/code&gt; &lt;code style="color: #000000;"&gt;(pageIndex &amp;gt; 0) {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;Telerik.Sitefinity.Web.UI.NavigateToPage(&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.get_id(), pageIndex);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;Finally we replace the pager control in the templates with our custom pager:&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;%@ Register TagPrefix="sf" Namespace="SitefinityWebApp.Widgets.AdvancedPager" Assembly="SitefinityWebApp" %&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;sf:ExtendedPager&lt;/code&gt; &lt;code style="color: #808080;"&gt;id&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"pager"&lt;/code&gt; &lt;code style="color: #808080;"&gt;runat&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"server"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;sf:ExtendedPager&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Et Voila !&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Note that:&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;ul style="margin-left: 20px;"&gt; &lt;li&gt;The full source code is not included in this article but you can easily download it from the link below.&lt;/li&gt; &lt;li&gt;You have to have a Widgets folder in your SitefinityWebApp project and include the AdvancedPager control there.&lt;/li&gt; &lt;li&gt;You have to set the client component file as Embedded resource as well as the CSS file.&lt;/li&gt; &lt;li&gt;The CSS resource file has to be added to the assembly info.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="/Files/GeorgeSaadeh/ExtendedPager.zip"&gt;Download the source code&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=oHwGar_yhOk:_8FXF_tmhX8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=oHwGar_yhOk:_8FXF_tmhX8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=oHwGar_yhOk:_8FXF_tmhX8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=oHwGar_yhOk:_8FXF_tmhX8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=oHwGar_yhOk:_8FXF_tmhX8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/oHwGar_yhOk" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/oHwGar_yhOk/Extending_Sitefinity_Pager_Control.aspx</link>
      <author>George Saadeh</author>
      <comments>http://blog.falafel.com/Blogs/12-01-05/Extending_Sitefinity_Pager_Control.aspx</comments>
      <guid isPermaLink="false">499770af-03eb-4281-8987-798fdda233b4</guid>
      <pubDate>Thu, 05 Jan 2012 13:44:36 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/12-01-05/Extending_Sitefinity_Pager_Control.aspx</feedburner:origLink></item>
    <item>
      <title>Falafel Software Releases LoadComplete Courseware</title>
      <description>&lt;p&gt;Falafel Software's training classes and courseware have taught thousands of people how to use SmartBear's TestComplete and LoadComplete software. Today, Falafel expands these learning&amp;nbsp;opportunities&amp;nbsp;with the release of &lt;a href="http://www.lulu.com/product/paperback/loadcomplete-2-nuts-bolts/18800653" title="Link to LoadComplete 2 Nuts and Bolts on Lulu.com"&gt;LoadComplete 2 Nuts and Bolts&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;With this self paced training guide, you will learn to use LoadComplete to simulate hundreds of users entering unique data on your web site while you monitor key performance metrics in real time. This book builds from the ground up, starting with a tour of LoadComplete features, working through creating and customizing tests, understanding your test results and debugging problem tests.&amp;nbsp;&lt;/p&gt; &lt;p&gt;The book topics include:&lt;/p&gt; &lt;p&gt;• Tour of LoadComplete: 1000 foot view, learning your way around the product, customizing the workspace to suit your working style.&amp;nbsp;&lt;br /&gt;
• Project Management: Creating new projects, project structure, “Where are my files”.&amp;nbsp;&lt;br /&gt;
• Recording Scenarios: Recording and reviewing HTTP scenarios, building reusable/composable scenarios, verifying that a scenario works.&amp;nbsp;&lt;br /&gt;
• Defining Tests: Defining virtual users, establishing quality of service limits, load profiles, testing on multiple workstations.&lt;br /&gt;
• Customizing Tests: Customizing without script, test dynamically using parameters and variables, generating custom data, using external data.&lt;br /&gt;
• Analyzing Test Results: Making sense of load test results, reading the log, reporting and charting, fixing your top 10 performance issues.&amp;nbsp;&lt;br /&gt;
• Debugging Tests: resolving warnings and errors, how to debug step-by-step, understanding response codes, authentication issues.&amp;nbsp;&lt;br /&gt; &lt;br /&gt;
Purchase&amp;nbsp;LoadComplete 2 Nuts and Bolts from&amp;nbsp;&lt;a href="http://www.lulu.com/product/paperback/loadcomplete-2-nuts-bolts/18800653" title="Link to LoadComplete 2 Nuts and Bolts on Lulu.com"&gt;Lulu.com&lt;/a&gt;&amp;nbsp;and get started load testing today!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=Q6XMK7Jim5o:jzFBHVJo5Oc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=Q6XMK7Jim5o:jzFBHVJo5Oc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=Q6XMK7Jim5o:jzFBHVJo5Oc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=Q6XMK7Jim5o:jzFBHVJo5Oc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=Q6XMK7Jim5o:jzFBHVJo5Oc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/Q6XMK7Jim5o" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/Q6XMK7Jim5o/Falafel_Software_Releases_LoadComplete_Courseware.aspx</link>
      <author>Mike Dugan</author>
      <comments>http://blog.falafel.com/Blogs/12-01-04/Falafel_Software_Releases_LoadComplete_Courseware.aspx</comments>
      <guid isPermaLink="false">1e6b2c6e-2af0-4b73-a2a3-b71262e3ef45</guid>
      <pubDate>Wed, 04 Jan 2012 20:12:07 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/12-01-04/Falafel_Software_Releases_LoadComplete_Courseware.aspx</feedburner:origLink></item>
    <item>
      <title>T-SQL Drop If Exists 2.0</title>
      <description>&lt;p&gt;After using the &lt;a href="http://blog.falafel.com/blogs/adamanderson/11-02-09/T-SQL_Drop_If_Exists.aspx"&gt;first iteration&lt;/a&gt; of my utility procedure &lt;strong&gt;drop_if_exists&lt;/strong&gt; for a while, I noticed a few idiosyncrasies that I didn’t like about it, so I came up with a new version. This version removes the requirement of specifying the object’s type code, instead looking it up by the object’s 3-part identifier. It adds support for dropping objects in other databases than the current one as well. If no object is found, an informative message is output; if multiple objects are found, an error is output, requesting a more specific identifier. As stated in the first iteration, the purpose of this procedure is to reduce the amount of typing necessary to first check for an object’s existence and then drop it. Here is the new and improved code:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;create&lt;/span&gt; &lt;span class="kwrd"&gt;procedure&lt;/span&gt; dbo.drop_if_exists
    @name nvarchar(257),
    @parent_name nvarchar(257) = &lt;span class="kwrd"&gt;null&lt;/span&gt;
&lt;span class="kwrd"&gt;as&lt;/span&gt;
&lt;span class="kwrd"&gt;set&lt;/span&gt; nocount &lt;span class="kwrd"&gt;on&lt;/span&gt;

&lt;span class="kwrd"&gt;if&lt;/span&gt; @name &lt;span class="kwrd"&gt;is&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;
&lt;span class="kwrd"&gt;begin&lt;/span&gt;
    &lt;span class="kwrd"&gt;raiserror&lt;/span&gt;(&lt;span class="str"&gt;'@name is required'&lt;/span&gt;, 11, 1)
    &lt;span class="kwrd"&gt;return&lt;/span&gt;
&lt;span class="kwrd"&gt;end&lt;/span&gt;

&lt;span class="kwrd"&gt;declare&lt;/span&gt;
    @server sysname = parsename(@name, 4),
    @&lt;span class="kwrd"&gt;database&lt;/span&gt; sysname = parsename(@name, 3),
    @&lt;span class="kwrd"&gt;schema&lt;/span&gt; sysname = parsename(@name, 2),
    @&lt;span class="kwrd"&gt;object&lt;/span&gt; sysname = parsename(@name, 1)
    
&lt;span class="kwrd"&gt;if&lt;/span&gt; @server &lt;span class="kwrd"&gt;is&lt;/span&gt; &lt;span class="kwrd"&gt;not&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;
&lt;span class="kwrd"&gt;begin&lt;/span&gt;
    &lt;span class="kwrd"&gt;raiserror&lt;/span&gt;(&lt;span class="str"&gt;'Remote servers are not supported.'&lt;/span&gt;, 11, 1)
    &lt;span class="kwrd"&gt;return&lt;/span&gt;
&lt;span class="kwrd"&gt;end&lt;/span&gt;

&lt;span class="kwrd"&gt;declare&lt;/span&gt; @type &lt;span class="kwrd"&gt;char&lt;/span&gt;(2)

&lt;span class="kwrd"&gt;declare&lt;/span&gt; @stmt nvarchar(&lt;span class="kwrd"&gt;max&lt;/span&gt;) = &lt;span class="str"&gt;'
select @type = o.type
from '&lt;/span&gt; + isnull(quotename(@&lt;span class="kwrd"&gt;database&lt;/span&gt;), &lt;span class="str"&gt;''&lt;/span&gt;) + &lt;span class="str"&gt;'.sys.objects o
join '&lt;/span&gt; + isnull(quotename(@&lt;span class="kwrd"&gt;database&lt;/span&gt;), &lt;span class="str"&gt;''&lt;/span&gt;) + &lt;span class="str"&gt;'.sys.schemas s on s.schema_id = o.schema_id
where o.name = @object
and s.name = isnull(@schema, s.name)'&lt;/span&gt;

&lt;span class="kwrd"&gt;exec&lt;/span&gt; sp_executesql
    @stmt = @stmt,
    @params = N&lt;span class="str"&gt;'
        @type char(2) out,
        @object sysname,
        @schema sysname'&lt;/span&gt;,
    @type = @type &lt;span class="kwrd"&gt;out&lt;/span&gt;,
    @&lt;span class="kwrd"&gt;object&lt;/span&gt; = @&lt;span class="kwrd"&gt;object&lt;/span&gt;,
    @&lt;span class="kwrd"&gt;schema&lt;/span&gt; = @&lt;span class="kwrd"&gt;schema&lt;/span&gt;

&lt;span class="kwrd"&gt;declare&lt;/span&gt; @&lt;span class="kwrd"&gt;rowcount&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; = &lt;span class="preproc"&gt;@@rowcount&lt;/span&gt;

&lt;span class="kwrd"&gt;if&lt;/span&gt; @&lt;span class="kwrd"&gt;rowcount&lt;/span&gt; = 0
&lt;span class="kwrd"&gt;begin&lt;/span&gt;
    &lt;span class="kwrd"&gt;raiserror&lt;/span&gt;(&lt;span class="str"&gt;'Info: '&lt;/span&gt;&lt;span class="str"&gt;'%s'&lt;/span&gt;&lt;span class="str"&gt;' does not exist'&lt;/span&gt;, 1, 1, @name)
    &lt;span class="kwrd"&gt;return&lt;/span&gt;
&lt;span class="kwrd"&gt;end&lt;/span&gt;

&lt;span class="kwrd"&gt;if&lt;/span&gt; @&lt;span class="kwrd"&gt;rowcount&lt;/span&gt; &amp;gt; 1
&lt;span class="kwrd"&gt;begin&lt;/span&gt;
    &lt;span class="kwrd"&gt;raiserror&lt;/span&gt;(&lt;span class="str"&gt;''&lt;/span&gt;&lt;span class="str"&gt;'%s'&lt;/span&gt;&lt;span class="str"&gt;' does not uniquely identify an object. When there are multiple objects with the same name, you must also specify the schema'&lt;/span&gt;, 11, 1, @name)
    &lt;span class="kwrd"&gt;return&lt;/span&gt;
&lt;span class="kwrd"&gt;end&lt;/span&gt;

&lt;span class="kwrd"&gt;declare&lt;/span&gt; @type_name &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(10)

&lt;span class="kwrd"&gt;set&lt;/span&gt; @type_name = &lt;span class="kwrd"&gt;case&lt;/span&gt;
    &lt;span class="kwrd"&gt;when&lt;/span&gt; @type &lt;span class="kwrd"&gt;in&lt;/span&gt; (&lt;span class="str"&gt;'c'&lt;/span&gt;, &lt;span class="str"&gt;'d'&lt;/span&gt;, &lt;span class="str"&gt;'f'&lt;/span&gt;, &lt;span class="str"&gt;'pk'&lt;/span&gt;, &lt;span class="str"&gt;'uq'&lt;/span&gt;)
        &lt;span class="kwrd"&gt;then&lt;/span&gt; &lt;span class="str"&gt;'constraint'&lt;/span&gt;
    &lt;span class="kwrd"&gt;when&lt;/span&gt; @type &lt;span class="kwrd"&gt;in&lt;/span&gt; (&lt;span class="str"&gt;'fn'&lt;/span&gt;, &lt;span class="str"&gt;'if'&lt;/span&gt;, &lt;span class="str"&gt;'tf'&lt;/span&gt;)
        &lt;span class="kwrd"&gt;then&lt;/span&gt; &lt;span class="str"&gt;'function'&lt;/span&gt;
    &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;case&lt;/span&gt; @type
        &lt;span class="kwrd"&gt;when&lt;/span&gt; &lt;span class="str"&gt;'p'&lt;/span&gt;
            &lt;span class="kwrd"&gt;then&lt;/span&gt; &lt;span class="str"&gt;'procedure'&lt;/span&gt;
        &lt;span class="kwrd"&gt;when&lt;/span&gt; &lt;span class="str"&gt;'tr'&lt;/span&gt;
            &lt;span class="kwrd"&gt;then&lt;/span&gt; &lt;span class="str"&gt;'trigger'&lt;/span&gt;
        &lt;span class="kwrd"&gt;when&lt;/span&gt; &lt;span class="str"&gt;'u'&lt;/span&gt;
            &lt;span class="kwrd"&gt;then&lt;/span&gt; &lt;span class="str"&gt;'table'&lt;/span&gt;
        &lt;span class="kwrd"&gt;when&lt;/span&gt; &lt;span class="str"&gt;'v'&lt;/span&gt;
            &lt;span class="kwrd"&gt;then&lt;/span&gt; &lt;span class="str"&gt;'view'&lt;/span&gt;
        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;
    &lt;span class="kwrd"&gt;end&lt;/span&gt;
&lt;span class="kwrd"&gt;end&lt;/span&gt;

&lt;span class="kwrd"&gt;set&lt;/span&gt; @stmt = &lt;span class="kwrd"&gt;case&lt;/span&gt;
    &lt;span class="kwrd"&gt;when&lt;/span&gt; @type_name = &lt;span class="str"&gt;'constraint'&lt;/span&gt;
        &lt;span class="kwrd"&gt;then&lt;/span&gt; &lt;span class="str"&gt;'alter table '&lt;/span&gt; + @parent_name + &lt;span class="str"&gt;' drop constraint '&lt;/span&gt; + @name
    &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="str"&gt;'drop '&lt;/span&gt; + @type_name + &lt;span class="str"&gt;' '&lt;/span&gt; + @name
&lt;span class="kwrd"&gt;end&lt;/span&gt;

&lt;span class="kwrd"&gt;if&lt;/span&gt; @stmt &lt;span class="kwrd"&gt;is&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;
&lt;span class="kwrd"&gt;begin&lt;/span&gt;
    &lt;span class="kwrd"&gt;raiserror&lt;/span&gt;(&lt;span class="str"&gt;'No statement to execute. If '&lt;/span&gt;&lt;span class="str"&gt;'%s'&lt;/span&gt;&lt;span class="str"&gt;' is a constraint, make sure to specify the parent'&lt;/span&gt;&lt;span class="str"&gt;'s name'&lt;/span&gt;, 11, 1, @name)
    &lt;span class="kwrd"&gt;return&lt;/span&gt;
&lt;span class="kwrd"&gt;end&lt;/span&gt;
&lt;span class="kwrd"&gt;exec&lt;/span&gt; sp_executesql @stmt
GO&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;

    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Example usage:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;-- Up to 3-part identifiers are accepted&lt;/span&gt;
&lt;span class="kwrd"&gt;exec&lt;/span&gt; dbo.drop_if_exists &lt;span class="str"&gt;'object'&lt;/span&gt;
&lt;span class="kwrd"&gt;exec&lt;/span&gt; dbo.drop_if_exists &lt;span class="str"&gt;'schema.object'&lt;/span&gt;
&lt;span class="kwrd"&gt;exec&lt;/span&gt; dbo.drop_if_exists &lt;span class="str"&gt;'database.schema.object'&lt;/span&gt;

&lt;span class="rem"&gt;-- Quoted identifiers are supported&lt;/span&gt;
&lt;span class="kwrd"&gt;exec&lt;/span&gt; dbo.drop_if_exists &lt;span class="str"&gt;'[quoted schema].[quoted object]'&lt;/span&gt;

&lt;span class="rem"&gt;-- Any valid object reference is supported&lt;/span&gt;
&lt;span class="kwrd"&gt;exec&lt;/span&gt; dbo.drop_if_exists &lt;span class="str"&gt;'database..object'&lt;/span&gt;
&lt;span class="kwrd"&gt;exec&lt;/span&gt; dbo.drop_if_exists &lt;span class="str"&gt;'..object'&lt;/span&gt;
&lt;span class="kwrd"&gt;exec&lt;/span&gt; dbo.drop_if_exists &lt;span class="str"&gt;'.object'&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;If you already have a script full of CREATE statements that don’t try to drop existing objects first, here is a find-replace regular expression you can use to upgrade your script:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Find what:&lt;/strong&gt; &amp;lt;create&amp;gt;:b+:w:b+{.+}&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Replace with:&lt;/strong&gt; exec dbo.drop_if_exists '\1'\nGO\n\0&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;-- Example input&lt;/span&gt;
&lt;span class="kwrd"&gt;create&lt;/span&gt; &lt;span class="kwrd"&gt;table&lt;/span&gt; [&lt;span class="kwrd"&gt;database&lt;/span&gt;].[&lt;span class="kwrd"&gt;schema&lt;/span&gt;].[&lt;span class="kwrd"&gt;table&lt;/span&gt;]

&lt;span class="rem"&gt;-- Example result after find-replace&lt;/span&gt;
&lt;span class="kwrd"&gt;exec&lt;/span&gt; dbo.drop_if_exists &lt;span class="str"&gt;'[database].[schema].[table]'&lt;/span&gt;
&lt;span class="kwrd"&gt;GO&lt;/span&gt;
&lt;span class="kwrd"&gt;create&lt;/span&gt; &lt;span class="kwrd"&gt;table&lt;/span&gt; [&lt;span class="kwrd"&gt;database&lt;/span&gt;].[&lt;span class="kwrd"&gt;schema&lt;/span&gt;].[&lt;span class="kwrd"&gt;table&lt;/span&gt;]&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;

    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;I hope you find this useful in your own T-SQL scripting.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=eF8fOscmwnM:SMv4a0D2nxA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=eF8fOscmwnM:SMv4a0D2nxA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=eF8fOscmwnM:SMv4a0D2nxA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=eF8fOscmwnM:SMv4a0D2nxA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=eF8fOscmwnM:SMv4a0D2nxA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/eF8fOscmwnM" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/eF8fOscmwnM/T-SQL_Drop_If_Exists_2_0.aspx</link>
      <author>Adam Anderson</author>
      <comments>http://blog.falafel.com/Blogs/11-12-22/T-SQL_Drop_If_Exists_2_0.aspx</comments>
      <guid isPermaLink="false">09b43500-d5a6-452e-8671-59a921a28c3a</guid>
      <pubDate>Thu, 22 Dec 2011 22:32:36 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-12-22/T-SQL_Drop_If_Exists_2_0.aspx</feedburner:origLink></item>
    <item>
      <title>Falafel and Iciniti Announce Sitefinity Training Partnership</title>
      <description>&lt;p&gt;Capitola, CA December 21th, 2011 - Falafel Software and Iciniti today announced a partnership that will bundle Sitefinity training from Falafel with every sale of Iciniti’s eCommSuite 5 package.&lt;/p&gt; &lt;p&gt;For over 13 years, Iciniti Store has allowed customers to create customized shopping carts that are fully integrated with Sage Accpac ERP. Now, with the introduction of eCommSuite 5, customers can use Telerik’s Sitefinity CMS to manage all of their web content, not just their shopping cart. To ensure that every eCommSuite customer is comfortable working in Sitefinity, Iciniti turned to Telerik’s long time training partner, Falafel Software.&lt;/p&gt; &lt;p&gt;“Iciniti has created an impressive mid-market ecommerce package, and we are honored they choose us to be part of It.” said Mike Dugan, Falafel’s Director of Marketing. “Sitefinity is one of our specialties, and we can’t wait to show Iciniti’s customers how easy it is to use. I think they are going to love what they see.”&lt;/p&gt;
”It was important to Iciniti that our customers get properly trained on not only the web store components of eCommSuite 5 but the CMS functionality as well” said Bill Parkinson, President of Iciniti Corporation. “Falafel was the logical partner to turn to. All of our staff’s training on Sitefinity has been delivered by Falafel. It just seemed to make sense to get the same level of expert training for our customers.”&lt;br /&gt; &lt;br /&gt;
About Falafel Software&lt;br /&gt;
Falafel Software offers world-class custom software development, training and testing services to companies around the globe. Customers learn to master the latest technologies in instructor-led online training classes, or utilize Falafel's team of Microsoft Certified Professionals to deliver a custom web, mobile or cloud solution. For Sitefinity, Falafel is the original training partner, a Platinum Solution Partner, and has created training videos, courseware, and a mobile application for the award winning CMS. To learn more, visit &lt;a href="http://www.falafel.com" title="Link to Falafel Home page"&gt;http://www.falafel.com&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt; &lt;p&gt;About Iciniti&lt;br /&gt;
Founded in 1999, ICINITI Corporation is the leading supplier of integrated eCommerce Solutions for the Sage ERP Accpac (Sage 300) channel. For thirteen years ICINITI has focused exclusively on the provision of advanced e-Business solutions to mid-market corporations. Iciniti’s reputation is founded on an advanced understanding of what drives e-Business technologies and processes, in addition to the development of a wealth of innovative ideas.&amp;nbsp;To learn more, visit &lt;a href="http://www.iciniti.com" title="Link to Iciniti home page"&gt;http://www.iciniti.com&lt;/a&gt;.&lt;br /&gt; &lt;div&gt;&lt;br /&gt; &lt;/div&gt; &lt;/p&gt; &lt;div&gt;&lt;br /&gt; &lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=mA9084wPoOE:bW7NGJE2d2I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=mA9084wPoOE:bW7NGJE2d2I:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=mA9084wPoOE:bW7NGJE2d2I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=mA9084wPoOE:bW7NGJE2d2I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=mA9084wPoOE:bW7NGJE2d2I:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/mA9084wPoOE" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/mA9084wPoOE/Falafel_and_Iciniti_Announce_Sitefinity_Training_Partnership.aspx</link>
      <author>Mike Dugan</author>
      <comments>http://blog.falafel.com/Blogs/11-12-21/Falafel_and_Iciniti_Announce_Sitefinity_Training_Partnership.aspx</comments>
      <guid isPermaLink="false">7350af03-4025-43ff-a50f-d7c7a9659fad</guid>
      <pubDate>Wed, 21 Dec 2011 20:03:48 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-12-21/Falafel_and_Iciniti_Announce_Sitefinity_Training_Partnership.aspx</feedburner:origLink></item>
    <item>
      <title>EventBoard Gets Rave Review from Industry Blogger</title>
      <description>&lt;p&gt;Falafel's mobile conference application, EventBoard (&lt;a href="http://www.eventboardmobile.com" title="Link to EventBoard home page"&gt;http://www.eventboardmobile.com&lt;/a&gt;), just keeps knocking it out of the park. Most recently, a review at EventManagerBlog.com praises the application.&lt;/p&gt; &lt;p&gt;For those not in the event management industry, EventManagerBlog.com is one of the most well respected and well known event management blogs in the world. Author, Julius Solaris recently had an opportunity to experience EventBoard first hand, and has posted his review online. His take?.... “it’s a kick ass mobile conference programme maker.” Read the rest of the review here:&amp;nbsp;&lt;a href="http://www.eventmanagerblog.com/mobile/eventboard" title="Link to EventBoard review"&gt;http://www.eventmanagerblog.com/mobile/eventboard&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=7HOH1yQPuvY:syRRx1J5I0A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=7HOH1yQPuvY:syRRx1J5I0A:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=7HOH1yQPuvY:syRRx1J5I0A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=7HOH1yQPuvY:syRRx1J5I0A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=7HOH1yQPuvY:syRRx1J5I0A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/7HOH1yQPuvY" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/7HOH1yQPuvY/EventBoard_Gets_Rave_Review_from_Industry_Blogger.aspx</link>
      <author>Mike Dugan</author>
      <comments>http://blog.falafel.com/Blogs/11-12-20/EventBoard_Gets_Rave_Review_from_Industry_Blogger.aspx</comments>
      <guid isPermaLink="false">4d624485-d643-4046-93bb-f3671c030c55</guid>
      <pubDate>Tue, 20 Dec 2011 19:22:56 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-12-20/EventBoard_Gets_Rave_Review_from_Industry_Blogger.aspx</feedburner:origLink></item>
    <item>
      <title>Basic XNA Graphics for the WP7</title>
      <description>&lt;p&gt;With Christmas coming up soon, what better blog can a nerdy geek come up with than to explain how to draw a Santa hat on the WP7 using the XNA Graphics Framework.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-SantaHat_2.sflb.ashx"&gt;&lt;img style="background-image: none;  padding-left: 0px; padding-right: 0px; display: inline;    padding-top: 0px;    border-width: 0px;border-style: solid;" title="SantaHat" alt="SantaHat" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-SantaHat_thumb.sflb.ashx" width="322" height="472" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I’ve been working with computer graphics on and off for most of my 20+ year career. For me, it all started with OpenGL in the early 90’s. Since then I’ve worked with DirectX and now XNA. It’s amazing how little things have changed over that time. All those frameworks are based on triangles and arrays of vertices and normals. When you learn one of those frameworks, you can quickly learn the others. &lt;/p&gt; &lt;p&gt;When I first started looking at graphics with the WP7, I started with the &lt;a href="http://mangoteapot.codeplex.com/" target="_blank"&gt;Mango Teacup&lt;/a&gt; example. In that example, the 3D teacup drawing was handled by a class called Teapot. This class handles the initialization and drawing of the triangles, vertices, normals, positioning, lighting, color, and effects that make up the teapot. Digging into the meat of that class, what made the teapot a teapot came down to just three lines of code.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;&lt;span class="rem"&gt;// Teapot Data&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span class="kwrd"&gt;float&lt;/span&gt;[] positions = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt;[] { 0.6788729f, 0.330678f, blah, blah, blah&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;float&lt;/span&gt;[] normals = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt;[] { -0.9457507f, -0.3222559f, blah, blah, blah&lt;/pre&gt; &lt;pre&gt;indices = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;ushort&lt;/span&gt;[] { 0, 7, 8, blah, blah, blah&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I added the “blah, blah, blah” because each of these arrays was a massive list of numbers that defined the shape of the teapot, which is not really something you can tweak to get some other shape easily. However, the class did make a good template to start with, and with just a few changes, I came up with a base class to handle most any graphics object.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; BaseXNAObject&lt;/pre&gt; &lt;pre&gt;{&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;protected&lt;/span&gt; VertexBuffer vertexBuffer;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;protected&lt;/span&gt; IndexBuffer indexBuffer;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; numVertices;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; numElements;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;protected&lt;/span&gt; BasicEffect effect;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; Vector4 eye = &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector4(0f, 0f, 5, 1);&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; Vector4 light = &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector4(10, 10, 10, 1);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; Vector4 diffuse = &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector4(1, 0, 0, 1);&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; Vector4 specular = &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector4(1, 1, 1, 32);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;protected&lt;/span&gt; VertexPositionNormal[] vpn;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;struct&lt;/span&gt; VertexPositionNormal : IVertexType&lt;/pre&gt; &lt;pre&gt;    {&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; Vector3 _vertexPosition;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; Vector3 _vertexNormal;&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; Vector3 Position&lt;/pre&gt; &lt;pre class="alt"&gt;        {&lt;/pre&gt; &lt;pre&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _vertexPosition; }&lt;/pre&gt; &lt;pre class="alt"&gt;            set { _vertexPosition = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }&lt;/pre&gt; &lt;pre&gt;        }&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; Vector3 Normal&lt;/pre&gt; &lt;pre&gt;        {&lt;/pre&gt; &lt;pre class="alt"&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _vertexNormal; }&lt;/pre&gt; &lt;pre&gt;            set { _vertexNormal = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }&lt;/pre&gt; &lt;pre class="alt"&gt;        }&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; VertexPositionNormal(&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt; positionX, &lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt; positionY, &lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt; positionZ, &lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt; normalX, &lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt; normalY, &lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt; normalZ)&lt;/pre&gt; &lt;pre class="alt"&gt;        {&lt;/pre&gt; &lt;pre&gt;            _vertexPosition = &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(positionX, positionY, positionZ);&lt;/pre&gt; &lt;pre class="alt"&gt;            _vertexNormal = &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(normalX, normalY, normalZ);&lt;/pre&gt; &lt;pre&gt;        }&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; VertexDeclaration VertexDeclaration = &lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; VertexDeclaration(&lt;span class="kwrd"&gt;new&lt;/span&gt; VertexElement(&lt;/pre&gt; &lt;pre class="alt"&gt;                0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0),&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; VertexElement(&lt;/pre&gt; &lt;pre class="alt"&gt;                12, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0)&lt;/pre&gt; &lt;pre&gt;        );&lt;/pre&gt; &lt;pre class="alt"&gt;        VertexDeclaration IVertexType.VertexDeclaration&lt;/pre&gt; &lt;pre&gt;        {&lt;/pre&gt; &lt;pre class="alt"&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; VertexDeclaration; }&lt;/pre&gt; &lt;pre&gt;        }&lt;/pre&gt; &lt;pre class="alt"&gt;    }&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; Matrix World { get; set; }&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; Matrix View { get; set; }&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; Matrix Projection { get; set; }&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt; Shininess { get; set; }&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; NumberOfVertices&lt;/pre&gt; &lt;pre&gt;    {&lt;/pre&gt; &lt;pre class="alt"&gt;        get&lt;/pre&gt; &lt;pre&gt;        {&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; numVertices;&lt;/pre&gt; &lt;pre&gt;        }&lt;/pre&gt; &lt;pre class="alt"&gt;    }&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; BaseXNAObject(GraphicsDevice device, Color solidColor)&lt;/pre&gt; &lt;pre&gt;    {&lt;/pre&gt; &lt;pre class="alt"&gt;        List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; points = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt;();&lt;/pre&gt; &lt;pre&gt;        List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; normals = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt;();&lt;/pre&gt; &lt;pre class="alt"&gt;        List&amp;lt;&lt;span class="kwrd"&gt;ushort&lt;/span&gt;&amp;gt; indices = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;ushort&lt;/span&gt;&amp;gt;();&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;        BuildGraphics(device, points, normals, indices);&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt;[] positions = points.ToArray();&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt;[] normalsArray = normals.ToArray();&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;ushort&lt;/span&gt;[] indicesArray = indices.ToArray();&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;        numVertices = positions.Length / 3;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="rem"&gt;// Create Vertex Buffer            &lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;        vpn = &lt;span class="kwrd"&gt;new&lt;/span&gt; VertexPositionNormal[numVertices];&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; NumberOfVertices; i++)&lt;/pre&gt; &lt;pre&gt;        {&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; s = i * 3;&lt;/pre&gt; &lt;pre&gt;            vpn[i] = &lt;span class="kwrd"&gt;new&lt;/span&gt; VertexPositionNormal(&lt;/pre&gt; &lt;pre class="alt"&gt;                positions[s + 0], positions[s + 1], positions[s + 2],&lt;/pre&gt; &lt;pre&gt;                normalsArray[s + 0], normalsArray[s + 1], normalsArray[s + 2]);&lt;/pre&gt; &lt;pre class="alt"&gt;        }&lt;/pre&gt; &lt;pre&gt;        vertexBuffer = &lt;span class="kwrd"&gt;new&lt;/span&gt; VertexBuffer(&lt;/pre&gt; &lt;pre class="alt"&gt;            device, VertexPositionNormal.VertexDeclaration, &lt;/pre&gt; &lt;pre&gt;            numVertices, BufferUsage.None);&lt;/pre&gt; &lt;pre class="alt"&gt;        vertexBuffer.SetData(0, vpn, 0, numVertices, 0);&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="rem"&gt;// Create Index Buffer&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;        indexBuffer = &lt;span class="kwrd"&gt;new&lt;/span&gt; IndexBuffer(device, IndexElementSize.SixteenBits, &lt;/pre&gt; &lt;pre class="alt"&gt;            indicesArray.Length, BufferUsage.None);&lt;/pre&gt; &lt;pre&gt;        indexBuffer.SetData(0, indicesArray, 0, indicesArray.Length);&lt;/pre&gt; &lt;pre class="alt"&gt;        numElements = indicesArray.Length / 3;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="rem"&gt;// Setup Default Matices&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.World = Matrix.Identity;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.View = Matrix.CreateLookAt(&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(eye.X, eye.Y, eye.Z), &lt;/pre&gt; &lt;pre class="alt"&gt;            Vector3.Zero, Vector3.Up);&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt; aspectRatio = device.Viewport.AspectRatio;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Projection = Matrix.CreatePerspectiveFieldOfView(&lt;/pre&gt; &lt;pre&gt;            MathHelper.PiOver4, aspectRatio, 1.0f, 50.0f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="rem"&gt;//Shininess&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Shininess = 64f;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="rem"&gt;// BasicEffect&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;        effect = &lt;span class="kwrd"&gt;new&lt;/span&gt; BasicEffect(device);&lt;/pre&gt; &lt;pre class="alt"&gt;        effect.EnableDefaultLighting();&lt;/pre&gt; &lt;pre&gt;        effect.DiffuseColor = solidColor.ToVector3();&lt;/pre&gt; &lt;pre class="alt"&gt;        effect.PreferPerPixelLighting = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt; &lt;pre&gt;    }&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BuildGraphics(GraphicsDevice device, &lt;/pre&gt; &lt;pre class="alt"&gt;        List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; points, List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; normals, List&amp;lt;&lt;span class="kwrd"&gt;ushort&lt;/span&gt;&amp;gt; indices);&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Draw(GraphicsDevice device)&lt;/pre&gt; &lt;pre&gt;    {&lt;/pre&gt; &lt;pre class="alt"&gt;        device.RasterizerState = RasterizerState.CullClockwise;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="rem"&gt;// Set VertexBuffer and IndexBuffer&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;        device.SetVertexBuffer(vertexBuffer);&lt;/pre&gt; &lt;pre class="alt"&gt;        device.Indices = indexBuffer;&lt;/pre&gt; &lt;pre&gt;        device.DepthStencilState = DepthStencilState.Default;&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt; &lt;span class="rem"&gt;// Set BasicEffect parameters&lt;/span&gt;&lt;/pre&gt; &lt;pre class="alt"&gt;        effect.World = &lt;span class="kwrd"&gt;this&lt;/span&gt;.World;&lt;/pre&gt; &lt;pre&gt;        effect.View = &lt;span class="kwrd"&gt;this&lt;/span&gt;.View;&lt;/pre&gt; &lt;pre class="alt"&gt;        effect.Projection = &lt;span class="kwrd"&gt;this&lt;/span&gt;.Projection;&lt;/pre&gt; &lt;pre&gt;        effect.SpecularPower = &lt;span class="kwrd"&gt;this&lt;/span&gt;.Shininess;&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt; &lt;span class="rem"&gt;// Finally Draw Indexed Primitives&lt;/span&gt;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (EffectPass p &lt;span class="kwrd"&gt;in&lt;/span&gt; effect.CurrentTechnique.Passes)&lt;/pre&gt; &lt;pre&gt;        {&lt;/pre&gt; &lt;pre class="alt"&gt;            p.Apply();&lt;/pre&gt; &lt;pre&gt;            device.DrawIndexedPrimitives(PrimitiveType.TriangleList, &lt;/pre&gt; &lt;pre class="alt"&gt;                0, 0, numVertices, 0, numElements);&lt;/pre&gt; &lt;pre&gt;        }&lt;/pre&gt; &lt;pre class="alt"&gt;    }&lt;/pre&gt; &lt;pre&gt;}&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In place of those nasty arrays, I added the following lines:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; points = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt;();&lt;/pre&gt; &lt;pre&gt;List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; normals = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt;();&lt;/pre&gt; &lt;pre class="alt"&gt;List&amp;lt;&lt;span class="kwrd"&gt;ushort&lt;/span&gt;&amp;gt; indices = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;ushort&lt;/span&gt;&amp;gt;();&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;BuildGraphics(device, points, normals, indices);&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;BuildGraphics is an abstract method that will handle the actual building of the graphics in inherited classes.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BuildGraphics(GraphicsDevice device, &lt;/pre&gt; &lt;pre&gt;    List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; points, List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; normals, List&amp;lt;&lt;span class="kwrd"&gt;ushort&lt;/span&gt;&amp;gt; indices);&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;As for the rest of this base class and how it fits into the parent project, I’ll cover that in another blog. This blog is going to deal with how to draw the parts for a Santa hat with the given base class.&lt;/p&gt; &lt;p&gt;To start off with, let’s see what it takes to draw the most basic graphic, a triangle. It has three vertices.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-Simple_Triangle_4.sflb.ashx"&gt;&lt;img style="border:0px;background-image: none;       padding-left: 0px; padding-right: 0px; display: inline;       padding-top: 0px;" title="Simple Triangle" alt="Simple Triangle" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-Simple_Triangle_thumb_1.sflb.ashx" width="311" height="316" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;For each vertex, we need to define the normal vector. The normal vector is the vector that defines the normal of the surface at that point. If you’re interested in knowing more about normal vectors (we are using the &lt;a href="http://en.wikipedia.org/wiki/Right-hand_rule" target="_blank"&gt;right hand rule&lt;/a&gt;) and how to calculate them, &lt;a href="http://en.wikipedia.org/wiki/Surface_normal" target="_blank"&gt;look here&lt;/a&gt;. In this case, each of our vertices would have the same normal vector (0,0,1). &lt;/p&gt; &lt;p&gt;In our abstract BuildGraphics method, you can see parameters for an array of points, normals, and indices. For our triangle, we’ve gotten our points and normals defined. Now we just need to fill in the indices array, which is basically to define what vertices are drawn in which order by the index (zero indexed) of the vertices in the vertex array. In this case, it’s very simple, (0,1,2). The resulting class for the simple triangle is:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Triangle: BaseXNAObject&lt;/pre&gt; &lt;pre&gt;{&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; Triangle(GraphicsDevice device, Color solidColor)&lt;/pre&gt; &lt;pre&gt;        : &lt;span class="kwrd"&gt;base&lt;/span&gt;(device, solidColor)&lt;/pre&gt; &lt;pre class="alt"&gt;    { }&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BuildGraphics(&lt;/pre&gt; &lt;pre&gt;        GraphicsDevice device, &lt;/pre&gt; &lt;pre class="alt"&gt;        List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; points, &lt;/pre&gt; &lt;pre&gt;        List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; normals, &lt;/pre&gt; &lt;pre class="alt"&gt;        List&amp;lt;&lt;span class="kwrd"&gt;ushort&lt;/span&gt;&amp;gt; indices)&lt;/pre&gt; &lt;pre&gt;    {&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Vertex 1&lt;/pre&gt; &lt;pre&gt;        points.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt;        points.Add(0f);&lt;/pre&gt; &lt;pre&gt;        points.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Vertex 2&lt;/pre&gt; &lt;pre&gt;        points.Add(1f);&lt;/pre&gt; &lt;pre class="alt"&gt;        points.Add(0f);&lt;/pre&gt; &lt;pre&gt;        points.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Vertex 3&lt;/pre&gt; &lt;pre&gt;        points.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt;        points.Add(1f);&lt;/pre&gt; &lt;pre&gt;        points.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Normal 1&lt;/pre&gt; &lt;pre&gt;        normals.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt;        normals.Add(0f);&lt;/pre&gt; &lt;pre&gt;        normals.Add(1f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Normal 2&lt;/pre&gt; &lt;pre&gt;        normals.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt;        normals.Add(0f);&lt;/pre&gt; &lt;pre&gt;        normals.Add(1f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Normal 3&lt;/pre&gt; &lt;pre&gt;        normals.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt;        normals.Add(0f);&lt;/pre&gt; &lt;pre&gt;        normals.Add(1f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Indices&lt;/pre&gt; &lt;pre&gt;        indices.Add(0);&lt;/pre&gt; &lt;pre class="alt"&gt;        indices.Add(1);&lt;/pre&gt; &lt;pre&gt;        indices.Add(2);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt; &lt;/pre&gt; &lt;pre&gt;    }&lt;/pre&gt; &lt;pre class="alt"&gt;}&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The result of this code is:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-Triangle_2.sflb.ashx"&gt;&lt;img style="background-image: none;  padding-left: 0px; padding-right: 0px; display: inline;    padding-top: 0px;    border-width: 0px;border-style: solid;" title="Triangle" alt="Triangle" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-Triangle_thumb.sflb.ashx" width="224" height="332" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;As you can see, the points and normals array are both an array of floats. The vectors are actually made up by grouping the values into groups of three floats. &lt;/p&gt; &lt;p&gt;Adding another triangle to our simple triangle gives us a square. You can just continue to get a strip of triangles and thus a surface for your object.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-Simple_Square_2.sflb.ashx"&gt;&lt;img style="background-image: none;  padding-left: 0px; padding-right: 0px; display: inline;    padding-top: 0px;    border-width: 0px;border-style: solid;" title="Simple Square" alt="Simple Square" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-Simple_Square_thumb.sflb.ashx" width="223" height="244" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;To extend our triangle class into a square class, we just need to add Vertex 4 and its normal to define another triangle. However, we need to add three more indices. Just like the points and normal arrays are grouped in threes, the indices are grouped into threes for each triangle. The new overridden method now looks like this.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BuildGraphics(&lt;/pre&gt; &lt;pre&gt;    GraphicsDevice device, &lt;/pre&gt; &lt;pre class="alt"&gt;    List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; points, &lt;/pre&gt; &lt;pre&gt;    List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; normals, &lt;/pre&gt; &lt;pre class="alt"&gt;    List&amp;lt;&lt;span class="kwrd"&gt;ushort&lt;/span&gt;&amp;gt; indices)&lt;/pre&gt; &lt;pre&gt;{&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Vertex 1&lt;/pre&gt; &lt;pre&gt;    points.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt;    points.Add(0f);&lt;/pre&gt; &lt;pre&gt;    points.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Vertex 2&lt;/pre&gt; &lt;pre&gt;    points.Add(1f);&lt;/pre&gt; &lt;pre class="alt"&gt;    points.Add(0f);&lt;/pre&gt; &lt;pre&gt;    points.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Vertex 3&lt;/pre&gt; &lt;pre&gt;    points.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt;    points.Add(1f);&lt;/pre&gt; &lt;pre&gt;    points.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Vertex 4&lt;/pre&gt; &lt;pre&gt;    points.Add(1f);&lt;/pre&gt; &lt;pre class="alt"&gt;    points.Add(1f);&lt;/pre&gt; &lt;pre&gt;    points.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Normal 1&lt;/pre&gt; &lt;pre&gt;    normals.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt;    normals.Add(0f);&lt;/pre&gt; &lt;pre&gt;    normals.Add(1f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Normal 2&lt;/pre&gt; &lt;pre&gt;    normals.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt;    normals.Add(0f);&lt;/pre&gt; &lt;pre&gt;    normals.Add(1f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Normal 3&lt;/pre&gt; &lt;pre&gt;    normals.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt;    normals.Add(0f);&lt;/pre&gt; &lt;pre&gt;    normals.Add(1f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Normal 4&lt;/pre&gt; &lt;pre&gt;    normals.Add(0f);&lt;/pre&gt; &lt;pre class="alt"&gt;    normals.Add(0f);&lt;/pre&gt; &lt;pre&gt;    normals.Add(1f);&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="preproc"&gt;#region&lt;/span&gt; Indices&lt;/pre&gt; &lt;pre&gt;    indices.Add(0);&lt;/pre&gt; &lt;pre class="alt"&gt;    indices.Add(1);&lt;/pre&gt; &lt;pre&gt;    indices.Add(2);&lt;/pre&gt; &lt;pre class="alt"&gt;    indices.Add(2);&lt;/pre&gt; &lt;pre&gt;    indices.Add(1);&lt;/pre&gt; &lt;pre class="alt"&gt;    indices.Add(3);&lt;/pre&gt; &lt;pre&gt; &lt;span class="preproc"&gt;#endregion&lt;/span&gt; &lt;/pre&gt; &lt;pre class="alt"&gt;}&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Here you can see that the indices array is not so simple anymore. We are actually defining how our triangles are drawn, and the order in which you define the vertex indices is important. The first triangle is simple enough. It is defined by the first three vertices in order (0,1,2). Because we are using the &lt;a href="http://en.wikipedia.org/wiki/Right-hand_rule" target="_blank"&gt;right hand rule&lt;/a&gt; for our normals, to define the second triangle we need to start with the third vertex (index 2), then the second (index 1), and finally the fourth (index 3). The result on the phone is:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-Square_2.sflb.ashx"&gt;&lt;img style="background-image: none;  padding-left: 0px; padding-right: 0px; display: inline;    padding-top: 0px;    border-width: 0px;border-style: solid;" title="Square" alt="Square" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-Square_thumb.sflb.ashx" width="166" height="244" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Armed with the ability to draw a triangle and square, you can now draw any shape you need. In my previous WP7 blogs (&lt;a href="http://blog.falafel.com/blogs/barynusz/11-11-21/WP7_Attitude_and_Magnetometer_UPDATE_with_HTC_Titan.aspx" target="_blank"&gt;here&lt;/a&gt;, &lt;a href="http://blog.falafel.com/blogs/11-11-11/Silverlight_XNA_and_Correcting_WP7_Attitude_Alignment.aspx" target="_blank"&gt;here&lt;/a&gt;, and &lt;a href="http://blog.falafel.com/blogs/11-11-16/Showing_the_WP7_Magnetometer_in_3D_with_XNA_Silverlight.aspx" target="_blank"&gt;here&lt;/a&gt;), you see that I’m drawing arrows. These arrows are symmetrical along a single axis. So I need to draw a strip of triangles in a circle to form a loop. To do this I added a new static function to my BaseXNAObject class.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BuildStripLoop(&lt;span class="kwrd"&gt;int&lt;/span&gt; numberAround, &lt;/pre&gt; &lt;pre&gt;    List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; points, List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; normals, List&amp;lt;&lt;span class="kwrd"&gt;ushort&lt;/span&gt;&amp;gt; indices, &lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt; bottom, &lt;span class="kwrd"&gt;float&lt;/span&gt; top, &lt;span class="kwrd"&gt;float&lt;/span&gt; bottomScale, &lt;span class="kwrd"&gt;float&lt;/span&gt; topScale)&lt;/pre&gt; &lt;pre&gt;{&lt;/pre&gt; &lt;pre class="alt"&gt;    Vector3 mypoint = Vector3.Right;&lt;/pre&gt; &lt;pre&gt;    Vector3 normal;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;ushort&lt;/span&gt; index;&lt;/pre&gt; &lt;pre&gt;    Vector3 one;&lt;/pre&gt; &lt;pre class="alt"&gt;    Vector3 two;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; current;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt; incAround = 360 / numberAround;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; startCount = points.Count;&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; numberAround; i++)&lt;/pre&gt; &lt;pre class="alt"&gt;    {&lt;/pre&gt; &lt;pre&gt;        Matrix rotation = Matrix.CreateFromYawPitchRoll(&lt;/pre&gt; &lt;pre class="alt"&gt;            MathHelper.ToRadians(i * incAround), 0, 0);&lt;/pre&gt; &lt;pre&gt;        Vector4 point = Vector4.Transform(mypoint, rotation);&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt;        points.Add(point.X * topScale);&lt;/pre&gt; &lt;pre class="alt"&gt;        points.Add(top);&lt;/pre&gt; &lt;pre&gt;        points.Add(point.Z * topScale);&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt;        points.Add(point.X * bottomScale);&lt;/pre&gt; &lt;pre class="alt"&gt;        points.Add(bottom);&lt;/pre&gt; &lt;pre&gt;        points.Add(point.Z * bottomScale);&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (points.Count &amp;gt;= (startCount + 12))&lt;/pre&gt; &lt;pre class="alt"&gt;        {&lt;/pre&gt; &lt;pre&gt;            current = points.Count - 1;&lt;/pre&gt; &lt;pre class="alt"&gt;            one = &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[current - 11], &lt;/pre&gt; &lt;pre&gt;                points[current - 10], points[current - 9]) - &lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[current - 8], &lt;/pre&gt; &lt;pre&gt;                    points[current - 7], points[current - 6]);&lt;/pre&gt; &lt;pre class="alt"&gt;            two = &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[current - 11], &lt;/pre&gt; &lt;pre&gt;                points[current - 10], points[current - 9]) - &lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[current - 5], &lt;/pre&gt; &lt;pre&gt;                    points[current - 4], points[current - 3]);&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt;            normal = Vector3.Normalize(Vector3.Cross(two, one));&lt;/pre&gt; &lt;pre class="alt"&gt;            normals.Add(normal.X);&lt;/pre&gt; &lt;pre&gt;            normals.Add(normal.Y);&lt;/pre&gt; &lt;pre class="alt"&gt;            normals.Add(normal.Z);&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;            one = &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[current - 5], &lt;/pre&gt; &lt;pre&gt;                points[current - 4], points[current - 3]) - &lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[current - 8], &lt;/pre&gt; &lt;pre&gt;                    points[current - 7], points[current - 6]);&lt;/pre&gt; &lt;pre class="alt"&gt;            two = &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[current - 5], &lt;/pre&gt; &lt;pre&gt;                points[current - 4], points[current - 3]) - &lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[current - 2], &lt;/pre&gt; &lt;pre&gt;                    points[current - 1], points[current]);&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt;            normal = Vector3.Normalize(Vector3.Cross(two, one));&lt;/pre&gt; &lt;pre class="alt"&gt;            normals.Add(normal.X);&lt;/pre&gt; &lt;pre&gt;            normals.Add(normal.Y);&lt;/pre&gt; &lt;pre class="alt"&gt;            normals.Add(normal.Z);&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;            index = (&lt;span class="kwrd"&gt;ushort&lt;/span&gt;)((startCount / 3) + i * 2);&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;            indices.Add((&lt;span class="kwrd"&gt;ushort&lt;/span&gt;)(index - 2));&lt;/pre&gt; &lt;pre&gt;            indices.Add((&lt;span class="kwrd"&gt;ushort&lt;/span&gt;)(index - 1));&lt;/pre&gt; &lt;pre class="alt"&gt;            indices.Add((&lt;span class="kwrd"&gt;ushort&lt;/span&gt;)index);&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;            indices.Add((&lt;span class="kwrd"&gt;ushort&lt;/span&gt;)(index));&lt;/pre&gt; &lt;pre&gt;            indices.Add((&lt;span class="kwrd"&gt;ushort&lt;/span&gt;)(index - 1));&lt;/pre&gt; &lt;pre class="alt"&gt;            indices.Add((&lt;span class="kwrd"&gt;ushort&lt;/span&gt;)(index + 1));&lt;/pre&gt; &lt;pre&gt;        }&lt;/pre&gt; &lt;pre class="alt"&gt;    }&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;    index = (&lt;span class="kwrd"&gt;ushort&lt;/span&gt;)((startCount / 3) + numberAround * 2);&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;    current = points.Count - 1;&lt;/pre&gt; &lt;pre&gt;    one = &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[current - 5], &lt;/pre&gt; &lt;pre class="alt"&gt;        points[current - 4], points[current - 3]) - &lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[current - 2], &lt;/pre&gt; &lt;pre class="alt"&gt;            points[current - 1], points[current]);&lt;/pre&gt; &lt;pre&gt;    two = &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[current - 5], &lt;/pre&gt; &lt;pre class="alt"&gt;        points[current - 4], points[current - 3]) - &lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[startCount], &lt;/pre&gt; &lt;pre class="alt"&gt;            points[startCount + 1], points[startCount + 2]);&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;    normal = Vector3.Normalize(Vector3.Cross(two, one));&lt;/pre&gt; &lt;pre&gt;    normals.Add(normal.X);&lt;/pre&gt; &lt;pre class="alt"&gt;    normals.Add(normal.Y);&lt;/pre&gt; &lt;pre&gt;    normals.Add(normal.Z);&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt;    one = &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[startCount], &lt;/pre&gt; &lt;pre class="alt"&gt;        points[startCount + 1], points[startCount + 2]) - &lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[current - 2], &lt;/pre&gt; &lt;pre class="alt"&gt;            points[current - 1], points[current]);&lt;/pre&gt; &lt;pre&gt;    two = &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[startCount], &lt;/pre&gt; &lt;pre class="alt"&gt;        points[startCount + 1], points[startCount + 2]) - &lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Vector3(points[startCount + 3], &lt;/pre&gt; &lt;pre class="alt"&gt;            points[startCount + 4], points[startCount + 5]);&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;    normal = Vector3.Normalize(Vector3.Cross(two, one));&lt;/pre&gt; &lt;pre&gt;    normals.Add(normal.X);&lt;/pre&gt; &lt;pre class="alt"&gt;    normals.Add(normal.Y);&lt;/pre&gt; &lt;pre&gt;    normals.Add(normal.Z);&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt;    indices.Add((&lt;span class="kwrd"&gt;ushort&lt;/span&gt;)(index - 2));&lt;/pre&gt; &lt;pre class="alt"&gt;    indices.Add((&lt;span class="kwrd"&gt;ushort&lt;/span&gt;)(index - 1));&lt;/pre&gt; &lt;pre&gt;    indices.Add((&lt;span class="kwrd"&gt;ushort&lt;/span&gt;)(startCount / 3));&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt;    indices.Add((&lt;span class="kwrd"&gt;ushort&lt;/span&gt;)((startCount / 3)));&lt;/pre&gt; &lt;pre class="alt"&gt;    indices.Add((&lt;span class="kwrd"&gt;ushort&lt;/span&gt;)(index - 1));&lt;/pre&gt; &lt;pre&gt;    indices.Add((&lt;span class="kwrd"&gt;ushort&lt;/span&gt;)((startCount / 3) + 1));&lt;/pre&gt; &lt;pre class="alt"&gt;}&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Basically this function takes the points, normals, and indices arrays and loads them up with the triangles to get you a symmetrical triangle strip based upon the method we used to construct our triangle and square. The other parameters are used to size and position the triangle loop. The “numberAround” parameter is the number of squares in the strip around the loop. The “top” and “bottom” parameters define the vertical offset of the top and bottom of the strip and the topScale and bottomScale parameters define the radius of the top and bottom circles of the strip.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-Strip_2.sflb.ashx"&gt;&lt;img style="background-image: none;  padding-left: 0px; padding-right: 0px; display: inline;    padding-top: 0px;    border-width: 0px;border-style: solid;" title="Strip" alt="Strip" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-Strip_thumb.sflb.ashx" width="533" height="209" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Now that we have this, we can start to build our Santa hat. The hat brim can be handled with this class:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; HatBrimObject : BaseXNAObject&lt;/pre&gt; &lt;pre&gt;{&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; HatBrimObject(GraphicsDevice device, Color solidColor)&lt;/pre&gt; &lt;pre&gt;        : &lt;span class="kwrd"&gt;base&lt;/span&gt;(device, solidColor)&lt;/pre&gt; &lt;pre class="alt"&gt;    { }&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BuildGraphics(GraphicsDevice device, &lt;/pre&gt; &lt;pre&gt;        List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; points, List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; normals, List&amp;lt;&lt;span class="kwrd"&gt;ushort&lt;/span&gt;&amp;gt; indices)&lt;/pre&gt; &lt;pre class="alt"&gt;    {&lt;/pre&gt; &lt;pre&gt;        BuildStripLoop(72, points, normals, indices, -1.2f, -1.2f, 1f, 1.1f);&lt;/pre&gt; &lt;pre class="alt"&gt;        BuildStripLoop(72, points, normals, indices, -1.2f, -0.8f, 1.1f, 1.1f);&lt;/pre&gt; &lt;pre&gt;        BuildStripLoop(72, points, normals, indices, -0.8f, -0.8f, 1.1f, 1f);&lt;/pre&gt; &lt;pre class="alt"&gt;    }&lt;/pre&gt; &lt;pre&gt;}&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;This builds three strips for us: the bottom, side, and top of the brim.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-brim_2.sflb.ashx"&gt;&lt;img style="background-image: none;  padding-left: 0px; padding-right: 0px; display: inline;    padding-top: 0px;    border-width: 0px;border-style: solid;" title="brim" alt="brim" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-brim_thumb.sflb.ashx" width="162" height="244" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The red part of the hat is handled with this class.&lt;/p&gt; &lt;div class="csharpcode"&gt;&amp;nbsp;&lt;/div&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; HatObject : BaseXNAObject&lt;/pre&gt; &lt;pre&gt;{&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; HatObject(GraphicsDevice device, Color solidColor)&lt;/pre&gt; &lt;pre&gt;        : &lt;span class="kwrd"&gt;base&lt;/span&gt;(device, solidColor)&lt;/pre&gt; &lt;pre class="alt"&gt;    { }&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BuildGraphics(GraphicsDevice device, &lt;/pre&gt; &lt;pre&gt;        List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; points, List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; normals, List&amp;lt;&lt;span class="kwrd"&gt;ushort&lt;/span&gt;&amp;gt; indices)&lt;/pre&gt; &lt;pre class="alt"&gt;    {&lt;/pre&gt; &lt;pre&gt;        BuildStripLoop(72, points, normals, indices, -0.8f, 0.5f, 1f, 0.5f);&lt;/pre&gt; &lt;pre class="alt"&gt;        BuildStripLoop(72, points, normals, indices, 0.5f, 1.5f, 0.5f, 0.01f);&lt;/pre&gt; &lt;pre&gt;    }&lt;/pre&gt; &lt;pre class="alt"&gt;}&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;div class="csharpcode"&gt;&amp;nbsp;&lt;/div&gt; &lt;p&gt;This gives us the red parts with two strips. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-hat1_2.sflb.ashx"&gt;&lt;img style="background-image: none;  padding-left: 0px; padding-right: 0px; display: inline;    padding-top: 0px;    border-width: 0px;border-style: solid;" title="hat1" alt="hat1" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-hat1_thumb.sflb.ashx" width="162" height="244" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The little ball on top takes a bit more math. We have to calculate how to construct a number of strips into a sphere. The class for this is here:&lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; HatTopObject : BaseXNAObject&lt;/pre&gt; &lt;pre&gt;{&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; HatTopObject(GraphicsDevice device, Color solidColor)&lt;/pre&gt; &lt;pre&gt;        : &lt;span class="kwrd"&gt;base&lt;/span&gt;(device, solidColor)&lt;/pre&gt; &lt;pre class="alt"&gt;    { }&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BuildGraphics(GraphicsDevice device, &lt;/pre&gt; &lt;pre&gt;        List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; points, List&amp;lt;&lt;span class="kwrd"&gt;float&lt;/span&gt;&amp;gt; normals, List&amp;lt;&lt;span class="kwrd"&gt;ushort&lt;/span&gt;&amp;gt; indices)&lt;/pre&gt; &lt;pre class="alt"&gt;    {&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; radius = 0.2;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; verticalOffset = 1.5;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; start, end;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; verticalSteps = 72; &lt;span class="rem"&gt;//Needs to be &amp;lt; 90&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;        start = -verticalSteps / 2;&lt;/pre&gt; &lt;pre class="alt"&gt;        end = -start;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; verticalInc = 180.0 / verticalSteps;&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = start; i &amp;lt; end; i++)&lt;/pre&gt; &lt;pre class="alt"&gt;        {&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt; angleD = i * (&lt;span class="kwrd"&gt;float&lt;/span&gt;)verticalInc;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (angleD == -90) angleD = -89;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; angle = (&lt;span class="kwrd"&gt;double&lt;/span&gt;)MathHelper.ToRadians(angleD);&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; x1 = Math.Sin(angle) * radius + verticalOffset;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; y1 = Math.Cos(angle) * radius;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;            angleD = (i + 1) * (&lt;span class="kwrd"&gt;float&lt;/span&gt;)verticalInc;&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (angleD == 90) angleD = 89;&lt;/pre&gt; &lt;pre class="alt"&gt;            angle = (&lt;span class="kwrd"&gt;double&lt;/span&gt;)MathHelper.ToRadians(angleD);&lt;/pre&gt; &lt;pre&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; x2 = Math.Sin(angle) * radius + verticalOffset;&lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; y2 = Math.Cos(angle) * radius;&lt;/pre&gt; &lt;pre&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;            BuildStripLoop(72, points, normals, indices, &lt;/pre&gt; &lt;pre&gt;                (&lt;span class="kwrd"&gt;float&lt;/span&gt;)x1, (&lt;span class="kwrd"&gt;float&lt;/span&gt;)x2, (&lt;span class="kwrd"&gt;float&lt;/span&gt;)y1, (&lt;span class="kwrd"&gt;float&lt;/span&gt;)y2);&lt;/pre&gt; &lt;pre class="alt"&gt;        }&lt;/pre&gt; &lt;pre&gt;    }&lt;/pre&gt; &lt;pre class="alt"&gt;}&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Now we have the complete hat.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-SantaHat_5.sflb.ashx"&gt;&lt;img style="background-image: none;  padding-left: 0px; padding-right: 0px; display: inline;    padding-top: 0px;    border-width: 0px;border-style: solid;" title="SantaHat" alt="SantaHat" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Basic-XNA-Graphics-for-the-WP7_BCB4-SantaHat_thumb_1.sflb.ashx" width="322" height="472" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I glossed over much of the code for this, such as how to incorporate these classes into a WP7 project to actually draw it on the phone and the details of the static method BuildStripLoop. However, this blog is already far too long and all of that will have to be in another blog. If you can’t wait to get your own Santa Hat, then download the &lt;a href="http://mangoteapot.codeplex.com/" target="_blank"&gt;Mango Teacup&lt;/a&gt; example and replace the Teapot class with the object classes above.&lt;/p&gt; &lt;p&gt;Until then, Merry Christmas and Happy New Year.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=GA51j6Gd7ts:GsT6cgeIsPs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=GA51j6Gd7ts:GsT6cgeIsPs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=GA51j6Gd7ts:GsT6cgeIsPs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=GA51j6Gd7ts:GsT6cgeIsPs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=GA51j6Gd7ts:GsT6cgeIsPs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/GA51j6Gd7ts" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/GA51j6Gd7ts/Basic_XNA_Graphics_for_the_WP7.aspx</link>
      <author>Bary Nusz</author>
      <comments>http://blog.falafel.com/Blogs/11-12-19/Basic_XNA_Graphics_for_the_WP7.aspx</comments>
      <guid isPermaLink="false">db7e34f5-1133-448b-a299-947548a89cc4</guid>
      <pubDate>Mon, 19 Dec 2011 16:45:56 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-12-19/Basic_XNA_Graphics_for_the_WP7.aspx</feedburner:origLink></item>
    <item>
      <title>Building a Mobile Web App using Sencha Touch 2 and MVC</title>
      <description>&lt;p&gt;In my previous post, I showed how to &lt;a href="http://blog.falafel.com/blogs/basememara/11-10-31/Building_an_HTML5_Mobile_App_using_jQuery_Mobile_and_ASP_NET_MVC.aspx"&gt;build a mobile web app using jQuery Mobile&lt;/a&gt;. Its use of HTML5 data attributes and CSS classes made it pretty straightforward, especially if you are used to building regular websites. The architecture of your mobile website would have to be based on the server-side though, whether this be ASP.NET MVC, PHP, Ruby, etc. Then I came across &lt;a href="http://www.sencha.com/products/touch/"&gt;Sencha Touch&lt;/a&gt; which changes this mentality to a more progressive approach… client-side applications!&lt;/p&gt; &lt;p&gt;First let me give you a bit of background about Sencha. These are the guys who made &lt;a href="http://www.sencha.com/products/extjs/"&gt;Ext JS&lt;/a&gt;, a Javascript framework that includes object-oriented programming, UI components, and an available MVC pattern (yes, this is all Javascript!). This very same framework is the core foundation for their mobile web framework called "Touch". I had to mention this because now you see how the architecture will be moved from server-side to client-side.&lt;/p&gt; &lt;h1&gt;Setup the Project&lt;/h1&gt; &lt;p&gt;Let us start a skeleton project so we can build our mobile web application. Normally I would tell you to fire up Visual Studio. Not this time. We need an IDE geared more towards Javascript and HTML5. I saved you the trouble and found that &lt;a href="http://www.jetbrains.com/webstorm/"&gt;JetBrains WebStorm&lt;/a&gt; is the BEST Javascript IDE! I tried Komodo (lots of features), Coda, MacRabbit's Expresso (so pretty), Aptana (bloated hog), TextMate (too basic) and nothing beats WebStorm. It has more than what you would expect from an IDE plus Ext JS intellisense, cross platform compatibility (Windows, Mac, Linux), and TFS support. You should give it a shot.&lt;/p&gt; &lt;p&gt;Once you have created a fresh workspace, add an "index.html" file with the following code.&lt;/p&gt; &lt;p&gt;&lt;em&gt;~/index.html:&lt;/em&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;html&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;head&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;meta&lt;/code&gt; &lt;code style="color: #808080;"&gt;http-equiv&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Content-Type"&lt;/code&gt; &lt;code style="color: #808080;"&gt;content&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"text/html; charset=utf-8"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;title&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;Sencha Touch MVC App&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;title&lt;/code&gt; &lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;link&lt;/code&gt; &lt;code style="color: #808080;"&gt;rel&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"stylesheet"&lt;/code&gt; &lt;code style="color: #808080;"&gt;href&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"lib/sencha/sencha-touch-2.0.0-pr3/resources/css/sencha-touch.css"&lt;/code&gt; &lt;code style="color: #808080;"&gt;type&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"text/css"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;link&lt;/code&gt; &lt;code style="color: #808080;"&gt;rel&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"stylesheet"&lt;/code&gt; &lt;code style="color: #808080;"&gt;href&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"css/styles.css"&lt;/code&gt; &lt;code style="color: #808080;"&gt;type&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"text/css"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;script&lt;/code&gt; &lt;code style="color: #808080;"&gt;type&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"text/javascript"&lt;/code&gt; &lt;code style="color: #808080;"&gt;src&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"lib/sencha/sencha-touch-2.0.0-pr3/sencha-touch-all-debug-w-comments.js"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;script&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #008200;"&gt;&amp;lt;!-- Application JS --&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;script&lt;/code&gt; &lt;code style="color: #808080;"&gt;type&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"text/javascript"&lt;/code&gt; &lt;code style="color: #808080;"&gt;src&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"app.js"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;script&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #008200;"&gt;&amp;lt;!-- Options --&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;link&lt;/code&gt; &lt;code style="color: #808080;"&gt;rel&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"apple-touch-startup-image"&lt;/code&gt; &lt;code style="color: #808080;"&gt;media&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"screen and (resolution: 326dpi)"&lt;/code&gt; &lt;code style="color: #808080;"&gt;href&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"img/startup_640.png"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;link&lt;/code&gt; &lt;code style="color: #808080;"&gt;rel&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"apple-touch-startup-image"&lt;/code&gt; &lt;code style="color: #808080;"&gt;media&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"screen and (resolution: 163dpi)"&lt;/code&gt; &lt;code style="color: #808080;"&gt;href&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"img/startup.png"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;link&lt;/code&gt; &lt;code style="color: #808080;"&gt;rel&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"apple-touch-icon-precomposed"&lt;/code&gt; &lt;code style="color: #808080;"&gt;media&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"screen and (max-resolution: 325dpi)"&lt;/code&gt; &lt;code style="color: #808080;"&gt;href&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"img/icon_57.png"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;link&lt;/code&gt; &lt;code style="color: #808080;"&gt;rel&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"apple-touch-icon-precomposed"&lt;/code&gt; &lt;code style="color: #808080;"&gt;media&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"screen and (min-resolution: 326dpi)"&lt;/code&gt; &lt;code style="color: #808080;"&gt;href&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"img/icon_114.png"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;head&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;body&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;body&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;html&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;Next add "app.js" to the root as well with the below code. This is the entry point for your Javascript application. If you set "autoCreateViewport" to true, your application will automatically look for "~/app/view/Viewport.js" as your first view. This will be the container used to serve your other views.&lt;/p&gt; &lt;p&gt;&lt;em&gt;~/app.js:&lt;/em&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #008200;"&gt;//INITIALIZE ASYNCHRONOUS LOADER&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;Ext.Loader.setConfig({&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;enabled: &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;true&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;paths: {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;' MyApp'&lt;/code&gt;&lt;code style="color: #000000;"&gt;: &lt;/code&gt;&lt;code style="color: blue;"&gt;'app'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #008200;"&gt;//, disableCaching: false //FOR DEBUGGING&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;});&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;Ext.application({&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;name: &lt;/code&gt;&lt;code style="color: blue;"&gt;' MyApp'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;requires:[&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;' MyApp.model.User'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;' MyApp.store.Users'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;],&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;controllers: [&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'User'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;],&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;models: [&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'User'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;],&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;stores: [&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'Users'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;],&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;autoCreateViewport: &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;true&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;});&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;em&gt;&lt;br /&gt; &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;~/app/view/Viewport.js:&lt;/em&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;Ext.define(&lt;/code&gt;&lt;code style="color: blue;"&gt;'MyApp.view.Viewport'&lt;/code&gt;&lt;code style="color: #000000;"&gt;, {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;extend: &lt;/code&gt;&lt;code style="color: blue;"&gt;'Ext.Panel'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;config: {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;fullscreen: &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;true&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;layout: &lt;/code&gt;&lt;code style="color: blue;"&gt;'card'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;items: [&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;xtype: &lt;/code&gt;&lt;code style="color: blue;"&gt;'userlist'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;},&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;xtype: &lt;/code&gt;&lt;code style="color: blue;"&gt;'userdetail'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;},&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;initialize: &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;function&lt;/code&gt;&lt;code style="color: #000000;"&gt;() {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.setActiveItem(0);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;});&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;For the rest of the application, create your structure like below. You can add your own flavor if you like. For example, I may merge the "css" and "img" folders into a "~/theme" folder in the future:&lt;/p&gt; &lt;p style="text-align: center;"&gt;&lt;img alt="" src="http://blog.falafel.com/Libraries/MetaBlogLib/CapturFiles_1.sflb.ashx" /&gt;&lt;/p&gt; &lt;h1&gt;MVC&lt;/h1&gt; &lt;p&gt;Notice the MVC structure and how this relates to the "app.js" file. You are registering your models, views, and controllers in there using dot notation to represent the file location. So "MyApp.controller.User" means "~/app/controller/User.js". Since you enabled the "Ext.Loader" in "app.js", it is asynchronously loading these files at runtime. Very cool indeed! Also worth mentioning is you can use the "requires" property in any Javascript class to initialize other classes. The same dot notation is used to locate these class files. For naming convention, folders will be lowercase and files will be uppercase (except for "index.html" and "app.js").&lt;/p&gt; &lt;h1&gt;Models&lt;/h1&gt; &lt;p&gt;As with any layered application, usually the best place to start is your models or entities. Think about what objects will be used for your application and create a model accordingly (yes, we are still talking about Javascript!). Check out the code below. You are inheriting from "Ext.data.Model" and defining the property names of the object.&lt;/p&gt; &lt;p&gt;&lt;em&gt;~/app/model/User.js&lt;/em&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;Ext.define(&lt;/code&gt;&lt;code style="color: blue;"&gt;'MyApp.model.User'&lt;/code&gt;&lt;code style="color: #000000;"&gt;, {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;extend: &lt;/code&gt;&lt;code style="color: blue;"&gt;'Ext.data.Model'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;fields: [&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'ID'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'ModifiedOn'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'Bio'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'Company'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'FirstName'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'ImageURL'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'LastName'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'Title'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'Twitter'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'WebSite'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;});&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;h1&gt;Stores&lt;/h1&gt; &lt;p&gt;The store descends from the "Ext.data.Store" class and uses your models to populate your data. This data can come from local, session, memory, AJAX, JSONP, or &lt;a href="http://www.sencha.com/products/extjs/extdirect"&gt;Direct&lt;/a&gt;. What interests me most here is JSONP, which allows you to make REST calls to remote servers all from the client-side. This is what decouples your client-side application from the data storage. Now you can let the data storage be served from a remote cloud or a 3rd party service such as Twitter, Flickr, Amazon, or &lt;a href="http://www.sencha.com/products/io/"&gt;Sencha.io&lt;/a&gt;. The "store" is the closest thing to server-side you &lt;em&gt;may&lt;/em&gt; have to touch, but hopefully you have a database admin or REST services for your storage already so you can focus on pure luscious code! Below is the "store" class used for mediating data between your models and storage.&lt;/p&gt; &lt;p&gt;&lt;em&gt;~/app/store/Users.js&lt;/em&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;Ext.define(&lt;/code&gt;&lt;code style="color: blue;"&gt;'MyApp.store.Users'&lt;/code&gt;&lt;code style="color: #000000;"&gt;, {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;extend: &lt;/code&gt;&lt;code style="color: blue;"&gt;'Ext.data.Store'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;model: &lt;/code&gt;&lt;code style="color: blue;"&gt;'MyApp.model.User'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;autoLoad: &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;true&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;proxy: {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;type: &lt;/code&gt;&lt;code style="color: blue;"&gt;'jsonp'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;url: &lt;/code&gt;&lt;code style="color: blue;"&gt;'&lt;a href="https://remotecloud.com/UserService/UserList"&gt;https://remotecloud.com/UserService/UserList&lt;/a&gt;'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;extraParams: {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: blue;"&gt;'Status'&lt;/code&gt;&lt;code style="color: #000000;"&gt;: &lt;/code&gt;&lt;code style="color: blue;"&gt;'Active'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;},&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;callbackKey: &lt;/code&gt;&lt;code style="color: blue;"&gt;'callback'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;reader: {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;type: &lt;/code&gt;&lt;code style="color: blue;"&gt;'json'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;root: &lt;/code&gt;&lt;code style="color: blue;"&gt;'Users'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;});&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;h1&gt;Views&lt;/h1&gt; &lt;p&gt;You will be building the interface procedurally&amp;nbsp;in this area. This means putting together available components like Lego blocks. You will be initializing the component properties within the "config" property and adding more components within the "items" property. Refer to the &lt;a href="http://docs.sencha.com/touch/2-0/#!/api"&gt;API documentation&lt;/a&gt; to see what components and properties are available for you to use. You can even create your own components which can be placed in the "~/app/ui" folder for reusability. By the way, set up an "alias" for your views using the special "widget." format so you can use it as an "xtype" in other views.&lt;/p&gt; &lt;p&gt;&lt;em&gt;~/app/view/user/List.js&lt;/em&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;Ext.define(&lt;/code&gt;&lt;code style="color: blue;"&gt;'MyApp.view.user.List'&lt;/code&gt;&lt;code style="color: #000000;"&gt;, {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;extend: &lt;/code&gt;&lt;code style="color: blue;"&gt;'Ext.Panel'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;alias: &lt;/code&gt;&lt;code style="color: blue;"&gt;'widget.userlist'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;config: {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;layout: &lt;/code&gt;&lt;code style="color: blue;"&gt;'fit'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;items: [&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;xtype: &lt;/code&gt;&lt;code style="color: blue;"&gt;'toolbar'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;docked: &lt;/code&gt;&lt;code style="color: blue;"&gt;'top'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;title: &lt;/code&gt;&lt;code style="color: blue;"&gt;'My User App'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;},&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;xtype: &lt;/code&gt;&lt;code style="color: blue;"&gt;'list'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;itemId: &lt;/code&gt;&lt;code style="color: blue;"&gt;'lstUser'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;allowDeselect: &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;false&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;store: &lt;/code&gt;&lt;code style="color: blue;"&gt;'Users'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;itemTpl: [&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 60px !important;"&gt;&lt;code style="color: blue;"&gt;'&amp;lt;div class="user-item"&amp;gt;'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 60px !important;"&gt;&lt;code style="color: blue;"&gt;'&amp;lt;h2&amp;gt;{FirstName} {LastName}&amp;lt;/h2&amp;gt;'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 60px !important;"&gt;&lt;code style="color: blue;"&gt;'&amp;lt;small&amp;gt;{Bio}&amp;lt;/small&amp;gt;'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 60px !important;"&gt;&lt;code style="color: blue;"&gt;'&amp;lt;/div&amp;gt;'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;},&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;xtype: &lt;/code&gt;&lt;code style="color: blue;"&gt;'toolbar'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;docked: &lt;/code&gt;&lt;code style="color: blue;"&gt;'bottom'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;layout: {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 60px !important;"&gt;&lt;code style="color: #000000;"&gt;pack: &lt;/code&gt;&lt;code style="color: blue;"&gt;'center'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;},&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;items: [&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 60px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 72px !important;"&gt;&lt;code style="color: #000000;"&gt;text: &lt;/code&gt;&lt;code style="color: blue;"&gt;'Settings'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 72px !important;"&gt;&lt;code style="color: #000000;"&gt;itemId: &lt;/code&gt;&lt;code style="color: blue;"&gt;'btnSettings'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 60px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;]&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;});&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;h1&gt;Controllers&lt;/h1&gt; &lt;p&gt;Notice that your views are just clean building blocks without any event handling. That is where your controllers come in. In the "init" event of your controller, you can subscribe to events of your view components. What is nice here is that you can reference components using CSS-selectors like jQuery using Sencha's "ComponentQuery". In the events, such as an item tap, you can pull the record clicked, process the data, and call a controller action to render a view. Sencha is working on more MVC features, so for now "rendering a view" means to activate a card in a "Panel" or pushing a view into a "NavigationView".&lt;/p&gt; &lt;p&gt;&lt;em&gt;~/app/controller/User.js&lt;/em&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;Ext.define(&lt;/code&gt;&lt;code style="color: blue;"&gt;'MyApp.controller.User'&lt;/code&gt;&lt;code style="color: #000000;"&gt;, {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;extend: &lt;/code&gt;&lt;code style="color: blue;"&gt;'Ext.app.Controller'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #008200;"&gt;//REGISTER CLASSES&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;requires:[&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'MyApp.ui.LoginForm'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;],&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #008200;"&gt;//REGISTER MVC&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;models: [&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'User'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;],&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;stores: [&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'Users'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;],&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;views: [&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'user.List'&lt;/code&gt;&lt;code style="color: #000000;"&gt;,&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: blue;"&gt;'user.Detail'&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;],&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;init: &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;function&lt;/code&gt;&lt;code style="color: #000000;"&gt;() {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.control({&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #008200;"&gt;//SUBSCRIBE TO EVENTS&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: blue;"&gt;'.userlist #lstUser'&lt;/code&gt;&lt;code style="color: #000000;"&gt;: {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;itemtap: &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.onUserItemTap&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;},&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: blue;"&gt;'.userlist #btnSettings'&lt;/code&gt;&lt;code style="color: #000000;"&gt;: {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;tap: &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.onSettingsTap&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;});&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;},&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #008200;"&gt;//ACTIONS&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;detail: &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;function&lt;/code&gt;&lt;code style="color: #000000;"&gt;(options) {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #008200;"&gt;//UPDATE STORE WITH USER INFO&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;var&lt;/code&gt; &lt;code style="color: #000000;"&gt;user = Ext.ComponentQuery.query(&lt;/code&gt;&lt;code style="color: blue;"&gt;'.userdetail #lstDetail'&lt;/code&gt;&lt;code style="color: #000000;"&gt;)[0];&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;user.getStore().getProxy().extraParams.UserID = options.Id;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;user.getStore().read();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #008200;"&gt;//SELECT USER INFO VIEW&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;Ext.Viewport.getActiveItem().setActiveItem(1);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;},&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #008200;"&gt;//EVENTS&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;onUserItemTap: &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;function&lt;/code&gt; &lt;code style="color: #000000;"&gt;(dataView, index) {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;var&lt;/code&gt; &lt;code style="color: #000000;"&gt;item = dataView.getStore().getAt(index);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.detail(item.data);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;},&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;onSettingsTap: &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;function&lt;/code&gt;&lt;code style="color: #000000;"&gt;() {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;var&lt;/code&gt; &lt;code style="color: #000000;"&gt;popup = Ext.create(&lt;/code&gt;&lt;code style="color: blue;"&gt;'MyApp.ui.LoginForm'&lt;/code&gt;&lt;code style="color: #000000;"&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;Ext.Viewport.add(popup);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;});&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;h1&gt;Conclusion&lt;/h1&gt; &lt;p&gt;We have only scratched the surface of what you can do with Sencha Touch. Hopefully this gives you an essential understanding of creating a base architecture for your MVC client-side application. This same concept can be used for regular websites using &lt;a href="http://www.sencha.com/products/extjs/"&gt;Ext JS&lt;/a&gt;, which is a subset of Sencha Touch. This means you can build client-side applications for desktop or mobile websites while sharing the same layers of code. Javascript is all grown up now!&lt;/p&gt; &lt;h2&gt;References&lt;/h2&gt; &lt;div&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://docs.sencha.com/ext-js/4-0/#!/guide/application_architecture"&gt;Sencha MVC Architecture&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://docs.sencha.com/ext-js/4-0/#!/guide/mvc_pt1"&gt;Architecting Your App in Ext JS 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://docs.sencha.com/touch/2-0"&gt;Sencha Docs Touch 2.0&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;HAPPY CODING!!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=9-gkYGR-ceQ:8pzUJLqUbpI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=9-gkYGR-ceQ:8pzUJLqUbpI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=9-gkYGR-ceQ:8pzUJLqUbpI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=9-gkYGR-ceQ:8pzUJLqUbpI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=9-gkYGR-ceQ:8pzUJLqUbpI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/9-gkYGR-ceQ" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/9-gkYGR-ceQ/Building_a_Mobile_Web_App_using_Sencha_Touch_2_and_MVC.aspx</link>
      <author>Basem Emara</author>
      <comments>http://blog.falafel.com/Blogs/11-12-15/Building_a_Mobile_Web_App_using_Sencha_Touch_2_and_MVC.aspx</comments>
      <guid isPermaLink="false">965c7b7c-c0ba-47b3-b9c8-32d095c70722</guid>
      <pubDate>Thu, 15 Dec 2011 16:00:00 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-12-15/Building_a_Mobile_Web_App_using_Sencha_Touch_2_and_MVC.aspx</feedburner:origLink></item>
    <item>
      <title>Customizing the &amp;ldquo;Email Campaigns&amp;rdquo; module in Sitefinity 4</title>
      <description>&lt;p&gt;The “Email Campaign” module of Sitefinity 4 is what you would use to create email campaigns, manage lists of subscribers, and test AB campaigns. If you haven’t used this module, you can get more information on the Sitefinity website by clicking this link: &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.sitefinity.com/40/help/developers-guide/sitefinity-essentials-modules-working-with-email-campaigns.html" title="http://www.sitefinity.com/40/help/developers-guide/sitefinity-essentials-modules-working-with-email-campaigns.html"&gt;http://www.sitefinity.com/40/help/developers-guide/sitefinity-essentials-modules-working-with-email-campaigns.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;While this is a very useful module in Sitefinity 4 out of the box, I’m going to show you how you could add some additional functionality to this module. For the purposes of this Blog, let’s assume you would like to be able to export your Mailing Lists to a csv file. The way we will do this is by creating a custom widget that we can put on the backend page that displays all the mailing lists. &lt;/p&gt; &lt;p&gt;The easiest way to create this widget is by Editing your website in Visual Studio. Once your website loaded into Visual Sutdio you just need to add a new “Web User Control”. Our control with have a Label, DropDownList and a Button. &lt;/p&gt; &lt;p&gt;Here is the .ascx file for my control:&lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;&lt;span class="asp"&gt;&amp;lt;%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ExportMailingList.ascx.cs" Inherits="SitefinityWebApp.CustomWidgets.ExportMailingList" %&amp;gt;&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Label&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="Label1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Choose a mailing list to Export:"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:DropDownList&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="ddlMailingLists"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="19px"&lt;/span&gt; &lt;/pre&gt; &lt;pre class="alt"&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="171px"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:DropDownList&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="btnExportSubscribers"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;=" Export "&lt;/span&gt; &lt;span class="attr"&gt;OnClick&lt;/span&gt;&lt;span class="kwrd"&gt;="btnExportSubscribers_Click"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;In our code behind we will populate our DropDownList with the names of all the MailingLists in our website. If you clicked the link above to the “Working with mailing lists” section in the Sitefinity Documentation you probably reviewed some of the code examples contained there. Those examples will give you a good start creating the code to customize the “Email Campaign” module. Here is the code for populating our DropDownList: &lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (!IsPostBack)&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt; &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (MailingList ml &lt;span class="kwrd"&gt;in&lt;/span&gt; NewslettersManager.GetManager().GetMailingLists())&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    {&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        ddlMailingLists.Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ListItem(ml.Title, ml.Id.ToString()));&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    }&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;}&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;We will put this code in the Page_Load event handler for our control. &lt;/p&gt; &lt;p&gt;The next thing we need to do is plug in the code for our button’s click event handler. As you can see below this code will first check for a selection then using the Newslettermanager will call the GetMailingList method passing the selected ID to retrieve the mailinglist we are going to export. We are going to export the following properties: ID, Email, FirstName and LastName. Once we have built a string of all the subscriber records we are going to export, we call a custom method named StreamToBrowser to save the string to a csv file. Here is the code to export the Subscribers:&lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (IsPostBack)&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (ddlMailingLists.SelectedIndex != -1)&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    {&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        var mailingList = NewslettersManager.GetManager().GetMailingList(&lt;span class="kwrd"&gt;new&lt;/span&gt; Guid(ddlMailingLists.SelectedValue));&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        var subscribers = mailingList.Subscribers;&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        var orderHeaders = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder(&lt;span class="str"&gt;"Id,Email,FirstName,LastName\n"&lt;/span&gt;);&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt; &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var item &lt;span class="kwrd"&gt;in&lt;/span&gt; subscribers)&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        {&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt; &lt;span class="rem"&gt;// Collect data of order header&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            var headerValues = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            headerValues.Add(item.Id.ToString());&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            headerValues.Add(item.Email.ToString());&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            headerValues.Add(item.FirstName.ToString());&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            headerValues.Add(item.LastName.ToString());&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt; &lt;span class="rem"&gt;// Write order header values to string&lt;/span&gt;&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            orderHeaders.AppendLine(WriteCsvRow(headerValues));&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        }&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt; &lt;span class="rem"&gt;// Output&lt;/span&gt;&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        StreamToBrowser(orderHeaders.ToString(), String.Format(&lt;span class="str"&gt;"{0}.csv"&lt;/span&gt;, mailingList.Title), &lt;span class="str"&gt;"text/csv"&lt;/span&gt;);&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    }&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;}&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;The custom code for building each csv row and the StreamToBrowser method are here:&lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; WriteCsvRow(List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; row)&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    var builder = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt; &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var item &lt;span class="kwrd"&gt;in&lt;/span&gt; row)&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    {&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt; &lt;span class="rem"&gt;//VALIDATE FOR NULL&lt;/span&gt;&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt; = item ?? String.Empty;&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt; &lt;span class="rem"&gt;// Add separator if this isn't the first value&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (builder.Length &amp;gt; 0)&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        {&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            builder.Append(&lt;span class="str"&gt;','&lt;/span&gt;);&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        }&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;value&lt;/span&gt;.IndexOfAny(&lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;char&lt;/span&gt;[] { &lt;span class="str"&gt;'"'&lt;/span&gt;, &lt;span class="str"&gt;','&lt;/span&gt; }) != -1)&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        {&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt; &lt;span class="rem"&gt;// Special handling for values that contain comma or quote&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt; &lt;span class="rem"&gt;// Enclose in quotes and double up any double quotes&lt;/span&gt;&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            builder.AppendFormat(&lt;span class="str"&gt;"\"{0}\""&lt;/span&gt;, &lt;span class="kwrd"&gt;value&lt;/span&gt;.Replace(&lt;span class="str"&gt;"\""&lt;/span&gt;, &lt;span class="str"&gt;"\"\""&lt;/span&gt;));&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        }&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt; &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        {&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            builder.Append(&lt;span class="kwrd"&gt;value&lt;/span&gt;);&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        }&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;    }&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; builder.ToString();&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;}&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; StreamToBrowser(&lt;span class="kwrd"&gt;string&lt;/span&gt; content, &lt;span class="kwrd"&gt;string&lt;/span&gt; downloadName, &lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; contentType)&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;{&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;    var context = HttpContext.Current;&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; attachment = String.Format(&lt;span class="str"&gt;"attachment; filename={0}"&lt;/span&gt;, downloadName);&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;    context.Response.AddHeader(&lt;span class="str"&gt;"Pragma"&lt;/span&gt;, &lt;span class="str"&gt;"public"&lt;/span&gt;);&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;    context.Response.AddHeader(&lt;span class="str"&gt;"content-disposition"&lt;/span&gt;, attachment);&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;    context.Response.ContentType = contentType;&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;    context.Response.Write(content);&lt;/pre&gt; &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;    context.Response.End();&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;}&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;Now that we have completed our custom control we need to install the control in the Sitefinity Administrator’s list of available PageControl widgets. The first step this process is to open the Sitefinity 4 Administrator and choose “Administration” | “Settings”&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_2.sflb.ashx"&gt;&lt;img width="623" height="254" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb.sflb.ashx" alt="image" title="image" style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: solid;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Next we need to choose the “Advanced” link.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_4.sflb.ashx"&gt;&lt;img width="465" height="225" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb_1.sflb.ashx" alt="image" title="image" style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: solid;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;In the treeview on the left of this screen, scroll down to “Toolboxes” | “Toolboxes” | “PageControls” | “Sections” node, select it and press the “Create new” button. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_6.sflb.ashx"&gt;&lt;img width="471" height="303" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb_2.sflb.ashx" alt="image" title="image" style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: solid;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;This step is to create a new node in the PageControl widgets. It is a good practice to create your own node in this treeview to put your custom control rather than adding your control to one of the out-of-the-box nodes. I created a node called “CustomWidgets” as you can see from this screen shot. When you have provided a Name and Title press the “Save changes” button. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_8.sflb.ashx"&gt;&lt;img width="361" height="388" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb_3.sflb.ashx" alt="image" title="image" style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: solid;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Once you have created a new node you need to select it and press the “Create new” button. On the property screen for adding the properties for your new widget you need to provide the path to the .ascx file of our custom control we created above in the “Control CLR Type or Virtual Path” setting. You also need to provide a “Name” and “Title” and press the “Save changes”.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_10.sflb.ashx"&gt;&lt;img width="365" height="367" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb_4.sflb.ashx" alt="image" title="image" style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: solid;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Now your widget should be installed in the Sitefinity Administrator. Since we want to add it to one of the Backend Pages that is where we need to go next. Choose “Administration” | “Backend Pages”.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_12.sflb.ashx"&gt;&lt;img width="412" height="249" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb_5.sflb.ashx" alt="image" title="image" style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: solid;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;When you choose this option, you are asked to confirm your choice because as the warning says you can mess up your Sitefinity Administrator by changing the Backend pages. Assuming you want to continue, press the “OK, Continue” button. (I highly recommend doing this in a test site the first time you try it.)&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_14.sflb.ashx"&gt;&lt;img width="522" height="259" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb_6.sflb.ashx" alt="image" title="image" style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: solid;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;In the treeview of the list of pages open the nodes until you get to the “Sitefinity” | “Email Campaigns” | “Subscribers and lists”, then click the “Mailing lists” page to edit that page. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_16.sflb.ashx"&gt;&lt;img width="354" height="422" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb_7.sflb.ashx" alt="image" title="image" style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: solid;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;On the right side of your screen you should see your new widget listed in the treeview with the Title you provided. In my case it is “Mailing List Export” under “CustomWidgets”. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_18.sflb.ashx"&gt;&lt;img width="249" height="401" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb_8.sflb.ashx" alt="image" title="image" style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: solid;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Drag that widget to the bottom of the Mailing List page, then press the “Publish” button at the top.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_20.sflb.ashx"&gt;&lt;img width="641" height="432" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb_9.sflb.ashx" alt="image" title="image" style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: solid;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;You also need to make sure you have checked the “Enable View State” for this page. You get to that setting by clicking “Actions” link next to the “Mailing lists” page, then choose the “Title and Properties” link.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_30.sflb.ashx"&gt;&lt;img width="658" height="339" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb_14.sflb.ashx" alt="image" title="image" style="border:0px none -moz-use-text-color;background-image: none;    padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Click the “Enable View State’ option. We need to turn this setting on so our DropDownList will accurately contain our choice when it gets to our event handler for the button. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_28.sflb.ashx"&gt;&lt;img width="470" height="383" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb_13.sflb.ashx" alt="image" title="image" style="border:0px none -moz-use-text-color;background-image: none;    padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Finally to see this change you need to choose “Email Campaigns” | Mailing lists”&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_22.sflb.ashx"&gt;&lt;img width="476" height="244" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb_10.sflb.ashx" alt="image" title="image" style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: solid;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;To confirm everything works, select one of your Mailing lists from the DropDownList and press the “Export’ button. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_24.sflb.ashx"&gt;&lt;img width="481" height="235" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb_11.sflb.ashx" alt="image" title="image" style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: solid;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Here is a screen shot of my exported list in Excel. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_26.sflb.ashx"&gt;&lt;img width="485" height="160" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-Export-Email-Campaign-mailing-lists-in-S_12494-image_thumb_12.sflb.ashx" alt="image" title="image" style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-style: solid;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Hopefully, that will simplify the process for adding new functionality to&amp;nbsp; a module of the Sitefinity Administrator. Thanks for reading. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=zQ--7XzLZ7M:d8SsLUChLas:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=zQ--7XzLZ7M:d8SsLUChLas:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=zQ--7XzLZ7M:d8SsLUChLas:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=zQ--7XzLZ7M:d8SsLUChLas:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=zQ--7XzLZ7M:d8SsLUChLas:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/zQ--7XzLZ7M" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/zQ--7XzLZ7M/Customizing_the_ldquo_Email_Campaigns_rdquo_module_in_Sitefinity_4.aspx</link>
      <author>Gary Campbell</author>
      <comments>http://blog.falafel.com/Blogs/11-12-13/Customizing_the_ldquo_Email_Campaigns_rdquo_module_in_Sitefinity_4.aspx</comments>
      <guid isPermaLink="false">38b3c90e-9123-4f84-89b8-0406009c0981</guid>
      <pubDate>Tue, 13 Dec 2011 08:36:00 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-12-13/Customizing_the_ldquo_Email_Campaigns_rdquo_module_in_Sitefinity_4.aspx</feedburner:origLink></item>
    <item>
      <title>Learning iOS UINavigationItems: Back Bar Buttons</title>
      <description>&lt;p&gt;Here's a tip for the iOS beginners among us:&amp;nbsp; Just because something is on the left doesn't mean it's called Left.&amp;nbsp; LeftBarButtonItem, for example, might just take you down the wrong path if you’re not careful.&lt;/p&gt; &lt;p&gt;Let's say you are wanting to show customized text on the button that shows up on the left side of the navigation bar in an iOS app.&amp;nbsp; In an unmodified Master-Details iPhone app, it is the button that returns you to the Master table view screen from within the Details view.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-1b17e8185227_D770-Image_2.sflb.ashx"&gt;&lt;img style="background-image: none;  padding-left: 0px; padding-right: 0px; display: inline;    padding-top: 0px;    border-width: 0px;border-style: solid;" title="Image" alt="Image" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-1b17e8185227_D770-Image_thumb.sflb.ashx" width="279" height="87" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;By default, that button displays the Title text from the previous ViewController.&amp;nbsp; The key word there is 'previous'.&amp;nbsp; Setting that text requires that you do so in the ViewController that executed the pushViewController call that got you to the next screen (Master, in this case).&lt;/p&gt; &lt;p&gt;So, there are two pieces to get correct here:&amp;nbsp; you must make your modification in the right place (the previous ViewController), and you have to access the correct button.&amp;nbsp; The correct button in this case is the navigationItem.backBarButtonItem.&amp;nbsp; So the following will work if added in the MasterViewController.&amp;nbsp; Remember, make the change in the view you want to return to using the 'My Custom Text' button.&lt;/p&gt; &lt;p style="line-height: normal; list-style-type: disc; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"&gt;&lt;span style="line-height: normal; widows: 2; text-transform: none; text-indent: 0px; letter-spacing: normal; border-collapse: separate; white-space: normal; orphans: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span style="font-family: 'courier new'; font-size: 13px;"&gt;- (&lt;span&gt;&lt;span style="color: #b22798;"&gt;void&lt;/span&gt;&lt;/span&gt;)tableView:(&lt;span&gt;&lt;span style="color: #6536a0;"&gt;UITableView&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;*)tableView didSelectRowAtIndexPath:(&lt;span&gt;&lt;span style="color: #6536a0;"&gt;NSIndexPath&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;*)indexPath&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="line-height: normal; list-style-type: disc; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"&gt;&lt;span style="font-family: 'courier new'; font-size: 13px;"&gt;{&lt;/span&gt;&lt;/p&gt; &lt;p style="line-height: normal; list-style-type: disc; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;span style="color: #45757c;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color: #45757c;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(!&lt;/span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;self&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style="color: #45757c;"&gt;detailViewController&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="line-height: normal; list-style-type: disc; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;span style="color: #45757c;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;self&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style="color: #45757c;"&gt;detailViewController&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;= [[[&lt;/span&gt;&lt;span style="color: #45757c;"&gt;DetailViewController&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color: #361c76;"&gt;alloc&lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span style="color: #361c76;"&gt;initWithNibName&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #cb291a;"&gt;@"DetailViewController" &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color: #361c76;"&gt;bundle&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;nil&lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span style="color: #361c76;"&gt;autorelease&lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="line-height: normal; list-style-type: disc; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 13px;"&gt;&lt;span style="font-family: 'courier new'; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt; &lt;p style="line-height: normal; list-style-type: disc; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"&gt;&lt;span style="font-family: 'courier new'; font-size: 13px;"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p style="line-height: normal; list-style-type: disc; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span&gt;&amp;nbsp; &lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;span&gt;&lt;span style="color: #361c76;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;self&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&lt;span style="color: #6536a0;"&gt;navigationItem&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&lt;span style="color: #6536a0;"&gt;backBarButtonItem&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color: #361c76;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;= [[[&lt;/span&gt;&lt;span&gt;&lt;span style="color: #6536a0;"&gt;UIBarButtonItem&lt;/span&gt;&lt;/span&gt;&lt;span&gt;alloc&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;initWithTitle&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #cb291a;"&gt;@"My Custom Text"&lt;/span&gt;&lt;/span&gt;&lt;span&gt;style&lt;span&gt;:&lt;/span&gt;UIBarButtonItemStyleBordered &lt;span&gt;target&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;nil &lt;/span&gt;&lt;/span&gt;&lt;span&gt;action&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;nil&lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;autorelease&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="line-height: normal; list-style-type: disc; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;/span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;self&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&lt;span style="color: #6536a0;"&gt;navigationController &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pushViewController&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;self&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&lt;span style="color: #45757c;"&gt;detailViewController &lt;/span&gt;&lt;/span&gt;&lt;span&gt;animated&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;YES&lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style="list-style-type: disc;"&gt;&lt;span&gt;&lt;span style="font-family: 'courier new'; font-size: 13px;"&gt;}&lt;/span&gt;&lt;/span&gt; &lt;br /&gt; &lt;/div&gt; &lt;br /&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-1b17e8185227_D770-iOS_Simulator-3_2.sflb.ashx"&gt;&lt;img style="background-image: none;  padding-left: 0px; padding-right: 0px; display: inline;    padding-top: 0px;    border-width: 0px;border-style: solid;" title="iOS Simulator-3" alt="iOS Simulator-3" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-1b17e8185227_D770-iOS_Simulator-3_thumb.sflb.ashx" width="279" height="90" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Notice how this also gives you the nice arrow shape on the button, which has nothing to do with the style parameter, but is part of the backBarButtonItem itself.&lt;/p&gt; &lt;p&gt;If you had used leftBarButtonItem in the exact same place, however, you wouldn't see any effect at all on the Details screen.&amp;nbsp; That's because leftBarButton shows on the current view, not the next one in the stack.&amp;nbsp; So you would see a square button, not an arrow button…and it would be on the wrong screen!&amp;nbsp; If you did want to see a button in that location that was NOT a back button, this would be useful - but probably not in the didSelectRowAtIndexPath method.&amp;nbsp; Place there, the button doesn't show up until you leave the view and come back!&lt;/p&gt; &lt;p&gt;&lt;span style="line-height: normal; widows: 2; text-transform: none; list-style-type: disc; text-indent: 0px; letter-spacing: normal; border-collapse: separate; white-space: normal; orphans: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;self&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color: #6536a0;"&gt;navigationItem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color: #6536a0;"&gt;leftBarButtonItem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span&gt;= [[[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color: #6536a0;"&gt;UIBarButtonItem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;alloc&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;initWithTitle&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #cb291a;"&gt;@"My Custom Text"&lt;/span&gt;&lt;/span&gt;&lt;span&gt;style&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;UIBarButtonItemStyleBordered&lt;span&gt;target&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;nil &lt;/span&gt;&lt;/span&gt;&lt;span&gt;action&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;nil&lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;autorelease&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'times new roman';"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'times new roman';"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-1b17e8185227_D770-iOS_Simulator-4_2.sflb.ashx"&gt;&lt;img style="background-image: none;  padding-left: 0px; padding-right: 0px; display: inline;    padding-top: 0px;    border-width: 0px;border-style: solid;" title="iOS Simulator-4" alt="iOS Simulator-4" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-1b17e8185227_D770-iOS_Simulator-4_thumb.sflb.ashx" width="279" height="105" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;So, given all this explanation, you might think that you can just use leftBarButtonItem from the Details ViewController.&amp;nbsp; If you do so, you will lose both the arrow shape of the button and the 'Back' navigation from the button itself.&amp;nbsp; So, only go that route if you want to replace the Back functionality altogether.&amp;nbsp; &lt;/p&gt; &lt;p&gt;For example, we could do this:&lt;/p&gt; &lt;p&gt;&lt;span style="line-height: normal; widows: 2; text-transform: none; list-style-type: disc; text-indent: 0px; letter-spacing: normal; border-collapse: separate; white-space: normal; orphans: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: 13px;"&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;self&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color: #45757c;"&gt;detailViewController&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color: #6536a0;"&gt;navigationItem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color: #6536a0;"&gt;leftBarButtonItem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span&gt;= [[[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color: #6536a0;"&gt;UIBarButtonItem &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;alloc&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;initWithTitle&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #cb291a;"&gt;@"My Custom Text"&lt;/span&gt;&lt;/span&gt;&lt;span&gt;style&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;UIBarButtonItemStyleBordered &lt;span&gt;target&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;nil &lt;/span&gt;&lt;/span&gt;&lt;span&gt;action&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #b22798;"&gt;nil&lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;autorelease&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'times new roman';"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;To get a square button that replaces the Back button entirely.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-1b17e8185227_D770-iOS_Simulator-5_2.sflb.ashx"&gt;&lt;img style="background-image: none;  padding-left: 0px; padding-right: 0px; display: inline;    padding-top: 0px;    border-width: 0px;border-style: solid;" title="iOS Simulator-5" alt="iOS Simulator-5" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-1b17e8185227_D770-iOS_Simulator-5_thumb.sflb.ashx" width="279" height="92" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Notice that we were able to do all of these manipulations without altering the Title property of either of our ViewControllers.&amp;nbsp; While it is possible to change Back button text by using Title, I think you'll find that method pretty clumsy.&amp;nbsp; In my tests, the Title text was quite visibly changing during the navigation animation - not a pretty result at all.&amp;nbsp; To learn more about button manipulation inside NavigationItems, you can view the full &lt;a href="http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UINavigationItem_Class/Reference/UINavigationItem.html" target="_blank"&gt;documentation here&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=aufTiLD-n20:oMDBOcs74Bo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=aufTiLD-n20:oMDBOcs74Bo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=aufTiLD-n20:oMDBOcs74Bo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=aufTiLD-n20:oMDBOcs74Bo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=aufTiLD-n20:oMDBOcs74Bo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/aufTiLD-n20" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/aufTiLD-n20/Learning_iOS_UINavigationItems_Back_Bar_Buttons.aspx</link>
      <author>Rachel Hagerman</author>
      <comments>http://blog.falafel.com/Blogs/11-12-12/Learning_iOS_UINavigationItems_Back_Bar_Buttons.aspx</comments>
      <guid isPermaLink="false">4d893443-c51d-437a-849c-8485caf7b5cd</guid>
      <pubDate>Mon, 12 Dec 2011 15:47:11 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-12-12/Learning_iOS_UINavigationItems_Back_Bar_Buttons.aspx</feedburner:origLink></item>
    <item>
      <title>Faster Silverlight XAP Downloads with Application Library Caching</title>
      <description>&lt;p&gt;&lt;span style="font-size: 13px;"&gt;If you’ve been programming in Silverlight for long, you may have noticed the project setting “Reduce XAP size by using application library caching” in you Silverlight project’s settings.&amp;nbsp; You may have even checked it on to see what happens.&lt;br /&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="/Images/picture.png" style="width: 400px; height: 43px;border-color: #000000;" /&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;If you did try it, most likely nothing happened.&amp;nbsp; This is because there are a few simple prerequisite steps you have to take in order to take advantage of application library caching.&amp;nbsp; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;In this blog post, I’ll step you through those set up steps.&amp;nbsp; But first, why would you want to use application library caching?&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;h1&gt;Why Use Application Library Caching?&lt;/h1&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;In short, there are two different reasons:&lt;/span&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;1) Caching shared references on the client for sharing between different Silverlight applications, or&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;2) Smaller application update downloads when some referenced libraries change, but not others.&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;As you probably already know, Silverlight applications are distributed in a XAP file , which is just a ZIP archive that also includes a manifest file in XML format. In fact, if you rename any .XAP file to end in .ZIP, you can open it and see its contents. &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;The contents of a XAP file include your application DLL plus a DLL for each of the referenced libraries in your application (that aren’t already part of the .NET Framework).&amp;nbsp; Enabling application library caching splits each individual referenced library out into its own ZIP archive.&amp;nbsp; These are then downloaded separately (but automatically) by the Silverlight applications that references them.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;Practically speaking, enabling application library caching on a Silverlight application with two referenced libraries will change the contents of the ClientBin directory—the one that hosts the XAP file—from something like this:&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-image_8_1.sflb.ashx"&gt;&lt;img style="border:0px;background-image: none;       padding-left: 0px; padding-right: 0px; display: inline;       padding-top: 0px;" title="image" alt="image" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-image_thumb_3_1.sflb.ashx" width="572" height="90" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;span style="color: #a5a5a5;"&gt;&amp;nbsp; Figure 1: Without application library caching&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;
to something more like this:&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-image_14_1.sflb.ashx"&gt;&lt;img style="border:0px;background-image: none;       padding-left: 0px; padding-right: 0px; display: inline;       padding-top: 0px;" title="image" alt="image" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-image_thumb_6_1.sflb.ashx" width="632" height="148" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: #a5a5a5;"&gt;&amp;nbsp; Figure 2: With application library caching&lt;/span&gt;&lt;/p&gt; &lt;span style="font-size: 13px;"&gt; &lt;p &gt;Notice how much smaller the XAP file is in Figure 2.&amp;nbsp; This is because the referenced libraries, each about 3.7 MB in size, have been removed and placed in their own separate ZIPs&lt;/p&gt; &lt;/span&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;&lt;/span&gt;&lt;span style="font-size: 13px;"&gt;Now for a little more detail on the different scenarios for using application library caching…&lt;/span&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;h2&gt;&lt;span style="font-size: 13px;"&gt;Scenario 1: Sharing References&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;Consider a scenario where you have multiple Silverlight applications hosted on the same domain which share some of the same referenced libraries.&amp;nbsp; Every time a user accesses one of these applications for the first time, they have to download the entire XAP file, including all the referenced assemblies they may have already downloaded with another one of your applications.&amp;nbsp; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;Application library caching splits these references out so your user only has to download the ones they haven’t already downloaded.&lt;/span&gt;&lt;/p&gt; &lt;h2&gt;&lt;span style="font-size: 13px;"&gt;Scenario 2: Smaller Application Updates&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;When you update your application, sometimes you make a small change to just one of the referenced libraries and now changes to anything else.&amp;nbsp; In cases like this, it’s kind of ridiculous that all of your users have to re-download your entire application, including ALL of the unchanged referenced libraries, just to get the one changed file.&amp;nbsp; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;Application library caching avoids this problem by splitting all the references out into their own ZIP file downloads so that only the changed one needs to be downloaded again.&amp;nbsp; Because the individual files are still zipped, the user still gets the download speed advantages of the file compression.&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;h1&gt;&amp;nbsp;&lt;/h1&gt; &lt;h1&gt;Setting Up Application Library Caching&lt;/h1&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;Follow these steps to enable application library caching for you own Silverlight library assemblies:&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;1) Strong name your assembly&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;Each assembly must have a strong name key to be eligible for application library caching.&amp;nbsp; Open the Visual Studio command project to your assembly’s root directory and type:&lt;/span&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;span style="font-family: 'courier new'; font-size: 13px;"&gt;sn –k [YourAssemblyName].snk&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;Add the file to your class library project and open your library project’s settings to the Signing tab.&amp;nbsp; Check “Sign the assembly” and select your SNK file from the drop down.&amp;nbsp; Rebuild your project and leave the Visual Studio command prompt open for later use.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;2) Create a [YourAssemblyName].extmap.xml file for your assembly&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;Add a new text file to the root of your class library project and rename it to [YourAssemblyName].extmap.xml.&amp;nbsp; This file and its content are the key to making application library caching work.&amp;nbsp; Open the file and paste in the following XML:&lt;/span&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;
&amp;lt;manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:xsd="http://www.w3.org/2001/XMLSchema"&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;assembly&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;name&amp;gt;&lt;span style="background-color: #ffff00;"&gt;[YourAssemblyName]&lt;/span&gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;&lt;span style="background-color: #ffff00;"&gt;[YourAssemblyVersion, probably 1.0.0.0]&lt;/span&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;publickeytoken&amp;gt;&lt;span style="background-color: #ffff00;"&gt;[YourAssemblyPublicKeyToken]&lt;/span&gt;&amp;lt;/publickeytoken&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;relpath&amp;gt;&lt;span style="background-color: #ffff00;"&gt;[YourAssemblyName]&lt;/span&gt;.dll&amp;lt;/relpath&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;extension downloadUri="&lt;span style="background-color: #ffff00;"&gt;[YourAssemblyName]&lt;/span&gt;.zip" /&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;/assembly&amp;gt;&lt;br /&gt;
&amp;lt;/manifest&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;Change [YourAssemblyName] to your assembly’s actual name and [YourAssemblyVersion] to the version set in you project’s AssemblyInfo.cs file—most likely 1.0.0.0 if you haven’t changed it already.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;To retrieve your assembly’s public key token, return to the Visual Studio commend prompt, change to /Bin/Debug/ (or wherever you built the assembly to).&amp;nbsp; Type the following:&lt;/span&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;span style="font-family: 'courier new'; font-size: 13px;"&gt;sn –Tp [YourAssemblyName].dll&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;Copy the token that appears in the output after “Public key token is” and replace [YourAssemblyPublicKeyToken] in your .extmap.xml file with it.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;Change the “Build Action” property of the .extmap.xml file to “Content” and the “Copy to output directory” setting to “Copy if newer”&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;3) Enable application library caching for your Silverlight application&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;Now you return to where we started by checking the “Reduce XAP size by using application library caching” check box in your Silverlight application project’s settings.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;Rebuild your solution and look at the output directory (ClientBin) to see if it worked!&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;For reference, I created &lt;/span&gt;&lt;a href="http://blog.falafel.com/Files/JTower/AppLibCache.zip"&gt;&lt;span style="font-size: 13px;"&gt;this sample project&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 13px;"&gt; that is set up correctly to use application library caching.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 13px;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=LcuC6zecv1w:9YTOA5T6cpI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=LcuC6zecv1w:9YTOA5T6cpI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=LcuC6zecv1w:9YTOA5T6cpI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=LcuC6zecv1w:9YTOA5T6cpI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=LcuC6zecv1w:9YTOA5T6cpI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/LcuC6zecv1w" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/LcuC6zecv1w/Faster_Silverlight_XAP_Downloads_with_Application_Library_Caching.aspx</link>
      <author>J. Tower</author>
      <comments>http://blog.falafel.com/Blogs/11-12-02/Faster_Silverlight_XAP_Downloads_with_Application_Library_Caching.aspx</comments>
      <guid isPermaLink="false">091b940a-c0e1-4550-b395-dac3680d8a70</guid>
      <pubDate>Fri, 02 Dec 2011 16:50:07 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-12-02/Faster_Silverlight_XAP_Downloads_with_Application_Library_Caching.aspx</feedburner:origLink></item>
    <item>
      <title>Falafel Software announces sponsorship of FAST Gala</title>
      <description>&lt;em&gt;Falafel Software's donation helps the Foundation for Angelman Syndrome Therapeutics (FAST) host it's major annual fund raising event.&amp;nbsp;&lt;/em&gt; &lt;div&gt;&lt;br /&gt; &lt;/div&gt; &lt;div&gt;Capitola, CA &amp;nbsp;December 2nd, 2011 - In support of finding a cure for Angelman Syndrome, Falafel Software has made a charitable contribution of $2,500 to the Foundation for Angelman Syndrome Therapeutics (FAST). This contribution will aid the organization in producing it's major annual fundraising event, the FAST Gala. This year's event will take place on December 3rd in Chicago.&lt;/div&gt; &lt;div&gt;&lt;br /&gt; &lt;/div&gt; &lt;div&gt;Angelman Syndrome (AS) is a severe neurological disorder characterized by profound developmental delays, problems with motor coordination (ataxia) and balance, and epilepsy. The all volunteer staff at FAST dedicate their time and expertise towards finding a cure by funding aggressive research, education and advocacy. FAST funded research has indicated that a treatment for Angelman Syndrome is not only possible, but probable.&amp;nbsp;&lt;/div&gt; &lt;div&gt;&lt;br /&gt;
"Angelman Syndrome research appears to be on the verge of a breakthrough," said Mike Dugan, Falafel's Director of Marketing. "The disorder has been cured in the mouse model, but funding remains as the major hurdle to producing a cure for humans. This is why we are so eager to be a part of FAST's fund raising and awareness efforts. There is a real chance to cure Angelman Syndrome today."&lt;br /&gt; &lt;br /&gt; &lt;/div&gt; &lt;div&gt;About FAST&lt;br /&gt;
The Foundation for Angelman Syndrome Therapeutics (FAST) is an organization of families and professionals dedicated to finding a cure for Angelman Syndrome (AS) and related disorders through the funding of an aggressive research agenda, education, and advocacy. The Foundation is committed to assisting individuals living with Angelman Syndrome to realize their full potential and quality of life. We are confident that our goals are now within reach and together, with your help, we will change lives. You are our driving force so please donate generously and bring us one step closer to realizing our mission. To learn more, visit http://www.cureangelman.org.&lt;br /&gt; &lt;br /&gt;
About Falafel Software&lt;br /&gt;
Falafel Software provides world class custom software development, training and testing services to companies around the globe. Customers learn to master the latest technologies in the training department or utilize Falafel's team of Microsoft Certified Professionals to deliver a custom web, mobile or cloud solution. &amp;nbsp;To learn more, visit http://www.falafel.com.&lt;br /&gt; &lt;div style="font-style: italic;"&gt;&lt;br /&gt; &lt;/div&gt; &lt;br /&gt; &lt;div&gt;&lt;em&gt;&lt;br /&gt; &lt;/em&gt;&lt;/div&gt; &lt;div&gt;&lt;em&gt;&lt;br /&gt; &lt;/em&gt;&lt;/div&gt; &lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=yDKT1cGxAt8:4BvcV4Jv4g4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=yDKT1cGxAt8:4BvcV4Jv4g4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=yDKT1cGxAt8:4BvcV4Jv4g4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=yDKT1cGxAt8:4BvcV4Jv4g4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=yDKT1cGxAt8:4BvcV4Jv4g4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/yDKT1cGxAt8" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/yDKT1cGxAt8/Falafel_Software_announces_sponsorship_of_FAST_Gala.aspx</link>
      <author>Mike Dugan</author>
      <comments>http://blog.falafel.com/Blogs/11-12-02/Falafel_Software_announces_sponsorship_of_FAST_Gala.aspx</comments>
      <guid isPermaLink="false">683e01b4-fbee-473e-b4e5-8161e7848470</guid>
      <pubDate>Fri, 02 Dec 2011 16:22:27 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-12-02/Falafel_Software_announces_sponsorship_of_FAST_Gala.aspx</feedburner:origLink></item>
    <item>
      <title>Troubleshooting Silverlight Out-of-Browser Problems</title>
      <description>&lt;p&gt;It is quite easy to enable Out-of-Browser (OOB) mode when building a Silverlight application. &amp;nbsp;Open up the project properties on the Silverlight project and check the box to "Enable running application out of the browser."&lt;/p&gt; &lt;p&gt;The more difficult task is troubleshooting problems when the application works in browser, but not out of browser. &amp;nbsp;First, to debug OOB applications in Visual Studio, you need to open the Silverlight project properties and in the "Debug" tab, set the start action to "Out-of-browser application" and select the appropriate project from the dropdown list. &amp;nbsp;Next, set your Silverlight project as the startup project. &amp;nbsp;Now when you debug in Visual Studio, it will open the application in an OOB window instead of the default browser.&lt;/p&gt; &lt;p&gt;Even when you have debugging set up, some OOB problems are still difficult to track down. &amp;nbsp;There are several things that will give you a blank screen in the OOB window even though no exceptions are displayed in Visual Studio. &amp;nbsp;Here are some common problems to check:&lt;/p&gt; &lt;h3&gt;HtmlPage References&lt;/h3&gt; &lt;p&gt;You can reference the System.Windows.Browser.HtmlPage class when running the application within a browser, but in OOB mode, it will throw an exception. &amp;nbsp;And even though you may have the debugger attached, this typically results in a blank screen depending on where the HtmlPage class is used. &amp;nbsp;If you do need to use HtmlPage, wrap it in a check for OOB mode. &amp;nbsp;Here is an example of code I typically have in App.xaml.cs to set focus on the Silverlight plugin within a browser window:&lt;/p&gt; &lt;p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #008200;"&gt;// Focus the Silverlight plugin, but only when running in-browser&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;if&lt;/code&gt; &lt;code style="color: #000000;"&gt;(!Application.Current.IsRunningOutOfBrowser)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;HtmlPage.Plugin.Focus();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/p&gt; &lt;p&gt;Without the IsRunningOutOfBrowser check, this would throw an exception in OOB mode.&lt;/p&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;h3&gt;InitializeRootVisual and WCF calls&lt;/h3&gt; &lt;p&gt;If you are using WCF calls or WCF RIA Services, there is another elusive problem that can arise. &amp;nbsp;While there is no problem when running in browser, OOB mode has a problem with making a WCF call before the RootVisual is set. &amp;nbsp;So if you are calling a method like LoadUser(), be sure to call InitializeRootVisual() first:&lt;/p&gt; &lt;p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;private&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;void&lt;/code&gt; &lt;code style="color: #000000;"&gt;Application_Startup(&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;object&lt;/code&gt; &lt;code style="color: #000000;"&gt;sender, StartupEventArgs e)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #008200;"&gt;// This will enable you to bind controls in XAML files to WebContext.Current properties&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.Resources.Add(&lt;/code&gt;&lt;code style="color: blue;"&gt;"WebContext"&lt;/code&gt;&lt;code style="color: #000000;"&gt;, WebContext.Current);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #008200;"&gt;// Initialize the RootVisual before LoadUser to prevent OOB problems&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;InitializeRootVisual();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #008200;"&gt;// This will automatically authenticate a user when using windows authentication&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #008200;"&gt;// or when the user chose "Keep me signed in" on a previous login attempt&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;WebContext.Current.Authentication.LoadUser(Application_UserLoaded, &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;null&lt;/code&gt;&lt;code style="color: #000000;"&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/p&gt; &lt;p&gt;Are there any other tricks you've found to resolve Out of Browser problems?&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=zIvf2GPPIBc:gmcxsm_S7Og:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=zIvf2GPPIBc:gmcxsm_S7Og:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=zIvf2GPPIBc:gmcxsm_S7Og:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=zIvf2GPPIBc:gmcxsm_S7Og:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=zIvf2GPPIBc:gmcxsm_S7Og:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/zIvf2GPPIBc" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/zIvf2GPPIBc/Troubleshooting_Silverlight_Out-of-Browser_Problems.aspx</link>
      <author>Josh Eastburn</author>
      <comments>http://blog.falafel.com/Blogs/11-12-02/Troubleshooting_Silverlight_Out-of-Browser_Problems.aspx</comments>
      <guid isPermaLink="false">39a399b6-f0d0-49c1-8e03-33a77410e66e</guid>
      <pubDate>Fri, 02 Dec 2011 15:26:31 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-12-02/Troubleshooting_Silverlight_Out-of-Browser_Problems.aspx</feedburner:origLink></item>
    <item>
      <title>Get Discounted Sitefinity Consulting from Falafel!</title>
      <description>&lt;p style="margin-bottom: 0px; margin-left: 10px; font-family: 'lucida sans unicode', 'lucida grande', sans-serif; font-size: 12px;"&gt;The
end of the year is upon us. Time to assess the status of that Sitefinity
project. &lt;/p&gt; &lt;ul style="font-family: 'lucida sans unicode', 'lucida grande', sans-serif; font-size: 12px;"&gt; &lt;li&gt;Did it ever get off the ground?
    &lt;/li&gt; &lt;li&gt;Were all of the requirements met?
    &lt;/li&gt; &lt;li&gt;Will it be delivered on time? &lt;/li&gt; &lt;/ul&gt; &lt;p style="margin-top: 12px; margin-bottom: 12px; margin-left: 10px; font-family: 'lucida sans unicode', 'lucida grande', sans-serif; font-size: 12px;"&gt;If
you answered “no” to any of these questions, we have just the deal for you.
Through the end of the year, Falafel Software will be offering Sitefinity
Consulting hours to new clients at a discounted rate. &lt;strong&gt;You could save up to
33% by purchasing one of these packages!&lt;/strong&gt; The purchased hours are good for 12
months and can be used for almost anything: &lt;/p&gt; &lt;ul style="font-family: 'lucida sans unicode', 'lucida grande', sans-serif; font-size: 12px;"&gt; &lt;li&gt;Planning to upgrade Sitefinity? &lt;span style="font-weight: bold; color: #009900;"&gt;- Leave that to us!&lt;/span&gt; &lt;/li&gt; &lt;li&gt;Want live support on standby? &lt;span style="font-weight: bold; color: #009900;"&gt;-
    Schedule web conferences with the experts!&lt;/span&gt; &lt;/li&gt; &lt;li&gt;Need a new module or widget? &lt;span style="font-weight: bold; color: #009900;"&gt;-
    Let us build it! &lt;/span&gt; &lt;/li&gt; &lt;li&gt;Need to integrate with another system? &lt;span style="font-weight: bold; color: #009900;"&gt;- We will make it happen!&lt;/span&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p style="margin-bottom: 0px; margin-left: 10px; font-family: 'lucida sans unicode', 'lucida grande', sans-serif; font-size: 12px;"&gt;Normally,
live online support from a Sitefinity expert at Falafel Software could cost you
up to $250/hour. Purchasing a consulting package before the end of the year does
much more than that. You &lt;strong&gt;&lt;em&gt;add&lt;/em&gt;&lt;/strong&gt; a Sitefinity expert to your team at a
huge discount: &lt;/p&gt; &lt;ul style="font-family: 'lucida sans unicode', 'lucida grande', sans-serif; font-size: 12px;"&gt; &lt;li&gt;Purchase 1 hour at $250/hour &lt;span style="font-weight: bold; color: #009900;"&gt;-
    Standard Rate&lt;/span&gt; &lt;/li&gt; &lt;li&gt;Purchase 20 hours at $195/hour &lt;span style="font-weight: bold; font-size: 16px; color: #009900;"&gt;- 22% Savings! &lt;/span&gt; &lt;/li&gt; &lt;li&gt;Purchase 40 hours at $165/hour &lt;span style="font-weight: bold; font-size: 20px; color: #009900;"&gt;- 33% Savings&lt;/span&gt; &lt;/li&gt; &lt;/ul&gt; &lt;div&gt;&lt;span style="font-family: 'lucida sans unicode', 'lucida grande', sans-serif; color: #009900;"&gt;&lt;span style="font-size: 20px;"&gt;&lt;strong&gt; &lt;p style="margin-top: 12px; margin-bottom: 12px; margin-left: 10px; font-family: 'lucida sans unicode', 'lucida grande', sans-serif; font-size: 12px;"&gt;&lt;span style="font-weight: bold; font-size: 16px; color: #333333;"&gt;Purchase your package
from the Falafel Software &lt;a href="https://www.falafel.com/store/consutingstore/telerikconsultingexpress.aspx" target="_blank"&gt;store&lt;/a&gt;, or contact &lt;a href="mailto:sales@falafel.com"&gt;sales@falafel.com&lt;/a&gt;
for your free project estimate.&lt;/span&gt; &lt;/p&gt; &lt;br /&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=HsZWRFcLLmE:acHLDnvhCcw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=HsZWRFcLLmE:acHLDnvhCcw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=HsZWRFcLLmE:acHLDnvhCcw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=HsZWRFcLLmE:acHLDnvhCcw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=HsZWRFcLLmE:acHLDnvhCcw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/HsZWRFcLLmE" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/HsZWRFcLLmE/Get_Discounted_Sitefinity_Consulting_from_Falafel.aspx</link>
      <author>Mike Dugan</author>
      <comments>http://blog.falafel.com/Blogs/11-11-29/Get_Discounted_Sitefinity_Consulting_from_Falafel.aspx</comments>
      <guid isPermaLink="false">26439c6f-b8ef-4576-8e93-73d3d95f4ae3</guid>
      <pubDate>Tue, 29 Nov 2011 21:33:07 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-11-29/Get_Discounted_Sitefinity_Consulting_from_Falafel.aspx</feedburner:origLink></item>
    <item>
      <title>Date Range Searches in Silverlight</title>
      <description>&lt;p&gt;When building Line-of-Business applications, we typically provide a variety of ways to search for customer or transaction data. &amp;nbsp;One of the common search types is a date range search. &amp;nbsp;Telerik provides an excellent UI control to select dates, the &lt;a href="http://www.telerik.com/products/silverlight/controls/datetimepicker.aspx"&gt;RadDatePicker&lt;/a&gt;. &amp;nbsp;&lt;/p&gt; &lt;p&gt;So now your application has a begin date and end date for your search and everything looks great until you realize that the end date is never included in the search results. &amp;nbsp;This is because the DatePicker control defaults to midnight on the selected day (0 hours, 0 minutes, 0 seconds, 0 milliseconds) and if you use less-than criteria in your search, if the time is after midnight, it will not be included in the results.&lt;/p&gt; &lt;p&gt;There is a simple solution for this in Silverlight. &amp;nbsp;While you could add logic on the back end that would&amp;nbsp;accommodate&amp;nbsp;this, an easy and reusable solution is to use a converter on the end date in the UI. &amp;nbsp;Here is some sample code that will take the selected date, use only the date part of the DateTime object and add 1 day and subtract 1 millisecond. &amp;nbsp;This will allow you to include the entire end date in your search.&lt;/p&gt; &lt;p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;public class EndDateConverter : IValueConverter&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;public object Convert(object value, Type targetType, object parameter, &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;System.Globalization.CultureInfo culture)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;return value;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;public object ConvertBack(object value, Type targetType, object parameter, &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;System.Globalization.CultureInfo culture)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;if (targetType != typeof(DateTime) &amp;amp;&amp;amp; targetType != typeof(DateTime?))&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;throw new ArgumentOutOfRangeException("targetType", &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;"EndDateConverter can only convert to DateTime");&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;if (value == null)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;return value;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;// When binding, we need to set the END of the selected date&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;// Get just the DATE part of the DateTime&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;var endDate = ((DateTime) value).Date;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;// Add 1 day and subtract 1 millisecond, which will include&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; ALL of the selected date&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;return endDate.AddDays(1).AddMilliseconds(-1);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/p&gt; &lt;p&gt;And now you can simply use that converter anywhere you have a date range search, but only include it on the END date.&lt;/p&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerik:RadDatePicker&lt;/code&gt; &lt;code style="color: #000000;"&gt;SelectedDate="{Binding EndDateSearch, &lt;/code&gt;&lt;code style="color: #808080;"&gt;Mode&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;TwoWay&lt;/code&gt;&lt;code style="color: #000000;"&gt;, &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;Converter={StaticResource EndDateConverter}}"/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=NWh0tzSVEO8:W_4PrIZuCt4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=NWh0tzSVEO8:W_4PrIZuCt4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=NWh0tzSVEO8:W_4PrIZuCt4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=NWh0tzSVEO8:W_4PrIZuCt4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=NWh0tzSVEO8:W_4PrIZuCt4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/NWh0tzSVEO8" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/NWh0tzSVEO8/Date_Range_Searches_in_Silverlight.aspx</link>
      <author>Josh Eastburn</author>
      <comments>http://blog.falafel.com/Blogs/11-11-28/Date_Range_Searches_in_Silverlight.aspx</comments>
      <guid isPermaLink="false">c36a77b1-6960-4fe7-beaa-81580783811c</guid>
      <pubDate>Mon, 28 Nov 2011 21:23:00 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-11-28/Date_Range_Searches_in_Silverlight.aspx</feedburner:origLink></item>
    <item>
      <title>WP7 Attitude and Magnetometer UPDATE with HTC Titan</title>
      <description>&lt;p&gt;With the release of the &lt;a href="http://www.htc.com/www/smartphones/htc-titan/" target="_blank"&gt;HTC Titan&lt;/a&gt;, I needed to update a couple of my previous blogs.&lt;/p&gt; &lt;p&gt;In my blog &lt;a href="http://blog.falafel.com/blogs/11-11-11/Silverlight_XNA_and_Correcting_WP7_Attitude_Alignment.aspx" target="_blank"&gt;Silverlight/XNA and Correcting WP7 Attitude Alignment&lt;/a&gt;, I talked about how to correct for any misalignment of the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.motionreading.attitude(v=VS.92).aspx"&gt;Attitude &lt;/a&gt;sensors with the phone body. With my Samsung Focus, I found that the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.motionreading.attitude(v=VS.92).aspx"&gt;Attitude &lt;/a&gt;alignment was off by about 3 degrees, which was noticeable in my compass application. The &lt;a href="http://www.htc.com/www/smartphones/htc-titan/" target="_blank"&gt;HTC Titan&lt;/a&gt; does not need any &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.motionreading.attitude(v=VS.92).aspx"&gt;Attitude &lt;/a&gt;adjustment; its &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.motionreading.attitude(v=VS.92).aspx"&gt;Attitude &lt;/a&gt; sensors are already inline with the phone body. &lt;/p&gt; &lt;p&gt;In my blog &lt;a href="http://blog.falafel.com/blogs/11-11-16/Showing_the_WP7_Magnetometer_in_3D_with_XNA_Silverlight.aspx" target="_blank"&gt;Showing the WP7 Magnetometer in 3D with XNA/Silverlight&lt;/a&gt;, I stated that the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.compassreading.magnetometerreading(v=VS.92).aspx"&gt;MagnetometerReading&lt;/a&gt; property in the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.compassreading_members(v=VS.92).aspx"&gt;Compass API&lt;/a&gt; returns a normalized vector instead of a reading in microteslas, thus only indicating a direction and not the field strength. However, I’ve recently discovered that not all WP7 phones are the same. I was very happy to find out that the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.compassreading.magnetometerreading(v=VS.92).aspx"&gt;MagnetometerReading&lt;/a&gt; property on the Titan does indeed return the field strength in microteslas. So I updated my Magnetometer application to indicate field strength. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:86b7aebb-9f4e-4f89-b50f-7df7dbf56c89" class="wlWriterEditableSmartContent"&gt; &lt;div id="2fb6ca09-9a0c-4673-b7de-96d27c38c982" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; display: inline;"&gt; &lt;div&gt;&lt;object width="651" height="366"&gt; &lt;param name="movie" value="http://www.youtube.com/v/tRK0PumoX8Y?hl=en&amp;amp;hd=1"&gt;&lt;embed src="http://www.youtube.com/v/tRK0PumoX8Y?hl=en&amp;amp;hd=1" type="application/x-shockwave-flash" width="651" height="366"&gt;&lt;/object&gt;&lt;/div&gt; &lt;/div&gt; &lt;div style="width: 651px; clear: both; font-size: 0.8em;"&gt;WP7 Magnetometer with the HTC Titan&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;As you can see from the video, the magnet field shows a strength of around 40 uT. This matches up with what is expected at my location from the &lt;a href="http://en.wikipedia.org/w/index.php?title=File:WMM2010_F_MERC.pdf&amp;amp;page=1" target="_blank"&gt;World Magnetic Model&lt;/a&gt;. When you put a strong magnet next to it, you can really see the field strength changing.&lt;/p&gt; &lt;p&gt;Now we have a real Magnetometer application! We may have to put this out on the Marketplace.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=O3NNm95NMfo:BYUGiM6aXEw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=O3NNm95NMfo:BYUGiM6aXEw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=O3NNm95NMfo:BYUGiM6aXEw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=O3NNm95NMfo:BYUGiM6aXEw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=O3NNm95NMfo:BYUGiM6aXEw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/O3NNm95NMfo" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/O3NNm95NMfo/WP7_Attitude_and_Magnetometer_UPDATE_with_HTC_Titan.aspx</link>
      <author>Bary Nusz</author>
      <comments>http://blog.falafel.com/Blogs/11-11-21/WP7_Attitude_and_Magnetometer_UPDATE_with_HTC_Titan.aspx</comments>
      <guid isPermaLink="false">3dde96c7-ad1e-4c57-b777-a142a07da8cc</guid>
      <pubDate>Mon, 21 Nov 2011 19:43:19 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-11-21/WP7_Attitude_and_Magnetometer_UPDATE_with_HTC_Titan.aspx</feedburner:origLink></item>
    <item>
      <title>Falafel forums are here!</title>
      <description>&lt;div style="background-color: transparent;"&gt;&lt;span id="internal-source-marker_0.12796441465616226" style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-family: arial; font-size: 11pt;"&gt;Have a question about a Falafel Software product or service? Now there is an easy way to ask. Introducing the Falafel forums. Visit &lt;/span&gt;&lt;a href="http://www.falafel.com/forums.aspx"&gt;&lt;span style="background-color: transparent; vertical-align: baseline; white-space: pre-wrap; font-family: arial; font-size: 11pt; color: #000099;"&gt;http://www.falafel.com/forums.aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-family: arial; font-size: 11pt;"&gt; to get in touch with the Falafel Software team and we will respond. It is as simple as that. &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-family: arial; font-size: 11pt;"&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-family: arial; font-size: 11pt;"&gt;We want to help you and the community when you have a follow up question after a training class or when you need more information about a product or service. Most importantly, we want to hear about how we can better serve you. &amp;nbsp;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-family: arial; font-size: 11pt;"&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-family: arial; font-size: 11pt;"&gt;To get the ball rolling, we are asking for your input regarding our Sitefinity and TestComplete training classes. Drop by the forums to let us know what topics you would most like to see covered in these courses, and we will be sure to include them in future trainings.&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-family: arial; font-size: 11pt;"&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-family: arial; font-size: 11pt;"&gt;Falafel forums: &lt;/span&gt;&lt;a href="http://www.falafel.com/forums.aspx"&gt;&lt;span style="background-color: transparent; vertical-align: baseline; white-space: pre-wrap; font-family: arial; font-size: 11pt; color: #000099;"&gt;http://www.falafel.com/forums.aspx&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=5uZdl8CaXUM:h8sI0cl3FMA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=5uZdl8CaXUM:h8sI0cl3FMA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=5uZdl8CaXUM:h8sI0cl3FMA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=5uZdl8CaXUM:h8sI0cl3FMA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=5uZdl8CaXUM:h8sI0cl3FMA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/5uZdl8CaXUM" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/5uZdl8CaXUM/Falafel_forums_are_here.aspx</link>
      <author>Mike Dugan</author>
      <comments>http://blog.falafel.com/Blogs/11-11-17/Falafel_forums_are_here.aspx</comments>
      <guid isPermaLink="false">45c46799-32dd-40ed-8881-5d5edee43501</guid>
      <pubDate>Thu, 17 Nov 2011 16:30:23 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-11-17/Falafel_forums_are_here.aspx</feedburner:origLink></item>
    <item>
      <title>Windows Azure SDK 1.6 is here</title>
      <description>&lt;p&gt;With some very nice new features!&lt;/p&gt;  &lt;p&gt;Instead of deleting and reconfiguring a whole new instance when you upload a new version of your service, now it is upgraded in place!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-clip_image001_2.sflb.ashx"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-clip_image001_thumb.sflb.ashx" width="244" height="78" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Even better, the deployment ID of the app (which is used in the DNS entry) doesn’t change, so no more having to update our DNS records every time I deploy a new version.&lt;/p&gt;  &lt;p&gt;And best of all, if you have more than 1 instance of a role running, it takes turn upgrading them so your service is never down!&lt;/p&gt;  &lt;p&gt;There are some nice new additions to the Visual Studio deployment experience, less certificates to manage, and ways to save groups of settings for example for Production and Staging.&lt;/p&gt;  &lt;p&gt;Get your copy &lt;a href="http://www.microsoft.com/windowsazure/sdk/" target="_blank"&gt;here&lt;/a&gt; today!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=BZFuZMuR2ZM:OyxbQWWY_38:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=BZFuZMuR2ZM:OyxbQWWY_38:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=BZFuZMuR2ZM:OyxbQWWY_38:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=BZFuZMuR2ZM:OyxbQWWY_38:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=BZFuZMuR2ZM:OyxbQWWY_38:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/BZFuZMuR2ZM" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/BZFuZMuR2ZM/Windows_Azure_SDK_1_6_is_here.aspx</link>
      <author>John Waters</author>
      <comments>http://blog.falafel.com/Blogs/11-11-16/Windows_Azure_SDK_1_6_is_here.aspx</comments>
      <guid isPermaLink="false">ec07c839-3ce1-40ba-9e28-54e5b55e5eb1</guid>
      <pubDate>Thu, 17 Nov 2011 01:24:51 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-11-16/Windows_Azure_SDK_1_6_is_here.aspx</feedburner:origLink></item>
    <item>
      <title>Showing the WP7 Magnetometer in 3D with XNA/Silverlight</title>
      <description>&lt;p&gt;In my last post I came up with a &lt;a href="http://blog.falafel.com/blogs/11-11-11/Silverlight_XNA_and_Correcting_WP7_Attitude_Alignment.aspx" target="_blank"&gt;simple compass application&lt;/a&gt; and how to correct for sensor misalignments. In that application I had a blue arrow that always points up and a yellow arrow that always points North. Now I wanted to add another arrow showing the raw magnetometer readings. For the simple compass application, we just needed to use the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.motion(v=VS.92).aspx"&gt;Motion Sensor API&lt;/a&gt;. To get access to the raw magnetometer readings, we need to use the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.compassreading_members(v=VS.92).aspx" target="_blank"&gt;Compass API&lt;/a&gt; to get to the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.compassreading.magnetometerreading(v=VS.92).aspx" target="_blank"&gt;MagnetometerReading&lt;/a&gt; property. &lt;/p&gt; &lt;p&gt;To set up the compass I used the &lt;a href="http://msdn.microsoft.com/en-us/library/hh202974(v=vs.92).aspx" target="_blank"&gt;Compass Sensor example&lt;/a&gt; as reference. In the documentation, it says that the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.compassreading.magnetometerreading(v=VS.92).aspx" target="_blank"&gt;MagnetometerReading&lt;/a&gt; property (which is a Vector3) returns the magnetometer reading in microteslas. However, I found that it actually returns a normalized vector, so we really only know the direction of the magnetic field and not the strength. It would be nice to know the strength, but for now we’ll just have to do with the direction.&amp;nbsp;UPDATE:&amp;nbsp;&lt;a href="http://blog.falafel.com/blogs/barynusz/11-11-21/WP7_Attitude_and_Magnetometer_UPDATE_with_HTC_Titan.aspxhttp://blog.falafel.com/blogs/barynusz/11-11-21/WP7_Attitude_and_Magnetometer_UPDATE_with_HTC_Titan.aspx"&gt;Please see this blog for an update&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;The normalized magnetometer values are aligned with the phone with the X-axis pointing to the right, the Y-axis pointing out the top, and the Z-axis pointing out the face of the phone.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-36fe7f7adc47_B621-WP7Axis_2.sflb.ashx"&gt;&lt;img style="border:0px;background-image: none;       padding-left: 0px; padding-right: 0px; display: inline;       padding-top: 0px;" title="WP7Axis" alt="WP7Axis" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-36fe7f7adc47_B621-WP7Axis_thumb.sflb.ashx" width="295" height="476" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Building upon my &lt;a href="http://blog.falafel.com/blogs/11-11-11/Silverlight_XNA_and_Correcting_WP7_Attitude_Alignment.aspx" target="_blank"&gt;simple compass application&lt;/a&gt;, I added a red arrow to show the direction of the magnetic field. In my application, by default, the arrows orient to the Y-axis. To get our new red arrow to line up with the magnetometer vector, we need to do some Matrix multiplication to get a rotational matrix.&lt;/p&gt; &lt;p&gt;In the following diagram, the dashed line is the magnetometer vector with the value x,y,z. Angle xrot is the angle of the vector off of the XY plane.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-36fe7f7adc47_B621-xrot_2.sflb.ashx"&gt;&lt;img style="border:0px;background-image: none;       padding-left: 0px; padding-right: 0px; display: inline;       padding-top: 0px;" title="xrot" alt="xrot" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-36fe7f7adc47_B621-xrot_thumb.sflb.ashx" width="634" height="180" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The first step is to rotate the arrow about the X-axis to get the correct pitch. This is easily done with the following code&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;var xrot = Math.Atan2(rawMagnetometerReading.Z, rawMagnetometerReading.Y);&lt;/pre&gt; &lt;pre&gt;Matrix redMatrix = Matrix.CreateRotationX((&lt;span class="kwrd"&gt;float&lt;/span&gt;)xrot);&lt;/pre&gt; &lt;/div&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;We use the &lt;a href="http://msdn.microsoft.com/en-us/library/system.math.atan2.aspx" target="_blank"&gt;Atan2 function&lt;/a&gt; and pass in the values for the Z and Y to get the angle (xrot) of the vector relative to the Y-axis. Go &lt;a href="http://www.khanacademy.org/video/inverse-trig-functions--arctan?playlist=Trigonometry" target="_blank"&gt;here&lt;/a&gt; if you need a refresher on why we use the &lt;a href="http://msdn.microsoft.com/en-us/library/system.math.atan2.aspx" target="_blank"&gt;Atan2 function&lt;/a&gt;. We then create a rotational axis from that angle. Now we only need to make one more axis rotation to get the arrow to line up with the magnetometer vector. &lt;/p&gt; &lt;p&gt;This one requires a bit more math. In this diagram (looking down at the face of the phone with the top of the phone pointing to the right), the angle zrot is between the YZ plane and the magnetometer vector. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-36fe7f7adc47_B621-zrot_2.sflb.ashx"&gt;&lt;img style="border:0px;background-image: none;       padding-left: 0px; padding-right: 0px; display: inline;       padding-top: 0px;" title="zrot" alt="zrot" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-36fe7f7adc47_B621-zrot_thumb.sflb.ashx" width="634" height="301" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Because we’ve already rotated the arrow about the X-axis, we need to find the magnitude of the magnetometer vector in the YZ plane. We can then use that magnitude in combination with the x value of the magnetometer vector to calculate the value of the zrot angle. Now we can do our next rotation. The final code snippet is as follows.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="csharpcode"&gt; &lt;pre class="alt"&gt;var xrot = Math.Atan2(rawMagnetometerReading.Z, rawMagnetometerReading.Y);&lt;/pre&gt; &lt;pre&gt;var yzmag = Math.Sqrt(Math.Pow(rawMagnetometerReading.Y, 2) + &lt;/pre&gt; &lt;pre class="alt"&gt;     Math.Pow(rawMagnetometerReading.Z, 2));&lt;/pre&gt; &lt;pre&gt;var zrot = Math.Atan2(rawMagnetometerReading.X, yzmag);&lt;/pre&gt; &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt; &lt;pre&gt;Matrix redMatrix = Matrix.CreateRotationX((&lt;span class="kwrd"&gt;float&lt;/span&gt;)xrot);&lt;/pre&gt; &lt;pre class="alt"&gt;redMatrix = Matrix.CreateRotationZ((&lt;span class="kwrd"&gt;float&lt;/span&gt;)-zrot) * redMatrix;&lt;/pre&gt; &lt;pre&gt;redArrow.World = redMatrix;&lt;/pre&gt; &lt;/div&gt; &lt;p&gt; &lt;/p&gt; &lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;We first calculate the rotation about the X-axis (xrot), then the magnitude of the magnetometer vector in the YZ plane (yzmag), and finally the angle between the YZ plane and the magnetometer vector (zrot). With the xrot and zrot angles we can now do our matrix rotations and apply the resulting rotational matrix to our red arrow.&lt;/p&gt; &lt;p&gt;The result is the following.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-36fe7f7adc47_B621-WP_000988_2.sflb.ashx"&gt;&lt;img style="border:0px;background-image: none;       padding-left: 0px; padding-right: 0px; display: inline;       padding-top: 0px;" title="WP_000988" alt="WP_000988" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-36fe7f7adc47_B621-WP_000988_thumb.sflb.ashx" width="374" height="495" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In this new application, the blue arrow always points up, the yellow arrow always points North, and the red arrow lines up with the earth’s magnetic field (assuming you’re not around any other strong magnetic fields). In the screen shot above I tried to get the yellow and red arrows lined up in the plane of the phone’s screen to show the &lt;a href="http://en.wikipedia.org/w/index.php?title=File:World_Magnetic_Inclination_2010.pdf&amp;amp;page=1" target="_blank"&gt;magnetic inclination&lt;/a&gt; at my location. This value should be around 65 degrees down from the horizontal for the Texas panhandle, which looks to be spot on. &lt;/p&gt; &lt;p&gt;One other interesting thing to notice is that the yellow arrow, which indicates true north, is slightly off from the red arrow, which indicates the magnetic field. In this screen shot, which I took when the phone was flat and pointing north, you can see that the red arrow is pointing slightly to the right from the yellow arrow.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-36fe7f7adc47_B621-WP_000989_2.sflb.ashx"&gt;&lt;img style="border:0px;background-image: none;       padding-left: 0px; padding-right: 0px; display: inline;       padding-top: 0px;" title="WP_000989" alt="WP_000989" src="http://blog.falafel.com/Libraries/MetaBlogLib/Windows-Live-Writer-36fe7f7adc47_B621-WP_000989_thumb.sflb.ashx" width="374" height="503" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;This offset is called the &lt;a href="http://en.wikipedia.org/wiki/Magnetic_declination" target="_blank"&gt;magnetic declination&lt;/a&gt;. This value should be around 6 degrees in the Texas panhandle, which again looks to be spot on.&lt;/p&gt; &lt;p&gt;What about making the same alignment correction as I did in my &lt;a href="http://blog.falafel.com/blogs/11-11-11/Silverlight_XNA_and_Correcting_WP7_Attitude_Alignment.aspx" target="_blank"&gt;previous blog&lt;/a&gt;? It’s not really necessary in this case because the magnetometer sensor is a different sensor from the accelerometer used in the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.motion(v=VS.92).aspx"&gt;Motion API&lt;/a&gt; to determine what direction is up. Unless you have a highly specialized area where you absolutely know the strength and direction of the magnetic field, you can’t really make any magnetometer alignment corrections. In any case, with the errors we’re talking about, it’s not worth the effort.&lt;/p&gt; &lt;p&gt;The final product is very good at following the magnetic fields, as you can see in this video. In the last part of the video, you can see how the field changes drastically when rotating a magnet near the phone. &lt;/p&gt; &lt;div style="padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:3901c1fd-835e-4031-bec0-65fd63e44c33" class="wlWriterEditableSmartContent"&gt; &lt;div id="05817e1b-01f2-4aa0-b22b-45e42df8a7fb" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; display: inline;"&gt; &lt;div&gt;&lt;object width="626" height="351"&gt; &lt;param name="movie" value="http://www.youtube.com/v/Eys7xqIaYIo?hl=en&amp;amp;hd=1"&gt;&lt;embed src="http://www.youtube.com/v/Eys7xqIaYIo?hl=en&amp;amp;hd=1" type="application/x-shockwave-flash" width="626" height="351"&gt;&lt;/object&gt;&lt;/div&gt; &lt;/div&gt; &lt;div style="width: 626px; clear: both; font-size: 0.8em;"&gt;WP7 Magnetometer Application&lt;/div&gt; &lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=copWq948x3g:Y9-_6wr8VzY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=copWq948x3g:Y9-_6wr8VzY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=copWq948x3g:Y9-_6wr8VzY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=copWq948x3g:Y9-_6wr8VzY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=copWq948x3g:Y9-_6wr8VzY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/copWq948x3g" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/copWq948x3g/Showing_the_WP7_Magnetometer_in_3D_with_XNA_Silverlight.aspx</link>
      <author>Bary Nusz</author>
      <comments>http://blog.falafel.com/Blogs/11-11-16/Showing_the_WP7_Magnetometer_in_3D_with_XNA_Silverlight.aspx</comments>
      <guid isPermaLink="false">be300433-4dbc-4276-9643-18144aadc570</guid>
      <pubDate>Wed, 16 Nov 2011 16:15:06 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-11-16/Showing_the_WP7_Magnetometer_in_3D_with_XNA_Silverlight.aspx</feedburner:origLink></item>
    <item>
      <title>EventBoard featured in Telerik case study</title>
      <description>&lt;p&gt;&lt;a href="http://www.eventboardmobile.com" title="Link to EventBoard homepage"&gt;EventBoard&lt;/a&gt;&amp;nbsp;is making waves again. Telerik just released a customer case study featuring our mobile conference companion:&amp;nbsp;&lt;a href="http://www.telerik.com/company/customers/case-studies/telerik-s-integrated-technologies-help-make-falafel-s-eventboard-solution-a-hit-with-audiences.aspx"&gt;http://www.telerik.com/company/customers/case-studies/telerik-s-integrated-technologies-help-make-falafel-s-eventboard-solution-a-hit-with-audiences.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;When Telerik asked if we wanted to be part of a customer case study, the answer was an enthusiastic yes! At every turn, EventBoard utilizes a Telerik solution. The WP7 mobile application uses RadControls for Windows Phone, the administration application uses RadControls for Silverlight, and even the product webpage features blogs powered by Sitefinity. &lt;/p&gt; &lt;p&gt;Thanks to the Telerik controls, EventBoard for Windows Phone continues to shine as a model of style and usability. Expanding the use of&amp;nbsp; Telerik’s&amp;nbsp; Window’s Phone Controls in future releases will only strengthen that position.&amp;nbsp; So look for even more Telerik controls in our next ‘Mango’ release!&lt;/p&gt; &lt;p&gt;Case Study:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.telerik.com/company/customers/case-studies/telerik-s-integrated-technologies-help-make-falafel-s-eventboard-solution-a-hit-with-audiences.aspx"&gt;http://www.telerik.com/company/customers/case-studies/telerik-s-integrated-technologies-help-make-falafel-s-eventboard-solution-a-hit-with-audiences.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;EventBoard product page:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.eventboardmobile.com" title="Link to EventBoard homepage"&gt;http://www.eventboardmobile.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=pIrGBtrT5tA:i5o8H4-Wfcw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=pIrGBtrT5tA:i5o8H4-Wfcw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=pIrGBtrT5tA:i5o8H4-Wfcw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=pIrGBtrT5tA:i5o8H4-Wfcw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=pIrGBtrT5tA:i5o8H4-Wfcw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/pIrGBtrT5tA" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/pIrGBtrT5tA/EventBoard_featured_in_Telerik_case_study.aspx</link>
      <author>Mike Dugan</author>
      <comments>http://blog.falafel.com/Blogs/11-11-15/EventBoard_featured_in_Telerik_case_study.aspx</comments>
      <guid isPermaLink="false">450bd8ab-d4ad-4016-8e89-0725a85dffc5</guid>
      <pubDate>Tue, 15 Nov 2011 17:05:24 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-11-15/EventBoard_featured_in_Telerik_case_study.aspx</feedburner:origLink></item>
    <item>
      <title>Upload Documents Remotely to Sitefinity</title>
      <description>&lt;p&gt;Uploading documents to the Sitefinity library is pretty simple using the API, but what if you wanted a remote process to upload documents to Sitefinity? The first thing I thought was to look into the documents library web services. The problem I found was there was no web service to pass my file streams or bytes.&lt;/p&gt; &lt;br /&gt;
So instead of extending the web services, I decided to keep things simple and leverage basic HTML concepts. How about allowing a remote POST of a file to Sitefinity using "&amp;lt;input type='file' /&amp;gt;"?&lt;br /&gt; &lt;br /&gt;
We can achieve this by creating an HttpHandler within the Sitefinity project. This handler URL will listen for submitted forms and handle the uploaded files.&lt;br /&gt; &lt;br /&gt;
Check out the goods:
&lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;pre class="brush: csharp;"&gt;public class UploadFileHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";

        //VALIDATE FILES IN REQUEST
        if (context.Request.Files.Count &amp;gt; 0)
        {
            try
            {
                //HANDLE EACH FILE IN THE REQUEST
                foreach (string key in context.Request.Files)
                {
                    var item = context.Request.Files[key];
                    string result = ProcessFile(context, item);
                    context.Response.Write(result);
                }

            }
            catch (Exception ex)
            {
                //NO FILES IN REQUEST TO HANDLE
                context.Response.Write("Error: " + ex.Message);
            }
        }
        else
        {
            //NO FILES IN REQUEST TO HANDLE
            context.Response.Write("No file uploaded");
        }
    }

    public string ProcessFile(HttpContext context, HttpPostedFile file)
    {
        string fileName = Path.GetFileName(file.FileName);
        string libraryName = context.Request["library"];
        string storageProvider = context.Request["provider"];
        var credentials = new Credentials
        {
            UserName = context.Request["username"],
            Password = context.Request["password"]
        };

        //SEND FILE TO SITEFINITY LIBRARY
        var docId = SitefinityUtils.UploadDocument(file.InputStream, fileName, libraryName, storageProvider, credentials);

        //SEND RESULT
        return (docId != Guid.Empty ? "File uploaded" : "File failed upload!");
    }

    public bool IsReusable
    {
        get { return false; }
    }
}
&lt;/pre&gt;
Also, here is the code for uploading the posted file to the Sitefinity documents library. Notice that this is a general purpose method for uploading a file stream.&lt;br /&gt; &lt;pre class="brush: csharp;"&gt;public class SitefinityUtils
{
    public const string URL_NAME_CHARS_TO_REPLACE = @"[^\w\-\!\$\'\(\)\=\@\d_]+";
    public const string URL_NAME_REPLACE_STRING = "-";

    public static Guid UploadDocument(Stream inputStream, string fileName, string libraryName, string blobStorageProvider, Credentials credentials)
    {
        //VALIDATE INPUT
        if (String.IsNullOrEmpty(fileName) || String.IsNullOrEmpty(libraryName))
            return Guid.Empty;

        //AUTHENTICATE
        var result = SecurityManager.AuthenticateUser(credentials);
        if (result == UserLoggingReason.Success)
        {
            var manager = LibrariesManager.GetManager();

            //CREATE LIBRARY IF APPLICABLE
            var library = manager.GetDocumentLibraries().Where(l =&amp;gt; l.Title == libraryName).SingleOrDefault();
            if (library == null)
            {
                library = manager.CreateDocumentLibrary();
                library.Title = libraryName;
                library.UrlName = Regex.Replace(libraryName.ToLower(), URL_NAME_CHARS_TO_REPLACE, URL_NAME_REPLACE_STRING);
                if (!String.IsNullOrEmpty(blobStorageProvider))
                {
                    library.BlobStorageProvider = blobStorageProvider;
                }

                manager.RecompileItemUrls&lt;documentlibrary&gt;(library);
                manager.SaveChanges();
            }

            //CREATE DOCUMENT IN LIBRARY
            var document = manager.CreateDocument();
            string docName = Path.GetFileNameWithoutExtension(fileName);
            document.Parent = library;
            document.Title = docName;
            document.Description = docName;
            document.UrlName = docName;
            manager.Upload(document, inputStream, Path.GetExtension(fileName));
            manager.RecompileItemUrls&lt;document&gt;(document);
            manager.Lifecycle.Publish(document);
            manager.SaveChanges();

            //LOGOUT
            SecurityManager.Logout();

            return document.Id;
        }

        return Guid.Empty;
    }
}
&lt;/document&gt;&lt;/documentlibrary&gt;&lt;/pre&gt;
To activate the HttpHandler, remember to register it in the web.config:&lt;br /&gt; &lt;pre class="brush: xml;"&gt;&amp;lt;system.webServer&amp;gt;
...
&amp;lt;handlers&amp;gt;
...
&amp;lt;add name="UploadFileHandler" path="UploadFileHandler.ashx" verb="*" type="SitefinityWebApp.Custom.Files.UploadFileHandler, SitefinityWebApp"/&amp;gt;
&amp;lt;/handlers&amp;gt;
&amp;lt;/system.webServer&amp;gt;
&lt;/pre&gt;
Now we can set up plain HTML forms around the Internet and have it post files directly to the Sitefinity documents library:&lt;br /&gt; &lt;pre class="brush: xhtml;"&gt;&amp;lt;form action="http://somedomain.com/UploadFileHandler.ashx" method="post" enctype="multipart/form-data"&amp;gt;
        Username: &amp;lt;input type="text" name="username" /&amp;gt;
        &amp;lt;br /&amp;gt;
        Password: &amp;lt;input type="password" name="password" /&amp;gt;
        &amp;lt;br /&amp;gt;
        Library: &amp;lt;input type="text" name="library" /&amp;gt;
        &amp;lt;br /&amp;gt;
        Provider: &amp;lt;input type="text" name="provider" /&amp;gt;
        &amp;lt;br /&amp;gt;
        &amp;lt;input type="file" name="file" /&amp;gt;
        &amp;lt;br /&amp;gt;
        &amp;lt;input type="submit" value="Upload to Sitefinity" /&amp;gt;
    &amp;lt;/form&amp;gt;
    &lt;/pre&gt; &lt;p&gt;
A picture is worth a thousand lines of code, so here are screenshots of the process:&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://blog.falafel.com/Libraries/MetaBlogLib/sf_uploadform.sflb.ashx" /&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://blog.falafel.com/Libraries/MetaBlogLib/sf_uploaded.sflb.ashx" /&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://blog.falafel.com/Libraries/MetaBlogLib/sfuploadlib.sflb.ashx" width="650" /&gt;&lt;/p&gt; &lt;br /&gt;
All this without any server-side code or even Javascript on the remote client! Just a form you can paste onto any web page. Think of all the possibilities with integrations and affiliates :)&lt;br /&gt; &lt;br /&gt; &lt;strong&gt;&lt;em&gt;
ENJOY!!
&lt;/em&gt;&lt;/strong&gt; &lt;link type="text/css" rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shCoreDefault.css" /&gt; &lt;link type="text/css" rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" /&gt; &lt;script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript"&gt;&lt;/script&gt; &lt;script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js" type="text/javascript"&gt;&lt;/script&gt; &lt;script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js" type="text/javascript"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt;    SyntaxHighlighter.all();&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=Hw_X9gQfJaw:vS8Wnih9ruI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=Hw_X9gQfJaw:vS8Wnih9ruI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=Hw_X9gQfJaw:vS8Wnih9ruI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?i=Hw_X9gQfJaw:vS8Wnih9ruI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.falafel.com/~ff/FalafelBlogs?a=Hw_X9gQfJaw:vS8Wnih9ruI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/FalafelBlogs?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FalafelBlogs/~4/Hw_X9gQfJaw" height="1" width="1"/&gt;</description>
      <link>http://feeds.falafel.com/~r/FalafelBlogs/~3/Hw_X9gQfJaw/Upload_Documents_Remotely_to_Sitefinity.aspx</link>
      <author>Basem Emara</author>
      <comments>http://blog.falafel.com/Blogs/11-11-14/Upload_Documents_Remotely_to_Sitefinity.aspx</comments>
      <guid isPermaLink="false">6c5edf7d-8479-458b-828a-20cf1451f057</guid>
      <pubDate>Tue, 15 Nov 2011 00:03:25 GMT</pubDate>
    <feedburner:origLink>http://blog.falafel.com/Blogs/11-11-14/Upload_Documents_Remotely_to_Sitefinity.aspx</feedburner:origLink></item>
  </channel>
</rss>

