<?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>Thu, 05 Jan 2012 14:47:55 +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>Case Insensitive XML Search</title>
		<link>http://blog.pearltechnology.com/case-insensitive-xml-search/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/case-insensitive-xml-search/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 20:54:23 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Case Insensitive]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[Parsing XML]]></category>
		<category><![CDATA[XDocument]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XmlDocument]]></category>
		<category><![CDATA[XPath]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=1043</guid>
		<description><![CDATA[Often times you need to be able to search through XML snippets using case insensitivity. You may want to handle variations in user typing or just different system configuration setups (you may not have total control over the XML creation). On my venture to find the best case agnostic XML parsing in .NET, I came [...]]]></description>
			<content:encoded><![CDATA[<p>Often times you need to be able to search through XML snippets using case insensitivity. You may want to handle variations in user typing or just different system configuration setups (<i>you may not have total control over the XML creation</i>). On my venture to find the best case agnostic XML parsing in .NET, I came across only one way to do it using XPath and the translation function. I chose not to use translation since I needed a centralized reusable function to compare two element values. </p>
<p>My first discovery is that XPath in .NET only supports XPath 1.0 &#8211; meaning you don&#8217;t have many native functions to build from. However, Microsoft allows you to extend XPath using <a href="http://msdn.microsoft.com/en-us/library/dd567715.aspx">XSLT Context Extensions</a>. The process of setting up the extensions is quite tedious, but it would seem worth the effort if it can centralize reusable parsing functions. However, about this time I discovered that LINQ to XML would provide a great wrapper on top of the basic XmlDocument operations using XDocument. Here we go through the process used to create a reusable search routine for XML content.</p>
<p>To demonstrate our search process, we created a sample XML document (<a href="http://blog.pearltechnology.com/wp-content/uploads/2011/03/business.xml#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">business.xml</a>). Here is a brief section for reference.</p>
<pre name="code" language="xml">
<?xml version="1.0" encoding="utf-8" ?>
<company id="pt" name="Pearl Technology" description="software, IT support, and security solutions">
  <services count="5">
    <service id="appdev" name="Application Development" description="custom .NET software solutions" cost="350">
<products count="4">
<product id="biztlk" name="BizTalk Server" description="enterprise service bus"></product>
<product id="shrpnt" name="SharePoint Server" description="portal collaboration and Enterprise search"></product>
<product id="sqlsrv" name="SQL Server" description="relation database management system"></product>
<product id="iissrv" name="IIS" description="web application server"></product>
      </products>
    </service>
</services>
</company>
</pre>
<p>We want to now search for all services that match the given product name &#8220;Sharepoint&#8221;. Our first approach is to do the traditional XPath workflow using the XmlDocument class. Here is the snippet.</p>
<pre name="code" language="csharp">
             string searchKey = "Sharepoint"; // search string to find in product name

            // retrieve and load source XML document from output directory
            XmlDocument businessXML = new XmlDocument();
            businessXML.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "business.xml"));

            // parse using strictly XPath (could also use confusing translate function - but needs repeated for each call)
            string xPath = string.Format("/company/services/service[products/product[contains(@name,'{0}')]]", searchKey);
            var services = businessXML.SelectNodes(xPath);
            if (services != null &#038;&#038; services.Count > 0)
            {
                foreach (XmlNode node in services)
                    Console.WriteLine("{0}\n{1}", node.OuterXml, new string('-', 70));
            }
            else
                Console.WriteLine("Could not find search key: {0} using XPath", searchKey);
</pre>
<p>The results that come back demonstrate that we are not matching all possibilities. Pearl provides SharePoint services for both <a href="http://www.pearltechnology.com/services/application-development/app-dev-services/servers">Application Development</a> and <a href="http://www.pearltechnology.com/services/microsoft-services/products-expertise/microsoft-office-sharepoint-server-moss">Microsoft Services</a>. The problem with our basic XPath search is that it is not case agnostic. We have variations of &#8220;Sharepoint&#8221; in our data &#8211; <i>Sharepoint and SharePoint</i>. In order to capture all variations, we now tackle the same problem with LINQ to SQL and extension methods.</p>
<p>Below we see the use of XDocument in place of XmlDocument, now replaced by parsing the original XmlDocument source. We also include a reference to <i>System.Xml.XPath</i> namespace to enable XPath-support within the LINQ to XML statements (using <i>XPathSelectElements</i>). Our LINQ statement is using a similar XPath as before with the exception of the filtering which is now handled by the lambda function <strong>HasValue(searchkey)</strong>.</p>
<pre name="code" language="csharp">
            // simple parse using LINQ to XML and XPath for navigation (easier to understand)
            XElement bizXML = XDocument.Parse(businessXML.OuterXml).Root;
            var items = (from service in bizXML.XPathSelectElements("/company/services/service/products/product")
                         where service.Attributes("name").HasValue(searchKey)
                         select service.Parent.Parent);

            if (items != null &#038;&#038; items.Count() > 0)
            {
                foreach (XElement node in items)
                    Console.WriteLine(string.Format("{0}\n{1}", node.ToString(), new string('-', 70)));
            }
            else
                Console.WriteLine("Could not find search key: {0} using LINQ to XML", searchKey);
</pre>
<p>The lambda function (HasValue) exists in a utility class XMLSearchExtensions &#8211; satisfying our primary goal to create a reusable case agnostic search routine. The extension methods are filtering on XAttributes, but could easily be extended to cover enumerable XElements as well. </p>
<pre name="code" language="csharp">
    /// <summary>
    /// XML Extension Methods for parsing XML using case insensitivity
    /// </summary>
    public static class XMLSearchExtensions
    {
        /// <summary>
        /// Handles case when attribute is missing
        /// </summary>
        public static bool HasValue(this IEnumerable<XAttribute> nodes, string searchKey)
        {
            return nodes.Any(GetValue(searchKey));
        }
        /// <summary>
        /// Search Expression using Case Insensitve Compare (resusable search filter)
        /// </summary>
        public static Func<XAttribute, bool> GetValue(string searchKey)
        {
            return name => name.Value.ToLowerInvariant().Contains(searchKey.ToLowerInvariant());
        }
    }
</pre>
<p>The <strong>HasValue</strong> extension uses the <a href="http://msdn.microsoft.com/en-us/library/bb337697.aspx">Any</a> LINQ command to safely ignore cases when the attribute may not be present in the current enumerable item. This adds greater flexibility if you cannot control the XML source. The <strong>GetValue</strong> delegate is called for each item and by comparing each element using the <i>Contains</i> we can easily support case insensitive filtering with ease. We could also extend this library to support Equals, StartsWith, or other behaviors you want to centrally control.</p>
<p>The entire solution can be <a href="http://blog.pearltechnology.com/wp-content/uploads/2011/03/CaseInsensitiveXPathQuery.zip#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">downloaded here</a>. This exercise demonstrates the importance and sophistication that LINQ-powered applications can provide when working with XML.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/case-insensitive-xml-search/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Locating a Test Site &#8211; No Dates Found</title>
		<link>http://blog.pearltechnology.com/locating-a-test-site-no-dates-found/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/locating-a-test-site-no-dates-found/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 15:40:00 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[certification]]></category>
		<category><![CDATA[microsoft gold partner]]></category>
		<category><![CDATA[microsoft partner]]></category>
		<category><![CDATA[pdi]]></category>
		<category><![CDATA[pinpoint]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=972</guid>
		<description><![CDATA[Being Microsoft Gold Partners we have a strong push to keep ourselves abreast with the latest Microsoft technology offerings. One way we prove our expertise of a given knowledge domain is by taking Microsoft Certification exams. We use Prometric to schedule our Microsoft tests with our local testing center &#8211; ICC&#8217;s Professional Development Institute (PDI). [...]]]></description>
			<content:encoded><![CDATA[<p>Being <a href="http://pinpoint.microsoft.com/en-US/PartnerDetails.aspx?PartnerId=4295809996">Microsoft Gold Partners</a> we have a strong push to keep ourselves abreast with the latest Microsoft technology offerings. One way we prove our expertise of a given knowledge domain is by taking <a href="http://www.microsoft.com/learning/en/us/certification/cert-default.aspx">Microsoft Certification exams</a>. We use <a href="http://prometric.com/Microsoft">Prometric</a> to schedule our Microsoft tests with our local testing center &#8211; ICC&#8217;s <a href="http://www.icc.edu/pdi/">Professional Development Institute (PDI)</a>. However, we began noticing that some of the newer Microsoft tests were not available to be scheduled at PDI &#8211; forcing us to travel outside our local region.</p>
<p>Prometric would provide this error message when trying to schedule the certification exams &#8211; <em>&#8220;No Dates Found &#8211; We&#8217;re sorry. We couldn&#8217;t find any Exam Dates based on the selections you&#8217;ve made. Please try another Test Center&#8221;.</em></p>
<p>After contacting PDI, we discovered that some testing centers may limit their hours of operation and cannot accommodate the longer testing time slots. In this case, PDI was limiting their tests to 3 hours, yet some of the newer Microsoft exams are 3.5+ hours. Thankfully the testing center was willing to change their testing hours to allow us to keep local &#8211; thus saving us travel costs, time, and convenience. Kudos to PDI for their help! Hopefully this will someone else who may have experienced this issue with the Prometric exam scheduling system.</p>
<p>So how long can Microsoft keep us captive in the testing center? According to Microsoft, the maximum test duration is <a href="http://www.microsoft.com/learning/en/us/certification/exam-prep.aspx#tab2">4 hours</a>. Thank goodness for time limits! Now back to the studying&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/locating-a-test-site-no-dates-found/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Indexing PDF Documents using SQL Server</title>
		<link>http://blog.pearltechnology.com/indexing-pdf-documents-using-sql-server/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/indexing-pdf-documents-using-sql-server/#comments</comments>
		<pubDate>Mon, 03 Jan 2011 14:50:45 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Filestream]]></category>
		<category><![CDATA[Full-Text Index]]></category>
		<category><![CDATA[PDF Indexing]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=885</guid>
		<description><![CDATA[SQL Server 2008 now makes it easier than ever to index your stored content. Many businesses are using SQL Server to save important documents and be able to retrieve them based upon their content. Unfortunately, certain file formats are tougher to index than others due to how their files are physically structured or encoded. In [...]]]></description>
			<content:encoded><![CDATA[<p>SQL Server 2008 now makes it easier than ever to index your stored content. Many businesses are using SQL Server to save important documents and be able to retrieve them based upon their content. Unfortunately, certain file formats are tougher to index than others due to how their files are physically structured or encoded. In this article, we will describe how SQL Server can support Full-Text Indexing for the PDF document format.</p>
<p>The first step to enabling PDF indexing is to ensure that the Full-Text Index Daemon service is running. This service is responsible for working with 3rd party iFilters to extract textual content from non-Microsoft formats (<i>PDF iFilter in this case</i>).</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/12/sql-server-pdf-indexing-service.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img src="http://blog.pearltechnology.com/wp-content/uploads/2010/12/sql-server-pdf-indexing-service-300x32.png" alt="sql server pdf indexing - service" title="sql server pdf indexing - service" width="300" height="32" class="aligncenter size-medium wp-image-886" /></a><br />
</center></p>
<p>Once we&#8217;ve verified that the Filter Index is enabled, we need to install the <a href="http://www.adobe.com/support/downloads/detail.jsp?ftpID=4025">PDF iFilter </a> from Adobe. Depending on which SQL Edition you have, you need to download the x86 or x64 version of the PDF iFilter. </p>
<p>After the iFilter has been installed, you need to <a href="http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/69535dbc-c7ef-402d-a347-d3d3e4860d72/#405d534f-1a4a-493b-ba68-77370bc28f7d">setup a system Environment Path variable</a> which helps SQL locate the newly installed indexing filter. Below we show that the PATH variable has been modified to include our installation path of the Adobe iFilter (<i>C:\Program Files\Adobe\Adobe PDF iFilter 9 for 64-bit platforms\bin\</i> in our case)</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/12/sql-server-pdf-indexing-environment-variable.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img src="http://blog.pearltechnology.com/wp-content/uploads/2010/12/sql-server-pdf-indexing-environment-variable-300x161.png" alt="sql server pdf indexing - environment variable" title="sql server pdf indexing - environment variable" width="300" height="161" class="aligncenter size-medium wp-image-888" /></a><br />
</center></p>
<p>After we have the Adobe iFilter configured, we can configure our SQL Database to make use of this new component. Our next step is to tell SQL Server we have a new iFilter that needs to be registered. After running the commands below, you should see a list of the active iFilters appear in SSMS &#8211; you should verify that you see PDF listed.</p>
<pre name="code" language="sql">
-- reloading filters/3rd party components
EXEC sp_fulltext_service @action='load_os_resources', @value=1; -- update os resources
EXEC sp_fulltext_service 'verify_signature', 0 -- don't verify signatures
EXEC sp_fulltext_service 'update_languages'; -- update language list
EXEC sp_fulltext_service 'restart_all_fdhosts'; -- restart daemon
EXEC sp_help_fulltext_system_components 'filter'; -- view active filters
</pre>
<p>SQL Server is now prepared to handle PDF content, however we need to create the Full-Text Catalog and Index to enable query support. We are assuming you already have a VARBINARY(MAX) field setup &#8211; hopefully backed using a <a href="http://technet.microsoft.com/en-us/library/bb933993.aspx">FILESTREAM</a>. If your SQL Table stores multiple file formats, you should also create a column in your table that tells the indexer what iFilter it should use to index the content (<i>the TYPE COLUMN indicator</i>). The following SQL statements will create the SQL Catalog (ftCatalog), Full-Text Index with system stop list, and a file extension column for the CardImages table that has a BLOB field ThumbImage.</p>
<pre name="code" language="sql">
-- creatae full-text catalog
CREATE FULLTEXT CATALOG ftCatalog AS DEFAULT

-- create file extension column
ALTER TABLE dbo.CardImages add FileExtension varchar(4) not null default('pdf') 

-- create fulltext index
CREATE FULLTEXT INDEX  ON dbo.CardImages (ThumbImage TYPE COLUMN FileExtension LANGUAGE 'English')
KEY INDEX PK_CardImages on ftCatalog -- unique index
WITH STOPLIST = SYSTEM -- default system index
</pre>
<p>Once we have the index defined for our SQL table, we can check the index status or re-index using the following commands. If our indexing status value is &#8216;0&#8242;, SQL Server is ready to respond to PDF searches.</p>
<pre name="code" language="sql">
ALTER FULLTEXT INDEX ON dbo.CardImages START FULL POPULATION; -- re-index
select FULLTEXTCATALOGPROPERTY('ftCatalog', 'PopulateStatus') -- 1 indicates running
</pre>
<p>To issue a standard SQL search queries we can use CONTAINS or FREETEXT depending on what our intentions are. Below are some examples on how to query the newly generated index. </p>
<pre name="code" language="sql">
-- contains search
select * from CardImages where contains(ThumbImage, 'pearl technology rocks')

-- freetext search - searches for meaning of words
select * from CardImages where freetext(ThumbImage, 'cardinals')
</pre>
<p>One of the issues that this SQL Server search approach does not solve is providing context around your search terms (<i>&#8216;pearl technology rocks&#8217; and &#8216;cardinals&#8217; above.</i>). We will be reviewing this gap in the future and hopefully providing some insights into how we can find the paragraph or sentence where the search term was located in the text &#8211; instead of merely returning the matching rows. </p>
<p>There were many sites that helped in troubleshooting issues during this process, but StackOverflow has some <a href="http://stackoverflow.com/questions/272694/using-full-text-search-with-pdf-files-in-sql-server-2005<br />
">good steps to follow</a> if you run into any trouble.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/indexing-pdf-documents-using-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX-aware Session Expiry in ASP.NET MVC</title>
		<link>http://blog.pearltechnology.com/ajax-aware-session-expiry-in-asp-net-mvc/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/ajax-aware-session-expiry-in-asp-net-mvc/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 14:48:31 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[MS AJAX]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Session State]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=811</guid>
		<description><![CDATA[When you build ASP.NET MVC applications that require Forms-based or Windows authentication (e.g. login.aspx) and ASP.NET Session State, you need to make sure you properly handle redirecting the application to the appropriate login page when the users session has expired. This becomes more of a challenge when you start building layers of the application using [...]]]></description>
			<content:encoded><![CDATA[<p>When you build ASP.NET MVC applications that require Forms-based or Windows authentication (<em>e.g. login.aspx</em>) and ASP.NET Session State, you need to make sure you properly handle redirecting the application to the appropriate login page when the users session has expired. This becomes more of a challenge when you start building layers of the application using AJAX for partial page rendering.</p>
<p>There are many approaches here, but we have discovered one that works regardless of which AJAX mechanism you are building upon (MS AJAX, jQuery, XMLHttpRequest, etc.). </p>
<p>The approach we took is to add a tag block to the <strong>Login.aspx</strong> page. This marker will be used to tell us when we&#8217;ve been redirected to the Login.aspx page from an AJAX request sent to IIS. Here is a sample snippet that you could use.</p>
<pre name="code" language="html">
<input type="hidden" id="ajaxexpiry" />
</pre>
<p>After you&#8217;ve added this token to your login page, you can begin checking for the existence of this tag when you receive AJAX responses back from the application server. Here is how we implemented it.</p>
<pre name="code" language="javascript">
// tell MS AJAX request manager that we have to check for valid login session (Ajax.ActionLink)
Sys.Net.WebRequestManager.add_completedRequest(function (result) {
    IsValidSession(result.get_responseData()); // capture returned ajax response data
});

// attach all ajax completion requests for session review
$('*').ajaxComplete(function (e, xhr, settings) {
    IsValidSession(xhr.responseText);
});

/// Checks for invalid session [JQUERY/MSAJAX]
function IsValidSession(response_data) {
    if (response_data.match(/id="ajaxexpiry"/gi) != null)  // pattern to locate
        window.location.href = "/"; ; // redirect matching to login page
}
</pre>
<p>The code above is made up of three separate blocks. The first block handles MS AJAX integration. We leverage the <a href="http://msdn.microsoft.com/en-us/library/bb397435.aspx">WebRequestManager&#8217;s</a> completed request handler in the <em>MicrosoftAjax.js</em> library. In the next section we integrate the jQuery AJAX framework by using the <a href="http://api.jquery.com/ajaxComplete/">ajaxComplete()</a> method handler. </p>
<p>Once we&#8217;ve collected the response data from the AJAX requests (MS AJAX or jQuery), we can process the text by matching on the tag pattern (id=&#8221;ajaxexpiry&#8221;) we created earlier. This is done in the IsValidSession routine called by each AJAX interface above. If we discover a match on our token, we will redirect the user to the login page. In our example, the login page is at the root of the domain, but in your instance, you may need to customize accordingly.</p>
<p>Another possible solution to this issue is to use a <a href="http://stackoverflow.com/questions/2319020/mvc-with-jquery-handling-session-expire">periodic polling routine</a> to request content from the server. However, this approach puts additional load on your application server unnecessarily. We chose to do the session checking locally, and check for session expire only when necessary on the client (<em>thus no impact to server resources</em>).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/ajax-aware-session-expiry-in-asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2008 &#8211; Modal Dialog Active</title>
		<link>http://blog.pearltechnology.com/visual-studio-2008-modal-dialog-active/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/visual-studio-2008-modal-dialog-active/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 16:11:54 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Team Explorer]]></category>
		<category><![CDATA[Team Foundation Server]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[visual studio 2008]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=795</guid>
		<description><![CDATA[It is frustrating when the tools we use don&#8217;t do what we expect. Take this one for example, from the Visual Studio 2008 IDE.



When trying to check in code artifacts into TFS (Team Foundation Server), you receive this cryptic error message (Microsoft Visual Studio cannot shut down because a modal dialog is active. Close the [...]]]></description>
			<content:encoded><![CDATA[<p>It is frustrating when the tools we use don&#8217;t do what we expect. Take this one for example, from the Visual Studio 2008 IDE.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/10/modal-dialog-active-tfs.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img src="http://blog.pearltechnology.com/wp-content/uploads/2010/10/modal-dialog-active-tfs-300x96.png" alt="modal dialog active tfs" title="modal dialog active tfs" width="300" height="96" class="aligncenter size-medium wp-image-796" /></a><br />
</center></p>
<p>When trying to check in code artifacts into TFS (Team Foundation Server), you receive this cryptic error message (<i>Microsoft Visual Studio cannot shut down because a modal dialog is active. Close the active dialog and try again</i>). </p>
<p>It turns out that the <a href="http://blogs.msdn.com/b/jasonba/archive/2009/02/10/make-sure-you-reinstall-vs-2008-sp1-after-installing-team-explorer.aspx">order in which you install Team Explorer</a> matters. If you apply Visual Studio 2008 SP1 before installing the TFS Client (Team Explorer), you will receive this error during code check-in. The IDE will freeze and you will have to force-close the application (<i>losing all unsaved work</i>).</p>
<p>The fix is simple &#8211; just <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=fbee1648-7106-44a7-9649-6d9f6d58056e&#038;DisplayLang=en">reinstall VS2008 SP1</a> and you&#8217;re back in business.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/visual-studio-2008-modal-dialog-active/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deploying MVC 2 Applications using .NET 4.0</title>
		<link>http://blog.pearltechnology.com/deploying-mvc-2-applications-using-net-4-0/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.pearltechnology.com/deploying-mvc-2-applications-using-net-4-0/#comments</comments>
		<pubDate>Sun, 26 Sep 2010 07:28:24 +0000</pubDate>
		<dc:creator>AaronH</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[.NET 4.0]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>

		<guid isPermaLink="false">http://blog.pearltechnology.com/?p=742</guid>
		<description><![CDATA[We just began working with the new MVC 2 framework that is now included in Visual Studio 2010. MVC 2 leverages .NET 4.0 and is a commonly used design pattern in other developer communities. 
To deploy MVC 2 applications, you just right click on your visual studio project and click &#8220;Publish&#8221;. 



A wizard pops open [...]]]></description>
			<content:encoded><![CDATA[<p>We just began working with the new <a href="http://www.asp.net/mvc">MVC 2</a> framework that is now included in Visual Studio 2010. MVC 2 leverages .NET 4.0 and is a commonly used design pattern in other developer communities. </p>
<p>To deploy MVC 2 applications, you just right click on your visual studio project and click &#8220;Publish&#8221;. </p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/05/mvc-publish-menu.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img src="http://blog.pearltechnology.com/wp-content/uploads/2010/05/mvc-publish-menu-300x156.png" alt="mvc publish menu" title="mvc publish menu" width="300" height="156" class="aligncenter size-medium wp-image-744" /></a><br />
</center></p>
<p>A wizard pops open and allows you to assign where you want to publish your site to. In our case, we just used the filesystem so we could cleanup the folders prior to copying them to the server.</p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/05/mvc-publish-wizard.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img src="http://blog.pearltechnology.com/wp-content/uploads/2010/05/mvc-publish-wizard-300x283.png" alt="mvc publish wizard" title="mvc publish wizard" width="300" height="283" class="aligncenter size-medium wp-image-745" /></a><br />
</center></p>
<p>The first gotcha we ran into when deploying our MVC application was not having .NET 4.0 installed on the Windows Server 2008 standard. A quick 50MB download of the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&#038;displaylang=en">.NET 4.0 Redistributable</a> from Microsoft and a brief install and reboot corrected this issue. </p>
<p>After reboot, we created our website in IIS and assigned the physical directory path. When we tried browsing to the website we discovered this error message &#8211; &#8220;Unrecognized attribute targetFramework&#8221; from the web.config. </p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/05/mvc-targetFramework-error.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img src="http://blog.pearltechnology.com/wp-content/uploads/2010/05/mvc-targetFramework-error-300x156.png" alt="mvc targetFramework error" title="mvc targetFramework error" width="300" height="156" class="aligncenter size-medium wp-image-753" /></a><br />
</center></p>
<p>With help from <a href="http://elegantcode.com/2009/11/10/unrecognized-attribute-targetframework-asp-net-4-0/">this article</a>, we correctly assigned the Application Pool to run as a .NET 4.0 application. </p>
<p><center><br />
<a href="http://blog.pearltechnology.com/wp-content/uploads/2010/05/mvc-app-pool-setup.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img src="http://blog.pearltechnology.com/wp-content/uploads/2010/05/mvc-app-pool-setup-273x300.png" alt="mvc app pool setup" title="mvc app pool setup" width="273" height="300" class="aligncenter size-medium wp-image-747" /></a><br />
</center></p>
<p>With the recent release of .NET 4.0, a new CLR was created to handle the dynamic languages integration. Previously, the only CLR&#8217;s available for ASP.NET applications were .NET 1.1 and .NET 2.0. With .NET 4.0, we now have a new target framework to be aware of.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pearltechnology.com/deploying-mvc-2-applications-using-net-4-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
	</channel>
</rss>

