<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Pearl Tech &#187; AaronH</title>
	<atom:link href="http://blog.pearltechnology.com/author/aaronh/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.pearltechnology.com</link>
	<description></description>
	<lastBuildDate>Tue, 25 May 2010 14:37:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Developing with Windows Mobile 7</title>
		<link>http://blog.pearltechnology.com/developing-with-windows-mobile-7/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/developing-with-windows-mobile-7/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 21:27:28 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Windows Mobile Phone]]></category>
		<category><![CDATA[Windows Phone Application]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[XAML]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=618</guid>
		<description><![CDATA[Microsoft recently announced the general availability of developer tools for their Windows mobile platform. This article is a brief introduction to the platform and what the next generation of mobile development for Microsoft looks like.
After you&#8217;ve downloaded the developer tools installer, you will go through a download process&#8230;



After downloading the remaining components, you will install [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft recently announced the general availability of <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2338b5d1-79d8-46af-b828-380b0f854203&amp;displaylang=en">developer tools</a> for their <a href="http://www.microsoft.com/windowsmobile/en-us/default.mspx">Windows mobile platform</a>. This article is a brief introduction to the platform and what the next generation of mobile development for Microsoft looks like.</p>
<p>After you&#8217;ve downloaded the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2338b5d1-79d8-46af-b828-380b0f854203&amp;displaylang=en">developer tools</a> installer, you will go through a download process&#8230;</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/03/WinMo-Dev-Tools-Setup.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-619" title="WinMo Dev Tools Setup" src="http://blog.pearltechnology.com/wp-content/uploads/2010/03/WinMo-Dev-Tools-Setup-300x267.png" alt="WinMo Dev Tools Setup" width="300" height="267" /></a><br />
</center></p>
<p>After downloading the remaining components, you will install all component resources.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/03/WinMo-Dev-Tools-Install.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-621" title="WinMo Dev Tools Install" src="http://blog.pearltechnology.com/wp-content/uploads/2010/03/WinMo-Dev-Tools-Install-300x271.png" alt="WinMo Dev Tools Install" width="300" height="271" /></a><br />
</center></p>
<p>Once the developer tools have been installed, you can startup <strong>Visual Studio 2010 Express for Windows Phone</strong> which is the IDE used for the mobile development.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/03/Visual-Studio-2010-Express-Splash.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-622" title="Visual Studio 2010 Express Splash" src="http://blog.pearltechnology.com/wp-content/uploads/2010/03/Visual-Studio-2010-Express-Splash-300x208.png" alt="Visual Studio 2010 Express Splash" width="300" height="208" /></a><br />
</center></p>
<p>We will use the <em>Silverlight for Windows Phone &#8211; Windows Phone Application</em> project template and add some custom XAML and image resource to the base project.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/03/WinMo-Project-Creation.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-623" title="WinMo Project Creation" src="http://blog.pearltechnology.com/wp-content/uploads/2010/03/WinMo-Project-Creation-300x205.png" alt="WinMo Project Creation" width="300" height="205" /></a><br />
</center></p>
<p>In this simple application we&#8217;ve titled <strong>Mobile Portal</strong> just going to add some textblocks, buttons, and use a standard Silverlight grid layout. We first modify <strong>MainPage.xaml</strong> to create our custom view for the mobile application. Here is a view of our coding changes.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/03/WinMo-MainPage-XAML.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-630" title="WinMo MainPage XAML" src="http://blog.pearltechnology.com/wp-content/uploads/2010/03/WinMo-MainPage-XAML-300x125.png" alt="WinMo MainPage XAML" width="300" height="125" /></a><br />
</center></p>
<p>Next, we go to our Solution Explorer add our image resource using the context menu on the project and selecting <em>Add -&gt; Existing Item</em>.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/03/Solution-Explorer-Add-Resources.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-631" title="Solution Explorer - Add Resources" src="http://blog.pearltechnology.com/wp-content/uploads/2010/03/Solution-Explorer-Add-Resources-223x300.png" alt="Solution Explorer - Add Resources" width="223" height="300" /></a><br />
</center></p>
<p>Finally, we add our custom styles to <strong>App.xaml</strong>. After building the solution and running the emulator, we see the following results.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/03/WinMo-Pearl-Technology-Issue-Tracker.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-633" title="WinMo Pearl Technology - Issue Tracker" src="http://blog.pearltechnology.com/wp-content/uploads/2010/03/WinMo-Pearl-Technology-Issue-Tracker-151x300.png" alt="WinMo Pearl Technology - Issue Tracker" width="151" height="300" /></a><br />
</center></p>
<p>If we rotate the device orientation, we can see how the view shifts to fit the space available.<br />
<center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/03/WinMo-Pearl-Technology-Issue-Tracker-Horizontal.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-634" title="WinMo Pearl Technology - Issue Tracker - Horizontal" src="http://blog.pearltechnology.com/wp-content/uploads/2010/03/WinMo-Pearl-Technology-Issue-Tracker-Horizontal-300x177.png" alt="WinMo Pearl Technology - Issue Tracker - Horizontal" width="300" height="177" /></a><br />
</center></p>
<p>We are glad to see that Microsoft is embracing the <a href="http://windowsclient.net/wpf/">WPF</a> and <a href="http://www.silverlight.net/">Silverlight</a>-based development engine for the mobile platform. This decision allows developers and designers skilled in <a href="http://msdn.microsoft.com/en-us/library/ms752059.aspx">XAML</a> to leverage their existing knowledge and prowess to create useful mobile applications for both business and pleasure. The small footprint of Silverlight makes it ideal for usage with embedded or mobile systems with limited power and memory.</p>
<p>You can download our complete solution <a href="/wp-content/uploads/2010/03/PearlTechnology.IssueTracker.zip#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/developing-with-windows-mobile-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding PDF icon to SharePoint Document Libraries</title>
		<link>http://blog.pearltechnology.com/adding-pdf-icon-to-sharepoint-document-libraries/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/adding-pdf-icon-to-sharepoint-document-libraries/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 17:10:16 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Document Libraries]]></category>
		<category><![CDATA[MOSS 2007]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[PDF Icon]]></category>
		<category><![CDATA[Sharepoint]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=574</guid>
		<description><![CDATA[One of the missing features in MOSS 2007 is the ability to recognize PDF files in a document library. It can be frustrating when all you see is a blank page icon instead of SharePoint recognizing the document type properly. This is a common portal issue that is easily remedied with a bit of extra [...]]]></description>
			<content:encoded><![CDATA[<p>One of the missing features in MOSS 2007 is the ability to recognize PDF files in a document library. It can be frustrating when all you see is a blank page icon instead of SharePoint recognizing the document type properly. This is a common portal issue that is easily remedied with a bit of <a href="http://support.microsoft.com/kb/837849">extra configuration</a>. Here is an example of how PDF items are normally displayed inside of a library view.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Missing-Icon-Example.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-577" title="Missing Icon Example" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Missing-Icon-Example-300x80.png" alt="Missing Icon Example" width="300" height="80" /></a><br />
</center></p>
<p>Following the <a href="http://support.microsoft.com/kb/837849">Microsoft KB</a> you can see that you need to edit the <em>docicon.xml</em> file located at the path <em>C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\XML</em></p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Docicon-XML.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-582" title="Docicon XML" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Docicon-XML-300x147.png" alt="Docicon XML" width="300" height="147" /></a><br />
</center></p>
<p>The Docicon.xml configuration file is a listing of all document types that are supported by SharePoint. To support the PDF icon, you need to add the following Mapping XML element to the XPath <em>//DocIcons/ByExtension</em>. The Mappings are listed in alphabetical order, so you should insert the PDF mapping accordingly.</p>
<pre name="code" language="XML">&lt;Mapping Key="pdf" Value="pdficon.gif"/&gt;</pre>
<p>Here is the Docicon.xml file after the edit.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Docicon-XML-View.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-583" title="Docicon XML View" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Docicon-XML-View-300x72.png" alt="Docicon XML View" width="300" height="72" /></a><br />
</center></p>
<p><a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/pdficon.gif#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="alignleft size-full wp-image-590" style="padding-right: 10px" title="pdficon" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/pdficon.gif" alt="pdficon" width="17" height="17" /></a>The next step is retrieving the <a href="http://www.adobe.com/misc/linking.html#pdficon">small PDF icon</a> from Adobe. When you have download the icon image, you need to save the image as &#8220;pdficon.gif&#8221; to match the mappings entry we created earlier. The last step is to copy the PDF icon image to the SharePoint template images path: <em>C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\IMAGES\pdficon.gif</em>. This is the location where SharePoint will search for document type icons for rendering in document library views &#8211; according to the configured file extension mappings in docicon.xml.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/pdficon-View.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-593" title="pdficon View" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/pdficon-View-300x146.png" alt="pdficon View" width="300" height="146" /></a><br />
</center></p>
<p>After these steps have been completed, you can now visually distinguish the document type for PDF extensions with a quick icon type indicator.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/PDF-Icon-Appears.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-596" title="PDF Icon Appears" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/PDF-Icon-Appears-300x70.png" alt="PDF Icon Appears" width="300" height="70" /></a><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/adding-pdf-icon-to-sharepoint-document-libraries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deploying to Google App Engine</title>
		<link>http://blog.pearltechnology.com/deploying-to-google-app-engine/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/deploying-to-google-app-engine/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 17:55:40 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[App Engine]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google App Engine]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=456</guid>
		<description><![CDATA[
Google has opened up their hosting services to the cloud with their free Google App Engine offering. Google makes it quick and easy to get going with their cloud offerings. Here a quick review of how to get started with the App Engine.
To use App Engine, you need a Google Account. Once you have your [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/appengine.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="alignleft size-full wp-image-458" title="Google App Engine" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/appengine.png" alt="Google App Engine" width="145" height="111" /></a><br />
Google has opened up their hosting services to the cloud with their free <a href="http://appengine.google.com">Google App Engine</a> offering. Google makes it quick and easy to get going with their cloud offerings. Here a quick review of how to get started with the App Engine.</p>
<p>To use App Engine, you need a <a href="https://www.google.com/accounts/NewAccount">Google Account</a>. Once you have your Google Account, you can enable App Engine services by entering in your cell phone number and carrier on the App Engine <a href="https://appengine.google.com">setup page</a>. Google will send you an SMS with an access code you need to enter into the website. This activation scheme is Google&#8217;s way of restricting you from creating multiple App Engine accounts.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Google-Apps-Verify.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-465" title="Google Apps Verify" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Google-Apps-Verify-300x141.png" alt="Google Apps Verify" width="300" height="141" /></a><br />
</center></p>
<p>When you have received your code via SMS and entered your activation code, you can begin creating applications. The following appears after you have activated your App Engine account.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Create-Google-App.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-469" title="Create Google App" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Create-Google-App-300x78.png" alt="Create Google App" width="300" height="78" /></a><br />
</center></p>
<p>When you click &#8220;Create an Application&#8221; you can enter an application alias where your new application will be hosted on the appspot.com domain.<br />
<center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Create-Google-App-2.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-472" title="Create Google App Alias" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Create-Google-App-2-300x96.png" alt="Create Google App Alias" width="300" height="96" /></a><br />
</center></p>
<p>If your alias is available, you can then create an application and deploy to your new cloud application. In this example, we created the alias &#8220;pearlcompanies&#8221;.</p>
<p>Since we&#8217;re running in a windows environment, our next step is to setup <a href="http://www.eclipse.org/downloads/">Eclipse</a> and the <a href="http://code.google.com/appengine/docs/java/tools/eclipse.html">Google Plugin for Eclipse</a> to deploy to our cloud application. We used Eclipse 3.5 (Galileo) in our example. After unpacking the Eclipse folder contents, we tell Eclipse where to get the Google Plugin. We add the available software site &#8220;http://dl.google.com/eclipse/plugin/3.5&#8243; to our Eclipse Preferences.<br />
<center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Available-Software-Sites.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-477" title="Available Software Sites" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Available-Software-Sites-300x191.png" alt="Available Software Sites" width="300" height="191" /></a><br />
</center></p>
<p>Download and Install both the Google Eclipse plugin and GWT and App Engine SDKs.<br />
<center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Install-Google-Plugin.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-478" title="Install Google Plugin" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Install-Google-Plugin-300x299.png" alt="Install Google Plugin" width="300" height="299" /></a><br />
</center></p>
<p>After installing the Google SDKs, we can create Google App Engine projects (Web Application Projects). The nice thing here is that we can run the cloud application locally and verify it before deploying remotely to the cloud. The Google SDK comes with the components necessary to simulate the cloud environment.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Create-Google-Web-Project.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-484" title="Create Google Web Project" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Create-Google-Web-Project-262x300.png" alt="Create Google Web Project" width="262" height="300" /></a><br />
</center></p>
<p>Once we have our web project, we can begin creating our WAR package for deployment into the App Engine cloud service. The current App Engine supports Java and Python environments, but in this example we are going to use the Java runtime. Since we&#8217;re demonstrating deployment here, we are not going to use any servlets, but simply an HTML front-end. After changing the index.html page in our web project, we click the App Engine icon in the Eclipse toolbar.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/App-Engine-Deploy-Icon.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-full wp-image-485" title="App Engine Deploy Icon" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/App-Engine-Deploy-Icon.png" alt="App Engine Deploy Icon" width="225" height="31" /></a><br />
</center></p>
<p>After clicking the icon, we are prompted with the deployment wizard which has our Google account credentials and a link to the App Engine project settings. Click the project settings and enter the Application ID and version for the application (<em>use the alias we setup previously</em>).</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/App-Engine-Properties.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-488" title="App Engine Properties" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/App-Engine-Properties-300x263.png" alt="App Engine Properties" width="300" height="263" /></a><br />
</center></p>
<p>Click &#8216;Ok&#8217; on the properties dialog, and then enter your login credentials. Once you click &#8216;Deploy&#8217;, your application will be pushed into the Google App Engine cloud. You can view and manage your applications that are live in the Google App Engine site.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Google-Apps-List.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-489" title="Google Apps List" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Google-Apps-List-300x112.png" alt="Google Apps List" width="300" height="112" /></a><br />
</center></p>
<p>You can view the clone of our Pearl Companies website which we deployed to <a href="http://pearlcompanies.appspot.com">pearlcompanies.appspot.com</a>. Please let us know about your App Engine experiences. We look forward to using this new powerful platform.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/deploying-to-google-app-engine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deploying to Windows Azure</title>
		<link>http://blog.pearltechnology.com/deploying-to-windows-azure/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/deploying-to-windows-azure/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 20:32:25 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Azure Services]]></category>
		<category><![CDATA[Azure Tools]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Web Role]]></category>
		<category><![CDATA[Windows Azure]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=504</guid>
		<description><![CDATA[Microsoft is expected to remove the CTP from their Azure Platform this month at PDC in Los Angeles. Until then, you can still receive access to their free cloud services platform. To get started with Azure you need a Windows Live ID and signup with Microsoft Connect to receive an access code (aka tokens).



When you [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Windows-Azure.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="alignleft size-medium wp-image-508" title="Windows Azure" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Windows-Azure-300x54.png" alt="Windows Azure" width="300" height="54" /></a>Microsoft is expected to remove the CTP from their <a href="http://www.microsoft.com/windowsazure/">Azure Platform</a> this month at <a href="http://microsoftpdc.com/">PDC</a> in Los Angeles. Until then, you can still receive access to their free cloud services platform. To get started with Azure you need a Windows Live ID and <a href="http://www.microsoft.com/windowsazure/account/">signup</a> with <a href="http://connect.microsoft.com/">Microsoft Connect</a> to receive an access code (<em>aka tokens</em>).<br />
<center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Microsoft-Connect.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="size-medium wp-image-511" title="Microsoft Connect" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Microsoft-Connect-300x135.png" alt="Microsoft Connect" width="300" height="135" /></a><br />
</center></p>
<p>When you receive your access token, you can begin creating projects on the Azure platform with the <a href="https://windows.azure.com">Azure Developer Portal</a>. You can only create one project with the CTP, but you can have multiple services inside each project (<em>web/worker roles</em>).<br />
<center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Azure-Projects.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-515" title="Azure Projects" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Azure-Projects-300x86.png" alt="Azure Projects" width="300" height="86" /></a><br />
</center></p>
<p>After you&#8217;ve created your project in the developer portal, you can add services which will be the endpoints you deploy to for Windows Azure. We will add a Windows Azure Service in this example.<br />
<center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Windows-Azure-Add-Service.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-517" title="Windows Azure Add Service" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Windows-Azure-Add-Service-300x137.png" alt="Windows Azure Add Service" width="300" height="137" /></a><br />
</center></p>
<p>To create our Windows Azure application, we need to create a package (cspkg) that contains our application contents and a configuration definition (cscfg) that defines our roles. Microsoft has created Azure tools to assist in generating the package and configuration file. You can download the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8d75d4f7-77a4-4adf-bce8-1b10608574bb&amp;displaylang=en">Azure SDK</a> to create Azure applications using Visual Studio. The <a href="http://www.microsoft.com/downloads/details.aspx?familyid=AA40F3E2-AFC5-484D-B4E9-6A5227E73590&amp;displaylang=en">Azure SDK</a> allows you to run your own local development fabric before pushing your application into the cloud. <a href="http://eclipse.org/">Eclipse</a> also has its own <a href="http://www.windowsazure4e.org/">Azure Tools</a> if you prefer to develop in the Eclipse environment.</p>
<p>After installation of the Azure Tools, you now have a new project template &#8220;Cloud Service&#8221; which we&#8217;ll use to create our web role.<br />
<center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Visual-Studio-Cloud-Service-Template.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-519" title="Visual Studio Cloud Service Template" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Visual-Studio-Cloud-Service-Template-300x200.png" alt="Visual Studio Cloud Service Template" width="300" height="200" /></a><br />
</center><br />
After providing a name for your Cloud Service project, you are prompted to select which roles you would like to use. We will choose &#8220;ASP.NET Web Role&#8221; for this example.<br />
<center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Azure-Roles.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-522" title="Azure Roles" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Azure-Roles-300x188.png" alt="Azure Roles" width="300" height="188" /></a><br />
</center></p>
<p>After clicking &#8220;Ok&#8221;, you will now have a Cloud Service project and a Web Role project in your solution. We will now remove the Web Role for this exercise, and replace it with an existing ASP.NET application called <a href="http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx">ASP.NET Chart Controls</a> which Scott Guthrie announced last year. This application did not work on the PDC release of Azure, but Azure now allows web applications to run in Full Trust with some <a href="http://blogs.msdn.com/windowsazure/archive/2009/03/18/hosting-roles-under-net-full-trust.aspx">minor tweaking</a>.<br />
<center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/ASP.NET-Chart-Controls-Solution.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="size-medium wp-image-524" title="ASP.NET Chart Controls Solution" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/ASP.NET-Chart-Controls-Solution-189x300.png" alt="ASP.NET Chart Controls Solution" width="95" height="150" /></a><br />
</center></p>
<p>We now have our solution complete and have one web role we would like to deploy to the cloud. We must now publish the solution to Azure. We right-click on the Cloud Service project and click &#8220;Publish&#8221; which opens up the <a href="http://windows.azure.com">Azure Developer Portal</a>.</p>
<p>After logging in with Windows Live, you want to deploy your application to the Staging Environment before pushing it live. To deploy, you simply select the application package (cspkg) and configuration definition (cscfg) from your &#8220;/publish&#8221; folder in the cloud service &#8220;/bin/Debug&#8221; directory.<br />
<center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Azure-Package-and-Configuration-Selection.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-530" title="Azure Package and Configuration Selection" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Azure-Package-and-Configuration-Selection-300x113.png" alt="Azure Package and Configuration Selection" width="300" height="113" /></a><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Azure-Package-and-Configuration.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-527" title="Azure Package and Configuration" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Azure-Package-and-Configuration-300x26.png" alt="Azure Package and Configuration" width="300" height="26" /></a><br />
</center></p>
<p>Clicking on &#8220;Deploy&#8221; will load the Azure package and service definition to the cloud and create a VM necessary to run the application. The environment takes some time to setup and will show its state as &#8220;Initialization&#8221; until the VM is entirely ready. You are given a URI based upon a randomly generated GUID to view your application and test it before moving it into production. Having two environments is nice if you also have database changes that need to coincide with your deployment.<br />
<center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Azure-Staging-Environment.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-537" title="Azure Staging Environment" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/Azure-Staging-Environment-300x226.png" alt="Azure Staging Environment" width="300" height="226" /></a><br />
</center></p>
<p>Once the application has been verified, you can click the center arrows icon to swap the Staging site into Production. You can see the two environments have now been switched.<br />
<center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2009/11/ASP.NET-Chart-Controls-Azure.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="aligncenter size-medium wp-image-538" title="ASP.NET Chart Controls Azure" src="http://blog.pearltechnology.com/wp-content/uploads/2009/11/ASP.NET-Chart-Controls-Azure-300x212.png" alt="ASP.NET Chart Controls Azure" width="300" height="212" /></a><br />
</center></p>
<p>Azure does make the deployment process a bit more involved, but there is an <a href="http://blogs.msdn.com/windowsazure/archive/2009/09/17/introducing-the-windows-azure-service-management-api.aspx">managed Azure Deployment API</a> in the works to automate the build and deploy steps you may need in your organization. You can <a href="http://aspchartcontrols.cloudapp.net/">view</a> our sample ASP.NET Chart Controls application running on Azure Services (<em>cloudapp.net</em>). Kudos to Microsoft for allowing full trust applications! We will be watching for more exciting features from the <a href="http://blogs.msdn.com/windowsazure/">Azure Team</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/deploying-to-windows-azure/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Printer Friendly jQuery</title>
		<link>http://blog.pearltechnology.com/printer-friendly-jquery/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/printer-friendly-jquery/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 13:39:46 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery print tabs]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[jQuery widgets]]></category>
		<category><![CDATA[printer friendly]]></category>
		<category><![CDATA[Sharepoint Web Parts]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=344</guid>
		<description><![CDATA[Building websites to support different browsers is easy business when you&#8217;re relying on the jQuery framework. However, building printer friendly web content is another hurdle for application developers. I recently came across some useful jQuery for printing Sharepoint web parts. The idea was pure genius &#8211; wrap the bit of HTML you want to print [...]]]></description>
			<content:encoded><![CDATA[<p>Building websites to support different browsers is easy business when you&#8217;re relying on the <a href="http://jquery.com/">jQuery framework</a>. However, building printer friendly web content is another hurdle for application developers. I recently came across some <a href="http://www.endusersharepoint.com/2009/04/06/jquery-for-everyone-print-any-web-parts-plugin/">useful jQuery</a> for printing Sharepoint web parts. The idea was pure genius &#8211; wrap the bit of HTML you want to print into its own document window and inform the browser of your intentions to print. The key idea here is that we want to print <em>a portion of a webpage</em>, not the entire web page. If we wanted to print the entire webpage, I would recommend going the route of using the @media tag <a href="http://www.w3.org/TR/CSS2/media.html">found in CSS 2.0</a>. However, you will eventually run into printing quirks when you are building interactive websites.</p>
<p>Although I wasn&#8217;t using Sharepoint for this website, I was using jQuery, so I leveraged this idea to print specific portions of a website instead of only Sharepoint specific content. This site was also using <a href="http://jqueryui.com/">jQuery UI</a> for creating rich internet content, specifically the <a href="http://jqueryui.com/demos/tabs/">tabs</a>, <a href="http://jqueryui.com/demos/accordion/">accordion</a>, and <a href="http://jqueryui.com/demos/dialog/">dialog</a> widgets. The incredible thing about widgets is that they allow for highly interactive sites, yet the trouble with widgets is that they are not conducive to easily printing their content.</p>
<p>If you tried printing the <a href="http://jqueryui.com/demos/tabs/default.html">default tabs example</a> using jQuery UI, you end up with something that looks like this&#8230;</p>
<p><center><a href="http://blog.pearltechnology.com/wp-content/uploads/2009/09/jquery-tabs-default-functionality.PNG#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="alignnone size-medium wp-image-355" title="jquery tabs default functionality" src="http://blog.pearltechnology.com/wp-content/uploads/2009/09/jquery-tabs-default-functionality-300x119.PNG" alt="jquery tabs default functionality" width="300" height="119" /></a></center></p>
<p>At first glance, you may not realize the problem with this. The content of the inactive tabs is hidden from the print view. In our requirements, we needed to print all the content for each tab, whether it was active or not. Now you begin to see the clash between interactive content and printer friendly widgets.</p>
<p>There is a solution to this problem, but it varies depending on how you setup your widgets. Here are some tips to setup the print view. For printed tabs to work, you need to create some hidden panel headers and utilize some CSS to display the hidden tabs contents. The solution I came up with contains a &#8220;Printer Friendly&#8221; link which triggers the dynamic CSS changes for printing all the tabs contents.</p>
<p><center><a href="http://blog.pearltechnology.com/wp-content/uploads/2009/09/jquery-tabs-printer-friendly.PNG#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="alignnone size-medium wp-image-372" title="jquery tabs printer friendly" src="http://blog.pearltechnology.com/wp-content/uploads/2009/09/jquery-tabs-printer-friendly-300x47.PNG" alt="jquery tabs printer friendly" width="300" height="47" /></a></center></p>
<p>Add the following HTML to your page where you want the locate the &#8220;Printer Friendly&#8221; link for the tab widgets.</p>
<pre name="code" language="html">
<div id="dialog-1">
<h3>Printer Friendly Here</h3>
</div>
</pre>
<p>Here is the printer friendly window that is created after clicking on the &#8220;Printer Friendly&#8221; link.</p>
<p><center><a href="http://blog.pearltechnology.com/wp-content/uploads/2009/09/jquery-tabs-printer-friendly-dialog.PNG#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="alignnone size-medium wp-image-375" title="jquery tabs printer friendly dialog" src="http://blog.pearltechnology.com/wp-content/uploads/2009/09/jquery-tabs-printer-friendly-dialog-299x111.PNG" alt="jquery tabs printer friendly dialog" width="299" height="111" /></a></center></p>
<p>Here is the jQuery script that enables the printer-friendly jQuery UI tabs to happen.</p>
<pre name="code" language="jscript">$(function() {
	        $("#tabs").tabs();

	        // remove any print headers that we may have added
	        $("div.printHeader").remove();

	        // assign our id for print navigation removal
	        $("#tabs&gt;ul").each(function() {
	            $(this).addClass("tab-nav");
	        });

	        // create printer friendly tab view
	        $("#tabs&gt;ul&gt;li&gt;a").each(function() {
	            // what tab is this?
	            var tabNum = $(this).attr("href").replace("#", "");

	            // get our content for this tab
	            var tabContent = $("div[id=" + tabNum + "]");

	            // prepend our print header along with tab theme style
	            $(tabContent).before("
<div class="printHeader &quot; + $(this).parent().parent().parent().attr(&quot;class&quot;) + &quot;">\n" +
    	                            "
<ul class="&quot; + $(this).parent().parent().attr(&quot;class&quot;).replace(&quot;tab-nav&quot;, &quot;&quot;) + &quot;">\n" +
	                                    "
<li>" + $(this).text() + "

\n" +
	                                "</li>
</ul>

\n" +
	                            "</div>

\n");
	        });

	        drawPrinterFriendly(); // creates printer friendly links
	    });

	    // Prints contents of a dialog
	    // source: http://www.endusersharepoint.com/2008/12/09/jquery-for-everyone-print-any-web-part/
	    // remarks: added removal of printer friendly link
	    function printDialog(tagid, title) {
	        if (tagid) {
	            var CSSContent = ".printInfo,.tab-nav { display:none;}\n.ui-tabs .ui-tabs-hide,.printHeader { display: block !important; }\n";
	            var printCss = "
<!--
\n" + CSSContent + "
-->

";
	            // build html for print page
	            // remarks: we use parent here since the dialog is in a wrapped container
	            var html = "\n\n" + $("head").html() + "\n" + printCss + "\n\n\n" + $("#" + tagid).parent().html() +
                    "\n\n";
	            var printWP = window.open("", "printWebPart"); //open new window
	            printWP.document.open();
	            //insert content
	            printWP.document.write(html);
	            printWP.document.close();
	            //open print dialog
	            printWP.print();
	        }
	    }

	    // creates printer friendly link for matching dialog H3 tags
	    function drawPrinterFriendly() {
	        // find all dialogs by their TD
	        var tags = $("*[id^='dialog-']");
	        // loop through dialogs
	        tags.each(function() {
	            //get id for print function
	            var tagid = $(this).attr("id");
	            //append an image with onClick event
	            $(this).find("h3").html("").append(
                        "
<div class="printInfo">" +
                        "  <a onclick="printDialog(&quot; + " href="##utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Printer Friendly" +
                        "  </a>" +
                        "</div>

"
                    );
	        });
	    }</pre>
<p>You can find the entire solution <a href="http://blog.pearltechnology.com/wp-content/uploads/2009/09/printer-friendly-jquery.zip#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">here</a>. This solution can easily be adapted to work with other widgets (dialogs, accordions, etc.) with the inclusion of the H3 tag inside a div with id prefix &#8220;dialog-&#8221;. Possibly in the future I will create a <a href="http://plugins.jquery.com/">jQuery plugin</a> that encapsulates this functionality for simple integration into your site. Have you found a better approach for printing select portions of a page containing jQuery widgets?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/printer-friendly-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exchange Web Services (EWS) Managed API</title>
		<link>http://blog.pearltechnology.com/exchange-web-services-ews-managed-api/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/exchange-web-services-ews-managed-api/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 13:21:26 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[EWS]]></category>
		<category><![CDATA[Exchange 2007]]></category>
		<category><![CDATA[Exchange Server]]></category>
		<category><![CDATA[Exchange Web Services]]></category>
		<category><![CDATA[Managed API]]></category>
		<category><![CDATA[Microsoft Exchange]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=294</guid>
		<description><![CDATA[Unless you are a seasoned COM junky, the Exchange Web Services (EWS) Managed API will come as a welcome addition to anyone needing to programmatically manage Microsoft Exchange appointments, calendars, messages, or any other folders residing on an exchange server. The key difference with EWS is that it is using purely managed code. EWS itself [...]]]></description>
			<content:encoded><![CDATA[<p>Unless you are a seasoned <a href="http://www.microsoft.com/com/default.mspx">COM junky</a>, the Exchange Web Services (EWS) Managed API will come as a welcome addition to anyone needing to programmatically manage <a href="http://www.microsoft.com/exchange/2007/default.mspx">Microsoft Exchange</a> appointments, calendars, messages, or any other folders residing on an exchange server. The key difference with EWS is that it is using <a href="http://msdn.microsoft.com/en-us/library/dd637749.aspx">purely managed code</a>. EWS itself is simply a wrapper around the EWS protocol, so there&#8217;s no need to learn another XML-based interface.</p>
<p>You can <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e8f38dd1-f123-4a16-b4c8-584d1f84af48&amp;displaylang=en">download EWS</a> from Microsoft (<em>currently an RC</em>) and begin interacting immediately with any server running Exchange 2010 or Exchange 2007 running SP1 or higher. The web service interaction requires SSL and a valid <a href="http://msdn.microsoft.com/en-us/library/system.net.networkcredential.aspx">Network Credential</a> for access. The base service is hosted on exchange via the EWS URL below, where &lt;exchange_server_name&gt; is the host name of your Exchange server.</p>
<pre name="code" language="xml">https://&lt;exchange_server_name&gt;/ews/exchange.asmx</pre>
<p>To try out EWS in a test environment, you can <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=E99F2A96-FFBC-4323-9676-9657607C4A52&amp;displaylang=en">download</a> the Exchange 2007 virtual machine. Once the Exchange VM (VHD) is running and you are logged in, you need to configure the network settings to utilize automatic IP and DNS settings instead of the default static ones provided. This will assist in routing network traffic to the new machine. To verify the setup, you can browse the following URL below and see the WSDL for the EWS. You will need to ignore the certificate warning and enter a login with access to the service (<em>login as litwareinc\Administrator</em>)</p>
<pre name="code" language="xml">https://ex07sp1/ews/exchange.asmx</pre>
<p>The next step is <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e8f38dd1-f123-4a16-b4c8-584d1f84af48&amp;displaylang=en">installing EWS</a>. After installation, you can begin creating Visual Studio projects using the new API. <a href="http://msdn.microsoft.com/en-us/library/dd633710.aspx">MSDN</a> provides a nice introduction and valuable references for working with the managed API. After creating a new Visual Studio project, you need to add a reference to the new assembly <em>Microsoft.Exchange.Webservices.dll</em> (located at the path <em>Program Files\Microsoft\Exchange\Web Services\1.0\ </em>). Next, we add using statements for the new library reference and also for <a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate.aspx">X509 certificates</a>.</p>
<pre name="code" language="csharp">using Microsoft.Exchange.WebServices.Data;
using System.Security.Cryptography.X509Certificates;</pre>
<p>Now here&#8217;s some simple code to create a connection to the EWS endpoint. The certificate callback is necessary since we&#8217;re using a user-generated X509 certificate.</p>
<pre name="code" language="csharp">// Hook up the cert callback.
            ServicePointManager.ServerCertificateValidationCallback =
                delegate(Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
                {
                    // Validate the certificate and return true or false as appropriate.
                    // Note that it not a good practice to always return true because not
                    // all certificates should be trusted.
                    return true;
                };

            // assign exchange version
            ExchangeVersion version = ExchangeVersion.Exchange2007_SP1;

            // create service endpoint connection
            ExchangeService service = new ExchangeService(version);

            // Assign NetworkCredential directly
            service.Credentials = new NetworkCredential("username", "password", "domain");

            // EWS network location
            service.Url = new Uri("https://ex07sp1/ews/exchange.asmx");</pre>
<p>Now we&#8217;ll create an <a href="http://msdn.microsoft.com/en-us/library/dd633661.aspx">appointment</a> using this service endpoint. <em>Note: When you <a href="http://msdn.microsoft.com/en-us/library/dd633620.aspx">add attendees</a>, you actual create a meeting instead of an appointment.</em></p>
<pre name="code" language="csharp">            Appointment appt = new Appointment(service);
            appt.Subject = "Read EWS Documentation";
            appt.Body = "You can download the Exchange 2007 SP2 here: &lt;a href='http://www.microsoft.com/downloads/thankyou.aspx?familyId=ee7829a3-0ae8-44de-822c-908cd1034523&amp;displayLang=en'&gt;SP2 Download&lt;/a&gt;";
            appt.StartTimeZone = TimeZoneInfo.Local;
            appt.Start = DateTime.Now.AddDays(1);
            appt.ReminderMinutesBeforeStart = 15;
            appt.End = appt.Start.AddHours(2);
            appt.RequiredAttendees.Add("Administrator@litwareinc.com");
            appt.Save(); // persisted to exchange</pre>
<p>To probe deeper, you can follow the <a href="http://blogs.msdn.com/exchangedev/">exchange developer blog</a> on MSDN. We look forward to the RTM of this powerful managed Exchange API.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/exchange-web-services-ews-managed-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BizTalk Pipeline Out Of Memory</title>
		<link>http://blog.pearltechnology.com/biztalk-pipeline-out-of-memory/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/biztalk-pipeline-out-of-memory/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 17:52:57 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[BizTalk]]></category>
		<category><![CDATA[Pipeline Components]]></category>
		<category><![CDATA[VirtualStream]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=256</guid>
		<description><![CDATA[I&#8217;ve developed many custom components for BizTalk in the past several years, but I have never had to work with very large input files (&#62;100MB), primarily I&#8217;ve simply created output files. In a recent need to gather several years worth of historical data, it became apparent that memory constraints were going to be pushed to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve developed many custom components for BizTalk in the past several years, but I have never had to work with very large input files (&gt;100MB), primarily I&#8217;ve simply created output files. In a recent need to gather several years worth of historical data, it became apparent that memory constraints were going to be pushed to their peak. After battling the frequent &#8220;System.OutOfMemoryException&#8221; it was time to hunt for the solution.</p>
<p>The <a href="http://social.msdn.microsoft.com/Forums/en-US/biztalkgeneral/thread/8248a5be-3c8c-471f-b2e0-d1872689fee4">resolution</a> to the BizTalk memory problem relied in the source structure (<a href="http://msdn.microsoft.com/en-us/library/system.io.memorystream.aspx">MemoryStream</a>) we were using for storing our stream for the <a href="http://msdn.microsoft.com/en-us/library/microsoft.biztalk.message.interop.ibasemessage_members(BTS.10).aspx">IBaseMessage</a>.</p>
<pre name="code" language="csharp">MemoryStream revisedStream = new MemoryStream();</pre>
<p>The discussion helpfully points out that we should be using the <a href="http://technet.microsoft.com/en-us/library/microsoft.biztalk.streaming.virtualstream(BTS.10).aspx">VirtualStream</a> with a few <a href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2006/12/27/1366.aspx">caveats</a>. The trick to get the VirtualStream object is to include the source from the BizTalk server samples (<em>&lt;BizTalk Install Path&gt;\SDK\Samples\Pipelines\SchemaResolverComponent\SchemaResolverFlatFileDasm</em>) or use the <em>Microsoft.BizTalk.Streaming.dll</em> as it exists in the GAC (<em>&lt;Windows Path&gt;\assembly\GAC_MSIL\Microsoft.BizTalk.Streaming\3.0.1.0__31bf3856ad364e35\</em>). I chose the later approach, which required adding a reference to<em> Microsoft.BizTalk.Streaming.dll</em> to my custom pipeline solution. I first copied the assembly from the <a href="http://bloggingabout.net/blogs/wellink/archive/2006/07/12/12947.aspx">GAC</a> to the &lt;biztalk install path&gt; for future solutions where I may need to reuse the same assembly source. After adding the reference via Visual Studio, it was simply a matter of changing the MemoryStream reference to VirtualStream.</p>
<pre name="code" language="csharp">VirtualStream revisedStream = new VirtualStream();</pre>
<p>Be sure you rewind the stream before assigning the bodyparts data.</p>
<pre name="code" language="csharp">// Rewind the stream so it is ready for use by the messaging engine
revisedStream.Seek(0, SeekOrigin.Begin);</pre>
<p>So why does this solution work? Behind the scenes, VirtualStream is wrapping excessive data (<em>user defined, but defaults to &gt;4MB</em>) to temporary disk using a <a href="http://msdn.microsoft.com/en-us/library/system.io.bufferedstream.aspx">BufferedStream</a>. This is why we can avoid the &#8220;System.OutOfMemoryException&#8221; &#8211; since the VirtualStream will offload the large data stream to disk I/O instead of purely storing our IBaseMessage in RAM (<em>via MemoryStream</em>). Yes, there&#8217;s certainly overhead depending on where your temporary directory resides, but in most cases this will be the solution you&#8217;re looking for. MSDN docs has other <a href="http://msdn.microsoft.com/en-us/library/ee377071(BTS.10).aspx">BizTalk specific streams</a> if you want to dive deeper.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/biztalk-pipeline-out-of-memory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft creates CodePlex Foundation</title>
		<link>http://blog.pearltechnology.com/microsoft-creates-codeplex-foundation/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/microsoft-creates-codeplex-foundation/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 20:25:28 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Codeplex]]></category>
		<category><![CDATA[OSS]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=227</guid>
		<description><![CDATA[Today Microsoft announced that its funding $1 million to create a 501(c)(6) corporation called the CodePlex Foundation. Microsoft created Codeplex.com in 2006 to allow developers the opportunity to share open source projects completely free to the community. One of the first open source projects shared on CodePlex was the AJAX Control Toolkit, a very well-known [...]]]></description>
			<content:encoded><![CDATA[<p>Today Microsoft announced that its funding $1 million to create a 501(c)(6) corporation called the <a href="http://codeplex.org">CodePlex Foundation</a>. Microsoft created <a href="http://www.codeplex.com">Codeplex.com</a> in 2006 to allow developers the opportunity to share open source projects completely free to the community. One of the first open source projects shared on CodePlex was the <a href="http://ajaxcontroltoolkit.codeplex.com">AJAX Control Toolkit</a>, a very well-known component in many ASP.NET developers toolbox. Since its inception, CodePlex has expanded to over <a href="http://port25.technet.com/archive/2009/07/07/codeplex-10-000-hosted-projects-and-counting.aspx">10,000 projects</a>. It&#8217;s important to note that the CodePlex Foundation will operate <a href="http://port25.technet.com/archive/2009/09/10/the-codeplex-foundation-debuts.aspx">entirely independent</a> from Microsoft corporation.</p>
<p>The new foundations Board of Directors has some influential players in the OSS realm. One of the directors is <em>Miguel de Icaza</em>, creator of GNOME and currently the project leader in both <a href="http://www.mono-project.com">Mono</a> and <a href="http://www.mono-project.com/Moonlight">Moonlight</a>. Miguel has his own enlightening <a href="http://tirania.org/blog/archive/2009/Sep-10.html">comments</a> on the new foundation. Another member of the board is <em>Shaun Walker</em>, the original creator of the <a href="http://www.dotnetnuke.com">DotNetNuke</a> project, an incredibly popular OSS web platform.</p>
<p>The goal of the foundation is to bring commercial and OSS communities closer together (<em>e.g. get commercial developers working in OSS projects</em>). The Advisory Panel has some interesting members including <a href="http://haacked.com/">Phil Haack</a>, <a href="http://www.hanselman.com/blog/">Scott Hanselman</a>, and <a href="http://lmaugustin.typepad.com/">Larry Augustin</a>. Larry is now CEO of SugarCRM, a popular non-microsoft based OSS web platform. Hanselman also shares some <a href="http://www.hanselman.com/blog/MicrosoftCreatesTheCodePlexFoundation.aspx">insights</a> into the new foundation.</p>
<p>It&#8217;s great to see Microsoft attempting to bridge the gap that exists between developers of OSS and commercial software, but only time will tell if this investment pays off. Software will continue to get better, especially with the OSS community involvement that Microsoft is slowly embracing.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/microsoft-creates-codeplex-foundation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Developer Bookmarklets</title>
		<link>http://blog.pearltechnology.com/web-developer-bookmarklets/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/web-developer-bookmarklets/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 14:00:48 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[bookmarklets]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=144</guid>
		<description><![CDATA[Bookmarklets can be powerful aids for web development. With jQuery providing so much innovation in the browser landscape, many bookmarklets are pushing the bar. Here are some interesting ones that I&#8217;ve found incredibly useful and use in conjunction with (or absence of) the built-in browser developer tools.

jQuerify is a simple way to inject the jQuery [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Bookmarklet">Bookmarklets</a> can be powerful aids for web development. With jQuery providing so much innovation in the browser landscape, many bookmarklets are pushing the bar. Here are some interesting ones that I&#8217;ve found incredibly useful and use in conjunction with (<em>or absence of</em>) the built-in browser developer tools.</p>
<ul>
<li><a href="http://www.learningjquery.com/2009/04/better-stronger-safer-jquerify-bookmarklet">jQuerify</a> is a simple way to inject the jQuery framework into any website and enable immediate DOM manipulation. To try it out, just drag <a href="javascript:%20(function(){var%20el=document.createElement('div'),b=document.getElementsByTagName('body')[0];otherlib=false,msg='';el.style.position='fixed';el.style.height='32px';el.style.width='220px';el.style.marginLeft='-110px';el.style.top='0';el.style.left='50%';el.style.padding='5px%2010px%205px%2010px';el.style.zIndex=1001;el.style.fontSize='12px';el.style.color='#222';el.style.backgroundColor='#f99';if(typeof%20jQuery!='undefined'){msg='This%20page%20already%20using%20jQuery%20v'+jQuery.fn.jquery;return%20showMsg();}else%20if(typeof%20$=='function'){otherlib=true;}%20function%20getScript(url,success){var%20script=document.createElement('script');script.src=url;var%20head=document.getElementsByTagName('head')[0],done=false;script.onload=script.onreadystatechange=function(){if(!done&amp;&amp;(!this.readyState||this.readyState=='loaded'||this.readyState=='complete')){done=true;success();}};head.appendChild(script);}%20getScript('http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js',function(){if(typeof%20jQuery=='undefined'){msg='Sorry,%20but%20jQuery%20wasn\'t%20able%20to%20load';}else{msg='This%20page%20is%20now%20jQuerified%20with%20v'+jQuery.fn.jquery;if(otherlib){msg+='%20and%20noConflict().%20Use%20$jq(),%20not%20$().';}}%20return%20showMsg();});function%20showMsg(){el.innerHTML=msg;b.appendChild(el);window.setTimeout(function(){if(typeof%20jQuery=='undefined'){b.removeChild(el);}else{jQuery(el).fadeOut('slow',function(){jQuery(this).remove();});if(otherlib){$jq=jQuery.noConflict();}}},2500);}})();#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">this link</a> to your bookmark list. Depending on the browser you&#8217;re using, you can then enter any javascript commands via the console window in Firebug, IE 8 Developer Tools, or Chrome Developer Tools.
<p><img class="alignnone size-full wp-image-151" title="jquerified" src="http://blog.pearltechnology.com/wp-content/uploads/2009/09/jquerified.PNG" alt="jquerified" width="239" height="31" /></p>
<p>If the website you are visiting already has jQuery installed, the bookmarklet will not inject the framework again.</p>
<p><img class="alignnone size-full wp-image-154" title="jquerified-ignored" src="http://blog.pearltechnology.com/wp-content/uploads/2009/09/jquerified-ignored.PNG" alt="jquerified-ignored" width="241" height="27" /></p>
<p>Here is some sample jQuery code which would highlight a post in red, the blog entry in blue, and perform some simple animation to the sidebar on this website. Click <a href="javascript:%20(function(){var%20el=document.createElement('div'),b=document.getElementsByTagName('body')[0];otherlib=false,msg='';el.style.position='fixed';el.style.height='32px';el.style.width='220px';el.style.marginLeft='-110px';el.style.top='0';el.style.left='50%';el.style.padding='5px%2010px%205px%2010px';el.style.zIndex=1001;el.style.fontSize='12px';el.style.color='#222';el.style.backgroundColor='#f99';if(typeof%20jQuery!='undefined'){msg='This%20page%20already%20using%20jQuery%20v'+jQuery.fn.jquery;return%20showMsg();}else%20if(typeof%20$=='function'){otherlib=true;}%20function%20getScript(url,success){var%20script=document.createElement('script');script.src=url;var%20head=document.getElementsByTagName('head')[0],done=false;script.onload=script.onreadystatechange=function(){if(!done&amp;&amp;(!this.readyState||this.readyState=='loaded'||this.readyState=='complete')){done=true;success();}};head.appendChild(script);}%20getScript('http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js',function(){if(typeof%20jQuery=='undefined'){msg='Sorry,%20but%20jQuery%20wasn\'t%20able%20to%20load';}else{msg='This%20page%20is%20now%20jQuerified%20with%20v'+jQuery.fn.jquery;if(otherlib){msg+='%20and%20noConflict().%20Use%20$jq(),%20not%20$().';}}%20return%20showMsg();});function%20showMsg(){el.innerHTML=msg;b.appendChild(el);window.setTimeout(function(){if(typeof%20jQuery=='undefined'){b.removeChild(el);}else{jQuery(el).fadeOut('slow',function(){jQuery(this).remove();});if(otherlib){$jq=jQuery.noConflict();}}},2500);$('div[class=post]:first').css('border','2px%20solid%20red');$('div[class=entry]:first').css('border','2px%20solid%20blue');$('div[class=sidebg]').slideToggle(4000).fadeIn('fast');}})();#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">here</a> to see it in action.</p>
<pre name="code" class="jscript">$("div[class=post]:first").css("border", "2px solid red");
$("div[class=entry]:first").css("border", "2px solid blue");
$("div[class=sidebg]").slideToggle(4000).fadeIn("fast");</pre>
</li>
<li><a href="http://getfirebug.com/lite.html">Firebug Lite</a> is another useful bookmarklet if you&#8217;re currently using a browser that doesn&#8217;t support plugins or have its own set of developer tools. It has support for both online and offline integration. Click <a href="javascript:var firebug=document.createElement('script');firebug.setAttribute('src','http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');document.body.appendChild(firebug);(function(){if(window.firebug.version){firebug.init();}else{setTimeout(arguments.callee);}})();void(firebug);#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">here</a> to see an example or simply drag and drop <a href="javascript:var firebug=document.createElement('script');firebug.setAttribute('src','http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');document.body.appendChild(firebug);(function(){if(window.firebug.version){firebug.init();}else{setTimeout(arguments.callee);}})();void(firebug);#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">this link</a> into your bookmarks.
<p><a href="http://blog.pearltechnology.com/wp-content/uploads/2009/09/firebug-lite.PNG#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="alignnone size-medium wp-image-174" title="Firebug Lite" src="http://blog.pearltechnology.com/wp-content/uploads/2009/09/firebug-lite-300x111.PNG" alt="Firebug Lite" width="300" height="111" /></a></p>
<p>You can now enter commands into the console and manipulate the DOM just like you were using an assisted native browser extension. Enjoy!</li>
</ul>
<p>Do you have any great developer bookmarklets that you&#8217;d like to share? Please comment!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/web-developer-bookmarklets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Connecting to SQL Azure CTP</title>
		<link>http://blog.pearltechnology.com/connecting-to-sql-azure-ctp/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/connecting-to-sql-azure-ctp/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 18:43:37 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[SQL Azure]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=127</guid>
		<description><![CDATA[If you haven&#8217;t tried out SQL Azure, you have until November 2009 to demo it until they begin charging customers for their usage. The service itself is still in its infancy, but the latest iteration finally supports relationships which is a big win in my book. Besides, what good is non-relational data (other than the [...]]]></description>
			<content:encoded><![CDATA[<p>If you haven&#8217;t tried out <a href="http://blogs.msdn.com/ssds/archive/2009/08/18/9874133.aspx">SQL Azure</a>, you have until November 2009 to demo it until they begin charging customers for their usage. The service itself is still in its infancy, but the latest iteration finally supports relationships which is a big win in my book. Besides, what good is non-relational data (<em>other than the fact that it scales very well</em>)?</p>
<p>There are two ways I&#8217;ve found to connect to SQL Azure. The first is using <a href="http://msdn.microsoft.com/en-us/library/ee336280.aspx">sqlcmd</a>, a command-line utility and the second is using <a href="http://english.zachskylesowens.net/2009/08/18/connecting-to-sql-azure/">SSMS query window</a>. Unfortunately, there is no current support for using SSMS &#8220;Connect to Database Engine&#8221;, but Microsoft is getting much closer to creating rich support for their new cloud-based storage with the latest CTP.</p>
<p>Here is a sample of using the sqlcmd utility. You can substitute your login for &lt;loginname&gt; and your server for &lt;servername&gt;</p>
<pre name="code" class="jscript">sqlcmd -U &lt;loginname&gt;@&lt;servername&gt; -S &lt;servername&gt;.ctp.database.windows.net -d master</pre>
<p>There are <a href="http://msdn.microsoft.com/en-us/library/ee336245.aspx">limits</a> to the current SQL Azure CTP for long-running queries and idle connections (<em>e.g. five minute timeout</em>), but overall you can get a good taste for the cloud model. There will be latency associated with using a remote database instead of a local network database, but Microsoft is <a href="http://msdn.microsoft.com/en-us/library/ee336239.aspx">recommending</a> that you also host your web applications on Windows Azure to get the best performance.</p>
<p>One improvement that I hope to see that will help secure these public endpoints is some sort of whitelist (<em>think about how some web services are secured today</em>) to restrict which users can access the SQL Azure databases open on TCP 1433. Some users have already mentioned this potential <a href="http://social.msdn.microsoft.com/Forums/en-US/ssdsgetstarted/thread/94acaffc-f0cb-4160-8a01-aa9f3657560f">security flaw</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/connecting-to-sql-azure-ctp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
